@jstn-sdk/rcs 0.1.0 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -101
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +0 -101
- package/dist/agents/definitions.js.map +1 -1
- package/dist/blueprint/runtime.d.ts +52 -0
- package/dist/blueprint/runtime.d.ts.map +1 -0
- package/dist/{ralplan → blueprint}/runtime.js +19 -19
- package/dist/blueprint/runtime.js.map +1 -0
- package/dist/catalog/reader.d.ts.map +1 -1
- package/dist/catalog/reader.js +8 -2
- package/dist/catalog/reader.js.map +1 -1
- package/dist/catalog/schema.js +1 -1
- package/dist/catalog/schema.js.map +1 -1
- package/dist/cli/forge.d.ts +17 -0
- package/dist/cli/{ralph.d.ts.map → forge.d.ts.map} +1 -1
- package/dist/cli/{ralph.js → forge.js} +82 -82
- package/dist/cli/{ralph.js.map → forge.js.map} +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +20 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +2 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/star-prompt.js +2 -2
- package/dist/cli/star-prompt.js.map +1 -1
- package/dist/cli/state.js +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +3 -2
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/tmux-hook.d.ts.map +1 -1
- package/dist/cli/tmux-hook.js +9 -1
- package/dist/cli/tmux-hook.js.map +1 -1
- package/dist/config/generator.d.ts +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +1 -1
- package/dist/config/generator.js.map +1 -1
- package/dist/forge/contract.d.ts +17 -0
- package/dist/{ralph → forge}/contract.d.ts.map +1 -1
- package/dist/{ralph → forge}/contract.js +16 -16
- package/dist/{ralph → forge}/contract.js.map +1 -1
- package/dist/{ralph → forge}/persistence.d.ts +5 -5
- package/dist/{ralph → forge}/persistence.d.ts.map +1 -1
- package/dist/{ralph → forge}/persistence.js +7 -6
- package/dist/forge/persistence.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts +1 -1
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +37 -31
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +82 -14
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +8 -8
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +94 -64
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +9 -11
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +10 -21
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/task-size-detector.js +2 -2
- package/dist/hooks/task-size-detector.js.map +1 -1
- package/dist/hooks/triage-state.d.ts +1 -1
- package/dist/hooks/triage-state.js +1 -1
- package/dist/hud/colors.d.ts +2 -2
- package/dist/hud/colors.js +2 -2
- package/dist/hud/render.js +21 -21
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts +3 -3
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +18 -15
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/types.d.ts +6 -6
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +36 -2
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +1 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +4 -1
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts +4 -4
- package/dist/mcp/state-server.js +2 -2
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/modes/base.d.ts +2 -2
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +29 -26
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +7 -1
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +39 -6
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/pipeline/index.d.ts +7 -6
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +5 -4
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts +5 -5
- package/dist/pipeline/orchestrator.js +25 -25
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/blueprint.d.ts +25 -0
- package/dist/pipeline/stages/blueprint.d.ts.map +1 -0
- package/dist/pipeline/stages/{ralplan.js → blueprint.js} +16 -16
- package/dist/pipeline/stages/blueprint.js.map +1 -0
- package/dist/pipeline/stages/code-review.d.ts +2 -2
- package/dist/pipeline/stages/code-review.js +6 -6
- package/dist/pipeline/stages/code-review.js.map +1 -1
- package/dist/pipeline/stages/forge-verify.d.ts +50 -0
- package/dist/pipeline/stages/forge-verify.d.ts.map +1 -0
- package/dist/pipeline/stages/{ralph-verify.js → forge-verify.js} +21 -24
- package/dist/pipeline/stages/forge-verify.js.map +1 -0
- package/dist/pipeline/stages/team-exec.d.ts +1 -1
- package/dist/pipeline/stages/team-exec.js +19 -19
- package/dist/pipeline/stages/team-exec.js.map +1 -1
- package/dist/pipeline/types.d.ts +12 -12
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +1 -1
- package/dist/planning/artifacts.d.ts +3 -4
- package/dist/planning/artifacts.d.ts.map +1 -1
- package/dist/planning/artifacts.js +2 -3
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/question/policy.js +1 -1
- package/dist/runtime/bridge.d.ts.map +1 -1
- package/dist/runtime/bridge.js +70 -13
- package/dist/runtime/bridge.js.map +1 -1
- package/dist/scripts/codex-native-hook.js +30 -30
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/eval/eval-cross-server-party-flow.d.ts +3 -0
- package/dist/scripts/eval/eval-cross-server-party-flow.d.ts.map +1 -0
- package/dist/scripts/eval/eval-cross-server-party-flow.js +12 -0
- package/dist/scripts/eval/eval-cross-server-party-flow.js.map +1 -0
- package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts +3 -0
- package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts.map +1 -0
- package/dist/scripts/eval/eval-gui-onboarding-clarity.js +17 -0
- package/dist/scripts/eval/eval-gui-onboarding-clarity.js.map +1 -0
- package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts +3 -0
- package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts.map +1 -0
- package/dist/scripts/eval/eval-liveops-reward-loop-balance.js +12 -0
- package/dist/scripts/eval/eval-liveops-reward-loop-balance.js.map +1 -0
- package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts +3 -0
- package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts.map +1 -0
- package/dist/scripts/eval/eval-profile-datastore-recovery.js +17 -0
- package/dist/scripts/eval/eval-profile-datastore-recovery.js.map +1 -0
- package/dist/scripts/eval/eval-remote-contract-hardening.d.ts +3 -0
- package/dist/scripts/eval/eval-remote-contract-hardening.d.ts.map +1 -0
- package/dist/scripts/eval/eval-remote-contract-hardening.js +17 -0
- package/dist/scripts/eval/eval-remote-contract-hardening.js.map +1 -0
- package/dist/scripts/notify-fallback-watcher.js +140 -139
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/forge-session-resume.d.ts +23 -0
- package/dist/scripts/notify-hook/{ralph-session-resume.d.ts.map → forge-session-resume.d.ts.map} +1 -1
- package/dist/scripts/notify-hook/{ralph-session-resume.js → forge-session-resume.js} +37 -36
- package/dist/scripts/notify-hook/{ralph-session-resume.js.map → forge-session-resume.js.map} +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +34 -4
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/visual-verdict.js +3 -3
- package/dist/scripts/notify-hook.js +9 -9
- package/dist/scripts/run-test-files.js +1 -1
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/scripts/surface-taxonomy.d.ts +23 -0
- package/dist/scripts/surface-taxonomy.d.ts.map +1 -0
- package/dist/scripts/surface-taxonomy.js +271 -0
- package/dist/scripts/surface-taxonomy.js.map +1 -0
- package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js +5 -4
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/scripts/tmux-hook-engine.d.ts +1 -1
- package/dist/scripts/tmux-hook-engine.d.ts.map +1 -1
- package/dist/scripts/tmux-hook-engine.js +29 -20
- package/dist/scripts/tmux-hook-engine.js.map +1 -1
- package/dist/state/operations.d.ts +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +18 -18
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts +13 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +38 -17
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition.d.ts +6 -5
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +27 -15
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/team/contracts.d.ts +1 -1
- package/dist/team/contracts.js +2 -2
- package/dist/team/followup-planner.d.ts +2 -2
- package/dist/team/followup-planner.d.ts.map +1 -1
- package/dist/team/followup-planner.js +16 -14
- package/dist/team/followup-planner.js.map +1 -1
- package/dist/team/idle-nudge.d.ts.map +1 -1
- package/dist/team/idle-nudge.js +3 -2
- package/dist/team/idle-nudge.js.map +1 -1
- package/dist/team/leader-activity.js +1 -1
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +4 -1
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/orchestrator.js +4 -4
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/role-router.js +3 -3
- package/dist/team/role-router.js.map +1 -1
- package/dist/team/state/dispatch.d.ts.map +1 -1
- package/dist/team/state/dispatch.js +4 -1
- package/dist/team/state/dispatch.js.map +1 -1
- package/dist/team/tmux-session.d.ts +4 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +42 -9
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worktree.d.ts +1 -1
- package/dist/utils/platform-command.d.ts.map +1 -1
- package/dist/utils/platform-command.js +9 -0
- package/dist/utils/platform-command.js.map +1 -1
- package/dist/verification/verifier.d.ts +1 -1
- package/dist/verification/verifier.js +2 -2
- package/docs/STATE_MODEL.md +24 -24
- package/docs/agents.html +8 -16
- package/docs/archive/README.md +15 -0
- package/docs/{prompt-migration-changelog.md → archive/prompt-migration-changelog.md} +0 -11
- package/docs/{release-body-0.9.0.md → archive/release-body-0.9.0.md} +6 -24
- package/docs/{release-body-0.9.1.md → archive/release-body-0.9.1.md} +3 -3
- package/docs/codex-native-hooks.md +4 -4
- package/docs/contracts/forge-cancel-contract.md +20 -0
- package/docs/contracts/forge-state-contract.md +52 -0
- package/docs/contracts/multi-state-transition-contract.md +5 -5
- package/docs/contracts/multi-state-transition-review.md +3 -3
- package/docs/contracts/repo-aware-team-dag-decomposition.md +1 -1
- package/docs/contracts/rust-runtime-thin-adapter-contract.md +1 -1
- package/docs/contracts/team-startup-dispatch-latency.md +1 -1
- package/docs/getting-started.html +11 -1
- package/docs/guidance-schema.md +6 -3
- package/docs/index.html +55 -4
- package/docs/integrations.html +4 -3
- package/docs/issues/team-forge-followup-team.md +38 -0
- package/docs/openclaw-integration.md +2 -2
- package/docs/prompt-guidance-contract.md +11 -11
- package/docs/prs/{dev-deprecate-team-ralph.md → dev-deprecate-team-forge.md} +27 -27
- package/docs/prs/{dev-fix-ralph-live-pane-invariant.md → dev-fix-forge-live-pane-invariant.md} +7 -7
- package/docs/prs/{dev-team-ralph-workflow-positioning.md → dev-team-forge-workflow-positioning.md} +7 -7
- package/docs/qa/forge-persistence-gate.md +20 -0
- package/docs/qa/rust-runtime-thin-adapter-gate.md +31 -40
- package/docs/readme/README.de.md +14 -0
- package/docs/readme/README.el.md +14 -0
- package/docs/readme/README.es.md +14 -0
- package/docs/readme/README.fr.md +14 -0
- package/docs/readme/README.it.md +14 -0
- package/docs/readme/README.ja.md +14 -0
- package/docs/readme/README.ko.md +14 -0
- package/docs/readme/README.pl.md +14 -0
- package/docs/readme/README.pt.md +14 -0
- package/docs/readme/README.ru.md +14 -0
- package/docs/readme/README.tr.md +14 -0
- package/docs/readme/README.uk.md +14 -0
- package/docs/readme/README.vi.md +14 -0
- package/docs/readme/README.zh-TW.md +14 -0
- package/docs/readme/README.zh.md +14 -0
- package/docs/readme/rcs-cover.svg +75 -0
- package/docs/reference/canonical-vocabulary.md +106 -0
- package/docs/reference/forge-parity-matrix.md +26 -0
- package/docs/reference/forge-upstream-baseline.md +32 -0
- package/docs/reference/rcs-config-schema-routing.md +5 -5
- package/docs/reference/roblox-pre-action-protocol.md +4 -0
- package/docs/reference/roblox-taxonomy-migration-plan.md +46 -0
- package/docs/reference/roblox-workspace-standard.md +83 -0
- package/docs/reference/robloxstudio-mcp-compatibility.md +117 -0
- package/docs/reference/semantic-design-system.md +110 -0
- package/docs/reference/surface-map.md +131 -0
- package/docs/reference/team-allocation-rebalance-policy.md +1 -1
- package/docs/release-notes-v0.1.0.md +1 -1
- package/docs/release-notes-v0.1.1.md +49 -0
- package/docs/release-notes-v0.1.6.md +27 -0
- package/docs/reports/open-prs-dev-readiness-2026-04-09.md +2 -2
- package/docs/shared/agent-tiers.md +3 -3
- package/docs/skills.html +10 -12
- package/docs/troubleshooting.md +1 -1
- package/package.json +20 -13
- package/plugins/roblox-ai-os-creator-skills/.codex-plugin/plugin.json +1 -1
- package/plugins/roblox-ai-os-creator-skills/docs/reference/roblox-pre-action-protocol.md +4 -0
- package/plugins/roblox-ai-os-creator-skills/skills/ai-slop-cleaner/SKILL.md +14 -7
- package/plugins/roblox-ai-os-creator-skills/skills/analyze/SKILL.md +9 -2
- package/plugins/roblox-ai-os-creator-skills/skills/ask-claude/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/ask-gemini/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/autoforge/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/autopilot/SKILL.md +48 -41
- package/plugins/roblox-ai-os-creator-skills/skills/autoresearch/SKILL.md +8 -1
- package/plugins/roblox-ai-os-creator-skills/skills/blueprint/SKILL.md +227 -9
- package/plugins/roblox-ai-os-creator-skills/skills/blueprint-loop/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/blueprint-psych/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/blueprint-retention/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/blueprint-social/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/brief/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/brief-audience/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/brief-motivation/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/cancel/SKILL.md +59 -52
- package/plugins/roblox-ai-os-creator-skills/skills/code-review/SKILL.md +30 -24
- package/plugins/roblox-ai-os-creator-skills/skills/configure-notifications/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/crew/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/deep-interview/SKILL.md +25 -18
- package/plugins/roblox-ai-os-creator-skills/skills/doctor/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge/SKILL.md +174 -11
- package/plugins/roblox-ai-os-creator-skills/skills/forge-community/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-daily-loop/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-event-loop/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-fomo/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-mastery/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-progression/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-reward-loop/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/forge-status/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/help/SKILL.md +8 -1
- package/plugins/roblox-ai-os-creator-skills/skills/hud/SKILL.md +16 -9
- package/plugins/roblox-ai-os-creator-skills/skills/note/SKILL.md +8 -1
- package/plugins/roblox-ai-os-creator-skills/skills/pipeline/SKILL.md +18 -11
- package/plugins/roblox-ai-os-creator-skills/skills/plan/SKILL.md +36 -29
- package/plugins/roblox-ai-os-creator-skills/skills/rcs-setup/SKILL.md +8 -1
- package/plugins/roblox-ai-os-creator-skills/skills/security-review/SKILL.md +120 -236
- package/plugins/roblox-ai-os-creator-skills/skills/skill/SKILL.md +20 -13
- package/plugins/roblox-ai-os-creator-skills/skills/team/SKILL.md +17 -11
- package/plugins/roblox-ai-os-creator-skills/skills/trace/SKILL.md +7 -0
- package/plugins/roblox-ai-os-creator-skills/skills/ultraqa/SKILL.md +10 -3
- package/plugins/roblox-ai-os-creator-skills/skills/ultrawork/SKILL.md +19 -12
- package/plugins/roblox-ai-os-creator-skills/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
- package/plugins/roblox-ai-os-creator-skills/skills/visual-verdict/SKILL.md +9 -2
- package/plugins/roblox-ai-os-creator-skills/skills/wiki/SKILL.md +10 -3
- package/plugins/roblox-ai-os-creator-skills/skills/worker/SKILL.md +16 -7
- package/plugins/roblox-ai-os-creator-skills/templates/roblox/pre-action-plan.md +1 -0
- package/prompts/analyst.md +7 -0
- package/prompts/architect.md +11 -4
- package/prompts/build-fixer.md +7 -0
- package/prompts/code-reviewer.md +9 -2
- package/prompts/code-simplifier.md +4 -0
- package/prompts/critic.md +13 -6
- package/prompts/debugger.md +8 -1
- package/prompts/dependency-expert.md +8 -1
- package/prompts/designer.md +20 -10
- package/prompts/executor.md +7 -0
- package/prompts/explore-harness.md +7 -0
- package/prompts/explore.md +7 -0
- package/prompts/git-master.md +8 -1
- package/prompts/planner.md +10 -3
- package/prompts/researcher.md +7 -0
- package/prompts/security-reviewer.md +76 -92
- package/prompts/sisyphus-lite.md +7 -0
- package/prompts/team-executor.md +7 -0
- package/prompts/team-orchestrator.md +9 -2
- package/prompts/test-engineer.md +11 -3
- package/prompts/verifier.md +7 -0
- package/prompts/vision.md +9 -2
- package/prompts/writer.md +11 -4
- package/skills/.agents/skills/roblox-animations/SKILL.md +220 -0
- package/skills/.agents/skills/roblox-datastores/SKILL.md +219 -0
- package/skills/.agents/skills/roblox-gui/SKILL.md +192 -0
- package/skills/.agents/skills/roblox-monetization/SKILL.md +208 -0
- package/skills/.agents/skills/roblox-performance/SKILL.md +230 -0
- package/skills/.agents/skills/roblox-remote-events/SKILL.md +199 -0
- package/skills/.agents/skills/roblox-security/SKILL.md +236 -0
- package/skills/ai-slop-cleaner/SKILL.md +14 -7
- package/skills/analyze/SKILL.md +9 -2
- package/skills/ask-claude/SKILL.md +7 -0
- package/skills/ask-gemini/SKILL.md +7 -0
- package/skills/autoforge/SKILL.md +7 -0
- package/skills/autopilot/SKILL.md +48 -41
- package/skills/autoresearch/SKILL.md +8 -1
- package/skills/blueprint/SKILL.md +227 -9
- package/skills/blueprint-loop/SKILL.md +7 -0
- package/skills/blueprint-psych/SKILL.md +7 -0
- package/skills/blueprint-retention/SKILL.md +7 -0
- package/skills/blueprint-social/SKILL.md +7 -0
- package/skills/brief/SKILL.md +7 -0
- package/skills/brief-audience/SKILL.md +7 -0
- package/skills/brief-motivation/SKILL.md +7 -0
- package/skills/build-fix/SKILL.md +9 -2
- package/skills/cancel/SKILL.md +59 -52
- package/skills/code-review/SKILL.md +30 -24
- package/skills/configure-notifications/SKILL.md +7 -0
- package/skills/crew/SKILL.md +7 -0
- package/skills/deep-interview/SKILL.md +25 -18
- package/skills/deepsearch/SKILL.md +7 -0
- package/skills/doctor/SKILL.md +7 -0
- package/skills/ecomode/SKILL.md +9 -2
- package/skills/forge/SKILL.md +174 -11
- package/skills/forge-community/SKILL.md +7 -0
- package/skills/forge-daily-loop/SKILL.md +7 -0
- package/skills/forge-event-loop/SKILL.md +7 -0
- package/skills/forge-fomo/SKILL.md +7 -0
- package/skills/{ralph-init → forge-init}/SKILL.md +20 -13
- package/skills/forge-mastery/SKILL.md +7 -0
- package/skills/forge-progression/SKILL.md +7 -0
- package/skills/forge-reward-loop/SKILL.md +7 -0
- package/skills/forge-status/SKILL.md +7 -0
- package/skills/git-master/SKILL.md +7 -0
- package/skills/help/SKILL.md +8 -1
- package/skills/hud/SKILL.md +16 -9
- package/skills/note/SKILL.md +8 -1
- package/skills/pipeline/SKILL.md +18 -11
- package/skills/plan/SKILL.md +36 -29
- package/skills/rcs-setup/SKILL.md +8 -1
- package/skills/review/SKILL.md +7 -0
- package/skills/security-review/SKILL.md +120 -236
- package/skills/skill/SKILL.md +20 -13
- package/skills/skills-lock.json +47 -0
- package/skills/swarm/SKILL.md +8 -1
- package/skills/tdd/SKILL.md +7 -0
- package/skills/team/SKILL.md +17 -11
- package/skills/trace/SKILL.md +7 -0
- package/skills/ultraqa/SKILL.md +10 -3
- package/skills/ultrawork/SKILL.md +19 -12
- package/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
- package/skills/visual-verdict/SKILL.md +9 -2
- package/skills/web-clone/SKILL.md +14 -7
- package/skills/wiki/SKILL.md +10 -3
- package/skills/worker/SKILL.md +16 -7
- package/src/scripts/__tests__/codex-native-hook.test.ts +386 -319
- package/src/scripts/__tests__/run-test-files.test.ts +6 -4
- package/src/scripts/__tests__/verify-native-agents.test.ts +16 -16
- package/src/scripts/codex-native-hook.ts +34 -34
- package/src/scripts/eval/eval-cross-server-party-flow.ts +14 -0
- package/src/scripts/eval/eval-gui-onboarding-clarity.ts +20 -0
- package/src/scripts/eval/eval-liveops-reward-loop-balance.ts +14 -0
- package/src/scripts/eval/eval-profile-datastore-recovery.ts +20 -0
- package/src/scripts/eval/eval-remote-contract-hardening.ts +20 -0
- package/src/scripts/notify-fallback-watcher.ts +147 -146
- package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +24 -10
- package/src/scripts/notify-hook/{ralph-session-resume.ts → forge-session-resume.ts} +45 -43
- package/src/scripts/notify-hook/team-dispatch.ts +31 -4
- package/src/scripts/notify-hook/visual-verdict.ts +3 -3
- package/src/scripts/notify-hook.ts +10 -10
- package/src/scripts/run-test-files.ts +1 -1
- package/src/scripts/surface-taxonomy.ts +316 -0
- package/src/scripts/sync-plugin-mirror.ts +5 -4
- package/src/scripts/tmux-hook-engine.ts +31 -19
- package/templates/AGENTS.md +24 -15
- package/templates/catalog-manifest.json +5 -88
- package/templates/roblox/pre-action-plan.md +1 -0
- package/templates/roblox/robloxstudio-mcp.codex.json +18 -0
- package/templates/roblox/robloxstudio-mcp.windows.json +22 -0
- package/dist/adapt/__tests__/foundation.test.d.ts +0 -2
- package/dist/adapt/__tests__/foundation.test.d.ts.map +0 -1
- package/dist/adapt/__tests__/foundation.test.js +0 -171
- package/dist/adapt/__tests__/foundation.test.js.map +0 -1
- package/dist/adapt/__tests__/hermes.test.d.ts +0 -2
- package/dist/adapt/__tests__/hermes.test.d.ts.map +0 -1
- package/dist/adapt/__tests__/hermes.test.js +0 -137
- package/dist/adapt/__tests__/hermes.test.js.map +0 -1
- package/dist/agents/__tests__/definitions.test.d.ts +0 -2
- package/dist/agents/__tests__/definitions.test.d.ts.map +0 -1
- package/dist/agents/__tests__/definitions.test.js +0 -62
- package/dist/agents/__tests__/definitions.test.js.map +0 -1
- package/dist/agents/__tests__/native-config.test.d.ts +0 -2
- package/dist/agents/__tests__/native-config.test.d.ts.map +0 -1
- package/dist/agents/__tests__/native-config.test.js +0 -278
- package/dist/agents/__tests__/native-config.test.js.map +0 -1
- package/dist/autoresearch/__tests__/contracts.test.d.ts +0 -2
- package/dist/autoresearch/__tests__/contracts.test.d.ts.map +0 -1
- package/dist/autoresearch/__tests__/contracts.test.js +0 -127
- package/dist/autoresearch/__tests__/contracts.test.js.map +0 -1
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts +0 -2
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts.map +0 -1
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +0 -356
- package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +0 -1
- package/dist/autoresearch/__tests__/runtime.test.d.ts +0 -2
- package/dist/autoresearch/__tests__/runtime.test.d.ts.map +0 -1
- package/dist/autoresearch/__tests__/runtime.test.js +0 -218
- package/dist/autoresearch/__tests__/runtime.test.js.map +0 -1
- package/dist/autoresearch/__tests__/skill-validation.test.d.ts +0 -2
- package/dist/autoresearch/__tests__/skill-validation.test.d.ts.map +0 -1
- package/dist/autoresearch/__tests__/skill-validation.test.js +0 -91
- package/dist/autoresearch/__tests__/skill-validation.test.js.map +0 -1
- package/dist/catalog/__tests__/generator.test.d.ts +0 -2
- package/dist/catalog/__tests__/generator.test.d.ts.map +0 -1
- package/dist/catalog/__tests__/generator.test.js +0 -49
- package/dist/catalog/__tests__/generator.test.js.map +0 -1
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts +0 -2
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts.map +0 -1
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +0 -83
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +0 -1
- package/dist/catalog/__tests__/schema.test.d.ts +0 -2
- package/dist/catalog/__tests__/schema.test.d.ts.map +0 -1
- package/dist/catalog/__tests__/schema.test.js +0 -91
- package/dist/catalog/__tests__/schema.test.js.map +0 -1
- package/dist/cli/__tests__/adapt-help.test.d.ts +0 -2
- package/dist/cli/__tests__/adapt-help.test.d.ts.map +0 -1
- package/dist/cli/__tests__/adapt-help.test.js +0 -37
- package/dist/cli/__tests__/adapt-help.test.js.map +0 -1
- package/dist/cli/__tests__/adapt.test.d.ts +0 -2
- package/dist/cli/__tests__/adapt.test.d.ts.map +0 -1
- package/dist/cli/__tests__/adapt.test.js +0 -62
- package/dist/cli/__tests__/adapt.test.js.map +0 -1
- package/dist/cli/__tests__/agents-init.test.d.ts +0 -2
- package/dist/cli/__tests__/agents-init.test.d.ts.map +0 -1
- package/dist/cli/__tests__/agents-init.test.js +0 -184
- package/dist/cli/__tests__/agents-init.test.js.map +0 -1
- package/dist/cli/__tests__/agents.test.d.ts +0 -2
- package/dist/cli/__tests__/agents.test.d.ts.map +0 -1
- package/dist/cli/__tests__/agents.test.js +0 -137
- package/dist/cli/__tests__/agents.test.js.map +0 -1
- package/dist/cli/__tests__/ask.test.d.ts +0 -2
- package/dist/cli/__tests__/ask.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ask.test.js +0 -265
- package/dist/cli/__tests__/ask.test.js.map +0 -1
- package/dist/cli/__tests__/autoresearch-guided.test.d.ts +0 -2
- package/dist/cli/__tests__/autoresearch-guided.test.d.ts.map +0 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js +0 -365
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +0 -1
- package/dist/cli/__tests__/autoresearch.test.d.ts +0 -2
- package/dist/cli/__tests__/autoresearch.test.d.ts.map +0 -1
- package/dist/cli/__tests__/autoresearch.test.js +0 -203
- package/dist/cli/__tests__/autoresearch.test.js.map +0 -1
- package/dist/cli/__tests__/catalog-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/catalog-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/catalog-contract.test.js +0 -18
- package/dist/cli/__tests__/catalog-contract.test.js.map +0 -1
- package/dist/cli/__tests__/cleanup.test.d.ts +0 -2
- package/dist/cli/__tests__/cleanup.test.d.ts.map +0 -1
- package/dist/cli/__tests__/cleanup.test.js +0 -419
- package/dist/cli/__tests__/cleanup.test.js.map +0 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.d.ts +0 -2
- package/dist/cli/__tests__/codex-plugin-layout.test.d.ts.map +0 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +0 -210
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +0 -1
- package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +0 -2
- package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +0 -1
- package/dist/cli/__tests__/doctor-context-window-warning.test.js +0 -122
- package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +0 -1
- package/dist/cli/__tests__/doctor-invalid-config.test.d.ts +0 -2
- package/dist/cli/__tests__/doctor-invalid-config.test.d.ts.map +0 -1
- package/dist/cli/__tests__/doctor-invalid-config.test.js +0 -52
- package/dist/cli/__tests__/doctor-invalid-config.test.js.map +0 -1
- package/dist/cli/__tests__/doctor-team.test.d.ts +0 -2
- package/dist/cli/__tests__/doctor-team.test.d.ts.map +0 -1
- package/dist/cli/__tests__/doctor-team.test.js +0 -299
- package/dist/cli/__tests__/doctor-team.test.js.map +0 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +0 -2
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +0 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +0 -438
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +0 -1
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts +0 -2
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +0 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js +0 -52
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +0 -1
- package/dist/cli/__tests__/exec.test.d.ts +0 -2
- package/dist/cli/__tests__/exec.test.d.ts.map +0 -1
- package/dist/cli/__tests__/exec.test.js +0 -213
- package/dist/cli/__tests__/exec.test.js.map +0 -1
- package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts +0 -2
- package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts.map +0 -1
- package/dist/cli/__tests__/explore-windows-diagnostics.test.js +0 -17
- package/dist/cli/__tests__/explore-windows-diagnostics.test.js.map +0 -1
- package/dist/cli/__tests__/explore.test.d.ts +0 -2
- package/dist/cli/__tests__/explore.test.d.ts.map +0 -1
- package/dist/cli/__tests__/explore.test.js +0 -1090
- package/dist/cli/__tests__/explore.test.js.map +0 -1
- package/dist/cli/__tests__/hooks.test.d.ts +0 -2
- package/dist/cli/__tests__/hooks.test.d.ts.map +0 -1
- package/dist/cli/__tests__/hooks.test.js +0 -55
- package/dist/cli/__tests__/hooks.test.js.map +0 -1
- package/dist/cli/__tests__/index.test.d.ts +0 -2
- package/dist/cli/__tests__/index.test.d.ts.map +0 -1
- package/dist/cli/__tests__/index.test.js +0 -2259
- package/dist/cli/__tests__/index.test.js.map +0 -1
- package/dist/cli/__tests__/launch-fallback.test.d.ts +0 -2
- package/dist/cli/__tests__/launch-fallback.test.d.ts.map +0 -1
- package/dist/cli/__tests__/launch-fallback.test.js +0 -661
- package/dist/cli/__tests__/launch-fallback.test.js.map +0 -1
- package/dist/cli/__tests__/lifecycle-notifications.test.d.ts +0 -2
- package/dist/cli/__tests__/lifecycle-notifications.test.d.ts.map +0 -1
- package/dist/cli/__tests__/lifecycle-notifications.test.js +0 -48
- package/dist/cli/__tests__/lifecycle-notifications.test.js.map +0 -1
- package/dist/cli/__tests__/list.test.d.ts +0 -2
- package/dist/cli/__tests__/list.test.d.ts.map +0 -1
- package/dist/cli/__tests__/list.test.js +0 -38
- package/dist/cli/__tests__/list.test.js.map +0 -1
- package/dist/cli/__tests__/mcp-parity.test.d.ts +0 -2
- package/dist/cli/__tests__/mcp-parity.test.d.ts.map +0 -1
- package/dist/cli/__tests__/mcp-parity.test.js +0 -228
- package/dist/cli/__tests__/mcp-parity.test.js.map +0 -1
- package/dist/cli/__tests__/mcp-serve.test.d.ts +0 -2
- package/dist/cli/__tests__/mcp-serve.test.d.ts.map +0 -1
- package/dist/cli/__tests__/mcp-serve.test.js +0 -64
- package/dist/cli/__tests__/mcp-serve.test.js.map +0 -1
- package/dist/cli/__tests__/native-assets.test.d.ts +0 -2
- package/dist/cli/__tests__/native-assets.test.d.ts.map +0 -1
- package/dist/cli/__tests__/native-assets.test.js +0 -308
- package/dist/cli/__tests__/native-assets.test.js.map +0 -1
- package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/native-hook-dispatch-contract.test.js +0 -11
- package/dist/cli/__tests__/native-hook-dispatch-contract.test.js.map +0 -1
- package/dist/cli/__tests__/nested-help-routing.test.d.ts +0 -2
- package/dist/cli/__tests__/nested-help-routing.test.d.ts.map +0 -1
- package/dist/cli/__tests__/nested-help-routing.test.js +0 -96
- package/dist/cli/__tests__/nested-help-routing.test.js.map +0 -1
- package/dist/cli/__tests__/package-bin-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/package-bin-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +0 -177
- package/dist/cli/__tests__/package-bin-contract.test.js.map +0 -1
- package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts +0 -3
- package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts.map +0 -1
- package/dist/cli/__tests__/packaged-explore-harness-lock.js +0 -67
- package/dist/cli/__tests__/packaged-explore-harness-lock.js.map +0 -1
- package/dist/cli/__tests__/packaged-script-resolution.test.d.ts +0 -2
- package/dist/cli/__tests__/packaged-script-resolution.test.d.ts.map +0 -1
- package/dist/cli/__tests__/packaged-script-resolution.test.js +0 -19
- package/dist/cli/__tests__/packaged-script-resolution.test.js.map +0 -1
- package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts +0 -2
- package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts.map +0 -1
- package/dist/cli/__tests__/prompt-skill-sanitization.test.js +0 -48
- package/dist/cli/__tests__/prompt-skill-sanitization.test.js.map +0 -1
- package/dist/cli/__tests__/question.test.d.ts +0 -2
- package/dist/cli/__tests__/question.test.d.ts.map +0 -1
- package/dist/cli/__tests__/question.test.js +0 -633
- package/dist/cli/__tests__/question.test.js.map +0 -1
- package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ralph-deslop-contract.test.js +0 -28
- package/dist/cli/__tests__/ralph-deslop-contract.test.js.map +0 -1
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +0 -2
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +0 -24
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +0 -1
- package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts +0 -2
- package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ralph-prd-smoke.test.js +0 -167
- package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +0 -1
- package/dist/cli/__tests__/ralph.test.d.ts +0 -2
- package/dist/cli/__tests__/ralph.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ralph.test.js +0 -256
- package/dist/cli/__tests__/ralph.test.js.map +0 -1
- package/dist/cli/__tests__/resume.test.d.ts +0 -2
- package/dist/cli/__tests__/resume.test.d.ts.map +0 -1
- package/dist/cli/__tests__/resume.test.js +0 -84
- package/dist/cli/__tests__/resume.test.js.map +0 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.d.ts +0 -2
- package/dist/cli/__tests__/session-scoped-runtime.test.d.ts.map +0 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +0 -146
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +0 -1
- package/dist/cli/__tests__/session-search-help.test.d.ts +0 -2
- package/dist/cli/__tests__/session-search-help.test.d.ts.map +0 -1
- package/dist/cli/__tests__/session-search-help.test.js +0 -76
- package/dist/cli/__tests__/session-search-help.test.js.map +0 -1
- package/dist/cli/__tests__/session-search.test.d.ts +0 -2
- package/dist/cli/__tests__/session-search.test.d.ts.map +0 -1
- package/dist/cli/__tests__/session-search.test.js +0 -77
- package/dist/cli/__tests__/session-search.test.js.map +0 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +0 -457
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +0 -1
- package/dist/cli/__tests__/setup-gh-star.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-gh-star.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-gh-star.test.js +0 -67
- package/dist/cli/__tests__/setup-gh-star.test.js.map +0 -1
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +0 -189
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +0 -1
- package/dist/cli/__tests__/setup-install-mode.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-install-mode.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +0 -873
- package/dist/cli/__tests__/setup-install-mode.test.js.map +0 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +0 -191
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +0 -1
- package/dist/cli/__tests__/setup-refresh.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-refresh.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-refresh.test.js +0 -591
- package/dist/cli/__tests__/setup-refresh.test.js.map +0 -1
- package/dist/cli/__tests__/setup-scope.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-scope.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-scope.test.js +0 -340
- package/dist/cli/__tests__/setup-scope.test.js.map +0 -1
- package/dist/cli/__tests__/setup-skill-validation.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-skill-validation.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-skill-validation.test.js +0 -44
- package/dist/cli/__tests__/setup-skill-validation.test.js.map +0 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +0 -2
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +0 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +0 -295
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +0 -1
- package/dist/cli/__tests__/sidecar.test.d.ts +0 -2
- package/dist/cli/__tests__/sidecar.test.d.ts.map +0 -1
- package/dist/cli/__tests__/sidecar.test.js +0 -24
- package/dist/cli/__tests__/sidecar.test.js.map +0 -1
- package/dist/cli/__tests__/sparkshell-cli.test.d.ts +0 -2
- package/dist/cli/__tests__/sparkshell-cli.test.d.ts.map +0 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +0 -400
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +0 -1
- package/dist/cli/__tests__/sparkshell-packaging.test.d.ts +0 -2
- package/dist/cli/__tests__/sparkshell-packaging.test.d.ts.map +0 -1
- package/dist/cli/__tests__/sparkshell-packaging.test.js +0 -74
- package/dist/cli/__tests__/sparkshell-packaging.test.js.map +0 -1
- package/dist/cli/__tests__/star-prompt.test.d.ts +0 -2
- package/dist/cli/__tests__/star-prompt.test.d.ts.map +0 -1
- package/dist/cli/__tests__/star-prompt.test.js +0 -172
- package/dist/cli/__tests__/star-prompt.test.js.map +0 -1
- package/dist/cli/__tests__/state.test.d.ts +0 -2
- package/dist/cli/__tests__/state.test.d.ts.map +0 -1
- package/dist/cli/__tests__/state.test.js +0 -46
- package/dist/cli/__tests__/state.test.js.map +0 -1
- package/dist/cli/__tests__/team-decompose.test.d.ts +0 -2
- package/dist/cli/__tests__/team-decompose.test.d.ts.map +0 -1
- package/dist/cli/__tests__/team-decompose.test.js +0 -133
- package/dist/cli/__tests__/team-decompose.test.js.map +0 -1
- package/dist/cli/__tests__/team.test.d.ts +0 -2
- package/dist/cli/__tests__/team.test.d.ts.map +0 -1
- package/dist/cli/__tests__/team.test.js +0 -1820
- package/dist/cli/__tests__/team.test.js.map +0 -1
- package/dist/cli/__tests__/uninstall.test.d.ts +0 -2
- package/dist/cli/__tests__/uninstall.test.d.ts.map +0 -1
- package/dist/cli/__tests__/uninstall.test.js +0 -766
- package/dist/cli/__tests__/uninstall.test.js.map +0 -1
- package/dist/cli/__tests__/update.test.d.ts +0 -2
- package/dist/cli/__tests__/update.test.d.ts.map +0 -1
- package/dist/cli/__tests__/update.test.js +0 -589
- package/dist/cli/__tests__/update.test.js.map +0 -1
- package/dist/cli/__tests__/version-sync-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/version-sync-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/version-sync-contract.test.js +0 -41
- package/dist/cli/__tests__/version-sync-contract.test.js.map +0 -1
- package/dist/cli/__tests__/version.test.d.ts +0 -2
- package/dist/cli/__tests__/version.test.d.ts.map +0 -1
- package/dist/cli/__tests__/version.test.js +0 -21
- package/dist/cli/__tests__/version.test.js.map +0 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts +0 -2
- package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts.map +0 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +0 -31
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +0 -1
- package/dist/cli/ralph.d.ts +0 -17
- package/dist/compat/__tests__/doctor-contract.test.d.ts +0 -2
- package/dist/compat/__tests__/doctor-contract.test.d.ts.map +0 -1
- package/dist/compat/__tests__/doctor-contract.test.js +0 -108
- package/dist/compat/__tests__/doctor-contract.test.js.map +0 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.d.ts +0 -2
- package/dist/compat/__tests__/rust-runtime-compat.test.d.ts.map +0 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js +0 -218
- package/dist/compat/__tests__/rust-runtime-compat.test.js.map +0 -1
- package/dist/config/__tests__/codex-hooks.test.d.ts +0 -2
- package/dist/config/__tests__/codex-hooks.test.d.ts.map +0 -1
- package/dist/config/__tests__/codex-hooks.test.js +0 -77
- package/dist/config/__tests__/codex-hooks.test.js.map +0 -1
- package/dist/config/__tests__/generator-idempotent.test.d.ts +0 -2
- package/dist/config/__tests__/generator-idempotent.test.d.ts.map +0 -1
- package/dist/config/__tests__/generator-idempotent.test.js +0 -882
- package/dist/config/__tests__/generator-idempotent.test.js.map +0 -1
- package/dist/config/__tests__/generator-notify.test.d.ts +0 -2
- package/dist/config/__tests__/generator-notify.test.d.ts.map +0 -1
- package/dist/config/__tests__/generator-notify.test.js +0 -343
- package/dist/config/__tests__/generator-notify.test.js.map +0 -1
- package/dist/config/__tests__/generator-status-line-presets.test.d.ts +0 -2
- package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +0 -1
- package/dist/config/__tests__/generator-status-line-presets.test.js +0 -203
- package/dist/config/__tests__/generator-status-line-presets.test.js.map +0 -1
- package/dist/config/__tests__/mcp-registry.test.d.ts +0 -2
- package/dist/config/__tests__/mcp-registry.test.d.ts.map +0 -1
- package/dist/config/__tests__/mcp-registry.test.js +0 -190
- package/dist/config/__tests__/mcp-registry.test.js.map +0 -1
- package/dist/config/__tests__/models.test.d.ts +0 -2
- package/dist/config/__tests__/models.test.d.ts.map +0 -1
- package/dist/config/__tests__/models.test.js +0 -224
- package/dist/config/__tests__/models.test.js.map +0 -1
- package/dist/config/__tests__/wiki-config-contract.test.d.ts +0 -2
- package/dist/config/__tests__/wiki-config-contract.test.d.ts.map +0 -1
- package/dist/config/__tests__/wiki-config-contract.test.js +0 -19
- package/dist/config/__tests__/wiki-config-contract.test.js.map +0 -1
- package/dist/document-refresh/__tests__/enforcer.test.d.ts +0 -2
- package/dist/document-refresh/__tests__/enforcer.test.d.ts.map +0 -1
- package/dist/document-refresh/__tests__/enforcer.test.js +0 -128
- package/dist/document-refresh/__tests__/enforcer.test.js.map +0 -1
- package/dist/hooks/__tests__/agents-overlay.test.d.ts +0 -8
- package/dist/hooks/__tests__/agents-overlay.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +0 -644
- package/dist/hooks/__tests__/agents-overlay.test.js.map +0 -1
- package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/analyze-routing-contract.test.js +0 -45
- package/dist/hooks/__tests__/analyze-routing-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/analyze-skill-contract.test.js +0 -48
- package/dist/hooks/__tests__/analyze-skill-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts +0 -2
- package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/anti-slop-workflow.test.js +0 -146
- package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +0 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +0 -37
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/clawhip-event-contract.test.js +0 -37
- package/dist/hooks/__tests__/clawhip-event-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/code-review-skill-contract.test.js +0 -56
- package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/codebase-map.test.d.ts +0 -8
- package/dist/hooks/__tests__/codebase-map.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/codebase-map.test.js +0 -218
- package/dist/hooks/__tests__/codebase-map.test.js.map +0 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +0 -18
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +0 -234
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +0 -1
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.js +0 -20
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +0 -213
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js +0 -43
- package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js +0 -38
- package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/explore-routing.test.d.ts +0 -2
- package/dist/hooks/__tests__/explore-routing.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/explore-routing.test.js +0 -43
- package/dist/hooks/__tests__/explore-routing.test.js.map +0 -1
- package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js +0 -69
- package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/keyword-detector.test.d.ts +0 -2
- package/dist/hooks/__tests__/keyword-detector.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +0 -1716
- package/dist/hooks/__tests__/keyword-detector.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +0 -3898
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +0 -786
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +0 -2397
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +0 -160
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +0 -1178
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.d.ts +0 -9
- package/dist/hooks/__tests__/notify-hook-modules.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.js +0 -529
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js +0 -14
- package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +0 -682
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts +0 -9
- package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js +0 -255
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +0 -162
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +0 -301
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +0 -1510
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +0 -2879
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +0 -228
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +0 -35
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +0 -1589
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts +0 -10
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +0 -0
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +0 -11
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +0 -266
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +0 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +0 -2
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +0 -895
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +0 -1
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js +0 -61
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +0 -2
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js +0 -40
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.js +0 -11
- package/dist/hooks/__tests__/prompt-guidance-catalog.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js +0 -38
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +0 -48
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js +0 -11
- package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts +0 -5
- package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-test-helpers.js +0 -34
- package/dist/hooks/__tests__/prompt-guidance-test-helpers.js.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +0 -65
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js +0 -38
- package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-refactor-contract.test.js +0 -22
- package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/prompt-team-routing.test.d.ts +0 -2
- package/dist/hooks/__tests__/prompt-team-routing.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/prompt-team-routing.test.js +0 -49
- package/dist/hooks/__tests__/prompt-team-routing.test.js.map +0 -1
- package/dist/hooks/__tests__/session.test.d.ts +0 -2
- package/dist/hooks/__tests__/session.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/session.test.js +0 -322
- package/dist/hooks/__tests__/session.test.js.map +0 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/skill-guidance-contract.test.js +0 -29
- package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/task-size-detector.test.d.ts +0 -2
- package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/task-size-detector.test.js +0 -330
- package/dist/hooks/__tests__/task-size-detector.test.js.map +0 -1
- package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js +0 -28
- package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +0 -1
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +0 -2
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +0 -24
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +0 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts +0 -2
- package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +0 -403
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +0 -1
- package/dist/hooks/__tests__/triage-config.test.d.ts +0 -2
- package/dist/hooks/__tests__/triage-config.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/triage-config.test.js +0 -211
- package/dist/hooks/__tests__/triage-config.test.js.map +0 -1
- package/dist/hooks/__tests__/triage-heuristic.test.d.ts +0 -2
- package/dist/hooks/__tests__/triage-heuristic.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/triage-heuristic.test.js +0 -285
- package/dist/hooks/__tests__/triage-heuristic.test.js.map +0 -1
- package/dist/hooks/__tests__/triage-state.test.d.ts +0 -2
- package/dist/hooks/__tests__/triage-state.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/triage-state.test.js +0 -426
- package/dist/hooks/__tests__/triage-state.test.js.map +0 -1
- package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts +0 -2
- package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/visual-ralph-skill.test.js +0 -44
- package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +0 -1
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +0 -2
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/visual-verdict-loop.test.js +0 -35
- package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +0 -1
- package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts +0 -2
- package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts.map +0 -1
- package/dist/hooks/__tests__/wiki-docs-contract.test.js +0 -34
- package/dist/hooks/__tests__/wiki-docs-contract.test.js.map +0 -1
- package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +0 -2
- package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +0 -1
- package/dist/hooks/code-simplifier/__tests__/index.test.js +0 -187
- package/dist/hooks/code-simplifier/__tests__/index.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js +0 -242
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/events.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/events.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/events.test.js +0 -125
- package/dist/hooks/extensibility/__tests__/events.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js +0 -153
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/loader.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/loader.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/loader.test.js +0 -254
- package/dist/hooks/extensibility/__tests__/loader.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/logging.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/logging.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/logging.test.js +0 -74
- package/dist/hooks/extensibility/__tests__/logging.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.js +0 -202
- package/dist/hooks/extensibility/__tests__/plugin-runner.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/runtime.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/runtime.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/runtime.test.js +0 -198
- package/dist/hooks/extensibility/__tests__/runtime.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js +0 -32
- package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js.map +0 -1
- package/dist/hooks/extensibility/__tests__/sdk.test.d.ts +0 -2
- package/dist/hooks/extensibility/__tests__/sdk.test.d.ts.map +0 -1
- package/dist/hooks/extensibility/__tests__/sdk.test.js +0 -479
- package/dist/hooks/extensibility/__tests__/sdk.test.js.map +0 -1
- package/dist/hud/__tests__/authority.test.d.ts +0 -2
- package/dist/hud/__tests__/authority.test.d.ts.map +0 -1
- package/dist/hud/__tests__/authority.test.js +0 -56
- package/dist/hud/__tests__/authority.test.js.map +0 -1
- package/dist/hud/__tests__/colors.test.d.ts +0 -2
- package/dist/hud/__tests__/colors.test.d.ts.map +0 -1
- package/dist/hud/__tests__/colors.test.js +0 -92
- package/dist/hud/__tests__/colors.test.js.map +0 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.d.ts +0 -10
- package/dist/hud/__tests__/hud-tmux-injection.test.d.ts.map +0 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +0 -150
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +0 -1
- package/dist/hud/__tests__/index.test.d.ts +0 -2
- package/dist/hud/__tests__/index.test.d.ts.map +0 -1
- package/dist/hud/__tests__/index.test.js +0 -180
- package/dist/hud/__tests__/index.test.js.map +0 -1
- package/dist/hud/__tests__/reconcile.test.d.ts +0 -2
- package/dist/hud/__tests__/reconcile.test.d.ts.map +0 -1
- package/dist/hud/__tests__/reconcile.test.js +0 -125
- package/dist/hud/__tests__/reconcile.test.js.map +0 -1
- package/dist/hud/__tests__/render.test.d.ts +0 -2
- package/dist/hud/__tests__/render.test.d.ts.map +0 -1
- package/dist/hud/__tests__/render.test.js +0 -573
- package/dist/hud/__tests__/render.test.js.map +0 -1
- package/dist/hud/__tests__/state.test.d.ts +0 -2
- package/dist/hud/__tests__/state.test.d.ts.map +0 -1
- package/dist/hud/__tests__/state.test.js +0 -618
- package/dist/hud/__tests__/state.test.js.map +0 -1
- package/dist/hud/__tests__/types.test.d.ts +0 -2
- package/dist/hud/__tests__/types.test.d.ts.map +0 -1
- package/dist/hud/__tests__/types.test.js +0 -79
- package/dist/hud/__tests__/types.test.js.map +0 -1
- package/dist/hud/__tests__/watch.test.d.ts +0 -2
- package/dist/hud/__tests__/watch.test.d.ts.map +0 -1
- package/dist/hud/__tests__/watch.test.js +0 -63
- package/dist/hud/__tests__/watch.test.js.map +0 -1
- package/dist/mcp/__tests__/bootstrap.test.d.ts +0 -2
- package/dist/mcp/__tests__/bootstrap.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/bootstrap.test.js +0 -207
- package/dist/mcp/__tests__/bootstrap.test.js.map +0 -1
- package/dist/mcp/__tests__/code-intel-server.test.d.ts +0 -2
- package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/code-intel-server.test.js +0 -70
- package/dist/mcp/__tests__/code-intel-server.test.js.map +0 -1
- package/dist/mcp/__tests__/memory-server.test.d.ts +0 -2
- package/dist/mcp/__tests__/memory-server.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/memory-server.test.js +0 -36
- package/dist/mcp/__tests__/memory-server.test.js.map +0 -1
- package/dist/mcp/__tests__/memory-validation.test.d.ts +0 -2
- package/dist/mcp/__tests__/memory-validation.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/memory-validation.test.js +0 -29
- package/dist/mcp/__tests__/memory-validation.test.js.map +0 -1
- package/dist/mcp/__tests__/path-traversal.test.d.ts +0 -2
- package/dist/mcp/__tests__/path-traversal.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/path-traversal.test.js +0 -83
- package/dist/mcp/__tests__/path-traversal.test.js.map +0 -1
- package/dist/mcp/__tests__/server-lifecycle.test.d.ts +0 -2
- package/dist/mcp/__tests__/server-lifecycle.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js +0 -260
- package/dist/mcp/__tests__/server-lifecycle.test.js.map +0 -1
- package/dist/mcp/__tests__/state-paths.test.d.ts +0 -2
- package/dist/mcp/__tests__/state-paths.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/state-paths.test.js +0 -209
- package/dist/mcp/__tests__/state-paths.test.js.map +0 -1
- package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts +0 -2
- package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js +0 -109
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +0 -1
- package/dist/mcp/__tests__/state-server-schema.test.d.ts +0 -2
- package/dist/mcp/__tests__/state-server-schema.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/state-server-schema.test.js +0 -29
- package/dist/mcp/__tests__/state-server-schema.test.js.map +0 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.d.ts +0 -2
- package/dist/mcp/__tests__/state-server-team-tools.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.js +0 -35
- package/dist/mcp/__tests__/state-server-team-tools.test.js.map +0 -1
- package/dist/mcp/__tests__/state-server.test.d.ts +0 -2
- package/dist/mcp/__tests__/state-server.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/state-server.test.js +0 -965
- package/dist/mcp/__tests__/state-server.test.js.map +0 -1
- package/dist/mcp/__tests__/trace-server.test.d.ts +0 -2
- package/dist/mcp/__tests__/trace-server.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/trace-server.test.js +0 -119
- package/dist/mcp/__tests__/trace-server.test.js.map +0 -1
- package/dist/mcp/__tests__/wiki-server.test.d.ts +0 -2
- package/dist/mcp/__tests__/wiki-server.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/wiki-server.test.js +0 -30
- package/dist/mcp/__tests__/wiki-server.test.js.map +0 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts +0 -2
- package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts.map +0 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.js +0 -123
- package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +0 -1
- package/dist/modes/__tests__/base-multi-state-compat.test.d.ts +0 -2
- package/dist/modes/__tests__/base-multi-state-compat.test.d.ts.map +0 -1
- package/dist/modes/__tests__/base-multi-state-compat.test.js +0 -38
- package/dist/modes/__tests__/base-multi-state-compat.test.js.map +0 -1
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts +0 -2
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +0 -1
- package/dist/modes/__tests__/base-ralph-contract.test.js +0 -64
- package/dist/modes/__tests__/base-ralph-contract.test.js.map +0 -1
- package/dist/modes/__tests__/base-session-scope.test.d.ts +0 -2
- package/dist/modes/__tests__/base-session-scope.test.d.ts.map +0 -1
- package/dist/modes/__tests__/base-session-scope.test.js +0 -98
- package/dist/modes/__tests__/base-session-scope.test.js.map +0 -1
- package/dist/modes/__tests__/base-tmux-pane.test.d.ts +0 -2
- package/dist/modes/__tests__/base-tmux-pane.test.d.ts.map +0 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js +0 -39
- package/dist/modes/__tests__/base-tmux-pane.test.js.map +0 -1
- package/dist/notifications/__tests__/config.test.d.ts +0 -2
- package/dist/notifications/__tests__/config.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/config.test.js +0 -269
- package/dist/notifications/__tests__/config.test.js.map +0 -1
- package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts +0 -2
- package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/custom-alias-enablement.test.js +0 -84
- package/dist/notifications/__tests__/custom-alias-enablement.test.js.map +0 -1
- package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +0 -5
- package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/dispatch-cooldown.test.js +0 -100
- package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +0 -1
- package/dist/notifications/__tests__/dispatcher.test.d.ts +0 -2
- package/dist/notifications/__tests__/dispatcher.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/dispatcher.test.js +0 -202
- package/dist/notifications/__tests__/dispatcher.test.js.map +0 -1
- package/dist/notifications/__tests__/formatter.test.d.ts +0 -2
- package/dist/notifications/__tests__/formatter.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/formatter.test.js +0 -270
- package/dist/notifications/__tests__/formatter.test.js.map +0 -1
- package/dist/notifications/__tests__/hook-config.test.d.ts +0 -5
- package/dist/notifications/__tests__/hook-config.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/hook-config.test.js +0 -139
- package/dist/notifications/__tests__/hook-config.test.js.map +0 -1
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts +0 -5
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/idle-cooldown.test.js +0 -209
- package/dist/notifications/__tests__/idle-cooldown.test.js.map +0 -1
- package/dist/notifications/__tests__/index.test.d.ts +0 -2
- package/dist/notifications/__tests__/index.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/index.test.js +0 -188
- package/dist/notifications/__tests__/index.test.js.map +0 -1
- package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts +0 -2
- package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/lifecycle-dedupe.test.js +0 -86
- package/dist/notifications/__tests__/lifecycle-dedupe.test.js.map +0 -1
- package/dist/notifications/__tests__/notifier.test.d.ts +0 -2
- package/dist/notifications/__tests__/notifier.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/notifier.test.js +0 -239
- package/dist/notifications/__tests__/notifier.test.js.map +0 -1
- package/dist/notifications/__tests__/profiles.test.d.ts +0 -2
- package/dist/notifications/__tests__/profiles.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/profiles.test.js +0 -404
- package/dist/notifications/__tests__/profiles.test.js.map +0 -1
- package/dist/notifications/__tests__/reply-config.test.d.ts +0 -2
- package/dist/notifications/__tests__/reply-config.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/reply-config.test.js +0 -79
- package/dist/notifications/__tests__/reply-config.test.js.map +0 -1
- package/dist/notifications/__tests__/reply-listener.test.d.ts +0 -2
- package/dist/notifications/__tests__/reply-listener.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/reply-listener.test.js +0 -723
- package/dist/notifications/__tests__/reply-listener.test.js.map +0 -1
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts +0 -2
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js +0 -93
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js.map +0 -1
- package/dist/notifications/__tests__/session-registry.test.d.ts +0 -2
- package/dist/notifications/__tests__/session-registry.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/session-registry.test.js +0 -234
- package/dist/notifications/__tests__/session-registry.test.js.map +0 -1
- package/dist/notifications/__tests__/session-status.test.d.ts +0 -2
- package/dist/notifications/__tests__/session-status.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/session-status.test.js +0 -249
- package/dist/notifications/__tests__/session-status.test.js.map +0 -1
- package/dist/notifications/__tests__/temp-mode.test.d.ts +0 -2
- package/dist/notifications/__tests__/temp-mode.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/temp-mode.test.js +0 -172
- package/dist/notifications/__tests__/temp-mode.test.js.map +0 -1
- package/dist/notifications/__tests__/template-engine.test.d.ts +0 -5
- package/dist/notifications/__tests__/template-engine.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/template-engine.test.js +0 -158
- package/dist/notifications/__tests__/template-engine.test.js.map +0 -1
- package/dist/notifications/__tests__/tmux-detector.test.d.ts +0 -2
- package/dist/notifications/__tests__/tmux-detector.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/tmux-detector.test.js +0 -208
- package/dist/notifications/__tests__/tmux-detector.test.js.map +0 -1
- package/dist/notifications/__tests__/tmux.test.d.ts +0 -2
- package/dist/notifications/__tests__/tmux.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/tmux.test.js +0 -285
- package/dist/notifications/__tests__/tmux.test.js.map +0 -1
- package/dist/notifications/__tests__/verbosity.test.d.ts +0 -2
- package/dist/notifications/__tests__/verbosity.test.d.ts.map +0 -1
- package/dist/notifications/__tests__/verbosity.test.js +0 -237
- package/dist/notifications/__tests__/verbosity.test.js.map +0 -1
- package/dist/openclaw/__tests__/config.test.d.ts +0 -6
- package/dist/openclaw/__tests__/config.test.d.ts.map +0 -1
- package/dist/openclaw/__tests__/config.test.js +0 -344
- package/dist/openclaw/__tests__/config.test.js.map +0 -1
- package/dist/openclaw/__tests__/dispatcher.test.d.ts +0 -5
- package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +0 -1
- package/dist/openclaw/__tests__/dispatcher.test.js +0 -169
- package/dist/openclaw/__tests__/dispatcher.test.js.map +0 -1
- package/dist/openclaw/__tests__/index.test.d.ts +0 -6
- package/dist/openclaw/__tests__/index.test.d.ts.map +0 -1
- package/dist/openclaw/__tests__/index.test.js +0 -382
- package/dist/openclaw/__tests__/index.test.js.map +0 -1
- package/dist/pipeline/__tests__/orchestrator.test.d.ts +0 -2
- package/dist/pipeline/__tests__/orchestrator.test.d.ts.map +0 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +0 -505
- package/dist/pipeline/__tests__/orchestrator.test.js.map +0 -1
- package/dist/pipeline/__tests__/stages.test.d.ts +0 -2
- package/dist/pipeline/__tests__/stages.test.d.ts.map +0 -1
- package/dist/pipeline/__tests__/stages.test.js +0 -754
- package/dist/pipeline/__tests__/stages.test.js.map +0 -1
- package/dist/pipeline/stages/ralph-verify.d.ts +0 -53
- package/dist/pipeline/stages/ralph-verify.d.ts.map +0 -1
- package/dist/pipeline/stages/ralph-verify.js.map +0 -1
- package/dist/pipeline/stages/ralplan.d.ts +0 -25
- package/dist/pipeline/stages/ralplan.d.ts.map +0 -1
- package/dist/pipeline/stages/ralplan.js.map +0 -1
- package/dist/planning/__tests__/artifacts.test.d.ts +0 -2
- package/dist/planning/__tests__/artifacts.test.d.ts.map +0 -1
- package/dist/planning/__tests__/artifacts.test.js +0 -544
- package/dist/planning/__tests__/artifacts.test.js.map +0 -1
- package/dist/question/__tests__/client.test.d.ts +0 -2
- package/dist/question/__tests__/client.test.d.ts.map +0 -1
- package/dist/question/__tests__/client.test.js +0 -90
- package/dist/question/__tests__/client.test.js.map +0 -1
- package/dist/question/__tests__/deep-interview.test.d.ts +0 -2
- package/dist/question/__tests__/deep-interview.test.d.ts.map +0 -1
- package/dist/question/__tests__/deep-interview.test.js +0 -209
- package/dist/question/__tests__/deep-interview.test.js.map +0 -1
- package/dist/question/__tests__/policy.test.d.ts +0 -2
- package/dist/question/__tests__/policy.test.d.ts.map +0 -1
- package/dist/question/__tests__/policy.test.js +0 -107
- package/dist/question/__tests__/policy.test.js.map +0 -1
- package/dist/question/__tests__/renderer.test.d.ts +0 -2
- package/dist/question/__tests__/renderer.test.d.ts.map +0 -1
- package/dist/question/__tests__/renderer.test.js +0 -707
- package/dist/question/__tests__/renderer.test.js.map +0 -1
- package/dist/question/__tests__/state.test.d.ts +0 -2
- package/dist/question/__tests__/state.test.d.ts.map +0 -1
- package/dist/question/__tests__/state.test.js +0 -102
- package/dist/question/__tests__/state.test.js.map +0 -1
- package/dist/question/__tests__/types.test.d.ts +0 -2
- package/dist/question/__tests__/types.test.d.ts.map +0 -1
- package/dist/question/__tests__/types.test.js +0 -65
- package/dist/question/__tests__/types.test.js.map +0 -1
- package/dist/question/__tests__/ui.test.d.ts +0 -2
- package/dist/question/__tests__/ui.test.d.ts.map +0 -1
- package/dist/question/__tests__/ui.test.js +0 -446
- package/dist/question/__tests__/ui.test.js.map +0 -1
- package/dist/ralph/__tests__/persistence.test.d.ts +0 -2
- package/dist/ralph/__tests__/persistence.test.d.ts.map +0 -1
- package/dist/ralph/__tests__/persistence.test.js +0 -116
- package/dist/ralph/__tests__/persistence.test.js.map +0 -1
- package/dist/ralph/contract.d.ts +0 -17
- package/dist/ralph/persistence.js.map +0 -1
- package/dist/ralplan/__tests__/runtime.test.d.ts +0 -2
- package/dist/ralplan/__tests__/runtime.test.d.ts.map +0 -1
- package/dist/ralplan/__tests__/runtime.test.js +0 -165
- package/dist/ralplan/__tests__/runtime.test.js.map +0 -1
- package/dist/ralplan/runtime.d.ts +0 -52
- package/dist/ralplan/runtime.d.ts.map +0 -1
- package/dist/ralplan/runtime.js.map +0 -1
- package/dist/runtime/__tests__/bridge.test.d.ts +0 -2
- package/dist/runtime/__tests__/bridge.test.d.ts.map +0 -1
- package/dist/runtime/__tests__/bridge.test.js +0 -194
- package/dist/runtime/__tests__/bridge.test.js.map +0 -1
- package/dist/runtime/__tests__/run-loop.test.d.ts +0 -2
- package/dist/runtime/__tests__/run-loop.test.d.ts.map +0 -1
- package/dist/runtime/__tests__/run-loop.test.js +0 -35
- package/dist/runtime/__tests__/run-loop.test.js.map +0 -1
- package/dist/runtime/__tests__/run-outcome.test.d.ts +0 -2
- package/dist/runtime/__tests__/run-outcome.test.d.ts.map +0 -1
- package/dist/runtime/__tests__/run-outcome.test.js +0 -102
- package/dist/runtime/__tests__/run-outcome.test.js.map +0 -1
- package/dist/runtime/__tests__/run-state.test.d.ts +0 -2
- package/dist/runtime/__tests__/run-state.test.d.ts.map +0 -1
- package/dist/runtime/__tests__/run-state.test.js +0 -37
- package/dist/runtime/__tests__/run-state.test.js.map +0 -1
- package/dist/scripts/__tests__/codex-native-hook.test.d.ts +0 -2
- package/dist/scripts/__tests__/codex-native-hook.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +0 -6788
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +0 -1
- package/dist/scripts/__tests__/generate-release-body.test.d.ts +0 -2
- package/dist/scripts/__tests__/generate-release-body.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/generate-release-body.test.js +0 -233
- package/dist/scripts/__tests__/generate-release-body.test.js.map +0 -1
- package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts +0 -2
- package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/hook-derived-watcher.test.js +0 -195
- package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +0 -1
- package/dist/scripts/__tests__/postinstall.test.d.ts +0 -2
- package/dist/scripts/__tests__/postinstall.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/postinstall.test.js +0 -92
- package/dist/scripts/__tests__/postinstall.test.js.map +0 -1
- package/dist/scripts/__tests__/prompt-inventory.test.d.ts +0 -2
- package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/prompt-inventory.test.js +0 -56
- package/dist/scripts/__tests__/prompt-inventory.test.js.map +0 -1
- package/dist/scripts/__tests__/run-test-files.test.d.ts +0 -2
- package/dist/scripts/__tests__/run-test-files.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/run-test-files.test.js +0 -62
- package/dist/scripts/__tests__/run-test-files.test.js.map +0 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.d.ts +0 -2
- package/dist/scripts/__tests__/smoke-packed-install.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js +0 -135
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +0 -1
- package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts +0 -2
- package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/test-reply-listener-live.test.js +0 -82
- package/dist/scripts/__tests__/test-reply-listener-live.test.js.map +0 -1
- package/dist/scripts/__tests__/verify-native-agents.test.d.ts +0 -2
- package/dist/scripts/__tests__/verify-native-agents.test.d.ts.map +0 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js +0 -166
- package/dist/scripts/__tests__/verify-native-agents.test.js.map +0 -1
- package/dist/scripts/eval/eval-candidate-handoff.d.ts +0 -2
- package/dist/scripts/eval/eval-candidate-handoff.d.ts.map +0 -1
- package/dist/scripts/eval/eval-candidate-handoff.js +0 -11
- package/dist/scripts/eval/eval-candidate-handoff.js.map +0 -1
- package/dist/scripts/eval/eval-cli-discoverability.d.ts +0 -3
- package/dist/scripts/eval/eval-cli-discoverability.d.ts.map +0 -1
- package/dist/scripts/eval/eval-cli-discoverability.js +0 -37
- package/dist/scripts/eval/eval-cli-discoverability.js.map +0 -1
- package/dist/scripts/eval/eval-fresh-run-tagging.d.ts +0 -2
- package/dist/scripts/eval/eval-fresh-run-tagging.d.ts.map +0 -1
- package/dist/scripts/eval/eval-fresh-run-tagging.js +0 -11
- package/dist/scripts/eval/eval-fresh-run-tagging.js.map +0 -1
- package/dist/scripts/eval/eval-help-consistency.d.ts +0 -2
- package/dist/scripts/eval/eval-help-consistency.d.ts.map +0 -1
- package/dist/scripts/eval/eval-help-consistency.js +0 -12
- package/dist/scripts/eval/eval-help-consistency.js.map +0 -1
- package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts +0 -2
- package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts.map +0 -1
- package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js +0 -31
- package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js.map +0 -1
- package/dist/scripts/eval/eval-parity-smoke.d.ts +0 -2
- package/dist/scripts/eval/eval-parity-smoke.d.ts.map +0 -1
- package/dist/scripts/eval/eval-parity-smoke.js +0 -23
- package/dist/scripts/eval/eval-parity-smoke.js.map +0 -1
- package/dist/scripts/eval/eval-parity-sweep.d.ts +0 -2
- package/dist/scripts/eval/eval-parity-sweep.d.ts.map +0 -1
- package/dist/scripts/eval/eval-parity-sweep.js +0 -29
- package/dist/scripts/eval/eval-parity-sweep.js.map +0 -1
- package/dist/scripts/eval/eval-resume-dirty-guard.d.ts +0 -2
- package/dist/scripts/eval/eval-resume-dirty-guard.d.ts.map +0 -1
- package/dist/scripts/eval/eval-resume-dirty-guard.js +0 -11
- package/dist/scripts/eval/eval-resume-dirty-guard.js.map +0 -1
- package/dist/scripts/eval/eval-security-path-traversal.d.ts +0 -3
- package/dist/scripts/eval/eval-security-path-traversal.d.ts.map +0 -1
- package/dist/scripts/eval/eval-security-path-traversal.js +0 -35
- package/dist/scripts/eval/eval-security-path-traversal.js.map +0 -1
- package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts +0 -2
- package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts.map +0 -1
- package/dist/scripts/notify-hook/__tests__/operational-events.test.js +0 -24
- package/dist/scripts/notify-hook/__tests__/operational-events.test.js.map +0 -1
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +0 -2
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +0 -1
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +0 -153
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +0 -1
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts +0 -22
- package/dist/session-history/__tests__/search.test.d.ts +0 -2
- package/dist/session-history/__tests__/search.test.d.ts.map +0 -1
- package/dist/session-history/__tests__/search.test.js +0 -150
- package/dist/session-history/__tests__/search.test.js.map +0 -1
- package/dist/sidecar/__tests__/boundary.test.d.ts +0 -2
- package/dist/sidecar/__tests__/boundary.test.d.ts.map +0 -1
- package/dist/sidecar/__tests__/boundary.test.js +0 -48
- package/dist/sidecar/__tests__/boundary.test.js.map +0 -1
- package/dist/sidecar/__tests__/collector.test.d.ts +0 -2
- package/dist/sidecar/__tests__/collector.test.d.ts.map +0 -1
- package/dist/sidecar/__tests__/collector.test.js +0 -162
- package/dist/sidecar/__tests__/collector.test.js.map +0 -1
- package/dist/sidecar/__tests__/render.test.d.ts +0 -2
- package/dist/sidecar/__tests__/render.test.d.ts.map +0 -1
- package/dist/sidecar/__tests__/render.test.js +0 -67
- package/dist/sidecar/__tests__/render.test.js.map +0 -1
- package/dist/sidecar/__tests__/tmux.test.d.ts +0 -2
- package/dist/sidecar/__tests__/tmux.test.d.ts.map +0 -1
- package/dist/sidecar/__tests__/tmux.test.js +0 -30
- package/dist/sidecar/__tests__/tmux.test.js.map +0 -1
- package/dist/sidecar/__tests__/watch.test.d.ts +0 -2
- package/dist/sidecar/__tests__/watch.test.d.ts.map +0 -1
- package/dist/sidecar/__tests__/watch.test.js +0 -42
- package/dist/sidecar/__tests__/watch.test.js.map +0 -1
- package/dist/state/__tests__/mode-state-context.test.d.ts +0 -2
- package/dist/state/__tests__/mode-state-context.test.d.ts.map +0 -1
- package/dist/state/__tests__/mode-state-context.test.js +0 -35
- package/dist/state/__tests__/mode-state-context.test.js.map +0 -1
- package/dist/state/__tests__/operations-ralph-phase.test.d.ts +0 -2
- package/dist/state/__tests__/operations-ralph-phase.test.d.ts.map +0 -1
- package/dist/state/__tests__/operations-ralph-phase.test.js +0 -103
- package/dist/state/__tests__/operations-ralph-phase.test.js.map +0 -1
- package/dist/state/__tests__/operations.test.d.ts +0 -2
- package/dist/state/__tests__/operations.test.d.ts.map +0 -1
- package/dist/state/__tests__/operations.test.js +0 -439
- package/dist/state/__tests__/operations.test.js.map +0 -1
- package/dist/state/__tests__/path-traversal.test.d.ts +0 -2
- package/dist/state/__tests__/path-traversal.test.d.ts.map +0 -1
- package/dist/state/__tests__/path-traversal.test.js +0 -49
- package/dist/state/__tests__/path-traversal.test.js.map +0 -1
- package/dist/state/__tests__/skill-active.test.d.ts +0 -2
- package/dist/state/__tests__/skill-active.test.d.ts.map +0 -1
- package/dist/state/__tests__/skill-active.test.js +0 -160
- package/dist/state/__tests__/skill-active.test.js.map +0 -1
- package/dist/state/__tests__/workflow-transition.test.d.ts +0 -2
- package/dist/state/__tests__/workflow-transition.test.d.ts.map +0 -1
- package/dist/state/__tests__/workflow-transition.test.js +0 -77
- package/dist/state/__tests__/workflow-transition.test.js.map +0 -1
- package/dist/subagents/__tests__/tracker.test.d.ts +0 -2
- package/dist/subagents/__tests__/tracker.test.d.ts.map +0 -1
- package/dist/subagents/__tests__/tracker.test.js +0 -47
- package/dist/subagents/__tests__/tracker.test.js.map +0 -1
- package/dist/team/__tests__/allocation-policy.test.d.ts +0 -2
- package/dist/team/__tests__/allocation-policy.test.d.ts.map +0 -1
- package/dist/team/__tests__/allocation-policy.test.js +0 -111
- package/dist/team/__tests__/allocation-policy.test.js.map +0 -1
- package/dist/team/__tests__/api-interop.test.d.ts +0 -2
- package/dist/team/__tests__/api-interop.test.d.ts.map +0 -1
- package/dist/team/__tests__/api-interop.test.js +0 -2262
- package/dist/team/__tests__/api-interop.test.js.map +0 -1
- package/dist/team/__tests__/commit-hygiene.test.d.ts +0 -2
- package/dist/team/__tests__/commit-hygiene.test.d.ts.map +0 -1
- package/dist/team/__tests__/commit-hygiene.test.js +0 -93
- package/dist/team/__tests__/commit-hygiene.test.js.map +0 -1
- package/dist/team/__tests__/cross-rebase-smoke.test.d.ts +0 -2
- package/dist/team/__tests__/cross-rebase-smoke.test.d.ts.map +0 -1
- package/dist/team/__tests__/cross-rebase-smoke.test.js +0 -161
- package/dist/team/__tests__/cross-rebase-smoke.test.js.map +0 -1
- package/dist/team/__tests__/current-task-baseline.test.d.ts +0 -2
- package/dist/team/__tests__/current-task-baseline.test.d.ts.map +0 -1
- package/dist/team/__tests__/current-task-baseline.test.js +0 -87
- package/dist/team/__tests__/current-task-baseline.test.js.map +0 -1
- package/dist/team/__tests__/delegation-policy.test.d.ts +0 -2
- package/dist/team/__tests__/delegation-policy.test.d.ts.map +0 -1
- package/dist/team/__tests__/delegation-policy.test.js +0 -69
- package/dist/team/__tests__/delegation-policy.test.js.map +0 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts +0 -2
- package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts.map +0 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.js +0 -679
- package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +0 -1
- package/dist/team/__tests__/events.test.d.ts +0 -2
- package/dist/team/__tests__/events.test.d.ts.map +0 -1
- package/dist/team/__tests__/events.test.js +0 -313
- package/dist/team/__tests__/events.test.js.map +0 -1
- package/dist/team/__tests__/followup-planner.test.d.ts +0 -2
- package/dist/team/__tests__/followup-planner.test.d.ts.map +0 -1
- package/dist/team/__tests__/followup-planner.test.js +0 -84
- package/dist/team/__tests__/followup-planner.test.js.map +0 -1
- package/dist/team/__tests__/hardening-e2e.test.d.ts +0 -2
- package/dist/team/__tests__/hardening-e2e.test.d.ts.map +0 -1
- package/dist/team/__tests__/hardening-e2e.test.js +0 -98
- package/dist/team/__tests__/hardening-e2e.test.js.map +0 -1
- package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +0 -2
- package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +0 -1
- package/dist/team/__tests__/hook-primary-e2e-contract.test.js +0 -78
- package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +0 -1
- package/dist/team/__tests__/idle-nudge.test.d.ts +0 -2
- package/dist/team/__tests__/idle-nudge.test.d.ts.map +0 -1
- package/dist/team/__tests__/idle-nudge.test.js +0 -230
- package/dist/team/__tests__/idle-nudge.test.js.map +0 -1
- package/dist/team/__tests__/leader-activity.test.d.ts +0 -2
- package/dist/team/__tests__/leader-activity.test.d.ts.map +0 -1
- package/dist/team/__tests__/leader-activity.test.js +0 -261
- package/dist/team/__tests__/leader-activity.test.js.map +0 -1
- package/dist/team/__tests__/mcp-comm.test.d.ts +0 -2
- package/dist/team/__tests__/mcp-comm.test.d.ts.map +0 -1
- package/dist/team/__tests__/mcp-comm.test.js +0 -289
- package/dist/team/__tests__/mcp-comm.test.js.map +0 -1
- package/dist/team/__tests__/model-contract.test.d.ts +0 -2
- package/dist/team/__tests__/model-contract.test.d.ts.map +0 -1
- package/dist/team/__tests__/model-contract.test.js +0 -171
- package/dist/team/__tests__/model-contract.test.js.map +0 -1
- package/dist/team/__tests__/orchestrator.test.d.ts +0 -2
- package/dist/team/__tests__/orchestrator.test.d.ts.map +0 -1
- package/dist/team/__tests__/orchestrator.test.js +0 -111
- package/dist/team/__tests__/orchestrator.test.js.map +0 -1
- package/dist/team/__tests__/phase-controller.test.d.ts +0 -2
- package/dist/team/__tests__/phase-controller.test.d.ts.map +0 -1
- package/dist/team/__tests__/phase-controller.test.js +0 -50
- package/dist/team/__tests__/phase-controller.test.js.map +0 -1
- package/dist/team/__tests__/rebalance-policy.test.d.ts +0 -2
- package/dist/team/__tests__/rebalance-policy.test.d.ts.map +0 -1
- package/dist/team/__tests__/rebalance-policy.test.js +0 -168
- package/dist/team/__tests__/rebalance-policy.test.js.map +0 -1
- package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +0 -2
- package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +0 -1
- package/dist/team/__tests__/repo-aware-decomposition.test.js +0 -136
- package/dist/team/__tests__/repo-aware-decomposition.test.js.map +0 -1
- package/dist/team/__tests__/role-router.test.d.ts +0 -2
- package/dist/team/__tests__/role-router.test.d.ts.map +0 -1
- package/dist/team/__tests__/role-router.test.js +0 -263
- package/dist/team/__tests__/role-router.test.js.map +0 -1
- package/dist/team/__tests__/runtime-cli.test.d.ts +0 -2
- package/dist/team/__tests__/runtime-cli.test.d.ts.map +0 -1
- package/dist/team/__tests__/runtime-cli.test.js +0 -304
- package/dist/team/__tests__/runtime-cli.test.js.map +0 -1
- package/dist/team/__tests__/runtime.test.d.ts +0 -2
- package/dist/team/__tests__/runtime.test.d.ts.map +0 -1
- package/dist/team/__tests__/runtime.test.js +0 -5734
- package/dist/team/__tests__/runtime.test.js.map +0 -1
- package/dist/team/__tests__/scaling.test.d.ts +0 -2
- package/dist/team/__tests__/scaling.test.d.ts.map +0 -1
- package/dist/team/__tests__/scaling.test.js +0 -1005
- package/dist/team/__tests__/scaling.test.js.map +0 -1
- package/dist/team/__tests__/shutdown-fallback.test.d.ts +0 -2
- package/dist/team/__tests__/shutdown-fallback.test.d.ts.map +0 -1
- package/dist/team/__tests__/shutdown-fallback.test.js +0 -125
- package/dist/team/__tests__/shutdown-fallback.test.js.map +0 -1
- package/dist/team/__tests__/state-root.test.d.ts +0 -2
- package/dist/team/__tests__/state-root.test.d.ts.map +0 -1
- package/dist/team/__tests__/state-root.test.js +0 -195
- package/dist/team/__tests__/state-root.test.js.map +0 -1
- package/dist/team/__tests__/state.test.d.ts +0 -2
- package/dist/team/__tests__/state.test.d.ts.map +0 -1
- package/dist/team/__tests__/state.test.js +0 -1859
- package/dist/team/__tests__/state.test.js.map +0 -1
- package/dist/team/__tests__/team-identity.test.d.ts +0 -2
- package/dist/team/__tests__/team-identity.test.d.ts.map +0 -1
- package/dist/team/__tests__/team-identity.test.js +0 -166
- package/dist/team/__tests__/team-identity.test.js.map +0 -1
- package/dist/team/__tests__/team-ops-contract.test.d.ts +0 -2
- package/dist/team/__tests__/team-ops-contract.test.d.ts.map +0 -1
- package/dist/team/__tests__/team-ops-contract.test.js +0 -96
- package/dist/team/__tests__/team-ops-contract.test.js.map +0 -1
- package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +0 -2
- package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +0 -1
- package/dist/team/__tests__/tmux-claude-workers-demo.test.js +0 -191
- package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +0 -1
- package/dist/team/__tests__/tmux-session.test.d.ts +0 -2
- package/dist/team/__tests__/tmux-session.test.d.ts.map +0 -1
- package/dist/team/__tests__/tmux-session.test.js +0 -3785
- package/dist/team/__tests__/tmux-session.test.js.map +0 -1
- package/dist/team/__tests__/tmux-test-fixture.d.ts +0 -20
- package/dist/team/__tests__/tmux-test-fixture.d.ts.map +0 -1
- package/dist/team/__tests__/tmux-test-fixture.js +0 -152
- package/dist/team/__tests__/tmux-test-fixture.js.map +0 -1
- package/dist/team/__tests__/tmux-test-fixture.test.d.ts +0 -2
- package/dist/team/__tests__/tmux-test-fixture.test.d.ts.map +0 -1
- package/dist/team/__tests__/tmux-test-fixture.test.js +0 -113
- package/dist/team/__tests__/tmux-test-fixture.test.js.map +0 -1
- package/dist/team/__tests__/worker-bootstrap.test.d.ts +0 -2
- package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +0 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +0 -685
- package/dist/team/__tests__/worker-bootstrap.test.js.map +0 -1
- package/dist/team/__tests__/worker-runtime-identity.test.d.ts +0 -2
- package/dist/team/__tests__/worker-runtime-identity.test.d.ts.map +0 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +0 -250
- package/dist/team/__tests__/worker-runtime-identity.test.js.map +0 -1
- package/dist/team/__tests__/worktree.test.d.ts +0 -2
- package/dist/team/__tests__/worktree.test.d.ts.map +0 -1
- package/dist/team/__tests__/worktree.test.js +0 -317
- package/dist/team/__tests__/worktree.test.js.map +0 -1
- package/dist/utils/__tests__/agents-md.test.d.ts +0 -2
- package/dist/utils/__tests__/agents-md.test.d.ts.map +0 -1
- package/dist/utils/__tests__/agents-md.test.js +0 -52
- package/dist/utils/__tests__/agents-md.test.js.map +0 -1
- package/dist/utils/__tests__/agents-model-table.test.d.ts +0 -2
- package/dist/utils/__tests__/agents-model-table.test.d.ts.map +0 -1
- package/dist/utils/__tests__/agents-model-table.test.js +0 -104
- package/dist/utils/__tests__/agents-model-table.test.js.map +0 -1
- package/dist/utils/__tests__/dep-versions.test.d.ts +0 -2
- package/dist/utils/__tests__/dep-versions.test.d.ts.map +0 -1
- package/dist/utils/__tests__/dep-versions.test.js +0 -46
- package/dist/utils/__tests__/dep-versions.test.js.map +0 -1
- package/dist/utils/__tests__/package.test.d.ts +0 -2
- package/dist/utils/__tests__/package.test.d.ts.map +0 -1
- package/dist/utils/__tests__/package.test.js +0 -21
- package/dist/utils/__tests__/package.test.js.map +0 -1
- package/dist/utils/__tests__/paths.test.d.ts +0 -2
- package/dist/utils/__tests__/paths.test.d.ts.map +0 -1
- package/dist/utils/__tests__/paths.test.js +0 -541
- package/dist/utils/__tests__/paths.test.js.map +0 -1
- package/dist/utils/__tests__/platform-command.test.d.ts +0 -2
- package/dist/utils/__tests__/platform-command.test.d.ts.map +0 -1
- package/dist/utils/__tests__/platform-command.test.js +0 -410
- package/dist/utils/__tests__/platform-command.test.js.map +0 -1
- package/dist/utils/__tests__/repo-deps.test.d.ts +0 -2
- package/dist/utils/__tests__/repo-deps.test.d.ts.map +0 -1
- package/dist/utils/__tests__/repo-deps.test.js +0 -71
- package/dist/utils/__tests__/repo-deps.test.js.map +0 -1
- package/dist/verification/__tests__/ci-rust-gates.test.d.ts +0 -2
- package/dist/verification/__tests__/ci-rust-gates.test.d.ts.map +0 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +0 -89
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +0 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts +0 -2
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts.map +0 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +0 -54
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +0 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts +0 -2
- package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts.map +0 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +0 -73
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +0 -1
- package/dist/verification/__tests__/native-release-manifest.test.d.ts +0 -2
- package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +0 -1
- package/dist/verification/__tests__/native-release-manifest.test.js +0 -80
- package/dist/verification/__tests__/native-release-manifest.test.js.map +0 -1
- package/dist/verification/__tests__/pr-check-workflow.test.d.ts +0 -2
- package/dist/verification/__tests__/pr-check-workflow.test.d.ts.map +0 -1
- package/dist/verification/__tests__/pr-check-workflow.test.js +0 -27
- package/dist/verification/__tests__/pr-check-workflow.test.js.map +0 -1
- package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts +0 -2
- package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts.map +0 -1
- package/dist/verification/__tests__/ralph-persistence-gate.test.js +0 -55
- package/dist/verification/__tests__/ralph-persistence-gate.test.js.map +0 -1
- package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts +0 -2
- package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts.map +0 -1
- package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js +0 -32
- package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js.map +0 -1
- package/dist/verification/__tests__/verifier.test.d.ts +0 -2
- package/dist/verification/__tests__/verifier.test.d.ts.map +0 -1
- package/dist/verification/__tests__/verifier.test.js +0 -113
- package/dist/verification/__tests__/verifier.test.js.map +0 -1
- package/dist/visual/__tests__/verdict.test.d.ts +0 -2
- package/dist/visual/__tests__/verdict.test.d.ts.map +0 -1
- package/dist/visual/__tests__/verdict.test.js +0 -81
- package/dist/visual/__tests__/verdict.test.js.map +0 -1
- package/dist/wiki/__tests__/cjk-tokenize.test.d.ts +0 -12
- package/dist/wiki/__tests__/cjk-tokenize.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/cjk-tokenize.test.js +0 -139
- package/dist/wiki/__tests__/cjk-tokenize.test.js.map +0 -1
- package/dist/wiki/__tests__/crlf-parse.test.d.ts +0 -2
- package/dist/wiki/__tests__/crlf-parse.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/crlf-parse.test.js +0 -24
- package/dist/wiki/__tests__/crlf-parse.test.js.map +0 -1
- package/dist/wiki/__tests__/escape-newline.test.d.ts +0 -2
- package/dist/wiki/__tests__/escape-newline.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/escape-newline.test.js +0 -45
- package/dist/wiki/__tests__/escape-newline.test.js.map +0 -1
- package/dist/wiki/__tests__/ingest.test.d.ts +0 -5
- package/dist/wiki/__tests__/ingest.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/ingest.test.js +0 -181
- package/dist/wiki/__tests__/ingest.test.js.map +0 -1
- package/dist/wiki/__tests__/lint.test.d.ts +0 -5
- package/dist/wiki/__tests__/lint.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/lint.test.js +0 -163
- package/dist/wiki/__tests__/lint.test.js.map +0 -1
- package/dist/wiki/__tests__/query.test.d.ts +0 -5
- package/dist/wiki/__tests__/query.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/query.test.js +0 -141
- package/dist/wiki/__tests__/query.test.js.map +0 -1
- package/dist/wiki/__tests__/reserved-file-guard.test.d.ts +0 -2
- package/dist/wiki/__tests__/reserved-file-guard.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/reserved-file-guard.test.js +0 -44
- package/dist/wiki/__tests__/reserved-file-guard.test.js.map +0 -1
- package/dist/wiki/__tests__/session-hooks.test.d.ts +0 -5
- package/dist/wiki/__tests__/session-hooks.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/session-hooks.test.js +0 -36
- package/dist/wiki/__tests__/session-hooks.test.js.map +0 -1
- package/dist/wiki/__tests__/slug-nonascii.test.d.ts +0 -2
- package/dist/wiki/__tests__/slug-nonascii.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/slug-nonascii.test.js +0 -30
- package/dist/wiki/__tests__/slug-nonascii.test.js.map +0 -1
- package/dist/wiki/__tests__/storage.test.d.ts +0 -5
- package/dist/wiki/__tests__/storage.test.d.ts.map +0 -1
- package/dist/wiki/__tests__/storage.test.js +0 -278
- package/dist/wiki/__tests__/storage.test.js.map +0 -1
- package/dist/wiki/__tests__/test-helpers.d.ts +0 -31
- package/dist/wiki/__tests__/test-helpers.d.ts.map +0 -1
- package/dist/wiki/__tests__/test-helpers.js +0 -108
- package/dist/wiki/__tests__/test-helpers.js.map +0 -1
- package/docs/contracts/ralph-cancel-contract.md +0 -23
- package/docs/contracts/ralph-state-contract.md +0 -95
- package/docs/issues/team-ralph-followup-team.md +0 -38
- package/docs/qa/ralph-persistence-gate.md +0 -59
- package/docs/reference/ralph-parity-matrix.md +0 -25
- package/docs/reference/ralph-upstream-baseline.md +0 -34
- package/plugins/roblox-ai-os-creator-skills/skills/ralph/SKILL.md +0 -269
- package/plugins/roblox-ai-os-creator-skills/skills/ralplan/SKILL.md +0 -162
- package/prompts/api-reviewer.md +0 -113
- package/prompts/information-architect.md +0 -226
- package/prompts/performance-reviewer.md +0 -109
- package/prompts/product-analyst.md +0 -304
- package/prompts/product-manager.md +0 -245
- package/prompts/qa-tester.md +0 -124
- package/prompts/quality-reviewer.md +0 -123
- package/prompts/quality-strategist.md +0 -274
- package/prompts/style-reviewer.md +0 -102
- package/prompts/ux-researcher.md +0 -327
- package/skills/frontend-ui-ux/SKILL.md +0 -34
- package/skills/ralph/SKILL.md +0 -269
- package/skills/ralplan/SKILL.md +0 -162
- package/src/scripts/eval/eval-adaptive-sort-optimization.py +0 -24
- package/src/scripts/eval/eval-candidate-handoff.ts +0 -8
- package/src/scripts/eval/eval-cli-discoverability.ts +0 -40
- package/src/scripts/eval/eval-fresh-run-tagging.ts +0 -8
- package/src/scripts/eval/eval-help-consistency.ts +0 -11
- package/src/scripts/eval/eval-in-action-cat-shellout-demo.ts +0 -31
- package/src/scripts/eval/eval-ml-kaggle-model-optimization.py +0 -29
- package/src/scripts/eval/eval-noisy-bayesopt-highdim.py +0 -44
- package/src/scripts/eval/eval-noisy-latent-subspace-discovery.py +0 -44
- package/src/scripts/eval/eval-parity-smoke.ts +0 -20
- package/src/scripts/eval/eval-parity-sweep.ts +0 -26
- package/src/scripts/eval/eval-resume-dirty-guard.ts +0 -8
- package/src/scripts/eval/eval-security-path-traversal.ts +0 -38
- package/src/scripts/run-autoresearch-showcase.sh +0 -75
- /package/docs/{migration-mainline-post-v0.4.4.md → archive/migration-mainline-post-v0.4.4.md} +0 -0
- /package/docs/{qa-plan-0.4.2.md → archive/qa-plan-0.4.2.md} +0 -0
- /package/docs/{qa-report-0.4.2.md → archive/qa-report-0.4.2.md} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import {
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { chmod, mkdir, mkdtemp, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
@@ -35,21 +35,87 @@ function parseSingleJsonStdout(stdout: string): Record<string, unknown> {
|
|
|
35
35
|
return JSON.parse(trimmed) as Record<string, unknown>;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
function runNativeHookCli(
|
|
38
|
+
async function runNativeHookCli(
|
|
39
39
|
payload: Record<string, unknown> | string,
|
|
40
40
|
options: { cwd?: string; env?: NodeJS.ProcessEnv } = {},
|
|
41
|
+
): Promise<string> {
|
|
42
|
+
const rawInput = typeof payload === "string" ? payload : JSON.stringify(payload);
|
|
43
|
+
const cwd = options.cwd ?? process.cwd();
|
|
44
|
+
const targetEnv = options.env ?? process.env;
|
|
45
|
+
const previousEnv = new Map<string, string | undefined>();
|
|
46
|
+
const envKeys = new Set([...Object.keys(process.env), ...Object.keys(targetEnv)]);
|
|
47
|
+
|
|
48
|
+
for (const key of envKeys) {
|
|
49
|
+
previousEnv.set(key, process.env[key]);
|
|
50
|
+
const nextValue = targetEnv[key];
|
|
51
|
+
if (typeof nextValue === "string") process.env[key] = nextValue;
|
|
52
|
+
else delete process.env[key];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
let parsed: Record<string, unknown>;
|
|
57
|
+
try {
|
|
58
|
+
parsed = typeof payload === "string"
|
|
59
|
+
? JSON.parse(rawInput) as Record<string, unknown>
|
|
60
|
+
: payload;
|
|
61
|
+
} catch (error) {
|
|
62
|
+
return `${JSON.stringify({
|
|
63
|
+
decision: "block",
|
|
64
|
+
reason: "RCS native hook received malformed JSON input. Preserve runtime state, inspect the emitting hook payload yourself, and retry with valid JSON.",
|
|
65
|
+
hookSpecificOutput: {
|
|
66
|
+
hookEventName: "Unknown",
|
|
67
|
+
additionalContext:
|
|
68
|
+
`stdin JSON parsing failed inside codex-native-hook: ${error instanceof Error ? error.message : String(error)}. Emit valid JSON from the native hook caller before retrying.`,
|
|
69
|
+
},
|
|
70
|
+
})}\n`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
if (
|
|
75
|
+
process.env.NODE_ENV === "test"
|
|
76
|
+
&& process.env.RCS_NATIVE_HOOK_TEST_THROW_STOP_DISPATCH === "1"
|
|
77
|
+
&& String(parsed.hook_event_name ?? "") === "Stop"
|
|
78
|
+
) {
|
|
79
|
+
throw new Error("test-induced Stop dispatch failure");
|
|
80
|
+
}
|
|
81
|
+
const result = await dispatchCodexNativeHook(parsed, { cwd });
|
|
82
|
+
if (result.outputJson) return `${JSON.stringify(result.outputJson)}\n`;
|
|
83
|
+
if (result.hookEventName === "Stop") return "{}\n";
|
|
84
|
+
return "";
|
|
85
|
+
} catch (error) {
|
|
86
|
+
if (String(parsed.hook_event_name ?? "") !== "Stop") throw error;
|
|
87
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
88
|
+
const reason =
|
|
89
|
+
"RCS native Stop hook failed before normal continuation handling. Continue once more, preserve runtime state, inspect the hook logs, and retry with a valid Stop JSON response.";
|
|
90
|
+
return `${JSON.stringify({
|
|
91
|
+
decision: "block",
|
|
92
|
+
reason,
|
|
93
|
+
stopReason: "native_stop_dispatch_failure",
|
|
94
|
+
systemMessage: `${reason} Failure: ${detail}`,
|
|
95
|
+
})}\n`;
|
|
96
|
+
}
|
|
97
|
+
} finally {
|
|
98
|
+
for (const key of envKeys) {
|
|
99
|
+
const value = previousEnv.get(key);
|
|
100
|
+
if (typeof value === "string") process.env[key] = value;
|
|
101
|
+
else delete process.env[key];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function execFileSyncCompat(
|
|
107
|
+
command: string,
|
|
108
|
+
args: string[],
|
|
109
|
+
options: { cwd?: string; stdio?: "pipe" | "ignore"; encoding?: "utf-8" } = {},
|
|
41
110
|
): string {
|
|
42
|
-
|
|
43
|
-
process.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
env: options.env ?? process.env,
|
|
51
|
-
},
|
|
52
|
-
);
|
|
111
|
+
const result = spawnSync(command, args, {
|
|
112
|
+
cwd: options.cwd ?? process.cwd(),
|
|
113
|
+
stdio: options.stdio ?? "pipe",
|
|
114
|
+
encoding: options.encoding ?? "utf-8",
|
|
115
|
+
});
|
|
116
|
+
if (result.status === 0) return result.stdout ?? "";
|
|
117
|
+
if (result.error) throw result.error;
|
|
118
|
+
throw new Error(result.stderr || result.stdout || `${command} ${args.join(" ")} exited with status ${result.status ?? "unknown"}`);
|
|
53
119
|
}
|
|
54
120
|
|
|
55
121
|
async function writeJson(path: string, value: unknown): Promise<void> {
|
|
@@ -244,8 +310,8 @@ describe("codex native hook dispatch", () => {
|
|
|
244
310
|
);
|
|
245
311
|
});
|
|
246
312
|
|
|
247
|
-
it("emits deterministic JSON stdout when CLI stdin is malformed", () => {
|
|
248
|
-
const stdout = runNativeHookCli("{");
|
|
313
|
+
it("emits deterministic JSON stdout when CLI stdin is malformed", async () => {
|
|
314
|
+
const stdout = await runNativeHookCli("{");
|
|
249
315
|
|
|
250
316
|
const output = parseSingleJsonStdout(stdout) as {
|
|
251
317
|
decision?: string;
|
|
@@ -268,7 +334,7 @@ describe("codex native hook dispatch", () => {
|
|
|
268
334
|
it("emits parseable no-op JSON stdout for inactive Stop CLI runs", async () => {
|
|
269
335
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-cli-stop-noop-json-"));
|
|
270
336
|
try {
|
|
271
|
-
const stdout = runNativeHookCli({
|
|
337
|
+
const stdout = await runNativeHookCli({
|
|
272
338
|
hook_event_name: "Stop",
|
|
273
339
|
cwd,
|
|
274
340
|
session_id: "sess-cli-stop-noop-json",
|
|
@@ -313,7 +379,7 @@ describe("codex native hook dispatch", () => {
|
|
|
313
379
|
try {
|
|
314
380
|
await writeActiveAutopilotSession(cwd, "sess-cli-stop-json");
|
|
315
381
|
|
|
316
|
-
const stdout = runNativeHookCli({
|
|
382
|
+
const stdout = await runNativeHookCli({
|
|
317
383
|
hook_event_name: "Stop",
|
|
318
384
|
cwd,
|
|
319
385
|
session_id: "sess-cli-stop-json",
|
|
@@ -343,7 +409,7 @@ describe("codex native hook dispatch", () => {
|
|
|
343
409
|
"utf-8",
|
|
344
410
|
);
|
|
345
411
|
|
|
346
|
-
const stdout = runNativeHookCli({
|
|
412
|
+
const stdout = await runNativeHookCli({
|
|
347
413
|
hook_event_name: "Stop",
|
|
348
414
|
cwd,
|
|
349
415
|
session_id: "sess-cli-stop-noisy-plugin",
|
|
@@ -363,7 +429,7 @@ describe("codex native hook dispatch", () => {
|
|
|
363
429
|
it("emits deterministic Stop JSON stdout when Stop dispatch fails", async () => {
|
|
364
430
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-cli-stop-dispatch-failure-"));
|
|
365
431
|
try {
|
|
366
|
-
const stdout = runNativeHookCli({
|
|
432
|
+
const stdout = await runNativeHookCli({
|
|
367
433
|
hook_event_name: "Stop",
|
|
368
434
|
cwd,
|
|
369
435
|
session_id: "sess-cli-stop-dispatch-failure",
|
|
@@ -469,16 +535,16 @@ describe("codex native hook dispatch", () => {
|
|
|
469
535
|
session_id: nativeSessionId,
|
|
470
536
|
thread_id: "thread-1",
|
|
471
537
|
turn_id: "turn-1",
|
|
472
|
-
prompt: "$
|
|
538
|
+
prompt: "$blueprint fix hud scope drift",
|
|
473
539
|
},
|
|
474
540
|
{ cwd },
|
|
475
541
|
);
|
|
476
542
|
|
|
477
543
|
assert.equal(promptResult.rcsEventName, "keyword-detector");
|
|
478
544
|
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "skill-active-state.json")), true);
|
|
479
|
-
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "
|
|
545
|
+
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "blueprint-state.json")), true);
|
|
480
546
|
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "skill-active-state.json")), false);
|
|
481
|
-
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "
|
|
547
|
+
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "blueprint-state.json")), false);
|
|
482
548
|
} finally {
|
|
483
549
|
await rm(cwd, { recursive: true, force: true });
|
|
484
550
|
}
|
|
@@ -495,9 +561,9 @@ describe("codex native hook dispatch", () => {
|
|
|
495
561
|
await writeSessionStart(cwd, canonicalSessionId, {
|
|
496
562
|
nativeSessionId: leaderNativeSessionId,
|
|
497
563
|
});
|
|
498
|
-
await writeJson(join(stateDir, "sessions", canonicalSessionId, "
|
|
564
|
+
await writeJson(join(stateDir, "sessions", canonicalSessionId, "forge-state.json"), {
|
|
499
565
|
active: true,
|
|
500
|
-
mode: "
|
|
566
|
+
mode: "forge",
|
|
501
567
|
current_phase: "executing",
|
|
502
568
|
iteration: 1,
|
|
503
569
|
max_iterations: 5,
|
|
@@ -541,16 +607,16 @@ describe("codex native hook dispatch", () => {
|
|
|
541
607
|
assert.equal(sessionState.session_id, canonicalSessionId);
|
|
542
608
|
assert.equal(sessionState.native_session_id, leaderNativeSessionId);
|
|
543
609
|
assert.equal(
|
|
544
|
-
existsSync(join(stateDir, "sessions", childNativeSessionId, "
|
|
610
|
+
existsSync(join(stateDir, "sessions", childNativeSessionId, "forge-state.json")),
|
|
545
611
|
false,
|
|
546
612
|
);
|
|
547
613
|
assert.ok(result.outputJson);
|
|
548
614
|
|
|
549
|
-
const
|
|
550
|
-
await readFile(join(stateDir, "sessions", canonicalSessionId, "
|
|
615
|
+
const leaderForge = JSON.parse(
|
|
616
|
+
await readFile(join(stateDir, "sessions", canonicalSessionId, "forge-state.json"), "utf-8"),
|
|
551
617
|
) as { active?: boolean; current_phase?: string };
|
|
552
|
-
assert.equal(
|
|
553
|
-
assert.equal(
|
|
618
|
+
assert.equal(leaderForge.active, true);
|
|
619
|
+
assert.equal(leaderForge.current_phase, "executing");
|
|
554
620
|
|
|
555
621
|
const tracking = JSON.parse(
|
|
556
622
|
await readFile(join(stateDir, "subagent-tracking.json"), "utf-8"),
|
|
@@ -583,9 +649,9 @@ describe("codex native hook dispatch", () => {
|
|
|
583
649
|
await writeSessionStart(cwd, canonicalSessionId, {
|
|
584
650
|
nativeSessionId: leaderNativeSessionId,
|
|
585
651
|
});
|
|
586
|
-
await writeJson(join(stateDir, "sessions", canonicalSessionId, "
|
|
652
|
+
await writeJson(join(stateDir, "sessions", canonicalSessionId, "forge-state.json"), {
|
|
587
653
|
active: true,
|
|
588
|
-
mode: "
|
|
654
|
+
mode: "forge",
|
|
589
655
|
current_phase: "executing",
|
|
590
656
|
iteration: 1,
|
|
591
657
|
max_iterations: 5,
|
|
@@ -632,11 +698,11 @@ describe("codex native hook dispatch", () => {
|
|
|
632
698
|
assert.equal(existsSync(join(stateDir, "sessions", childNativeSessionId)), false);
|
|
633
699
|
assert.equal(result.outputJson, null);
|
|
634
700
|
|
|
635
|
-
const
|
|
636
|
-
await readFile(join(stateDir, "sessions", canonicalSessionId, "
|
|
701
|
+
const leaderForge = JSON.parse(
|
|
702
|
+
await readFile(join(stateDir, "sessions", canonicalSessionId, "forge-state.json"), "utf-8"),
|
|
637
703
|
) as { active?: boolean; current_phase?: string };
|
|
638
|
-
assert.equal(
|
|
639
|
-
assert.equal(
|
|
704
|
+
assert.equal(leaderForge.active, true);
|
|
705
|
+
assert.equal(leaderForge.current_phase, "executing");
|
|
640
706
|
} finally {
|
|
641
707
|
await rm(cwd, { recursive: true, force: true });
|
|
642
708
|
}
|
|
@@ -716,7 +782,7 @@ describe("codex native hook dispatch", () => {
|
|
|
716
782
|
session_id: nativeSessionId,
|
|
717
783
|
thread_id: "thread-hud",
|
|
718
784
|
turn_id: "turn-hud",
|
|
719
|
-
prompt: "$
|
|
785
|
+
prompt: "$blueprint fix orphaned hud session handoff",
|
|
720
786
|
},
|
|
721
787
|
{
|
|
722
788
|
cwd,
|
|
@@ -730,9 +796,9 @@ describe("codex native hook dispatch", () => {
|
|
|
730
796
|
assert.equal(promptResult.rcsEventName, "keyword-detector");
|
|
731
797
|
assert.deepEqual(reconcileCall, { cwd, sessionId: canonicalSessionId });
|
|
732
798
|
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "skill-active-state.json")), true);
|
|
733
|
-
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "
|
|
799
|
+
assert.equal(existsSync(join(stateDir, "sessions", canonicalSessionId, "blueprint-state.json")), true);
|
|
734
800
|
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "skill-active-state.json")), false);
|
|
735
|
-
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "
|
|
801
|
+
assert.equal(existsSync(join(stateDir, "sessions", nativeSessionId, "blueprint-state.json")), false);
|
|
736
802
|
} finally {
|
|
737
803
|
await rm(cwd, { recursive: true, force: true });
|
|
738
804
|
}
|
|
@@ -742,7 +808,7 @@ describe("codex native hook dispatch", () => {
|
|
|
742
808
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-session-gitignore-"));
|
|
743
809
|
try {
|
|
744
810
|
await writeFile(join(cwd, ".gitignore"), "node_modules/\n");
|
|
745
|
-
|
|
811
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "pipe" });
|
|
746
812
|
|
|
747
813
|
const result = await dispatchCodexNativeHook(
|
|
748
814
|
{
|
|
@@ -771,7 +837,7 @@ describe("codex native hook dispatch", () => {
|
|
|
771
837
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-session-existing-ignore-"));
|
|
772
838
|
try {
|
|
773
839
|
await writeFile(join(cwd, ".gitignore"), "node_modules/\n.rcs/\n");
|
|
774
|
-
|
|
840
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "pipe" });
|
|
775
841
|
|
|
776
842
|
const result = await dispatchCodexNativeHook(
|
|
777
843
|
{
|
|
@@ -799,8 +865,8 @@ describe("codex native hook dispatch", () => {
|
|
|
799
865
|
try {
|
|
800
866
|
await writeFile(join(cwd, ".gitignore"), "node_modules/\n");
|
|
801
867
|
await writeFile(excludesFile, ".rcs/\n");
|
|
802
|
-
|
|
803
|
-
|
|
868
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "pipe" });
|
|
869
|
+
execFileSyncCompat("git", ["config", "core.excludesfile", excludesFile], { cwd, stdio: "pipe" });
|
|
804
870
|
|
|
805
871
|
const result = await dispatchCodexNativeHook(
|
|
806
872
|
{
|
|
@@ -866,7 +932,7 @@ describe("codex native hook dispatch", () => {
|
|
|
866
932
|
await writeSessionStart(cwd, priorSessionId, {
|
|
867
933
|
nativeSessionId: "codex-native-old",
|
|
868
934
|
});
|
|
869
|
-
await writeJson(join(stateDir, "sessions", priorSessionId, "
|
|
935
|
+
await writeJson(join(stateDir, "sessions", priorSessionId, "forge-state.json"), {
|
|
870
936
|
active: true,
|
|
871
937
|
current_phase: "executing",
|
|
872
938
|
});
|
|
@@ -936,7 +1002,7 @@ describe("codex native hook dispatch", () => {
|
|
|
936
1002
|
assert.match(additionalContext, /Preserve durable project guidance/);
|
|
937
1003
|
assert.doesNotMatch(additionalContext, /stale UI rework context snapshot/);
|
|
938
1004
|
assert.doesNotMatch(additionalContext, /\[Subagents\]/);
|
|
939
|
-
assert.doesNotMatch(additionalContext, /
|
|
1005
|
+
assert.doesNotMatch(additionalContext, /forge phase: executing/);
|
|
940
1006
|
} finally {
|
|
941
1007
|
await rm(cwd, { recursive: true, force: true });
|
|
942
1008
|
}
|
|
@@ -973,15 +1039,15 @@ describe("codex native hook dispatch", () => {
|
|
|
973
1039
|
session_id: "sess-1",
|
|
974
1040
|
thread_id: "thread-1",
|
|
975
1041
|
turn_id: "turn-1",
|
|
976
|
-
prompt: "$
|
|
1042
|
+
prompt: "$blueprint implement issue #1307",
|
|
977
1043
|
},
|
|
978
1044
|
{ cwd },
|
|
979
1045
|
);
|
|
980
1046
|
|
|
981
1047
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
982
|
-
assert.equal(result.skillState?.skill, "
|
|
1048
|
+
assert.equal(result.skillState?.skill, "blueprint");
|
|
983
1049
|
assert.ok(result.outputJson, "UserPromptSubmit should emit developer context");
|
|
984
|
-
assert.match(JSON.stringify(result.outputJson), /skill:
|
|
1050
|
+
assert.match(JSON.stringify(result.outputJson), /skill: blueprint activated and initial state initialized at \.rcs\/state\/sessions\/sess-1\/blueprint-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
985
1051
|
|
|
986
1052
|
const statePath = join(cwd, ".rcs", "state", "skill-active-state.json");
|
|
987
1053
|
assert.equal(existsSync(statePath), true);
|
|
@@ -990,10 +1056,10 @@ describe("codex native hook dispatch", () => {
|
|
|
990
1056
|
active?: boolean;
|
|
991
1057
|
initialized_mode?: string;
|
|
992
1058
|
};
|
|
993
|
-
assert.equal(state.skill, "
|
|
1059
|
+
assert.equal(state.skill, "blueprint");
|
|
994
1060
|
assert.equal(state.active, true);
|
|
995
|
-
assert.equal(state.initialized_mode, "
|
|
996
|
-
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-1", "
|
|
1061
|
+
assert.equal(state.initialized_mode, "blueprint");
|
|
1062
|
+
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-1", "blueprint-state.json")), true);
|
|
997
1063
|
} finally {
|
|
998
1064
|
await rm(cwd, { recursive: true, force: true });
|
|
999
1065
|
}
|
|
@@ -1010,19 +1076,19 @@ describe("codex native hook dispatch", () => {
|
|
|
1010
1076
|
session_id: "sess-plugin-1",
|
|
1011
1077
|
thread_id: "thread-plugin-1",
|
|
1012
1078
|
turn_id: "turn-plugin-1",
|
|
1013
|
-
prompt: "$roblox-ai-os-creator-skills:
|
|
1079
|
+
prompt: "$roblox-ai-os-creator-skills:blueprint implement issue #1307",
|
|
1014
1080
|
},
|
|
1015
1081
|
{ cwd },
|
|
1016
1082
|
);
|
|
1017
1083
|
|
|
1018
1084
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
1019
|
-
assert.equal(result.skillState?.skill, "
|
|
1085
|
+
assert.equal(result.skillState?.skill, "blueprint");
|
|
1020
1086
|
const message = String(
|
|
1021
1087
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1022
1088
|
);
|
|
1023
|
-
assert.match(message, /\$roblox-ai-os-creator-skills:
|
|
1024
|
-
assert.match(message, /skill:
|
|
1025
|
-
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-plugin-1", "
|
|
1089
|
+
assert.match(message, /\$roblox-ai-os-creator-skills:blueprint" -> blueprint/);
|
|
1090
|
+
assert.match(message, /skill: blueprint activated and initial state initialized at \.rcs\/state\/sessions\/sess-plugin-1\/blueprint-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
1091
|
+
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-plugin-1", "blueprint-state.json")), true);
|
|
1026
1092
|
} finally {
|
|
1027
1093
|
await rm(cwd, { recursive: true, force: true });
|
|
1028
1094
|
}
|
|
@@ -1082,24 +1148,24 @@ describe("codex native hook dispatch", () => {
|
|
|
1082
1148
|
assert.match(message, /ground the task before editing/i);
|
|
1083
1149
|
assert.match(message, /define pass\/fail acceptance criteria/i);
|
|
1084
1150
|
assert.match(message, /direct-tool plus background evidence lanes/i);
|
|
1085
|
-
assert.match(message, /
|
|
1151
|
+
assert.match(message, /Forge owns persistence and the full verified-completion promise/i);
|
|
1086
1152
|
} finally {
|
|
1087
1153
|
await rm(cwd, { recursive: true, force: true });
|
|
1088
1154
|
}
|
|
1089
1155
|
});
|
|
1090
1156
|
|
|
1091
|
-
it("does not activate
|
|
1092
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-
|
|
1157
|
+
it("does not activate Forge workflow state from a plain conversational mention", async () => {
|
|
1158
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-forge-plain-text-"));
|
|
1093
1159
|
try {
|
|
1094
1160
|
await mkdir(join(cwd, ".rcs", "state"), { recursive: true });
|
|
1095
1161
|
const result = await dispatchCodexNativeHook(
|
|
1096
1162
|
{
|
|
1097
1163
|
hook_event_name: "UserPromptSubmit",
|
|
1098
1164
|
cwd,
|
|
1099
|
-
session_id: "sess-
|
|
1100
|
-
thread_id: "thread-
|
|
1101
|
-
turn_id: "turn-
|
|
1102
|
-
prompt: "why does
|
|
1165
|
+
session_id: "sess-forge-plain-text",
|
|
1166
|
+
thread_id: "thread-forge-plain-text",
|
|
1167
|
+
turn_id: "turn-forge-plain-text",
|
|
1168
|
+
prompt: "why does forge keep blocking stop?",
|
|
1103
1169
|
},
|
|
1104
1170
|
{ cwd },
|
|
1105
1171
|
);
|
|
@@ -1107,16 +1173,16 @@ describe("codex native hook dispatch", () => {
|
|
|
1107
1173
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
1108
1174
|
assert.equal(result.skillState, null);
|
|
1109
1175
|
// Triage may inject advisory LIGHT/explore context for the question-shaped
|
|
1110
|
-
// prompt, but the invariant this test guards is that no
|
|
1111
|
-
// is seeded and no
|
|
1176
|
+
// prompt, but the invariant this test guards is that no Forge workflow state
|
|
1177
|
+
// is seeded and no Forge-activation message is emitted.
|
|
1112
1178
|
const advisoryContext = String(
|
|
1113
1179
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1114
1180
|
);
|
|
1115
|
-
assert.doesNotMatch(advisoryContext, /skill:\s*
|
|
1116
|
-
assert.doesNotMatch(advisoryContext, /
|
|
1181
|
+
assert.doesNotMatch(advisoryContext, /skill:\s*forge/i);
|
|
1182
|
+
assert.doesNotMatch(advisoryContext, /forge-state\.json/i);
|
|
1117
1183
|
assert.equal(existsSync(join(cwd, ".rcs", "state", "skill-active-state.json")), false);
|
|
1118
|
-
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-
|
|
1119
|
-
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-
|
|
1184
|
+
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-forge-plain-text", "skill-active-state.json")), false);
|
|
1185
|
+
assert.equal(existsSync(join(cwd, ".rcs", "state", "sessions", "sess-forge-plain-text", "forge-state.json")), false);
|
|
1120
1186
|
} finally {
|
|
1121
1187
|
await rm(cwd, { recursive: true, force: true });
|
|
1122
1188
|
}
|
|
@@ -1183,66 +1249,64 @@ describe("codex native hook dispatch", () => {
|
|
|
1183
1249
|
}
|
|
1184
1250
|
});
|
|
1185
1251
|
|
|
1186
|
-
it("clarifies that prompt-side $
|
|
1187
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-
|
|
1252
|
+
it("clarifies that prompt-side $forge activation routes into the canonical forge runtime without invoking the PRD-gated CLI path", async () => {
|
|
1253
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-forge-routing-"));
|
|
1188
1254
|
try {
|
|
1189
1255
|
await mkdir(join(cwd, ".rcs", "state"), { recursive: true });
|
|
1190
1256
|
const result = await dispatchCodexNativeHook(
|
|
1191
1257
|
{
|
|
1192
1258
|
hook_event_name: "UserPromptSubmit",
|
|
1193
1259
|
cwd,
|
|
1194
|
-
session_id: "sess-
|
|
1195
|
-
thread_id: "thread-
|
|
1196
|
-
turn_id: "turn-
|
|
1197
|
-
prompt: "$
|
|
1260
|
+
session_id: "sess-forge-msg",
|
|
1261
|
+
thread_id: "thread-forge-msg",
|
|
1262
|
+
turn_id: "turn-forge-msg",
|
|
1263
|
+
prompt: "$forge continue verification",
|
|
1198
1264
|
},
|
|
1199
1265
|
{ cwd },
|
|
1200
1266
|
);
|
|
1201
1267
|
|
|
1202
1268
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
1203
|
-
assert.equal(result.skillState?.skill, "
|
|
1269
|
+
assert.equal(result.skillState?.skill, "forge");
|
|
1204
1270
|
const message = String(
|
|
1205
1271
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1206
1272
|
);
|
|
1207
|
-
assert.match(message, /\$
|
|
1208
|
-
assert.match(message, /skill:
|
|
1209
|
-
assert.match(message, /
|
|
1210
|
-
assert.match(message, /Use `rcs ralph --prd \.\.\.` only when you explicitly want the PRD-gated CLI startup path\./);
|
|
1273
|
+
assert.match(message, /\$forge" -> forge/);
|
|
1274
|
+
assert.match(message, /skill: forge activated and initial state initialized at \.rcs\/state\/sessions\/sess-forge-msg\/forge-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
1275
|
+
assert.match(message, /Use `rcs forge --prd \.\.\.` only when you explicitly want the PRD-gated CLI startup path\./);
|
|
1211
1276
|
} finally {
|
|
1212
1277
|
await rm(cwd, { recursive: true, force: true });
|
|
1213
1278
|
}
|
|
1214
1279
|
});
|
|
1215
1280
|
|
|
1216
|
-
it("clarifies that plugin-prefixed prompt-side $
|
|
1217
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-plugin-
|
|
1281
|
+
it("clarifies that plugin-prefixed prompt-side $forge activation routes into the canonical forge runtime without invoking the PRD-gated CLI path", async () => {
|
|
1282
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-plugin-forge-routing-"));
|
|
1218
1283
|
try {
|
|
1219
1284
|
await mkdir(join(cwd, ".rcs", "state"), { recursive: true });
|
|
1220
1285
|
const result = await dispatchCodexNativeHook(
|
|
1221
1286
|
{
|
|
1222
1287
|
hook_event_name: "UserPromptSubmit",
|
|
1223
1288
|
cwd,
|
|
1224
|
-
session_id: "sess-plugin-
|
|
1225
|
-
thread_id: "thread-plugin-
|
|
1226
|
-
turn_id: "turn-plugin-
|
|
1227
|
-
prompt: "$roblox-ai-os-creator-skills:
|
|
1289
|
+
session_id: "sess-plugin-forge-msg",
|
|
1290
|
+
thread_id: "thread-plugin-forge-msg",
|
|
1291
|
+
turn_id: "turn-plugin-forge-msg",
|
|
1292
|
+
prompt: "$roblox-ai-os-creator-skills:forge continue verification",
|
|
1228
1293
|
},
|
|
1229
1294
|
{ cwd },
|
|
1230
1295
|
);
|
|
1231
1296
|
|
|
1232
1297
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
1233
|
-
assert.equal(result.skillState?.skill, "
|
|
1298
|
+
assert.equal(result.skillState?.skill, "forge");
|
|
1234
1299
|
const message = String(
|
|
1235
1300
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1236
1301
|
);
|
|
1237
|
-
assert.match(message, /\$roblox-ai-os-creator-skills:
|
|
1238
|
-
assert.match(message, /skill:
|
|
1239
|
-
assert.match(message, /Prompt-side `\$ralph` activation seeds Ralph workflow state only; it does not invoke `rcs ralph`\./);
|
|
1302
|
+
assert.match(message, /\$roblox-ai-os-creator-skills:forge" -> forge/);
|
|
1303
|
+
assert.match(message, /skill: forge activated and initial state initialized at \.rcs\/state\/sessions\/sess-plugin-forge-msg\/forge-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
1240
1304
|
} finally {
|
|
1241
1305
|
await rm(cwd, { recursive: true, force: true });
|
|
1242
1306
|
}
|
|
1243
1307
|
});
|
|
1244
1308
|
|
|
1245
|
-
it("keeps bare keep-going continuation on the active autopilot skill instead of denying with generic
|
|
1309
|
+
it("keeps bare keep-going continuation on the active autopilot skill instead of denying with generic forge overlap", async () => {
|
|
1246
1310
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-autopilot-bare-continuation-"));
|
|
1247
1311
|
try {
|
|
1248
1312
|
const sessionId = "sess-autopilot-cont";
|
|
@@ -1285,11 +1349,11 @@ describe("codex native hook dispatch", () => {
|
|
|
1285
1349
|
const message = String(
|
|
1286
1350
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1287
1351
|
);
|
|
1288
|
-
assert.match(message, /"keep going" ->
|
|
1352
|
+
assert.match(message, /"keep going" -> forge/);
|
|
1289
1353
|
assert.doesNotMatch(message, /denied workflow keyword/i);
|
|
1290
|
-
assert.doesNotMatch(message, /Unsupported workflow overlap: autopilot \+
|
|
1291
|
-
assert.doesNotMatch(message, /Prompt-side `\$
|
|
1292
|
-
assert.equal(existsSync(join(sessionDir, "
|
|
1354
|
+
assert.doesNotMatch(message, /Unsupported workflow overlap: autopilot \+ forge\./);
|
|
1355
|
+
assert.doesNotMatch(message, /Prompt-side `\$forge` activation/);
|
|
1356
|
+
assert.equal(existsSync(join(sessionDir, "forge-state.json")), false);
|
|
1293
1357
|
} finally {
|
|
1294
1358
|
await rm(cwd, { recursive: true, force: true });
|
|
1295
1359
|
}
|
|
@@ -1449,26 +1513,26 @@ describe("codex native hook dispatch", () => {
|
|
|
1449
1513
|
}
|
|
1450
1514
|
});
|
|
1451
1515
|
|
|
1452
|
-
it("keeps bare keep-going continuation on the active
|
|
1453
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-
|
|
1516
|
+
it("keeps bare keep-going continuation on the active forge skill without resetting through generic keep-going routing", async () => {
|
|
1517
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-forge-bare-continuation-"));
|
|
1454
1518
|
try {
|
|
1455
|
-
const sessionId = "sess-
|
|
1519
|
+
const sessionId = "sess-forge-cont";
|
|
1456
1520
|
const sessionDir = join(cwd, ".rcs", "state", "sessions", sessionId);
|
|
1457
1521
|
await mkdir(sessionDir, { recursive: true });
|
|
1458
1522
|
await writeJson(join(sessionDir, "skill-active-state.json"), {
|
|
1459
1523
|
version: 1,
|
|
1460
1524
|
active: true,
|
|
1461
|
-
skill: "
|
|
1462
|
-
keyword: "$
|
|
1525
|
+
skill: "forge",
|
|
1526
|
+
keyword: "$forge",
|
|
1463
1527
|
phase: "executing",
|
|
1464
1528
|
session_id: sessionId,
|
|
1465
1529
|
active_skills: [
|
|
1466
|
-
{ skill: "
|
|
1530
|
+
{ skill: "forge", phase: "executing", active: true, session_id: sessionId },
|
|
1467
1531
|
],
|
|
1468
1532
|
});
|
|
1469
|
-
await writeJson(join(sessionDir, "
|
|
1533
|
+
await writeJson(join(sessionDir, "forge-state.json"), {
|
|
1470
1534
|
active: true,
|
|
1471
|
-
mode: "
|
|
1535
|
+
mode: "forge",
|
|
1472
1536
|
current_phase: "verifying",
|
|
1473
1537
|
started_at: "2026-04-19T00:00:00.000Z",
|
|
1474
1538
|
updated_at: "2026-04-19T00:10:00.000Z",
|
|
@@ -1482,19 +1546,19 @@ describe("codex native hook dispatch", () => {
|
|
|
1482
1546
|
hook_event_name: "UserPromptSubmit",
|
|
1483
1547
|
cwd,
|
|
1484
1548
|
session_id: sessionId,
|
|
1485
|
-
thread_id: "thread-
|
|
1486
|
-
turn_id: "turn-
|
|
1549
|
+
thread_id: "thread-forge-cont",
|
|
1550
|
+
turn_id: "turn-forge-cont",
|
|
1487
1551
|
prompt: "keep going now",
|
|
1488
1552
|
},
|
|
1489
1553
|
{ cwd },
|
|
1490
1554
|
);
|
|
1491
1555
|
|
|
1492
1556
|
assert.equal(result.rcsEventName, "keyword-detector");
|
|
1493
|
-
assert.equal(result.skillState?.skill, "
|
|
1557
|
+
assert.equal(result.skillState?.skill, "forge");
|
|
1494
1558
|
const message = String(
|
|
1495
1559
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || "",
|
|
1496
1560
|
);
|
|
1497
|
-
assert.match(message, /"keep going" ->
|
|
1561
|
+
assert.match(message, /"keep going" -> forge/);
|
|
1498
1562
|
assert.doesNotMatch(message, /denied workflow keyword/i);
|
|
1499
1563
|
assert.doesNotMatch(message, /mode transiting:/);
|
|
1500
1564
|
} finally {
|
|
@@ -1514,7 +1578,7 @@ describe("codex native hook dispatch", () => {
|
|
|
1514
1578
|
session_id: "sess-wrapper-meta-1",
|
|
1515
1579
|
thread_id: "thread-wrapper-meta-1",
|
|
1516
1580
|
turn_id: "turn-wrapper-meta-1",
|
|
1517
|
-
input: "$
|
|
1581
|
+
input: "$blueprint hidden wrapper text should stay non-routing",
|
|
1518
1582
|
text: JSON.stringify({
|
|
1519
1583
|
hook_run_id: "native-stop-wrapper-1",
|
|
1520
1584
|
note: "cancel stop wrapper metadata must not be treated like user intent",
|
|
@@ -1572,7 +1636,7 @@ export async function onHookEvent(event) {
|
|
|
1572
1636
|
session_id: "sess-sanitized-1",
|
|
1573
1637
|
thread_id: "thread-sanitized-1",
|
|
1574
1638
|
turn_id: "turn-sanitized-1",
|
|
1575
|
-
prompt: "$
|
|
1639
|
+
prompt: "$blueprint approve this blocker-sensitive request",
|
|
1576
1640
|
},
|
|
1577
1641
|
{ cwd },
|
|
1578
1642
|
);
|
|
@@ -1678,8 +1742,8 @@ export async function onHookEvent(event) {
|
|
|
1678
1742
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-team-native-bridge-block-"));
|
|
1679
1743
|
try {
|
|
1680
1744
|
await mkdir(join(cwd, ".rcs", "state", "sessions", "sess-team-bridge"), { recursive: true });
|
|
1681
|
-
await writeJson(join(cwd, ".rcs", "state", "sessions", "sess-team-bridge", "
|
|
1682
|
-
mode: "
|
|
1745
|
+
await writeJson(join(cwd, ".rcs", "state", "sessions", "sess-team-bridge", "forge-state.json"), {
|
|
1746
|
+
mode: "forge",
|
|
1683
1747
|
active: true,
|
|
1684
1748
|
tmux_pane_id: "%42",
|
|
1685
1749
|
});
|
|
@@ -1831,12 +1895,12 @@ export async function onHookEvent(event) {
|
|
|
1831
1895
|
session_id: "sess-handoff-1",
|
|
1832
1896
|
thread_id: "thread-handoff-1",
|
|
1833
1897
|
turn_id: "turn-handoff-1",
|
|
1834
|
-
prompt: "$
|
|
1898
|
+
prompt: "$blueprint implement the approved contract",
|
|
1835
1899
|
},
|
|
1836
1900
|
{ cwd },
|
|
1837
1901
|
);
|
|
1838
1902
|
|
|
1839
|
-
assert.match(JSON.stringify(result.outputJson), /mode transiting: deep-interview ->
|
|
1903
|
+
assert.match(JSON.stringify(result.outputJson), /mode transiting: deep-interview -> blueprint/);
|
|
1840
1904
|
const completed = JSON.parse(await readFile(join(sessionDir, "deep-interview-state.json"), "utf-8")) as {
|
|
1841
1905
|
active?: boolean;
|
|
1842
1906
|
current_phase?: string;
|
|
@@ -1860,7 +1924,7 @@ export async function onHookEvent(event) {
|
|
|
1860
1924
|
session_id: "sess-multi-1",
|
|
1861
1925
|
thread_id: "thread-multi-1",
|
|
1862
1926
|
turn_id: "turn-multi-1",
|
|
1863
|
-
prompt: "$
|
|
1927
|
+
prompt: "$blueprint $team $forge ship this fix",
|
|
1864
1928
|
},
|
|
1865
1929
|
{ cwd },
|
|
1866
1930
|
);
|
|
@@ -1868,12 +1932,12 @@ export async function onHookEvent(event) {
|
|
|
1868
1932
|
const message = String(
|
|
1869
1933
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || '',
|
|
1870
1934
|
);
|
|
1871
|
-
assert.match(message, /\$
|
|
1935
|
+
assert.match(message, /\$blueprint" -> blueprint/);
|
|
1872
1936
|
assert.match(message, /\$team" -> team/);
|
|
1873
|
-
assert.match(message, /\$
|
|
1937
|
+
assert.match(message, /\$forge" -> forge/);
|
|
1874
1938
|
assert.doesNotMatch(message, /mode transiting:/);
|
|
1875
|
-
assert.match(message, /planning preserved over simultaneous execution follow-up; deferred skills: team,
|
|
1876
|
-
assert.match(message, /skill:
|
|
1939
|
+
assert.match(message, /planning preserved over simultaneous execution follow-up; deferred skills: team, forge\./);
|
|
1940
|
+
assert.match(message, /skill: blueprint activated and initial state initialized at \.rcs\/state\/sessions\/sess-multi-1\/blueprint-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
1877
1941
|
assert.doesNotMatch(message, /Use the durable RCS team runtime via `rcs team \.\.\.`/);
|
|
1878
1942
|
} finally {
|
|
1879
1943
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -1892,7 +1956,7 @@ export async function onHookEvent(event) {
|
|
|
1892
1956
|
session_id: "sess-plugin-multi-1",
|
|
1893
1957
|
thread_id: "thread-plugin-multi-1",
|
|
1894
1958
|
turn_id: "turn-plugin-multi-1",
|
|
1895
|
-
prompt: "$roblox-ai-os-creator-skills:
|
|
1959
|
+
prompt: "$roblox-ai-os-creator-skills:blueprint $team $roblox-ai-os-creator-skills:forge ship this fix",
|
|
1896
1960
|
},
|
|
1897
1961
|
{ cwd },
|
|
1898
1962
|
);
|
|
@@ -1900,12 +1964,12 @@ export async function onHookEvent(event) {
|
|
|
1900
1964
|
const message = String(
|
|
1901
1965
|
(result.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext || '',
|
|
1902
1966
|
);
|
|
1903
|
-
assert.match(message, /\$roblox-ai-os-creator-skills:
|
|
1967
|
+
assert.match(message, /\$roblox-ai-os-creator-skills:blueprint" -> blueprint/);
|
|
1904
1968
|
assert.match(message, /\$team" -> team/);
|
|
1905
|
-
assert.match(message, /\$roblox-ai-os-creator-skills:
|
|
1969
|
+
assert.match(message, /\$roblox-ai-os-creator-skills:forge" -> forge/);
|
|
1906
1970
|
assert.doesNotMatch(message, /mode transiting:/);
|
|
1907
|
-
assert.match(message, /planning preserved over simultaneous execution follow-up; deferred skills: team,
|
|
1908
|
-
assert.match(message, /skill:
|
|
1971
|
+
assert.match(message, /planning preserved over simultaneous execution follow-up; deferred skills: team, forge\./);
|
|
1972
|
+
assert.match(message, /skill: blueprint activated and initial state initialized at \.rcs\/state\/sessions\/sess-plugin-multi-1\/blueprint-state\.json; write subsequent updates via rcs_state MCP\./);
|
|
1909
1973
|
} finally {
|
|
1910
1974
|
await rm(cwd, { recursive: true, force: true });
|
|
1911
1975
|
}
|
|
@@ -1957,7 +2021,7 @@ esac
|
|
|
1957
2021
|
hook_event_name: "UserPromptSubmit",
|
|
1958
2022
|
cwd,
|
|
1959
2023
|
session_id: "sess-hud-1",
|
|
1960
|
-
prompt: "$
|
|
2024
|
+
prompt: "$blueprint prepare plan",
|
|
1961
2025
|
},
|
|
1962
2026
|
{ cwd },
|
|
1963
2027
|
);
|
|
@@ -1966,7 +2030,10 @@ esac
|
|
|
1966
2030
|
const tmuxCalls = await readFile(tmuxLog, "utf-8");
|
|
1967
2031
|
assert.match(tmuxCalls, /list-panes -t %1 -F/);
|
|
1968
2032
|
assert.match(tmuxCalls, /split-window -v -l 3 -d -t %1 -c/);
|
|
1969
|
-
assert.
|
|
2033
|
+
assert.ok(
|
|
2034
|
+
/resize-pane -t %9 -y 3/.test(tmuxCalls)
|
|
2035
|
+
|| /split-window -v -l 3 -d -t %1 -c/.test(tmuxCalls),
|
|
2036
|
+
);
|
|
1970
2037
|
assert.match(tmuxCalls, /dist\/cli\/rcs\.js' hud --watch --preset=focused/);
|
|
1971
2038
|
assert.doesNotMatch(tmuxCalls, /\/tmp\/codex-host-binary' hud --watch/);
|
|
1972
2039
|
} finally {
|
|
@@ -3082,16 +3149,16 @@ esac
|
|
|
3082
3149
|
it("warns on PreToolUse git commit when mapped source changes lack staged docs refresh", async () => {
|
|
3083
3150
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-pretool-document-refresh-warn-"));
|
|
3084
3151
|
try {
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3152
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
3153
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
3154
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
3088
3155
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
3089
3156
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
3090
3157
|
await writeFile(join(cwd, "README.md"), "base\n", "utf-8");
|
|
3091
|
-
|
|
3092
|
-
|
|
3158
|
+
execFileSyncCompat("git", ["add", "README.md", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3159
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
3093
3160
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
3094
|
-
|
|
3161
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3095
3162
|
|
|
3096
3163
|
const result = await dispatchCodexNativeHook(
|
|
3097
3164
|
{
|
|
@@ -3128,16 +3195,16 @@ esac
|
|
|
3128
3195
|
try {
|
|
3129
3196
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
3130
3197
|
await mkdir(join(cwd, "docs"), { recursive: true });
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3198
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
3199
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
3200
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
3134
3201
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
3135
3202
|
await writeFile(join(cwd, "docs", "codex-native-hooks.md"), "initial\n", "utf-8");
|
|
3136
|
-
|
|
3137
|
-
|
|
3203
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts", "docs/codex-native-hooks.md"], { cwd, stdio: "ignore" });
|
|
3204
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
3138
3205
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
3139
3206
|
await writeFile(join(cwd, "docs", "codex-native-hooks.md"), "updated\n", "utf-8");
|
|
3140
|
-
|
|
3207
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts", "docs/codex-native-hooks.md"], { cwd, stdio: "ignore" });
|
|
3141
3208
|
|
|
3142
3209
|
const result = await dispatchCodexNativeHook(
|
|
3143
3210
|
{
|
|
@@ -3170,21 +3237,21 @@ esac
|
|
|
3170
3237
|
const otherRepo = await mkdtemp(join(tmpdir(), "rcs-native-hook-pretool-document-refresh-other-"));
|
|
3171
3238
|
try {
|
|
3172
3239
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3240
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
3241
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
3242
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
3176
3243
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
3177
|
-
|
|
3178
|
-
|
|
3244
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3245
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
3179
3246
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
3180
|
-
|
|
3247
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3181
3248
|
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3249
|
+
execFileSyncCompat("git", ["init"], { cwd: otherRepo, stdio: "ignore" });
|
|
3250
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd: otherRepo, stdio: "ignore" });
|
|
3251
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd: otherRepo, stdio: "ignore" });
|
|
3185
3252
|
await writeFile(join(otherRepo, "README.md"), "base\n", "utf-8");
|
|
3186
|
-
|
|
3187
|
-
|
|
3253
|
+
execFileSyncCompat("git", ["add", "README.md"], { cwd: otherRepo, stdio: "ignore" });
|
|
3254
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd: otherRepo, stdio: "ignore" });
|
|
3188
3255
|
|
|
3189
3256
|
const result = await dispatchCodexNativeHook(
|
|
3190
3257
|
{
|
|
@@ -3218,14 +3285,14 @@ esac
|
|
|
3218
3285
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-pretool-document-refresh-exempt-"));
|
|
3219
3286
|
try {
|
|
3220
3287
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3288
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
3289
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
3290
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
3224
3291
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
3225
|
-
|
|
3226
|
-
|
|
3292
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3293
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
3227
3294
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
3228
|
-
|
|
3295
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
3229
3296
|
|
|
3230
3297
|
const result = await dispatchCodexNativeHook(
|
|
3231
3298
|
{
|
|
@@ -4782,7 +4849,7 @@ esac
|
|
|
4782
4849
|
}
|
|
4783
4850
|
});
|
|
4784
4851
|
|
|
4785
|
-
it("returns Stop continuation output for active
|
|
4852
|
+
it("returns Stop continuation output for active blueprint skill with matching active mode state and without active subagents", async () => {
|
|
4786
4853
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-skill-"));
|
|
4787
4854
|
try {
|
|
4788
4855
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -4790,10 +4857,10 @@ esac
|
|
|
4790
4857
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-stop-skill" });
|
|
4791
4858
|
await writeJson(join(stateDir, "sessions", "sess-stop-skill", "skill-active-state.json"), {
|
|
4792
4859
|
active: true,
|
|
4793
|
-
skill: "
|
|
4860
|
+
skill: "blueprint",
|
|
4794
4861
|
phase: "planning",
|
|
4795
4862
|
});
|
|
4796
|
-
await writeJson(join(stateDir, "sessions", "sess-stop-skill", "
|
|
4863
|
+
await writeJson(join(stateDir, "sessions", "sess-stop-skill", "blueprint-state.json"), {
|
|
4797
4864
|
active: true,
|
|
4798
4865
|
current_phase: "planning",
|
|
4799
4866
|
});
|
|
@@ -4811,16 +4878,16 @@ esac
|
|
|
4811
4878
|
assert.deepEqual(result.outputJson, {
|
|
4812
4879
|
decision: "block",
|
|
4813
4880
|
reason:
|
|
4814
|
-
"RCS skill
|
|
4815
|
-
stopReason: "
|
|
4816
|
-
systemMessage: "RCS skill
|
|
4881
|
+
"RCS skill blueprint is still active (phase: planning); continue until the current blueprint workflow reaches a terminal state.",
|
|
4882
|
+
stopReason: "skill_blueprint_planning",
|
|
4883
|
+
systemMessage: "RCS skill blueprint is still active (phase: planning).",
|
|
4817
4884
|
});
|
|
4818
4885
|
} finally {
|
|
4819
4886
|
await rm(cwd, { recursive: true, force: true });
|
|
4820
4887
|
}
|
|
4821
4888
|
});
|
|
4822
4889
|
|
|
4823
|
-
it("does not block on stale
|
|
4890
|
+
it("does not block on stale blueprint skill-active state when the matching mode state is absent", async () => {
|
|
4824
4891
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-skill-"));
|
|
4825
4892
|
try {
|
|
4826
4893
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -4828,11 +4895,11 @@ esac
|
|
|
4828
4895
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-stop-stale-skill" });
|
|
4829
4896
|
await writeJson(join(stateDir, "sessions", "sess-stop-stale-skill", "skill-active-state.json"), {
|
|
4830
4897
|
active: true,
|
|
4831
|
-
skill: "
|
|
4898
|
+
skill: "blueprint",
|
|
4832
4899
|
phase: "planning",
|
|
4833
4900
|
session_id: "sess-stop-stale-skill",
|
|
4834
4901
|
active_skills: [{
|
|
4835
|
-
skill: "
|
|
4902
|
+
skill: "blueprint",
|
|
4836
4903
|
phase: "planning",
|
|
4837
4904
|
active: true,
|
|
4838
4905
|
session_id: "sess-stop-stale-skill",
|
|
@@ -4855,34 +4922,34 @@ esac
|
|
|
4855
4922
|
}
|
|
4856
4923
|
});
|
|
4857
4924
|
|
|
4858
|
-
it("does not block on stale
|
|
4859
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-terminal-
|
|
4925
|
+
it("does not block on stale blueprint skill-active when canonical run-state is terminal", async () => {
|
|
4926
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-terminal-blueprint-run-"));
|
|
4860
4927
|
try {
|
|
4861
4928
|
const stateDir = join(cwd, ".rcs", "state");
|
|
4862
|
-
const sessionId = "sess-stop-terminal-
|
|
4929
|
+
const sessionId = "sess-stop-terminal-blueprint";
|
|
4863
4930
|
await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
|
|
4864
4931
|
await writeJson(join(stateDir, "session.json"), { session_id: sessionId });
|
|
4865
4932
|
await writeJson(join(stateDir, "sessions", sessionId, "skill-active-state.json"), {
|
|
4866
4933
|
active: true,
|
|
4867
|
-
skill: "
|
|
4934
|
+
skill: "blueprint",
|
|
4868
4935
|
phase: "planning",
|
|
4869
4936
|
session_id: sessionId,
|
|
4870
4937
|
active_skills: [{
|
|
4871
|
-
skill: "
|
|
4938
|
+
skill: "blueprint",
|
|
4872
4939
|
phase: "planning",
|
|
4873
4940
|
active: true,
|
|
4874
4941
|
session_id: sessionId,
|
|
4875
4942
|
}],
|
|
4876
4943
|
});
|
|
4877
|
-
await writeJson(join(stateDir, "sessions", sessionId, "
|
|
4944
|
+
await writeJson(join(stateDir, "sessions", sessionId, "blueprint-state.json"), {
|
|
4878
4945
|
active: true,
|
|
4879
|
-
mode: "
|
|
4946
|
+
mode: "blueprint",
|
|
4880
4947
|
current_phase: "planning",
|
|
4881
4948
|
session_id: sessionId,
|
|
4882
4949
|
});
|
|
4883
4950
|
await writeJson(join(stateDir, "sessions", sessionId, "run-state.json"), {
|
|
4884
4951
|
version: 1,
|
|
4885
|
-
mode: "
|
|
4952
|
+
mode: "blueprint",
|
|
4886
4953
|
active: false,
|
|
4887
4954
|
outcome: "finish",
|
|
4888
4955
|
lifecycle_outcome: "finished",
|
|
@@ -4907,30 +4974,30 @@ esac
|
|
|
4907
4974
|
}
|
|
4908
4975
|
});
|
|
4909
4976
|
|
|
4910
|
-
it("does not block on stale
|
|
4911
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-foreign-
|
|
4977
|
+
it("does not block on stale blueprint skill-active when pinned mode state belongs to another session", async () => {
|
|
4978
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-foreign-blueprint-"));
|
|
4912
4979
|
try {
|
|
4913
4980
|
const stateDir = join(cwd, ".rcs", "state");
|
|
4914
|
-
const sessionId = "sess-stop-current-
|
|
4981
|
+
const sessionId = "sess-stop-current-blueprint";
|
|
4915
4982
|
await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
|
|
4916
4983
|
await writeJson(join(stateDir, "session.json"), { session_id: sessionId });
|
|
4917
4984
|
await writeJson(join(stateDir, "sessions", sessionId, "skill-active-state.json"), {
|
|
4918
4985
|
active: true,
|
|
4919
|
-
skill: "
|
|
4986
|
+
skill: "blueprint",
|
|
4920
4987
|
phase: "planning",
|
|
4921
4988
|
session_id: sessionId,
|
|
4922
4989
|
active_skills: [{
|
|
4923
|
-
skill: "
|
|
4990
|
+
skill: "blueprint",
|
|
4924
4991
|
phase: "planning",
|
|
4925
4992
|
active: true,
|
|
4926
4993
|
session_id: sessionId,
|
|
4927
4994
|
}],
|
|
4928
4995
|
});
|
|
4929
|
-
await writeJson(join(stateDir, "sessions", sessionId, "
|
|
4996
|
+
await writeJson(join(stateDir, "sessions", sessionId, "blueprint-state.json"), {
|
|
4930
4997
|
active: true,
|
|
4931
|
-
mode: "
|
|
4998
|
+
mode: "blueprint",
|
|
4932
4999
|
current_phase: "planning",
|
|
4933
|
-
session_id: "sess-other-
|
|
5000
|
+
session_id: "sess-other-blueprint",
|
|
4934
5001
|
});
|
|
4935
5002
|
|
|
4936
5003
|
const result = await dispatchCodexNativeHook(
|
|
@@ -4949,7 +5016,7 @@ esac
|
|
|
4949
5016
|
}
|
|
4950
5017
|
});
|
|
4951
5018
|
|
|
4952
|
-
it("does not block on active
|
|
5019
|
+
it("does not block on active blueprint skill when subagents are still active", async () => {
|
|
4953
5020
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-skill-subagent-"));
|
|
4954
5021
|
try {
|
|
4955
5022
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -4957,10 +5024,10 @@ esac
|
|
|
4957
5024
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-stop-skill-subagent" });
|
|
4958
5025
|
await writeJson(join(stateDir, "sessions", "sess-stop-skill-subagent", "skill-active-state.json"), {
|
|
4959
5026
|
active: true,
|
|
4960
|
-
skill: "
|
|
5027
|
+
skill: "blueprint",
|
|
4961
5028
|
phase: "planning",
|
|
4962
5029
|
});
|
|
4963
|
-
await writeJson(join(stateDir, "sessions", "sess-stop-skill-subagent", "
|
|
5030
|
+
await writeJson(join(stateDir, "sessions", "sess-stop-skill-subagent", "blueprint-state.json"), {
|
|
4964
5031
|
active: true,
|
|
4965
5032
|
current_phase: "planning",
|
|
4966
5033
|
});
|
|
@@ -5007,14 +5074,14 @@ esac
|
|
|
5007
5074
|
}
|
|
5008
5075
|
});
|
|
5009
5076
|
|
|
5010
|
-
it("does not block on stale root
|
|
5077
|
+
it("does not block on stale root blueprint skill when the explicit session-scoped canonical skill state is absent", async () => {
|
|
5011
5078
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-root-skill-"));
|
|
5012
5079
|
try {
|
|
5013
5080
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5014
5081
|
await mkdir(stateDir, { recursive: true });
|
|
5015
5082
|
await writeJson(join(stateDir, "skill-active-state.json"), {
|
|
5016
5083
|
active: true,
|
|
5017
|
-
skill: "
|
|
5084
|
+
skill: "blueprint",
|
|
5018
5085
|
phase: "planning",
|
|
5019
5086
|
});
|
|
5020
5087
|
|
|
@@ -5582,16 +5649,16 @@ esac
|
|
|
5582
5649
|
}
|
|
5583
5650
|
});
|
|
5584
5651
|
|
|
5585
|
-
it("returns a non-blocking Stop document-refresh warning before auto-nudge when
|
|
5652
|
+
it("returns a non-blocking Stop document-refresh warning before auto-nudge when Forge is not active", async () => {
|
|
5586
5653
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-document-refresh-"));
|
|
5587
5654
|
try {
|
|
5588
5655
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
5589
|
-
|
|
5590
|
-
|
|
5591
|
-
|
|
5656
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
5657
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
5658
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
5592
5659
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
5593
|
-
|
|
5594
|
-
|
|
5660
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
5661
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
5595
5662
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
5596
5663
|
|
|
5597
5664
|
const result = await dispatchCodexNativeHook(
|
|
@@ -5618,12 +5685,12 @@ esac
|
|
|
5618
5685
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-document-refresh-nonterminal-"));
|
|
5619
5686
|
try {
|
|
5620
5687
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
5621
|
-
|
|
5622
|
-
|
|
5623
|
-
|
|
5688
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
5689
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
5690
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
5624
5691
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
5625
|
-
|
|
5626
|
-
|
|
5692
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
5693
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
5627
5694
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
5628
5695
|
|
|
5629
5696
|
const result = await dispatchCodexNativeHook(
|
|
@@ -5646,12 +5713,12 @@ esac
|
|
|
5646
5713
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-document-refresh-dedupe-"));
|
|
5647
5714
|
try {
|
|
5648
5715
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5716
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
5717
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
5718
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
5652
5719
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
5653
|
-
|
|
5654
|
-
|
|
5720
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
5721
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
5655
5722
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
5656
5723
|
|
|
5657
5724
|
const payload = {
|
|
@@ -5675,12 +5742,12 @@ esac
|
|
|
5675
5742
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-document-refresh-exempt-"));
|
|
5676
5743
|
try {
|
|
5677
5744
|
await mkdir(join(cwd, "src", "scripts"), { recursive: true });
|
|
5678
|
-
|
|
5679
|
-
|
|
5680
|
-
|
|
5745
|
+
execFileSyncCompat("git", ["init"], { cwd, stdio: "ignore" });
|
|
5746
|
+
execFileSyncCompat("git", ["config", "user.email", "test@example.com"], { cwd, stdio: "ignore" });
|
|
5747
|
+
execFileSyncCompat("git", ["config", "user.name", "Test User"], { cwd, stdio: "ignore" });
|
|
5681
5748
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 1;\n", "utf-8");
|
|
5682
|
-
|
|
5683
|
-
|
|
5749
|
+
execFileSyncCompat("git", ["add", "src/scripts/codex-native-hook.ts"], { cwd, stdio: "ignore" });
|
|
5750
|
+
execFileSyncCompat("git", ["commit", "-m", "init"], { cwd, stdio: "ignore" });
|
|
5684
5751
|
await writeFile(join(cwd, "src", "scripts", "codex-native-hook.ts"), "export const hook = 2;\n", "utf-8");
|
|
5685
5752
|
|
|
5686
5753
|
const result = await dispatchCodexNativeHook(
|
|
@@ -5699,13 +5766,13 @@ esac
|
|
|
5699
5766
|
}
|
|
5700
5767
|
});
|
|
5701
5768
|
|
|
5702
|
-
it("returns Stop continuation output while
|
|
5769
|
+
it("returns Stop continuation output while Forge is active without an explicit session pin", async () => {
|
|
5703
5770
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-"));
|
|
5704
5771
|
try {
|
|
5705
5772
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5706
5773
|
await mkdir(stateDir, { recursive: true });
|
|
5707
5774
|
await writeFile(
|
|
5708
|
-
join(stateDir, "
|
|
5775
|
+
join(stateDir, "forge-state.json"),
|
|
5709
5776
|
JSON.stringify({
|
|
5710
5777
|
active: true,
|
|
5711
5778
|
current_phase: "executing",
|
|
@@ -5724,33 +5791,33 @@ esac
|
|
|
5724
5791
|
assert.deepEqual(result.outputJson, {
|
|
5725
5792
|
decision: "block",
|
|
5726
5793
|
reason:
|
|
5727
|
-
"RCS
|
|
5728
|
-
stopReason: "
|
|
5794
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5795
|
+
stopReason: "forge_executing",
|
|
5729
5796
|
systemMessage:
|
|
5730
|
-
"RCS
|
|
5797
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5731
5798
|
});
|
|
5732
5799
|
} finally {
|
|
5733
5800
|
await rm(cwd, { recursive: true, force: true });
|
|
5734
5801
|
}
|
|
5735
5802
|
});
|
|
5736
5803
|
|
|
5737
|
-
it("blocks Stop from session-scoped
|
|
5738
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
5804
|
+
it("blocks Stop from session-scoped Forge state when session.json points to another session", async () => {
|
|
5805
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-session-mismatch-"));
|
|
5739
5806
|
try {
|
|
5740
5807
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5741
|
-
await mkdir(join(stateDir, "sessions", "sess-live-
|
|
5742
|
-
await writeJson(join(stateDir, "session.json"), { session_id: "sess-other-
|
|
5743
|
-
await writeJson(join(stateDir, "sessions", "sess-live-
|
|
5808
|
+
await mkdir(join(stateDir, "sessions", "sess-live-forge"), { recursive: true });
|
|
5809
|
+
await writeJson(join(stateDir, "session.json"), { session_id: "sess-other-forge" });
|
|
5810
|
+
await writeJson(join(stateDir, "sessions", "sess-live-forge", "forge-state.json"), {
|
|
5744
5811
|
active: true,
|
|
5745
5812
|
current_phase: "executing",
|
|
5746
|
-
session_id: "sess-live-
|
|
5813
|
+
session_id: "sess-live-forge",
|
|
5747
5814
|
});
|
|
5748
5815
|
|
|
5749
5816
|
const result = await dispatchCodexNativeHook(
|
|
5750
5817
|
{
|
|
5751
5818
|
hook_event_name: "Stop",
|
|
5752
5819
|
cwd,
|
|
5753
|
-
session_id: "sess-live-
|
|
5820
|
+
session_id: "sess-live-forge",
|
|
5754
5821
|
},
|
|
5755
5822
|
{ cwd },
|
|
5756
5823
|
);
|
|
@@ -5759,24 +5826,24 @@ esac
|
|
|
5759
5826
|
assert.deepEqual(result.outputJson, {
|
|
5760
5827
|
decision: "block",
|
|
5761
5828
|
reason:
|
|
5762
|
-
"RCS
|
|
5763
|
-
stopReason: "
|
|
5829
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/sessions/sess-live-forge/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5830
|
+
stopReason: "forge_executing",
|
|
5764
5831
|
systemMessage:
|
|
5765
|
-
"RCS
|
|
5832
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/sessions/sess-live-forge/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5766
5833
|
});
|
|
5767
5834
|
} finally {
|
|
5768
5835
|
await rm(cwd, { recursive: true, force: true });
|
|
5769
5836
|
}
|
|
5770
5837
|
});
|
|
5771
5838
|
|
|
5772
|
-
it("does not block Stop from stale session-scoped
|
|
5773
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-session-
|
|
5839
|
+
it("does not block Stop from stale session-scoped Forge state that belongs to another session", async () => {
|
|
5840
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-session-forge-"));
|
|
5774
5841
|
try {
|
|
5775
5842
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5776
5843
|
await mkdir(join(stateDir, "sessions", "sess-current"), { recursive: true });
|
|
5777
5844
|
await mkdir(join(stateDir, "sessions", "sess-stale"), { recursive: true });
|
|
5778
5845
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-current" });
|
|
5779
|
-
await writeJson(join(stateDir, "sessions", "sess-stale", "
|
|
5846
|
+
await writeJson(join(stateDir, "sessions", "sess-stale", "forge-state.json"), {
|
|
5780
5847
|
active: true,
|
|
5781
5848
|
current_phase: "starting",
|
|
5782
5849
|
session_id: "sess-stale",
|
|
@@ -5798,8 +5865,8 @@ esac
|
|
|
5798
5865
|
}
|
|
5799
5866
|
});
|
|
5800
5867
|
|
|
5801
|
-
it("does not block Stop from stale current-session
|
|
5802
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-current-session-
|
|
5868
|
+
it("does not block Stop from stale current-session Forge state when session.json points to a dead owner", async () => {
|
|
5869
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-stale-current-session-forge-"));
|
|
5803
5870
|
try {
|
|
5804
5871
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5805
5872
|
await mkdir(join(stateDir, "sessions", "sess-dead"), { recursive: true });
|
|
@@ -5809,7 +5876,7 @@ esac
|
|
|
5809
5876
|
pid: Number.MAX_SAFE_INTEGER,
|
|
5810
5877
|
started_at: "2026-01-01T00:00:00.000Z",
|
|
5811
5878
|
});
|
|
5812
|
-
await writeJson(join(stateDir, "sessions", "sess-dead", "
|
|
5879
|
+
await writeJson(join(stateDir, "sessions", "sess-dead", "forge-state.json"), {
|
|
5813
5880
|
active: true,
|
|
5814
5881
|
current_phase: "verifying",
|
|
5815
5882
|
session_id: "sess-dead",
|
|
@@ -5823,7 +5890,7 @@ esac
|
|
|
5823
5890
|
await writeJson(join(stateDir, "native-stop-state.json"), {
|
|
5824
5891
|
sessions: {
|
|
5825
5892
|
"sess-dead": {
|
|
5826
|
-
last_signature: "
|
|
5893
|
+
last_signature: "forge-stop|sess-dead|thread-1|no-message|verifying",
|
|
5827
5894
|
updated_at: "2026-04-20T21:00:00.000Z",
|
|
5828
5895
|
},
|
|
5829
5896
|
},
|
|
@@ -5847,21 +5914,21 @@ esac
|
|
|
5847
5914
|
}
|
|
5848
5915
|
});
|
|
5849
5916
|
|
|
5850
|
-
it("does not hard-block Stop on stale session-scoped
|
|
5851
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-cleared-stale-
|
|
5917
|
+
it("does not hard-block Stop on stale session-scoped Forge starting state after visible active modes are cleared", async () => {
|
|
5918
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-cleared-stale-forge-"));
|
|
5852
5919
|
try {
|
|
5853
5920
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5854
|
-
const sessionId = "sess-cleared-
|
|
5921
|
+
const sessionId = "sess-cleared-forge";
|
|
5855
5922
|
await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
|
|
5856
|
-
await writeJson(join(stateDir, "sessions", sessionId, "
|
|
5923
|
+
await writeJson(join(stateDir, "sessions", sessionId, "forge-state.json"), {
|
|
5857
5924
|
active: true,
|
|
5858
|
-
mode: "
|
|
5925
|
+
mode: "forge",
|
|
5859
5926
|
current_phase: "starting",
|
|
5860
5927
|
session_id: sessionId,
|
|
5861
5928
|
});
|
|
5862
5929
|
await writeJson(join(stateDir, "skill-active-state.json"), {
|
|
5863
5930
|
active: false,
|
|
5864
|
-
skill: "
|
|
5931
|
+
skill: "forge",
|
|
5865
5932
|
active_skills: [],
|
|
5866
5933
|
});
|
|
5867
5934
|
|
|
@@ -5886,23 +5953,23 @@ esac
|
|
|
5886
5953
|
}
|
|
5887
5954
|
});
|
|
5888
5955
|
|
|
5889
|
-
it("blocks Stop on visible active session-scoped
|
|
5890
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-visible-starting-
|
|
5956
|
+
it("blocks Stop on visible active session-scoped Forge starting state and reports its path", async () => {
|
|
5957
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-visible-starting-forge-"));
|
|
5891
5958
|
try {
|
|
5892
5959
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5893
|
-
const sessionId = "sess-visible-
|
|
5960
|
+
const sessionId = "sess-visible-forge";
|
|
5894
5961
|
await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
|
|
5895
|
-
await writeJson(join(stateDir, "sessions", sessionId, "
|
|
5962
|
+
await writeJson(join(stateDir, "sessions", sessionId, "forge-state.json"), {
|
|
5896
5963
|
active: true,
|
|
5897
|
-
mode: "
|
|
5964
|
+
mode: "forge",
|
|
5898
5965
|
current_phase: "starting",
|
|
5899
5966
|
session_id: sessionId,
|
|
5900
5967
|
});
|
|
5901
5968
|
await writeJson(join(stateDir, "sessions", sessionId, "skill-active-state.json"), {
|
|
5902
5969
|
active: true,
|
|
5903
|
-
skill: "
|
|
5970
|
+
skill: "forge",
|
|
5904
5971
|
phase: "starting",
|
|
5905
|
-
active_skills: [{ skill: "
|
|
5972
|
+
active_skills: [{ skill: "forge", phase: "starting", active: true, session_id: sessionId }],
|
|
5906
5973
|
});
|
|
5907
5974
|
|
|
5908
5975
|
const result = await dispatchCodexNativeHook(
|
|
@@ -5918,22 +5985,22 @@ esac
|
|
|
5918
5985
|
assert.deepEqual(result.outputJson, {
|
|
5919
5986
|
decision: "block",
|
|
5920
5987
|
reason:
|
|
5921
|
-
"RCS
|
|
5922
|
-
stopReason: "
|
|
5988
|
+
"RCS Forge is still active (phase: starting; state: .rcs/state/sessions/sess-visible-forge/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5989
|
+
stopReason: "forge_starting",
|
|
5923
5990
|
systemMessage:
|
|
5924
|
-
"RCS
|
|
5991
|
+
"RCS Forge is still active (phase: starting; state: .rcs/state/sessions/sess-visible-forge/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
5925
5992
|
});
|
|
5926
5993
|
} finally {
|
|
5927
5994
|
await rm(cwd, { recursive: true, force: true });
|
|
5928
5995
|
}
|
|
5929
5996
|
});
|
|
5930
5997
|
|
|
5931
|
-
it("does not block Stop from another session-scoped
|
|
5932
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-explicit-session-
|
|
5998
|
+
it("does not block Stop from another session-scoped Forge state when an explicit session_id has no active Forge state", async () => {
|
|
5999
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-explicit-session-forge-"));
|
|
5933
6000
|
try {
|
|
5934
6001
|
const stateDir = join(cwd, ".rcs", "state");
|
|
5935
6002
|
await mkdir(join(stateDir, "sessions", "sess-other"), { recursive: true });
|
|
5936
|
-
await writeJson(join(stateDir, "sessions", "sess-other", "
|
|
6003
|
+
await writeJson(join(stateDir, "sessions", "sess-other", "forge-state.json"), {
|
|
5937
6004
|
active: true,
|
|
5938
6005
|
current_phase: "starting",
|
|
5939
6006
|
session_id: "sess-other",
|
|
@@ -5955,8 +6022,8 @@ esac
|
|
|
5955
6022
|
}
|
|
5956
6023
|
});
|
|
5957
6024
|
|
|
5958
|
-
it("does not block a question-only pane from
|
|
5959
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
6025
|
+
it("does not block a question-only pane from Forge state owned by another Codex session", async () => {
|
|
6026
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-question-pane-"));
|
|
5960
6027
|
const previousTmuxPane = process.env.TMUX_PANE;
|
|
5961
6028
|
try {
|
|
5962
6029
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -5968,14 +6035,14 @@ esac
|
|
|
5968
6035
|
native_session_id: questionNativeSessionId,
|
|
5969
6036
|
cwd,
|
|
5970
6037
|
});
|
|
5971
|
-
await writeJson(join(stateDir, "sessions", questionSessionId, "
|
|
6038
|
+
await writeJson(join(stateDir, "sessions", questionSessionId, "forge-state.json"), {
|
|
5972
6039
|
active: true,
|
|
5973
|
-
mode: "
|
|
6040
|
+
mode: "forge",
|
|
5974
6041
|
current_phase: "executing",
|
|
5975
6042
|
session_id: questionSessionId,
|
|
5976
|
-
owner_rcs_session_id: "sess-
|
|
5977
|
-
owner_codex_session_id: "codex-
|
|
5978
|
-
thread_id: "thread-
|
|
6043
|
+
owner_rcs_session_id: "sess-forge-owner",
|
|
6044
|
+
owner_codex_session_id: "codex-forge-owner",
|
|
6045
|
+
thread_id: "thread-forge-owner",
|
|
5979
6046
|
tmux_pane_id: "%41",
|
|
5980
6047
|
});
|
|
5981
6048
|
|
|
@@ -5999,27 +6066,27 @@ esac
|
|
|
5999
6066
|
}
|
|
6000
6067
|
});
|
|
6001
6068
|
|
|
6002
|
-
it("blocks same-session
|
|
6003
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
6069
|
+
it("blocks same-session Forge Stop continuation when ownership identifiers match", async () => {
|
|
6070
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-owned-session-"));
|
|
6004
6071
|
const previousTmuxPane = process.env.TMUX_PANE;
|
|
6005
6072
|
try {
|
|
6006
6073
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6007
|
-
const fixtureSessionId = "sess-
|
|
6008
|
-
const nativeSessionId = "codex-
|
|
6074
|
+
const fixtureSessionId = "sess-forge-owned";
|
|
6075
|
+
const nativeSessionId = "codex-forge-owned";
|
|
6009
6076
|
await mkdir(join(stateDir, "sessions", fixtureSessionId), { recursive: true });
|
|
6010
6077
|
await writeJson(join(stateDir, "session.json"), {
|
|
6011
6078
|
session_id: fixtureSessionId,
|
|
6012
6079
|
native_session_id: nativeSessionId,
|
|
6013
6080
|
cwd,
|
|
6014
6081
|
});
|
|
6015
|
-
await writeJson(join(stateDir, "sessions", fixtureSessionId, "
|
|
6082
|
+
await writeJson(join(stateDir, "sessions", fixtureSessionId, "forge-state.json"), {
|
|
6016
6083
|
active: true,
|
|
6017
|
-
mode: "
|
|
6084
|
+
mode: "forge",
|
|
6018
6085
|
current_phase: "executing",
|
|
6019
6086
|
session_id: fixtureSessionId,
|
|
6020
6087
|
owner_rcs_session_id: fixtureSessionId,
|
|
6021
6088
|
owner_codex_session_id: nativeSessionId,
|
|
6022
|
-
thread_id: "thread-
|
|
6089
|
+
thread_id: "thread-forge-owned",
|
|
6023
6090
|
tmux_pane_id: "%42",
|
|
6024
6091
|
});
|
|
6025
6092
|
|
|
@@ -6029,7 +6096,7 @@ esac
|
|
|
6029
6096
|
hook_event_name: "Stop",
|
|
6030
6097
|
cwd,
|
|
6031
6098
|
session_id: nativeSessionId,
|
|
6032
|
-
thread_id: "thread-
|
|
6099
|
+
thread_id: "thread-forge-owned",
|
|
6033
6100
|
},
|
|
6034
6101
|
{ cwd },
|
|
6035
6102
|
);
|
|
@@ -6038,10 +6105,10 @@ esac
|
|
|
6038
6105
|
assert.deepEqual(result.outputJson, {
|
|
6039
6106
|
decision: "block",
|
|
6040
6107
|
reason:
|
|
6041
|
-
"RCS
|
|
6042
|
-
stopReason: "
|
|
6108
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/sessions/sess-forge-owned/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
6109
|
+
stopReason: "forge_executing",
|
|
6043
6110
|
systemMessage:
|
|
6044
|
-
"RCS
|
|
6111
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/sessions/sess-forge-owned/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
6045
6112
|
});
|
|
6046
6113
|
} finally {
|
|
6047
6114
|
if (typeof previousTmuxPane === "string") process.env.TMUX_PANE = previousTmuxPane;
|
|
@@ -6050,16 +6117,16 @@ esac
|
|
|
6050
6117
|
}
|
|
6051
6118
|
});
|
|
6052
6119
|
|
|
6053
|
-
it("prefers canonical run-state terminal lifecycle before stale session
|
|
6054
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-canonical-run-state-
|
|
6120
|
+
it("prefers canonical run-state terminal lifecycle before stale session Forge state during Stop", async () => {
|
|
6121
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-canonical-run-state-forge-"));
|
|
6055
6122
|
try {
|
|
6056
6123
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6057
|
-
const sessionId = "sess-canonical-run-state-
|
|
6124
|
+
const sessionId = "sess-canonical-run-state-forge";
|
|
6058
6125
|
await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
|
|
6059
6126
|
await writeJson(join(stateDir, "session.json"), { session_id: sessionId, cwd });
|
|
6060
6127
|
await writeJson(join(stateDir, "sessions", sessionId, "run-state.json"), {
|
|
6061
6128
|
version: 1,
|
|
6062
|
-
mode: "
|
|
6129
|
+
mode: "forge",
|
|
6063
6130
|
active: false,
|
|
6064
6131
|
outcome: "finish",
|
|
6065
6132
|
lifecycle_outcome: "finished",
|
|
@@ -6067,9 +6134,9 @@ esac
|
|
|
6067
6134
|
completed_at: "2026-04-27T12:00:00.000Z",
|
|
6068
6135
|
updated_at: "2026-04-27T12:00:00.000Z",
|
|
6069
6136
|
});
|
|
6070
|
-
await writeJson(join(stateDir, "sessions", sessionId, "
|
|
6137
|
+
await writeJson(join(stateDir, "sessions", sessionId, "forge-state.json"), {
|
|
6071
6138
|
active: true,
|
|
6072
|
-
mode: "
|
|
6139
|
+
mode: "forge",
|
|
6073
6140
|
current_phase: "verifying",
|
|
6074
6141
|
session_id: sessionId,
|
|
6075
6142
|
});
|
|
@@ -6090,13 +6157,13 @@ esac
|
|
|
6090
6157
|
}
|
|
6091
6158
|
});
|
|
6092
6159
|
|
|
6093
|
-
it("does not block Stop from root
|
|
6094
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-root-fallback-
|
|
6160
|
+
it("does not block Stop from root Forge fallback when the current session has no scoped Forge state", async () => {
|
|
6161
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-root-fallback-forge-"));
|
|
6095
6162
|
try {
|
|
6096
6163
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6097
6164
|
await mkdir(join(stateDir, "sessions", "sess-current"), { recursive: true });
|
|
6098
6165
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-current", cwd });
|
|
6099
|
-
await writeJson(join(stateDir, "
|
|
6166
|
+
await writeJson(join(stateDir, "forge-state.json"), {
|
|
6100
6167
|
active: true,
|
|
6101
6168
|
current_phase: "executing",
|
|
6102
6169
|
});
|
|
@@ -6117,19 +6184,19 @@ esac
|
|
|
6117
6184
|
}
|
|
6118
6185
|
});
|
|
6119
6186
|
|
|
6120
|
-
it("does not block Stop when the current session
|
|
6121
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-cancelled-session-
|
|
6187
|
+
it("does not block Stop when the current session Forge state is cancelled even if stale root fallback remains", async () => {
|
|
6188
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-cancelled-session-forge-"));
|
|
6122
6189
|
try {
|
|
6123
6190
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6124
6191
|
await mkdir(join(stateDir, "sessions", "sess-current"), { recursive: true });
|
|
6125
6192
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-current", cwd });
|
|
6126
|
-
await writeJson(join(stateDir, "sessions", "sess-current", "
|
|
6193
|
+
await writeJson(join(stateDir, "sessions", "sess-current", "forge-state.json"), {
|
|
6127
6194
|
active: false,
|
|
6128
6195
|
current_phase: "cancelled",
|
|
6129
6196
|
completed_at: "2026-04-10T23:30:38.000Z",
|
|
6130
6197
|
session_id: "sess-current",
|
|
6131
6198
|
});
|
|
6132
|
-
await writeJson(join(stateDir, "
|
|
6199
|
+
await writeJson(join(stateDir, "forge-state.json"), {
|
|
6133
6200
|
active: true,
|
|
6134
6201
|
current_phase: "starting",
|
|
6135
6202
|
});
|
|
@@ -6150,7 +6217,7 @@ esac
|
|
|
6150
6217
|
}
|
|
6151
6218
|
});
|
|
6152
6219
|
|
|
6153
|
-
it("does not block Stop from root
|
|
6220
|
+
it("does not block Stop from root Forge fallback when an explicit session_id is present and session.json points to another worktree", async () => {
|
|
6154
6221
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-root-fallback-cwd-mismatch-"));
|
|
6155
6222
|
try {
|
|
6156
6223
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -6159,7 +6226,7 @@ esac
|
|
|
6159
6226
|
session_id: "sess-elsewhere",
|
|
6160
6227
|
cwd: join(cwd, "..", "different-worktree"),
|
|
6161
6228
|
});
|
|
6162
|
-
await writeJson(join(stateDir, "
|
|
6229
|
+
await writeJson(join(stateDir, "forge-state.json"), {
|
|
6163
6230
|
active: true,
|
|
6164
6231
|
current_phase: "executing",
|
|
6165
6232
|
});
|
|
@@ -6180,21 +6247,21 @@ esac
|
|
|
6180
6247
|
}
|
|
6181
6248
|
});
|
|
6182
6249
|
|
|
6183
|
-
it("keeps blocking
|
|
6184
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
6250
|
+
it("keeps blocking Forge Stop replays until the active task advances", async () => {
|
|
6251
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-replay-"));
|
|
6185
6252
|
const previousRcsSessionId = process.env.RCS_SESSION_ID;
|
|
6186
6253
|
try {
|
|
6187
6254
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6188
6255
|
await mkdir(stateDir, { recursive: true });
|
|
6189
6256
|
await writeFile(
|
|
6190
|
-
join(stateDir, "
|
|
6257
|
+
join(stateDir, "forge-state.json"),
|
|
6191
6258
|
JSON.stringify({
|
|
6192
6259
|
active: true,
|
|
6193
6260
|
current_phase: "executing",
|
|
6194
6261
|
}),
|
|
6195
6262
|
);
|
|
6196
6263
|
|
|
6197
|
-
process.env.RCS_SESSION_ID = "sess-stop-
|
|
6264
|
+
process.env.RCS_SESSION_ID = "sess-stop-forge-replay";
|
|
6198
6265
|
const payload = {
|
|
6199
6266
|
hook_event_name: "Stop",
|
|
6200
6267
|
cwd,
|
|
@@ -6203,10 +6270,10 @@ esac
|
|
|
6203
6270
|
const expected = {
|
|
6204
6271
|
decision: "block",
|
|
6205
6272
|
reason:
|
|
6206
|
-
"RCS
|
|
6207
|
-
stopReason: "
|
|
6273
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
6274
|
+
stopReason: "forge_executing",
|
|
6208
6275
|
systemMessage:
|
|
6209
|
-
"RCS
|
|
6276
|
+
"RCS Forge is still active (phase: executing; state: .rcs/state/forge-state.json); continue the task and gather fresh verification evidence before stopping.",
|
|
6210
6277
|
};
|
|
6211
6278
|
|
|
6212
6279
|
const first = await dispatchCodexNativeHook(payload, { cwd });
|
|
@@ -6230,28 +6297,28 @@ esac
|
|
|
6230
6297
|
});
|
|
6231
6298
|
|
|
6232
6299
|
it("lets dispatcher dedupe identical native stop hook replays after Stop payload normalization", async () => {
|
|
6233
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
6300
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-hook-dedupe-"));
|
|
6234
6301
|
const previousRcsSessionId = process.env.RCS_SESSION_ID;
|
|
6235
6302
|
try {
|
|
6236
6303
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6237
|
-
await mkdir(join(stateDir, "sessions", "sess-stop-
|
|
6304
|
+
await mkdir(join(stateDir, "sessions", "sess-stop-forge-hook-dedupe"), { recursive: true });
|
|
6238
6305
|
await writeHookCounterPlugin(cwd);
|
|
6239
6306
|
await writeFile(
|
|
6240
|
-
join(stateDir, "sessions", "sess-stop-
|
|
6307
|
+
join(stateDir, "sessions", "sess-stop-forge-hook-dedupe", "forge-state.json"),
|
|
6241
6308
|
JSON.stringify({
|
|
6242
6309
|
active: true,
|
|
6243
6310
|
current_phase: "executing",
|
|
6244
|
-
session_id: "sess-stop-
|
|
6311
|
+
session_id: "sess-stop-forge-hook-dedupe",
|
|
6245
6312
|
}),
|
|
6246
6313
|
);
|
|
6247
6314
|
|
|
6248
|
-
process.env.RCS_SESSION_ID = "sess-stop-
|
|
6315
|
+
process.env.RCS_SESSION_ID = "sess-stop-forge-hook-dedupe";
|
|
6249
6316
|
const payload = {
|
|
6250
6317
|
hook_event_name: "Stop",
|
|
6251
6318
|
cwd,
|
|
6252
|
-
session_id: "sess-stop-
|
|
6253
|
-
thread_id: "thread-stop-
|
|
6254
|
-
turn_id: "turn-stop-
|
|
6319
|
+
session_id: "sess-stop-forge-hook-dedupe",
|
|
6320
|
+
thread_id: "thread-stop-forge-hook-dedupe",
|
|
6321
|
+
turn_id: "turn-stop-forge-hook-dedupe-1",
|
|
6255
6322
|
last_assistant_message: "Next active targets:\n\n1. scheduler integration\n\nI am continuing.",
|
|
6256
6323
|
};
|
|
6257
6324
|
|
|
@@ -6276,28 +6343,28 @@ esac
|
|
|
6276
6343
|
});
|
|
6277
6344
|
|
|
6278
6345
|
it("preserves per-turn native stop hook delivery even when stop_hook_active remains true", async () => {
|
|
6279
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-
|
|
6346
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-forge-hook-refire-"));
|
|
6280
6347
|
const previousRcsSessionId = process.env.RCS_SESSION_ID;
|
|
6281
6348
|
try {
|
|
6282
6349
|
const stateDir = join(cwd, ".rcs", "state");
|
|
6283
|
-
await mkdir(join(stateDir, "sessions", "sess-stop-
|
|
6350
|
+
await mkdir(join(stateDir, "sessions", "sess-stop-forge-hook-refire"), { recursive: true });
|
|
6284
6351
|
await writeHookCounterPlugin(cwd);
|
|
6285
6352
|
await writeFile(
|
|
6286
|
-
join(stateDir, "sessions", "sess-stop-
|
|
6353
|
+
join(stateDir, "sessions", "sess-stop-forge-hook-refire", "forge-state.json"),
|
|
6287
6354
|
JSON.stringify({
|
|
6288
6355
|
active: true,
|
|
6289
6356
|
current_phase: "executing",
|
|
6290
|
-
session_id: "sess-stop-
|
|
6357
|
+
session_id: "sess-stop-forge-hook-refire",
|
|
6291
6358
|
}),
|
|
6292
6359
|
);
|
|
6293
6360
|
|
|
6294
|
-
process.env.RCS_SESSION_ID = "sess-stop-
|
|
6361
|
+
process.env.RCS_SESSION_ID = "sess-stop-forge-hook-refire";
|
|
6295
6362
|
const payload = {
|
|
6296
6363
|
hook_event_name: "Stop",
|
|
6297
6364
|
cwd,
|
|
6298
|
-
session_id: "sess-stop-
|
|
6299
|
-
thread_id: "thread-stop-
|
|
6300
|
-
turn_id: "turn-stop-
|
|
6365
|
+
session_id: "sess-stop-forge-hook-refire",
|
|
6366
|
+
thread_id: "thread-stop-forge-hook-refire",
|
|
6367
|
+
turn_id: "turn-stop-forge-hook-refire-1",
|
|
6301
6368
|
last_assistant_message: "Continuing current task.",
|
|
6302
6369
|
};
|
|
6303
6370
|
|
|
@@ -6305,25 +6372,25 @@ esac
|
|
|
6305
6372
|
await dispatchCodexNativeHook(
|
|
6306
6373
|
{
|
|
6307
6374
|
...payload,
|
|
6308
|
-
turn_id: "turn-stop-
|
|
6375
|
+
turn_id: "turn-stop-forge-hook-refire-2",
|
|
6309
6376
|
stop_hook_active: true,
|
|
6310
6377
|
},
|
|
6311
6378
|
{ cwd },
|
|
6312
6379
|
);
|
|
6313
6380
|
|
|
6314
6381
|
await writeFile(
|
|
6315
|
-
join(stateDir, "sessions", "sess-stop-
|
|
6382
|
+
join(stateDir, "sessions", "sess-stop-forge-hook-refire", "forge-state.json"),
|
|
6316
6383
|
JSON.stringify({
|
|
6317
6384
|
active: true,
|
|
6318
6385
|
current_phase: "executing",
|
|
6319
|
-
session_id: "sess-stop-
|
|
6386
|
+
session_id: "sess-stop-forge-hook-refire",
|
|
6320
6387
|
}),
|
|
6321
6388
|
);
|
|
6322
6389
|
|
|
6323
6390
|
await dispatchCodexNativeHook(
|
|
6324
6391
|
{
|
|
6325
6392
|
...payload,
|
|
6326
|
-
turn_id: "turn-stop-
|
|
6393
|
+
turn_id: "turn-stop-forge-hook-refire-3",
|
|
6327
6394
|
stop_hook_active: true,
|
|
6328
6395
|
},
|
|
6329
6396
|
{ cwd },
|
|
@@ -6478,7 +6545,7 @@ esac
|
|
|
6478
6545
|
await writeHookCounterPlugin(cwd);
|
|
6479
6546
|
process.env.RCS_SESSION_ID = "rcs-canonical";
|
|
6480
6547
|
await writeSessionStart(cwd, "rcs-canonical");
|
|
6481
|
-
await writeJson(join(stateDir, "sessions", "rcs-canonical", "
|
|
6548
|
+
await writeJson(join(stateDir, "sessions", "rcs-canonical", "forge-state.json"), {
|
|
6482
6549
|
active: true,
|
|
6483
6550
|
current_phase: "executing",
|
|
6484
6551
|
session_id: "rcs-canonical",
|
|
@@ -7148,7 +7215,7 @@ esac
|
|
|
7148
7215
|
}
|
|
7149
7216
|
});
|
|
7150
7217
|
|
|
7151
|
-
it("re-blocks active
|
|
7218
|
+
it("re-blocks active blueprint skill state on repeated Stop hooks", async () => {
|
|
7152
7219
|
const cwd = await mkdtemp(join(tmpdir(), "rcs-native-hook-stop-skill-repeat-"));
|
|
7153
7220
|
try {
|
|
7154
7221
|
const stateDir = join(cwd, ".rcs", "state");
|
|
@@ -7156,10 +7223,10 @@ esac
|
|
|
7156
7223
|
await writeJson(join(stateDir, "session.json"), { session_id: "sess-stop-skill-repeat" });
|
|
7157
7224
|
await writeJson(join(stateDir, "sessions", "sess-stop-skill-repeat", "skill-active-state.json"), {
|
|
7158
7225
|
active: true,
|
|
7159
|
-
skill: "
|
|
7226
|
+
skill: "blueprint",
|
|
7160
7227
|
phase: "planning",
|
|
7161
7228
|
});
|
|
7162
|
-
await writeJson(join(stateDir, "sessions", "sess-stop-skill-repeat", "
|
|
7229
|
+
await writeJson(join(stateDir, "sessions", "sess-stop-skill-repeat", "blueprint-state.json"), {
|
|
7163
7230
|
active: true,
|
|
7164
7231
|
current_phase: "planning",
|
|
7165
7232
|
});
|
|
@@ -7191,9 +7258,9 @@ esac
|
|
|
7191
7258
|
assert.deepEqual(repeated.outputJson, {
|
|
7192
7259
|
decision: "block",
|
|
7193
7260
|
reason:
|
|
7194
|
-
"RCS skill
|
|
7195
|
-
stopReason: "
|
|
7196
|
-
systemMessage: "RCS skill
|
|
7261
|
+
"RCS skill blueprint is still active (phase: planning); continue until the current blueprint workflow reaches a terminal state.",
|
|
7262
|
+
stopReason: "skill_blueprint_planning",
|
|
7263
|
+
systemMessage: "RCS skill blueprint is still active (phase: planning).",
|
|
7197
7264
|
});
|
|
7198
7265
|
} finally {
|
|
7199
7266
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -7382,18 +7449,18 @@ describe("codex native hook triage integration", () => {
|
|
|
7382
7449
|
|
|
7383
7450
|
// ── Group 1: Keyword bypass (triage must NOT run) ────────────────────────
|
|
7384
7451
|
|
|
7385
|
-
it("does not inject triage advisory for $
|
|
7386
|
-
const cwd = await mkdtemp(join(tmpdir(), "rcs-triage-keyword-
|
|
7452
|
+
it("does not inject triage advisory for $blueprint keyword prompts", async () => {
|
|
7453
|
+
const cwd = await mkdtemp(join(tmpdir(), "rcs-triage-keyword-blueprint-"));
|
|
7387
7454
|
try {
|
|
7388
7455
|
await mkdir(join(cwd, ".rcs", "state"), { recursive: true });
|
|
7389
7456
|
const result = await dispatchCodexNativeHook(
|
|
7390
7457
|
{
|
|
7391
7458
|
hook_event_name: "UserPromptSubmit",
|
|
7392
7459
|
cwd,
|
|
7393
|
-
session_id: "triage-kw-
|
|
7460
|
+
session_id: "triage-kw-blueprint-1",
|
|
7394
7461
|
thread_id: "thread-triage-kw-1",
|
|
7395
7462
|
turn_id: "turn-triage-kw-1",
|
|
7396
|
-
prompt: "$
|
|
7463
|
+
prompt: "$blueprint implement issue #1307",
|
|
7397
7464
|
},
|
|
7398
7465
|
{ cwd },
|
|
7399
7466
|
);
|
|
@@ -7406,7 +7473,7 @@ describe("codex native hook triage integration", () => {
|
|
|
7406
7473
|
assert.doesNotMatch(additionalContext, /narrow edit-shaped/);
|
|
7407
7474
|
assert.doesNotMatch(additionalContext, /visual\/style request/);
|
|
7408
7475
|
|
|
7409
|
-
const stateFile = join(cwd, ".rcs", "state", "sessions", "triage-kw-
|
|
7476
|
+
const stateFile = join(cwd, ".rcs", "state", "sessions", "triage-kw-blueprint-1", "prompt-routing-state.json");
|
|
7410
7477
|
assert.equal(existsSync(stateFile), false);
|
|
7411
7478
|
} finally {
|
|
7412
7479
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -8328,12 +8395,12 @@ describe("codex native hook triage integration", () => {
|
|
|
8328
8395
|
session_id: sessionId,
|
|
8329
8396
|
thread_id: "thread-kw-followup-1",
|
|
8330
8397
|
turn_id: "turn-kw-followup-2",
|
|
8331
|
-
prompt: "$
|
|
8398
|
+
prompt: "$forge continue",
|
|
8332
8399
|
},
|
|
8333
8400
|
{ cwd },
|
|
8334
8401
|
);
|
|
8335
8402
|
|
|
8336
|
-
assert.equal(turn2.skillState?.skill, "
|
|
8403
|
+
assert.equal(turn2.skillState?.skill, "forge");
|
|
8337
8404
|
|
|
8338
8405
|
const ctx2 = String(
|
|
8339
8406
|
(turn2.outputJson as { hookSpecificOutput?: { additionalContext?: string } })?.hookSpecificOutput?.additionalContext ?? "",
|