@jstn-sdk/rcs 0.1.0 → 0.1.1

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.
Files changed (1736) hide show
  1. package/README.md +142 -102
  2. package/dist/agents/definitions.d.ts.map +1 -1
  3. package/dist/agents/definitions.js +0 -101
  4. package/dist/agents/definitions.js.map +1 -1
  5. package/dist/blueprint/runtime.d.ts +52 -0
  6. package/dist/blueprint/runtime.d.ts.map +1 -0
  7. package/dist/{ralplan → blueprint}/runtime.js +19 -19
  8. package/dist/blueprint/runtime.js.map +1 -0
  9. package/dist/catalog/reader.d.ts.map +1 -1
  10. package/dist/catalog/reader.js +8 -2
  11. package/dist/catalog/reader.js.map +1 -1
  12. package/dist/catalog/schema.js +1 -1
  13. package/dist/catalog/schema.js.map +1 -1
  14. package/dist/cli/forge.d.ts +17 -0
  15. package/dist/cli/{ralph.d.ts.map → forge.d.ts.map} +1 -1
  16. package/dist/cli/{ralph.js → forge.js} +82 -82
  17. package/dist/cli/{ralph.js.map → forge.js.map} +1 -1
  18. package/dist/cli/index.d.ts +1 -1
  19. package/dist/cli/index.js +15 -15
  20. package/dist/cli/setup.d.ts.map +1 -1
  21. package/dist/cli/setup.js +2 -3
  22. package/dist/cli/setup.js.map +1 -1
  23. package/dist/cli/star-prompt.js +2 -2
  24. package/dist/cli/star-prompt.js.map +1 -1
  25. package/dist/cli/state.js +1 -1
  26. package/dist/cli/team.d.ts.map +1 -1
  27. package/dist/cli/team.js +3 -2
  28. package/dist/cli/team.js.map +1 -1
  29. package/dist/cli/tmux-hook.d.ts.map +1 -1
  30. package/dist/cli/tmux-hook.js +9 -1
  31. package/dist/cli/tmux-hook.js.map +1 -1
  32. package/dist/config/generator.d.ts +1 -1
  33. package/dist/config/generator.d.ts.map +1 -1
  34. package/dist/config/generator.js +1 -1
  35. package/dist/config/generator.js.map +1 -1
  36. package/dist/forge/contract.d.ts +17 -0
  37. package/dist/{ralph → forge}/contract.d.ts.map +1 -1
  38. package/dist/{ralph → forge}/contract.js +16 -16
  39. package/dist/{ralph → forge}/contract.js.map +1 -1
  40. package/dist/{ralph → forge}/persistence.d.ts +5 -5
  41. package/dist/{ralph → forge}/persistence.d.ts.map +1 -1
  42. package/dist/{ralph → forge}/persistence.js +7 -6
  43. package/dist/forge/persistence.js.map +1 -0
  44. package/dist/hooks/agents-overlay.d.ts +1 -1
  45. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  46. package/dist/hooks/agents-overlay.js +37 -31
  47. package/dist/hooks/agents-overlay.js.map +1 -1
  48. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  49. package/dist/hooks/extensibility/dispatcher.js +82 -14
  50. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  51. package/dist/hooks/keyword-detector.d.ts +8 -8
  52. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  53. package/dist/hooks/keyword-detector.js +94 -64
  54. package/dist/hooks/keyword-detector.js.map +1 -1
  55. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  56. package/dist/hooks/keyword-registry.js +9 -11
  57. package/dist/hooks/keyword-registry.js.map +1 -1
  58. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  59. package/dist/hooks/prompt-guidance-contract.js +10 -21
  60. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  61. package/dist/hooks/task-size-detector.js +2 -2
  62. package/dist/hooks/task-size-detector.js.map +1 -1
  63. package/dist/hooks/triage-state.d.ts +1 -1
  64. package/dist/hooks/triage-state.js +1 -1
  65. package/dist/hud/colors.d.ts +2 -2
  66. package/dist/hud/colors.js +2 -2
  67. package/dist/hud/render.js +21 -21
  68. package/dist/hud/render.js.map +1 -1
  69. package/dist/hud/state.d.ts +3 -3
  70. package/dist/hud/state.d.ts.map +1 -1
  71. package/dist/hud/state.js +18 -15
  72. package/dist/hud/state.js.map +1 -1
  73. package/dist/hud/types.d.ts +6 -6
  74. package/dist/hud/types.d.ts.map +1 -1
  75. package/dist/mcp/bootstrap.d.ts.map +1 -1
  76. package/dist/mcp/bootstrap.js +36 -2
  77. package/dist/mcp/bootstrap.js.map +1 -1
  78. package/dist/mcp/state-paths.d.ts +1 -0
  79. package/dist/mcp/state-paths.d.ts.map +1 -1
  80. package/dist/mcp/state-paths.js +4 -1
  81. package/dist/mcp/state-paths.js.map +1 -1
  82. package/dist/mcp/state-server.d.ts +4 -4
  83. package/dist/mcp/state-server.js +2 -2
  84. package/dist/mcp/state-server.js.map +1 -1
  85. package/dist/modes/base.d.ts +2 -2
  86. package/dist/modes/base.d.ts.map +1 -1
  87. package/dist/modes/base.js +29 -26
  88. package/dist/modes/base.js.map +1 -1
  89. package/dist/notifications/reply-listener.d.ts.map +1 -1
  90. package/dist/notifications/reply-listener.js +7 -1
  91. package/dist/notifications/reply-listener.js.map +1 -1
  92. package/dist/notifications/tmux.d.ts.map +1 -1
  93. package/dist/notifications/tmux.js +39 -6
  94. package/dist/notifications/tmux.js.map +1 -1
  95. package/dist/pipeline/index.d.ts +7 -6
  96. package/dist/pipeline/index.d.ts.map +1 -1
  97. package/dist/pipeline/index.js +5 -4
  98. package/dist/pipeline/index.js.map +1 -1
  99. package/dist/pipeline/orchestrator.d.ts +5 -5
  100. package/dist/pipeline/orchestrator.js +25 -25
  101. package/dist/pipeline/orchestrator.js.map +1 -1
  102. package/dist/pipeline/stages/blueprint.d.ts +25 -0
  103. package/dist/pipeline/stages/blueprint.d.ts.map +1 -0
  104. package/dist/pipeline/stages/{ralplan.js → blueprint.js} +16 -16
  105. package/dist/pipeline/stages/blueprint.js.map +1 -0
  106. package/dist/pipeline/stages/code-review.d.ts +2 -2
  107. package/dist/pipeline/stages/code-review.js +6 -6
  108. package/dist/pipeline/stages/code-review.js.map +1 -1
  109. package/dist/pipeline/stages/forge-verify.d.ts +50 -0
  110. package/dist/pipeline/stages/forge-verify.d.ts.map +1 -0
  111. package/dist/pipeline/stages/{ralph-verify.js → forge-verify.js} +21 -24
  112. package/dist/pipeline/stages/forge-verify.js.map +1 -0
  113. package/dist/pipeline/stages/team-exec.d.ts +1 -1
  114. package/dist/pipeline/stages/team-exec.js +19 -19
  115. package/dist/pipeline/stages/team-exec.js.map +1 -1
  116. package/dist/pipeline/types.d.ts +12 -12
  117. package/dist/pipeline/types.d.ts.map +1 -1
  118. package/dist/pipeline/types.js +1 -1
  119. package/dist/planning/artifacts.d.ts +3 -4
  120. package/dist/planning/artifacts.d.ts.map +1 -1
  121. package/dist/planning/artifacts.js +2 -3
  122. package/dist/planning/artifacts.js.map +1 -1
  123. package/dist/question/policy.js +1 -1
  124. package/dist/runtime/bridge.d.ts.map +1 -1
  125. package/dist/runtime/bridge.js +70 -13
  126. package/dist/runtime/bridge.js.map +1 -1
  127. package/dist/scripts/codex-native-hook.js +30 -30
  128. package/dist/scripts/codex-native-hook.js.map +1 -1
  129. package/dist/scripts/eval/eval-cross-server-party-flow.d.ts +3 -0
  130. package/dist/scripts/eval/eval-cross-server-party-flow.d.ts.map +1 -0
  131. package/dist/scripts/eval/eval-cross-server-party-flow.js +12 -0
  132. package/dist/scripts/eval/eval-cross-server-party-flow.js.map +1 -0
  133. package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts +3 -0
  134. package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts.map +1 -0
  135. package/dist/scripts/eval/eval-gui-onboarding-clarity.js +17 -0
  136. package/dist/scripts/eval/eval-gui-onboarding-clarity.js.map +1 -0
  137. package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts +3 -0
  138. package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts.map +1 -0
  139. package/dist/scripts/eval/eval-liveops-reward-loop-balance.js +12 -0
  140. package/dist/scripts/eval/eval-liveops-reward-loop-balance.js.map +1 -0
  141. package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts +3 -0
  142. package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts.map +1 -0
  143. package/dist/scripts/eval/eval-profile-datastore-recovery.js +17 -0
  144. package/dist/scripts/eval/eval-profile-datastore-recovery.js.map +1 -0
  145. package/dist/scripts/eval/eval-remote-contract-hardening.d.ts +3 -0
  146. package/dist/scripts/eval/eval-remote-contract-hardening.d.ts.map +1 -0
  147. package/dist/scripts/eval/eval-remote-contract-hardening.js +17 -0
  148. package/dist/scripts/eval/eval-remote-contract-hardening.js.map +1 -0
  149. package/dist/scripts/notify-fallback-watcher.js +140 -139
  150. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  151. package/dist/scripts/notify-hook/forge-session-resume.d.ts +23 -0
  152. package/dist/scripts/notify-hook/{ralph-session-resume.d.ts.map → forge-session-resume.d.ts.map} +1 -1
  153. package/dist/scripts/notify-hook/{ralph-session-resume.js → forge-session-resume.js} +37 -36
  154. package/dist/scripts/notify-hook/{ralph-session-resume.js.map → forge-session-resume.js.map} +1 -1
  155. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  156. package/dist/scripts/notify-hook/team-dispatch.js +34 -4
  157. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  158. package/dist/scripts/notify-hook/visual-verdict.js +3 -3
  159. package/dist/scripts/notify-hook.js +9 -9
  160. package/dist/scripts/run-test-files.js +1 -1
  161. package/dist/scripts/run-test-files.js.map +1 -1
  162. package/dist/scripts/surface-taxonomy.d.ts +23 -0
  163. package/dist/scripts/surface-taxonomy.d.ts.map +1 -0
  164. package/dist/scripts/surface-taxonomy.js +271 -0
  165. package/dist/scripts/surface-taxonomy.js.map +1 -0
  166. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  167. package/dist/scripts/sync-plugin-mirror.js +5 -4
  168. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  169. package/dist/scripts/tmux-hook-engine.d.ts +1 -1
  170. package/dist/scripts/tmux-hook-engine.d.ts.map +1 -1
  171. package/dist/scripts/tmux-hook-engine.js +29 -20
  172. package/dist/scripts/tmux-hook-engine.js.map +1 -1
  173. package/dist/state/operations.d.ts +1 -1
  174. package/dist/state/operations.d.ts.map +1 -1
  175. package/dist/state/operations.js +18 -18
  176. package/dist/state/operations.js.map +1 -1
  177. package/dist/state/skill-active.d.ts +13 -1
  178. package/dist/state/skill-active.d.ts.map +1 -1
  179. package/dist/state/skill-active.js +38 -17
  180. package/dist/state/skill-active.js.map +1 -1
  181. package/dist/state/workflow-transition.d.ts +6 -5
  182. package/dist/state/workflow-transition.d.ts.map +1 -1
  183. package/dist/state/workflow-transition.js +27 -15
  184. package/dist/state/workflow-transition.js.map +1 -1
  185. package/dist/team/contracts.d.ts +1 -1
  186. package/dist/team/contracts.js +2 -2
  187. package/dist/team/followup-planner.d.ts +2 -2
  188. package/dist/team/followup-planner.d.ts.map +1 -1
  189. package/dist/team/followup-planner.js +16 -14
  190. package/dist/team/followup-planner.js.map +1 -1
  191. package/dist/team/idle-nudge.d.ts.map +1 -1
  192. package/dist/team/idle-nudge.js +3 -2
  193. package/dist/team/idle-nudge.js.map +1 -1
  194. package/dist/team/leader-activity.js +1 -1
  195. package/dist/team/model-contract.d.ts.map +1 -1
  196. package/dist/team/model-contract.js +4 -1
  197. package/dist/team/model-contract.js.map +1 -1
  198. package/dist/team/orchestrator.js +4 -4
  199. package/dist/team/orchestrator.js.map +1 -1
  200. package/dist/team/role-router.js +3 -3
  201. package/dist/team/role-router.js.map +1 -1
  202. package/dist/team/state/dispatch.d.ts.map +1 -1
  203. package/dist/team/state/dispatch.js +4 -1
  204. package/dist/team/state/dispatch.js.map +1 -1
  205. package/dist/team/tmux-session.d.ts +4 -0
  206. package/dist/team/tmux-session.d.ts.map +1 -1
  207. package/dist/team/tmux-session.js +42 -9
  208. package/dist/team/tmux-session.js.map +1 -1
  209. package/dist/team/worktree.d.ts +1 -1
  210. package/dist/utils/platform-command.d.ts.map +1 -1
  211. package/dist/utils/platform-command.js +9 -0
  212. package/dist/utils/platform-command.js.map +1 -1
  213. package/dist/verification/verifier.d.ts +1 -1
  214. package/dist/verification/verifier.js +2 -2
  215. package/docs/STATE_MODEL.md +24 -24
  216. package/docs/agents.html +8 -16
  217. package/docs/archive/README.md +15 -0
  218. package/docs/{prompt-migration-changelog.md → archive/prompt-migration-changelog.md} +0 -11
  219. package/docs/{release-body-0.9.0.md → archive/release-body-0.9.0.md} +6 -24
  220. package/docs/{release-body-0.9.1.md → archive/release-body-0.9.1.md} +3 -3
  221. package/docs/codex-native-hooks.md +4 -4
  222. package/docs/contracts/forge-cancel-contract.md +20 -0
  223. package/docs/contracts/forge-state-contract.md +52 -0
  224. package/docs/contracts/multi-state-transition-contract.md +5 -5
  225. package/docs/contracts/multi-state-transition-review.md +3 -3
  226. package/docs/contracts/repo-aware-team-dag-decomposition.md +1 -1
  227. package/docs/contracts/rust-runtime-thin-adapter-contract.md +1 -1
  228. package/docs/contracts/team-startup-dispatch-latency.md +1 -1
  229. package/docs/getting-started.html +6 -1
  230. package/docs/guidance-schema.md +6 -3
  231. package/docs/index.html +55 -4
  232. package/docs/integrations.html +4 -3
  233. package/docs/issues/team-forge-followup-team.md +38 -0
  234. package/docs/openclaw-integration.md +2 -2
  235. package/docs/prompt-guidance-contract.md +11 -11
  236. package/docs/prs/{dev-deprecate-team-ralph.md → dev-deprecate-team-forge.md} +27 -27
  237. package/docs/prs/{dev-fix-ralph-live-pane-invariant.md → dev-fix-forge-live-pane-invariant.md} +7 -7
  238. package/docs/prs/{dev-team-ralph-workflow-positioning.md → dev-team-forge-workflow-positioning.md} +7 -7
  239. package/docs/qa/forge-persistence-gate.md +20 -0
  240. package/docs/qa/rust-runtime-thin-adapter-gate.md +31 -40
  241. package/docs/readme/README.de.md +13 -0
  242. package/docs/readme/README.el.md +13 -0
  243. package/docs/readme/README.es.md +13 -0
  244. package/docs/readme/README.fr.md +13 -0
  245. package/docs/readme/README.it.md +13 -0
  246. package/docs/readme/README.ja.md +13 -0
  247. package/docs/readme/README.ko.md +13 -0
  248. package/docs/readme/README.pl.md +13 -0
  249. package/docs/readme/README.pt.md +13 -0
  250. package/docs/readme/README.ru.md +13 -0
  251. package/docs/readme/README.tr.md +13 -0
  252. package/docs/readme/README.uk.md +13 -0
  253. package/docs/readme/README.vi.md +13 -0
  254. package/docs/readme/README.zh-TW.md +13 -0
  255. package/docs/readme/README.zh.md +13 -0
  256. package/docs/readme/rcs-cover.svg +75 -0
  257. package/docs/reference/canonical-vocabulary.md +106 -0
  258. package/docs/reference/forge-parity-matrix.md +26 -0
  259. package/docs/reference/forge-upstream-baseline.md +32 -0
  260. package/docs/reference/rcs-config-schema-routing.md +5 -5
  261. package/docs/reference/roblox-pre-action-protocol.md +4 -0
  262. package/docs/reference/roblox-taxonomy-migration-plan.md +46 -0
  263. package/docs/reference/roblox-workspace-standard.md +83 -0
  264. package/docs/reference/robloxstudio-mcp-compatibility.md +117 -0
  265. package/docs/reference/semantic-design-system.md +110 -0
  266. package/docs/reference/surface-map.md +131 -0
  267. package/docs/reference/team-allocation-rebalance-policy.md +1 -1
  268. package/docs/release-notes-v0.1.0.md +1 -1
  269. package/docs/release-notes-v0.1.1.md +49 -0
  270. package/docs/reports/open-prs-dev-readiness-2026-04-09.md +2 -2
  271. package/docs/shared/agent-tiers.md +3 -3
  272. package/docs/skills.html +10 -12
  273. package/docs/troubleshooting.md +1 -1
  274. package/package.json +20 -13
  275. package/plugins/roblox-ai-os-creator-skills/.codex-plugin/plugin.json +1 -1
  276. package/plugins/roblox-ai-os-creator-skills/docs/reference/roblox-pre-action-protocol.md +4 -0
  277. package/plugins/roblox-ai-os-creator-skills/skills/ai-slop-cleaner/SKILL.md +14 -7
  278. package/plugins/roblox-ai-os-creator-skills/skills/analyze/SKILL.md +9 -2
  279. package/plugins/roblox-ai-os-creator-skills/skills/ask-claude/SKILL.md +7 -0
  280. package/plugins/roblox-ai-os-creator-skills/skills/ask-gemini/SKILL.md +7 -0
  281. package/plugins/roblox-ai-os-creator-skills/skills/autoforge/SKILL.md +7 -0
  282. package/plugins/roblox-ai-os-creator-skills/skills/autopilot/SKILL.md +48 -41
  283. package/plugins/roblox-ai-os-creator-skills/skills/autoresearch/SKILL.md +8 -1
  284. package/plugins/roblox-ai-os-creator-skills/skills/blueprint/SKILL.md +227 -9
  285. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-loop/SKILL.md +7 -0
  286. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-psych/SKILL.md +7 -0
  287. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-retention/SKILL.md +7 -0
  288. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-social/SKILL.md +7 -0
  289. package/plugins/roblox-ai-os-creator-skills/skills/brief/SKILL.md +7 -0
  290. package/plugins/roblox-ai-os-creator-skills/skills/brief-audience/SKILL.md +7 -0
  291. package/plugins/roblox-ai-os-creator-skills/skills/brief-motivation/SKILL.md +7 -0
  292. package/plugins/roblox-ai-os-creator-skills/skills/cancel/SKILL.md +59 -52
  293. package/plugins/roblox-ai-os-creator-skills/skills/code-review/SKILL.md +30 -24
  294. package/plugins/roblox-ai-os-creator-skills/skills/configure-notifications/SKILL.md +7 -0
  295. package/plugins/roblox-ai-os-creator-skills/skills/crew/SKILL.md +7 -0
  296. package/plugins/roblox-ai-os-creator-skills/skills/deep-interview/SKILL.md +25 -18
  297. package/plugins/roblox-ai-os-creator-skills/skills/doctor/SKILL.md +7 -0
  298. package/plugins/roblox-ai-os-creator-skills/skills/forge/SKILL.md +174 -11
  299. package/plugins/roblox-ai-os-creator-skills/skills/forge-community/SKILL.md +7 -0
  300. package/plugins/roblox-ai-os-creator-skills/skills/forge-daily-loop/SKILL.md +7 -0
  301. package/plugins/roblox-ai-os-creator-skills/skills/forge-event-loop/SKILL.md +7 -0
  302. package/plugins/roblox-ai-os-creator-skills/skills/forge-fomo/SKILL.md +7 -0
  303. package/plugins/roblox-ai-os-creator-skills/skills/forge-mastery/SKILL.md +7 -0
  304. package/plugins/roblox-ai-os-creator-skills/skills/forge-progression/SKILL.md +7 -0
  305. package/plugins/roblox-ai-os-creator-skills/skills/forge-reward-loop/SKILL.md +7 -0
  306. package/plugins/roblox-ai-os-creator-skills/skills/forge-status/SKILL.md +7 -0
  307. package/plugins/roblox-ai-os-creator-skills/skills/help/SKILL.md +8 -1
  308. package/plugins/roblox-ai-os-creator-skills/skills/hud/SKILL.md +16 -9
  309. package/plugins/roblox-ai-os-creator-skills/skills/note/SKILL.md +8 -1
  310. package/plugins/roblox-ai-os-creator-skills/skills/pipeline/SKILL.md +18 -11
  311. package/plugins/roblox-ai-os-creator-skills/skills/plan/SKILL.md +36 -29
  312. package/plugins/roblox-ai-os-creator-skills/skills/rcs-setup/SKILL.md +8 -1
  313. package/plugins/roblox-ai-os-creator-skills/skills/security-review/SKILL.md +120 -236
  314. package/plugins/roblox-ai-os-creator-skills/skills/skill/SKILL.md +20 -13
  315. package/plugins/roblox-ai-os-creator-skills/skills/team/SKILL.md +17 -11
  316. package/plugins/roblox-ai-os-creator-skills/skills/trace/SKILL.md +7 -0
  317. package/plugins/roblox-ai-os-creator-skills/skills/ultraqa/SKILL.md +10 -3
  318. package/plugins/roblox-ai-os-creator-skills/skills/ultrawork/SKILL.md +19 -12
  319. package/plugins/roblox-ai-os-creator-skills/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
  320. package/plugins/roblox-ai-os-creator-skills/skills/visual-verdict/SKILL.md +9 -2
  321. package/plugins/roblox-ai-os-creator-skills/skills/wiki/SKILL.md +10 -3
  322. package/plugins/roblox-ai-os-creator-skills/skills/worker/SKILL.md +16 -7
  323. package/plugins/roblox-ai-os-creator-skills/templates/roblox/pre-action-plan.md +1 -0
  324. package/prompts/analyst.md +7 -0
  325. package/prompts/architect.md +11 -4
  326. package/prompts/build-fixer.md +7 -0
  327. package/prompts/code-reviewer.md +9 -2
  328. package/prompts/code-simplifier.md +4 -0
  329. package/prompts/critic.md +13 -6
  330. package/prompts/debugger.md +8 -1
  331. package/prompts/dependency-expert.md +8 -1
  332. package/prompts/designer.md +20 -10
  333. package/prompts/executor.md +7 -0
  334. package/prompts/explore-harness.md +7 -0
  335. package/prompts/explore.md +7 -0
  336. package/prompts/git-master.md +8 -1
  337. package/prompts/planner.md +10 -3
  338. package/prompts/researcher.md +7 -0
  339. package/prompts/security-reviewer.md +76 -92
  340. package/prompts/sisyphus-lite.md +7 -0
  341. package/prompts/team-executor.md +7 -0
  342. package/prompts/team-orchestrator.md +9 -2
  343. package/prompts/test-engineer.md +11 -3
  344. package/prompts/verifier.md +7 -0
  345. package/prompts/vision.md +9 -2
  346. package/prompts/writer.md +11 -4
  347. package/skills/.agents/skills/roblox-animations/SKILL.md +220 -0
  348. package/skills/.agents/skills/roblox-datastores/SKILL.md +219 -0
  349. package/skills/.agents/skills/roblox-gui/SKILL.md +192 -0
  350. package/skills/.agents/skills/roblox-monetization/SKILL.md +208 -0
  351. package/skills/.agents/skills/roblox-performance/SKILL.md +230 -0
  352. package/skills/.agents/skills/roblox-remote-events/SKILL.md +199 -0
  353. package/skills/.agents/skills/roblox-security/SKILL.md +236 -0
  354. package/skills/ai-slop-cleaner/SKILL.md +14 -7
  355. package/skills/analyze/SKILL.md +9 -2
  356. package/skills/ask-claude/SKILL.md +7 -0
  357. package/skills/ask-gemini/SKILL.md +7 -0
  358. package/skills/autoforge/SKILL.md +7 -0
  359. package/skills/autopilot/SKILL.md +48 -41
  360. package/skills/autoresearch/SKILL.md +8 -1
  361. package/skills/blueprint/SKILL.md +227 -9
  362. package/skills/blueprint-loop/SKILL.md +7 -0
  363. package/skills/blueprint-psych/SKILL.md +7 -0
  364. package/skills/blueprint-retention/SKILL.md +7 -0
  365. package/skills/blueprint-social/SKILL.md +7 -0
  366. package/skills/brief/SKILL.md +7 -0
  367. package/skills/brief-audience/SKILL.md +7 -0
  368. package/skills/brief-motivation/SKILL.md +7 -0
  369. package/skills/build-fix/SKILL.md +9 -2
  370. package/skills/cancel/SKILL.md +59 -52
  371. package/skills/code-review/SKILL.md +30 -24
  372. package/skills/configure-notifications/SKILL.md +7 -0
  373. package/skills/crew/SKILL.md +7 -0
  374. package/skills/deep-interview/SKILL.md +25 -18
  375. package/skills/deepsearch/SKILL.md +7 -0
  376. package/skills/doctor/SKILL.md +7 -0
  377. package/skills/ecomode/SKILL.md +9 -2
  378. package/skills/forge/SKILL.md +174 -11
  379. package/skills/forge-community/SKILL.md +7 -0
  380. package/skills/forge-daily-loop/SKILL.md +7 -0
  381. package/skills/forge-event-loop/SKILL.md +7 -0
  382. package/skills/forge-fomo/SKILL.md +7 -0
  383. package/skills/{ralph-init → forge-init}/SKILL.md +20 -13
  384. package/skills/forge-mastery/SKILL.md +7 -0
  385. package/skills/forge-progression/SKILL.md +7 -0
  386. package/skills/forge-reward-loop/SKILL.md +7 -0
  387. package/skills/forge-status/SKILL.md +7 -0
  388. package/skills/git-master/SKILL.md +7 -0
  389. package/skills/help/SKILL.md +8 -1
  390. package/skills/hud/SKILL.md +16 -9
  391. package/skills/note/SKILL.md +8 -1
  392. package/skills/pipeline/SKILL.md +18 -11
  393. package/skills/plan/SKILL.md +36 -29
  394. package/skills/rcs-setup/SKILL.md +8 -1
  395. package/skills/review/SKILL.md +7 -0
  396. package/skills/security-review/SKILL.md +120 -236
  397. package/skills/skill/SKILL.md +20 -13
  398. package/skills/skills-lock.json +47 -0
  399. package/skills/swarm/SKILL.md +8 -1
  400. package/skills/tdd/SKILL.md +7 -0
  401. package/skills/team/SKILL.md +17 -11
  402. package/skills/trace/SKILL.md +7 -0
  403. package/skills/ultraqa/SKILL.md +10 -3
  404. package/skills/ultrawork/SKILL.md +19 -12
  405. package/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
  406. package/skills/visual-verdict/SKILL.md +9 -2
  407. package/skills/web-clone/SKILL.md +14 -7
  408. package/skills/wiki/SKILL.md +10 -3
  409. package/skills/worker/SKILL.md +16 -7
  410. package/src/scripts/__tests__/codex-native-hook.test.ts +386 -319
  411. package/src/scripts/__tests__/run-test-files.test.ts +6 -4
  412. package/src/scripts/__tests__/verify-native-agents.test.ts +16 -16
  413. package/src/scripts/codex-native-hook.ts +34 -34
  414. package/src/scripts/eval/eval-cross-server-party-flow.ts +14 -0
  415. package/src/scripts/eval/eval-gui-onboarding-clarity.ts +20 -0
  416. package/src/scripts/eval/eval-liveops-reward-loop-balance.ts +14 -0
  417. package/src/scripts/eval/eval-profile-datastore-recovery.ts +20 -0
  418. package/src/scripts/eval/eval-remote-contract-hardening.ts +20 -0
  419. package/src/scripts/notify-fallback-watcher.ts +147 -146
  420. package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +24 -10
  421. package/src/scripts/notify-hook/{ralph-session-resume.ts → forge-session-resume.ts} +45 -43
  422. package/src/scripts/notify-hook/team-dispatch.ts +31 -4
  423. package/src/scripts/notify-hook/visual-verdict.ts +3 -3
  424. package/src/scripts/notify-hook.ts +10 -10
  425. package/src/scripts/run-test-files.ts +1 -1
  426. package/src/scripts/surface-taxonomy.ts +316 -0
  427. package/src/scripts/sync-plugin-mirror.ts +5 -4
  428. package/src/scripts/tmux-hook-engine.ts +31 -19
  429. package/templates/AGENTS.md +24 -15
  430. package/templates/catalog-manifest.json +5 -88
  431. package/templates/roblox/pre-action-plan.md +1 -0
  432. package/templates/roblox/robloxstudio-mcp.codex.json +18 -0
  433. package/templates/roblox/robloxstudio-mcp.windows.json +22 -0
  434. package/dist/adapt/__tests__/foundation.test.d.ts +0 -2
  435. package/dist/adapt/__tests__/foundation.test.d.ts.map +0 -1
  436. package/dist/adapt/__tests__/foundation.test.js +0 -171
  437. package/dist/adapt/__tests__/foundation.test.js.map +0 -1
  438. package/dist/adapt/__tests__/hermes.test.d.ts +0 -2
  439. package/dist/adapt/__tests__/hermes.test.d.ts.map +0 -1
  440. package/dist/adapt/__tests__/hermes.test.js +0 -137
  441. package/dist/adapt/__tests__/hermes.test.js.map +0 -1
  442. package/dist/agents/__tests__/definitions.test.d.ts +0 -2
  443. package/dist/agents/__tests__/definitions.test.d.ts.map +0 -1
  444. package/dist/agents/__tests__/definitions.test.js +0 -62
  445. package/dist/agents/__tests__/definitions.test.js.map +0 -1
  446. package/dist/agents/__tests__/native-config.test.d.ts +0 -2
  447. package/dist/agents/__tests__/native-config.test.d.ts.map +0 -1
  448. package/dist/agents/__tests__/native-config.test.js +0 -278
  449. package/dist/agents/__tests__/native-config.test.js.map +0 -1
  450. package/dist/autoresearch/__tests__/contracts.test.d.ts +0 -2
  451. package/dist/autoresearch/__tests__/contracts.test.d.ts.map +0 -1
  452. package/dist/autoresearch/__tests__/contracts.test.js +0 -127
  453. package/dist/autoresearch/__tests__/contracts.test.js.map +0 -1
  454. package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts +0 -2
  455. package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts.map +0 -1
  456. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +0 -356
  457. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +0 -1
  458. package/dist/autoresearch/__tests__/runtime.test.d.ts +0 -2
  459. package/dist/autoresearch/__tests__/runtime.test.d.ts.map +0 -1
  460. package/dist/autoresearch/__tests__/runtime.test.js +0 -218
  461. package/dist/autoresearch/__tests__/runtime.test.js.map +0 -1
  462. package/dist/autoresearch/__tests__/skill-validation.test.d.ts +0 -2
  463. package/dist/autoresearch/__tests__/skill-validation.test.d.ts.map +0 -1
  464. package/dist/autoresearch/__tests__/skill-validation.test.js +0 -91
  465. package/dist/autoresearch/__tests__/skill-validation.test.js.map +0 -1
  466. package/dist/catalog/__tests__/generator.test.d.ts +0 -2
  467. package/dist/catalog/__tests__/generator.test.d.ts.map +0 -1
  468. package/dist/catalog/__tests__/generator.test.js +0 -49
  469. package/dist/catalog/__tests__/generator.test.js.map +0 -1
  470. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts +0 -2
  471. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts.map +0 -1
  472. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +0 -83
  473. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +0 -1
  474. package/dist/catalog/__tests__/schema.test.d.ts +0 -2
  475. package/dist/catalog/__tests__/schema.test.d.ts.map +0 -1
  476. package/dist/catalog/__tests__/schema.test.js +0 -91
  477. package/dist/catalog/__tests__/schema.test.js.map +0 -1
  478. package/dist/cli/__tests__/adapt-help.test.d.ts +0 -2
  479. package/dist/cli/__tests__/adapt-help.test.d.ts.map +0 -1
  480. package/dist/cli/__tests__/adapt-help.test.js +0 -37
  481. package/dist/cli/__tests__/adapt-help.test.js.map +0 -1
  482. package/dist/cli/__tests__/adapt.test.d.ts +0 -2
  483. package/dist/cli/__tests__/adapt.test.d.ts.map +0 -1
  484. package/dist/cli/__tests__/adapt.test.js +0 -62
  485. package/dist/cli/__tests__/adapt.test.js.map +0 -1
  486. package/dist/cli/__tests__/agents-init.test.d.ts +0 -2
  487. package/dist/cli/__tests__/agents-init.test.d.ts.map +0 -1
  488. package/dist/cli/__tests__/agents-init.test.js +0 -184
  489. package/dist/cli/__tests__/agents-init.test.js.map +0 -1
  490. package/dist/cli/__tests__/agents.test.d.ts +0 -2
  491. package/dist/cli/__tests__/agents.test.d.ts.map +0 -1
  492. package/dist/cli/__tests__/agents.test.js +0 -137
  493. package/dist/cli/__tests__/agents.test.js.map +0 -1
  494. package/dist/cli/__tests__/ask.test.d.ts +0 -2
  495. package/dist/cli/__tests__/ask.test.d.ts.map +0 -1
  496. package/dist/cli/__tests__/ask.test.js +0 -265
  497. package/dist/cli/__tests__/ask.test.js.map +0 -1
  498. package/dist/cli/__tests__/autoresearch-guided.test.d.ts +0 -2
  499. package/dist/cli/__tests__/autoresearch-guided.test.d.ts.map +0 -1
  500. package/dist/cli/__tests__/autoresearch-guided.test.js +0 -365
  501. package/dist/cli/__tests__/autoresearch-guided.test.js.map +0 -1
  502. package/dist/cli/__tests__/autoresearch.test.d.ts +0 -2
  503. package/dist/cli/__tests__/autoresearch.test.d.ts.map +0 -1
  504. package/dist/cli/__tests__/autoresearch.test.js +0 -203
  505. package/dist/cli/__tests__/autoresearch.test.js.map +0 -1
  506. package/dist/cli/__tests__/catalog-contract.test.d.ts +0 -2
  507. package/dist/cli/__tests__/catalog-contract.test.d.ts.map +0 -1
  508. package/dist/cli/__tests__/catalog-contract.test.js +0 -18
  509. package/dist/cli/__tests__/catalog-contract.test.js.map +0 -1
  510. package/dist/cli/__tests__/cleanup.test.d.ts +0 -2
  511. package/dist/cli/__tests__/cleanup.test.d.ts.map +0 -1
  512. package/dist/cli/__tests__/cleanup.test.js +0 -419
  513. package/dist/cli/__tests__/cleanup.test.js.map +0 -1
  514. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts +0 -2
  515. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts.map +0 -1
  516. package/dist/cli/__tests__/codex-plugin-layout.test.js +0 -210
  517. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +0 -1
  518. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +0 -2
  519. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +0 -1
  520. package/dist/cli/__tests__/doctor-context-window-warning.test.js +0 -122
  521. package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +0 -1
  522. package/dist/cli/__tests__/doctor-invalid-config.test.d.ts +0 -2
  523. package/dist/cli/__tests__/doctor-invalid-config.test.d.ts.map +0 -1
  524. package/dist/cli/__tests__/doctor-invalid-config.test.js +0 -52
  525. package/dist/cli/__tests__/doctor-invalid-config.test.js.map +0 -1
  526. package/dist/cli/__tests__/doctor-team.test.d.ts +0 -2
  527. package/dist/cli/__tests__/doctor-team.test.d.ts.map +0 -1
  528. package/dist/cli/__tests__/doctor-team.test.js +0 -299
  529. package/dist/cli/__tests__/doctor-team.test.js.map +0 -1
  530. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +0 -2
  531. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +0 -1
  532. package/dist/cli/__tests__/doctor-warning-copy.test.js +0 -438
  533. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +0 -1
  534. package/dist/cli/__tests__/error-handling-warnings.test.d.ts +0 -2
  535. package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +0 -1
  536. package/dist/cli/__tests__/error-handling-warnings.test.js +0 -52
  537. package/dist/cli/__tests__/error-handling-warnings.test.js.map +0 -1
  538. package/dist/cli/__tests__/exec.test.d.ts +0 -2
  539. package/dist/cli/__tests__/exec.test.d.ts.map +0 -1
  540. package/dist/cli/__tests__/exec.test.js +0 -213
  541. package/dist/cli/__tests__/exec.test.js.map +0 -1
  542. package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts +0 -2
  543. package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts.map +0 -1
  544. package/dist/cli/__tests__/explore-windows-diagnostics.test.js +0 -17
  545. package/dist/cli/__tests__/explore-windows-diagnostics.test.js.map +0 -1
  546. package/dist/cli/__tests__/explore.test.d.ts +0 -2
  547. package/dist/cli/__tests__/explore.test.d.ts.map +0 -1
  548. package/dist/cli/__tests__/explore.test.js +0 -1090
  549. package/dist/cli/__tests__/explore.test.js.map +0 -1
  550. package/dist/cli/__tests__/hooks.test.d.ts +0 -2
  551. package/dist/cli/__tests__/hooks.test.d.ts.map +0 -1
  552. package/dist/cli/__tests__/hooks.test.js +0 -55
  553. package/dist/cli/__tests__/hooks.test.js.map +0 -1
  554. package/dist/cli/__tests__/index.test.d.ts +0 -2
  555. package/dist/cli/__tests__/index.test.d.ts.map +0 -1
  556. package/dist/cli/__tests__/index.test.js +0 -2259
  557. package/dist/cli/__tests__/index.test.js.map +0 -1
  558. package/dist/cli/__tests__/launch-fallback.test.d.ts +0 -2
  559. package/dist/cli/__tests__/launch-fallback.test.d.ts.map +0 -1
  560. package/dist/cli/__tests__/launch-fallback.test.js +0 -661
  561. package/dist/cli/__tests__/launch-fallback.test.js.map +0 -1
  562. package/dist/cli/__tests__/lifecycle-notifications.test.d.ts +0 -2
  563. package/dist/cli/__tests__/lifecycle-notifications.test.d.ts.map +0 -1
  564. package/dist/cli/__tests__/lifecycle-notifications.test.js +0 -48
  565. package/dist/cli/__tests__/lifecycle-notifications.test.js.map +0 -1
  566. package/dist/cli/__tests__/list.test.d.ts +0 -2
  567. package/dist/cli/__tests__/list.test.d.ts.map +0 -1
  568. package/dist/cli/__tests__/list.test.js +0 -38
  569. package/dist/cli/__tests__/list.test.js.map +0 -1
  570. package/dist/cli/__tests__/mcp-parity.test.d.ts +0 -2
  571. package/dist/cli/__tests__/mcp-parity.test.d.ts.map +0 -1
  572. package/dist/cli/__tests__/mcp-parity.test.js +0 -228
  573. package/dist/cli/__tests__/mcp-parity.test.js.map +0 -1
  574. package/dist/cli/__tests__/mcp-serve.test.d.ts +0 -2
  575. package/dist/cli/__tests__/mcp-serve.test.d.ts.map +0 -1
  576. package/dist/cli/__tests__/mcp-serve.test.js +0 -64
  577. package/dist/cli/__tests__/mcp-serve.test.js.map +0 -1
  578. package/dist/cli/__tests__/native-assets.test.d.ts +0 -2
  579. package/dist/cli/__tests__/native-assets.test.d.ts.map +0 -1
  580. package/dist/cli/__tests__/native-assets.test.js +0 -308
  581. package/dist/cli/__tests__/native-assets.test.js.map +0 -1
  582. package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts +0 -2
  583. package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts.map +0 -1
  584. package/dist/cli/__tests__/native-hook-dispatch-contract.test.js +0 -11
  585. package/dist/cli/__tests__/native-hook-dispatch-contract.test.js.map +0 -1
  586. package/dist/cli/__tests__/nested-help-routing.test.d.ts +0 -2
  587. package/dist/cli/__tests__/nested-help-routing.test.d.ts.map +0 -1
  588. package/dist/cli/__tests__/nested-help-routing.test.js +0 -96
  589. package/dist/cli/__tests__/nested-help-routing.test.js.map +0 -1
  590. package/dist/cli/__tests__/package-bin-contract.test.d.ts +0 -2
  591. package/dist/cli/__tests__/package-bin-contract.test.d.ts.map +0 -1
  592. package/dist/cli/__tests__/package-bin-contract.test.js +0 -177
  593. package/dist/cli/__tests__/package-bin-contract.test.js.map +0 -1
  594. package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts +0 -3
  595. package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts.map +0 -1
  596. package/dist/cli/__tests__/packaged-explore-harness-lock.js +0 -67
  597. package/dist/cli/__tests__/packaged-explore-harness-lock.js.map +0 -1
  598. package/dist/cli/__tests__/packaged-script-resolution.test.d.ts +0 -2
  599. package/dist/cli/__tests__/packaged-script-resolution.test.d.ts.map +0 -1
  600. package/dist/cli/__tests__/packaged-script-resolution.test.js +0 -19
  601. package/dist/cli/__tests__/packaged-script-resolution.test.js.map +0 -1
  602. package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts +0 -2
  603. package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts.map +0 -1
  604. package/dist/cli/__tests__/prompt-skill-sanitization.test.js +0 -48
  605. package/dist/cli/__tests__/prompt-skill-sanitization.test.js.map +0 -1
  606. package/dist/cli/__tests__/question.test.d.ts +0 -2
  607. package/dist/cli/__tests__/question.test.d.ts.map +0 -1
  608. package/dist/cli/__tests__/question.test.js +0 -633
  609. package/dist/cli/__tests__/question.test.js.map +0 -1
  610. package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts +0 -2
  611. package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts.map +0 -1
  612. package/dist/cli/__tests__/ralph-deslop-contract.test.js +0 -28
  613. package/dist/cli/__tests__/ralph-deslop-contract.test.js.map +0 -1
  614. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +0 -2
  615. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +0 -1
  616. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +0 -24
  617. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +0 -1
  618. package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts +0 -2
  619. package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts.map +0 -1
  620. package/dist/cli/__tests__/ralph-prd-smoke.test.js +0 -167
  621. package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +0 -1
  622. package/dist/cli/__tests__/ralph.test.d.ts +0 -2
  623. package/dist/cli/__tests__/ralph.test.d.ts.map +0 -1
  624. package/dist/cli/__tests__/ralph.test.js +0 -256
  625. package/dist/cli/__tests__/ralph.test.js.map +0 -1
  626. package/dist/cli/__tests__/resume.test.d.ts +0 -2
  627. package/dist/cli/__tests__/resume.test.d.ts.map +0 -1
  628. package/dist/cli/__tests__/resume.test.js +0 -84
  629. package/dist/cli/__tests__/resume.test.js.map +0 -1
  630. package/dist/cli/__tests__/session-scoped-runtime.test.d.ts +0 -2
  631. package/dist/cli/__tests__/session-scoped-runtime.test.d.ts.map +0 -1
  632. package/dist/cli/__tests__/session-scoped-runtime.test.js +0 -146
  633. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +0 -1
  634. package/dist/cli/__tests__/session-search-help.test.d.ts +0 -2
  635. package/dist/cli/__tests__/session-search-help.test.d.ts.map +0 -1
  636. package/dist/cli/__tests__/session-search-help.test.js +0 -76
  637. package/dist/cli/__tests__/session-search-help.test.js.map +0 -1
  638. package/dist/cli/__tests__/session-search.test.d.ts +0 -2
  639. package/dist/cli/__tests__/session-search.test.d.ts.map +0 -1
  640. package/dist/cli/__tests__/session-search.test.js +0 -77
  641. package/dist/cli/__tests__/session-search.test.js.map +0 -1
  642. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +0 -2
  643. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +0 -1
  644. package/dist/cli/__tests__/setup-agents-overwrite.test.js +0 -457
  645. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +0 -1
  646. package/dist/cli/__tests__/setup-gh-star.test.d.ts +0 -2
  647. package/dist/cli/__tests__/setup-gh-star.test.d.ts.map +0 -1
  648. package/dist/cli/__tests__/setup-gh-star.test.js +0 -67
  649. package/dist/cli/__tests__/setup-gh-star.test.js.map +0 -1
  650. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts +0 -2
  651. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts.map +0 -1
  652. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +0 -189
  653. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +0 -1
  654. package/dist/cli/__tests__/setup-install-mode.test.d.ts +0 -2
  655. package/dist/cli/__tests__/setup-install-mode.test.d.ts.map +0 -1
  656. package/dist/cli/__tests__/setup-install-mode.test.js +0 -873
  657. package/dist/cli/__tests__/setup-install-mode.test.js.map +0 -1
  658. package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts +0 -2
  659. package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts.map +0 -1
  660. package/dist/cli/__tests__/setup-prompts-overwrite.test.js +0 -191
  661. package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +0 -1
  662. package/dist/cli/__tests__/setup-refresh.test.d.ts +0 -2
  663. package/dist/cli/__tests__/setup-refresh.test.d.ts.map +0 -1
  664. package/dist/cli/__tests__/setup-refresh.test.js +0 -591
  665. package/dist/cli/__tests__/setup-refresh.test.js.map +0 -1
  666. package/dist/cli/__tests__/setup-scope.test.d.ts +0 -2
  667. package/dist/cli/__tests__/setup-scope.test.d.ts.map +0 -1
  668. package/dist/cli/__tests__/setup-scope.test.js +0 -340
  669. package/dist/cli/__tests__/setup-scope.test.js.map +0 -1
  670. package/dist/cli/__tests__/setup-skill-validation.test.d.ts +0 -2
  671. package/dist/cli/__tests__/setup-skill-validation.test.d.ts.map +0 -1
  672. package/dist/cli/__tests__/setup-skill-validation.test.js +0 -44
  673. package/dist/cli/__tests__/setup-skill-validation.test.js.map +0 -1
  674. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +0 -2
  675. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +0 -1
  676. package/dist/cli/__tests__/setup-skills-overwrite.test.js +0 -295
  677. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +0 -1
  678. package/dist/cli/__tests__/sidecar.test.d.ts +0 -2
  679. package/dist/cli/__tests__/sidecar.test.d.ts.map +0 -1
  680. package/dist/cli/__tests__/sidecar.test.js +0 -24
  681. package/dist/cli/__tests__/sidecar.test.js.map +0 -1
  682. package/dist/cli/__tests__/sparkshell-cli.test.d.ts +0 -2
  683. package/dist/cli/__tests__/sparkshell-cli.test.d.ts.map +0 -1
  684. package/dist/cli/__tests__/sparkshell-cli.test.js +0 -400
  685. package/dist/cli/__tests__/sparkshell-cli.test.js.map +0 -1
  686. package/dist/cli/__tests__/sparkshell-packaging.test.d.ts +0 -2
  687. package/dist/cli/__tests__/sparkshell-packaging.test.d.ts.map +0 -1
  688. package/dist/cli/__tests__/sparkshell-packaging.test.js +0 -74
  689. package/dist/cli/__tests__/sparkshell-packaging.test.js.map +0 -1
  690. package/dist/cli/__tests__/star-prompt.test.d.ts +0 -2
  691. package/dist/cli/__tests__/star-prompt.test.d.ts.map +0 -1
  692. package/dist/cli/__tests__/star-prompt.test.js +0 -172
  693. package/dist/cli/__tests__/star-prompt.test.js.map +0 -1
  694. package/dist/cli/__tests__/state.test.d.ts +0 -2
  695. package/dist/cli/__tests__/state.test.d.ts.map +0 -1
  696. package/dist/cli/__tests__/state.test.js +0 -46
  697. package/dist/cli/__tests__/state.test.js.map +0 -1
  698. package/dist/cli/__tests__/team-decompose.test.d.ts +0 -2
  699. package/dist/cli/__tests__/team-decompose.test.d.ts.map +0 -1
  700. package/dist/cli/__tests__/team-decompose.test.js +0 -133
  701. package/dist/cli/__tests__/team-decompose.test.js.map +0 -1
  702. package/dist/cli/__tests__/team.test.d.ts +0 -2
  703. package/dist/cli/__tests__/team.test.d.ts.map +0 -1
  704. package/dist/cli/__tests__/team.test.js +0 -1820
  705. package/dist/cli/__tests__/team.test.js.map +0 -1
  706. package/dist/cli/__tests__/uninstall.test.d.ts +0 -2
  707. package/dist/cli/__tests__/uninstall.test.d.ts.map +0 -1
  708. package/dist/cli/__tests__/uninstall.test.js +0 -766
  709. package/dist/cli/__tests__/uninstall.test.js.map +0 -1
  710. package/dist/cli/__tests__/update.test.d.ts +0 -2
  711. package/dist/cli/__tests__/update.test.d.ts.map +0 -1
  712. package/dist/cli/__tests__/update.test.js +0 -589
  713. package/dist/cli/__tests__/update.test.js.map +0 -1
  714. package/dist/cli/__tests__/version-sync-contract.test.d.ts +0 -2
  715. package/dist/cli/__tests__/version-sync-contract.test.d.ts.map +0 -1
  716. package/dist/cli/__tests__/version-sync-contract.test.js +0 -41
  717. package/dist/cli/__tests__/version-sync-contract.test.js.map +0 -1
  718. package/dist/cli/__tests__/version.test.d.ts +0 -2
  719. package/dist/cli/__tests__/version.test.d.ts.map +0 -1
  720. package/dist/cli/__tests__/version.test.js +0 -21
  721. package/dist/cli/__tests__/version.test.js.map +0 -1
  722. package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts +0 -2
  723. package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts.map +0 -1
  724. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +0 -31
  725. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +0 -1
  726. package/dist/cli/ralph.d.ts +0 -17
  727. package/dist/compat/__tests__/doctor-contract.test.d.ts +0 -2
  728. package/dist/compat/__tests__/doctor-contract.test.d.ts.map +0 -1
  729. package/dist/compat/__tests__/doctor-contract.test.js +0 -108
  730. package/dist/compat/__tests__/doctor-contract.test.js.map +0 -1
  731. package/dist/compat/__tests__/rust-runtime-compat.test.d.ts +0 -2
  732. package/dist/compat/__tests__/rust-runtime-compat.test.d.ts.map +0 -1
  733. package/dist/compat/__tests__/rust-runtime-compat.test.js +0 -218
  734. package/dist/compat/__tests__/rust-runtime-compat.test.js.map +0 -1
  735. package/dist/config/__tests__/codex-hooks.test.d.ts +0 -2
  736. package/dist/config/__tests__/codex-hooks.test.d.ts.map +0 -1
  737. package/dist/config/__tests__/codex-hooks.test.js +0 -77
  738. package/dist/config/__tests__/codex-hooks.test.js.map +0 -1
  739. package/dist/config/__tests__/generator-idempotent.test.d.ts +0 -2
  740. package/dist/config/__tests__/generator-idempotent.test.d.ts.map +0 -1
  741. package/dist/config/__tests__/generator-idempotent.test.js +0 -882
  742. package/dist/config/__tests__/generator-idempotent.test.js.map +0 -1
  743. package/dist/config/__tests__/generator-notify.test.d.ts +0 -2
  744. package/dist/config/__tests__/generator-notify.test.d.ts.map +0 -1
  745. package/dist/config/__tests__/generator-notify.test.js +0 -343
  746. package/dist/config/__tests__/generator-notify.test.js.map +0 -1
  747. package/dist/config/__tests__/generator-status-line-presets.test.d.ts +0 -2
  748. package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +0 -1
  749. package/dist/config/__tests__/generator-status-line-presets.test.js +0 -203
  750. package/dist/config/__tests__/generator-status-line-presets.test.js.map +0 -1
  751. package/dist/config/__tests__/mcp-registry.test.d.ts +0 -2
  752. package/dist/config/__tests__/mcp-registry.test.d.ts.map +0 -1
  753. package/dist/config/__tests__/mcp-registry.test.js +0 -190
  754. package/dist/config/__tests__/mcp-registry.test.js.map +0 -1
  755. package/dist/config/__tests__/models.test.d.ts +0 -2
  756. package/dist/config/__tests__/models.test.d.ts.map +0 -1
  757. package/dist/config/__tests__/models.test.js +0 -224
  758. package/dist/config/__tests__/models.test.js.map +0 -1
  759. package/dist/config/__tests__/wiki-config-contract.test.d.ts +0 -2
  760. package/dist/config/__tests__/wiki-config-contract.test.d.ts.map +0 -1
  761. package/dist/config/__tests__/wiki-config-contract.test.js +0 -19
  762. package/dist/config/__tests__/wiki-config-contract.test.js.map +0 -1
  763. package/dist/document-refresh/__tests__/enforcer.test.d.ts +0 -2
  764. package/dist/document-refresh/__tests__/enforcer.test.d.ts.map +0 -1
  765. package/dist/document-refresh/__tests__/enforcer.test.js +0 -128
  766. package/dist/document-refresh/__tests__/enforcer.test.js.map +0 -1
  767. package/dist/hooks/__tests__/agents-overlay.test.d.ts +0 -8
  768. package/dist/hooks/__tests__/agents-overlay.test.d.ts.map +0 -1
  769. package/dist/hooks/__tests__/agents-overlay.test.js +0 -644
  770. package/dist/hooks/__tests__/agents-overlay.test.js.map +0 -1
  771. package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts +0 -2
  772. package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts.map +0 -1
  773. package/dist/hooks/__tests__/analyze-routing-contract.test.js +0 -45
  774. package/dist/hooks/__tests__/analyze-routing-contract.test.js.map +0 -1
  775. package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts +0 -2
  776. package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts.map +0 -1
  777. package/dist/hooks/__tests__/analyze-skill-contract.test.js +0 -48
  778. package/dist/hooks/__tests__/analyze-skill-contract.test.js.map +0 -1
  779. package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts +0 -2
  780. package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts.map +0 -1
  781. package/dist/hooks/__tests__/anti-slop-workflow.test.js +0 -146
  782. package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +0 -1
  783. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts +0 -2
  784. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts.map +0 -1
  785. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +0 -37
  786. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +0 -1
  787. package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts +0 -2
  788. package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts.map +0 -1
  789. package/dist/hooks/__tests__/clawhip-event-contract.test.js +0 -37
  790. package/dist/hooks/__tests__/clawhip-event-contract.test.js.map +0 -1
  791. package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts +0 -2
  792. package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts.map +0 -1
  793. package/dist/hooks/__tests__/code-review-skill-contract.test.js +0 -56
  794. package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +0 -1
  795. package/dist/hooks/__tests__/codebase-map.test.d.ts +0 -8
  796. package/dist/hooks/__tests__/codebase-map.test.d.ts.map +0 -1
  797. package/dist/hooks/__tests__/codebase-map.test.js +0 -218
  798. package/dist/hooks/__tests__/codebase-map.test.js.map +0 -1
  799. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +0 -18
  800. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +0 -1
  801. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +0 -234
  802. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +0 -1
  803. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts +0 -2
  804. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts.map +0 -1
  805. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js +0 -20
  806. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js.map +0 -1
  807. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +0 -2
  808. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +0 -1
  809. package/dist/hooks/__tests__/deep-interview-contract.test.js +0 -213
  810. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +0 -1
  811. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts +0 -2
  812. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts.map +0 -1
  813. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js +0 -43
  814. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js.map +0 -1
  815. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts +0 -2
  816. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts.map +0 -1
  817. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js +0 -38
  818. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js.map +0 -1
  819. package/dist/hooks/__tests__/explore-routing.test.d.ts +0 -2
  820. package/dist/hooks/__tests__/explore-routing.test.d.ts.map +0 -1
  821. package/dist/hooks/__tests__/explore-routing.test.js +0 -43
  822. package/dist/hooks/__tests__/explore-routing.test.js.map +0 -1
  823. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts +0 -2
  824. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts.map +0 -1
  825. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js +0 -69
  826. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js.map +0 -1
  827. package/dist/hooks/__tests__/keyword-detector.test.d.ts +0 -2
  828. package/dist/hooks/__tests__/keyword-detector.test.d.ts.map +0 -1
  829. package/dist/hooks/__tests__/keyword-detector.test.js +0 -1716
  830. package/dist/hooks/__tests__/keyword-detector.test.js.map +0 -1
  831. package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts +0 -2
  832. package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts.map +0 -1
  833. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +0 -3898
  834. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +0 -1
  835. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts +0 -2
  836. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts.map +0 -1
  837. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +0 -786
  838. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +0 -1
  839. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts +0 -2
  840. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts.map +0 -1
  841. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +0 -2397
  842. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +0 -1
  843. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts +0 -2
  844. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts.map +0 -1
  845. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +0 -160
  846. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +0 -1
  847. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts +0 -2
  848. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts.map +0 -1
  849. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +0 -1178
  850. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +0 -1
  851. package/dist/hooks/__tests__/notify-hook-modules.test.d.ts +0 -9
  852. package/dist/hooks/__tests__/notify-hook-modules.test.d.ts.map +0 -1
  853. package/dist/hooks/__tests__/notify-hook-modules.test.js +0 -529
  854. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +0 -1
  855. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts +0 -2
  856. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts.map +0 -1
  857. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js +0 -14
  858. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js.map +0 -1
  859. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts +0 -2
  860. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts.map +0 -1
  861. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +0 -682
  862. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +0 -1
  863. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts +0 -9
  864. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts.map +0 -1
  865. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +0 -255
  866. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +0 -1
  867. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts +0 -2
  868. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts.map +0 -1
  869. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +0 -162
  870. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +0 -1
  871. package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts +0 -2
  872. package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts.map +0 -1
  873. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +0 -301
  874. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +0 -1
  875. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts +0 -2
  876. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts.map +0 -1
  877. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +0 -1510
  878. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +0 -1
  879. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts +0 -2
  880. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts.map +0 -1
  881. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +0 -2879
  882. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +0 -1
  883. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts +0 -2
  884. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts.map +0 -1
  885. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +0 -228
  886. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +0 -1
  887. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +0 -2
  888. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +0 -1
  889. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +0 -35
  890. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +0 -1
  891. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts +0 -2
  892. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts.map +0 -1
  893. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +0 -1589
  894. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +0 -1
  895. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts +0 -10
  896. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts.map +0 -1
  897. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +0 -0
  898. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +0 -1
  899. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +0 -11
  900. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +0 -1
  901. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +0 -266
  902. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +0 -1
  903. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +0 -2
  904. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +0 -1
  905. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +0 -895
  906. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +0 -1
  907. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +0 -2
  908. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +0 -1
  909. package/dist/hooks/__tests__/openclaw-setup-contract.test.js +0 -61
  910. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +0 -1
  911. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +0 -2
  912. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +0 -1
  913. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +0 -40
  914. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +0 -1
  915. package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts +0 -2
  916. package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts.map +0 -1
  917. package/dist/hooks/__tests__/prompt-guidance-catalog.test.js +0 -11
  918. package/dist/hooks/__tests__/prompt-guidance-catalog.test.js.map +0 -1
  919. package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts +0 -2
  920. package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts.map +0 -1
  921. package/dist/hooks/__tests__/prompt-guidance-contract.test.js +0 -38
  922. package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +0 -1
  923. package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts +0 -2
  924. package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts.map +0 -1
  925. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +0 -48
  926. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +0 -1
  927. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts +0 -2
  928. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts.map +0 -1
  929. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js +0 -11
  930. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js.map +0 -1
  931. package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts +0 -5
  932. package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts.map +0 -1
  933. package/dist/hooks/__tests__/prompt-guidance-test-helpers.js +0 -34
  934. package/dist/hooks/__tests__/prompt-guidance-test-helpers.js.map +0 -1
  935. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts +0 -2
  936. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts.map +0 -1
  937. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +0 -65
  938. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +0 -1
  939. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts +0 -2
  940. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts.map +0 -1
  941. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js +0 -38
  942. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js.map +0 -1
  943. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +0 -2
  944. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +0 -1
  945. package/dist/hooks/__tests__/prompt-refactor-contract.test.js +0 -22
  946. package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +0 -1
  947. package/dist/hooks/__tests__/prompt-team-routing.test.d.ts +0 -2
  948. package/dist/hooks/__tests__/prompt-team-routing.test.d.ts.map +0 -1
  949. package/dist/hooks/__tests__/prompt-team-routing.test.js +0 -49
  950. package/dist/hooks/__tests__/prompt-team-routing.test.js.map +0 -1
  951. package/dist/hooks/__tests__/session.test.d.ts +0 -2
  952. package/dist/hooks/__tests__/session.test.d.ts.map +0 -1
  953. package/dist/hooks/__tests__/session.test.js +0 -322
  954. package/dist/hooks/__tests__/session.test.js.map +0 -1
  955. package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts +0 -2
  956. package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts.map +0 -1
  957. package/dist/hooks/__tests__/skill-guidance-contract.test.js +0 -29
  958. package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +0 -1
  959. package/dist/hooks/__tests__/task-size-detector.test.d.ts +0 -2
  960. package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +0 -1
  961. package/dist/hooks/__tests__/task-size-detector.test.js +0 -330
  962. package/dist/hooks/__tests__/task-size-detector.test.js.map +0 -1
  963. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts +0 -2
  964. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts.map +0 -1
  965. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js +0 -28
  966. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +0 -1
  967. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +0 -2
  968. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +0 -1
  969. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +0 -24
  970. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +0 -1
  971. package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts +0 -2
  972. package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts.map +0 -1
  973. package/dist/hooks/__tests__/tmux-hook-engine.test.js +0 -403
  974. package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +0 -1
  975. package/dist/hooks/__tests__/triage-config.test.d.ts +0 -2
  976. package/dist/hooks/__tests__/triage-config.test.d.ts.map +0 -1
  977. package/dist/hooks/__tests__/triage-config.test.js +0 -211
  978. package/dist/hooks/__tests__/triage-config.test.js.map +0 -1
  979. package/dist/hooks/__tests__/triage-heuristic.test.d.ts +0 -2
  980. package/dist/hooks/__tests__/triage-heuristic.test.d.ts.map +0 -1
  981. package/dist/hooks/__tests__/triage-heuristic.test.js +0 -285
  982. package/dist/hooks/__tests__/triage-heuristic.test.js.map +0 -1
  983. package/dist/hooks/__tests__/triage-state.test.d.ts +0 -2
  984. package/dist/hooks/__tests__/triage-state.test.d.ts.map +0 -1
  985. package/dist/hooks/__tests__/triage-state.test.js +0 -426
  986. package/dist/hooks/__tests__/triage-state.test.js.map +0 -1
  987. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts +0 -2
  988. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts.map +0 -1
  989. package/dist/hooks/__tests__/visual-ralph-skill.test.js +0 -44
  990. package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +0 -1
  991. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +0 -2
  992. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +0 -1
  993. package/dist/hooks/__tests__/visual-verdict-loop.test.js +0 -35
  994. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +0 -1
  995. package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts +0 -2
  996. package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts.map +0 -1
  997. package/dist/hooks/__tests__/wiki-docs-contract.test.js +0 -34
  998. package/dist/hooks/__tests__/wiki-docs-contract.test.js.map +0 -1
  999. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +0 -2
  1000. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +0 -1
  1001. package/dist/hooks/code-simplifier/__tests__/index.test.js +0 -187
  1002. package/dist/hooks/code-simplifier/__tests__/index.test.js.map +0 -1
  1003. package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts +0 -2
  1004. package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts.map +0 -1
  1005. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +0 -242
  1006. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +0 -1
  1007. package/dist/hooks/extensibility/__tests__/events.test.d.ts +0 -2
  1008. package/dist/hooks/extensibility/__tests__/events.test.d.ts.map +0 -1
  1009. package/dist/hooks/extensibility/__tests__/events.test.js +0 -125
  1010. package/dist/hooks/extensibility/__tests__/events.test.js.map +0 -1
  1011. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts +0 -2
  1012. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts.map +0 -1
  1013. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js +0 -153
  1014. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js.map +0 -1
  1015. package/dist/hooks/extensibility/__tests__/loader.test.d.ts +0 -2
  1016. package/dist/hooks/extensibility/__tests__/loader.test.d.ts.map +0 -1
  1017. package/dist/hooks/extensibility/__tests__/loader.test.js +0 -254
  1018. package/dist/hooks/extensibility/__tests__/loader.test.js.map +0 -1
  1019. package/dist/hooks/extensibility/__tests__/logging.test.d.ts +0 -2
  1020. package/dist/hooks/extensibility/__tests__/logging.test.d.ts.map +0 -1
  1021. package/dist/hooks/extensibility/__tests__/logging.test.js +0 -74
  1022. package/dist/hooks/extensibility/__tests__/logging.test.js.map +0 -1
  1023. package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts +0 -2
  1024. package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts.map +0 -1
  1025. package/dist/hooks/extensibility/__tests__/plugin-runner.test.js +0 -202
  1026. package/dist/hooks/extensibility/__tests__/plugin-runner.test.js.map +0 -1
  1027. package/dist/hooks/extensibility/__tests__/runtime.test.d.ts +0 -2
  1028. package/dist/hooks/extensibility/__tests__/runtime.test.d.ts.map +0 -1
  1029. package/dist/hooks/extensibility/__tests__/runtime.test.js +0 -198
  1030. package/dist/hooks/extensibility/__tests__/runtime.test.js.map +0 -1
  1031. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts +0 -2
  1032. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts.map +0 -1
  1033. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js +0 -32
  1034. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js.map +0 -1
  1035. package/dist/hooks/extensibility/__tests__/sdk.test.d.ts +0 -2
  1036. package/dist/hooks/extensibility/__tests__/sdk.test.d.ts.map +0 -1
  1037. package/dist/hooks/extensibility/__tests__/sdk.test.js +0 -479
  1038. package/dist/hooks/extensibility/__tests__/sdk.test.js.map +0 -1
  1039. package/dist/hud/__tests__/authority.test.d.ts +0 -2
  1040. package/dist/hud/__tests__/authority.test.d.ts.map +0 -1
  1041. package/dist/hud/__tests__/authority.test.js +0 -56
  1042. package/dist/hud/__tests__/authority.test.js.map +0 -1
  1043. package/dist/hud/__tests__/colors.test.d.ts +0 -2
  1044. package/dist/hud/__tests__/colors.test.d.ts.map +0 -1
  1045. package/dist/hud/__tests__/colors.test.js +0 -92
  1046. package/dist/hud/__tests__/colors.test.js.map +0 -1
  1047. package/dist/hud/__tests__/hud-tmux-injection.test.d.ts +0 -10
  1048. package/dist/hud/__tests__/hud-tmux-injection.test.d.ts.map +0 -1
  1049. package/dist/hud/__tests__/hud-tmux-injection.test.js +0 -150
  1050. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +0 -1
  1051. package/dist/hud/__tests__/index.test.d.ts +0 -2
  1052. package/dist/hud/__tests__/index.test.d.ts.map +0 -1
  1053. package/dist/hud/__tests__/index.test.js +0 -180
  1054. package/dist/hud/__tests__/index.test.js.map +0 -1
  1055. package/dist/hud/__tests__/reconcile.test.d.ts +0 -2
  1056. package/dist/hud/__tests__/reconcile.test.d.ts.map +0 -1
  1057. package/dist/hud/__tests__/reconcile.test.js +0 -125
  1058. package/dist/hud/__tests__/reconcile.test.js.map +0 -1
  1059. package/dist/hud/__tests__/render.test.d.ts +0 -2
  1060. package/dist/hud/__tests__/render.test.d.ts.map +0 -1
  1061. package/dist/hud/__tests__/render.test.js +0 -573
  1062. package/dist/hud/__tests__/render.test.js.map +0 -1
  1063. package/dist/hud/__tests__/state.test.d.ts +0 -2
  1064. package/dist/hud/__tests__/state.test.d.ts.map +0 -1
  1065. package/dist/hud/__tests__/state.test.js +0 -618
  1066. package/dist/hud/__tests__/state.test.js.map +0 -1
  1067. package/dist/hud/__tests__/types.test.d.ts +0 -2
  1068. package/dist/hud/__tests__/types.test.d.ts.map +0 -1
  1069. package/dist/hud/__tests__/types.test.js +0 -79
  1070. package/dist/hud/__tests__/types.test.js.map +0 -1
  1071. package/dist/hud/__tests__/watch.test.d.ts +0 -2
  1072. package/dist/hud/__tests__/watch.test.d.ts.map +0 -1
  1073. package/dist/hud/__tests__/watch.test.js +0 -63
  1074. package/dist/hud/__tests__/watch.test.js.map +0 -1
  1075. package/dist/mcp/__tests__/bootstrap.test.d.ts +0 -2
  1076. package/dist/mcp/__tests__/bootstrap.test.d.ts.map +0 -1
  1077. package/dist/mcp/__tests__/bootstrap.test.js +0 -207
  1078. package/dist/mcp/__tests__/bootstrap.test.js.map +0 -1
  1079. package/dist/mcp/__tests__/code-intel-server.test.d.ts +0 -2
  1080. package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +0 -1
  1081. package/dist/mcp/__tests__/code-intel-server.test.js +0 -70
  1082. package/dist/mcp/__tests__/code-intel-server.test.js.map +0 -1
  1083. package/dist/mcp/__tests__/memory-server.test.d.ts +0 -2
  1084. package/dist/mcp/__tests__/memory-server.test.d.ts.map +0 -1
  1085. package/dist/mcp/__tests__/memory-server.test.js +0 -36
  1086. package/dist/mcp/__tests__/memory-server.test.js.map +0 -1
  1087. package/dist/mcp/__tests__/memory-validation.test.d.ts +0 -2
  1088. package/dist/mcp/__tests__/memory-validation.test.d.ts.map +0 -1
  1089. package/dist/mcp/__tests__/memory-validation.test.js +0 -29
  1090. package/dist/mcp/__tests__/memory-validation.test.js.map +0 -1
  1091. package/dist/mcp/__tests__/path-traversal.test.d.ts +0 -2
  1092. package/dist/mcp/__tests__/path-traversal.test.d.ts.map +0 -1
  1093. package/dist/mcp/__tests__/path-traversal.test.js +0 -83
  1094. package/dist/mcp/__tests__/path-traversal.test.js.map +0 -1
  1095. package/dist/mcp/__tests__/server-lifecycle.test.d.ts +0 -2
  1096. package/dist/mcp/__tests__/server-lifecycle.test.d.ts.map +0 -1
  1097. package/dist/mcp/__tests__/server-lifecycle.test.js +0 -260
  1098. package/dist/mcp/__tests__/server-lifecycle.test.js.map +0 -1
  1099. package/dist/mcp/__tests__/state-paths.test.d.ts +0 -2
  1100. package/dist/mcp/__tests__/state-paths.test.d.ts.map +0 -1
  1101. package/dist/mcp/__tests__/state-paths.test.js +0 -209
  1102. package/dist/mcp/__tests__/state-paths.test.js.map +0 -1
  1103. package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts +0 -2
  1104. package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts.map +0 -1
  1105. package/dist/mcp/__tests__/state-server-ralph-phase.test.js +0 -109
  1106. package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +0 -1
  1107. package/dist/mcp/__tests__/state-server-schema.test.d.ts +0 -2
  1108. package/dist/mcp/__tests__/state-server-schema.test.d.ts.map +0 -1
  1109. package/dist/mcp/__tests__/state-server-schema.test.js +0 -29
  1110. package/dist/mcp/__tests__/state-server-schema.test.js.map +0 -1
  1111. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts +0 -2
  1112. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts.map +0 -1
  1113. package/dist/mcp/__tests__/state-server-team-tools.test.js +0 -35
  1114. package/dist/mcp/__tests__/state-server-team-tools.test.js.map +0 -1
  1115. package/dist/mcp/__tests__/state-server.test.d.ts +0 -2
  1116. package/dist/mcp/__tests__/state-server.test.d.ts.map +0 -1
  1117. package/dist/mcp/__tests__/state-server.test.js +0 -965
  1118. package/dist/mcp/__tests__/state-server.test.js.map +0 -1
  1119. package/dist/mcp/__tests__/trace-server.test.d.ts +0 -2
  1120. package/dist/mcp/__tests__/trace-server.test.d.ts.map +0 -1
  1121. package/dist/mcp/__tests__/trace-server.test.js +0 -119
  1122. package/dist/mcp/__tests__/trace-server.test.js.map +0 -1
  1123. package/dist/mcp/__tests__/wiki-server.test.d.ts +0 -2
  1124. package/dist/mcp/__tests__/wiki-server.test.d.ts.map +0 -1
  1125. package/dist/mcp/__tests__/wiki-server.test.js +0 -30
  1126. package/dist/mcp/__tests__/wiki-server.test.js.map +0 -1
  1127. package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts +0 -2
  1128. package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts.map +0 -1
  1129. package/dist/modes/__tests__/base-autoresearch-contract.test.js +0 -123
  1130. package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +0 -1
  1131. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts +0 -2
  1132. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts.map +0 -1
  1133. package/dist/modes/__tests__/base-multi-state-compat.test.js +0 -38
  1134. package/dist/modes/__tests__/base-multi-state-compat.test.js.map +0 -1
  1135. package/dist/modes/__tests__/base-ralph-contract.test.d.ts +0 -2
  1136. package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +0 -1
  1137. package/dist/modes/__tests__/base-ralph-contract.test.js +0 -64
  1138. package/dist/modes/__tests__/base-ralph-contract.test.js.map +0 -1
  1139. package/dist/modes/__tests__/base-session-scope.test.d.ts +0 -2
  1140. package/dist/modes/__tests__/base-session-scope.test.d.ts.map +0 -1
  1141. package/dist/modes/__tests__/base-session-scope.test.js +0 -98
  1142. package/dist/modes/__tests__/base-session-scope.test.js.map +0 -1
  1143. package/dist/modes/__tests__/base-tmux-pane.test.d.ts +0 -2
  1144. package/dist/modes/__tests__/base-tmux-pane.test.d.ts.map +0 -1
  1145. package/dist/modes/__tests__/base-tmux-pane.test.js +0 -39
  1146. package/dist/modes/__tests__/base-tmux-pane.test.js.map +0 -1
  1147. package/dist/notifications/__tests__/config.test.d.ts +0 -2
  1148. package/dist/notifications/__tests__/config.test.d.ts.map +0 -1
  1149. package/dist/notifications/__tests__/config.test.js +0 -269
  1150. package/dist/notifications/__tests__/config.test.js.map +0 -1
  1151. package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts +0 -2
  1152. package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts.map +0 -1
  1153. package/dist/notifications/__tests__/custom-alias-enablement.test.js +0 -84
  1154. package/dist/notifications/__tests__/custom-alias-enablement.test.js.map +0 -1
  1155. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +0 -5
  1156. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +0 -1
  1157. package/dist/notifications/__tests__/dispatch-cooldown.test.js +0 -100
  1158. package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +0 -1
  1159. package/dist/notifications/__tests__/dispatcher.test.d.ts +0 -2
  1160. package/dist/notifications/__tests__/dispatcher.test.d.ts.map +0 -1
  1161. package/dist/notifications/__tests__/dispatcher.test.js +0 -202
  1162. package/dist/notifications/__tests__/dispatcher.test.js.map +0 -1
  1163. package/dist/notifications/__tests__/formatter.test.d.ts +0 -2
  1164. package/dist/notifications/__tests__/formatter.test.d.ts.map +0 -1
  1165. package/dist/notifications/__tests__/formatter.test.js +0 -270
  1166. package/dist/notifications/__tests__/formatter.test.js.map +0 -1
  1167. package/dist/notifications/__tests__/hook-config.test.d.ts +0 -5
  1168. package/dist/notifications/__tests__/hook-config.test.d.ts.map +0 -1
  1169. package/dist/notifications/__tests__/hook-config.test.js +0 -139
  1170. package/dist/notifications/__tests__/hook-config.test.js.map +0 -1
  1171. package/dist/notifications/__tests__/idle-cooldown.test.d.ts +0 -5
  1172. package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +0 -1
  1173. package/dist/notifications/__tests__/idle-cooldown.test.js +0 -209
  1174. package/dist/notifications/__tests__/idle-cooldown.test.js.map +0 -1
  1175. package/dist/notifications/__tests__/index.test.d.ts +0 -2
  1176. package/dist/notifications/__tests__/index.test.d.ts.map +0 -1
  1177. package/dist/notifications/__tests__/index.test.js +0 -188
  1178. package/dist/notifications/__tests__/index.test.js.map +0 -1
  1179. package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts +0 -2
  1180. package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts.map +0 -1
  1181. package/dist/notifications/__tests__/lifecycle-dedupe.test.js +0 -86
  1182. package/dist/notifications/__tests__/lifecycle-dedupe.test.js.map +0 -1
  1183. package/dist/notifications/__tests__/notifier.test.d.ts +0 -2
  1184. package/dist/notifications/__tests__/notifier.test.d.ts.map +0 -1
  1185. package/dist/notifications/__tests__/notifier.test.js +0 -239
  1186. package/dist/notifications/__tests__/notifier.test.js.map +0 -1
  1187. package/dist/notifications/__tests__/profiles.test.d.ts +0 -2
  1188. package/dist/notifications/__tests__/profiles.test.d.ts.map +0 -1
  1189. package/dist/notifications/__tests__/profiles.test.js +0 -404
  1190. package/dist/notifications/__tests__/profiles.test.js.map +0 -1
  1191. package/dist/notifications/__tests__/reply-config.test.d.ts +0 -2
  1192. package/dist/notifications/__tests__/reply-config.test.d.ts.map +0 -1
  1193. package/dist/notifications/__tests__/reply-config.test.js +0 -79
  1194. package/dist/notifications/__tests__/reply-config.test.js.map +0 -1
  1195. package/dist/notifications/__tests__/reply-listener.test.d.ts +0 -2
  1196. package/dist/notifications/__tests__/reply-listener.test.d.ts.map +0 -1
  1197. package/dist/notifications/__tests__/reply-listener.test.js +0 -723
  1198. package/dist/notifications/__tests__/reply-listener.test.js.map +0 -1
  1199. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts +0 -2
  1200. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts.map +0 -1
  1201. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js +0 -93
  1202. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js.map +0 -1
  1203. package/dist/notifications/__tests__/session-registry.test.d.ts +0 -2
  1204. package/dist/notifications/__tests__/session-registry.test.d.ts.map +0 -1
  1205. package/dist/notifications/__tests__/session-registry.test.js +0 -234
  1206. package/dist/notifications/__tests__/session-registry.test.js.map +0 -1
  1207. package/dist/notifications/__tests__/session-status.test.d.ts +0 -2
  1208. package/dist/notifications/__tests__/session-status.test.d.ts.map +0 -1
  1209. package/dist/notifications/__tests__/session-status.test.js +0 -249
  1210. package/dist/notifications/__tests__/session-status.test.js.map +0 -1
  1211. package/dist/notifications/__tests__/temp-mode.test.d.ts +0 -2
  1212. package/dist/notifications/__tests__/temp-mode.test.d.ts.map +0 -1
  1213. package/dist/notifications/__tests__/temp-mode.test.js +0 -172
  1214. package/dist/notifications/__tests__/temp-mode.test.js.map +0 -1
  1215. package/dist/notifications/__tests__/template-engine.test.d.ts +0 -5
  1216. package/dist/notifications/__tests__/template-engine.test.d.ts.map +0 -1
  1217. package/dist/notifications/__tests__/template-engine.test.js +0 -158
  1218. package/dist/notifications/__tests__/template-engine.test.js.map +0 -1
  1219. package/dist/notifications/__tests__/tmux-detector.test.d.ts +0 -2
  1220. package/dist/notifications/__tests__/tmux-detector.test.d.ts.map +0 -1
  1221. package/dist/notifications/__tests__/tmux-detector.test.js +0 -208
  1222. package/dist/notifications/__tests__/tmux-detector.test.js.map +0 -1
  1223. package/dist/notifications/__tests__/tmux.test.d.ts +0 -2
  1224. package/dist/notifications/__tests__/tmux.test.d.ts.map +0 -1
  1225. package/dist/notifications/__tests__/tmux.test.js +0 -285
  1226. package/dist/notifications/__tests__/tmux.test.js.map +0 -1
  1227. package/dist/notifications/__tests__/verbosity.test.d.ts +0 -2
  1228. package/dist/notifications/__tests__/verbosity.test.d.ts.map +0 -1
  1229. package/dist/notifications/__tests__/verbosity.test.js +0 -237
  1230. package/dist/notifications/__tests__/verbosity.test.js.map +0 -1
  1231. package/dist/openclaw/__tests__/config.test.d.ts +0 -6
  1232. package/dist/openclaw/__tests__/config.test.d.ts.map +0 -1
  1233. package/dist/openclaw/__tests__/config.test.js +0 -344
  1234. package/dist/openclaw/__tests__/config.test.js.map +0 -1
  1235. package/dist/openclaw/__tests__/dispatcher.test.d.ts +0 -5
  1236. package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +0 -1
  1237. package/dist/openclaw/__tests__/dispatcher.test.js +0 -169
  1238. package/dist/openclaw/__tests__/dispatcher.test.js.map +0 -1
  1239. package/dist/openclaw/__tests__/index.test.d.ts +0 -6
  1240. package/dist/openclaw/__tests__/index.test.d.ts.map +0 -1
  1241. package/dist/openclaw/__tests__/index.test.js +0 -382
  1242. package/dist/openclaw/__tests__/index.test.js.map +0 -1
  1243. package/dist/pipeline/__tests__/orchestrator.test.d.ts +0 -2
  1244. package/dist/pipeline/__tests__/orchestrator.test.d.ts.map +0 -1
  1245. package/dist/pipeline/__tests__/orchestrator.test.js +0 -505
  1246. package/dist/pipeline/__tests__/orchestrator.test.js.map +0 -1
  1247. package/dist/pipeline/__tests__/stages.test.d.ts +0 -2
  1248. package/dist/pipeline/__tests__/stages.test.d.ts.map +0 -1
  1249. package/dist/pipeline/__tests__/stages.test.js +0 -754
  1250. package/dist/pipeline/__tests__/stages.test.js.map +0 -1
  1251. package/dist/pipeline/stages/ralph-verify.d.ts +0 -53
  1252. package/dist/pipeline/stages/ralph-verify.d.ts.map +0 -1
  1253. package/dist/pipeline/stages/ralph-verify.js.map +0 -1
  1254. package/dist/pipeline/stages/ralplan.d.ts +0 -25
  1255. package/dist/pipeline/stages/ralplan.d.ts.map +0 -1
  1256. package/dist/pipeline/stages/ralplan.js.map +0 -1
  1257. package/dist/planning/__tests__/artifacts.test.d.ts +0 -2
  1258. package/dist/planning/__tests__/artifacts.test.d.ts.map +0 -1
  1259. package/dist/planning/__tests__/artifacts.test.js +0 -544
  1260. package/dist/planning/__tests__/artifacts.test.js.map +0 -1
  1261. package/dist/question/__tests__/client.test.d.ts +0 -2
  1262. package/dist/question/__tests__/client.test.d.ts.map +0 -1
  1263. package/dist/question/__tests__/client.test.js +0 -90
  1264. package/dist/question/__tests__/client.test.js.map +0 -1
  1265. package/dist/question/__tests__/deep-interview.test.d.ts +0 -2
  1266. package/dist/question/__tests__/deep-interview.test.d.ts.map +0 -1
  1267. package/dist/question/__tests__/deep-interview.test.js +0 -209
  1268. package/dist/question/__tests__/deep-interview.test.js.map +0 -1
  1269. package/dist/question/__tests__/policy.test.d.ts +0 -2
  1270. package/dist/question/__tests__/policy.test.d.ts.map +0 -1
  1271. package/dist/question/__tests__/policy.test.js +0 -107
  1272. package/dist/question/__tests__/policy.test.js.map +0 -1
  1273. package/dist/question/__tests__/renderer.test.d.ts +0 -2
  1274. package/dist/question/__tests__/renderer.test.d.ts.map +0 -1
  1275. package/dist/question/__tests__/renderer.test.js +0 -707
  1276. package/dist/question/__tests__/renderer.test.js.map +0 -1
  1277. package/dist/question/__tests__/state.test.d.ts +0 -2
  1278. package/dist/question/__tests__/state.test.d.ts.map +0 -1
  1279. package/dist/question/__tests__/state.test.js +0 -102
  1280. package/dist/question/__tests__/state.test.js.map +0 -1
  1281. package/dist/question/__tests__/types.test.d.ts +0 -2
  1282. package/dist/question/__tests__/types.test.d.ts.map +0 -1
  1283. package/dist/question/__tests__/types.test.js +0 -65
  1284. package/dist/question/__tests__/types.test.js.map +0 -1
  1285. package/dist/question/__tests__/ui.test.d.ts +0 -2
  1286. package/dist/question/__tests__/ui.test.d.ts.map +0 -1
  1287. package/dist/question/__tests__/ui.test.js +0 -446
  1288. package/dist/question/__tests__/ui.test.js.map +0 -1
  1289. package/dist/ralph/__tests__/persistence.test.d.ts +0 -2
  1290. package/dist/ralph/__tests__/persistence.test.d.ts.map +0 -1
  1291. package/dist/ralph/__tests__/persistence.test.js +0 -116
  1292. package/dist/ralph/__tests__/persistence.test.js.map +0 -1
  1293. package/dist/ralph/contract.d.ts +0 -17
  1294. package/dist/ralph/persistence.js.map +0 -1
  1295. package/dist/ralplan/__tests__/runtime.test.d.ts +0 -2
  1296. package/dist/ralplan/__tests__/runtime.test.d.ts.map +0 -1
  1297. package/dist/ralplan/__tests__/runtime.test.js +0 -165
  1298. package/dist/ralplan/__tests__/runtime.test.js.map +0 -1
  1299. package/dist/ralplan/runtime.d.ts +0 -52
  1300. package/dist/ralplan/runtime.d.ts.map +0 -1
  1301. package/dist/ralplan/runtime.js.map +0 -1
  1302. package/dist/runtime/__tests__/bridge.test.d.ts +0 -2
  1303. package/dist/runtime/__tests__/bridge.test.d.ts.map +0 -1
  1304. package/dist/runtime/__tests__/bridge.test.js +0 -194
  1305. package/dist/runtime/__tests__/bridge.test.js.map +0 -1
  1306. package/dist/runtime/__tests__/run-loop.test.d.ts +0 -2
  1307. package/dist/runtime/__tests__/run-loop.test.d.ts.map +0 -1
  1308. package/dist/runtime/__tests__/run-loop.test.js +0 -35
  1309. package/dist/runtime/__tests__/run-loop.test.js.map +0 -1
  1310. package/dist/runtime/__tests__/run-outcome.test.d.ts +0 -2
  1311. package/dist/runtime/__tests__/run-outcome.test.d.ts.map +0 -1
  1312. package/dist/runtime/__tests__/run-outcome.test.js +0 -102
  1313. package/dist/runtime/__tests__/run-outcome.test.js.map +0 -1
  1314. package/dist/runtime/__tests__/run-state.test.d.ts +0 -2
  1315. package/dist/runtime/__tests__/run-state.test.d.ts.map +0 -1
  1316. package/dist/runtime/__tests__/run-state.test.js +0 -37
  1317. package/dist/runtime/__tests__/run-state.test.js.map +0 -1
  1318. package/dist/scripts/__tests__/codex-native-hook.test.d.ts +0 -2
  1319. package/dist/scripts/__tests__/codex-native-hook.test.d.ts.map +0 -1
  1320. package/dist/scripts/__tests__/codex-native-hook.test.js +0 -6788
  1321. package/dist/scripts/__tests__/codex-native-hook.test.js.map +0 -1
  1322. package/dist/scripts/__tests__/generate-release-body.test.d.ts +0 -2
  1323. package/dist/scripts/__tests__/generate-release-body.test.d.ts.map +0 -1
  1324. package/dist/scripts/__tests__/generate-release-body.test.js +0 -233
  1325. package/dist/scripts/__tests__/generate-release-body.test.js.map +0 -1
  1326. package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts +0 -2
  1327. package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts.map +0 -1
  1328. package/dist/scripts/__tests__/hook-derived-watcher.test.js +0 -195
  1329. package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +0 -1
  1330. package/dist/scripts/__tests__/postinstall.test.d.ts +0 -2
  1331. package/dist/scripts/__tests__/postinstall.test.d.ts.map +0 -1
  1332. package/dist/scripts/__tests__/postinstall.test.js +0 -92
  1333. package/dist/scripts/__tests__/postinstall.test.js.map +0 -1
  1334. package/dist/scripts/__tests__/prompt-inventory.test.d.ts +0 -2
  1335. package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +0 -1
  1336. package/dist/scripts/__tests__/prompt-inventory.test.js +0 -56
  1337. package/dist/scripts/__tests__/prompt-inventory.test.js.map +0 -1
  1338. package/dist/scripts/__tests__/run-test-files.test.d.ts +0 -2
  1339. package/dist/scripts/__tests__/run-test-files.test.d.ts.map +0 -1
  1340. package/dist/scripts/__tests__/run-test-files.test.js +0 -62
  1341. package/dist/scripts/__tests__/run-test-files.test.js.map +0 -1
  1342. package/dist/scripts/__tests__/smoke-packed-install.test.d.ts +0 -2
  1343. package/dist/scripts/__tests__/smoke-packed-install.test.d.ts.map +0 -1
  1344. package/dist/scripts/__tests__/smoke-packed-install.test.js +0 -135
  1345. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +0 -1
  1346. package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts +0 -2
  1347. package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts.map +0 -1
  1348. package/dist/scripts/__tests__/test-reply-listener-live.test.js +0 -82
  1349. package/dist/scripts/__tests__/test-reply-listener-live.test.js.map +0 -1
  1350. package/dist/scripts/__tests__/verify-native-agents.test.d.ts +0 -2
  1351. package/dist/scripts/__tests__/verify-native-agents.test.d.ts.map +0 -1
  1352. package/dist/scripts/__tests__/verify-native-agents.test.js +0 -166
  1353. package/dist/scripts/__tests__/verify-native-agents.test.js.map +0 -1
  1354. package/dist/scripts/eval/eval-candidate-handoff.d.ts +0 -2
  1355. package/dist/scripts/eval/eval-candidate-handoff.d.ts.map +0 -1
  1356. package/dist/scripts/eval/eval-candidate-handoff.js +0 -11
  1357. package/dist/scripts/eval/eval-candidate-handoff.js.map +0 -1
  1358. package/dist/scripts/eval/eval-cli-discoverability.d.ts +0 -3
  1359. package/dist/scripts/eval/eval-cli-discoverability.d.ts.map +0 -1
  1360. package/dist/scripts/eval/eval-cli-discoverability.js +0 -37
  1361. package/dist/scripts/eval/eval-cli-discoverability.js.map +0 -1
  1362. package/dist/scripts/eval/eval-fresh-run-tagging.d.ts +0 -2
  1363. package/dist/scripts/eval/eval-fresh-run-tagging.d.ts.map +0 -1
  1364. package/dist/scripts/eval/eval-fresh-run-tagging.js +0 -11
  1365. package/dist/scripts/eval/eval-fresh-run-tagging.js.map +0 -1
  1366. package/dist/scripts/eval/eval-help-consistency.d.ts +0 -2
  1367. package/dist/scripts/eval/eval-help-consistency.d.ts.map +0 -1
  1368. package/dist/scripts/eval/eval-help-consistency.js +0 -12
  1369. package/dist/scripts/eval/eval-help-consistency.js.map +0 -1
  1370. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts +0 -2
  1371. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts.map +0 -1
  1372. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js +0 -31
  1373. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js.map +0 -1
  1374. package/dist/scripts/eval/eval-parity-smoke.d.ts +0 -2
  1375. package/dist/scripts/eval/eval-parity-smoke.d.ts.map +0 -1
  1376. package/dist/scripts/eval/eval-parity-smoke.js +0 -23
  1377. package/dist/scripts/eval/eval-parity-smoke.js.map +0 -1
  1378. package/dist/scripts/eval/eval-parity-sweep.d.ts +0 -2
  1379. package/dist/scripts/eval/eval-parity-sweep.d.ts.map +0 -1
  1380. package/dist/scripts/eval/eval-parity-sweep.js +0 -29
  1381. package/dist/scripts/eval/eval-parity-sweep.js.map +0 -1
  1382. package/dist/scripts/eval/eval-resume-dirty-guard.d.ts +0 -2
  1383. package/dist/scripts/eval/eval-resume-dirty-guard.d.ts.map +0 -1
  1384. package/dist/scripts/eval/eval-resume-dirty-guard.js +0 -11
  1385. package/dist/scripts/eval/eval-resume-dirty-guard.js.map +0 -1
  1386. package/dist/scripts/eval/eval-security-path-traversal.d.ts +0 -3
  1387. package/dist/scripts/eval/eval-security-path-traversal.d.ts.map +0 -1
  1388. package/dist/scripts/eval/eval-security-path-traversal.js +0 -35
  1389. package/dist/scripts/eval/eval-security-path-traversal.js.map +0 -1
  1390. package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts +0 -2
  1391. package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts.map +0 -1
  1392. package/dist/scripts/notify-hook/__tests__/operational-events.test.js +0 -24
  1393. package/dist/scripts/notify-hook/__tests__/operational-events.test.js.map +0 -1
  1394. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +0 -2
  1395. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +0 -1
  1396. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +0 -153
  1397. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +0 -1
  1398. package/dist/scripts/notify-hook/ralph-session-resume.d.ts +0 -22
  1399. package/dist/session-history/__tests__/search.test.d.ts +0 -2
  1400. package/dist/session-history/__tests__/search.test.d.ts.map +0 -1
  1401. package/dist/session-history/__tests__/search.test.js +0 -150
  1402. package/dist/session-history/__tests__/search.test.js.map +0 -1
  1403. package/dist/sidecar/__tests__/boundary.test.d.ts +0 -2
  1404. package/dist/sidecar/__tests__/boundary.test.d.ts.map +0 -1
  1405. package/dist/sidecar/__tests__/boundary.test.js +0 -48
  1406. package/dist/sidecar/__tests__/boundary.test.js.map +0 -1
  1407. package/dist/sidecar/__tests__/collector.test.d.ts +0 -2
  1408. package/dist/sidecar/__tests__/collector.test.d.ts.map +0 -1
  1409. package/dist/sidecar/__tests__/collector.test.js +0 -162
  1410. package/dist/sidecar/__tests__/collector.test.js.map +0 -1
  1411. package/dist/sidecar/__tests__/render.test.d.ts +0 -2
  1412. package/dist/sidecar/__tests__/render.test.d.ts.map +0 -1
  1413. package/dist/sidecar/__tests__/render.test.js +0 -67
  1414. package/dist/sidecar/__tests__/render.test.js.map +0 -1
  1415. package/dist/sidecar/__tests__/tmux.test.d.ts +0 -2
  1416. package/dist/sidecar/__tests__/tmux.test.d.ts.map +0 -1
  1417. package/dist/sidecar/__tests__/tmux.test.js +0 -30
  1418. package/dist/sidecar/__tests__/tmux.test.js.map +0 -1
  1419. package/dist/sidecar/__tests__/watch.test.d.ts +0 -2
  1420. package/dist/sidecar/__tests__/watch.test.d.ts.map +0 -1
  1421. package/dist/sidecar/__tests__/watch.test.js +0 -42
  1422. package/dist/sidecar/__tests__/watch.test.js.map +0 -1
  1423. package/dist/state/__tests__/mode-state-context.test.d.ts +0 -2
  1424. package/dist/state/__tests__/mode-state-context.test.d.ts.map +0 -1
  1425. package/dist/state/__tests__/mode-state-context.test.js +0 -35
  1426. package/dist/state/__tests__/mode-state-context.test.js.map +0 -1
  1427. package/dist/state/__tests__/operations-ralph-phase.test.d.ts +0 -2
  1428. package/dist/state/__tests__/operations-ralph-phase.test.d.ts.map +0 -1
  1429. package/dist/state/__tests__/operations-ralph-phase.test.js +0 -103
  1430. package/dist/state/__tests__/operations-ralph-phase.test.js.map +0 -1
  1431. package/dist/state/__tests__/operations.test.d.ts +0 -2
  1432. package/dist/state/__tests__/operations.test.d.ts.map +0 -1
  1433. package/dist/state/__tests__/operations.test.js +0 -439
  1434. package/dist/state/__tests__/operations.test.js.map +0 -1
  1435. package/dist/state/__tests__/path-traversal.test.d.ts +0 -2
  1436. package/dist/state/__tests__/path-traversal.test.d.ts.map +0 -1
  1437. package/dist/state/__tests__/path-traversal.test.js +0 -49
  1438. package/dist/state/__tests__/path-traversal.test.js.map +0 -1
  1439. package/dist/state/__tests__/skill-active.test.d.ts +0 -2
  1440. package/dist/state/__tests__/skill-active.test.d.ts.map +0 -1
  1441. package/dist/state/__tests__/skill-active.test.js +0 -160
  1442. package/dist/state/__tests__/skill-active.test.js.map +0 -1
  1443. package/dist/state/__tests__/workflow-transition.test.d.ts +0 -2
  1444. package/dist/state/__tests__/workflow-transition.test.d.ts.map +0 -1
  1445. package/dist/state/__tests__/workflow-transition.test.js +0 -77
  1446. package/dist/state/__tests__/workflow-transition.test.js.map +0 -1
  1447. package/dist/subagents/__tests__/tracker.test.d.ts +0 -2
  1448. package/dist/subagents/__tests__/tracker.test.d.ts.map +0 -1
  1449. package/dist/subagents/__tests__/tracker.test.js +0 -47
  1450. package/dist/subagents/__tests__/tracker.test.js.map +0 -1
  1451. package/dist/team/__tests__/allocation-policy.test.d.ts +0 -2
  1452. package/dist/team/__tests__/allocation-policy.test.d.ts.map +0 -1
  1453. package/dist/team/__tests__/allocation-policy.test.js +0 -111
  1454. package/dist/team/__tests__/allocation-policy.test.js.map +0 -1
  1455. package/dist/team/__tests__/api-interop.test.d.ts +0 -2
  1456. package/dist/team/__tests__/api-interop.test.d.ts.map +0 -1
  1457. package/dist/team/__tests__/api-interop.test.js +0 -2262
  1458. package/dist/team/__tests__/api-interop.test.js.map +0 -1
  1459. package/dist/team/__tests__/commit-hygiene.test.d.ts +0 -2
  1460. package/dist/team/__tests__/commit-hygiene.test.d.ts.map +0 -1
  1461. package/dist/team/__tests__/commit-hygiene.test.js +0 -93
  1462. package/dist/team/__tests__/commit-hygiene.test.js.map +0 -1
  1463. package/dist/team/__tests__/cross-rebase-smoke.test.d.ts +0 -2
  1464. package/dist/team/__tests__/cross-rebase-smoke.test.d.ts.map +0 -1
  1465. package/dist/team/__tests__/cross-rebase-smoke.test.js +0 -161
  1466. package/dist/team/__tests__/cross-rebase-smoke.test.js.map +0 -1
  1467. package/dist/team/__tests__/current-task-baseline.test.d.ts +0 -2
  1468. package/dist/team/__tests__/current-task-baseline.test.d.ts.map +0 -1
  1469. package/dist/team/__tests__/current-task-baseline.test.js +0 -87
  1470. package/dist/team/__tests__/current-task-baseline.test.js.map +0 -1
  1471. package/dist/team/__tests__/delegation-policy.test.d.ts +0 -2
  1472. package/dist/team/__tests__/delegation-policy.test.d.ts.map +0 -1
  1473. package/dist/team/__tests__/delegation-policy.test.js +0 -69
  1474. package/dist/team/__tests__/delegation-policy.test.js.map +0 -1
  1475. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts +0 -2
  1476. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts.map +0 -1
  1477. package/dist/team/__tests__/delivery-e2e-smoke.test.js +0 -679
  1478. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +0 -1
  1479. package/dist/team/__tests__/events.test.d.ts +0 -2
  1480. package/dist/team/__tests__/events.test.d.ts.map +0 -1
  1481. package/dist/team/__tests__/events.test.js +0 -313
  1482. package/dist/team/__tests__/events.test.js.map +0 -1
  1483. package/dist/team/__tests__/followup-planner.test.d.ts +0 -2
  1484. package/dist/team/__tests__/followup-planner.test.d.ts.map +0 -1
  1485. package/dist/team/__tests__/followup-planner.test.js +0 -84
  1486. package/dist/team/__tests__/followup-planner.test.js.map +0 -1
  1487. package/dist/team/__tests__/hardening-e2e.test.d.ts +0 -2
  1488. package/dist/team/__tests__/hardening-e2e.test.d.ts.map +0 -1
  1489. package/dist/team/__tests__/hardening-e2e.test.js +0 -98
  1490. package/dist/team/__tests__/hardening-e2e.test.js.map +0 -1
  1491. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +0 -2
  1492. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +0 -1
  1493. package/dist/team/__tests__/hook-primary-e2e-contract.test.js +0 -78
  1494. package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +0 -1
  1495. package/dist/team/__tests__/idle-nudge.test.d.ts +0 -2
  1496. package/dist/team/__tests__/idle-nudge.test.d.ts.map +0 -1
  1497. package/dist/team/__tests__/idle-nudge.test.js +0 -230
  1498. package/dist/team/__tests__/idle-nudge.test.js.map +0 -1
  1499. package/dist/team/__tests__/leader-activity.test.d.ts +0 -2
  1500. package/dist/team/__tests__/leader-activity.test.d.ts.map +0 -1
  1501. package/dist/team/__tests__/leader-activity.test.js +0 -261
  1502. package/dist/team/__tests__/leader-activity.test.js.map +0 -1
  1503. package/dist/team/__tests__/mcp-comm.test.d.ts +0 -2
  1504. package/dist/team/__tests__/mcp-comm.test.d.ts.map +0 -1
  1505. package/dist/team/__tests__/mcp-comm.test.js +0 -289
  1506. package/dist/team/__tests__/mcp-comm.test.js.map +0 -1
  1507. package/dist/team/__tests__/model-contract.test.d.ts +0 -2
  1508. package/dist/team/__tests__/model-contract.test.d.ts.map +0 -1
  1509. package/dist/team/__tests__/model-contract.test.js +0 -171
  1510. package/dist/team/__tests__/model-contract.test.js.map +0 -1
  1511. package/dist/team/__tests__/orchestrator.test.d.ts +0 -2
  1512. package/dist/team/__tests__/orchestrator.test.d.ts.map +0 -1
  1513. package/dist/team/__tests__/orchestrator.test.js +0 -111
  1514. package/dist/team/__tests__/orchestrator.test.js.map +0 -1
  1515. package/dist/team/__tests__/phase-controller.test.d.ts +0 -2
  1516. package/dist/team/__tests__/phase-controller.test.d.ts.map +0 -1
  1517. package/dist/team/__tests__/phase-controller.test.js +0 -50
  1518. package/dist/team/__tests__/phase-controller.test.js.map +0 -1
  1519. package/dist/team/__tests__/rebalance-policy.test.d.ts +0 -2
  1520. package/dist/team/__tests__/rebalance-policy.test.d.ts.map +0 -1
  1521. package/dist/team/__tests__/rebalance-policy.test.js +0 -168
  1522. package/dist/team/__tests__/rebalance-policy.test.js.map +0 -1
  1523. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +0 -2
  1524. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +0 -1
  1525. package/dist/team/__tests__/repo-aware-decomposition.test.js +0 -136
  1526. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +0 -1
  1527. package/dist/team/__tests__/role-router.test.d.ts +0 -2
  1528. package/dist/team/__tests__/role-router.test.d.ts.map +0 -1
  1529. package/dist/team/__tests__/role-router.test.js +0 -263
  1530. package/dist/team/__tests__/role-router.test.js.map +0 -1
  1531. package/dist/team/__tests__/runtime-cli.test.d.ts +0 -2
  1532. package/dist/team/__tests__/runtime-cli.test.d.ts.map +0 -1
  1533. package/dist/team/__tests__/runtime-cli.test.js +0 -304
  1534. package/dist/team/__tests__/runtime-cli.test.js.map +0 -1
  1535. package/dist/team/__tests__/runtime.test.d.ts +0 -2
  1536. package/dist/team/__tests__/runtime.test.d.ts.map +0 -1
  1537. package/dist/team/__tests__/runtime.test.js +0 -5734
  1538. package/dist/team/__tests__/runtime.test.js.map +0 -1
  1539. package/dist/team/__tests__/scaling.test.d.ts +0 -2
  1540. package/dist/team/__tests__/scaling.test.d.ts.map +0 -1
  1541. package/dist/team/__tests__/scaling.test.js +0 -1005
  1542. package/dist/team/__tests__/scaling.test.js.map +0 -1
  1543. package/dist/team/__tests__/shutdown-fallback.test.d.ts +0 -2
  1544. package/dist/team/__tests__/shutdown-fallback.test.d.ts.map +0 -1
  1545. package/dist/team/__tests__/shutdown-fallback.test.js +0 -125
  1546. package/dist/team/__tests__/shutdown-fallback.test.js.map +0 -1
  1547. package/dist/team/__tests__/state-root.test.d.ts +0 -2
  1548. package/dist/team/__tests__/state-root.test.d.ts.map +0 -1
  1549. package/dist/team/__tests__/state-root.test.js +0 -195
  1550. package/dist/team/__tests__/state-root.test.js.map +0 -1
  1551. package/dist/team/__tests__/state.test.d.ts +0 -2
  1552. package/dist/team/__tests__/state.test.d.ts.map +0 -1
  1553. package/dist/team/__tests__/state.test.js +0 -1859
  1554. package/dist/team/__tests__/state.test.js.map +0 -1
  1555. package/dist/team/__tests__/team-identity.test.d.ts +0 -2
  1556. package/dist/team/__tests__/team-identity.test.d.ts.map +0 -1
  1557. package/dist/team/__tests__/team-identity.test.js +0 -166
  1558. package/dist/team/__tests__/team-identity.test.js.map +0 -1
  1559. package/dist/team/__tests__/team-ops-contract.test.d.ts +0 -2
  1560. package/dist/team/__tests__/team-ops-contract.test.d.ts.map +0 -1
  1561. package/dist/team/__tests__/team-ops-contract.test.js +0 -96
  1562. package/dist/team/__tests__/team-ops-contract.test.js.map +0 -1
  1563. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +0 -2
  1564. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +0 -1
  1565. package/dist/team/__tests__/tmux-claude-workers-demo.test.js +0 -191
  1566. package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +0 -1
  1567. package/dist/team/__tests__/tmux-session.test.d.ts +0 -2
  1568. package/dist/team/__tests__/tmux-session.test.d.ts.map +0 -1
  1569. package/dist/team/__tests__/tmux-session.test.js +0 -3785
  1570. package/dist/team/__tests__/tmux-session.test.js.map +0 -1
  1571. package/dist/team/__tests__/tmux-test-fixture.d.ts +0 -20
  1572. package/dist/team/__tests__/tmux-test-fixture.d.ts.map +0 -1
  1573. package/dist/team/__tests__/tmux-test-fixture.js +0 -152
  1574. package/dist/team/__tests__/tmux-test-fixture.js.map +0 -1
  1575. package/dist/team/__tests__/tmux-test-fixture.test.d.ts +0 -2
  1576. package/dist/team/__tests__/tmux-test-fixture.test.d.ts.map +0 -1
  1577. package/dist/team/__tests__/tmux-test-fixture.test.js +0 -113
  1578. package/dist/team/__tests__/tmux-test-fixture.test.js.map +0 -1
  1579. package/dist/team/__tests__/worker-bootstrap.test.d.ts +0 -2
  1580. package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +0 -1
  1581. package/dist/team/__tests__/worker-bootstrap.test.js +0 -685
  1582. package/dist/team/__tests__/worker-bootstrap.test.js.map +0 -1
  1583. package/dist/team/__tests__/worker-runtime-identity.test.d.ts +0 -2
  1584. package/dist/team/__tests__/worker-runtime-identity.test.d.ts.map +0 -1
  1585. package/dist/team/__tests__/worker-runtime-identity.test.js +0 -250
  1586. package/dist/team/__tests__/worker-runtime-identity.test.js.map +0 -1
  1587. package/dist/team/__tests__/worktree.test.d.ts +0 -2
  1588. package/dist/team/__tests__/worktree.test.d.ts.map +0 -1
  1589. package/dist/team/__tests__/worktree.test.js +0 -317
  1590. package/dist/team/__tests__/worktree.test.js.map +0 -1
  1591. package/dist/utils/__tests__/agents-md.test.d.ts +0 -2
  1592. package/dist/utils/__tests__/agents-md.test.d.ts.map +0 -1
  1593. package/dist/utils/__tests__/agents-md.test.js +0 -52
  1594. package/dist/utils/__tests__/agents-md.test.js.map +0 -1
  1595. package/dist/utils/__tests__/agents-model-table.test.d.ts +0 -2
  1596. package/dist/utils/__tests__/agents-model-table.test.d.ts.map +0 -1
  1597. package/dist/utils/__tests__/agents-model-table.test.js +0 -104
  1598. package/dist/utils/__tests__/agents-model-table.test.js.map +0 -1
  1599. package/dist/utils/__tests__/dep-versions.test.d.ts +0 -2
  1600. package/dist/utils/__tests__/dep-versions.test.d.ts.map +0 -1
  1601. package/dist/utils/__tests__/dep-versions.test.js +0 -46
  1602. package/dist/utils/__tests__/dep-versions.test.js.map +0 -1
  1603. package/dist/utils/__tests__/package.test.d.ts +0 -2
  1604. package/dist/utils/__tests__/package.test.d.ts.map +0 -1
  1605. package/dist/utils/__tests__/package.test.js +0 -21
  1606. package/dist/utils/__tests__/package.test.js.map +0 -1
  1607. package/dist/utils/__tests__/paths.test.d.ts +0 -2
  1608. package/dist/utils/__tests__/paths.test.d.ts.map +0 -1
  1609. package/dist/utils/__tests__/paths.test.js +0 -541
  1610. package/dist/utils/__tests__/paths.test.js.map +0 -1
  1611. package/dist/utils/__tests__/platform-command.test.d.ts +0 -2
  1612. package/dist/utils/__tests__/platform-command.test.d.ts.map +0 -1
  1613. package/dist/utils/__tests__/platform-command.test.js +0 -410
  1614. package/dist/utils/__tests__/platform-command.test.js.map +0 -1
  1615. package/dist/utils/__tests__/repo-deps.test.d.ts +0 -2
  1616. package/dist/utils/__tests__/repo-deps.test.d.ts.map +0 -1
  1617. package/dist/utils/__tests__/repo-deps.test.js +0 -71
  1618. package/dist/utils/__tests__/repo-deps.test.js.map +0 -1
  1619. package/dist/verification/__tests__/ci-rust-gates.test.d.ts +0 -2
  1620. package/dist/verification/__tests__/ci-rust-gates.test.d.ts.map +0 -1
  1621. package/dist/verification/__tests__/ci-rust-gates.test.js +0 -89
  1622. package/dist/verification/__tests__/ci-rust-gates.test.js.map +0 -1
  1623. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts +0 -2
  1624. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts.map +0 -1
  1625. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +0 -54
  1626. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +0 -1
  1627. package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts +0 -2
  1628. package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts.map +0 -1
  1629. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +0 -73
  1630. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +0 -1
  1631. package/dist/verification/__tests__/native-release-manifest.test.d.ts +0 -2
  1632. package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +0 -1
  1633. package/dist/verification/__tests__/native-release-manifest.test.js +0 -80
  1634. package/dist/verification/__tests__/native-release-manifest.test.js.map +0 -1
  1635. package/dist/verification/__tests__/pr-check-workflow.test.d.ts +0 -2
  1636. package/dist/verification/__tests__/pr-check-workflow.test.d.ts.map +0 -1
  1637. package/dist/verification/__tests__/pr-check-workflow.test.js +0 -27
  1638. package/dist/verification/__tests__/pr-check-workflow.test.js.map +0 -1
  1639. package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts +0 -2
  1640. package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts.map +0 -1
  1641. package/dist/verification/__tests__/ralph-persistence-gate.test.js +0 -55
  1642. package/dist/verification/__tests__/ralph-persistence-gate.test.js.map +0 -1
  1643. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts +0 -2
  1644. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts.map +0 -1
  1645. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js +0 -32
  1646. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js.map +0 -1
  1647. package/dist/verification/__tests__/verifier.test.d.ts +0 -2
  1648. package/dist/verification/__tests__/verifier.test.d.ts.map +0 -1
  1649. package/dist/verification/__tests__/verifier.test.js +0 -113
  1650. package/dist/verification/__tests__/verifier.test.js.map +0 -1
  1651. package/dist/visual/__tests__/verdict.test.d.ts +0 -2
  1652. package/dist/visual/__tests__/verdict.test.d.ts.map +0 -1
  1653. package/dist/visual/__tests__/verdict.test.js +0 -81
  1654. package/dist/visual/__tests__/verdict.test.js.map +0 -1
  1655. package/dist/wiki/__tests__/cjk-tokenize.test.d.ts +0 -12
  1656. package/dist/wiki/__tests__/cjk-tokenize.test.d.ts.map +0 -1
  1657. package/dist/wiki/__tests__/cjk-tokenize.test.js +0 -139
  1658. package/dist/wiki/__tests__/cjk-tokenize.test.js.map +0 -1
  1659. package/dist/wiki/__tests__/crlf-parse.test.d.ts +0 -2
  1660. package/dist/wiki/__tests__/crlf-parse.test.d.ts.map +0 -1
  1661. package/dist/wiki/__tests__/crlf-parse.test.js +0 -24
  1662. package/dist/wiki/__tests__/crlf-parse.test.js.map +0 -1
  1663. package/dist/wiki/__tests__/escape-newline.test.d.ts +0 -2
  1664. package/dist/wiki/__tests__/escape-newline.test.d.ts.map +0 -1
  1665. package/dist/wiki/__tests__/escape-newline.test.js +0 -45
  1666. package/dist/wiki/__tests__/escape-newline.test.js.map +0 -1
  1667. package/dist/wiki/__tests__/ingest.test.d.ts +0 -5
  1668. package/dist/wiki/__tests__/ingest.test.d.ts.map +0 -1
  1669. package/dist/wiki/__tests__/ingest.test.js +0 -181
  1670. package/dist/wiki/__tests__/ingest.test.js.map +0 -1
  1671. package/dist/wiki/__tests__/lint.test.d.ts +0 -5
  1672. package/dist/wiki/__tests__/lint.test.d.ts.map +0 -1
  1673. package/dist/wiki/__tests__/lint.test.js +0 -163
  1674. package/dist/wiki/__tests__/lint.test.js.map +0 -1
  1675. package/dist/wiki/__tests__/query.test.d.ts +0 -5
  1676. package/dist/wiki/__tests__/query.test.d.ts.map +0 -1
  1677. package/dist/wiki/__tests__/query.test.js +0 -141
  1678. package/dist/wiki/__tests__/query.test.js.map +0 -1
  1679. package/dist/wiki/__tests__/reserved-file-guard.test.d.ts +0 -2
  1680. package/dist/wiki/__tests__/reserved-file-guard.test.d.ts.map +0 -1
  1681. package/dist/wiki/__tests__/reserved-file-guard.test.js +0 -44
  1682. package/dist/wiki/__tests__/reserved-file-guard.test.js.map +0 -1
  1683. package/dist/wiki/__tests__/session-hooks.test.d.ts +0 -5
  1684. package/dist/wiki/__tests__/session-hooks.test.d.ts.map +0 -1
  1685. package/dist/wiki/__tests__/session-hooks.test.js +0 -36
  1686. package/dist/wiki/__tests__/session-hooks.test.js.map +0 -1
  1687. package/dist/wiki/__tests__/slug-nonascii.test.d.ts +0 -2
  1688. package/dist/wiki/__tests__/slug-nonascii.test.d.ts.map +0 -1
  1689. package/dist/wiki/__tests__/slug-nonascii.test.js +0 -30
  1690. package/dist/wiki/__tests__/slug-nonascii.test.js.map +0 -1
  1691. package/dist/wiki/__tests__/storage.test.d.ts +0 -5
  1692. package/dist/wiki/__tests__/storage.test.d.ts.map +0 -1
  1693. package/dist/wiki/__tests__/storage.test.js +0 -278
  1694. package/dist/wiki/__tests__/storage.test.js.map +0 -1
  1695. package/dist/wiki/__tests__/test-helpers.d.ts +0 -31
  1696. package/dist/wiki/__tests__/test-helpers.d.ts.map +0 -1
  1697. package/dist/wiki/__tests__/test-helpers.js +0 -108
  1698. package/dist/wiki/__tests__/test-helpers.js.map +0 -1
  1699. package/docs/contracts/ralph-cancel-contract.md +0 -23
  1700. package/docs/contracts/ralph-state-contract.md +0 -95
  1701. package/docs/issues/team-ralph-followup-team.md +0 -38
  1702. package/docs/qa/ralph-persistence-gate.md +0 -59
  1703. package/docs/reference/ralph-parity-matrix.md +0 -25
  1704. package/docs/reference/ralph-upstream-baseline.md +0 -34
  1705. package/plugins/roblox-ai-os-creator-skills/skills/ralph/SKILL.md +0 -269
  1706. package/plugins/roblox-ai-os-creator-skills/skills/ralplan/SKILL.md +0 -162
  1707. package/prompts/api-reviewer.md +0 -113
  1708. package/prompts/information-architect.md +0 -226
  1709. package/prompts/performance-reviewer.md +0 -109
  1710. package/prompts/product-analyst.md +0 -304
  1711. package/prompts/product-manager.md +0 -245
  1712. package/prompts/qa-tester.md +0 -124
  1713. package/prompts/quality-reviewer.md +0 -123
  1714. package/prompts/quality-strategist.md +0 -274
  1715. package/prompts/style-reviewer.md +0 -102
  1716. package/prompts/ux-researcher.md +0 -327
  1717. package/skills/frontend-ui-ux/SKILL.md +0 -34
  1718. package/skills/ralph/SKILL.md +0 -269
  1719. package/skills/ralplan/SKILL.md +0 -162
  1720. package/src/scripts/eval/eval-adaptive-sort-optimization.py +0 -24
  1721. package/src/scripts/eval/eval-candidate-handoff.ts +0 -8
  1722. package/src/scripts/eval/eval-cli-discoverability.ts +0 -40
  1723. package/src/scripts/eval/eval-fresh-run-tagging.ts +0 -8
  1724. package/src/scripts/eval/eval-help-consistency.ts +0 -11
  1725. package/src/scripts/eval/eval-in-action-cat-shellout-demo.ts +0 -31
  1726. package/src/scripts/eval/eval-ml-kaggle-model-optimization.py +0 -29
  1727. package/src/scripts/eval/eval-noisy-bayesopt-highdim.py +0 -44
  1728. package/src/scripts/eval/eval-noisy-latent-subspace-discovery.py +0 -44
  1729. package/src/scripts/eval/eval-parity-smoke.ts +0 -20
  1730. package/src/scripts/eval/eval-parity-sweep.ts +0 -26
  1731. package/src/scripts/eval/eval-resume-dirty-guard.ts +0 -8
  1732. package/src/scripts/eval/eval-security-path-traversal.ts +0 -38
  1733. package/src/scripts/run-autoresearch-showcase.sh +0 -75
  1734. /package/docs/{migration-mainline-post-v0.4.4.md → archive/migration-mainline-post-v0.4.4.md} +0 -0
  1735. /package/docs/{qa-plan-0.4.2.md → archive/qa-plan-0.4.2.md} +0 -0
  1736. /package/docs/{qa-report-0.4.2.md → archive/qa-report-0.4.2.md} +0 -0
@@ -1,1716 +0,0 @@
1
- import { describe, it, mock } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { existsSync } from 'node:fs';
4
- import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
5
- import { tmpdir } from 'node:os';
6
- import { join } from 'node:path';
7
- import { detectKeywords, detectPrimaryKeyword, recordSkillActivation, DEEP_INTERVIEW_STATE_FILE, DEEP_INTERVIEW_BLOCKED_APPROVAL_INPUTS, DEEP_INTERVIEW_INPUT_LOCK_MESSAGE, persistDeepInterviewModeState, } from '../keyword-detector.js';
8
- import { SKILL_ACTIVE_STATE_FILE } from '../../state/skill-active.js';
9
- import { isUnderspecifiedForExecution, applyRalplanGate } from '../keyword-detector.js';
10
- import { KEYWORD_TRIGGER_DEFINITIONS } from '../keyword-registry.js';
11
- describe('keyword detector swarm/team compatibility', () => {
12
- it('keeps explicit $skill order in detectKeywords results (left-to-right)', () => {
13
- const matches = detectKeywords('$analyze $ultraqa $code-review now');
14
- assert.deepEqual(matches.map((m) => m.skill).slice(0, 3), ['analyze', 'ultraqa', 'code-review']);
15
- });
16
- it('de-duplicates repeated explicit skill tokens', () => {
17
- const matches = detectKeywords('$analyze $analyze root cause');
18
- assert.deepEqual(matches.map((m) => m.skill), ['analyze']);
19
- });
20
- it('limits explicit multi-skill invocation to the first contiguous $skill block', () => {
21
- const matches = detectKeywords('$ralplan Fix issue #1030 and ensure other directives ($ralph, $team, $deep-interview) are not affected');
22
- assert.deepEqual(matches.map((m) => m.skill), ['ralplan']);
23
- });
24
- it('does not merge implicit keyword matches when an explicit $skill is present', () => {
25
- const matches = detectKeywords('please run $team and then analyze the result');
26
- assert.deepEqual(matches.map((m) => m.skill), ['team']);
27
- });
28
- it('does not fall back to implicit keyword detection when an unknown $token is present', () => {
29
- const matches = detectKeywords('$maer-thinking 다시 설명해봐 keep going');
30
- assert.deepEqual(matches, []);
31
- const primary = detectPrimaryKeyword('$maer-thinking 다시 설명해봐 keep going');
32
- assert.equal(primary, null);
33
- });
34
- it('recognizes plugin-prefixed explicit skill tokens', () => {
35
- const matches = detectKeywords('$roblox-ai-os-creator-skills:ralplan implement issue #1307');
36
- assert.deepEqual(matches.map((m) => m.skill), ['ralplan']);
37
- assert.equal(matches[0]?.keyword, '$roblox-ai-os-creator-skills:ralplan');
38
- });
39
- it('supports mixed-form explicit multi-skill invocation ordering and dedupe', () => {
40
- const matches = detectKeywords('$roblox-ai-os-creator-skills:ralplan $ralph $roblox-ai-os-creator-skills:ralplan ship this');
41
- assert.deepEqual(matches.map((m) => m.skill), ['ralplan', 'ralph']);
42
- assert.deepEqual(matches.map((m) => m.keyword), ['$roblox-ai-os-creator-skills:ralplan', '$ralph']);
43
- });
44
- it('keeps recognized tokens on both sides of an unknown plugin-prefixed token in the same contiguous block', () => {
45
- const matches = detectKeywords('$roblox-ai-os-creator-skills:ralplan $roblox-ai-os-creator-skills:unknown $ralph');
46
- assert.deepEqual(matches.map((m) => m.skill), ['ralplan', 'ralph']);
47
- assert.deepEqual(matches.map((m) => m.keyword), ['$roblox-ai-os-creator-skills:ralplan', '$ralph']);
48
- });
49
- it('limits mixed-form explicit invocation to the first contiguous block', () => {
50
- const matches = detectKeywords('$roblox-ai-os-creator-skills:ralplan text $ralph');
51
- assert.deepEqual(matches.map((m) => m.skill), ['ralplan']);
52
- });
53
- it('normalizes plugin-prefixed alias tokens', () => {
54
- const swarm = detectPrimaryKeyword('$roblox-ai-os-creator-skills:swarm handle this');
55
- assert.ok(swarm);
56
- assert.equal(swarm.skill, 'team');
57
- assert.equal(swarm.keyword, '$roblox-ai-os-creator-skills:swarm');
58
- const ulw = detectPrimaryKeyword('$roblox-ai-os-creator-skills:ulw continue');
59
- assert.ok(ulw);
60
- assert.equal(ulw.skill, 'ultrawork');
61
- assert.equal(ulw.keyword, '$roblox-ai-os-creator-skills:ulw');
62
- });
63
- it('supports plugin-prefixed hyphenated workflow tokens', () => {
64
- const deepInterview = detectPrimaryKeyword('$roblox-ai-os-creator-skills:deep-interview gather requirements');
65
- assert.ok(deepInterview);
66
- assert.equal(deepInterview.skill, 'deep-interview');
67
- assert.equal(deepInterview.keyword, '$roblox-ai-os-creator-skills:deep-interview');
68
- const codeReview = detectPrimaryKeyword('$roblox-ai-os-creator-skills:code-review before merge');
69
- assert.ok(codeReview);
70
- assert.equal(codeReview.skill, 'code-review');
71
- assert.equal(codeReview.keyword, '$roblox-ai-os-creator-skills:code-review');
72
- });
73
- it('supports explicit colon-form creator psychology commands', () => {
74
- const audience = detectPrimaryKeyword('$brief:audience farming simulator audience fit');
75
- assert.ok(audience);
76
- assert.equal(audience.skill, 'brief-audience');
77
- assert.equal(audience.keyword, '$brief:audience');
78
- const progression = detectPrimaryKeyword('$forge:progression write the ladder');
79
- assert.ok(progression);
80
- assert.equal(progression.skill, 'forge-progression');
81
- assert.equal(progression.keyword, '$forge:progression');
82
- });
83
- it('supports plugin-prefixed creator psychology commands', () => {
84
- const match = detectPrimaryKeyword('$roblox-ai-os-creator-skills:brief:audience map the audience');
85
- assert.ok(match);
86
- assert.equal(match.skill, 'brief-audience');
87
- assert.equal(match.keyword, '$roblox-ai-os-creator-skills:brief:audience');
88
- });
89
- it('rejects arbitrary explicit prefixes that are not allowlisted namespaces', () => {
90
- assert.equal(detectPrimaryKeyword('$anything:team ship it'), null);
91
- assert.equal(detectPrimaryKeyword('$foo:brief:audience map the audience'), null);
92
- });
93
- it('does not fall back to implicit keyword detection when an unknown plugin-prefixed $token is present', () => {
94
- const matches = detectKeywords('$roblox-ai-os-creator-skills:maer-thinking 다시 설명해봐 keep going');
95
- assert.deepEqual(matches, []);
96
- const primary = detectPrimaryKeyword('$roblox-ai-os-creator-skills:maer-thinking 다시 설명해봐 keep going');
97
- assert.equal(primary, null);
98
- });
99
- it('suppresses implicit detection when an unknown plugin-prefixed token is present with other keyword text', () => {
100
- const matches = detectKeywords('$roblox-ai-os-creator-skills:unknown analyze this issue');
101
- assert.deepEqual(matches, []);
102
- assert.equal(detectPrimaryKeyword('$roblox-ai-os-creator-skills:unknown analyze this issue'), null);
103
- });
104
- it('does not auto-detect keywords for explicit /prompts invocation without $skills', () => {
105
- const matches = detectKeywords('/prompts:architect analyze this issue');
106
- assert.deepEqual(matches, []);
107
- const primary = detectPrimaryKeyword('/prompts:architect analyze this issue');
108
- assert.equal(primary, null);
109
- });
110
- it('treats /prompts invocation with trailing punctuation as explicit command', () => {
111
- const matches = detectKeywords('/prompts:architect, analyze this issue');
112
- assert.deepEqual(matches, []);
113
- const primary = detectPrimaryKeyword('/prompts:architect, analyze this issue');
114
- assert.equal(primary, null);
115
- });
116
- it('maps explicit $analyze invocation to analyze skill', () => {
117
- const match = detectPrimaryKeyword('please run $analyze on this workflow');
118
- assert.ok(match);
119
- assert.equal(match.skill, 'analyze');
120
- assert.equal(match.keyword.toLowerCase(), '$analyze');
121
- });
122
- it('maps code-review keyword variants to code-review skill', () => {
123
- const hyphen = detectPrimaryKeyword('run $code-review before merge');
124
- assert.ok(hyphen);
125
- assert.equal(hyphen.skill, 'code-review');
126
- assert.equal(hyphen.keyword.toLowerCase(), '$code-review');
127
- const spaced = detectPrimaryKeyword('please do a code review');
128
- assert.ok(spaced);
129
- assert.equal(spaced.skill, 'code-review');
130
- });
131
- it('supports explicit multi-skill invocation by prioritizing left-most $skill', () => {
132
- const match = detectPrimaryKeyword('$ultraqa $analyze $code-review run now');
133
- assert.ok(match);
134
- assert.equal(match.skill, 'ultraqa');
135
- assert.equal(match.keyword.toLowerCase(), '$ultraqa');
136
- });
137
- it('maps "coordinated team" phrase to team orchestration skill', () => {
138
- const match = detectPrimaryKeyword('run a coordinated team for implementation');
139
- assert.ok(match);
140
- assert.equal(match.skill, 'team');
141
- assert.match(match.keyword.toLowerCase(), /team/);
142
- });
143
- it('maps "swarm" to team orchestration skill', () => {
144
- const match = detectPrimaryKeyword('please use swarm for this task');
145
- assert.ok(match);
146
- assert.equal(match.skill, 'team');
147
- });
148
- it('maps "coordinated swarm" phrase to team orchestration skill', () => {
149
- const match = detectPrimaryKeyword('run a coordinated swarm for implementation');
150
- assert.ok(match);
151
- assert.equal(match.skill, 'team');
152
- assert.match(match.keyword.toLowerCase(), /swarm/);
153
- });
154
- it('keeps swarm trigger priority aligned with explicit team invocation', () => {
155
- const teamMatch = detectKeywords('use $team agents for this').find((entry) => entry.skill === 'team');
156
- const swarmMatch = detectKeywords('use swarm for this').find((entry) => entry.skill === 'team');
157
- assert.ok(teamMatch);
158
- assert.ok(swarmMatch);
159
- assert.equal(swarmMatch.priority, teamMatch.priority);
160
- });
161
- it('does not trigger team keyword from filesystem/team-state path text', () => {
162
- const match = detectPrimaryKeyword('You have 1 new message(s). Read .rcs/state/team/execute-plan/mailbox/worker-3.json, act now, reply with concrete progress, then continue assigned work or next feasible task.');
163
- assert.equal(match, null);
164
- });
165
- it('does not trigger team skill from incidental prose usage', () => {
166
- const match = detectPrimaryKeyword('the team reviewed the document and shared feedback');
167
- assert.equal(match, null);
168
- });
169
- it('does not trigger team from bare skill-name phrasing without $ invocation', () => {
170
- const match = detectPrimaryKeyword('please use team agents for this');
171
- assert.equal(match, null);
172
- });
173
- it('still triggers team for explicit $team invocation', () => {
174
- const match = detectPrimaryKeyword('please run $team now');
175
- assert.ok(match);
176
- assert.equal(match.skill, 'team');
177
- });
178
- it('does not trigger keyword detector for explicit /prompts:swarm invocation', () => {
179
- const match = detectPrimaryKeyword('use /prompts:swarm for this');
180
- assert.equal(match, null);
181
- });
182
- it('does not trigger ralph from plain conversational mention', () => {
183
- const match = detectPrimaryKeyword('why does ralph keep blocking stop?');
184
- assert.equal(match, null);
185
- });
186
- it('still triggers ralph for explicit $ralph invocation', () => {
187
- const match = detectPrimaryKeyword('$ralph continue verification');
188
- assert.ok(match);
189
- assert.equal(match.skill, 'ralph');
190
- assert.equal(match.keyword.toLowerCase(), '$ralph');
191
- });
192
- it('prefers ralplan over ralph follow-up language when both implicit routes are present', () => {
193
- const match = detectPrimaryKeyword('keep going but do consensus plan first');
194
- assert.ok(match);
195
- assert.equal(match.skill, 'ralplan');
196
- });
197
- it('applies longest-match tie-breaker when priorities are equal', () => {
198
- const match = detectPrimaryKeyword('please run a coordinated swarm for this');
199
- assert.ok(match);
200
- assert.equal(match.skill, 'team');
201
- assert.equal(match.keyword.toLowerCase(), 'coordinated swarm');
202
- });
203
- it('maps "deep interview" phrase to deep-interview skill', () => {
204
- const match = detectPrimaryKeyword('please run a deep interview before planning');
205
- assert.ok(match);
206
- assert.equal(match.skill, 'deep-interview');
207
- assert.equal(match.keyword.toLowerCase(), 'deep interview');
208
- });
209
- it('does not trigger deep-interview from cleanup or state-management mentions', () => {
210
- assert.equal(detectPrimaryKeyword('clear deep interview state before continuing'), null);
211
- assert.equal(detectPrimaryKeyword('cleanup stale deep-interview state after session clear'), null);
212
- assert.equal(detectPrimaryKeyword('remove the stale deep interview lock from .rcs/state'), null);
213
- });
214
- it('maps "gather requirements" to deep-interview skill', () => {
215
- const match = detectPrimaryKeyword('let us gather requirements first');
216
- assert.ok(match);
217
- assert.equal(match.skill, 'deep-interview');
218
- assert.equal(match.keyword.toLowerCase(), 'gather requirements');
219
- });
220
- it('maps "ouroboros" to deep-interview skill', () => {
221
- const match = detectPrimaryKeyword('please run ouroboros before planning');
222
- assert.ok(match);
223
- assert.equal(match.skill, 'deep-interview');
224
- assert.equal(match.keyword.toLowerCase(), 'ouroboros');
225
- });
226
- it('maps "interview me" to deep-interview skill', () => {
227
- const match = detectPrimaryKeyword('interview me before we start implementation');
228
- assert.ok(match);
229
- assert.equal(match.skill, 'deep-interview');
230
- assert.equal(match.keyword.toLowerCase(), 'interview me');
231
- });
232
- it('maps "don\'t assume" to deep-interview skill', () => {
233
- const match = detectPrimaryKeyword("don't assume anything yet");
234
- assert.ok(match);
235
- assert.equal(match.skill, 'deep-interview');
236
- assert.equal(match.keyword.toLowerCase(), "don't assume");
237
- });
238
- it('prefers "deep interview" over "interview" for deterministic longest-match behavior', () => {
239
- const match = detectPrimaryKeyword('deep interview this request first');
240
- assert.ok(match);
241
- assert.equal(match.skill, 'deep-interview');
242
- assert.equal(match.keyword.toLowerCase(), 'deep interview');
243
- });
244
- it('treats direct abort commands as cancel intent', () => {
245
- const match = detectPrimaryKeyword('abort now');
246
- assert.ok(match);
247
- assert.equal(match.skill, 'cancel');
248
- assert.equal(match.keyword.toLowerCase(), 'abort');
249
- });
250
- it('treats direct stop commands as cancel intent', () => {
251
- const match = detectPrimaryKeyword('stop now');
252
- assert.ok(match);
253
- assert.equal(match.skill, 'cancel');
254
- assert.equal(match.keyword.toLowerCase(), 'stop');
255
- });
256
- it('does not trigger cancel from incidental stop/abort test-log prose', () => {
257
- assert.equal(detectPrimaryKeyword('FAIL should stop retrying after max attempts'), null);
258
- assert.equal(detectPrimaryKeyword('PASS request aborted when upstream returns 499'), null);
259
- });
260
- it('does not trigger ultrawork from incidental parallel test-log prose', () => {
261
- assert.equal(detectPrimaryKeyword('PASS runs assertions in parallel when sharding is enabled'), null);
262
- assert.equal(detectPrimaryKeyword('running 8 tests in parallel across 4 workers'), null);
263
- });
264
- it('normalizes the Korean keyboard typo for ulw to ultrawork only', () => {
265
- const match = detectPrimaryKeyword('ㅕㅣㅈ로 이 작업 처리해줘');
266
- assert.ok(match);
267
- assert.equal(match.skill, 'ultrawork');
268
- assert.equal(match.keyword, 'ulw');
269
- const explicitMatch = detectPrimaryKeyword('$ㅕㅣㅈ로 이 작업 처리해줘');
270
- assert.ok(explicitMatch);
271
- assert.equal(explicitMatch.skill, 'ultrawork');
272
- assert.equal(explicitMatch.keyword, '$ulw');
273
- assert.equal(detectPrimaryKeyword('ㅁㅔㅔ로 처리해줘'), null);
274
- });
275
- });
276
- describe('autoresearch keyword detection', () => {
277
- it('detects explicit $autoresearch invocation', () => {
278
- const match = detectPrimaryKeyword('please run $autoresearch now');
279
- assert.ok(match);
280
- assert.equal(match.skill, 'autoresearch');
281
- assert.equal(match.keyword.toLowerCase(), '$autoresearch');
282
- });
283
- it('does not detect bare autoresearch phrasing without explicit $ invocation', () => {
284
- const match = detectPrimaryKeyword('please use autoresearch workflow for this mission');
285
- assert.equal(match, null);
286
- });
287
- it('does not trigger autoresearch from incidental prose', () => {
288
- const match = detectPrimaryKeyword('Karpathy did autoresearch before native hooks existed');
289
- assert.equal(match, null);
290
- });
291
- });
292
- describe('explicit skill-name invocation requirement', () => {
293
- it('does not trigger analyze from bare skill-name usage', () => {
294
- assert.equal(detectPrimaryKeyword('please analyze this workflow'), null);
295
- });
296
- it('does not trigger autoresearch from bare skill-name usage', () => {
297
- assert.equal(detectPrimaryKeyword('please run autoresearch now'), null);
298
- });
299
- it('does not trigger ralph from bare skill-name usage', () => {
300
- assert.equal(detectPrimaryKeyword('please use ralph for this task'), null);
301
- });
302
- it('does not trigger ralplan from bare skill-name usage', () => {
303
- assert.equal(detectPrimaryKeyword('please do ralplan first'), null);
304
- });
305
- });
306
- describe('keyword registry coverage', () => {
307
- it('includes key team/swarm aliases in runtime keyword registry', () => {
308
- const registryKeywords = new Set(KEYWORD_TRIGGER_DEFINITIONS.map((v) => v.keyword.toLowerCase()));
309
- assert.ok(registryKeywords.has('$ultraqa'));
310
- assert.ok(registryKeywords.has('$analyze'));
311
- assert.ok(registryKeywords.has('investigate'));
312
- assert.ok(registryKeywords.has('code review'));
313
- assert.ok(registryKeywords.has('$code-review'));
314
- assert.ok(registryKeywords.has('coordinated team'));
315
- assert.ok(registryKeywords.has('swarm'));
316
- assert.ok(registryKeywords.has('coordinated swarm'));
317
- assert.ok(registryKeywords.has('ouroboros'));
318
- assert.ok(registryKeywords.has("don't assume"));
319
- assert.ok(registryKeywords.has('interview me'));
320
- assert.ok(registryKeywords.has('wiki query'));
321
- assert.ok(registryKeywords.has('wiki add'));
322
- assert.ok(registryKeywords.has('wiki lint'));
323
- assert.ok(registryKeywords.has('$autoresearch'));
324
- assert.ok(registryKeywords.has('$brief:audience'));
325
- assert.ok(registryKeywords.has('$brief:motivation'));
326
- assert.ok(registryKeywords.has('$blueprint:psych'));
327
- assert.ok(registryKeywords.has('$blueprint:loop'));
328
- assert.ok(registryKeywords.has('$blueprint:retention'));
329
- assert.ok(registryKeywords.has('$blueprint:social'));
330
- assert.ok(registryKeywords.has('$forge:reward-loop'));
331
- assert.ok(registryKeywords.has('$forge:daily-loop'));
332
- assert.ok(registryKeywords.has('$forge:event-loop'));
333
- assert.ok(registryKeywords.has('$forge:progression'));
334
- assert.ok(registryKeywords.has('$forge:status'));
335
- assert.ok(registryKeywords.has('$forge:fomo'));
336
- assert.ok(registryKeywords.has('$forge:mastery'));
337
- assert.ok(registryKeywords.has('$forge:community'));
338
- });
339
- });
340
- describe('keyword detector skill-active-state lifecycle', () => {
341
- it('writes skill-active-state.json with ralplan phase when autopilot keyword activates', async () => {
342
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-'));
343
- const stateDir = join(cwd, '.rcs', 'state');
344
- try {
345
- await mkdir(stateDir, { recursive: true });
346
- const result = await recordSkillActivation({
347
- stateDir,
348
- text: 'please run $autopilot and keep going',
349
- sessionId: 'sess-1',
350
- threadId: 'thread-1',
351
- turnId: 'turn-1',
352
- nowIso: '2026-02-25T00:00:00.000Z',
353
- });
354
- assert.ok(result);
355
- assert.equal(result.skill, 'autopilot');
356
- assert.equal(result.phase, 'ralplan');
357
- assert.equal(result.active, true);
358
- assert.deepEqual(result.active_skills, [{
359
- skill: 'autopilot',
360
- phase: 'ralplan',
361
- active: true,
362
- activated_at: '2026-02-25T00:00:00.000Z',
363
- updated_at: '2026-02-25T00:00:00.000Z',
364
- session_id: 'sess-1',
365
- thread_id: 'thread-1',
366
- turn_id: 'turn-1',
367
- }]);
368
- assert.equal(result.initialized_mode, 'autopilot');
369
- assert.equal(result.initialized_state_path, '.rcs/state/sessions/sess-1/autopilot-state.json');
370
- const persisted = JSON.parse(await readFile(join(stateDir, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
371
- assert.equal(persisted.skill, 'autopilot');
372
- assert.equal(persisted.phase, 'ralplan');
373
- assert.equal(persisted.active, true);
374
- assert.deepEqual(persisted.active_skills, [{
375
- skill: 'autopilot',
376
- phase: 'ralplan',
377
- active: true,
378
- activated_at: '2026-02-25T00:00:00.000Z',
379
- updated_at: '2026-02-25T00:00:00.000Z',
380
- session_id: 'sess-1',
381
- thread_id: 'thread-1',
382
- turn_id: 'turn-1',
383
- }]);
384
- assert.equal(persisted.initialized_mode, 'autopilot');
385
- const sessionScopedSkillState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-1', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
386
- assert.deepEqual(sessionScopedSkillState.active_skills, persisted.active_skills);
387
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-1', 'autopilot-state.json'), 'utf-8'));
388
- assert.equal(modeState.mode, 'autopilot');
389
- assert.equal(modeState.active, true);
390
- assert.equal(modeState.current_phase, 'ralplan');
391
- assert.equal(modeState.iteration, 1);
392
- assert.equal(modeState.review_cycle, 0);
393
- assert.equal(modeState.max_iterations, 10);
394
- assert.deepEqual(modeState.state.phase_cycle, ['ralplan', 'ralph', 'code-review']);
395
- assert.deepEqual(modeState.state.handoff_artifacts, { ralplan: null, ralph: null, code_review: null });
396
- assert.equal(modeState.state.review_verdict, null);
397
- assert.equal(modeState.state.return_to_ralplan_reason, null);
398
- }
399
- finally {
400
- await rm(cwd, { recursive: true, force: true });
401
- }
402
- });
403
- it('adds approved workflow overlaps without deleting the existing canonical state', async () => {
404
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-overlap-'));
405
- const stateDir = join(cwd, '.rcs', 'state');
406
- try {
407
- await mkdir(stateDir, { recursive: true });
408
- await recordSkillActivation({
409
- stateDir,
410
- text: '$team ship this',
411
- sessionId: 'sess-overlap',
412
- threadId: 'thread-overlap',
413
- turnId: 'turn-1',
414
- nowIso: '2026-02-26T00:00:00.000Z',
415
- });
416
- const result = await recordSkillActivation({
417
- stateDir,
418
- text: '$ralph continue verification',
419
- sessionId: 'sess-overlap',
420
- threadId: 'thread-overlap',
421
- turnId: 'turn-2',
422
- nowIso: '2026-02-26T00:05:00.000Z',
423
- });
424
- assert.ok(result);
425
- assert.deepEqual(result.active_skills?.map((entry) => entry.skill), ['team', 'ralph']);
426
- const persisted = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-overlap', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
427
- assert.deepEqual(persisted.active_skills?.map((entry) => entry.skill), ['team', 'ralph']);
428
- }
429
- finally {
430
- await rm(cwd, { recursive: true, force: true });
431
- }
432
- });
433
- it('keeps a session-scoped Ralph activation out of the root canonical state for other sessions', async () => {
434
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralph-isolation-'));
435
- const stateDir = join(cwd, '.rcs', 'state');
436
- try {
437
- await mkdir(stateDir, { recursive: true });
438
- const result = await recordSkillActivation({
439
- stateDir,
440
- text: '$ralph continue verification',
441
- sessionId: 'sess-ralph-a',
442
- threadId: 'thread-ralph-a',
443
- turnId: 'turn-ralph-a',
444
- nowIso: '2026-04-14T00:00:00.000Z',
445
- });
446
- assert.ok(result);
447
- const rootSkillStatePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
448
- assert.equal(existsSync(rootSkillStatePath), false, 'session-scoped prompt activation should not create a root canonical skill state');
449
- const sessionScopedSkillState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralph-a', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
450
- assert.deepEqual(sessionScopedSkillState.active_skills, [{
451
- skill: 'ralph',
452
- phase: 'planning',
453
- active: true,
454
- activated_at: '2026-04-14T00:00:00.000Z',
455
- updated_at: '2026-04-14T00:00:00.000Z',
456
- session_id: 'sess-ralph-a',
457
- thread_id: 'thread-ralph-a',
458
- turn_id: 'turn-ralph-a',
459
- }]);
460
- }
461
- finally {
462
- await rm(cwd, { recursive: true, force: true });
463
- }
464
- });
465
- it('hard-fails denied workflow overlaps without mutating current state', async () => {
466
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deny-'));
467
- const stateDir = join(cwd, '.rcs', 'state');
468
- try {
469
- await mkdir(stateDir, { recursive: true });
470
- await recordSkillActivation({
471
- stateDir,
472
- text: '$team ship this',
473
- sessionId: 'sess-deny',
474
- threadId: 'thread-deny',
475
- turnId: 'turn-1',
476
- nowIso: '2026-02-26T00:00:00.000Z',
477
- });
478
- const denied = await recordSkillActivation({
479
- stateDir,
480
- text: '$autopilot do it too',
481
- sessionId: 'sess-deny',
482
- threadId: 'thread-deny',
483
- turnId: 'turn-2',
484
- nowIso: '2026-02-26T00:05:00.000Z',
485
- });
486
- assert.ok(denied?.transition_error);
487
- assert.match(String(denied?.transition_error), /Unsupported workflow overlap: team \+ autopilot\./);
488
- assert.match(String(denied?.transition_error), /`rcs state clear --mode <mode>`/);
489
- assert.match(String(denied?.transition_error), /`rcs_state\.\*` MCP tools/);
490
- const persisted = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-deny', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
491
- assert.deepEqual(persisted.active_skills?.map((entry) => entry.skill), ['team']);
492
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-deny', 'autopilot-state.json')), false);
493
- }
494
- finally {
495
- await rm(cwd, { recursive: true, force: true });
496
- }
497
- });
498
- it('denies prompt-submit overlaps against the current session-visible canonical state', async () => {
499
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-session-visible-'));
500
- const stateDir = join(cwd, '.rcs', 'state');
501
- try {
502
- await mkdir(join(stateDir, 'sessions', 'sess-visible'), { recursive: true });
503
- await writeFile(join(stateDir, SKILL_ACTIVE_STATE_FILE), JSON.stringify({
504
- version: 1,
505
- active: true,
506
- skill: 'team',
507
- active_skills: [
508
- { skill: 'team', phase: 'running', active: true },
509
- ],
510
- }, null, 2));
511
- await writeFile(join(stateDir, 'sessions', 'sess-visible', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
512
- version: 1,
513
- active: true,
514
- skill: 'team',
515
- session_id: 'sess-visible',
516
- active_skills: [
517
- { skill: 'team', phase: 'running', active: true },
518
- { skill: 'ralph', phase: 'executing', active: true, session_id: 'sess-visible' },
519
- ],
520
- }, null, 2));
521
- const allowed = await recordSkillActivation({
522
- stateDir,
523
- text: '$ultrawork continue',
524
- sessionId: 'sess-visible',
525
- nowIso: '2026-04-10T00:00:00.000Z',
526
- });
527
- assert.equal(allowed?.transition_error, undefined);
528
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-visible', 'ultrawork-state.json')), true);
529
- const persisted = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-visible', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
530
- assert.deepEqual(persisted.active_skills?.map((entry) => entry.skill), ['team', 'ralph', 'ultrawork']);
531
- }
532
- finally {
533
- await rm(cwd, { recursive: true, force: true });
534
- }
535
- });
536
- it('activates ultrawork mode from the Korean keyboard typo for ulw', async () => {
537
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ulw-ko-'));
538
- const stateDir = join(cwd, '.rcs', 'state');
539
- try {
540
- await mkdir(stateDir, { recursive: true });
541
- const result = await recordSkillActivation({
542
- stateDir,
543
- text: 'ㅕㅣㅈ로 병렬 처리해줘',
544
- sessionId: 'sess-ulw-ko',
545
- threadId: 'thread-ulw-ko',
546
- turnId: 'turn-ulw-ko',
547
- nowIso: '2026-04-21T00:00:00.000Z',
548
- });
549
- assert.ok(result);
550
- assert.equal(result.skill, 'ultrawork');
551
- assert.equal(result.keyword, 'ulw');
552
- assert.equal(result.initialized_mode, 'ultrawork');
553
- assert.equal(result.initialized_state_path, '.rcs/state/sessions/sess-ulw-ko/ultrawork-state.json');
554
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ulw-ko', 'ultrawork-state.json'), 'utf-8'));
555
- assert.equal(modeState.mode, 'ultrawork');
556
- assert.equal(modeState.active, true);
557
- assert.equal(modeState.current_phase, 'planning');
558
- }
559
- finally {
560
- await rm(cwd, { recursive: true, force: true });
561
- }
562
- });
563
- it('seeds executing state for autoresearch prompt-submit activation', async () => {
564
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-autoresearch-'));
565
- const stateDir = join(cwd, '.rcs', 'state');
566
- try {
567
- await mkdir(stateDir, { recursive: true });
568
- const result = await recordSkillActivation({
569
- stateDir,
570
- text: '$autoresearch continue the mission',
571
- sessionId: 'sess-autoresearch',
572
- nowIso: '2026-04-17T00:00:00.000Z',
573
- });
574
- assert.ok(result);
575
- assert.equal(result.skill, 'autoresearch');
576
- assert.equal(result.phase, 'executing');
577
- assert.equal(result.initialized_mode, 'autoresearch');
578
- assert.equal(result.initialized_state_path, '.rcs/state/sessions/sess-autoresearch/autoresearch-state.json');
579
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-autoresearch', 'autoresearch-state.json'), 'utf-8'));
580
- assert.equal(modeState.mode, 'autoresearch');
581
- assert.equal(modeState.active, true);
582
- assert.equal(modeState.current_phase, 'executing');
583
- }
584
- finally {
585
- await rm(cwd, { recursive: true, force: true });
586
- }
587
- });
588
- it('preserves the planning skill when ralplan and autoresearch are invoked together', async () => {
589
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-autoresearch-planning-precedence-'));
590
- const stateDir = join(cwd, '.rcs', 'state');
591
- try {
592
- await mkdir(stateDir, { recursive: true });
593
- const result = await recordSkillActivation({
594
- stateDir,
595
- text: '$ralplan $autoresearch wire the mission loop',
596
- sessionId: 'sess-autoresearch-precedence',
597
- nowIso: '2026-04-17T00:05:00.000Z',
598
- });
599
- assert.equal(result?.transition_error, undefined);
600
- assert.equal(result?.skill, 'ralplan');
601
- assert.deepEqual(result?.active_skills?.map((entry) => entry.skill), ['ralplan']);
602
- assert.deepEqual(result?.deferred_skills, ['autoresearch']);
603
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-autoresearch-precedence', 'ralplan-state.json')), true);
604
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-autoresearch-precedence', 'autoresearch-state.json')), false);
605
- }
606
- finally {
607
- await rm(cwd, { recursive: true, force: true });
608
- }
609
- });
610
- it('captures tmux_pane_id in seeded ralplan prompt-submit state when TMUX_PANE is present', async () => {
611
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralplan-pane-'));
612
- const stateDir = join(cwd, '.rcs', 'state');
613
- const previousPane = process.env.TMUX_PANE;
614
- try {
615
- await mkdir(stateDir, { recursive: true });
616
- process.env.TMUX_PANE = '%88';
617
- const result = await recordSkillActivation({
618
- stateDir,
619
- text: '$ralplan tighten the plan',
620
- sessionId: 'sess-ralplan-pane',
621
- nowIso: '2026-02-25T00:00:00.000Z',
622
- });
623
- assert.ok(result);
624
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralplan-pane', 'ralplan-state.json'), 'utf-8'));
625
- assert.equal(modeState.tmux_pane_id, '%88');
626
- }
627
- finally {
628
- if (typeof previousPane === 'string')
629
- process.env.TMUX_PANE = previousPane;
630
- else
631
- delete process.env.TMUX_PANE;
632
- await rm(cwd, { recursive: true, force: true });
633
- }
634
- });
635
- it('captures tmux_pane_id in deep-interview prompt-submit state when TMUX_PANE is present', async () => {
636
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-pane-'));
637
- const stateDir = join(cwd, '.rcs', 'state');
638
- const previousPane = process.env.TMUX_PANE;
639
- try {
640
- await mkdir(stateDir, { recursive: true });
641
- process.env.TMUX_PANE = '%89';
642
- const result = await recordSkillActivation({
643
- stateDir,
644
- text: '$deep-interview tighten the requirements',
645
- sessionId: 'sess-deep-interview-pane',
646
- nowIso: '2026-02-25T00:00:00.000Z',
647
- });
648
- assert.ok(result);
649
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-deep-interview-pane', 'deep-interview-state.json'), 'utf-8'));
650
- assert.equal(modeState.tmux_pane_id, '%89');
651
- }
652
- finally {
653
- if (typeof previousPane === 'string')
654
- process.env.TMUX_PANE = previousPane;
655
- else
656
- delete process.env.TMUX_PANE;
657
- await rm(cwd, { recursive: true, force: true });
658
- }
659
- });
660
- it('preserves an existing deep-interview tmux_pane_id when prompt-submit re-seeds state without TMUX_PANE', async () => {
661
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-preserve-pane-'));
662
- const stateDir = join(cwd, '.rcs', 'state');
663
- const sessionId = 'sess-deep-interview-preserve-pane';
664
- const previousPane = process.env.TMUX_PANE;
665
- try {
666
- await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
667
- delete process.env.TMUX_PANE;
668
- await writeFile(join(stateDir, 'sessions', sessionId, 'deep-interview-state.json'), JSON.stringify({
669
- active: true,
670
- mode: 'deep-interview',
671
- current_phase: 'intent-first',
672
- started_at: '2026-02-25T00:00:00.000Z',
673
- updated_at: '2026-02-25T00:00:00.000Z',
674
- session_id: sessionId,
675
- tmux_pane_id: '%89',
676
- tmux_pane_set_at: '2026-02-25T00:00:00.000Z',
677
- }, null, 2));
678
- const result = await recordSkillActivation({
679
- stateDir,
680
- text: '$deep-interview tighten the requirements',
681
- sessionId,
682
- nowIso: '2026-02-25T00:05:00.000Z',
683
- });
684
- assert.ok(result);
685
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'deep-interview-state.json'), 'utf-8'));
686
- assert.equal(modeState.tmux_pane_id, '%89');
687
- assert.equal(modeState.tmux_pane_set_at, '2026-02-25T00:00:00.000Z');
688
- }
689
- finally {
690
- if (typeof previousPane === 'string')
691
- process.env.TMUX_PANE = previousPane;
692
- else
693
- delete process.env.TMUX_PANE;
694
- await rm(cwd, { recursive: true, force: true });
695
- }
696
- });
697
- it('seeds first-class state for ralplan prompt-submit activation', async () => {
698
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralplan-'));
699
- const stateDir = join(cwd, '.rcs', 'state');
700
- try {
701
- await mkdir(stateDir, { recursive: true });
702
- const result = await recordSkillActivation({
703
- stateDir,
704
- text: '$ralplan tighten the plan',
705
- sessionId: 'sess-ralplan',
706
- nowIso: '2026-02-25T00:00:00.000Z',
707
- });
708
- assert.ok(result);
709
- assert.equal(result.skill, 'ralplan');
710
- assert.equal(result.initialized_mode, 'ralplan');
711
- assert.equal(result.initialized_state_path, '.rcs/state/sessions/sess-ralplan/ralplan-state.json');
712
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralplan', 'ralplan-state.json'), 'utf-8'));
713
- assert.equal(modeState.mode, 'ralplan');
714
- assert.equal(modeState.active, true);
715
- assert.equal(modeState.current_phase, 'planning');
716
- }
717
- finally {
718
- await rm(cwd, { recursive: true, force: true });
719
- }
720
- });
721
- it('auto-completes deep-interview during allowlisted forward handoff', async () => {
722
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-handoff-'));
723
- const stateDir = join(cwd, '.rcs', 'state');
724
- try {
725
- await mkdir(join(stateDir, 'sessions', 'sess-handoff'), { recursive: true });
726
- await writeFile(join(stateDir, 'sessions', 'sess-handoff', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
727
- version: 1,
728
- active: true,
729
- skill: 'deep-interview',
730
- phase: 'planning',
731
- session_id: 'sess-handoff',
732
- active_skills: [{ skill: 'deep-interview', phase: 'planning', active: true, session_id: 'sess-handoff' }],
733
- }, null, 2));
734
- await writeFile(join(stateDir, 'sessions', 'sess-handoff', 'deep-interview-state.json'), JSON.stringify({
735
- active: true,
736
- mode: 'deep-interview',
737
- current_phase: 'intent-first',
738
- question_enforcement: {
739
- obligation_id: 'obligation-handoff',
740
- source: 'rcs-question',
741
- status: 'pending',
742
- requested_at: '2026-04-09T23:59:00.000Z',
743
- },
744
- }, null, 2));
745
- const result = await recordSkillActivation({
746
- stateDir,
747
- text: '$ralplan implement the approved contract',
748
- sessionId: 'sess-handoff',
749
- nowIso: '2026-04-10T00:00:00.000Z',
750
- });
751
- assert.equal(result?.transition_error, undefined);
752
- assert.equal(result?.transition_message, 'mode transiting: deep-interview -> ralplan');
753
- const completed = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-handoff', 'deep-interview-state.json'), 'utf-8'));
754
- assert.equal(completed.active, false);
755
- assert.equal(completed.current_phase, 'completed');
756
- assert.equal(completed.question_enforcement?.status, 'cleared');
757
- assert.equal(completed.question_enforcement?.clear_reason, 'handoff');
758
- assert.ok(completed.question_enforcement?.cleared_at);
759
- }
760
- finally {
761
- await rm(cwd, { recursive: true, force: true });
762
- }
763
- });
764
- it('preserves the planning skill when planning and execution workflows are invoked together', async () => {
765
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-planning-precedence-'));
766
- const stateDir = join(cwd, '.rcs', 'state');
767
- try {
768
- await mkdir(stateDir, { recursive: true });
769
- const result = await recordSkillActivation({
770
- stateDir,
771
- text: '$ralplan $team $ralph ship this fix',
772
- sessionId: 'sess-multi',
773
- nowIso: '2026-04-10T00:00:00.000Z',
774
- });
775
- assert.equal(result?.transition_error, undefined);
776
- assert.equal(result?.transition_message, undefined);
777
- assert.equal(result?.skill, 'ralplan');
778
- assert.deepEqual(result?.active_skills?.map((entry) => entry.skill), ['ralplan']);
779
- assert.deepEqual(result?.deferred_skills, ['team', 'ralph']);
780
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-multi', 'ralplan-state.json')), true);
781
- assert.equal(existsSync(join(stateDir, 'team-state.json')), false);
782
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-multi', 'ralph-state.json')), false);
783
- }
784
- finally {
785
- await rm(cwd, { recursive: true, force: true });
786
- }
787
- });
788
- it('lets planning win even when execution appears first in the contiguous skill block', async () => {
789
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-planning-beats-execution-'));
790
- const stateDir = join(cwd, '.rcs', 'state');
791
- try {
792
- await mkdir(stateDir, { recursive: true });
793
- const result = await recordSkillActivation({
794
- stateDir,
795
- text: '$ralph $ralplan continue',
796
- sessionId: 'sess-priority',
797
- nowIso: '2026-04-10T00:00:00.000Z',
798
- });
799
- assert.equal(result?.transition_error, undefined);
800
- assert.equal(result?.skill, 'ralplan');
801
- assert.deepEqual(result?.active_skills?.map((entry) => entry.skill), ['ralplan']);
802
- assert.deepEqual(result?.deferred_skills, ['ralph']);
803
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-priority', 'ralplan-state.json')), true);
804
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-priority', 'ralph-state.json')), false);
805
- }
806
- finally {
807
- await rm(cwd, { recursive: true, force: true });
808
- }
809
- });
810
- it('seeds first-class root team state for team prompt-submit activation', async () => {
811
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-team-'));
812
- const stateDir = join(cwd, '.rcs', 'state');
813
- try {
814
- await mkdir(stateDir, { recursive: true });
815
- const result = await recordSkillActivation({
816
- stateDir,
817
- text: '$team coordinate the hotfix',
818
- sessionId: 'sess-team',
819
- nowIso: '2026-04-08T00:00:00.000Z',
820
- });
821
- assert.ok(result);
822
- assert.equal(result.skill, 'team');
823
- assert.equal(result.initialized_mode, 'team');
824
- assert.equal(result.initialized_state_path, '.rcs/state/team-state.json');
825
- const modeState = JSON.parse(await readFile(join(stateDir, 'team-state.json'), 'utf-8'));
826
- assert.equal(modeState.mode, 'team');
827
- assert.equal(modeState.active, true);
828
- assert.equal(modeState.current_phase, 'starting');
829
- }
830
- finally {
831
- await rm(cwd, { recursive: true, force: true });
832
- }
833
- });
834
- it('preserves active team root state when $team is re-entered from prompt routing', async () => {
835
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-team-preserve-'));
836
- const stateDir = join(cwd, '.rcs', 'state');
837
- try {
838
- await mkdir(stateDir, { recursive: true });
839
- await writeFile(join(stateDir, 'team-state.json'), JSON.stringify({
840
- active: true,
841
- mode: 'team',
842
- current_phase: 'team-verify',
843
- started_at: '2026-04-08T00:00:00.000Z',
844
- updated_at: '2026-04-08T00:05:00.000Z',
845
- team_name: 'review-team',
846
- }, null, 2));
847
- const result = await recordSkillActivation({
848
- stateDir,
849
- text: '$team continue the review lane',
850
- sessionId: 'sess-team-preserve',
851
- nowIso: '2026-04-08T00:10:00.000Z',
852
- });
853
- assert.ok(result);
854
- assert.equal(result.initialized_mode, 'team');
855
- assert.equal(result.initialized_state_path, '.rcs/state/team-state.json');
856
- const modeState = JSON.parse(await readFile(join(stateDir, 'team-state.json'), 'utf-8'));
857
- assert.equal(modeState.mode, 'team');
858
- assert.equal(modeState.active, true);
859
- assert.equal(modeState.current_phase, 'team-verify');
860
- assert.equal(modeState.team_name, 'review-team');
861
- }
862
- finally {
863
- await rm(cwd, { recursive: true, force: true });
864
- }
865
- });
866
- it('preserves active team root state when planning follow-up defers a simultaneous $team re-entry', async () => {
867
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-team-planning-followup-'));
868
- const stateDir = join(cwd, '.rcs', 'state');
869
- try {
870
- await mkdir(stateDir, { recursive: true });
871
- await writeFile(join(stateDir, 'team-state.json'), JSON.stringify({
872
- active: true,
873
- mode: 'team',
874
- current_phase: 'team-verify',
875
- started_at: '2026-04-08T00:00:00.000Z',
876
- updated_at: '2026-04-08T00:05:00.000Z',
877
- team_name: 'review-team',
878
- session_id: 'sess-team-root',
879
- }, null, 2));
880
- const result = await recordSkillActivation({
881
- stateDir,
882
- text: '$ralplan $team tighten the approved execution handoff',
883
- sessionId: 'sess-team-followup',
884
- nowIso: '2026-04-10T00:15:00.000Z',
885
- });
886
- assert.ok(result);
887
- assert.equal(result?.skill, 'ralplan');
888
- assert.equal(result?.initialized_mode, 'ralplan');
889
- assert.deepEqual(result?.active_skills?.map((entry) => entry.skill), ['ralplan']);
890
- assert.deepEqual(result?.deferred_skills, ['team']);
891
- const modeState = JSON.parse(await readFile(join(stateDir, 'team-state.json'), 'utf-8'));
892
- assert.equal(modeState.mode, 'team');
893
- assert.equal(modeState.active, true);
894
- assert.equal(modeState.current_phase, 'team-verify');
895
- assert.equal(modeState.team_name, 'review-team');
896
- assert.equal(modeState.session_id, 'sess-team-root');
897
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-team-followup', 'team-state.json')), false);
898
- }
899
- finally {
900
- await rm(cwd, { recursive: true, force: true });
901
- }
902
- });
903
- it('preserves root team state when $ralph is activated for the current session', async () => {
904
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-team-ralph-'));
905
- const stateDir = join(cwd, '.rcs', 'state');
906
- try {
907
- await mkdir(stateDir, { recursive: true });
908
- await recordSkillActivation({
909
- stateDir,
910
- text: '$team coordinate the rollout',
911
- sessionId: 'sess-team-ralph',
912
- nowIso: '2026-04-09T00:00:00.000Z',
913
- });
914
- const result = await recordSkillActivation({
915
- stateDir,
916
- text: '$ralph complete the approved plan',
917
- sessionId: 'sess-team-ralph',
918
- nowIso: '2026-04-09T00:05:00.000Z',
919
- });
920
- assert.ok(result);
921
- assert.equal(result.skill, 'ralph');
922
- const rootCanonical = JSON.parse(await readFile(join(stateDir, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
923
- assert.deepEqual(rootCanonical.active_skills?.map(({ skill, phase, session_id }) => ({
924
- skill,
925
- phase,
926
- session_id,
927
- })), [{ skill: 'team', phase: 'planning', session_id: 'sess-team-ralph' }]);
928
- const sessionCanonical = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-team-ralph', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
929
- assert.deepEqual(sessionCanonical.active_skills?.map(({ skill, phase, session_id }) => ({
930
- skill,
931
- phase,
932
- session_id,
933
- })), [
934
- { skill: 'team', phase: 'planning', session_id: 'sess-team-ralph' },
935
- { skill: 'ralph', phase: 'planning', session_id: 'sess-team-ralph' },
936
- ]);
937
- }
938
- finally {
939
- await rm(cwd, { recursive: true, force: true });
940
- }
941
- });
942
- it('acquires a deep-interview input lock immediately on activation', async () => {
943
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-'));
944
- const stateDir = join(cwd, '.rcs', 'state');
945
- try {
946
- await mkdir(stateDir, { recursive: true });
947
- const result = await recordSkillActivation({
948
- stateDir,
949
- text: 'please run a deep interview before planning',
950
- nowIso: '2026-02-25T00:00:00.000Z',
951
- });
952
- assert.ok(result);
953
- assert.equal(result.skill, 'deep-interview');
954
- assert.equal(result.input_lock?.active, true);
955
- assert.deepEqual(result.input_lock?.blocked_inputs, [...DEEP_INTERVIEW_BLOCKED_APPROVAL_INPUTS]);
956
- assert.equal(result.input_lock?.blocked_inputs.includes('next i should'), true);
957
- assert.equal(result.input_lock?.message, DEEP_INTERVIEW_INPUT_LOCK_MESSAGE);
958
- const modeState = JSON.parse(await readFile(join(stateDir, DEEP_INTERVIEW_STATE_FILE), 'utf-8'));
959
- assert.equal(modeState.mode, 'deep-interview');
960
- assert.equal(modeState.active, true);
961
- assert.equal(modeState.current_phase, 'intent-first');
962
- assert.equal(modeState.input_lock?.active, true);
963
- }
964
- finally {
965
- await rm(cwd, { recursive: true, force: true });
966
- }
967
- });
968
- it('creates the session-scoped deep-interview state directory before persisting mode state', async () => {
969
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-session-dir-'));
970
- const stateDir = join(cwd, '.rcs', 'state');
971
- try {
972
- await mkdir(stateDir, { recursive: true });
973
- await persistDeepInterviewModeState(stateDir, {
974
- version: 1,
975
- active: true,
976
- skill: 'deep-interview',
977
- keyword: 'deep interview',
978
- phase: 'ralplan',
979
- activated_at: '2026-02-25T00:00:00.000Z',
980
- updated_at: '2026-02-25T00:00:00.000Z',
981
- source: 'keyword-detector',
982
- session_id: 'sess-sync',
983
- input_lock: {
984
- active: true,
985
- scope: 'deep-interview-auto-approval',
986
- acquired_at: '2026-02-25T00:00:00.000Z',
987
- blocked_inputs: [...DEEP_INTERVIEW_BLOCKED_APPROVAL_INPUTS],
988
- message: DEEP_INTERVIEW_INPUT_LOCK_MESSAGE,
989
- },
990
- }, '2026-02-25T00:00:00.000Z', null, { sessionId: 'sess-sync' });
991
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-sync', DEEP_INTERVIEW_STATE_FILE), 'utf-8'));
992
- assert.equal(modeState.active, true);
993
- assert.equal(modeState.mode, 'deep-interview');
994
- }
995
- finally {
996
- await rm(cwd, { recursive: true, force: true });
997
- }
998
- });
999
- it('clears stale pending deep-interview question enforcement when deep-interview is reactivated', async () => {
1000
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-reactivation-'));
1001
- const stateDir = join(cwd, '.rcs', 'state');
1002
- try {
1003
- await mkdir(join(stateDir, 'sessions', 'sess-reactivate'), { recursive: true });
1004
- await writeFile(join(stateDir, 'sessions', 'sess-reactivate', DEEP_INTERVIEW_STATE_FILE), JSON.stringify({
1005
- active: false,
1006
- mode: 'deep-interview',
1007
- current_phase: 'completed',
1008
- started_at: '2026-04-10T00:00:00.000Z',
1009
- updated_at: '2026-04-10T00:10:00.000Z',
1010
- completed_at: '2026-04-10T00:10:00.000Z',
1011
- question_enforcement: {
1012
- obligation_id: 'obligation-reactivate',
1013
- source: 'rcs-question',
1014
- status: 'pending',
1015
- requested_at: '2026-04-10T00:05:00.000Z',
1016
- },
1017
- }, null, 2));
1018
- await persistDeepInterviewModeState(stateDir, {
1019
- version: 1,
1020
- active: true,
1021
- skill: 'deep-interview',
1022
- keyword: 'deep interview',
1023
- phase: 'planning',
1024
- activated_at: '2026-04-10T00:11:00.000Z',
1025
- updated_at: '2026-04-10T00:11:00.000Z',
1026
- source: 'keyword-detector',
1027
- session_id: 'sess-reactivate',
1028
- input_lock: {
1029
- active: true,
1030
- scope: 'deep-interview-auto-approval',
1031
- acquired_at: '2026-04-10T00:11:00.000Z',
1032
- blocked_inputs: [...DEEP_INTERVIEW_BLOCKED_APPROVAL_INPUTS],
1033
- message: DEEP_INTERVIEW_INPUT_LOCK_MESSAGE,
1034
- },
1035
- }, '2026-04-10T00:11:00.000Z', null, { sessionId: 'sess-reactivate' });
1036
- const reactivated = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-reactivate', DEEP_INTERVIEW_STATE_FILE), 'utf-8'));
1037
- assert.equal(reactivated.active, true);
1038
- assert.equal(reactivated.question_enforcement?.status, 'cleared');
1039
- assert.equal(reactivated.question_enforcement?.clear_reason, 'handoff');
1040
- assert.ok(reactivated.question_enforcement?.cleared_at);
1041
- }
1042
- finally {
1043
- await rm(cwd, { recursive: true, force: true });
1044
- }
1045
- });
1046
- it('releases the deep-interview input lock on abort via cancel keyword', async () => {
1047
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-deep-interview-abort-'));
1048
- const stateDir = join(cwd, '.rcs', 'state');
1049
- try {
1050
- await mkdir(stateDir, { recursive: true });
1051
- await recordSkillActivation({
1052
- stateDir,
1053
- text: 'please run $deep-interview',
1054
- nowIso: '2026-02-25T00:00:00.000Z',
1055
- });
1056
- const result = await recordSkillActivation({
1057
- stateDir,
1058
- text: 'abort now',
1059
- nowIso: '2026-02-25T00:05:00.000Z',
1060
- });
1061
- assert.ok(result);
1062
- assert.equal(result.skill, 'deep-interview');
1063
- assert.equal(result.active, false);
1064
- assert.equal(result.phase, 'completing');
1065
- assert.equal(result.input_lock?.active, false);
1066
- assert.equal(result.input_lock?.released_at, '2026-02-25T00:05:00.000Z');
1067
- const modeState = JSON.parse(await readFile(join(stateDir, DEEP_INTERVIEW_STATE_FILE), 'utf-8'));
1068
- assert.equal(modeState.active, false);
1069
- assert.equal(modeState.current_phase, 'completing');
1070
- assert.equal(modeState.completed_at, '2026-02-25T00:05:00.000Z');
1071
- assert.equal(modeState.input_lock?.active, false);
1072
- assert.equal(modeState.input_lock?.released_at, '2026-02-25T00:05:00.000Z');
1073
- }
1074
- finally {
1075
- await rm(cwd, { recursive: true, force: true });
1076
- }
1077
- });
1078
- it('does not write state when no keyword is present', async () => {
1079
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-none-'));
1080
- const stateDir = join(cwd, '.rcs', 'state');
1081
- try {
1082
- await mkdir(stateDir, { recursive: true });
1083
- const result = await recordSkillActivation({
1084
- stateDir,
1085
- text: 'hello there, how are you',
1086
- });
1087
- assert.equal(result, null);
1088
- }
1089
- finally {
1090
- await rm(cwd, { recursive: true, force: true });
1091
- }
1092
- });
1093
- it('does not seed non-stateful skill mode state on keyword activation', async () => {
1094
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-non-stateful-'));
1095
- const stateDir = join(cwd, '.rcs', 'state');
1096
- try {
1097
- await mkdir(stateDir, { recursive: true });
1098
- const result = await recordSkillActivation({
1099
- stateDir,
1100
- text: 'please do a code review before merge',
1101
- });
1102
- assert.ok(result);
1103
- assert.equal(result.skill, 'code-review');
1104
- assert.equal(result.initialized_mode, undefined);
1105
- assert.equal(result.initialized_state_path, undefined);
1106
- }
1107
- finally {
1108
- await rm(cwd, { recursive: true, force: true });
1109
- }
1110
- });
1111
- it('emits a warning when skill-active-state persistence fails', async () => {
1112
- const warnings = [];
1113
- mock.method(console, 'warn', (...args) => {
1114
- warnings.push(args);
1115
- });
1116
- const result = await recordSkillActivation({
1117
- stateDir: join('/definitely-missing', 'nested', 'state-dir'),
1118
- text: 'please run $autopilot',
1119
- nowIso: '2026-02-25T00:00:00.000Z',
1120
- });
1121
- assert.ok(result);
1122
- assert.equal(result.skill, 'autopilot');
1123
- assert.equal(warnings.length, 1);
1124
- assert.match(String(warnings[0][0]), /failed to persist keyword activation state/);
1125
- });
1126
- it('preserves activated_at for same-skill continuation', async () => {
1127
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-continuation-'));
1128
- const stateDir = join(cwd, '.rcs', 'state');
1129
- const statePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
1130
- try {
1131
- await mkdir(stateDir, { recursive: true });
1132
- await writeFile(statePath, JSON.stringify({
1133
- version: 1,
1134
- active: true,
1135
- skill: 'autopilot',
1136
- keyword: '$autopilot',
1137
- phase: 'ralplan',
1138
- activated_at: '2026-02-25T00:00:00.000Z',
1139
- updated_at: '2026-02-25T00:10:00.000Z',
1140
- source: 'keyword-detector',
1141
- }));
1142
- const result = await recordSkillActivation({
1143
- stateDir,
1144
- text: 'autopilot keep going',
1145
- nowIso: '2026-02-26T00:00:00.000Z',
1146
- });
1147
- assert.ok(result);
1148
- assert.equal(result.skill, 'autopilot');
1149
- assert.equal(result.transition_error, undefined);
1150
- assert.equal(result.activated_at, '2026-02-25T00:00:00.000Z');
1151
- assert.equal(result.updated_at, '2026-02-26T00:00:00.000Z');
1152
- }
1153
- finally {
1154
- await rm(cwd, { recursive: true, force: true });
1155
- }
1156
- });
1157
- it('preserves seeded mode progress for same-skill continuation', async () => {
1158
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-seed-continuation-'));
1159
- const stateDir = join(cwd, '.rcs', 'state');
1160
- const statePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
1161
- try {
1162
- await mkdir(stateDir, { recursive: true });
1163
- await mkdir(join(stateDir, 'sessions', 'sess-autopilot'), { recursive: true });
1164
- await writeFile(statePath, JSON.stringify({
1165
- version: 1,
1166
- active: true,
1167
- skill: 'autopilot',
1168
- keyword: 'autopilot',
1169
- phase: 'ralplan',
1170
- activated_at: '2026-02-25T00:00:00.000Z',
1171
- updated_at: '2026-02-25T00:10:00.000Z',
1172
- source: 'keyword-detector',
1173
- session_id: 'sess-autopilot',
1174
- }));
1175
- await writeFile(join(stateDir, 'sessions', 'sess-autopilot', 'autopilot-state.json'), JSON.stringify({
1176
- active: true,
1177
- mode: 'autopilot',
1178
- current_phase: 'code-review',
1179
- started_at: '2026-02-25T00:00:00.000Z',
1180
- updated_at: '2026-02-25T00:10:00.000Z',
1181
- session_id: 'sess-autopilot',
1182
- state: { context_snapshot_path: '.rcs/context/existing.md' },
1183
- }));
1184
- const result = await recordSkillActivation({
1185
- stateDir,
1186
- text: 'autopilot keep going',
1187
- sessionId: 'sess-autopilot',
1188
- nowIso: '2026-02-26T00:00:00.000Z',
1189
- });
1190
- assert.ok(result);
1191
- assert.equal(result.skill, 'autopilot');
1192
- assert.equal(result.phase, 'ralplan');
1193
- assert.equal(result.transition_error, undefined);
1194
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-autopilot', 'autopilot-state.json'), 'utf-8'));
1195
- assert.equal(modeState.current_phase, 'code-review');
1196
- assert.equal(modeState.started_at, '2026-02-25T00:00:00.000Z');
1197
- assert.equal(modeState.state?.context_snapshot_path, '.rcs/context/existing.md');
1198
- }
1199
- finally {
1200
- await rm(cwd, { recursive: true, force: true });
1201
- }
1202
- });
1203
- it('does not persist Ralph workflow state for a plain conversational mention', async () => {
1204
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralph-plain-text-'));
1205
- const stateDir = join(cwd, '.rcs', 'state');
1206
- try {
1207
- await mkdir(stateDir, { recursive: true });
1208
- const result = await recordSkillActivation({
1209
- stateDir,
1210
- text: 'why does ralph keep blocking stop?',
1211
- sessionId: 'sess-plain-ralph',
1212
- threadId: 'thread-plain-ralph',
1213
- turnId: 'turn-plain-ralph',
1214
- nowIso: '2026-04-17T00:00:00.000Z',
1215
- });
1216
- assert.equal(result, null);
1217
- assert.equal(existsSync(join(stateDir, SKILL_ACTIVE_STATE_FILE)), false);
1218
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-plain-ralph', SKILL_ACTIVE_STATE_FILE)), false);
1219
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-plain-ralph', 'ralph-state.json')), false);
1220
- }
1221
- finally {
1222
- await rm(cwd, { recursive: true, force: true });
1223
- }
1224
- });
1225
- it('preserves Ralph iteration counters for same-skill continuation', async () => {
1226
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralph-continuation-'));
1227
- const stateDir = join(cwd, '.rcs', 'state');
1228
- const statePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
1229
- try {
1230
- await mkdir(stateDir, { recursive: true });
1231
- await writeFile(statePath, JSON.stringify({
1232
- version: 1,
1233
- active: true,
1234
- skill: 'ralph',
1235
- keyword: 'ralph',
1236
- phase: 'executing',
1237
- activated_at: '2026-02-25T00:00:00.000Z',
1238
- updated_at: '2026-02-25T00:10:00.000Z',
1239
- source: 'keyword-detector',
1240
- }));
1241
- await writeFile(join(stateDir, 'ralph-state.json'), JSON.stringify({
1242
- active: true,
1243
- mode: 'ralph',
1244
- current_phase: 'verifying',
1245
- started_at: '2026-02-25T00:00:00.000Z',
1246
- updated_at: '2026-02-25T00:10:00.000Z',
1247
- iteration: 3,
1248
- max_iterations: 10,
1249
- }));
1250
- const result = await recordSkillActivation({
1251
- stateDir,
1252
- text: 'ralph keep going',
1253
- nowIso: '2026-02-26T00:00:00.000Z',
1254
- });
1255
- assert.ok(result);
1256
- assert.equal(result.skill, 'ralph');
1257
- assert.equal(result.transition_error, undefined);
1258
- const modeState = JSON.parse(await readFile(join(stateDir, 'ralph-state.json'), 'utf-8'));
1259
- assert.equal(modeState.current_phase, 'verifying');
1260
- assert.equal(modeState.iteration, 3);
1261
- assert.equal(modeState.max_iterations, 10);
1262
- }
1263
- finally {
1264
- await rm(cwd, { recursive: true, force: true });
1265
- }
1266
- });
1267
- it('keeps Korean ulw typo first in mixed explicit workflow persistence', async () => {
1268
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ulw-ko-mixed-'));
1269
- const stateDir = join(cwd, '.rcs', 'state');
1270
- try {
1271
- await mkdir(stateDir, { recursive: true });
1272
- const result = await recordSkillActivation({
1273
- stateDir,
1274
- text: '$ㅕㅣㅈ $autopilot 병렬 작업으로 처리해줘',
1275
- sessionId: 'sess-ulw-ko-mixed',
1276
- nowIso: '2026-04-21T00:20:00.000Z',
1277
- });
1278
- assert.ok(result);
1279
- assert.equal(result.skill, 'ultrawork');
1280
- assert.equal(result.keyword, '$ulw');
1281
- assert.deepEqual(result.requested_skills, ['ultrawork', 'autopilot']);
1282
- assert.deepEqual(result.active_skills?.map((entry) => entry.skill), ['ultrawork', 'autopilot']);
1283
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-ulw-ko-mixed', 'ultrawork-state.json')), true);
1284
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-ulw-ko-mixed', 'autopilot-state.json')), true);
1285
- }
1286
- finally {
1287
- await rm(cwd, { recursive: true, force: true });
1288
- }
1289
- });
1290
- it('lets an explicit Korean ulw typo override an active workflow continuation', async () => {
1291
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ulw-ko-explicit-'));
1292
- const stateDir = join(cwd, '.rcs', 'state');
1293
- try {
1294
- await mkdir(join(stateDir, 'sessions', 'sess-ulw-ko-explicit'), { recursive: true });
1295
- await writeFile(join(stateDir, 'sessions', 'sess-ulw-ko-explicit', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
1296
- version: 1,
1297
- active: true,
1298
- skill: 'autopilot',
1299
- keyword: '$autopilot',
1300
- phase: 'executing',
1301
- activated_at: '2026-04-21T00:00:00.000Z',
1302
- updated_at: '2026-04-21T00:05:00.000Z',
1303
- source: 'keyword-detector',
1304
- session_id: 'sess-ulw-ko-explicit',
1305
- active_skills: [
1306
- {
1307
- skill: 'autopilot',
1308
- phase: 'executing',
1309
- active: true,
1310
- activated_at: '2026-04-21T00:00:00.000Z',
1311
- updated_at: '2026-04-21T00:05:00.000Z',
1312
- session_id: 'sess-ulw-ko-explicit',
1313
- },
1314
- ],
1315
- }, null, 2));
1316
- const result = await recordSkillActivation({
1317
- stateDir,
1318
- text: '$ㅕㅣㅈ continue',
1319
- sessionId: 'sess-ulw-ko-explicit',
1320
- nowIso: '2026-04-21T00:10:00.000Z',
1321
- });
1322
- assert.ok(result);
1323
- assert.equal(result.skill, 'ultrawork');
1324
- assert.equal(result.keyword, '$ulw');
1325
- assert.deepEqual(result.active_skills?.map((entry) => entry.skill), ['autopilot', 'ultrawork']);
1326
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-ulw-ko-explicit', 'ultrawork-state.json')), true);
1327
- }
1328
- finally {
1329
- await rm(cwd, { recursive: true, force: true });
1330
- }
1331
- });
1332
- it('routes bare keep-going continuation to the active autopilot skill instead of generic ralph continuation', async () => {
1333
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-autopilot-bare-continuation-'));
1334
- const stateDir = join(cwd, '.rcs', 'state');
1335
- try {
1336
- await mkdir(join(stateDir, 'sessions', 'sess-autopilot-bare'), { recursive: true });
1337
- await writeFile(join(stateDir, 'sessions', 'sess-autopilot-bare', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
1338
- version: 1,
1339
- active: true,
1340
- skill: 'autopilot',
1341
- keyword: '$autopilot',
1342
- phase: 'ralplan',
1343
- activated_at: '2026-04-19T00:00:00.000Z',
1344
- updated_at: '2026-04-19T00:10:00.000Z',
1345
- source: 'keyword-detector',
1346
- session_id: 'sess-autopilot-bare',
1347
- active_skills: [
1348
- {
1349
- skill: 'autopilot',
1350
- phase: 'ralplan',
1351
- active: true,
1352
- activated_at: '2026-04-19T00:00:00.000Z',
1353
- updated_at: '2026-04-19T00:10:00.000Z',
1354
- session_id: 'sess-autopilot-bare',
1355
- },
1356
- ],
1357
- }, null, 2));
1358
- await writeFile(join(stateDir, 'sessions', 'sess-autopilot-bare', 'autopilot-state.json'), JSON.stringify({
1359
- active: true,
1360
- mode: 'autopilot',
1361
- current_phase: 'code-review',
1362
- started_at: '2026-04-19T00:00:00.000Z',
1363
- updated_at: '2026-04-19T00:10:00.000Z',
1364
- session_id: 'sess-autopilot-bare',
1365
- state: { context_snapshot_path: '.rcs/context/autopilot.md' },
1366
- }, null, 2));
1367
- const result = await recordSkillActivation({
1368
- stateDir,
1369
- text: '\\ keep going now',
1370
- sessionId: 'sess-autopilot-bare',
1371
- nowIso: '2026-04-19T00:15:00.000Z',
1372
- });
1373
- assert.ok(result);
1374
- assert.equal(result.skill, 'autopilot');
1375
- assert.equal(result.keyword, '$autopilot');
1376
- assert.equal(result.transition_error, undefined);
1377
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-autopilot-bare', 'autopilot-state.json'), 'utf-8'));
1378
- assert.equal(modeState.current_phase, 'code-review');
1379
- assert.equal(modeState.state?.context_snapshot_path, '.rcs/context/autopilot.md');
1380
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-autopilot-bare', 'ralph-state.json')), false);
1381
- }
1382
- finally {
1383
- await rm(cwd, { recursive: true, force: true });
1384
- }
1385
- });
1386
- it('routes bare keep-going continuation to the active ralph skill instead of resetting through generic keep-going detection', async () => {
1387
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-ralph-bare-continuation-'));
1388
- const stateDir = join(cwd, '.rcs', 'state');
1389
- try {
1390
- await mkdir(join(stateDir, 'sessions', 'sess-ralph-bare'), { recursive: true });
1391
- await writeFile(join(stateDir, 'sessions', 'sess-ralph-bare', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
1392
- version: 1,
1393
- active: true,
1394
- skill: 'ralph',
1395
- keyword: '$ralph',
1396
- phase: 'executing',
1397
- activated_at: '2026-04-19T00:00:00.000Z',
1398
- updated_at: '2026-04-19T00:10:00.000Z',
1399
- source: 'keyword-detector',
1400
- session_id: 'sess-ralph-bare',
1401
- active_skills: [
1402
- {
1403
- skill: 'ralph',
1404
- phase: 'executing',
1405
- active: true,
1406
- activated_at: '2026-04-19T00:00:00.000Z',
1407
- updated_at: '2026-04-19T00:10:00.000Z',
1408
- session_id: 'sess-ralph-bare',
1409
- },
1410
- ],
1411
- }, null, 2));
1412
- await writeFile(join(stateDir, 'sessions', 'sess-ralph-bare', 'ralph-state.json'), JSON.stringify({
1413
- active: true,
1414
- mode: 'ralph',
1415
- current_phase: 'verifying',
1416
- started_at: '2026-04-19T00:00:00.000Z',
1417
- updated_at: '2026-04-19T00:10:00.000Z',
1418
- iteration: 7,
1419
- max_iterations: 50,
1420
- session_id: 'sess-ralph-bare',
1421
- }, null, 2));
1422
- const result = await recordSkillActivation({
1423
- stateDir,
1424
- text: 'keep going now',
1425
- sessionId: 'sess-ralph-bare',
1426
- nowIso: '2026-04-19T00:15:00.000Z',
1427
- });
1428
- assert.ok(result);
1429
- assert.equal(result.skill, 'ralph');
1430
- assert.equal(result.keyword, '$ralph');
1431
- assert.equal(result.transition_error, undefined);
1432
- const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralph-bare', 'ralph-state.json'), 'utf-8'));
1433
- assert.equal(modeState.current_phase, 'verifying');
1434
- assert.equal(modeState.iteration, 7);
1435
- assert.equal(modeState.max_iterations, 50);
1436
- }
1437
- finally {
1438
- await rm(cwd, { recursive: true, force: true });
1439
- }
1440
- });
1441
- it('does not reuse active workflow continuation when prompt contains an unknown plugin-prefixed explicit token', async () => {
1442
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-unknown-prefixed-explicit-'));
1443
- const stateDir = join(cwd, '.rcs', 'state');
1444
- try {
1445
- await mkdir(join(stateDir, 'sessions', 'sess-unknown-prefixed'), { recursive: true });
1446
- await writeFile(join(stateDir, 'sessions', 'sess-unknown-prefixed', SKILL_ACTIVE_STATE_FILE), JSON.stringify({
1447
- version: 1,
1448
- active: true,
1449
- skill: 'ralph',
1450
- keyword: '$ralph',
1451
- phase: 'executing',
1452
- activated_at: '2026-04-19T00:00:00.000Z',
1453
- updated_at: '2026-04-19T00:10:00.000Z',
1454
- source: 'keyword-detector',
1455
- session_id: 'sess-unknown-prefixed',
1456
- active_skills: [
1457
- {
1458
- skill: 'ralph',
1459
- phase: 'executing',
1460
- active: true,
1461
- activated_at: '2026-04-19T00:00:00.000Z',
1462
- updated_at: '2026-04-19T00:10:00.000Z',
1463
- session_id: 'sess-unknown-prefixed',
1464
- },
1465
- ],
1466
- }, null, 2));
1467
- const result = await recordSkillActivation({
1468
- stateDir,
1469
- text: '$roblox-ai-os-creator-skills:unknown continue',
1470
- sessionId: 'sess-unknown-prefixed',
1471
- nowIso: '2026-04-19T00:15:00.000Z',
1472
- });
1473
- assert.equal(result, null);
1474
- assert.equal(existsSync(join(stateDir, 'sessions', 'sess-unknown-prefixed', 'ralph-state.json')), false);
1475
- }
1476
- finally {
1477
- await rm(cwd, { recursive: true, force: true });
1478
- }
1479
- });
1480
- it('denies switching away from a standalone workflow without explicit clear', async () => {
1481
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-skill-switch-deny-'));
1482
- const stateDir = join(cwd, '.rcs', 'state');
1483
- const statePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
1484
- try {
1485
- await mkdir(stateDir, { recursive: true });
1486
- await writeFile(statePath, JSON.stringify({
1487
- version: 1,
1488
- active: true,
1489
- skill: 'autopilot',
1490
- keyword: 'autopilot',
1491
- phase: 'ralplan',
1492
- activated_at: '2026-02-25T00:00:00.000Z',
1493
- updated_at: '2026-02-25T00:10:00.000Z',
1494
- source: 'keyword-detector',
1495
- }));
1496
- const result = await recordSkillActivation({
1497
- stateDir,
1498
- text: 'please run $ralph now',
1499
- nowIso: '2026-02-26T00:00:00.000Z',
1500
- });
1501
- assert.ok(result);
1502
- assert.equal(result.skill, 'autopilot');
1503
- assert.match(String(result.transition_error), /Unsupported workflow overlap: autopilot \+ ralph\./);
1504
- assert.equal(result.activated_at, '2026-02-25T00:00:00.000Z');
1505
- }
1506
- finally {
1507
- await rm(cwd, { recursive: true, force: true });
1508
- }
1509
- });
1510
- it('resets activated_at when keyword changes within the same skill', async () => {
1511
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-state-keyword-switch-'));
1512
- const stateDir = join(cwd, '.rcs', 'state');
1513
- const statePath = join(stateDir, SKILL_ACTIVE_STATE_FILE);
1514
- try {
1515
- await mkdir(stateDir, { recursive: true });
1516
- await writeFile(statePath, JSON.stringify({
1517
- version: 1,
1518
- active: true,
1519
- skill: 'autopilot',
1520
- keyword: 'autopilot',
1521
- phase: 'ralplan',
1522
- activated_at: '2026-02-25T00:00:00.000Z',
1523
- updated_at: '2026-02-25T00:10:00.000Z',
1524
- source: 'keyword-detector',
1525
- }));
1526
- const result = await recordSkillActivation({
1527
- stateDir,
1528
- text: 'I want a starter API',
1529
- nowIso: '2026-02-26T00:00:00.000Z',
1530
- });
1531
- assert.ok(result);
1532
- assert.equal(result.skill, 'autopilot');
1533
- assert.notEqual(result.keyword.toLowerCase(), 'autopilot');
1534
- assert.equal(result.activated_at, '2026-02-26T00:00:00.000Z');
1535
- }
1536
- finally {
1537
- await rm(cwd, { recursive: true, force: true });
1538
- }
1539
- });
1540
- });
1541
- describe('isUnderspecifiedForExecution', () => {
1542
- it('flags vague prompt with no files or functions', () => {
1543
- assert.equal(isUnderspecifiedForExecution('ralph fix this'), true);
1544
- });
1545
- it('flags short vague prompt', () => {
1546
- assert.equal(isUnderspecifiedForExecution('autopilot build the app'), true);
1547
- });
1548
- it('flags prompt with only keyword and generic words', () => {
1549
- assert.equal(isUnderspecifiedForExecution('team improve performance'), true);
1550
- });
1551
- it('passes prompt with a file path reference', () => {
1552
- assert.equal(isUnderspecifiedForExecution('ralph fix src/hooks/bridge.ts'), false);
1553
- });
1554
- it('passes prompt with a file extension reference', () => {
1555
- assert.equal(isUnderspecifiedForExecution('fix the bug in auth.ts'), false);
1556
- });
1557
- it('passes prompt with a directory/file path', () => {
1558
- assert.equal(isUnderspecifiedForExecution('update src/hooks/emulator.ts'), false);
1559
- });
1560
- it('passes prompt with a camelCase symbol', () => {
1561
- assert.equal(isUnderspecifiedForExecution('team fix processKeywordDetector'), false);
1562
- });
1563
- it('passes prompt with a PascalCase symbol', () => {
1564
- assert.equal(isUnderspecifiedForExecution('ralph update UserModel'), false);
1565
- });
1566
- it('passes prompt with snake_case symbol', () => {
1567
- assert.equal(isUnderspecifiedForExecution('fix user_model validation'), false);
1568
- });
1569
- it('passes prompt with an issue number', () => {
1570
- assert.equal(isUnderspecifiedForExecution('autopilot implement #42'), false);
1571
- });
1572
- it('passes prompt with numbered steps', () => {
1573
- assert.equal(isUnderspecifiedForExecution('ralph do:\n1. Add input validation\n2. Write tests\n3. Update README'), false);
1574
- });
1575
- it('passes prompt with acceptance criteria keyword', () => {
1576
- assert.equal(isUnderspecifiedForExecution('add login - acceptance criteria: user sees error on bad password'), false);
1577
- });
1578
- it('passes prompt with a specific error reference', () => {
1579
- assert.equal(isUnderspecifiedForExecution('ralph fix TypeError in auth handler'), false);
1580
- });
1581
- it('passes with force: escape hatch prefix', () => {
1582
- assert.equal(isUnderspecifiedForExecution('force: ralph refactor the auth module'), false);
1583
- });
1584
- it('passes with ! escape hatch prefix', () => {
1585
- assert.equal(isUnderspecifiedForExecution('! autopilot optimize everything'), false);
1586
- });
1587
- it('returns true for empty string', () => {
1588
- assert.equal(isUnderspecifiedForExecution(''), true);
1589
- });
1590
- it('returns true for whitespace only', () => {
1591
- assert.equal(isUnderspecifiedForExecution(' '), true);
1592
- });
1593
- it('passes prompt with test runner command', () => {
1594
- assert.equal(isUnderspecifiedForExecution('ralph npm test && fix failures'), false);
1595
- });
1596
- it('passes longer prompt that exceeds word threshold', () => {
1597
- // 16+ effective words without specific signals → passes (not underspecified by word count)
1598
- const longVague = 'please help me improve the overall quality and performance and reliability of this system going forward';
1599
- assert.equal(isUnderspecifiedForExecution(longVague), false);
1600
- });
1601
- it('false positive prevention: camelCase identifiers pass', () => {
1602
- assert.equal(isUnderspecifiedForExecution('fix getUserById to handle null'), false);
1603
- });
1604
- });
1605
- describe('applyRalplanGate', () => {
1606
- it('does not re-enter ralplan for a short approved team follow-up', async () => {
1607
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-gate-followup-'));
1608
- try {
1609
- const plansDir = join(cwd, '.rcs', 'plans');
1610
- await mkdir(plansDir, { recursive: true });
1611
- await writeFile(join(plansDir, 'prd-issue-831.md'), '# Approved plan\n\nLaunch hint: rcs team 3:executor "Execute approved issue 831 plan"\n');
1612
- await writeFile(join(plansDir, 'test-spec-issue-831.md'), '# Test spec\n');
1613
- const result = applyRalplanGate(['team'], 'team', { cwd });
1614
- assert.equal(result.gateApplied, false);
1615
- assert.deepEqual(result.keywords, ['team']);
1616
- }
1617
- finally {
1618
- await rm(cwd, { recursive: true, force: true });
1619
- }
1620
- });
1621
- it('does not re-enter ralplan for a short approved Korean team follow-up', async () => {
1622
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-gate-followup-ko-'));
1623
- try {
1624
- const plansDir = join(cwd, '.rcs', 'plans');
1625
- await mkdir(plansDir, { recursive: true });
1626
- await writeFile(join(plansDir, 'prd-issue-831.md'), '# Approved plan\n\nLaunch hint: rcs team 3:executor "Execute approved issue 831 plan"\n');
1627
- await writeFile(join(plansDir, 'test-spec-issue-831.md'), '# Test spec\n');
1628
- const result = applyRalplanGate(['team'], 'team으로 해줘', { cwd });
1629
- assert.equal(result.gateApplied, false);
1630
- assert.deepEqual(result.keywords, ['team']);
1631
- }
1632
- finally {
1633
- await rm(cwd, { recursive: true, force: true });
1634
- }
1635
- });
1636
- it('does not re-enter ralplan for a short approved ralph follow-up', async () => {
1637
- const cwd = await mkdtemp(join(tmpdir(), 'rcs-keyword-gate-followup-ralph-'));
1638
- try {
1639
- const plansDir = join(cwd, '.rcs', 'plans');
1640
- await mkdir(plansDir, { recursive: true });
1641
- await writeFile(join(plansDir, 'prd-issue-832.md'), '# Approved plan\n\nLaunch hint: rcs ralph "Execute approved issue 832 plan"\n');
1642
- await writeFile(join(plansDir, 'test-spec-issue-832.md'), '# Test spec\n');
1643
- const result = applyRalplanGate(['ralph'], 'ralph please', { cwd, priorSkill: 'ralplan' });
1644
- assert.equal(result.gateApplied, false);
1645
- assert.deepEqual(result.keywords, ['ralph']);
1646
- }
1647
- finally {
1648
- await rm(cwd, { recursive: true, force: true });
1649
- }
1650
- });
1651
- it('redirects underspecified execution keywords to ralplan', () => {
1652
- const result = applyRalplanGate(['ralph'], 'ralph fix this');
1653
- assert.equal(result.gateApplied, true);
1654
- assert.ok(result.keywords.includes('ralplan'));
1655
- assert.ok(!result.keywords.includes('ralph'));
1656
- });
1657
- it('redirects autopilot to ralplan when underspecified', () => {
1658
- const result = applyRalplanGate(['autopilot'], 'autopilot build the app');
1659
- assert.equal(result.gateApplied, true);
1660
- assert.ok(result.keywords.includes('ralplan'));
1661
- });
1662
- it('does not gate well-specified prompts', () => {
1663
- const result = applyRalplanGate(['ralph'], 'ralph fix src/hooks/bridge.ts null check');
1664
- assert.equal(result.gateApplied, false);
1665
- assert.ok(result.keywords.includes('ralph'));
1666
- });
1667
- it('does not gate when cancel is present', () => {
1668
- const result = applyRalplanGate(['cancel', 'ralph'], 'cancel ralph');
1669
- assert.equal(result.gateApplied, false);
1670
- });
1671
- it('does not gate when ralplan is already present', () => {
1672
- const result = applyRalplanGate(['ralplan'], 'ralplan add auth');
1673
- assert.equal(result.gateApplied, false);
1674
- assert.ok(result.keywords.includes('ralplan'));
1675
- });
1676
- it('does not gate non-execution keywords', () => {
1677
- const result = applyRalplanGate(['analyze'], 'analyze this');
1678
- assert.equal(result.gateApplied, false);
1679
- });
1680
- it('preserves non-execution keywords when gating', () => {
1681
- const result = applyRalplanGate(['ralph', 'tdd'], 'ralph tdd fix this');
1682
- assert.equal(result.gateApplied, true);
1683
- assert.ok(result.keywords.includes('tdd'));
1684
- assert.ok(result.keywords.includes('ralplan'));
1685
- assert.ok(!result.keywords.includes('ralph'));
1686
- });
1687
- it('handles force: escape hatch — does not gate', () => {
1688
- const result = applyRalplanGate(['ralph'], 'force: ralph refactor the auth module');
1689
- assert.equal(result.gateApplied, false);
1690
- });
1691
- it('gates multiple execution keywords at once', () => {
1692
- const result = applyRalplanGate(['ralph', 'team'], 'ralph team fix this');
1693
- assert.equal(result.gateApplied, true);
1694
- assert.ok(result.keywords.includes('ralplan'));
1695
- assert.ok(!result.keywords.includes('ralph'));
1696
- assert.ok(!result.keywords.includes('team'));
1697
- assert.ok(result.gatedKeywords.includes('ralph'));
1698
- assert.ok(result.gatedKeywords.includes('team'));
1699
- });
1700
- it('returns empty keywords unchanged when no keywords', () => {
1701
- const result = applyRalplanGate([], 'fix this');
1702
- assert.equal(result.gateApplied, false);
1703
- assert.deepEqual(result.keywords, []);
1704
- });
1705
- it('does not duplicate ralplan if already in filtered list', () => {
1706
- // ultrawork is an execution keyword; after filtering, ralplan added once
1707
- const result = applyRalplanGate(['ultrawork'], 'ultrawork do stuff');
1708
- assert.equal(result.keywords.filter(k => k === 'ralplan').length, 1);
1709
- });
1710
- it('reports gatedKeywords correctly', () => {
1711
- const result = applyRalplanGate(['ralph', 'ultrawork'], 'ralph ultrawork build');
1712
- assert.ok(result.gatedKeywords.includes('ralph'));
1713
- assert.ok(result.gatedKeywords.includes('ultrawork'));
1714
- });
1715
- });
1716
- //# sourceMappingURL=keyword-detector.test.js.map