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
package/bridge/team-bridge.cjs
CHANGED
|
@@ -12,9 +12,11 @@ try {
|
|
|
12
12
|
} catch (_e) { /* npm not available - native modules will gracefully degrade */ }
|
|
13
13
|
|
|
14
14
|
"use strict";
|
|
15
|
+
var __create = Object.create;
|
|
15
16
|
var __defProp = Object.defineProperty;
|
|
16
17
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
17
18
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
19
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
18
20
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
19
21
|
var __export = (target, all) => {
|
|
20
22
|
for (var name in all)
|
|
@@ -28,6 +30,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
28
30
|
}
|
|
29
31
|
return to;
|
|
30
32
|
};
|
|
33
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
34
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
35
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
36
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
37
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
38
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
39
|
+
mod
|
|
40
|
+
));
|
|
31
41
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
42
|
|
|
33
43
|
// src/team/bridge-entry.ts
|
|
@@ -37,13 +47,13 @@ __export(bridge_entry_exports, {
|
|
|
37
47
|
});
|
|
38
48
|
module.exports = __toCommonJS(bridge_entry_exports);
|
|
39
49
|
var import_fs10 = require("fs");
|
|
40
|
-
var
|
|
50
|
+
var import_path12 = require("path");
|
|
41
51
|
var import_os2 = require("os");
|
|
42
52
|
|
|
43
53
|
// src/team/mcp-team-bridge.ts
|
|
44
54
|
var import_child_process2 = require("child_process");
|
|
45
55
|
var import_fs8 = require("fs");
|
|
46
|
-
var
|
|
56
|
+
var import_path10 = require("path");
|
|
47
57
|
|
|
48
58
|
// src/team/fs-utils.ts
|
|
49
59
|
var import_fs = require("fs");
|
|
@@ -93,7 +103,7 @@ function validateResolvedPath(resolvedPath, expectedBase) {
|
|
|
93
103
|
|
|
94
104
|
// src/team/task-file-ops.ts
|
|
95
105
|
var import_fs3 = require("fs");
|
|
96
|
-
var
|
|
106
|
+
var import_path5 = require("path");
|
|
97
107
|
|
|
98
108
|
// src/utils/paths.ts
|
|
99
109
|
var import_path2 = require("path");
|
|
@@ -111,11 +121,16 @@ function getConfigDir() {
|
|
|
111
121
|
function getClaudeConfigDir() {
|
|
112
122
|
return getConfigDir();
|
|
113
123
|
}
|
|
114
|
-
var STALE_THRESHOLD_MS = 60 * 60 * 1e3;
|
|
124
|
+
var STALE_THRESHOLD_MS = 24 * 60 * 60 * 1e3;
|
|
115
125
|
|
|
116
126
|
// src/team/tmux-session.ts
|
|
117
127
|
var import_child_process = require("child_process");
|
|
128
|
+
var import_path3 = require("path");
|
|
129
|
+
var import_util = require("util");
|
|
130
|
+
var import_promises = __toESM(require("fs/promises"), 1);
|
|
118
131
|
var TMUX_SESSION_PREFIX = "omc-team";
|
|
132
|
+
var promisifiedExec = (0, import_util.promisify)(import_child_process.exec);
|
|
133
|
+
var promisifiedExecFile = (0, import_util.promisify)(import_child_process.execFile);
|
|
119
134
|
function sanitizeName(name) {
|
|
120
135
|
const sanitized = name.replace(/[^a-zA-Z0-9-]/g, "");
|
|
121
136
|
if (sanitized.length === 0) {
|
|
@@ -137,6 +152,38 @@ function killSession(teamName, workerName) {
|
|
|
137
152
|
}
|
|
138
153
|
}
|
|
139
154
|
|
|
155
|
+
// src/team/state-paths.ts
|
|
156
|
+
var import_path4 = require("path");
|
|
157
|
+
var TeamPaths = {
|
|
158
|
+
root: (teamName) => `.omc/state/team/${teamName}`,
|
|
159
|
+
config: (teamName) => `.omc/state/team/${teamName}/config.json`,
|
|
160
|
+
shutdown: (teamName) => `.omc/state/team/${teamName}/shutdown.json`,
|
|
161
|
+
tasks: (teamName) => `.omc/state/team/${teamName}/tasks`,
|
|
162
|
+
taskFile: (teamName, taskId) => `.omc/state/team/${teamName}/tasks/${taskId}.json`,
|
|
163
|
+
workers: (teamName) => `.omc/state/team/${teamName}/workers`,
|
|
164
|
+
workerDir: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}`,
|
|
165
|
+
heartbeat: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/heartbeat.json`,
|
|
166
|
+
inbox: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/inbox.md`,
|
|
167
|
+
outbox: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/outbox.jsonl`,
|
|
168
|
+
ready: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/.ready`,
|
|
169
|
+
overlay: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/AGENTS.md`,
|
|
170
|
+
shutdownAck: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/shutdown-ack.json`,
|
|
171
|
+
done: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/done.json`,
|
|
172
|
+
mailbox: (teamName, workerName) => `.omc/state/team/${teamName}/mailbox/${workerName}.jsonl`
|
|
173
|
+
};
|
|
174
|
+
function getTaskStoragePath(cwd, teamName, taskId) {
|
|
175
|
+
if (taskId !== void 0) {
|
|
176
|
+
return (0, import_path4.join)(cwd, TeamPaths.taskFile(teamName, taskId));
|
|
177
|
+
}
|
|
178
|
+
return (0, import_path4.join)(cwd, TeamPaths.tasks(teamName));
|
|
179
|
+
}
|
|
180
|
+
function getLegacyTaskStoragePath(claudeConfigDir, teamName, taskId) {
|
|
181
|
+
if (taskId !== void 0) {
|
|
182
|
+
return (0, import_path4.join)(claudeConfigDir, "tasks", teamName, `${taskId}.json`);
|
|
183
|
+
}
|
|
184
|
+
return (0, import_path4.join)(claudeConfigDir, "tasks", teamName);
|
|
185
|
+
}
|
|
186
|
+
|
|
140
187
|
// src/team/task-file-ops.ts
|
|
141
188
|
var DEFAULT_STALE_LOCK_MS = 3e4;
|
|
142
189
|
function isPidAlive(pid) {
|
|
@@ -151,9 +198,9 @@ function isPidAlive(pid) {
|
|
|
151
198
|
}
|
|
152
199
|
function acquireTaskLock(teamName, taskId, opts) {
|
|
153
200
|
const staleLockMs = opts?.staleLockMs ?? DEFAULT_STALE_LOCK_MS;
|
|
154
|
-
const dir =
|
|
201
|
+
const dir = canonicalTasksDir(teamName, opts?.cwd);
|
|
155
202
|
ensureDirWithMode(dir);
|
|
156
|
-
const lockPath = (0,
|
|
203
|
+
const lockPath = (0, import_path5.join)(dir, `${sanitizeTaskId(taskId)}.lock`);
|
|
157
204
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
158
205
|
try {
|
|
159
206
|
const fd = (0, import_fs3.openSync)(lockPath, import_fs3.constants.O_CREAT | import_fs3.constants.O_EXCL | import_fs3.constants.O_WRONLY, 384);
|
|
@@ -212,19 +259,33 @@ function sanitizeTaskId(taskId) {
|
|
|
212
259
|
}
|
|
213
260
|
return taskId;
|
|
214
261
|
}
|
|
215
|
-
function
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
262
|
+
function canonicalTasksDir(teamName, cwd) {
|
|
263
|
+
const root = cwd ?? process.cwd();
|
|
264
|
+
const dir = getTaskStoragePath(root, sanitizeName(teamName));
|
|
265
|
+
validateResolvedPath(dir, (0, import_path5.join)(root, ".omc", "state", "team"));
|
|
266
|
+
return dir;
|
|
267
|
+
}
|
|
268
|
+
function legacyTasksDir(teamName) {
|
|
269
|
+
const claudeConfigDir = getClaudeConfigDir();
|
|
270
|
+
const dir = getLegacyTaskStoragePath(claudeConfigDir, sanitizeName(teamName));
|
|
271
|
+
validateResolvedPath(dir, (0, import_path5.join)(claudeConfigDir, "tasks"));
|
|
272
|
+
return dir;
|
|
219
273
|
}
|
|
220
|
-
function
|
|
221
|
-
|
|
274
|
+
function resolveTaskPathForRead(teamName, taskId, cwd) {
|
|
275
|
+
const canonical = (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.json`);
|
|
276
|
+
if ((0, import_fs3.existsSync)(canonical)) return canonical;
|
|
277
|
+
const legacy = (0, import_path5.join)(legacyTasksDir(teamName), `${sanitizeTaskId(taskId)}.json`);
|
|
278
|
+
if ((0, import_fs3.existsSync)(legacy)) return legacy;
|
|
279
|
+
return canonical;
|
|
222
280
|
}
|
|
223
|
-
function
|
|
224
|
-
return (0,
|
|
281
|
+
function resolveTaskPathForWrite(teamName, taskId, cwd) {
|
|
282
|
+
return (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.json`);
|
|
225
283
|
}
|
|
226
|
-
function
|
|
227
|
-
|
|
284
|
+
function failureSidecarPath(teamName, taskId, cwd) {
|
|
285
|
+
return (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.failure.json`);
|
|
286
|
+
}
|
|
287
|
+
function readTask(teamName, taskId, opts) {
|
|
288
|
+
const filePath = resolveTaskPathForRead(teamName, taskId, opts?.cwd);
|
|
228
289
|
if (!(0, import_fs3.existsSync)(filePath)) return null;
|
|
229
290
|
try {
|
|
230
291
|
const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
|
|
@@ -236,10 +297,10 @@ function readTask(teamName, taskId) {
|
|
|
236
297
|
function updateTask(teamName, taskId, updates, opts) {
|
|
237
298
|
const useLock = opts?.useLock ?? true;
|
|
238
299
|
const doUpdate = () => {
|
|
239
|
-
const
|
|
300
|
+
const readPath = resolveTaskPathForRead(teamName, taskId, opts?.cwd);
|
|
240
301
|
let task;
|
|
241
302
|
try {
|
|
242
|
-
const raw = (0, import_fs3.readFileSync)(
|
|
303
|
+
const raw = (0, import_fs3.readFileSync)(readPath, "utf-8");
|
|
243
304
|
task = JSON.parse(raw);
|
|
244
305
|
} catch {
|
|
245
306
|
throw new Error(`Task file not found or malformed: ${taskId}`);
|
|
@@ -249,13 +310,14 @@ function updateTask(teamName, taskId, updates, opts) {
|
|
|
249
310
|
task[key] = value;
|
|
250
311
|
}
|
|
251
312
|
}
|
|
252
|
-
|
|
313
|
+
const writePath = resolveTaskPathForWrite(teamName, taskId, opts?.cwd);
|
|
314
|
+
atomicWriteJson(writePath, task);
|
|
253
315
|
};
|
|
254
316
|
if (!useLock) {
|
|
255
317
|
doUpdate();
|
|
256
318
|
return;
|
|
257
319
|
}
|
|
258
|
-
const handle = acquireTaskLock(teamName, taskId);
|
|
320
|
+
const handle = acquireTaskLock(teamName, taskId, { cwd: opts?.cwd });
|
|
259
321
|
if (!handle) {
|
|
260
322
|
if (typeof process !== "undefined" && process.stderr) {
|
|
261
323
|
process.stderr.write(`[task-file-ops] WARN: could not acquire lock for task ${taskId}, updating without lock
|
|
@@ -270,27 +332,28 @@ function updateTask(teamName, taskId, updates, opts) {
|
|
|
270
332
|
releaseTaskLock(handle);
|
|
271
333
|
}
|
|
272
334
|
}
|
|
273
|
-
async function findNextTask(teamName, workerName) {
|
|
274
|
-
const dir =
|
|
335
|
+
async function findNextTask(teamName, workerName, opts) {
|
|
336
|
+
const dir = canonicalTasksDir(teamName, opts?.cwd);
|
|
275
337
|
if (!(0, import_fs3.existsSync)(dir)) return null;
|
|
276
|
-
const taskIds = listTaskIds(teamName);
|
|
338
|
+
const taskIds = listTaskIds(teamName, opts);
|
|
277
339
|
for (const id of taskIds) {
|
|
278
|
-
const task = readTask(teamName, id);
|
|
340
|
+
const task = readTask(teamName, id, opts);
|
|
279
341
|
if (!task) continue;
|
|
280
342
|
if (task.status !== "pending") continue;
|
|
281
343
|
if (task.owner !== workerName) continue;
|
|
282
|
-
if (!areBlockersResolved(teamName, task.blockedBy)) continue;
|
|
283
|
-
const handle = acquireTaskLock(teamName, id, { workerName });
|
|
344
|
+
if (!areBlockersResolved(teamName, task.blockedBy, opts)) continue;
|
|
345
|
+
const handle = acquireTaskLock(teamName, id, { workerName, cwd: opts?.cwd });
|
|
284
346
|
if (!handle) continue;
|
|
285
347
|
try {
|
|
286
|
-
const freshTask = readTask(teamName, id);
|
|
287
|
-
if (!freshTask || freshTask.status !== "pending" || freshTask.owner !== workerName || !areBlockersResolved(teamName, freshTask.blockedBy)) {
|
|
348
|
+
const freshTask = readTask(teamName, id, opts);
|
|
349
|
+
if (!freshTask || freshTask.status !== "pending" || freshTask.owner !== workerName || !areBlockersResolved(teamName, freshTask.blockedBy, opts)) {
|
|
288
350
|
continue;
|
|
289
351
|
}
|
|
290
|
-
const filePath = (
|
|
352
|
+
const filePath = resolveTaskPathForWrite(teamName, id, opts?.cwd);
|
|
291
353
|
let taskData;
|
|
292
354
|
try {
|
|
293
|
-
const
|
|
355
|
+
const readPath = resolveTaskPathForRead(teamName, id, opts?.cwd);
|
|
356
|
+
const raw = (0, import_fs3.readFileSync)(readPath, "utf-8");
|
|
294
357
|
taskData = JSON.parse(raw);
|
|
295
358
|
} catch {
|
|
296
359
|
continue;
|
|
@@ -307,17 +370,17 @@ async function findNextTask(teamName, workerName) {
|
|
|
307
370
|
}
|
|
308
371
|
return null;
|
|
309
372
|
}
|
|
310
|
-
function areBlockersResolved(teamName, blockedBy) {
|
|
373
|
+
function areBlockersResolved(teamName, blockedBy, opts) {
|
|
311
374
|
if (!blockedBy || blockedBy.length === 0) return true;
|
|
312
375
|
for (const blockerId of blockedBy) {
|
|
313
|
-
const blocker = readTask(teamName, blockerId);
|
|
376
|
+
const blocker = readTask(teamName, blockerId, opts);
|
|
314
377
|
if (!blocker || blocker.status !== "completed") return false;
|
|
315
378
|
}
|
|
316
379
|
return true;
|
|
317
380
|
}
|
|
318
|
-
function writeTaskFailure(teamName, taskId, error) {
|
|
319
|
-
const filePath = failureSidecarPath(teamName, taskId);
|
|
320
|
-
const existing = readTaskFailure(teamName, taskId);
|
|
381
|
+
function writeTaskFailure(teamName, taskId, error, opts) {
|
|
382
|
+
const filePath = failureSidecarPath(teamName, taskId, opts?.cwd);
|
|
383
|
+
const existing = readTaskFailure(teamName, taskId, opts);
|
|
321
384
|
const sidecar = {
|
|
322
385
|
taskId,
|
|
323
386
|
lastError: error,
|
|
@@ -326,8 +389,8 @@ function writeTaskFailure(teamName, taskId, error) {
|
|
|
326
389
|
};
|
|
327
390
|
atomicWriteJson(filePath, sidecar);
|
|
328
391
|
}
|
|
329
|
-
function readTaskFailure(teamName, taskId) {
|
|
330
|
-
const filePath = failureSidecarPath(teamName, taskId);
|
|
392
|
+
function readTaskFailure(teamName, taskId, opts) {
|
|
393
|
+
const filePath = failureSidecarPath(teamName, taskId, opts?.cwd);
|
|
331
394
|
if (!(0, import_fs3.existsSync)(filePath)) return null;
|
|
332
395
|
try {
|
|
333
396
|
const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
|
|
@@ -337,52 +400,58 @@ function readTaskFailure(teamName, taskId) {
|
|
|
337
400
|
}
|
|
338
401
|
}
|
|
339
402
|
var DEFAULT_MAX_TASK_RETRIES = 5;
|
|
340
|
-
function isTaskRetryExhausted(teamName, taskId, maxRetries = DEFAULT_MAX_TASK_RETRIES) {
|
|
341
|
-
const failure = readTaskFailure(teamName, taskId);
|
|
403
|
+
function isTaskRetryExhausted(teamName, taskId, maxRetries = DEFAULT_MAX_TASK_RETRIES, opts) {
|
|
404
|
+
const failure = readTaskFailure(teamName, taskId, opts);
|
|
342
405
|
if (!failure) return false;
|
|
343
406
|
return failure.retryCount >= maxRetries;
|
|
344
407
|
}
|
|
345
|
-
function listTaskIds(teamName) {
|
|
346
|
-
const
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
}
|
|
408
|
+
function listTaskIds(teamName, opts) {
|
|
409
|
+
const scanDir = (dir) => {
|
|
410
|
+
if (!(0, import_fs3.existsSync)(dir)) return [];
|
|
411
|
+
try {
|
|
412
|
+
return (0, import_fs3.readdirSync)(dir).filter((f) => f.endsWith(".json") && !f.includes(".tmp.") && !f.includes(".failure.") && !f.endsWith(".lock")).map((f) => f.replace(".json", ""));
|
|
413
|
+
} catch {
|
|
414
|
+
return [];
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
let ids = scanDir(canonicalTasksDir(teamName, opts?.cwd));
|
|
418
|
+
if (ids.length === 0) {
|
|
419
|
+
ids = scanDir(legacyTasksDir(teamName));
|
|
420
|
+
}
|
|
421
|
+
return ids.sort((a, b) => {
|
|
422
|
+
const numA = parseInt(a, 10);
|
|
423
|
+
const numB = parseInt(b, 10);
|
|
424
|
+
if (!isNaN(numA) && !isNaN(numB)) return numA - numB;
|
|
425
|
+
return a.localeCompare(b);
|
|
426
|
+
});
|
|
358
427
|
}
|
|
359
428
|
|
|
360
429
|
// src/team/inbox-outbox.ts
|
|
361
430
|
var import_fs4 = require("fs");
|
|
362
|
-
var
|
|
431
|
+
var import_path6 = require("path");
|
|
363
432
|
var MAX_INBOX_READ_SIZE = 10 * 1024 * 1024;
|
|
364
433
|
function teamsDir(teamName) {
|
|
365
|
-
const result = (0,
|
|
366
|
-
validateResolvedPath(result, (0,
|
|
434
|
+
const result = (0, import_path6.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName));
|
|
435
|
+
validateResolvedPath(result, (0, import_path6.join)(getClaudeConfigDir(), "teams"));
|
|
367
436
|
return result;
|
|
368
437
|
}
|
|
369
438
|
function inboxPath(teamName, workerName) {
|
|
370
|
-
return (0,
|
|
439
|
+
return (0, import_path6.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.jsonl`);
|
|
371
440
|
}
|
|
372
441
|
function inboxCursorPath(teamName, workerName) {
|
|
373
|
-
return (0,
|
|
442
|
+
return (0, import_path6.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.offset`);
|
|
374
443
|
}
|
|
375
444
|
function outboxPath(teamName, workerName) {
|
|
376
|
-
return (0,
|
|
445
|
+
return (0, import_path6.join)(teamsDir(teamName), "outbox", `${sanitizeName(workerName)}.jsonl`);
|
|
377
446
|
}
|
|
378
447
|
function signalPath(teamName, workerName) {
|
|
379
|
-
return (0,
|
|
448
|
+
return (0, import_path6.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.shutdown`);
|
|
380
449
|
}
|
|
381
450
|
function drainSignalPath(teamName, workerName) {
|
|
382
|
-
return (0,
|
|
451
|
+
return (0, import_path6.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.drain`);
|
|
383
452
|
}
|
|
384
453
|
function ensureDir(filePath) {
|
|
385
|
-
const dir = (0,
|
|
454
|
+
const dir = (0, import_path6.dirname)(filePath);
|
|
386
455
|
ensureDirWithMode(dir);
|
|
387
456
|
}
|
|
388
457
|
function appendOutbox(teamName, workerName, message) {
|
|
@@ -398,7 +467,7 @@ function rotateOutboxIfNeeded(teamName, workerName, maxLines) {
|
|
|
398
467
|
const lines = content.split("\n").filter((l) => l.trim());
|
|
399
468
|
if (lines.length <= maxLines) return;
|
|
400
469
|
const keepCount = Math.floor(maxLines / 2);
|
|
401
|
-
const kept = lines.slice(-keepCount);
|
|
470
|
+
const kept = keepCount === 0 ? [] : lines.slice(-keepCount);
|
|
402
471
|
const tmpPath = `${filePath}.tmp.${process.pid}.${Date.now()}`;
|
|
403
472
|
writeFileWithMode(tmpPath, kept.join("\n") + "\n");
|
|
404
473
|
(0, import_fs4.renameSync)(tmpPath, filePath);
|
|
@@ -475,7 +544,8 @@ function readNewInboxMessages(teamName, workerName) {
|
|
|
475
544
|
messages.push(JSON.parse(cleanLine));
|
|
476
545
|
bytesProcessed += lineBytes;
|
|
477
546
|
} catch {
|
|
478
|
-
|
|
547
|
+
console.warn(`[inbox-outbox] Skipping malformed JSONL line for ${workerName}: ${cleanLine.slice(0, 80)}`);
|
|
548
|
+
bytesProcessed += lineBytes;
|
|
479
549
|
}
|
|
480
550
|
}
|
|
481
551
|
const newOffset = offset + (bytesProcessed > 0 ? bytesProcessed : 0);
|
|
@@ -525,15 +595,15 @@ function deleteDrainSignal(teamName, workerName) {
|
|
|
525
595
|
|
|
526
596
|
// src/team/team-registration.ts
|
|
527
597
|
var import_fs5 = require("fs");
|
|
528
|
-
var
|
|
598
|
+
var import_path7 = require("path");
|
|
529
599
|
function configPath(teamName) {
|
|
530
|
-
const result = (0,
|
|
531
|
-
validateResolvedPath(result, (0,
|
|
600
|
+
const result = (0, import_path7.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName), "config.json");
|
|
601
|
+
validateResolvedPath(result, (0, import_path7.join)(getClaudeConfigDir(), "teams"));
|
|
532
602
|
return result;
|
|
533
603
|
}
|
|
534
604
|
function shadowRegistryPath(workingDirectory) {
|
|
535
|
-
const result = (0,
|
|
536
|
-
validateResolvedPath(result, (0,
|
|
605
|
+
const result = (0, import_path7.join)(workingDirectory, ".omc", "state", "team-mcp-workers.json");
|
|
606
|
+
validateResolvedPath(result, (0, import_path7.join)(workingDirectory, ".omc", "state"));
|
|
537
607
|
return result;
|
|
538
608
|
}
|
|
539
609
|
function unregisterMcpWorker(teamName, workerName, workingDirectory) {
|
|
@@ -592,9 +662,9 @@ function listMcpWorkers(teamName, workingDirectory) {
|
|
|
592
662
|
|
|
593
663
|
// src/team/heartbeat.ts
|
|
594
664
|
var import_fs6 = require("fs");
|
|
595
|
-
var
|
|
665
|
+
var import_path8 = require("path");
|
|
596
666
|
function heartbeatPath(workingDirectory, teamName, workerName) {
|
|
597
|
-
return (0,
|
|
667
|
+
return (0, import_path8.join)(workingDirectory, ".omc", "state", "team-bridge", sanitizeName(teamName), `${sanitizeName(workerName)}.heartbeat.json`);
|
|
598
668
|
}
|
|
599
669
|
function writeHeartbeat(workingDirectory, data) {
|
|
600
670
|
const filePath = heartbeatPath(workingDirectory, data.teamName, data.workerName);
|
|
@@ -767,11 +837,96 @@ function findPermissionViolations(changedPaths, permissions, cwd) {
|
|
|
767
837
|
|
|
768
838
|
// src/team/team-status.ts
|
|
769
839
|
var import_fs7 = require("fs");
|
|
770
|
-
var
|
|
840
|
+
var import_path9 = require("path");
|
|
841
|
+
|
|
842
|
+
// src/team/usage-tracker.ts
|
|
843
|
+
var import_node_fs = require("node:fs");
|
|
844
|
+
var import_node_path4 = require("node:path");
|
|
845
|
+
function getUsageLogPath(workingDirectory, teamName) {
|
|
846
|
+
return (0, import_node_path4.join)(workingDirectory, ".omc", "logs", `team-usage-${teamName}.jsonl`);
|
|
847
|
+
}
|
|
848
|
+
function recordTaskUsage(workingDirectory, teamName, record) {
|
|
849
|
+
const logPath = getUsageLogPath(workingDirectory, teamName);
|
|
850
|
+
const dir = (0, import_node_path4.join)(workingDirectory, ".omc", "logs");
|
|
851
|
+
validateResolvedPath(logPath, workingDirectory);
|
|
852
|
+
ensureDirWithMode(dir);
|
|
853
|
+
appendFileWithMode(logPath, JSON.stringify(record) + "\n");
|
|
854
|
+
}
|
|
855
|
+
function measureCharCounts(promptFilePath, outputFilePath) {
|
|
856
|
+
let promptChars = 0;
|
|
857
|
+
let responseChars = 0;
|
|
858
|
+
try {
|
|
859
|
+
if ((0, import_node_fs.existsSync)(promptFilePath)) {
|
|
860
|
+
promptChars = (0, import_node_fs.statSync)(promptFilePath).size;
|
|
861
|
+
}
|
|
862
|
+
} catch {
|
|
863
|
+
}
|
|
864
|
+
try {
|
|
865
|
+
if ((0, import_node_fs.existsSync)(outputFilePath)) {
|
|
866
|
+
responseChars = (0, import_node_fs.statSync)(outputFilePath).size;
|
|
867
|
+
}
|
|
868
|
+
} catch {
|
|
869
|
+
}
|
|
870
|
+
return { promptChars, responseChars };
|
|
871
|
+
}
|
|
872
|
+
function readUsageRecords(workingDirectory, teamName) {
|
|
873
|
+
const logPath = getUsageLogPath(workingDirectory, teamName);
|
|
874
|
+
if (!(0, import_node_fs.existsSync)(logPath)) return [];
|
|
875
|
+
const content = (0, import_node_fs.readFileSync)(logPath, "utf-8");
|
|
876
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
877
|
+
const records = [];
|
|
878
|
+
for (const line of lines) {
|
|
879
|
+
try {
|
|
880
|
+
records.push(JSON.parse(line));
|
|
881
|
+
} catch {
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
return records;
|
|
885
|
+
}
|
|
886
|
+
function generateUsageReport(workingDirectory, teamName) {
|
|
887
|
+
const records = readUsageRecords(workingDirectory, teamName);
|
|
888
|
+
const workerMap = /* @__PURE__ */ new Map();
|
|
889
|
+
for (const r of records) {
|
|
890
|
+
const existing = workerMap.get(r.workerName);
|
|
891
|
+
if (existing) {
|
|
892
|
+
existing.taskCount++;
|
|
893
|
+
existing.totalWallClockMs += r.wallClockMs;
|
|
894
|
+
existing.totalPromptChars += r.promptChars;
|
|
895
|
+
existing.totalResponseChars += r.responseChars;
|
|
896
|
+
} else {
|
|
897
|
+
workerMap.set(r.workerName, {
|
|
898
|
+
workerName: r.workerName,
|
|
899
|
+
provider: r.provider,
|
|
900
|
+
model: r.model,
|
|
901
|
+
taskCount: 1,
|
|
902
|
+
totalWallClockMs: r.wallClockMs,
|
|
903
|
+
totalPromptChars: r.promptChars,
|
|
904
|
+
totalResponseChars: r.responseChars
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
const workers = Array.from(workerMap.values());
|
|
909
|
+
return {
|
|
910
|
+
teamName,
|
|
911
|
+
totalWallClockMs: workers.reduce((sum, w) => sum + w.totalWallClockMs, 0),
|
|
912
|
+
taskCount: workers.reduce((sum, w) => sum + w.taskCount, 0),
|
|
913
|
+
workers
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
// src/team/team-status.ts
|
|
918
|
+
function emptyUsageReport(teamName) {
|
|
919
|
+
return {
|
|
920
|
+
teamName,
|
|
921
|
+
totalWallClockMs: 0,
|
|
922
|
+
taskCount: 0,
|
|
923
|
+
workers: []
|
|
924
|
+
};
|
|
925
|
+
}
|
|
771
926
|
function peekRecentOutboxMessages(teamName, workerName, maxMessages = 10) {
|
|
772
927
|
const safeName = sanitizeName(teamName);
|
|
773
928
|
const safeWorker = sanitizeName(workerName);
|
|
774
|
-
const outboxPath2 = (0,
|
|
929
|
+
const outboxPath2 = (0, import_path9.join)(getClaudeConfigDir(), "teams", safeName, "outbox", `${safeWorker}.jsonl`);
|
|
775
930
|
if (!(0, import_fs7.existsSync)(outboxPath2)) return [];
|
|
776
931
|
try {
|
|
777
932
|
const content = (0, import_fs7.readFileSync)(outboxPath2, "utf-8");
|
|
@@ -789,14 +944,18 @@ function peekRecentOutboxMessages(teamName, workerName, maxMessages = 10) {
|
|
|
789
944
|
return [];
|
|
790
945
|
}
|
|
791
946
|
}
|
|
792
|
-
function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
|
|
947
|
+
function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4, options) {
|
|
948
|
+
const startedAt = Date.now();
|
|
793
949
|
const mcpWorkers = listMcpWorkers(teamName, workingDirectory);
|
|
794
|
-
const
|
|
950
|
+
const taskScanStartedAt = Date.now();
|
|
951
|
+
const taskIds = listTaskIds(teamName, { cwd: workingDirectory });
|
|
795
952
|
const tasks = [];
|
|
796
953
|
for (const id of taskIds) {
|
|
797
|
-
const task = readTask(teamName, id);
|
|
954
|
+
const task = readTask(teamName, id, { cwd: workingDirectory });
|
|
798
955
|
if (task) tasks.push(task);
|
|
799
956
|
}
|
|
957
|
+
const taskScanMs = Date.now() - taskScanStartedAt;
|
|
958
|
+
const workerScanStartedAt = Date.now();
|
|
800
959
|
const workers = mcpWorkers.map((w) => {
|
|
801
960
|
const heartbeat = readHeartbeat(workingDirectory, teamName, w.name);
|
|
802
961
|
const alive = isWorkerAlive(workingDirectory, teamName, w.name, heartbeatMaxAgeMs);
|
|
@@ -821,6 +980,15 @@ function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
|
|
|
821
980
|
taskStats
|
|
822
981
|
};
|
|
823
982
|
});
|
|
983
|
+
const workerScanMs = Date.now() - workerScanStartedAt;
|
|
984
|
+
const includeUsage = options?.includeUsage ?? true;
|
|
985
|
+
let usage = emptyUsageReport(teamName);
|
|
986
|
+
let usageReadMs = 0;
|
|
987
|
+
if (includeUsage) {
|
|
988
|
+
const usageReadStartedAt = Date.now();
|
|
989
|
+
usage = generateUsageReport(workingDirectory, teamName);
|
|
990
|
+
usageReadMs = Date.now() - usageReadStartedAt;
|
|
991
|
+
}
|
|
824
992
|
const totalFailed = tasks.filter((t) => t.status === "completed" && t.metadata?.permanentlyFailed === true).length;
|
|
825
993
|
const taskSummary = {
|
|
826
994
|
total: tasks.length,
|
|
@@ -833,6 +1001,13 @@ function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
|
|
|
833
1001
|
teamName,
|
|
834
1002
|
workers,
|
|
835
1003
|
taskSummary,
|
|
1004
|
+
usage,
|
|
1005
|
+
performance: {
|
|
1006
|
+
taskScanMs,
|
|
1007
|
+
workerScanMs,
|
|
1008
|
+
usageReadMs,
|
|
1009
|
+
totalMs: Date.now() - startedAt
|
|
1010
|
+
},
|
|
836
1011
|
lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
|
|
837
1012
|
};
|
|
838
1013
|
}
|
|
@@ -989,18 +1164,18 @@ function buildTaskPrompt(task, messages, config) {
|
|
|
989
1164
|
return result;
|
|
990
1165
|
}
|
|
991
1166
|
function writePromptFile(config, taskId, prompt) {
|
|
992
|
-
const dir = (0,
|
|
1167
|
+
const dir = (0, import_path10.join)(config.workingDirectory, ".omc", "prompts");
|
|
993
1168
|
ensureDirWithMode(dir);
|
|
994
1169
|
const filename = `team-${config.teamName}-task-${taskId}-${Date.now()}.md`;
|
|
995
|
-
const filePath = (0,
|
|
1170
|
+
const filePath = (0, import_path10.join)(dir, filename);
|
|
996
1171
|
writeFileWithMode(filePath, prompt);
|
|
997
1172
|
return filePath;
|
|
998
1173
|
}
|
|
999
1174
|
function getOutputPath(config, taskId) {
|
|
1000
|
-
const dir = (0,
|
|
1175
|
+
const dir = (0, import_path10.join)(config.workingDirectory, ".omc", "outputs");
|
|
1001
1176
|
ensureDirWithMode(dir);
|
|
1002
1177
|
const suffix = Math.random().toString(36).slice(2, 8);
|
|
1003
|
-
return (0,
|
|
1178
|
+
return (0, import_path10.join)(dir, `team-${config.teamName}-task-${taskId}-${Date.now()}-${suffix}.md`);
|
|
1004
1179
|
}
|
|
1005
1180
|
function readOutputSummary(outputFile) {
|
|
1006
1181
|
try {
|
|
@@ -1022,6 +1197,22 @@ function readOutputSummary(outputFile) {
|
|
|
1022
1197
|
return "(error reading output)";
|
|
1023
1198
|
}
|
|
1024
1199
|
}
|
|
1200
|
+
function recordTaskCompletionUsage(args) {
|
|
1201
|
+
const completedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
1202
|
+
const wallClockMs = Math.max(0, Date.now() - args.startedAt);
|
|
1203
|
+
const { promptChars, responseChars } = measureCharCounts(args.promptFile, args.outputFile);
|
|
1204
|
+
recordTaskUsage(args.config.workingDirectory, args.config.teamName, {
|
|
1205
|
+
taskId: args.taskId,
|
|
1206
|
+
workerName: args.config.workerName,
|
|
1207
|
+
provider: args.provider,
|
|
1208
|
+
model: args.config.model ?? "default",
|
|
1209
|
+
startedAt: args.startedAtIso,
|
|
1210
|
+
completedAt,
|
|
1211
|
+
wallClockMs,
|
|
1212
|
+
promptChars,
|
|
1213
|
+
responseChars
|
|
1214
|
+
});
|
|
1215
|
+
}
|
|
1025
1216
|
var MAX_CODEX_OUTPUT_SIZE = 1024 * 1024;
|
|
1026
1217
|
function parseCodexOutput(output) {
|
|
1027
1218
|
const lines = output.trim().split("\n").filter((l) => l.trim());
|
|
@@ -1065,7 +1256,7 @@ function spawnCliProcess(provider, prompt, model, cwd, timeoutMs) {
|
|
|
1065
1256
|
let cmd;
|
|
1066
1257
|
if (provider === "codex") {
|
|
1067
1258
|
cmd = "codex";
|
|
1068
|
-
args = ["exec", "-m", model || "gpt-5.3-codex", "--json", "--
|
|
1259
|
+
args = ["exec", "-m", model || "gpt-5.3-codex", "--json", "--dangerously-bypass-approvals-and-sandbox", "--skip-git-repo-check"];
|
|
1069
1260
|
} else {
|
|
1070
1261
|
cmd = "gemini";
|
|
1071
1262
|
args = ["--yolo"];
|
|
@@ -1240,8 +1431,10 @@ async function runBridge(config) {
|
|
|
1240
1431
|
await handleShutdown(config, shutdownBeforeSpawn, null);
|
|
1241
1432
|
return;
|
|
1242
1433
|
}
|
|
1434
|
+
const taskStartedAt = Date.now();
|
|
1435
|
+
const taskStartedAtIso = new Date(taskStartedAt).toISOString();
|
|
1243
1436
|
const prompt = buildTaskPrompt(task, messages, config);
|
|
1244
|
-
const
|
|
1437
|
+
const promptFile = writePromptFile(config, task.id, prompt);
|
|
1245
1438
|
const outputFile = getOutputPath(config, task.id);
|
|
1246
1439
|
log(`[bridge] Executing task ${task.id}: ${task.subject}`);
|
|
1247
1440
|
try {
|
|
@@ -1295,6 +1488,19 @@ ${violationSummary}`,
|
|
|
1295
1488
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1296
1489
|
});
|
|
1297
1490
|
log(`[bridge] Task ${task.id} failed: permission violations (enforce mode)`);
|
|
1491
|
+
try {
|
|
1492
|
+
recordTaskCompletionUsage({
|
|
1493
|
+
config,
|
|
1494
|
+
taskId: task.id,
|
|
1495
|
+
promptFile,
|
|
1496
|
+
outputFile,
|
|
1497
|
+
provider,
|
|
1498
|
+
startedAt: taskStartedAt,
|
|
1499
|
+
startedAtIso: taskStartedAtIso
|
|
1500
|
+
});
|
|
1501
|
+
} catch (usageErr) {
|
|
1502
|
+
log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
|
|
1503
|
+
}
|
|
1298
1504
|
consecutiveErrors = 0;
|
|
1299
1505
|
} else {
|
|
1300
1506
|
audit(config, "permission_audit", task.id, {
|
|
@@ -1314,6 +1520,19 @@ ${violationSummary}`);
|
|
|
1314
1520
|
[AUDIT WARNING: ${violations.length} permission violation(s) detected]`,
|
|
1315
1521
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1316
1522
|
});
|
|
1523
|
+
try {
|
|
1524
|
+
recordTaskCompletionUsage({
|
|
1525
|
+
config,
|
|
1526
|
+
taskId: task.id,
|
|
1527
|
+
promptFile,
|
|
1528
|
+
outputFile,
|
|
1529
|
+
provider,
|
|
1530
|
+
startedAt: taskStartedAt,
|
|
1531
|
+
startedAtIso: taskStartedAtIso
|
|
1532
|
+
});
|
|
1533
|
+
} catch (usageErr) {
|
|
1534
|
+
log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
|
|
1535
|
+
}
|
|
1317
1536
|
log(`[bridge] Task ${task.id} completed (with ${violations.length} audit warning(s))`);
|
|
1318
1537
|
}
|
|
1319
1538
|
} else {
|
|
@@ -1327,6 +1546,19 @@ ${violationSummary}`);
|
|
|
1327
1546
|
summary,
|
|
1328
1547
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1329
1548
|
});
|
|
1549
|
+
try {
|
|
1550
|
+
recordTaskCompletionUsage({
|
|
1551
|
+
config,
|
|
1552
|
+
taskId: task.id,
|
|
1553
|
+
promptFile,
|
|
1554
|
+
outputFile,
|
|
1555
|
+
provider,
|
|
1556
|
+
startedAt: taskStartedAt,
|
|
1557
|
+
startedAtIso: taskStartedAtIso
|
|
1558
|
+
});
|
|
1559
|
+
} catch (usageErr) {
|
|
1560
|
+
log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
|
|
1561
|
+
}
|
|
1330
1562
|
log(`[bridge] Task ${task.id} completed`);
|
|
1331
1563
|
}
|
|
1332
1564
|
} catch (err) {
|
|
@@ -1358,6 +1590,19 @@ ${violationSummary}`);
|
|
|
1358
1590
|
error: `Task permanently failed after ${attempt} attempts: ${errorMsg}`,
|
|
1359
1591
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1360
1592
|
});
|
|
1593
|
+
try {
|
|
1594
|
+
recordTaskCompletionUsage({
|
|
1595
|
+
config,
|
|
1596
|
+
taskId: task.id,
|
|
1597
|
+
promptFile,
|
|
1598
|
+
outputFile,
|
|
1599
|
+
provider,
|
|
1600
|
+
startedAt: taskStartedAt,
|
|
1601
|
+
startedAtIso: taskStartedAtIso
|
|
1602
|
+
});
|
|
1603
|
+
} catch (usageErr) {
|
|
1604
|
+
log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
|
|
1605
|
+
}
|
|
1361
1606
|
log(`[bridge] Task ${task.id} permanently failed after ${attempt} attempts`);
|
|
1362
1607
|
} else {
|
|
1363
1608
|
updateTask(teamName, task.id, { status: "pending" });
|
|
@@ -1382,7 +1627,7 @@ ${violationSummary}`);
|
|
|
1382
1627
|
idleNotified = true;
|
|
1383
1628
|
}
|
|
1384
1629
|
try {
|
|
1385
|
-
const teamStatus = getTeamStatus(teamName, workingDirectory);
|
|
1630
|
+
const teamStatus = getTeamStatus(teamName, workingDirectory, 3e4, { includeUsage: false });
|
|
1386
1631
|
if (teamStatus.taskSummary.total > 0 && teamStatus.taskSummary.pending === 0 && teamStatus.taskSummary.inProgress === 0) {
|
|
1387
1632
|
log(`[bridge] All team tasks complete. Auto-terminating worker.`);
|
|
1388
1633
|
appendOutbox(teamName, workerName, {
|
|
@@ -1410,14 +1655,19 @@ ${violationSummary}`);
|
|
|
1410
1655
|
}
|
|
1411
1656
|
|
|
1412
1657
|
// src/lib/worktree-paths.ts
|
|
1658
|
+
var import_crypto = require("crypto");
|
|
1413
1659
|
var import_child_process3 = require("child_process");
|
|
1414
1660
|
var import_fs9 = require("fs");
|
|
1415
|
-
var
|
|
1416
|
-
var
|
|
1661
|
+
var import_path11 = require("path");
|
|
1662
|
+
var MAX_WORKTREE_CACHE_SIZE = 8;
|
|
1663
|
+
var worktreeCacheMap = /* @__PURE__ */ new Map();
|
|
1417
1664
|
function getWorktreeRoot(cwd) {
|
|
1418
1665
|
const effectiveCwd = cwd || process.cwd();
|
|
1419
|
-
if (
|
|
1420
|
-
|
|
1666
|
+
if (worktreeCacheMap.has(effectiveCwd)) {
|
|
1667
|
+
const root = worktreeCacheMap.get(effectiveCwd);
|
|
1668
|
+
worktreeCacheMap.delete(effectiveCwd);
|
|
1669
|
+
worktreeCacheMap.set(effectiveCwd, root);
|
|
1670
|
+
return root || null;
|
|
1421
1671
|
}
|
|
1422
1672
|
try {
|
|
1423
1673
|
const root = (0, import_child_process3.execSync)("git rev-parse --show-toplevel", {
|
|
@@ -1425,7 +1675,13 @@ function getWorktreeRoot(cwd) {
|
|
|
1425
1675
|
encoding: "utf-8",
|
|
1426
1676
|
stdio: ["pipe", "pipe", "pipe"]
|
|
1427
1677
|
}).trim();
|
|
1428
|
-
|
|
1678
|
+
if (worktreeCacheMap.size >= MAX_WORKTREE_CACHE_SIZE) {
|
|
1679
|
+
const oldest = worktreeCacheMap.keys().next().value;
|
|
1680
|
+
if (oldest !== void 0) {
|
|
1681
|
+
worktreeCacheMap.delete(oldest);
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
worktreeCacheMap.set(effectiveCwd, root);
|
|
1429
1685
|
return root;
|
|
1430
1686
|
} catch {
|
|
1431
1687
|
return null;
|
|
@@ -1434,15 +1690,15 @@ function getWorktreeRoot(cwd) {
|
|
|
1434
1690
|
|
|
1435
1691
|
// src/team/bridge-entry.ts
|
|
1436
1692
|
function validateConfigPath(configPath2, homeDir, claudeConfigDir) {
|
|
1437
|
-
const resolved = (0,
|
|
1693
|
+
const resolved = (0, import_path12.resolve)(configPath2);
|
|
1438
1694
|
const isUnderHome = resolved.startsWith(homeDir + "/") || resolved === homeDir;
|
|
1439
|
-
const normalizedConfigDir = (0,
|
|
1440
|
-
const normalizedOmcDir = (0,
|
|
1695
|
+
const normalizedConfigDir = (0, import_path12.resolve)(claudeConfigDir);
|
|
1696
|
+
const normalizedOmcDir = (0, import_path12.resolve)(homeDir, ".omc");
|
|
1441
1697
|
const hasOmcComponent = resolved.includes("/.omc/") || resolved.endsWith("/.omc");
|
|
1442
1698
|
const isTrustedSubpath = resolved === normalizedConfigDir || resolved.startsWith(normalizedConfigDir + "/") || resolved === normalizedOmcDir || resolved.startsWith(normalizedOmcDir + "/") || hasOmcComponent;
|
|
1443
1699
|
if (!isUnderHome || !isTrustedSubpath) return false;
|
|
1444
1700
|
try {
|
|
1445
|
-
const parentDir = (0,
|
|
1701
|
+
const parentDir = (0, import_path12.resolve)(resolved, "..");
|
|
1446
1702
|
const realParent = (0, import_fs10.realpathSync)(parentDir);
|
|
1447
1703
|
if (!realParent.startsWith(homeDir + "/") && realParent !== homeDir) {
|
|
1448
1704
|
return false;
|
|
@@ -1477,7 +1733,7 @@ function main() {
|
|
|
1477
1733
|
console.error("Usage: node bridge-entry.js --config <path-to-config.json>");
|
|
1478
1734
|
process.exit(1);
|
|
1479
1735
|
}
|
|
1480
|
-
const configPath2 = (0,
|
|
1736
|
+
const configPath2 = (0, import_path12.resolve)(process.argv[configIdx + 1]);
|
|
1481
1737
|
const home = (0, import_os2.homedir)();
|
|
1482
1738
|
const claudeConfigDir = getClaudeConfigDir();
|
|
1483
1739
|
if (!validateConfigPath(configPath2, home, claudeConfigDir)) {
|