@jstn-sdk/rcs 0.1.0 → 0.1.6

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