mirror of
https://github.com/stablyai/orca.git
synced 2026-11-13 17:37:40 +00:00
* refactor(tooling): organize test runtime and maintenance owners * test(tooling): preserve relocated runtime fixture dependency edges * refactor(tooling): preserve xterm routing owner checks * ci(tooling): include routing owner in sparse checkout * test(tooling): preserve copied workflow dependency closures * fix(tooling): normalize hashed JSON assets in release parity * fix(tooling): distinguish asset aliases from literal references * fix(tooling): frame normalized asset reference payloads * fix(tooling): normalize decoded JSON asset references * refactor(tooling): organize build, CI and release owners * fix(tooling): align moved generator and workflow path contracts * fix(tooling): update generated plugin bundle owner banners * test(tooling): create relocated mobile verifier fixture directories * test(tooling): copy headless detector dependency closure * test(tooling): align native batch policy fixtures with owner path * fix(tooling): link moved reliability command to historical evidence * fix(tooling): preserve nested sandbox owners and canonical guide source * fix(tooling): target release version owners in checkout fixture
70 lines
2.3 KiB
JavaScript
Executable File
70 lines
2.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
import { spawnSync } from 'node:child_process'
|
|
import { accessSync, constants, existsSync, realpathSync, statSync } from 'node:fs'
|
|
import path from 'node:path'
|
|
import { prepareDevCliTerminalWrappers } from './dev-cli-terminal-wrapper.mjs'
|
|
import { resolveDevCliUserDataPath } from './development/instance-isolation/dev-instance-isolation.mjs'
|
|
|
|
const scriptPath = realpathSync(import.meta.filename)
|
|
const scriptDir = path.dirname(scriptPath)
|
|
const repoRoot = path.resolve(scriptDir, '..', '..')
|
|
const cliEntry =
|
|
process.env.ORCA_DEV_CLI_ENTRY_PATH ?? path.join(repoRoot, 'out', 'cli', 'index.js')
|
|
|
|
if (!existsSync(cliEntry)) {
|
|
console.error("orca-dev: CLI not built yet. Run 'pnpm run build:cli' first.")
|
|
process.exit(1)
|
|
}
|
|
|
|
// Why: target the profile this checkout's `pnpm dev` uses (per-worktree in linked worktrees).
|
|
process.env.ORCA_USER_DATA_PATH = resolveDevCliUserDataPath({ repoRoot })
|
|
// Why: custom dev profiles do not necessarily contain "orca-dev" in their path; carry explicit provenance into the CLI.
|
|
process.env.ORCA_DEV_CLI_INVOCATION = '1'
|
|
|
|
const electronExecutable = getElectronExecutable()
|
|
if (!process.env.ORCA_APP_EXECUTABLE && isRunnableFile(electronExecutable)) {
|
|
process.env.ORCA_APP_EXECUTABLE = electronExecutable
|
|
process.env.ORCA_APP_EXECUTABLE_NEEDS_APP_ROOT = '1'
|
|
}
|
|
|
|
// Why: headless `orca-dev serve` skips the Electron dev runner that normally installs terminal CLI shims.
|
|
prepareDevCliTerminalWrappers({
|
|
repoRoot,
|
|
userDataPath: process.env.ORCA_USER_DATA_PATH,
|
|
electronExecutable: process.env.ORCA_APP_EXECUTABLE ?? electronExecutable
|
|
})
|
|
|
|
const result = spawnSync(process.execPath, [cliEntry, ...process.argv.slice(2)], {
|
|
stdio: 'inherit',
|
|
env: process.env
|
|
})
|
|
|
|
if (result.signal) {
|
|
process.kill(process.pid, result.signal)
|
|
}
|
|
process.exit(result.status ?? (result.error ? 1 : 0))
|
|
|
|
function getElectronExecutable() {
|
|
if (process.platform === 'win32') {
|
|
return path.join(repoRoot, 'node_modules', 'electron', 'dist', 'electron.exe')
|
|
}
|
|
return path.join(repoRoot, 'node_modules', '.bin', 'electron')
|
|
}
|
|
|
|
function isRunnableFile(candidate) {
|
|
try {
|
|
const stats = statSync(candidate)
|
|
if (!stats.isFile()) {
|
|
return false
|
|
}
|
|
if (process.platform === 'win32') {
|
|
return true
|
|
}
|
|
accessSync(candidate, constants.X_OK)
|
|
return true
|
|
} catch {
|
|
return false
|
|
}
|
|
}
|