oh-my-codex 0.16.0 → 0.16.2
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/README.md +2 -2
- package/crates/omx-explore/src/main.rs +434 -28
- package/dist/agents/__tests__/native-config.test.js +50 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +3 -2
- package/dist/agents/native-config.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +1 -0
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +120 -3
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/imagegen-continuation.test.d.ts +2 -0
- package/dist/cli/__tests__/imagegen-continuation.test.d.ts.map +1 -0
- package/dist/cli/__tests__/imagegen-continuation.test.js +135 -0
- package/dist/cli/__tests__/imagegen-continuation.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +182 -18
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +88 -2
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +62 -0
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +48 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +12 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +465 -12
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +50 -5
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +6 -2
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +211 -12
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +11 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +124 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +37 -3
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +100 -9
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +1 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +42 -7
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/ultragoal.d.ts +1 -1
- package/dist/cli/ultragoal.d.ts.map +1 -1
- package/dist/cli/ultragoal.js +29 -8
- package/dist/cli/ultragoal.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +2 -1
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +97 -2
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +22 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/__tests__/models.test.js +18 -1
- package/dist/config/__tests__/models.test.js.map +1 -1
- package/dist/config/__tests__/wiki-config-contract.test.js +2 -1
- package/dist/config/__tests__/wiki-config-contract.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +17 -3
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +102 -2
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/generator.d.ts +4 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +69 -12
- package/dist/config/generator.js.map +1 -1
- package/dist/config/models.d.ts +6 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +37 -0
- package/dist/config/models.js.map +1 -1
- package/dist/exec/followup.d.ts +1 -0
- package/dist/exec/followup.d.ts.map +1 -1
- package/dist/exec/followup.js +9 -3
- package/dist/exec/followup.js.map +1 -1
- package/dist/hooks/__tests__/anti-slop-workflow.test.js +19 -0
- package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +19 -2
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +40 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/foreground-isolation-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/foreground-isolation-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/foreground-isolation-contract.test.js +28 -0
- package/dist/hooks/__tests__/foreground-isolation-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +37 -25
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +10 -4
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/session.test.js +32 -0
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/__tests__/wiki-docs-contract.test.js +6 -4
- package/dist/hooks/__tests__/wiki-docs-contract.test.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +3 -2
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +6 -4
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/extensibility/logging.d.ts.map +1 -1
- package/dist/hooks/extensibility/logging.js +3 -2
- package/dist/hooks/extensibility/logging.js.map +1 -1
- package/dist/hooks/extensibility/sdk/paths.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk/paths.js +4 -3
- package/dist/hooks/extensibility/sdk/paths.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +2 -4
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +22 -12
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +8 -7
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +1 -1
- package/dist/hud/__tests__/state.test.js +24 -0
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/index.js +1 -1
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +22 -8
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.js +1 -1
- package/dist/hud/tmux.js.map +1 -1
- package/dist/imagegen/continuation.d.ts +44 -0
- package/dist/imagegen/continuation.d.ts.map +1 -0
- package/dist/imagegen/continuation.js +220 -0
- package/dist/imagegen/continuation.js.map +1 -0
- package/dist/mcp/__tests__/bootstrap.test.js +47 -2
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js +49 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +145 -6
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/__tests__/wiki-server.test.js +97 -1
- package/dist/mcp/__tests__/wiki-server.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +2 -0
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +95 -15
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/lifecycle-telemetry.d.ts +16 -0
- package/dist/mcp/lifecycle-telemetry.d.ts.map +1 -0
- package/dist/mcp/lifecycle-telemetry.js +95 -0
- package/dist/mcp/lifecycle-telemetry.js.map +1 -0
- package/dist/mcp/wiki-server.d.ts.map +1 -1
- package/dist/mcp/wiki-server.js +11 -2
- package/dist/mcp/wiki-server.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +274 -5
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/stages/team-exec.d.ts +2 -0
- package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
- package/dist/pipeline/stages/team-exec.js +51 -26
- package/dist/pipeline/stages/team-exec.js.map +1 -1
- package/dist/planning/__tests__/artifacts.test.js +138 -3
- package/dist/planning/__tests__/artifacts.test.js.map +1 -1
- package/dist/planning/__tests__/context-pack-status.test.d.ts +2 -0
- package/dist/planning/__tests__/context-pack-status.test.d.ts.map +1 -0
- package/dist/planning/__tests__/context-pack-status.test.js +271 -0
- package/dist/planning/__tests__/context-pack-status.test.js.map +1 -0
- package/dist/planning/artifacts.d.ts +12 -1
- package/dist/planning/artifacts.d.ts.map +1 -1
- package/dist/planning/artifacts.js +32 -9
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/planning/context-pack-status.d.ts +42 -0
- package/dist/planning/context-pack-status.d.ts.map +1 -0
- package/dist/planning/context-pack-status.js +479 -0
- package/dist/planning/context-pack-status.js.map +1 -0
- package/dist/runtime/__tests__/process-tree.test.d.ts +2 -0
- package/dist/runtime/__tests__/process-tree.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/process-tree.test.js +107 -0
- package/dist/runtime/__tests__/process-tree.test.js.map +1 -0
- package/dist/runtime/process-tree.d.ts +28 -0
- package/dist/runtime/process-tree.d.ts.map +1 -0
- package/dist/runtime/process-tree.js +230 -0
- package/dist/runtime/process-tree.js.map +1 -0
- package/dist/scripts/__tests__/codex-native-hook.test.js +267 -2
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-state-io.test.d.ts +2 -0
- package/dist/scripts/__tests__/notify-state-io.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/notify-state-io.test.js +40 -0
- package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -0
- package/dist/scripts/codex-execution-surface.d.ts +1 -1
- package/dist/scripts/codex-execution-surface.d.ts.map +1 -1
- package/dist/scripts/codex-execution-surface.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +141 -9
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.js +6 -9
- package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
- package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
- package/dist/scripts/notify-hook/process-runner.js +4 -1
- package/dist/scripts/notify-hook/process-runner.js.map +1 -1
- package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
- package/dist/scripts/notify-hook/state-io.js +4 -7
- package/dist/scripts/notify-hook/state-io.js.map +1 -1
- package/dist/scripts/notify-hook.js +25 -3
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/verify-native-agents.d.ts.map +1 -1
- package/dist/scripts/verify-native-agents.js +3 -1
- package/dist/scripts/verify-native-agents.js.map +1 -1
- package/dist/sidecar/__tests__/tmux.test.js +1 -1
- package/dist/sidecar/__tests__/tmux.test.js.map +1 -1
- package/dist/sidecar/tmux.js +1 -1
- package/dist/sidecar/tmux.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +79 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +10 -18
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/__tests__/workflow-transition.test.js +45 -1
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +1 -20
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts +1 -0
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +28 -18
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +3 -2
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/state/workflow-transition.js +2 -2
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/team/__tests__/approved-execution.test.js +96 -0
- package/dist/team/__tests__/approved-execution.test.js.map +1 -1
- package/dist/team/__tests__/followup-planner.test.js +16 -0
- package/dist/team/__tests__/followup-planner.test.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +16 -0
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/repo-aware-decomposition.test.js +20 -0
- package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -1
- package/dist/team/__tests__/runtime-cli.test.js +16 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +209 -11
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +110 -0
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +9 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +6 -0
- package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
- package/dist/team/approved-execution.d.ts +13 -0
- package/dist/team/approved-execution.d.ts.map +1 -1
- package/dist/team/approved-execution.js +40 -22
- package/dist/team/approved-execution.js.map +1 -1
- package/dist/team/followup-planner.d.ts +1 -0
- package/dist/team/followup-planner.d.ts.map +1 -1
- package/dist/team/followup-planner.js +9 -9
- package/dist/team/followup-planner.js.map +1 -1
- package/dist/team/model-contract.d.ts +1 -1
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +4 -3
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/repo-aware-decomposition.d.ts +1 -0
- package/dist/team/repo-aware-decomposition.d.ts.map +1 -1
- package/dist/team/repo-aware-decomposition.js +5 -1
- package/dist/team/repo-aware-decomposition.js.map +1 -1
- package/dist/team/runtime-cli.d.ts +4 -0
- package/dist/team/runtime-cli.d.ts.map +1 -1
- package/dist/team/runtime-cli.js +14 -1
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +1 -0
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +46 -16
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +13 -6
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +7 -0
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +129 -4
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/__tests__/docs-contract.test.d.ts +2 -0
- package/dist/ultragoal/__tests__/docs-contract.test.d.ts.map +1 -0
- package/dist/ultragoal/__tests__/docs-contract.test.js +31 -0
- package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -0
- package/dist/ultragoal/artifacts.d.ts +6 -2
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +108 -4
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/utils/paths.d.ts +3 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +6 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +44 -14
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/wiki/__tests__/ingest.test.js +35 -1
- package/dist/wiki/__tests__/ingest.test.js.map +1 -1
- package/dist/wiki/__tests__/lint.test.js +14 -1
- package/dist/wiki/__tests__/lint.test.js.map +1 -1
- package/dist/wiki/__tests__/query.test.js +28 -3
- package/dist/wiki/__tests__/query.test.js.map +1 -1
- package/dist/wiki/__tests__/session-hooks.test.js +30 -2
- package/dist/wiki/__tests__/session-hooks.test.js.map +1 -1
- package/dist/wiki/__tests__/storage.test.js +62 -22
- package/dist/wiki/__tests__/storage.test.js.map +1 -1
- package/dist/wiki/index.d.ts +2 -2
- package/dist/wiki/index.d.ts.map +1 -1
- package/dist/wiki/index.js +2 -2
- package/dist/wiki/index.js.map +1 -1
- package/dist/wiki/ingest.js +2 -2
- package/dist/wiki/ingest.js.map +1 -1
- package/dist/wiki/lifecycle.d.ts +5 -0
- package/dist/wiki/lifecycle.d.ts.map +1 -1
- package/dist/wiki/lifecycle.js +31 -4
- package/dist/wiki/lifecycle.js.map +1 -1
- package/dist/wiki/lint.d.ts.map +1 -1
- package/dist/wiki/lint.js +12 -8
- package/dist/wiki/lint.js.map +1 -1
- package/dist/wiki/query.d.ts.map +1 -1
- package/dist/wiki/query.js +3 -2
- package/dist/wiki/query.js.map +1 -1
- package/dist/wiki/storage.d.ts +4 -0
- package/dist/wiki/storage.d.ts.map +1 -1
- package/dist/wiki/storage.js +54 -18
- package/dist/wiki/storage.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/ai-slop-cleaner/SKILL.md +9 -0
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +25 -2
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/plan/SKILL.md +7 -4
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +13 -3
- package/plugins/oh-my-codex/skills/team/SKILL.md +2 -2
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +11 -7
- package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +8 -0
- package/plugins/oh-my-codex/skills/wiki/SKILL.md +5 -5
- package/prompts/planner.md +1 -1
- package/skills/ai-slop-cleaner/SKILL.md +9 -0
- package/skills/deep-interview/SKILL.md +25 -2
- package/skills/omx-setup/SKILL.md +1 -1
- package/skills/plan/SKILL.md +7 -4
- package/skills/ralplan/SKILL.md +13 -3
- package/skills/team/SKILL.md +2 -2
- package/skills/ultragoal/SKILL.md +11 -7
- package/skills/visual-ralph/SKILL.md +8 -0
- package/skills/wiki/SKILL.md +5 -5
- package/src/scripts/__tests__/codex-native-hook.test.ts +302 -2
- package/src/scripts/__tests__/notify-state-io.test.ts +73 -0
- package/src/scripts/codex-execution-surface.ts +2 -0
- package/src/scripts/codex-native-hook.ts +163 -16
- package/src/scripts/notify-hook/managed-tmux.ts +6 -7
- package/src/scripts/notify-hook/process-runner.ts +4 -1
- package/src/scripts/notify-hook/state-io.ts +5 -7
- package/src/scripts/notify-hook.ts +26 -3
- package/src/scripts/verify-native-agents.ts +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-state-io.test.d.ts","sourceRoot":"","sources":["../../../src/scripts/__tests__/notify-state-io.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { getScopedStatePath, readScopedJsonIfExists, resolveScopedStateDir, writeScopedJson, } from '../notify-hook/state-io.js';
|
|
7
|
+
describe('notify-hook state I/O session authority', () => {
|
|
8
|
+
it('uses an explicit session id before the current session pointer', async () => {
|
|
9
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-notify-state-io-'));
|
|
10
|
+
try {
|
|
11
|
+
const stateDir = join(wd, '.omx', 'state');
|
|
12
|
+
await mkdir(join(stateDir, 'sessions', 'sess-current'), { recursive: true });
|
|
13
|
+
await mkdir(join(stateDir, 'sessions', 'sess-explicit'), { recursive: true });
|
|
14
|
+
await writeFile(join(stateDir, 'session.json'), JSON.stringify({ session_id: 'sess-current', cwd: wd }, null, 2), 'utf-8');
|
|
15
|
+
assert.equal(await resolveScopedStateDir(stateDir, 'sess-explicit'), join(stateDir, 'sessions', 'sess-explicit'));
|
|
16
|
+
assert.equal(await getScopedStatePath(stateDir, 'hud-state.json', 'sess-explicit'), join(stateDir, 'sessions', 'sess-explicit', 'hud-state.json'));
|
|
17
|
+
await writeScopedJson(stateDir, 'hud-state.json', 'sess-explicit', { turn_count: 3 });
|
|
18
|
+
const explicitHud = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-explicit', 'hud-state.json'), 'utf-8'));
|
|
19
|
+
assert.equal(explicitHud.turn_count, 3);
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
await rm(wd, { recursive: true, force: true });
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
it('does not read current-session data when an explicit session has no state file', async () => {
|
|
26
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-notify-state-io-missing-'));
|
|
27
|
+
try {
|
|
28
|
+
const stateDir = join(wd, '.omx', 'state');
|
|
29
|
+
await mkdir(join(stateDir, 'sessions', 'sess-current'), { recursive: true });
|
|
30
|
+
await writeFile(join(stateDir, 'session.json'), JSON.stringify({ session_id: 'sess-current', cwd: wd }, null, 2), 'utf-8');
|
|
31
|
+
await writeFile(join(stateDir, 'sessions', 'sess-current', 'auto-nudge-state.json'), JSON.stringify({ count: 9 }, null, 2), 'utf-8');
|
|
32
|
+
const value = await readScopedJsonIfExists(stateDir, 'auto-nudge-state.json', 'sess-explicit', null);
|
|
33
|
+
assert.equal(value, null);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await rm(wd, { recursive: true, force: true });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=notify-state-io.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-state-io.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/notify-state-io.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAChE,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,KAAK,CACV,MAAM,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,EACtD,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAC5C,CAAC;YACF,MAAM,CAAC,KAAK,CACV,MAAM,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,eAAe,CAAC,EACrE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAC9D,CAAC;YAEF,MAAM,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;YACtF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAC3D,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAChE,OAAO,CACR,CAAC;YACF,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,uBAAuB,CAAC,EACnE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACrC,OAAO,CACR,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,sBAAsB,CACxC,QAAQ,EACR,uBAAuB,EACvB,eAAe,EACf,IAAI,CACL,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type CodexHookEventName = "SessionStart" | "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop";
|
|
1
|
+
type CodexHookEventName = "SessionStart" | "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "PreCompact" | "PostCompact" | "Stop";
|
|
2
2
|
type CodexHookPayload = Record<string, unknown>;
|
|
3
3
|
export type CodexLauncherKind = "native" | "cli";
|
|
4
4
|
export type CodexTransportKind = "attached-tmux" | "outside-tmux";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-execution-surface.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-execution-surface.ts"],"names":[],"mappings":"AAGA,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAsBD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,GACL,qBAAqB,CAwBvB"}
|
|
1
|
+
{"version":3,"file":"codex-execution-surface.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-execution-surface.ts"],"names":[],"mappings":"AAGA,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAsBD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,GACL,qBAAqB,CAwBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-execution-surface.js","sourceRoot":"","sources":["../../src/scripts/codex-execution-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-execution-surface.js","sourceRoot":"","sources":["../../src/scripts/codex-execution-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqBjC,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAW;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,GAAW,EACX,UAKI,EAAE;IAEN,MAAM,SAAS,GAAuB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QACvE,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/E,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,wBAAwB,GAAG,UAAU,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,iBAAiB,GAAG,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,OAAO,IAAI,aAAa,KAAK,UAAU,CAAC;IAC/G,MAAM,oBAAoB,GAAG,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,KAAK,CAAC;IACpH,MAAM,QAAQ,GAAsB,CAAC,iBAAiB,IAAI,CACxD,oBAAoB;WACjB,CAAC,OAAO,CAAC,aAAa,KAAK,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;WAC/F,CAAC,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,wBAAwB,CAAC;WACrE,CACD,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;eAC5C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE;eAC5C,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAChG,CACF;QACC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,KAAK,CAAC;IAEV,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type SkillActiveState } from "../hooks/keyword-detector.js";
|
|
2
2
|
import { reconcileHudForPromptSubmit } from "../hud/reconcile.js";
|
|
3
|
-
type CodexHookEventName = "SessionStart" | "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop";
|
|
3
|
+
type CodexHookEventName = "SessionStart" | "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "PreCompact" | "PostCompact" | "Stop";
|
|
4
4
|
type CodexHookPayload = Record<string, unknown>;
|
|
5
5
|
interface NativeHookDispatchOptions {
|
|
6
6
|
cwd?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AAsCA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AA4BtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AA6BlE,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,OAAO,2BAA2B,CAAC;CACpE;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AA6PD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAmBf;AAqTD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,GACL,MAAM,GAAG,IAAI,CAuBf;AA4hED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CA8QnC;AAOD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAGT;AA2ED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC3D"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { execFileSync } from "child_process";
|
|
2
2
|
import { closeSync, existsSync, openSync, readFileSync, readSync } from "fs";
|
|
3
|
-
import { mkdir, readFile, readdir, writeFile } from "fs/promises";
|
|
3
|
+
import { appendFile, mkdir, readFile, readdir, writeFile } from "fs/promises";
|
|
4
4
|
import { extname, join, relative, resolve } from "path";
|
|
5
5
|
import { pathToFileURL } from "url";
|
|
6
6
|
import { readModeState, readModeStateForActiveDecision, readModeStateForSession, updateModeState } from "../modes/base.js";
|
|
7
|
-
import { extractSessionIdFromInitializedStatePath, listActiveSkills, readVisibleSkillActiveState, } from "../state/skill-active.js";
|
|
7
|
+
import { extractSessionIdFromInitializedStatePath, getSkillActiveStatePaths, listActiveSkills, readSkillActiveState, readVisibleSkillActiveState, } from "../state/skill-active.js";
|
|
8
8
|
import { readSubagentSessionSummary, recordSubagentTurnForSession, } from "../subagents/tracker.js";
|
|
9
9
|
import { resolveCanonicalTeamStateRoot, resolveWorkerNotifyTeamStateRootPath } from "../team/state-root.js";
|
|
10
10
|
import { appendToLog, isSessionStateUsable, readSessionState, readUsableSessionState, reconcileNativeSessionStart, } from "../hooks/session.js";
|
|
@@ -21,7 +21,7 @@ import { resolveCodexExecutionSurface, } from "./codex-execution-surface.js";
|
|
|
21
21
|
import { buildNativeHookEvent, } from "../hooks/extensibility/events.js";
|
|
22
22
|
import { dispatchHookEventRuntime } from "../hooks/extensibility/runtime.js";
|
|
23
23
|
import { reconcileHudForPromptSubmit } from "../hud/reconcile.js";
|
|
24
|
-
import { onSessionStart as buildWikiSessionStartContext } from "../wiki/lifecycle.js";
|
|
24
|
+
import { onPostCompact as buildWikiPostCompactContext, onPreCompact as buildWikiPreCompactContext, onSessionStart as buildWikiSessionStartContext, } from "../wiki/lifecycle.js";
|
|
25
25
|
import { readAutoresearchCompletionStatus, readAutoresearchModeStateForActiveDecision } from "../autoresearch/skill-validation.js";
|
|
26
26
|
import { readRunState } from "../runtime/run-state.js";
|
|
27
27
|
import { getRunContinuationSnapshot, shouldContinueRun } from "../runtime/run-loop.js";
|
|
@@ -235,6 +235,8 @@ function readHookEventName(payload) {
|
|
|
235
235
|
|| raw === "PreToolUse"
|
|
236
236
|
|| raw === "PostToolUse"
|
|
237
237
|
|| raw === "UserPromptSubmit"
|
|
238
|
+
|| raw === "PreCompact"
|
|
239
|
+
|| raw === "PostCompact"
|
|
238
240
|
|| raw === "Stop") {
|
|
239
241
|
return raw;
|
|
240
242
|
}
|
|
@@ -250,6 +252,10 @@ export function mapCodexHookEventToOmxEvent(hookEventName) {
|
|
|
250
252
|
return "post-tool-use";
|
|
251
253
|
case "UserPromptSubmit":
|
|
252
254
|
return "keyword-detector";
|
|
255
|
+
case "PreCompact":
|
|
256
|
+
return "pre-compact";
|
|
257
|
+
case "PostCompact":
|
|
258
|
+
return "post-compact";
|
|
253
259
|
case "Stop":
|
|
254
260
|
return "stop";
|
|
255
261
|
default:
|
|
@@ -463,6 +469,7 @@ function readParentPid(pid) {
|
|
|
463
469
|
const raw = execFileSync("ps", ["-o", "ppid=", "-p", String(pid)], {
|
|
464
470
|
encoding: "utf-8",
|
|
465
471
|
stdio: ["ignore", "pipe", "ignore"],
|
|
472
|
+
windowsHide: true,
|
|
466
473
|
}).trim();
|
|
467
474
|
const ppid = Number.parseInt(raw, 10);
|
|
468
475
|
return Number.isFinite(ppid) && ppid > 0 ? ppid : null;
|
|
@@ -481,6 +488,7 @@ function readProcessCommand(pid) {
|
|
|
481
488
|
return execFileSync("ps", ["-o", "command=", "-p", String(pid)], {
|
|
482
489
|
encoding: "utf-8",
|
|
483
490
|
stdio: ["ignore", "pipe", "ignore"],
|
|
491
|
+
windowsHide: true,
|
|
484
492
|
}).trim();
|
|
485
493
|
}
|
|
486
494
|
catch {
|
|
@@ -1533,6 +1541,80 @@ async function readBlockingSkillForStop(cwd, sessionId, threadId, requiredSkill)
|
|
|
1533
1541
|
}
|
|
1534
1542
|
return null;
|
|
1535
1543
|
}
|
|
1544
|
+
function uniqueNonEmpty(values) {
|
|
1545
|
+
return [...new Set(values.map((value) => safeString(value).trim()).filter(Boolean))];
|
|
1546
|
+
}
|
|
1547
|
+
function isTerminalOrInactiveModeState(state) {
|
|
1548
|
+
if (!state)
|
|
1549
|
+
return true;
|
|
1550
|
+
if (state.active !== true)
|
|
1551
|
+
return true;
|
|
1552
|
+
if (getRunContinuationSnapshot(state)?.terminal === true)
|
|
1553
|
+
return true;
|
|
1554
|
+
const phase = safeString(state.current_phase ?? state.currentPhase).trim().toLowerCase();
|
|
1555
|
+
return phase !== "" && TERMINAL_MODE_PHASES.has(phase);
|
|
1556
|
+
}
|
|
1557
|
+
async function readSessionScopedModeStateForRootSkill(cwd, skill, sessionIds) {
|
|
1558
|
+
for (const sessionId of sessionIds) {
|
|
1559
|
+
const state = await readJsonIfExists(getStateFilePath(`${skill}-state.json`, cwd, sessionId));
|
|
1560
|
+
if (state)
|
|
1561
|
+
return state;
|
|
1562
|
+
}
|
|
1563
|
+
return null;
|
|
1564
|
+
}
|
|
1565
|
+
async function reconcileStaleRootSkillActiveStateForStop(cwd, sessionId) {
|
|
1566
|
+
const { rootPath } = getSkillActiveStatePaths(cwd);
|
|
1567
|
+
const rootState = await readSkillActiveState(rootPath);
|
|
1568
|
+
if (!rootState?.active)
|
|
1569
|
+
return;
|
|
1570
|
+
const initializedSessionId = extractSessionIdFromInitializedStatePath(rootState.initialized_state_path);
|
|
1571
|
+
const rootSessionIds = uniqueNonEmpty([
|
|
1572
|
+
sessionId,
|
|
1573
|
+
safeString(rootState.session_id),
|
|
1574
|
+
initializedSessionId,
|
|
1575
|
+
...listActiveSkills(rootState).map((entry) => safeString(entry.session_id)),
|
|
1576
|
+
]);
|
|
1577
|
+
if (rootSessionIds.length === 0)
|
|
1578
|
+
return;
|
|
1579
|
+
const activeEntries = listActiveSkills(rootState);
|
|
1580
|
+
let changed = false;
|
|
1581
|
+
const keptEntries = [];
|
|
1582
|
+
for (const entry of activeEntries) {
|
|
1583
|
+
const skill = safeString(entry.skill).trim();
|
|
1584
|
+
if (!skill)
|
|
1585
|
+
continue;
|
|
1586
|
+
const entrySessionId = safeString(entry.session_id).trim();
|
|
1587
|
+
const candidateSessionIds = uniqueNonEmpty([
|
|
1588
|
+
entrySessionId,
|
|
1589
|
+
sessionId,
|
|
1590
|
+
initializedSessionId,
|
|
1591
|
+
safeString(rootState.session_id),
|
|
1592
|
+
]);
|
|
1593
|
+
const modeState = await readSessionScopedModeStateForRootSkill(cwd, skill, candidateSessionIds);
|
|
1594
|
+
if (isTerminalOrInactiveModeState(modeState)) {
|
|
1595
|
+
changed = true;
|
|
1596
|
+
continue;
|
|
1597
|
+
}
|
|
1598
|
+
keptEntries.push(entry);
|
|
1599
|
+
}
|
|
1600
|
+
if (!changed)
|
|
1601
|
+
return;
|
|
1602
|
+
const nowIso = new Date().toISOString();
|
|
1603
|
+
const nextRoot = {
|
|
1604
|
+
...rootState,
|
|
1605
|
+
active: keptEntries.length > 0,
|
|
1606
|
+
skill: keptEntries[0]?.skill ?? safeString(rootState.skill).trim(),
|
|
1607
|
+
phase: keptEntries[0]?.phase ?? safeString(rootState.phase).trim(),
|
|
1608
|
+
updated_at: nowIso,
|
|
1609
|
+
active_skills: keptEntries,
|
|
1610
|
+
reconciled_at: nowIso,
|
|
1611
|
+
reconciliation_reason: "stop_hook_session_state_terminal",
|
|
1612
|
+
};
|
|
1613
|
+
if (keptEntries.length === 0) {
|
|
1614
|
+
nextRoot.phase = "inactive";
|
|
1615
|
+
}
|
|
1616
|
+
await writeFile(rootPath, JSON.stringify(nextRoot, null, 2));
|
|
1617
|
+
}
|
|
1536
1618
|
function buildRalplanContinuationStatus(blocker, activeSubagentCount) {
|
|
1537
1619
|
const phase = blocker.phase || "planning";
|
|
1538
1620
|
const artifact = blocker.latestPlanPath
|
|
@@ -1897,6 +1979,9 @@ async function buildStopHookOutput(payload, cwd, stateDir, options = {}) {
|
|
|
1897
1979
|
const sessionId = readPayloadSessionId(payload);
|
|
1898
1980
|
const canonicalSessionId = await resolveInternalSessionIdForPayload(cwd, sessionId);
|
|
1899
1981
|
const threadId = readPayloadThreadId(payload);
|
|
1982
|
+
if (canonicalSessionId) {
|
|
1983
|
+
await reconcileStaleRootSkillActiveStateForStop(cwd, canonicalSessionId);
|
|
1984
|
+
}
|
|
1900
1985
|
const execFollowupOutput = await buildExecFollowupStopOutput(cwd, canonicalSessionId);
|
|
1901
1986
|
if (execFollowupOutput)
|
|
1902
1987
|
return execFollowupOutput;
|
|
@@ -2196,7 +2281,29 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
2196
2281
|
allowTeamWorkerSideEffects: false,
|
|
2197
2282
|
});
|
|
2198
2283
|
}
|
|
2199
|
-
if (
|
|
2284
|
+
if (hookEventName === "PreCompact") {
|
|
2285
|
+
const compactContext = buildWikiPreCompactContext({ cwd });
|
|
2286
|
+
if (compactContext.additionalContext) {
|
|
2287
|
+
outputJson = {
|
|
2288
|
+
hookSpecificOutput: {
|
|
2289
|
+
hookEventName,
|
|
2290
|
+
additionalContext: compactContext.additionalContext,
|
|
2291
|
+
},
|
|
2292
|
+
};
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
else if (hookEventName === "PostCompact") {
|
|
2296
|
+
const compactContext = buildWikiPostCompactContext({ cwd });
|
|
2297
|
+
if (compactContext.additionalContext) {
|
|
2298
|
+
outputJson = {
|
|
2299
|
+
hookSpecificOutput: {
|
|
2300
|
+
hookEventName,
|
|
2301
|
+
additionalContext: compactContext.additionalContext,
|
|
2302
|
+
},
|
|
2303
|
+
};
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
else if ((hookEventName === "SessionStart" && !skipCanonicalSessionStartContext) || hookEventName === "UserPromptSubmit") {
|
|
2200
2307
|
const additionalContext = hookEventName === "SessionStart"
|
|
2201
2308
|
? await buildSessionStartContext(cwd, canonicalSessionId || nativeSessionId, {
|
|
2202
2309
|
hookEventName,
|
|
@@ -2268,11 +2375,29 @@ async function readStdinJson() {
|
|
|
2268
2375
|
function writeNativeHookJsonStdout(output) {
|
|
2269
2376
|
process.stdout.write(`${JSON.stringify(output)}\n`);
|
|
2270
2377
|
}
|
|
2378
|
+
async function logNativeHookCliError(cwd, type, error, payload = {}) {
|
|
2379
|
+
const logsDir = join(cwd || process.cwd(), ".omx", "logs");
|
|
2380
|
+
await mkdir(logsDir, { recursive: true }).catch(() => { });
|
|
2381
|
+
const logPath = join(logsDir, `native-hook-${new Date().toISOString().split("T")[0]}.jsonl`);
|
|
2382
|
+
await appendFile(logPath, JSON.stringify({
|
|
2383
|
+
timestamp: new Date().toISOString(),
|
|
2384
|
+
type,
|
|
2385
|
+
hook_event_name: readHookEventName(payload) ?? "Unknown",
|
|
2386
|
+
session_id: readPayloadSessionId(payload) || undefined,
|
|
2387
|
+
thread_id: readPayloadThreadId(payload) || undefined,
|
|
2388
|
+
turn_id: readPayloadTurnId(payload) || undefined,
|
|
2389
|
+
error: error instanceof Error ? error.message : String(error),
|
|
2390
|
+
}) + "\n").catch(() => { });
|
|
2391
|
+
}
|
|
2271
2392
|
function isStopDispatchFailureTestTrigger(payload) {
|
|
2272
2393
|
return process.env.NODE_ENV === "test"
|
|
2273
2394
|
&& process.env.OMX_NATIVE_HOOK_TEST_THROW_STOP_DISPATCH === "1"
|
|
2274
2395
|
&& readHookEventName(payload) === "Stop";
|
|
2275
2396
|
}
|
|
2397
|
+
function isDispatchFailureTestTrigger() {
|
|
2398
|
+
return process.env.NODE_ENV === "test"
|
|
2399
|
+
&& process.env.OMX_NATIVE_HOOK_TEST_THROW_DISPATCH === "1";
|
|
2400
|
+
}
|
|
2276
2401
|
function buildStopDispatchFailureOutput(error) {
|
|
2277
2402
|
const detail = error instanceof Error ? error.message : String(error);
|
|
2278
2403
|
const reason = "OMX native Stop hook failed before normal continuation handling. Continue once more, preserve runtime state, inspect the hook logs, and retry with a valid Stop JSON response.";
|
|
@@ -2286,6 +2411,7 @@ function buildStopDispatchFailureOutput(error) {
|
|
|
2286
2411
|
export async function runCodexNativeHookCli() {
|
|
2287
2412
|
const { payload, parseError } = await readStdinJson();
|
|
2288
2413
|
if (parseError) {
|
|
2414
|
+
await logNativeHookCliError(process.cwd(), "native_hook_stdin_parse_error", parseError);
|
|
2289
2415
|
writeNativeHookJsonStdout({
|
|
2290
2416
|
decision: "block",
|
|
2291
2417
|
reason: "OMX native hook received malformed JSON input. Preserve runtime state, inspect the emitting hook payload yourself, and retry with valid JSON.",
|
|
@@ -2300,6 +2426,9 @@ export async function runCodexNativeHookCli() {
|
|
|
2300
2426
|
if (isStopDispatchFailureTestTrigger(payload)) {
|
|
2301
2427
|
throw new Error("test-induced Stop dispatch failure");
|
|
2302
2428
|
}
|
|
2429
|
+
if (isDispatchFailureTestTrigger()) {
|
|
2430
|
+
throw new Error("test-induced dispatch failure");
|
|
2431
|
+
}
|
|
2303
2432
|
const result = await dispatchCodexNativeHook(payload);
|
|
2304
2433
|
if (result.outputJson) {
|
|
2305
2434
|
writeNativeHookJsonStdout(result.outputJson);
|
|
@@ -2309,17 +2438,20 @@ export async function runCodexNativeHookCli() {
|
|
|
2309
2438
|
}
|
|
2310
2439
|
}
|
|
2311
2440
|
catch (error) {
|
|
2312
|
-
|
|
2313
|
-
|
|
2441
|
+
const cwd = safeString(payload.cwd).trim() || process.cwd();
|
|
2442
|
+
await logNativeHookCliError(cwd, "native_hook_dispatch_error", error, payload);
|
|
2443
|
+
if (readHookEventName(payload) === "Stop") {
|
|
2444
|
+
writeNativeHookJsonStdout(buildStopDispatchFailureOutput(error));
|
|
2445
|
+
}
|
|
2446
|
+
else {
|
|
2447
|
+
process.exitCode = 1;
|
|
2314
2448
|
}
|
|
2315
|
-
process.stderr.write(`[omx] codex-native Stop hook dispatch failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
2316
|
-
writeNativeHookJsonStdout(buildStopDispatchFailureOutput(error));
|
|
2317
2449
|
}
|
|
2318
2450
|
}
|
|
2319
2451
|
if (isCodexNativeHookMainModule(import.meta.url, process.argv[1])) {
|
|
2320
2452
|
runCodexNativeHookCli().catch((error) => {
|
|
2321
|
-
process.stderr.write(`[omx] codex-native-hook failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
2322
2453
|
process.exitCode = 1;
|
|
2454
|
+
void logNativeHookCliError(process.cwd(), "native_hook_fatal_error", error);
|
|
2323
2455
|
});
|
|
2324
2456
|
}
|
|
2325
2457
|
//# sourceMappingURL=codex-native-hook.js.map
|