claudecode-omc 4.4.4 → 4.4.6
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/.mcp.json +2 -6
- package/README.es.md +64 -8
- package/README.ja.md +64 -8
- package/README.ko.md +64 -8
- package/README.pt.md +29 -0
- package/README.vi.md +29 -0
- package/README.zh.md +64 -8
- package/agents/architect.md +17 -7
- package/agents/code-reviewer.md +6 -7
- package/agents/critic.md +14 -1
- package/agents/deep-executor.md +6 -7
- package/agents/designer.md +6 -8
- package/agents/executor.md +6 -7
- package/agents/planner.md +21 -0
- package/agents/quality-reviewer.md +6 -7
- package/agents/security-reviewer.md +6 -7
- package/agents/test-engineer.md +6 -7
- package/bridge/mcp-server.cjs +517 -202
- package/bridge/runtime-cli.cjs +1547 -0
- package/bridge/team-bridge.cjs +348 -92
- package/bridge/{gemini-server.cjs → team-mcp.cjs} +10914 -10240
- package/dist/__tests__/auto-update.test.js +1 -1
- package/dist/__tests__/auto-update.test.js.map +1 -1
- package/dist/__tests__/cli-win32-warning.test.d.ts +2 -0
- package/dist/__tests__/cli-win32-warning.test.d.ts.map +1 -0
- package/dist/__tests__/cli-win32-warning.test.js +46 -0
- package/dist/__tests__/cli-win32-warning.test.js.map +1 -0
- package/dist/__tests__/codex-callsite-normalization.test.js +112 -0
- package/dist/__tests__/consensus-execution-handoff.test.d.ts +2 -0
- package/dist/__tests__/consensus-execution-handoff.test.d.ts.map +1 -1
- package/dist/__tests__/consensus-execution-handoff.test.js +48 -0
- package/dist/__tests__/consensus-execution-handoff.test.js.map +1 -1
- package/dist/__tests__/context-safety.test.d.ts +2 -0
- package/dist/__tests__/context-safety.test.d.ts.map +1 -0
- package/dist/__tests__/context-safety.test.js +59 -0
- package/dist/__tests__/context-safety.test.js.map +1 -0
- package/dist/__tests__/hooks.test.js +15 -0
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/hud/call-counts.test.js +0 -3
- package/dist/__tests__/hud/call-counts.test.js.map +1 -1
- package/dist/__tests__/hud/defaults.test.js +3 -5
- package/dist/__tests__/hud/defaults.test.js.map +1 -1
- package/dist/__tests__/hud/prompt-time.test.d.ts +2 -0
- package/dist/__tests__/hud/prompt-time.test.d.ts.map +1 -0
- package/dist/__tests__/hud/prompt-time.test.js +24 -0
- package/dist/__tests__/hud/prompt-time.test.js.map +1 -0
- package/dist/__tests__/hud/render.test.js +0 -1
- package/dist/__tests__/hud/render.test.js.map +1 -1
- package/dist/__tests__/hud/version-display.test.js +1 -0
- package/dist/__tests__/hud/version-display.test.js.map +1 -1
- package/dist/__tests__/hud/windows-platform.test.js +0 -4
- package/dist/__tests__/hud/windows-platform.test.js.map +1 -1
- package/dist/__tests__/hud-windows.test.js +5 -3
- package/dist/__tests__/hud-windows.test.js.map +1 -1
- package/dist/__tests__/installer-hud-skip.test.js +12 -2
- package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
- package/dist/__tests__/job-management-sqlite.test.js +0 -15
- package/dist/__tests__/job-management-sqlite.test.js.map +1 -1
- package/dist/__tests__/job-management.test.js +0 -16
- package/dist/__tests__/job-management.test.js.map +1 -1
- package/dist/__tests__/load-agent-prompt.test.js +0 -23
- package/dist/__tests__/load-agent-prompt.test.js.map +1 -1
- package/dist/__tests__/model-routing.test.js +3 -2
- package/dist/__tests__/model-routing.test.js.map +1 -1
- package/dist/__tests__/omc-tools-server-interop.test.js +1 -1
- package/dist/__tests__/omc-tools-server-interop.test.js.map +1 -1
- package/dist/__tests__/pre-tool-enforcer.test.d.ts +2 -0
- package/dist/__tests__/pre-tool-enforcer.test.d.ts.map +1 -0
- package/dist/__tests__/pre-tool-enforcer.test.js +194 -0
- package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -0
- package/dist/__tests__/prompt-injection.test.js +0 -26
- package/dist/__tests__/prompt-injection.test.js.map +1 -1
- package/dist/__tests__/purge-stale-cache.test.js +3 -2
- package/dist/__tests__/purge-stale-cache.test.js.map +1 -1
- package/dist/__tests__/run-cjs-graceful-fallback.test.d.ts +2 -0
- package/dist/__tests__/run-cjs-graceful-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/run-cjs-graceful-fallback.test.js +167 -0
- package/dist/__tests__/run-cjs-graceful-fallback.test.js.map +1 -0
- package/dist/__tests__/session-start-cache-cleanup.test.d.ts +2 -0
- package/dist/__tests__/session-start-cache-cleanup.test.d.ts.map +1 -0
- package/dist/__tests__/session-start-cache-cleanup.test.js +150 -0
- package/dist/__tests__/session-start-cache-cleanup.test.js.map +1 -0
- package/dist/__tests__/skills.test.js +10 -8
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/__tests__/team-server-validation.test.d.ts +2 -0
- package/dist/__tests__/team-server-validation.test.d.ts.map +1 -0
- package/dist/__tests__/team-server-validation.test.js +122 -0
- package/dist/__tests__/team-server-validation.test.js.map +1 -0
- package/dist/agents/index.d.ts +0 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +0 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/prompt-helpers.d.ts +74 -0
- package/dist/agents/prompt-helpers.d.ts.map +1 -0
- package/dist/agents/prompt-helpers.js +187 -0
- package/dist/agents/prompt-helpers.js.map +1 -0
- package/dist/agents/utils.d.ts +1 -5
- package/dist/agents/utils.d.ts.map +1 -1
- package/dist/agents/utils.js +1 -34
- package/dist/agents/utils.js.map +1 -1
- package/dist/cli/__tests__/launch.test.d.ts +1 -2
- package/dist/cli/__tests__/launch.test.d.ts.map +1 -1
- package/dist/cli/__tests__/launch.test.js +442 -48
- package/dist/cli/__tests__/launch.test.js.map +1 -1
- package/dist/cli/__tests__/teleport-help.test.d.ts +2 -0
- package/dist/cli/__tests__/teleport-help.test.d.ts.map +1 -0
- package/dist/cli/__tests__/teleport-help.test.js +17 -0
- package/dist/cli/__tests__/teleport-help.test.js.map +1 -0
- package/dist/cli/commands/teleport.d.ts +2 -1
- package/dist/cli/commands/teleport.d.ts.map +1 -1
- package/dist/cli/commands/teleport.js +6 -3
- package/dist/cli/commands/teleport.js.map +1 -1
- package/dist/cli/index.js +40 -290
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/launch.d.ts +83 -3
- package/dist/cli/launch.d.ts.map +1 -1
- package/dist/cli/launch.js +213 -48
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/win32-warning.d.ts +6 -0
- package/dist/cli/win32-warning.d.ts.map +1 -0
- package/dist/cli/win32-warning.js +15 -0
- package/dist/cli/win32-warning.js.map +1 -0
- package/dist/config/loader.d.ts +9 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +29 -19
- package/dist/config/loader.js.map +1 -1
- package/dist/config/models.d.ts +33 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +49 -0
- package/dist/config/models.js.map +1 -0
- package/dist/constants/names.d.ts +2 -0
- package/dist/constants/names.d.ts.map +1 -1
- package/dist/constants/names.js +2 -0
- package/dist/constants/names.js.map +1 -1
- package/dist/features/auto-update.d.ts.map +1 -1
- package/dist/features/auto-update.js +21 -11
- package/dist/features/auto-update.js.map +1 -1
- package/dist/features/background-agent/manager.d.ts.map +1 -1
- package/dist/features/background-agent/manager.js +1 -2
- package/dist/features/background-agent/manager.js.map +1 -1
- package/dist/features/boulder-state/storage.d.ts.map +1 -1
- package/dist/features/boulder-state/storage.js +9 -5
- package/dist/features/boulder-state/storage.js.map +1 -1
- package/dist/features/boulder-state/types.d.ts +4 -0
- package/dist/features/boulder-state/types.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.js +25 -78
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/features/delegation-enforcer.d.ts.map +1 -1
- package/dist/features/delegation-enforcer.js +4 -1
- package/dist/features/delegation-enforcer.js.map +1 -1
- package/dist/features/delegation-routing/__tests__/resolver.test.js +47 -122
- package/dist/features/delegation-routing/__tests__/resolver.test.js.map +1 -1
- package/dist/features/delegation-routing/resolver.d.ts.map +1 -1
- package/dist/features/delegation-routing/resolver.js +24 -47
- package/dist/features/delegation-routing/resolver.js.map +1 -1
- package/dist/features/delegation-routing/types.d.ts.map +1 -1
- package/dist/features/delegation-routing/types.js +2 -0
- package/dist/features/delegation-routing/types.js.map +1 -1
- package/dist/features/model-routing/external-model-policy.d.ts.map +1 -1
- package/dist/features/model-routing/external-model-policy.js.map +1 -1
- package/dist/features/model-routing/router.d.ts.map +1 -1
- package/dist/features/model-routing/router.js +12 -2
- package/dist/features/model-routing/router.js.map +1 -1
- package/dist/features/model-routing/types.d.ts +5 -1
- package/dist/features/model-routing/types.d.ts.map +1 -1
- package/dist/features/model-routing/types.js +7 -6
- package/dist/features/model-routing/types.js.map +1 -1
- package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
- package/dist/features/rate-limit-wait/daemon.js +40 -4
- package/dist/features/rate-limit-wait/daemon.js.map +1 -1
- package/dist/features/state-manager/index.js +2 -2
- package/dist/features/state-manager/index.js.map +1 -1
- package/dist/features/task-decomposer/index.js +14 -4
- package/dist/features/task-decomposer/index.js.map +1 -1
- package/dist/hooks/__tests__/bridge-openclaw.test.d.ts +2 -0
- package/dist/hooks/__tests__/bridge-openclaw.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/bridge-openclaw.test.js +124 -0
- package/dist/hooks/__tests__/bridge-openclaw.test.js.map +1 -0
- package/dist/hooks/__tests__/bridge-security.test.js +1 -1
- package/dist/hooks/__tests__/bridge-security.test.js.map +1 -1
- package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
- package/dist/hooks/auto-slash-command/executor.js +38 -61
- package/dist/hooks/auto-slash-command/executor.js.map +1 -1
- package/dist/hooks/autopilot/prompts.js +3 -3
- package/dist/hooks/bridge.d.ts +11 -0
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +154 -82
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/comment-checker/index.d.ts.map +1 -1
- package/dist/hooks/comment-checker/index.js +3 -1
- package/dist/hooks/comment-checker/index.js.map +1 -1
- package/dist/hooks/keyword-detector/__tests__/index.test.js +348 -1
- package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
- package/dist/hooks/keyword-detector/index.d.ts +29 -0
- package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
- package/dist/hooks/keyword-detector/index.js +123 -1
- package/dist/hooks/keyword-detector/index.js.map +1 -1
- package/dist/hooks/mode-registry/__tests__/session-isolation.test.js +40 -0
- package/dist/hooks/mode-registry/__tests__/session-isolation.test.js.map +1 -1
- package/dist/hooks/mode-registry/index.d.ts.map +1 -1
- package/dist/hooks/mode-registry/index.js +135 -52
- package/dist/hooks/mode-registry/index.js.map +1 -1
- package/dist/hooks/notepad/index.d.ts.map +1 -1
- package/dist/hooks/notepad/index.js +5 -3
- package/dist/hooks/notepad/index.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.d.ts +2 -0
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js +73 -0
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js.map +1 -0
- package/dist/hooks/persistent-mode/__tests__/idle-cooldown.test.js +89 -13
- package/dist/hooks/persistent-mode/__tests__/idle-cooldown.test.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.d.ts +2 -0
- package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.js +156 -0
- package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.js.map +1 -0
- package/dist/hooks/persistent-mode/idle-cooldown.test.d.ts +2 -3
- package/dist/hooks/persistent-mode/idle-cooldown.test.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/idle-cooldown.test.js +19 -4
- package/dist/hooks/persistent-mode/idle-cooldown.test.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts +2 -2
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +144 -26
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/plugin-patterns/index.d.ts.map +1 -1
- package/dist/hooks/plugin-patterns/index.js +22 -31
- package/dist/hooks/plugin-patterns/index.js.map +1 -1
- package/dist/hooks/pre-compact/index.js +1 -1
- package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
- package/dist/hooks/preemptive-compaction/index.js +3 -1
- package/dist/hooks/preemptive-compaction/index.js.map +1 -1
- package/dist/hooks/project-memory/index.d.ts.map +1 -1
- package/dist/hooks/project-memory/index.js +9 -0
- package/dist/hooks/project-memory/index.js.map +1 -1
- package/dist/hooks/project-memory/learner.d.ts.map +1 -1
- package/dist/hooks/project-memory/learner.js +107 -85
- package/dist/hooks/project-memory/learner.js.map +1 -1
- package/dist/hooks/project-memory/storage.d.ts.map +1 -1
- package/dist/hooks/project-memory/storage.js +3 -2
- package/dist/hooks/project-memory/storage.js.map +1 -1
- package/dist/hooks/recovery/context-window.d.ts +4 -0
- package/dist/hooks/recovery/context-window.d.ts.map +1 -1
- package/dist/hooks/recovery/context-window.js +22 -1
- package/dist/hooks/recovery/context-window.js.map +1 -1
- package/dist/hooks/recovery/session-recovery.js +1 -1
- package/dist/hooks/recovery/session-recovery.js.map +1 -1
- package/dist/hooks/session-end/index.d.ts.map +1 -1
- package/dist/hooks/session-end/index.js +13 -22
- package/dist/hooks/session-end/index.js.map +1 -1
- package/dist/hooks/setup/__tests__/windows-patch.test.d.ts +2 -0
- package/dist/hooks/setup/__tests__/windows-patch.test.d.ts.map +1 -0
- package/dist/hooks/setup/__tests__/windows-patch.test.js +110 -0
- package/dist/hooks/setup/__tests__/windows-patch.test.js.map +1 -0
- package/dist/hooks/setup/index.d.ts +18 -0
- package/dist/hooks/setup/index.d.ts.map +1 -1
- package/dist/hooks/setup/index.js +59 -1
- package/dist/hooks/setup/index.js.map +1 -1
- package/dist/hooks/skill-bridge.cjs +1 -0
- package/dist/hooks/skill-state/__tests__/skill-state.test.d.ts +2 -0
- package/dist/hooks/skill-state/__tests__/skill-state.test.d.ts.map +1 -0
- package/dist/hooks/skill-state/__tests__/skill-state.test.js +301 -0
- package/dist/hooks/skill-state/__tests__/skill-state.test.js.map +1 -0
- package/dist/hooks/skill-state/index.d.ts +79 -0
- package/dist/hooks/skill-state/index.d.ts.map +1 -0
- package/dist/hooks/skill-state/index.js +245 -0
- package/dist/hooks/skill-state/index.js.map +1 -0
- package/dist/hooks/team-pipeline/state.d.ts.map +1 -1
- package/dist/hooks/team-pipeline/state.js +5 -0
- package/dist/hooks/team-pipeline/state.js.map +1 -1
- package/dist/hooks/todo-continuation/index.d.ts +17 -0
- package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
- package/dist/hooks/todo-continuation/index.js +44 -2
- package/dist/hooks/todo-continuation/index.js.map +1 -1
- package/dist/hud/elements/call-counts.d.ts.map +1 -1
- package/dist/hud/elements/call-counts.js +6 -4
- package/dist/hud/elements/call-counts.js.map +1 -1
- package/dist/hud/elements/index.d.ts +1 -0
- package/dist/hud/elements/index.d.ts.map +1 -1
- package/dist/hud/elements/index.js +1 -0
- package/dist/hud/elements/index.js.map +1 -1
- package/dist/hud/elements/prompt-time.d.ts +13 -0
- package/dist/hud/elements/prompt-time.d.ts.map +1 -0
- package/dist/hud/elements/prompt-time.js +21 -0
- package/dist/hud/elements/prompt-time.js.map +1 -0
- package/dist/hud/index.d.ts +2 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +40 -215
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +7 -108
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +4 -3
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/stdin.d.ts +10 -0
- package/dist/hud/stdin.d.ts.map +1 -1
- package/dist/hud/stdin.js +43 -0
- package/dist/hud/stdin.js.map +1 -1
- package/dist/hud/types.d.ts +6 -18
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +6 -46
- package/dist/hud/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -11
- package/dist/index.js.map +1 -1
- package/dist/installer/hooks.d.ts +5 -0
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +8 -0
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +26 -11
- package/dist/installer/index.js.map +1 -1
- package/dist/interop/omx-team-state.d.ts.map +1 -1
- package/dist/interop/omx-team-state.js +38 -6
- package/dist/interop/omx-team-state.js.map +1 -1
- package/dist/interop/shared-state.d.ts.map +1 -1
- package/dist/interop/shared-state.js +58 -7
- package/dist/interop/shared-state.js.map +1 -1
- package/dist/lib/__tests__/worktree-paths.test.js +250 -1
- package/dist/lib/__tests__/worktree-paths.test.js.map +1 -1
- package/dist/lib/job-state-db.d.ts +150 -0
- package/dist/lib/job-state-db.d.ts.map +1 -0
- package/dist/lib/job-state-db.js +650 -0
- package/dist/lib/job-state-db.js.map +1 -0
- package/dist/lib/mode-names.d.ts +46 -0
- package/dist/lib/mode-names.d.ts.map +1 -0
- package/dist/lib/mode-names.js +73 -0
- package/dist/lib/mode-names.js.map +1 -0
- package/dist/lib/session-isolation.d.ts +32 -0
- package/dist/lib/session-isolation.d.ts.map +1 -0
- package/dist/lib/session-isolation.js +39 -0
- package/dist/lib/session-isolation.js.map +1 -0
- package/dist/lib/worktree-paths.d.ts +38 -8
- package/dist/lib/worktree-paths.d.ts.map +1 -1
- package/dist/lib/worktree-paths.js +124 -56
- package/dist/lib/worktree-paths.js.map +1 -1
- package/dist/mcp/__tests__/team-cleanup.test.d.ts +11 -0
- package/dist/mcp/__tests__/team-cleanup.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/team-cleanup.test.js +228 -0
- package/dist/mcp/__tests__/team-cleanup.test.js.map +1 -0
- package/dist/mcp/cli-detection.d.ts +4 -8
- package/dist/mcp/cli-detection.d.ts.map +1 -1
- package/dist/mcp/cli-detection.js +5 -8
- package/dist/mcp/cli-detection.js.map +1 -1
- package/dist/mcp/codex-request-normalizer.js +59 -0
- package/dist/mcp/codex-server.js +16 -4
- package/dist/mcp/codex-standalone-server.js +13 -4
- package/dist/mcp/index.d.ts +2 -4
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -5
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/job-management.d.ts.map +1 -1
- package/dist/mcp/job-management.js +11 -9
- package/dist/mcp/job-management.js.map +1 -1
- package/dist/mcp/job-state-db.d.ts +1 -149
- package/dist/mcp/job-state-db.d.ts.map +1 -1
- package/dist/mcp/job-state-db.js +2 -649
- package/dist/mcp/job-state-db.js.map +1 -1
- package/dist/mcp/mcp-config.d.ts +1 -1
- package/dist/mcp/mcp-config.js +1 -1
- package/dist/mcp/prompt-injection.d.ts +14 -76
- package/dist/mcp/prompt-injection.d.ts.map +1 -1
- package/dist/mcp/prompt-injection.js +34 -175
- package/dist/mcp/prompt-injection.js.map +1 -1
- package/dist/mcp/standalone-server.js +2 -0
- package/dist/mcp/standalone-server.js.map +1 -1
- package/dist/mcp/team-server.d.ts +16 -0
- package/dist/mcp/team-server.d.ts.map +1 -0
- package/dist/mcp/team-server.js +356 -0
- package/dist/mcp/team-server.js.map +1 -0
- package/dist/notifications/__tests__/formatter.test.js +62 -0
- package/dist/notifications/__tests__/formatter.test.js.map +1 -1
- package/dist/notifications/__tests__/hook-config.test.d.ts +14 -0
- package/dist/notifications/__tests__/hook-config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/hook-config.test.js +210 -0
- package/dist/notifications/__tests__/hook-config.test.js.map +1 -0
- package/dist/notifications/__tests__/platform-gating.test.d.ts +12 -0
- package/dist/notifications/__tests__/platform-gating.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/platform-gating.test.js +140 -0
- package/dist/notifications/__tests__/platform-gating.test.js.map +1 -0
- package/dist/notifications/__tests__/template-engine.test.d.ts +13 -0
- package/dist/notifications/__tests__/template-engine.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/template-engine.test.js +378 -0
- package/dist/notifications/__tests__/template-engine.test.js.map +1 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +54 -18
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/dispatcher.d.ts +2 -2
- package/dist/notifications/dispatcher.d.ts.map +1 -1
- package/dist/notifications/dispatcher.js +10 -6
- package/dist/notifications/dispatcher.js.map +1 -1
- package/dist/notifications/formatter.d.ts.map +1 -1
- package/dist/notifications/formatter.js +22 -0
- package/dist/notifications/formatter.js.map +1 -1
- package/dist/notifications/hook-config-types.d.ts +44 -0
- package/dist/notifications/hook-config-types.d.ts.map +1 -0
- package/dist/notifications/hook-config-types.js +8 -0
- package/dist/notifications/hook-config-types.js.map +1 -0
- package/dist/notifications/hook-config.d.ts +36 -0
- package/dist/notifications/hook-config.d.ts.map +1 -0
- package/dist/notifications/hook-config.js +95 -0
- package/dist/notifications/hook-config.js.map +1 -0
- package/dist/notifications/index.d.ts +3 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +31 -3
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +1 -0
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js +13 -5
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/template-engine.d.ts +34 -0
- package/dist/notifications/template-engine.d.ts.map +1 -0
- package/dist/notifications/template-engine.js +248 -0
- package/dist/notifications/template-engine.js.map +1 -0
- package/dist/notifications/types.d.ts +0 -2
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/config.test.d.ts +2 -0
- package/dist/openclaw/__tests__/config.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/config.test.js +200 -0
- package/dist/openclaw/__tests__/config.test.js.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.js +348 -0
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -0
- package/dist/openclaw/__tests__/index.test.d.ts +2 -0
- package/dist/openclaw/__tests__/index.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/index.test.js +235 -0
- package/dist/openclaw/__tests__/index.test.js.map +1 -0
- package/dist/openclaw/config.d.ts +33 -0
- package/dist/openclaw/config.d.ts.map +1 -0
- package/dist/openclaw/config.js +83 -0
- package/dist/openclaw/config.js.map +1 -0
- package/dist/openclaw/dispatcher.d.ts +47 -0
- package/dist/openclaw/dispatcher.d.ts.map +1 -0
- package/dist/openclaw/dispatcher.js +138 -0
- package/dist/openclaw/dispatcher.js.map +1 -0
- package/dist/openclaw/index.d.ts +25 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +132 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/openclaw/types.d.ts +102 -0
- package/dist/openclaw/types.d.ts.map +1 -0
- package/dist/openclaw/types.js +8 -0
- package/dist/openclaw/types.js.map +1 -0
- package/dist/platform/index.d.ts +5 -0
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +17 -0
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/process-utils.d.ts.map +1 -1
- package/dist/platform/process-utils.js +55 -9
- package/dist/platform/process-utils.js.map +1 -1
- package/dist/shared/types.d.ts +7 -5
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/team/__tests__/bridge-integration.test.js +10 -8
- package/dist/team/__tests__/bridge-integration.test.js.map +1 -1
- package/dist/team/__tests__/edge-cases.test.js +40 -29
- package/dist/team/__tests__/edge-cases.test.js.map +1 -1
- package/dist/team/__tests__/idle-nudge.test.d.ts +11 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
- package/dist/team/__tests__/idle-nudge.test.js +282 -0
- package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
- package/dist/team/__tests__/mcp-team-bridge.spawn-args.test.js +2 -2
- package/dist/team/__tests__/mcp-team-bridge.spawn-args.test.js.map +1 -1
- package/dist/team/__tests__/mcp-team-bridge.usage.test.d.ts +2 -0
- package/dist/team/__tests__/mcp-team-bridge.usage.test.d.ts.map +1 -0
- package/dist/team/__tests__/mcp-team-bridge.usage.test.js +49 -0
- package/dist/team/__tests__/mcp-team-bridge.usage.test.js.map +1 -0
- package/dist/team/__tests__/model-contract.test.d.ts +2 -0
- package/dist/team/__tests__/model-contract.test.d.ts.map +1 -0
- package/dist/team/__tests__/model-contract.test.js +121 -0
- package/dist/team/__tests__/model-contract.test.js.map +1 -0
- package/dist/team/__tests__/phase-controller.test.d.ts +2 -0
- package/dist/team/__tests__/phase-controller.test.d.ts.map +1 -0
- package/dist/team/__tests__/phase-controller.test.js +45 -0
- package/dist/team/__tests__/phase-controller.test.js.map +1 -0
- package/dist/team/__tests__/runtime-assign.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-assign.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-assign.test.js +43 -0
- package/dist/team/__tests__/runtime-assign.test.js.map +1 -0
- package/dist/team/__tests__/runtime-gemini-prompt.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-gemini-prompt.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-gemini-prompt.test.js +153 -0
- package/dist/team/__tests__/runtime-gemini-prompt.test.js.map +1 -0
- package/dist/team/__tests__/runtime-prompt-mode.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-prompt-mode.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-prompt-mode.test.js +162 -0
- package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.d.ts +2 -0
- package/dist/team/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime.test.js +37 -0
- package/dist/team/__tests__/runtime.test.js.map +1 -0
- package/dist/team/__tests__/task-file-ops.test.js +63 -59
- package/dist/team/__tests__/task-file-ops.test.js.map +1 -1
- package/dist/team/__tests__/team-name.test.d.ts +2 -0
- package/dist/team/__tests__/team-name.test.d.ts.map +1 -0
- package/dist/team/__tests__/team-name.test.js +18 -0
- package/dist/team/__tests__/team-name.test.js.map +1 -0
- package/dist/team/__tests__/team-status.test.js +52 -6
- package/dist/team/__tests__/team-status.test.js.map +1 -1
- package/dist/team/__tests__/tmux-comm.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-comm.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-comm.test.js +26 -0
- package/dist/team/__tests__/tmux-comm.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.create-team.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-session.create-team.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-session.create-team.test.js +104 -0
- package/dist/team/__tests__/tmux-session.create-team.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.spawn.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-session.spawn.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-session.spawn.test.js +61 -0
- package/dist/team/__tests__/tmux-session.spawn.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.test.js +161 -2
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.d.ts +2 -0
- package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +1 -0
- package/dist/team/__tests__/worker-bootstrap.test.js +58 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -0
- package/dist/team/bridge-entry.d.ts.map +1 -1
- package/dist/team/bridge-entry.js +4 -0
- package/dist/team/bridge-entry.js.map +1 -1
- package/dist/team/capabilities.d.ts.map +1 -1
- package/dist/team/capabilities.js +3 -0
- package/dist/team/capabilities.js.map +1 -1
- package/dist/team/cli-detection.d.ts +9 -0
- package/dist/team/cli-detection.d.ts.map +1 -0
- package/dist/team/cli-detection.js +29 -0
- package/dist/team/cli-detection.js.map +1 -0
- package/dist/team/idle-nudge.d.ts +53 -0
- package/dist/team/idle-nudge.d.ts.map +1 -0
- package/dist/team/idle-nudge.js +124 -0
- package/dist/team/idle-nudge.js.map +1 -0
- package/dist/team/inbox-outbox.d.ts.map +1 -1
- package/dist/team/inbox-outbox.js +7 -3
- package/dist/team/inbox-outbox.js.map +1 -1
- package/dist/team/index.d.ts +14 -1
- package/dist/team/index.d.ts.map +1 -1
- package/dist/team/index.js +12 -1
- package/dist/team/index.js.map +1 -1
- package/dist/team/mcp-team-bridge.d.ts +9 -0
- package/dist/team/mcp-team-bridge.d.ts.map +1 -1
- package/dist/team/mcp-team-bridge.js +82 -3
- package/dist/team/mcp-team-bridge.js.map +1 -1
- package/dist/team/model-contract.d.ts +37 -0
- package/dist/team/model-contract.d.ts.map +1 -0
- package/dist/team/model-contract.js +139 -0
- package/dist/team/model-contract.js.map +1 -0
- package/dist/team/phase-controller.d.ts +33 -0
- package/dist/team/phase-controller.d.ts.map +1 -0
- package/dist/team/phase-controller.js +79 -0
- package/dist/team/phase-controller.js.map +1 -0
- package/dist/team/runtime-cli.d.ts +9 -0
- package/dist/team/runtime-cli.d.ts.map +1 -0
- package/dist/team/runtime-cli.js +188 -0
- package/dist/team/runtime-cli.js.map +1 -0
- package/dist/team/runtime.d.ts +95 -0
- package/dist/team/runtime.d.ts.map +1 -0
- package/dist/team/runtime.js +692 -0
- package/dist/team/runtime.js.map +1 -0
- package/dist/team/state-paths.d.ts +72 -0
- package/dist/team/state-paths.d.ts.map +1 -0
- package/dist/team/state-paths.js +87 -0
- package/dist/team/state-paths.js.map +1 -0
- package/dist/team/task-file-ops.d.ts +27 -7
- package/dist/team/task-file-ops.d.ts.map +1 -1
- package/dist/team/task-file-ops.js +116 -55
- package/dist/team/task-file-ops.js.map +1 -1
- package/dist/team/team-name.d.ts +2 -0
- package/dist/team/team-name.d.ts.map +1 -0
- package/dist/team/team-name.js +8 -0
- package/dist/team/team-name.js.map +1 -0
- package/dist/team/team-registration.d.ts +1 -1
- package/dist/team/team-registration.d.ts.map +1 -1
- package/dist/team/team-registration.js.map +1 -1
- package/dist/team/team-status.d.ts +11 -1
- package/dist/team/team-status.d.ts.map +1 -1
- package/dist/team/team-status.js +32 -3
- package/dist/team/team-status.js.map +1 -1
- package/dist/team/tmux-comm.d.ts +36 -0
- package/dist/team/tmux-comm.d.ts.map +1 -0
- package/dist/team/tmux-comm.js +115 -0
- package/dist/team/tmux-comm.js.map +1 -0
- package/dist/team/tmux-session.d.ts +92 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +533 -2
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/types.d.ts +10 -3
- package/dist/team/types.d.ts.map +1 -1
- package/dist/team/unified-team.d.ts.map +1 -1
- package/dist/team/unified-team.js +13 -3
- package/dist/team/unified-team.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +39 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -0
- package/dist/team/worker-bootstrap.js +117 -0
- package/dist/team/worker-bootstrap.js.map +1 -0
- package/dist/team/worker-health.d.ts.map +1 -1
- package/dist/team/worker-health.js +15 -3
- package/dist/team/worker-health.js.map +1 -1
- package/dist/tools/ast-tools.js +1 -1
- package/dist/tools/ast-tools.js.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.js +4 -2
- package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
- package/dist/tools/lsp/__tests__/client-handle-data.test.d.ts +2 -0
- package/dist/tools/lsp/__tests__/client-handle-data.test.d.ts.map +1 -0
- package/dist/tools/lsp/__tests__/client-handle-data.test.js +138 -0
- package/dist/tools/lsp/__tests__/client-handle-data.test.js.map +1 -0
- package/dist/tools/lsp/client.d.ts +13 -0
- package/dist/tools/lsp/client.d.ts.map +1 -1
- package/dist/tools/lsp/client.js +64 -8
- package/dist/tools/lsp/client.js.map +1 -1
- package/dist/tools/lsp/servers.d.ts.map +1 -1
- package/dist/tools/lsp/servers.js +4 -9
- package/dist/tools/lsp/servers.js.map +1 -1
- package/dist/tools/lsp-tools.d.ts.map +1 -1
- package/dist/tools/lsp-tools.js +4 -0
- package/dist/tools/lsp-tools.js.map +1 -1
- package/dist/tools/python-repl/bridge-manager.d.ts.map +1 -1
- package/dist/tools/python-repl/bridge-manager.js +15 -1
- package/dist/tools/python-repl/bridge-manager.js.map +1 -1
- package/dist/tools/python-repl/session-lock.d.ts.map +1 -1
- package/dist/tools/python-repl/session-lock.js +35 -15
- package/dist/tools/python-repl/session-lock.js.map +1 -1
- package/dist/tools/state-tools.d.ts.map +1 -1
- package/dist/tools/state-tools.js +10 -0
- package/dist/tools/state-tools.js.map +1 -1
- package/dist/utils/__tests__/frontmatter.test.d.ts +2 -0
- package/dist/utils/__tests__/frontmatter.test.d.ts.map +1 -0
- package/dist/utils/__tests__/frontmatter.test.js +147 -0
- package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +24 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +62 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +4 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/string-width.d.ts.map +1 -1
- package/dist/utils/string-width.js +15 -4
- package/dist/utils/string-width.js.map +1 -1
- package/dist/verification/tier-selector.js +1 -1
- package/dist/verification/tier-selector.js.map +1 -1
- package/docs/AGENTS.md +4 -2
- package/docs/CLAUDE.md +8 -48
- package/docs/MIGRATION.md +114 -0
- package/docs/REFERENCE.md +35 -102
- package/hooks/hooks.json +23 -23
- package/package.json +8 -8
- package/scripts/build-runtime-cli.mjs +24 -0
- package/scripts/build-team-server.mjs +28 -0
- package/scripts/cleanup-orphans.mjs +22 -5
- package/scripts/context-safety.mjs +5 -1
- package/scripts/demo-team.mjs +26 -0
- package/scripts/keyword-detector.mjs +6 -76
- package/scripts/openclaw-gateway-demo.mjs +168 -0
- package/scripts/persistent-mode.cjs +30 -4
- package/scripts/persistent-mode.mjs +48 -3
- package/scripts/plugin-setup.mjs +66 -3
- package/scripts/post-tool-use-failure.mjs +20 -2
- package/scripts/post-tool-verifier.mjs +57 -6
- package/scripts/pre-tool-enforcer.mjs +125 -5
- package/scripts/run.cjs +114 -0
- package/scripts/session-start.mjs +56 -7
- package/scripts/status.mjs +144 -0
- package/scripts/test-codex-gemini-team.mjs +78 -0
- package/skills/AGENTS.md +5 -2
- package/skills/analyze/SKILL.md +5 -11
- package/skills/autopilot/SKILL.md +16 -25
- package/skills/ccg/SKILL.md +88 -99
- package/skills/configure-notifications/SKILL.md +177 -0
- package/skills/configure-openclaw/SKILL.md +320 -0
- package/skills/external-context/SKILL.md +7 -83
- package/skills/hud/SKILL.md +68 -46
- package/skills/omc-setup/SKILL.md +58 -19
- package/skills/omc-teams/SKILL.md +178 -0
- package/skills/pipeline/SKILL.md +4 -4
- package/skills/plan/SKILL.md +28 -16
- package/skills/ralph/SKILL.md +3 -4
- package/skills/ralph-init/SKILL.md +3 -1
- package/skills/ralplan/SKILL.md +93 -8
- package/skills/security-review/SKILL.md +5 -6
- package/skills/tdd/SKILL.md +5 -6
- package/skills/team/SKILL.md +35 -34
- package/templates/hooks/keyword-detector.mjs +11 -82
- package/templates/hooks/persistent-mode.mjs +120 -3
- package/templates/hooks/post-tool-use-failure.mjs +20 -2
- package/templates/hooks/session-start.mjs +2 -16
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts +0 -2
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/backfill-dedup.test.js +0 -179
- package/dist/__tests__/analytics/backfill-dedup.test.js.map +0 -1
- package/dist/__tests__/analytics/backfill-engine.test.d.ts +0 -2
- package/dist/__tests__/analytics/backfill-engine.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/backfill-engine.test.js +0 -362
- package/dist/__tests__/analytics/backfill-engine.test.js.map +0 -1
- package/dist/__tests__/analytics/output-estimator.test.d.ts +0 -2
- package/dist/__tests__/analytics/output-estimator.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/output-estimator.test.js +0 -124
- package/dist/__tests__/analytics/output-estimator.test.js.map +0 -1
- package/dist/__tests__/analytics/token-extractor.test.d.ts +0 -2
- package/dist/__tests__/analytics/token-extractor.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/token-extractor.test.js +0 -165
- package/dist/__tests__/analytics/token-extractor.test.js.map +0 -1
- package/dist/__tests__/analytics/token-tracker.test.d.ts +0 -2
- package/dist/__tests__/analytics/token-tracker.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/token-tracker.test.js +0 -189
- package/dist/__tests__/analytics/token-tracker.test.js.map +0 -1
- package/dist/__tests__/analytics/tokscale-adapter.test.d.ts +0 -2
- package/dist/__tests__/analytics/tokscale-adapter.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/tokscale-adapter.test.js +0 -79
- package/dist/__tests__/analytics/tokscale-adapter.test.js.map +0 -1
- package/dist/__tests__/analytics/transcript-parser.test.d.ts +0 -2
- package/dist/__tests__/analytics/transcript-parser.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/transcript-parser.test.js +0 -285
- package/dist/__tests__/analytics/transcript-parser.test.js.map +0 -1
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts +0 -2
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/transcript-scanner.test.js +0 -443
- package/dist/__tests__/analytics/transcript-scanner.test.js.map +0 -1
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts +0 -2
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/transcript-token-extractor.test.js +0 -177
- package/dist/__tests__/analytics/transcript-token-extractor.test.js.map +0 -1
- package/dist/analytics/analytics-summary.d.ts +0 -47
- package/dist/analytics/analytics-summary.d.ts.map +0 -1
- package/dist/analytics/analytics-summary.js +0 -171
- package/dist/analytics/analytics-summary.js.map +0 -1
- package/dist/analytics/backfill-dedup.d.ts +0 -49
- package/dist/analytics/backfill-dedup.d.ts.map +0 -1
- package/dist/analytics/backfill-dedup.js +0 -115
- package/dist/analytics/backfill-dedup.js.map +0 -1
- package/dist/analytics/backfill-engine.d.ts +0 -59
- package/dist/analytics/backfill-engine.d.ts.map +0 -1
- package/dist/analytics/backfill-engine.js +0 -172
- package/dist/analytics/backfill-engine.js.map +0 -1
- package/dist/analytics/cost-estimator.d.ts +0 -29
- package/dist/analytics/cost-estimator.d.ts.map +0 -1
- package/dist/analytics/cost-estimator.js +0 -135
- package/dist/analytics/cost-estimator.js.map +0 -1
- package/dist/analytics/export.d.ts +0 -7
- package/dist/analytics/export.d.ts.map +0 -1
- package/dist/analytics/export.js +0 -93
- package/dist/analytics/export.js.map +0 -1
- package/dist/analytics/index.d.ts +0 -24
- package/dist/analytics/index.d.ts.map +0 -1
- package/dist/analytics/index.js +0 -30
- package/dist/analytics/index.js.map +0 -1
- package/dist/analytics/metrics-collector.d.ts +0 -30
- package/dist/analytics/metrics-collector.d.ts.map +0 -1
- package/dist/analytics/metrics-collector.js +0 -96
- package/dist/analytics/metrics-collector.js.map +0 -1
- package/dist/analytics/output-estimator.d.ts +0 -26
- package/dist/analytics/output-estimator.d.ts.map +0 -1
- package/dist/analytics/output-estimator.js +0 -65
- package/dist/analytics/output-estimator.js.map +0 -1
- package/dist/analytics/query-engine.d.ts +0 -35
- package/dist/analytics/query-engine.d.ts.map +0 -1
- package/dist/analytics/query-engine.js +0 -239
- package/dist/analytics/query-engine.js.map +0 -1
- package/dist/analytics/session-catalog.d.ts +0 -45
- package/dist/analytics/session-catalog.d.ts.map +0 -1
- package/dist/analytics/session-catalog.js +0 -153
- package/dist/analytics/session-catalog.js.map +0 -1
- package/dist/analytics/session-manager.d.ts +0 -58
- package/dist/analytics/session-manager.d.ts.map +0 -1
- package/dist/analytics/session-manager.js +0 -396
- package/dist/analytics/session-manager.js.map +0 -1
- package/dist/analytics/session-types.d.ts +0 -37
- package/dist/analytics/session-types.d.ts.map +0 -1
- package/dist/analytics/session-types.js +0 -2
- package/dist/analytics/session-types.js.map +0 -1
- package/dist/analytics/token-extractor.d.ts +0 -31
- package/dist/analytics/token-extractor.d.ts.map +0 -1
- package/dist/analytics/token-extractor.js +0 -57
- package/dist/analytics/token-extractor.js.map +0 -1
- package/dist/analytics/token-tracker.d.ts +0 -33
- package/dist/analytics/token-tracker.d.ts.map +0 -1
- package/dist/analytics/token-tracker.js +0 -443
- package/dist/analytics/token-tracker.js.map +0 -1
- package/dist/analytics/tokscale-adapter.d.ts +0 -71
- package/dist/analytics/tokscale-adapter.d.ts.map +0 -1
- package/dist/analytics/tokscale-adapter.js +0 -223
- package/dist/analytics/tokscale-adapter.js.map +0 -1
- package/dist/analytics/transcript-parser.d.ts +0 -42
- package/dist/analytics/transcript-parser.d.ts.map +0 -1
- package/dist/analytics/transcript-parser.js +0 -90
- package/dist/analytics/transcript-parser.js.map +0 -1
- package/dist/analytics/transcript-scanner.d.ts +0 -51
- package/dist/analytics/transcript-scanner.d.ts.map +0 -1
- package/dist/analytics/transcript-scanner.js +0 -279
- package/dist/analytics/transcript-scanner.js.map +0 -1
- package/dist/analytics/transcript-token-extractor.d.ts +0 -35
- package/dist/analytics/transcript-token-extractor.d.ts.map +0 -1
- package/dist/analytics/transcript-token-extractor.js +0 -136
- package/dist/analytics/transcript-token-extractor.js.map +0 -1
- package/dist/analytics/types.d.ts +0 -119
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js +0 -32
- package/dist/analytics/types.js.map +0 -1
- package/dist/cli/analytics.d.ts +0 -3
- package/dist/cli/analytics.d.ts.map +0 -1
- package/dist/cli/analytics.js +0 -105
- package/dist/cli/analytics.js.map +0 -1
- package/dist/cli/commands/agents.d.ts +0 -5
- package/dist/cli/commands/agents.d.ts.map +0 -1
- package/dist/cli/commands/agents.js +0 -31
- package/dist/cli/commands/agents.js.map +0 -1
- package/dist/cli/commands/backfill.d.ts +0 -15
- package/dist/cli/commands/backfill.d.ts.map +0 -1
- package/dist/cli/commands/backfill.js +0 -146
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/cleanup.d.ts +0 -4
- package/dist/cli/commands/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/cleanup.js +0 -31
- package/dist/cli/commands/cleanup.js.map +0 -1
- package/dist/cli/commands/cost.d.ts +0 -4
- package/dist/cli/commands/cost.d.ts.map +0 -1
- package/dist/cli/commands/cost.js +0 -53
- package/dist/cli/commands/cost.js.map +0 -1
- package/dist/cli/commands/export.d.ts +0 -5
- package/dist/cli/commands/export.d.ts.map +0 -1
- package/dist/cli/commands/export.js +0 -30
- package/dist/cli/commands/export.js.map +0 -1
- package/dist/cli/commands/sessions.d.ts +0 -5
- package/dist/cli/commands/sessions.d.ts.map +0 -1
- package/dist/cli/commands/sessions.js +0 -89
- package/dist/cli/commands/sessions.js.map +0 -1
- package/dist/cli/commands/stats.d.ts +0 -5
- package/dist/cli/commands/stats.d.ts.map +0 -1
- package/dist/cli/commands/stats.js +0 -84
- package/dist/cli/commands/stats.js.map +0 -1
- package/dist/cli/utils/tokscale-launcher.d.ts +0 -25
- package/dist/cli/utils/tokscale-launcher.d.ts.map +0 -1
- package/dist/cli/utils/tokscale-launcher.js +0 -70
- package/dist/cli/utils/tokscale-launcher.js.map +0 -1
- package/dist/hud/analytics-display.d.ts +0 -63
- package/dist/hud/analytics-display.d.ts.map +0 -1
- package/dist/hud/analytics-display.js +0 -190
- package/dist/hud/analytics-display.js.map +0 -1
- package/scripts/build-codex-server.mjs +0 -95
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Names - Single source of truth for all execution mode name constants.
|
|
3
|
+
*
|
|
4
|
+
* Every module that references mode names by string should import from here
|
|
5
|
+
* instead of hardcoding literals. This prevents drift when modes are added,
|
|
6
|
+
* renamed, or removed.
|
|
7
|
+
*/
|
|
8
|
+
/** All supported execution mode identifiers. */
|
|
9
|
+
export declare const MODE_NAMES: {
|
|
10
|
+
readonly AUTOPILOT: "autopilot";
|
|
11
|
+
readonly ULTRAPILOT: "ultrapilot";
|
|
12
|
+
readonly SWARM: "swarm";
|
|
13
|
+
readonly PIPELINE: "pipeline";
|
|
14
|
+
readonly TEAM: "team";
|
|
15
|
+
readonly RALPH: "ralph";
|
|
16
|
+
readonly ULTRAWORK: "ultrawork";
|
|
17
|
+
readonly ULTRAQA: "ultraqa";
|
|
18
|
+
};
|
|
19
|
+
/** Union type derived from the constant map. */
|
|
20
|
+
export type ModeName = typeof MODE_NAMES[keyof typeof MODE_NAMES];
|
|
21
|
+
/**
|
|
22
|
+
* All mode names as an array (useful for iteration).
|
|
23
|
+
* Order matches the canonical ExecutionMode union in mode-registry/types.ts.
|
|
24
|
+
*/
|
|
25
|
+
export declare const ALL_MODE_NAMES: readonly ModeName[];
|
|
26
|
+
/**
|
|
27
|
+
* Mode state file mapping — the canonical filename for each mode's state file
|
|
28
|
+
* relative to `.omc/state/`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const MODE_STATE_FILE_MAP: Readonly<Record<ModeName, string>>;
|
|
31
|
+
/**
|
|
32
|
+
* Mode state files used by session-end cleanup.
|
|
33
|
+
* Includes marker files for modes that use them.
|
|
34
|
+
*/
|
|
35
|
+
export declare const SESSION_END_MODE_STATE_FILES: readonly {
|
|
36
|
+
file: string;
|
|
37
|
+
mode: string;
|
|
38
|
+
}[];
|
|
39
|
+
/**
|
|
40
|
+
* Modes detected by session-end for metrics reporting.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SESSION_METRICS_MODE_FILES: readonly {
|
|
43
|
+
file: string;
|
|
44
|
+
mode: string;
|
|
45
|
+
}[];
|
|
46
|
+
//# sourceMappingURL=mode-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-names.d.ts","sourceRoot":"","sources":["../../src/lib/mode-names.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gDAAgD;AAChD,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,gDAAgD;AAChD,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,QAAQ,EASpC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CASlE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAUjF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAO/E,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Names - Single source of truth for all execution mode name constants.
|
|
3
|
+
*
|
|
4
|
+
* Every module that references mode names by string should import from here
|
|
5
|
+
* instead of hardcoding literals. This prevents drift when modes are added,
|
|
6
|
+
* renamed, or removed.
|
|
7
|
+
*/
|
|
8
|
+
/** All supported execution mode identifiers. */
|
|
9
|
+
export const MODE_NAMES = {
|
|
10
|
+
AUTOPILOT: 'autopilot',
|
|
11
|
+
ULTRAPILOT: 'ultrapilot',
|
|
12
|
+
SWARM: 'swarm',
|
|
13
|
+
PIPELINE: 'pipeline',
|
|
14
|
+
TEAM: 'team',
|
|
15
|
+
RALPH: 'ralph',
|
|
16
|
+
ULTRAWORK: 'ultrawork',
|
|
17
|
+
ULTRAQA: 'ultraqa',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* All mode names as an array (useful for iteration).
|
|
21
|
+
* Order matches the canonical ExecutionMode union in mode-registry/types.ts.
|
|
22
|
+
*/
|
|
23
|
+
export const ALL_MODE_NAMES = [
|
|
24
|
+
MODE_NAMES.AUTOPILOT,
|
|
25
|
+
MODE_NAMES.ULTRAPILOT,
|
|
26
|
+
MODE_NAMES.SWARM,
|
|
27
|
+
MODE_NAMES.PIPELINE,
|
|
28
|
+
MODE_NAMES.TEAM,
|
|
29
|
+
MODE_NAMES.RALPH,
|
|
30
|
+
MODE_NAMES.ULTRAWORK,
|
|
31
|
+
MODE_NAMES.ULTRAQA,
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Mode state file mapping — the canonical filename for each mode's state file
|
|
35
|
+
* relative to `.omc/state/`.
|
|
36
|
+
*/
|
|
37
|
+
export const MODE_STATE_FILE_MAP = {
|
|
38
|
+
[MODE_NAMES.AUTOPILOT]: 'autopilot-state.json',
|
|
39
|
+
[MODE_NAMES.ULTRAPILOT]: 'ultrapilot-state.json',
|
|
40
|
+
[MODE_NAMES.SWARM]: 'swarm.db',
|
|
41
|
+
[MODE_NAMES.PIPELINE]: 'pipeline-state.json',
|
|
42
|
+
[MODE_NAMES.TEAM]: 'team-state.json',
|
|
43
|
+
[MODE_NAMES.RALPH]: 'ralph-state.json',
|
|
44
|
+
[MODE_NAMES.ULTRAWORK]: 'ultrawork-state.json',
|
|
45
|
+
[MODE_NAMES.ULTRAQA]: 'ultraqa-state.json',
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Mode state files used by session-end cleanup.
|
|
49
|
+
* Includes marker files for modes that use them.
|
|
50
|
+
*/
|
|
51
|
+
export const SESSION_END_MODE_STATE_FILES = [
|
|
52
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.AUTOPILOT], mode: MODE_NAMES.AUTOPILOT },
|
|
53
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAPILOT], mode: MODE_NAMES.ULTRAPILOT },
|
|
54
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.RALPH], mode: MODE_NAMES.RALPH },
|
|
55
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAWORK], mode: MODE_NAMES.ULTRAWORK },
|
|
56
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAQA], mode: MODE_NAMES.ULTRAQA },
|
|
57
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.PIPELINE], mode: MODE_NAMES.PIPELINE },
|
|
58
|
+
// Swarm uses marker file + SQLite
|
|
59
|
+
{ file: 'swarm-active.marker', mode: MODE_NAMES.SWARM },
|
|
60
|
+
{ file: 'swarm-summary.json', mode: MODE_NAMES.SWARM },
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Modes detected by session-end for metrics reporting.
|
|
64
|
+
*/
|
|
65
|
+
export const SESSION_METRICS_MODE_FILES = [
|
|
66
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.AUTOPILOT], mode: MODE_NAMES.AUTOPILOT },
|
|
67
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAPILOT], mode: MODE_NAMES.ULTRAPILOT },
|
|
68
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.RALPH], mode: MODE_NAMES.RALPH },
|
|
69
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAWORK], mode: MODE_NAMES.ULTRAWORK },
|
|
70
|
+
{ file: 'swarm-state.json', mode: MODE_NAMES.SWARM },
|
|
71
|
+
{ file: MODE_STATE_FILE_MAP[MODE_NAMES.PIPELINE], mode: MODE_NAMES.PIPELINE },
|
|
72
|
+
];
|
|
73
|
+
//# sourceMappingURL=mode-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-names.js","sourceRoot":"","sources":["../../src/lib/mode-names.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;CACV,CAAC;AAKX;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,UAAU,CAAC,SAAS;IACpB,UAAU,CAAC,UAAU;IACrB,UAAU,CAAC,KAAK;IAChB,UAAU,CAAC,QAAQ;IACnB,UAAU,CAAC,IAAI;IACf,UAAU,CAAC,KAAK;IAChB,UAAU,CAAC,SAAS;IACpB,UAAU,CAAC,OAAO;CACV,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAuC;IACrE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,sBAAsB;IAC9C,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,uBAAuB;IAChD,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU;IAC9B,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,qBAAqB;IAC5C,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB;IACpC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,kBAAkB;IACtC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,sBAAsB;IAC9C,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,oBAAoB;CAC3C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAA8C;IACrF,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE;IAC/E,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE;IACjF,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;IACvE,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE;IAC/E,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE;IAC3E,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC7E,kCAAkC;IAClC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;IACvD,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;CACvD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA8C;IACnF,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE;IAC/E,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE;IACjF,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;IACvE,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE;IAC/E,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;IACpD,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC9E,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Isolation - Shared utility for consistent session-scoped state guards.
|
|
3
|
+
*
|
|
4
|
+
* The codebase has historically used three different patterns for checking
|
|
5
|
+
* whether a state object belongs to the current session:
|
|
6
|
+
*
|
|
7
|
+
* 1. Lenient: `state.session_id && state.session_id !== sessionId` (skip only if mismatch)
|
|
8
|
+
* 2. Strict: `state.session_id !== sessionId` (skip if missing OR mismatch)
|
|
9
|
+
* 3. Guarded: `!state.session_id || !sessionId || state.session_id !== sessionId`
|
|
10
|
+
*
|
|
11
|
+
* This module provides a single canonical function so all callers behave the same.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Check whether a state object belongs to the given session.
|
|
15
|
+
*
|
|
16
|
+
* Semantics (strict by default):
|
|
17
|
+
* - If `sessionId` is not provided, returns `true` (no session to check against — allow).
|
|
18
|
+
* - If the state has no `stateSessionId`, returns `false` (legacy/ownerless state — reject
|
|
19
|
+
* when a session is active, to prevent cross-session leakage).
|
|
20
|
+
* - Otherwise, returns `stateSessionId === sessionId`.
|
|
21
|
+
*
|
|
22
|
+
* Use `lenient: true` for backward-compatible code paths where legacy ownerless
|
|
23
|
+
* state should still be accepted.
|
|
24
|
+
*
|
|
25
|
+
* @param stateSessionId - The session_id stored in the state object (may be undefined).
|
|
26
|
+
* @param sessionId - The current request's session ID (may be undefined).
|
|
27
|
+
* @param options.lenient - When true, ownerless state (no stateSessionId) is accepted.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isStateForSession(stateSessionId: string | undefined | null, sessionId: string | undefined | null, options?: {
|
|
30
|
+
lenient?: boolean;
|
|
31
|
+
}): boolean;
|
|
32
|
+
//# sourceMappingURL=session-isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-isolation.d.ts","sourceRoot":"","sources":["../../src/lib/session-isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACzC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACpC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9B,OAAO,CAUT"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Isolation - Shared utility for consistent session-scoped state guards.
|
|
3
|
+
*
|
|
4
|
+
* The codebase has historically used three different patterns for checking
|
|
5
|
+
* whether a state object belongs to the current session:
|
|
6
|
+
*
|
|
7
|
+
* 1. Lenient: `state.session_id && state.session_id !== sessionId` (skip only if mismatch)
|
|
8
|
+
* 2. Strict: `state.session_id !== sessionId` (skip if missing OR mismatch)
|
|
9
|
+
* 3. Guarded: `!state.session_id || !sessionId || state.session_id !== sessionId`
|
|
10
|
+
*
|
|
11
|
+
* This module provides a single canonical function so all callers behave the same.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Check whether a state object belongs to the given session.
|
|
15
|
+
*
|
|
16
|
+
* Semantics (strict by default):
|
|
17
|
+
* - If `sessionId` is not provided, returns `true` (no session to check against — allow).
|
|
18
|
+
* - If the state has no `stateSessionId`, returns `false` (legacy/ownerless state — reject
|
|
19
|
+
* when a session is active, to prevent cross-session leakage).
|
|
20
|
+
* - Otherwise, returns `stateSessionId === sessionId`.
|
|
21
|
+
*
|
|
22
|
+
* Use `lenient: true` for backward-compatible code paths where legacy ownerless
|
|
23
|
+
* state should still be accepted.
|
|
24
|
+
*
|
|
25
|
+
* @param stateSessionId - The session_id stored in the state object (may be undefined).
|
|
26
|
+
* @param sessionId - The current request's session ID (may be undefined).
|
|
27
|
+
* @param options.lenient - When true, ownerless state (no stateSessionId) is accepted.
|
|
28
|
+
*/
|
|
29
|
+
export function isStateForSession(stateSessionId, sessionId, options) {
|
|
30
|
+
// No session context — cannot filter, allow everything.
|
|
31
|
+
if (!sessionId)
|
|
32
|
+
return true;
|
|
33
|
+
// State has no owner.
|
|
34
|
+
if (!stateSessionId) {
|
|
35
|
+
return options?.lenient === true;
|
|
36
|
+
}
|
|
37
|
+
return stateSessionId === sessionId;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=session-isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-isolation.js","sourceRoot":"","sources":["../../src/lib/session-isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,cAAyC,EACzC,SAAoC,EACpC,OAA+B;IAE/B,wDAAwD;IACxD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,sBAAsB;IACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,cAAc,KAAK,SAAS,CAAC;AACtC,CAAC"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides strict path validation and resolution for .omc/ paths,
|
|
5
5
|
* ensuring all operations stay within the worktree boundary.
|
|
6
|
+
*
|
|
7
|
+
* Supports OMC_STATE_DIR environment variable for centralized state storage.
|
|
8
|
+
* When set, state is stored at $OMC_STATE_DIR/{project-identifier}/ instead
|
|
9
|
+
* of {worktree}/.omc/. This preserves state across worktree deletions.
|
|
6
10
|
*/
|
|
7
11
|
/** Standard .omc subdirectories */
|
|
8
12
|
export declare const OmcPaths: {
|
|
@@ -31,14 +35,44 @@ export declare function getWorktreeRoot(cwd?: string): string | null;
|
|
|
31
35
|
* @throws Error if path contains traversal sequences
|
|
32
36
|
*/
|
|
33
37
|
export declare function validatePath(inputPath: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Clear the dual-directory warning cache (useful for testing).
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function clearDualDirWarnings(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get a stable project identifier for centralized state storage.
|
|
45
|
+
*
|
|
46
|
+
* Uses a hybrid strategy:
|
|
47
|
+
* 1. Git remote URL hash (stable across worktrees and clones of the same repo)
|
|
48
|
+
* 2. Fallback to worktree root path hash (for local-only repos without remotes)
|
|
49
|
+
*
|
|
50
|
+
* Format: `{dirName}-{hash}` where hash is first 16 chars of SHA-256.
|
|
51
|
+
* Example: `my-project-a1b2c3d4e5f6g7h8`
|
|
52
|
+
*
|
|
53
|
+
* @param worktreeRoot - Optional worktree root path
|
|
54
|
+
* @returns A stable project identifier string
|
|
55
|
+
*/
|
|
56
|
+
export declare function getProjectIdentifier(worktreeRoot?: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Get the .omc root directory path.
|
|
59
|
+
*
|
|
60
|
+
* When OMC_STATE_DIR is set, returns $OMC_STATE_DIR/{project-identifier}/
|
|
61
|
+
* instead of {worktree}/.omc/. This allows centralized state storage that
|
|
62
|
+
* survives worktree deletion.
|
|
63
|
+
*
|
|
64
|
+
* @param worktreeRoot - Optional worktree root
|
|
65
|
+
* @returns Absolute path to the omc root directory
|
|
66
|
+
*/
|
|
67
|
+
export declare function getOmcRoot(worktreeRoot?: string): string;
|
|
34
68
|
/**
|
|
35
69
|
* Resolve a relative path under .omc/ to an absolute path.
|
|
36
|
-
* Validates the path is within the
|
|
70
|
+
* Validates the path is within the omc boundary.
|
|
37
71
|
*
|
|
38
72
|
* @param relativePath - Path relative to .omc/ (e.g., "state/ralph.json")
|
|
39
73
|
* @param worktreeRoot - Optional worktree root (auto-detected if not provided)
|
|
40
74
|
* @returns Absolute path
|
|
41
|
-
* @throws Error if path would escape
|
|
75
|
+
* @throws Error if path would escape omc boundary
|
|
42
76
|
*/
|
|
43
77
|
export declare function resolveOmcPath(relativePath: string, worktreeRoot?: string): string;
|
|
44
78
|
/**
|
|
@@ -74,10 +108,6 @@ export declare function getWorktreeNotepadPath(worktreeRoot?: string): string;
|
|
|
74
108
|
* Get the absolute path to the project memory file.
|
|
75
109
|
*/
|
|
76
110
|
export declare function getWorktreeProjectMemoryPath(worktreeRoot?: string): string;
|
|
77
|
-
/**
|
|
78
|
-
* Get the .omc root directory path.
|
|
79
|
-
*/
|
|
80
|
-
export declare function getOmcRoot(worktreeRoot?: string): string;
|
|
81
111
|
/**
|
|
82
112
|
* Resolve a plan file path.
|
|
83
113
|
* @param planName - Plan name (without .md extension)
|
|
@@ -137,7 +167,7 @@ export declare function resetProcessSessionId(): void;
|
|
|
137
167
|
export declare function validateSessionId(sessionId: string): void;
|
|
138
168
|
/**
|
|
139
169
|
* Resolve a session-scoped state file path.
|
|
140
|
-
* Path:
|
|
170
|
+
* Path: {omcRoot}/state/sessions/{sessionId}/{mode}-state.json
|
|
141
171
|
*
|
|
142
172
|
* @param stateName - State name (e.g., "ralph", "ultrawork")
|
|
143
173
|
* @param sessionId - Session identifier
|
|
@@ -147,7 +177,7 @@ export declare function validateSessionId(sessionId: string): void;
|
|
|
147
177
|
export declare function resolveSessionStatePath(stateName: string, sessionId: string, worktreeRoot?: string): string;
|
|
148
178
|
/**
|
|
149
179
|
* Get the session state directory path.
|
|
150
|
-
* Path:
|
|
180
|
+
* Path: {omcRoot}/state/sessions/{sessionId}/
|
|
151
181
|
*
|
|
152
182
|
* @param sessionId - Session identifier
|
|
153
183
|
* @param worktreeRoot - Optional worktree root
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-paths.d.ts","sourceRoot":"","sources":["../../src/lib/worktree-paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"worktree-paths.d.ts","sourceRoot":"","sources":["../../src/lib/worktree-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides strict path validation and resolution for .omc/ paths,
|
|
5
5
|
* ensuring all operations stay within the worktree boundary.
|
|
6
|
+
*
|
|
7
|
+
* Supports OMC_STATE_DIR environment variable for centralized state storage.
|
|
8
|
+
* When set, state is stored at $OMC_STATE_DIR/{project-identifier}/ instead
|
|
9
|
+
* of {worktree}/.omc/. This preserves state across worktree deletions.
|
|
6
10
|
*/
|
|
11
|
+
import { createHash } from 'crypto';
|
|
7
12
|
import { execSync } from 'child_process';
|
|
8
13
|
import { existsSync, mkdirSync, realpathSync, readdirSync } from 'fs';
|
|
9
|
-
import { resolve, normalize, relative, sep, join, isAbsolute } from 'path';
|
|
14
|
+
import { resolve, normalize, relative, sep, join, isAbsolute, basename } from 'path';
|
|
10
15
|
/** Standard .omc subdirectories */
|
|
11
16
|
export const OmcPaths = {
|
|
12
17
|
ROOT: '.omc',
|
|
@@ -23,17 +28,26 @@ export const OmcPaths = {
|
|
|
23
28
|
AUTOPILOT: '.omc/autopilot',
|
|
24
29
|
SKILLS: '.omc/skills',
|
|
25
30
|
};
|
|
26
|
-
/**
|
|
27
|
-
|
|
31
|
+
/**
|
|
32
|
+
* LRU cache for worktree root lookups to avoid repeated git subprocess calls.
|
|
33
|
+
* Bounded to MAX_WORKTREE_CACHE_SIZE entries to prevent memory growth when
|
|
34
|
+
* alternating between many different cwds (cache thrashing).
|
|
35
|
+
*/
|
|
36
|
+
const MAX_WORKTREE_CACHE_SIZE = 8;
|
|
37
|
+
const worktreeCacheMap = new Map();
|
|
28
38
|
/**
|
|
29
39
|
* Get the git worktree root for the current or specified directory.
|
|
30
40
|
* Returns null if not in a git repository.
|
|
31
41
|
*/
|
|
32
42
|
export function getWorktreeRoot(cwd) {
|
|
33
43
|
const effectiveCwd = cwd || process.cwd();
|
|
34
|
-
// Return cached value if
|
|
35
|
-
if (
|
|
36
|
-
|
|
44
|
+
// Return cached value if present (LRU: move to end on access)
|
|
45
|
+
if (worktreeCacheMap.has(effectiveCwd)) {
|
|
46
|
+
const root = worktreeCacheMap.get(effectiveCwd);
|
|
47
|
+
// Refresh insertion order for LRU eviction
|
|
48
|
+
worktreeCacheMap.delete(effectiveCwd);
|
|
49
|
+
worktreeCacheMap.set(effectiveCwd, root);
|
|
50
|
+
return root || null;
|
|
37
51
|
}
|
|
38
52
|
try {
|
|
39
53
|
const root = execSync('git rev-parse --show-toplevel', {
|
|
@@ -41,8 +55,14 @@ export function getWorktreeRoot(cwd) {
|
|
|
41
55
|
encoding: 'utf-8',
|
|
42
56
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
43
57
|
}).trim();
|
|
44
|
-
//
|
|
45
|
-
|
|
58
|
+
// Evict oldest entry when at capacity
|
|
59
|
+
if (worktreeCacheMap.size >= MAX_WORKTREE_CACHE_SIZE) {
|
|
60
|
+
const oldest = worktreeCacheMap.keys().next().value;
|
|
61
|
+
if (oldest !== undefined) {
|
|
62
|
+
worktreeCacheMap.delete(oldest);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
worktreeCacheMap.set(effectiveCwd, root);
|
|
46
66
|
return root;
|
|
47
67
|
}
|
|
48
68
|
catch {
|
|
@@ -67,24 +87,96 @@ export function validatePath(inputPath) {
|
|
|
67
87
|
throw new Error(`Invalid path: absolute paths not allowed (${inputPath})`);
|
|
68
88
|
}
|
|
69
89
|
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// OMC_STATE_DIR SUPPORT (Issue #1014)
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/** Track which dual-dir warnings have been logged to avoid repeated warnings */
|
|
94
|
+
const dualDirWarnings = new Set();
|
|
95
|
+
/**
|
|
96
|
+
* Clear the dual-directory warning cache (useful for testing).
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
export function clearDualDirWarnings() {
|
|
100
|
+
dualDirWarnings.clear();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get a stable project identifier for centralized state storage.
|
|
104
|
+
*
|
|
105
|
+
* Uses a hybrid strategy:
|
|
106
|
+
* 1. Git remote URL hash (stable across worktrees and clones of the same repo)
|
|
107
|
+
* 2. Fallback to worktree root path hash (for local-only repos without remotes)
|
|
108
|
+
*
|
|
109
|
+
* Format: `{dirName}-{hash}` where hash is first 16 chars of SHA-256.
|
|
110
|
+
* Example: `my-project-a1b2c3d4e5f6g7h8`
|
|
111
|
+
*
|
|
112
|
+
* @param worktreeRoot - Optional worktree root path
|
|
113
|
+
* @returns A stable project identifier string
|
|
114
|
+
*/
|
|
115
|
+
export function getProjectIdentifier(worktreeRoot) {
|
|
116
|
+
const root = worktreeRoot || getWorktreeRoot() || process.cwd();
|
|
117
|
+
let source;
|
|
118
|
+
try {
|
|
119
|
+
const remoteUrl = execSync('git remote get-url origin', {
|
|
120
|
+
cwd: root,
|
|
121
|
+
encoding: 'utf-8',
|
|
122
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
123
|
+
}).trim();
|
|
124
|
+
source = remoteUrl || root;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// No git remote (local-only repo or not a git repo) — use path
|
|
128
|
+
source = root;
|
|
129
|
+
}
|
|
130
|
+
const hash = createHash('sha256').update(source).digest('hex').slice(0, 16);
|
|
131
|
+
const dirName = basename(root).replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
132
|
+
return `${dirName}-${hash}`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the .omc root directory path.
|
|
136
|
+
*
|
|
137
|
+
* When OMC_STATE_DIR is set, returns $OMC_STATE_DIR/{project-identifier}/
|
|
138
|
+
* instead of {worktree}/.omc/. This allows centralized state storage that
|
|
139
|
+
* survives worktree deletion.
|
|
140
|
+
*
|
|
141
|
+
* @param worktreeRoot - Optional worktree root
|
|
142
|
+
* @returns Absolute path to the omc root directory
|
|
143
|
+
*/
|
|
144
|
+
export function getOmcRoot(worktreeRoot) {
|
|
145
|
+
const customDir = process.env.OMC_STATE_DIR;
|
|
146
|
+
if (customDir) {
|
|
147
|
+
const root = worktreeRoot || getWorktreeRoot() || process.cwd();
|
|
148
|
+
const projectId = getProjectIdentifier(root);
|
|
149
|
+
const centralizedPath = join(customDir, projectId);
|
|
150
|
+
// Log notice if both legacy .omc/ and new centralized dir exist
|
|
151
|
+
const legacyPath = join(root, OmcPaths.ROOT);
|
|
152
|
+
const warningKey = `${legacyPath}:${centralizedPath}`;
|
|
153
|
+
if (!dualDirWarnings.has(warningKey) && existsSync(legacyPath) && existsSync(centralizedPath)) {
|
|
154
|
+
dualDirWarnings.add(warningKey);
|
|
155
|
+
console.warn(`[omc] Both legacy state dir (${legacyPath}) and centralized state dir (${centralizedPath}) exist. ` +
|
|
156
|
+
`Using centralized dir. Consider migrating data from the legacy dir and removing it.`);
|
|
157
|
+
}
|
|
158
|
+
return centralizedPath;
|
|
159
|
+
}
|
|
160
|
+
const root = worktreeRoot || getWorktreeRoot() || process.cwd();
|
|
161
|
+
return join(root, OmcPaths.ROOT);
|
|
162
|
+
}
|
|
70
163
|
/**
|
|
71
164
|
* Resolve a relative path under .omc/ to an absolute path.
|
|
72
|
-
* Validates the path is within the
|
|
165
|
+
* Validates the path is within the omc boundary.
|
|
73
166
|
*
|
|
74
167
|
* @param relativePath - Path relative to .omc/ (e.g., "state/ralph.json")
|
|
75
168
|
* @param worktreeRoot - Optional worktree root (auto-detected if not provided)
|
|
76
169
|
* @returns Absolute path
|
|
77
|
-
* @throws Error if path would escape
|
|
170
|
+
* @throws Error if path would escape omc boundary
|
|
78
171
|
*/
|
|
79
172
|
export function resolveOmcPath(relativePath, worktreeRoot) {
|
|
80
173
|
validatePath(relativePath);
|
|
81
|
-
const
|
|
82
|
-
const omcDir = join(root, OmcPaths.ROOT);
|
|
174
|
+
const omcDir = getOmcRoot(worktreeRoot);
|
|
83
175
|
const fullPath = normalize(resolve(omcDir, relativePath));
|
|
84
|
-
// Verify resolved path is still under
|
|
85
|
-
const
|
|
86
|
-
if (
|
|
87
|
-
throw new Error(`Path escapes
|
|
176
|
+
// Verify resolved path is still under omc directory
|
|
177
|
+
const relativeToOmc = relative(omcDir, fullPath);
|
|
178
|
+
if (relativeToOmc.startsWith('..') || relativeToOmc.startsWith(sep + '..')) {
|
|
179
|
+
throw new Error(`Path escapes omc boundary: ${relativePath}`);
|
|
88
180
|
}
|
|
89
181
|
return fullPath;
|
|
90
182
|
}
|
|
@@ -131,22 +223,13 @@ export function ensureOmcDir(relativePath, worktreeRoot) {
|
|
|
131
223
|
* This version auto-detects worktree root.
|
|
132
224
|
*/
|
|
133
225
|
export function getWorktreeNotepadPath(worktreeRoot) {
|
|
134
|
-
|
|
135
|
-
return join(root, OmcPaths.NOTEPAD);
|
|
226
|
+
return join(getOmcRoot(worktreeRoot), 'notepad.md');
|
|
136
227
|
}
|
|
137
228
|
/**
|
|
138
229
|
* Get the absolute path to the project memory file.
|
|
139
230
|
*/
|
|
140
231
|
export function getWorktreeProjectMemoryPath(worktreeRoot) {
|
|
141
|
-
|
|
142
|
-
return join(root, OmcPaths.PROJECT_MEMORY);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Get the .omc root directory path.
|
|
146
|
-
*/
|
|
147
|
-
export function getOmcRoot(worktreeRoot) {
|
|
148
|
-
const root = worktreeRoot || getWorktreeRoot() || process.cwd();
|
|
149
|
-
return join(root, OmcPaths.ROOT);
|
|
232
|
+
return join(getOmcRoot(worktreeRoot), 'project-memory.json');
|
|
150
233
|
}
|
|
151
234
|
/**
|
|
152
235
|
* Resolve a plan file path.
|
|
@@ -154,8 +237,7 @@ export function getOmcRoot(worktreeRoot) {
|
|
|
154
237
|
*/
|
|
155
238
|
export function resolvePlanPath(planName, worktreeRoot) {
|
|
156
239
|
validatePath(planName);
|
|
157
|
-
|
|
158
|
-
return join(root, OmcPaths.PLANS, `${planName}.md`);
|
|
240
|
+
return join(getOmcRoot(worktreeRoot), 'plans', `${planName}.md`);
|
|
159
241
|
}
|
|
160
242
|
/**
|
|
161
243
|
* Resolve a research directory path.
|
|
@@ -163,15 +245,13 @@ export function resolvePlanPath(planName, worktreeRoot) {
|
|
|
163
245
|
*/
|
|
164
246
|
export function resolveResearchPath(name, worktreeRoot) {
|
|
165
247
|
validatePath(name);
|
|
166
|
-
|
|
167
|
-
return join(root, OmcPaths.RESEARCH, name);
|
|
248
|
+
return join(getOmcRoot(worktreeRoot), 'research', name);
|
|
168
249
|
}
|
|
169
250
|
/**
|
|
170
251
|
* Resolve the logs directory path.
|
|
171
252
|
*/
|
|
172
253
|
export function resolveLogsPath(worktreeRoot) {
|
|
173
|
-
|
|
174
|
-
return join(root, OmcPaths.LOGS);
|
|
254
|
+
return join(getOmcRoot(worktreeRoot), 'logs');
|
|
175
255
|
}
|
|
176
256
|
/**
|
|
177
257
|
* Resolve a wisdom/plan-scoped notepad directory path.
|
|
@@ -179,16 +259,14 @@ export function resolveLogsPath(worktreeRoot) {
|
|
|
179
259
|
*/
|
|
180
260
|
export function resolveWisdomPath(planName, worktreeRoot) {
|
|
181
261
|
validatePath(planName);
|
|
182
|
-
|
|
183
|
-
return join(root, OmcPaths.NOTEPADS, planName);
|
|
262
|
+
return join(getOmcRoot(worktreeRoot), 'notepads', planName);
|
|
184
263
|
}
|
|
185
264
|
/**
|
|
186
265
|
* Check if an absolute path is under the .omc directory.
|
|
187
266
|
* @param absolutePath - Absolute path to check
|
|
188
267
|
*/
|
|
189
268
|
export function isPathUnderOmc(absolutePath, worktreeRoot) {
|
|
190
|
-
const
|
|
191
|
-
const omcRoot = join(root, OmcPaths.ROOT);
|
|
269
|
+
const omcRoot = getOmcRoot(worktreeRoot);
|
|
192
270
|
const normalizedPath = normalize(absolutePath);
|
|
193
271
|
const normalizedOmc = normalize(omcRoot);
|
|
194
272
|
return normalizedPath.startsWith(normalizedOmc + sep) || normalizedPath === normalizedOmc;
|
|
@@ -197,18 +275,10 @@ export function isPathUnderOmc(absolutePath, worktreeRoot) {
|
|
|
197
275
|
* Ensure all standard .omc subdirectories exist.
|
|
198
276
|
*/
|
|
199
277
|
export function ensureAllOmcDirs(worktreeRoot) {
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
OmcPaths.PLANS,
|
|
205
|
-
OmcPaths.RESEARCH,
|
|
206
|
-
OmcPaths.LOGS,
|
|
207
|
-
OmcPaths.NOTEPADS,
|
|
208
|
-
OmcPaths.DRAFTS,
|
|
209
|
-
];
|
|
210
|
-
for (const dir of dirs) {
|
|
211
|
-
const fullPath = join(root, dir);
|
|
278
|
+
const omcRoot = getOmcRoot(worktreeRoot);
|
|
279
|
+
const subdirs = ['', 'state', 'plans', 'research', 'logs', 'notepads', 'drafts'];
|
|
280
|
+
for (const subdir of subdirs) {
|
|
281
|
+
const fullPath = subdir ? join(omcRoot, subdir) : omcRoot;
|
|
212
282
|
if (!existsSync(fullPath)) {
|
|
213
283
|
mkdirSync(fullPath, { recursive: true });
|
|
214
284
|
}
|
|
@@ -218,7 +288,7 @@ export function ensureAllOmcDirs(worktreeRoot) {
|
|
|
218
288
|
* Clear the worktree cache (useful for testing).
|
|
219
289
|
*/
|
|
220
290
|
export function clearWorktreeCache() {
|
|
221
|
-
|
|
291
|
+
worktreeCacheMap.clear();
|
|
222
292
|
}
|
|
223
293
|
// ============================================================================
|
|
224
294
|
// SESSION-SCOPED STATE PATHS
|
|
@@ -282,7 +352,7 @@ export function validateSessionId(sessionId) {
|
|
|
282
352
|
}
|
|
283
353
|
/**
|
|
284
354
|
* Resolve a session-scoped state file path.
|
|
285
|
-
* Path:
|
|
355
|
+
* Path: {omcRoot}/state/sessions/{sessionId}/{mode}-state.json
|
|
286
356
|
*
|
|
287
357
|
* @param stateName - State name (e.g., "ralph", "ultrawork")
|
|
288
358
|
* @param sessionId - Session identifier
|
|
@@ -300,7 +370,7 @@ export function resolveSessionStatePath(stateName, sessionId, worktreeRoot) {
|
|
|
300
370
|
}
|
|
301
371
|
/**
|
|
302
372
|
* Get the session state directory path.
|
|
303
|
-
* Path:
|
|
373
|
+
* Path: {omcRoot}/state/sessions/{sessionId}/
|
|
304
374
|
*
|
|
305
375
|
* @param sessionId - Session identifier
|
|
306
376
|
* @param worktreeRoot - Optional worktree root
|
|
@@ -308,8 +378,7 @@ export function resolveSessionStatePath(stateName, sessionId, worktreeRoot) {
|
|
|
308
378
|
*/
|
|
309
379
|
export function getSessionStateDir(sessionId, worktreeRoot) {
|
|
310
380
|
validateSessionId(sessionId);
|
|
311
|
-
|
|
312
|
-
return join(root, OmcPaths.SESSIONS, sessionId);
|
|
381
|
+
return join(getOmcRoot(worktreeRoot), 'state', 'sessions', sessionId);
|
|
313
382
|
}
|
|
314
383
|
/**
|
|
315
384
|
* List all session IDs that have state directories.
|
|
@@ -318,8 +387,7 @@ export function getSessionStateDir(sessionId, worktreeRoot) {
|
|
|
318
387
|
* @returns Array of session IDs
|
|
319
388
|
*/
|
|
320
389
|
export function listSessionIds(worktreeRoot) {
|
|
321
|
-
const
|
|
322
|
-
const sessionsDir = join(root, OmcPaths.SESSIONS);
|
|
390
|
+
const sessionsDir = join(getOmcRoot(worktreeRoot), 'state', 'sessions');
|
|
323
391
|
if (!existsSync(sessionsDir)) {
|
|
324
392
|
return [];
|
|
325
393
|
}
|