@kynetic-ai/spec 0.9.1 → 0.11.0

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 (310) hide show
  1. package/README.md +2 -1
  2. package/dist/acp/client.d.ts +6 -1
  3. package/dist/acp/client.d.ts.map +1 -1
  4. package/dist/acp/client.js +7 -2
  5. package/dist/acp/client.js.map +1 -1
  6. package/dist/acp/framing.d.ts +12 -1
  7. package/dist/acp/framing.d.ts.map +1 -1
  8. package/dist/acp/framing.js +27 -4
  9. package/dist/acp/framing.js.map +1 -1
  10. package/dist/agent-runtime/dispatch.d.ts +292 -0
  11. package/dist/agent-runtime/dispatch.d.ts.map +1 -0
  12. package/dist/agent-runtime/dispatch.js +860 -0
  13. package/dist/agent-runtime/dispatch.js.map +1 -0
  14. package/dist/agent-runtime/index.d.ts +11 -0
  15. package/dist/agent-runtime/index.d.ts.map +1 -0
  16. package/dist/agent-runtime/index.js +11 -0
  17. package/dist/agent-runtime/index.js.map +1 -0
  18. package/dist/agent-runtime/invocation.d.ts +86 -0
  19. package/dist/agent-runtime/invocation.d.ts.map +1 -0
  20. package/dist/agent-runtime/invocation.js +442 -0
  21. package/dist/agent-runtime/invocation.js.map +1 -0
  22. package/dist/agent-runtime/prompts.d.ts +50 -0
  23. package/dist/agent-runtime/prompts.d.ts.map +1 -0
  24. package/dist/agent-runtime/prompts.js +108 -0
  25. package/dist/agent-runtime/prompts.js.map +1 -0
  26. package/dist/agents/spawner.d.ts.map +1 -1
  27. package/dist/agents/spawner.js +60 -4
  28. package/dist/agents/spawner.js.map +1 -1
  29. package/dist/cli/batch-exec.d.ts.map +1 -1
  30. package/dist/cli/batch-exec.js +140 -62
  31. package/dist/cli/batch-exec.js.map +1 -1
  32. package/dist/cli/batch-write-buffer.d.ts +141 -0
  33. package/dist/cli/batch-write-buffer.d.ts.map +1 -0
  34. package/dist/cli/batch-write-buffer.js +400 -0
  35. package/dist/cli/batch-write-buffer.js.map +1 -0
  36. package/dist/cli/commands/agent.d.ts +20 -0
  37. package/dist/cli/commands/agent.d.ts.map +1 -0
  38. package/dist/cli/commands/agent.js +831 -0
  39. package/dist/cli/commands/agent.js.map +1 -0
  40. package/dist/cli/commands/inbox.d.ts.map +1 -1
  41. package/dist/cli/commands/inbox.js +46 -22
  42. package/dist/cli/commands/inbox.js.map +1 -1
  43. package/dist/cli/commands/index.d.ts +1 -0
  44. package/dist/cli/commands/index.d.ts.map +1 -1
  45. package/dist/cli/commands/index.js +1 -0
  46. package/dist/cli/commands/index.js.map +1 -1
  47. package/dist/cli/commands/item.d.ts.map +1 -1
  48. package/dist/cli/commands/item.js +22 -16
  49. package/dist/cli/commands/item.js.map +1 -1
  50. package/dist/cli/commands/log.js +1 -1
  51. package/dist/cli/commands/log.js.map +1 -1
  52. package/dist/cli/commands/meta.d.ts.map +1 -1
  53. package/dist/cli/commands/meta.js +168 -6
  54. package/dist/cli/commands/meta.js.map +1 -1
  55. package/dist/cli/commands/module.d.ts.map +1 -1
  56. package/dist/cli/commands/module.js +2 -1
  57. package/dist/cli/commands/module.js.map +1 -1
  58. package/dist/cli/commands/plan-import.js +19 -3
  59. package/dist/cli/commands/plan-import.js.map +1 -1
  60. package/dist/cli/commands/plan.d.ts.map +1 -1
  61. package/dist/cli/commands/plan.js +87 -43
  62. package/dist/cli/commands/plan.js.map +1 -1
  63. package/dist/cli/commands/ralph.d.ts +5 -56
  64. package/dist/cli/commands/ralph.d.ts.map +1 -1
  65. package/dist/cli/commands/ralph.js +52 -1502
  66. package/dist/cli/commands/ralph.js.map +1 -1
  67. package/dist/cli/commands/search.d.ts.map +1 -1
  68. package/dist/cli/commands/search.js +22 -13
  69. package/dist/cli/commands/search.js.map +1 -1
  70. package/dist/cli/commands/serve.d.ts.map +1 -1
  71. package/dist/cli/commands/serve.js +70 -11
  72. package/dist/cli/commands/serve.js.map +1 -1
  73. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  74. package/dist/cli/commands/session/checkpoint.js +7 -2
  75. package/dist/cli/commands/session/checkpoint.js.map +1 -1
  76. package/dist/cli/commands/session/commands.d.ts.map +1 -1
  77. package/dist/cli/commands/session/commands.js +15 -0
  78. package/dist/cli/commands/session/commands.js.map +1 -1
  79. package/dist/cli/commands/session/context.d.ts.map +1 -1
  80. package/dist/cli/commands/session/context.js +10 -5
  81. package/dist/cli/commands/session/context.js.map +1 -1
  82. package/dist/cli/commands/session/log.d.ts +1 -0
  83. package/dist/cli/commands/session/log.d.ts.map +1 -1
  84. package/dist/cli/commands/session/log.js +124 -8
  85. package/dist/cli/commands/session/log.js.map +1 -1
  86. package/dist/cli/commands/session/stale-close.d.ts +17 -0
  87. package/dist/cli/commands/session/stale-close.d.ts.map +1 -0
  88. package/dist/cli/commands/session/stale-close.js +378 -0
  89. package/dist/cli/commands/session/stale-close.js.map +1 -0
  90. package/dist/cli/commands/setup.d.ts.map +1 -1
  91. package/dist/cli/commands/setup.js +95 -0
  92. package/dist/cli/commands/setup.js.map +1 -1
  93. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  94. package/dist/cli/commands/skill-crud.js +4 -3
  95. package/dist/cli/commands/skill-crud.js.map +1 -1
  96. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  97. package/dist/cli/commands/skill-diff.js +15 -0
  98. package/dist/cli/commands/skill-diff.js.map +1 -1
  99. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  100. package/dist/cli/commands/skill-install.js +50 -18
  101. package/dist/cli/commands/skill-install.js.map +1 -1
  102. package/dist/cli/commands/task.d.ts.map +1 -1
  103. package/dist/cli/commands/task.js +536 -310
  104. package/dist/cli/commands/task.js.map +1 -1
  105. package/dist/cli/commands/tasks.js +1 -1
  106. package/dist/cli/commands/tasks.js.map +1 -1
  107. package/dist/cli/commands/triage.d.ts.map +1 -1
  108. package/dist/cli/commands/triage.js +37 -13
  109. package/dist/cli/commands/triage.js.map +1 -1
  110. package/dist/cli/commands/validate.d.ts.map +1 -1
  111. package/dist/cli/commands/validate.js +65 -25
  112. package/dist/cli/commands/validate.js.map +1 -1
  113. package/dist/cli/help/content.d.ts.map +1 -1
  114. package/dist/cli/help/content.js +5 -0
  115. package/dist/cli/help/content.js.map +1 -1
  116. package/dist/cli/index.d.ts.map +1 -1
  117. package/dist/cli/index.js +2 -1
  118. package/dist/cli/index.js.map +1 -1
  119. package/dist/cli/output.d.ts.map +1 -1
  120. package/dist/cli/output.js +5 -1
  121. package/dist/cli/output.js.map +1 -1
  122. package/dist/daemon/project-context.ts +22 -0
  123. package/dist/daemon/routes/agent-dispatch.ts +279 -0
  124. package/dist/daemon/routes/items.ts +22 -0
  125. package/dist/daemon/routes/meta.ts +141 -1
  126. package/dist/daemon/routes/plans.ts +147 -0
  127. package/dist/daemon/routes/sessions.ts +180 -0
  128. package/dist/daemon/routes/tasks.ts +198 -0
  129. package/dist/daemon/routes/validation.ts +1 -1
  130. package/dist/daemon/server.ts +77 -21
  131. package/dist/daemon/websocket/handler.ts +67 -6
  132. package/dist/daemon/websocket/lifecycle.ts +19 -0
  133. package/dist/daemon/websocket/pubsub.ts +74 -3
  134. package/dist/export/html.d.ts.map +1 -1
  135. package/dist/export/html.js +5 -2
  136. package/dist/export/html.js.map +1 -1
  137. package/dist/export/triage.d.ts +1 -1
  138. package/dist/export/triage.d.ts.map +1 -1
  139. package/dist/export/triage.js +5 -3
  140. package/dist/export/triage.js.map +1 -1
  141. package/dist/parser/alignment.d.ts.map +1 -1
  142. package/dist/parser/alignment.js +10 -5
  143. package/dist/parser/alignment.js.map +1 -1
  144. package/dist/parser/assess.js +1 -1
  145. package/dist/parser/assess.js.map +1 -1
  146. package/dist/parser/config.d.ts +6 -6
  147. package/dist/parser/meta.d.ts.map +1 -1
  148. package/dist/parser/meta.js +9 -8
  149. package/dist/parser/meta.js.map +1 -1
  150. package/dist/parser/plan-document.d.ts +12 -12
  151. package/dist/parser/plans.d.ts +7 -0
  152. package/dist/parser/plans.d.ts.map +1 -1
  153. package/dist/parser/plans.js +100 -15
  154. package/dist/parser/plans.js.map +1 -1
  155. package/dist/parser/refs.d.ts +5 -0
  156. package/dist/parser/refs.d.ts.map +1 -1
  157. package/dist/parser/refs.js +17 -12
  158. package/dist/parser/refs.js.map +1 -1
  159. package/dist/parser/shadow.d.ts +1 -1
  160. package/dist/parser/shadow.d.ts.map +1 -1
  161. package/dist/parser/shadow.js +71 -4
  162. package/dist/parser/shadow.js.map +1 -1
  163. package/dist/parser/skill-render.d.ts.map +1 -1
  164. package/dist/parser/skill-render.js +6 -3
  165. package/dist/parser/skill-render.js.map +1 -1
  166. package/dist/parser/validate.d.ts.map +1 -1
  167. package/dist/parser/validate.js +35 -76
  168. package/dist/parser/validate.js.map +1 -1
  169. package/dist/parser/yaml.d.ts +24 -5
  170. package/dist/parser/yaml.d.ts.map +1 -1
  171. package/dist/parser/yaml.js +224 -64
  172. package/dist/parser/yaml.js.map +1 -1
  173. package/dist/schema/meta.d.ts +457 -119
  174. package/dist/schema/meta.d.ts.map +1 -1
  175. package/dist/schema/meta.js +56 -0
  176. package/dist/schema/meta.js.map +1 -1
  177. package/dist/schema/plan.d.ts +22 -22
  178. package/dist/schema/spec.d.ts +39 -39
  179. package/dist/schema/task.d.ts +43 -32
  180. package/dist/schema/task.d.ts.map +1 -1
  181. package/dist/schema/task.js +5 -0
  182. package/dist/schema/task.js.map +1 -1
  183. package/dist/sessions/store.d.ts +126 -0
  184. package/dist/sessions/store.d.ts.map +1 -1
  185. package/dist/sessions/store.js +440 -22
  186. package/dist/sessions/store.js.map +1 -1
  187. package/dist/sessions/types.d.ts +75 -17
  188. package/dist/sessions/types.d.ts.map +1 -1
  189. package/dist/sessions/types.js +51 -1
  190. package/dist/sessions/types.js.map +1 -1
  191. package/dist/triage/actions.d.ts +1 -0
  192. package/dist/triage/actions.d.ts.map +1 -1
  193. package/dist/triage/actions.js +34 -7
  194. package/dist/triage/actions.js.map +1 -1
  195. package/dist/utils/commit.js +1 -1
  196. package/dist/utils/commit.js.map +1 -1
  197. package/dist/web-ui/_app/env.js +1 -0
  198. package/dist/web-ui/_app/immutable/assets/0.BJaYkGW2.css +1 -0
  199. package/dist/web-ui/_app/immutable/assets/9.SzGLxi4x.css +1 -0
  200. package/dist/web-ui/_app/immutable/assets/select-trigger.CV-KWLNP.css +1 -0
  201. package/dist/web-ui/_app/immutable/chunks/-lc0BifF.js +1 -0
  202. package/dist/web-ui/_app/immutable/chunks/62JVKtnb.js +1 -0
  203. package/dist/web-ui/_app/immutable/chunks/8RBjHMN1.js +1 -0
  204. package/dist/web-ui/_app/immutable/chunks/B5LJFxqa.js +1 -0
  205. package/dist/web-ui/_app/immutable/chunks/B5wTVqxm.js +1 -0
  206. package/dist/web-ui/_app/immutable/chunks/B6VSmczZ.js +1 -0
  207. package/dist/web-ui/_app/immutable/chunks/B8a0xDxR.js +1 -0
  208. package/dist/web-ui/_app/immutable/chunks/BEOQc37C.js +1 -0
  209. package/dist/web-ui/_app/immutable/chunks/BHtYorjv.js +1 -0
  210. package/dist/web-ui/_app/immutable/chunks/BJ0JX3ea.js +1 -0
  211. package/dist/web-ui/_app/immutable/chunks/BMuCqDX8.js +1 -0
  212. package/dist/web-ui/_app/immutable/chunks/BP352uRn.js +1 -0
  213. package/dist/web-ui/_app/immutable/chunks/BUZujXJ2.js +1 -0
  214. package/dist/web-ui/_app/immutable/chunks/BVA9Exy-.js +1 -0
  215. package/dist/web-ui/_app/immutable/chunks/BWET-efb.js +1 -0
  216. package/dist/web-ui/_app/immutable/chunks/BXkNecpt.js +1 -0
  217. package/dist/web-ui/_app/immutable/chunks/BYzrIfX8.js +1 -0
  218. package/dist/web-ui/_app/immutable/chunks/BkOJ8DkV.js +1 -0
  219. package/dist/web-ui/_app/immutable/chunks/BpuwufMc.js +1 -0
  220. package/dist/web-ui/_app/immutable/chunks/BwMO4RrG.js +1 -0
  221. package/dist/web-ui/_app/immutable/chunks/BysXJlZb.js +1 -0
  222. package/dist/web-ui/_app/immutable/chunks/C076q4JN.js +1 -0
  223. package/dist/web-ui/_app/immutable/chunks/C33JaVbg.js +1 -0
  224. package/dist/web-ui/_app/immutable/chunks/CGtqifKp.js +1 -0
  225. package/dist/web-ui/_app/immutable/chunks/CHDZZ7OG.js +1 -0
  226. package/dist/web-ui/_app/immutable/chunks/CPPfDSei.js +5 -0
  227. package/dist/web-ui/_app/immutable/chunks/CUir3f4J.js +60 -0
  228. package/dist/web-ui/_app/immutable/chunks/Cncwi6fQ.js +1 -0
  229. package/dist/web-ui/_app/immutable/chunks/CrCIbn0C.js +1 -0
  230. package/dist/web-ui/_app/immutable/chunks/CwELQvbx.js +1 -0
  231. package/dist/web-ui/_app/immutable/chunks/D3vxvonu.js +1 -0
  232. package/dist/web-ui/_app/immutable/chunks/D6TVmR9T.js +1 -0
  233. package/dist/web-ui/_app/immutable/chunks/D7LTux4W.js +1 -0
  234. package/dist/web-ui/_app/immutable/chunks/D82RulSH.js +1 -0
  235. package/dist/web-ui/_app/immutable/chunks/D9QNBZM2.js +2 -0
  236. package/dist/web-ui/_app/immutable/chunks/DAMmvwn4.js +1 -0
  237. package/dist/web-ui/_app/immutable/chunks/DAh4Wfku.js +1 -0
  238. package/dist/web-ui/_app/immutable/chunks/DAx07bEQ.js +1 -0
  239. package/dist/web-ui/_app/immutable/chunks/DBYE9jOd.js +1 -0
  240. package/dist/web-ui/_app/immutable/chunks/DOno4cA2.js +1 -0
  241. package/dist/web-ui/_app/immutable/chunks/DQA8NZIH.js +2 -0
  242. package/dist/web-ui/_app/immutable/chunks/DRfPm2bo.js +1 -0
  243. package/dist/web-ui/_app/immutable/chunks/DhQhksaB.js +1 -0
  244. package/dist/web-ui/_app/immutable/chunks/DjG7s6hm.js +1 -0
  245. package/dist/web-ui/_app/immutable/chunks/DjcCz-PU.js +2 -0
  246. package/dist/web-ui/_app/immutable/chunks/DkltRNvh.js +1 -0
  247. package/dist/web-ui/_app/immutable/chunks/DlaTnPKL.js +1 -0
  248. package/dist/web-ui/_app/immutable/chunks/DvA-KON-.js +1 -0
  249. package/dist/web-ui/_app/immutable/chunks/DxCk-KHc.js +1 -0
  250. package/dist/web-ui/_app/immutable/chunks/DzO4hlg9.js +1 -0
  251. package/dist/web-ui/_app/immutable/chunks/Eo4gF7ih.js +1 -0
  252. package/dist/web-ui/_app/immutable/chunks/ExCq5swK.js +1 -0
  253. package/dist/web-ui/_app/immutable/chunks/T3zZGv51.js +1 -0
  254. package/dist/web-ui/_app/immutable/chunks/XZumBYeP.js +1 -0
  255. package/dist/web-ui/_app/immutable/chunks/_ySfNjkF.js +1 -0
  256. package/dist/web-ui/_app/immutable/chunks/iEtR5cV6.js +1 -0
  257. package/dist/web-ui/_app/immutable/chunks/k_Qegko0.js +1 -0
  258. package/dist/web-ui/_app/immutable/chunks/pE6cYWlS.js +1 -0
  259. package/dist/web-ui/_app/immutable/entry/app.Cgu6uKeS.js +2 -0
  260. package/dist/web-ui/_app/immutable/entry/start.9XifnLoB.js +1 -0
  261. package/dist/web-ui/_app/immutable/nodes/0.DISwcKSK.js +1 -0
  262. package/dist/web-ui/_app/immutable/nodes/1.Cx2Ufqp1.js +1 -0
  263. package/dist/web-ui/_app/immutable/nodes/10.C3z8ijXL.js +1 -0
  264. package/dist/web-ui/_app/immutable/nodes/11.DZdIjZmM.js +1 -0
  265. package/dist/web-ui/_app/immutable/nodes/12.FsIGfAOa.js +1 -0
  266. package/dist/web-ui/_app/immutable/nodes/13.DZoFwagf.js +1 -0
  267. package/dist/web-ui/_app/immutable/nodes/14.DaIzDKbQ.js +1 -0
  268. package/dist/web-ui/_app/immutable/nodes/15.BYyt4XWF.js +2 -0
  269. package/dist/web-ui/_app/immutable/nodes/16.CQkSqpOe.js +1 -0
  270. package/dist/web-ui/_app/immutable/nodes/2.Bkf_j2UJ.js +1 -0
  271. package/dist/web-ui/_app/immutable/nodes/3.kaMCurJG.js +1 -0
  272. package/dist/web-ui/_app/immutable/nodes/4.BSsFPTHG.js +2 -0
  273. package/dist/web-ui/_app/immutable/nodes/5.CpPlcCEZ.js +1 -0
  274. package/dist/web-ui/_app/immutable/nodes/6.BN4FqQmY.js +1 -0
  275. package/dist/web-ui/_app/immutable/nodes/7.9kBYIZik.js +1 -0
  276. package/dist/web-ui/_app/immutable/nodes/8.BuijtZ6B.js +1 -0
  277. package/dist/web-ui/_app/immutable/nodes/9.C-Weba8R.js +1 -0
  278. package/dist/web-ui/_app/version.json +1 -0
  279. package/dist/web-ui/index.html +39 -0
  280. package/dist/web-ui/robots.txt +3 -0
  281. package/package.json +4 -2
  282. package/plugin/.claude-plugin/marketplace.json +1 -1
  283. package/plugin/.claude-plugin/plugin.json +1 -1
  284. package/plugin/plugins/kspec/skills/task-work/SKILL.md +25 -2
  285. package/templates/agents-sections/06-ralph-loop.md +64 -11
  286. package/templates/skills/task-work/SKILL.md +25 -2
  287. package/dist/ralph/cli-renderer.d.ts +0 -27
  288. package/dist/ralph/cli-renderer.d.ts.map +0 -1
  289. package/dist/ralph/cli-renderer.js +0 -250
  290. package/dist/ralph/cli-renderer.js.map +0 -1
  291. package/dist/ralph/events.d.ts +0 -65
  292. package/dist/ralph/events.d.ts.map +0 -1
  293. package/dist/ralph/events.js +0 -600
  294. package/dist/ralph/events.js.map +0 -1
  295. package/dist/ralph/index.d.ts +0 -11
  296. package/dist/ralph/index.d.ts.map +0 -1
  297. package/dist/ralph/index.js +0 -16
  298. package/dist/ralph/index.js.map +0 -1
  299. package/dist/ralph/loop-errors.d.ts +0 -83
  300. package/dist/ralph/loop-errors.d.ts.map +0 -1
  301. package/dist/ralph/loop-errors.js +0 -150
  302. package/dist/ralph/loop-errors.js.map +0 -1
  303. package/dist/ralph/subagent.d.ts +0 -127
  304. package/dist/ralph/subagent.d.ts.map +0 -1
  305. package/dist/ralph/subagent.js +0 -268
  306. package/dist/ralph/subagent.js.map +0 -1
  307. package/dist/ralph/wrap-up.d.ts +0 -127
  308. package/dist/ralph/wrap-up.d.ts.map +0 -1
  309. package/dist/ralph/wrap-up.js +0 -271
  310. package/dist/ralph/wrap-up.js.map +0 -1
@@ -54,6 +54,7 @@ Use CLI commands to find information. **Do NOT search `.kspec/` YAML files manua
54
54
  | List by type | `kspec item list --type feature` |
55
55
  | All traits | `kspec trait list` |
56
56
  | Task's linked spec | `kspec task get @ref` → read `spec_ref` field |
57
+ | Task's linked plan | `kspec task get @ref` → if `plan_ref` is non-null, run `kspec plan get @plan-ref` |
57
58
 
58
59
  **Key pattern:** When `kspec item get` output shows "Inherited from @trait-slug", run `kspec item get @trait-slug` to see the trait's ACs. One command — do not grep YAML files.
59
60
 
@@ -86,9 +87,30 @@ If already implemented: verify tests pass, AC coverage exists, then `kspec task
86
87
  ### 3. Start Task
87
88
 
88
89
  ```bash
90
+ # Check task links first
91
+ kspec task get @ref
92
+
93
+ # If plan_ref is non-null, load implementation context from the plan
94
+ kspec plan get @plan-ref
95
+
96
+ # Then start work
89
97
  kspec task start @ref
90
98
  ```
91
99
 
100
+ ### 3.5 Branch Isolation (Required Before Edits)
101
+
102
+ Immediately after `kspec task start` and before any file edits, create or switch to a dedicated branch for that task. Do not keep implementing on a branch that is tied to another pending-review task.
103
+
104
+ ```bash
105
+ # Example naming from task intent/slug
106
+ TASK_BRANCH="fix/<task-slug>"
107
+
108
+ # Create the branch if missing, otherwise switch to it
109
+ git checkout -b "$TASK_BRANCH" 2>/dev/null || git checkout "$TASK_BRANCH"
110
+ ```
111
+
112
+ This keeps each task's commits scoped to its own PR and prevents cross-task contamination.
113
+
92
114
  ### 4. Work and Note
93
115
 
94
116
  Read all ACs (own + trait) before implementing:
@@ -259,6 +281,7 @@ kspec tasks ready --eligible # Only automation-eligible tasks
259
281
  ### Key Behaviors
260
282
 
261
283
  - Verify work is needed before starting (prevent duplicates)
284
+ - Create/switch to a dedicated task branch before making code edits
262
285
  - Decisions auto-resolve without prompts
263
286
  - PR review handled externally (not this workflow)
264
287
  - All actions are logged and auditable
@@ -281,12 +304,12 @@ After blocking:
281
304
  kspec task block @ref --reason "Reason..."
282
305
  kspec tasks ready --eligible # Check for other work
283
306
  # If tasks exist: work on the next one
284
- # If empty: stop responding (ralph auto-exits)
307
+ # If empty: stop responding (agent dispatch exits automatically)
285
308
  ```
286
309
 
287
310
  ### Turn Completion
288
311
 
289
- After creating a PR, **stop responding**. Ralph continues automatically — it checks for remaining eligible tasks and exits the loop when none remain.
312
+ After creating a PR, **stop responding**. The agent dispatch engine continues automatically — it checks for remaining eligible tasks and exits when none remain.
290
313
 
291
314
  **Do NOT call `end-loop`** after creating a PR. That ends ALL remaining iterations. It's a rare escape hatch for when work is stalling across multiple iterations.
292
315
 
@@ -1,27 +0,0 @@
1
- /**
2
- * Ralph CLI Renderer
3
- *
4
- * Renders RalphEvents to the terminal with chalk colors and formatting.
5
- * This is the CLI-specific implementation; other renderers (TUI) could
6
- * consume the same event stream with different display logic.
7
- */
8
- import type { RalphEvent } from "./events.js";
9
- export interface RalphRenderer {
10
- /**
11
- * Render an event to the output.
12
- */
13
- render(event: RalphEvent): void;
14
- /**
15
- * Called when a new section starts (e.g., iteration boundary).
16
- */
17
- newSection?(label: string): void;
18
- }
19
- export declare function createCliRenderer(): RalphRenderer;
20
- /**
21
- * Create a renderer that prefixes all output with a label.
22
- * Used to distinguish subagent output from main agent output.
23
- *
24
- * AC: @ralph-subagent-spawning ac-11
25
- */
26
- export declare function createPrefixedRenderer(prefix: string): RalphRenderer;
27
- //# sourceMappingURL=cli-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-renderer.d.ts","sourceRoot":"","sources":["../../src/ralph/cli-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAGV,UAAU,EAKX,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAgCD,wBAAgB,iBAAiB,IAAI,aAAa,CAgDjD;AA8JD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAqEpE"}
@@ -1,250 +0,0 @@
1
- /**
2
- * Ralph CLI Renderer
3
- *
4
- * Renders RalphEvents to the terminal with chalk colors and formatting.
5
- * This is the CLI-specific implementation; other renderers (TUI) could
6
- * consume the same event stream with different display logic.
7
- */
8
- import chalk from "chalk";
9
- // ============================================================================
10
- // Timestamp Formatting
11
- // ============================================================================
12
- /**
13
- * Format milliseconds as relative timestamp.
14
- * Examples: +0s, +5s, +1m, +2m30s
15
- */
16
- function formatTimestamp(ms) {
17
- const seconds = Math.floor(ms / 1000);
18
- if (seconds < 60) {
19
- return `+${seconds}s`;
20
- }
21
- const minutes = Math.floor(seconds / 60);
22
- const remainingSeconds = seconds % 60;
23
- if (remainingSeconds === 0) {
24
- return `+${minutes}m`;
25
- }
26
- return `+${minutes}m${remainingSeconds}s`;
27
- }
28
- export function createCliRenderer() {
29
- const state = {
30
- lastEventType: null,
31
- isStreaming: false,
32
- };
33
- function render(event) {
34
- const ts = chalk.gray(`[${formatTimestamp(event.timestamp)}]`);
35
- const data = event.data;
36
- switch (data.kind) {
37
- case "agent_message":
38
- renderAgentMessage(ts, data, state);
39
- break;
40
- case "agent_thought":
41
- renderAgentThought(ts, data, state);
42
- break;
43
- case "tool_start":
44
- renderToolStart(ts, data, state);
45
- break;
46
- case "tool_update":
47
- renderToolUpdate(ts, data);
48
- break;
49
- case "tool_result":
50
- renderToolResult(ts, data, state);
51
- break;
52
- case "status":
53
- renderStatus(ts, data);
54
- break;
55
- }
56
- }
57
- function newSection(label) {
58
- // End any streaming state
59
- if (state.isStreaming) {
60
- process.stdout.write("\n");
61
- state.isStreaming = false;
62
- }
63
- state.lastEventType = null;
64
- console.log("");
65
- console.log(chalk.cyan(`${"─".repeat(60)}`));
66
- console.log(chalk.cyan.bold(label));
67
- console.log(chalk.cyan(`${"─".repeat(60)}`));
68
- console.log("");
69
- }
70
- return { render, newSection };
71
- }
72
- // ============================================================================
73
- // Event Renderers
74
- // ============================================================================
75
- function renderAgentMessage(ts, data, state) {
76
- // New section header if switching from non-message
77
- if (state.lastEventType !== "agent_message" && !state.isStreaming) {
78
- if (state.lastEventType !== null) {
79
- console.log(""); // Spacing
80
- }
81
- console.log(`${ts} ${chalk.blue("--- Agent ---")}`);
82
- }
83
- // Stream content directly
84
- if (data.isStreaming) {
85
- process.stdout.write(data.content);
86
- state.isStreaming = true;
87
- }
88
- else {
89
- // Final content - ensure newline
90
- if (state.isStreaming) {
91
- process.stdout.write("\n");
92
- }
93
- state.isStreaming = false;
94
- }
95
- state.lastEventType = "agent_message";
96
- }
97
- function renderAgentThought(ts, data, state) {
98
- // New section header if switching from non-thought
99
- if (state.lastEventType !== "agent_thought" && !state.isStreaming) {
100
- if (state.lastEventType !== null) {
101
- console.log("");
102
- }
103
- console.log(`${ts} ${chalk.magenta("--- Thinking ---")}`);
104
- }
105
- // Stream content in dim/gray
106
- if (data.isStreaming) {
107
- process.stdout.write(chalk.dim(data.content));
108
- state.isStreaming = true;
109
- }
110
- else {
111
- if (state.isStreaming) {
112
- process.stdout.write("\n");
113
- }
114
- state.isStreaming = false;
115
- }
116
- state.lastEventType = "agent_thought";
117
- }
118
- function renderToolStart(ts, data, state) {
119
- // End any streaming
120
- if (state.isStreaming) {
121
- process.stdout.write("\n");
122
- state.isStreaming = false;
123
- }
124
- if (state.lastEventType !== null) {
125
- console.log("");
126
- }
127
- console.log(`${ts} ${chalk.yellow(`--- Tool: ${data.tool} ---`)}`);
128
- // Show summary if available
129
- if (data.summary) {
130
- console.log(`${ts} ${chalk.gray(data.summary)}`);
131
- }
132
- state.lastEventType = "tool_start";
133
- }
134
- function renderToolUpdate(ts, data) {
135
- // If summary is present, this is the phased input arrival - show the summary
136
- if (data.summary) {
137
- console.log(`${ts} ${chalk.gray(data.summary)}`);
138
- return;
139
- }
140
- // Otherwise show status update
141
- const statusIcon = data.status === "running" ? chalk.blue("⟳") : chalk.gray("○");
142
- console.log(`${ts} ${statusIcon} ${chalk.gray(data.status)}`);
143
- }
144
- function renderToolResult(ts, data, state) {
145
- // Status line
146
- const statusColor = data.status === "completed"
147
- ? chalk.green
148
- : data.status === "failed"
149
- ? chalk.red
150
- : chalk.yellow;
151
- const statusIcon = data.status === "completed" ? "✓" : data.status === "failed" ? "✗" : "○";
152
- console.log(`${ts} ${statusColor(`${statusIcon} ${data.status}`)}`);
153
- // Output (if any)
154
- if (data.output) {
155
- const outputLines = data.output.split("\n");
156
- const indent = " "; // Align with timestamp
157
- // Show output with indentation
158
- for (const line of outputLines.slice(0, 20)) {
159
- console.log(chalk.gray(`${indent}${line}`));
160
- }
161
- if (data.truncated) {
162
- console.log(chalk.gray(`${indent}... (truncated)`));
163
- }
164
- }
165
- state.lastEventType = "tool_result";
166
- }
167
- function renderStatus(ts, data) {
168
- const statusColor = data.status === "completed" || data.status === "end_turn"
169
- ? chalk.green
170
- : data.status === "error" || data.status === "crashed"
171
- ? chalk.red
172
- : chalk.gray;
173
- let statusText = data.status;
174
- if (data.message) {
175
- statusText += `: ${data.message}`;
176
- }
177
- console.log(`${ts} ${statusColor(`[${statusText}]`)}`);
178
- }
179
- /**
180
- * Create a renderer that prefixes all output with a label.
181
- * Used to distinguish subagent output from main agent output.
182
- *
183
- * AC: @ralph-subagent-spawning ac-11
184
- */
185
- export function createPrefixedRenderer(prefix) {
186
- const inner = createCliRenderer();
187
- const prefixStr = chalk.cyan(`${prefix} `);
188
- const state = {
189
- atLineStart: true,
190
- };
191
- /**
192
- * Execute a function with prefixed console.log and stdout.write.
193
- * Ensures all output is prefixed consistently.
194
- */
195
- function withPrefixedOutput(fn) {
196
- const originalLog = console.log;
197
- const originalWrite = process.stdout.write;
198
- // Wrap console.log - prefix is handled by stdout.write wrapper below,
199
- // so we just delegate to the original and mark line start.
200
- console.log = (...args) => {
201
- originalLog(...args);
202
- state.atLineStart = true;
203
- };
204
- // Wrap process.stdout.write for streaming content
205
- // Track line boundaries to only prefix at start of lines
206
- // biome-ignore lint/suspicious/noExplicitAny: stdout.write has complex overloads
207
- process.stdout.write = (chunk, ...args) => {
208
- if (typeof chunk === "string") {
209
- // Split by newlines but preserve them
210
- const parts = chunk.split(/(\n)/);
211
- let output = "";
212
- for (const part of parts) {
213
- if (part === "\n") {
214
- output += part;
215
- state.atLineStart = true;
216
- }
217
- else if (part.length > 0) {
218
- if (state.atLineStart) {
219
- output += prefixStr + part;
220
- state.atLineStart = false;
221
- }
222
- else {
223
- output += part;
224
- }
225
- }
226
- }
227
- return originalWrite.call(process.stdout, output, ...args);
228
- }
229
- // For Uint8Array, pass through unchanged
230
- return originalWrite.call(process.stdout, chunk, ...args);
231
- };
232
- try {
233
- return fn();
234
- }
235
- finally {
236
- console.log = originalLog;
237
- process.stdout.write = originalWrite;
238
- }
239
- }
240
- return {
241
- render(event) {
242
- withPrefixedOutput(() => inner.render(event));
243
- },
244
- newSection(label) {
245
- state.atLineStart = true;
246
- withPrefixedOutput(() => inner.newSection?.(label));
247
- },
248
- };
249
- }
250
- //# sourceMappingURL=cli-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-renderer.js","sourceRoot":"","sources":["../../src/ralph/cli-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Ralph Event System
3
- *
4
- * Translates ACP SessionUpdate events into structured RalphEvents.
5
- * This layer is pure data - no rendering concerns. Enables future
6
- * TUI or other renderers to consume the same event stream.
7
- */
8
- import type { SessionUpdate } from "../acp/types.js";
9
- export type RalphEventType = "agent_message" | "agent_thought" | "tool_start" | "tool_update" | "tool_result" | "status";
10
- export interface RalphEvent {
11
- type: RalphEventType;
12
- timestamp: number;
13
- data: RalphEventData;
14
- }
15
- export type RalphEventData = AgentMessageData | AgentThoughtData | ToolStartData | ToolUpdateData | ToolResultData | StatusData;
16
- export interface AgentMessageData {
17
- kind: "agent_message";
18
- content: string;
19
- isStreaming: boolean;
20
- }
21
- export interface AgentThoughtData {
22
- kind: "agent_thought";
23
- content: string;
24
- isStreaming: boolean;
25
- }
26
- export interface ToolStartData {
27
- kind: "tool_start";
28
- toolCallId: string;
29
- tool: string;
30
- summary: string;
31
- input: unknown;
32
- }
33
- export interface ToolUpdateData {
34
- kind: "tool_update";
35
- toolCallId: string;
36
- tool: string;
37
- status: "pending" | "running";
38
- summary?: string;
39
- }
40
- export interface ToolResultData {
41
- kind: "tool_result";
42
- toolCallId: string;
43
- tool: string;
44
- status: "completed" | "failed" | "cancelled";
45
- output?: string;
46
- truncated: boolean;
47
- }
48
- export interface StatusData {
49
- kind: "status";
50
- status: string;
51
- message?: string;
52
- }
53
- export interface RalphTranslator {
54
- /**
55
- * Translate an ACP SessionUpdate to a RalphEvent.
56
- * Returns null if the update should be suppressed.
57
- */
58
- translate(update: SessionUpdate): RalphEvent | null;
59
- /**
60
- * Signal end of stream. Returns final event if there's pending state.
61
- */
62
- finalize(): RalphEvent | null;
63
- }
64
- export declare function createTranslator(): RalphTranslator;
65
- //# sourceMappingURL=events.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/ralph/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrD,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,eAAe,GACf,YAAY,GACZ,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC;CAC/B;AA2VD,wBAAgB,gBAAgB,IAAI,eAAe,CAqWlD"}