@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 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/parser/config.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Validates content against convention rules with domain-specific strategies.
5
5
  */
6
- import type { Convention } from '../schema/meta.js';
6
+ import type { Convention } from "../schema/meta.js";
7
7
  /**
8
8
  * Convention validation error
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"convention-validation.d.ts","sourceRoot":"","sources":["../../src/parser/convention-validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACL,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AA8GD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,yBAAyB,GAAG,IAAI,CAyBlC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,0BAA0B,CAsC5B"}
1
+ {"version":3,"file":"convention-validation.d.ts","sourceRoot":"","sources":["../../src/parser/convention-validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACL,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAsHD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,yBAAyB,GAAG,IAAI,CAyBlC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,0BAA0B,CAsC5B"}
@@ -10,7 +10,7 @@ function validateRegex(content, validation, domain) {
10
10
  if (!validation.pattern) {
11
11
  return {
12
12
  domain,
13
- message: 'Regex validation requires a pattern',
13
+ message: "Regex validation requires a pattern",
14
14
  };
15
15
  }
16
16
  try {
@@ -38,14 +38,14 @@ function validateEnum(content, validation, domain) {
38
38
  if (!validation.allowed || validation.allowed.length === 0) {
39
39
  return {
40
40
  domain,
41
- message: 'Enum validation requires an allowed list',
41
+ message: "Enum validation requires an allowed list",
42
42
  };
43
43
  }
44
44
  if (!validation.allowed.includes(content.trim())) {
45
45
  return {
46
46
  domain,
47
47
  message: validation.message || `Value not in allowed list`,
48
- expected: `One of: ${validation.allowed.join(', ')}`,
48
+ expected: `One of: ${validation.allowed.join(", ")}`,
49
49
  };
50
50
  }
51
51
  return null;
@@ -54,17 +54,20 @@ function validateEnum(content, validation, domain) {
54
54
  * Validate content against a range (word count, character count, or line count)
55
55
  */
56
56
  function validateRange(content, validation, domain) {
57
- const unit = validation.unit || 'words';
57
+ const unit = validation.unit || "words";
58
58
  let count;
59
59
  switch (unit) {
60
- case 'words':
61
- count = content.trim().split(/\s+/).filter(w => w.length > 0).length;
60
+ case "words":
61
+ count = content
62
+ .trim()
63
+ .split(/\s+/)
64
+ .filter((w) => w.length > 0).length;
62
65
  break;
63
- case 'chars':
66
+ case "chars":
64
67
  count = content.length;
65
68
  break;
66
- case 'lines':
67
- count = content.split('\n').length;
69
+ case "lines":
70
+ count = content.split("\n").length;
68
71
  break;
69
72
  default:
70
73
  return {
@@ -77,13 +80,15 @@ function validateRange(content, validation, domain) {
77
80
  if (min !== undefined && count < min) {
78
81
  return {
79
82
  domain,
80
- message: validation.message || `Content too short: ${count} ${unit}, minimum ${min} ${unit}`,
83
+ message: validation.message ||
84
+ `Content too short: ${count} ${unit}, minimum ${min} ${unit}`,
81
85
  };
82
86
  }
83
87
  if (max !== undefined && count > max) {
84
88
  return {
85
89
  domain,
86
- message: validation.message || `Content too long: ${count} ${unit}, maximum ${max} ${unit}`,
90
+ message: validation.message ||
91
+ `Content too long: ${count} ${unit}, maximum ${max} ${unit}`,
87
92
  };
88
93
  }
89
94
  return null;
@@ -103,13 +108,13 @@ export function validateConvention(content, convention) {
103
108
  const { validation } = convention;
104
109
  const domain = convention.domain;
105
110
  switch (validation.type) {
106
- case 'regex':
111
+ case "regex":
107
112
  return validateRegex(content, validation, domain);
108
- case 'enum':
113
+ case "enum":
109
114
  return validateEnum(content, validation, domain);
110
- case 'range':
115
+ case "range":
111
116
  return validateRange(content, validation, domain);
112
- case 'prose':
117
+ case "prose":
113
118
  // Prose conventions are advisory only - no validation
114
119
  return null;
115
120
  default:
@@ -139,7 +144,7 @@ export function validateConventions(conventions, contentMap) {
139
144
  skipped.push(convention.domain);
140
145
  continue;
141
146
  }
142
- if (convention.validation.type === 'prose') {
147
+ if (convention.validation.type === "prose") {
143
148
  skipped.push(convention.domain);
144
149
  continue;
145
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"convention-validation.js","sourceRoot":"","sources":["../../src/parser/convention-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convention-validation.js","sourceRoot":"","sources":["../../src/parser/convention-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Test coverage cache for daemon performance optimization.
3
+ *
4
+ * Caches scanTestCoverage() results to avoid re-scanning test files
5
+ * on every API request. The cache is per-project-directory and supports:
6
+ * - TTL-based expiration (default 60 seconds)
7
+ * - Explicit invalidation for file watcher integration
8
+ *
9
+ * @module coverage-cache
10
+ */
11
+ /**
12
+ * Get test coverage for a project directory, using cache when available.
13
+ *
14
+ * This is the primary API for daemon routes. It:
15
+ * 1. Returns cached results if valid
16
+ * 2. Returns in-flight scan result if a scan is already in progress
17
+ * 3. Otherwise initiates a new scan and caches the result
18
+ *
19
+ * @param rootDir - Project root directory containing tests/
20
+ * @returns Set of covered AC references (e.g., "@spec-ref ac-1")
21
+ */
22
+ export declare function getCachedTestCoverage(rootDir: string): Promise<Set<string>>;
23
+ /**
24
+ * Invalidate the test coverage cache for a specific project or all projects.
25
+ *
26
+ * Call this when test files change (via file watcher) to ensure
27
+ * fresh coverage data on next request.
28
+ *
29
+ * @param rootDir - Optional project root directory. If omitted, clears all caches.
30
+ */
31
+ export declare function invalidateTestCoverageCache(rootDir?: string): void;
32
+ /**
33
+ * Set the cache TTL (for testing purposes).
34
+ *
35
+ * @param ms - TTL in milliseconds
36
+ */
37
+ export declare function setTestCoverageCacheTTL(ms: number): void;
38
+ /**
39
+ * Reset the cache TTL to default (for testing purposes).
40
+ */
41
+ export declare function resetTestCoverageCacheTTL(): void;
42
+ /**
43
+ * Get current cache statistics (for debugging/monitoring).
44
+ */
45
+ export declare function getTestCoverageCacheStats(): {
46
+ entries: number;
47
+ ttlMs: number;
48
+ };
49
+ //# sourceMappingURL=coverage-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-cache.d.ts","sourceRoot":"","sources":["../../src/parser/coverage-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+CH;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAqCtB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAKA"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Test coverage cache for daemon performance optimization.
3
+ *
4
+ * Caches scanTestCoverage() results to avoid re-scanning test files
5
+ * on every API request. The cache is per-project-directory and supports:
6
+ * - TTL-based expiration (default 60 seconds)
7
+ * - Explicit invalidation for file watcher integration
8
+ *
9
+ * @module coverage-cache
10
+ */
11
+ import { scanTestCoverage } from "./validate.js";
12
+ /**
13
+ * Default TTL in milliseconds (60 seconds)
14
+ */
15
+ const DEFAULT_TTL_MS = 60_000;
16
+ /**
17
+ * Per-project cache storage
18
+ * Key: normalized root directory path
19
+ */
20
+ const cache = new Map();
21
+ /**
22
+ * Configurable TTL (for testing)
23
+ */
24
+ let ttlMs = DEFAULT_TTL_MS;
25
+ /**
26
+ * Normalize a directory path for use as cache key.
27
+ * Removes trailing slashes for consistency.
28
+ */
29
+ function normalizePath(dir) {
30
+ return dir.endsWith("/") ? dir.slice(0, -1) : dir;
31
+ }
32
+ /**
33
+ * Check if a cache entry is still valid based on TTL.
34
+ */
35
+ function isValid(entry) {
36
+ return Date.now() - entry.cachedAt < ttlMs;
37
+ }
38
+ /**
39
+ * Get test coverage for a project directory, using cache when available.
40
+ *
41
+ * This is the primary API for daemon routes. It:
42
+ * 1. Returns cached results if valid
43
+ * 2. Returns in-flight scan result if a scan is already in progress
44
+ * 3. Otherwise initiates a new scan and caches the result
45
+ *
46
+ * @param rootDir - Project root directory containing tests/
47
+ * @returns Set of covered AC references (e.g., "@spec-ref ac-1")
48
+ */
49
+ export async function getCachedTestCoverage(rootDir) {
50
+ const key = normalizePath(rootDir);
51
+ const existing = cache.get(key);
52
+ // Return cached result if valid
53
+ if (existing && isValid(existing) && !existing.pending) {
54
+ return existing.coverage;
55
+ }
56
+ // Return in-flight scan if one exists (prevents duplicate parallel scans)
57
+ if (existing?.pending) {
58
+ return existing.pending;
59
+ }
60
+ // Initiate new scan
61
+ const scanPromise = scanTestCoverage(rootDir);
62
+ // Store pending promise to prevent parallel scans
63
+ const entry = existing || {
64
+ coverage: new Set(),
65
+ cachedAt: 0,
66
+ };
67
+ entry.pending = scanPromise;
68
+ cache.set(key, entry);
69
+ try {
70
+ const coverage = await scanPromise;
71
+ // Update cache with result
72
+ entry.coverage = coverage;
73
+ entry.cachedAt = Date.now();
74
+ entry.pending = undefined;
75
+ return coverage;
76
+ }
77
+ catch (error) {
78
+ // Clear pending on error, allow retry
79
+ entry.pending = undefined;
80
+ throw error;
81
+ }
82
+ }
83
+ /**
84
+ * Invalidate the test coverage cache for a specific project or all projects.
85
+ *
86
+ * Call this when test files change (via file watcher) to ensure
87
+ * fresh coverage data on next request.
88
+ *
89
+ * @param rootDir - Optional project root directory. If omitted, clears all caches.
90
+ */
91
+ export function invalidateTestCoverageCache(rootDir) {
92
+ if (rootDir) {
93
+ const key = normalizePath(rootDir);
94
+ cache.delete(key);
95
+ }
96
+ else {
97
+ cache.clear();
98
+ }
99
+ }
100
+ /**
101
+ * Set the cache TTL (for testing purposes).
102
+ *
103
+ * @param ms - TTL in milliseconds
104
+ */
105
+ export function setTestCoverageCacheTTL(ms) {
106
+ ttlMs = ms;
107
+ }
108
+ /**
109
+ * Reset the cache TTL to default (for testing purposes).
110
+ */
111
+ export function resetTestCoverageCacheTTL() {
112
+ ttlMs = DEFAULT_TTL_MS;
113
+ }
114
+ /**
115
+ * Get current cache statistics (for debugging/monitoring).
116
+ */
117
+ export function getTestCoverageCacheStats() {
118
+ return {
119
+ entries: cache.size,
120
+ ttlMs,
121
+ };
122
+ }
123
+ //# sourceMappingURL=coverage-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-cache.js","sourceRoot":"","sources":["../../src/parser/coverage-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAcjD;;GAEG;AACH,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;;;GAGG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C;;GAEG;AACH,IAAI,KAAK,GAAG,cAAc,CAAC;AAE3B;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,KAAiB;IAChC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe;IAEf,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEhC,gCAAgC;IAChC,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACvD,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE9C,kDAAkD;IAClD,MAAM,KAAK,GAAe,QAAQ,IAAI;QACpC,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,QAAQ,EAAE,CAAC;KACZ,CAAC;IACF,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACnC,2BAA2B;QAC3B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sCAAsC;QACtC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAU;IAChD,KAAK,GAAG,EAAE,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,KAAK,GAAG,cAAc,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IAIvC,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Daemon status utilities
3
+ *
4
+ * Extracted from serve.ts to avoid CLI module dependency for doctor.ts.
5
+ * Provides daemon status information without output formatting.
6
+ *
7
+ * AC: @doctor-command ac-daemon-running, ac-daemon-not-running, ac-daemon-unreachable
8
+ */
9
+ /**
10
+ * Daemon status information
11
+ */
12
+ export interface DaemonStatus {
13
+ /** Whether daemon process is running */
14
+ running: boolean;
15
+ /** Daemon process PID */
16
+ pid: number | null;
17
+ /** Daemon port */
18
+ port: number | null;
19
+ /** Daemon uptime in seconds */
20
+ uptime: number | null;
21
+ /** Whether health endpoint is reachable */
22
+ healthReachable: boolean;
23
+ /** Error message if status check failed */
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Get daemon status information.
28
+ *
29
+ * Checks PID file, verifies process is running, reads port,
30
+ * and probes health endpoint.
31
+ *
32
+ * AC: @doctor-command ac-daemon-running — returns running status with PID/port/uptime
33
+ * AC: @doctor-command ac-daemon-not-running — returns running=false when not running
34
+ * AC: @doctor-command ac-daemon-unreachable — returns healthReachable=false when endpoint unreachable
35
+ */
36
+ export declare function getDaemonStatus(): Promise<DaemonStatus>;
37
+ //# sourceMappingURL=daemon-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-status.d.ts","sourceRoot":"","sources":["../../src/parser/daemon-status.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,kBAAkB;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAoD7D"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Daemon status utilities
3
+ *
4
+ * Extracted from serve.ts to avoid CLI module dependency for doctor.ts.
5
+ * Provides daemon status information without output formatting.
6
+ *
7
+ * AC: @doctor-command ac-daemon-running, ac-daemon-not-running, ac-daemon-unreachable
8
+ */
9
+ import { PidFileManager } from "../cli/pid-utils.js";
10
+ /**
11
+ * Get daemon status information.
12
+ *
13
+ * Checks PID file, verifies process is running, reads port,
14
+ * and probes health endpoint.
15
+ *
16
+ * AC: @doctor-command ac-daemon-running — returns running status with PID/port/uptime
17
+ * AC: @doctor-command ac-daemon-not-running — returns running=false when not running
18
+ * AC: @doctor-command ac-daemon-unreachable — returns healthReachable=false when endpoint unreachable
19
+ */
20
+ export async function getDaemonStatus() {
21
+ const pidManager = new PidFileManager();
22
+ const running = pidManager.isDaemonRunning();
23
+ const pid = pidManager.readPid();
24
+ const status = {
25
+ running,
26
+ pid,
27
+ port: null,
28
+ uptime: null,
29
+ healthReachable: false,
30
+ };
31
+ if (!running) {
32
+ return status;
33
+ }
34
+ // Read port from file
35
+ try {
36
+ status.port = pidManager.readPort();
37
+ }
38
+ catch {
39
+ // Port file might not exist or be invalid
40
+ status.port = null;
41
+ }
42
+ // Probe health endpoint if we have a port
43
+ // AC: @doctor-command ac-daemon-unreachable
44
+ if (status.port) {
45
+ try {
46
+ const controller = new AbortController();
47
+ const timeout = setTimeout(() => controller.abort(), 2000);
48
+ const response = await fetch(`http://localhost:${status.port}/api/health`, {
49
+ signal: controller.signal,
50
+ });
51
+ clearTimeout(timeout);
52
+ if (response.ok) {
53
+ status.healthReachable = true;
54
+ const data = (await response.json());
55
+ if (typeof data.uptime === "number") {
56
+ status.uptime = data.uptime;
57
+ }
58
+ }
59
+ }
60
+ catch {
61
+ // Health endpoint not reachable - daemon may be starting up or port conflict
62
+ status.healthReachable = false;
63
+ }
64
+ }
65
+ return status;
66
+ }
67
+ //# sourceMappingURL=daemon-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-status.js","sourceRoot":"","sources":["../../src/parser/daemon-status.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAoBrD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAiB;QAC3B,OAAO;QACP,GAAG;QACH,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;QAC1C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,0CAA0C;IAC1C,4CAA4C;IAC5C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,aAAa,EAAE;gBACzE,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,OAAO,CAAC,CAAC;YAEtB,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuC,CAAC;gBAC3E,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACpC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6EAA6E;YAC7E,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Doctor command - unified health check for kspec
3
+ *
4
+ * Library layer that aggregates shadow branch, setup, and daemon status
5
+ * into a unified DoctorReport. CLI command is in src/cli/commands/doctor.ts.
6
+ *
7
+ * AC: @doctor-command
8
+ */
9
+ /**
10
+ * Severity levels for health checks
11
+ */
12
+ export type Severity = "ok" | "warning" | "error";
13
+ /**
14
+ * Individual check result with severity
15
+ */
16
+ export interface CheckResult {
17
+ name: string;
18
+ severity: Severity;
19
+ message: string;
20
+ /** Optional guidance for fixing issues */
21
+ guidance?: string;
22
+ }
23
+ /**
24
+ * Shadow branch section of doctor report
25
+ * AC: @doctor-command ac-shadow-healthy
26
+ */
27
+ export interface ShadowSection {
28
+ initialized: boolean;
29
+ checks: CheckResult[];
30
+ }
31
+ /**
32
+ * Setup section of doctor report
33
+ * AC: @doctor-command ac-setup-agent-hooks, ac-setup-skills-agents-md
34
+ */
35
+ export interface SetupSection {
36
+ checks: CheckResult[];
37
+ agentType?: string;
38
+ hooksInstalled?: boolean;
39
+ skillsRendered?: number;
40
+ skillsDrifted?: number;
41
+ agentsMdStatus?: "current" | "stale" | "missing" | "unknown";
42
+ agentsMdGeneratedAt?: string;
43
+ }
44
+ /**
45
+ * Daemon section of doctor report
46
+ * AC: @doctor-command ac-daemon-running, ac-daemon-not-running, ac-daemon-unreachable
47
+ */
48
+ export interface DaemonSection {
49
+ checks: CheckResult[];
50
+ running?: boolean;
51
+ pid?: number | null;
52
+ port?: number | null;
53
+ uptime?: number | null;
54
+ healthReachable?: boolean;
55
+ }
56
+ /**
57
+ * Overall verdict
58
+ * AC: @doctor-command ac-overall-verdict
59
+ */
60
+ export interface OverallVerdict {
61
+ healthy: boolean;
62
+ errorCount: number;
63
+ warningCount: number;
64
+ }
65
+ /**
66
+ * Complete doctor report
67
+ * AC: @doctor-command ac-json-output
68
+ */
69
+ export interface DoctorReport {
70
+ /** Timestamp of report generation (ISO 8601) */
71
+ generatedAt: string;
72
+ /** Shadow branch status */
73
+ shadow: ShadowSection;
74
+ /** Setup status (hooks, skills, agents.md) */
75
+ setup: SetupSection;
76
+ /** Daemon status */
77
+ daemon: DaemonSection;
78
+ /** Overall health verdict */
79
+ overall: OverallVerdict;
80
+ }
81
+ /**
82
+ * Options for doctor report
83
+ */
84
+ export interface DoctorOptions {
85
+ /** Project root directory (defaults to detecting from cwd) */
86
+ projectRoot?: string;
87
+ }
88
+ /**
89
+ * Get a unified health check report for the kspec installation.
90
+ *
91
+ * AC: @doctor-command ac-no-git-repo — returns error if not in git repo
92
+ * AC: @doctor-command ac-not-initialized — returns error if kspec not initialized
93
+ * AC: @doctor-command ac-shadow-healthy — checks shadow branch health
94
+ * AC: @doctor-command ac-setup-agent-hooks — checks hooks status
95
+ * AC: @doctor-command ac-setup-skills-agents-md — checks skills and agents.md
96
+ * AC: @doctor-command ac-daemon-running — checks daemon status
97
+ * AC: @doctor-command ac-daemon-unreachable — detects unreachable health endpoint
98
+ * AC: @doctor-command ac-daemon-not-running — daemon not running is warning
99
+ * AC: @doctor-command ac-overall-verdict — computes healthy/issues verdict
100
+ * AC: @doctor-command ac-partial-init — handles shadow ok but setup missing
101
+ * AC: @doctor-command ac-staleness-unknown — handles unknown staleness
102
+ *
103
+ * @param cwd Current working directory
104
+ * @param options Optional configuration
105
+ */
106
+ export declare function getDoctorReport(cwd: string, options?: DoctorOptions): Promise<DoctorReport>;
107
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/parser/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,8CAA8C;IAC9C,KAAK,EAAE,YAAY,CAAC;IACpB,oBAAoB;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA8FvB"}