@kynetic-ai/spec 0.11.0 → 0.12.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 (501) hide show
  1. package/README.md +55 -455
  2. package/dist/agent-runtime/bootstrap.d.ts +31 -0
  3. package/dist/agent-runtime/bootstrap.d.ts.map +1 -0
  4. package/dist/agent-runtime/bootstrap.js +302 -0
  5. package/dist/agent-runtime/bootstrap.js.map +1 -0
  6. package/dist/agent-runtime/dispatch.d.ts +119 -10
  7. package/dist/agent-runtime/dispatch.d.ts.map +1 -1
  8. package/dist/agent-runtime/dispatch.js +1154 -219
  9. package/dist/agent-runtime/dispatch.js.map +1 -1
  10. package/dist/agent-runtime/invocation.d.ts +28 -1
  11. package/dist/agent-runtime/invocation.d.ts.map +1 -1
  12. package/dist/agent-runtime/invocation.js +171 -59
  13. package/dist/agent-runtime/invocation.js.map +1 -1
  14. package/dist/agent-runtime/prompts.d.ts +9 -0
  15. package/dist/agent-runtime/prompts.d.ts.map +1 -1
  16. package/dist/agent-runtime/prompts.js +42 -7
  17. package/dist/agent-runtime/prompts.js.map +1 -1
  18. package/dist/agent-runtime/session-event-accumulator.d.ts +83 -0
  19. package/dist/agent-runtime/session-event-accumulator.d.ts.map +1 -0
  20. package/dist/agent-runtime/session-event-accumulator.js +203 -0
  21. package/dist/agent-runtime/session-event-accumulator.js.map +1 -0
  22. package/dist/agent-runtime/session-event-types.d.ts +67 -0
  23. package/dist/agent-runtime/session-event-types.d.ts.map +1 -0
  24. package/dist/agent-runtime/session-event-types.js +13 -0
  25. package/dist/agent-runtime/session-event-types.js.map +1 -0
  26. package/dist/agent-runtime/workspace.d.ts +244 -0
  27. package/dist/agent-runtime/workspace.d.ts.map +1 -0
  28. package/dist/agent-runtime/workspace.js +2025 -0
  29. package/dist/agent-runtime/workspace.js.map +1 -0
  30. package/dist/agents/adapters.d.ts.map +1 -1
  31. package/dist/agents/adapters.js +58 -13
  32. package/dist/agents/adapters.js.map +1 -1
  33. package/dist/agents/spawner.d.ts +8 -0
  34. package/dist/agents/spawner.d.ts.map +1 -1
  35. package/dist/agents/spawner.js +25 -3
  36. package/dist/agents/spawner.js.map +1 -1
  37. package/dist/cli/batch-exec.js +1 -1
  38. package/dist/cli/batch-exec.js.map +1 -1
  39. package/dist/cli/command-annotations.d.ts +15 -3
  40. package/dist/cli/command-annotations.d.ts.map +1 -1
  41. package/dist/cli/command-annotations.js +23 -3
  42. package/dist/cli/command-annotations.js.map +1 -1
  43. package/dist/cli/commands/agent.d.ts +2 -0
  44. package/dist/cli/commands/agent.d.ts.map +1 -1
  45. package/dist/cli/commands/agent.js +144 -27
  46. package/dist/cli/commands/agent.js.map +1 -1
  47. package/dist/cli/commands/agents.d.ts.map +1 -1
  48. package/dist/cli/commands/agents.js +5 -5
  49. package/dist/cli/commands/agents.js.map +1 -1
  50. package/dist/cli/commands/derive.d.ts.map +1 -1
  51. package/dist/cli/commands/derive.js +118 -3
  52. package/dist/cli/commands/derive.js.map +1 -1
  53. package/dist/cli/commands/guard.d.ts.map +1 -1
  54. package/dist/cli/commands/guard.js +8 -6
  55. package/dist/cli/commands/guard.js.map +1 -1
  56. package/dist/cli/commands/index.d.ts +1 -0
  57. package/dist/cli/commands/index.d.ts.map +1 -1
  58. package/dist/cli/commands/index.js +1 -0
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init.d.ts.map +1 -1
  61. package/dist/cli/commands/init.js +20 -0
  62. package/dist/cli/commands/init.js.map +1 -1
  63. package/dist/cli/commands/item.d.ts.map +1 -1
  64. package/dist/cli/commands/item.js +205 -47
  65. package/dist/cli/commands/item.js.map +1 -1
  66. package/dist/cli/commands/log.d.ts.map +1 -1
  67. package/dist/cli/commands/log.js +24 -10
  68. package/dist/cli/commands/log.js.map +1 -1
  69. package/dist/cli/commands/plan-import.d.ts +3 -3
  70. package/dist/cli/commands/plan-import.d.ts.map +1 -1
  71. package/dist/cli/commands/plan-import.js +213 -528
  72. package/dist/cli/commands/plan-import.js.map +1 -1
  73. package/dist/cli/commands/plan.d.ts.map +1 -1
  74. package/dist/cli/commands/plan.js +533 -83
  75. package/dist/cli/commands/plan.js.map +1 -1
  76. package/dist/cli/commands/review.d.ts +14 -0
  77. package/dist/cli/commands/review.d.ts.map +1 -0
  78. package/dist/cli/commands/review.js +1142 -0
  79. package/dist/cli/commands/review.js.map +1 -0
  80. package/dist/cli/commands/serve.d.ts +1 -0
  81. package/dist/cli/commands/serve.d.ts.map +1 -1
  82. package/dist/cli/commands/serve.js +33 -10
  83. package/dist/cli/commands/serve.js.map +1 -1
  84. package/dist/cli/commands/session/checkpoint.d.ts +2 -4
  85. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  86. package/dist/cli/commands/session/checkpoint.js +6 -107
  87. package/dist/cli/commands/session/checkpoint.js.map +1 -1
  88. package/dist/cli/commands/session/commands.d.ts.map +1 -1
  89. package/dist/cli/commands/session/commands.js +33 -23
  90. package/dist/cli/commands/session/commands.js.map +1 -1
  91. package/dist/cli/commands/session/compact.js +4 -4
  92. package/dist/cli/commands/session/compact.js.map +1 -1
  93. package/dist/cli/commands/session/create.js +2 -2
  94. package/dist/cli/commands/session/create.js.map +1 -1
  95. package/dist/cli/commands/session/format.d.ts.map +1 -1
  96. package/dist/cli/commands/session/format.js +1 -6
  97. package/dist/cli/commands/session/format.js.map +1 -1
  98. package/dist/cli/commands/session/log.d.ts +32 -7
  99. package/dist/cli/commands/session/log.d.ts.map +1 -1
  100. package/dist/cli/commands/session/log.js +166 -60
  101. package/dist/cli/commands/session/log.js.map +1 -1
  102. package/dist/cli/commands/session/migrate.d.ts +9 -0
  103. package/dist/cli/commands/session/migrate.d.ts.map +1 -0
  104. package/dist/cli/commands/session/migrate.js +46 -0
  105. package/dist/cli/commands/session/migrate.js.map +1 -0
  106. package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
  107. package/dist/cli/commands/session/stale-close.js +5 -8
  108. package/dist/cli/commands/session/stale-close.js.map +1 -1
  109. package/dist/cli/commands/session/types.d.ts +1 -1
  110. package/dist/cli/commands/session/types.d.ts.map +1 -1
  111. package/dist/cli/commands/setup.d.ts +2 -2
  112. package/dist/cli/commands/setup.d.ts.map +1 -1
  113. package/dist/cli/commands/setup.js +287 -257
  114. package/dist/cli/commands/setup.js.map +1 -1
  115. package/dist/cli/commands/shadow.d.ts.map +1 -1
  116. package/dist/cli/commands/shadow.js +147 -31
  117. package/dist/cli/commands/shadow.js.map +1 -1
  118. package/dist/cli/commands/skill-crud.d.ts +7 -0
  119. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  120. package/dist/cli/commands/skill-crud.js +41 -18
  121. package/dist/cli/commands/skill-crud.js.map +1 -1
  122. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  123. package/dist/cli/commands/skill-diff.js +29 -3
  124. package/dist/cli/commands/skill-diff.js.map +1 -1
  125. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  126. package/dist/cli/commands/skill-install.js +5 -4
  127. package/dist/cli/commands/skill-install.js.map +1 -1
  128. package/dist/cli/commands/task.d.ts.map +1 -1
  129. package/dist/cli/commands/task.js +359 -49
  130. package/dist/cli/commands/task.js.map +1 -1
  131. package/dist/cli/commands/trait.d.ts.map +1 -1
  132. package/dist/cli/commands/trait.js +5 -27
  133. package/dist/cli/commands/trait.js.map +1 -1
  134. package/dist/cli/commands/validate.d.ts.map +1 -1
  135. package/dist/cli/commands/validate.js +113 -52
  136. package/dist/cli/commands/validate.js.map +1 -1
  137. package/dist/cli/index.d.ts.map +1 -1
  138. package/dist/cli/index.js +69 -2
  139. package/dist/cli/index.js.map +1 -1
  140. package/dist/cli/output.d.ts +26 -0
  141. package/dist/cli/output.d.ts.map +1 -1
  142. package/dist/cli/output.js +108 -1
  143. package/dist/cli/output.js.map +1 -1
  144. package/dist/cli/sync-mode.d.ts +44 -0
  145. package/dist/cli/sync-mode.d.ts.map +1 -0
  146. package/dist/cli/sync-mode.js +64 -0
  147. package/dist/cli/sync-mode.js.map +1 -0
  148. package/dist/daemon/middleware/project-context.ts +25 -7
  149. package/dist/daemon/project-context.ts +18 -0
  150. package/dist/daemon/routes/agent-dispatch.ts +99 -22
  151. package/dist/daemon/routes/aggregation.ts +184 -0
  152. package/dist/daemon/routes/inbox.ts +5 -0
  153. package/dist/daemon/routes/items.ts +145 -0
  154. package/dist/daemon/routes/meta.ts +1 -1
  155. package/dist/daemon/routes/projects.ts +28 -6
  156. package/dist/daemon/routes/ref-resolution.ts +119 -0
  157. package/dist/daemon/routes/refs.ts +42 -0
  158. package/dist/daemon/routes/session-related.ts +140 -0
  159. package/dist/daemon/routes/sessions.ts +420 -19
  160. package/dist/daemon/routes/tasks.ts +62 -5
  161. package/dist/daemon/routes/triage.ts +40 -1
  162. package/dist/daemon/server.ts +143 -49
  163. package/dist/daemon/session-sync.ts +11 -0
  164. package/dist/daemon/shadow-sync.ts +11 -0
  165. package/dist/daemon/watcher.ts +56 -5
  166. package/dist/daemon/websocket/project-resolution.ts +77 -0
  167. package/dist/export/json.d.ts.map +1 -1
  168. package/dist/export/json.js +104 -1
  169. package/dist/export/json.js.map +1 -1
  170. package/dist/export/types.d.ts +52 -1
  171. package/dist/export/types.d.ts.map +1 -1
  172. package/dist/index.d.ts +1 -0
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +1 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/parser/agent-detection.d.ts +1 -1
  177. package/dist/parser/agent-detection.d.ts.map +1 -1
  178. package/dist/parser/agent-detection.js +10 -0
  179. package/dist/parser/agent-detection.js.map +1 -1
  180. package/dist/parser/config.d.ts +397 -2
  181. package/dist/parser/config.d.ts.map +1 -1
  182. package/dist/parser/config.js +125 -3
  183. package/dist/parser/config.js.map +1 -1
  184. package/dist/parser/dispatch-workspaces.d.ts +18 -0
  185. package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
  186. package/dist/parser/dispatch-workspaces.js +209 -0
  187. package/dist/parser/dispatch-workspaces.js.map +1 -0
  188. package/dist/parser/doctor.d.ts.map +1 -1
  189. package/dist/parser/doctor.js +27 -8
  190. package/dist/parser/doctor.js.map +1 -1
  191. package/dist/parser/file-lock.d.ts.map +1 -1
  192. package/dist/parser/file-lock.js +9 -2
  193. package/dist/parser/file-lock.js.map +1 -1
  194. package/dist/parser/index.d.ts +6 -0
  195. package/dist/parser/index.d.ts.map +1 -1
  196. package/dist/parser/index.js +6 -0
  197. package/dist/parser/index.js.map +1 -1
  198. package/dist/parser/plans.d.ts.map +1 -1
  199. package/dist/parser/plans.js +1 -0
  200. package/dist/parser/plans.js.map +1 -1
  201. package/dist/parser/refs.d.ts +8 -1
  202. package/dist/parser/refs.d.ts.map +1 -1
  203. package/dist/parser/refs.js +27 -1
  204. package/dist/parser/refs.js.map +1 -1
  205. package/dist/parser/review-operations.d.ts +72 -0
  206. package/dist/parser/review-operations.d.ts.map +1 -0
  207. package/dist/parser/review-operations.js +185 -0
  208. package/dist/parser/review-operations.js.map +1 -0
  209. package/dist/parser/review-task-integration.d.ts +78 -0
  210. package/dist/parser/review-task-integration.d.ts.map +1 -0
  211. package/dist/parser/review-task-integration.js +173 -0
  212. package/dist/parser/review-task-integration.js.map +1 -0
  213. package/dist/parser/review-threads.d.ts +101 -0
  214. package/dist/parser/review-threads.d.ts.map +1 -0
  215. package/dist/parser/review-threads.js +222 -0
  216. package/dist/parser/review-threads.js.map +1 -0
  217. package/dist/parser/review-validation.d.ts +69 -0
  218. package/dist/parser/review-validation.d.ts.map +1 -0
  219. package/dist/parser/review-validation.js +207 -0
  220. package/dist/parser/review-validation.js.map +1 -0
  221. package/dist/parser/reviews.d.ts +58 -0
  222. package/dist/parser/reviews.d.ts.map +1 -0
  223. package/dist/parser/reviews.js +230 -0
  224. package/dist/parser/reviews.js.map +1 -0
  225. package/dist/parser/session-branch.d.ts +91 -0
  226. package/dist/parser/session-branch.d.ts.map +1 -0
  227. package/dist/parser/session-branch.js +565 -0
  228. package/dist/parser/session-branch.js.map +1 -0
  229. package/dist/parser/session-sync-scheduler.d.ts +53 -0
  230. package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
  231. package/dist/parser/session-sync-scheduler.js +100 -0
  232. package/dist/parser/session-sync-scheduler.js.map +1 -0
  233. package/dist/parser/setup-status.d.ts +7 -1
  234. package/dist/parser/setup-status.d.ts.map +1 -1
  235. package/dist/parser/setup-status.js +104 -39
  236. package/dist/parser/setup-status.js.map +1 -1
  237. package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
  238. package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
  239. package/dist/parser/shadow-sync-scheduler.js +139 -0
  240. package/dist/parser/shadow-sync-scheduler.js.map +1 -0
  241. package/dist/parser/shadow.d.ts +121 -14
  242. package/dist/parser/shadow.d.ts.map +1 -1
  243. package/dist/parser/shadow.js +752 -27
  244. package/dist/parser/shadow.js.map +1 -1
  245. package/dist/parser/skill-render.d.ts +24 -0
  246. package/dist/parser/skill-render.d.ts.map +1 -1
  247. package/dist/parser/skill-render.js +98 -26
  248. package/dist/parser/skill-render.js.map +1 -1
  249. package/dist/parser/validate.d.ts +43 -3
  250. package/dist/parser/validate.d.ts.map +1 -1
  251. package/dist/parser/validate.js +204 -30
  252. package/dist/parser/validate.js.map +1 -1
  253. package/dist/parser/yaml.d.ts +47 -11
  254. package/dist/parser/yaml.d.ts.map +1 -1
  255. package/dist/parser/yaml.js +329 -149
  256. package/dist/parser/yaml.js.map +1 -1
  257. package/dist/review/checks.d.ts +97 -0
  258. package/dist/review/checks.d.ts.map +1 -0
  259. package/dist/review/checks.js +175 -0
  260. package/dist/review/checks.js.map +1 -0
  261. package/dist/review/index.d.ts +3 -0
  262. package/dist/review/index.d.ts.map +1 -0
  263. package/dist/review/index.js +3 -0
  264. package/dist/review/index.js.map +1 -0
  265. package/dist/review/subject-bindings.d.ts +83 -0
  266. package/dist/review/subject-bindings.d.ts.map +1 -0
  267. package/dist/review/subject-bindings.js +175 -0
  268. package/dist/review/subject-bindings.js.map +1 -0
  269. package/dist/schema/common.d.ts +26 -0
  270. package/dist/schema/common.d.ts.map +1 -1
  271. package/dist/schema/common.js +13 -0
  272. package/dist/schema/common.js.map +1 -1
  273. package/dist/schema/dispatch-workspace.d.ts +2643 -0
  274. package/dist/schema/dispatch-workspace.d.ts.map +1 -0
  275. package/dist/schema/dispatch-workspace.js +187 -0
  276. package/dist/schema/dispatch-workspace.js.map +1 -0
  277. package/dist/schema/inbox.d.ts +8 -8
  278. package/dist/schema/index.d.ts +2 -0
  279. package/dist/schema/index.d.ts.map +1 -1
  280. package/dist/schema/index.js +2 -0
  281. package/dist/schema/index.js.map +1 -1
  282. package/dist/schema/meta.d.ts +648 -116
  283. package/dist/schema/meta.d.ts.map +1 -1
  284. package/dist/schema/meta.js +27 -0
  285. package/dist/schema/meta.js.map +1 -1
  286. package/dist/schema/plan.d.ts +30 -19
  287. package/dist/schema/plan.d.ts.map +1 -1
  288. package/dist/schema/plan.js +3 -1
  289. package/dist/schema/plan.js.map +1 -1
  290. package/dist/schema/review-records.d.ts +2676 -0
  291. package/dist/schema/review-records.d.ts.map +1 -0
  292. package/dist/schema/review-records.js +232 -0
  293. package/dist/schema/review-records.js.map +1 -0
  294. package/dist/schema/spec.d.ts +32 -14
  295. package/dist/schema/spec.d.ts.map +1 -1
  296. package/dist/schema/spec.js +5 -0
  297. package/dist/schema/spec.js.map +1 -1
  298. package/dist/schema/task.d.ts +187 -29
  299. package/dist/schema/task.d.ts.map +1 -1
  300. package/dist/schema/task.js +12 -2
  301. package/dist/schema/task.js.map +1 -1
  302. package/dist/schema/triage.d.ts +22 -22
  303. package/dist/sessions/cache.d.ts +119 -0
  304. package/dist/sessions/cache.d.ts.map +1 -0
  305. package/dist/sessions/cache.js +284 -0
  306. package/dist/sessions/cache.js.map +1 -0
  307. package/dist/sessions/index.d.ts +1 -0
  308. package/dist/sessions/index.d.ts.map +1 -1
  309. package/dist/sessions/index.js +2 -0
  310. package/dist/sessions/index.js.map +1 -1
  311. package/dist/sessions/legacy.d.ts +77 -0
  312. package/dist/sessions/legacy.d.ts.map +1 -0
  313. package/dist/sessions/legacy.js +146 -0
  314. package/dist/sessions/legacy.js.map +1 -0
  315. package/dist/sessions/store.d.ts +103 -73
  316. package/dist/sessions/store.d.ts.map +1 -1
  317. package/dist/sessions/store.js +335 -186
  318. package/dist/sessions/store.js.map +1 -1
  319. package/dist/sessions/types.d.ts +44 -16
  320. package/dist/sessions/types.d.ts.map +1 -1
  321. package/dist/sessions/types.js +11 -2
  322. package/dist/sessions/types.js.map +1 -1
  323. package/dist/strings/errors.d.ts +32 -0
  324. package/dist/strings/errors.d.ts.map +1 -1
  325. package/dist/strings/errors.js +17 -0
  326. package/dist/strings/errors.js.map +1 -1
  327. package/dist/strings/labels.d.ts +1 -0
  328. package/dist/strings/labels.d.ts.map +1 -1
  329. package/dist/strings/labels.js +1 -0
  330. package/dist/strings/labels.js.map +1 -1
  331. package/dist/utils/activity.d.ts +101 -0
  332. package/dist/utils/activity.d.ts.map +1 -0
  333. package/dist/utils/activity.js +408 -0
  334. package/dist/utils/activity.js.map +1 -0
  335. package/dist/utils/git.d.ts +31 -0
  336. package/dist/utils/git.d.ts.map +1 -1
  337. package/dist/utils/git.js +87 -0
  338. package/dist/utils/git.js.map +1 -1
  339. package/dist/utils/index.d.ts +2 -0
  340. package/dist/utils/index.d.ts.map +1 -1
  341. package/dist/utils/index.js +1 -0
  342. package/dist/utils/index.js.map +1 -1
  343. package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
  344. package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
  345. package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
  346. package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
  347. package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
  348. package/dist/web-ui/_app/immutable/chunks/{CPPfDSei.js → B25nWFyA.js} +4 -4
  349. package/dist/web-ui/_app/immutable/chunks/{DBYE9jOd.js → B2bcA_Q_.js} +1 -1
  350. package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
  351. package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
  352. package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
  353. package/dist/web-ui/_app/immutable/chunks/{DzO4hlg9.js → B8tYZKAE.js} +1 -1
  354. package/dist/web-ui/_app/immutable/chunks/{B5LJFxqa.js → BFGAyJjD.js} +1 -1
  355. package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
  356. package/dist/web-ui/_app/immutable/chunks/{DAMmvwn4.js → BG8eSzAd.js} +1 -1
  357. package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
  358. package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
  359. package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
  360. package/dist/web-ui/_app/immutable/chunks/{DxCk-KHc.js → Bp5pFYXL.js} +1 -1
  361. package/dist/web-ui/_app/immutable/chunks/{B8a0xDxR.js → BsJFsuAT.js} +1 -1
  362. package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
  363. package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
  364. package/dist/web-ui/_app/immutable/chunks/{BVA9Exy-.js → C0w6WDm5.js} +1 -1
  365. package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
  366. package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
  367. package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
  368. package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
  369. package/dist/web-ui/_app/immutable/chunks/{BJ0JX3ea.js → CWUQwB9H.js} +1 -1
  370. package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
  371. package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
  372. package/dist/web-ui/_app/immutable/chunks/{D3vxvonu.js → CaAJD3dl.js} +1 -1
  373. package/dist/web-ui/_app/immutable/chunks/{BP352uRn.js → ChB5iyEL.js} +1 -1
  374. package/dist/web-ui/_app/immutable/chunks/{pE6cYWlS.js → ChQD-6N8.js} +1 -1
  375. package/dist/web-ui/_app/immutable/chunks/{Eo4gF7ih.js → CqbsoCwA.js} +1 -1
  376. package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
  377. package/dist/web-ui/_app/immutable/chunks/{Cncwi6fQ.js → DJtZNgcs.js} +1 -1
  378. package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
  379. package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
  380. package/dist/web-ui/_app/immutable/chunks/{DjcCz-PU.js → DW_subyT.js} +2 -2
  381. package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
  382. package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
  383. package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
  384. package/dist/web-ui/_app/immutable/chunks/{BysXJlZb.js → Dg_zDpDS.js} +1 -1
  385. package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
  386. package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
  387. package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
  388. package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
  389. package/dist/web-ui/_app/immutable/chunks/{D9QNBZM2.js → DqT6OH_u.js} +2 -2
  390. package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
  391. package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
  392. package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
  393. package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
  394. package/dist/web-ui/_app/immutable/chunks/{C076q4JN.js → HNjs76Zz.js} +1 -1
  395. package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
  396. package/dist/web-ui/_app/immutable/chunks/{BkOJ8DkV.js → P0A_fJvS.js} +1 -1
  397. package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
  398. package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
  399. package/dist/web-ui/_app/immutable/chunks/{k_Qegko0.js → Xvwhx_F1.js} +1 -1
  400. package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
  401. package/dist/web-ui/_app/immutable/chunks/{62JVKtnb.js → dh5HeqUr.js} +1 -1
  402. package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
  403. package/dist/web-ui/_app/immutable/chunks/{D82RulSH.js → gPrj-hqC.js} +1 -1
  404. package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
  405. package/dist/web-ui/_app/immutable/chunks/{CwELQvbx.js → oTsvd9y4.js} +1 -1
  406. package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
  407. package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
  408. package/dist/web-ui/_app/immutable/chunks/{DvA-KON-.js → y4GeEH6k.js} +1 -1
  409. package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
  410. package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
  411. package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
  412. package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
  413. package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
  414. package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
  415. package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
  416. package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
  417. package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
  418. package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
  419. package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
  420. package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
  421. package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
  422. package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
  423. package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
  424. package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
  425. package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
  426. package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
  427. package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
  428. package/dist/web-ui/_app/version.json +1 -1
  429. package/dist/web-ui/favicon-192.png +0 -0
  430. package/dist/web-ui/favicon-32.png +0 -0
  431. package/dist/web-ui/favicon.ico +0 -0
  432. package/dist/web-ui/index.html +14 -14
  433. package/package.json +12 -6
  434. package/plugin/.claude-plugin/marketplace.json +1 -1
  435. package/plugin/.claude-plugin/plugin.json +1 -1
  436. package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
  437. package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
  438. package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
  439. package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
  440. package/templates/agents-sections/04-pr-workflow.md +15 -12
  441. package/templates/agents-sections/06-ralph-loop.md +15 -10
  442. package/templates/skills/manifest.yaml +25 -7
  443. package/templates/skills/merge/SKILL.md +120 -0
  444. package/templates/skills/plan/SKILL.md +55 -26
  445. package/templates/skills/review/SKILL.md +346 -130
  446. package/templates/skills/task-work/SKILL.md +93 -103
  447. package/dist/web-ui/_app/immutable/assets/0.BJaYkGW2.css +0 -1
  448. package/dist/web-ui/_app/immutable/assets/9.SzGLxi4x.css +0 -1
  449. package/dist/web-ui/_app/immutable/chunks/-lc0BifF.js +0 -1
  450. package/dist/web-ui/_app/immutable/chunks/8RBjHMN1.js +0 -1
  451. package/dist/web-ui/_app/immutable/chunks/B5wTVqxm.js +0 -1
  452. package/dist/web-ui/_app/immutable/chunks/B6VSmczZ.js +0 -1
  453. package/dist/web-ui/_app/immutable/chunks/BEOQc37C.js +0 -1
  454. package/dist/web-ui/_app/immutable/chunks/BHtYorjv.js +0 -1
  455. package/dist/web-ui/_app/immutable/chunks/BMuCqDX8.js +0 -1
  456. package/dist/web-ui/_app/immutable/chunks/BUZujXJ2.js +0 -1
  457. package/dist/web-ui/_app/immutable/chunks/BWET-efb.js +0 -1
  458. package/dist/web-ui/_app/immutable/chunks/BXkNecpt.js +0 -1
  459. package/dist/web-ui/_app/immutable/chunks/BYzrIfX8.js +0 -1
  460. package/dist/web-ui/_app/immutable/chunks/BpuwufMc.js +0 -1
  461. package/dist/web-ui/_app/immutable/chunks/BwMO4RrG.js +0 -1
  462. package/dist/web-ui/_app/immutable/chunks/C33JaVbg.js +0 -1
  463. package/dist/web-ui/_app/immutable/chunks/CGtqifKp.js +0 -1
  464. package/dist/web-ui/_app/immutable/chunks/CHDZZ7OG.js +0 -1
  465. package/dist/web-ui/_app/immutable/chunks/CUir3f4J.js +0 -60
  466. package/dist/web-ui/_app/immutable/chunks/CrCIbn0C.js +0 -1
  467. package/dist/web-ui/_app/immutable/chunks/D6TVmR9T.js +0 -1
  468. package/dist/web-ui/_app/immutable/chunks/D7LTux4W.js +0 -1
  469. package/dist/web-ui/_app/immutable/chunks/DAh4Wfku.js +0 -1
  470. package/dist/web-ui/_app/immutable/chunks/DAx07bEQ.js +0 -1
  471. package/dist/web-ui/_app/immutable/chunks/DOno4cA2.js +0 -1
  472. package/dist/web-ui/_app/immutable/chunks/DQA8NZIH.js +0 -2
  473. package/dist/web-ui/_app/immutable/chunks/DRfPm2bo.js +0 -1
  474. package/dist/web-ui/_app/immutable/chunks/DhQhksaB.js +0 -1
  475. package/dist/web-ui/_app/immutable/chunks/DjG7s6hm.js +0 -1
  476. package/dist/web-ui/_app/immutable/chunks/DkltRNvh.js +0 -1
  477. package/dist/web-ui/_app/immutable/chunks/DlaTnPKL.js +0 -1
  478. package/dist/web-ui/_app/immutable/chunks/ExCq5swK.js +0 -1
  479. package/dist/web-ui/_app/immutable/chunks/T3zZGv51.js +0 -1
  480. package/dist/web-ui/_app/immutable/chunks/XZumBYeP.js +0 -1
  481. package/dist/web-ui/_app/immutable/chunks/_ySfNjkF.js +0 -1
  482. package/dist/web-ui/_app/immutable/chunks/iEtR5cV6.js +0 -1
  483. package/dist/web-ui/_app/immutable/entry/app.Cgu6uKeS.js +0 -2
  484. package/dist/web-ui/_app/immutable/entry/start.9XifnLoB.js +0 -1
  485. package/dist/web-ui/_app/immutable/nodes/0.DISwcKSK.js +0 -1
  486. package/dist/web-ui/_app/immutable/nodes/1.Cx2Ufqp1.js +0 -1
  487. package/dist/web-ui/_app/immutable/nodes/10.C3z8ijXL.js +0 -1
  488. package/dist/web-ui/_app/immutable/nodes/11.DZdIjZmM.js +0 -1
  489. package/dist/web-ui/_app/immutable/nodes/12.FsIGfAOa.js +0 -1
  490. package/dist/web-ui/_app/immutable/nodes/13.DZoFwagf.js +0 -1
  491. package/dist/web-ui/_app/immutable/nodes/14.DaIzDKbQ.js +0 -1
  492. package/dist/web-ui/_app/immutable/nodes/15.BYyt4XWF.js +0 -2
  493. package/dist/web-ui/_app/immutable/nodes/16.CQkSqpOe.js +0 -1
  494. package/dist/web-ui/_app/immutable/nodes/2.Bkf_j2UJ.js +0 -1
  495. package/dist/web-ui/_app/immutable/nodes/3.kaMCurJG.js +0 -1
  496. package/dist/web-ui/_app/immutable/nodes/4.BSsFPTHG.js +0 -2
  497. package/dist/web-ui/_app/immutable/nodes/5.CpPlcCEZ.js +0 -1
  498. package/dist/web-ui/_app/immutable/nodes/6.BN4FqQmY.js +0 -1
  499. package/dist/web-ui/_app/immutable/nodes/7.9kBYIZik.js +0 -1
  500. package/dist/web-ui/_app/immutable/nodes/8.BuijtZ6B.js +0 -1
  501. package/dist/web-ui/_app/immutable/nodes/9.C-Weba8R.js +0 -1
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Session Event Accumulator
3
+ *
4
+ * Buffers text from ACP SessionUpdate events and flushes at newline boundaries,
5
+ * emitting typed session lifecycle events. Tracks state per session to support
6
+ * concurrent sessions independently.
7
+ *
8
+ * AC: @session-event-broadcast ac-newline-streaming — flush at newline boundaries
9
+ * AC: @session-event-broadcast ac-boundary-flush — flush on state transitions
10
+ * AC: @session-event-broadcast ac-per-session-state — per-session accumulator state
11
+ * AC: @session-event-broadcast ac-tool-input-included — tool_call_start includes input
12
+ * AC: @session-event-broadcast ac-replaces-text-chunks — replaces agent_text_chunk
13
+ */
14
+ import type { SessionUpdate } from "../acp/index.js";
15
+ import type { SessionEventData } from "./session-event-types.js";
16
+ /** The content mode the accumulator is currently tracking for a session. */
17
+ type ContentMode = "message" | "thinking" | "idle";
18
+ /** Per-session accumulator state. */
19
+ export interface AccumulatorState {
20
+ buffer: string;
21
+ mode: ContentMode;
22
+ /** Tracks active tool calls for duration_ms calculation. */
23
+ activeToolCalls: Map<string, {
24
+ toolName: string;
25
+ startTime: number;
26
+ }>;
27
+ }
28
+ /** Context for event emission (session identity + agent metadata). */
29
+ export interface SessionContext {
30
+ sessionId: string;
31
+ agentId: string;
32
+ taskId: string | null;
33
+ taskTitle: string | null;
34
+ }
35
+ /** Callback invoked when the accumulator produces a typed session event. */
36
+ export type SessionEventEmitter = (event: SessionEventData) => void;
37
+ /**
38
+ * Manages per-session text accumulation and lifecycle event emission.
39
+ *
40
+ * AC: @session-event-broadcast ac-per-session-state
41
+ */
42
+ export declare class SessionEventAccumulator {
43
+ private sessions;
44
+ /**
45
+ * Get or create accumulator state for a session.
46
+ */
47
+ private getState;
48
+ /**
49
+ * Build the common base fields for session events.
50
+ */
51
+ private baseFields;
52
+ /**
53
+ * Flush buffered text as a progress event (newline-boundary streaming).
54
+ * Emits complete lines up to the last newline, keeps the partial remainder.
55
+ * Forces a full flush when the buffer exceeds MAX_BUFFER_SIZE.
56
+ *
57
+ * AC: @session-event-broadcast ac-newline-streaming
58
+ */
59
+ private flushBuffer;
60
+ /**
61
+ * Transition to a new content mode, flushing the buffer as a _complete event.
62
+ *
63
+ * AC: @session-event-broadcast ac-boundary-flush
64
+ */
65
+ private transitionMode;
66
+ /**
67
+ * Process a SessionUpdate from ACP, emitting typed session events.
68
+ *
69
+ * This is the main entry point — replaces the old onTextChunk callback.
70
+ */
71
+ handleUpdate(ctx: SessionContext, update: SessionUpdate, emit: SessionEventEmitter): void;
72
+ /**
73
+ * Flush and clean up state for a session (on session end).
74
+ * Emits any remaining buffered text as a _complete event.
75
+ */
76
+ endSession(ctx: SessionContext, emit: SessionEventEmitter): void;
77
+ /** Check if a session is currently being tracked. */
78
+ hasSession(sessionId: string): boolean;
79
+ /** Get the number of tracked sessions. */
80
+ get sessionCount(): number;
81
+ }
82
+ export {};
83
+ //# sourceMappingURL=session-event-accumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-accumulator.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/session-event-accumulator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAKjE,4EAA4E;AAC5E,KAAK,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAEnD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,4DAA4D;IAC5D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,4EAA4E;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE;;;;GAIG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAA4C;IAE5D;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAkCnB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;;OAIG;IACH,YAAY,CACV,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,mBAAmB,GACxB,IAAI;IAqFP;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAehE,qDAAqD;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,0CAA0C;IAC1C,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Session Event Accumulator
3
+ *
4
+ * Buffers text from ACP SessionUpdate events and flushes at newline boundaries,
5
+ * emitting typed session lifecycle events. Tracks state per session to support
6
+ * concurrent sessions independently.
7
+ *
8
+ * AC: @session-event-broadcast ac-newline-streaming — flush at newline boundaries
9
+ * AC: @session-event-broadcast ac-boundary-flush — flush on state transitions
10
+ * AC: @session-event-broadcast ac-per-session-state — per-session accumulator state
11
+ * AC: @session-event-broadcast ac-tool-input-included — tool_call_start includes input
12
+ * AC: @session-event-broadcast ac-replaces-text-chunks — replaces agent_text_chunk
13
+ */
14
+ /** Maximum buffer size before forced flush (prevents unbounded memory growth). */
15
+ const MAX_BUFFER_SIZE = 8 * 1024; // 8KB
16
+ /**
17
+ * Manages per-session text accumulation and lifecycle event emission.
18
+ *
19
+ * AC: @session-event-broadcast ac-per-session-state
20
+ */
21
+ export class SessionEventAccumulator {
22
+ sessions = new Map();
23
+ /**
24
+ * Get or create accumulator state for a session.
25
+ */
26
+ getState(sessionId) {
27
+ let state = this.sessions.get(sessionId);
28
+ if (!state) {
29
+ state = { buffer: "", mode: "idle", activeToolCalls: new Map() };
30
+ this.sessions.set(sessionId, state);
31
+ }
32
+ return state;
33
+ }
34
+ /**
35
+ * Build the common base fields for session events.
36
+ */
37
+ baseFields(ctx) {
38
+ return {
39
+ session_id: ctx.sessionId,
40
+ agent_id: ctx.agentId,
41
+ task_id: ctx.taskId,
42
+ task_title: ctx.taskTitle,
43
+ timestamp: Date.now(),
44
+ };
45
+ }
46
+ /**
47
+ * Flush buffered text as a progress event (newline-boundary streaming).
48
+ * Emits complete lines up to the last newline, keeps the partial remainder.
49
+ * Forces a full flush when the buffer exceeds MAX_BUFFER_SIZE.
50
+ *
51
+ * AC: @session-event-broadcast ac-newline-streaming
52
+ */
53
+ flushBuffer(state, ctx, emit) {
54
+ if (state.buffer.length === 0)
55
+ return;
56
+ // Newline-boundary flush: emit complete lines, keep partial remainder
57
+ const lastNewline = state.buffer.lastIndexOf("\n");
58
+ if (lastNewline === -1) {
59
+ // No newline yet — check max buffer size
60
+ if (state.buffer.length >= MAX_BUFFER_SIZE) {
61
+ const text = state.buffer;
62
+ state.buffer = "";
63
+ const progressType = state.mode === "thinking" ? "thinking_progress" : "message_progress";
64
+ emit({ ...this.baseFields(ctx), type: progressType, text });
65
+ }
66
+ return;
67
+ }
68
+ // Emit everything up to and including the last newline
69
+ const text = state.buffer.slice(0, lastNewline + 1);
70
+ state.buffer = state.buffer.slice(lastNewline + 1);
71
+ const progressType = state.mode === "thinking" ? "thinking_progress" : "message_progress";
72
+ emit({ ...this.baseFields(ctx), type: progressType, text });
73
+ // Check if remainder exceeds max buffer
74
+ if (state.buffer.length >= MAX_BUFFER_SIZE) {
75
+ const overflow = state.buffer;
76
+ state.buffer = "";
77
+ emit({ ...this.baseFields(ctx), type: progressType, text: overflow });
78
+ }
79
+ }
80
+ /**
81
+ * Transition to a new content mode, flushing the buffer as a _complete event.
82
+ *
83
+ * AC: @session-event-broadcast ac-boundary-flush
84
+ */
85
+ transitionMode(state, ctx, emit, newMode) {
86
+ if (state.mode !== "idle" && state.mode !== newMode) {
87
+ // Flush remaining buffer as _complete event
88
+ const text = state.buffer;
89
+ state.buffer = "";
90
+ const completeType = state.mode === "thinking" ? "thinking_complete" : "message_complete";
91
+ emit({ ...this.baseFields(ctx), type: completeType, text });
92
+ }
93
+ if (state.mode !== newMode && newMode !== "idle") {
94
+ // Emit _start event for the new mode
95
+ const startType = newMode === "thinking" ? "thinking_start" : "message_start";
96
+ emit({ ...this.baseFields(ctx), type: startType });
97
+ }
98
+ state.mode = newMode;
99
+ }
100
+ /**
101
+ * Process a SessionUpdate from ACP, emitting typed session events.
102
+ *
103
+ * This is the main entry point — replaces the old onTextChunk callback.
104
+ */
105
+ handleUpdate(ctx, update, emit) {
106
+ const state = this.getState(ctx.sessionId);
107
+ switch (update.sessionUpdate) {
108
+ case "agent_message_chunk": {
109
+ if (update.content.type !== "text")
110
+ break;
111
+ // Transition to message mode if needed
112
+ if (state.mode !== "message") {
113
+ this.transitionMode(state, ctx, emit, "message");
114
+ }
115
+ // Accumulate text and flush at newline boundaries
116
+ state.buffer += update.content.text;
117
+ this.flushBuffer(state, ctx, emit);
118
+ break;
119
+ }
120
+ case "agent_thought_chunk": {
121
+ if (update.content.type !== "text")
122
+ break;
123
+ // Transition to thinking mode if needed
124
+ if (state.mode !== "thinking") {
125
+ this.transitionMode(state, ctx, emit, "thinking");
126
+ }
127
+ // Accumulate and flush at newline boundaries
128
+ state.buffer += update.content.text;
129
+ this.flushBuffer(state, ctx, emit);
130
+ break;
131
+ }
132
+ case "tool_call": {
133
+ // State transition: flush any buffered text
134
+ this.transitionMode(state, ctx, emit, "idle");
135
+ // AC: @session-event-broadcast ac-tool-input-included
136
+ const toolCallId = update.toolCallId;
137
+ const toolName = update.title;
138
+ const toolInput = update.rawInput ?? null;
139
+ // Track for duration calculation
140
+ state.activeToolCalls.set(toolCallId, {
141
+ toolName,
142
+ startTime: Date.now(),
143
+ });
144
+ emit({
145
+ ...this.baseFields(ctx),
146
+ type: "tool_call_start",
147
+ tool_call_id: toolCallId,
148
+ tool_name: toolName,
149
+ tool_input: toolInput,
150
+ });
151
+ break;
152
+ }
153
+ case "tool_call_update": {
154
+ const tcId = update.toolCallId;
155
+ const tracked = state.activeToolCalls.get(tcId);
156
+ // Only emit complete when status transitions to completed/failed
157
+ if (update.status && (update.status === "completed" || update.status === "failed")) {
158
+ const durationMs = tracked ? Date.now() - tracked.startTime : 0;
159
+ const toolName = tracked?.toolName ?? "";
160
+ state.activeToolCalls.delete(tcId);
161
+ emit({
162
+ ...this.baseFields(ctx),
163
+ type: "tool_call_complete",
164
+ tool_call_id: tcId,
165
+ tool_name: toolName,
166
+ status: update.status,
167
+ duration_ms: durationMs,
168
+ });
169
+ }
170
+ break;
171
+ }
172
+ // Other update types (plan, usage_update, etc.) don't produce session events
173
+ default:
174
+ break;
175
+ }
176
+ }
177
+ /**
178
+ * Flush and clean up state for a session (on session end).
179
+ * Emits any remaining buffered text as a _complete event.
180
+ */
181
+ endSession(ctx, emit) {
182
+ const state = this.sessions.get(ctx.sessionId);
183
+ if (!state)
184
+ return;
185
+ // Flush any remaining content
186
+ if (state.mode !== "idle") {
187
+ const text = state.buffer;
188
+ state.buffer = "";
189
+ const completeType = state.mode === "thinking" ? "thinking_complete" : "message_complete";
190
+ emit({ ...this.baseFields(ctx), type: completeType, text });
191
+ }
192
+ this.sessions.delete(ctx.sessionId);
193
+ }
194
+ /** Check if a session is currently being tracked. */
195
+ hasSession(sessionId) {
196
+ return this.sessions.has(sessionId);
197
+ }
198
+ /** Get the number of tracked sessions. */
199
+ get sessionCount() {
200
+ return this.sessions.size;
201
+ }
202
+ }
203
+ //# sourceMappingURL=session-event-accumulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-accumulator.js","sourceRoot":"","sources":["../../src/agent-runtime/session-event-accumulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Session Event Broadcast Types
3
+ *
4
+ * Type definitions for typed session lifecycle events broadcast over WebSocket.
5
+ * These are the canonical definitions used by the event accumulator (producer).
6
+ * The @kynetic-ai/shared package re-exports equivalent types for consumers
7
+ * (daemon, web-ui).
8
+ *
9
+ * AC: @session-event-broadcast ac-newline-streaming, ac-boundary-flush,
10
+ * ac-per-session-state, ac-tool-input-included, ac-replaces-text-chunks
11
+ */
12
+ /** Common fields shared by all session event broadcast payloads. */
13
+ export interface SessionEventBase {
14
+ session_id: string;
15
+ agent_id: string;
16
+ task_id: string | null;
17
+ task_title: string | null;
18
+ timestamp: number;
19
+ }
20
+ /** Agent started composing a message. */
21
+ export interface MessageStartEventData extends SessionEventBase {
22
+ type: "message_start";
23
+ }
24
+ /** Flushed text lines from agent message output (newline-boundary streaming). */
25
+ export interface MessageProgressEventData extends SessionEventBase {
26
+ type: "message_progress";
27
+ text: string;
28
+ }
29
+ /** Agent message completed (remaining buffer flushed on state transition). */
30
+ export interface MessageCompleteEventData extends SessionEventBase {
31
+ type: "message_complete";
32
+ text: string;
33
+ }
34
+ /** Agent started emitting thinking/reasoning content. */
35
+ export interface ThinkingStartEventData extends SessionEventBase {
36
+ type: "thinking_start";
37
+ }
38
+ /** Flushed text lines from agent thinking output. */
39
+ export interface ThinkingProgressEventData extends SessionEventBase {
40
+ type: "thinking_progress";
41
+ text: string;
42
+ }
43
+ /** Agent thinking completed (remaining buffer flushed). */
44
+ export interface ThinkingCompleteEventData extends SessionEventBase {
45
+ type: "thinking_complete";
46
+ text: string;
47
+ }
48
+ /** Agent initiated a tool call. Includes tool name and input; output excluded. */
49
+ export interface ToolCallStartEventData extends SessionEventBase {
50
+ type: "tool_call_start";
51
+ tool_call_id: string;
52
+ tool_name: string;
53
+ tool_input: unknown;
54
+ }
55
+ /** Tool call finished. Includes status and duration; output excluded. */
56
+ export interface ToolCallCompleteEventData extends SessionEventBase {
57
+ type: "tool_call_complete";
58
+ tool_call_id: string;
59
+ tool_name: string;
60
+ status: string;
61
+ duration_ms: number;
62
+ }
63
+ /** Union of all typed session event payloads. */
64
+ export type SessionEventData = MessageStartEventData | MessageProgressEventData | MessageCompleteEventData | ThinkingStartEventData | ThinkingProgressEventData | ThinkingCompleteEventData | ToolCallStartEventData | ToolCallCompleteEventData;
65
+ /** All possible `event` field values for session events on the 'agents' topic. */
66
+ export type SessionEventType = SessionEventData["type"];
67
+ //# sourceMappingURL=session-event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-types.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/session-event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,iFAAiF;AACjF,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2DAA2D;AAC3D,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kFAAkF;AAClF,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,wBAAwB,GACxB,wBAAwB,GACxB,sBAAsB,GACtB,yBAAyB,GACzB,yBAAyB,GACzB,sBAAsB,GACtB,yBAAyB,CAAC;AAE9B,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Session Event Broadcast Types
3
+ *
4
+ * Type definitions for typed session lifecycle events broadcast over WebSocket.
5
+ * These are the canonical definitions used by the event accumulator (producer).
6
+ * The @kynetic-ai/shared package re-exports equivalent types for consumers
7
+ * (daemon, web-ui).
8
+ *
9
+ * AC: @session-event-broadcast ac-newline-streaming, ac-boundary-flush,
10
+ * ac-per-session-state, ac-tool-input-included, ac-replaces-text-chunks
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=session-event-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-types.js","sourceRoot":"","sources":["../../src/agent-runtime/session-event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,244 @@
1
+ import type { DispatchWorkspaceBootstrapState, DispatchWorkspaceBootstrapRoleState, DispatchWorkspaceBootstrapStepResult, DispatchWorkspaceBranchProvenance, DispatchWorkspaceCleanupState as RegistryCleanupState, DispatchWorkspaceHealthState, DispatchWorkspaceIntegrationState as RegistryIntegrationRecord, DispatchWorkspaceIntegrationStatus, DispatchWorkspaceIntegrationOutcome as RegistryIntegrationOutcome, DispatchWorkspaceLifecycleState, DispatchWorkspacePublicationMode as RegistryPublicationMode, DispatchWorkspaceRecord, DispatchWorkspaceRole as RegistryRole } from "../schema/index.js";
2
+ export interface ResolvedDispatchWorkspaceConfig {
3
+ baseBranch: string;
4
+ baseBranchStartPoint: string;
5
+ baseBranchSource: "configured" | "remote-head" | "current-branch" | "default";
6
+ worktreeRoot: string;
7
+ publicationMode: "pull_request" | "manual_merge" | "auto";
8
+ }
9
+ export interface DispatchWorkspaceMetadata {
10
+ workspaceId: string;
11
+ taskRef: string;
12
+ taskSlug: string;
13
+ baseBranch: string;
14
+ baseBranchPoint: string;
15
+ mergeTargetBranch: string;
16
+ integrationTargetBranch: string;
17
+ integrationTargetCommit: string;
18
+ canonicalBranch: string;
19
+ canonicalBranchHead: string;
20
+ branchProvenance: DispatchWorkspaceBranchProvenance;
21
+ publicationMode: DispatchWorkspacePublicationMode;
22
+ integrationState: DispatchWorkspaceIntegrationState;
23
+ integrationOutcome: DispatchWorkspaceIntegrationOutcome;
24
+ integrationUpdatedAt: string;
25
+ worktreeRoot: string;
26
+ workerWorktreeDir: string;
27
+ reviewerWorktreeDir: string | null;
28
+ lifecycleState: DispatchWorkspaceLifecycleState;
29
+ activeRole: RegistryRole | null;
30
+ bootstrapState: DispatchWorkspaceBootstrapState;
31
+ healthState: DispatchWorkspaceHealthState;
32
+ cleanupState: RegistryCleanupState;
33
+ healthStatus: "healthy" | "unhealthy";
34
+ healthReason: string | null;
35
+ bootstrap: DispatchWorkspaceBootstrapState;
36
+ cleanupEligible: boolean;
37
+ cleanupReason: string | null;
38
+ cleanupScheduledAt: string | null;
39
+ cleanupBlockedReason: string | null;
40
+ createdAt: string;
41
+ updatedAt: string;
42
+ lastReconciledAt: string | null;
43
+ lastActiveAt: string | null;
44
+ closedAt: string | null;
45
+ }
46
+ export interface DispatchWorkspaceHealth {
47
+ exists: boolean;
48
+ healthy: boolean;
49
+ reason: string | null;
50
+ metadata: DispatchWorkspaceMetadata | null;
51
+ }
52
+ export type DispatchWorkspaceRole = "worker" | "reviewer";
53
+ export type DispatchWorkspacePublicationMode = RegistryPublicationMode;
54
+ export type DispatchWorkspaceIntegrationState = DispatchWorkspaceIntegrationStatus;
55
+ export type DispatchWorkspaceIntegrationOutcome = RegistryIntegrationOutcome;
56
+ export type { DispatchWorkspaceBootstrapRoleState, DispatchWorkspaceBootstrapStepResult };
57
+ export declare function getDispatchShadowMutationLockPath(projectDir: string): string;
58
+ export declare function normalizeDispatchBootstrapState(bootstrap?: Partial<DispatchWorkspaceBootstrapState> | null): DispatchWorkspaceBootstrapState;
59
+ export interface ProvisionDispatchWorkspaceOptions {
60
+ projectDir: string;
61
+ taskRef: string;
62
+ role?: DispatchWorkspaceRole;
63
+ cleanupState?: ResolveDispatchWorkspaceCleanupStateOptions;
64
+ task?: {
65
+ title?: string;
66
+ slugs?: string[];
67
+ };
68
+ /** Submission linkage from the task, used to adopt an existing branch when no workspace record exists. */
69
+ submissionLinkage?: {
70
+ branch: string | null;
71
+ commit: string;
72
+ remote?: string | null;
73
+ remote_url?: string | null;
74
+ upstream_ref?: string | null;
75
+ review_url?: string | null;
76
+ captured_at: string;
77
+ } | null;
78
+ /**
79
+ * The task status that triggered provisioning. Used to determine
80
+ * whether adoption is required (pending_review, needs_work) vs optional.
81
+ */
82
+ taskStatus?: string;
83
+ }
84
+ export interface ProvisionedDispatchWorkspace {
85
+ cwd: string;
86
+ metadataPath: string;
87
+ metadata: DispatchWorkspaceMetadata;
88
+ }
89
+ export interface DispatchWorkspaceCleanupState {
90
+ cleanupEligible: boolean;
91
+ cleanupReason: string | null;
92
+ }
93
+ export interface DispatchWorkspaceReapResult {
94
+ taskRef: string;
95
+ action: "none" | "reviewer_cleaned" | "reaped" | "cleanup_blocked";
96
+ blockedReason: string | null;
97
+ }
98
+ export interface ResolveDispatchWorkspaceCleanupStateOptions {
99
+ integrationState?: "pending" | "in_progress" | "merged" | "abandoned" | "reset" | null;
100
+ taskStatus?: "pending" | "in_progress" | "needs_work" | "pending_review" | "blocked" | "completed" | "cancelled" | null;
101
+ }
102
+ export interface ReconcileDispatchWorkspaceLifecycleOptions {
103
+ projectDir: string;
104
+ taskRef: string;
105
+ cleanupState: ResolveDispatchWorkspaceCleanupStateOptions;
106
+ task?: {
107
+ title?: string;
108
+ slugs?: string[];
109
+ };
110
+ }
111
+ export declare class DispatchWorkspaceError extends Error {
112
+ suggestion: string;
113
+ constructor(message: string, suggestion: string);
114
+ }
115
+ export declare function persistDispatchWorkspaceMetadata(projectDir: string, metadata: DispatchWorkspaceMetadata): Promise<string>;
116
+ export declare function resolveDispatchWorkspaceConfig(projectDir: string): Promise<ResolvedDispatchWorkspaceConfig>;
117
+ export declare function resolveDispatchWorkspaceCleanupState(options: ResolveDispatchWorkspaceCleanupStateOptions): DispatchWorkspaceCleanupState;
118
+ /**
119
+ * Determine whether the computed reconciliation state differs from the
120
+ * existing persisted record in any meaningful field. Timestamps are NOT
121
+ * considered meaningful triggers — they are consequences of real changes.
122
+ *
123
+ * Fields compared (meaningful):
124
+ * - canonical_branch_head
125
+ * - lifecycle_state
126
+ * - active_role
127
+ * - health (deep compare, excluding updated_at)
128
+ * - cleanup (deep compare, excluding updated_at)
129
+ * - integration (deep compare, excluding updated_at)
130
+ *
131
+ * AC: @dispatch-workspace-registry ac-10
132
+ */
133
+ export declare function isWorkspaceRecordDirty(existing: DispatchWorkspaceRecord, computed: {
134
+ canonical_branch_head: string;
135
+ lifecycle_state: DispatchWorkspaceLifecycleState;
136
+ active_role: RegistryRole | null;
137
+ health: DispatchWorkspaceHealthState;
138
+ cleanup: RegistryCleanupState;
139
+ integration: RegistryIntegrationRecord;
140
+ }): boolean;
141
+ export declare function reconcileDispatchWorkspaceRegistry(projectDir: string, taskStatusByRef?: Map<string, ResolveDispatchWorkspaceCleanupStateOptions["taskStatus"]>, activeRoleByTaskRef?: Map<string, RegistryRole>): Promise<void>;
142
+ export declare function reconcileDispatchWorkspaceLifecycle(options: ReconcileDispatchWorkspaceLifecycleOptions): Promise<ProvisionedDispatchWorkspace | null>;
143
+ export declare function cleanupReviewerDispatchWorkspace(projectDir: string, taskRef: string, task?: {
144
+ title?: string;
145
+ slugs?: string[];
146
+ }): Promise<DispatchWorkspaceReapResult>;
147
+ export declare function reapDispatchWorkspace(projectDir: string, taskRef: string, options?: {
148
+ activeTaskRefs?: Iterable<string>;
149
+ task?: {
150
+ title?: string;
151
+ slugs?: string[];
152
+ };
153
+ }): Promise<DispatchWorkspaceReapResult>;
154
+ export declare function reconcileDispatchWorkspaceArtifacts(projectDir: string, options?: {
155
+ activeTaskRefs?: Iterable<string>;
156
+ }): Promise<void>;
157
+ export declare function provisionDispatchWorkspace(options: ProvisionDispatchWorkspaceOptions): Promise<ProvisionedDispatchWorkspace>;
158
+ export declare function markDispatchWorkspaceActive(options: {
159
+ projectDir: string;
160
+ taskRef: string;
161
+ role: DispatchWorkspaceRole;
162
+ }): Promise<ProvisionedDispatchWorkspace | null>;
163
+ export declare function markDispatchWorkspaceIdle(options: {
164
+ projectDir: string;
165
+ taskRef: string;
166
+ taskStatus: ResolveDispatchWorkspaceCleanupStateOptions["taskStatus"] | null;
167
+ }): Promise<ProvisionedDispatchWorkspace | null>;
168
+ export declare function getDispatchWorkspaceHealth(options: ProvisionDispatchWorkspaceOptions): Promise<DispatchWorkspaceHealth>;
169
+ /**
170
+ * Result of workspace discovery attempt for review or fix-cycle tasks.
171
+ *
172
+ * AC: @review-and-fix-cycle-workspace-discovery-before-discard ac-1 through ac-4
173
+ */
174
+ export interface WorkspaceDiscoveryResult {
175
+ /** Whether a recoverable workspace was found. */
176
+ recovered: boolean;
177
+ /** Source that provided recovery, if any. */
178
+ recoverySource: "registry-state" | "metadata-backed-worktree" | "task-submission-linkage" | "remote-or-review-locator" | null;
179
+ /** Updated health after recovery attempt. */
180
+ health: DispatchWorkspaceHealth;
181
+ /** Diagnostics when recovery fails — task-linked messages with guidance. */
182
+ diagnostics: WorkspaceDiscoveryDiagnostic[];
183
+ /** When multiple branch signals conflict, details of the conflict. */
184
+ conflictingSignals: BranchSignal[] | null;
185
+ }
186
+ export interface WorkspaceDiscoveryDiagnostic {
187
+ taskRef: string;
188
+ code: string;
189
+ message: string;
190
+ suggestion: string;
191
+ }
192
+ export interface BranchSignal {
193
+ source: string;
194
+ branch: string;
195
+ }
196
+ /**
197
+ * Submission linkage shape for discovery. Matches the SubmissionLinkage type
198
+ * from schema/common.ts but defined here to avoid circular imports.
199
+ */
200
+ interface DiscoverySubmissionLinkage {
201
+ branch: string | null;
202
+ commit: string;
203
+ remote?: string | null;
204
+ remote_url?: string | null;
205
+ upstream_ref?: string | null;
206
+ review_url?: string | null;
207
+ captured_at: string;
208
+ }
209
+ /**
210
+ * Attempt workspace discovery and recovery for a `pending_review` or
211
+ * `needs_work` dispatch entry that has no healthy local workspace candidate.
212
+ *
213
+ * Applies explicit precedence ordering (AC-4):
214
+ * 1. Existing registry state
215
+ * 2. Metadata-backed worktrees
216
+ * 3. Recorded task submission linkage
217
+ * 4. Remote or review-derived discovery
218
+ *
219
+ * If recovery succeeds, the workspace is adopted or re-registered so normal
220
+ * provisioning can proceed (AC-2).
221
+ *
222
+ * If no trustworthy recovery path exists, returns structured diagnostics
223
+ * with task-linked recovery guidance (AC-3).
224
+ *
225
+ * When multiple branch signals exist and cannot be reconciled, blocks with
226
+ * diagnostics rather than guessing (AC-4).
227
+ *
228
+ * AC: @review-and-fix-cycle-workspace-discovery-before-discard ac-1
229
+ * AC: @review-and-fix-cycle-workspace-discovery-before-discard ac-2
230
+ * AC: @review-and-fix-cycle-workspace-discovery-before-discard ac-3
231
+ * AC: @review-and-fix-cycle-workspace-discovery-before-discard ac-4
232
+ */
233
+ export declare function discoverWorkspaceForReviewOrFixCycle(options: {
234
+ projectDir: string;
235
+ taskRef: string;
236
+ role?: DispatchWorkspaceRole;
237
+ task?: {
238
+ title?: string;
239
+ slugs?: string[];
240
+ submission_linkage?: DiscoverySubmissionLinkage | null;
241
+ review_url?: string;
242
+ };
243
+ }): Promise<WorkspaceDiscoveryResult>;
244
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/workspace.ts"],"names":[],"mappings":"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"}