@jstn-sdk/rcs 0.1.0 → 0.1.1

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