oh-my-copilot 5.0.0 → 5.5.0
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/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +16 -1
- package/README.md +15 -4
- package/agents/debugger.md +9 -1
- package/agents/explore.md +3 -1
- package/bridge/__pycache__/gyoshu_bridge.cpython-312.pyc +0 -0
- package/bridge/claude-md-coordinator.cjs +2 -2
- package/bridge/cli.cjs +35962 -26371
- package/bridge/mcp-server.cjs +3025 -1333
- package/bridge/runtime-cli.cjs +20794 -16157
- package/bridge/team-bridge.cjs +2074 -587
- package/bridge/team-mcp.cjs +22008 -12937
- package/bridge/team.js +16235 -10694
- package/copilot/agents/analyst.md +120 -0
- package/copilot/agents/architect.md +129 -0
- package/copilot/agents/code-reviewer.md +242 -0
- package/copilot/agents/code-simplifier.md +92 -0
- package/copilot/agents/critic.md +280 -0
- package/copilot/agents/debugger.md +158 -0
- package/copilot/agents/designer.md +117 -0
- package/copilot/agents/devils-advocate.md +221 -0
- package/copilot/agents/document-specialist.md +77 -0
- package/copilot/agents/executor.md +121 -0
- package/copilot/agents/explore.md +120 -0
- package/copilot/agents/git-master.md +95 -0
- package/copilot/agents/planner.md +140 -0
- package/copilot/agents/qa-tester.md +101 -0
- package/copilot/agents/scientist.md +95 -0
- package/copilot/agents/security-reviewer.md +191 -0
- package/copilot/agents/test-engineer.md +126 -0
- package/copilot/agents/tracer.md +168 -0
- package/copilot/agents/verifier.md +114 -0
- package/copilot/agents/writer.md +91 -0
- package/copilot/hooks.json +381 -0
- package/dist/__tests__/auto-slash-aliases.test.js +2 -2
- package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
- package/dist/__tests__/auto-slash-live-data-security.test.js +4 -4
- package/dist/__tests__/auto-slash-live-data-security.test.js.map +1 -1
- package/dist/__tests__/auto-update.test.js +16 -16
- package/dist/__tests__/auto-update.test.js.map +1 -1
- package/dist/__tests__/bounded-git-timeout-parity.test.js +2 -0
- package/dist/__tests__/bounded-git-timeout-parity.test.js.map +1 -1
- package/dist/__tests__/cli-config-stop-callback.test.js +3 -3
- package/dist/__tests__/cli-config-stop-callback.test.js.map +1 -1
- package/dist/__tests__/cli-notify-profile.test.js +1 -1
- package/dist/__tests__/cli-notify-profile.test.js.map +1 -1
- package/dist/__tests__/config-dir.test.js +88 -36
- package/dist/__tests__/config-dir.test.js.map +1 -1
- package/dist/__tests__/config-worker-permissions.test.d.ts +2 -0
- package/dist/__tests__/config-worker-permissions.test.d.ts.map +1 -0
- package/dist/__tests__/config-worker-permissions.test.js +99 -0
- package/dist/__tests__/config-worker-permissions.test.js.map +1 -0
- package/dist/__tests__/consolidation-contracts.test.js +7 -1
- package/dist/__tests__/consolidation-contracts.test.js.map +1 -1
- package/dist/__tests__/context-bloat-2577.test.js.map +1 -1
- package/dist/__tests__/copilot-agents-manifest.test.d.ts +2 -0
- package/dist/__tests__/copilot-agents-manifest.test.d.ts.map +1 -0
- package/dist/__tests__/copilot-agents-manifest.test.js +162 -0
- package/dist/__tests__/copilot-agents-manifest.test.js.map +1 -0
- package/dist/__tests__/copilot-config-dir-alias.test.d.ts +2 -0
- package/dist/__tests__/copilot-config-dir-alias.test.d.ts.map +1 -0
- package/dist/__tests__/copilot-config-dir-alias.test.js +13 -0
- package/dist/__tests__/copilot-config-dir-alias.test.js.map +1 -0
- package/dist/__tests__/copilot-hook-adapter.test.d.ts +2 -0
- package/dist/__tests__/copilot-hook-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/copilot-hook-adapter.test.js +385 -0
- package/dist/__tests__/copilot-hook-adapter.test.js.map +1 -0
- package/dist/__tests__/copilot-hooks-manifest.test.d.ts +2 -0
- package/dist/__tests__/copilot-hooks-manifest.test.d.ts.map +1 -0
- package/dist/__tests__/copilot-hooks-manifest.test.js +201 -0
- package/dist/__tests__/copilot-hooks-manifest.test.js.map +1 -0
- package/dist/__tests__/delegation-enforcement-levels.test.js +47 -16
- package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -1
- package/dist/__tests__/directory-context-injector-registration.test.d.ts +2 -0
- package/dist/__tests__/directory-context-injector-registration.test.d.ts.map +1 -0
- package/dist/__tests__/directory-context-injector-registration.test.js +79 -0
- package/dist/__tests__/directory-context-injector-registration.test.js.map +1 -0
- package/dist/__tests__/doctor-conflicts.test.js +71 -16
- package/dist/__tests__/doctor-conflicts.test.js.map +1 -1
- package/dist/__tests__/doctor-legacy-config-dir.test.d.ts +2 -0
- package/dist/__tests__/doctor-legacy-config-dir.test.d.ts.map +1 -0
- package/dist/__tests__/doctor-legacy-config-dir.test.js +45 -0
- package/dist/__tests__/doctor-legacy-config-dir.test.js.map +1 -0
- package/dist/__tests__/doctor-node-on-path.test.d.ts +2 -0
- package/dist/__tests__/doctor-node-on-path.test.d.ts.map +1 -0
- package/dist/__tests__/doctor-node-on-path.test.js +63 -0
- package/dist/__tests__/doctor-node-on-path.test.js.map +1 -0
- package/dist/__tests__/hook-command-normalizer.test.js +4 -4
- package/dist/__tests__/hook-command-normalizer.test.js.map +1 -1
- package/dist/__tests__/hooks-command-escaping.test.js +2 -2
- package/dist/__tests__/hooks-command-escaping.test.js.map +1 -1
- package/dist/__tests__/hooks.test.js +44 -0
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/host-detection.test.js +28 -8
- package/dist/__tests__/host-detection.test.js.map +1 -1
- package/dist/__tests__/hud/cli-diagnostic.test.js +1 -0
- package/dist/__tests__/hud/cli-diagnostic.test.js.map +1 -1
- package/dist/__tests__/hud/labels.test.js +4 -4
- package/dist/__tests__/hud/labels.test.js.map +1 -1
- package/dist/__tests__/hud/model.test.js +22 -0
- package/dist/__tests__/hud/model.test.js.map +1 -1
- package/dist/__tests__/hud/update-hint.test.d.ts +2 -0
- package/dist/__tests__/hud/update-hint.test.d.ts.map +1 -0
- package/dist/__tests__/hud/update-hint.test.js +120 -0
- package/dist/__tests__/hud/update-hint.test.js.map +1 -0
- package/dist/__tests__/hud/usage-api-header-fallback.test.d.ts +2 -0
- package/dist/__tests__/hud/usage-api-header-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/hud/usage-api-header-fallback.test.js +70 -0
- package/dist/__tests__/hud/usage-api-header-fallback.test.js.map +1 -0
- package/dist/__tests__/hud/usage-api-lock.test.js +6 -6
- package/dist/__tests__/hud/usage-api-lock.test.js.map +1 -1
- package/dist/__tests__/hud/usage-api-stale.test.js +6 -6
- package/dist/__tests__/hud/usage-api-stale.test.js.map +1 -1
- package/dist/__tests__/hud/usage-api.test.js +84 -6
- package/dist/__tests__/hud/usage-api.test.js.map +1 -1
- package/dist/__tests__/hud/watch-mode-init.test.js +171 -22
- package/dist/__tests__/hud/watch-mode-init.test.js.map +1 -1
- package/dist/__tests__/hud-cache-wrapper.test.js +453 -5
- package/dist/__tests__/hud-cache-wrapper.test.js.map +1 -1
- package/dist/__tests__/hud-marketplace-resolution.test.js +10 -10
- package/dist/__tests__/hud-marketplace-resolution.test.js.map +1 -1
- package/dist/__tests__/hud-windows.test.js +1 -1
- package/dist/__tests__/hud-windows.test.js.map +1 -1
- package/dist/__tests__/installer-hooks-merge.test.js +3 -3
- package/dist/__tests__/installer-hooks-merge.test.js.map +1 -1
- package/dist/__tests__/installer-hud-skip.test.js +8 -8
- package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
- package/dist/__tests__/installer-mcp-config.test.js +2 -2
- package/dist/__tests__/installer-mcp-config.test.js.map +1 -1
- package/dist/__tests__/installer-omc-reference.test.js +4 -4
- package/dist/__tests__/installer-omc-reference.test.js.map +1 -1
- package/dist/__tests__/installer-plugin-agents.test.js +4 -4
- package/dist/__tests__/installer-plugin-agents.test.js.map +1 -1
- package/dist/__tests__/installer-version-guard.test.js +2 -2
- package/dist/__tests__/installer-version-guard.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +8 -8
- package/dist/__tests__/installer.test.js.map +1 -1
- package/dist/__tests__/keyword-detector-echo-guard.test.js +2 -2
- package/dist/__tests__/keyword-detector-echo-guard.test.js.map +1 -1
- package/dist/__tests__/keyword-detector-script.test.js +50 -6
- package/dist/__tests__/keyword-detector-script.test.js.map +1 -1
- package/dist/__tests__/live-data.test.js +4 -0
- package/dist/__tests__/live-data.test.js.map +1 -1
- package/dist/__tests__/manual-compact-command.test.js +4 -4
- package/dist/__tests__/manual-compact-command.test.js.map +1 -1
- package/dist/__tests__/notepad.test.js +61 -0
- package/dist/__tests__/notepad.test.js.map +1 -1
- package/dist/__tests__/npm-package-bin-surface.test.js +3 -2
- package/dist/__tests__/npm-package-bin-surface.test.js.map +1 -1
- package/dist/__tests__/package-dir-resolution-regression.test.js +13 -6
- package/dist/__tests__/package-dir-resolution-regression.test.js.map +1 -1
- package/dist/__tests__/plugin-setup-deps.test.js +137 -50
- package/dist/__tests__/plugin-setup-deps.test.js.map +1 -1
- package/dist/__tests__/plugin-shipping-surface.test.js +61 -0
- package/dist/__tests__/plugin-shipping-surface.test.js.map +1 -1
- package/dist/__tests__/plugin-skill-budget.test.js +7 -1
- package/dist/__tests__/plugin-skill-budget.test.js.map +1 -1
- package/dist/__tests__/post-tool-rules-injector.test.js +42 -12
- package/dist/__tests__/post-tool-rules-injector.test.js.map +1 -1
- package/dist/__tests__/pre-tool-enforcer-jev-wiring.test.d.ts +2 -0
- package/dist/__tests__/pre-tool-enforcer-jev-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/pre-tool-enforcer-jev-wiring.test.js +136 -0
- package/dist/__tests__/pre-tool-enforcer-jev-wiring.test.js.map +1 -0
- package/dist/__tests__/pre-tool-enforcer.test.js +180 -4
- package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
- package/dist/__tests__/preemptive-compaction-hook.test.js +44 -7
- package/dist/__tests__/preemptive-compaction-hook.test.js.map +1 -1
- package/dist/__tests__/project-memory-posttool.test.d.ts +2 -0
- package/dist/__tests__/project-memory-posttool.test.d.ts.map +1 -0
- package/dist/__tests__/project-memory-posttool.test.js +84 -0
- package/dist/__tests__/project-memory-posttool.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/daemon-bootstrap.test.js +2 -2
- package/dist/__tests__/rate-limit-wait/daemon-bootstrap.test.js.map +1 -1
- package/dist/__tests__/rate-limit-wait/integration.test.js +3 -3
- package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -1
- package/dist/__tests__/rate-limit-wait/pane-fresh-capture.test.js +0 -1
- package/dist/__tests__/rate-limit-wait/pane-fresh-capture.test.js.map +1 -1
- package/dist/__tests__/read-budget-preflight.test.d.ts +2 -0
- package/dist/__tests__/read-budget-preflight.test.d.ts.map +1 -0
- package/dist/__tests__/read-budget-preflight.test.js +142 -0
- package/dist/__tests__/read-budget-preflight.test.js.map +1 -0
- package/dist/__tests__/release-boundary.test.js +32 -2
- package/dist/__tests__/release-boundary.test.js.map +1 -1
- package/dist/__tests__/release-guidance.test.js +10 -0
- package/dist/__tests__/release-guidance.test.js.map +1 -1
- package/dist/__tests__/repair-plugin-cache-script.test.js +10 -9
- package/dist/__tests__/repair-plugin-cache-script.test.js.map +1 -1
- package/dist/__tests__/resolve-transcript-path.test.js +10 -10
- package/dist/__tests__/resolve-transcript-path.test.js.map +1 -1
- package/dist/__tests__/run-cjs-generic-timeout.test.js +146 -12
- package/dist/__tests__/run-cjs-generic-timeout.test.js.map +1 -1
- package/dist/__tests__/run-cjs-graceful-fallback.test.js +86 -14
- package/dist/__tests__/run-cjs-graceful-fallback.test.js.map +1 -1
- package/dist/__tests__/run-cjs-windows-stdio-contract.test.d.ts +2 -0
- package/dist/__tests__/run-cjs-windows-stdio-contract.test.d.ts.map +1 -0
- package/dist/__tests__/run-cjs-windows-stdio-contract.test.js +841 -0
- package/dist/__tests__/run-cjs-windows-stdio-contract.test.js.map +1 -0
- package/dist/__tests__/run-cjs-worker-skip-guard.test.d.ts +2 -0
- package/dist/__tests__/run-cjs-worker-skip-guard.test.d.ts.map +1 -0
- package/dist/__tests__/run-cjs-worker-skip-guard.test.js +75 -0
- package/dist/__tests__/run-cjs-worker-skip-guard.test.js.map +1 -0
- package/dist/__tests__/session-end-process-exit.test.js +82 -21
- package/dist/__tests__/session-end-process-exit.test.js.map +1 -1
- package/dist/__tests__/session-friction-report.test.js +2 -2
- package/dist/__tests__/session-friction-report.test.js.map +1 -1
- package/dist/__tests__/session-history-search.test.js +90 -7
- package/dist/__tests__/session-history-search.test.js.map +1 -1
- package/dist/__tests__/session-start-background-output.test.js +1 -1
- package/dist/__tests__/session-start-background-output.test.js.map +1 -1
- package/dist/__tests__/session-start-cache-cleanup.test.js +9 -9
- package/dist/__tests__/session-start-cache-cleanup.test.js.map +1 -1
- package/dist/__tests__/session-start-context-budget.test.d.ts +2 -0
- package/dist/__tests__/session-start-context-budget.test.d.ts.map +1 -0
- package/dist/__tests__/session-start-context-budget.test.js +84 -0
- package/dist/__tests__/session-start-context-budget.test.js.map +1 -0
- package/dist/__tests__/session-start-script-context.test.js +4 -4
- package/dist/__tests__/session-start-script-context.test.js.map +1 -1
- package/dist/__tests__/session-start-timeout-cleanup.test.js +11 -7
- package/dist/__tests__/session-start-timeout-cleanup.test.js.map +1 -1
- package/dist/__tests__/session-start-update-check.test.d.ts +2 -0
- package/dist/__tests__/session-start-update-check.test.d.ts.map +1 -0
- package/dist/__tests__/session-start-update-check.test.js +69 -0
- package/dist/__tests__/session-start-update-check.test.js.map +1 -0
- package/dist/__tests__/session-start-update-refresh.test.d.ts +2 -0
- package/dist/__tests__/session-start-update-refresh.test.d.ts.map +1 -0
- package/dist/__tests__/session-start-update-refresh.test.js +179 -0
- package/dist/__tests__/session-start-update-refresh.test.js.map +1 -0
- package/dist/__tests__/setup/clear-copilot-home.d.ts +2 -0
- package/dist/__tests__/setup/clear-copilot-home.d.ts.map +1 -0
- package/dist/__tests__/setup/clear-copilot-home.js +5 -0
- package/dist/__tests__/setup/clear-copilot-home.js.map +1 -0
- package/dist/__tests__/setup-claude-md-script.test.js +105 -21
- package/dist/__tests__/setup-claude-md-script.test.js.map +1 -1
- package/dist/__tests__/setup-contracts-regression.test.d.ts +2 -2
- package/dist/__tests__/setup-contracts-regression.test.js +49 -43
- package/dist/__tests__/setup-contracts-regression.test.js.map +1 -1
- package/dist/__tests__/setup-lifecycle-node.test.js +5 -5
- package/dist/__tests__/setup-lifecycle-node.test.js.map +1 -1
- package/dist/__tests__/setup-progress-script.test.js +3 -3
- package/dist/__tests__/setup-progress-script.test.js.map +1 -1
- package/dist/__tests__/shared-memory.test.js +8 -8
- package/dist/__tests__/shared-memory.test.js.map +1 -1
- package/dist/__tests__/shipyard-seed-locale.test.d.ts +2 -0
- package/dist/__tests__/shipyard-seed-locale.test.d.ts.map +1 -0
- package/dist/__tests__/shipyard-seed-locale.test.js +213 -0
- package/dist/__tests__/shipyard-seed-locale.test.js.map +1 -0
- package/dist/__tests__/shipyard-skills.test.d.ts +2 -0
- package/dist/__tests__/shipyard-skills.test.d.ts.map +1 -0
- package/dist/__tests__/shipyard-skills.test.js +797 -0
- package/dist/__tests__/shipyard-skills.test.js.map +1 -0
- package/dist/__tests__/skill-entitlements-cross-surface.test.js +4 -4
- package/dist/__tests__/skill-entitlements-cross-surface.test.js.map +1 -1
- package/dist/__tests__/skill-injector-script.test.js +3 -0
- package/dist/__tests__/skill-injector-script.test.js.map +1 -1
- package/dist/__tests__/skills-frontmatter-regression.test.js +65 -0
- package/dist/__tests__/skills-frontmatter-regression.test.js.map +1 -1
- package/dist/__tests__/skills.test.js +58 -20
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/__tests__/smoke-pipeline-edge.test.js +1 -0
- package/dist/__tests__/smoke-pipeline-edge.test.js.map +1 -1
- package/dist/__tests__/state-root-resolution.test.js +78 -2
- package/dist/__tests__/state-root-resolution.test.js.map +1 -1
- package/dist/__tests__/team-server-validation.test.js +7 -3
- package/dist/__tests__/team-server-validation.test.js.map +1 -1
- package/dist/__tests__/tier0-contracts.test.js +0 -4
- package/dist/__tests__/tier0-contracts.test.js.map +1 -1
- package/dist/__tests__/tier0-docs-consistency.test.js +6 -2
- package/dist/__tests__/tier0-docs-consistency.test.js.map +1 -1
- package/dist/__tests__/trusted-publishing-contract.test.js +16 -11
- package/dist/__tests__/trusted-publishing-contract.test.js.map +1 -1
- package/dist/__tests__/update-check-path.test.js +4 -4
- package/dist/__tests__/update-check-path.test.js.map +1 -1
- package/dist/__tests__/user-skill-compat.test.js +4 -4
- package/dist/__tests__/user-skill-compat.test.js.map +1 -1
- package/dist/__tests__/windows-prompt-hook-runner.test.js +63 -9
- package/dist/__tests__/windows-prompt-hook-runner.test.js.map +1 -1
- package/dist/__tests__/workflow-profile-activation-script.test.js +13 -7
- package/dist/__tests__/workflow-profile-activation-script.test.js.map +1 -1
- package/dist/alias-retirement/__tests__/registry.test.js +16 -3
- package/dist/alias-retirement/__tests__/registry.test.js.map +1 -1
- package/dist/cli/__tests__/ask.test.js +2 -1
- package/dist/cli/__tests__/ask.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js +34 -0
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-setup-session.test.js +21 -1
- package/dist/cli/__tests__/autoresearch-setup-session.test.js.map +1 -1
- package/dist/cli/__tests__/hud-watch.test.js +55 -2
- package/dist/cli/__tests__/hud-watch.test.js.map +1 -1
- package/dist/cli/__tests__/launch-secure-transport.test.d.ts +2 -0
- package/dist/cli/__tests__/launch-secure-transport.test.d.ts.map +1 -0
- package/dist/cli/__tests__/launch-secure-transport.test.js +58 -0
- package/dist/cli/__tests__/launch-secure-transport.test.js.map +1 -0
- package/dist/cli/__tests__/launch.test.js +767 -94
- package/dist/cli/__tests__/launch.test.js.map +1 -1
- package/dist/cli/__tests__/lookout-cli.test.d.ts +7 -0
- package/dist/cli/__tests__/lookout-cli.test.d.ts.map +1 -0
- package/dist/cli/__tests__/lookout-cli.test.js +118 -0
- package/dist/cli/__tests__/lookout-cli.test.js.map +1 -0
- package/dist/cli/__tests__/plugin-dir-capture.test.js +5 -4
- package/dist/cli/__tests__/plugin-dir-capture.test.js.map +1 -1
- package/dist/cli/__tests__/self-improve-paths.test.js +7 -4
- package/dist/cli/__tests__/self-improve-paths.test.js.map +1 -1
- package/dist/cli/__tests__/session-search.test.js +2 -2
- package/dist/cli/__tests__/session-search.test.js.map +1 -1
- package/dist/cli/__tests__/team-runtime-boundary.test.js +41 -0
- package/dist/cli/__tests__/team-runtime-boundary.test.js.map +1 -1
- package/dist/cli/__tests__/team-status-worktree.test.js +4 -0
- package/dist/cli/__tests__/team-status-worktree.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +633 -186
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/tmux-env-forward.integration.test.d.ts +3 -2
- package/dist/cli/__tests__/tmux-env-forward.integration.test.d.ts.map +1 -1
- package/dist/cli/__tests__/tmux-env-forward.integration.test.js +59 -17
- package/dist/cli/__tests__/tmux-env-forward.integration.test.js.map +1 -1
- package/dist/cli/__tests__/tmux-utils.test.js +140 -4
- package/dist/cli/__tests__/tmux-utils.test.js.map +1 -1
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +10 -4
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch-setup-session.d.ts.map +1 -1
- package/dist/cli/autoresearch-setup-session.js +4 -2
- package/dist/cli/autoresearch-setup-session.js.map +1 -1
- package/dist/cli/checkpoint.d.ts +16 -0
- package/dist/cli/checkpoint.d.ts.map +1 -0
- package/dist/cli/checkpoint.js +79 -0
- package/dist/cli/checkpoint.js.map +1 -0
- package/dist/cli/commands/__tests__/doctor-team-routing.test.js +12 -0
- package/dist/cli/commands/__tests__/doctor-team-routing.test.js.map +1 -1
- package/dist/cli/commands/__tests__/team-role-shorthand.test.js +145 -1
- package/dist/cli/commands/__tests__/team-role-shorthand.test.js.map +1 -1
- package/dist/cli/commands/__tests__/team.test.js +98 -2
- package/dist/cli/commands/__tests__/team.test.js.map +1 -1
- package/dist/cli/commands/doctor-conflicts.d.ts +7 -0
- package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -1
- package/dist/cli/commands/doctor-conflicts.js +86 -8
- package/dist/cli/commands/doctor-conflicts.js.map +1 -1
- package/dist/cli/commands/doctor-team-routing.d.ts.map +1 -1
- package/dist/cli/commands/doctor-team-routing.js +4 -3
- package/dist/cli/commands/doctor-team-routing.js.map +1 -1
- package/dist/cli/commands/team.d.ts +1 -1
- package/dist/cli/commands/team.d.ts.map +1 -1
- package/dist/cli/commands/team.js +201 -89
- package/dist/cli/commands/team.js.map +1 -1
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +127 -3
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/hud-watch.d.ts +3 -0
- package/dist/cli/hud-watch.d.ts.map +1 -1
- package/dist/cli/hud-watch.js +14 -0
- package/dist/cli/hud-watch.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +25 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/interop.d.ts.map +1 -1
- package/dist/cli/interop.js +3 -1
- package/dist/cli/interop.js.map +1 -1
- package/dist/cli/launch.d.ts +53 -6
- package/dist/cli/launch.d.ts.map +1 -1
- package/dist/cli/launch.js +446 -97
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/lookout.d.ts +19 -0
- package/dist/cli/lookout.d.ts.map +1 -0
- package/dist/cli/lookout.js +111 -0
- package/dist/cli/lookout.js.map +1 -0
- package/dist/cli/team.d.ts +2 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +469 -177
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/tmux-utils.d.ts +4 -2
- package/dist/cli/tmux-utils.d.ts.map +1 -1
- package/dist/cli/tmux-utils.js +55 -8
- package/dist/cli/tmux-utils.js.map +1 -1
- package/dist/config/__tests__/loader.test.js +39 -1
- package/dist/config/__tests__/loader.test.js.map +1 -1
- package/dist/config/loader.d.ts +6 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +75 -15
- package/dist/config/loader.js.map +1 -1
- package/dist/features/__tests__/checkpoint.test.d.ts +6 -0
- package/dist/features/__tests__/checkpoint.test.d.ts.map +1 -0
- package/dist/features/__tests__/checkpoint.test.js +113 -0
- package/dist/features/__tests__/checkpoint.test.js.map +1 -0
- package/dist/features/__tests__/jev-model-routing.test.d.ts +10 -0
- package/dist/features/__tests__/jev-model-routing.test.d.ts.map +1 -0
- package/dist/features/__tests__/jev-model-routing.test.js +170 -0
- package/dist/features/__tests__/jev-model-routing.test.js.map +1 -0
- package/dist/features/__tests__/jev-slop-warning.test.d.ts +2 -0
- package/dist/features/__tests__/jev-slop-warning.test.d.ts.map +1 -0
- package/dist/features/__tests__/jev-slop-warning.test.js +150 -0
- package/dist/features/__tests__/jev-slop-warning.test.js.map +1 -0
- package/dist/features/auto-update.d.ts +3 -1
- package/dist/features/auto-update.d.ts.map +1 -1
- package/dist/features/auto-update.js +9 -7
- package/dist/features/auto-update.js.map +1 -1
- package/dist/features/builtin-skills/skills.js +1 -1
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/features/checkpoint/index.d.ts +50 -0
- package/dist/features/checkpoint/index.d.ts.map +1 -0
- package/dist/features/checkpoint/index.js +170 -0
- package/dist/features/checkpoint/index.js.map +1 -0
- package/dist/features/delegation-enforcer.d.ts.map +1 -1
- package/dist/features/delegation-enforcer.js +5 -0
- package/dist/features/delegation-enforcer.js.map +1 -1
- package/dist/features/index.d.ts +2 -1
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +4 -1
- package/dist/features/index.js.map +1 -1
- package/dist/features/jev-model-routing.d.ts +28 -0
- package/dist/features/jev-model-routing.d.ts.map +1 -0
- package/dist/features/jev-model-routing.js +37 -0
- package/dist/features/jev-model-routing.js.map +1 -0
- package/dist/features/jev-slop-warning.d.ts +32 -0
- package/dist/features/jev-slop-warning.d.ts.map +1 -0
- package/dist/features/jev-slop-warning.js +33 -0
- package/dist/features/jev-slop-warning.js.map +1 -0
- package/dist/features/lookout/__tests__/lookout-workspace.test.d.ts +3 -0
- package/dist/features/lookout/__tests__/lookout-workspace.test.d.ts.map +1 -0
- package/dist/features/lookout/__tests__/lookout-workspace.test.js +203 -0
- package/dist/features/lookout/__tests__/lookout-workspace.test.js.map +1 -0
- package/dist/features/lookout/__tests__/lookout.test.d.ts +11 -0
- package/dist/features/lookout/__tests__/lookout.test.d.ts.map +1 -0
- package/dist/features/lookout/__tests__/lookout.test.js +769 -0
- package/dist/features/lookout/__tests__/lookout.test.js.map +1 -0
- package/dist/features/lookout/command-parser.d.ts +20 -0
- package/dist/features/lookout/command-parser.d.ts.map +1 -0
- package/dist/features/lookout/command-parser.js +815 -0
- package/dist/features/lookout/command-parser.js.map +1 -0
- package/dist/features/lookout/index.d.ts +54 -0
- package/dist/features/lookout/index.d.ts.map +1 -0
- package/dist/features/lookout/index.js +566 -0
- package/dist/features/lookout/index.js.map +1 -0
- package/dist/features/lookout/substitution-parser.d.ts +11 -0
- package/dist/features/lookout/substitution-parser.d.ts.map +1 -0
- package/dist/features/lookout/substitution-parser.js +157 -0
- package/dist/features/lookout/substitution-parser.js.map +1 -0
- package/dist/features/lookout/test-artifact-parser.d.ts +7 -0
- package/dist/features/lookout/test-artifact-parser.d.ts.map +1 -0
- package/dist/features/lookout/test-artifact-parser.js +106 -0
- package/dist/features/lookout/test-artifact-parser.js.map +1 -0
- package/dist/features/lookout/types.d.ts +33 -0
- package/dist/features/lookout/types.d.ts.map +1 -0
- package/dist/features/lookout/types.js +10 -0
- package/dist/features/lookout/types.js.map +1 -0
- package/dist/features/lookout/workspace.d.ts +7 -0
- package/dist/features/lookout/workspace.d.ts.map +1 -0
- package/dist/features/lookout/workspace.js +140 -0
- package/dist/features/lookout/workspace.js.map +1 -0
- package/dist/features/lookout/wrapper-parser.d.ts +4 -0
- package/dist/features/lookout/wrapper-parser.d.ts.map +1 -0
- package/dist/features/lookout/wrapper-parser.js +15 -0
- package/dist/features/lookout/wrapper-parser.js.map +1 -0
- package/dist/features/notepad-wisdom/__tests__/extractor.test.d.ts +2 -0
- package/dist/features/notepad-wisdom/__tests__/extractor.test.d.ts.map +1 -0
- package/dist/features/notepad-wisdom/__tests__/extractor.test.js +17 -0
- package/dist/features/notepad-wisdom/__tests__/extractor.test.js.map +1 -0
- package/dist/features/notepad-wisdom/extractor.js +1 -1
- package/dist/features/notepad-wisdom/extractor.js.map +1 -1
- package/dist/features/rate-limit-wait/daemon.js +1 -1
- package/dist/features/rate-limit-wait/daemon.js.map +1 -1
- package/dist/features/session-history-search/index.d.ts +8 -2
- package/dist/features/session-history-search/index.d.ts.map +1 -1
- package/dist/features/session-history-search/index.js +86 -25
- package/dist/features/session-history-search/index.js.map +1 -1
- package/dist/graph/__tests__/runtime/cli.test.js +7 -8
- package/dist/graph/__tests__/runtime/cli.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/e2e-crash-recovery.test.js +3 -3
- package/dist/graph/__tests__/runtime/e2e-crash-recovery.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/fence.test.js +4 -4
- package/dist/graph/__tests__/runtime/fence.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/journal-epoch.test.js +2 -2
- package/dist/graph/__tests__/runtime/journal-epoch.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/journal.test.js +2 -2
- package/dist/graph/__tests__/runtime/journal.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/native-contained-fs.test.d.ts +2 -0
- package/dist/graph/__tests__/runtime/native-contained-fs.test.d.ts.map +1 -0
- package/dist/graph/__tests__/runtime/native-contained-fs.test.js +117 -0
- package/dist/graph/__tests__/runtime/native-contained-fs.test.js.map +1 -0
- package/dist/graph/__tests__/runtime/regression-matrix.test.js +2 -2
- package/dist/graph/__tests__/runtime/regression-matrix.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/remote-approval.test.d.ts +6 -0
- package/dist/graph/__tests__/runtime/remote-approval.test.d.ts.map +1 -0
- package/dist/graph/__tests__/runtime/remote-approval.test.js +298 -0
- package/dist/graph/__tests__/runtime/remote-approval.test.js.map +1 -0
- package/dist/graph/__tests__/runtime/run-dir.test.js +13 -7
- package/dist/graph/__tests__/runtime/run-dir.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/runner.test.js +2 -2
- package/dist/graph/__tests__/runtime/runner.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/safe-fs.test.js +156 -29
- package/dist/graph/__tests__/runtime/safe-fs.test.js.map +1 -1
- package/dist/graph/__tests__/runtime/store.test.js +2 -2
- package/dist/graph/__tests__/runtime/store.test.js.map +1 -1
- package/dist/graph/runtime/contained-fd.d.ts +28 -0
- package/dist/graph/runtime/contained-fd.d.ts.map +1 -0
- package/dist/graph/runtime/contained-fd.js +72 -0
- package/dist/graph/runtime/contained-fd.js.map +1 -0
- package/dist/graph/runtime/executors/command.d.ts.map +1 -1
- package/dist/graph/runtime/executors/command.js +1 -2
- package/dist/graph/runtime/executors/command.js.map +1 -1
- package/dist/graph/runtime/fence.d.ts +0 -1
- package/dist/graph/runtime/fence.d.ts.map +1 -1
- package/dist/graph/runtime/fence.js +59 -64
- package/dist/graph/runtime/fence.js.map +1 -1
- package/dist/graph/runtime/journal.d.ts.map +1 -1
- package/dist/graph/runtime/journal.js +4 -3
- package/dist/graph/runtime/journal.js.map +1 -1
- package/dist/graph/runtime/native-contained-fs.d.ts +26 -0
- package/dist/graph/runtime/native-contained-fs.d.ts.map +1 -0
- package/dist/graph/runtime/native-contained-fs.js +32 -0
- package/dist/graph/runtime/native-contained-fs.js.map +1 -0
- package/dist/graph/runtime/remote-approval.d.ts +97 -0
- package/dist/graph/runtime/remote-approval.d.ts.map +1 -0
- package/dist/graph/runtime/remote-approval.js +271 -0
- package/dist/graph/runtime/remote-approval.js.map +1 -0
- package/dist/graph/runtime/run-dir.d.ts +13 -1
- package/dist/graph/runtime/run-dir.d.ts.map +1 -1
- package/dist/graph/runtime/run-dir.js +41 -15
- package/dist/graph/runtime/run-dir.js.map +1 -1
- package/dist/graph/runtime/runner.js +3 -3
- package/dist/graph/runtime/runner.js.map +1 -1
- package/dist/graph/runtime/safe-fs.d.ts +31 -1
- package/dist/graph/runtime/safe-fs.d.ts.map +1 -1
- package/dist/graph/runtime/safe-fs.js +173 -9
- package/dist/graph/runtime/safe-fs.js.map +1 -1
- package/dist/graph/runtime/store.js +3 -3
- package/dist/graph/runtime/store.js.map +1 -1
- package/dist/graph/schema.d.ts +36 -36
- package/dist/hooks/__tests__/background-process-guard.test.js +1 -1
- package/dist/hooks/__tests__/background-process-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/pre-tool-use-template-source-ext.test.js +494 -11
- package/dist/hooks/__tests__/pre-tool-use-template-source-ext.test.js.map +1 -1
- package/dist/hooks/__tests__/workflow-drift-guard-script.test.js +1 -1
- package/dist/hooks/__tests__/workflow-drift-guard-script.test.js.map +1 -1
- package/dist/hooks/auto-slash-command/executor.js +4 -4
- package/dist/hooks/auto-slash-command/executor.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/cancel.test.js +23 -3
- package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/pipeline.test.js +14 -0
- package/dist/hooks/autopilot/__tests__/pipeline.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/workflow-integrity.test.js +3 -3
- package/dist/hooks/autopilot/__tests__/workflow-integrity.test.js.map +1 -1
- package/dist/hooks/autopilot/adapters/execution-adapter.js +1 -1
- package/dist/hooks/autopilot/adapters/execution-adapter.js.map +1 -1
- package/dist/hooks/autopilot/cancel.js +1 -1
- package/dist/hooks/autopilot/cancel.js.map +1 -1
- package/dist/hooks/autopilot/named-workflow-resume-validator.d.ts +1 -1
- package/dist/hooks/autopilot/named-workflow-resume-validator.js +1 -1
- package/dist/hooks/autopilot/pipeline-types.d.ts +1 -1
- package/dist/hooks/autopilot/pipeline-types.d.ts.map +1 -1
- package/dist/hooks/autopilot/pipeline-types.js.map +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +28 -5
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/code-simplifier/__tests__/jev-trigger-shadow.test.d.ts +2 -0
- package/dist/hooks/code-simplifier/__tests__/jev-trigger-shadow.test.d.ts.map +1 -0
- package/dist/hooks/code-simplifier/__tests__/jev-trigger-shadow.test.js +181 -0
- package/dist/hooks/code-simplifier/__tests__/jev-trigger-shadow.test.js.map +1 -0
- package/dist/hooks/code-simplifier/index.d.ts.map +1 -1
- package/dist/hooks/code-simplifier/index.js +10 -0
- package/dist/hooks/code-simplifier/index.js.map +1 -1
- package/dist/hooks/code-simplifier/jev-shadow.d.ts +38 -0
- package/dist/hooks/code-simplifier/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/code-simplifier/jev-shadow.js +45 -0
- package/dist/hooks/code-simplifier/jev-shadow.js.map +1 -0
- package/dist/hooks/factcheck/__tests__/config-tokens.test.d.ts +2 -0
- package/dist/hooks/factcheck/__tests__/config-tokens.test.d.ts.map +1 -0
- package/dist/hooks/factcheck/__tests__/config-tokens.test.js +13 -0
- package/dist/hooks/factcheck/__tests__/config-tokens.test.js.map +1 -0
- package/dist/hooks/factcheck/config.d.ts +3 -2
- package/dist/hooks/factcheck/config.d.ts.map +1 -1
- package/dist/hooks/factcheck/config.js +5 -4
- package/dist/hooks/factcheck/config.js.map +1 -1
- package/dist/hooks/jev/__tests__/client.test.d.ts +2 -0
- package/dist/hooks/jev/__tests__/client.test.d.ts.map +1 -0
- package/dist/hooks/jev/__tests__/client.test.js +114 -0
- package/dist/hooks/jev/__tests__/client.test.js.map +1 -0
- package/dist/hooks/jev/__tests__/points-wire-shape.test.d.ts +2 -0
- package/dist/hooks/jev/__tests__/points-wire-shape.test.d.ts.map +1 -0
- package/dist/hooks/jev/__tests__/points-wire-shape.test.js +72 -0
- package/dist/hooks/jev/__tests__/points-wire-shape.test.js.map +1 -0
- package/dist/hooks/jev/__tests__/resolver.test.d.ts +2 -0
- package/dist/hooks/jev/__tests__/resolver.test.d.ts.map +1 -0
- package/dist/hooks/jev/__tests__/resolver.test.js +340 -0
- package/dist/hooks/jev/__tests__/resolver.test.js.map +1 -0
- package/dist/hooks/jev/client.d.ts +39 -0
- package/dist/hooks/jev/client.d.ts.map +1 -0
- package/dist/hooks/jev/client.js +91 -0
- package/dist/hooks/jev/client.js.map +1 -0
- package/dist/hooks/jev/config.d.ts +66 -0
- package/dist/hooks/jev/config.d.ts.map +1 -0
- package/dist/hooks/jev/config.js +124 -0
- package/dist/hooks/jev/config.js.map +1 -0
- package/dist/hooks/jev/index.d.ts +12 -0
- package/dist/hooks/jev/index.d.ts.map +1 -0
- package/dist/hooks/jev/index.js +12 -0
- package/dist/hooks/jev/index.js.map +1 -0
- package/dist/hooks/jev/points.d.ts +55 -0
- package/dist/hooks/jev/points.d.ts.map +1 -0
- package/dist/hooks/jev/points.js +230 -0
- package/dist/hooks/jev/points.js.map +1 -0
- package/dist/hooks/jev/resolver.d.ts +47 -0
- package/dist/hooks/jev/resolver.d.ts.map +1 -0
- package/dist/hooks/jev/resolver.js +162 -0
- package/dist/hooks/jev/resolver.js.map +1 -0
- package/dist/hooks/jev/types.d.ts +58 -0
- package/dist/hooks/jev/types.d.ts.map +1 -0
- package/dist/hooks/jev/types.js +8 -0
- package/dist/hooks/jev/types.js.map +1 -0
- package/dist/hooks/keyword-detector/__tests__/jev-shadow.test.d.ts +2 -0
- package/dist/hooks/keyword-detector/__tests__/jev-shadow.test.d.ts.map +1 -0
- package/dist/hooks/keyword-detector/__tests__/jev-shadow.test.js +131 -0
- package/dist/hooks/keyword-detector/__tests__/jev-shadow.test.js.map +1 -0
- package/dist/hooks/keyword-detector/index.d.ts +6 -0
- package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
- package/dist/hooks/keyword-detector/index.js +4 -2
- package/dist/hooks/keyword-detector/index.js.map +1 -1
- package/dist/hooks/keyword-detector/jev-shadow.d.ts +27 -0
- package/dist/hooks/keyword-detector/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/keyword-detector/jev-shadow.js +47 -0
- package/dist/hooks/keyword-detector/jev-shadow.js.map +1 -0
- package/dist/hooks/learner/__tests__/jev-extraction-shadow.test.d.ts +2 -0
- package/dist/hooks/learner/__tests__/jev-extraction-shadow.test.d.ts.map +1 -0
- package/dist/hooks/learner/__tests__/jev-extraction-shadow.test.js +150 -0
- package/dist/hooks/learner/__tests__/jev-extraction-shadow.test.js.map +1 -0
- package/dist/hooks/learner/detection-hook.d.ts.map +1 -1
- package/dist/hooks/learner/detection-hook.js +5 -0
- package/dist/hooks/learner/detection-hook.js.map +1 -1
- package/dist/hooks/learner/jev-shadow.d.ts +22 -0
- package/dist/hooks/learner/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/learner/jev-shadow.js +32 -0
- package/dist/hooks/learner/jev-shadow.js.map +1 -0
- package/dist/hooks/mode-registry/__tests__/session-isolation.test.js +4 -2
- package/dist/hooks/mode-registry/__tests__/session-isolation.test.js.map +1 -1
- package/dist/hooks/mode-registry/index.js +8 -8
- 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 +9 -2
- package/dist/hooks/notepad/index.js.map +1 -1
- package/dist/hooks/omc-orchestrator/constants.d.ts +1 -1
- package/dist/hooks/omc-orchestrator/constants.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/constants.js +1 -1
- package/dist/hooks/omc-orchestrator/index.d.ts +1 -0
- package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/index.js +133 -15
- package/dist/hooks/omc-orchestrator/index.js.map +1 -1
- package/dist/hooks/permission-handler/__tests__/index.test.js +83 -1
- package/dist/hooks/permission-handler/__tests__/index.test.js.map +1 -1
- package/dist/hooks/permission-handler/index.d.ts.map +1 -1
- package/dist/hooks/permission-handler/index.js +47 -22
- package/dist/hooks/permission-handler/index.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js +29 -1
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/jev-loop-continuation-shadow.test.d.ts +2 -0
- package/dist/hooks/persistent-mode/__tests__/jev-loop-continuation-shadow.test.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/__tests__/jev-loop-continuation-shadow.test.js +131 -0
- package/dist/hooks/persistent-mode/__tests__/jev-loop-continuation-shadow.test.js.map +1 -0
- package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js +4 -4
- package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/tool-error.test.js +4 -2
- package/dist/hooks/persistent-mode/__tests__/tool-error.test.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/ultragoal-persistence.test.js +2 -2
- package/dist/hooks/persistent-mode/__tests__/ultragoal-persistence.test.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +35 -2
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/persistent-mode/jev-shadow.d.ts +33 -0
- package/dist/hooks/persistent-mode/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/jev-shadow.js +63 -0
- package/dist/hooks/persistent-mode/jev-shadow.js.map +1 -0
- package/dist/hooks/persistent-mode/session-isolation.test.js +2 -1
- package/dist/hooks/persistent-mode/session-isolation.test.js.map +1 -1
- package/dist/hooks/pre-compact/restore.d.ts.map +1 -1
- package/dist/hooks/pre-compact/restore.js.map +1 -1
- package/dist/hooks/preemptive-compaction/__tests__/jev-shadow.test.d.ts +2 -0
- package/dist/hooks/preemptive-compaction/__tests__/jev-shadow.test.d.ts.map +1 -0
- package/dist/hooks/preemptive-compaction/__tests__/jev-shadow.test.js +179 -0
- package/dist/hooks/preemptive-compaction/__tests__/jev-shadow.test.js.map +1 -0
- package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
- package/dist/hooks/preemptive-compaction/index.js +26 -0
- package/dist/hooks/preemptive-compaction/index.js.map +1 -1
- package/dist/hooks/preemptive-compaction/jev-shadow.d.ts +42 -0
- package/dist/hooks/preemptive-compaction/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/preemptive-compaction/jev-shadow.js +39 -0
- package/dist/hooks/preemptive-compaction/jev-shadow.js.map +1 -0
- package/dist/hooks/preemptive-compaction/types.d.ts +2 -0
- package/dist/hooks/preemptive-compaction/types.d.ts.map +1 -1
- package/dist/hooks/ralph/__tests__/jev-verdict-shadow.test.d.ts +2 -0
- package/dist/hooks/ralph/__tests__/jev-verdict-shadow.test.d.ts.map +1 -0
- package/dist/hooks/ralph/__tests__/jev-verdict-shadow.test.js +144 -0
- package/dist/hooks/ralph/__tests__/jev-verdict-shadow.test.js.map +1 -0
- package/dist/hooks/ralph/jev-shadow.d.ts +35 -0
- package/dist/hooks/ralph/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/ralph/jev-shadow.js +37 -0
- package/dist/hooks/ralph/jev-shadow.js.map +1 -0
- package/dist/hooks/ralph/loop.d.ts.map +1 -1
- package/dist/hooks/ralph/loop.js.map +1 -1
- package/dist/hooks/rules-injector/finder.d.ts +2 -2
- package/dist/hooks/rules-injector/finder.js +2 -2
- package/dist/hooks/rules-injector/finder.test.d.ts +1 -1
- package/dist/hooks/rules-injector/finder.test.js +6 -6
- package/dist/hooks/rules-injector/finder.test.js.map +1 -1
- package/dist/hooks/rules-injector/index.d.ts +1 -1
- package/dist/hooks/rules-injector/index.js +1 -1
- package/dist/hooks/self-improve/__tests__/session-isolation.test.js +4 -4
- package/dist/hooks/self-improve/__tests__/session-isolation.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/action-runner.test.js +1 -1
- package/dist/hooks/session-end/__tests__/action-runner.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/cleanup-manifest.test.js +44 -3
- package/dist/hooks/session-end/__tests__/cleanup-manifest.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js +4 -0
- package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js +1 -0
- package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/session-end-bridge-cleanup.test.js +2 -0
- package/dist/hooks/session-end/__tests__/session-end-bridge-cleanup.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/session-end-timeout.test.js +13 -3
- package/dist/hooks/session-end/__tests__/session-end-timeout.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/team-cleanup.test.js +186 -33
- package/dist/hooks/session-end/__tests__/team-cleanup.test.js.map +1 -1
- package/dist/hooks/session-end/__tests__/worker.test.js +9 -0
- package/dist/hooks/session-end/__tests__/worker.test.js.map +1 -1
- package/dist/hooks/session-end/action-runner.js +9 -3
- package/dist/hooks/session-end/action-runner.js.map +1 -1
- package/dist/hooks/session-end/cleanup-manifest.d.ts +23 -1
- package/dist/hooks/session-end/cleanup-manifest.d.ts.map +1 -1
- package/dist/hooks/session-end/cleanup-manifest.js +21 -4
- package/dist/hooks/session-end/cleanup-manifest.js.map +1 -1
- package/dist/hooks/session-end/foreground-bootstrap.d.ts +22 -0
- package/dist/hooks/session-end/foreground-bootstrap.d.ts.map +1 -0
- package/dist/hooks/session-end/foreground-bootstrap.js +23 -0
- package/dist/hooks/session-end/foreground-bootstrap.js.map +1 -0
- package/dist/hooks/session-end/index.d.ts +2 -0
- package/dist/hooks/session-end/index.d.ts.map +1 -1
- package/dist/hooks/session-end/index.js +116 -59
- package/dist/hooks/session-end/index.js.map +1 -1
- package/dist/hooks/session-end/worker.d.ts +2 -2
- package/dist/hooks/session-end/worker.d.ts.map +1 -1
- package/dist/hooks/session-end/worker.js +50 -17
- package/dist/hooks/session-end/worker.js.map +1 -1
- package/dist/hooks/setup/__tests__/stdin-symlink.test.js +7 -7
- package/dist/hooks/setup/__tests__/stdin-symlink.test.js.map +1 -1
- package/dist/hooks/setup/__tests__/windows-patch.test.js +12 -12
- package/dist/hooks/setup/__tests__/windows-patch.test.js.map +1 -1
- package/dist/hooks/setup/index.d.ts +7 -3
- package/dist/hooks/setup/index.d.ts.map +1 -1
- package/dist/hooks/setup/index.js +14 -7
- package/dist/hooks/setup/index.js.map +1 -1
- package/dist/hooks/skill-bridge.cjs +372 -21
- package/dist/hooks/subagent-tracker/__tests__/flow-tracer.test.js +8 -0
- package/dist/hooks/subagent-tracker/__tests__/flow-tracer.test.js.map +1 -1
- package/dist/hooks/subagent-tracker/__tests__/index.test.js +6 -0
- package/dist/hooks/subagent-tracker/__tests__/index.test.js.map +1 -1
- package/dist/hooks/subagent-tracker/__tests__/session-replay.test.js +8 -0
- package/dist/hooks/subagent-tracker/__tests__/session-replay.test.js.map +1 -1
- package/dist/hooks/subagent-tracker/__tests__/worktree-evidence.test.js +4 -4
- package/dist/hooks/subagent-tracker/__tests__/worktree-evidence.test.js.map +1 -1
- package/dist/hooks/task-size-detector/__tests__/jev-shadow.test.d.ts +2 -0
- package/dist/hooks/task-size-detector/__tests__/jev-shadow.test.d.ts.map +1 -0
- package/dist/hooks/task-size-detector/__tests__/jev-shadow.test.js +120 -0
- package/dist/hooks/task-size-detector/__tests__/jev-shadow.test.js.map +1 -0
- package/dist/hooks/task-size-detector/jev-shadow.d.ts +26 -0
- package/dist/hooks/task-size-detector/jev-shadow.d.ts.map +1 -0
- package/dist/hooks/task-size-detector/jev-shadow.js +32 -0
- package/dist/hooks/task-size-detector/jev-shadow.js.map +1 -0
- package/dist/hooks/team-dispatch-hook.d.ts.map +1 -1
- package/dist/hooks/team-dispatch-hook.js +0 -7
- package/dist/hooks/team-dispatch-hook.js.map +1 -1
- package/dist/hooks/todo-continuation/index.d.ts +2 -1
- package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
- package/dist/hooks/todo-continuation/index.js +3 -2
- package/dist/hooks/todo-continuation/index.js.map +1 -1
- package/dist/hooks/wiki/__tests__/session-hooks.test.js +9 -9
- package/dist/hooks/wiki/__tests__/session-hooks.test.js.map +1 -1
- package/dist/hud/elements/model.d.ts.map +1 -1
- package/dist/hud/elements/model.js +4 -2
- package/dist/hud/elements/model.js.map +1 -1
- package/dist/hud/elements/update-hint.d.ts +22 -0
- package/dist/hud/elements/update-hint.d.ts.map +1 -0
- package/dist/hud/elements/update-hint.js +29 -0
- package/dist/hud/elements/update-hint.js.map +1 -0
- package/dist/hud/index.d.ts +0 -4
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +47 -8
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +17 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/types.d.ts +7 -1
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +3 -3
- package/dist/hud/types.js.map +1 -1
- package/dist/hud/usage-api.d.ts +8 -0
- package/dist/hud/usage-api.d.ts.map +1 -1
- package/dist/hud/usage-api.js +182 -20
- package/dist/hud/usage-api.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/installer/__tests__/bundled-skill-sync.test.d.ts +2 -0
- package/dist/installer/__tests__/bundled-skill-sync.test.d.ts.map +1 -0
- package/dist/installer/__tests__/bundled-skill-sync.test.js +119 -0
- package/dist/installer/__tests__/bundled-skill-sync.test.js.map +1 -0
- package/dist/installer/__tests__/claude-md-target-resolution.test.js +4 -4
- package/dist/installer/__tests__/claude-md-target-resolution.test.js.map +1 -1
- package/dist/installer/__tests__/claude-md-transaction.test.js +16 -13
- package/dist/installer/__tests__/claude-md-transaction.test.js.map +1 -1
- package/dist/installer/__tests__/has-enabled-omc-plugin.test.js +1 -1
- package/dist/installer/__tests__/has-enabled-omc-plugin.test.js.map +1 -1
- package/dist/installer/__tests__/hook-command-portability.test.d.ts +1 -1
- package/dist/installer/__tests__/hook-command-portability.test.js +14 -14
- package/dist/installer/__tests__/hook-command-portability.test.js.map +1 -1
- package/dist/installer/__tests__/hook-templates.test.js +133 -25
- package/dist/installer/__tests__/hook-templates.test.js.map +1 -1
- package/dist/installer/__tests__/hud-cache-wrapper.test.js +33 -8
- package/dist/installer/__tests__/hud-cache-wrapper.test.js.map +1 -1
- package/dist/installer/__tests__/hud-wrapper-env.test.js +9 -9
- package/dist/installer/__tests__/hud-wrapper-env.test.js.map +1 -1
- package/dist/installer/__tests__/mcp-registry.test.js +1 -1
- package/dist/installer/__tests__/mcp-registry.test.js.map +1 -1
- package/dist/installer/__tests__/plugin-cache-sync.test.js +13 -13
- package/dist/installer/__tests__/plugin-cache-sync.test.js.map +1 -1
- package/dist/installer/__tests__/plugin-dir-mode-e2e.test.d.ts +1 -1
- package/dist/installer/__tests__/plugin-dir-mode-e2e.test.js +3 -3
- package/dist/installer/__tests__/plugin-dir-mode-e2e.test.js.map +1 -1
- package/dist/installer/__tests__/plugin-dir-mode.test.d.ts +1 -1
- package/dist/installer/__tests__/plugin-dir-mode.test.js +2 -2
- package/dist/installer/__tests__/plugin-dir-mode.test.js.map +1 -1
- package/dist/installer/__tests__/safe-installer.test.js +5 -5
- package/dist/installer/__tests__/safe-installer.test.js.map +1 -1
- package/dist/installer/__tests__/settings-race.test.js +1 -1
- package/dist/installer/__tests__/settings-race.test.js.map +1 -1
- package/dist/installer/__tests__/stale-cleanup.test.js +16 -16
- package/dist/installer/__tests__/stale-cleanup.test.js.map +1 -1
- package/dist/installer/__tests__/standalone-hook-reconcile.test.js +40 -12
- package/dist/installer/__tests__/standalone-hook-reconcile.test.js.map +1 -1
- package/dist/installer/__tests__/standalone-state-lock-bridge.test.d.ts +2 -0
- package/dist/installer/__tests__/standalone-state-lock-bridge.test.d.ts.map +1 -0
- package/dist/installer/__tests__/standalone-state-lock-bridge.test.js +105 -0
- package/dist/installer/__tests__/standalone-state-lock-bridge.test.js.map +1 -0
- package/dist/installer/__tests__/user-skill-compat.test.js +4 -4
- package/dist/installer/__tests__/user-skill-compat.test.js.map +1 -1
- package/dist/installer/hooks.js +1 -1
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts +3 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +150 -29
- package/dist/installer/index.js.map +1 -1
- package/dist/lib/__tests__/atomic-write.test.js +75 -86
- package/dist/lib/__tests__/atomic-write.test.js.map +1 -1
- package/dist/lib/__tests__/mode-state-io.test.js +65 -47
- package/dist/lib/__tests__/mode-state-io.test.js.map +1 -1
- package/dist/lib/__tests__/mode-state-lock.test.d.ts +2 -0
- package/dist/lib/__tests__/mode-state-lock.test.d.ts.map +1 -0
- package/dist/lib/__tests__/mode-state-lock.test.js +242 -0
- package/dist/lib/__tests__/mode-state-lock.test.js.map +1 -0
- package/dist/lib/__tests__/sync-publication-short-write.test.js +36 -5
- package/dist/lib/__tests__/sync-publication-short-write.test.js.map +1 -1
- package/dist/lib/__tests__/worktree-paths-bare-container.test.d.ts +2 -0
- package/dist/lib/__tests__/worktree-paths-bare-container.test.d.ts.map +1 -0
- package/dist/lib/__tests__/worktree-paths-bare-container.test.js +99 -0
- package/dist/lib/__tests__/worktree-paths-bare-container.test.js.map +1 -0
- package/dist/lib/__tests__/worktree-paths-foreign-root.test.js +5 -5
- package/dist/lib/__tests__/worktree-paths-foreign-root.test.js.map +1 -1
- package/dist/lib/__tests__/worktree-paths-git-probe-failclosed.test.js +3 -3
- package/dist/lib/__tests__/worktree-paths-git-probe-failclosed.test.js.map +1 -1
- package/dist/lib/__tests__/worktree-paths-git-probe-locale.test.d.ts +2 -0
- package/dist/lib/__tests__/worktree-paths-git-probe-locale.test.d.ts.map +1 -0
- package/dist/lib/__tests__/worktree-paths-git-probe-locale.test.js +66 -0
- package/dist/lib/__tests__/worktree-paths-git-probe-locale.test.js.map +1 -0
- package/dist/lib/__tests__/worktree-paths-git-timeout.test.d.ts +2 -0
- package/dist/lib/__tests__/worktree-paths-git-timeout.test.d.ts.map +1 -0
- package/dist/lib/__tests__/worktree-paths-git-timeout.test.js +118 -0
- package/dist/lib/__tests__/worktree-paths-git-timeout.test.js.map +1 -0
- package/dist/lib/__tests__/worktree-paths-nongit-anchor.test.js +11 -9
- package/dist/lib/__tests__/worktree-paths-nongit-anchor.test.js.map +1 -1
- package/dist/lib/__tests__/worktree-paths-split-warning.test.d.ts +2 -0
- package/dist/lib/__tests__/worktree-paths-split-warning.test.d.ts.map +1 -0
- package/dist/lib/__tests__/worktree-paths-split-warning.test.js +247 -0
- package/dist/lib/__tests__/worktree-paths-split-warning.test.js.map +1 -0
- package/dist/lib/__tests__/worktree-paths-toplevel-cache.test.d.ts +2 -0
- package/dist/lib/__tests__/worktree-paths-toplevel-cache.test.d.ts.map +1 -0
- package/dist/lib/__tests__/worktree-paths-toplevel-cache.test.js +457 -0
- package/dist/lib/__tests__/worktree-paths-toplevel-cache.test.js.map +1 -0
- package/dist/lib/atomic-write.d.ts +12 -2
- package/dist/lib/atomic-write.d.ts.map +1 -1
- package/dist/lib/atomic-write.js +45 -35
- package/dist/lib/atomic-write.js.map +1 -1
- package/dist/lib/mode-state-io.d.ts +8 -1
- package/dist/lib/mode-state-io.d.ts.map +1 -1
- package/dist/lib/mode-state-io.js +926 -448
- package/dist/lib/mode-state-io.js.map +1 -1
- package/dist/lib/shared-memory.d.ts +1 -1
- package/dist/lib/shared-memory.js +1 -1
- package/dist/lib/worktree-paths.d.ts +23 -7
- package/dist/lib/worktree-paths.d.ts.map +1 -1
- package/dist/lib/worktree-paths.js +487 -31
- package/dist/lib/worktree-paths.js.map +1 -1
- package/dist/mcp/__tests__/team-cleanup.test.d.ts +1 -1
- package/dist/mcp/__tests__/team-cleanup.test.js +211 -110
- package/dist/mcp/__tests__/team-cleanup.test.js.map +1 -1
- package/dist/mcp/__tests__/team-server-artifact-convergence.test.js +1155 -41
- package/dist/mcp/__tests__/team-server-artifact-convergence.test.js.map +1 -1
- package/dist/mcp/team-job-convergence.d.ts +20 -6
- package/dist/mcp/team-job-convergence.d.ts.map +1 -1
- package/dist/mcp/team-job-convergence.js +150 -49
- package/dist/mcp/team-job-convergence.js.map +1 -1
- package/dist/mcp/team-server.d.ts +6 -4
- package/dist/mcp/team-server.d.ts.map +1 -1
- package/dist/mcp/team-server.js +629 -207
- package/dist/mcp/team-server.js.map +1 -1
- package/dist/notifications/__tests__/approval-reply.test.d.ts +6 -0
- package/dist/notifications/__tests__/approval-reply.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/approval-reply.test.js +71 -0
- package/dist/notifications/__tests__/approval-reply.test.js.map +1 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +3 -0
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/formatter.d.ts +5 -0
- package/dist/notifications/formatter.d.ts.map +1 -1
- package/dist/notifications/formatter.js +21 -0
- package/dist/notifications/formatter.js.map +1 -1
- package/dist/notifications/hook-config-types.d.ts +1 -0
- package/dist/notifications/hook-config-types.d.ts.map +1 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +7 -2
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts +12 -0
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +135 -0
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts +6 -0
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/template-engine.d.ts.map +1 -1
- package/dist/notifications/template-engine.js +3 -0
- package/dist/notifications/template-engine.js.map +1 -1
- package/dist/notifications/types.d.ts +11 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/platform/__tests__/process-utils-identity.test.js +24 -2
- package/dist/platform/__tests__/process-utils-identity.test.js.map +1 -1
- package/dist/platform/executable-resolution.d.ts.map +1 -1
- package/dist/platform/executable-resolution.js +17 -2
- package/dist/platform/executable-resolution.js.map +1 -1
- package/dist/platform/process-utils.js +1 -1
- package/dist/platform/process-utils.js.map +1 -1
- package/dist/shared/types.d.ts +7 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/skills/__tests__/mingw-escape.test.js +1 -1
- package/dist/skills/__tests__/mingw-escape.test.js.map +1 -1
- package/dist/skills/__tests__/omc-doctor-skill.test.js +9 -7
- package/dist/skills/__tests__/omc-doctor-skill.test.js.map +1 -1
- package/dist/skills/__tests__/skill-config-dir.test.d.ts +2 -2
- package/dist/skills/__tests__/skill-config-dir.test.js +17 -17
- package/dist/skills/__tests__/skill-config-dir.test.js.map +1 -1
- package/dist/team/__tests__/api-interop.cleanup.test.js +137 -23
- package/dist/team/__tests__/api-interop.cleanup.test.js.map +1 -1
- package/dist/team/__tests__/api-interop.cwd-resolution.test.js +89 -45
- package/dist/team/__tests__/api-interop.cwd-resolution.test.js.map +1 -1
- package/dist/team/__tests__/api-interop.dispatch.test.js +56 -12
- package/dist/team/__tests__/api-interop.dispatch.test.js.map +1 -1
- package/dist/team/__tests__/auto-cleanup.test.js +4 -4
- package/dist/team/__tests__/auto-cleanup.test.js.map +1 -1
- package/dist/team/__tests__/auto-merge.perf.test.js +2 -4
- package/dist/team/__tests__/auto-merge.perf.test.js.map +1 -1
- package/dist/team/__tests__/behavior-snapshot.test.js +8 -1
- package/dist/team/__tests__/behavior-snapshot.test.js.map +1 -1
- package/dist/team/__tests__/bridge-entry.guardrails.test.js +1 -1
- package/dist/team/__tests__/bridge-entry.guardrails.test.js.map +1 -1
- package/dist/team/__tests__/bridge-entry.test.js +1 -1
- package/dist/team/__tests__/bridge-entry.test.js.map +1 -1
- package/dist/team/__tests__/bridge-integration.test.js +4 -4
- package/dist/team/__tests__/bridge-integration.test.js.map +1 -1
- package/dist/team/__tests__/cli-detection.test.js +39 -0
- package/dist/team/__tests__/cli-detection.test.js.map +1 -1
- package/dist/team/__tests__/critic-cli-worker.integration.test.js +16 -3
- package/dist/team/__tests__/critic-cli-worker.integration.test.js.map +1 -1
- package/dist/team/__tests__/governance-enforcement.test.js +42 -2
- package/dist/team/__tests__/governance-enforcement.test.js.map +1 -1
- package/dist/team/__tests__/idle-nudge.test.d.ts +1 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -1
- package/dist/team/__tests__/idle-nudge.test.js +124 -27
- package/dist/team/__tests__/idle-nudge.test.js.map +1 -1
- package/dist/team/__tests__/mailbox-notification-guard.test.js +219 -6
- package/dist/team/__tests__/mailbox-notification-guard.test.js.map +1 -1
- package/dist/team/__tests__/mcp-comm.mailbox-notification.test.js +49 -3
- package/dist/team/__tests__/mcp-comm.mailbox-notification.test.js.map +1 -1
- package/dist/team/__tests__/merge-orchestrator.test.js +22 -15
- package/dist/team/__tests__/merge-orchestrator.test.js.map +1 -1
- package/dist/team/__tests__/message-router.test.js +4 -4
- package/dist/team/__tests__/message-router.test.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +141 -13
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/psmux-adapter.test.d.ts +2 -0
- package/dist/team/__tests__/psmux-adapter.test.d.ts.map +1 -0
- package/dist/team/__tests__/psmux-adapter.test.js +188 -0
- package/dist/team/__tests__/psmux-adapter.test.js.map +1 -0
- package/dist/team/__tests__/recovery-finalization-concurrency.test.js +69 -5
- package/dist/team/__tests__/recovery-finalization-concurrency.test.js.map +1 -1
- package/dist/team/__tests__/recovery-owner-finalization.test.js +2 -0
- package/dist/team/__tests__/recovery-owner-finalization.test.js.map +1 -1
- package/dist/team/__tests__/recovery-pane-rollback.test.js +450 -206
- package/dist/team/__tests__/recovery-pane-rollback.test.js.map +1 -1
- package/dist/team/__tests__/recovery-public-api.test.js +70 -15
- package/dist/team/__tests__/recovery-public-api.test.js.map +1 -1
- package/dist/team/__tests__/recovery-request-store.test.js +11 -2
- package/dist/team/__tests__/recovery-request-store.test.js.map +1 -1
- package/dist/team/__tests__/recovery-saga.test.js +16 -1
- package/dist/team/__tests__/recovery-saga.test.js.map +1 -1
- package/dist/team/__tests__/resolved-routing-snapshot.test.js +33 -2
- package/dist/team/__tests__/resolved-routing-snapshot.test.js.map +1 -1
- package/dist/team/__tests__/runtime-cli.test.js +310 -197
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime-done-recovery.test.js +64 -74
- package/dist/team/__tests__/runtime-done-recovery.test.js.map +1 -1
- package/dist/team/__tests__/runtime-owner-busy.test.js +351 -57
- package/dist/team/__tests__/runtime-owner-busy.test.js.map +1 -1
- package/dist/team/__tests__/runtime-owner-client.test.js +153 -49
- package/dist/team/__tests__/runtime-owner-client.test.js.map +1 -1
- package/dist/team/__tests__/runtime-prompt-mode.test.js +29 -16
- package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -1
- package/dist/team/__tests__/runtime-storage-boundary.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-storage-boundary.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-storage-boundary.test.js +409 -0
- package/dist/team/__tests__/runtime-storage-boundary.test.js.map +1 -0
- package/dist/team/__tests__/runtime-v2-role-routing.test.js +613 -72
- package/dist/team/__tests__/runtime-v2-role-routing.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.cursor-routing.test.js +6 -10
- package/dist/team/__tests__/runtime-v2.cursor-routing.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.dispatch.test.js +2425 -209
- package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.explicit-provider-routing.test.js +3 -9
- package/dist/team/__tests__/runtime-v2.explicit-provider-routing.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.gemini-preflight.test.js +296 -3
- package/dist/team/__tests__/runtime-v2.gemini-preflight.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.monitor.test.js +174 -13
- package/dist/team/__tests__/runtime-v2.monitor.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.permission-lines.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-v2.permission-lines.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-v2.permission-lines.test.js +42 -0
- package/dist/team/__tests__/runtime-v2.permission-lines.test.js.map +1 -0
- package/dist/team/__tests__/runtime-v2.shutdown-interruption.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-v2.shutdown-interruption.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-v2.shutdown-interruption.test.js +875 -0
- package/dist/team/__tests__/runtime-v2.shutdown-interruption.test.js.map +1 -0
- package/dist/team/__tests__/runtime-v2.shutdown-pane-cleanup.test.js +115 -60
- package/dist/team/__tests__/runtime-v2.shutdown-pane-cleanup.test.js.map +1 -1
- package/dist/team/__tests__/runtime-v2.shutdown.test.js +551 -52
- package/dist/team/__tests__/runtime-v2.shutdown.test.js.map +1 -1
- package/dist/team/__tests__/runtime-watchdog-retry.test.js +125 -369
- package/dist/team/__tests__/runtime-watchdog-retry.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +54 -3
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling-launch-config.test.js +278 -52
- package/dist/team/__tests__/scaling-launch-config.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +394 -39
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/split-pane-cleanup-evidence.test.js.map +1 -1
- package/dist/team/__tests__/stage-router.test.js +54 -1
- package/dist/team/__tests__/stage-router.test.js.map +1 -1
- package/dist/team/__tests__/startup-claim-error.test.d.ts +2 -0
- package/dist/team/__tests__/startup-claim-error.test.d.ts.map +1 -0
- package/dist/team/__tests__/startup-claim-error.test.js +73 -0
- package/dist/team/__tests__/startup-claim-error.test.js.map +1 -0
- package/dist/team/__tests__/task-recovery-checkpoint.test.js +2 -1
- package/dist/team/__tests__/task-recovery-checkpoint.test.js.map +1 -1
- package/dist/team/__tests__/task-storage-integrity.test.d.ts +2 -0
- package/dist/team/__tests__/task-storage-integrity.test.d.ts.map +1 -0
- package/dist/team/__tests__/task-storage-integrity.test.js +590 -0
- package/dist/team/__tests__/task-storage-integrity.test.js.map +1 -0
- package/dist/team/__tests__/team-config-revision-lock.test.js +250 -4
- package/dist/team/__tests__/team-config-revision-lock.test.js.map +1 -1
- package/dist/team/__tests__/team-instance.test.d.ts +2 -0
- package/dist/team/__tests__/team-instance.test.d.ts.map +1 -0
- package/dist/team/__tests__/team-instance.test.js +367 -0
- package/dist/team/__tests__/team-instance.test.js.map +1 -0
- package/dist/team/__tests__/team-owner-epoch.test.js +80 -1
- package/dist/team/__tests__/team-owner-epoch.test.js.map +1 -1
- package/dist/team/__tests__/team-state-reader.test.js +50 -1
- package/dist/team/__tests__/team-state-reader.test.js.map +1 -1
- package/dist/team/__tests__/teardown-invariant.test.js +20 -2
- package/dist/team/__tests__/teardown-invariant.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session-liveness.test.js +4 -0
- package/dist/team/__tests__/tmux-session-liveness.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.create-team.test.js +497 -65
- package/dist/team/__tests__/tmux-session.create-team.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.kill-team-session.test.js +255 -60
- package/dist/team/__tests__/tmux-session.kill-team-session.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.psmux.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-session.psmux.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-session.psmux.test.js +394 -0
- package/dist/team/__tests__/tmux-session.psmux.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.spawn.test.js +113 -30
- package/dist/team/__tests__/tmux-session.spawn.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.startup.test.js +395 -26
- package/dist/team/__tests__/tmux-session.startup.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.target-membership.test.js +181 -28
- package/dist/team/__tests__/tmux-session.target-membership.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +325 -50
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-activation-gate.test.js +15 -9
- package/dist/team/__tests__/worker-activation-gate.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +9 -1
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worker-launch-ack.test.js +1792 -74
- package/dist/team/__tests__/worker-launch-ack.test.js.map +1 -1
- package/dist/team/__tests__/worker-launch-posix-transport.test.js +266 -42
- package/dist/team/__tests__/worker-launch-posix-transport.test.js.map +1 -1
- package/dist/team/__tests__/worker-launch-wrapper-posix.test.d.ts +10 -0
- package/dist/team/__tests__/worker-launch-wrapper-posix.test.d.ts.map +1 -0
- package/dist/team/__tests__/worker-launch-wrapper-posix.test.js +191 -0
- package/dist/team/__tests__/worker-launch-wrapper-posix.test.js.map +1 -0
- package/dist/team/__tests__/worktree-runtime-e2e.test.js.map +1 -1
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +33 -29
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/bridge-entry.js +3 -3
- package/dist/team/bridge-entry.js.map +1 -1
- package/dist/team/idle-nudge.d.ts +27 -4
- package/dist/team/idle-nudge.d.ts.map +1 -1
- package/dist/team/idle-nudge.js +59 -9
- package/dist/team/idle-nudge.js.map +1 -1
- package/dist/team/index.d.ts +3 -3
- package/dist/team/index.d.ts.map +1 -1
- package/dist/team/index.js +2 -2
- package/dist/team/index.js.map +1 -1
- package/dist/team/mailbox-notification-guard.d.ts +14 -2
- package/dist/team/mailbox-notification-guard.d.ts.map +1 -1
- package/dist/team/mailbox-notification-guard.js +72 -1
- package/dist/team/mailbox-notification-guard.js.map +1 -1
- package/dist/team/mcp-team-bridge.d.ts.map +1 -1
- package/dist/team/mcp-team-bridge.js +0 -8
- package/dist/team/mcp-team-bridge.js.map +1 -1
- package/dist/team/merge-orchestrator.d.ts.map +1 -1
- package/dist/team/merge-orchestrator.js +49 -0
- package/dist/team/merge-orchestrator.js.map +1 -1
- package/dist/team/model-contract.d.ts +35 -0
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +136 -9
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/monitor.d.ts +25 -5
- package/dist/team/monitor.d.ts.map +1 -1
- package/dist/team/monitor.js +271 -91
- package/dist/team/monitor.js.map +1 -1
- package/dist/team/pane-readiness.d.ts.map +1 -1
- package/dist/team/pane-readiness.js +4 -1
- package/dist/team/pane-readiness.js.map +1 -1
- package/dist/team/psmux-adapter.d.ts +73 -0
- package/dist/team/psmux-adapter.d.ts.map +1 -0
- package/dist/team/psmux-adapter.js +219 -0
- package/dist/team/psmux-adapter.js.map +1 -0
- package/dist/team/recovery-request-store.d.ts +4 -0
- package/dist/team/recovery-request-store.d.ts.map +1 -1
- package/dist/team/recovery-request-store.js +16 -4
- package/dist/team/recovery-request-store.js.map +1 -1
- package/dist/team/recovery-saga.d.ts +7 -0
- package/dist/team/recovery-saga.d.ts.map +1 -1
- package/dist/team/recovery-saga.js +4 -1
- package/dist/team/recovery-saga.js.map +1 -1
- package/dist/team/runtime-cli.d.ts +36 -22
- package/dist/team/runtime-cli.d.ts.map +1 -1
- package/dist/team/runtime-cli.js +491 -354
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime-owner-client.d.ts +6 -1
- package/dist/team/runtime-owner-client.d.ts.map +1 -1
- package/dist/team/runtime-owner-client.js +230 -78
- package/dist/team/runtime-owner-client.js.map +1 -1
- package/dist/team/runtime-v2.d.ts +62 -16
- package/dist/team/runtime-v2.d.ts.map +1 -1
- package/dist/team/runtime-v2.js +2171 -850
- package/dist/team/runtime-v2.js.map +1 -1
- package/dist/team/runtime.d.ts +20 -33
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +115 -780
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +501 -183
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/stage-router.d.ts +1 -1
- package/dist/team/stage-router.d.ts.map +1 -1
- package/dist/team/stage-router.js +25 -17
- package/dist/team/stage-router.js.map +1 -1
- package/dist/team/state/tasks.d.ts +23 -3
- package/dist/team/state/tasks.d.ts.map +1 -1
- package/dist/team/state/tasks.js +234 -52
- package/dist/team/state/tasks.js.map +1 -1
- package/dist/team/state-paths.d.ts +57 -0
- package/dist/team/state-paths.d.ts.map +1 -1
- package/dist/team/state-paths.js +176 -1
- package/dist/team/state-paths.js.map +1 -1
- package/dist/team/team-instance.d.ts +71 -0
- package/dist/team/team-instance.d.ts.map +1 -0
- package/dist/team/team-instance.js +863 -0
- package/dist/team/team-instance.js.map +1 -0
- package/dist/team/team-ops.d.ts +13 -1
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js +328 -36
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/team-owner-epoch.d.ts +21 -0
- package/dist/team/team-owner-epoch.d.ts.map +1 -1
- package/dist/team/team-owner-epoch.js +128 -9
- package/dist/team/team-owner-epoch.js.map +1 -1
- package/dist/team/team-state-reader.d.ts.map +1 -1
- package/dist/team/team-state-reader.js +8 -2
- package/dist/team/team-state-reader.js.map +1 -1
- package/dist/team/tmux-session.d.ts +150 -23
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +1837 -260
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/types.d.ts +141 -2
- package/dist/team/types.d.ts.map +1 -1
- package/dist/team/types.js +34 -0
- package/dist/team/types.js.map +1 -1
- package/dist/team/worker-activation-gate.d.ts.map +1 -1
- package/dist/team/worker-activation-gate.js +14 -12
- package/dist/team/worker-activation-gate.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +2 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +25 -5
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worker-launch-ack.d.ts +33 -1
- package/dist/team/worker-launch-ack.d.ts.map +1 -1
- package/dist/team/worker-launch-ack.js +996 -158
- package/dist/team/worker-launch-ack.js.map +1 -1
- package/dist/tools/__tests__/cancel-integration.test.js +99 -21
- package/dist/tools/__tests__/cancel-integration.test.js.map +1 -1
- package/dist/tools/__tests__/state-tools-nongit-ownership.test.js +2 -2
- package/dist/tools/__tests__/state-tools-nongit-ownership.test.js.map +1 -1
- package/dist/tools/__tests__/state-tools.test.js +927 -6
- package/dist/tools/__tests__/state-tools.test.js.map +1 -1
- package/dist/tools/__tests__/wiki-tools-direct-dist-failclosed.test.js +20 -1
- package/dist/tools/__tests__/wiki-tools-direct-dist-failclosed.test.js.map +1 -1
- package/dist/tools/__tests__/wiki-tools-git-probe-failclosed.test.js +4 -1
- package/dist/tools/__tests__/wiki-tools-git-probe-failclosed.test.js.map +1 -1
- package/dist/tools/ast-tools.d.ts.map +1 -1
- package/dist/tools/ast-tools.js +7 -2
- package/dist/tools/ast-tools.js.map +1 -1
- package/dist/tools/diagnostics/__tests__/lsp-aggregator.test.js +159 -6
- package/dist/tools/diagnostics/__tests__/lsp-aggregator.test.js.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.d.ts +1 -0
- package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.js +58 -32
- package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
- package/dist/tools/lsp/__tests__/client-document-lifecycle.test.d.ts +2 -0
- package/dist/tools/lsp/__tests__/client-document-lifecycle.test.d.ts.map +1 -0
- package/dist/tools/lsp/__tests__/client-document-lifecycle.test.js +585 -0
- package/dist/tools/lsp/__tests__/client-document-lifecycle.test.js.map +1 -0
- package/dist/tools/lsp/__tests__/client-handle-data.test.js +5 -2
- package/dist/tools/lsp/__tests__/client-handle-data.test.js.map +1 -1
- package/dist/tools/lsp/client.d.ts +39 -1
- package/dist/tools/lsp/client.d.ts.map +1 -1
- package/dist/tools/lsp/client.js +542 -89
- package/dist/tools/lsp/client.js.map +1 -1
- package/dist/tools/skills-tools.js +1 -1
- package/dist/tools/skills-tools.js.map +1 -1
- package/dist/tools/state-tools.d.ts.map +1 -1
- package/dist/tools/state-tools.js +459 -459
- package/dist/tools/state-tools.js.map +1 -1
- package/dist/utils/__tests__/cache-occupancy.test.js +61 -3
- package/dist/utils/__tests__/cache-occupancy.test.js.map +1 -1
- package/dist/utils/cache-occupancy.d.ts +12 -2
- package/dist/utils/cache-occupancy.d.ts.map +1 -1
- package/dist/utils/cache-occupancy.js +46 -6
- package/dist/utils/cache-occupancy.js.map +1 -1
- package/dist/utils/config-dir.d.ts +4 -4
- package/dist/utils/config-dir.js +5 -5
- package/dist/utils/config-dir.js.map +1 -1
- package/dist/utils/host-detection.d.ts +2 -4
- package/dist/utils/host-detection.d.ts.map +1 -1
- package/dist/utils/host-detection.js +4 -7
- package/dist/utils/host-detection.js.map +1 -1
- package/dist/utils/host-signal.d.ts +19 -0
- package/dist/utils/host-signal.d.ts.map +1 -0
- package/dist/utils/host-signal.js +24 -0
- package/dist/utils/host-signal.js.map +1 -0
- package/dist/workflow/__tests__/alias-resolver.test.js +8 -6
- package/dist/workflow/__tests__/alias-resolver.test.js.map +1 -1
- package/dist/workflow/__tests__/projections.test.js +8 -4
- package/dist/workflow/__tests__/projections.test.js.map +1 -1
- package/dist/workflow/__tests__/registry.test.js +12 -3
- package/dist/workflow/__tests__/registry.test.js.map +1 -1
- package/dist/workflow/registry.d.ts.map +1 -1
- package/dist/workflow/registry.js +16 -1
- package/dist/workflow/registry.js.map +1 -1
- package/docs/ARCHITECTURE.md +57 -31
- package/docs/CLAUDE.md +2 -2
- package/docs/COMPATIBILITY.md +6 -0
- package/docs/FEATURES.md +61 -0
- package/docs/GETTING-STARTED.md +31 -25
- package/docs/HOOKS.md +107 -28
- package/docs/MIGRATION.md +261 -1
- package/docs/PERFORMANCE-MONITORING.md +1 -1
- package/docs/REFERENCE.md +209 -29
- package/docs/TEAM-WORKTREE-MODE.md +3 -1
- package/docs/TOOLS.md +9 -3
- package/docs/adr/03665-jev-degradation-contract.md +3 -0
- package/docs/adr/03671-script-side-judgment-channel.md +37 -0
- package/docs/adr/03672-env-activated-active-mode.md +3 -0
- package/docs/business/README.md +6 -0
- package/docs/copilot-instructions.md +1 -1
- package/docs/graph-contained-filesystem.md +77 -0
- package/docs/issues/issue-3668-ralph-namespace.md +3 -3
- package/docs/issues/issue-3669-jev-judgment-points.md +103 -0
- package/docs/shared/features.md +4 -2
- package/docs/shipyard.md +140 -0
- package/docs/standards/architecture.md +6 -0
- package/docs/standards/data.md +4 -0
- package/docs/standards/process.md +5 -0
- package/hooks/hooks.json +36 -26
- package/native/contained-fs.c +292 -0
- package/package.json +15 -7
- package/plugin.json +23 -0
- package/scripts/budget-guard.mjs +217 -0
- package/scripts/build-bridge-entry.mjs +5 -0
- package/scripts/build-contained-fs.mjs +38 -0
- package/scripts/build-generated-artifact-authorization.mjs +100 -0
- package/scripts/build-mcp-server.mjs +5 -0
- package/scripts/build-runtime-cli.mjs +7 -0
- package/scripts/build-team-server.mjs +7 -0
- package/scripts/ci/check-multirepo-paths.mjs +2 -2
- package/scripts/code-simplifier.mjs +18 -0
- package/scripts/copilot/build-agents.mjs +173 -0
- package/scripts/copilot/build-hooks.mjs +128 -0
- package/scripts/generate-inventory-graph.mjs +13 -4
- package/scripts/jev-eval.mjs +257 -0
- package/scripts/jev-resolve.mjs +245 -0
- package/scripts/keyword-detector.mjs +120 -18
- package/scripts/lib/atomic-write.mjs +27 -445
- package/scripts/lib/bounded-git-timeout.mjs +3 -2
- package/scripts/lib/cache-occupancy.mjs +50 -7
- package/scripts/lib/config-dir.cjs +2 -2
- package/scripts/lib/config-dir.mjs +2 -2
- package/scripts/lib/config-dir.sh +2 -1
- package/scripts/lib/copilot-hook-adapter.cjs +325 -0
- package/scripts/lib/enforcement-log.mjs +46 -0
- package/scripts/lib/hook-command-normalizer.mjs +34 -12
- package/scripts/lib/hud-cache-wrapper.sh +192 -17
- package/scripts/lib/hud-wrapper-template.txt +1 -1
- package/scripts/lib/jev-shadow.mjs +49 -0
- package/scripts/lib/pre-tool-enforcer-preflight.mjs +10 -3
- package/scripts/lib/read-budget-preflight.mjs +410 -0
- package/scripts/lib/state-lock.mjs +750 -0
- package/scripts/lib/state-root.cjs +9 -3
- package/scripts/lib/state-root.mjs +34 -4
- package/scripts/lib/workflow-profile-runtime.mjs +1 -1
- package/scripts/persistent-mode.mjs +157 -18
- package/scripts/plugin-setup.mjs +66 -18
- package/scripts/plugin-shipping-surface.mjs +35 -3
- package/scripts/post-tool-directory-context-injector.mjs +115 -0
- package/scripts/post-tool-rules-injector.mjs +5 -5
- package/scripts/post-tool-verifier.mjs +97 -21
- package/scripts/pre-tool-enforcer.mjs +118 -2
- package/scripts/project-memory-posttool.mjs +33 -25
- package/scripts/release-boundary.mjs +14 -0
- package/scripts/release.ts +29 -16
- package/scripts/repair-plugin-cache.mjs +1 -1
- package/scripts/run-provider-advisor.js +14 -0
- package/scripts/run.cjs +600 -71
- package/scripts/session-end.mjs +3 -7
- package/scripts/session-start.mjs +201 -39
- package/scripts/setup-claude-md.sh +36 -5
- package/scripts/setup-progress.mjs +1 -1
- package/scripts/shipyard-audit.mjs +322 -0
- package/scripts/sync-version.sh +9 -1
- package/scripts/uninstall.sh +37 -37
- package/scripts/verify-graph-contained-fs.mjs +202 -0
- package/skills/AGENTS.md +54 -14
- package/skills/agent-doc-discipline/SKILL.md +54 -0
- package/skills/architecture-survey/SKILL.md +59 -0
- package/skills/ask-navigator/SKILL.md +143 -0
- package/skills/cancel/SKILL.md +288 -299
- package/skills/configure-notifications/SKILL.md +11 -11
- package/skills/debug/SKILL.md +3 -0
- package/skills/deep-interview/SKILL.md +16 -4
- package/skills/deepinit/SKILL.md +47 -24
- package/skills/diagram/SKILL.md +125 -0
- package/skills/drydock/SKILL.md +381 -0
- package/skills/harbor/SKILL.md +169 -0
- package/skills/hud/SKILL.md +10 -10
- package/skills/intent/SKILL.md +95 -0
- package/skills/launch/SKILL.md +185 -0
- package/skills/loft/SKILL.md +70 -0
- package/skills/map/SKILL.md +73 -0
- package/skills/minimal-code-discipline/SKILL.md +59 -0
- package/skills/minimal-prose-discipline/SKILL.md +73 -0
- package/skills/omc-ado-auto-review/SKILL.md +1 -4
- package/skills/omc-ado-review/SKILL.md +1 -4
- package/skills/omc-ado-setup/SKILL.md +1 -4
- package/skills/omc-ado-sprint/SKILL.md +1 -4
- package/skills/omc-ado-triage/SKILL.md +1 -4
- package/skills/omc-doctor/SKILL.md +32 -27
- package/skills/omc-gh-auto-review/SKILL.md +1 -4
- package/skills/omc-gh-project/SKILL.md +1 -4
- package/skills/omc-gh-review/SKILL.md +1 -4
- package/skills/omc-gh-setup/SKILL.md +1 -4
- package/skills/omc-gh-triage/SKILL.md +1 -4
- package/skills/omc-setup/SKILL.md +2 -2
- package/skills/omc-setup/phases/02-configure.md +7 -6
- package/skills/omc-setup/phases/03-integrations.md +7 -7
- package/skills/omc-setup/phases/04-welcome.md +2 -2
- package/skills/pr/SKILL.md +66 -0
- package/skills/refit/SKILL.md +46 -0
- package/skills/review/SKILL.md +9 -0
- package/skills/skill/SKILL.md +7 -7
- package/skills/skillify/SKILL.md +1 -1
- package/skills/tdd/SKILL.md +33 -0
- package/skills/team/SKILL.md +84 -81
- package/templates/hooks/keyword-detector.mjs +24 -10
- package/templates/hooks/lib/atomic-write.mjs +27 -445
- package/templates/hooks/lib/bounded-git-timeout.mjs +3 -2
- package/templates/hooks/lib/cache-occupancy.mjs +36 -7
- package/templates/hooks/lib/config-dir.mjs +2 -2
- package/templates/hooks/lib/state-lock.mjs +4 -0
- package/templates/hooks/lib/state-root.mjs +34 -4
- package/templates/hooks/lib/workflow-profile-runtime.mjs +1 -1
- package/templates/hooks/persistent-mode.mjs +59 -17
- package/templates/hooks/pre-tool-use.mjs +1213 -51
- package/templates/hooks/session-start.mjs +190 -25
- package/dist/__tests__/safe-command-approver.test.d.ts +0 -2
- package/dist/__tests__/safe-command-approver.test.d.ts.map +0 -1
- package/dist/__tests__/safe-command-approver.test.js +0 -103
- package/dist/__tests__/safe-command-approver.test.js.map +0 -1
- package/dist/installer/permissions.d.ts +0 -9
- package/dist/installer/permissions.d.ts.map +0 -1
- package/dist/installer/permissions.js +0 -59
- package/dist/installer/permissions.js.map +0 -1
- package/scripts/safe-command-approver.mjs +0 -156
package/scripts/run.cjs
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
const { spawn, spawnSync } = require('child_process');
|
|
12
|
-
const {
|
|
12
|
+
const { PassThrough, Writable } = require('stream');
|
|
13
|
+
const { existsSync, readFileSync, realpathSync, writeSync } = require('fs');
|
|
13
14
|
const path = require('path');
|
|
14
15
|
const { join, basename, dirname } = path;
|
|
15
16
|
const { pathToFileURL } = require('url');
|
|
@@ -107,36 +108,80 @@ function isDebugHooksEnabled() {
|
|
|
107
108
|
process.env.OMC_DEBUG === 'true';
|
|
108
109
|
}
|
|
109
110
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
const POSIX_TIMEOUT_CUSHION_MS = 500;
|
|
112
|
+
const WINDOWS_TIMEOUT_CUSHION_MS = 1500;
|
|
113
|
+
const MAX_DECLARED_GENERIC_TIMEOUT_MS = 60000;
|
|
114
|
+
const WINDOWS_REAP_TIMEOUT_MS = 400;
|
|
115
|
+
const PROTOCOL_STDIO_SETTLE_MS = 150;
|
|
116
|
+
// Empty source→tap→writer pipelines identify leaked descendant handles after
|
|
117
|
+
// the leader exits. Legitimate buffered bytes are exempt from this idle bound.
|
|
118
|
+
const PROTOCOL_SOURCE_IDLE_MS = 80;
|
|
119
|
+
const MIN_HOOK_INNER_FRACTION = 0.5;
|
|
120
|
+
const MIN_HOOK_INNER_MS = 400;
|
|
121
|
+
// Observed Windows supervisor→hook→grandchild cold start in hosted CI (361–559ms).
|
|
122
|
+
const WINDOWS_GENERIC_STARTUP_MS = 600;
|
|
123
|
+
// Must match scripts/lib/bounded-git-timeout.mjs.
|
|
124
|
+
const NESTED_OPERATION_TIMEOUT_MS = 2000;
|
|
125
|
+
const NESTED_OPERATION_MARGIN_MS = 200;
|
|
126
|
+
const NESTED_INNER_FLOOR_MS = NESTED_OPERATION_TIMEOUT_MS + NESTED_OPERATION_MARGIN_MS + WINDOWS_GENERIC_STARTUP_MS;
|
|
127
|
+
const TIMEOUT_CUSHION_MS = POSIX_TIMEOUT_CUSHION_MS;
|
|
128
|
+
const DEFAULT_GENERIC_TIMEOUT_MS = MAX_DECLARED_GENERIC_TIMEOUT_MS - POSIX_TIMEOUT_CUSHION_MS;
|
|
129
|
+
|
|
130
|
+
function platformTimeoutCushionMs(platform = process.platform) {
|
|
131
|
+
return platform === 'win32' ? WINDOWS_TIMEOUT_CUSHION_MS : POSIX_TIMEOUT_CUSHION_MS;
|
|
114
132
|
}
|
|
115
133
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
134
|
+
function desiredTimeoutCushionMs(manifestTimeoutMs, hookEvent, platform = process.platform) {
|
|
135
|
+
const base = platformTimeoutCushionMs(platform);
|
|
136
|
+
if (hookEvent !== 'UserPromptSubmit') return base;
|
|
137
|
+
const promptCushion = Math.floor(manifestTimeoutMs * 0.2);
|
|
138
|
+
return Math.min(3000, Math.max(base, 1000, promptCushion));
|
|
139
|
+
}
|
|
119
140
|
|
|
141
|
+
function resolveTimeoutCushionMs(manifestTimeoutMs, hookEvent, platform = process.platform) {
|
|
142
|
+
const desired = desiredTimeoutCushionMs(manifestTimeoutMs, hookEvent, platform);
|
|
143
|
+
if (platform === 'win32' && hookEvent !== 'UserPromptSubmit' && manifestTimeoutMs <= 3000) {
|
|
144
|
+
// Preserve the historical 500ms outer allowance for short hooks. It
|
|
145
|
+
// covers the 400ms Windows reap plus the 80ms protocol-idle close while
|
|
146
|
+
// leaving a 3s hook its prior 2500ms inner budget for shipped 2000ms Git
|
|
147
|
+
// and lock operations.
|
|
148
|
+
return Math.min(500, Math.max(1, manifestTimeoutMs - 1));
|
|
149
|
+
}
|
|
150
|
+
const fractionalInner = Math.max(MIN_HOOK_INNER_MS, Math.floor(manifestTimeoutMs * MIN_HOOK_INNER_FRACTION));
|
|
151
|
+
const canFitNestedFloor = manifestTimeoutMs - POSIX_TIMEOUT_CUSHION_MS >= NESTED_INNER_FLOOR_MS;
|
|
152
|
+
const minInner = Math.min(
|
|
153
|
+
Math.max(1, manifestTimeoutMs - 1),
|
|
154
|
+
canFitNestedFloor ? Math.max(fractionalInner, NESTED_INNER_FLOOR_MS) : fractionalInner,
|
|
155
|
+
);
|
|
156
|
+
const maxCushion = Math.max(1, manifestTimeoutMs - minInner);
|
|
157
|
+
return Math.min(desired, maxCushion);
|
|
158
|
+
}
|
|
120
159
|
|
|
121
|
-
function resolveInnerTimeoutMs(manifestHook) {
|
|
160
|
+
function resolveInnerTimeoutMs(manifestHook, platform = process.platform) {
|
|
122
161
|
if (!manifestHook) return null;
|
|
123
|
-
return Math.max(1, manifestHook.timeoutMs - resolveTimeoutCushionMs(manifestHook.timeoutMs, manifestHook.event));
|
|
162
|
+
return Math.max(1, manifestHook.timeoutMs - resolveTimeoutCushionMs(manifestHook.timeoutMs, manifestHook.event, platform));
|
|
124
163
|
}
|
|
125
164
|
|
|
126
|
-
// Call only after resolveWorkerTarget has verified an exact canonical trusted
|
|
127
|
-
|
|
165
|
+
// Call only after resolveWorkerTarget has verified an exact canonical trusted target.
|
|
166
|
+
const TRUSTED_WORKER_HOOKS = new Map([
|
|
167
|
+
['keyword-detector.mjs', { event: 'UserPromptSubmit', timeoutCapMs: 8000 }],
|
|
168
|
+
['skill-injector.mjs', { event: 'UserPromptSubmit', timeoutCapMs: 12000 }],
|
|
169
|
+
['pre-tool-enforcer.mjs', { event: 'PreToolUse' }],
|
|
170
|
+
['post-tool-verifier.mjs', { event: 'PostToolUse' }],
|
|
171
|
+
['project-memory-posttool.mjs', { event: 'PostToolUse' }],
|
|
172
|
+
['post-tool-rules-injector.mjs', { event: 'PostToolUse' }],
|
|
173
|
+
]);
|
|
174
|
+
|
|
175
|
+
function resolveTrustedWorkerTimeoutMs(targetPath, manifestHook) {
|
|
128
176
|
const calculatedTimeoutMs = resolveInnerTimeoutMs(manifestHook);
|
|
129
|
-
const
|
|
130
|
-
const capsByCanonicalTarget = new Map([
|
|
131
|
-
[normalizedComparisonPath(join(trustedPluginRoot, 'scripts', 'keyword-detector.mjs')), 8000],
|
|
132
|
-
[normalizedComparisonPath(join(trustedPluginRoot, 'scripts', 'skill-injector.mjs')), 12000],
|
|
133
|
-
]);
|
|
134
|
-
const capMs = capsByCanonicalTarget.get(canonicalTarget);
|
|
177
|
+
const capMs = TRUSTED_WORKER_HOOKS.get(basename(targetPath))?.timeoutCapMs;
|
|
135
178
|
return capMs ? Math.min(calculatedTimeoutMs, capMs) : calculatedTimeoutMs;
|
|
136
179
|
}
|
|
137
180
|
|
|
138
|
-
function resolveGenericTimeoutMs(manifestHook) {
|
|
139
|
-
return manifestHook
|
|
181
|
+
function resolveGenericTimeoutMs(manifestHook, platform = process.platform) {
|
|
182
|
+
return manifestHook
|
|
183
|
+
? resolveInnerTimeoutMs(manifestHook, platform)
|
|
184
|
+
: MAX_DECLARED_GENERIC_TIMEOUT_MS - platformTimeoutCushionMs(platform);
|
|
140
185
|
}
|
|
141
186
|
|
|
142
187
|
function resolveHookTimeoutMsFromRoot(pluginRoot, targetPath, extraArgs) {
|
|
@@ -193,12 +238,14 @@ function resolveWorkerTarget(resolution, extraArgs) {
|
|
|
193
238
|
const canonicalTarget = normalizedComparisonPath(resolution.targetPath);
|
|
194
239
|
if (!isContainedBy(canonicalRoot, canonicalTarget)) return null;
|
|
195
240
|
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
if (!
|
|
241
|
+
const scriptName = basename(resolution.targetPath);
|
|
242
|
+
const trustedHook = TRUSTED_WORKER_HOOKS.get(scriptName);
|
|
243
|
+
if (!trustedHook) return null;
|
|
244
|
+
const expectedTarget = normalizedComparisonPath(join(trustedRoot, 'scripts', scriptName));
|
|
245
|
+
if (canonicalTarget !== expectedTarget) return null;
|
|
199
246
|
|
|
200
247
|
const manifestHook = resolveHookTimeoutMsFromRoot(trustedRoot, resolution.targetPath, []);
|
|
201
|
-
if (manifestHook?.event !==
|
|
248
|
+
if (manifestHook?.event !== trustedHook.event) return null;
|
|
202
249
|
return manifestHook;
|
|
203
250
|
} catch {
|
|
204
251
|
return null;
|
|
@@ -223,11 +270,13 @@ function resolveTrustedSessionEndTarget(resolution, extraArgs) {
|
|
|
223
270
|
}
|
|
224
271
|
|
|
225
272
|
|
|
226
|
-
function writeTimeoutDiagnostic(targetPath, manifestHook, timeoutMs) {
|
|
273
|
+
function writeTimeoutDiagnostic(targetPath, manifestHook, timeoutMs, sink) {
|
|
227
274
|
const message = `[run.cjs] Hook ${basename(targetPath)} timed out after ${timeoutMs}ms; exiting fail-open.\n`;
|
|
228
275
|
if (manifestHook?.event !== 'UserPromptSubmit' || isDebugHooksEnabled()) {
|
|
229
|
-
process.stderr.
|
|
276
|
+
if (sink) return sink.write(process.stderr, Buffer.from(message));
|
|
277
|
+
try { process.stderr.write(message); } catch { /* protocol dest may already be closed */ }
|
|
230
278
|
}
|
|
279
|
+
return Promise.resolve();
|
|
231
280
|
}
|
|
232
281
|
|
|
233
282
|
function captureProcessStartIdentity(pid) {
|
|
@@ -268,16 +317,34 @@ function processIdentityMatches(pid, expectedIdentity) {
|
|
|
268
317
|
return captureProcessStartIdentity(pid) === expectedIdentity;
|
|
269
318
|
}
|
|
270
319
|
|
|
320
|
+
function leaderPresence(pid, expectedIdentity) {
|
|
321
|
+
try {
|
|
322
|
+
process.kill(pid, 0);
|
|
323
|
+
} catch (error) {
|
|
324
|
+
return error && error.code === 'ESRCH' ? 'absent' : 'unknown';
|
|
325
|
+
}
|
|
326
|
+
if (!expectedIdentity) return 'alive';
|
|
327
|
+
return captureProcessStartIdentity(pid) === expectedIdentity ? 'alive' : 'mismatch';
|
|
328
|
+
}
|
|
329
|
+
|
|
271
330
|
function reapTree(child, childIdentity) {
|
|
272
|
-
// Identity-safe reap:
|
|
273
|
-
//
|
|
274
|
-
//
|
|
275
|
-
|
|
276
|
-
|
|
331
|
+
// Identity-safe reap: only signal a live PID we spawned, or a confirmed-dead
|
|
332
|
+
// detached leader's leftover process group. A live identity mismatch is PID
|
|
333
|
+
// reuse — fail closed. Unknown (EPERM/identity-read failure) also fail closed.
|
|
334
|
+
if (!Number.isInteger(child.pid) || child.pid <= 0) return;
|
|
335
|
+
const presence = leaderPresence(child.pid, childIdentity);
|
|
336
|
+
if (presence === 'mismatch' || presence === 'unknown') return;
|
|
337
|
+
if (presence === 'absent') {
|
|
338
|
+
if (process.platform === 'win32') return;
|
|
339
|
+
try { process.kill(-child.pid, 'SIGKILL'); } catch { /* group already empty */ }
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
277
342
|
if (process.platform === 'win32') {
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
343
|
+
// Protocol stdout/stderr are owned by run.cjs pipes, so a descendant that
|
|
344
|
+
// outlives this process cannot retain Claude Code's handles (#3920).
|
|
345
|
+
// Do not spawnSync here: Node waits for the killer even after its timeout,
|
|
346
|
+
// which can hold the runner past the declared host fuse. Fire-and-forget
|
|
347
|
+
// taskkill with stdio ignored after protocol detach is the fail-open path.
|
|
281
348
|
try {
|
|
282
349
|
const killer = spawn('taskkill', ['/T', '/F', '/PID', String(child.pid)], {
|
|
283
350
|
windowsHide: true,
|
|
@@ -310,7 +377,310 @@ function resolveGenericChildCommand(targetPath, extraArgs, platform = process.pl
|
|
|
310
377
|
: [targetPath, ...extraArgs];
|
|
311
378
|
}
|
|
312
379
|
|
|
380
|
+
function resolveGenericChildStdio(platform = process.platform) {
|
|
381
|
+
// stdin inherit: hook JSON payload from Claude Code.
|
|
382
|
+
// stdout/stderr pipe: run.cjs owns the protocol handles so a descendant that
|
|
383
|
+
// outlives the runner cannot keep Claude Code blocked on EOF (#3920).
|
|
384
|
+
// ipc: Windows supervisor parent-death reap.
|
|
385
|
+
return platform === 'win32'
|
|
386
|
+
? ['inherit', 'pipe', 'pipe', 'ipc']
|
|
387
|
+
: ['inherit', 'pipe', 'pipe'];
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
function isClosedDestinationError(error) {
|
|
391
|
+
const code = error && error.code;
|
|
392
|
+
return code === 'EPIPE' || code === 'ERR_STREAM_DESTROYED' || code === 'ERR_STREAM_WRITE_AFTER_END';
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
let processDestGuardsInstalled = false;
|
|
397
|
+
function ensureProcessDestGuards() {
|
|
398
|
+
if (processDestGuardsInstalled) return;
|
|
399
|
+
processDestGuardsInstalled = true;
|
|
400
|
+
const guard = (error) => {
|
|
401
|
+
if (isClosedDestinationError(error)) return;
|
|
402
|
+
try {
|
|
403
|
+
writeSync(2, `[run.cjs] protocol stream error: ${error.code || error.message}\n`);
|
|
404
|
+
} catch { /* both destinations dead */ }
|
|
405
|
+
};
|
|
406
|
+
process.stdout.on('error', guard);
|
|
407
|
+
process.stderr.on('error', guard);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
function createProtocolSink(hooks = {}) {
|
|
411
|
+
const destinations = {
|
|
412
|
+
stdout: hooks.stdout || process.stdout,
|
|
413
|
+
stderr: hooks.stderr || process.stderr,
|
|
414
|
+
};
|
|
415
|
+
const discarded = { stdout: false, stderr: false };
|
|
416
|
+
const closedDest = { stdout: false, stderr: false };
|
|
417
|
+
const bindings = { stdout: [], stderr: [] };
|
|
418
|
+
const discardedSources = { stdout: [], stderr: [] };
|
|
419
|
+
let installed = false;
|
|
420
|
+
let pendingWrites = 0;
|
|
421
|
+
let uninstallRequested = false;
|
|
422
|
+
const onStdoutError = (error) => handleDestError('stdout', destinations.stdout, error);
|
|
423
|
+
const onStderrError = (error) => handleDestError('stderr', destinations.stderr, error);
|
|
424
|
+
|
|
425
|
+
function teardownChannel(name) {
|
|
426
|
+
discarded[name] = true;
|
|
427
|
+
const snapshot = bindings[name];
|
|
428
|
+
bindings[name] = [];
|
|
429
|
+
for (const binding of snapshot) {
|
|
430
|
+
try { binding.source.unpipe(binding.tap); } catch { /* already unpiped */ }
|
|
431
|
+
try { binding.tap.unpipe(binding.writer); } catch { /* already unpiped */ }
|
|
432
|
+
try { binding.tap.destroy(); } catch { /* already destroyed */ }
|
|
433
|
+
try { binding.writer.destroy(); } catch { /* already destroyed */ }
|
|
434
|
+
}
|
|
435
|
+
if (typeof hooks.beforeSourceDestroy === 'function') hooks.beforeSourceDestroy();
|
|
436
|
+
for (const binding of snapshot) {
|
|
437
|
+
try { binding.source.destroy(); } catch { /* already destroyed */ }
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
function discardChannel(name) {
|
|
442
|
+
discarded[name] = true;
|
|
443
|
+
const snapshot = bindings[name];
|
|
444
|
+
bindings[name] = [];
|
|
445
|
+
for (const binding of snapshot) {
|
|
446
|
+
try { binding.source.unpipe(binding.tap); } catch { /* already unpiped */ }
|
|
447
|
+
try { binding.tap.unpipe(binding.writer); } catch { /* already unpiped */ }
|
|
448
|
+
try { binding.tap.destroy(); } catch { /* already destroyed */ }
|
|
449
|
+
try { binding.writer.destroy(); } catch { /* already destroyed */ }
|
|
450
|
+
discardedSources[name].push(binding.source);
|
|
451
|
+
try { binding.source.resume(); } catch { /* already flowing or destroyed */ }
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
function destroyDiscardedSources() {
|
|
456
|
+
for (const name of ['stdout', 'stderr']) {
|
|
457
|
+
const sources = discardedSources[name];
|
|
458
|
+
discardedSources[name] = [];
|
|
459
|
+
for (const source of sources) {
|
|
460
|
+
try { source.destroy(); } catch { /* already destroyed */ }
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function handleDestError(name, dest, error) {
|
|
466
|
+
if (discarded[name]) return;
|
|
467
|
+
if (isClosedDestinationError(error)) closedDest[name] = true;
|
|
468
|
+
// Close only the failed protocol channel first. Keep its child pipe
|
|
469
|
+
// draining while the sibling channel remains available; reaping here can
|
|
470
|
+
// race sibling bytes that the hook has not written yet.
|
|
471
|
+
discardChannel(name);
|
|
472
|
+
if (typeof hooks.onDestinationClose === 'function') hooks.onDestinationClose(name);
|
|
473
|
+
if (!isClosedDestinationError(error) && name === 'stdout') {
|
|
474
|
+
void write(process.stderr, Buffer.from(`[run.cjs] protocol stream error: ${error.code || error.message}\n`));
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function install() {
|
|
479
|
+
ensureProcessDestGuards();
|
|
480
|
+
if (installed) return;
|
|
481
|
+
installed = true;
|
|
482
|
+
destinations.stdout.on('error', onStdoutError);
|
|
483
|
+
destinations.stderr.on('error', onStderrError);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
function flushUninstall() {
|
|
487
|
+
if (!uninstallRequested || pendingWrites > 0 || !installed) return;
|
|
488
|
+
installed = false;
|
|
489
|
+
destinations.stdout.removeListener('error', onStdoutError);
|
|
490
|
+
destinations.stderr.removeListener('error', onStderrError);
|
|
491
|
+
// Process-lifetime closed-dest guards remain so a late write callback
|
|
492
|
+
// EPIPE after finish() cannot crash the runner.
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
function uninstall() {
|
|
496
|
+
uninstallRequested = true;
|
|
497
|
+
flushUninstall();
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function abandonOutputs() {
|
|
501
|
+
teardownChannel('stdout');
|
|
502
|
+
teardownChannel('stderr');
|
|
503
|
+
destroyDiscardedSources();
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
function closeDestinations() {
|
|
507
|
+
for (const dest of [destinations.stdout, destinations.stderr]) {
|
|
508
|
+
try { dest.destroy(); } catch { /* already closed */ }
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
function write(dest, data) {
|
|
513
|
+
install();
|
|
514
|
+
const name = dest === destinations.stderr ? 'stderr' : 'stdout';
|
|
515
|
+
if (discarded[name] || !dest || dest.destroyed || !dest.writable) return Promise.resolve();
|
|
516
|
+
if (dest.writableNeedDrain) {
|
|
517
|
+
discarded[name] = true;
|
|
518
|
+
return Promise.resolve();
|
|
519
|
+
}
|
|
520
|
+
pendingWrites += 1;
|
|
521
|
+
return new Promise((resolve) => {
|
|
522
|
+
let settled = false;
|
|
523
|
+
const done = () => {
|
|
524
|
+
if (settled) return;
|
|
525
|
+
settled = true;
|
|
526
|
+
resolve();
|
|
527
|
+
};
|
|
528
|
+
const completeWrite = (error) => {
|
|
529
|
+
if (writeCompleted) {
|
|
530
|
+
if (error) handleDestError(name, dest, error);
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
writeCompleted = true;
|
|
534
|
+
pendingWrites = Math.max(0, pendingWrites - 1);
|
|
535
|
+
if (error) handleDestError(name, dest, error);
|
|
536
|
+
clearTimeout(timer);
|
|
537
|
+
done();
|
|
538
|
+
flushUninstall();
|
|
539
|
+
};
|
|
540
|
+
let writeCompleted = false;
|
|
541
|
+
const timer = setTimeout(done, PROTOCOL_STDIO_SETTLE_MS);
|
|
542
|
+
try {
|
|
543
|
+
const ok = dest.write(data, (error) => completeWrite(error));
|
|
544
|
+
if (!ok) completeWrite();
|
|
545
|
+
} catch (error) {
|
|
546
|
+
completeWrite(error);
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
function attachChild(child) {
|
|
552
|
+
install();
|
|
553
|
+
const bind = (source, dest, name) => {
|
|
554
|
+
if (!source) return;
|
|
555
|
+
const tap = new PassThrough();
|
|
556
|
+
const binding = {
|
|
557
|
+
source,
|
|
558
|
+
tap,
|
|
559
|
+
dest,
|
|
560
|
+
writer: null,
|
|
561
|
+
completed: false,
|
|
562
|
+
lastProgressAt: Date.now(),
|
|
563
|
+
};
|
|
564
|
+
const writer = new Writable({
|
|
565
|
+
write(chunk, _encoding, callback) {
|
|
566
|
+
let offset = 0;
|
|
567
|
+
const writeNext = () => {
|
|
568
|
+
if (discarded[name] || !dest || dest.destroyed || !dest.writable) {
|
|
569
|
+
callback();
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
if (offset >= chunk.length) {
|
|
573
|
+
callback();
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
const end = Math.min(offset + 1024, chunk.length);
|
|
577
|
+
const slice = chunk.subarray(offset, end);
|
|
578
|
+
offset = end;
|
|
579
|
+
try {
|
|
580
|
+
dest.write(slice, (error) => {
|
|
581
|
+
if (error) {
|
|
582
|
+
handleDestError(name, dest, error);
|
|
583
|
+
callback();
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
binding.lastProgressAt = Date.now();
|
|
587
|
+
writeNext();
|
|
588
|
+
});
|
|
589
|
+
} catch (error) {
|
|
590
|
+
handleDestError(name, dest, error);
|
|
591
|
+
callback();
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
writeNext();
|
|
595
|
+
},
|
|
596
|
+
});
|
|
597
|
+
binding.writer = writer;
|
|
598
|
+
bindings[name].push(binding);
|
|
599
|
+
source.on('data', () => { binding.lastProgressAt = Date.now(); });
|
|
600
|
+
source.pipe(tap);
|
|
601
|
+
tap.pipe(writer);
|
|
602
|
+
tap.on('error', (error) => handleDestError(name, dest, error));
|
|
603
|
+
writer.on('finish', () => { binding.completed = true; });
|
|
604
|
+
writer.on('error', (error) => handleDestError(name, dest, error));
|
|
605
|
+
};
|
|
606
|
+
bind(child.stdout, destinations.stdout, 'stdout');
|
|
607
|
+
bind(child.stderr, destinations.stderr, 'stderr');
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
function settleOutputs(timeoutMs, idleMs = PROTOCOL_SOURCE_IDLE_MS, reapIdleSources = true) {
|
|
611
|
+
const active = [...bindings.stdout, ...bindings.stderr];
|
|
612
|
+
if (active.length === 0) return Promise.resolve(true);
|
|
613
|
+
const deadline = Date.now() + Math.max(1, timeoutMs);
|
|
614
|
+
return new Promise(resolve => {
|
|
615
|
+
let settled = false;
|
|
616
|
+
const finish = (complete) => {
|
|
617
|
+
if (settled) return;
|
|
618
|
+
settled = true;
|
|
619
|
+
clearInterval(timer);
|
|
620
|
+
resolve(complete);
|
|
621
|
+
};
|
|
622
|
+
const inspect = () => {
|
|
623
|
+
if (Date.now() >= deadline) {
|
|
624
|
+
abandonOutputs();
|
|
625
|
+
finish(false);
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
if (active.every(binding => (binding.completed && !binding.dest.writableNeedDrain) || binding.writer.destroyed)) {
|
|
629
|
+
finish(true);
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
if (!reapIdleSources) return;
|
|
633
|
+
const now = Date.now();
|
|
634
|
+
for (const binding of active) {
|
|
635
|
+
if (binding.completed || binding.writer.destroyed) continue;
|
|
636
|
+
if (now - binding.lastProgressAt < idleMs) continue;
|
|
637
|
+
const sourceEnded = binding.source.readableEnded || binding.source.destroyed;
|
|
638
|
+
const bufferedBytes = binding.source.readableLength + binding.tap.readableLength +
|
|
639
|
+
binding.writer.writableLength + (binding.dest.writableLength || 0);
|
|
640
|
+
// An open source with an empty pipeline after the leader exited is a
|
|
641
|
+
// leaked descendant handle. Buffered bytes, by contrast, are valid
|
|
642
|
+
// protocol output and retain the remaining declared hook budget.
|
|
643
|
+
if (!sourceEnded && bufferedBytes === 0) {
|
|
644
|
+
teardownChannel(binding.dest === process.stderr ? 'stderr' : 'stdout');
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
const timer = setInterval(inspect, Math.max(5, Math.floor(idleMs / 4)));
|
|
649
|
+
inspect();
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
return {
|
|
654
|
+
install,
|
|
655
|
+
uninstall,
|
|
656
|
+
write,
|
|
657
|
+
attachChild,
|
|
658
|
+
settleOutputs,
|
|
659
|
+
abandonOutputs,
|
|
660
|
+
closeDestinations,
|
|
661
|
+
hasClosedDestination: () => closedDest.stdout || closedDest.stderr,
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
function detachProtocolStdio(child) {
|
|
666
|
+
if (!child) return;
|
|
667
|
+
for (const [stream, dest] of [[child.stdout, process.stdout], [child.stderr, process.stderr]]) {
|
|
668
|
+
if (!stream) continue;
|
|
669
|
+
try { stream.unpipe(dest); } catch { /* already detached */ }
|
|
670
|
+
try {
|
|
671
|
+
if (typeof stream.pause === 'function') stream.pause();
|
|
672
|
+
const destWritable = dest && !dest.destroyed && dest.writable && !dest.writableNeedDrain;
|
|
673
|
+
if (typeof stream.read === 'function' && destWritable) {
|
|
674
|
+
let chunk;
|
|
675
|
+
while ((chunk = stream.read()) !== null) dest.write(chunk);
|
|
676
|
+
}
|
|
677
|
+
} catch { /* remaining buffered bytes are best-effort */ }
|
|
678
|
+
try { stream.destroy(); } catch { /* already destroyed */ }
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
313
682
|
function releaseGenericChild(child) {
|
|
683
|
+
detachProtocolStdio(child);
|
|
314
684
|
try {
|
|
315
685
|
if (child.connected) child.disconnect();
|
|
316
686
|
} catch {
|
|
@@ -351,13 +721,75 @@ function superviseGenericChild(targetPath, extraArgs) {
|
|
|
351
721
|
child.once('error', () => finish(0));
|
|
352
722
|
}
|
|
353
723
|
|
|
354
|
-
|
|
355
|
-
|
|
724
|
+
function runGenericChild(targetPath, extraArgs, timeoutMs, manifestHook, options = {}) {
|
|
725
|
+
let child;
|
|
726
|
+
let childIdentity = null;
|
|
727
|
+
let reaped = false;
|
|
728
|
+
const reapOnce = () => {
|
|
729
|
+
if (reaped || !child) return;
|
|
730
|
+
reaped = true;
|
|
731
|
+
reapTree(child, childIdentity);
|
|
732
|
+
};
|
|
733
|
+
let destinationClosed = false;
|
|
734
|
+
let startClosedDestinationCleanup = () => {};
|
|
735
|
+
const sink = createProtocolSink({
|
|
736
|
+
stdout: options.stdout,
|
|
737
|
+
stderr: options.stderr,
|
|
738
|
+
beforeSourceDestroy: reapOnce,
|
|
739
|
+
onDestinationClose: () => {
|
|
740
|
+
destinationClosed = true;
|
|
741
|
+
startClosedDestinationCleanup();
|
|
742
|
+
},
|
|
743
|
+
});
|
|
744
|
+
sink.install();
|
|
356
745
|
return new Promise(resolve => {
|
|
746
|
+
const protocolDeadline = Date.now() + timeoutMs;
|
|
357
747
|
let terminal = false;
|
|
748
|
+
let settling = false;
|
|
358
749
|
let timer;
|
|
359
|
-
|
|
360
|
-
|
|
750
|
+
let closeCleanupStarted = false;
|
|
751
|
+
let closeCleanupTimer;
|
|
752
|
+
const closeGraceMs = Math.min(timeoutMs, WINDOWS_GENERIC_STARTUP_MS + PROTOCOL_STDIO_SETTLE_MS);
|
|
753
|
+
let detachHandlers = () => {};
|
|
754
|
+
const finish = (status) => {
|
|
755
|
+
if (closeCleanupTimer) {
|
|
756
|
+
clearTimeout(closeCleanupTimer);
|
|
757
|
+
closeCleanupTimer = undefined;
|
|
758
|
+
}
|
|
759
|
+
sink.uninstall();
|
|
760
|
+
resolve(status);
|
|
761
|
+
};
|
|
762
|
+
const finishClosedDestination = () => {
|
|
763
|
+
if (terminal) return;
|
|
764
|
+
terminal = true;
|
|
765
|
+
settling = false;
|
|
766
|
+
if (closeCleanupTimer) {
|
|
767
|
+
clearTimeout(closeCleanupTimer);
|
|
768
|
+
closeCleanupTimer = undefined;
|
|
769
|
+
}
|
|
770
|
+
detachHandlers();
|
|
771
|
+
reapOnce();
|
|
772
|
+
sink.abandonOutputs();
|
|
773
|
+
detachProtocolStdio(child);
|
|
774
|
+
releaseGenericChild(child);
|
|
775
|
+
finish(0);
|
|
776
|
+
};
|
|
777
|
+
startClosedDestinationCleanup = () => {
|
|
778
|
+
if (closeCleanupStarted || terminal) return;
|
|
779
|
+
closeCleanupStarted = true;
|
|
780
|
+
closeCleanupTimer = setTimeout(finishClosedDestination, closeGraceMs);
|
|
781
|
+
if (settling) return;
|
|
782
|
+
settling = true;
|
|
783
|
+
// Do not apply the leaked-descendant idle heuristic while the leader may
|
|
784
|
+
// still be cold-starting. The close timer provides the bounded fallback;
|
|
785
|
+
// normal post-exit settling retains the 80ms orphan detection.
|
|
786
|
+
void sink.settleOutputs(closeGraceMs, PROTOCOL_SOURCE_IDLE_MS, false).then(() => {
|
|
787
|
+
settling = false;
|
|
788
|
+
finishClosedDestination();
|
|
789
|
+
});
|
|
790
|
+
};
|
|
791
|
+
child = spawn(process.execPath, resolveGenericChildCommand(targetPath, extraArgs), {
|
|
792
|
+
stdio: resolveGenericChildStdio(),
|
|
361
793
|
env: {
|
|
362
794
|
...process.env,
|
|
363
795
|
OMC_SESSION_OWNER_PID: process.env.OMC_SESSION_OWNER_PID || String(process.ppid),
|
|
@@ -365,57 +797,89 @@ function runGenericChild(targetPath, extraArgs, timeoutMs, manifestHook) {
|
|
|
365
797
|
windowsHide: true,
|
|
366
798
|
detached: true,
|
|
367
799
|
});
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
const childIdentity = child.pid ? captureProcessStartIdentity(child.pid) : null;
|
|
800
|
+
sink.attachChild(child);
|
|
801
|
+
childIdentity = child.pid ? captureProcessStartIdentity(child.pid) : null;
|
|
371
802
|
|
|
372
803
|
// The generic child is detached into its own process group (POSIX). If the
|
|
373
804
|
// runner is terminated or cancelled BEFORE the inner timer fires (outer
|
|
374
805
|
// hooks.json timeout, Ctrl-C, parent kill), reap the tree so the detached
|
|
375
806
|
// hook cannot be orphaned — the exact failure class #3493 must not leave open.
|
|
376
|
-
|
|
807
|
+
detachHandlers = () => {
|
|
377
808
|
clearTimeout(timer);
|
|
378
809
|
for (const signal of RUNNER_TERMINATION_SIGNALS) process.off(signal, onRunnerSignal);
|
|
379
810
|
process.off('exit', onRunnerExit);
|
|
380
811
|
};
|
|
381
812
|
function onRunnerSignal() {
|
|
382
|
-
if (terminal) return;
|
|
813
|
+
if (terminal && !settling) return;
|
|
383
814
|
terminal = true;
|
|
815
|
+
settling = false;
|
|
384
816
|
detachHandlers();
|
|
385
|
-
|
|
817
|
+
reapOnce();
|
|
818
|
+
sink.abandonOutputs();
|
|
819
|
+
detachProtocolStdio(child);
|
|
820
|
+
sink.uninstall();
|
|
386
821
|
process.exit(0);
|
|
387
822
|
}
|
|
388
823
|
function onRunnerExit() {
|
|
389
|
-
if (terminal) return;
|
|
824
|
+
if (terminal && !settling) return;
|
|
390
825
|
terminal = true;
|
|
391
|
-
|
|
826
|
+
settling = false;
|
|
827
|
+
reapOnce();
|
|
828
|
+
sink.abandonOutputs();
|
|
829
|
+
detachProtocolStdio(child);
|
|
392
830
|
}
|
|
393
831
|
|
|
394
832
|
timer = setTimeout(() => {
|
|
395
833
|
if (terminal) return;
|
|
396
834
|
terminal = true;
|
|
397
835
|
detachHandlers();
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
836
|
+
reapOnce();
|
|
837
|
+
void writeTimeoutDiagnostic(targetPath, manifestHook, timeoutMs, sink).finally(() => {
|
|
838
|
+
sink.abandonOutputs();
|
|
839
|
+
detachProtocolStdio(child);
|
|
840
|
+
releaseGenericChild(child);
|
|
841
|
+
if (require.main === module) {
|
|
842
|
+
sink.closeDestinations();
|
|
843
|
+
}
|
|
844
|
+
finish(0);
|
|
845
|
+
});
|
|
406
846
|
}, timeoutMs);
|
|
407
847
|
|
|
408
848
|
child.once('exit', (code) => {
|
|
409
849
|
if (terminal) return;
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
850
|
+
if (destinationClosed) return;
|
|
851
|
+
settling = true;
|
|
852
|
+
clearTimeout(timer);
|
|
853
|
+
// Drain then close even on a clean hook exit. A detached descendant that
|
|
854
|
+
// inherited the child's stdout/stderr keeps the pipe readableEnded=false;
|
|
855
|
+
// leaving the forwarders attached would pin process.stdout and wedge EOF
|
|
856
|
+
// (#3920 success-path hang, outer harness timeout 124).
|
|
857
|
+
const remainingProtocolMs = Math.max(1, protocolDeadline - Date.now());
|
|
858
|
+
void sink.settleOutputs(remainingProtocolMs).then((complete) => {
|
|
859
|
+
settling = false;
|
|
860
|
+
if (terminal) return;
|
|
861
|
+
if (destinationClosed) {
|
|
862
|
+
finishClosedDestination();
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
detachHandlers();
|
|
866
|
+
reapOnce();
|
|
867
|
+
if (!complete && require.main === module) {
|
|
868
|
+
sink.closeDestinations();
|
|
869
|
+
releaseGenericChild(child);
|
|
870
|
+
return process.exit(1);
|
|
871
|
+
}
|
|
872
|
+
releaseGenericChild(child);
|
|
873
|
+
const childStatus = typeof code === 'number' ? code : 0;
|
|
874
|
+
finish(complete ? (sink.hasClosedDestination() ? 0 : childStatus) : 1);
|
|
875
|
+
});
|
|
413
876
|
});
|
|
414
877
|
child.once('error', () => {
|
|
415
878
|
if (terminal) return;
|
|
416
879
|
terminal = true;
|
|
417
880
|
detachHandlers();
|
|
418
|
-
|
|
881
|
+
detachProtocolStdio(child);
|
|
882
|
+
finish(0);
|
|
419
883
|
});
|
|
420
884
|
|
|
421
885
|
for (const signal of RUNNER_TERMINATION_SIGNALS) process.on(signal, onRunnerSignal);
|
|
@@ -423,6 +887,49 @@ function runGenericChild(targetPath, extraArgs, timeoutMs, manifestHook) {
|
|
|
423
887
|
});
|
|
424
888
|
}
|
|
425
889
|
|
|
890
|
+
// A Worker created with `stdin: true` owns a stdio MessagePort that stays
|
|
891
|
+
// referenced until its stdin reaches EOF, and the parent cannot release it from
|
|
892
|
+
// the outside: ending or destroying `worker.stdin` leaves the worker-side
|
|
893
|
+
// readable open, so the worker never exits. A hook that returns before touching
|
|
894
|
+
// stdin — every `OMC_SKIP_HOOKS` / `DISABLE_OMC=1` early return — therefore
|
|
895
|
+
// idled until the manifest budget expired and was reported as a bogus timeout
|
|
896
|
+
// while the payload sat unread (#4086).
|
|
897
|
+
//
|
|
898
|
+
// This bootstrap runs the hook unchanged and, once its module evaluation has
|
|
899
|
+
// settled, resumes stdin only when the hook provably never looked at it: not
|
|
900
|
+
// flowing and no reader attached. Resuming drains the already-delivered payload
|
|
901
|
+
// to EOF, which releases the port; destroying the stream instead would break
|
|
902
|
+
// the EOF path and pin the worker forever. A hook that does read stdin attaches
|
|
903
|
+
// its listeners synchronously inside `main()` before its first await, so it is
|
|
904
|
+
// always observed as a consumer and keeps the untouched behaviour. Only
|
|
905
|
+
// 'data'/'readable' count as a reader: Node attaches its own internal 'end'
|
|
906
|
+
// listener to a worker stdin.
|
|
907
|
+
//
|
|
908
|
+
// `process.argv[1]` is restored to the hook path so entry guards of the form
|
|
909
|
+
// `import.meta.url === pathToFileURL(process.argv[1]).href` still fire.
|
|
910
|
+
const WORKER_STDIN_BOOTSTRAP = `
|
|
911
|
+
const { workerData } = require('node:worker_threads');
|
|
912
|
+
const { fileURLToPath } = require('node:url');
|
|
913
|
+
const targetUrl = workerData.omcWorkerTarget;
|
|
914
|
+
process.argv[1] = fileURLToPath(targetUrl);
|
|
915
|
+
function drainUnreadStdin() {
|
|
916
|
+
const stdin = process.stdin;
|
|
917
|
+
if (!stdin || stdin.destroyed || stdin.readableEnded) return;
|
|
918
|
+
if (stdin.readableFlowing === true) return;
|
|
919
|
+
if (stdin.listenerCount('data') > 0 || stdin.listenerCount('readable') > 0) return;
|
|
920
|
+
try { stdin.resume(); } catch { /* already closed */ }
|
|
921
|
+
}
|
|
922
|
+
import(targetUrl).then(
|
|
923
|
+
() => { setImmediate(drainUnreadStdin); },
|
|
924
|
+
(error) => {
|
|
925
|
+
setImmediate(() => {
|
|
926
|
+
drainUnreadStdin();
|
|
927
|
+
throw error;
|
|
928
|
+
});
|
|
929
|
+
},
|
|
930
|
+
);
|
|
931
|
+
`;
|
|
932
|
+
|
|
426
933
|
async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
427
934
|
let worker;
|
|
428
935
|
let terminal = false;
|
|
@@ -430,6 +937,8 @@ async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
|
430
937
|
let discardOutput = false;
|
|
431
938
|
const stdout = [];
|
|
432
939
|
const stderr = [];
|
|
940
|
+
const sink = createProtocolSink();
|
|
941
|
+
sink.install();
|
|
433
942
|
|
|
434
943
|
const cleanupInput = () => {
|
|
435
944
|
if (!worker) return;
|
|
@@ -439,15 +948,12 @@ async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
|
439
948
|
const waitForOutputEnd = stream => stream.readableEnded
|
|
440
949
|
? Promise.resolve()
|
|
441
950
|
: new Promise(resolve => stream.once('end', resolve));
|
|
442
|
-
const writeBuffer = (stream, buffer) => new Promise(resolve => {
|
|
443
|
-
stream.write(buffer, () => resolve());
|
|
444
|
-
});
|
|
445
951
|
const forwardBuffers = async (workerError) => {
|
|
446
|
-
if (stdout.length) await
|
|
447
|
-
if (stderr.length) await
|
|
952
|
+
if (stdout.length) await sink.write(process.stdout, Buffer.concat(stdout));
|
|
953
|
+
if (stderr.length) await sink.write(process.stderr, Buffer.concat(stderr));
|
|
448
954
|
if (workerError) {
|
|
449
955
|
const diagnostic = workerError.stack || workerError.message || String(workerError);
|
|
450
|
-
await
|
|
956
|
+
await sink.write(process.stderr, Buffer.from(`${diagnostic}\n`));
|
|
451
957
|
}
|
|
452
958
|
};
|
|
453
959
|
const waitForWorkerOutput = () => Promise.all([
|
|
@@ -464,6 +970,7 @@ async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
|
464
970
|
cleanupInput();
|
|
465
971
|
if (worker) await waitForWorkerOutput();
|
|
466
972
|
await forwardBuffers(workerError);
|
|
973
|
+
sink.uninstall();
|
|
467
974
|
resolve(status);
|
|
468
975
|
};
|
|
469
976
|
|
|
@@ -477,16 +984,19 @@ async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
|
477
984
|
} catch {
|
|
478
985
|
// Termination is best-effort; the hook must still fail open.
|
|
479
986
|
}
|
|
480
|
-
writeTimeoutDiagnostic(targetPath, manifestHook, timeoutMs);
|
|
987
|
+
await writeTimeoutDiagnostic(targetPath, manifestHook, timeoutMs, sink);
|
|
988
|
+
sink.uninstall();
|
|
481
989
|
resolve(0);
|
|
482
990
|
}, timeoutMs);
|
|
483
991
|
|
|
484
992
|
try {
|
|
485
|
-
worker = new Worker(
|
|
993
|
+
worker = new Worker(WORKER_STDIN_BOOTSTRAP, {
|
|
994
|
+
eval: true,
|
|
486
995
|
stdin: true,
|
|
487
996
|
stdout: true,
|
|
488
997
|
stderr: true,
|
|
489
998
|
env: process.env,
|
|
999
|
+
workerData: { omcWorkerTarget: pathToFileURL(targetPath).href },
|
|
490
1000
|
});
|
|
491
1001
|
if (process.stdin.readableEnded) worker.stdin.end();
|
|
492
1002
|
else process.stdin.pipe(worker.stdin);
|
|
@@ -508,6 +1018,7 @@ async function runWorker(targetPath, manifestHook, timeoutMs) {
|
|
|
508
1018
|
}
|
|
509
1019
|
|
|
510
1020
|
if (require.main === module) {
|
|
1021
|
+
ensureProcessDestGuards();
|
|
511
1022
|
const target = process.argv[2];
|
|
512
1023
|
if (target === '--generic-child-supervisor') {
|
|
513
1024
|
const supervisedTarget = process.argv[3];
|
|
@@ -523,19 +1034,22 @@ if (require.main === module) {
|
|
|
523
1034
|
const extraArgs = process.argv.slice(3);
|
|
524
1035
|
const workerManifestHook = resolveWorkerTarget(resolution, extraArgs);
|
|
525
1036
|
if (workerManifestHook) {
|
|
526
|
-
const workerTimeoutMs =
|
|
1037
|
+
const workerTimeoutMs = resolveTrustedWorkerTimeoutMs(resolution.targetPath, workerManifestHook);
|
|
527
1038
|
runWorker(resolution.targetPath, workerManifestHook, workerTimeoutMs).then(status => {
|
|
528
1039
|
process.exitCode = status;
|
|
529
1040
|
});
|
|
530
1041
|
} else {
|
|
531
1042
|
const sessionEndManifestHook = resolveTrustedSessionEndTarget(resolution, extraArgs);
|
|
532
1043
|
if (sessionEndManifestHook) {
|
|
1044
|
+
// The shipped foreground budget stays 300ms unconditionally; only the
|
|
1045
|
+
// test harness may widen it, and only under NODE_ENV=test.
|
|
533
1046
|
const requestedTestTimeout = process.env.NODE_ENV === 'test'
|
|
534
1047
|
? Number(process.env.OMC_SESSION_END_TEST_FOREGROUND_TIMEOUT_MS)
|
|
535
1048
|
: NaN;
|
|
536
|
-
const
|
|
537
|
-
?
|
|
538
|
-
:
|
|
1049
|
+
const budgetMs = Number.isFinite(requestedTestTimeout) && requestedTestTimeout > 0
|
|
1050
|
+
? requestedTestTimeout
|
|
1051
|
+
: 300;
|
|
1052
|
+
const timeoutMs = Math.min(resolveGenericTimeoutMs(sessionEndManifestHook), budgetMs);
|
|
539
1053
|
runWorker(resolution.targetPath, sessionEndManifestHook, timeoutMs).then(status => {
|
|
540
1054
|
process.exitCode = status;
|
|
541
1055
|
});
|
|
@@ -553,13 +1067,28 @@ if (require.main === module) {
|
|
|
553
1067
|
|
|
554
1068
|
module.exports = {
|
|
555
1069
|
resolveInnerTimeoutMs,
|
|
556
|
-
|
|
1070
|
+
resolveTrustedWorkerTimeoutMs,
|
|
557
1071
|
resolveWorkerTarget,
|
|
558
1072
|
resolveHookTimeoutMs,
|
|
559
1073
|
resolveGenericTimeoutMs,
|
|
1074
|
+
resolveTimeoutCushionMs,
|
|
1075
|
+
desiredTimeoutCushionMs,
|
|
1076
|
+
platformTimeoutCushionMs,
|
|
560
1077
|
runGenericChild,
|
|
561
1078
|
resolveGenericChildCommand,
|
|
1079
|
+
resolveGenericChildStdio,
|
|
562
1080
|
releaseGenericChild,
|
|
1081
|
+
isClosedDestinationError,
|
|
563
1082
|
DEFAULT_GENERIC_TIMEOUT_MS,
|
|
1083
|
+
TIMEOUT_CUSHION_MS,
|
|
1084
|
+
WINDOWS_TIMEOUT_CUSHION_MS,
|
|
1085
|
+
WINDOWS_REAP_TIMEOUT_MS,
|
|
1086
|
+
MIN_HOOK_INNER_MS,
|
|
1087
|
+
MIN_HOOK_INNER_FRACTION,
|
|
1088
|
+
WINDOWS_GENERIC_STARTUP_MS,
|
|
1089
|
+
NESTED_OPERATION_TIMEOUT_MS,
|
|
1090
|
+
NESTED_OPERATION_MARGIN_MS,
|
|
1091
|
+
NESTED_INNER_FLOOR_MS,
|
|
1092
|
+
MAX_DECLARED_GENERIC_TIMEOUT_MS,
|
|
564
1093
|
resolveTrustedSessionEndTarget,
|
|
565
1094
|
};
|