hermes-agent/ui-tui/src/lib/externalCli.ts
Brooklyn Nicholson a82097e7a2 feat(tui): /model and /setup slash commands with in-place CLI handoff
- hermes-ink: export `withInkSuspended()` + `useExternalProcess()` that
  pause/resume Ink around an arbitrary external process (built on the
  existing enterAlternateScreen/exitAlternateScreen plumbing)
- tui: `launchHermesCommand(args)` spawns the `hermes` binary with
  inherited stdio, with `HERMES_BIN` override for non-standard launches
- tui: `/model` and `/setup` slash commands invoke the CLI wizards
  in-place, then re-preflight `setup.status` and auto-start a session on
  success — no more exit-and-relaunch to finish first-run setup
- setup panel now advertises those slashes instead of only pointing
  users back at the shell
2026-04-17 10:58:18 -05:00

16 lines
498 B
TypeScript

import { spawn } from 'node:child_process'
export interface LaunchResult {
code: null | number
error?: string
}
const resolveHermesBin = () => process.env.HERMES_BIN?.trim() || 'hermes'
export const launchHermesCommand = (args: string[]): Promise<LaunchResult> =>
new Promise(resolve => {
const child = spawn(resolveHermesBin(), args, { stdio: 'inherit' })
child.on('error', err => resolve({ code: null, error: err.message }))
child.on('exit', code => resolve({ code }))
})