oh-my-codex 0.18.1 → 0.18.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 +6 -6
- package/Cargo.toml +1 -1
- package/README.md +4 -2
- package/dist/agents/__tests__/definitions.test.js +23 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +20 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +40 -0
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts +1 -0
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +4 -0
- package/dist/agents/native-config.js.map +1 -1
- package/dist/auth/__tests__/config-sessions.test.d.ts +2 -0
- package/dist/auth/__tests__/config-sessions.test.d.ts.map +1 -0
- package/dist/auth/__tests__/config-sessions.test.js +48 -0
- package/dist/auth/__tests__/config-sessions.test.js.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts +2 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.js +33 -0
- package/dist/auth/__tests__/quota-rotation.test.js.map +1 -0
- package/dist/auth/__tests__/redact.test.d.ts +2 -0
- package/dist/auth/__tests__/redact.test.d.ts.map +1 -0
- package/dist/auth/__tests__/redact.test.js +20 -0
- package/dist/auth/__tests__/redact.test.js.map +1 -0
- package/dist/auth/__tests__/storage.test.d.ts +2 -0
- package/dist/auth/__tests__/storage.test.d.ts.map +1 -0
- package/dist/auth/__tests__/storage.test.js +108 -0
- package/dist/auth/__tests__/storage.test.js.map +1 -0
- package/dist/auth/config.d.ts +9 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +77 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/hotswap.d.ts +36 -0
- package/dist/auth/hotswap.d.ts.map +1 -0
- package/dist/auth/hotswap.js +159 -0
- package/dist/auth/hotswap.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/paths.d.ts +12 -0
- package/dist/auth/paths.d.ts.map +1 -0
- package/dist/auth/paths.js +78 -0
- package/dist/auth/paths.js.map +1 -0
- package/dist/auth/quota-detector.d.ts +10 -0
- package/dist/auth/quota-detector.d.ts.map +1 -0
- package/dist/auth/quota-detector.js +40 -0
- package/dist/auth/quota-detector.js.map +1 -0
- package/dist/auth/redact.d.ts +2 -0
- package/dist/auth/redact.d.ts.map +1 -0
- package/dist/auth/redact.js +26 -0
- package/dist/auth/redact.js.map +1 -0
- package/dist/auth/rotation.d.ts +9 -0
- package/dist/auth/rotation.d.ts.map +1 -0
- package/dist/auth/rotation.js +26 -0
- package/dist/auth/rotation.js.map +1 -0
- package/dist/auth/sessions.d.ts +15 -0
- package/dist/auth/sessions.d.ts.map +1 -0
- package/dist/auth/sessions.js +62 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/storage.d.ts +27 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +111 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/catalog/__tests__/generator.test.js +4 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/cli/__tests__/auth.test.d.ts +2 -0
- package/dist/cli/__tests__/auth.test.d.ts.map +1 -0
- package/dist/cli/__tests__/auth.test.js +168 -0
- package/dist/cli/__tests__/auth.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +112 -5
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +20 -0
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +171 -21
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +51 -3
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/nested-help-routing.test.js +1 -0
- package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +2 -2
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +30 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +47 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/auth.d.ts +4 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +89 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +190 -7
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +12 -0
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +27 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +245 -47
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +11 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +3 -3
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/deep-interview.test.d.ts +2 -0
- package/dist/config/__tests__/deep-interview.test.d.ts.map +1 -0
- package/dist/config/__tests__/deep-interview.test.js +239 -0
- package/dist/config/__tests__/deep-interview.test.js.map +1 -0
- package/dist/config/__tests__/generator-idempotent.test.js +123 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +1 -0
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +2 -4
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/deep-interview.d.ts +22 -0
- package/dist/config/deep-interview.d.ts.map +1 -0
- package/dist/config/deep-interview.js +151 -0
- package/dist/config/deep-interview.js.map +1 -0
- package/dist/config/generator.d.ts +19 -2
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +198 -29
- package/dist/config/generator.js.map +1 -1
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +21 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.d.ts +3 -0
- package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js +45 -2
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +2 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +17 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/explore-routing.test.js +1 -0
- package/dist/hooks/__tests__/explore-routing.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +471 -15
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.js +320 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +12 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts +2 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.js +35 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.js.map +1 -0
- package/dist/hooks/deep-interview-config-instruction.d.ts +3 -0
- package/dist/hooks/deep-interview-config-instruction.d.ts.map +1 -0
- package/dist/hooks/deep-interview-config-instruction.js +47 -0
- package/dist/hooks/deep-interview-config-instruction.js.map +1 -0
- package/dist/hooks/explore-routing.d.ts.map +1 -1
- package/dist/hooks/explore-routing.js +1 -0
- package/dist/hooks/explore-routing.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +6 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +80 -14
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +1 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +11 -0
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +22 -0
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +213 -17
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +84 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +51 -1
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +171 -23
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/index.d.ts +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +8 -3
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts +1 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +14 -3
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +26 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts +2 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +62 -1
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts +17 -3
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +96 -10
- package/dist/hud/tmux.js.map +1 -1
- package/dist/hud/types.d.ts +22 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +63 -1
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +410 -4
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +29 -2
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
- package/dist/pipeline/stages/ralplan.js +41 -6
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +43 -10
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/deep-interview.d.ts +2 -0
- package/dist/question/deep-interview.d.ts.map +1 -1
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/question/ui.d.ts +12 -0
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +83 -46
- package/dist/question/ui.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +200 -10
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +23 -0
- package/dist/ralplan/consensus-gate.d.ts.map +1 -0
- package/dist/ralplan/consensus-gate.js +212 -0
- package/dist/ralplan/consensus-gate.js.map +1 -0
- package/dist/ralplan/runtime.d.ts +25 -0
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +144 -8
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +1034 -28
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/docs-site-contract.test.d.ts +2 -0
- package/dist/scripts/__tests__/docs-site-contract.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/docs-site-contract.test.js +42 -0
- package/dist/scripts/__tests__/docs-site-contract.test.js.map +1 -0
- package/dist/scripts/__tests__/notify-dispatcher.test.js +115 -2
- package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
- package/dist/scripts/__tests__/run-test-files.test.js +57 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js +2 -2
- package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +238 -36
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/notify-dispatcher.js +188 -4
- package/dist/scripts/notify-dispatcher.js.map +1 -1
- package/dist/scripts/run-test-files.js +13 -0
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/state/__tests__/planning-gate.test.d.ts +2 -0
- package/dist/state/__tests__/planning-gate.test.d.ts.map +1 -0
- package/dist/state/__tests__/planning-gate.test.js +219 -0
- package/dist/state/__tests__/planning-gate.test.js.map +1 -0
- package/dist/state/__tests__/workflow-transition.test.js +6 -0
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/workflow-transition.d.ts +24 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +70 -0
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +4 -3
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +36 -44
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +144 -18
- 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 +10 -20
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +22 -6
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +50 -0
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +28 -2
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +16 -4
- package/plugins/oh-my-codex/skills/autoresearch/SKILL.md +4 -0
- package/plugins/oh-my-codex/skills/autoresearch-goal/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +10 -0
- package/plugins/oh-my-codex/skills/pipeline/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/plan/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/prometheus-strict/README.md +35 -0
- package/plugins/oh-my-codex/skills/prometheus-strict/SKILL.md +219 -0
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +24 -5
- package/prompts/prometheus-strict-metis.md +274 -0
- package/prompts/prometheus-strict-momus.md +82 -0
- package/prompts/prometheus-strict-oracle.md +107 -0
- package/prompts/researcher.md +22 -3
- package/prompts/scholastic.md +11 -0
- package/skills/autopilot/SKILL.md +16 -4
- package/skills/autoresearch/SKILL.md +4 -0
- package/skills/autoresearch-goal/SKILL.md +1 -1
- package/skills/best-practice-research/SKILL.md +1 -1
- package/skills/deep-interview/SKILL.md +10 -0
- package/skills/pipeline/SKILL.md +1 -1
- package/skills/plan/SKILL.md +1 -1
- package/skills/prometheus-strict/README.md +35 -0
- package/skills/prometheus-strict/SKILL.md +219 -0
- package/skills/ralplan/SKILL.md +24 -5
- package/src/scripts/__tests__/codex-native-hook.test.ts +1307 -61
- package/src/scripts/__tests__/docs-site-contract.test.ts +47 -0
- package/src/scripts/__tests__/notify-dispatcher.test.ts +132 -3
- package/src/scripts/__tests__/run-test-files.test.ts +67 -0
- package/src/scripts/__tests__/verify-native-agents.test.ts +2 -2
- package/src/scripts/codex-native-hook.ts +260 -31
- package/src/scripts/notify-dispatcher.ts +202 -4
- package/src/scripts/run-test-files.ts +13 -0
- package/templates/catalog-manifest.json +27 -0
|
@@ -133,19 +133,18 @@ describe('HUD resize hook command builders', () => {
|
|
|
133
133
|
assert.equal(buildHudPaneTarget('%41'), '%41');
|
|
134
134
|
assert.equal(buildHudPaneTarget('41'), '%41');
|
|
135
135
|
});
|
|
136
|
-
it('buildRegisterResizeHookArgs uses
|
|
136
|
+
it('buildRegisterResizeHookArgs uses target and numeric client-resized hook slot', () => {
|
|
137
137
|
const args = buildRegisterResizeHookArgs('my-session:0', 'omx_resize_team_session_0_1', '%1');
|
|
138
138
|
assert.equal(args[0], 'set-hook');
|
|
139
|
-
assert.equal(args[1], '-
|
|
140
|
-
assert.equal(args[2], '-
|
|
141
|
-
assert.
|
|
142
|
-
assert.
|
|
143
|
-
assert.equal(args[5], `run-shell -b 'tmux resize-pane -t %1 -y ${HUD_TMUX_TEAM_HEIGHT_LINES} >/dev/null 2>&1 || true; sleep ${HUD_RESIZE_RECONCILE_DELAY_SECONDS}; tmux resize-pane -t %1 -y ${HUD_TMUX_TEAM_HEIGHT_LINES} >/dev/null 2>&1 || true'`);
|
|
139
|
+
assert.equal(args[1], '-t');
|
|
140
|
+
assert.equal(args[2], 'my-session:0');
|
|
141
|
+
assert.match(args[3] ?? '', /^client-resized\[\d+\]$/);
|
|
142
|
+
assert.equal(args[4], `run-shell -b 'tmux resize-pane -t %1 -y ${HUD_TMUX_TEAM_HEIGHT_LINES} >/dev/null 2>&1 || true; sleep ${HUD_RESIZE_RECONCILE_DELAY_SECONDS}; tmux resize-pane -t %1 -y ${HUD_TMUX_TEAM_HEIGHT_LINES} >/dev/null 2>&1 || true'`);
|
|
144
143
|
});
|
|
145
144
|
it('buildUnregisterResizeHookArgs removes the exact numeric hook slot', () => {
|
|
146
145
|
const registered = buildRegisterResizeHookArgs('my-session:0', 'omx_resize_team_session_0_1', '%1');
|
|
147
146
|
const unregistered = buildUnregisterResizeHookArgs('my-session:0', 'omx_resize_team_session_0_1');
|
|
148
|
-
assert.deepEqual(unregistered, ['set-hook', '-u', '-
|
|
147
|
+
assert.deepEqual(unregistered, ['set-hook', '-u', '-t', 'my-session:0', registered[3]]);
|
|
149
148
|
});
|
|
150
149
|
it('buildClientAttachedReconcileHookName normalizes all segments into collision-safe tokens', () => {
|
|
151
150
|
const name = buildClientAttachedReconcileHookName('Team A', 'Session:Main', '0', '%12');
|
|
@@ -170,7 +169,7 @@ describe('HUD resize hook command builders', () => {
|
|
|
170
169
|
const longName = 'omx_resize_' + 'a'.repeat(200);
|
|
171
170
|
const resizeArgs = buildRegisterResizeHookArgs('sess:0', longName, '%1');
|
|
172
171
|
const attachedArgs = buildRegisterClientAttachedReconcileArgs('sess:0', longName, '%1');
|
|
173
|
-
const resizeSlot = resizeArgs[
|
|
172
|
+
const resizeSlot = resizeArgs[3] ?? '';
|
|
174
173
|
const attachedSlot = attachedArgs[3] ?? '';
|
|
175
174
|
const resizeIndex = Number((resizeSlot.match(/\[(\d+)\]/) ?? [])[1]);
|
|
176
175
|
const attachedIndex = Number((attachedSlot.match(/\[(\d+)\]/) ?? [])[1]);
|
|
@@ -183,7 +182,7 @@ describe('HUD resize hook command builders', () => {
|
|
|
183
182
|
const name = 'omx_resize_team_session_0_1';
|
|
184
183
|
const a = buildRegisterResizeHookArgs('s:0', name, '%1');
|
|
185
184
|
const b = buildRegisterResizeHookArgs('s:0', name, '%1');
|
|
186
|
-
assert.equal(a[
|
|
185
|
+
assert.equal(a[3], b[3]);
|
|
187
186
|
const c = buildRegisterClientAttachedReconcileArgs('s:0', name, '%1');
|
|
188
187
|
const d = buildRegisterClientAttachedReconcileArgs('s:0', name, '%1');
|
|
189
188
|
assert.equal(c[3], d[3]);
|
|
@@ -210,8 +209,8 @@ describe('HUD resize hook command builders', () => {
|
|
|
210
209
|
const resizeArgs = buildRegisterResizeHookArgs('my-session:0', 'omx_resize_team_session_0_1', '%1');
|
|
211
210
|
const delayedArgs = buildScheduleDelayedHudResizeArgs('%1');
|
|
212
211
|
const reconcileArgs = buildReconcileHudResizeArgs('%1');
|
|
213
|
-
assert.match(resizeArgs[
|
|
214
|
-
assert.doesNotMatch(resizeArgs[
|
|
212
|
+
assert.match(resizeArgs[4] ?? '', new RegExp(escapeRegExp(tmuxPath)));
|
|
213
|
+
assert.doesNotMatch(resizeArgs[4] ?? '', /^run-shell -b 'tmux resize-pane/);
|
|
215
214
|
assert.match(delayedArgs[2] ?? '', new RegExp(escapeRegExp(tmuxPath)));
|
|
216
215
|
assert.doesNotMatch(delayedArgs[2] ?? '', /sleep \d+; tmux resize-pane/);
|
|
217
216
|
assert.match(reconcileArgs[1] ?? '', new RegExp(escapeRegExp(tmuxPath)));
|
|
@@ -2870,6 +2869,92 @@ esac
|
|
|
2870
2869
|
});
|
|
2871
2870
|
});
|
|
2872
2871
|
describe('createTeamSession tmux instance tagging', () => {
|
|
2872
|
+
it('redraws the leader pane after team layout changes so wrapped diff hunks repaint with gutters', async () => {
|
|
2873
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-team-redraw-leader-'));
|
|
2874
|
+
const prevTmux = process.env.TMUX;
|
|
2875
|
+
const prevTmuxPane = process.env.TMUX_PANE;
|
|
2876
|
+
const prevWorkerCli = process.env.OMX_TEAM_WORKER_CLI;
|
|
2877
|
+
try {
|
|
2878
|
+
await withMockTmuxFixture('omx-tmux-redraw-leader-', (logPath) => `#!/bin/sh
|
|
2879
|
+
set -eu
|
|
2880
|
+
printf '%s\n' "$*" >> "${logPath}"
|
|
2881
|
+
case "\${1:-}" in
|
|
2882
|
+
-V)
|
|
2883
|
+
echo "tmux 3.4"
|
|
2884
|
+
exit 0
|
|
2885
|
+
;;
|
|
2886
|
+
display-message)
|
|
2887
|
+
case "$*" in
|
|
2888
|
+
*"#{window_width}"*)
|
|
2889
|
+
echo "120"
|
|
2890
|
+
;;
|
|
2891
|
+
*)
|
|
2892
|
+
echo "leader:0 %1"
|
|
2893
|
+
;;
|
|
2894
|
+
esac
|
|
2895
|
+
exit 0
|
|
2896
|
+
;;
|
|
2897
|
+
list-panes)
|
|
2898
|
+
case "$*" in
|
|
2899
|
+
*"pane_current_command"*)
|
|
2900
|
+
printf "%%1\\tnode\\t'codex'\\n"
|
|
2901
|
+
;;
|
|
2902
|
+
*)
|
|
2903
|
+
printf "%%1\\n"
|
|
2904
|
+
;;
|
|
2905
|
+
esac
|
|
2906
|
+
exit 0
|
|
2907
|
+
;;
|
|
2908
|
+
split-window)
|
|
2909
|
+
case "$*" in
|
|
2910
|
+
*" -h "*)
|
|
2911
|
+
echo "%2"
|
|
2912
|
+
;;
|
|
2913
|
+
*)
|
|
2914
|
+
echo "%3"
|
|
2915
|
+
;;
|
|
2916
|
+
esac
|
|
2917
|
+
exit 0
|
|
2918
|
+
;;
|
|
2919
|
+
set-option|resize-pane|select-layout|set-window-option|select-pane|set-hook|run-shell|send-keys)
|
|
2920
|
+
exit 0
|
|
2921
|
+
;;
|
|
2922
|
+
*)
|
|
2923
|
+
exit 0
|
|
2924
|
+
;;
|
|
2925
|
+
esac
|
|
2926
|
+
`, async ({ logPath }) => {
|
|
2927
|
+
const fakeBinDir = join(logPath, '..');
|
|
2928
|
+
const geminiPath = join(fakeBinDir, 'gemini');
|
|
2929
|
+
await writeFile(geminiPath, '#!/bin/sh\nexit 0\n');
|
|
2930
|
+
await chmod(geminiPath, 0o755);
|
|
2931
|
+
process.env.TMUX = 'leader-session,stub,0';
|
|
2932
|
+
process.env.TMUX_PANE = '%1';
|
|
2933
|
+
process.env.OMX_TEAM_WORKER_CLI = 'gemini';
|
|
2934
|
+
createTeamSession('Diff Gutter Redraw', 1, cwd);
|
|
2935
|
+
const tmuxLog = await readFile(logPath, 'utf-8');
|
|
2936
|
+
assert.match(tmuxLog, /select-layout -t leader:0 main-vertical/);
|
|
2937
|
+
assert.match(tmuxLog, /set-window-option -t leader:0 main-pane-width 60/);
|
|
2938
|
+
assert.match(tmuxLog, /split-window -v -f -l 3 -t leader:0 -d -P -F #\{pane_id\}/);
|
|
2939
|
+
assert.match(tmuxLog, /send-keys -t %1 C-l/, 'leader Codex pane must repaint after team splits/resizes so tmux does not auto-wrap diff continuation rows without the line-number gutter');
|
|
2940
|
+
});
|
|
2941
|
+
}
|
|
2942
|
+
finally {
|
|
2943
|
+
if (typeof prevTmux === 'string')
|
|
2944
|
+
process.env.TMUX = prevTmux;
|
|
2945
|
+
else
|
|
2946
|
+
delete process.env.TMUX;
|
|
2947
|
+
if (typeof prevTmuxPane === 'string')
|
|
2948
|
+
process.env.TMUX_PANE = prevTmuxPane;
|
|
2949
|
+
else
|
|
2950
|
+
delete process.env.TMUX_PANE;
|
|
2951
|
+
if (typeof prevWorkerCli === 'string')
|
|
2952
|
+
process.env.OMX_TEAM_WORKER_CLI = prevWorkerCli;
|
|
2953
|
+
else
|
|
2954
|
+
delete process.env.OMX_TEAM_WORKER_CLI;
|
|
2955
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2956
|
+
}
|
|
2957
|
+
});
|
|
2873
2958
|
it('tags leader, worker, and HUD panes with pane-scoped instance ownership', async () => {
|
|
2874
2959
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-team-pane-tags-'));
|
|
2875
2960
|
const prevTmux = process.env.TMUX;
|
|
@@ -2967,7 +3052,7 @@ esac
|
|
|
2967
3052
|
await rm(cwd, { recursive: true, force: true });
|
|
2968
3053
|
}
|
|
2969
3054
|
});
|
|
2970
|
-
it('
|
|
3055
|
+
it('uses tmux 3.2a-compatible client-resized hook registration for team HUD resize', async () => {
|
|
2971
3056
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-team-resize-hook-fallback-'));
|
|
2972
3057
|
const prevTmux = process.env.TMUX;
|
|
2973
3058
|
const prevTmuxPane = process.env.TMUX_PANE;
|
|
@@ -3022,6 +3107,10 @@ case "\${1:-}" in
|
|
|
3022
3107
|
echo "invalid option: window-resized[]" >&2
|
|
3023
3108
|
exit 1
|
|
3024
3109
|
;;
|
|
3110
|
+
*" -w "*)
|
|
3111
|
+
echo "invalid option: -w" >&2
|
|
3112
|
+
exit 1
|
|
3113
|
+
;;
|
|
3025
3114
|
*)
|
|
3026
3115
|
exit 0
|
|
3027
3116
|
;;
|
|
@@ -3045,12 +3134,13 @@ esac
|
|
|
3045
3134
|
console.warn = (...args) => { warnings.push(args.map(String).join(' ')); };
|
|
3046
3135
|
const session = createTeamSession('Resize Hook Fallback', 1, cwd);
|
|
3047
3136
|
assert.equal(session.hudPaneId, '%3');
|
|
3048
|
-
assert.
|
|
3049
|
-
assert.equal(session.resizeHookTarget,
|
|
3050
|
-
assert.
|
|
3051
|
-
assert.match(warnings.join('\n'), /invalid option: window-resized\[\]/);
|
|
3137
|
+
assert.ok(session.resizeHookName);
|
|
3138
|
+
assert.equal(session.resizeHookTarget, 'leader:0');
|
|
3139
|
+
assert.equal(warnings.join('\n'), '');
|
|
3052
3140
|
const tmuxLog = await readFile(logPath, 'utf-8');
|
|
3053
|
-
assert.match(tmuxLog, /set-hook -
|
|
3141
|
+
assert.match(tmuxLog, /set-hook -t leader:0 client-resized\[\d+\]/);
|
|
3142
|
+
assert.doesNotMatch(tmuxLog, /window-resized\[/);
|
|
3143
|
+
assert.doesNotMatch(tmuxLog, /set-hook -w /);
|
|
3054
3144
|
assert.match(tmuxLog, /set-hook -t leader:0 client-attached\[\d+\]/);
|
|
3055
3145
|
assert.match(tmuxLog, new RegExp(`run-shell -b sleep ${HUD_RESIZE_RECONCILE_DELAY_SECONDS}; .*resize-pane -t %3 -y ${HUD_TMUX_TEAM_HEIGHT_LINES}`));
|
|
3056
3146
|
assert.match(tmuxLog, new RegExp(`run-shell .*resize-pane -t %3 -y ${HUD_TMUX_TEAM_HEIGHT_LINES}`));
|
|
@@ -3275,7 +3365,8 @@ esac
|
|
|
3275
3365
|
assert.equal(session.resizeHookTarget, null);
|
|
3276
3366
|
const tmuxLog = await readFile(logPath, 'utf-8');
|
|
3277
3367
|
assert.match(tmuxLog, new RegExp(`resize-pane -t %3 -y ${HUD_TMUX_TEAM_HEIGHT_LINES}`));
|
|
3278
|
-
assert.doesNotMatch(tmuxLog, /set-hook -w
|
|
3368
|
+
assert.doesNotMatch(tmuxLog, /set-hook -w /);
|
|
3369
|
+
assert.doesNotMatch(tmuxLog, /window-resized\[/);
|
|
3279
3370
|
assert.doesNotMatch(tmuxLog, /set-hook -t leader:0 client-attached\[\d+\]/);
|
|
3280
3371
|
assert.doesNotMatch(tmuxLog, /run-shell -b sleep \d+; tmux resize-pane -t %3 -y \d+ >/);
|
|
3281
3372
|
assert.doesNotMatch(tmuxLog, /run-shell tmux resize-pane -t %3 -y \d+ >/);
|
|
@@ -3587,6 +3678,41 @@ esac
|
|
|
3587
3678
|
await rm(cwd, { recursive: true, force: true });
|
|
3588
3679
|
}
|
|
3589
3680
|
});
|
|
3681
|
+
it('restores standalone HUD panes with OMX_ROOT forwarded and shell-escaped', async () => {
|
|
3682
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-standalone-root-hud-'));
|
|
3683
|
+
const previousOmxRoot = process.env.OMX_ROOT;
|
|
3684
|
+
try {
|
|
3685
|
+
await withMockTmuxFixture('omx-tmux-root-standalone-hud-', (logPath) => `#!/bin/sh
|
|
3686
|
+
set -eu
|
|
3687
|
+
printf '%s\\n' "$*" >> "${logPath}"
|
|
3688
|
+
case "\${1:-}" in
|
|
3689
|
+
split-window)
|
|
3690
|
+
echo "%44"
|
|
3691
|
+
exit 0
|
|
3692
|
+
;;
|
|
3693
|
+
run-shell|select-pane|resize-pane|set-hook)
|
|
3694
|
+
exit 0
|
|
3695
|
+
;;
|
|
3696
|
+
*)
|
|
3697
|
+
exit 0
|
|
3698
|
+
;;
|
|
3699
|
+
esac
|
|
3700
|
+
`, async ({ logPath }) => {
|
|
3701
|
+
process.env.OMX_ROOT = "/tmp/boxed root/it's/$(literal)";
|
|
3702
|
+
const paneId = restoreStandaloneHudPane('%11', cwd);
|
|
3703
|
+
assert.equal(paneId, '%44');
|
|
3704
|
+
const tmuxLog = await readFile(logPath, 'utf-8');
|
|
3705
|
+
assert.match(tmuxLog, /exec env OMX_TMUX_HUD_OWNER=1 OMX_ROOT='\/tmp\/boxed root\/it'\\''s\/\$\(literal\)' .*hud --watch/);
|
|
3706
|
+
});
|
|
3707
|
+
}
|
|
3708
|
+
finally {
|
|
3709
|
+
if (typeof previousOmxRoot === 'string')
|
|
3710
|
+
process.env.OMX_ROOT = previousOmxRoot;
|
|
3711
|
+
else
|
|
3712
|
+
delete process.env.OMX_ROOT;
|
|
3713
|
+
await rm(cwd, { recursive: true, force: true });
|
|
3714
|
+
}
|
|
3715
|
+
});
|
|
3590
3716
|
});
|
|
3591
3717
|
describe('dismissTrustPromptIfPresent capture shape', () => {
|
|
3592
3718
|
it('uses visible capture-pane argv without tail flags', async () => {
|