@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
@@ -1,127 +0,0 @@
1
- /**
2
- * Ralph Wrap-Up Agent Module
3
- *
4
- * Handles spawning a wrap-up subagent when the ralph loop exits.
5
- * The wrap-up agent ensures the workspace is in a clean state:
6
- * - Identifies uncommitted changes and reports what they relate to
7
- * - Commits, stashes, or flags changes for human review
8
- * - Produces a brief exit summary
9
- *
10
- * AC: @ralph-wrap-up-agent-on-loop-exit
11
- */
12
- import type { AgentAdapter } from "../agents/adapters.js";
13
- import { type SpawnedAgent } from "../agents/spawner.js";
14
- import { type GitWorkingTree } from "../utils/git.js";
15
- /**
16
- * Exit reason for ralph loop.
17
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-1
18
- */
19
- export type ExitReason = "no_tasks" | "end_loop_signal" | "max_iterations" | "error" | "max_failures" | "explicit_tasks_done";
20
- /**
21
- * Context provided to the wrap-up agent.
22
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-2
23
- */
24
- export interface WrapUpContext {
25
- /** Why the loop is exiting */
26
- exitReason: ExitReason;
27
- /** Session ID for reference */
28
- sessionId: string;
29
- /** Current iteration number */
30
- iteration: number;
31
- /** Max iterations configured */
32
- maxIterations: number;
33
- /** Working tree status from git */
34
- workingTree: GitWorkingTree;
35
- /** Tasks that were in progress when loop ended */
36
- inProgressTasks: Array<{
37
- ref: string;
38
- title: string;
39
- }>;
40
- /** Tasks that were pending review when loop ended */
41
- pendingReviewTasks: Array<{
42
- ref: string;
43
- title: string;
44
- }>;
45
- /** Recent task refs worked on this session (for relating changes) */
46
- recentTaskRefs: string[];
47
- /** Error message if exit was due to error */
48
- errorMessage?: string;
49
- }
50
- /**
51
- * Result of running the wrap-up agent.
52
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-4, ac-5
53
- */
54
- export interface WrapUpResult {
55
- /** Whether wrap-up completed successfully */
56
- success: boolean;
57
- /** Whether the wrap-up agent timed out */
58
- timedOut: boolean;
59
- /** Error message if failed */
60
- error?: string;
61
- /** Whether wrap-up was skipped (e.g., clean working tree, nothing to do) */
62
- skipped: boolean;
63
- /** Reason for skipping if skipped */
64
- skipReason?: string;
65
- }
66
- /**
67
- * Options for running the wrap-up agent.
68
- */
69
- export interface WrapUpOptions {
70
- /** Whether to auto-approve tool requests */
71
- yolo: boolean;
72
- /** Working directory */
73
- cwd: string;
74
- /** Extra arguments to append to adapter args (e.g., auto-approve flags) */
75
- extraArgs?: string[];
76
- /** Tool request handler */
77
- handleRequest: (client: SpawnedAgent["client"], reqId: string | number, method: string, params: unknown) => Promise<void>;
78
- }
79
- /**
80
- * Default wrap-up agent timeout: 2 minutes.
81
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-5
82
- */
83
- export declare const DEFAULT_WRAPUP_TIMEOUT: number;
84
- /** Output prefix for wrap-up agent */
85
- export declare const WRAPUP_AGENT_PREFIX = "[WRAP-UP]";
86
- /**
87
- * Build wrap-up context from current state.
88
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-2
89
- */
90
- export declare function buildWrapUpContext(exitReason: ExitReason, sessionId: string, iteration: number, maxIterations: number, inProgressTasks: Array<{
91
- ref: string;
92
- title: string;
93
- }>, pendingReviewTasks: Array<{
94
- ref: string;
95
- title: string;
96
- }>, recentTaskRefs: string[], cwd?: string, errorMessage?: string): WrapUpContext;
97
- /**
98
- * Check if wrap-up is needed.
99
- * Wrap-up is skipped if working tree is clean and no in-progress tasks.
100
- *
101
- * Key insight: wrap-up's job is to handle uncommitted changes and summarize
102
- * task state. If the working tree is clean and no tasks are in progress,
103
- * there's nothing for wrap-up to do regardless of exit reason.
104
- */
105
- export declare function isWrapUpNeeded(context: WrapUpContext): {
106
- needed: boolean;
107
- reason?: string;
108
- };
109
- /**
110
- * Build the prompt for the wrap-up agent.
111
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-2, ac-3, ac-4
112
- */
113
- export declare function buildWrapUpPrompt(context: WrapUpContext): string;
114
- /**
115
- * Run the wrap-up agent.
116
- *
117
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-1 (spawn), ac-2 (inspect),
118
- * ac-3 (handle changes), ac-4 (summary), ac-5 (timeout)
119
- *
120
- * @param adapter - Agent adapter to use for spawning
121
- * @param context - Wrap-up context
122
- * @param options - Runtime options
123
- * @param timeout - Timeout in ms (default: 2 minutes)
124
- * @returns Result indicating success/failure/timeout/skipped
125
- */
126
- export declare function runWrapUpAgent(adapter: AgentAdapter, context: WrapUpContext, options: WrapUpOptions, timeout?: number): Promise<WrapUpResult>;
127
- //# sourceMappingURL=wrap-up.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrap-up.d.ts","sourceRoot":"","sources":["../../src/ralph/wrap-up.ts"],"names":[],"mappings":"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"}
@@ -1,271 +0,0 @@
1
- /**
2
- * Ralph Wrap-Up Agent Module
3
- *
4
- * Handles spawning a wrap-up subagent when the ralph loop exits.
5
- * The wrap-up agent ensures the workspace is in a clean state:
6
- * - Identifies uncommitted changes and reports what they relate to
7
- * - Commits, stashes, or flags changes for human review
8
- * - Produces a brief exit summary
9
- *
10
- * AC: @ralph-wrap-up-agent-on-loop-exit
11
- */
12
- import { spawnAndInitialize } from "../agents/spawner.js";
13
- import { getWorkingTreeStatus } from "../utils/git.js";
14
- import { createTranslator } from "./events.js";
15
- import { createPrefixedRenderer } from "./cli-renderer.js";
16
- import { RALPH_PROMPT_TIMEOUT } from "./subagent.js";
17
- // ============================================================================
18
- // Constants
19
- // ============================================================================
20
- /**
21
- * Default wrap-up agent timeout: 2 minutes.
22
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-5
23
- */
24
- export const DEFAULT_WRAPUP_TIMEOUT = 2 * 60 * 1000;
25
- /** Output prefix for wrap-up agent */
26
- export const WRAPUP_AGENT_PREFIX = "[WRAP-UP]";
27
- // ============================================================================
28
- // Context Builder
29
- // ============================================================================
30
- /**
31
- * Build wrap-up context from current state.
32
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-2
33
- */
34
- export function buildWrapUpContext(exitReason, sessionId, iteration, maxIterations, inProgressTasks, pendingReviewTasks, recentTaskRefs, cwd, errorMessage) {
35
- const workingTree = getWorkingTreeStatus(cwd);
36
- return {
37
- exitReason,
38
- sessionId,
39
- iteration,
40
- maxIterations,
41
- workingTree,
42
- inProgressTasks,
43
- pendingReviewTasks,
44
- recentTaskRefs,
45
- errorMessage,
46
- };
47
- }
48
- /**
49
- * Check if wrap-up is needed.
50
- * Wrap-up is skipped if working tree is clean and no in-progress tasks.
51
- *
52
- * Key insight: wrap-up's job is to handle uncommitted changes and summarize
53
- * task state. If the working tree is clean and no tasks are in progress,
54
- * there's nothing for wrap-up to do regardless of exit reason.
55
- */
56
- export function isWrapUpNeeded(context) {
57
- // Always need wrap-up if there are uncommitted changes
58
- if (!context.workingTree.clean) {
59
- return { needed: true };
60
- }
61
- // Need wrap-up if there are tasks still in progress
62
- if (context.inProgressTasks.length > 0) {
63
- return { needed: true };
64
- }
65
- // Clean tree, no in-progress tasks - nothing to clean up
66
- // This applies even for error exits - if there's nothing to clean,
67
- // spawning a wrap-up agent just adds latency without benefit
68
- return {
69
- needed: false,
70
- reason: "Working tree is clean and no tasks in progress",
71
- };
72
- }
73
- // ============================================================================
74
- // Prompt Builder
75
- // ============================================================================
76
- /**
77
- * Build the prompt for the wrap-up agent.
78
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-2, ac-3, ac-4
79
- */
80
- export function buildWrapUpPrompt(context) {
81
- const exitReasonDescriptions = {
82
- no_tasks: "No automation-eligible tasks available",
83
- end_loop_signal: "Agent explicitly requested end of loop",
84
- max_iterations: `Reached maximum iterations (${context.maxIterations})`,
85
- error: `Error occurred: ${context.errorMessage || "Unknown error"}`,
86
- max_failures: "Reached maximum consecutive failures",
87
- explicit_tasks_done: "All explicitly scoped tasks completed or blocked",
88
- };
89
- const workingTreeSection = context.workingTree.clean
90
- ? "**Working tree is clean.** No uncommitted changes."
91
- : `**Uncommitted changes detected:**
92
-
93
- Staged (${context.workingTree.staged.length}):
94
- ${context.workingTree.staged.length > 0 ? context.workingTree.staged.map((f) => ` - ${f.path} (${f.status})`).join("\n") : " (none)"}
95
-
96
- Unstaged (${context.workingTree.unstaged.length}):
97
- ${context.workingTree.unstaged.length > 0 ? context.workingTree.unstaged.map((f) => ` - ${f.path} (${f.status})`).join("\n") : " (none)"}
98
-
99
- Untracked (${context.workingTree.untracked.length}):
100
- ${context.workingTree.untracked.length > 0 ? context.workingTree.untracked.map((f) => ` - ${f}`).join("\n") : " (none)"}`;
101
- const taskStateSection = `
102
- **In-progress tasks (${context.inProgressTasks.length}):**
103
- ${context.inProgressTasks.length > 0 ? context.inProgressTasks.map((t) => ` - ${t.ref}: ${t.title}`).join("\n") : " (none)"}
104
-
105
- **Pending review tasks (${context.pendingReviewTasks.length}):**
106
- ${context.pendingReviewTasks.length > 0 ? context.pendingReviewTasks.map((t) => ` - ${t.ref}: ${t.title}`).join("\n") : " (none)"}
107
-
108
- **Recent task refs worked this session:**
109
- ${context.recentTaskRefs.length > 0 ? context.recentTaskRefs.map((r) => ` - ${r}`).join("\n") : " (none)"}`;
110
- return `# Ralph Wrap-Up Agent
111
-
112
- You are a wrap-up agent spawned at the end of a ralph automation session.
113
- Your job is to ensure the workspace is in a clean state before the process terminates.
114
-
115
- ## Exit Information
116
-
117
- **Session ID:** \`${context.sessionId}\`
118
- **Iteration:** ${context.iteration} of ${context.maxIterations}
119
- **Exit Reason:** ${exitReasonDescriptions[context.exitReason]}
120
-
121
- ## Working Tree Status
122
-
123
- ${workingTreeSection}
124
-
125
- ## Task State
126
- ${taskStateSection}
127
-
128
- ## Instructions
129
-
130
- Your responsibilities are:
131
-
132
- ### 1. Handle Uncommitted Changes (if any)
133
-
134
- For each uncommitted change, determine what to do:
135
-
136
- - **If changes relate to a known task** (match file patterns to recent task refs):
137
- - Commit them with an appropriate message including the task ref
138
- - Example: \`git commit -m "wip: partial work on @task-ref\\n\\nRalph session ended before completion."\`
139
-
140
- - **If changes are test files, build artifacts, or generated code:**
141
- - Commit them if they look intentional
142
- - Or add to .gitignore if they shouldn't be tracked
143
-
144
- - **If changes are unclear or potentially destructive:**
145
- - Stash them with a descriptive message: \`git stash push -m "ralph-wrapup: [description]"\`
146
- - Or flag them for human review by leaving uncommitted but documenting
147
-
148
- **CRITICAL:** Do NOT discard any work. Every change must be preserved somehow (commit, stash, or documented).
149
-
150
- ### 2. Produce Exit Summary
151
-
152
- After handling any changes, output a brief summary:
153
-
154
- \`\`\`
155
- === RALPH SESSION EXIT SUMMARY ===
156
- Session: ${context.sessionId}
157
- Exit reason: [reason]
158
- Changes handled: [what was committed/stashed/flagged]
159
- Tasks in progress: [list or "none"]
160
- Tasks pending review: [list or "none"]
161
- Human attention needed: [yes/no - if yes, explain what needs attention]
162
- \`\`\`
163
-
164
- ### 3. Exit
165
-
166
- Once cleanup is complete and summary is output, stop. Do not start new work.
167
-
168
- ## Timeout Warning
169
-
170
- You have 2 minutes to complete wrap-up. If you cannot complete in time, prioritize:
171
- 1. Preserving uncommitted changes (stash if can't commit quickly)
172
- 2. Outputting a minimal summary
173
-
174
- Do not let wrap-up block shutdown indefinitely.
175
- `;
176
- }
177
- // ============================================================================
178
- // Wrap-Up Runner
179
- // ============================================================================
180
- /**
181
- * Run the wrap-up agent.
182
- *
183
- * AC: @ralph-wrap-up-agent-on-loop-exit ac-1 (spawn), ac-2 (inspect),
184
- * ac-3 (handle changes), ac-4 (summary), ac-5 (timeout)
185
- *
186
- * @param adapter - Agent adapter to use for spawning
187
- * @param context - Wrap-up context
188
- * @param options - Runtime options
189
- * @param timeout - Timeout in ms (default: 2 minutes)
190
- * @returns Result indicating success/failure/timeout/skipped
191
- */
192
- export async function runWrapUpAgent(adapter, context, options, timeout = DEFAULT_WRAPUP_TIMEOUT) {
193
- // Check if wrap-up is needed
194
- const { needed, reason } = isWrapUpNeeded(context);
195
- if (!needed) {
196
- return {
197
- success: true,
198
- timedOut: false,
199
- skipped: true,
200
- skipReason: reason,
201
- };
202
- }
203
- const prompt = buildWrapUpPrompt(context);
204
- let agent = null;
205
- try {
206
- // AC: @ralph-wrap-up-agent-on-loop-exit ac-1 - Spawn wrap-up agent
207
- agent = await spawnAndInitialize(adapter, {
208
- cwd: options.cwd,
209
- extraArgs: options.extraArgs,
210
- clientOptions: {
211
- clientInfo: {
212
- name: "kspec-ralph-wrapup",
213
- version: "1.0.0",
214
- },
215
- methodTimeouts: {
216
- "session/prompt": RALPH_PROMPT_TIMEOUT,
217
- "session/resume": RALPH_PROMPT_TIMEOUT,
218
- },
219
- },
220
- });
221
- // Set up streaming output with prefix
222
- const translator = createTranslator();
223
- const renderer = createPrefixedRenderer(WRAPUP_AGENT_PREFIX);
224
- agent.client.on("update", (_sid, update) => {
225
- const event = translator.translate(update);
226
- if (event) {
227
- renderer.render(event);
228
- }
229
- });
230
- // Set up tool request handler
231
- agent.client.on("request", (reqId, method, params) => {
232
- options
233
- .handleRequest(agent.client, reqId, method, params)
234
- .catch((err) => {
235
- agent.client.respondError(reqId, -32000, err.message);
236
- });
237
- });
238
- // Create ACP session
239
- const acpSessionId = await agent.client.newSession({
240
- cwd: options.cwd,
241
- mcpServers: [],
242
- });
243
- // AC: @ralph-wrap-up-agent-on-loop-exit ac-5 - Timeout handling
244
- const timeoutPromise = new Promise((_, reject) => {
245
- setTimeout(() => reject(new Error("WRAPUP_TIMEOUT")), timeout);
246
- });
247
- // Send prompt and wait for completion
248
- const promptPromise = agent.client.prompt({
249
- sessionId: acpSessionId,
250
- prompt: [{ type: "text", text: prompt }],
251
- });
252
- // Race between completion and timeout
253
- await Promise.race([promptPromise, timeoutPromise]);
254
- return { success: true, timedOut: false, skipped: false };
255
- }
256
- catch (err) {
257
- const error = err;
258
- // AC: @ralph-wrap-up-agent-on-loop-exit ac-5 - Timeout detection
259
- if (error.message === "WRAPUP_TIMEOUT") {
260
- return { success: false, timedOut: true, skipped: false };
261
- }
262
- return { success: false, timedOut: false, skipped: false, error: error.message };
263
- }
264
- finally {
265
- // Always clean up the agent process
266
- if (agent) {
267
- agent.kill();
268
- }
269
- }
270
- }
271
- //# sourceMappingURL=wrap-up.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrap-up.js","sourceRoot":"","sources":["../../src/ralph/wrap-up.ts"],"names":[],"mappings":"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"}