diff --git a/.gitignore b/.gitignore index 5ef6a52..e3a7542 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +.env*.local diff --git a/ORCA_REFERENCE.md b/ORCA_REFERENCE.md index a953c36..fc62f38 100644 --- a/ORCA_REFERENCE.md +++ b/ORCA_REFERENCE.md @@ -24,7 +24,7 @@ orca resume --run --codex-only --codex-effort high orca cancel --last orca cancel --run -orca answer "yes, use migration A" +orca answer "yes, use migration A" # answer and resume a run in waiting_for_answer ``` ## PR Workflow @@ -57,6 +57,7 @@ Load order (later overrides earlier): - `--codex-only` - `--codex-effort ` - `--on-milestone ` +- `--on-question ` - `--on-task-complete ` - `--on-task-fail ` - `--on-invalid-plan ` @@ -76,7 +77,7 @@ Load order (later overrides earlier): `orca cancel`: `--run `, `--last`, `--config ` -`orca answer`: `[run-id] [answer]`, `--run ` +`orca answer`: `[run-id] [answer]`; use `--run ` when selecting the run non-positionally `orca list`: `--config ` @@ -97,6 +98,7 @@ Load order (later overrides earlier): Hook names: - `onMilestone` +- `onQuestion` - `onTaskComplete` - `onTaskFail` - `onInvalidPlan` @@ -109,6 +111,7 @@ Hook contract: - `context` is `{ cwd, pid, invokedAt }`. - Command hooks (`hookCommands` and CLI `--on-*`) receive JSON via stdin. - No `ORCA_*` hook payload env-var framing. +- `onQuestion` fires when Codex requests user input and includes `requestId`, `threadId`, `turnId`, `itemId`, and `questions`. - `onError` fires for run errors and hook-dispatch/command-hook failures. ## OrcaConfig Reference (complete) @@ -118,7 +121,7 @@ Top-level: `executor`, `openaiApiKey`, `runsDir`, `sessionLogs`, `skills`, `maxR `maxRetries` is an accepted OrcaConfig field; current planner-generated task retry limits are still fixed by task graph contracts. -`codex.*`: `enabled`, `model`, `effort`, `thinkingLevel.decision|planning|execution`, `command`, `timeoutMs`, `multiAgent`, `perCwdExtraUserRoots` +`codex.*`: `enabled`, `model`, `effort`, `thinkingLevel.decision|planning|review|execution`, `command`, `timeoutMs`, `multiAgent`, `perCwdExtraUserRoots` `pr.*`: `enabled`, `requireConfirmation` @@ -126,7 +129,7 @@ Top-level: `executor`, `openaiApiKey`, `runsDir`, `sessionLogs`, `skills`, `maxR `review.execution.*`: `enabled`, `maxCycles`, `onFindings`, `validator.auto`, `validator.commands`, `prompt` -Thinking-level controls use `codex.thinkingLevel.decision|planning|execution` with canonical values `low|medium|high|xhigh`. +Thinking-level controls use `codex.thinkingLevel.decision|planning|review|execution` with canonical values `low|medium|high|xhigh`. Codex app-server integration: at session startup Orca calls `skills/list` with `cwds: [cwd]`, `forceReload: true`, and optional `codex.perCwdExtraUserRoots` mappings. diff --git a/app/components/AgentSkillCard.tsx b/app/components/AgentSkillCard.tsx index 34a17d4..4269e15 100644 --- a/app/components/AgentSkillCard.tsx +++ b/app/components/AgentSkillCard.tsx @@ -20,7 +20,7 @@ orca "your task here" ## Key Commands orca Start a new run orca status [--last] Check run status -orca answer Answer a question the agent raised +orca answer Answer a question the agent raised orca resume [--last] Resume a paused run orca cancel [--last] Cancel a run orca pr create [--last] Open a PR for the run's branch @@ -30,11 +30,15 @@ export default { executor: "codex", // "codex" (default) sessionLogs: "./session-logs", hooks: { + onQuestion: async (event) => { + console.log(event.questions[0]?.question); + }, onComplete: async (event, context) => { console.log(event.message, context.cwd); }, }, hookCommands: { + onQuestion: "node ./scripts/on-question.mjs", onComplete: "node ./scripts/on-complete.mjs", }, codex: { multiAgent: false }, @@ -44,7 +48,7 @@ export default { - Codex executor requires ~/.codex/auth.json - Must be run inside a git repo - Run ID format: -- -- Use orca answer to unblock a waiting run`; +- Use orca answer to respond when status is waiting_for_answer (run resumes automatically)`; export function AgentSkillCard({ compact = false }: { compact?: boolean }) { return ( diff --git a/app/lib/pageMarkdown.ts b/app/lib/pageMarkdown.ts index 91e8b73..8826e06 100644 --- a/app/lib/pageMarkdown.ts +++ b/app/lib/pageMarkdown.ts @@ -24,7 +24,7 @@ orca resume --run --codex-only --codex-effort high orca cancel --last orca cancel --run -orca answer "yes, use migration A" +orca answer "yes, use migration A" # answer and resume a run in waiting_for_answer \`\`\` ## PR Workflow @@ -54,8 +54,10 @@ Load order (later overrides earlier): \`orca\` / \`orca run\`: - \`[task]\`, \`--task \`, \`-p, --prompt \` - \`--spec \`, \`--plan \`, \`--config \` +- \`--codex-only\` - \`--codex-effort \` - \`--on-milestone \` +- \`--on-question \` - \`--on-task-complete \` - \`--on-task-fail \` - \`--on-invalid-plan \` @@ -74,7 +76,7 @@ Load order (later overrides earlier): \`orca cancel\`: \`--run \`, \`--last\`, \`--config \` -\`orca answer\`: \`[run-id] [answer]\`, \`--run \` +\`orca answer\`: \`[run-id] [answer]\`; use \`--run \` when selecting the run non-positionally \`orca list\`: \`--config \` @@ -96,6 +98,7 @@ Load order (later overrides earlier): Hook names: - \`onMilestone\` +- \`onQuestion\` - \`onTaskComplete\` - \`onTaskFail\` - \`onInvalidPlan\` @@ -108,6 +111,7 @@ Hook contract: - \`context\` is \`{ cwd, pid, invokedAt }\`. - Command hooks (\`hookCommands\` and CLI \`--on-*\`) receive JSON via stdin. - No \`ORCA_*\` hook payload env-var framing. +- \`onQuestion\` fires when Codex requests user input and includes \`requestId\`, \`threadId\`, \`turnId\`, \`itemId\`, and \`questions\`. - \`onError\` fires for run errors and hook-dispatch/command-hook failures. ## OrcaConfig Reference (complete) @@ -116,7 +120,7 @@ Hook contract: \`maxRetries\` is an accepted OrcaConfig field; current planner-generated task retry limits are still fixed by task graph contracts. -\`codex.*\`: \`enabled\`, \`model\`, \`effort\`, \`thinkingLevel.decision|planning|execution\`, \`command\`, \`timeoutMs\`, \`multiAgent\`, \`perCwdExtraUserRoots\` +\`codex.*\`: \`enabled\`, \`model\`, \`effort\`, \`thinkingLevel.decision|planning|review|execution\`, \`command\`, \`timeoutMs\`, \`multiAgent\`, \`perCwdExtraUserRoots\` \`pr.*\`: \`enabled\`, \`requireConfirmation\` @@ -124,7 +128,7 @@ Hook contract: \`review.execution.*\`: \`enabled\`, \`maxCycles\`, \`onFindings\`, \`validator.auto\`, \`validator.commands\`, \`prompt\` -Thinking-level controls use \`codex.thinkingLevel.decision|planning|execution\` with canonical values \`low|medium|high|xhigh\`. +Thinking-level controls use \`codex.thinkingLevel.decision|planning|review|execution\` with canonical values \`low|medium|high|xhigh\`. Codex app-server integration: at session startup Orca calls \`skills/list\` with \`cwds: [cwd]\`, \`forceReload: true\`, and optional \`codex.perCwdExtraUserRoots\` mappings. diff --git a/app/page.tsx b/app/page.tsx index 4c67b8f..f87f276 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -474,6 +474,10 @@ orca --plan ./specs/feature.md`} flag="--on-milestone " desc="Shell command to run on each milestone" /> + @@ -1072,7 +1076,7 @@ export default defineOrcaConfig({ /> @@ -1088,14 +1092,14 @@ export default defineOrcaConfig({

Thinking-level controls are explicit: use - - {" codex.thinkingLevel.decision|planning|execution "} - {" "} + + {" codex.thinkingLevel.decision|planning|review|execution "} + {" "} with canonical values + # 2) Submit the answer -orca answer "yes, use migration A" - -# 3) Continue execution -orca resume --run `} +orca answer "yes, use migration A"`} lang="shell" />

| null; + }>; + }; onTaskComplete: BaseHookEvent & { hook: "onTaskComplete"; taskId: string; taskName: string }; onTaskFail: BaseHookEvent & { hook: "onTaskFail"; taskId: string; taskName: string; error: string }; onInvalidPlan: BaseHookEvent & { hook: "onInvalidPlan"; error: string };