@jstn-sdk/rcs 0.1.0 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1739) hide show
  1. package/README.md +154 -101
  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.d.ts.map +1 -1
  20. package/dist/cli/index.js +20 -15
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/setup.d.ts.map +1 -1
  23. package/dist/cli/setup.js +2 -3
  24. package/dist/cli/setup.js.map +1 -1
  25. package/dist/cli/star-prompt.js +2 -2
  26. package/dist/cli/star-prompt.js.map +1 -1
  27. package/dist/cli/state.js +1 -1
  28. package/dist/cli/team.d.ts.map +1 -1
  29. package/dist/cli/team.js +3 -2
  30. package/dist/cli/team.js.map +1 -1
  31. package/dist/cli/tmux-hook.d.ts.map +1 -1
  32. package/dist/cli/tmux-hook.js +9 -1
  33. package/dist/cli/tmux-hook.js.map +1 -1
  34. package/dist/config/generator.d.ts +1 -1
  35. package/dist/config/generator.d.ts.map +1 -1
  36. package/dist/config/generator.js +1 -1
  37. package/dist/config/generator.js.map +1 -1
  38. package/dist/forge/contract.d.ts +17 -0
  39. package/dist/{ralph → forge}/contract.d.ts.map +1 -1
  40. package/dist/{ralph → forge}/contract.js +16 -16
  41. package/dist/{ralph → forge}/contract.js.map +1 -1
  42. package/dist/{ralph → forge}/persistence.d.ts +5 -5
  43. package/dist/{ralph → forge}/persistence.d.ts.map +1 -1
  44. package/dist/{ralph → forge}/persistence.js +7 -6
  45. package/dist/forge/persistence.js.map +1 -0
  46. package/dist/hooks/agents-overlay.d.ts +1 -1
  47. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  48. package/dist/hooks/agents-overlay.js +37 -31
  49. package/dist/hooks/agents-overlay.js.map +1 -1
  50. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  51. package/dist/hooks/extensibility/dispatcher.js +82 -14
  52. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  53. package/dist/hooks/keyword-detector.d.ts +8 -8
  54. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  55. package/dist/hooks/keyword-detector.js +94 -64
  56. package/dist/hooks/keyword-detector.js.map +1 -1
  57. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  58. package/dist/hooks/keyword-registry.js +9 -11
  59. package/dist/hooks/keyword-registry.js.map +1 -1
  60. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  61. package/dist/hooks/prompt-guidance-contract.js +10 -21
  62. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  63. package/dist/hooks/task-size-detector.js +2 -2
  64. package/dist/hooks/task-size-detector.js.map +1 -1
  65. package/dist/hooks/triage-state.d.ts +1 -1
  66. package/dist/hooks/triage-state.js +1 -1
  67. package/dist/hud/colors.d.ts +2 -2
  68. package/dist/hud/colors.js +2 -2
  69. package/dist/hud/render.js +21 -21
  70. package/dist/hud/render.js.map +1 -1
  71. package/dist/hud/state.d.ts +3 -3
  72. package/dist/hud/state.d.ts.map +1 -1
  73. package/dist/hud/state.js +18 -15
  74. package/dist/hud/state.js.map +1 -1
  75. package/dist/hud/types.d.ts +6 -6
  76. package/dist/hud/types.d.ts.map +1 -1
  77. package/dist/mcp/bootstrap.d.ts.map +1 -1
  78. package/dist/mcp/bootstrap.js +36 -2
  79. package/dist/mcp/bootstrap.js.map +1 -1
  80. package/dist/mcp/state-paths.d.ts +1 -0
  81. package/dist/mcp/state-paths.d.ts.map +1 -1
  82. package/dist/mcp/state-paths.js +4 -1
  83. package/dist/mcp/state-paths.js.map +1 -1
  84. package/dist/mcp/state-server.d.ts +4 -4
  85. package/dist/mcp/state-server.js +2 -2
  86. package/dist/mcp/state-server.js.map +1 -1
  87. package/dist/modes/base.d.ts +2 -2
  88. package/dist/modes/base.d.ts.map +1 -1
  89. package/dist/modes/base.js +29 -26
  90. package/dist/modes/base.js.map +1 -1
  91. package/dist/notifications/reply-listener.d.ts.map +1 -1
  92. package/dist/notifications/reply-listener.js +7 -1
  93. package/dist/notifications/reply-listener.js.map +1 -1
  94. package/dist/notifications/tmux.d.ts.map +1 -1
  95. package/dist/notifications/tmux.js +39 -6
  96. package/dist/notifications/tmux.js.map +1 -1
  97. package/dist/pipeline/index.d.ts +7 -6
  98. package/dist/pipeline/index.d.ts.map +1 -1
  99. package/dist/pipeline/index.js +5 -4
  100. package/dist/pipeline/index.js.map +1 -1
  101. package/dist/pipeline/orchestrator.d.ts +5 -5
  102. package/dist/pipeline/orchestrator.js +25 -25
  103. package/dist/pipeline/orchestrator.js.map +1 -1
  104. package/dist/pipeline/stages/blueprint.d.ts +25 -0
  105. package/dist/pipeline/stages/blueprint.d.ts.map +1 -0
  106. package/dist/pipeline/stages/{ralplan.js → blueprint.js} +16 -16
  107. package/dist/pipeline/stages/blueprint.js.map +1 -0
  108. package/dist/pipeline/stages/code-review.d.ts +2 -2
  109. package/dist/pipeline/stages/code-review.js +6 -6
  110. package/dist/pipeline/stages/code-review.js.map +1 -1
  111. package/dist/pipeline/stages/forge-verify.d.ts +50 -0
  112. package/dist/pipeline/stages/forge-verify.d.ts.map +1 -0
  113. package/dist/pipeline/stages/{ralph-verify.js → forge-verify.js} +21 -24
  114. package/dist/pipeline/stages/forge-verify.js.map +1 -0
  115. package/dist/pipeline/stages/team-exec.d.ts +1 -1
  116. package/dist/pipeline/stages/team-exec.js +19 -19
  117. package/dist/pipeline/stages/team-exec.js.map +1 -1
  118. package/dist/pipeline/types.d.ts +12 -12
  119. package/dist/pipeline/types.d.ts.map +1 -1
  120. package/dist/pipeline/types.js +1 -1
  121. package/dist/planning/artifacts.d.ts +3 -4
  122. package/dist/planning/artifacts.d.ts.map +1 -1
  123. package/dist/planning/artifacts.js +2 -3
  124. package/dist/planning/artifacts.js.map +1 -1
  125. package/dist/question/policy.js +1 -1
  126. package/dist/runtime/bridge.d.ts.map +1 -1
  127. package/dist/runtime/bridge.js +70 -13
  128. package/dist/runtime/bridge.js.map +1 -1
  129. package/dist/scripts/codex-native-hook.js +30 -30
  130. package/dist/scripts/codex-native-hook.js.map +1 -1
  131. package/dist/scripts/eval/eval-cross-server-party-flow.d.ts +3 -0
  132. package/dist/scripts/eval/eval-cross-server-party-flow.d.ts.map +1 -0
  133. package/dist/scripts/eval/eval-cross-server-party-flow.js +12 -0
  134. package/dist/scripts/eval/eval-cross-server-party-flow.js.map +1 -0
  135. package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts +3 -0
  136. package/dist/scripts/eval/eval-gui-onboarding-clarity.d.ts.map +1 -0
  137. package/dist/scripts/eval/eval-gui-onboarding-clarity.js +17 -0
  138. package/dist/scripts/eval/eval-gui-onboarding-clarity.js.map +1 -0
  139. package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts +3 -0
  140. package/dist/scripts/eval/eval-liveops-reward-loop-balance.d.ts.map +1 -0
  141. package/dist/scripts/eval/eval-liveops-reward-loop-balance.js +12 -0
  142. package/dist/scripts/eval/eval-liveops-reward-loop-balance.js.map +1 -0
  143. package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts +3 -0
  144. package/dist/scripts/eval/eval-profile-datastore-recovery.d.ts.map +1 -0
  145. package/dist/scripts/eval/eval-profile-datastore-recovery.js +17 -0
  146. package/dist/scripts/eval/eval-profile-datastore-recovery.js.map +1 -0
  147. package/dist/scripts/eval/eval-remote-contract-hardening.d.ts +3 -0
  148. package/dist/scripts/eval/eval-remote-contract-hardening.d.ts.map +1 -0
  149. package/dist/scripts/eval/eval-remote-contract-hardening.js +17 -0
  150. package/dist/scripts/eval/eval-remote-contract-hardening.js.map +1 -0
  151. package/dist/scripts/notify-fallback-watcher.js +140 -139
  152. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  153. package/dist/scripts/notify-hook/forge-session-resume.d.ts +23 -0
  154. package/dist/scripts/notify-hook/{ralph-session-resume.d.ts.map → forge-session-resume.d.ts.map} +1 -1
  155. package/dist/scripts/notify-hook/{ralph-session-resume.js → forge-session-resume.js} +37 -36
  156. package/dist/scripts/notify-hook/{ralph-session-resume.js.map → forge-session-resume.js.map} +1 -1
  157. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  158. package/dist/scripts/notify-hook/team-dispatch.js +34 -4
  159. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  160. package/dist/scripts/notify-hook/visual-verdict.js +3 -3
  161. package/dist/scripts/notify-hook.js +9 -9
  162. package/dist/scripts/run-test-files.js +1 -1
  163. package/dist/scripts/run-test-files.js.map +1 -1
  164. package/dist/scripts/surface-taxonomy.d.ts +23 -0
  165. package/dist/scripts/surface-taxonomy.d.ts.map +1 -0
  166. package/dist/scripts/surface-taxonomy.js +271 -0
  167. package/dist/scripts/surface-taxonomy.js.map +1 -0
  168. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  169. package/dist/scripts/sync-plugin-mirror.js +5 -4
  170. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  171. package/dist/scripts/tmux-hook-engine.d.ts +1 -1
  172. package/dist/scripts/tmux-hook-engine.d.ts.map +1 -1
  173. package/dist/scripts/tmux-hook-engine.js +29 -20
  174. package/dist/scripts/tmux-hook-engine.js.map +1 -1
  175. package/dist/state/operations.d.ts +1 -1
  176. package/dist/state/operations.d.ts.map +1 -1
  177. package/dist/state/operations.js +18 -18
  178. package/dist/state/operations.js.map +1 -1
  179. package/dist/state/skill-active.d.ts +13 -1
  180. package/dist/state/skill-active.d.ts.map +1 -1
  181. package/dist/state/skill-active.js +38 -17
  182. package/dist/state/skill-active.js.map +1 -1
  183. package/dist/state/workflow-transition.d.ts +6 -5
  184. package/dist/state/workflow-transition.d.ts.map +1 -1
  185. package/dist/state/workflow-transition.js +27 -15
  186. package/dist/state/workflow-transition.js.map +1 -1
  187. package/dist/team/contracts.d.ts +1 -1
  188. package/dist/team/contracts.js +2 -2
  189. package/dist/team/followup-planner.d.ts +2 -2
  190. package/dist/team/followup-planner.d.ts.map +1 -1
  191. package/dist/team/followup-planner.js +16 -14
  192. package/dist/team/followup-planner.js.map +1 -1
  193. package/dist/team/idle-nudge.d.ts.map +1 -1
  194. package/dist/team/idle-nudge.js +3 -2
  195. package/dist/team/idle-nudge.js.map +1 -1
  196. package/dist/team/leader-activity.js +1 -1
  197. package/dist/team/model-contract.d.ts.map +1 -1
  198. package/dist/team/model-contract.js +4 -1
  199. package/dist/team/model-contract.js.map +1 -1
  200. package/dist/team/orchestrator.js +4 -4
  201. package/dist/team/orchestrator.js.map +1 -1
  202. package/dist/team/role-router.js +3 -3
  203. package/dist/team/role-router.js.map +1 -1
  204. package/dist/team/state/dispatch.d.ts.map +1 -1
  205. package/dist/team/state/dispatch.js +4 -1
  206. package/dist/team/state/dispatch.js.map +1 -1
  207. package/dist/team/tmux-session.d.ts +4 -0
  208. package/dist/team/tmux-session.d.ts.map +1 -1
  209. package/dist/team/tmux-session.js +42 -9
  210. package/dist/team/tmux-session.js.map +1 -1
  211. package/dist/team/worktree.d.ts +1 -1
  212. package/dist/utils/platform-command.d.ts.map +1 -1
  213. package/dist/utils/platform-command.js +9 -0
  214. package/dist/utils/platform-command.js.map +1 -1
  215. package/dist/verification/verifier.d.ts +1 -1
  216. package/dist/verification/verifier.js +2 -2
  217. package/docs/STATE_MODEL.md +24 -24
  218. package/docs/agents.html +8 -16
  219. package/docs/archive/README.md +15 -0
  220. package/docs/{prompt-migration-changelog.md → archive/prompt-migration-changelog.md} +0 -11
  221. package/docs/{release-body-0.9.0.md → archive/release-body-0.9.0.md} +6 -24
  222. package/docs/{release-body-0.9.1.md → archive/release-body-0.9.1.md} +3 -3
  223. package/docs/codex-native-hooks.md +4 -4
  224. package/docs/contracts/forge-cancel-contract.md +20 -0
  225. package/docs/contracts/forge-state-contract.md +52 -0
  226. package/docs/contracts/multi-state-transition-contract.md +5 -5
  227. package/docs/contracts/multi-state-transition-review.md +3 -3
  228. package/docs/contracts/repo-aware-team-dag-decomposition.md +1 -1
  229. package/docs/contracts/rust-runtime-thin-adapter-contract.md +1 -1
  230. package/docs/contracts/team-startup-dispatch-latency.md +1 -1
  231. package/docs/getting-started.html +11 -1
  232. package/docs/guidance-schema.md +6 -3
  233. package/docs/index.html +55 -4
  234. package/docs/integrations.html +4 -3
  235. package/docs/issues/team-forge-followup-team.md +38 -0
  236. package/docs/openclaw-integration.md +2 -2
  237. package/docs/prompt-guidance-contract.md +11 -11
  238. package/docs/prs/{dev-deprecate-team-ralph.md → dev-deprecate-team-forge.md} +27 -27
  239. package/docs/prs/{dev-fix-ralph-live-pane-invariant.md → dev-fix-forge-live-pane-invariant.md} +7 -7
  240. package/docs/prs/{dev-team-ralph-workflow-positioning.md → dev-team-forge-workflow-positioning.md} +7 -7
  241. package/docs/qa/forge-persistence-gate.md +20 -0
  242. package/docs/qa/rust-runtime-thin-adapter-gate.md +31 -40
  243. package/docs/readme/README.de.md +14 -0
  244. package/docs/readme/README.el.md +14 -0
  245. package/docs/readme/README.es.md +14 -0
  246. package/docs/readme/README.fr.md +14 -0
  247. package/docs/readme/README.it.md +14 -0
  248. package/docs/readme/README.ja.md +14 -0
  249. package/docs/readme/README.ko.md +14 -0
  250. package/docs/readme/README.pl.md +14 -0
  251. package/docs/readme/README.pt.md +14 -0
  252. package/docs/readme/README.ru.md +14 -0
  253. package/docs/readme/README.tr.md +14 -0
  254. package/docs/readme/README.uk.md +14 -0
  255. package/docs/readme/README.vi.md +14 -0
  256. package/docs/readme/README.zh-TW.md +14 -0
  257. package/docs/readme/README.zh.md +14 -0
  258. package/docs/readme/rcs-cover.svg +75 -0
  259. package/docs/reference/canonical-vocabulary.md +106 -0
  260. package/docs/reference/forge-parity-matrix.md +26 -0
  261. package/docs/reference/forge-upstream-baseline.md +32 -0
  262. package/docs/reference/rcs-config-schema-routing.md +5 -5
  263. package/docs/reference/roblox-pre-action-protocol.md +4 -0
  264. package/docs/reference/roblox-taxonomy-migration-plan.md +46 -0
  265. package/docs/reference/roblox-workspace-standard.md +83 -0
  266. package/docs/reference/robloxstudio-mcp-compatibility.md +117 -0
  267. package/docs/reference/semantic-design-system.md +110 -0
  268. package/docs/reference/surface-map.md +131 -0
  269. package/docs/reference/team-allocation-rebalance-policy.md +1 -1
  270. package/docs/release-notes-v0.1.0.md +1 -1
  271. package/docs/release-notes-v0.1.1.md +49 -0
  272. package/docs/release-notes-v0.1.6.md +27 -0
  273. package/docs/reports/open-prs-dev-readiness-2026-04-09.md +2 -2
  274. package/docs/shared/agent-tiers.md +3 -3
  275. package/docs/skills.html +10 -12
  276. package/docs/troubleshooting.md +1 -1
  277. package/package.json +20 -13
  278. package/plugins/roblox-ai-os-creator-skills/.codex-plugin/plugin.json +1 -1
  279. package/plugins/roblox-ai-os-creator-skills/docs/reference/roblox-pre-action-protocol.md +4 -0
  280. package/plugins/roblox-ai-os-creator-skills/skills/ai-slop-cleaner/SKILL.md +14 -7
  281. package/plugins/roblox-ai-os-creator-skills/skills/analyze/SKILL.md +9 -2
  282. package/plugins/roblox-ai-os-creator-skills/skills/ask-claude/SKILL.md +7 -0
  283. package/plugins/roblox-ai-os-creator-skills/skills/ask-gemini/SKILL.md +7 -0
  284. package/plugins/roblox-ai-os-creator-skills/skills/autoforge/SKILL.md +7 -0
  285. package/plugins/roblox-ai-os-creator-skills/skills/autopilot/SKILL.md +48 -41
  286. package/plugins/roblox-ai-os-creator-skills/skills/autoresearch/SKILL.md +8 -1
  287. package/plugins/roblox-ai-os-creator-skills/skills/blueprint/SKILL.md +227 -9
  288. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-loop/SKILL.md +7 -0
  289. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-psych/SKILL.md +7 -0
  290. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-retention/SKILL.md +7 -0
  291. package/plugins/roblox-ai-os-creator-skills/skills/blueprint-social/SKILL.md +7 -0
  292. package/plugins/roblox-ai-os-creator-skills/skills/brief/SKILL.md +7 -0
  293. package/plugins/roblox-ai-os-creator-skills/skills/brief-audience/SKILL.md +7 -0
  294. package/plugins/roblox-ai-os-creator-skills/skills/brief-motivation/SKILL.md +7 -0
  295. package/plugins/roblox-ai-os-creator-skills/skills/cancel/SKILL.md +59 -52
  296. package/plugins/roblox-ai-os-creator-skills/skills/code-review/SKILL.md +30 -24
  297. package/plugins/roblox-ai-os-creator-skills/skills/configure-notifications/SKILL.md +7 -0
  298. package/plugins/roblox-ai-os-creator-skills/skills/crew/SKILL.md +7 -0
  299. package/plugins/roblox-ai-os-creator-skills/skills/deep-interview/SKILL.md +25 -18
  300. package/plugins/roblox-ai-os-creator-skills/skills/doctor/SKILL.md +7 -0
  301. package/plugins/roblox-ai-os-creator-skills/skills/forge/SKILL.md +174 -11
  302. package/plugins/roblox-ai-os-creator-skills/skills/forge-community/SKILL.md +7 -0
  303. package/plugins/roblox-ai-os-creator-skills/skills/forge-daily-loop/SKILL.md +7 -0
  304. package/plugins/roblox-ai-os-creator-skills/skills/forge-event-loop/SKILL.md +7 -0
  305. package/plugins/roblox-ai-os-creator-skills/skills/forge-fomo/SKILL.md +7 -0
  306. package/plugins/roblox-ai-os-creator-skills/skills/forge-mastery/SKILL.md +7 -0
  307. package/plugins/roblox-ai-os-creator-skills/skills/forge-progression/SKILL.md +7 -0
  308. package/plugins/roblox-ai-os-creator-skills/skills/forge-reward-loop/SKILL.md +7 -0
  309. package/plugins/roblox-ai-os-creator-skills/skills/forge-status/SKILL.md +7 -0
  310. package/plugins/roblox-ai-os-creator-skills/skills/help/SKILL.md +8 -1
  311. package/plugins/roblox-ai-os-creator-skills/skills/hud/SKILL.md +16 -9
  312. package/plugins/roblox-ai-os-creator-skills/skills/note/SKILL.md +8 -1
  313. package/plugins/roblox-ai-os-creator-skills/skills/pipeline/SKILL.md +18 -11
  314. package/plugins/roblox-ai-os-creator-skills/skills/plan/SKILL.md +36 -29
  315. package/plugins/roblox-ai-os-creator-skills/skills/rcs-setup/SKILL.md +8 -1
  316. package/plugins/roblox-ai-os-creator-skills/skills/security-review/SKILL.md +120 -236
  317. package/plugins/roblox-ai-os-creator-skills/skills/skill/SKILL.md +20 -13
  318. package/plugins/roblox-ai-os-creator-skills/skills/team/SKILL.md +17 -11
  319. package/plugins/roblox-ai-os-creator-skills/skills/trace/SKILL.md +7 -0
  320. package/plugins/roblox-ai-os-creator-skills/skills/ultraqa/SKILL.md +10 -3
  321. package/plugins/roblox-ai-os-creator-skills/skills/ultrawork/SKILL.md +19 -12
  322. package/plugins/roblox-ai-os-creator-skills/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
  323. package/plugins/roblox-ai-os-creator-skills/skills/visual-verdict/SKILL.md +9 -2
  324. package/plugins/roblox-ai-os-creator-skills/skills/wiki/SKILL.md +10 -3
  325. package/plugins/roblox-ai-os-creator-skills/skills/worker/SKILL.md +16 -7
  326. package/plugins/roblox-ai-os-creator-skills/templates/roblox/pre-action-plan.md +1 -0
  327. package/prompts/analyst.md +7 -0
  328. package/prompts/architect.md +11 -4
  329. package/prompts/build-fixer.md +7 -0
  330. package/prompts/code-reviewer.md +9 -2
  331. package/prompts/code-simplifier.md +4 -0
  332. package/prompts/critic.md +13 -6
  333. package/prompts/debugger.md +8 -1
  334. package/prompts/dependency-expert.md +8 -1
  335. package/prompts/designer.md +20 -10
  336. package/prompts/executor.md +7 -0
  337. package/prompts/explore-harness.md +7 -0
  338. package/prompts/explore.md +7 -0
  339. package/prompts/git-master.md +8 -1
  340. package/prompts/planner.md +10 -3
  341. package/prompts/researcher.md +7 -0
  342. package/prompts/security-reviewer.md +76 -92
  343. package/prompts/sisyphus-lite.md +7 -0
  344. package/prompts/team-executor.md +7 -0
  345. package/prompts/team-orchestrator.md +9 -2
  346. package/prompts/test-engineer.md +11 -3
  347. package/prompts/verifier.md +7 -0
  348. package/prompts/vision.md +9 -2
  349. package/prompts/writer.md +11 -4
  350. package/skills/.agents/skills/roblox-animations/SKILL.md +220 -0
  351. package/skills/.agents/skills/roblox-datastores/SKILL.md +219 -0
  352. package/skills/.agents/skills/roblox-gui/SKILL.md +192 -0
  353. package/skills/.agents/skills/roblox-monetization/SKILL.md +208 -0
  354. package/skills/.agents/skills/roblox-performance/SKILL.md +230 -0
  355. package/skills/.agents/skills/roblox-remote-events/SKILL.md +199 -0
  356. package/skills/.agents/skills/roblox-security/SKILL.md +236 -0
  357. package/skills/ai-slop-cleaner/SKILL.md +14 -7
  358. package/skills/analyze/SKILL.md +9 -2
  359. package/skills/ask-claude/SKILL.md +7 -0
  360. package/skills/ask-gemini/SKILL.md +7 -0
  361. package/skills/autoforge/SKILL.md +7 -0
  362. package/skills/autopilot/SKILL.md +48 -41
  363. package/skills/autoresearch/SKILL.md +8 -1
  364. package/skills/blueprint/SKILL.md +227 -9
  365. package/skills/blueprint-loop/SKILL.md +7 -0
  366. package/skills/blueprint-psych/SKILL.md +7 -0
  367. package/skills/blueprint-retention/SKILL.md +7 -0
  368. package/skills/blueprint-social/SKILL.md +7 -0
  369. package/skills/brief/SKILL.md +7 -0
  370. package/skills/brief-audience/SKILL.md +7 -0
  371. package/skills/brief-motivation/SKILL.md +7 -0
  372. package/skills/build-fix/SKILL.md +9 -2
  373. package/skills/cancel/SKILL.md +59 -52
  374. package/skills/code-review/SKILL.md +30 -24
  375. package/skills/configure-notifications/SKILL.md +7 -0
  376. package/skills/crew/SKILL.md +7 -0
  377. package/skills/deep-interview/SKILL.md +25 -18
  378. package/skills/deepsearch/SKILL.md +7 -0
  379. package/skills/doctor/SKILL.md +7 -0
  380. package/skills/ecomode/SKILL.md +9 -2
  381. package/skills/forge/SKILL.md +174 -11
  382. package/skills/forge-community/SKILL.md +7 -0
  383. package/skills/forge-daily-loop/SKILL.md +7 -0
  384. package/skills/forge-event-loop/SKILL.md +7 -0
  385. package/skills/forge-fomo/SKILL.md +7 -0
  386. package/skills/{ralph-init → forge-init}/SKILL.md +20 -13
  387. package/skills/forge-mastery/SKILL.md +7 -0
  388. package/skills/forge-progression/SKILL.md +7 -0
  389. package/skills/forge-reward-loop/SKILL.md +7 -0
  390. package/skills/forge-status/SKILL.md +7 -0
  391. package/skills/git-master/SKILL.md +7 -0
  392. package/skills/help/SKILL.md +8 -1
  393. package/skills/hud/SKILL.md +16 -9
  394. package/skills/note/SKILL.md +8 -1
  395. package/skills/pipeline/SKILL.md +18 -11
  396. package/skills/plan/SKILL.md +36 -29
  397. package/skills/rcs-setup/SKILL.md +8 -1
  398. package/skills/review/SKILL.md +7 -0
  399. package/skills/security-review/SKILL.md +120 -236
  400. package/skills/skill/SKILL.md +20 -13
  401. package/skills/skills-lock.json +47 -0
  402. package/skills/swarm/SKILL.md +8 -1
  403. package/skills/tdd/SKILL.md +7 -0
  404. package/skills/team/SKILL.md +17 -11
  405. package/skills/trace/SKILL.md +7 -0
  406. package/skills/ultraqa/SKILL.md +10 -3
  407. package/skills/ultrawork/SKILL.md +19 -12
  408. package/skills/{visual-ralph → visual-forge}/SKILL.md +36 -27
  409. package/skills/visual-verdict/SKILL.md +9 -2
  410. package/skills/web-clone/SKILL.md +14 -7
  411. package/skills/wiki/SKILL.md +10 -3
  412. package/skills/worker/SKILL.md +16 -7
  413. package/src/scripts/__tests__/codex-native-hook.test.ts +386 -319
  414. package/src/scripts/__tests__/run-test-files.test.ts +6 -4
  415. package/src/scripts/__tests__/verify-native-agents.test.ts +16 -16
  416. package/src/scripts/codex-native-hook.ts +34 -34
  417. package/src/scripts/eval/eval-cross-server-party-flow.ts +14 -0
  418. package/src/scripts/eval/eval-gui-onboarding-clarity.ts +20 -0
  419. package/src/scripts/eval/eval-liveops-reward-loop-balance.ts +14 -0
  420. package/src/scripts/eval/eval-profile-datastore-recovery.ts +20 -0
  421. package/src/scripts/eval/eval-remote-contract-hardening.ts +20 -0
  422. package/src/scripts/notify-fallback-watcher.ts +147 -146
  423. package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +24 -10
  424. package/src/scripts/notify-hook/{ralph-session-resume.ts → forge-session-resume.ts} +45 -43
  425. package/src/scripts/notify-hook/team-dispatch.ts +31 -4
  426. package/src/scripts/notify-hook/visual-verdict.ts +3 -3
  427. package/src/scripts/notify-hook.ts +10 -10
  428. package/src/scripts/run-test-files.ts +1 -1
  429. package/src/scripts/surface-taxonomy.ts +316 -0
  430. package/src/scripts/sync-plugin-mirror.ts +5 -4
  431. package/src/scripts/tmux-hook-engine.ts +31 -19
  432. package/templates/AGENTS.md +24 -15
  433. package/templates/catalog-manifest.json +5 -88
  434. package/templates/roblox/pre-action-plan.md +1 -0
  435. package/templates/roblox/robloxstudio-mcp.codex.json +18 -0
  436. package/templates/roblox/robloxstudio-mcp.windows.json +22 -0
  437. package/dist/adapt/__tests__/foundation.test.d.ts +0 -2
  438. package/dist/adapt/__tests__/foundation.test.d.ts.map +0 -1
  439. package/dist/adapt/__tests__/foundation.test.js +0 -171
  440. package/dist/adapt/__tests__/foundation.test.js.map +0 -1
  441. package/dist/adapt/__tests__/hermes.test.d.ts +0 -2
  442. package/dist/adapt/__tests__/hermes.test.d.ts.map +0 -1
  443. package/dist/adapt/__tests__/hermes.test.js +0 -137
  444. package/dist/adapt/__tests__/hermes.test.js.map +0 -1
  445. package/dist/agents/__tests__/definitions.test.d.ts +0 -2
  446. package/dist/agents/__tests__/definitions.test.d.ts.map +0 -1
  447. package/dist/agents/__tests__/definitions.test.js +0 -62
  448. package/dist/agents/__tests__/definitions.test.js.map +0 -1
  449. package/dist/agents/__tests__/native-config.test.d.ts +0 -2
  450. package/dist/agents/__tests__/native-config.test.d.ts.map +0 -1
  451. package/dist/agents/__tests__/native-config.test.js +0 -278
  452. package/dist/agents/__tests__/native-config.test.js.map +0 -1
  453. package/dist/autoresearch/__tests__/contracts.test.d.ts +0 -2
  454. package/dist/autoresearch/__tests__/contracts.test.d.ts.map +0 -1
  455. package/dist/autoresearch/__tests__/contracts.test.js +0 -127
  456. package/dist/autoresearch/__tests__/contracts.test.js.map +0 -1
  457. package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts +0 -2
  458. package/dist/autoresearch/__tests__/runtime-parity-extra.test.d.ts.map +0 -1
  459. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js +0 -356
  460. package/dist/autoresearch/__tests__/runtime-parity-extra.test.js.map +0 -1
  461. package/dist/autoresearch/__tests__/runtime.test.d.ts +0 -2
  462. package/dist/autoresearch/__tests__/runtime.test.d.ts.map +0 -1
  463. package/dist/autoresearch/__tests__/runtime.test.js +0 -218
  464. package/dist/autoresearch/__tests__/runtime.test.js.map +0 -1
  465. package/dist/autoresearch/__tests__/skill-validation.test.d.ts +0 -2
  466. package/dist/autoresearch/__tests__/skill-validation.test.d.ts.map +0 -1
  467. package/dist/autoresearch/__tests__/skill-validation.test.js +0 -91
  468. package/dist/autoresearch/__tests__/skill-validation.test.js.map +0 -1
  469. package/dist/catalog/__tests__/generator.test.d.ts +0 -2
  470. package/dist/catalog/__tests__/generator.test.d.ts.map +0 -1
  471. package/dist/catalog/__tests__/generator.test.js +0 -49
  472. package/dist/catalog/__tests__/generator.test.js.map +0 -1
  473. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts +0 -2
  474. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts.map +0 -1
  475. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +0 -83
  476. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +0 -1
  477. package/dist/catalog/__tests__/schema.test.d.ts +0 -2
  478. package/dist/catalog/__tests__/schema.test.d.ts.map +0 -1
  479. package/dist/catalog/__tests__/schema.test.js +0 -91
  480. package/dist/catalog/__tests__/schema.test.js.map +0 -1
  481. package/dist/cli/__tests__/adapt-help.test.d.ts +0 -2
  482. package/dist/cli/__tests__/adapt-help.test.d.ts.map +0 -1
  483. package/dist/cli/__tests__/adapt-help.test.js +0 -37
  484. package/dist/cli/__tests__/adapt-help.test.js.map +0 -1
  485. package/dist/cli/__tests__/adapt.test.d.ts +0 -2
  486. package/dist/cli/__tests__/adapt.test.d.ts.map +0 -1
  487. package/dist/cli/__tests__/adapt.test.js +0 -62
  488. package/dist/cli/__tests__/adapt.test.js.map +0 -1
  489. package/dist/cli/__tests__/agents-init.test.d.ts +0 -2
  490. package/dist/cli/__tests__/agents-init.test.d.ts.map +0 -1
  491. package/dist/cli/__tests__/agents-init.test.js +0 -184
  492. package/dist/cli/__tests__/agents-init.test.js.map +0 -1
  493. package/dist/cli/__tests__/agents.test.d.ts +0 -2
  494. package/dist/cli/__tests__/agents.test.d.ts.map +0 -1
  495. package/dist/cli/__tests__/agents.test.js +0 -137
  496. package/dist/cli/__tests__/agents.test.js.map +0 -1
  497. package/dist/cli/__tests__/ask.test.d.ts +0 -2
  498. package/dist/cli/__tests__/ask.test.d.ts.map +0 -1
  499. package/dist/cli/__tests__/ask.test.js +0 -265
  500. package/dist/cli/__tests__/ask.test.js.map +0 -1
  501. package/dist/cli/__tests__/autoresearch-guided.test.d.ts +0 -2
  502. package/dist/cli/__tests__/autoresearch-guided.test.d.ts.map +0 -1
  503. package/dist/cli/__tests__/autoresearch-guided.test.js +0 -365
  504. package/dist/cli/__tests__/autoresearch-guided.test.js.map +0 -1
  505. package/dist/cli/__tests__/autoresearch.test.d.ts +0 -2
  506. package/dist/cli/__tests__/autoresearch.test.d.ts.map +0 -1
  507. package/dist/cli/__tests__/autoresearch.test.js +0 -203
  508. package/dist/cli/__tests__/autoresearch.test.js.map +0 -1
  509. package/dist/cli/__tests__/catalog-contract.test.d.ts +0 -2
  510. package/dist/cli/__tests__/catalog-contract.test.d.ts.map +0 -1
  511. package/dist/cli/__tests__/catalog-contract.test.js +0 -18
  512. package/dist/cli/__tests__/catalog-contract.test.js.map +0 -1
  513. package/dist/cli/__tests__/cleanup.test.d.ts +0 -2
  514. package/dist/cli/__tests__/cleanup.test.d.ts.map +0 -1
  515. package/dist/cli/__tests__/cleanup.test.js +0 -419
  516. package/dist/cli/__tests__/cleanup.test.js.map +0 -1
  517. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts +0 -2
  518. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts.map +0 -1
  519. package/dist/cli/__tests__/codex-plugin-layout.test.js +0 -210
  520. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +0 -1
  521. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +0 -2
  522. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +0 -1
  523. package/dist/cli/__tests__/doctor-context-window-warning.test.js +0 -122
  524. package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +0 -1
  525. package/dist/cli/__tests__/doctor-invalid-config.test.d.ts +0 -2
  526. package/dist/cli/__tests__/doctor-invalid-config.test.d.ts.map +0 -1
  527. package/dist/cli/__tests__/doctor-invalid-config.test.js +0 -52
  528. package/dist/cli/__tests__/doctor-invalid-config.test.js.map +0 -1
  529. package/dist/cli/__tests__/doctor-team.test.d.ts +0 -2
  530. package/dist/cli/__tests__/doctor-team.test.d.ts.map +0 -1
  531. package/dist/cli/__tests__/doctor-team.test.js +0 -299
  532. package/dist/cli/__tests__/doctor-team.test.js.map +0 -1
  533. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +0 -2
  534. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +0 -1
  535. package/dist/cli/__tests__/doctor-warning-copy.test.js +0 -438
  536. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +0 -1
  537. package/dist/cli/__tests__/error-handling-warnings.test.d.ts +0 -2
  538. package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +0 -1
  539. package/dist/cli/__tests__/error-handling-warnings.test.js +0 -52
  540. package/dist/cli/__tests__/error-handling-warnings.test.js.map +0 -1
  541. package/dist/cli/__tests__/exec.test.d.ts +0 -2
  542. package/dist/cli/__tests__/exec.test.d.ts.map +0 -1
  543. package/dist/cli/__tests__/exec.test.js +0 -213
  544. package/dist/cli/__tests__/exec.test.js.map +0 -1
  545. package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts +0 -2
  546. package/dist/cli/__tests__/explore-windows-diagnostics.test.d.ts.map +0 -1
  547. package/dist/cli/__tests__/explore-windows-diagnostics.test.js +0 -17
  548. package/dist/cli/__tests__/explore-windows-diagnostics.test.js.map +0 -1
  549. package/dist/cli/__tests__/explore.test.d.ts +0 -2
  550. package/dist/cli/__tests__/explore.test.d.ts.map +0 -1
  551. package/dist/cli/__tests__/explore.test.js +0 -1090
  552. package/dist/cli/__tests__/explore.test.js.map +0 -1
  553. package/dist/cli/__tests__/hooks.test.d.ts +0 -2
  554. package/dist/cli/__tests__/hooks.test.d.ts.map +0 -1
  555. package/dist/cli/__tests__/hooks.test.js +0 -55
  556. package/dist/cli/__tests__/hooks.test.js.map +0 -1
  557. package/dist/cli/__tests__/index.test.d.ts +0 -2
  558. package/dist/cli/__tests__/index.test.d.ts.map +0 -1
  559. package/dist/cli/__tests__/index.test.js +0 -2259
  560. package/dist/cli/__tests__/index.test.js.map +0 -1
  561. package/dist/cli/__tests__/launch-fallback.test.d.ts +0 -2
  562. package/dist/cli/__tests__/launch-fallback.test.d.ts.map +0 -1
  563. package/dist/cli/__tests__/launch-fallback.test.js +0 -661
  564. package/dist/cli/__tests__/launch-fallback.test.js.map +0 -1
  565. package/dist/cli/__tests__/lifecycle-notifications.test.d.ts +0 -2
  566. package/dist/cli/__tests__/lifecycle-notifications.test.d.ts.map +0 -1
  567. package/dist/cli/__tests__/lifecycle-notifications.test.js +0 -48
  568. package/dist/cli/__tests__/lifecycle-notifications.test.js.map +0 -1
  569. package/dist/cli/__tests__/list.test.d.ts +0 -2
  570. package/dist/cli/__tests__/list.test.d.ts.map +0 -1
  571. package/dist/cli/__tests__/list.test.js +0 -38
  572. package/dist/cli/__tests__/list.test.js.map +0 -1
  573. package/dist/cli/__tests__/mcp-parity.test.d.ts +0 -2
  574. package/dist/cli/__tests__/mcp-parity.test.d.ts.map +0 -1
  575. package/dist/cli/__tests__/mcp-parity.test.js +0 -228
  576. package/dist/cli/__tests__/mcp-parity.test.js.map +0 -1
  577. package/dist/cli/__tests__/mcp-serve.test.d.ts +0 -2
  578. package/dist/cli/__tests__/mcp-serve.test.d.ts.map +0 -1
  579. package/dist/cli/__tests__/mcp-serve.test.js +0 -64
  580. package/dist/cli/__tests__/mcp-serve.test.js.map +0 -1
  581. package/dist/cli/__tests__/native-assets.test.d.ts +0 -2
  582. package/dist/cli/__tests__/native-assets.test.d.ts.map +0 -1
  583. package/dist/cli/__tests__/native-assets.test.js +0 -308
  584. package/dist/cli/__tests__/native-assets.test.js.map +0 -1
  585. package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts +0 -2
  586. package/dist/cli/__tests__/native-hook-dispatch-contract.test.d.ts.map +0 -1
  587. package/dist/cli/__tests__/native-hook-dispatch-contract.test.js +0 -11
  588. package/dist/cli/__tests__/native-hook-dispatch-contract.test.js.map +0 -1
  589. package/dist/cli/__tests__/nested-help-routing.test.d.ts +0 -2
  590. package/dist/cli/__tests__/nested-help-routing.test.d.ts.map +0 -1
  591. package/dist/cli/__tests__/nested-help-routing.test.js +0 -96
  592. package/dist/cli/__tests__/nested-help-routing.test.js.map +0 -1
  593. package/dist/cli/__tests__/package-bin-contract.test.d.ts +0 -2
  594. package/dist/cli/__tests__/package-bin-contract.test.d.ts.map +0 -1
  595. package/dist/cli/__tests__/package-bin-contract.test.js +0 -177
  596. package/dist/cli/__tests__/package-bin-contract.test.js.map +0 -1
  597. package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts +0 -3
  598. package/dist/cli/__tests__/packaged-explore-harness-lock.d.ts.map +0 -1
  599. package/dist/cli/__tests__/packaged-explore-harness-lock.js +0 -67
  600. package/dist/cli/__tests__/packaged-explore-harness-lock.js.map +0 -1
  601. package/dist/cli/__tests__/packaged-script-resolution.test.d.ts +0 -2
  602. package/dist/cli/__tests__/packaged-script-resolution.test.d.ts.map +0 -1
  603. package/dist/cli/__tests__/packaged-script-resolution.test.js +0 -19
  604. package/dist/cli/__tests__/packaged-script-resolution.test.js.map +0 -1
  605. package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts +0 -2
  606. package/dist/cli/__tests__/prompt-skill-sanitization.test.d.ts.map +0 -1
  607. package/dist/cli/__tests__/prompt-skill-sanitization.test.js +0 -48
  608. package/dist/cli/__tests__/prompt-skill-sanitization.test.js.map +0 -1
  609. package/dist/cli/__tests__/question.test.d.ts +0 -2
  610. package/dist/cli/__tests__/question.test.d.ts.map +0 -1
  611. package/dist/cli/__tests__/question.test.js +0 -633
  612. package/dist/cli/__tests__/question.test.js.map +0 -1
  613. package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts +0 -2
  614. package/dist/cli/__tests__/ralph-deslop-contract.test.d.ts.map +0 -1
  615. package/dist/cli/__tests__/ralph-deslop-contract.test.js +0 -28
  616. package/dist/cli/__tests__/ralph-deslop-contract.test.js.map +0 -1
  617. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +0 -2
  618. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +0 -1
  619. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +0 -24
  620. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +0 -1
  621. package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts +0 -2
  622. package/dist/cli/__tests__/ralph-prd-smoke.test.d.ts.map +0 -1
  623. package/dist/cli/__tests__/ralph-prd-smoke.test.js +0 -167
  624. package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +0 -1
  625. package/dist/cli/__tests__/ralph.test.d.ts +0 -2
  626. package/dist/cli/__tests__/ralph.test.d.ts.map +0 -1
  627. package/dist/cli/__tests__/ralph.test.js +0 -256
  628. package/dist/cli/__tests__/ralph.test.js.map +0 -1
  629. package/dist/cli/__tests__/resume.test.d.ts +0 -2
  630. package/dist/cli/__tests__/resume.test.d.ts.map +0 -1
  631. package/dist/cli/__tests__/resume.test.js +0 -84
  632. package/dist/cli/__tests__/resume.test.js.map +0 -1
  633. package/dist/cli/__tests__/session-scoped-runtime.test.d.ts +0 -2
  634. package/dist/cli/__tests__/session-scoped-runtime.test.d.ts.map +0 -1
  635. package/dist/cli/__tests__/session-scoped-runtime.test.js +0 -146
  636. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +0 -1
  637. package/dist/cli/__tests__/session-search-help.test.d.ts +0 -2
  638. package/dist/cli/__tests__/session-search-help.test.d.ts.map +0 -1
  639. package/dist/cli/__tests__/session-search-help.test.js +0 -76
  640. package/dist/cli/__tests__/session-search-help.test.js.map +0 -1
  641. package/dist/cli/__tests__/session-search.test.d.ts +0 -2
  642. package/dist/cli/__tests__/session-search.test.d.ts.map +0 -1
  643. package/dist/cli/__tests__/session-search.test.js +0 -77
  644. package/dist/cli/__tests__/session-search.test.js.map +0 -1
  645. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +0 -2
  646. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +0 -1
  647. package/dist/cli/__tests__/setup-agents-overwrite.test.js +0 -457
  648. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +0 -1
  649. package/dist/cli/__tests__/setup-gh-star.test.d.ts +0 -2
  650. package/dist/cli/__tests__/setup-gh-star.test.d.ts.map +0 -1
  651. package/dist/cli/__tests__/setup-gh-star.test.js +0 -67
  652. package/dist/cli/__tests__/setup-gh-star.test.js.map +0 -1
  653. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts +0 -2
  654. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts.map +0 -1
  655. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +0 -189
  656. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +0 -1
  657. package/dist/cli/__tests__/setup-install-mode.test.d.ts +0 -2
  658. package/dist/cli/__tests__/setup-install-mode.test.d.ts.map +0 -1
  659. package/dist/cli/__tests__/setup-install-mode.test.js +0 -873
  660. package/dist/cli/__tests__/setup-install-mode.test.js.map +0 -1
  661. package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts +0 -2
  662. package/dist/cli/__tests__/setup-prompts-overwrite.test.d.ts.map +0 -1
  663. package/dist/cli/__tests__/setup-prompts-overwrite.test.js +0 -191
  664. package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +0 -1
  665. package/dist/cli/__tests__/setup-refresh.test.d.ts +0 -2
  666. package/dist/cli/__tests__/setup-refresh.test.d.ts.map +0 -1
  667. package/dist/cli/__tests__/setup-refresh.test.js +0 -591
  668. package/dist/cli/__tests__/setup-refresh.test.js.map +0 -1
  669. package/dist/cli/__tests__/setup-scope.test.d.ts +0 -2
  670. package/dist/cli/__tests__/setup-scope.test.d.ts.map +0 -1
  671. package/dist/cli/__tests__/setup-scope.test.js +0 -340
  672. package/dist/cli/__tests__/setup-scope.test.js.map +0 -1
  673. package/dist/cli/__tests__/setup-skill-validation.test.d.ts +0 -2
  674. package/dist/cli/__tests__/setup-skill-validation.test.d.ts.map +0 -1
  675. package/dist/cli/__tests__/setup-skill-validation.test.js +0 -44
  676. package/dist/cli/__tests__/setup-skill-validation.test.js.map +0 -1
  677. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +0 -2
  678. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +0 -1
  679. package/dist/cli/__tests__/setup-skills-overwrite.test.js +0 -295
  680. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +0 -1
  681. package/dist/cli/__tests__/sidecar.test.d.ts +0 -2
  682. package/dist/cli/__tests__/sidecar.test.d.ts.map +0 -1
  683. package/dist/cli/__tests__/sidecar.test.js +0 -24
  684. package/dist/cli/__tests__/sidecar.test.js.map +0 -1
  685. package/dist/cli/__tests__/sparkshell-cli.test.d.ts +0 -2
  686. package/dist/cli/__tests__/sparkshell-cli.test.d.ts.map +0 -1
  687. package/dist/cli/__tests__/sparkshell-cli.test.js +0 -400
  688. package/dist/cli/__tests__/sparkshell-cli.test.js.map +0 -1
  689. package/dist/cli/__tests__/sparkshell-packaging.test.d.ts +0 -2
  690. package/dist/cli/__tests__/sparkshell-packaging.test.d.ts.map +0 -1
  691. package/dist/cli/__tests__/sparkshell-packaging.test.js +0 -74
  692. package/dist/cli/__tests__/sparkshell-packaging.test.js.map +0 -1
  693. package/dist/cli/__tests__/star-prompt.test.d.ts +0 -2
  694. package/dist/cli/__tests__/star-prompt.test.d.ts.map +0 -1
  695. package/dist/cli/__tests__/star-prompt.test.js +0 -172
  696. package/dist/cli/__tests__/star-prompt.test.js.map +0 -1
  697. package/dist/cli/__tests__/state.test.d.ts +0 -2
  698. package/dist/cli/__tests__/state.test.d.ts.map +0 -1
  699. package/dist/cli/__tests__/state.test.js +0 -46
  700. package/dist/cli/__tests__/state.test.js.map +0 -1
  701. package/dist/cli/__tests__/team-decompose.test.d.ts +0 -2
  702. package/dist/cli/__tests__/team-decompose.test.d.ts.map +0 -1
  703. package/dist/cli/__tests__/team-decompose.test.js +0 -133
  704. package/dist/cli/__tests__/team-decompose.test.js.map +0 -1
  705. package/dist/cli/__tests__/team.test.d.ts +0 -2
  706. package/dist/cli/__tests__/team.test.d.ts.map +0 -1
  707. package/dist/cli/__tests__/team.test.js +0 -1820
  708. package/dist/cli/__tests__/team.test.js.map +0 -1
  709. package/dist/cli/__tests__/uninstall.test.d.ts +0 -2
  710. package/dist/cli/__tests__/uninstall.test.d.ts.map +0 -1
  711. package/dist/cli/__tests__/uninstall.test.js +0 -766
  712. package/dist/cli/__tests__/uninstall.test.js.map +0 -1
  713. package/dist/cli/__tests__/update.test.d.ts +0 -2
  714. package/dist/cli/__tests__/update.test.d.ts.map +0 -1
  715. package/dist/cli/__tests__/update.test.js +0 -589
  716. package/dist/cli/__tests__/update.test.js.map +0 -1
  717. package/dist/cli/__tests__/version-sync-contract.test.d.ts +0 -2
  718. package/dist/cli/__tests__/version-sync-contract.test.d.ts.map +0 -1
  719. package/dist/cli/__tests__/version-sync-contract.test.js +0 -41
  720. package/dist/cli/__tests__/version-sync-contract.test.js.map +0 -1
  721. package/dist/cli/__tests__/version.test.d.ts +0 -2
  722. package/dist/cli/__tests__/version.test.d.ts.map +0 -1
  723. package/dist/cli/__tests__/version.test.js +0 -21
  724. package/dist/cli/__tests__/version.test.js.map +0 -1
  725. package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts +0 -2
  726. package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts.map +0 -1
  727. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +0 -31
  728. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +0 -1
  729. package/dist/cli/ralph.d.ts +0 -17
  730. package/dist/compat/__tests__/doctor-contract.test.d.ts +0 -2
  731. package/dist/compat/__tests__/doctor-contract.test.d.ts.map +0 -1
  732. package/dist/compat/__tests__/doctor-contract.test.js +0 -108
  733. package/dist/compat/__tests__/doctor-contract.test.js.map +0 -1
  734. package/dist/compat/__tests__/rust-runtime-compat.test.d.ts +0 -2
  735. package/dist/compat/__tests__/rust-runtime-compat.test.d.ts.map +0 -1
  736. package/dist/compat/__tests__/rust-runtime-compat.test.js +0 -218
  737. package/dist/compat/__tests__/rust-runtime-compat.test.js.map +0 -1
  738. package/dist/config/__tests__/codex-hooks.test.d.ts +0 -2
  739. package/dist/config/__tests__/codex-hooks.test.d.ts.map +0 -1
  740. package/dist/config/__tests__/codex-hooks.test.js +0 -77
  741. package/dist/config/__tests__/codex-hooks.test.js.map +0 -1
  742. package/dist/config/__tests__/generator-idempotent.test.d.ts +0 -2
  743. package/dist/config/__tests__/generator-idempotent.test.d.ts.map +0 -1
  744. package/dist/config/__tests__/generator-idempotent.test.js +0 -882
  745. package/dist/config/__tests__/generator-idempotent.test.js.map +0 -1
  746. package/dist/config/__tests__/generator-notify.test.d.ts +0 -2
  747. package/dist/config/__tests__/generator-notify.test.d.ts.map +0 -1
  748. package/dist/config/__tests__/generator-notify.test.js +0 -343
  749. package/dist/config/__tests__/generator-notify.test.js.map +0 -1
  750. package/dist/config/__tests__/generator-status-line-presets.test.d.ts +0 -2
  751. package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +0 -1
  752. package/dist/config/__tests__/generator-status-line-presets.test.js +0 -203
  753. package/dist/config/__tests__/generator-status-line-presets.test.js.map +0 -1
  754. package/dist/config/__tests__/mcp-registry.test.d.ts +0 -2
  755. package/dist/config/__tests__/mcp-registry.test.d.ts.map +0 -1
  756. package/dist/config/__tests__/mcp-registry.test.js +0 -190
  757. package/dist/config/__tests__/mcp-registry.test.js.map +0 -1
  758. package/dist/config/__tests__/models.test.d.ts +0 -2
  759. package/dist/config/__tests__/models.test.d.ts.map +0 -1
  760. package/dist/config/__tests__/models.test.js +0 -224
  761. package/dist/config/__tests__/models.test.js.map +0 -1
  762. package/dist/config/__tests__/wiki-config-contract.test.d.ts +0 -2
  763. package/dist/config/__tests__/wiki-config-contract.test.d.ts.map +0 -1
  764. package/dist/config/__tests__/wiki-config-contract.test.js +0 -19
  765. package/dist/config/__tests__/wiki-config-contract.test.js.map +0 -1
  766. package/dist/document-refresh/__tests__/enforcer.test.d.ts +0 -2
  767. package/dist/document-refresh/__tests__/enforcer.test.d.ts.map +0 -1
  768. package/dist/document-refresh/__tests__/enforcer.test.js +0 -128
  769. package/dist/document-refresh/__tests__/enforcer.test.js.map +0 -1
  770. package/dist/hooks/__tests__/agents-overlay.test.d.ts +0 -8
  771. package/dist/hooks/__tests__/agents-overlay.test.d.ts.map +0 -1
  772. package/dist/hooks/__tests__/agents-overlay.test.js +0 -644
  773. package/dist/hooks/__tests__/agents-overlay.test.js.map +0 -1
  774. package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts +0 -2
  775. package/dist/hooks/__tests__/analyze-routing-contract.test.d.ts.map +0 -1
  776. package/dist/hooks/__tests__/analyze-routing-contract.test.js +0 -45
  777. package/dist/hooks/__tests__/analyze-routing-contract.test.js.map +0 -1
  778. package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts +0 -2
  779. package/dist/hooks/__tests__/analyze-skill-contract.test.d.ts.map +0 -1
  780. package/dist/hooks/__tests__/analyze-skill-contract.test.js +0 -48
  781. package/dist/hooks/__tests__/analyze-skill-contract.test.js.map +0 -1
  782. package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts +0 -2
  783. package/dist/hooks/__tests__/anti-slop-workflow.test.d.ts.map +0 -1
  784. package/dist/hooks/__tests__/anti-slop-workflow.test.js +0 -146
  785. package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +0 -1
  786. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts +0 -2
  787. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts.map +0 -1
  788. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +0 -37
  789. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +0 -1
  790. package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts +0 -2
  791. package/dist/hooks/__tests__/clawhip-event-contract.test.d.ts.map +0 -1
  792. package/dist/hooks/__tests__/clawhip-event-contract.test.js +0 -37
  793. package/dist/hooks/__tests__/clawhip-event-contract.test.js.map +0 -1
  794. package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts +0 -2
  795. package/dist/hooks/__tests__/code-review-skill-contract.test.d.ts.map +0 -1
  796. package/dist/hooks/__tests__/code-review-skill-contract.test.js +0 -56
  797. package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +0 -1
  798. package/dist/hooks/__tests__/codebase-map.test.d.ts +0 -8
  799. package/dist/hooks/__tests__/codebase-map.test.d.ts.map +0 -1
  800. package/dist/hooks/__tests__/codebase-map.test.js +0 -218
  801. package/dist/hooks/__tests__/codebase-map.test.js.map +0 -1
  802. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +0 -18
  803. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +0 -1
  804. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +0 -234
  805. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +0 -1
  806. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts +0 -2
  807. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts.map +0 -1
  808. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js +0 -20
  809. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js.map +0 -1
  810. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +0 -2
  811. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +0 -1
  812. package/dist/hooks/__tests__/deep-interview-contract.test.js +0 -213
  813. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +0 -1
  814. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts +0 -2
  815. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.d.ts.map +0 -1
  816. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js +0 -43
  817. package/dist/hooks/__tests__/explicit-terminal-stop-docs-contract.test.js.map +0 -1
  818. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts +0 -2
  819. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.d.ts.map +0 -1
  820. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js +0 -38
  821. package/dist/hooks/__tests__/explicit-terminal-stop-model-docs-contract.test.js.map +0 -1
  822. package/dist/hooks/__tests__/explore-routing.test.d.ts +0 -2
  823. package/dist/hooks/__tests__/explore-routing.test.d.ts.map +0 -1
  824. package/dist/hooks/__tests__/explore-routing.test.js +0 -43
  825. package/dist/hooks/__tests__/explore-routing.test.js.map +0 -1
  826. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts +0 -2
  827. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.d.ts.map +0 -1
  828. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js +0 -69
  829. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js.map +0 -1
  830. package/dist/hooks/__tests__/keyword-detector.test.d.ts +0 -2
  831. package/dist/hooks/__tests__/keyword-detector.test.d.ts.map +0 -1
  832. package/dist/hooks/__tests__/keyword-detector.test.js +0 -1716
  833. package/dist/hooks/__tests__/keyword-detector.test.js.map +0 -1
  834. package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts +0 -2
  835. package/dist/hooks/__tests__/notify-fallback-watcher.test.d.ts.map +0 -1
  836. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +0 -3898
  837. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +0 -1
  838. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts +0 -2
  839. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.d.ts.map +0 -1
  840. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +0 -786
  841. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +0 -1
  842. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts +0 -2
  843. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.d.ts.map +0 -1
  844. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +0 -2397
  845. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +0 -1
  846. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts +0 -2
  847. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts.map +0 -1
  848. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +0 -160
  849. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +0 -1
  850. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts +0 -2
  851. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts.map +0 -1
  852. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +0 -1178
  853. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +0 -1
  854. package/dist/hooks/__tests__/notify-hook-modules.test.d.ts +0 -9
  855. package/dist/hooks/__tests__/notify-hook-modules.test.d.ts.map +0 -1
  856. package/dist/hooks/__tests__/notify-hook-modules.test.js +0 -529
  857. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +0 -1
  858. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts +0 -2
  859. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.d.ts.map +0 -1
  860. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js +0 -14
  861. package/dist/hooks/__tests__/notify-hook-native-dispatch-contract.test.js.map +0 -1
  862. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts +0 -2
  863. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts.map +0 -1
  864. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +0 -682
  865. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +0 -1
  866. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts +0 -9
  867. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts.map +0 -1
  868. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +0 -255
  869. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +0 -1
  870. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts +0 -2
  871. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts.map +0 -1
  872. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +0 -162
  873. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +0 -1
  874. package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts +0 -2
  875. package/dist/hooks/__tests__/notify-hook-session-scope.test.d.ts.map +0 -1
  876. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +0 -301
  877. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +0 -1
  878. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts +0 -2
  879. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts.map +0 -1
  880. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +0 -1510
  881. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +0 -1
  882. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts +0 -2
  883. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts.map +0 -1
  884. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +0 -2879
  885. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +0 -1
  886. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts +0 -2
  887. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.d.ts.map +0 -1
  888. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +0 -228
  889. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +0 -1
  890. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +0 -2
  891. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +0 -1
  892. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +0 -35
  893. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +0 -1
  894. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts +0 -2
  895. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.d.ts.map +0 -1
  896. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +0 -1589
  897. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +0 -1
  898. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts +0 -10
  899. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.d.ts.map +0 -1
  900. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +0 -0
  901. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +0 -1
  902. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +0 -11
  903. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +0 -1
  904. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +0 -266
  905. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +0 -1
  906. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +0 -2
  907. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +0 -1
  908. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +0 -895
  909. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +0 -1
  910. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +0 -2
  911. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +0 -1
  912. package/dist/hooks/__tests__/openclaw-setup-contract.test.js +0 -61
  913. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +0 -1
  914. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +0 -2
  915. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +0 -1
  916. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +0 -40
  917. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +0 -1
  918. package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts +0 -2
  919. package/dist/hooks/__tests__/prompt-guidance-catalog.test.d.ts.map +0 -1
  920. package/dist/hooks/__tests__/prompt-guidance-catalog.test.js +0 -11
  921. package/dist/hooks/__tests__/prompt-guidance-catalog.test.js.map +0 -1
  922. package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts +0 -2
  923. package/dist/hooks/__tests__/prompt-guidance-contract.test.d.ts.map +0 -1
  924. package/dist/hooks/__tests__/prompt-guidance-contract.test.js +0 -38
  925. package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +0 -1
  926. package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts +0 -2
  927. package/dist/hooks/__tests__/prompt-guidance-fragments.test.d.ts.map +0 -1
  928. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +0 -48
  929. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +0 -1
  930. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts +0 -2
  931. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.d.ts.map +0 -1
  932. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js +0 -11
  933. package/dist/hooks/__tests__/prompt-guidance-scenarios.test.js.map +0 -1
  934. package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts +0 -5
  935. package/dist/hooks/__tests__/prompt-guidance-test-helpers.d.ts.map +0 -1
  936. package/dist/hooks/__tests__/prompt-guidance-test-helpers.js +0 -34
  937. package/dist/hooks/__tests__/prompt-guidance-test-helpers.js.map +0 -1
  938. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts +0 -2
  939. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.d.ts.map +0 -1
  940. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +0 -65
  941. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +0 -1
  942. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts +0 -2
  943. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.d.ts.map +0 -1
  944. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js +0 -38
  945. package/dist/hooks/__tests__/prompt-orchestration-boundary.test.js.map +0 -1
  946. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +0 -2
  947. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +0 -1
  948. package/dist/hooks/__tests__/prompt-refactor-contract.test.js +0 -22
  949. package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +0 -1
  950. package/dist/hooks/__tests__/prompt-team-routing.test.d.ts +0 -2
  951. package/dist/hooks/__tests__/prompt-team-routing.test.d.ts.map +0 -1
  952. package/dist/hooks/__tests__/prompt-team-routing.test.js +0 -49
  953. package/dist/hooks/__tests__/prompt-team-routing.test.js.map +0 -1
  954. package/dist/hooks/__tests__/session.test.d.ts +0 -2
  955. package/dist/hooks/__tests__/session.test.d.ts.map +0 -1
  956. package/dist/hooks/__tests__/session.test.js +0 -322
  957. package/dist/hooks/__tests__/session.test.js.map +0 -1
  958. package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts +0 -2
  959. package/dist/hooks/__tests__/skill-guidance-contract.test.d.ts.map +0 -1
  960. package/dist/hooks/__tests__/skill-guidance-contract.test.js +0 -29
  961. package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +0 -1
  962. package/dist/hooks/__tests__/task-size-detector.test.d.ts +0 -2
  963. package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +0 -1
  964. package/dist/hooks/__tests__/task-size-detector.test.js +0 -330
  965. package/dist/hooks/__tests__/task-size-detector.test.js.map +0 -1
  966. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts +0 -2
  967. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts.map +0 -1
  968. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js +0 -28
  969. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +0 -1
  970. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +0 -2
  971. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +0 -1
  972. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +0 -24
  973. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +0 -1
  974. package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts +0 -2
  975. package/dist/hooks/__tests__/tmux-hook-engine.test.d.ts.map +0 -1
  976. package/dist/hooks/__tests__/tmux-hook-engine.test.js +0 -403
  977. package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +0 -1
  978. package/dist/hooks/__tests__/triage-config.test.d.ts +0 -2
  979. package/dist/hooks/__tests__/triage-config.test.d.ts.map +0 -1
  980. package/dist/hooks/__tests__/triage-config.test.js +0 -211
  981. package/dist/hooks/__tests__/triage-config.test.js.map +0 -1
  982. package/dist/hooks/__tests__/triage-heuristic.test.d.ts +0 -2
  983. package/dist/hooks/__tests__/triage-heuristic.test.d.ts.map +0 -1
  984. package/dist/hooks/__tests__/triage-heuristic.test.js +0 -285
  985. package/dist/hooks/__tests__/triage-heuristic.test.js.map +0 -1
  986. package/dist/hooks/__tests__/triage-state.test.d.ts +0 -2
  987. package/dist/hooks/__tests__/triage-state.test.d.ts.map +0 -1
  988. package/dist/hooks/__tests__/triage-state.test.js +0 -426
  989. package/dist/hooks/__tests__/triage-state.test.js.map +0 -1
  990. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts +0 -2
  991. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts.map +0 -1
  992. package/dist/hooks/__tests__/visual-ralph-skill.test.js +0 -44
  993. package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +0 -1
  994. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +0 -2
  995. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +0 -1
  996. package/dist/hooks/__tests__/visual-verdict-loop.test.js +0 -35
  997. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +0 -1
  998. package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts +0 -2
  999. package/dist/hooks/__tests__/wiki-docs-contract.test.d.ts.map +0 -1
  1000. package/dist/hooks/__tests__/wiki-docs-contract.test.js +0 -34
  1001. package/dist/hooks/__tests__/wiki-docs-contract.test.js.map +0 -1
  1002. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +0 -2
  1003. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +0 -1
  1004. package/dist/hooks/code-simplifier/__tests__/index.test.js +0 -187
  1005. package/dist/hooks/code-simplifier/__tests__/index.test.js.map +0 -1
  1006. package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts +0 -2
  1007. package/dist/hooks/extensibility/__tests__/dispatcher.test.d.ts.map +0 -1
  1008. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +0 -242
  1009. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +0 -1
  1010. package/dist/hooks/extensibility/__tests__/events.test.d.ts +0 -2
  1011. package/dist/hooks/extensibility/__tests__/events.test.d.ts.map +0 -1
  1012. package/dist/hooks/extensibility/__tests__/events.test.js +0 -125
  1013. package/dist/hooks/extensibility/__tests__/events.test.js.map +0 -1
  1014. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts +0 -2
  1015. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts.map +0 -1
  1016. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js +0 -153
  1017. package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js.map +0 -1
  1018. package/dist/hooks/extensibility/__tests__/loader.test.d.ts +0 -2
  1019. package/dist/hooks/extensibility/__tests__/loader.test.d.ts.map +0 -1
  1020. package/dist/hooks/extensibility/__tests__/loader.test.js +0 -254
  1021. package/dist/hooks/extensibility/__tests__/loader.test.js.map +0 -1
  1022. package/dist/hooks/extensibility/__tests__/logging.test.d.ts +0 -2
  1023. package/dist/hooks/extensibility/__tests__/logging.test.d.ts.map +0 -1
  1024. package/dist/hooks/extensibility/__tests__/logging.test.js +0 -74
  1025. package/dist/hooks/extensibility/__tests__/logging.test.js.map +0 -1
  1026. package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts +0 -2
  1027. package/dist/hooks/extensibility/__tests__/plugin-runner.test.d.ts.map +0 -1
  1028. package/dist/hooks/extensibility/__tests__/plugin-runner.test.js +0 -202
  1029. package/dist/hooks/extensibility/__tests__/plugin-runner.test.js.map +0 -1
  1030. package/dist/hooks/extensibility/__tests__/runtime.test.d.ts +0 -2
  1031. package/dist/hooks/extensibility/__tests__/runtime.test.d.ts.map +0 -1
  1032. package/dist/hooks/extensibility/__tests__/runtime.test.js +0 -198
  1033. package/dist/hooks/extensibility/__tests__/runtime.test.js.map +0 -1
  1034. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts +0 -2
  1035. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.d.ts.map +0 -1
  1036. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js +0 -32
  1037. package/dist/hooks/extensibility/__tests__/sdk-public-surface.test.js.map +0 -1
  1038. package/dist/hooks/extensibility/__tests__/sdk.test.d.ts +0 -2
  1039. package/dist/hooks/extensibility/__tests__/sdk.test.d.ts.map +0 -1
  1040. package/dist/hooks/extensibility/__tests__/sdk.test.js +0 -479
  1041. package/dist/hooks/extensibility/__tests__/sdk.test.js.map +0 -1
  1042. package/dist/hud/__tests__/authority.test.d.ts +0 -2
  1043. package/dist/hud/__tests__/authority.test.d.ts.map +0 -1
  1044. package/dist/hud/__tests__/authority.test.js +0 -56
  1045. package/dist/hud/__tests__/authority.test.js.map +0 -1
  1046. package/dist/hud/__tests__/colors.test.d.ts +0 -2
  1047. package/dist/hud/__tests__/colors.test.d.ts.map +0 -1
  1048. package/dist/hud/__tests__/colors.test.js +0 -92
  1049. package/dist/hud/__tests__/colors.test.js.map +0 -1
  1050. package/dist/hud/__tests__/hud-tmux-injection.test.d.ts +0 -10
  1051. package/dist/hud/__tests__/hud-tmux-injection.test.d.ts.map +0 -1
  1052. package/dist/hud/__tests__/hud-tmux-injection.test.js +0 -150
  1053. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +0 -1
  1054. package/dist/hud/__tests__/index.test.d.ts +0 -2
  1055. package/dist/hud/__tests__/index.test.d.ts.map +0 -1
  1056. package/dist/hud/__tests__/index.test.js +0 -180
  1057. package/dist/hud/__tests__/index.test.js.map +0 -1
  1058. package/dist/hud/__tests__/reconcile.test.d.ts +0 -2
  1059. package/dist/hud/__tests__/reconcile.test.d.ts.map +0 -1
  1060. package/dist/hud/__tests__/reconcile.test.js +0 -125
  1061. package/dist/hud/__tests__/reconcile.test.js.map +0 -1
  1062. package/dist/hud/__tests__/render.test.d.ts +0 -2
  1063. package/dist/hud/__tests__/render.test.d.ts.map +0 -1
  1064. package/dist/hud/__tests__/render.test.js +0 -573
  1065. package/dist/hud/__tests__/render.test.js.map +0 -1
  1066. package/dist/hud/__tests__/state.test.d.ts +0 -2
  1067. package/dist/hud/__tests__/state.test.d.ts.map +0 -1
  1068. package/dist/hud/__tests__/state.test.js +0 -618
  1069. package/dist/hud/__tests__/state.test.js.map +0 -1
  1070. package/dist/hud/__tests__/types.test.d.ts +0 -2
  1071. package/dist/hud/__tests__/types.test.d.ts.map +0 -1
  1072. package/dist/hud/__tests__/types.test.js +0 -79
  1073. package/dist/hud/__tests__/types.test.js.map +0 -1
  1074. package/dist/hud/__tests__/watch.test.d.ts +0 -2
  1075. package/dist/hud/__tests__/watch.test.d.ts.map +0 -1
  1076. package/dist/hud/__tests__/watch.test.js +0 -63
  1077. package/dist/hud/__tests__/watch.test.js.map +0 -1
  1078. package/dist/mcp/__tests__/bootstrap.test.d.ts +0 -2
  1079. package/dist/mcp/__tests__/bootstrap.test.d.ts.map +0 -1
  1080. package/dist/mcp/__tests__/bootstrap.test.js +0 -207
  1081. package/dist/mcp/__tests__/bootstrap.test.js.map +0 -1
  1082. package/dist/mcp/__tests__/code-intel-server.test.d.ts +0 -2
  1083. package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +0 -1
  1084. package/dist/mcp/__tests__/code-intel-server.test.js +0 -70
  1085. package/dist/mcp/__tests__/code-intel-server.test.js.map +0 -1
  1086. package/dist/mcp/__tests__/memory-server.test.d.ts +0 -2
  1087. package/dist/mcp/__tests__/memory-server.test.d.ts.map +0 -1
  1088. package/dist/mcp/__tests__/memory-server.test.js +0 -36
  1089. package/dist/mcp/__tests__/memory-server.test.js.map +0 -1
  1090. package/dist/mcp/__tests__/memory-validation.test.d.ts +0 -2
  1091. package/dist/mcp/__tests__/memory-validation.test.d.ts.map +0 -1
  1092. package/dist/mcp/__tests__/memory-validation.test.js +0 -29
  1093. package/dist/mcp/__tests__/memory-validation.test.js.map +0 -1
  1094. package/dist/mcp/__tests__/path-traversal.test.d.ts +0 -2
  1095. package/dist/mcp/__tests__/path-traversal.test.d.ts.map +0 -1
  1096. package/dist/mcp/__tests__/path-traversal.test.js +0 -83
  1097. package/dist/mcp/__tests__/path-traversal.test.js.map +0 -1
  1098. package/dist/mcp/__tests__/server-lifecycle.test.d.ts +0 -2
  1099. package/dist/mcp/__tests__/server-lifecycle.test.d.ts.map +0 -1
  1100. package/dist/mcp/__tests__/server-lifecycle.test.js +0 -260
  1101. package/dist/mcp/__tests__/server-lifecycle.test.js.map +0 -1
  1102. package/dist/mcp/__tests__/state-paths.test.d.ts +0 -2
  1103. package/dist/mcp/__tests__/state-paths.test.d.ts.map +0 -1
  1104. package/dist/mcp/__tests__/state-paths.test.js +0 -209
  1105. package/dist/mcp/__tests__/state-paths.test.js.map +0 -1
  1106. package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts +0 -2
  1107. package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts.map +0 -1
  1108. package/dist/mcp/__tests__/state-server-ralph-phase.test.js +0 -109
  1109. package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +0 -1
  1110. package/dist/mcp/__tests__/state-server-schema.test.d.ts +0 -2
  1111. package/dist/mcp/__tests__/state-server-schema.test.d.ts.map +0 -1
  1112. package/dist/mcp/__tests__/state-server-schema.test.js +0 -29
  1113. package/dist/mcp/__tests__/state-server-schema.test.js.map +0 -1
  1114. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts +0 -2
  1115. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts.map +0 -1
  1116. package/dist/mcp/__tests__/state-server-team-tools.test.js +0 -35
  1117. package/dist/mcp/__tests__/state-server-team-tools.test.js.map +0 -1
  1118. package/dist/mcp/__tests__/state-server.test.d.ts +0 -2
  1119. package/dist/mcp/__tests__/state-server.test.d.ts.map +0 -1
  1120. package/dist/mcp/__tests__/state-server.test.js +0 -965
  1121. package/dist/mcp/__tests__/state-server.test.js.map +0 -1
  1122. package/dist/mcp/__tests__/trace-server.test.d.ts +0 -2
  1123. package/dist/mcp/__tests__/trace-server.test.d.ts.map +0 -1
  1124. package/dist/mcp/__tests__/trace-server.test.js +0 -119
  1125. package/dist/mcp/__tests__/trace-server.test.js.map +0 -1
  1126. package/dist/mcp/__tests__/wiki-server.test.d.ts +0 -2
  1127. package/dist/mcp/__tests__/wiki-server.test.d.ts.map +0 -1
  1128. package/dist/mcp/__tests__/wiki-server.test.js +0 -30
  1129. package/dist/mcp/__tests__/wiki-server.test.js.map +0 -1
  1130. package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts +0 -2
  1131. package/dist/modes/__tests__/base-autoresearch-contract.test.d.ts.map +0 -1
  1132. package/dist/modes/__tests__/base-autoresearch-contract.test.js +0 -123
  1133. package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +0 -1
  1134. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts +0 -2
  1135. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts.map +0 -1
  1136. package/dist/modes/__tests__/base-multi-state-compat.test.js +0 -38
  1137. package/dist/modes/__tests__/base-multi-state-compat.test.js.map +0 -1
  1138. package/dist/modes/__tests__/base-ralph-contract.test.d.ts +0 -2
  1139. package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +0 -1
  1140. package/dist/modes/__tests__/base-ralph-contract.test.js +0 -64
  1141. package/dist/modes/__tests__/base-ralph-contract.test.js.map +0 -1
  1142. package/dist/modes/__tests__/base-session-scope.test.d.ts +0 -2
  1143. package/dist/modes/__tests__/base-session-scope.test.d.ts.map +0 -1
  1144. package/dist/modes/__tests__/base-session-scope.test.js +0 -98
  1145. package/dist/modes/__tests__/base-session-scope.test.js.map +0 -1
  1146. package/dist/modes/__tests__/base-tmux-pane.test.d.ts +0 -2
  1147. package/dist/modes/__tests__/base-tmux-pane.test.d.ts.map +0 -1
  1148. package/dist/modes/__tests__/base-tmux-pane.test.js +0 -39
  1149. package/dist/modes/__tests__/base-tmux-pane.test.js.map +0 -1
  1150. package/dist/notifications/__tests__/config.test.d.ts +0 -2
  1151. package/dist/notifications/__tests__/config.test.d.ts.map +0 -1
  1152. package/dist/notifications/__tests__/config.test.js +0 -269
  1153. package/dist/notifications/__tests__/config.test.js.map +0 -1
  1154. package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts +0 -2
  1155. package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts.map +0 -1
  1156. package/dist/notifications/__tests__/custom-alias-enablement.test.js +0 -84
  1157. package/dist/notifications/__tests__/custom-alias-enablement.test.js.map +0 -1
  1158. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +0 -5
  1159. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +0 -1
  1160. package/dist/notifications/__tests__/dispatch-cooldown.test.js +0 -100
  1161. package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +0 -1
  1162. package/dist/notifications/__tests__/dispatcher.test.d.ts +0 -2
  1163. package/dist/notifications/__tests__/dispatcher.test.d.ts.map +0 -1
  1164. package/dist/notifications/__tests__/dispatcher.test.js +0 -202
  1165. package/dist/notifications/__tests__/dispatcher.test.js.map +0 -1
  1166. package/dist/notifications/__tests__/formatter.test.d.ts +0 -2
  1167. package/dist/notifications/__tests__/formatter.test.d.ts.map +0 -1
  1168. package/dist/notifications/__tests__/formatter.test.js +0 -270
  1169. package/dist/notifications/__tests__/formatter.test.js.map +0 -1
  1170. package/dist/notifications/__tests__/hook-config.test.d.ts +0 -5
  1171. package/dist/notifications/__tests__/hook-config.test.d.ts.map +0 -1
  1172. package/dist/notifications/__tests__/hook-config.test.js +0 -139
  1173. package/dist/notifications/__tests__/hook-config.test.js.map +0 -1
  1174. package/dist/notifications/__tests__/idle-cooldown.test.d.ts +0 -5
  1175. package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +0 -1
  1176. package/dist/notifications/__tests__/idle-cooldown.test.js +0 -209
  1177. package/dist/notifications/__tests__/idle-cooldown.test.js.map +0 -1
  1178. package/dist/notifications/__tests__/index.test.d.ts +0 -2
  1179. package/dist/notifications/__tests__/index.test.d.ts.map +0 -1
  1180. package/dist/notifications/__tests__/index.test.js +0 -188
  1181. package/dist/notifications/__tests__/index.test.js.map +0 -1
  1182. package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts +0 -2
  1183. package/dist/notifications/__tests__/lifecycle-dedupe.test.d.ts.map +0 -1
  1184. package/dist/notifications/__tests__/lifecycle-dedupe.test.js +0 -86
  1185. package/dist/notifications/__tests__/lifecycle-dedupe.test.js.map +0 -1
  1186. package/dist/notifications/__tests__/notifier.test.d.ts +0 -2
  1187. package/dist/notifications/__tests__/notifier.test.d.ts.map +0 -1
  1188. package/dist/notifications/__tests__/notifier.test.js +0 -239
  1189. package/dist/notifications/__tests__/notifier.test.js.map +0 -1
  1190. package/dist/notifications/__tests__/profiles.test.d.ts +0 -2
  1191. package/dist/notifications/__tests__/profiles.test.d.ts.map +0 -1
  1192. package/dist/notifications/__tests__/profiles.test.js +0 -404
  1193. package/dist/notifications/__tests__/profiles.test.js.map +0 -1
  1194. package/dist/notifications/__tests__/reply-config.test.d.ts +0 -2
  1195. package/dist/notifications/__tests__/reply-config.test.d.ts.map +0 -1
  1196. package/dist/notifications/__tests__/reply-config.test.js +0 -79
  1197. package/dist/notifications/__tests__/reply-config.test.js.map +0 -1
  1198. package/dist/notifications/__tests__/reply-listener.test.d.ts +0 -2
  1199. package/dist/notifications/__tests__/reply-listener.test.d.ts.map +0 -1
  1200. package/dist/notifications/__tests__/reply-listener.test.js +0 -723
  1201. package/dist/notifications/__tests__/reply-listener.test.js.map +0 -1
  1202. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts +0 -2
  1203. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.d.ts.map +0 -1
  1204. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js +0 -93
  1205. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js.map +0 -1
  1206. package/dist/notifications/__tests__/session-registry.test.d.ts +0 -2
  1207. package/dist/notifications/__tests__/session-registry.test.d.ts.map +0 -1
  1208. package/dist/notifications/__tests__/session-registry.test.js +0 -234
  1209. package/dist/notifications/__tests__/session-registry.test.js.map +0 -1
  1210. package/dist/notifications/__tests__/session-status.test.d.ts +0 -2
  1211. package/dist/notifications/__tests__/session-status.test.d.ts.map +0 -1
  1212. package/dist/notifications/__tests__/session-status.test.js +0 -249
  1213. package/dist/notifications/__tests__/session-status.test.js.map +0 -1
  1214. package/dist/notifications/__tests__/temp-mode.test.d.ts +0 -2
  1215. package/dist/notifications/__tests__/temp-mode.test.d.ts.map +0 -1
  1216. package/dist/notifications/__tests__/temp-mode.test.js +0 -172
  1217. package/dist/notifications/__tests__/temp-mode.test.js.map +0 -1
  1218. package/dist/notifications/__tests__/template-engine.test.d.ts +0 -5
  1219. package/dist/notifications/__tests__/template-engine.test.d.ts.map +0 -1
  1220. package/dist/notifications/__tests__/template-engine.test.js +0 -158
  1221. package/dist/notifications/__tests__/template-engine.test.js.map +0 -1
  1222. package/dist/notifications/__tests__/tmux-detector.test.d.ts +0 -2
  1223. package/dist/notifications/__tests__/tmux-detector.test.d.ts.map +0 -1
  1224. package/dist/notifications/__tests__/tmux-detector.test.js +0 -208
  1225. package/dist/notifications/__tests__/tmux-detector.test.js.map +0 -1
  1226. package/dist/notifications/__tests__/tmux.test.d.ts +0 -2
  1227. package/dist/notifications/__tests__/tmux.test.d.ts.map +0 -1
  1228. package/dist/notifications/__tests__/tmux.test.js +0 -285
  1229. package/dist/notifications/__tests__/tmux.test.js.map +0 -1
  1230. package/dist/notifications/__tests__/verbosity.test.d.ts +0 -2
  1231. package/dist/notifications/__tests__/verbosity.test.d.ts.map +0 -1
  1232. package/dist/notifications/__tests__/verbosity.test.js +0 -237
  1233. package/dist/notifications/__tests__/verbosity.test.js.map +0 -1
  1234. package/dist/openclaw/__tests__/config.test.d.ts +0 -6
  1235. package/dist/openclaw/__tests__/config.test.d.ts.map +0 -1
  1236. package/dist/openclaw/__tests__/config.test.js +0 -344
  1237. package/dist/openclaw/__tests__/config.test.js.map +0 -1
  1238. package/dist/openclaw/__tests__/dispatcher.test.d.ts +0 -5
  1239. package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +0 -1
  1240. package/dist/openclaw/__tests__/dispatcher.test.js +0 -169
  1241. package/dist/openclaw/__tests__/dispatcher.test.js.map +0 -1
  1242. package/dist/openclaw/__tests__/index.test.d.ts +0 -6
  1243. package/dist/openclaw/__tests__/index.test.d.ts.map +0 -1
  1244. package/dist/openclaw/__tests__/index.test.js +0 -382
  1245. package/dist/openclaw/__tests__/index.test.js.map +0 -1
  1246. package/dist/pipeline/__tests__/orchestrator.test.d.ts +0 -2
  1247. package/dist/pipeline/__tests__/orchestrator.test.d.ts.map +0 -1
  1248. package/dist/pipeline/__tests__/orchestrator.test.js +0 -505
  1249. package/dist/pipeline/__tests__/orchestrator.test.js.map +0 -1
  1250. package/dist/pipeline/__tests__/stages.test.d.ts +0 -2
  1251. package/dist/pipeline/__tests__/stages.test.d.ts.map +0 -1
  1252. package/dist/pipeline/__tests__/stages.test.js +0 -754
  1253. package/dist/pipeline/__tests__/stages.test.js.map +0 -1
  1254. package/dist/pipeline/stages/ralph-verify.d.ts +0 -53
  1255. package/dist/pipeline/stages/ralph-verify.d.ts.map +0 -1
  1256. package/dist/pipeline/stages/ralph-verify.js.map +0 -1
  1257. package/dist/pipeline/stages/ralplan.d.ts +0 -25
  1258. package/dist/pipeline/stages/ralplan.d.ts.map +0 -1
  1259. package/dist/pipeline/stages/ralplan.js.map +0 -1
  1260. package/dist/planning/__tests__/artifacts.test.d.ts +0 -2
  1261. package/dist/planning/__tests__/artifacts.test.d.ts.map +0 -1
  1262. package/dist/planning/__tests__/artifacts.test.js +0 -544
  1263. package/dist/planning/__tests__/artifacts.test.js.map +0 -1
  1264. package/dist/question/__tests__/client.test.d.ts +0 -2
  1265. package/dist/question/__tests__/client.test.d.ts.map +0 -1
  1266. package/dist/question/__tests__/client.test.js +0 -90
  1267. package/dist/question/__tests__/client.test.js.map +0 -1
  1268. package/dist/question/__tests__/deep-interview.test.d.ts +0 -2
  1269. package/dist/question/__tests__/deep-interview.test.d.ts.map +0 -1
  1270. package/dist/question/__tests__/deep-interview.test.js +0 -209
  1271. package/dist/question/__tests__/deep-interview.test.js.map +0 -1
  1272. package/dist/question/__tests__/policy.test.d.ts +0 -2
  1273. package/dist/question/__tests__/policy.test.d.ts.map +0 -1
  1274. package/dist/question/__tests__/policy.test.js +0 -107
  1275. package/dist/question/__tests__/policy.test.js.map +0 -1
  1276. package/dist/question/__tests__/renderer.test.d.ts +0 -2
  1277. package/dist/question/__tests__/renderer.test.d.ts.map +0 -1
  1278. package/dist/question/__tests__/renderer.test.js +0 -707
  1279. package/dist/question/__tests__/renderer.test.js.map +0 -1
  1280. package/dist/question/__tests__/state.test.d.ts +0 -2
  1281. package/dist/question/__tests__/state.test.d.ts.map +0 -1
  1282. package/dist/question/__tests__/state.test.js +0 -102
  1283. package/dist/question/__tests__/state.test.js.map +0 -1
  1284. package/dist/question/__tests__/types.test.d.ts +0 -2
  1285. package/dist/question/__tests__/types.test.d.ts.map +0 -1
  1286. package/dist/question/__tests__/types.test.js +0 -65
  1287. package/dist/question/__tests__/types.test.js.map +0 -1
  1288. package/dist/question/__tests__/ui.test.d.ts +0 -2
  1289. package/dist/question/__tests__/ui.test.d.ts.map +0 -1
  1290. package/dist/question/__tests__/ui.test.js +0 -446
  1291. package/dist/question/__tests__/ui.test.js.map +0 -1
  1292. package/dist/ralph/__tests__/persistence.test.d.ts +0 -2
  1293. package/dist/ralph/__tests__/persistence.test.d.ts.map +0 -1
  1294. package/dist/ralph/__tests__/persistence.test.js +0 -116
  1295. package/dist/ralph/__tests__/persistence.test.js.map +0 -1
  1296. package/dist/ralph/contract.d.ts +0 -17
  1297. package/dist/ralph/persistence.js.map +0 -1
  1298. package/dist/ralplan/__tests__/runtime.test.d.ts +0 -2
  1299. package/dist/ralplan/__tests__/runtime.test.d.ts.map +0 -1
  1300. package/dist/ralplan/__tests__/runtime.test.js +0 -165
  1301. package/dist/ralplan/__tests__/runtime.test.js.map +0 -1
  1302. package/dist/ralplan/runtime.d.ts +0 -52
  1303. package/dist/ralplan/runtime.d.ts.map +0 -1
  1304. package/dist/ralplan/runtime.js.map +0 -1
  1305. package/dist/runtime/__tests__/bridge.test.d.ts +0 -2
  1306. package/dist/runtime/__tests__/bridge.test.d.ts.map +0 -1
  1307. package/dist/runtime/__tests__/bridge.test.js +0 -194
  1308. package/dist/runtime/__tests__/bridge.test.js.map +0 -1
  1309. package/dist/runtime/__tests__/run-loop.test.d.ts +0 -2
  1310. package/dist/runtime/__tests__/run-loop.test.d.ts.map +0 -1
  1311. package/dist/runtime/__tests__/run-loop.test.js +0 -35
  1312. package/dist/runtime/__tests__/run-loop.test.js.map +0 -1
  1313. package/dist/runtime/__tests__/run-outcome.test.d.ts +0 -2
  1314. package/dist/runtime/__tests__/run-outcome.test.d.ts.map +0 -1
  1315. package/dist/runtime/__tests__/run-outcome.test.js +0 -102
  1316. package/dist/runtime/__tests__/run-outcome.test.js.map +0 -1
  1317. package/dist/runtime/__tests__/run-state.test.d.ts +0 -2
  1318. package/dist/runtime/__tests__/run-state.test.d.ts.map +0 -1
  1319. package/dist/runtime/__tests__/run-state.test.js +0 -37
  1320. package/dist/runtime/__tests__/run-state.test.js.map +0 -1
  1321. package/dist/scripts/__tests__/codex-native-hook.test.d.ts +0 -2
  1322. package/dist/scripts/__tests__/codex-native-hook.test.d.ts.map +0 -1
  1323. package/dist/scripts/__tests__/codex-native-hook.test.js +0 -6788
  1324. package/dist/scripts/__tests__/codex-native-hook.test.js.map +0 -1
  1325. package/dist/scripts/__tests__/generate-release-body.test.d.ts +0 -2
  1326. package/dist/scripts/__tests__/generate-release-body.test.d.ts.map +0 -1
  1327. package/dist/scripts/__tests__/generate-release-body.test.js +0 -233
  1328. package/dist/scripts/__tests__/generate-release-body.test.js.map +0 -1
  1329. package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts +0 -2
  1330. package/dist/scripts/__tests__/hook-derived-watcher.test.d.ts.map +0 -1
  1331. package/dist/scripts/__tests__/hook-derived-watcher.test.js +0 -195
  1332. package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +0 -1
  1333. package/dist/scripts/__tests__/postinstall.test.d.ts +0 -2
  1334. package/dist/scripts/__tests__/postinstall.test.d.ts.map +0 -1
  1335. package/dist/scripts/__tests__/postinstall.test.js +0 -92
  1336. package/dist/scripts/__tests__/postinstall.test.js.map +0 -1
  1337. package/dist/scripts/__tests__/prompt-inventory.test.d.ts +0 -2
  1338. package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +0 -1
  1339. package/dist/scripts/__tests__/prompt-inventory.test.js +0 -56
  1340. package/dist/scripts/__tests__/prompt-inventory.test.js.map +0 -1
  1341. package/dist/scripts/__tests__/run-test-files.test.d.ts +0 -2
  1342. package/dist/scripts/__tests__/run-test-files.test.d.ts.map +0 -1
  1343. package/dist/scripts/__tests__/run-test-files.test.js +0 -62
  1344. package/dist/scripts/__tests__/run-test-files.test.js.map +0 -1
  1345. package/dist/scripts/__tests__/smoke-packed-install.test.d.ts +0 -2
  1346. package/dist/scripts/__tests__/smoke-packed-install.test.d.ts.map +0 -1
  1347. package/dist/scripts/__tests__/smoke-packed-install.test.js +0 -135
  1348. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +0 -1
  1349. package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts +0 -2
  1350. package/dist/scripts/__tests__/test-reply-listener-live.test.d.ts.map +0 -1
  1351. package/dist/scripts/__tests__/test-reply-listener-live.test.js +0 -82
  1352. package/dist/scripts/__tests__/test-reply-listener-live.test.js.map +0 -1
  1353. package/dist/scripts/__tests__/verify-native-agents.test.d.ts +0 -2
  1354. package/dist/scripts/__tests__/verify-native-agents.test.d.ts.map +0 -1
  1355. package/dist/scripts/__tests__/verify-native-agents.test.js +0 -166
  1356. package/dist/scripts/__tests__/verify-native-agents.test.js.map +0 -1
  1357. package/dist/scripts/eval/eval-candidate-handoff.d.ts +0 -2
  1358. package/dist/scripts/eval/eval-candidate-handoff.d.ts.map +0 -1
  1359. package/dist/scripts/eval/eval-candidate-handoff.js +0 -11
  1360. package/dist/scripts/eval/eval-candidate-handoff.js.map +0 -1
  1361. package/dist/scripts/eval/eval-cli-discoverability.d.ts +0 -3
  1362. package/dist/scripts/eval/eval-cli-discoverability.d.ts.map +0 -1
  1363. package/dist/scripts/eval/eval-cli-discoverability.js +0 -37
  1364. package/dist/scripts/eval/eval-cli-discoverability.js.map +0 -1
  1365. package/dist/scripts/eval/eval-fresh-run-tagging.d.ts +0 -2
  1366. package/dist/scripts/eval/eval-fresh-run-tagging.d.ts.map +0 -1
  1367. package/dist/scripts/eval/eval-fresh-run-tagging.js +0 -11
  1368. package/dist/scripts/eval/eval-fresh-run-tagging.js.map +0 -1
  1369. package/dist/scripts/eval/eval-help-consistency.d.ts +0 -2
  1370. package/dist/scripts/eval/eval-help-consistency.d.ts.map +0 -1
  1371. package/dist/scripts/eval/eval-help-consistency.js +0 -12
  1372. package/dist/scripts/eval/eval-help-consistency.js.map +0 -1
  1373. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts +0 -2
  1374. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.d.ts.map +0 -1
  1375. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js +0 -31
  1376. package/dist/scripts/eval/eval-in-action-cat-shellout-demo.js.map +0 -1
  1377. package/dist/scripts/eval/eval-parity-smoke.d.ts +0 -2
  1378. package/dist/scripts/eval/eval-parity-smoke.d.ts.map +0 -1
  1379. package/dist/scripts/eval/eval-parity-smoke.js +0 -23
  1380. package/dist/scripts/eval/eval-parity-smoke.js.map +0 -1
  1381. package/dist/scripts/eval/eval-parity-sweep.d.ts +0 -2
  1382. package/dist/scripts/eval/eval-parity-sweep.d.ts.map +0 -1
  1383. package/dist/scripts/eval/eval-parity-sweep.js +0 -29
  1384. package/dist/scripts/eval/eval-parity-sweep.js.map +0 -1
  1385. package/dist/scripts/eval/eval-resume-dirty-guard.d.ts +0 -2
  1386. package/dist/scripts/eval/eval-resume-dirty-guard.d.ts.map +0 -1
  1387. package/dist/scripts/eval/eval-resume-dirty-guard.js +0 -11
  1388. package/dist/scripts/eval/eval-resume-dirty-guard.js.map +0 -1
  1389. package/dist/scripts/eval/eval-security-path-traversal.d.ts +0 -3
  1390. package/dist/scripts/eval/eval-security-path-traversal.d.ts.map +0 -1
  1391. package/dist/scripts/eval/eval-security-path-traversal.js +0 -35
  1392. package/dist/scripts/eval/eval-security-path-traversal.js.map +0 -1
  1393. package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts +0 -2
  1394. package/dist/scripts/notify-hook/__tests__/operational-events.test.d.ts.map +0 -1
  1395. package/dist/scripts/notify-hook/__tests__/operational-events.test.js +0 -24
  1396. package/dist/scripts/notify-hook/__tests__/operational-events.test.js.map +0 -1
  1397. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +0 -2
  1398. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +0 -1
  1399. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +0 -153
  1400. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +0 -1
  1401. package/dist/scripts/notify-hook/ralph-session-resume.d.ts +0 -22
  1402. package/dist/session-history/__tests__/search.test.d.ts +0 -2
  1403. package/dist/session-history/__tests__/search.test.d.ts.map +0 -1
  1404. package/dist/session-history/__tests__/search.test.js +0 -150
  1405. package/dist/session-history/__tests__/search.test.js.map +0 -1
  1406. package/dist/sidecar/__tests__/boundary.test.d.ts +0 -2
  1407. package/dist/sidecar/__tests__/boundary.test.d.ts.map +0 -1
  1408. package/dist/sidecar/__tests__/boundary.test.js +0 -48
  1409. package/dist/sidecar/__tests__/boundary.test.js.map +0 -1
  1410. package/dist/sidecar/__tests__/collector.test.d.ts +0 -2
  1411. package/dist/sidecar/__tests__/collector.test.d.ts.map +0 -1
  1412. package/dist/sidecar/__tests__/collector.test.js +0 -162
  1413. package/dist/sidecar/__tests__/collector.test.js.map +0 -1
  1414. package/dist/sidecar/__tests__/render.test.d.ts +0 -2
  1415. package/dist/sidecar/__tests__/render.test.d.ts.map +0 -1
  1416. package/dist/sidecar/__tests__/render.test.js +0 -67
  1417. package/dist/sidecar/__tests__/render.test.js.map +0 -1
  1418. package/dist/sidecar/__tests__/tmux.test.d.ts +0 -2
  1419. package/dist/sidecar/__tests__/tmux.test.d.ts.map +0 -1
  1420. package/dist/sidecar/__tests__/tmux.test.js +0 -30
  1421. package/dist/sidecar/__tests__/tmux.test.js.map +0 -1
  1422. package/dist/sidecar/__tests__/watch.test.d.ts +0 -2
  1423. package/dist/sidecar/__tests__/watch.test.d.ts.map +0 -1
  1424. package/dist/sidecar/__tests__/watch.test.js +0 -42
  1425. package/dist/sidecar/__tests__/watch.test.js.map +0 -1
  1426. package/dist/state/__tests__/mode-state-context.test.d.ts +0 -2
  1427. package/dist/state/__tests__/mode-state-context.test.d.ts.map +0 -1
  1428. package/dist/state/__tests__/mode-state-context.test.js +0 -35
  1429. package/dist/state/__tests__/mode-state-context.test.js.map +0 -1
  1430. package/dist/state/__tests__/operations-ralph-phase.test.d.ts +0 -2
  1431. package/dist/state/__tests__/operations-ralph-phase.test.d.ts.map +0 -1
  1432. package/dist/state/__tests__/operations-ralph-phase.test.js +0 -103
  1433. package/dist/state/__tests__/operations-ralph-phase.test.js.map +0 -1
  1434. package/dist/state/__tests__/operations.test.d.ts +0 -2
  1435. package/dist/state/__tests__/operations.test.d.ts.map +0 -1
  1436. package/dist/state/__tests__/operations.test.js +0 -439
  1437. package/dist/state/__tests__/operations.test.js.map +0 -1
  1438. package/dist/state/__tests__/path-traversal.test.d.ts +0 -2
  1439. package/dist/state/__tests__/path-traversal.test.d.ts.map +0 -1
  1440. package/dist/state/__tests__/path-traversal.test.js +0 -49
  1441. package/dist/state/__tests__/path-traversal.test.js.map +0 -1
  1442. package/dist/state/__tests__/skill-active.test.d.ts +0 -2
  1443. package/dist/state/__tests__/skill-active.test.d.ts.map +0 -1
  1444. package/dist/state/__tests__/skill-active.test.js +0 -160
  1445. package/dist/state/__tests__/skill-active.test.js.map +0 -1
  1446. package/dist/state/__tests__/workflow-transition.test.d.ts +0 -2
  1447. package/dist/state/__tests__/workflow-transition.test.d.ts.map +0 -1
  1448. package/dist/state/__tests__/workflow-transition.test.js +0 -77
  1449. package/dist/state/__tests__/workflow-transition.test.js.map +0 -1
  1450. package/dist/subagents/__tests__/tracker.test.d.ts +0 -2
  1451. package/dist/subagents/__tests__/tracker.test.d.ts.map +0 -1
  1452. package/dist/subagents/__tests__/tracker.test.js +0 -47
  1453. package/dist/subagents/__tests__/tracker.test.js.map +0 -1
  1454. package/dist/team/__tests__/allocation-policy.test.d.ts +0 -2
  1455. package/dist/team/__tests__/allocation-policy.test.d.ts.map +0 -1
  1456. package/dist/team/__tests__/allocation-policy.test.js +0 -111
  1457. package/dist/team/__tests__/allocation-policy.test.js.map +0 -1
  1458. package/dist/team/__tests__/api-interop.test.d.ts +0 -2
  1459. package/dist/team/__tests__/api-interop.test.d.ts.map +0 -1
  1460. package/dist/team/__tests__/api-interop.test.js +0 -2262
  1461. package/dist/team/__tests__/api-interop.test.js.map +0 -1
  1462. package/dist/team/__tests__/commit-hygiene.test.d.ts +0 -2
  1463. package/dist/team/__tests__/commit-hygiene.test.d.ts.map +0 -1
  1464. package/dist/team/__tests__/commit-hygiene.test.js +0 -93
  1465. package/dist/team/__tests__/commit-hygiene.test.js.map +0 -1
  1466. package/dist/team/__tests__/cross-rebase-smoke.test.d.ts +0 -2
  1467. package/dist/team/__tests__/cross-rebase-smoke.test.d.ts.map +0 -1
  1468. package/dist/team/__tests__/cross-rebase-smoke.test.js +0 -161
  1469. package/dist/team/__tests__/cross-rebase-smoke.test.js.map +0 -1
  1470. package/dist/team/__tests__/current-task-baseline.test.d.ts +0 -2
  1471. package/dist/team/__tests__/current-task-baseline.test.d.ts.map +0 -1
  1472. package/dist/team/__tests__/current-task-baseline.test.js +0 -87
  1473. package/dist/team/__tests__/current-task-baseline.test.js.map +0 -1
  1474. package/dist/team/__tests__/delegation-policy.test.d.ts +0 -2
  1475. package/dist/team/__tests__/delegation-policy.test.d.ts.map +0 -1
  1476. package/dist/team/__tests__/delegation-policy.test.js +0 -69
  1477. package/dist/team/__tests__/delegation-policy.test.js.map +0 -1
  1478. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts +0 -2
  1479. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts.map +0 -1
  1480. package/dist/team/__tests__/delivery-e2e-smoke.test.js +0 -679
  1481. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +0 -1
  1482. package/dist/team/__tests__/events.test.d.ts +0 -2
  1483. package/dist/team/__tests__/events.test.d.ts.map +0 -1
  1484. package/dist/team/__tests__/events.test.js +0 -313
  1485. package/dist/team/__tests__/events.test.js.map +0 -1
  1486. package/dist/team/__tests__/followup-planner.test.d.ts +0 -2
  1487. package/dist/team/__tests__/followup-planner.test.d.ts.map +0 -1
  1488. package/dist/team/__tests__/followup-planner.test.js +0 -84
  1489. package/dist/team/__tests__/followup-planner.test.js.map +0 -1
  1490. package/dist/team/__tests__/hardening-e2e.test.d.ts +0 -2
  1491. package/dist/team/__tests__/hardening-e2e.test.d.ts.map +0 -1
  1492. package/dist/team/__tests__/hardening-e2e.test.js +0 -98
  1493. package/dist/team/__tests__/hardening-e2e.test.js.map +0 -1
  1494. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +0 -2
  1495. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +0 -1
  1496. package/dist/team/__tests__/hook-primary-e2e-contract.test.js +0 -78
  1497. package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +0 -1
  1498. package/dist/team/__tests__/idle-nudge.test.d.ts +0 -2
  1499. package/dist/team/__tests__/idle-nudge.test.d.ts.map +0 -1
  1500. package/dist/team/__tests__/idle-nudge.test.js +0 -230
  1501. package/dist/team/__tests__/idle-nudge.test.js.map +0 -1
  1502. package/dist/team/__tests__/leader-activity.test.d.ts +0 -2
  1503. package/dist/team/__tests__/leader-activity.test.d.ts.map +0 -1
  1504. package/dist/team/__tests__/leader-activity.test.js +0 -261
  1505. package/dist/team/__tests__/leader-activity.test.js.map +0 -1
  1506. package/dist/team/__tests__/mcp-comm.test.d.ts +0 -2
  1507. package/dist/team/__tests__/mcp-comm.test.d.ts.map +0 -1
  1508. package/dist/team/__tests__/mcp-comm.test.js +0 -289
  1509. package/dist/team/__tests__/mcp-comm.test.js.map +0 -1
  1510. package/dist/team/__tests__/model-contract.test.d.ts +0 -2
  1511. package/dist/team/__tests__/model-contract.test.d.ts.map +0 -1
  1512. package/dist/team/__tests__/model-contract.test.js +0 -171
  1513. package/dist/team/__tests__/model-contract.test.js.map +0 -1
  1514. package/dist/team/__tests__/orchestrator.test.d.ts +0 -2
  1515. package/dist/team/__tests__/orchestrator.test.d.ts.map +0 -1
  1516. package/dist/team/__tests__/orchestrator.test.js +0 -111
  1517. package/dist/team/__tests__/orchestrator.test.js.map +0 -1
  1518. package/dist/team/__tests__/phase-controller.test.d.ts +0 -2
  1519. package/dist/team/__tests__/phase-controller.test.d.ts.map +0 -1
  1520. package/dist/team/__tests__/phase-controller.test.js +0 -50
  1521. package/dist/team/__tests__/phase-controller.test.js.map +0 -1
  1522. package/dist/team/__tests__/rebalance-policy.test.d.ts +0 -2
  1523. package/dist/team/__tests__/rebalance-policy.test.d.ts.map +0 -1
  1524. package/dist/team/__tests__/rebalance-policy.test.js +0 -168
  1525. package/dist/team/__tests__/rebalance-policy.test.js.map +0 -1
  1526. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +0 -2
  1527. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +0 -1
  1528. package/dist/team/__tests__/repo-aware-decomposition.test.js +0 -136
  1529. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +0 -1
  1530. package/dist/team/__tests__/role-router.test.d.ts +0 -2
  1531. package/dist/team/__tests__/role-router.test.d.ts.map +0 -1
  1532. package/dist/team/__tests__/role-router.test.js +0 -263
  1533. package/dist/team/__tests__/role-router.test.js.map +0 -1
  1534. package/dist/team/__tests__/runtime-cli.test.d.ts +0 -2
  1535. package/dist/team/__tests__/runtime-cli.test.d.ts.map +0 -1
  1536. package/dist/team/__tests__/runtime-cli.test.js +0 -304
  1537. package/dist/team/__tests__/runtime-cli.test.js.map +0 -1
  1538. package/dist/team/__tests__/runtime.test.d.ts +0 -2
  1539. package/dist/team/__tests__/runtime.test.d.ts.map +0 -1
  1540. package/dist/team/__tests__/runtime.test.js +0 -5734
  1541. package/dist/team/__tests__/runtime.test.js.map +0 -1
  1542. package/dist/team/__tests__/scaling.test.d.ts +0 -2
  1543. package/dist/team/__tests__/scaling.test.d.ts.map +0 -1
  1544. package/dist/team/__tests__/scaling.test.js +0 -1005
  1545. package/dist/team/__tests__/scaling.test.js.map +0 -1
  1546. package/dist/team/__tests__/shutdown-fallback.test.d.ts +0 -2
  1547. package/dist/team/__tests__/shutdown-fallback.test.d.ts.map +0 -1
  1548. package/dist/team/__tests__/shutdown-fallback.test.js +0 -125
  1549. package/dist/team/__tests__/shutdown-fallback.test.js.map +0 -1
  1550. package/dist/team/__tests__/state-root.test.d.ts +0 -2
  1551. package/dist/team/__tests__/state-root.test.d.ts.map +0 -1
  1552. package/dist/team/__tests__/state-root.test.js +0 -195
  1553. package/dist/team/__tests__/state-root.test.js.map +0 -1
  1554. package/dist/team/__tests__/state.test.d.ts +0 -2
  1555. package/dist/team/__tests__/state.test.d.ts.map +0 -1
  1556. package/dist/team/__tests__/state.test.js +0 -1859
  1557. package/dist/team/__tests__/state.test.js.map +0 -1
  1558. package/dist/team/__tests__/team-identity.test.d.ts +0 -2
  1559. package/dist/team/__tests__/team-identity.test.d.ts.map +0 -1
  1560. package/dist/team/__tests__/team-identity.test.js +0 -166
  1561. package/dist/team/__tests__/team-identity.test.js.map +0 -1
  1562. package/dist/team/__tests__/team-ops-contract.test.d.ts +0 -2
  1563. package/dist/team/__tests__/team-ops-contract.test.d.ts.map +0 -1
  1564. package/dist/team/__tests__/team-ops-contract.test.js +0 -96
  1565. package/dist/team/__tests__/team-ops-contract.test.js.map +0 -1
  1566. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +0 -2
  1567. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +0 -1
  1568. package/dist/team/__tests__/tmux-claude-workers-demo.test.js +0 -191
  1569. package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +0 -1
  1570. package/dist/team/__tests__/tmux-session.test.d.ts +0 -2
  1571. package/dist/team/__tests__/tmux-session.test.d.ts.map +0 -1
  1572. package/dist/team/__tests__/tmux-session.test.js +0 -3785
  1573. package/dist/team/__tests__/tmux-session.test.js.map +0 -1
  1574. package/dist/team/__tests__/tmux-test-fixture.d.ts +0 -20
  1575. package/dist/team/__tests__/tmux-test-fixture.d.ts.map +0 -1
  1576. package/dist/team/__tests__/tmux-test-fixture.js +0 -152
  1577. package/dist/team/__tests__/tmux-test-fixture.js.map +0 -1
  1578. package/dist/team/__tests__/tmux-test-fixture.test.d.ts +0 -2
  1579. package/dist/team/__tests__/tmux-test-fixture.test.d.ts.map +0 -1
  1580. package/dist/team/__tests__/tmux-test-fixture.test.js +0 -113
  1581. package/dist/team/__tests__/tmux-test-fixture.test.js.map +0 -1
  1582. package/dist/team/__tests__/worker-bootstrap.test.d.ts +0 -2
  1583. package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +0 -1
  1584. package/dist/team/__tests__/worker-bootstrap.test.js +0 -685
  1585. package/dist/team/__tests__/worker-bootstrap.test.js.map +0 -1
  1586. package/dist/team/__tests__/worker-runtime-identity.test.d.ts +0 -2
  1587. package/dist/team/__tests__/worker-runtime-identity.test.d.ts.map +0 -1
  1588. package/dist/team/__tests__/worker-runtime-identity.test.js +0 -250
  1589. package/dist/team/__tests__/worker-runtime-identity.test.js.map +0 -1
  1590. package/dist/team/__tests__/worktree.test.d.ts +0 -2
  1591. package/dist/team/__tests__/worktree.test.d.ts.map +0 -1
  1592. package/dist/team/__tests__/worktree.test.js +0 -317
  1593. package/dist/team/__tests__/worktree.test.js.map +0 -1
  1594. package/dist/utils/__tests__/agents-md.test.d.ts +0 -2
  1595. package/dist/utils/__tests__/agents-md.test.d.ts.map +0 -1
  1596. package/dist/utils/__tests__/agents-md.test.js +0 -52
  1597. package/dist/utils/__tests__/agents-md.test.js.map +0 -1
  1598. package/dist/utils/__tests__/agents-model-table.test.d.ts +0 -2
  1599. package/dist/utils/__tests__/agents-model-table.test.d.ts.map +0 -1
  1600. package/dist/utils/__tests__/agents-model-table.test.js +0 -104
  1601. package/dist/utils/__tests__/agents-model-table.test.js.map +0 -1
  1602. package/dist/utils/__tests__/dep-versions.test.d.ts +0 -2
  1603. package/dist/utils/__tests__/dep-versions.test.d.ts.map +0 -1
  1604. package/dist/utils/__tests__/dep-versions.test.js +0 -46
  1605. package/dist/utils/__tests__/dep-versions.test.js.map +0 -1
  1606. package/dist/utils/__tests__/package.test.d.ts +0 -2
  1607. package/dist/utils/__tests__/package.test.d.ts.map +0 -1
  1608. package/dist/utils/__tests__/package.test.js +0 -21
  1609. package/dist/utils/__tests__/package.test.js.map +0 -1
  1610. package/dist/utils/__tests__/paths.test.d.ts +0 -2
  1611. package/dist/utils/__tests__/paths.test.d.ts.map +0 -1
  1612. package/dist/utils/__tests__/paths.test.js +0 -541
  1613. package/dist/utils/__tests__/paths.test.js.map +0 -1
  1614. package/dist/utils/__tests__/platform-command.test.d.ts +0 -2
  1615. package/dist/utils/__tests__/platform-command.test.d.ts.map +0 -1
  1616. package/dist/utils/__tests__/platform-command.test.js +0 -410
  1617. package/dist/utils/__tests__/platform-command.test.js.map +0 -1
  1618. package/dist/utils/__tests__/repo-deps.test.d.ts +0 -2
  1619. package/dist/utils/__tests__/repo-deps.test.d.ts.map +0 -1
  1620. package/dist/utils/__tests__/repo-deps.test.js +0 -71
  1621. package/dist/utils/__tests__/repo-deps.test.js.map +0 -1
  1622. package/dist/verification/__tests__/ci-rust-gates.test.d.ts +0 -2
  1623. package/dist/verification/__tests__/ci-rust-gates.test.d.ts.map +0 -1
  1624. package/dist/verification/__tests__/ci-rust-gates.test.js +0 -89
  1625. package/dist/verification/__tests__/ci-rust-gates.test.js.map +0 -1
  1626. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts +0 -2
  1627. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.d.ts.map +0 -1
  1628. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +0 -54
  1629. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +0 -1
  1630. package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts +0 -2
  1631. package/dist/verification/__tests__/explore-harness-release-workflow.test.d.ts.map +0 -1
  1632. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +0 -73
  1633. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +0 -1
  1634. package/dist/verification/__tests__/native-release-manifest.test.d.ts +0 -2
  1635. package/dist/verification/__tests__/native-release-manifest.test.d.ts.map +0 -1
  1636. package/dist/verification/__tests__/native-release-manifest.test.js +0 -80
  1637. package/dist/verification/__tests__/native-release-manifest.test.js.map +0 -1
  1638. package/dist/verification/__tests__/pr-check-workflow.test.d.ts +0 -2
  1639. package/dist/verification/__tests__/pr-check-workflow.test.d.ts.map +0 -1
  1640. package/dist/verification/__tests__/pr-check-workflow.test.js +0 -27
  1641. package/dist/verification/__tests__/pr-check-workflow.test.js.map +0 -1
  1642. package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts +0 -2
  1643. package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts.map +0 -1
  1644. package/dist/verification/__tests__/ralph-persistence-gate.test.js +0 -55
  1645. package/dist/verification/__tests__/ralph-persistence-gate.test.js.map +0 -1
  1646. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts +0 -2
  1647. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.d.ts.map +0 -1
  1648. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js +0 -32
  1649. package/dist/verification/__tests__/rust-runtime-thin-adapter-gate.test.js.map +0 -1
  1650. package/dist/verification/__tests__/verifier.test.d.ts +0 -2
  1651. package/dist/verification/__tests__/verifier.test.d.ts.map +0 -1
  1652. package/dist/verification/__tests__/verifier.test.js +0 -113
  1653. package/dist/verification/__tests__/verifier.test.js.map +0 -1
  1654. package/dist/visual/__tests__/verdict.test.d.ts +0 -2
  1655. package/dist/visual/__tests__/verdict.test.d.ts.map +0 -1
  1656. package/dist/visual/__tests__/verdict.test.js +0 -81
  1657. package/dist/visual/__tests__/verdict.test.js.map +0 -1
  1658. package/dist/wiki/__tests__/cjk-tokenize.test.d.ts +0 -12
  1659. package/dist/wiki/__tests__/cjk-tokenize.test.d.ts.map +0 -1
  1660. package/dist/wiki/__tests__/cjk-tokenize.test.js +0 -139
  1661. package/dist/wiki/__tests__/cjk-tokenize.test.js.map +0 -1
  1662. package/dist/wiki/__tests__/crlf-parse.test.d.ts +0 -2
  1663. package/dist/wiki/__tests__/crlf-parse.test.d.ts.map +0 -1
  1664. package/dist/wiki/__tests__/crlf-parse.test.js +0 -24
  1665. package/dist/wiki/__tests__/crlf-parse.test.js.map +0 -1
  1666. package/dist/wiki/__tests__/escape-newline.test.d.ts +0 -2
  1667. package/dist/wiki/__tests__/escape-newline.test.d.ts.map +0 -1
  1668. package/dist/wiki/__tests__/escape-newline.test.js +0 -45
  1669. package/dist/wiki/__tests__/escape-newline.test.js.map +0 -1
  1670. package/dist/wiki/__tests__/ingest.test.d.ts +0 -5
  1671. package/dist/wiki/__tests__/ingest.test.d.ts.map +0 -1
  1672. package/dist/wiki/__tests__/ingest.test.js +0 -181
  1673. package/dist/wiki/__tests__/ingest.test.js.map +0 -1
  1674. package/dist/wiki/__tests__/lint.test.d.ts +0 -5
  1675. package/dist/wiki/__tests__/lint.test.d.ts.map +0 -1
  1676. package/dist/wiki/__tests__/lint.test.js +0 -163
  1677. package/dist/wiki/__tests__/lint.test.js.map +0 -1
  1678. package/dist/wiki/__tests__/query.test.d.ts +0 -5
  1679. package/dist/wiki/__tests__/query.test.d.ts.map +0 -1
  1680. package/dist/wiki/__tests__/query.test.js +0 -141
  1681. package/dist/wiki/__tests__/query.test.js.map +0 -1
  1682. package/dist/wiki/__tests__/reserved-file-guard.test.d.ts +0 -2
  1683. package/dist/wiki/__tests__/reserved-file-guard.test.d.ts.map +0 -1
  1684. package/dist/wiki/__tests__/reserved-file-guard.test.js +0 -44
  1685. package/dist/wiki/__tests__/reserved-file-guard.test.js.map +0 -1
  1686. package/dist/wiki/__tests__/session-hooks.test.d.ts +0 -5
  1687. package/dist/wiki/__tests__/session-hooks.test.d.ts.map +0 -1
  1688. package/dist/wiki/__tests__/session-hooks.test.js +0 -36
  1689. package/dist/wiki/__tests__/session-hooks.test.js.map +0 -1
  1690. package/dist/wiki/__tests__/slug-nonascii.test.d.ts +0 -2
  1691. package/dist/wiki/__tests__/slug-nonascii.test.d.ts.map +0 -1
  1692. package/dist/wiki/__tests__/slug-nonascii.test.js +0 -30
  1693. package/dist/wiki/__tests__/slug-nonascii.test.js.map +0 -1
  1694. package/dist/wiki/__tests__/storage.test.d.ts +0 -5
  1695. package/dist/wiki/__tests__/storage.test.d.ts.map +0 -1
  1696. package/dist/wiki/__tests__/storage.test.js +0 -278
  1697. package/dist/wiki/__tests__/storage.test.js.map +0 -1
  1698. package/dist/wiki/__tests__/test-helpers.d.ts +0 -31
  1699. package/dist/wiki/__tests__/test-helpers.d.ts.map +0 -1
  1700. package/dist/wiki/__tests__/test-helpers.js +0 -108
  1701. package/dist/wiki/__tests__/test-helpers.js.map +0 -1
  1702. package/docs/contracts/ralph-cancel-contract.md +0 -23
  1703. package/docs/contracts/ralph-state-contract.md +0 -95
  1704. package/docs/issues/team-ralph-followup-team.md +0 -38
  1705. package/docs/qa/ralph-persistence-gate.md +0 -59
  1706. package/docs/reference/ralph-parity-matrix.md +0 -25
  1707. package/docs/reference/ralph-upstream-baseline.md +0 -34
  1708. package/plugins/roblox-ai-os-creator-skills/skills/ralph/SKILL.md +0 -269
  1709. package/plugins/roblox-ai-os-creator-skills/skills/ralplan/SKILL.md +0 -162
  1710. package/prompts/api-reviewer.md +0 -113
  1711. package/prompts/information-architect.md +0 -226
  1712. package/prompts/performance-reviewer.md +0 -109
  1713. package/prompts/product-analyst.md +0 -304
  1714. package/prompts/product-manager.md +0 -245
  1715. package/prompts/qa-tester.md +0 -124
  1716. package/prompts/quality-reviewer.md +0 -123
  1717. package/prompts/quality-strategist.md +0 -274
  1718. package/prompts/style-reviewer.md +0 -102
  1719. package/prompts/ux-researcher.md +0 -327
  1720. package/skills/frontend-ui-ux/SKILL.md +0 -34
  1721. package/skills/ralph/SKILL.md +0 -269
  1722. package/skills/ralplan/SKILL.md +0 -162
  1723. package/src/scripts/eval/eval-adaptive-sort-optimization.py +0 -24
  1724. package/src/scripts/eval/eval-candidate-handoff.ts +0 -8
  1725. package/src/scripts/eval/eval-cli-discoverability.ts +0 -40
  1726. package/src/scripts/eval/eval-fresh-run-tagging.ts +0 -8
  1727. package/src/scripts/eval/eval-help-consistency.ts +0 -11
  1728. package/src/scripts/eval/eval-in-action-cat-shellout-demo.ts +0 -31
  1729. package/src/scripts/eval/eval-ml-kaggle-model-optimization.py +0 -29
  1730. package/src/scripts/eval/eval-noisy-bayesopt-highdim.py +0 -44
  1731. package/src/scripts/eval/eval-noisy-latent-subspace-discovery.py +0 -44
  1732. package/src/scripts/eval/eval-parity-smoke.ts +0 -20
  1733. package/src/scripts/eval/eval-parity-sweep.ts +0 -26
  1734. package/src/scripts/eval/eval-resume-dirty-guard.ts +0 -8
  1735. package/src/scripts/eval/eval-security-path-traversal.ts +0 -38
  1736. package/src/scripts/run-autoresearch-showcase.sh +0 -75
  1737. /package/docs/{migration-mainline-post-v0.4.4.md → archive/migration-mainline-post-v0.4.4.md} +0 -0
  1738. /package/docs/{qa-plan-0.4.2.md → archive/qa-plan-0.4.2.md} +0 -0
  1739. /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