oh-my-codex 0.14.2 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +5 -5
- package/Cargo.toml +1 -1
- package/dist/cli/__tests__/cleanup.test.js +27 -0
- package/dist/cli/__tests__/cleanup.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +58 -1
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +63 -0
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +146 -1
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/cleanup.d.ts.map +1 -1
- package/dist/cli/cleanup.js +18 -2
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/codex-home.d.ts +8 -0
- package/dist/cli/codex-home.d.ts.map +1 -0
- package/dist/cli/codex-home.js +54 -0
- package/dist/cli/codex-home.js.map +1 -0
- package/dist/cli/explore.d.ts +1 -0
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +15 -6
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +1 -6
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -49
- package/dist/cli/index.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +44 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +59 -21
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/clawhip-event-contract.test.js +7 -0
- package/dist/hooks/__tests__/clawhip-event-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +17 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +87 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.js +8 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/events.test.js +6 -0
- package/dist/hooks/extensibility/__tests__/events.test.js.map +1 -1
- package/dist/hooks/extensibility/types.d.ts +1 -1
- package/dist/hooks/extensibility/types.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +3 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +11 -4
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +31 -15
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +22 -0
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/reconcile.d.ts +2 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +3 -2
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/tmux.d.ts +3 -2
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +11 -4
- package/dist/hud/tmux.js.map +1 -1
- package/dist/question/__tests__/deep-interview.test.js +58 -1
- package/dist/question/__tests__/deep-interview.test.js.map +1 -1
- package/dist/question/__tests__/renderer.test.js +282 -24
- package/dist/question/__tests__/renderer.test.js.map +1 -1
- package/dist/question/__tests__/state.test.js +27 -0
- package/dist/question/__tests__/state.test.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +129 -0
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/deep-interview.d.ts +1 -0
- package/dist/question/deep-interview.d.ts.map +1 -1
- package/dist/question/deep-interview.js +80 -2
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/question/renderer.d.ts +4 -1
- package/dist/question/renderer.d.ts.map +1 -1
- package/dist/question/renderer.js +101 -4
- package/dist/question/renderer.js.map +1 -1
- package/dist/question/state.js +1 -1
- package/dist/question/state.js.map +1 -1
- package/dist/question/ui.d.ts +3 -1
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +14 -6
- package/dist/question/ui.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +265 -3
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +47 -9
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +47 -0
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts +2 -0
- package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts.map +1 -0
- package/dist/scripts/notify-hook/__tests__/operational-events.test.js +24 -0
- package/dist/scripts/notify-hook/__tests__/operational-events.test.js.map +1 -0
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +9 -0
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/team/__tests__/events.test.js +25 -0
- package/dist/team/__tests__/events.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +8 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +293 -2
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +30 -0
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +60 -3
- package/dist/team/tmux-session.js.map +1 -1
- package/package.json +2 -2
- package/skills/deep-interview/SKILL.md +13 -2
- package/skills/ultrawork/SKILL.md +91 -59
- package/src/scripts/__tests__/codex-native-hook.test.ts +318 -3
- package/src/scripts/codex-native-hook.ts +49 -6
- package/src/scripts/codex-native-pre-post.ts +45 -0
- package/src/scripts/notify-hook/__tests__/operational-events.test.ts +24 -0
- package/src/scripts/notify-hook/team-dispatch.ts +9 -0
package/dist/question/ui.js
CHANGED
|
@@ -71,13 +71,18 @@ function buildAnswer(record, selections, otherText) {
|
|
|
71
71
|
selected_values: [selected.value],
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
function safeString(value) {
|
|
75
|
+
return typeof value === 'string' ? value : '';
|
|
76
|
+
}
|
|
77
|
+
function maybeInjectAnswer(record, answer, deps = {}) {
|
|
78
|
+
const env = deps.env ?? process.env;
|
|
79
|
+
const envTransport = safeString(env.OMX_QUESTION_RETURN_TRANSPORT).trim();
|
|
80
|
+
const target = record.renderer?.return_target ?? safeString(env.OMX_QUESTION_RETURN_TARGET).trim();
|
|
81
|
+
const transport = record.renderer?.return_transport ?? (envTransport === 'tmux-send-keys' ? envTransport : undefined);
|
|
77
82
|
if (!target || transport !== 'tmux-send-keys')
|
|
78
83
|
return;
|
|
79
84
|
try {
|
|
80
|
-
injectQuestionAnswerToPane(target, answer);
|
|
85
|
+
(deps.injectAnswerToPane ?? injectQuestionAnswerToPane)(target, answer);
|
|
81
86
|
}
|
|
82
87
|
catch {
|
|
83
88
|
// Best-effort continuation nudge only; stdout return path remains canonical.
|
|
@@ -310,8 +315,11 @@ export async function runQuestionUi(recordPath, deps = {}) {
|
|
|
310
315
|
otherText = await promptForOtherText(record.other_label, { input, output });
|
|
311
316
|
}
|
|
312
317
|
const answer = buildAnswer(record, selections, otherText);
|
|
313
|
-
await markQuestionAnswered(recordPath, answer);
|
|
314
|
-
maybeInjectAnswer(
|
|
318
|
+
const answeredRecord = await markQuestionAnswered(recordPath, answer);
|
|
319
|
+
maybeInjectAnswer(answeredRecord, answer, {
|
|
320
|
+
env: deps.env,
|
|
321
|
+
injectAnswerToPane: deps.injectAnswerToPane,
|
|
322
|
+
});
|
|
315
323
|
}
|
|
316
324
|
catch (error) {
|
|
317
325
|
await markQuestionTerminalError(recordPath, 'error', 'question_ui_failed', error instanceof Error ? error.message : String(error));
|
package/dist/question/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/question/ui.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/question/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,7 @@ const TEAM_ENV_KEYS = [
|
|
|
67
67
|
"OMX_TEAM_STATE_ROOT",
|
|
68
68
|
"OMX_TEAM_LEADER_CWD",
|
|
69
69
|
"OMX_SESSION_ID",
|
|
70
|
+
"TMUX_PANE",
|
|
70
71
|
];
|
|
71
72
|
const priorTeamEnv = new Map();
|
|
72
73
|
beforeEach(() => {
|
|
@@ -470,6 +471,31 @@ describe("codex native hook dispatch", () => {
|
|
|
470
471
|
await rm(cwd, { recursive: true, force: true });
|
|
471
472
|
}
|
|
472
473
|
});
|
|
474
|
+
it("adds ultrawork-specific activation guidance only for true ultrawork workflow activation", async () => {
|
|
475
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-ultrawork-routing-"));
|
|
476
|
+
try {
|
|
477
|
+
await mkdir(join(cwd, ".omx", "state"), { recursive: true });
|
|
478
|
+
const result = await dispatchCodexNativeHook({
|
|
479
|
+
hook_event_name: "UserPromptSubmit",
|
|
480
|
+
cwd,
|
|
481
|
+
session_id: "sess-ultrawork-msg",
|
|
482
|
+
thread_id: "thread-ultrawork-msg",
|
|
483
|
+
turn_id: "turn-ultrawork-msg",
|
|
484
|
+
prompt: "$ultrawork fan out the regression checks",
|
|
485
|
+
}, { cwd });
|
|
486
|
+
assert.equal(result.omxEventName, "keyword-detector");
|
|
487
|
+
assert.equal(result.skillState?.skill, "ultrawork");
|
|
488
|
+
const message = String(result.outputJson?.hookSpecificOutput?.additionalContext || "");
|
|
489
|
+
assert.match(message, /\$ultrawork" -> ultrawork/);
|
|
490
|
+
assert.match(message, /ground the task before editing/i);
|
|
491
|
+
assert.match(message, /define pass\/fail acceptance criteria/i);
|
|
492
|
+
assert.match(message, /direct-tool plus background evidence lanes/i);
|
|
493
|
+
assert.match(message, /Ralph owns persistence and the full verified-completion promise/i);
|
|
494
|
+
}
|
|
495
|
+
finally {
|
|
496
|
+
await rm(cwd, { recursive: true, force: true });
|
|
497
|
+
}
|
|
498
|
+
});
|
|
473
499
|
it("does not activate Ralph workflow state from a plain conversational mention", async () => {
|
|
474
500
|
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-ralph-plain-text-"));
|
|
475
501
|
try {
|
|
@@ -637,13 +663,48 @@ describe("codex native hook dispatch", () => {
|
|
|
637
663
|
assert.match(message, /do not fall back to `request_user_input` or plain-text questioning/i);
|
|
638
664
|
assert.match(message, /After starting `omx question` in a background terminal, wait for that terminal to finish and read the JSON answer before continuing the interview\./);
|
|
639
665
|
assert.match(message, /If bare `omx question` is unavailable in this reused session, use the current-session CLI bridge command:/);
|
|
640
|
-
assert.match(message,
|
|
666
|
+
assert.match(message, /'.+' '.+dist\/cli\/omx\.js' question/);
|
|
667
|
+
assert.doesNotMatch(message, /OMX_QUESTION_RETURN_PANE=/);
|
|
668
|
+
assert.doesNotMatch(message, /preserve the leader pane/i);
|
|
641
669
|
assert.match(message, /Stop remains blocked while a deep-interview question obligation is pending\./);
|
|
642
670
|
}
|
|
643
671
|
finally {
|
|
644
672
|
await rm(cwd, { recursive: true, force: true });
|
|
645
673
|
}
|
|
646
674
|
});
|
|
675
|
+
it("includes leader-pane preservation guidance when a pane hint is available", async () => {
|
|
676
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-deep-interview-pane-hint-"));
|
|
677
|
+
try {
|
|
678
|
+
const sessionId = "sess-deep-interview-pane-hint";
|
|
679
|
+
const sessionDir = join(cwd, ".omx", "state", "sessions", sessionId);
|
|
680
|
+
await mkdir(sessionDir, { recursive: true });
|
|
681
|
+
await writeJson(join(sessionDir, "deep-interview-state.json"), {
|
|
682
|
+
active: true,
|
|
683
|
+
mode: "deep-interview",
|
|
684
|
+
current_phase: "intent-first",
|
|
685
|
+
started_at: "2026-04-21T10:00:00.000Z",
|
|
686
|
+
updated_at: "2026-04-21T10:00:00.000Z",
|
|
687
|
+
tmux_pane_id: "%77",
|
|
688
|
+
});
|
|
689
|
+
const result = await dispatchCodexNativeHook({
|
|
690
|
+
hook_event_name: "UserPromptSubmit",
|
|
691
|
+
cwd,
|
|
692
|
+
session_id: sessionId,
|
|
693
|
+
thread_id: "thread-deep-interview-pane-hint",
|
|
694
|
+
turn_id: "turn-deep-interview-pane-hint",
|
|
695
|
+
prompt: "$deep-interview gather requirements",
|
|
696
|
+
}, { cwd });
|
|
697
|
+
assert.equal(result.omxEventName, "keyword-detector");
|
|
698
|
+
assert.equal(result.skillState?.skill, "deep-interview");
|
|
699
|
+
const message = String(result.outputJson?.hookSpecificOutput?.additionalContext || "");
|
|
700
|
+
assert.match(message, /OMX_QUESTION_RETURN_PANE='%77'/);
|
|
701
|
+
assert.match(message, /preserve the leader pane/i);
|
|
702
|
+
assert.match(message, /OMX_QUESTION_RETURN_PANE=%77/);
|
|
703
|
+
}
|
|
704
|
+
finally {
|
|
705
|
+
await rm(cwd, { recursive: true, force: true });
|
|
706
|
+
}
|
|
707
|
+
});
|
|
647
708
|
it("keeps bare keep-going continuation on the active ralph skill without resetting through generic keep-going routing", async () => {
|
|
648
709
|
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-ralph-bare-continuation-"));
|
|
649
710
|
try {
|
|
@@ -935,8 +996,8 @@ esac
|
|
|
935
996
|
}, { cwd });
|
|
936
997
|
assert.equal(result.omxEventName, "keyword-detector");
|
|
937
998
|
const tmuxCalls = await readFile(tmuxLog, "utf-8");
|
|
938
|
-
assert.match(tmuxCalls, /list-panes/);
|
|
939
|
-
assert.match(tmuxCalls, /split-window/);
|
|
999
|
+
assert.match(tmuxCalls, /list-panes -t %1 -F/);
|
|
1000
|
+
assert.match(tmuxCalls, /split-window -v -l 3 -d -t %1 -c/);
|
|
940
1001
|
assert.match(tmuxCalls, /resize-pane -t %9 -y 3/);
|
|
941
1002
|
assert.match(tmuxCalls, /dist\/cli\/omx\.js' hud --watch --preset=focused/);
|
|
942
1003
|
assert.doesNotMatch(tmuxCalls, /\/tmp\/codex-host-binary' hud --watch/);
|
|
@@ -959,6 +1020,75 @@ esac
|
|
|
959
1020
|
await rm(cwd, { recursive: true, force: true });
|
|
960
1021
|
}
|
|
961
1022
|
});
|
|
1023
|
+
it("blocks Bash omx question when no leader-pane return hint is preserved", async () => {
|
|
1024
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-pretool-question-enforce-"));
|
|
1025
|
+
try {
|
|
1026
|
+
const result = await dispatchCodexNativeHook({
|
|
1027
|
+
hook_event_name: "PreToolUse",
|
|
1028
|
+
cwd,
|
|
1029
|
+
tool_name: "Bash",
|
|
1030
|
+
tool_use_id: "tool-question-block",
|
|
1031
|
+
tool_input: { command: `omx question --json --input '{"question":"Q?","options":["A"],"allow_other":true}'` },
|
|
1032
|
+
}, { cwd });
|
|
1033
|
+
assert.equal(result.omxEventName, "pre-tool-use");
|
|
1034
|
+
assert.equal(result.outputJson?.decision, "block");
|
|
1035
|
+
assert.match(String(result.outputJson?.systemMessage || ""), /OMX_QUESTION_RETURN_PANE=\$TMUX_PANE/);
|
|
1036
|
+
}
|
|
1037
|
+
finally {
|
|
1038
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1039
|
+
}
|
|
1040
|
+
});
|
|
1041
|
+
it("allows Bash omx question when the command preserves the leader-pane return hint", async () => {
|
|
1042
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-pretool-question-allow-"));
|
|
1043
|
+
try {
|
|
1044
|
+
const result = await dispatchCodexNativeHook({
|
|
1045
|
+
hook_event_name: "PreToolUse",
|
|
1046
|
+
cwd,
|
|
1047
|
+
tool_name: "Bash",
|
|
1048
|
+
tool_use_id: "tool-question-allow",
|
|
1049
|
+
tool_input: { command: `OMX_QUESTION_RETURN_PANE=$TMUX_PANE omx question --json --input '{"question":"Q?","options":["A"],"allow_other":true}'` },
|
|
1050
|
+
}, { cwd });
|
|
1051
|
+
assert.equal(result.omxEventName, "pre-tool-use");
|
|
1052
|
+
assert.equal(result.outputJson, null);
|
|
1053
|
+
}
|
|
1054
|
+
finally {
|
|
1055
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1056
|
+
}
|
|
1057
|
+
});
|
|
1058
|
+
it("allows the quoted pane env assignment emitted by the deep-interview bridge command", async () => {
|
|
1059
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-pretool-question-quoted-allow-"));
|
|
1060
|
+
try {
|
|
1061
|
+
const result = await dispatchCodexNativeHook({
|
|
1062
|
+
hook_event_name: "PreToolUse",
|
|
1063
|
+
cwd,
|
|
1064
|
+
tool_name: "Bash",
|
|
1065
|
+
tool_use_id: "tool-question-quoted-allow",
|
|
1066
|
+
tool_input: { command: `OMX_QUESTION_RETURN_PANE='%42' node ./dist/cli/omx.js question --json --input '{"question":"Q?","options":["A"],"allow_other":true}'` },
|
|
1067
|
+
}, { cwd });
|
|
1068
|
+
assert.equal(result.omxEventName, "pre-tool-use");
|
|
1069
|
+
assert.equal(result.outputJson, null);
|
|
1070
|
+
}
|
|
1071
|
+
finally {
|
|
1072
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1073
|
+
}
|
|
1074
|
+
});
|
|
1075
|
+
it("blocks Bash node omx.js question when the command does not preserve the leader-pane return hint", async () => {
|
|
1076
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-pretool-question-node-block-"));
|
|
1077
|
+
try {
|
|
1078
|
+
const result = await dispatchCodexNativeHook({
|
|
1079
|
+
hook_event_name: "PreToolUse",
|
|
1080
|
+
cwd,
|
|
1081
|
+
tool_name: "Bash",
|
|
1082
|
+
tool_use_id: "tool-question-node-block",
|
|
1083
|
+
tool_input: { command: `node ./dist/cli/omx.js question --json --input '{"question":"Q?","options":["A"],"allow_other":true}'` },
|
|
1084
|
+
}, { cwd });
|
|
1085
|
+
assert.equal(result.omxEventName, "pre-tool-use");
|
|
1086
|
+
assert.equal(result.outputJson?.decision, "block");
|
|
1087
|
+
}
|
|
1088
|
+
finally {
|
|
1089
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1090
|
+
}
|
|
1091
|
+
});
|
|
962
1092
|
it("returns a destructive-command caution on PreToolUse for rm -rf dist", async () => {
|
|
963
1093
|
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-pretool-danger-"));
|
|
964
1094
|
try {
|
|
@@ -1822,6 +1952,65 @@ esac
|
|
|
1822
1952
|
await rm(cwd, { recursive: true, force: true });
|
|
1823
1953
|
}
|
|
1824
1954
|
});
|
|
1955
|
+
it("suppresses duplicate Autopilot planning Stop replays so stale planning state cannot loop indefinitely", async () => {
|
|
1956
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-autopilot-planning-replay-"));
|
|
1957
|
+
try {
|
|
1958
|
+
const stateDir = join(cwd, ".omx", "state");
|
|
1959
|
+
await mkdir(stateDir, { recursive: true });
|
|
1960
|
+
await writeJson(join(stateDir, "autopilot-state.json"), {
|
|
1961
|
+
active: true,
|
|
1962
|
+
current_phase: "planning",
|
|
1963
|
+
});
|
|
1964
|
+
const payload = {
|
|
1965
|
+
hook_event_name: "Stop",
|
|
1966
|
+
cwd,
|
|
1967
|
+
session_id: "sess-stop-autopilot-planning-replay",
|
|
1968
|
+
thread_id: "thread-stop-autopilot-planning-replay",
|
|
1969
|
+
turn_id: "turn-stop-autopilot-planning-replay",
|
|
1970
|
+
last_assistant_message: "Autopilot planning is still active.",
|
|
1971
|
+
};
|
|
1972
|
+
const first = await dispatchCodexNativeHook(payload, { cwd });
|
|
1973
|
+
const replay = await dispatchCodexNativeHook({
|
|
1974
|
+
...payload,
|
|
1975
|
+
stop_hook_active: true,
|
|
1976
|
+
}, { cwd });
|
|
1977
|
+
assert.equal(first.omxEventName, "stop");
|
|
1978
|
+
assert.deepEqual(first.outputJson, {
|
|
1979
|
+
decision: "block",
|
|
1980
|
+
reason: "OMX autopilot is still active (phase: planning); continue the task and gather fresh verification evidence before stopping.",
|
|
1981
|
+
stopReason: "autopilot_planning",
|
|
1982
|
+
systemMessage: "OMX autopilot is still active (phase: planning).",
|
|
1983
|
+
});
|
|
1984
|
+
assert.equal(replay.omxEventName, "stop");
|
|
1985
|
+
assert.equal(replay.outputJson, null);
|
|
1986
|
+
}
|
|
1987
|
+
finally {
|
|
1988
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1989
|
+
}
|
|
1990
|
+
});
|
|
1991
|
+
it("does not block Stop from stale root Autopilot planning state when the explicit session has no scoped state", async () => {
|
|
1992
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-stale-root-autopilot-planning-"));
|
|
1993
|
+
try {
|
|
1994
|
+
const stateDir = join(cwd, ".omx", "state");
|
|
1995
|
+
await mkdir(join(stateDir, "sessions", "sess-current"), { recursive: true });
|
|
1996
|
+
await writeJson(join(stateDir, "session.json"), { session_id: "sess-current", cwd });
|
|
1997
|
+
await writeJson(join(stateDir, "autopilot-state.json"), {
|
|
1998
|
+
active: true,
|
|
1999
|
+
mode: "autopilot",
|
|
2000
|
+
current_phase: "planning",
|
|
2001
|
+
});
|
|
2002
|
+
const result = await dispatchCodexNativeHook({
|
|
2003
|
+
hook_event_name: "Stop",
|
|
2004
|
+
cwd,
|
|
2005
|
+
session_id: "sess-current",
|
|
2006
|
+
}, { cwd });
|
|
2007
|
+
assert.equal(result.omxEventName, "stop");
|
|
2008
|
+
assert.equal(result.outputJson, null);
|
|
2009
|
+
}
|
|
2010
|
+
finally {
|
|
2011
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2012
|
+
}
|
|
2013
|
+
});
|
|
1825
2014
|
it("does not block Stop when an explicit blocked_on_user run_outcome is present on a mode state", async () => {
|
|
1826
2015
|
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-autopilot-blocked-outcome-"));
|
|
1827
2016
|
try {
|
|
@@ -2619,6 +2808,79 @@ esac
|
|
|
2619
2808
|
await rm(cwd, { recursive: true, force: true });
|
|
2620
2809
|
}
|
|
2621
2810
|
});
|
|
2811
|
+
it("does not re-block Stop after a same-session deep-interview question record is already answered", async () => {
|
|
2812
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-deep-interview-question-answered-"));
|
|
2813
|
+
try {
|
|
2814
|
+
const sessionId = "sess-stop-deep-interview-question-answered";
|
|
2815
|
+
const stateDir = join(cwd, ".omx", "state");
|
|
2816
|
+
const sessionDir = join(stateDir, "sessions", sessionId);
|
|
2817
|
+
await mkdir(join(sessionDir, "questions"), { recursive: true });
|
|
2818
|
+
await writeJson(join(stateDir, "session.json"), { session_id: sessionId });
|
|
2819
|
+
await writeJson(join(sessionDir, "skill-active-state.json"), {
|
|
2820
|
+
version: 1,
|
|
2821
|
+
active: true,
|
|
2822
|
+
skill: "deep-interview",
|
|
2823
|
+
phase: "planning",
|
|
2824
|
+
session_id: sessionId,
|
|
2825
|
+
thread_id: "thread-stop-deep-interview-question-answered",
|
|
2826
|
+
});
|
|
2827
|
+
await writeJson(join(sessionDir, "deep-interview-state.json"), {
|
|
2828
|
+
active: false,
|
|
2829
|
+
mode: "deep-interview",
|
|
2830
|
+
current_phase: "intent-first",
|
|
2831
|
+
lifecycle_outcome: "askuserQuestion",
|
|
2832
|
+
run_outcome: "blocked_on_user",
|
|
2833
|
+
completed_at: "2026-04-19T03:20:30.000Z",
|
|
2834
|
+
session_id: sessionId,
|
|
2835
|
+
thread_id: "thread-stop-deep-interview-question-answered",
|
|
2836
|
+
question_enforcement: {
|
|
2837
|
+
obligation_id: "obligation-answered",
|
|
2838
|
+
source: "omx-question",
|
|
2839
|
+
status: "pending",
|
|
2840
|
+
lifecycle_outcome: "askuserQuestion",
|
|
2841
|
+
requested_at: "2026-04-19T03:20:00.000Z",
|
|
2842
|
+
},
|
|
2843
|
+
});
|
|
2844
|
+
await writeJson(join(sessionDir, "questions", "question-answered.json"), {
|
|
2845
|
+
kind: "omx.question/v1",
|
|
2846
|
+
question_id: "question-answered",
|
|
2847
|
+
session_id: sessionId,
|
|
2848
|
+
created_at: "2026-04-19T03:20:05.000Z",
|
|
2849
|
+
updated_at: "2026-04-19T03:20:10.000Z",
|
|
2850
|
+
status: "answered",
|
|
2851
|
+
question: "What should happen next?",
|
|
2852
|
+
options: [{ label: "Continue", value: "continue" }],
|
|
2853
|
+
allow_other: false,
|
|
2854
|
+
other_label: "Other",
|
|
2855
|
+
multi_select: false,
|
|
2856
|
+
type: "single-answerable",
|
|
2857
|
+
source: "deep-interview",
|
|
2858
|
+
answer: {
|
|
2859
|
+
kind: "option",
|
|
2860
|
+
value: "continue",
|
|
2861
|
+
selected_labels: ["Continue"],
|
|
2862
|
+
selected_values: ["continue"],
|
|
2863
|
+
},
|
|
2864
|
+
});
|
|
2865
|
+
const result = await dispatchCodexNativeHook({
|
|
2866
|
+
hook_event_name: "Stop",
|
|
2867
|
+
cwd,
|
|
2868
|
+
session_id: sessionId,
|
|
2869
|
+
thread_id: "thread-stop-deep-interview-question-answered",
|
|
2870
|
+
}, { cwd });
|
|
2871
|
+
assert.equal(result.omxEventName, "stop");
|
|
2872
|
+
assert.equal(result.outputJson, null);
|
|
2873
|
+
const state = JSON.parse(await readFile(join(sessionDir, "deep-interview-state.json"), "utf-8"));
|
|
2874
|
+
assert.equal(state.question_enforcement?.status, "satisfied");
|
|
2875
|
+
assert.equal(state.question_enforcement?.question_id, "question-answered");
|
|
2876
|
+
assert.ok(state.question_enforcement?.satisfied_at);
|
|
2877
|
+
assert.equal(state.lifecycle_outcome, undefined);
|
|
2878
|
+
assert.equal(state.run_outcome, undefined);
|
|
2879
|
+
}
|
|
2880
|
+
finally {
|
|
2881
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2882
|
+
}
|
|
2883
|
+
});
|
|
2622
2884
|
it("keeps blocking pending deep-interview question Stop replays until the obligation changes", async () => {
|
|
2623
2885
|
const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-deep-interview-question-replay-"));
|
|
2624
2886
|
try {
|