Files
orca/mobile/scripts/start-expo.mjs
T
Jinjing 8a39450b18 refs/heads/handle-mobile-pull-request-issues (#6598)
* 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.
2026-06-28 00:58:17 -07:00

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)
})