@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,239 @@
1
+ /**
2
+ * HTML Export Module
3
+ *
4
+ * Generates self-contained HTML files with embedded JSON and SPA loader.
5
+ * AC: @gh-pages-export ac-6
6
+ */
7
+ /**
8
+ * Generate a self-contained HTML file with embedded JSON snapshot.
9
+ *
10
+ * The HTML includes:
11
+ * - Embedded JSON data in a script tag
12
+ * - Redirect to hosted SPA (or minimal inline viewer)
13
+ * - Fallback for viewing raw data
14
+ *
15
+ * AC: @gh-pages-export ac-6
16
+ */
17
+ export function generateHtmlExport(snapshot) {
18
+ const jsonData = JSON.stringify(snapshot, null, 2);
19
+ const escapedJson = jsonData
20
+ .replace(/</g, "\\u003c")
21
+ .replace(/>/g, "\\u003e")
22
+ .replace(/&/g, "\\u0026");
23
+ return `<!DOCTYPE html>
24
+ <html lang="en">
25
+ <head>
26
+ <meta charset="UTF-8">
27
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
+ <title>${escapeHtml(snapshot.project.name)} - kspec Export</title>
29
+ <style>
30
+ :root {
31
+ --bg: #1a1a2e;
32
+ --fg: #eee;
33
+ --accent: #4ade80;
34
+ --muted: #666;
35
+ --border: #333;
36
+ }
37
+ * { box-sizing: border-box; margin: 0; padding: 0; }
38
+ body {
39
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
40
+ background: var(--bg);
41
+ color: var(--fg);
42
+ line-height: 1.6;
43
+ padding: 2rem;
44
+ }
45
+ .container { max-width: 1200px; margin: 0 auto; }
46
+ header {
47
+ display: flex;
48
+ justify-content: space-between;
49
+ align-items: center;
50
+ margin-bottom: 2rem;
51
+ padding-bottom: 1rem;
52
+ border-bottom: 1px solid var(--border);
53
+ }
54
+ h1 { font-size: 1.5rem; font-weight: 600; }
55
+ .meta { color: var(--muted); font-size: 0.875rem; }
56
+ .badge {
57
+ display: inline-flex;
58
+ align-items: center;
59
+ gap: 0.5rem;
60
+ padding: 0.25rem 0.75rem;
61
+ border-radius: 9999px;
62
+ font-size: 0.75rem;
63
+ font-weight: 500;
64
+ }
65
+ .badge.valid { background: rgba(74, 222, 128, 0.2); color: var(--accent); }
66
+ .badge.invalid { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
67
+ .stats {
68
+ display: grid;
69
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
70
+ gap: 1rem;
71
+ margin-bottom: 2rem;
72
+ }
73
+ .stat {
74
+ background: rgba(255, 255, 255, 0.05);
75
+ padding: 1rem;
76
+ border-radius: 0.5rem;
77
+ border: 1px solid var(--border);
78
+ }
79
+ .stat-value { font-size: 2rem; font-weight: 700; color: var(--accent); }
80
+ .stat-label { color: var(--muted); font-size: 0.875rem; }
81
+ .section { margin-bottom: 2rem; }
82
+ .section-title {
83
+ font-size: 1rem;
84
+ font-weight: 600;
85
+ margin-bottom: 1rem;
86
+ color: var(--muted);
87
+ text-transform: uppercase;
88
+ letter-spacing: 0.05em;
89
+ }
90
+ .list { display: flex; flex-direction: column; gap: 0.5rem; }
91
+ .item {
92
+ background: rgba(255, 255, 255, 0.05);
93
+ padding: 1rem;
94
+ border-radius: 0.5rem;
95
+ border: 1px solid var(--border);
96
+ }
97
+ .item-title { font-weight: 500; }
98
+ .item-meta { color: var(--muted); font-size: 0.875rem; }
99
+ .status {
100
+ display: inline-block;
101
+ padding: 0.125rem 0.5rem;
102
+ border-radius: 0.25rem;
103
+ font-size: 0.75rem;
104
+ font-weight: 500;
105
+ }
106
+ .status-pending { background: rgba(251, 191, 36, 0.2); color: #fbbf24; }
107
+ .status-in_progress { background: rgba(59, 130, 246, 0.2); color: #3b82f6; }
108
+ .status-pending_review { background: rgba(168, 85, 247, 0.2); color: #a855f7; }
109
+ .status-needs_work { background: rgba(249, 115, 22, 0.2); color: #f97316; }
110
+ .status-completed { background: rgba(74, 222, 128, 0.2); color: #4ade80; }
111
+ .status-cancelled { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
112
+ .status-blocked { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
113
+ .read-only-banner {
114
+ background: rgba(251, 191, 36, 0.2);
115
+ color: #fbbf24;
116
+ padding: 0.75rem 1rem;
117
+ border-radius: 0.5rem;
118
+ margin-bottom: 1rem;
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 0.5rem;
122
+ }
123
+ footer {
124
+ margin-top: 2rem;
125
+ padding-top: 1rem;
126
+ border-top: 1px solid var(--border);
127
+ color: var(--muted);
128
+ font-size: 0.875rem;
129
+ text-align: center;
130
+ }
131
+ a { color: var(--accent); text-decoration: none; }
132
+ a:hover { text-decoration: underline; }
133
+ </style>
134
+ </head>
135
+ <body>
136
+ <div class="container">
137
+ <header>
138
+ <div>
139
+ <h1>${escapeHtml(snapshot.project.name)}</h1>
140
+ <div class="meta">
141
+ Exported: ${new Date(snapshot.exported_at).toLocaleString()}
142
+ ${snapshot.project.version ? ` • v${escapeHtml(snapshot.project.version)}` : ""}
143
+ </div>
144
+ </div>
145
+ ${snapshot.validation ? `
146
+ <span class="badge ${snapshot.validation.valid ? "valid" : "invalid"}">
147
+ ${snapshot.validation.valid ? "✓ Valid" : `✗ ${snapshot.validation.errorCount} errors`}
148
+ </span>
149
+ ` : ""}
150
+ </header>
151
+
152
+ <div class="read-only-banner">
153
+ <span>📖</span>
154
+ <span>Read-only view. Use the kspec CLI to make changes.</span>
155
+ </div>
156
+
157
+ <div class="stats">
158
+ <div class="stat">
159
+ <div class="stat-value">${snapshot.tasks.length}</div>
160
+ <div class="stat-label">Tasks</div>
161
+ </div>
162
+ <div class="stat">
163
+ <div class="stat-value">${snapshot.items.length}</div>
164
+ <div class="stat-label">Spec Items</div>
165
+ </div>
166
+ <div class="stat">
167
+ <div class="stat-value">${snapshot.inbox.length}</div>
168
+ <div class="stat-label">Inbox Items</div>
169
+ </div>
170
+ <div class="stat">
171
+ <div class="stat-value">${snapshot.observations.length}</div>
172
+ <div class="stat-label">Observations</div>
173
+ </div>
174
+ </div>
175
+
176
+ <div class="section">
177
+ <div class="section-title">Recent Tasks</div>
178
+ <div class="list">
179
+ ${snapshot.tasks.slice(0, 10).map(task => `
180
+ <div class="item">
181
+ <div class="item-title">
182
+ <span class="status status-${task.status}">${task.status}</span>
183
+ ${escapeHtml(task.title)}
184
+ </div>
185
+ <div class="item-meta">
186
+ @${task.slugs[0] || task._ulid.slice(0, 8)}
187
+ ${task.spec_ref_title ? ` • ${escapeHtml(task.spec_ref_title)}` : ""}
188
+ </div>
189
+ </div>
190
+ `).join("")}
191
+ ${snapshot.tasks.length > 10 ? `<div class="item-meta">... and ${snapshot.tasks.length - 10} more tasks</div>` : ""}
192
+ </div>
193
+ </div>
194
+
195
+ <div class="section">
196
+ <div class="section-title">Spec Items</div>
197
+ <div class="list">
198
+ ${snapshot.items.slice(0, 10).map(item => `
199
+ <div class="item">
200
+ <div class="item-title">${escapeHtml(item.title)}</div>
201
+ <div class="item-meta">
202
+ ${item.type || "item"} • @${item.slugs[0] || item._ulid.slice(0, 8)}
203
+ ${item.acceptance_criteria?.length ? ` • ${item.acceptance_criteria.length} ACs` : ""}
204
+ </div>
205
+ </div>
206
+ `).join("")}
207
+ ${snapshot.items.length > 10 ? `<div class="item-meta">... and ${snapshot.items.length - 10} more items</div>` : ""}
208
+ </div>
209
+ </div>
210
+
211
+ <footer>
212
+ Generated by <a href="https://github.com/chapel/kynetic-spec">kspec</a> v${escapeHtml(snapshot.version)}
213
+ </footer>
214
+ </div>
215
+
216
+ <!-- Embedded snapshot data -->
217
+ <script id="kspec-data" type="application/json">
218
+ ${escapedJson}
219
+ </script>
220
+
221
+ <script>
222
+ // Make snapshot available globally
223
+ window.KSPEC_STATIC_DATA = JSON.parse(document.getElementById('kspec-data').textContent);
224
+ </script>
225
+ </body>
226
+ </html>`;
227
+ }
228
+ /**
229
+ * Escape HTML special characters.
230
+ */
231
+ function escapeHtml(str) {
232
+ return str
233
+ .replace(/&/g, "&amp;")
234
+ .replace(/</g, "&lt;")
235
+ .replace(/>/g, "&gt;")
236
+ .replace(/"/g, "&quot;")
237
+ .replace(/'/g, "&#039;");
238
+ }
239
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/export/html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Export Module
3
+ *
4
+ * Provides functionality for exporting kspec data to various formats.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./json.js";
8
+ export * from "./html.js";
9
+ export * from "./triage.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/export/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Export Module
3
+ *
4
+ * Provides functionality for exporting kspec data to various formats.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./json.js";
8
+ export * from "./html.js";
9
+ export * from "./triage.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/export/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * JSON Export Module
3
+ *
4
+ * Generates JSON snapshots of kspec data for static site hosting.
5
+ * Handles reference resolution, trait expansion, and validation inclusion.
6
+ *
7
+ * AC: @gh-pages-export ac-1, ac-2, ac-3, ac-4, ac-5
8
+ */
9
+ import type { ExportStats, KspecSnapshot } from "./types.js";
10
+ /**
11
+ * Generate a JSON snapshot of all kspec data.
12
+ * AC: @gh-pages-export ac-1, ac-2, ac-3, ac-4, ac-5
13
+ */
14
+ export declare function generateJsonSnapshot(includeValidation?: boolean): Promise<KspecSnapshot>;
15
+ /**
16
+ * Calculate export statistics for dry-run.
17
+ * AC: @gh-pages-export ac-7
18
+ */
19
+ export declare function calculateExportStats(snapshot: KspecSnapshot): ExportStats;
20
+ /**
21
+ * Format bytes to human-readable size.
22
+ */
23
+ export declare function formatBytes(bytes: number): string;
24
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/export/json.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,OAAO,KAAK,EAIV,WAAW,EAEX,aAAa,EACd,MAAM,YAAY,CAAC;AA+IpB;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,iBAAiB,UAAQ,GACxB,OAAO,CAAC,aAAa,CAAC,CAoDxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,CAazE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * JSON Export Module
3
+ *
4
+ * Generates JSON snapshots of kspec data for static site hosting.
5
+ * Handles reference resolution, trait expansion, and validation inclusion.
6
+ *
7
+ * AC: @gh-pages-export ac-1, ac-2, ac-3, ac-4, ac-5
8
+ */
9
+ import * as fs from "node:fs/promises";
10
+ import * as path from "node:path";
11
+ import { buildIndexes, computeACCoverage, initContext, loadAllItems, loadAllTasks, loadInboxItems, loadMetaContext, scanTestCoverage, validate, } from "../parser/index.js";
12
+ import { loadSessionContext } from "../parser/meta.js";
13
+ /**
14
+ * Get the kspec version from package.json
15
+ */
16
+ async function getKspecVersion() {
17
+ try {
18
+ // Try to find package.json relative to this module
19
+ const packagePath = path.resolve(import.meta.dirname || __dirname, "../../package.json");
20
+ const packageJson = JSON.parse(await fs.readFile(packagePath, "utf-8"));
21
+ return packageJson.version || "unknown";
22
+ }
23
+ catch {
24
+ return "unknown";
25
+ }
26
+ }
27
+ /**
28
+ * Resolve spec_ref to its title for display.
29
+ * AC: @gh-pages-export ac-3
30
+ */
31
+ function resolveSpecRefTitle(specRef, items, refIndex) {
32
+ if (!specRef)
33
+ return undefined;
34
+ const result = refIndex.resolve(specRef);
35
+ if (!result.ok)
36
+ return undefined;
37
+ const item = items.find((i) => i._ulid === result.ulid);
38
+ return item?.title;
39
+ }
40
+ /**
41
+ * Expand tasks with resolved spec reference titles.
42
+ * AC: @gh-pages-export ac-3
43
+ */
44
+ function expandTasks(tasks, items, refIndex) {
45
+ return tasks.map((task) => {
46
+ const exportedTask = { ...task };
47
+ if (task.spec_ref) {
48
+ const title = resolveSpecRefTitle(task.spec_ref, items, refIndex);
49
+ if (title) {
50
+ exportedTask.spec_ref_title = title;
51
+ }
52
+ }
53
+ return exportedTask;
54
+ });
55
+ }
56
+ /**
57
+ * Get inherited ACs from traits for a spec item.
58
+ * AC: @gh-pages-export ac-4
59
+ */
60
+ function getInheritedACs(item, traitIndex) {
61
+ const inheritedAC = traitIndex.getInheritedAC(item._ulid);
62
+ return inheritedAC.map(({ trait, ac }) => ({
63
+ ...ac,
64
+ _inherited_from: `@${trait.slug}`,
65
+ }));
66
+ }
67
+ /**
68
+ * Expand items with inherited ACs from traits and test coverage.
69
+ * AC: @gh-pages-export ac-4
70
+ * AC: @web-dashboard ac-15 - Add test coverage for static mode
71
+ */
72
+ function expandItems(items, traitIndex, coveredACs) {
73
+ return items.map((item) => {
74
+ // Compute coverage for acceptance criteria using shared utility
75
+ const acWithCoverage = item.acceptance_criteria && item.acceptance_criteria.length > 0
76
+ ? computeACCoverage(item, coveredACs)
77
+ : item.acceptance_criteria;
78
+ const exportedItem = {
79
+ ...item,
80
+ acceptance_criteria: acWithCoverage,
81
+ };
82
+ // Get inherited ACs from traits
83
+ const inheritedACs = getInheritedACs(item, traitIndex);
84
+ if (inheritedACs.length > 0) {
85
+ exportedItem.inherited_acs = inheritedACs;
86
+ }
87
+ return exportedItem;
88
+ });
89
+ }
90
+ /**
91
+ * Convert validation result to exported format.
92
+ * AC: @gh-pages-export ac-5
93
+ */
94
+ function convertValidationResult(result) {
95
+ return {
96
+ valid: result.valid,
97
+ errorCount: result.schemaErrors.length + result.refErrors.length,
98
+ warningCount: result.orphans.length + result.completenessWarnings.length,
99
+ errors: [
100
+ ...result.schemaErrors.map((e) => ({
101
+ file: e.file,
102
+ message: e.message,
103
+ path: e.path,
104
+ })),
105
+ ...result.refErrors.map((e) => ({
106
+ file: e.sourceFile || "unknown",
107
+ message: e.message,
108
+ })),
109
+ ],
110
+ warnings: [
111
+ ...result.orphans.map((o) => ({
112
+ file: "orphan",
113
+ message: `Orphaned ${o.type}: ${o.title}`,
114
+ })),
115
+ ...result.completenessWarnings.map((w) => ({
116
+ file: w.itemRef,
117
+ message: w.message,
118
+ })),
119
+ ],
120
+ };
121
+ }
122
+ /**
123
+ * Generate a JSON snapshot of all kspec data.
124
+ * AC: @gh-pages-export ac-1, ac-2, ac-3, ac-4, ac-5
125
+ */
126
+ export async function generateJsonSnapshot(includeValidation = false) {
127
+ const ctx = await initContext();
128
+ // Load all data
129
+ const tasks = await loadAllTasks(ctx);
130
+ const items = await loadAllItems(ctx);
131
+ const inboxItems = await loadInboxItems(ctx);
132
+ const metaContext = await loadMetaContext(ctx);
133
+ const sessionContext = await loadSessionContext(ctx);
134
+ // Build indexes
135
+ const { refIndex, traitIndex } = await buildIndexes(ctx);
136
+ // Scan test coverage for AC annotations
137
+ const coveredACs = await scanTestCoverage(ctx.rootDir);
138
+ // Expand tasks with resolved spec references
139
+ const exportedTasks = expandTasks(tasks, items, refIndex);
140
+ // Expand items with inherited ACs and test coverage
141
+ const exportedItems = expandItems(items, traitIndex, coveredACs);
142
+ // Build the snapshot
143
+ const snapshot = {
144
+ version: await getKspecVersion(),
145
+ exported_at: new Date().toISOString(),
146
+ project: {
147
+ name: ctx.manifest?.project?.name || "Unknown Project",
148
+ version: ctx.manifest?.project?.version,
149
+ },
150
+ tasks: exportedTasks,
151
+ items: exportedItems,
152
+ inbox: inboxItems,
153
+ session: sessionContext,
154
+ observations: metaContext.observations,
155
+ agents: metaContext.agents,
156
+ workflows: metaContext.workflows,
157
+ conventions: metaContext.conventions,
158
+ };
159
+ // Include validation if requested
160
+ if (includeValidation) {
161
+ const validationResult = await validate(ctx, {
162
+ schema: true,
163
+ refs: true,
164
+ orphans: true,
165
+ completeness: true,
166
+ });
167
+ snapshot.validation = convertValidationResult(validationResult);
168
+ }
169
+ return snapshot;
170
+ }
171
+ /**
172
+ * Calculate export statistics for dry-run.
173
+ * AC: @gh-pages-export ac-7
174
+ */
175
+ export function calculateExportStats(snapshot) {
176
+ const jsonString = JSON.stringify(snapshot);
177
+ return {
178
+ taskCount: snapshot.tasks.length,
179
+ itemCount: snapshot.items.length,
180
+ inboxCount: snapshot.inbox.length,
181
+ observationCount: snapshot.observations.length,
182
+ agentCount: snapshot.agents.length,
183
+ workflowCount: snapshot.workflows.length,
184
+ conventionCount: snapshot.conventions.length,
185
+ estimatedSizeBytes: Buffer.byteLength(jsonString, "utf-8"),
186
+ };
187
+ }
188
+ /**
189
+ * Format bytes to human-readable size.
190
+ */
191
+ export function formatBytes(bytes) {
192
+ if (bytes < 1024)
193
+ return `${bytes} B`;
194
+ if (bytes < 1024 * 1024)
195
+ return `${(bytes / 1024).toFixed(1)} KB`;
196
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
197
+ }
198
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/export/json.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EAIhB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAWvD;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,EAChC,oBAAoB,CACrB,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,OAAO,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,OAAkC,EAClC,KAAuB,EACvB,QAAwB;IAExB,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,IAAI,EAAE,KAAK,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,KAAmB,EACnB,KAAuB,EACvB,QAAwB;IAExB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,YAAY,GAAiB,EAAE,GAAG,IAAI,EAAE,CAAC;QAE/C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,cAAc,GAAG,KAAK,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,IAAoB,EACpB,UAAsB;IAEtB,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,GAAG,EAAE;QACL,eAAe,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE;KAClC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAClB,KAAuB,EACvB,UAAsB,EACtB,UAAuB;IAEvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,gEAAgE;QAChE,MAAM,cAAc,GAClB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;YAC7D,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAE/B,MAAM,YAAY,GAAiB;YACjC,GAAG,IAAI;YACP,mBAAmB,EAAE,cAAc;SACpC,CAAC;QAEF,gCAAgC;QAChC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC5C,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,MAA4C;IAE5C,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;QAChE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,MAAM;QACxE,MAAM,EAAE;YACN,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;gBAC/B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;SACJ;QACD,QAAQ,EAAE;YACR,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE;aAC1C,CAAC,CAAC;YACH,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,OAAO;gBACf,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;SACJ;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,iBAAiB,GAAG,KAAK;IAEzB,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAEhC,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAErD,gBAAgB;IAChB,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAEzD,wCAAwC;IACxC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEvD,6CAA6C;IAC7C,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE1D,oDAAoD;IACpD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEjE,qBAAqB;IACrB,MAAM,QAAQ,GAAkB;QAC9B,OAAO,EAAE,MAAM,eAAe,EAAE;QAChC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE;YACP,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAI,iBAAiB;YACtD,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO;SACxC;QACD,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,cAAc;QACvB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC;IAEF,kCAAkC;IAClC,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,QAAQ,CAAC,UAAU,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAuB;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAChC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAChC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QACjC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM;QAC9C,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QAClC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;QACxC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM;QAC5C,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Triage Export Formatter
3
+ *
4
+ * Shared formatter for triage record exports, used by both CLI and daemon API.
5
+ * Two formats: structured JSON and markdown context block.
6
+ *
7
+ * AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4
8
+ */
9
+ import type { TriageRecord } from "../schema/triage.js";
10
+ /**
11
+ * Truncate text to a maximum length, taking only the first line.
12
+ */
13
+ export declare function truncateText(text: string, maxLen?: number): string;
14
+ /**
15
+ * Format a single triage record as a markdown context block.
16
+ * AC: @triage-agent-export ac-1
17
+ * AC: @triage-agent-export ac-3
18
+ */
19
+ export declare function formatTriageRecordContext(record: TriageRecord): string;
20
+ /**
21
+ * Export triage records in context (markdown) format.
22
+ * AC: @triage-agent-export ac-1 — markdown block per record
23
+ * AC: @triage-agent-export ac-3 — overrides included
24
+ * AC: @triage-agent-export ac-4 — empty result message
25
+ */
26
+ export declare function exportTriageAsContext(records: TriageRecord[]): string;
27
+ /**
28
+ * Export result for JSON format.
29
+ * AC: @triage-agent-export ac-2 — JSON array with full objects
30
+ * AC: @triage-agent-export ac-3 — overrides included (full objects)
31
+ * AC: @triage-agent-export ac-4 — empty array when no records
32
+ */
33
+ export interface TriageJsonExport {
34
+ format: "json";
35
+ items: TriageRecord[];
36
+ total: number;
37
+ }
38
+ /**
39
+ * Export result for context format.
40
+ */
41
+ export interface TriageContextExport {
42
+ format: "context";
43
+ content: string;
44
+ }
45
+ export type TriageExportResult = TriageJsonExport | TriageContextExport;
46
+ /**
47
+ * Export triage records in the requested format.
48
+ * AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4
49
+ */
50
+ export declare function exportTriageRecords(records: TriageRecord[], format: "json" | "context"): TriageExportResult;
51
+ //# sourceMappingURL=triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAItE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAsBtE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CASrE;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,kBAAkB,CAYpB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Triage Export Formatter
3
+ *
4
+ * Shared formatter for triage record exports, used by both CLI and daemon API.
5
+ * Two formats: structured JSON and markdown context block.
6
+ *
7
+ * AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4
8
+ */
9
+ /**
10
+ * Truncate text to a maximum length, taking only the first line.
11
+ */
12
+ export function truncateText(text, maxLen = 60) {
13
+ const firstLine = text.split("\n")[0].trim();
14
+ if (firstLine.length <= maxLen)
15
+ return firstLine;
16
+ return `${firstLine.slice(0, maxLen - 3)}...`;
17
+ }
18
+ /**
19
+ * Format a single triage record as a markdown context block.
20
+ * AC: @triage-agent-export ac-1
21
+ * AC: @triage-agent-export ac-3
22
+ */
23
+ export function formatTriageRecordContext(record) {
24
+ const lines = [];
25
+ lines.push(`### ${record._ulid.slice(0, 8)} — ${truncateText(record.item_snapshot, 80)}`);
26
+ lines.push("");
27
+ lines.push(`**Item:** ${record.item_snapshot}`);
28
+ lines.push(`**Status:** ${record.status}`);
29
+ if (record.action)
30
+ lines.push(`**Action:** ${record.action}`);
31
+ if (record.reasoning)
32
+ lines.push(`**Reasoning:** ${record.reasoning}`);
33
+ if (record.decided_by)
34
+ lines.push(`**Decided by:** ${record.decided_by}`);
35
+ if (record.evidence_refs.length > 0) {
36
+ lines.push(`**Evidence:** ${record.evidence_refs.join(", ")}`);
37
+ }
38
+ // AC: @triage-agent-export ac-3 — include override information
39
+ if (record.override_reasoning) {
40
+ lines.push(`**Override:** ${record.override_reasoning} (by ${record.override_by || "unknown"})`);
41
+ }
42
+ if (record.acted_at) {
43
+ lines.push(`**Acted at:** ${record.acted_at}`);
44
+ if (record.result_ref)
45
+ lines.push(`**Result:** ${record.result_ref}`);
46
+ }
47
+ lines.push("");
48
+ return lines.join("\n");
49
+ }
50
+ /**
51
+ * Export triage records in context (markdown) format.
52
+ * AC: @triage-agent-export ac-1 — markdown block per record
53
+ * AC: @triage-agent-export ac-3 — overrides included
54
+ * AC: @triage-agent-export ac-4 — empty result message
55
+ */
56
+ export function exportTriageAsContext(records) {
57
+ if (records.length === 0) {
58
+ return "No triage decisions recorded.";
59
+ }
60
+ let content = "# Triage Decisions\n\n";
61
+ for (const record of records) {
62
+ content += formatTriageRecordContext(record);
63
+ }
64
+ return content;
65
+ }
66
+ /**
67
+ * Export triage records in the requested format.
68
+ * AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4
69
+ */
70
+ export function exportTriageRecords(records, format) {
71
+ if (format === "context") {
72
+ return {
73
+ format: "context",
74
+ content: exportTriageAsContext(records),
75
+ };
76
+ }
77
+ return {
78
+ format: "json",
79
+ items: records,
80
+ total: records.length,
81
+ };
82
+ }
83
+ //# sourceMappingURL=triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"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"}