mirror of
https://github.com/stablyai/orca.git
synced 2026-09-23 00:02:29 +00:00
* feat(mobile): add commit failure recovery panel with AI fix action - Surfaces a "Commit failed" panel with a one-tap AI fix button when a git commit fails in the source control view or PR creation flow - Detects commit failures specifically during the committing progress step and captures staged entries and commit message for context - Extracts commit failure summary and prompt logic into `src/shared/source-control-commit-failure.ts` and PR checks prompt into `src/shared/pr-checks-fix-prompt.ts` so both desktop and mobile share the same implementations - Adds auto-find of an available Metro port starting from 8081 and extracts expo CLI bootstrap into `mobile-expo-cli.mjs` shared by `start-emulator` and a new `start-expo.mjs` wrapper * Share source-control AI prompts and simplify mobile PR actions - Extract conflict, check-fixing, and commit-failure prompt builders to shared modules for reuse by both desktop and mobile. - Configure Metro in the mobile package to watch and bundle modules from the repository-root shared directory. - Remove the desktop-style merge method picker from the mobile PR actions panel, opting to use repository defaults automatically. - Refactor mobile hosted review creation and git preparation logic into dedicated helper files.
51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { spawn } from 'node:child_process'
|
|
import path from 'node:path'
|
|
import process from 'node:process'
|
|
import { fileURLToPath } from 'node:url'
|
|
import { ensureMobileExpoCli } from './mobile-expo-cli.mjs'
|
|
|
|
const scriptDir = path.dirname(fileURLToPath(import.meta.url))
|
|
const mobileDir = path.resolve(scriptDir, '..')
|
|
|
|
function pnpmCommand(args) {
|
|
return {
|
|
command: 'pnpm',
|
|
args,
|
|
shell: process.platform === 'win32'
|
|
}
|
|
}
|
|
|
|
function runPnpm(args) {
|
|
const pnpm = pnpmCommand(args)
|
|
return new Promise((resolve, reject) => {
|
|
const child = spawn(pnpm.command, pnpm.args, {
|
|
cwd: mobileDir,
|
|
env: process.env,
|
|
shell: pnpm.shell,
|
|
stdio: 'inherit'
|
|
})
|
|
child.on('error', reject)
|
|
child.on('exit', (code, signal) => {
|
|
if (signal) {
|
|
reject(new Error(`pnpm ${args.join(' ')} was terminated by ${signal}`))
|
|
} else if (code === 0) {
|
|
resolve()
|
|
} else {
|
|
reject(new Error(`pnpm ${args.join(' ')} exited with code ${code}`))
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function main() {
|
|
await ensureMobileExpoCli(mobileDir)
|
|
await runPnpm(['exec', 'expo', 'start', ...process.argv.slice(2)])
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(`[start] ${error.message}`)
|
|
process.exit(1)
|
|
})
|