@kynetic-ai/spec 0.1.2 → 0.3.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 (510) hide show
  1. package/README.md +250 -17
  2. package/dist/acp/client.d.ts +18 -4
  3. package/dist/acp/client.d.ts.map +1 -1
  4. package/dist/acp/client.js +44 -26
  5. package/dist/acp/client.js.map +1 -1
  6. package/dist/acp/framing.d.ts +2 -2
  7. package/dist/acp/framing.d.ts.map +1 -1
  8. package/dist/acp/framing.js +37 -29
  9. package/dist/acp/framing.js.map +1 -1
  10. package/dist/acp/index.d.ts +6 -7
  11. package/dist/acp/index.d.ts.map +1 -1
  12. package/dist/acp/index.js +3 -3
  13. package/dist/acp/index.js.map +1 -1
  14. package/dist/acp/types.d.ts +5 -5
  15. package/dist/acp/types.d.ts.map +1 -1
  16. package/dist/acp/types.js +18 -18
  17. package/dist/acp/types.js.map +1 -1
  18. package/dist/agents/adapters.d.ts.map +1 -1
  19. package/dist/agents/adapters.js +24 -13
  20. package/dist/agents/adapters.js.map +1 -1
  21. package/dist/agents/index.d.ts +2 -2
  22. package/dist/agents/index.js +2 -2
  23. package/dist/agents/spawner.d.ts +4 -4
  24. package/dist/agents/spawner.d.ts.map +1 -1
  25. package/dist/agents/spawner.js +6 -6
  26. package/dist/agents/spawner.js.map +1 -1
  27. package/dist/cli/batch-context.d.ts +43 -0
  28. package/dist/cli/batch-context.d.ts.map +1 -0
  29. package/dist/cli/batch-context.js +93 -0
  30. package/dist/cli/batch-context.js.map +1 -0
  31. package/dist/cli/batch-exec.d.ts +116 -0
  32. package/dist/cli/batch-exec.d.ts.map +1 -0
  33. package/dist/cli/batch-exec.js +694 -0
  34. package/dist/cli/batch-exec.js.map +1 -0
  35. package/dist/cli/batch.d.ts +4 -2
  36. package/dist/cli/batch.d.ts.map +1 -1
  37. package/dist/cli/batch.js +15 -14
  38. package/dist/cli/batch.js.map +1 -1
  39. package/dist/cli/command-annotations.d.ts +23 -0
  40. package/dist/cli/command-annotations.d.ts.map +1 -0
  41. package/dist/cli/command-annotations.js +27 -0
  42. package/dist/cli/command-annotations.js.map +1 -0
  43. package/dist/cli/commands/agents.d.ts +46 -0
  44. package/dist/cli/commands/agents.d.ts.map +1 -0
  45. package/dist/cli/commands/agents.js +377 -0
  46. package/dist/cli/commands/agents.js.map +1 -0
  47. package/dist/cli/commands/batch.d.ts +20 -0
  48. package/dist/cli/commands/batch.d.ts.map +1 -0
  49. package/dist/cli/commands/batch.js +214 -0
  50. package/dist/cli/commands/batch.js.map +1 -0
  51. package/dist/cli/commands/clone-for-testing.d.ts +1 -1
  52. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -1
  53. package/dist/cli/commands/clone-for-testing.js +37 -47
  54. package/dist/cli/commands/clone-for-testing.js.map +1 -1
  55. package/dist/cli/commands/derive.d.ts +1 -1
  56. package/dist/cli/commands/derive.d.ts.map +1 -1
  57. package/dist/cli/commands/derive.js +140 -88
  58. package/dist/cli/commands/derive.js.map +1 -1
  59. package/dist/cli/commands/doctor.d.ts +11 -0
  60. package/dist/cli/commands/doctor.d.ts.map +1 -0
  61. package/dist/cli/commands/doctor.js +152 -0
  62. package/dist/cli/commands/doctor.js.map +1 -0
  63. package/dist/cli/commands/export.d.ts +12 -0
  64. package/dist/cli/commands/export.d.ts.map +1 -0
  65. package/dist/cli/commands/export.js +134 -0
  66. package/dist/cli/commands/export.js.map +1 -0
  67. package/dist/cli/commands/help.d.ts +1 -1
  68. package/dist/cli/commands/help.d.ts.map +1 -1
  69. package/dist/cli/commands/help.js +163 -37
  70. package/dist/cli/commands/help.js.map +1 -1
  71. package/dist/cli/commands/inbox.d.ts +1 -1
  72. package/dist/cli/commands/inbox.d.ts.map +1 -1
  73. package/dist/cli/commands/inbox.js +178 -56
  74. package/dist/cli/commands/inbox.js.map +1 -1
  75. package/dist/cli/commands/index.d.ts +31 -19
  76. package/dist/cli/commands/index.d.ts.map +1 -1
  77. package/dist/cli/commands/index.js +31 -19
  78. package/dist/cli/commands/index.js.map +1 -1
  79. package/dist/cli/commands/init.d.ts +5 -1
  80. package/dist/cli/commands/init.d.ts.map +1 -1
  81. package/dist/cli/commands/init.js +108 -57
  82. package/dist/cli/commands/init.js.map +1 -1
  83. package/dist/cli/commands/item.d.ts +1 -1
  84. package/dist/cli/commands/item.d.ts.map +1 -1
  85. package/dist/cli/commands/item.js +557 -274
  86. package/dist/cli/commands/item.js.map +1 -1
  87. package/dist/cli/commands/link.d.ts +1 -1
  88. package/dist/cli/commands/link.d.ts.map +1 -1
  89. package/dist/cli/commands/link.js +55 -46
  90. package/dist/cli/commands/link.js.map +1 -1
  91. package/dist/cli/commands/log.d.ts +1 -1
  92. package/dist/cli/commands/log.d.ts.map +1 -1
  93. package/dist/cli/commands/log.js +57 -51
  94. package/dist/cli/commands/log.js.map +1 -1
  95. package/dist/cli/commands/merge-driver.d.ts +19 -0
  96. package/dist/cli/commands/merge-driver.d.ts.map +1 -0
  97. package/dist/cli/commands/merge-driver.js +398 -0
  98. package/dist/cli/commands/merge-driver.js.map +1 -0
  99. package/dist/cli/commands/meta.d.ts +1 -1
  100. package/dist/cli/commands/meta.d.ts.map +1 -1
  101. package/dist/cli/commands/meta.js +533 -399
  102. package/dist/cli/commands/meta.js.map +1 -1
  103. package/dist/cli/commands/module.d.ts +1 -1
  104. package/dist/cli/commands/module.d.ts.map +1 -1
  105. package/dist/cli/commands/module.js +30 -25
  106. package/dist/cli/commands/module.js.map +1 -1
  107. package/dist/cli/commands/plan-import.d.ts +11 -0
  108. package/dist/cli/commands/plan-import.d.ts.map +1 -0
  109. package/dist/cli/commands/plan-import.js +516 -0
  110. package/dist/cli/commands/plan-import.js.map +1 -0
  111. package/dist/cli/commands/plan.d.ts +10 -0
  112. package/dist/cli/commands/plan.d.ts.map +1 -0
  113. package/dist/cli/commands/plan.js +421 -0
  114. package/dist/cli/commands/plan.js.map +1 -0
  115. package/dist/cli/commands/ralph.d.ts +1 -1
  116. package/dist/cli/commands/ralph.d.ts.map +1 -1
  117. package/dist/cli/commands/ralph.js +1097 -169
  118. package/dist/cli/commands/ralph.js.map +1 -1
  119. package/dist/cli/commands/refs.d.ts +13 -0
  120. package/dist/cli/commands/refs.d.ts.map +1 -0
  121. package/dist/cli/commands/refs.js +283 -0
  122. package/dist/cli/commands/refs.js.map +1 -0
  123. package/dist/cli/commands/search.d.ts +1 -1
  124. package/dist/cli/commands/search.d.ts.map +1 -1
  125. package/dist/cli/commands/search.js +199 -37
  126. package/dist/cli/commands/search.js.map +1 -1
  127. package/dist/cli/commands/serve.d.ts +10 -0
  128. package/dist/cli/commands/serve.d.ts.map +1 -0
  129. package/dist/cli/commands/serve.js +491 -0
  130. package/dist/cli/commands/serve.js.map +1 -0
  131. package/dist/cli/commands/session.d.ts +25 -6
  132. package/dist/cli/commands/session.d.ts.map +1 -1
  133. package/dist/cli/commands/session.js +811 -127
  134. package/dist/cli/commands/session.js.map +1 -1
  135. package/dist/cli/commands/setup-seeding.d.ts +81 -0
  136. package/dist/cli/commands/setup-seeding.d.ts.map +1 -0
  137. package/dist/cli/commands/setup-seeding.js +292 -0
  138. package/dist/cli/commands/setup-seeding.js.map +1 -0
  139. package/dist/cli/commands/setup.d.ts +77 -3
  140. package/dist/cli/commands/setup.d.ts.map +1 -1
  141. package/dist/cli/commands/setup.js +1233 -274
  142. package/dist/cli/commands/setup.js.map +1 -1
  143. package/dist/cli/commands/shadow.d.ts +1 -1
  144. package/dist/cli/commands/shadow.d.ts.map +1 -1
  145. package/dist/cli/commands/shadow.js +70 -50
  146. package/dist/cli/commands/shadow.js.map +1 -1
  147. package/dist/cli/commands/skill-crud.d.ts +58 -0
  148. package/dist/cli/commands/skill-crud.d.ts.map +1 -0
  149. package/dist/cli/commands/skill-crud.js +753 -0
  150. package/dist/cli/commands/skill-crud.js.map +1 -0
  151. package/dist/cli/commands/skill-diff.d.ts +27 -0
  152. package/dist/cli/commands/skill-diff.d.ts.map +1 -0
  153. package/dist/cli/commands/skill-diff.js +840 -0
  154. package/dist/cli/commands/skill-diff.js.map +1 -0
  155. package/dist/cli/commands/skill-install.d.ts +53 -0
  156. package/dist/cli/commands/skill-install.d.ts.map +1 -0
  157. package/dist/cli/commands/skill-install.js +452 -0
  158. package/dist/cli/commands/skill-install.js.map +1 -0
  159. package/dist/cli/commands/skill.d.ts +20 -0
  160. package/dist/cli/commands/skill.d.ts.map +1 -0
  161. package/dist/cli/commands/skill.js +36 -0
  162. package/dist/cli/commands/skill.js.map +1 -0
  163. package/dist/cli/commands/task.d.ts +1 -1
  164. package/dist/cli/commands/task.d.ts.map +1 -1
  165. package/dist/cli/commands/task.js +569 -346
  166. package/dist/cli/commands/task.js.map +1 -1
  167. package/dist/cli/commands/tasks.d.ts +26 -1
  168. package/dist/cli/commands/tasks.d.ts.map +1 -1
  169. package/dist/cli/commands/tasks.js +227 -122
  170. package/dist/cli/commands/tasks.js.map +1 -1
  171. package/dist/cli/commands/trait.d.ts +1 -1
  172. package/dist/cli/commands/trait.d.ts.map +1 -1
  173. package/dist/cli/commands/trait.js +166 -101
  174. package/dist/cli/commands/trait.js.map +1 -1
  175. package/dist/cli/commands/triage.d.ts +7 -0
  176. package/dist/cli/commands/triage.d.ts.map +1 -0
  177. package/dist/cli/commands/triage.js +569 -0
  178. package/dist/cli/commands/triage.js.map +1 -0
  179. package/dist/cli/commands/util.d.ts +7 -0
  180. package/dist/cli/commands/util.d.ts.map +1 -0
  181. package/dist/cli/commands/util.js +30 -0
  182. package/dist/cli/commands/util.js.map +1 -0
  183. package/dist/cli/commands/validate.d.ts +1 -1
  184. package/dist/cli/commands/validate.d.ts.map +1 -1
  185. package/dist/cli/commands/validate.js +264 -83
  186. package/dist/cli/commands/validate.js.map +1 -1
  187. package/dist/cli/commands/workflow.d.ts +16 -0
  188. package/dist/cli/commands/workflow.d.ts.map +1 -0
  189. package/dist/cli/commands/workflow.js +851 -0
  190. package/dist/cli/commands/workflow.js.map +1 -0
  191. package/dist/cli/exit-codes.d.ts +7 -0
  192. package/dist/cli/exit-codes.d.ts.map +1 -1
  193. package/dist/cli/exit-codes.js +26 -18
  194. package/dist/cli/exit-codes.js.map +1 -1
  195. package/dist/cli/help/content.d.ts.map +1 -1
  196. package/dist/cli/help/content.js +86 -71
  197. package/dist/cli/help/content.js.map +1 -1
  198. package/dist/cli/index.d.ts +1 -1
  199. package/dist/cli/index.d.ts.map +1 -1
  200. package/dist/cli/index.js +131 -19
  201. package/dist/cli/index.js.map +1 -1
  202. package/dist/cli/introspection.d.ts +6 -2
  203. package/dist/cli/introspection.d.ts.map +1 -1
  204. package/dist/cli/introspection.js +11 -8
  205. package/dist/cli/introspection.js.map +1 -1
  206. package/dist/cli/output.d.ts +64 -4
  207. package/dist/cli/output.d.ts.map +1 -1
  208. package/dist/cli/output.js +235 -85
  209. package/dist/cli/output.js.map +1 -1
  210. package/dist/cli/parse-utils.d.ts +21 -0
  211. package/dist/cli/parse-utils.d.ts.map +1 -0
  212. package/dist/cli/parse-utils.js +32 -0
  213. package/dist/cli/parse-utils.js.map +1 -0
  214. package/dist/cli/pid-utils.d.ts +72 -0
  215. package/dist/cli/pid-utils.d.ts.map +1 -0
  216. package/dist/cli/pid-utils.js +174 -0
  217. package/dist/cli/pid-utils.js.map +1 -0
  218. package/dist/cli/suggest.d.ts.map +1 -1
  219. package/dist/cli/suggest.js +1 -2
  220. package/dist/cli/suggest.js.map +1 -1
  221. package/dist/cli/validators.d.ts +43 -0
  222. package/dist/cli/validators.d.ts.map +1 -0
  223. package/dist/cli/validators.js +84 -0
  224. package/dist/cli/validators.js.map +1 -0
  225. package/dist/daemon/index.ts +52 -0
  226. package/dist/daemon/middleware/project-context.ts +126 -0
  227. package/dist/daemon/pid.ts +179 -0
  228. package/dist/daemon/project-context.ts +343 -0
  229. package/dist/daemon/routes/inbox.ts +164 -0
  230. package/dist/daemon/routes/items.ts +322 -0
  231. package/dist/daemon/routes/meta.ts +118 -0
  232. package/dist/daemon/routes/projects.ts +162 -0
  233. package/dist/daemon/routes/tasks.ts +327 -0
  234. package/dist/daemon/routes/triage.ts +468 -0
  235. package/dist/daemon/routes/validation.ts +248 -0
  236. package/dist/daemon/server.ts +408 -0
  237. package/dist/daemon/watcher.ts +195 -0
  238. package/dist/daemon/websocket/handler.ts +138 -0
  239. package/dist/daemon/websocket/heartbeat.ts +71 -0
  240. package/dist/daemon/websocket/pubsub.ts +125 -0
  241. package/dist/daemon/websocket/types.ts +66 -0
  242. package/dist/export/html.d.ts +19 -0
  243. package/dist/export/html.d.ts.map +1 -0
  244. package/dist/export/html.js +239 -0
  245. package/dist/export/html.js.map +1 -0
  246. package/dist/export/index.d.ts +10 -0
  247. package/dist/export/index.d.ts.map +1 -0
  248. package/dist/export/index.js +10 -0
  249. package/dist/export/index.js.map +1 -0
  250. package/dist/export/json.d.ts +24 -0
  251. package/dist/export/json.d.ts.map +1 -0
  252. package/dist/export/json.js +198 -0
  253. package/dist/export/json.js.map +1 -0
  254. package/dist/export/triage.d.ts +51 -0
  255. package/dist/export/triage.d.ts.map +1 -0
  256. package/dist/export/triage.js +83 -0
  257. package/dist/export/triage.js.map +1 -0
  258. package/dist/export/types.d.ts +122 -0
  259. package/dist/export/types.d.ts.map +1 -0
  260. package/dist/export/types.js +9 -0
  261. package/dist/export/types.js.map +1 -0
  262. package/dist/index.d.ts +2 -2
  263. package/dist/index.js +2 -2
  264. package/dist/lib/claude-plugin-registry.d.ts +66 -0
  265. package/dist/lib/claude-plugin-registry.d.ts.map +1 -0
  266. package/dist/lib/claude-plugin-registry.js +318 -0
  267. package/dist/lib/claude-plugin-registry.js.map +1 -0
  268. package/dist/merge/arrays.d.ts +87 -0
  269. package/dist/merge/arrays.d.ts.map +1 -0
  270. package/dist/merge/arrays.js +164 -0
  271. package/dist/merge/arrays.js.map +1 -0
  272. package/dist/merge/file-type.d.ts +32 -0
  273. package/dist/merge/file-type.d.ts.map +1 -0
  274. package/dist/merge/file-type.js +70 -0
  275. package/dist/merge/file-type.js.map +1 -0
  276. package/dist/merge/index.d.ts +14 -0
  277. package/dist/merge/index.d.ts.map +1 -0
  278. package/dist/merge/index.js +11 -0
  279. package/dist/merge/index.js.map +1 -0
  280. package/dist/merge/objects.d.ts +46 -0
  281. package/dist/merge/objects.d.ts.map +1 -0
  282. package/dist/merge/objects.js +193 -0
  283. package/dist/merge/objects.js.map +1 -0
  284. package/dist/merge/parse.d.ts +23 -0
  285. package/dist/merge/parse.d.ts.map +1 -0
  286. package/dist/merge/parse.js +78 -0
  287. package/dist/merge/parse.js.map +1 -0
  288. package/dist/merge/resolve.d.ts +66 -0
  289. package/dist/merge/resolve.d.ts.map +1 -0
  290. package/dist/merge/resolve.js +189 -0
  291. package/dist/merge/resolve.js.map +1 -0
  292. package/dist/merge/types.d.ts +82 -0
  293. package/dist/merge/types.d.ts.map +1 -0
  294. package/dist/merge/types.js +8 -0
  295. package/dist/merge/types.js.map +1 -0
  296. package/dist/parser/agent-data-sections.d.ts +53 -0
  297. package/dist/parser/agent-data-sections.d.ts.map +1 -0
  298. package/dist/parser/agent-data-sections.js +118 -0
  299. package/dist/parser/agent-data-sections.js.map +1 -0
  300. package/dist/parser/alignment.d.ts +4 -4
  301. package/dist/parser/alignment.d.ts.map +1 -1
  302. package/dist/parser/alignment.js +27 -22
  303. package/dist/parser/alignment.js.map +1 -1
  304. package/dist/parser/assess.d.ts +5 -5
  305. package/dist/parser/assess.d.ts.map +1 -1
  306. package/dist/parser/assess.js +36 -32
  307. package/dist/parser/assess.js.map +1 -1
  308. package/dist/parser/config.d.ts +351 -0
  309. package/dist/parser/config.d.ts.map +1 -0
  310. package/dist/parser/config.js +326 -0
  311. package/dist/parser/config.js.map +1 -0
  312. package/dist/parser/convention-validation.d.ts +1 -1
  313. package/dist/parser/convention-validation.d.ts.map +1 -1
  314. package/dist/parser/convention-validation.js +21 -16
  315. package/dist/parser/convention-validation.js.map +1 -1
  316. package/dist/parser/coverage-cache.d.ts +49 -0
  317. package/dist/parser/coverage-cache.d.ts.map +1 -0
  318. package/dist/parser/coverage-cache.js +123 -0
  319. package/dist/parser/coverage-cache.js.map +1 -0
  320. package/dist/parser/daemon-status.d.ts +37 -0
  321. package/dist/parser/daemon-status.d.ts.map +1 -0
  322. package/dist/parser/daemon-status.js +67 -0
  323. package/dist/parser/daemon-status.js.map +1 -0
  324. package/dist/parser/doctor.d.ts +107 -0
  325. package/dist/parser/doctor.d.ts.map +1 -0
  326. package/dist/parser/doctor.js +366 -0
  327. package/dist/parser/doctor.js.map +1 -0
  328. package/dist/parser/fix.d.ts +1 -1
  329. package/dist/parser/fix.d.ts.map +1 -1
  330. package/dist/parser/fix.js +31 -27
  331. package/dist/parser/fix.js.map +1 -1
  332. package/dist/parser/index.d.ts +16 -11
  333. package/dist/parser/index.d.ts.map +1 -1
  334. package/dist/parser/index.js +16 -11
  335. package/dist/parser/index.js.map +1 -1
  336. package/dist/parser/items.d.ts +8 -2
  337. package/dist/parser/items.d.ts.map +1 -1
  338. package/dist/parser/items.js +71 -35
  339. package/dist/parser/items.js.map +1 -1
  340. package/dist/parser/meta.d.ts +167 -9
  341. package/dist/parser/meta.d.ts.map +1 -1
  342. package/dist/parser/meta.js +379 -46
  343. package/dist/parser/meta.js.map +1 -1
  344. package/dist/parser/plan-document.d.ts +189 -0
  345. package/dist/parser/plan-document.d.ts.map +1 -0
  346. package/dist/parser/plan-document.js +340 -0
  347. package/dist/parser/plan-document.js.map +1 -0
  348. package/dist/parser/plans.d.ts +59 -0
  349. package/dist/parser/plans.d.ts.map +1 -0
  350. package/dist/parser/plans.js +239 -0
  351. package/dist/parser/plans.js.map +1 -0
  352. package/dist/parser/refs.d.ts +22 -9
  353. package/dist/parser/refs.d.ts.map +1 -1
  354. package/dist/parser/refs.js +102 -50
  355. package/dist/parser/refs.js.map +1 -1
  356. package/dist/parser/setup-status.d.ts +71 -0
  357. package/dist/parser/setup-status.d.ts.map +1 -0
  358. package/dist/parser/setup-status.js +269 -0
  359. package/dist/parser/setup-status.js.map +1 -0
  360. package/dist/parser/shadow.d.ts +150 -19
  361. package/dist/parser/shadow.d.ts.map +1 -1
  362. package/dist/parser/shadow.js +548 -187
  363. package/dist/parser/shadow.js.map +1 -1
  364. package/dist/parser/skill-render.d.ts +317 -0
  365. package/dist/parser/skill-render.d.ts.map +1 -0
  366. package/dist/parser/skill-render.js +943 -0
  367. package/dist/parser/skill-render.js.map +1 -0
  368. package/dist/parser/traits.d.ts +3 -3
  369. package/dist/parser/traits.d.ts.map +1 -1
  370. package/dist/parser/traits.js +2 -2
  371. package/dist/parser/traits.js.map +1 -1
  372. package/dist/parser/validate-skills.d.ts +32 -0
  373. package/dist/parser/validate-skills.d.ts.map +1 -0
  374. package/dist/parser/validate-skills.js +202 -0
  375. package/dist/parser/validate-skills.js.map +1 -0
  376. package/dist/parser/validate.d.ts +45 -3
  377. package/dist/parser/validate.d.ts.map +1 -1
  378. package/dist/parser/validate.js +622 -105
  379. package/dist/parser/validate.js.map +1 -1
  380. package/dist/parser/yaml.d.ts +83 -19
  381. package/dist/parser/yaml.d.ts.map +1 -1
  382. package/dist/parser/yaml.js +478 -173
  383. package/dist/parser/yaml.js.map +1 -1
  384. package/dist/ralph/cli-renderer.d.ts +8 -1
  385. package/dist/ralph/cli-renderer.d.ts.map +1 -1
  386. package/dist/ralph/cli-renderer.js +105 -34
  387. package/dist/ralph/cli-renderer.js.map +1 -1
  388. package/dist/ralph/events.d.ts +10 -10
  389. package/dist/ralph/events.d.ts.map +1 -1
  390. package/dist/ralph/events.js +277 -98
  391. package/dist/ralph/events.js.map +1 -1
  392. package/dist/ralph/index.d.ts +5 -2
  393. package/dist/ralph/index.d.ts.map +1 -1
  394. package/dist/ralph/index.js +9 -3
  395. package/dist/ralph/index.js.map +1 -1
  396. package/dist/ralph/loop-errors.d.ts +83 -0
  397. package/dist/ralph/loop-errors.d.ts.map +1 -0
  398. package/dist/ralph/loop-errors.js +150 -0
  399. package/dist/ralph/loop-errors.js.map +1 -0
  400. package/dist/ralph/subagent.d.ts +83 -0
  401. package/dist/ralph/subagent.d.ts.map +1 -0
  402. package/dist/ralph/subagent.js +174 -0
  403. package/dist/ralph/subagent.js.map +1 -0
  404. package/dist/ralph/wrap-up.d.ts +125 -0
  405. package/dist/ralph/wrap-up.d.ts.map +1 -0
  406. package/dist/ralph/wrap-up.js +270 -0
  407. package/dist/ralph/wrap-up.js.map +1 -0
  408. package/dist/schema/batch.d.ts +95 -0
  409. package/dist/schema/batch.d.ts.map +1 -0
  410. package/dist/schema/batch.js +24 -0
  411. package/dist/schema/batch.js.map +1 -0
  412. package/dist/schema/common.d.ts +2 -2
  413. package/dist/schema/common.d.ts.map +1 -1
  414. package/dist/schema/common.js +34 -31
  415. package/dist/schema/common.js.map +1 -1
  416. package/dist/schema/inbox.d.ts +12 -12
  417. package/dist/schema/inbox.js +4 -4
  418. package/dist/schema/inbox.js.map +1 -1
  419. package/dist/schema/index.d.ts +8 -5
  420. package/dist/schema/index.d.ts.map +1 -1
  421. package/dist/schema/index.js +8 -5
  422. package/dist/schema/index.js.map +1 -1
  423. package/dist/schema/meta.d.ts +1454 -27
  424. package/dist/schema/meta.d.ts.map +1 -1
  425. package/dist/schema/meta.js +198 -21
  426. package/dist/schema/meta.js.map +1 -1
  427. package/dist/schema/plan.d.ts +285 -0
  428. package/dist/schema/plan.d.ts.map +1 -0
  429. package/dist/schema/plan.js +81 -0
  430. package/dist/schema/plan.js.map +1 -0
  431. package/dist/schema/spec.d.ts +72 -33
  432. package/dist/schema/spec.d.ts.map +1 -1
  433. package/dist/schema/spec.js +22 -9
  434. package/dist/schema/spec.js.map +1 -1
  435. package/dist/schema/task.d.ts +172 -161
  436. package/dist/schema/task.d.ts.map +1 -1
  437. package/dist/schema/task.js +21 -12
  438. package/dist/schema/task.js.map +1 -1
  439. package/dist/schema/triage.d.ts +266 -0
  440. package/dist/schema/triage.d.ts.map +1 -0
  441. package/dist/schema/triage.js +134 -0
  442. package/dist/schema/triage.js.map +1 -0
  443. package/dist/sessions/index.d.ts +2 -2
  444. package/dist/sessions/index.d.ts.map +1 -1
  445. package/dist/sessions/index.js +3 -3
  446. package/dist/sessions/index.js.map +1 -1
  447. package/dist/sessions/store.d.ts +233 -1
  448. package/dist/sessions/store.d.ts.map +1 -1
  449. package/dist/sessions/store.js +628 -31
  450. package/dist/sessions/store.js.map +1 -1
  451. package/dist/sessions/types.d.ts +10 -10
  452. package/dist/sessions/types.d.ts.map +1 -1
  453. package/dist/sessions/types.js +10 -9
  454. package/dist/sessions/types.js.map +1 -1
  455. package/dist/strings/errors.d.ts +51 -0
  456. package/dist/strings/errors.d.ts.map +1 -1
  457. package/dist/strings/errors.js +136 -106
  458. package/dist/strings/errors.js.map +1 -1
  459. package/dist/strings/guidance.d.ts.map +1 -1
  460. package/dist/strings/guidance.js +16 -16
  461. package/dist/strings/guidance.js.map +1 -1
  462. package/dist/strings/index.d.ts +4 -4
  463. package/dist/strings/index.d.ts.map +1 -1
  464. package/dist/strings/index.js +4 -4
  465. package/dist/strings/index.js.map +1 -1
  466. package/dist/strings/labels.d.ts +4 -0
  467. package/dist/strings/labels.d.ts.map +1 -1
  468. package/dist/strings/labels.js +45 -41
  469. package/dist/strings/labels.js.map +1 -1
  470. package/dist/strings/validation.d.ts.map +1 -1
  471. package/dist/strings/validation.js +71 -71
  472. package/dist/strings/validation.js.map +1 -1
  473. package/dist/utils/commit.d.ts +1 -1
  474. package/dist/utils/commit.d.ts.map +1 -1
  475. package/dist/utils/commit.js +28 -26
  476. package/dist/utils/commit.js.map +1 -1
  477. package/dist/utils/git.d.ts +1 -1
  478. package/dist/utils/git.d.ts.map +1 -1
  479. package/dist/utils/git.js +40 -38
  480. package/dist/utils/git.js.map +1 -1
  481. package/dist/utils/grep.js +11 -11
  482. package/dist/utils/grep.js.map +1 -1
  483. package/dist/utils/index.d.ts +7 -7
  484. package/dist/utils/index.d.ts.map +1 -1
  485. package/dist/utils/index.js +4 -4
  486. package/dist/utils/index.js.map +1 -1
  487. package/dist/utils/time.d.ts.map +1 -1
  488. package/dist/utils/time.js +10 -10
  489. package/dist/utils/time.js.map +1 -1
  490. package/package.json +28 -5
  491. package/plugin/.claude-plugin/marketplace.json +17 -0
  492. package/plugin/.claude-plugin/plugin.json +5 -0
  493. package/plugin/plugins/kspec/skills/help/SKILL.md +42 -0
  494. package/plugin/plugins/kspec/skills/triage/SKILL.md +206 -0
  495. package/plugin/plugins/kspec/skills/triage/docs/automation.md +120 -0
  496. package/plugin/plugins/kspec/skills/triage/docs/inbox.md +144 -0
  497. package/plugin/plugins/kspec/skills/triage/docs/observations.md +85 -0
  498. package/templates/agents-sections/01-quick-start.md +22 -0
  499. package/templates/agents-sections/02-shadow-branch.md +34 -0
  500. package/templates/agents-sections/03-task-lifecycle.md +48 -0
  501. package/templates/agents-sections/04-pr-workflow.md +17 -0
  502. package/templates/agents-sections/05-commit-convention.md +27 -0
  503. package/templates/agents-sections/06-ralph-loop.md +45 -0
  504. package/templates/hooks/pre-commit +34 -0
  505. package/templates/skills/help/SKILL.md +37 -0
  506. package/templates/skills/manifest.yaml +15 -0
  507. package/templates/skills/triage/SKILL.md +199 -0
  508. package/templates/skills/triage/docs/automation.md +120 -0
  509. package/templates/skills/triage/docs/inbox.md +144 -0
  510. package/templates/skills/triage/docs/observations.md +85 -0
@@ -0,0 +1,569 @@
1
+ import * as readline from "node:readline";
2
+ import { ulid } from "ulid";
3
+ import { markMutating } from "../command-annotations.js";
4
+ import { createObservation, createTask, deleteInboxItem, findInboxItemByRef, getAuthor, initContext, loadAllItems, loadAllTasks, loadInboxItems, loadTriageRecords, ReferenceIndex, saveObservation, saveTask, saveTriageRecord, findTriageRecordByRef, } from "../../parser/index.js";
5
+ import { commitIfShadow } from "../../parser/shadow.js";
6
+ import { exportTriageAsContext, truncateText } from "../../export/triage.js";
7
+ import { errors } from "../../strings/index.js";
8
+ import { formatRelativeTime as formatRelativeTimeUtil } from "../../utils/time.js";
9
+ import { EXIT_CODES } from "../exit-codes.js";
10
+ import { error, info, output, success } from "../output.js";
11
+ /**
12
+ * Format relative time for display
13
+ */
14
+ function formatRelativeTime(dateStr) {
15
+ return formatRelativeTimeUtil(new Date(dateStr));
16
+ }
17
+ /**
18
+ * Resolve triage record ref with error handling
19
+ */
20
+ function resolveTriageRef(ref, records) {
21
+ const record = findTriageRecordByRef(records, ref);
22
+ if (!record) {
23
+ error(`Triage record not found: ${ref}`);
24
+ process.exit(EXIT_CODES.NOT_FOUND);
25
+ }
26
+ return record;
27
+ }
28
+ // truncateText imported from shared export/triage.ts
29
+ /**
30
+ * Execute a triage action
31
+ * AC: @triage-cli-commands ac-4, ac-5, ac-6, ac-7, ac-8
32
+ */
33
+ async function executeTriageAction(record, ctx, dryRun = false) {
34
+ const action = record.action;
35
+ if (!action) {
36
+ error("Record has no action to execute");
37
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
38
+ }
39
+ switch (action) {
40
+ case "promote": {
41
+ // AC: @triage-cli-commands ac-4
42
+ if (dryRun) {
43
+ info(`Would create task from inbox item snapshot: "${truncateText(record.item_snapshot)}"`);
44
+ return {};
45
+ }
46
+ const task = createTask({
47
+ title: record.item_snapshot.split("\n")[0].slice(0, 100),
48
+ type: "task",
49
+ priority: 3,
50
+ spec_ref: null,
51
+ tags: [],
52
+ description: record.item_snapshot,
53
+ });
54
+ await saveTask(ctx, task);
55
+ const tasks = await loadAllTasks(ctx);
56
+ const items = await loadAllItems(ctx);
57
+ const index = new ReferenceIndex(tasks, items);
58
+ const taskRef = `@${index.shortUlid(task._ulid)}`;
59
+ info(`Created task: ${taskRef} - ${task.title}`);
60
+ return { resultRef: taskRef };
61
+ }
62
+ case "delete": {
63
+ // AC: @triage-cli-commands ac-5
64
+ if (dryRun) {
65
+ info(`Would delete inbox item: ${record.inbox_ref.slice(0, 8)}`);
66
+ return {};
67
+ }
68
+ const inboxItems = await loadInboxItems(ctx);
69
+ const inboxItem = findInboxItemByRef(inboxItems, record.inbox_ref);
70
+ if (inboxItem) {
71
+ await deleteInboxItem(ctx, inboxItem._ulid);
72
+ info(`Deleted inbox item: ${record.inbox_ref.slice(0, 8)}`);
73
+ }
74
+ return {};
75
+ }
76
+ case "defer": {
77
+ // AC: @triage-cli-commands ac-6
78
+ if (dryRun) {
79
+ info(`Would defer: no side effects beyond recording the deferral`);
80
+ return {};
81
+ }
82
+ return {};
83
+ }
84
+ case "spec-gap": {
85
+ // AC: @triage-cli-commands ac-7
86
+ if (dryRun) {
87
+ info(`Would create spec-gap observation from: "${truncateText(record.item_snapshot)}"`);
88
+ return {};
89
+ }
90
+ const content = `[spec-gap] ${record.item_snapshot}\n\nReasoning: ${record.reasoning || ""}`;
91
+ const observation = createObservation("question", content, {
92
+ configAuthor: ctx.config?.identity?.author,
93
+ });
94
+ await saveObservation(ctx, observation);
95
+ const obsRef = `@${observation._ulid.slice(0, 8)}`;
96
+ info(`Created spec-gap observation: ${obsRef}`);
97
+ return { resultRef: obsRef };
98
+ }
99
+ case "duplicate": {
100
+ // AC: @triage-cli-commands ac-8
101
+ if (dryRun) {
102
+ info(`Would delete duplicate inbox item: ${record.inbox_ref.slice(0, 8)}`);
103
+ return {};
104
+ }
105
+ const dupItems = await loadInboxItems(ctx);
106
+ const dupItem = findInboxItemByRef(dupItems, record.inbox_ref);
107
+ if (dupItem) {
108
+ await deleteInboxItem(ctx, dupItem._ulid);
109
+ info(`Deleted duplicate inbox item: ${record.inbox_ref.slice(0, 8)}`);
110
+ }
111
+ return {};
112
+ }
113
+ }
114
+ }
115
+ // formatTriageContext moved to shared export/triage.ts (formatTriageRecordContext)
116
+ /**
117
+ * Register the 'triage' command group
118
+ * AC: @triage-cli-commands ac-1 through ac-17
119
+ */
120
+ export function registerTriageCommands(program) {
121
+ const triage = program
122
+ .command("triage")
123
+ .description("Record, review, and act on triage decisions");
124
+ // kspec triage record <inbox-ref>
125
+ // AC: @triage-cli-commands ac-1, ac-11
126
+ markMutating(triage.command("record <inbox-ref>"))
127
+ .description("Record a triage decision for an inbox item")
128
+ .requiredOption("--action <action>", "Triage action (promote, delete, defer, spec-gap, duplicate)")
129
+ .requiredOption("--reasoning <text>", "Reasoning for the decision")
130
+ .option("--decided-by <author>", "Who made the decision")
131
+ .option("--evidence <refs...>", "Evidence references")
132
+ .option("--dry-run", "Show what would happen without making changes")
133
+ .addHelpText("after", `
134
+ Examples:
135
+ $ kspec triage record @ref --action promote --reasoning "clear feature request"
136
+ $ kspec triage record @ref --action defer --reasoning "needs more discussion"`)
137
+ .action(async (inboxRef, options) => {
138
+ try {
139
+ const ctx = await initContext();
140
+ // Validate action
141
+ const validActions = ["promote", "delete", "defer", "spec-gap", "duplicate"];
142
+ if (!validActions.includes(options.action)) {
143
+ error(`Invalid action: ${options.action}. Must be one of: ${validActions.join(", ")}`);
144
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
145
+ }
146
+ // Resolve inbox item
147
+ const inboxItems = await loadInboxItems(ctx);
148
+ const item = findInboxItemByRef(inboxItems, inboxRef);
149
+ if (!item) {
150
+ error(errors.reference.inboxNotFound(inboxRef));
151
+ process.exit(EXIT_CODES.NOT_FOUND);
152
+ }
153
+ if (options.dryRun) {
154
+ info(`Would create triage record for inbox item ${item._ulid.slice(0, 8)} with action: ${options.action}`);
155
+ return;
156
+ }
157
+ const author = options.decidedBy || getAuthor(ctx.config?.identity?.author);
158
+ const evidenceRefs = options.evidence
159
+ ? options.evidence.map((r) => r.startsWith("@") ? r : `@${r}`)
160
+ : [];
161
+ const record = {
162
+ _ulid: ulid(),
163
+ inbox_ref: item._ulid,
164
+ item_snapshot: item.text,
165
+ status: "triaged",
166
+ action: options.action,
167
+ reasoning: options.reasoning,
168
+ decided_by: author,
169
+ evidence_refs: evidenceRefs,
170
+ created_at: new Date().toISOString(),
171
+ };
172
+ await saveTriageRecord(ctx, record);
173
+ await commitIfShadow(ctx.shadow, "triage-record", record._ulid.slice(0, 8), options.action);
174
+ // AC: @triage-cli-commands ac-11 — JSON output
175
+ // AC: @trait-json-output ac-1, ac-2, ac-4, ac-5
176
+ success(`Recorded triage decision: ${record._ulid.slice(0, 8)}`, { record });
177
+ }
178
+ catch (err) {
179
+ error("Failed to record triage decision", err);
180
+ process.exit(EXIT_CODES.ERROR);
181
+ }
182
+ });
183
+ // kspec triage list
184
+ // AC: @triage-cli-commands ac-2, ac-3
185
+ triage
186
+ .command("list")
187
+ .description("List triage records")
188
+ .option("--status <status>", "Filter by status (pending, triaged, acted_on)")
189
+ .option("--action <action>", "Filter by action")
190
+ .option("--decided-by <author>", "Filter by decision author")
191
+ .option("--limit <n>", "Limit results")
192
+ .option("--offset <n>", "Skip first N results")
193
+ .option("--count", "Show only the count")
194
+ .action(async (options) => {
195
+ try {
196
+ const ctx = await initContext();
197
+ let records = await loadTriageRecords(ctx);
198
+ const totalCount = records.length;
199
+ const activeFilters = [];
200
+ let filteredCount;
201
+ // AC: @triage-cli-commands ac-3 — status filter
202
+ // AC: @trait-filterable-list ac-1
203
+ if (options.status) {
204
+ records = records.filter((r) => r.status === options.status);
205
+ activeFilters.push(`status=${options.status}`);
206
+ }
207
+ // AC: @trait-filterable-list ac-5
208
+ if (options.action) {
209
+ records = records.filter((r) => r.action === options.action);
210
+ activeFilters.push(`action=${options.action}`);
211
+ }
212
+ if (options.decidedBy) {
213
+ records = records.filter((r) => r.decided_by === options.decidedBy);
214
+ activeFilters.push(`decided_by=${options.decidedBy}`);
215
+ }
216
+ // Sort by created_at desc (newest first)
217
+ records.sort((a, b) => {
218
+ return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
219
+ });
220
+ // Capture post-filter count before pagination
221
+ filteredCount = records.length;
222
+ // AC: @trait-filterable-list ac-8
223
+ if (options.count) {
224
+ output({ count: records.length }, () => {
225
+ console.log(records.length);
226
+ });
227
+ return;
228
+ }
229
+ // AC: @trait-filterable-list ac-4 — offset
230
+ if (options.offset) {
231
+ const offset = parseInt(options.offset, 10);
232
+ records = records.slice(offset);
233
+ }
234
+ // AC: @trait-filterable-list ac-3 — limit
235
+ if (options.limit) {
236
+ const limit = parseInt(options.limit, 10);
237
+ records = records.slice(0, limit);
238
+ }
239
+ // AC: @trait-json-output ac-1, ac-2
240
+ output(records, () => {
241
+ if (records.length === 0) {
242
+ // AC: @trait-filterable-list ac-6
243
+ console.log("No triage records");
244
+ return;
245
+ }
246
+ // AC: @trait-filterable-list ac-7 — summary with total matching items and filter state
247
+ const filterInfo = activeFilters.length > 0
248
+ ? ` (${activeFilters.join(", ")})`
249
+ : "";
250
+ const showing = filteredCount < totalCount
251
+ ? `${filteredCount} of ${totalCount}`
252
+ : `${filteredCount}`;
253
+ console.log(`Triage records (${showing}${filterInfo}):\n`);
254
+ // AC: @triage-cli-commands ac-2
255
+ for (const record of records) {
256
+ const snapshot = truncateText(record.item_snapshot, 50);
257
+ const age = formatRelativeTime(record.created_at);
258
+ const action = record.action ? ` [${record.action}]` : "";
259
+ const decidedBy = record.decided_by ? ` by ${record.decided_by}` : "";
260
+ console.log(` ${record._ulid.slice(0, 8)} (${age}${decidedBy}) ${record.status}${action}`);
261
+ console.log(` ${snapshot}`);
262
+ console.log("");
263
+ }
264
+ });
265
+ }
266
+ catch (err) {
267
+ error("Failed to list triage records", err);
268
+ process.exit(EXIT_CODES.ERROR);
269
+ }
270
+ });
271
+ // kspec triage act <triage-ref>
272
+ // AC: @triage-cli-commands ac-4, ac-5, ac-6, ac-7, ac-8, ac-15, ac-16, ac-17
273
+ markMutating(triage.command("act <triage-ref>"))
274
+ .description("Execute a triage decision")
275
+ .option("--dry-run", "Show what would happen without executing")
276
+ .action(async (triageRef, options) => {
277
+ try {
278
+ const ctx = await initContext();
279
+ const records = await loadTriageRecords(ctx);
280
+ const record = resolveTriageRef(triageRef, records);
281
+ // AC: @triage-cli-commands ac-15 — already acted on
282
+ // AC: @trait-error-guidance ac-1, ac-2
283
+ if (record.status === "acted_on") {
284
+ error(`Triage record ${record._ulid.slice(0, 8)} has already been acted on. No further action is possible.`);
285
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
286
+ }
287
+ // AC: @triage-cli-commands ac-16 — no decision yet
288
+ // AC: @trait-error-guidance ac-1, ac-2
289
+ if (record.status === "pending") {
290
+ error(`Triage record ${record._ulid.slice(0, 8)} has no decision yet. Record a decision first with: kspec triage record <inbox-ref> --action <action> --reasoning <text>`);
291
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
292
+ }
293
+ // AC: @triage-cli-commands ac-17 — dry run
294
+ if (options.dryRun) {
295
+ info(`Dry run for triage record ${record._ulid.slice(0, 8)}:`);
296
+ await executeTriageAction(record, ctx, true);
297
+ return;
298
+ }
299
+ // Execute the action
300
+ const result = await executeTriageAction(record, ctx, false);
301
+ // Transition to acted_on
302
+ record.status = "acted_on";
303
+ record.acted_at = new Date().toISOString();
304
+ if (result.resultRef) {
305
+ record.result_ref = result.resultRef;
306
+ }
307
+ record.updated_at = new Date().toISOString();
308
+ await saveTriageRecord(ctx, record);
309
+ await commitIfShadow(ctx.shadow, "triage-act", record._ulid.slice(0, 8), record.action);
310
+ success(`Acted on triage record: ${record._ulid.slice(0, 8)} (${record.action})`, { record });
311
+ }
312
+ catch (err) {
313
+ error("Failed to act on triage record", err);
314
+ process.exit(EXIT_CODES.ERROR);
315
+ }
316
+ });
317
+ // kspec triage override <triage-ref>
318
+ // AC: @triage-cli-commands ac-12
319
+ markMutating(triage.command("override <triage-ref>"))
320
+ .description("Override an existing triage decision")
321
+ .requiredOption("--action <action>", "New action (promote, delete, defer, spec-gap, duplicate)")
322
+ .requiredOption("--reasoning <text>", "Reasoning for the override")
323
+ .option("--override-by <author>", "Who is overriding")
324
+ .action(async (triageRef, options) => {
325
+ try {
326
+ const ctx = await initContext();
327
+ const records = await loadTriageRecords(ctx);
328
+ const record = resolveTriageRef(triageRef, records);
329
+ // Validate action
330
+ const validActions = ["promote", "delete", "defer", "spec-gap", "duplicate"];
331
+ if (!validActions.includes(options.action)) {
332
+ error(`Invalid action: ${options.action}. Must be one of: ${validActions.join(", ")}`);
333
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
334
+ }
335
+ const overrideBy = options.overrideBy || getAuthor(ctx.config?.identity?.author);
336
+ // AC: @triage-cli-commands ac-12
337
+ record.override_reasoning = options.reasoning;
338
+ record.override_by = overrideBy;
339
+ record.override_at = new Date().toISOString();
340
+ record.action = options.action;
341
+ // Ensure status is triaged (for re-acting after override)
342
+ if (record.status === "acted_on") {
343
+ record.status = "triaged";
344
+ }
345
+ await saveTriageRecord(ctx, record);
346
+ await commitIfShadow(ctx.shadow, "triage-override", record._ulid.slice(0, 8), options.action);
347
+ success(`Overrode triage decision: ${record._ulid.slice(0, 8)} → ${options.action}`, { record });
348
+ }
349
+ catch (err) {
350
+ error("Failed to override triage decision", err);
351
+ process.exit(EXIT_CODES.ERROR);
352
+ }
353
+ });
354
+ // kspec triage export
355
+ // AC: @triage-cli-commands ac-13, ac-14
356
+ triage
357
+ .command("export")
358
+ .description("Export triage decisions for agent handoff")
359
+ .requiredOption("--format <format>", "Export format (context, json)")
360
+ .option("--status <status>", "Filter by status")
361
+ .action(async (options) => {
362
+ try {
363
+ const ctx = await initContext();
364
+ let records = await loadTriageRecords(ctx);
365
+ if (options.status) {
366
+ records = records.filter((r) => r.status === options.status);
367
+ }
368
+ const validFormats = ["context", "json"];
369
+ if (!validFormats.includes(options.format)) {
370
+ error(`Invalid format: ${options.format}. Must be one of: ${validFormats.join(", ")}`);
371
+ process.exit(EXIT_CODES.VALIDATION_FAILED);
372
+ }
373
+ // AC: @trait-json-output ac-6 — --json takes precedence over --format
374
+ // AC: @triage-cli-commands ac-13, ac-14
375
+ // AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4 — shared formatter
376
+ output(records, () => {
377
+ if (options.format === "json") {
378
+ // AC: @triage-cli-commands ac-14
379
+ console.log(JSON.stringify(records, null, 2));
380
+ }
381
+ else {
382
+ // AC: @triage-cli-commands ac-13 — context format via shared formatter
383
+ console.log(exportTriageAsContext(records));
384
+ }
385
+ });
386
+ }
387
+ catch (err) {
388
+ error("Failed to export triage records", err);
389
+ process.exit(EXIT_CODES.ERROR);
390
+ }
391
+ });
392
+ // kspec triage start
393
+ // AC: @triage-cli-commands ac-9, ac-10
394
+ markMutating(triage.command("start"))
395
+ .description("Start interactive triage of inbox items")
396
+ .action(async () => {
397
+ try {
398
+ const ctx = await initContext();
399
+ const inboxItems = await loadInboxItems(ctx);
400
+ const existingRecords = await loadTriageRecords(ctx);
401
+ // Find untriaged items (no existing triage record)
402
+ const triagedInboxRefs = new Set(existingRecords.map((r) => r.inbox_ref));
403
+ const untriaged = inboxItems.filter((item) => !triagedInboxRefs.has(item._ulid));
404
+ if (untriaged.length === 0) {
405
+ info("No untriaged inbox items");
406
+ return;
407
+ }
408
+ console.log(`\nInteractive triage: ${untriaged.length} item(s) to review\n`);
409
+ console.log("Actions: promote, delete, defer, spec-gap, duplicate, skip\n");
410
+ const validActions = ["promote", "delete", "defer", "spec-gap", "duplicate", "skip"];
411
+ let triaged = 0;
412
+ // Use a line-buffering approach for interactive prompts.
413
+ // readline.question() has issues with piped stdin because the close
414
+ // event can fire before subsequent question() calls process buffered lines.
415
+ // Instead, we collect lines via the 'line' event and read from the buffer.
416
+ const lineBuffer = [];
417
+ let lineResolve = null;
418
+ let inputClosed = false;
419
+ const rl = readline.createInterface({
420
+ input: process.stdin,
421
+ output: process.stdout,
422
+ terminal: false,
423
+ });
424
+ rl.on("line", (line) => {
425
+ if (lineResolve) {
426
+ const resolve = lineResolve;
427
+ lineResolve = null;
428
+ resolve(line.trim());
429
+ }
430
+ else {
431
+ lineBuffer.push(line.trim());
432
+ }
433
+ });
434
+ rl.on("close", () => {
435
+ inputClosed = true;
436
+ if (lineResolve) {
437
+ const resolve = lineResolve;
438
+ lineResolve = null;
439
+ resolve(null);
440
+ }
441
+ });
442
+ const askQuestion = (question) => {
443
+ process.stdout.write(question);
444
+ if (lineBuffer.length > 0) {
445
+ return Promise.resolve(lineBuffer.shift());
446
+ }
447
+ if (inputClosed)
448
+ return Promise.resolve(null);
449
+ return new Promise((resolve) => {
450
+ lineResolve = resolve;
451
+ });
452
+ };
453
+ // AC: @triage-cli-commands ac-9 — present items one at a time
454
+ for (const item of untriaged) {
455
+ console.log("─".repeat(60));
456
+ console.log(`Item: ${item._ulid.slice(0, 8)} (${formatRelativeTime(item.created_at)})`);
457
+ if (item.tags.length > 0) {
458
+ console.log(`Tags: ${item.tags.join(", ")}`);
459
+ }
460
+ if (item.added_by) {
461
+ console.log(`Added by: ${item.added_by}`);
462
+ }
463
+ console.log("");
464
+ console.log(item.text);
465
+ console.log("");
466
+ // AC: @triage-cli-commands ac-10 — Ctrl+C preserves committed records
467
+ const action = await askQuestion("Action (promote/delete/defer/spec-gap/duplicate/skip): ");
468
+ if (action === null) {
469
+ // Ctrl+C or closed input
470
+ console.log(`\nTriage interrupted. ${triaged} record(s) saved.`);
471
+ rl.close();
472
+ return;
473
+ }
474
+ if (!action || action === "skip") {
475
+ console.log("Skipped\n");
476
+ continue;
477
+ }
478
+ if (!validActions.includes(action)) {
479
+ console.log(`Invalid action: ${action}. Skipping.\n`);
480
+ continue;
481
+ }
482
+ const reasoning = await askQuestion("Reasoning: ");
483
+ if (reasoning === null) {
484
+ console.log(`\nTriage interrupted. ${triaged} record(s) saved.`);
485
+ rl.close();
486
+ return;
487
+ }
488
+ if (!reasoning) {
489
+ console.log("Reasoning required. Skipping.\n");
490
+ continue;
491
+ }
492
+ const author = getAuthor(ctx.config?.identity?.author);
493
+ const record = {
494
+ _ulid: ulid(),
495
+ inbox_ref: item._ulid,
496
+ item_snapshot: item.text,
497
+ status: "triaged",
498
+ action: action,
499
+ reasoning,
500
+ decided_by: author,
501
+ evidence_refs: [],
502
+ created_at: new Date().toISOString(),
503
+ };
504
+ await saveTriageRecord(ctx, record);
505
+ await commitIfShadow(ctx.shadow, "triage-record", record._ulid.slice(0, 8), action);
506
+ triaged++;
507
+ console.log(`Recorded: ${record._ulid.slice(0, 8)} → ${action}\n`);
508
+ }
509
+ rl.close();
510
+ console.log(`\nTriage complete. ${triaged} record(s) created.`);
511
+ }
512
+ catch (err) {
513
+ error("Failed to start interactive triage", err);
514
+ process.exit(EXIT_CODES.ERROR);
515
+ }
516
+ });
517
+ // kspec triage get <triage-ref>
518
+ triage
519
+ .command("get <triage-ref>")
520
+ .description("Show details of a triage record")
521
+ .action(async (triageRef) => {
522
+ try {
523
+ const ctx = await initContext();
524
+ const records = await loadTriageRecords(ctx);
525
+ const record = resolveTriageRef(triageRef, records);
526
+ output(record, () => {
527
+ console.log(`ULID: ${record._ulid}`);
528
+ console.log(`Inbox ref: ${record.inbox_ref}`);
529
+ console.log(`Status: ${record.status}`);
530
+ if (record.action)
531
+ console.log(`Action: ${record.action}`);
532
+ if (record.reasoning)
533
+ console.log(`Reasoning: ${record.reasoning}`);
534
+ if (record.decided_by)
535
+ console.log(`Decided by: ${record.decided_by}`);
536
+ if (record.evidence_refs.length > 0) {
537
+ console.log(`Evidence: ${record.evidence_refs.join(", ")}`);
538
+ }
539
+ console.log(`Created: ${record.created_at} (${formatRelativeTime(record.created_at)})`);
540
+ if (record.updated_at) {
541
+ console.log(`Updated: ${record.updated_at}`);
542
+ }
543
+ if (record.override_reasoning) {
544
+ console.log("");
545
+ console.log("Override:");
546
+ console.log(` Reasoning: ${record.override_reasoning}`);
547
+ if (record.override_by)
548
+ console.log(` By: ${record.override_by}`);
549
+ if (record.override_at)
550
+ console.log(` At: ${record.override_at}`);
551
+ }
552
+ if (record.acted_at) {
553
+ console.log("");
554
+ console.log(`Acted at: ${record.acted_at}`);
555
+ if (record.result_ref)
556
+ console.log(`Result ref: ${record.result_ref}`);
557
+ }
558
+ console.log("");
559
+ console.log("Item snapshot:");
560
+ console.log(record.item_snapshot);
561
+ });
562
+ }
563
+ catch (err) {
564
+ error("Failed to get triage record", err);
565
+ process.exit(EXIT_CODES.ERROR);
566
+ }
567
+ });
568
+ }
569
+ //# sourceMappingURL=triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/cli/commands/triage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "commander";
2
+ /**
3
+ * Register utility commands
4
+ * AC: @cli-utilities
5
+ */
6
+ export declare function registerUtilCommands(program: Command): void;
7
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB3D"}
@@ -0,0 +1,30 @@
1
+ import { ulid } from "ulid";
2
+ import { output } from "../output.js";
3
+ /**
4
+ * Register utility commands
5
+ * AC: @cli-utilities
6
+ */
7
+ export function registerUtilCommands(program) {
8
+ const util = program
9
+ .command("util")
10
+ .description("Utility commands for development tasks");
11
+ // kspec util ulid - generate valid ULIDs
12
+ // AC: @cli-utilities ac-1
13
+ util
14
+ .command("ulid")
15
+ .description("Generate valid ULIDs for YAML fixtures")
16
+ .option("-c, --count <n>", "Number of ULIDs to generate", "1")
17
+ .action((options) => {
18
+ const count = Math.max(1, parseInt(options.count, 10) || 1);
19
+ const ulids = [];
20
+ for (let i = 0; i < count; i++) {
21
+ ulids.push(ulid());
22
+ }
23
+ output({ ulids }, () => {
24
+ for (const id of ulids) {
25
+ console.log(id);
26
+ }
27
+ });
28
+ });
29
+ }
30
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/cli/commands/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC,CAAC;IAEzD,yCAAyC;IACzC,0BAA0B;IAC1B,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SAC7D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;YACrB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Command } from 'commander';
1
+ import type { Command } from "commander";
2
2
  /**
3
3
  * Register validate command
4
4
  */