@cleocode/cleo 2026.2.5

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 (1524) hide show
  1. package/LICENSE +107 -0
  2. package/README.md +1266 -0
  3. package/completions/bash-completion.sh +362 -0
  4. package/completions/zsh-completion.zsh +305 -0
  5. package/dist/cli/commands/add.d.ts +12 -0
  6. package/dist/cli/commands/add.d.ts.map +1 -0
  7. package/dist/cli/commands/add.js +74 -0
  8. package/dist/cli/commands/add.js.map +1 -0
  9. package/dist/cli/commands/analyze.d.ts +12 -0
  10. package/dist/cli/commands/analyze.d.ts.map +1 -0
  11. package/dist/cli/commands/analyze.js +37 -0
  12. package/dist/cli/commands/analyze.js.map +1 -0
  13. package/dist/cli/commands/archive-stats.d.ts +26 -0
  14. package/dist/cli/commands/archive-stats.d.ts.map +1 -0
  15. package/dist/cli/commands/archive-stats.js +291 -0
  16. package/dist/cli/commands/archive-stats.js.map +1 -0
  17. package/dist/cli/commands/archive.d.ts +12 -0
  18. package/dist/cli/commands/archive.d.ts.map +1 -0
  19. package/dist/cli/commands/archive.js +43 -0
  20. package/dist/cli/commands/archive.js.map +1 -0
  21. package/dist/cli/commands/backup.d.ts +7 -0
  22. package/dist/cli/commands/backup.d.ts.map +1 -0
  23. package/dist/cli/commands/backup.js +122 -0
  24. package/dist/cli/commands/backup.js.map +1 -0
  25. package/dist/cli/commands/blockers.d.ts +7 -0
  26. package/dist/cli/commands/blockers.d.ts.map +1 -0
  27. package/dist/cli/commands/blockers.js +107 -0
  28. package/dist/cli/commands/blockers.js.map +1 -0
  29. package/dist/cli/commands/checkpoint.d.ts +13 -0
  30. package/dist/cli/commands/checkpoint.d.ts.map +1 -0
  31. package/dist/cli/commands/checkpoint.js +185 -0
  32. package/dist/cli/commands/checkpoint.js.map +1 -0
  33. package/dist/cli/commands/claude-migrate.d.ts +13 -0
  34. package/dist/cli/commands/claude-migrate.d.ts.map +1 -0
  35. package/dist/cli/commands/claude-migrate.js +355 -0
  36. package/dist/cli/commands/claude-migrate.js.map +1 -0
  37. package/dist/cli/commands/commands.d.ts +13 -0
  38. package/dist/cli/commands/commands.d.ts.map +1 -0
  39. package/dist/cli/commands/commands.js +114 -0
  40. package/dist/cli/commands/commands.js.map +1 -0
  41. package/dist/cli/commands/complete.d.ts +12 -0
  42. package/dist/cli/commands/complete.d.ts.map +1 -0
  43. package/dist/cli/commands/complete.js +45 -0
  44. package/dist/cli/commands/complete.js.map +1 -0
  45. package/dist/cli/commands/compliance.d.ts +12 -0
  46. package/dist/cli/commands/compliance.d.ts.map +1 -0
  47. package/dist/cli/commands/compliance.js +152 -0
  48. package/dist/cli/commands/compliance.js.map +1 -0
  49. package/dist/cli/commands/config.d.ts +7 -0
  50. package/dist/cli/commands/config.d.ts.map +1 -0
  51. package/dist/cli/commands/config.js +107 -0
  52. package/dist/cli/commands/config.js.map +1 -0
  53. package/dist/cli/commands/consensus.d.ts +12 -0
  54. package/dist/cli/commands/consensus.d.ts.map +1 -0
  55. package/dist/cli/commands/consensus.js +61 -0
  56. package/dist/cli/commands/consensus.js.map +1 -0
  57. package/dist/cli/commands/context.d.ts +12 -0
  58. package/dist/cli/commands/context.d.ts.map +1 -0
  59. package/dist/cli/commands/context.js +76 -0
  60. package/dist/cli/commands/context.js.map +1 -0
  61. package/dist/cli/commands/contribution.d.ts +12 -0
  62. package/dist/cli/commands/contribution.d.ts.map +1 -0
  63. package/dist/cli/commands/contribution.js +57 -0
  64. package/dist/cli/commands/contribution.js.map +1 -0
  65. package/dist/cli/commands/current.d.ts +13 -0
  66. package/dist/cli/commands/current.d.ts.map +1 -0
  67. package/dist/cli/commands/current.js +35 -0
  68. package/dist/cli/commands/current.js.map +1 -0
  69. package/dist/cli/commands/dash.d.ts +12 -0
  70. package/dist/cli/commands/dash.d.ts.map +1 -0
  71. package/dist/cli/commands/dash.js +44 -0
  72. package/dist/cli/commands/dash.js.map +1 -0
  73. package/dist/cli/commands/decomposition.d.ts +12 -0
  74. package/dist/cli/commands/decomposition.d.ts.map +1 -0
  75. package/dist/cli/commands/decomposition.js +61 -0
  76. package/dist/cli/commands/decomposition.js.map +1 -0
  77. package/dist/cli/commands/delete.d.ts +12 -0
  78. package/dist/cli/commands/delete.d.ts.map +1 -0
  79. package/dist/cli/commands/delete.js +45 -0
  80. package/dist/cli/commands/delete.js.map +1 -0
  81. package/dist/cli/commands/deps.d.ts +17 -0
  82. package/dist/cli/commands/deps.d.ts.map +1 -0
  83. package/dist/cli/commands/deps.js +139 -0
  84. package/dist/cli/commands/deps.js.map +1 -0
  85. package/dist/cli/commands/detect-drift.d.ts +8 -0
  86. package/dist/cli/commands/detect-drift.d.ts.map +1 -0
  87. package/dist/cli/commands/detect-drift.js +202 -0
  88. package/dist/cli/commands/detect-drift.js.map +1 -0
  89. package/dist/cli/commands/docs.d.ts +13 -0
  90. package/dist/cli/commands/docs.d.ts.map +1 -0
  91. package/dist/cli/commands/docs.js +167 -0
  92. package/dist/cli/commands/docs.js.map +1 -0
  93. package/dist/cli/commands/doctor.d.ts +7 -0
  94. package/dist/cli/commands/doctor.d.ts.map +1 -0
  95. package/dist/cli/commands/doctor.js +215 -0
  96. package/dist/cli/commands/doctor.js.map +1 -0
  97. package/dist/cli/commands/env.d.ts +12 -0
  98. package/dist/cli/commands/env.d.ts.map +1 -0
  99. package/dist/cli/commands/env.js +167 -0
  100. package/dist/cli/commands/env.js.map +1 -0
  101. package/dist/cli/commands/exists.d.ts +7 -0
  102. package/dist/cli/commands/exists.d.ts.map +1 -0
  103. package/dist/cli/commands/exists.js +78 -0
  104. package/dist/cli/commands/exists.js.map +1 -0
  105. package/dist/cli/commands/export-tasks.d.ts +13 -0
  106. package/dist/cli/commands/export-tasks.d.ts.map +1 -0
  107. package/dist/cli/commands/export-tasks.js +214 -0
  108. package/dist/cli/commands/export-tasks.js.map +1 -0
  109. package/dist/cli/commands/export.d.ts +7 -0
  110. package/dist/cli/commands/export.d.ts.map +1 -0
  111. package/dist/cli/commands/export.js +144 -0
  112. package/dist/cli/commands/export.js.map +1 -0
  113. package/dist/cli/commands/extract.d.ts +13 -0
  114. package/dist/cli/commands/extract.d.ts.map +1 -0
  115. package/dist/cli/commands/extract.js +208 -0
  116. package/dist/cli/commands/extract.js.map +1 -0
  117. package/dist/cli/commands/find.d.ts +14 -0
  118. package/dist/cli/commands/find.d.ts.map +1 -0
  119. package/dist/cli/commands/find.js +62 -0
  120. package/dist/cli/commands/find.js.map +1 -0
  121. package/dist/cli/commands/focus.d.ts +19 -0
  122. package/dist/cli/commands/focus.d.ts.map +1 -0
  123. package/dist/cli/commands/focus.js +95 -0
  124. package/dist/cli/commands/focus.js.map +1 -0
  125. package/dist/cli/commands/generate-changelog.d.ts +14 -0
  126. package/dist/cli/commands/generate-changelog.d.ts.map +1 -0
  127. package/dist/cli/commands/generate-changelog.js +252 -0
  128. package/dist/cli/commands/generate-changelog.js.map +1 -0
  129. package/dist/cli/commands/history.d.ts +12 -0
  130. package/dist/cli/commands/history.d.ts.map +1 -0
  131. package/dist/cli/commands/history.js +40 -0
  132. package/dist/cli/commands/history.js.map +1 -0
  133. package/dist/cli/commands/implementation.d.ts +12 -0
  134. package/dist/cli/commands/implementation.d.ts.map +1 -0
  135. package/dist/cli/commands/implementation.js +57 -0
  136. package/dist/cli/commands/implementation.js.map +1 -0
  137. package/dist/cli/commands/import-tasks.d.ts +13 -0
  138. package/dist/cli/commands/import-tasks.d.ts.map +1 -0
  139. package/dist/cli/commands/import-tasks.js +219 -0
  140. package/dist/cli/commands/import-tasks.js.map +1 -0
  141. package/dist/cli/commands/import.d.ts +7 -0
  142. package/dist/cli/commands/import.d.ts.map +1 -0
  143. package/dist/cli/commands/import.js +162 -0
  144. package/dist/cli/commands/import.js.map +1 -0
  145. package/dist/cli/commands/init.d.ts +34 -0
  146. package/dist/cli/commands/init.d.ts.map +1 -0
  147. package/dist/cli/commands/init.js +88 -0
  148. package/dist/cli/commands/init.js.map +1 -0
  149. package/dist/cli/commands/inject.d.ts +12 -0
  150. package/dist/cli/commands/inject.d.ts.map +1 -0
  151. package/dist/cli/commands/inject.js +45 -0
  152. package/dist/cli/commands/inject.js.map +1 -0
  153. package/dist/cli/commands/issue.d.ts +14 -0
  154. package/dist/cli/commands/issue.d.ts.map +1 -0
  155. package/dist/cli/commands/issue.js +256 -0
  156. package/dist/cli/commands/issue.js.map +1 -0
  157. package/dist/cli/commands/labels.d.ts +12 -0
  158. package/dist/cli/commands/labels.d.ts.map +1 -0
  159. package/dist/cli/commands/labels.js +89 -0
  160. package/dist/cli/commands/labels.js.map +1 -0
  161. package/dist/cli/commands/lifecycle.d.ts +12 -0
  162. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  163. package/dist/cli/commands/lifecycle.js +108 -0
  164. package/dist/cli/commands/lifecycle.js.map +1 -0
  165. package/dist/cli/commands/list.d.ts +14 -0
  166. package/dist/cli/commands/list.d.ts.map +1 -0
  167. package/dist/cli/commands/list.js +65 -0
  168. package/dist/cli/commands/list.js.map +1 -0
  169. package/dist/cli/commands/log.d.ts +12 -0
  170. package/dist/cli/commands/log.d.ts.map +1 -0
  171. package/dist/cli/commands/log.js +43 -0
  172. package/dist/cli/commands/log.js.map +1 -0
  173. package/dist/cli/commands/mcp-install.d.ts +17 -0
  174. package/dist/cli/commands/mcp-install.d.ts.map +1 -0
  175. package/dist/cli/commands/mcp-install.js +125 -0
  176. package/dist/cli/commands/mcp-install.js.map +1 -0
  177. package/dist/cli/commands/migrate-storage.d.ts +19 -0
  178. package/dist/cli/commands/migrate-storage.d.ts.map +1 -0
  179. package/dist/cli/commands/migrate-storage.js +494 -0
  180. package/dist/cli/commands/migrate-storage.js.map +1 -0
  181. package/dist/cli/commands/migrate.d.ts +12 -0
  182. package/dist/cli/commands/migrate.d.ts.map +1 -0
  183. package/dist/cli/commands/migrate.js +62 -0
  184. package/dist/cli/commands/migrate.js.map +1 -0
  185. package/dist/cli/commands/next.d.ts +7 -0
  186. package/dist/cli/commands/next.d.ts.map +1 -0
  187. package/dist/cli/commands/next.js +124 -0
  188. package/dist/cli/commands/next.js.map +1 -0
  189. package/dist/cli/commands/nexus.d.ts +19 -0
  190. package/dist/cli/commands/nexus.d.ts.map +1 -0
  191. package/dist/cli/commands/nexus.js +440 -0
  192. package/dist/cli/commands/nexus.js.map +1 -0
  193. package/dist/cli/commands/orchestrate.d.ts +12 -0
  194. package/dist/cli/commands/orchestrate.d.ts.map +1 -0
  195. package/dist/cli/commands/orchestrate.js +141 -0
  196. package/dist/cli/commands/orchestrate.js.map +1 -0
  197. package/dist/cli/commands/otel.d.ts +12 -0
  198. package/dist/cli/commands/otel.d.ts.map +1 -0
  199. package/dist/cli/commands/otel.js +130 -0
  200. package/dist/cli/commands/otel.js.map +1 -0
  201. package/dist/cli/commands/phase.d.ts +12 -0
  202. package/dist/cli/commands/phase.d.ts.map +1 -0
  203. package/dist/cli/commands/phase.js +161 -0
  204. package/dist/cli/commands/phase.js.map +1 -0
  205. package/dist/cli/commands/phases.d.ts +12 -0
  206. package/dist/cli/commands/phases.d.ts.map +1 -0
  207. package/dist/cli/commands/phases.js +67 -0
  208. package/dist/cli/commands/phases.js.map +1 -0
  209. package/dist/cli/commands/promote.d.ts +7 -0
  210. package/dist/cli/commands/promote.d.ts.map +1 -0
  211. package/dist/cli/commands/promote.js +64 -0
  212. package/dist/cli/commands/promote.js.map +1 -0
  213. package/dist/cli/commands/relates.d.ts +12 -0
  214. package/dist/cli/commands/relates.d.ts.map +1 -0
  215. package/dist/cli/commands/relates.js +91 -0
  216. package/dist/cli/commands/relates.js.map +1 -0
  217. package/dist/cli/commands/release.d.ts +12 -0
  218. package/dist/cli/commands/release.d.ts.map +1 -0
  219. package/dist/cli/commands/release.js +142 -0
  220. package/dist/cli/commands/release.js.map +1 -0
  221. package/dist/cli/commands/reopen.d.ts +7 -0
  222. package/dist/cli/commands/reopen.d.ts.map +1 -0
  223. package/dist/cli/commands/reopen.js +83 -0
  224. package/dist/cli/commands/reopen.js.map +1 -0
  225. package/dist/cli/commands/reorder.d.ts +7 -0
  226. package/dist/cli/commands/reorder.d.ts.map +1 -0
  227. package/dist/cli/commands/reorder.js +106 -0
  228. package/dist/cli/commands/reorder.js.map +1 -0
  229. package/dist/cli/commands/reparent.d.ts +10 -0
  230. package/dist/cli/commands/reparent.d.ts.map +1 -0
  231. package/dist/cli/commands/reparent.js +53 -0
  232. package/dist/cli/commands/reparent.js.map +1 -0
  233. package/dist/cli/commands/research.d.ts +12 -0
  234. package/dist/cli/commands/research.d.ts.map +1 -0
  235. package/dist/cli/commands/research.js +220 -0
  236. package/dist/cli/commands/research.js.map +1 -0
  237. package/dist/cli/commands/restore.d.ts +7 -0
  238. package/dist/cli/commands/restore.d.ts.map +1 -0
  239. package/dist/cli/commands/restore.js +202 -0
  240. package/dist/cli/commands/restore.js.map +1 -0
  241. package/dist/cli/commands/roadmap.d.ts +12 -0
  242. package/dist/cli/commands/roadmap.d.ts.map +1 -0
  243. package/dist/cli/commands/roadmap.js +37 -0
  244. package/dist/cli/commands/roadmap.js.map +1 -0
  245. package/dist/cli/commands/safestop.d.ts +13 -0
  246. package/dist/cli/commands/safestop.d.ts.map +1 -0
  247. package/dist/cli/commands/safestop.js +217 -0
  248. package/dist/cli/commands/safestop.js.map +1 -0
  249. package/dist/cli/commands/self-update.d.ts +15 -0
  250. package/dist/cli/commands/self-update.d.ts.map +1 -0
  251. package/dist/cli/commands/self-update.js +195 -0
  252. package/dist/cli/commands/self-update.js.map +1 -0
  253. package/dist/cli/commands/sequence.d.ts +12 -0
  254. package/dist/cli/commands/sequence.d.ts.map +1 -0
  255. package/dist/cli/commands/sequence.js +67 -0
  256. package/dist/cli/commands/sequence.js.map +1 -0
  257. package/dist/cli/commands/session.d.ts +12 -0
  258. package/dist/cli/commands/session.d.ts.map +1 -0
  259. package/dist/cli/commands/session.js +150 -0
  260. package/dist/cli/commands/session.js.map +1 -0
  261. package/dist/cli/commands/show.d.ts +13 -0
  262. package/dist/cli/commands/show.d.ts.map +1 -0
  263. package/dist/cli/commands/show.js +35 -0
  264. package/dist/cli/commands/show.js.map +1 -0
  265. package/dist/cli/commands/skills.d.ts +13 -0
  266. package/dist/cli/commands/skills.d.ts.map +1 -0
  267. package/dist/cli/commands/skills.js +215 -0
  268. package/dist/cli/commands/skills.js.map +1 -0
  269. package/dist/cli/commands/specification.d.ts +12 -0
  270. package/dist/cli/commands/specification.d.ts.map +1 -0
  271. package/dist/cli/commands/specification.js +61 -0
  272. package/dist/cli/commands/specification.js.map +1 -0
  273. package/dist/cli/commands/start.d.ts +13 -0
  274. package/dist/cli/commands/start.d.ts.map +1 -0
  275. package/dist/cli/commands/start.js +35 -0
  276. package/dist/cli/commands/start.js.map +1 -0
  277. package/dist/cli/commands/stats.d.ts +12 -0
  278. package/dist/cli/commands/stats.d.ts.map +1 -0
  279. package/dist/cli/commands/stats.js +37 -0
  280. package/dist/cli/commands/stats.js.map +1 -0
  281. package/dist/cli/commands/stop.d.ts +13 -0
  282. package/dist/cli/commands/stop.d.ts.map +1 -0
  283. package/dist/cli/commands/stop.js +35 -0
  284. package/dist/cli/commands/stop.js.map +1 -0
  285. package/dist/cli/commands/sync.d.ts +13 -0
  286. package/dist/cli/commands/sync.d.ts.map +1 -0
  287. package/dist/cli/commands/sync.js +129 -0
  288. package/dist/cli/commands/sync.js.map +1 -0
  289. package/dist/cli/commands/testing.d.ts +13 -0
  290. package/dist/cli/commands/testing.d.ts.map +1 -0
  291. package/dist/cli/commands/testing.js +160 -0
  292. package/dist/cli/commands/testing.js.map +1 -0
  293. package/dist/cli/commands/unarchive.d.ts +7 -0
  294. package/dist/cli/commands/unarchive.d.ts.map +1 -0
  295. package/dist/cli/commands/unarchive.js +93 -0
  296. package/dist/cli/commands/unarchive.js.map +1 -0
  297. package/dist/cli/commands/uncancel.d.ts +7 -0
  298. package/dist/cli/commands/uncancel.d.ts.map +1 -0
  299. package/dist/cli/commands/uncancel.js +93 -0
  300. package/dist/cli/commands/uncancel.js.map +1 -0
  301. package/dist/cli/commands/update.d.ts +12 -0
  302. package/dist/cli/commands/update.d.ts.map +1 -0
  303. package/dist/cli/commands/update.js +74 -0
  304. package/dist/cli/commands/update.js.map +1 -0
  305. package/dist/cli/commands/upgrade.d.ts +15 -0
  306. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  307. package/dist/cli/commands/upgrade.js +59 -0
  308. package/dist/cli/commands/upgrade.js.map +1 -0
  309. package/dist/cli/commands/validate.d.ts +9 -0
  310. package/dist/cli/commands/validate.d.ts.map +1 -0
  311. package/dist/cli/commands/validate.js +211 -0
  312. package/dist/cli/commands/validate.js.map +1 -0
  313. package/dist/cli/commands/verify.d.ts +7 -0
  314. package/dist/cli/commands/verify.d.ts.map +1 -0
  315. package/dist/cli/commands/verify.js +153 -0
  316. package/dist/cli/commands/verify.js.map +1 -0
  317. package/dist/cli/commands/web.d.ts +13 -0
  318. package/dist/cli/commands/web.d.ts.map +1 -0
  319. package/dist/cli/commands/web.js +281 -0
  320. package/dist/cli/commands/web.js.map +1 -0
  321. package/dist/cli/format-context.d.ts +32 -0
  322. package/dist/cli/format-context.d.ts.map +1 -0
  323. package/dist/cli/format-context.js +50 -0
  324. package/dist/cli/format-context.js.map +1 -0
  325. package/dist/cli/index.d.ts +7 -0
  326. package/dist/cli/index.d.ts.map +1 -0
  327. package/dist/cli/index.js +34903 -0
  328. package/dist/cli/index.js.map +7 -0
  329. package/dist/cli/middleware/output-format.d.ts +30 -0
  330. package/dist/cli/middleware/output-format.d.ts.map +1 -0
  331. package/dist/cli/middleware/output-format.js +35 -0
  332. package/dist/cli/middleware/output-format.js.map +1 -0
  333. package/dist/cli/renderers/colors.d.ts +41 -0
  334. package/dist/cli/renderers/colors.d.ts.map +1 -0
  335. package/dist/cli/renderers/colors.js +120 -0
  336. package/dist/cli/renderers/colors.js.map +1 -0
  337. package/dist/cli/renderers/index.d.ts +47 -0
  338. package/dist/cli/renderers/index.d.ts.map +1 -0
  339. package/dist/cli/renderers/index.js +103 -0
  340. package/dist/cli/renderers/index.js.map +1 -0
  341. package/dist/cli/renderers/system.d.ts +24 -0
  342. package/dist/cli/renderers/system.d.ts.map +1 -0
  343. package/dist/cli/renderers/system.js +317 -0
  344. package/dist/cli/renderers/system.js.map +1 -0
  345. package/dist/cli/renderers/tasks.d.ts +28 -0
  346. package/dist/cli/renderers/tasks.d.ts.map +1 -0
  347. package/dist/cli/renderers/tasks.js +307 -0
  348. package/dist/cli/renderers/tasks.js.map +1 -0
  349. package/dist/core/caamp/adapter.d.ts +141 -0
  350. package/dist/core/caamp/adapter.d.ts.map +1 -0
  351. package/dist/core/caamp/adapter.js +437 -0
  352. package/dist/core/caamp/adapter.js.map +1 -0
  353. package/dist/core/caamp/index.d.ts +11 -0
  354. package/dist/core/caamp/index.d.ts.map +1 -0
  355. package/dist/core/caamp/index.js +21 -0
  356. package/dist/core/caamp/index.js.map +1 -0
  357. package/dist/core/compliance/index.d.ts +38 -0
  358. package/dist/core/compliance/index.d.ts.map +1 -0
  359. package/dist/core/compliance/index.js +229 -0
  360. package/dist/core/compliance/index.js.map +1 -0
  361. package/dist/core/config.d.ts +20 -0
  362. package/dist/core/config.d.ts.map +1 -0
  363. package/dist/core/config.js +179 -0
  364. package/dist/core/config.js.map +1 -0
  365. package/dist/core/context/index.d.ts +20 -0
  366. package/dist/core/context/index.d.ts.map +1 -0
  367. package/dist/core/context/index.js +137 -0
  368. package/dist/core/context/index.js.map +1 -0
  369. package/dist/core/error-registry.d.ts +54 -0
  370. package/dist/core/error-registry.d.ts.map +1 -0
  371. package/dist/core/error-registry.js +109 -0
  372. package/dist/core/error-registry.js.map +1 -0
  373. package/dist/core/errors.d.ts +38 -0
  374. package/dist/core/errors.d.ts.map +1 -0
  375. package/dist/core/errors.js +105 -0
  376. package/dist/core/errors.js.map +1 -0
  377. package/dist/core/focus/index.d.ts +46 -0
  378. package/dist/core/focus/index.d.ts.map +1 -0
  379. package/dist/core/focus/index.js +118 -0
  380. package/dist/core/focus/index.js.map +1 -0
  381. package/dist/core/index.d.ts +14 -0
  382. package/dist/core/index.d.ts.map +1 -0
  383. package/dist/core/index.js +12 -0
  384. package/dist/core/index.js.map +1 -0
  385. package/dist/core/init.d.ts +76 -0
  386. package/dist/core/init.d.ts.map +1 -0
  387. package/dist/core/init.js +730 -0
  388. package/dist/core/init.js.map +1 -0
  389. package/dist/core/inject/index.d.ts +24 -0
  390. package/dist/core/inject/index.d.ts.map +1 -0
  391. package/dist/core/inject/index.js +84 -0
  392. package/dist/core/inject/index.js.map +1 -0
  393. package/dist/core/issue/index.d.ts +9 -0
  394. package/dist/core/issue/index.d.ts.map +1 -0
  395. package/dist/core/issue/index.js +8 -0
  396. package/dist/core/issue/index.js.map +1 -0
  397. package/dist/core/issue/template-parser.d.ts +45 -0
  398. package/dist/core/issue/template-parser.d.ts.map +1 -0
  399. package/dist/core/issue/template-parser.js +178 -0
  400. package/dist/core/issue/template-parser.js.map +1 -0
  401. package/dist/core/lifecycle/index.d.ts +71 -0
  402. package/dist/core/lifecycle/index.d.ts.map +1 -0
  403. package/dist/core/lifecycle/index.js +213 -0
  404. package/dist/core/lifecycle/index.js.map +1 -0
  405. package/dist/core/log/index.d.ts +15 -0
  406. package/dist/core/log/index.d.ts.map +1 -0
  407. package/dist/core/log/index.js +33 -0
  408. package/dist/core/log/index.js.map +1 -0
  409. package/dist/core/mcp/index.d.ts +37 -0
  410. package/dist/core/mcp/index.d.ts.map +1 -0
  411. package/dist/core/mcp/index.js +73 -0
  412. package/dist/core/mcp/index.js.map +1 -0
  413. package/dist/core/metrics/ab-test.d.ts +52 -0
  414. package/dist/core/metrics/ab-test.d.ts.map +1 -0
  415. package/dist/core/metrics/ab-test.js +261 -0
  416. package/dist/core/metrics/ab-test.js.map +1 -0
  417. package/dist/core/metrics/aggregation.d.ts +41 -0
  418. package/dist/core/metrics/aggregation.d.ts.map +1 -0
  419. package/dist/core/metrics/aggregation.js +353 -0
  420. package/dist/core/metrics/aggregation.js.map +1 -0
  421. package/dist/core/metrics/common.d.ts +30 -0
  422. package/dist/core/metrics/common.d.ts.map +1 -0
  423. package/dist/core/metrics/common.js +64 -0
  424. package/dist/core/metrics/common.js.map +1 -0
  425. package/dist/core/metrics/enums.d.ts +68 -0
  426. package/dist/core/metrics/enums.d.ts.map +1 -0
  427. package/dist/core/metrics/enums.js +78 -0
  428. package/dist/core/metrics/enums.js.map +1 -0
  429. package/dist/core/metrics/index.d.ts +17 -0
  430. package/dist/core/metrics/index.d.ts.map +1 -0
  431. package/dist/core/metrics/index.js +19 -0
  432. package/dist/core/metrics/index.js.map +1 -0
  433. package/dist/core/metrics/otel-integration.d.ts +49 -0
  434. package/dist/core/metrics/otel-integration.d.ts.map +1 -0
  435. package/dist/core/metrics/otel-integration.js +261 -0
  436. package/dist/core/metrics/otel-integration.js.map +1 -0
  437. package/dist/core/metrics/token-estimation.d.ts +70 -0
  438. package/dist/core/metrics/token-estimation.d.ts.map +1 -0
  439. package/dist/core/metrics/token-estimation.js +253 -0
  440. package/dist/core/metrics/token-estimation.js.map +1 -0
  441. package/dist/core/migration/checksum.d.ts +55 -0
  442. package/dist/core/migration/checksum.d.ts.map +1 -0
  443. package/dist/core/migration/checksum.js +90 -0
  444. package/dist/core/migration/checksum.js.map +1 -0
  445. package/dist/core/migration/index.d.ts +77 -0
  446. package/dist/core/migration/index.d.ts.map +1 -0
  447. package/dist/core/migration/index.js +278 -0
  448. package/dist/core/migration/index.js.map +1 -0
  449. package/dist/core/migration/logger.d.ts +161 -0
  450. package/dist/core/migration/logger.d.ts.map +1 -0
  451. package/dist/core/migration/logger.js +364 -0
  452. package/dist/core/migration/logger.js.map +1 -0
  453. package/dist/core/migration/preflight.d.ts +43 -0
  454. package/dist/core/migration/preflight.d.ts.map +1 -0
  455. package/dist/core/migration/preflight.js +164 -0
  456. package/dist/core/migration/preflight.js.map +1 -0
  457. package/dist/core/migration/state.d.ts +186 -0
  458. package/dist/core/migration/state.d.ts.map +1 -0
  459. package/dist/core/migration/state.js +419 -0
  460. package/dist/core/migration/state.js.map +1 -0
  461. package/dist/core/migration/validate.d.ts +57 -0
  462. package/dist/core/migration/validate.d.ts.map +1 -0
  463. package/dist/core/migration/validate.js +242 -0
  464. package/dist/core/migration/validate.js.map +1 -0
  465. package/dist/core/nexus/deps.d.ts +112 -0
  466. package/dist/core/nexus/deps.d.ts.map +1 -0
  467. package/dist/core/nexus/deps.js +394 -0
  468. package/dist/core/nexus/deps.js.map +1 -0
  469. package/dist/core/nexus/index.d.ts +14 -0
  470. package/dist/core/nexus/index.d.ts.map +1 -0
  471. package/dist/core/nexus/index.js +36 -0
  472. package/dist/core/nexus/index.js.map +1 -0
  473. package/dist/core/nexus/permissions.d.ts +75 -0
  474. package/dist/core/nexus/permissions.d.ts.map +1 -0
  475. package/dist/core/nexus/permissions.js +126 -0
  476. package/dist/core/nexus/permissions.js.map +1 -0
  477. package/dist/core/nexus/query.d.ts +55 -0
  478. package/dist/core/nexus/query.d.ts.map +1 -0
  479. package/dist/core/nexus/query.js +181 -0
  480. package/dist/core/nexus/query.js.map +1 -0
  481. package/dist/core/nexus/registry.d.ts +135 -0
  482. package/dist/core/nexus/registry.d.ts.map +1 -0
  483. package/dist/core/nexus/registry.js +296 -0
  484. package/dist/core/nexus/registry.js.map +1 -0
  485. package/dist/core/orchestration/index.d.ts +114 -0
  486. package/dist/core/orchestration/index.d.ts.map +1 -0
  487. package/dist/core/orchestration/index.js +295 -0
  488. package/dist/core/orchestration/index.js.map +1 -0
  489. package/dist/core/orchestration/protocol-validators.d.ts +94 -0
  490. package/dist/core/orchestration/protocol-validators.d.ts.map +1 -0
  491. package/dist/core/orchestration/protocol-validators.js +510 -0
  492. package/dist/core/orchestration/protocol-validators.js.map +1 -0
  493. package/dist/core/otel/index.d.ts +27 -0
  494. package/dist/core/otel/index.d.ts.map +1 -0
  495. package/dist/core/otel/index.js +126 -0
  496. package/dist/core/otel/index.js.map +1 -0
  497. package/dist/core/output.d.ts +64 -0
  498. package/dist/core/output.d.ts.map +1 -0
  499. package/dist/core/output.js +134 -0
  500. package/dist/core/output.js.map +1 -0
  501. package/dist/core/pagination.d.ts +45 -0
  502. package/dist/core/pagination.d.ts.map +1 -0
  503. package/dist/core/pagination.js +61 -0
  504. package/dist/core/pagination.js.map +1 -0
  505. package/dist/core/paths.d.ts +122 -0
  506. package/dist/core/paths.d.ts.map +1 -0
  507. package/dist/core/paths.js +269 -0
  508. package/dist/core/paths.js.map +1 -0
  509. package/dist/core/phases/deps.d.ts +142 -0
  510. package/dist/core/phases/deps.d.ts.map +1 -0
  511. package/dist/core/phases/deps.js +390 -0
  512. package/dist/core/phases/deps.js.map +1 -0
  513. package/dist/core/phases/index.d.ts +123 -0
  514. package/dist/core/phases/index.d.ts.map +1 -0
  515. package/dist/core/phases/index.js +409 -0
  516. package/dist/core/phases/index.js.map +1 -0
  517. package/dist/core/platform.d.ts +55 -0
  518. package/dist/core/platform.d.ts.map +1 -0
  519. package/dist/core/platform.js +117 -0
  520. package/dist/core/platform.js.map +1 -0
  521. package/dist/core/release/artifacts.d.ts +71 -0
  522. package/dist/core/release/artifacts.d.ts.map +1 -0
  523. package/dist/core/release/artifacts.js +412 -0
  524. package/dist/core/release/artifacts.js.map +1 -0
  525. package/dist/core/release/ci.d.ts +35 -0
  526. package/dist/core/release/ci.d.ts.map +1 -0
  527. package/dist/core/release/ci.js +162 -0
  528. package/dist/core/release/ci.js.map +1 -0
  529. package/dist/core/release/guards.d.ts +47 -0
  530. package/dist/core/release/guards.d.ts.map +1 -0
  531. package/dist/core/release/guards.js +110 -0
  532. package/dist/core/release/guards.js.map +1 -0
  533. package/dist/core/release/index.d.ts +97 -0
  534. package/dist/core/release/index.d.ts.map +1 -0
  535. package/dist/core/release/index.js +459 -0
  536. package/dist/core/release/index.js.map +1 -0
  537. package/dist/core/release/provenance.d.ts +75 -0
  538. package/dist/core/release/provenance.d.ts.map +1 -0
  539. package/dist/core/release/provenance.js +213 -0
  540. package/dist/core/release/provenance.js.map +1 -0
  541. package/dist/core/release/release-config.d.ts +55 -0
  542. package/dist/core/release/release-config.d.ts.map +1 -0
  543. package/dist/core/release/release-config.js +105 -0
  544. package/dist/core/release/release-config.js.map +1 -0
  545. package/dist/core/release/version-bump.d.ts +51 -0
  546. package/dist/core/release/version-bump.d.ts.map +1 -0
  547. package/dist/core/release/version-bump.js +251 -0
  548. package/dist/core/release/version-bump.js.map +1 -0
  549. package/dist/core/research/index.d.ts +129 -0
  550. package/dist/core/research/index.d.ts.map +1 -0
  551. package/dist/core/research/index.js +251 -0
  552. package/dist/core/research/index.js.map +1 -0
  553. package/dist/core/roadmap/index.d.ts +13 -0
  554. package/dist/core/roadmap/index.d.ts.map +1 -0
  555. package/dist/core/roadmap/index.js +63 -0
  556. package/dist/core/roadmap/index.js.map +1 -0
  557. package/dist/core/schema.d.ts +20 -0
  558. package/dist/core/schema.d.ts.map +1 -0
  559. package/dist/core/schema.js +75 -0
  560. package/dist/core/schema.js.map +1 -0
  561. package/dist/core/sequence/index.d.ts +21 -0
  562. package/dist/core/sequence/index.d.ts.map +1 -0
  563. package/dist/core/sequence/index.js +108 -0
  564. package/dist/core/sequence/index.js.map +1 -0
  565. package/dist/core/sessions/context-alert.d.ts +48 -0
  566. package/dist/core/sessions/context-alert.d.ts.map +1 -0
  567. package/dist/core/sessions/context-alert.js +222 -0
  568. package/dist/core/sessions/context-alert.js.map +1 -0
  569. package/dist/core/sessions/context-monitor.d.ts +31 -0
  570. package/dist/core/sessions/context-monitor.d.ts.map +1 -0
  571. package/dist/core/sessions/context-monitor.js +83 -0
  572. package/dist/core/sessions/context-monitor.js.map +1 -0
  573. package/dist/core/sessions/hitl-warnings.d.ts +58 -0
  574. package/dist/core/sessions/hitl-warnings.d.ts.map +1 -0
  575. package/dist/core/sessions/hitl-warnings.js +253 -0
  576. package/dist/core/sessions/hitl-warnings.js.map +1 -0
  577. package/dist/core/sessions/index.d.ts +65 -0
  578. package/dist/core/sessions/index.d.ts.map +1 -0
  579. package/dist/core/sessions/index.js +244 -0
  580. package/dist/core/sessions/index.js.map +1 -0
  581. package/dist/core/sessions/session-enforcement.d.ts +50 -0
  582. package/dist/core/sessions/session-enforcement.d.ts.map +1 -0
  583. package/dist/core/sessions/session-enforcement.js +139 -0
  584. package/dist/core/sessions/session-enforcement.js.map +1 -0
  585. package/dist/core/sessions/session-migration.d.ts +31 -0
  586. package/dist/core/sessions/session-migration.d.ts.map +1 -0
  587. package/dist/core/sessions/session-migration.js +122 -0
  588. package/dist/core/sessions/session-migration.js.map +1 -0
  589. package/dist/core/sessions/statusline-setup.d.ts +24 -0
  590. package/dist/core/sessions/statusline-setup.d.ts.map +1 -0
  591. package/dist/core/sessions/statusline-setup.js +82 -0
  592. package/dist/core/sessions/statusline-setup.js.map +1 -0
  593. package/dist/core/skills/agents/config.d.ts +39 -0
  594. package/dist/core/skills/agents/config.d.ts.map +1 -0
  595. package/dist/core/skills/agents/config.js +94 -0
  596. package/dist/core/skills/agents/config.js.map +1 -0
  597. package/dist/core/skills/agents/install.d.ts +33 -0
  598. package/dist/core/skills/agents/install.d.ts.map +1 -0
  599. package/dist/core/skills/agents/install.js +105 -0
  600. package/dist/core/skills/agents/install.js.map +1 -0
  601. package/dist/core/skills/agents/registry.d.ts +56 -0
  602. package/dist/core/skills/agents/registry.d.ts.map +1 -0
  603. package/dist/core/skills/agents/registry.js +161 -0
  604. package/dist/core/skills/agents/registry.js.map +1 -0
  605. package/dist/core/skills/discovery.d.ts +102 -0
  606. package/dist/core/skills/discovery.d.ts.map +1 -0
  607. package/dist/core/skills/discovery.js +331 -0
  608. package/dist/core/skills/discovery.js.map +1 -0
  609. package/dist/core/skills/dispatch.d.ts +67 -0
  610. package/dist/core/skills/dispatch.d.ts.map +1 -0
  611. package/dist/core/skills/dispatch.js +327 -0
  612. package/dist/core/skills/dispatch.js.map +1 -0
  613. package/dist/core/skills/index.d.ts +39 -0
  614. package/dist/core/skills/index.d.ts.map +1 -0
  615. package/dist/core/skills/index.js +44 -0
  616. package/dist/core/skills/index.js.map +1 -0
  617. package/dist/core/skills/injection/subagent.d.ts +47 -0
  618. package/dist/core/skills/injection/subagent.d.ts.map +1 -0
  619. package/dist/core/skills/injection/subagent.js +143 -0
  620. package/dist/core/skills/injection/subagent.js.map +1 -0
  621. package/dist/core/skills/injection/token.d.ts +121 -0
  622. package/dist/core/skills/injection/token.d.ts.map +1 -0
  623. package/dist/core/skills/injection/token.js +255 -0
  624. package/dist/core/skills/injection/token.js.map +1 -0
  625. package/dist/core/skills/install.d.ts +42 -0
  626. package/dist/core/skills/install.d.ts.map +1 -0
  627. package/dist/core/skills/install.js +129 -0
  628. package/dist/core/skills/install.js.map +1 -0
  629. package/dist/core/skills/manifests/contribution.d.ts +74 -0
  630. package/dist/core/skills/manifests/contribution.d.ts.map +1 -0
  631. package/dist/core/skills/manifests/contribution.js +180 -0
  632. package/dist/core/skills/manifests/contribution.js.map +1 -0
  633. package/dist/core/skills/manifests/research.d.ts +73 -0
  634. package/dist/core/skills/manifests/research.d.ts.map +1 -0
  635. package/dist/core/skills/manifests/research.js +264 -0
  636. package/dist/core/skills/manifests/research.js.map +1 -0
  637. package/dist/core/skills/manifests/resolver.d.ts +40 -0
  638. package/dist/core/skills/manifests/resolver.d.ts.map +1 -0
  639. package/dist/core/skills/manifests/resolver.js +146 -0
  640. package/dist/core/skills/manifests/resolver.js.map +1 -0
  641. package/dist/core/skills/marketplace.d.ts +45 -0
  642. package/dist/core/skills/marketplace.d.ts.map +1 -0
  643. package/dist/core/skills/marketplace.js +90 -0
  644. package/dist/core/skills/marketplace.js.map +1 -0
  645. package/dist/core/skills/orchestrator/spawn.d.ts +66 -0
  646. package/dist/core/skills/orchestrator/spawn.d.ts.map +1 -0
  647. package/dist/core/skills/orchestrator/spawn.js +186 -0
  648. package/dist/core/skills/orchestrator/spawn.js.map +1 -0
  649. package/dist/core/skills/orchestrator/startup.d.ts +89 -0
  650. package/dist/core/skills/orchestrator/startup.d.ts.map +1 -0
  651. package/dist/core/skills/orchestrator/startup.js +434 -0
  652. package/dist/core/skills/orchestrator/startup.js.map +1 -0
  653. package/dist/core/skills/orchestrator/validator.d.ts +40 -0
  654. package/dist/core/skills/orchestrator/validator.d.ts.map +1 -0
  655. package/dist/core/skills/orchestrator/validator.js +297 -0
  656. package/dist/core/skills/orchestrator/validator.js.map +1 -0
  657. package/dist/core/skills/skill-paths.d.ts +79 -0
  658. package/dist/core/skills/skill-paths.d.ts.map +1 -0
  659. package/dist/core/skills/skill-paths.js +220 -0
  660. package/dist/core/skills/skill-paths.js.map +1 -0
  661. package/dist/core/skills/test-utility.d.ts +39 -0
  662. package/dist/core/skills/test-utility.d.ts.map +1 -0
  663. package/dist/core/skills/test-utility.js +55 -0
  664. package/dist/core/skills/test-utility.js.map +1 -0
  665. package/dist/core/skills/types.d.ts +290 -0
  666. package/dist/core/skills/types.d.ts.map +1 -0
  667. package/dist/core/skills/types.js +86 -0
  668. package/dist/core/skills/types.js.map +1 -0
  669. package/dist/core/skills/validation.d.ts +46 -0
  670. package/dist/core/skills/validation.d.ts.map +1 -0
  671. package/dist/core/skills/validation.js +176 -0
  672. package/dist/core/skills/validation.js.map +1 -0
  673. package/dist/core/skills/version.d.ts +87 -0
  674. package/dist/core/skills/version.d.ts.map +1 -0
  675. package/dist/core/skills/version.js +241 -0
  676. package/dist/core/skills/version.js.map +1 -0
  677. package/dist/core/stats/index.d.ts +30 -0
  678. package/dist/core/stats/index.d.ts.map +1 -0
  679. package/dist/core/stats/index.js +152 -0
  680. package/dist/core/stats/index.js.map +1 -0
  681. package/dist/core/task-work/index.d.ts +66 -0
  682. package/dist/core/task-work/index.d.ts.map +1 -0
  683. package/dist/core/task-work/index.js +148 -0
  684. package/dist/core/task-work/index.js.map +1 -0
  685. package/dist/core/tasks/add.d.ts +125 -0
  686. package/dist/core/tasks/add.d.ts.map +1 -0
  687. package/dist/core/tasks/add.js +489 -0
  688. package/dist/core/tasks/add.js.map +1 -0
  689. package/dist/core/tasks/analyze.d.ts +49 -0
  690. package/dist/core/tasks/analyze.d.ts.map +1 -0
  691. package/dist/core/tasks/analyze.js +94 -0
  692. package/dist/core/tasks/analyze.js.map +1 -0
  693. package/dist/core/tasks/archive.d.ts +31 -0
  694. package/dist/core/tasks/archive.d.ts.map +1 -0
  695. package/dist/core/tasks/archive.js +126 -0
  696. package/dist/core/tasks/archive.js.map +1 -0
  697. package/dist/core/tasks/cancel-ops.d.ts +42 -0
  698. package/dist/core/tasks/cancel-ops.d.ts.map +1 -0
  699. package/dist/core/tasks/cancel-ops.js +83 -0
  700. package/dist/core/tasks/cancel-ops.js.map +1 -0
  701. package/dist/core/tasks/complete.d.ts +25 -0
  702. package/dist/core/tasks/complete.d.ts.map +1 -0
  703. package/dist/core/tasks/complete.js +109 -0
  704. package/dist/core/tasks/complete.js.map +1 -0
  705. package/dist/core/tasks/crossref-extract.d.ts +39 -0
  706. package/dist/core/tasks/crossref-extract.d.ts.map +1 -0
  707. package/dist/core/tasks/crossref-extract.js +75 -0
  708. package/dist/core/tasks/crossref-extract.js.map +1 -0
  709. package/dist/core/tasks/delete-preview.d.ts +69 -0
  710. package/dist/core/tasks/delete-preview.d.ts.map +1 -0
  711. package/dist/core/tasks/delete-preview.js +192 -0
  712. package/dist/core/tasks/delete-preview.js.map +1 -0
  713. package/dist/core/tasks/delete.d.ts +24 -0
  714. package/dist/core/tasks/delete.d.ts.map +1 -0
  715. package/dist/core/tasks/delete.js +130 -0
  716. package/dist/core/tasks/delete.js.map +1 -0
  717. package/dist/core/tasks/deletion-strategy.d.ts +46 -0
  718. package/dist/core/tasks/deletion-strategy.d.ts.map +1 -0
  719. package/dist/core/tasks/deletion-strategy.js +200 -0
  720. package/dist/core/tasks/deletion-strategy.js.map +1 -0
  721. package/dist/core/tasks/dependency-check.d.ts +70 -0
  722. package/dist/core/tasks/dependency-check.d.ts.map +1 -0
  723. package/dist/core/tasks/dependency-check.js +226 -0
  724. package/dist/core/tasks/dependency-check.js.map +1 -0
  725. package/dist/core/tasks/find.d.ts +48 -0
  726. package/dist/core/tasks/find.d.ts.map +1 -0
  727. package/dist/core/tasks/find.js +155 -0
  728. package/dist/core/tasks/find.js.map +1 -0
  729. package/dist/core/tasks/graph-cache.d.ts +70 -0
  730. package/dist/core/tasks/graph-cache.d.ts.map +1 -0
  731. package/dist/core/tasks/graph-cache.js +127 -0
  732. package/dist/core/tasks/graph-cache.js.map +1 -0
  733. package/dist/core/tasks/graph-ops.d.ts +36 -0
  734. package/dist/core/tasks/graph-ops.d.ts.map +1 -0
  735. package/dist/core/tasks/graph-ops.js +173 -0
  736. package/dist/core/tasks/graph-ops.js.map +1 -0
  737. package/dist/core/tasks/graph-rag.d.ts +49 -0
  738. package/dist/core/tasks/graph-rag.d.ts.map +1 -0
  739. package/dist/core/tasks/graph-rag.js +253 -0
  740. package/dist/core/tasks/graph-rag.js.map +1 -0
  741. package/dist/core/tasks/hierarchy.d.ts +82 -0
  742. package/dist/core/tasks/hierarchy.d.ts.map +1 -0
  743. package/dist/core/tasks/hierarchy.js +188 -0
  744. package/dist/core/tasks/hierarchy.js.map +1 -0
  745. package/dist/core/tasks/index.d.ts +15 -0
  746. package/dist/core/tasks/index.d.ts.map +1 -0
  747. package/dist/core/tasks/index.js +15 -0
  748. package/dist/core/tasks/index.js.map +1 -0
  749. package/dist/core/tasks/labels.d.ts +19 -0
  750. package/dist/core/tasks/labels.d.ts.map +1 -0
  751. package/dist/core/tasks/labels.js +56 -0
  752. package/dist/core/tasks/labels.js.map +1 -0
  753. package/dist/core/tasks/list.d.ts +36 -0
  754. package/dist/core/tasks/list.d.ts.map +1 -0
  755. package/dist/core/tasks/list.js +72 -0
  756. package/dist/core/tasks/list.js.map +1 -0
  757. package/dist/core/tasks/phase-tracking.d.ts +61 -0
  758. package/dist/core/tasks/phase-tracking.d.ts.map +1 -0
  759. package/dist/core/tasks/phase-tracking.js +133 -0
  760. package/dist/core/tasks/phase-tracking.js.map +1 -0
  761. package/dist/core/tasks/relates.d.ts +18 -0
  762. package/dist/core/tasks/relates.d.ts.map +1 -0
  763. package/dist/core/tasks/relates.js +115 -0
  764. package/dist/core/tasks/relates.js.map +1 -0
  765. package/dist/core/tasks/show.d.ts +25 -0
  766. package/dist/core/tasks/show.d.ts.map +1 -0
  767. package/dist/core/tasks/show.js +79 -0
  768. package/dist/core/tasks/show.js.map +1 -0
  769. package/dist/core/tasks/size-weighting.d.ts +38 -0
  770. package/dist/core/tasks/size-weighting.d.ts.map +1 -0
  771. package/dist/core/tasks/size-weighting.js +86 -0
  772. package/dist/core/tasks/size-weighting.js.map +1 -0
  773. package/dist/core/tasks/staleness.d.ts +56 -0
  774. package/dist/core/tasks/staleness.d.ts.map +1 -0
  775. package/dist/core/tasks/staleness.js +91 -0
  776. package/dist/core/tasks/staleness.js.map +1 -0
  777. package/dist/core/tasks/todowrite-integration.d.ts +46 -0
  778. package/dist/core/tasks/todowrite-integration.d.ts.map +1 -0
  779. package/dist/core/tasks/todowrite-integration.js +172 -0
  780. package/dist/core/tasks/todowrite-integration.js.map +1 -0
  781. package/dist/core/tasks/update.d.ts +41 -0
  782. package/dist/core/tasks/update.d.ts.map +1 -0
  783. package/dist/core/tasks/update.js +178 -0
  784. package/dist/core/tasks/update.js.map +1 -0
  785. package/dist/core/ui/aliases.d.ts +43 -0
  786. package/dist/core/ui/aliases.d.ts.map +1 -0
  787. package/dist/core/ui/aliases.js +150 -0
  788. package/dist/core/ui/aliases.js.map +1 -0
  789. package/dist/core/ui/changelog.d.ts +58 -0
  790. package/dist/core/ui/changelog.d.ts.map +1 -0
  791. package/dist/core/ui/changelog.js +195 -0
  792. package/dist/core/ui/changelog.js.map +1 -0
  793. package/dist/core/ui/command-registry.d.ts +44 -0
  794. package/dist/core/ui/command-registry.d.ts.map +1 -0
  795. package/dist/core/ui/command-registry.js +156 -0
  796. package/dist/core/ui/command-registry.js.map +1 -0
  797. package/dist/core/ui/flags.d.ts +34 -0
  798. package/dist/core/ui/flags.d.ts.map +1 -0
  799. package/dist/core/ui/flags.js +94 -0
  800. package/dist/core/ui/flags.js.map +1 -0
  801. package/dist/core/ui/index.d.ts +18 -0
  802. package/dist/core/ui/index.d.ts.map +1 -0
  803. package/dist/core/ui/index.js +28 -0
  804. package/dist/core/ui/index.js.map +1 -0
  805. package/dist/core/ui/injection-legacy.d.ts +26 -0
  806. package/dist/core/ui/injection-legacy.d.ts.map +1 -0
  807. package/dist/core/ui/injection-legacy.js +42 -0
  808. package/dist/core/ui/injection-legacy.js.map +1 -0
  809. package/dist/core/ui/injection-registry.d.ts +56 -0
  810. package/dist/core/ui/injection-registry.d.ts.map +1 -0
  811. package/dist/core/ui/injection-registry.js +68 -0
  812. package/dist/core/ui/injection-registry.js.map +1 -0
  813. package/dist/core/ui/injection.d.ts +51 -0
  814. package/dist/core/ui/injection.d.ts.map +1 -0
  815. package/dist/core/ui/injection.js +125 -0
  816. package/dist/core/ui/injection.js.map +1 -0
  817. package/dist/core/ui/mcp-config.d.ts +40 -0
  818. package/dist/core/ui/mcp-config.d.ts.map +1 -0
  819. package/dist/core/ui/mcp-config.js +173 -0
  820. package/dist/core/ui/mcp-config.js.map +1 -0
  821. package/dist/core/ui/version-check.d.ts +31 -0
  822. package/dist/core/ui/version-check.d.ts.map +1 -0
  823. package/dist/core/ui/version-check.js +121 -0
  824. package/dist/core/ui/version-check.js.map +1 -0
  825. package/dist/core/upgrade.d.ts +59 -0
  826. package/dist/core/upgrade.d.ts.map +1 -0
  827. package/dist/core/upgrade.js +649 -0
  828. package/dist/core/upgrade.js.map +1 -0
  829. package/dist/core/validation/compliance.d.ts +94 -0
  830. package/dist/core/validation/compliance.d.ts.map +1 -0
  831. package/dist/core/validation/compliance.js +157 -0
  832. package/dist/core/validation/compliance.js.map +1 -0
  833. package/dist/core/validation/docs-sync.d.ts +66 -0
  834. package/dist/core/validation/docs-sync.d.ts.map +1 -0
  835. package/dist/core/validation/docs-sync.js +204 -0
  836. package/dist/core/validation/docs-sync.js.map +1 -0
  837. package/dist/core/validation/doctor/checks.d.ts +61 -0
  838. package/dist/core/validation/doctor/checks.d.ts.map +1 -0
  839. package/dist/core/validation/doctor/checks.js +457 -0
  840. package/dist/core/validation/doctor/checks.js.map +1 -0
  841. package/dist/core/validation/doctor/index.d.ts +9 -0
  842. package/dist/core/validation/doctor/index.d.ts.map +1 -0
  843. package/dist/core/validation/doctor/index.js +9 -0
  844. package/dist/core/validation/doctor/index.js.map +1 -0
  845. package/dist/core/validation/doctor/project-cache.d.ts +79 -0
  846. package/dist/core/validation/doctor/project-cache.d.ts.map +1 -0
  847. package/dist/core/validation/doctor/project-cache.js +164 -0
  848. package/dist/core/validation/doctor/project-cache.js.map +1 -0
  849. package/dist/core/validation/doctor/utils.d.ts +68 -0
  850. package/dist/core/validation/doctor/utils.d.ts.map +1 -0
  851. package/dist/core/validation/doctor/utils.js +162 -0
  852. package/dist/core/validation/doctor/utils.js.map +1 -0
  853. package/dist/core/validation/engine.d.ts +172 -0
  854. package/dist/core/validation/engine.d.ts.map +1 -0
  855. package/dist/core/validation/engine.js +791 -0
  856. package/dist/core/validation/engine.js.map +1 -0
  857. package/dist/core/validation/gap-check.d.ts +74 -0
  858. package/dist/core/validation/gap-check.d.ts.map +1 -0
  859. package/dist/core/validation/gap-check.js +175 -0
  860. package/dist/core/validation/gap-check.js.map +1 -0
  861. package/dist/core/validation/index.d.ts +17 -0
  862. package/dist/core/validation/index.d.ts.map +1 -0
  863. package/dist/core/validation/index.js +25 -0
  864. package/dist/core/validation/index.js.map +1 -0
  865. package/dist/core/validation/manifest.d.ts +81 -0
  866. package/dist/core/validation/manifest.d.ts.map +1 -0
  867. package/dist/core/validation/manifest.js +225 -0
  868. package/dist/core/validation/manifest.js.map +1 -0
  869. package/dist/core/validation/protocol-common.d.ts +77 -0
  870. package/dist/core/validation/protocol-common.d.ts.map +1 -0
  871. package/dist/core/validation/protocol-common.js +240 -0
  872. package/dist/core/validation/protocol-common.js.map +1 -0
  873. package/dist/core/validation/protocols/consensus.d.ts +28 -0
  874. package/dist/core/validation/protocols/consensus.d.ts.map +1 -0
  875. package/dist/core/validation/protocols/consensus.js +70 -0
  876. package/dist/core/validation/protocols/consensus.js.map +1 -0
  877. package/dist/core/validation/protocols/contribution.d.ts +26 -0
  878. package/dist/core/validation/protocols/contribution.d.ts.map +1 -0
  879. package/dist/core/validation/protocols/contribution.js +58 -0
  880. package/dist/core/validation/protocols/contribution.js.map +1 -0
  881. package/dist/core/validation/protocols/decomposition.d.ts +28 -0
  882. package/dist/core/validation/protocols/decomposition.d.ts.map +1 -0
  883. package/dist/core/validation/protocols/decomposition.js +58 -0
  884. package/dist/core/validation/protocols/decomposition.js.map +1 -0
  885. package/dist/core/validation/protocols/implementation.d.ts +26 -0
  886. package/dist/core/validation/protocols/implementation.d.ts.map +1 -0
  887. package/dist/core/validation/protocols/implementation.js +58 -0
  888. package/dist/core/validation/protocols/implementation.js.map +1 -0
  889. package/dist/core/validation/protocols/specification.d.ts +28 -0
  890. package/dist/core/validation/protocols/specification.d.ts.map +1 -0
  891. package/dist/core/validation/protocols/specification.js +83 -0
  892. package/dist/core/validation/protocols/specification.js.map +1 -0
  893. package/dist/core/validation/verification.d.ts +153 -0
  894. package/dist/core/validation/verification.d.ts.map +1 -0
  895. package/dist/core/validation/verification.js +311 -0
  896. package/dist/core/validation/verification.js.map +1 -0
  897. package/dist/dispatch/dispatcher.d.ts +23 -0
  898. package/dist/dispatch/dispatcher.d.ts.map +1 -0
  899. package/dist/dispatch/dispatcher.js +90 -0
  900. package/dist/dispatch/dispatcher.js.map +1 -0
  901. package/dist/dispatch/domains/_meta.d.ts +23 -0
  902. package/dist/dispatch/domains/_meta.d.ts.map +1 -0
  903. package/dist/dispatch/domains/_meta.js +25 -0
  904. package/dist/dispatch/domains/_meta.js.map +1 -0
  905. package/dist/dispatch/domains/admin.d.ts +29 -0
  906. package/dist/dispatch/domains/admin.d.ts.map +1 -0
  907. package/dist/dispatch/domains/admin.js +200 -0
  908. package/dist/dispatch/domains/admin.js.map +1 -0
  909. package/dist/dispatch/domains/check.d.ts +28 -0
  910. package/dist/dispatch/domains/check.d.ts.map +1 -0
  911. package/dist/dispatch/domains/check.js +170 -0
  912. package/dist/dispatch/domains/check.js.map +1 -0
  913. package/dist/dispatch/domains/index.d.ts +26 -0
  914. package/dist/dispatch/domains/index.d.ts.map +1 -0
  915. package/dist/dispatch/domains/index.js +36 -0
  916. package/dist/dispatch/domains/index.js.map +1 -0
  917. package/dist/dispatch/domains/memory.d.ts +27 -0
  918. package/dist/dispatch/domains/memory.d.ts.map +1 -0
  919. package/dist/dispatch/domains/memory.js +169 -0
  920. package/dist/dispatch/domains/memory.js.map +1 -0
  921. package/dist/dispatch/domains/nexus.d.ts +18 -0
  922. package/dist/dispatch/domains/nexus.d.ts.map +1 -0
  923. package/dist/dispatch/domains/nexus.js +34 -0
  924. package/dist/dispatch/domains/nexus.js.map +1 -0
  925. package/dist/dispatch/domains/orchestrate.d.ts +24 -0
  926. package/dist/dispatch/domains/orchestrate.d.ts.map +1 -0
  927. package/dist/dispatch/domains/orchestrate.js +199 -0
  928. package/dist/dispatch/domains/orchestrate.js.map +1 -0
  929. package/dist/dispatch/domains/pipeline.d.ts +31 -0
  930. package/dist/dispatch/domains/pipeline.d.ts.map +1 -0
  931. package/dist/dispatch/domains/pipeline.js +284 -0
  932. package/dist/dispatch/domains/pipeline.js.map +1 -0
  933. package/dist/dispatch/domains/session.d.ts +27 -0
  934. package/dist/dispatch/domains/session.d.ts.map +1 -0
  935. package/dist/dispatch/domains/session.js +180 -0
  936. package/dist/dispatch/domains/session.js.map +1 -0
  937. package/dist/dispatch/domains/tools.d.ts +39 -0
  938. package/dist/dispatch/domains/tools.d.ts.map +1 -0
  939. package/dist/dispatch/domains/tools.js +314 -0
  940. package/dist/dispatch/domains/tools.js.map +1 -0
  941. package/dist/dispatch/index.d.ts +20 -0
  942. package/dist/dispatch/index.d.ts.map +1 -0
  943. package/dist/dispatch/index.js +19 -0
  944. package/dist/dispatch/index.js.map +1 -0
  945. package/dist/dispatch/lib/meta.d.ts +24 -0
  946. package/dist/dispatch/lib/meta.d.ts.map +1 -0
  947. package/dist/dispatch/lib/meta.js +34 -0
  948. package/dist/dispatch/lib/meta.js.map +1 -0
  949. package/dist/dispatch/middleware/audit.d.ts +123 -0
  950. package/dist/dispatch/middleware/audit.d.ts.map +1 -0
  951. package/dist/dispatch/middleware/audit.js +345 -0
  952. package/dist/dispatch/middleware/audit.js.map +1 -0
  953. package/dist/dispatch/middleware/pipeline.d.ts +20 -0
  954. package/dist/dispatch/middleware/pipeline.d.ts.map +1 -0
  955. package/dist/dispatch/middleware/pipeline.js +47 -0
  956. package/dist/dispatch/middleware/pipeline.js.map +1 -0
  957. package/dist/dispatch/middleware/protocol-enforcement.d.ts +6 -0
  958. package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +1 -0
  959. package/dist/dispatch/middleware/protocol-enforcement.js +12 -0
  960. package/dist/dispatch/middleware/protocol-enforcement.js.map +1 -0
  961. package/dist/dispatch/middleware/rate-limiter.d.ts +30 -0
  962. package/dist/dispatch/middleware/rate-limiter.d.ts.map +1 -0
  963. package/dist/dispatch/middleware/rate-limiter.js +101 -0
  964. package/dist/dispatch/middleware/rate-limiter.js.map +1 -0
  965. package/dist/dispatch/middleware/sanitizer.d.ts +10 -0
  966. package/dist/dispatch/middleware/sanitizer.d.ts.map +1 -0
  967. package/dist/dispatch/middleware/sanitizer.js +39 -0
  968. package/dist/dispatch/middleware/sanitizer.js.map +1 -0
  969. package/dist/dispatch/middleware/verification-gates.d.ts +3 -0
  970. package/dist/dispatch/middleware/verification-gates.d.ts.map +1 -0
  971. package/dist/dispatch/middleware/verification-gates.js +40 -0
  972. package/dist/dispatch/middleware/verification-gates.js.map +1 -0
  973. package/dist/dispatch/registry.d.ts +89 -0
  974. package/dist/dispatch/registry.d.ts.map +1 -0
  975. package/dist/dispatch/registry.js +1591 -0
  976. package/dist/dispatch/registry.js.map +1 -0
  977. package/dist/dispatch/types.d.ts +137 -0
  978. package/dist/dispatch/types.d.ts.map +1 -0
  979. package/dist/dispatch/types.js +24 -0
  980. package/dist/dispatch/types.js.map +1 -0
  981. package/dist/index.d.ts +22 -0
  982. package/dist/index.d.ts.map +1 -0
  983. package/dist/index.js +30 -0
  984. package/dist/index.js.map +1 -0
  985. package/dist/mcp/domains/index.d.ts +19 -0
  986. package/dist/mcp/domains/index.d.ts.map +1 -0
  987. package/dist/mcp/domains/index.js +19 -0
  988. package/dist/mcp/domains/index.js.map +1 -0
  989. package/dist/mcp/domains/issues.d.ts +69 -0
  990. package/dist/mcp/domains/issues.d.ts.map +1 -0
  991. package/dist/mcp/domains/issues.js +260 -0
  992. package/dist/mcp/domains/issues.js.map +1 -0
  993. package/dist/mcp/domains/lifecycle.d.ts +154 -0
  994. package/dist/mcp/domains/lifecycle.d.ts.map +1 -0
  995. package/dist/mcp/domains/lifecycle.js +508 -0
  996. package/dist/mcp/domains/lifecycle.js.map +1 -0
  997. package/dist/mcp/domains/orchestrate.d.ts +140 -0
  998. package/dist/mcp/domains/orchestrate.d.ts.map +1 -0
  999. package/dist/mcp/domains/orchestrate.js +542 -0
  1000. package/dist/mcp/domains/orchestrate.js.map +1 -0
  1001. package/dist/mcp/domains/providers.d.ts +28 -0
  1002. package/dist/mcp/domains/providers.d.ts.map +1 -0
  1003. package/dist/mcp/domains/providers.js +108 -0
  1004. package/dist/mcp/domains/providers.js.map +1 -0
  1005. package/dist/mcp/domains/release.d.ts +121 -0
  1006. package/dist/mcp/domains/release.d.ts.map +1 -0
  1007. package/dist/mcp/domains/release.js +486 -0
  1008. package/dist/mcp/domains/release.js.map +1 -0
  1009. package/dist/mcp/domains/research.d.ts +158 -0
  1010. package/dist/mcp/domains/research.d.ts.map +1 -0
  1011. package/dist/mcp/domains/research.js +698 -0
  1012. package/dist/mcp/domains/research.js.map +1 -0
  1013. package/dist/mcp/domains/session.d.ts +136 -0
  1014. package/dist/mcp/domains/session.d.ts.map +1 -0
  1015. package/dist/mcp/domains/session.js +583 -0
  1016. package/dist/mcp/domains/session.js.map +1 -0
  1017. package/dist/mcp/domains/skills.d.ts +129 -0
  1018. package/dist/mcp/domains/skills.d.ts.map +1 -0
  1019. package/dist/mcp/domains/skills.js +691 -0
  1020. package/dist/mcp/domains/skills.js.map +1 -0
  1021. package/dist/mcp/domains/system.d.ts +166 -0
  1022. package/dist/mcp/domains/system.d.ts.map +1 -0
  1023. package/dist/mcp/domains/system.js +1000 -0
  1024. package/dist/mcp/domains/system.js.map +1 -0
  1025. package/dist/mcp/domains/tasks.d.ts +241 -0
  1026. package/dist/mcp/domains/tasks.d.ts.map +1 -0
  1027. package/dist/mcp/domains/tasks.js +1152 -0
  1028. package/dist/mcp/domains/tasks.js.map +1 -0
  1029. package/dist/mcp/domains/validate.d.ts +163 -0
  1030. package/dist/mcp/domains/validate.d.ts.map +1 -0
  1031. package/dist/mcp/domains/validate.js +787 -0
  1032. package/dist/mcp/domains/validate.js.map +1 -0
  1033. package/dist/mcp/engine/caamp-adapter.d.ts +12 -0
  1034. package/dist/mcp/engine/caamp-adapter.d.ts.map +1 -0
  1035. package/dist/mcp/engine/caamp-adapter.js +23 -0
  1036. package/dist/mcp/engine/caamp-adapter.js.map +1 -0
  1037. package/dist/mcp/engine/caamp-verify.d.ts +2 -0
  1038. package/dist/mcp/engine/caamp-verify.d.ts.map +1 -0
  1039. package/dist/mcp/engine/caamp-verify.js +15 -0
  1040. package/dist/mcp/engine/caamp-verify.js.map +1 -0
  1041. package/dist/mcp/engine/capability-matrix.d.ts +67 -0
  1042. package/dist/mcp/engine/capability-matrix.d.ts.map +1 -0
  1043. package/dist/mcp/engine/capability-matrix.js +243 -0
  1044. package/dist/mcp/engine/capability-matrix.js.map +1 -0
  1045. package/dist/mcp/engine/config-engine.d.ts +29 -0
  1046. package/dist/mcp/engine/config-engine.d.ts.map +1 -0
  1047. package/dist/mcp/engine/config-engine.js +110 -0
  1048. package/dist/mcp/engine/config-engine.js.map +1 -0
  1049. package/dist/mcp/engine/id-generator.d.ts +34 -0
  1050. package/dist/mcp/engine/id-generator.d.ts.map +1 -0
  1051. package/dist/mcp/engine/id-generator.js +91 -0
  1052. package/dist/mcp/engine/id-generator.js.map +1 -0
  1053. package/dist/mcp/engine/index.d.ts +25 -0
  1054. package/dist/mcp/engine/index.d.ts.map +1 -0
  1055. package/dist/mcp/engine/index.js +42 -0
  1056. package/dist/mcp/engine/index.js.map +1 -0
  1057. package/dist/mcp/engine/init-engine.d.ts +52 -0
  1058. package/dist/mcp/engine/init-engine.d.ts.map +1 -0
  1059. package/dist/mcp/engine/init-engine.js +222 -0
  1060. package/dist/mcp/engine/init-engine.js.map +1 -0
  1061. package/dist/mcp/engine/lifecycle-engine.d.ts +119 -0
  1062. package/dist/mcp/engine/lifecycle-engine.d.ts.map +1 -0
  1063. package/dist/mcp/engine/lifecycle-engine.js +564 -0
  1064. package/dist/mcp/engine/lifecycle-engine.js.map +1 -0
  1065. package/dist/mcp/engine/orchestrate-engine.d.ts +127 -0
  1066. package/dist/mcp/engine/orchestrate-engine.d.ts.map +1 -0
  1067. package/dist/mcp/engine/orchestrate-engine.js +1233 -0
  1068. package/dist/mcp/engine/orchestrate-engine.js.map +1 -0
  1069. package/dist/mcp/engine/release-engine.d.ts +71 -0
  1070. package/dist/mcp/engine/release-engine.d.ts.map +1 -0
  1071. package/dist/mcp/engine/release-engine.js +515 -0
  1072. package/dist/mcp/engine/release-engine.js.map +1 -0
  1073. package/dist/mcp/engine/research-engine.d.ts +182 -0
  1074. package/dist/mcp/engine/research-engine.d.ts.map +1 -0
  1075. package/dist/mcp/engine/research-engine.js +747 -0
  1076. package/dist/mcp/engine/research-engine.js.map +1 -0
  1077. package/dist/mcp/engine/schema-validator.d.ts +47 -0
  1078. package/dist/mcp/engine/schema-validator.d.ts.map +1 -0
  1079. package/dist/mcp/engine/schema-validator.js +219 -0
  1080. package/dist/mcp/engine/schema-validator.js.map +1 -0
  1081. package/dist/mcp/engine/session-engine.d.ts +340 -0
  1082. package/dist/mcp/engine/session-engine.d.ts.map +1 -0
  1083. package/dist/mcp/engine/session-engine.js +1355 -0
  1084. package/dist/mcp/engine/session-engine.js.map +1 -0
  1085. package/dist/mcp/engine/store.d.ts +86 -0
  1086. package/dist/mcp/engine/store.d.ts.map +1 -0
  1087. package/dist/mcp/engine/store.js +393 -0
  1088. package/dist/mcp/engine/store.js.map +1 -0
  1089. package/dist/mcp/engine/system-engine.d.ts +458 -0
  1090. package/dist/mcp/engine/system-engine.d.ts.map +1 -0
  1091. package/dist/mcp/engine/system-engine.js +1568 -0
  1092. package/dist/mcp/engine/system-engine.js.map +1 -0
  1093. package/dist/mcp/engine/task-engine.d.ts +501 -0
  1094. package/dist/mcp/engine/task-engine.d.ts.map +1 -0
  1095. package/dist/mcp/engine/task-engine.js +1840 -0
  1096. package/dist/mcp/engine/task-engine.js.map +1 -0
  1097. package/dist/mcp/engine/template-parser.d.ts +83 -0
  1098. package/dist/mcp/engine/template-parser.d.ts.map +1 -0
  1099. package/dist/mcp/engine/template-parser.js +255 -0
  1100. package/dist/mcp/engine/template-parser.js.map +1 -0
  1101. package/dist/mcp/engine/validate-engine.d.ts +120 -0
  1102. package/dist/mcp/engine/validate-engine.d.ts.map +1 -0
  1103. package/dist/mcp/engine/validate-engine.js +828 -0
  1104. package/dist/mcp/engine/validate-engine.js.map +1 -0
  1105. package/dist/mcp/engine/validation-rules.d.ts +85 -0
  1106. package/dist/mcp/engine/validation-rules.d.ts.map +1 -0
  1107. package/dist/mcp/engine/validation-rules.js +220 -0
  1108. package/dist/mcp/engine/validation-rules.js.map +1 -0
  1109. package/dist/mcp/gateways/mutate.d.ts +100 -0
  1110. package/dist/mcp/gateways/mutate.d.ts.map +1 -0
  1111. package/dist/mcp/gateways/mutate.js +1070 -0
  1112. package/dist/mcp/gateways/mutate.js.map +1 -0
  1113. package/dist/mcp/gateways/query.d.ts +91 -0
  1114. package/dist/mcp/gateways/query.d.ts.map +1 -0
  1115. package/dist/mcp/gateways/query.js +278 -0
  1116. package/dist/mcp/gateways/query.js.map +1 -0
  1117. package/dist/mcp/index.d.ts +20 -0
  1118. package/dist/mcp/index.d.ts.map +1 -0
  1119. package/dist/mcp/index.js +20993 -0
  1120. package/dist/mcp/index.js.map +7 -0
  1121. package/dist/mcp/lib/audit.d.ts +118 -0
  1122. package/dist/mcp/lib/audit.d.ts.map +1 -0
  1123. package/dist/mcp/lib/audit.js +310 -0
  1124. package/dist/mcp/lib/audit.js.map +1 -0
  1125. package/dist/mcp/lib/background-jobs.d.ts +86 -0
  1126. package/dist/mcp/lib/background-jobs.d.ts.map +1 -0
  1127. package/dist/mcp/lib/background-jobs.js +183 -0
  1128. package/dist/mcp/lib/background-jobs.js.map +1 -0
  1129. package/dist/mcp/lib/budget.d.ts +35 -0
  1130. package/dist/mcp/lib/budget.d.ts.map +1 -0
  1131. package/dist/mcp/lib/budget.js +101 -0
  1132. package/dist/mcp/lib/budget.js.map +1 -0
  1133. package/dist/mcp/lib/cache.d.ts +78 -0
  1134. package/dist/mcp/lib/cache.d.ts.map +1 -0
  1135. package/dist/mcp/lib/cache.js +204 -0
  1136. package/dist/mcp/lib/cache.js.map +1 -0
  1137. package/dist/mcp/lib/command-builder.d.ts +52 -0
  1138. package/dist/mcp/lib/command-builder.d.ts.map +1 -0
  1139. package/dist/mcp/lib/command-builder.js +269 -0
  1140. package/dist/mcp/lib/command-builder.js.map +1 -0
  1141. package/dist/mcp/lib/config.d.ts +42 -0
  1142. package/dist/mcp/lib/config.d.ts.map +1 -0
  1143. package/dist/mcp/lib/config.js +248 -0
  1144. package/dist/mcp/lib/config.js.map +1 -0
  1145. package/dist/mcp/lib/defaults.d.ts +115 -0
  1146. package/dist/mcp/lib/defaults.d.ts.map +1 -0
  1147. package/dist/mcp/lib/defaults.js +61 -0
  1148. package/dist/mcp/lib/defaults.js.map +1 -0
  1149. package/dist/mcp/lib/error-handler.d.ts +101 -0
  1150. package/dist/mcp/lib/error-handler.d.ts.map +1 -0
  1151. package/dist/mcp/lib/error-handler.js +277 -0
  1152. package/dist/mcp/lib/error-handler.js.map +1 -0
  1153. package/dist/mcp/lib/executor.d.ts +122 -0
  1154. package/dist/mcp/lib/executor.d.ts.map +1 -0
  1155. package/dist/mcp/lib/executor.js +391 -0
  1156. package/dist/mcp/lib/executor.js.map +1 -0
  1157. package/dist/mcp/lib/exit-codes.d.ts +192 -0
  1158. package/dist/mcp/lib/exit-codes.d.ts.map +1 -0
  1159. package/dist/mcp/lib/exit-codes.js +1029 -0
  1160. package/dist/mcp/lib/exit-codes.js.map +1 -0
  1161. package/dist/mcp/lib/formatter.d.ts +196 -0
  1162. package/dist/mcp/lib/formatter.d.ts.map +1 -0
  1163. package/dist/mcp/lib/formatter.js +260 -0
  1164. package/dist/mcp/lib/formatter.js.map +1 -0
  1165. package/dist/mcp/lib/gate-validators.d.ts +104 -0
  1166. package/dist/mcp/lib/gate-validators.d.ts.map +1 -0
  1167. package/dist/mcp/lib/gate-validators.js +709 -0
  1168. package/dist/mcp/lib/gate-validators.js.map +1 -0
  1169. package/dist/mcp/lib/gateway-meta.d.ts +37 -0
  1170. package/dist/mcp/lib/gateway-meta.d.ts.map +1 -0
  1171. package/dist/mcp/lib/gateway-meta.js +50 -0
  1172. package/dist/mcp/lib/gateway-meta.js.map +1 -0
  1173. package/dist/mcp/lib/manifest-parser.d.ts +61 -0
  1174. package/dist/mcp/lib/manifest-parser.d.ts.map +1 -0
  1175. package/dist/mcp/lib/manifest-parser.js +338 -0
  1176. package/dist/mcp/lib/manifest-parser.js.map +1 -0
  1177. package/dist/mcp/lib/manifest.d.ts +177 -0
  1178. package/dist/mcp/lib/manifest.d.ts.map +1 -0
  1179. package/dist/mcp/lib/manifest.js +301 -0
  1180. package/dist/mcp/lib/manifest.js.map +1 -0
  1181. package/dist/mcp/lib/mode-detector.d.ts +71 -0
  1182. package/dist/mcp/lib/mode-detector.d.ts.map +1 -0
  1183. package/dist/mcp/lib/mode-detector.js +184 -0
  1184. package/dist/mcp/lib/mode-detector.js.map +1 -0
  1185. package/dist/mcp/lib/protocol-enforcement.d.ts +105 -0
  1186. package/dist/mcp/lib/protocol-enforcement.d.ts.map +1 -0
  1187. package/dist/mcp/lib/protocol-enforcement.js +331 -0
  1188. package/dist/mcp/lib/protocol-enforcement.js.map +1 -0
  1189. package/dist/mcp/lib/protocol-rules.d.ts +55 -0
  1190. package/dist/mcp/lib/protocol-rules.d.ts.map +1 -0
  1191. package/dist/mcp/lib/protocol-rules.js +760 -0
  1192. package/dist/mcp/lib/protocol-rules.js.map +1 -0
  1193. package/dist/mcp/lib/rate-limiter.d.ts +110 -0
  1194. package/dist/mcp/lib/rate-limiter.d.ts.map +1 -0
  1195. package/dist/mcp/lib/rate-limiter.js +208 -0
  1196. package/dist/mcp/lib/rate-limiter.js.map +1 -0
  1197. package/dist/mcp/lib/router.d.ts +136 -0
  1198. package/dist/mcp/lib/router.d.ts.map +1 -0
  1199. package/dist/mcp/lib/router.js +298 -0
  1200. package/dist/mcp/lib/router.js.map +1 -0
  1201. package/dist/mcp/lib/schema.d.ts +55 -0
  1202. package/dist/mcp/lib/schema.d.ts.map +1 -0
  1203. package/dist/mcp/lib/schema.js +70 -0
  1204. package/dist/mcp/lib/schema.js.map +1 -0
  1205. package/dist/mcp/lib/security.d.ts +158 -0
  1206. package/dist/mcp/lib/security.d.ts.map +1 -0
  1207. package/dist/mcp/lib/security.js +353 -0
  1208. package/dist/mcp/lib/security.js.map +1 -0
  1209. package/dist/mcp/lib/verification-gates.d.ts +287 -0
  1210. package/dist/mcp/lib/verification-gates.d.ts.map +1 -0
  1211. package/dist/mcp/lib/verification-gates.js +547 -0
  1212. package/dist/mcp/lib/verification-gates.js.map +1 -0
  1213. package/dist/mcp/types/domain.d.ts +29 -0
  1214. package/dist/mcp/types/domain.d.ts.map +1 -0
  1215. package/dist/mcp/types/domain.js +7 -0
  1216. package/dist/mcp/types/domain.js.map +1 -0
  1217. package/dist/mcp/types/error.d.ts +101 -0
  1218. package/dist/mcp/types/error.d.ts.map +1 -0
  1219. package/dist/mcp/types/error.js +148 -0
  1220. package/dist/mcp/types/error.js.map +1 -0
  1221. package/dist/mcp/types/gateway.d.ts +78 -0
  1222. package/dist/mcp/types/gateway.d.ts.map +1 -0
  1223. package/dist/mcp/types/gateway.js +7 -0
  1224. package/dist/mcp/types/gateway.js.map +1 -0
  1225. package/dist/mcp/types/index.d.ts +23 -0
  1226. package/dist/mcp/types/index.d.ts.map +1 -0
  1227. package/dist/mcp/types/index.js +11 -0
  1228. package/dist/mcp/types/index.js.map +1 -0
  1229. package/dist/mcp/types/operations/issues.d.ts +3 -0
  1230. package/dist/mcp/types/operations/issues.d.ts.map +1 -0
  1231. package/dist/mcp/types/operations/issues.js +3 -0
  1232. package/dist/mcp/types/operations/issues.js.map +1 -0
  1233. package/dist/mcp/types/operations/lifecycle.d.ts +3 -0
  1234. package/dist/mcp/types/operations/lifecycle.d.ts.map +1 -0
  1235. package/dist/mcp/types/operations/lifecycle.js +3 -0
  1236. package/dist/mcp/types/operations/lifecycle.js.map +1 -0
  1237. package/dist/mcp/types/operations/orchestrate.d.ts +3 -0
  1238. package/dist/mcp/types/operations/orchestrate.d.ts.map +1 -0
  1239. package/dist/mcp/types/operations/orchestrate.js +3 -0
  1240. package/dist/mcp/types/operations/orchestrate.js.map +1 -0
  1241. package/dist/mcp/types/operations/release.d.ts +3 -0
  1242. package/dist/mcp/types/operations/release.d.ts.map +1 -0
  1243. package/dist/mcp/types/operations/release.js +3 -0
  1244. package/dist/mcp/types/operations/release.js.map +1 -0
  1245. package/dist/mcp/types/operations/research.d.ts +3 -0
  1246. package/dist/mcp/types/operations/research.d.ts.map +1 -0
  1247. package/dist/mcp/types/operations/research.js +3 -0
  1248. package/dist/mcp/types/operations/research.js.map +1 -0
  1249. package/dist/mcp/types/operations/session.d.ts +3 -0
  1250. package/dist/mcp/types/operations/session.d.ts.map +1 -0
  1251. package/dist/mcp/types/operations/session.js +3 -0
  1252. package/dist/mcp/types/operations/session.js.map +1 -0
  1253. package/dist/mcp/types/operations/skills.d.ts +3 -0
  1254. package/dist/mcp/types/operations/skills.d.ts.map +1 -0
  1255. package/dist/mcp/types/operations/skills.js +3 -0
  1256. package/dist/mcp/types/operations/skills.js.map +1 -0
  1257. package/dist/mcp/types/operations/system.d.ts +3 -0
  1258. package/dist/mcp/types/operations/system.d.ts.map +1 -0
  1259. package/dist/mcp/types/operations/system.js +3 -0
  1260. package/dist/mcp/types/operations/system.js.map +1 -0
  1261. package/dist/mcp/types/operations/tasks.d.ts +3 -0
  1262. package/dist/mcp/types/operations/tasks.d.ts.map +1 -0
  1263. package/dist/mcp/types/operations/tasks.js +3 -0
  1264. package/dist/mcp/types/operations/tasks.js.map +1 -0
  1265. package/dist/mcp/types/operations/validate.d.ts +3 -0
  1266. package/dist/mcp/types/operations/validate.d.ts.map +1 -0
  1267. package/dist/mcp/types/operations/validate.js +3 -0
  1268. package/dist/mcp/types/operations/validate.js.map +1 -0
  1269. package/dist/scripts/migrate-todo-to-tasks.d.ts +46 -0
  1270. package/dist/scripts/migrate-todo-to-tasks.d.ts.map +1 -0
  1271. package/dist/scripts/migrate-todo-to-tasks.js +379 -0
  1272. package/dist/scripts/migrate-todo-to-tasks.js.map +1 -0
  1273. package/dist/store/atomic.d.ts +75 -0
  1274. package/dist/store/atomic.d.ts.map +1 -0
  1275. package/dist/store/atomic.js +167 -0
  1276. package/dist/store/atomic.js.map +1 -0
  1277. package/dist/store/backup.d.ts +21 -0
  1278. package/dist/store/backup.d.ts.map +1 -0
  1279. package/dist/store/backup.js +94 -0
  1280. package/dist/store/backup.js.map +1 -0
  1281. package/dist/store/cache.d.ts +67 -0
  1282. package/dist/store/cache.d.ts.map +1 -0
  1283. package/dist/store/cache.js +168 -0
  1284. package/dist/store/cache.js.map +1 -0
  1285. package/dist/store/data-accessor.d.ts +77 -0
  1286. package/dist/store/data-accessor.d.ts.map +1 -0
  1287. package/dist/store/data-accessor.js +149 -0
  1288. package/dist/store/data-accessor.js.map +1 -0
  1289. package/dist/store/data-safety-central.d.ts +103 -0
  1290. package/dist/store/data-safety-central.d.ts.map +1 -0
  1291. package/dist/store/data-safety-central.js +291 -0
  1292. package/dist/store/data-safety-central.js.map +1 -0
  1293. package/dist/store/data-safety.d.ts +93 -0
  1294. package/dist/store/data-safety.d.ts.map +1 -0
  1295. package/dist/store/data-safety.js +298 -0
  1296. package/dist/store/data-safety.js.map +1 -0
  1297. package/dist/store/export.d.ts +87 -0
  1298. package/dist/store/export.d.ts.map +1 -0
  1299. package/dist/store/export.js +153 -0
  1300. package/dist/store/export.js.map +1 -0
  1301. package/dist/store/git-checkpoint.d.ts +65 -0
  1302. package/dist/store/git-checkpoint.d.ts.map +1 -0
  1303. package/dist/store/git-checkpoint.js +304 -0
  1304. package/dist/store/git-checkpoint.js.map +1 -0
  1305. package/dist/store/import-logging.d.ts +58 -0
  1306. package/dist/store/import-logging.d.ts.map +1 -0
  1307. package/dist/store/import-logging.js +139 -0
  1308. package/dist/store/import-logging.js.map +1 -0
  1309. package/dist/store/import-remap.d.ts +50 -0
  1310. package/dist/store/import-remap.d.ts.map +1 -0
  1311. package/dist/store/import-remap.js +145 -0
  1312. package/dist/store/import-remap.js.map +1 -0
  1313. package/dist/store/import-sort.d.ts +35 -0
  1314. package/dist/store/import-sort.d.ts.map +1 -0
  1315. package/dist/store/import-sort.js +123 -0
  1316. package/dist/store/import-sort.js.map +1 -0
  1317. package/dist/store/index.d.ts +28 -0
  1318. package/dist/store/index.d.ts.map +1 -0
  1319. package/dist/store/index.js +28 -0
  1320. package/dist/store/index.js.map +1 -0
  1321. package/dist/store/json-data-accessor.d.ts +16 -0
  1322. package/dist/store/json-data-accessor.d.ts.map +1 -0
  1323. package/dist/store/json-data-accessor.js +68 -0
  1324. package/dist/store/json-data-accessor.js.map +1 -0
  1325. package/dist/store/json-provider.d.ts +23 -0
  1326. package/dist/store/json-provider.d.ts.map +1 -0
  1327. package/dist/store/json-provider.js +263 -0
  1328. package/dist/store/json-provider.js.map +1 -0
  1329. package/dist/store/json.d.ts +57 -0
  1330. package/dist/store/json.d.ts.map +1 -0
  1331. package/dist/store/json.js +198 -0
  1332. package/dist/store/json.js.map +1 -0
  1333. package/dist/store/lock.d.ts +29 -0
  1334. package/dist/store/lock.d.ts.map +1 -0
  1335. package/dist/store/lock.js +70 -0
  1336. package/dist/store/lock.js.map +1 -0
  1337. package/dist/store/migration-sqlite.d.ts +68 -0
  1338. package/dist/store/migration-sqlite.d.ts.map +1 -0
  1339. package/dist/store/migration-sqlite.js +742 -0
  1340. package/dist/store/migration-sqlite.js.map +1 -0
  1341. package/dist/store/project-detect.d.ts +24 -0
  1342. package/dist/store/project-detect.d.ts.map +1 -0
  1343. package/dist/store/project-detect.js +93 -0
  1344. package/dist/store/project-detect.js.map +1 -0
  1345. package/dist/store/project-registry.d.ts +113 -0
  1346. package/dist/store/project-registry.d.ts.map +1 -0
  1347. package/dist/store/project-registry.js +194 -0
  1348. package/dist/store/project-registry.js.map +1 -0
  1349. package/dist/store/provider.d.ts +162 -0
  1350. package/dist/store/provider.d.ts.map +1 -0
  1351. package/dist/store/provider.js +319 -0
  1352. package/dist/store/provider.js.map +1 -0
  1353. package/dist/store/safety-data-accessor.d.ts +99 -0
  1354. package/dist/store/safety-data-accessor.d.ts.map +1 -0
  1355. package/dist/store/safety-data-accessor.js +167 -0
  1356. package/dist/store/safety-data-accessor.js.map +1 -0
  1357. package/dist/store/schema.d.ts +1094 -0
  1358. package/dist/store/schema.d.ts.map +1 -0
  1359. package/dist/store/schema.js +114 -0
  1360. package/dist/store/schema.js.map +1 -0
  1361. package/dist/store/session-store.d.ts +42 -0
  1362. package/dist/store/session-store.d.ts.map +1 -0
  1363. package/dist/store/session-store.js +227 -0
  1364. package/dist/store/session-store.js.map +1 -0
  1365. package/dist/store/sqlite-data-accessor.d.ts +24 -0
  1366. package/dist/store/sqlite-data-accessor.d.ts.map +1 -0
  1367. package/dist/store/sqlite-data-accessor.js +564 -0
  1368. package/dist/store/sqlite-data-accessor.js.map +1 -0
  1369. package/dist/store/sqlite.d.ts +51 -0
  1370. package/dist/store/sqlite.d.ts.map +1 -0
  1371. package/dist/store/sqlite.js +235 -0
  1372. package/dist/store/sqlite.js.map +1 -0
  1373. package/dist/store/task-store.d.ts +70 -0
  1374. package/dist/store/task-store.d.ts.map +1 -0
  1375. package/dist/store/task-store.js +401 -0
  1376. package/dist/store/task-store.js.map +1 -0
  1377. package/dist/types/config.d.ts +59 -0
  1378. package/dist/types/config.d.ts.map +1 -0
  1379. package/dist/types/config.js +8 -0
  1380. package/dist/types/config.js.map +1 -0
  1381. package/dist/types/exit-codes.d.ts +102 -0
  1382. package/dist/types/exit-codes.d.ts.map +1 -0
  1383. package/dist/types/exit-codes.js +150 -0
  1384. package/dist/types/exit-codes.js.map +1 -0
  1385. package/dist/types/index.d.ts +11 -0
  1386. package/dist/types/index.d.ts.map +1 -0
  1387. package/dist/types/index.js +11 -0
  1388. package/dist/types/index.js.map +1 -0
  1389. package/dist/types/lafs.d.ts +77 -0
  1390. package/dist/types/lafs.d.ts.map +1 -0
  1391. package/dist/types/lafs.js +28 -0
  1392. package/dist/types/lafs.js.map +1 -0
  1393. package/dist/types/operations/issues.d.ts +75 -0
  1394. package/dist/types/operations/issues.d.ts.map +1 -0
  1395. package/dist/types/operations/issues.js +10 -0
  1396. package/dist/types/operations/issues.js.map +1 -0
  1397. package/dist/types/operations/lifecycle.d.ts +140 -0
  1398. package/dist/types/operations/lifecycle.d.ts.map +1 -0
  1399. package/dist/types/operations/lifecycle.js +8 -0
  1400. package/dist/types/operations/lifecycle.js.map +1 -0
  1401. package/dist/types/operations/orchestrate.d.ts +187 -0
  1402. package/dist/types/operations/orchestrate.d.ts.map +1 -0
  1403. package/dist/types/operations/orchestrate.js +8 -0
  1404. package/dist/types/operations/orchestrate.js.map +1 -0
  1405. package/dist/types/operations/release.d.ts +97 -0
  1406. package/dist/types/operations/release.d.ts.map +1 -0
  1407. package/dist/types/operations/release.js +7 -0
  1408. package/dist/types/operations/release.js.map +1 -0
  1409. package/dist/types/operations/research.d.ts +122 -0
  1410. package/dist/types/operations/research.d.ts.map +1 -0
  1411. package/dist/types/operations/research.js +8 -0
  1412. package/dist/types/operations/research.js.map +1 -0
  1413. package/dist/types/operations/session.d.ts +93 -0
  1414. package/dist/types/operations/session.d.ts.map +1 -0
  1415. package/dist/types/operations/session.js +12 -0
  1416. package/dist/types/operations/session.js.map +1 -0
  1417. package/dist/types/operations/skills.d.ts +182 -0
  1418. package/dist/types/operations/skills.d.ts.map +1 -0
  1419. package/dist/types/operations/skills.js +10 -0
  1420. package/dist/types/operations/skills.js.map +1 -0
  1421. package/dist/types/operations/system.d.ts +147 -0
  1422. package/dist/types/operations/system.d.ts.map +1 -0
  1423. package/dist/types/operations/system.js +8 -0
  1424. package/dist/types/operations/system.js.map +1 -0
  1425. package/dist/types/operations/tasks.d.ts +219 -0
  1426. package/dist/types/operations/tasks.d.ts.map +1 -0
  1427. package/dist/types/operations/tasks.js +13 -0
  1428. package/dist/types/operations/tasks.js.map +1 -0
  1429. package/dist/types/operations/validate.d.ts +170 -0
  1430. package/dist/types/operations/validate.d.ts.map +1 -0
  1431. package/dist/types/operations/validate.js +8 -0
  1432. package/dist/types/operations/validate.js.map +1 -0
  1433. package/dist/types/session.d.ts +48 -0
  1434. package/dist/types/session.d.ts.map +1 -0
  1435. package/dist/types/session.js +8 -0
  1436. package/dist/types/session.js.map +1 -0
  1437. package/dist/types/task.d.ts +160 -0
  1438. package/dist/types/task.d.ts.map +1 -0
  1439. package/dist/types/task.js +7 -0
  1440. package/dist/types/task.js.map +1 -0
  1441. package/package.json +88 -0
  1442. package/schemas/agent-configs.schema.json +120 -0
  1443. package/schemas/agent-registry.json +243 -0
  1444. package/schemas/agent-registry.schema.json +132 -0
  1445. package/schemas/archive.schema.json +450 -0
  1446. package/schemas/claudedocs-frontmatter.schema.json +162 -0
  1447. package/schemas/commands-index.schema.json +158 -0
  1448. package/schemas/config.schema.json +2552 -0
  1449. package/schemas/context-state.schema.json +137 -0
  1450. package/schemas/contribution.schema.json +722 -0
  1451. package/schemas/critical-path.schema.json +246 -0
  1452. package/schemas/deps-cache.schema.json +97 -0
  1453. package/schemas/doctor-output.schema.json +283 -0
  1454. package/schemas/error.schema.json +161 -0
  1455. package/schemas/export-package.schema.json +375 -0
  1456. package/schemas/global-config.schema.json +219 -0
  1457. package/schemas/log.schema.json +250 -0
  1458. package/schemas/metrics.schema.json +328 -0
  1459. package/schemas/migrations.schema.json +150 -0
  1460. package/schemas/nexus-registry.schema.json +90 -0
  1461. package/schemas/output.schema.json +164 -0
  1462. package/schemas/project-context.schema.json +164 -0
  1463. package/schemas/project-info.schema.json +170 -0
  1464. package/schemas/projects-registry.schema.json +107 -0
  1465. package/schemas/rcsd-consensus-report.schema.json +491 -0
  1466. package/schemas/rcsd-hitl-resolution.schema.json +216 -0
  1467. package/schemas/rcsd-index.schema.json +384 -0
  1468. package/schemas/rcsd-manifest.schema.json +264 -0
  1469. package/schemas/rcsd-research-output.schema.json +564 -0
  1470. package/schemas/rcsd-spec-frontmatter.schema.json +225 -0
  1471. package/schemas/releases.schema.json +267 -0
  1472. package/schemas/research-manifest.schema.json +257 -0
  1473. package/schemas/sessions.schema.json +406 -0
  1474. package/schemas/skills-manifest.schema.json +91 -0
  1475. package/schemas/skillsmp.schema.json +208 -0
  1476. package/schemas/spec-index.schema.json +196 -0
  1477. package/schemas/todo.schema.json +994 -0
  1478. package/server.json +57 -0
  1479. package/skills/_shared/cleo-style-guide.md +84 -0
  1480. package/skills/_shared/manifest-operations.md +810 -0
  1481. package/skills/_shared/placeholders.json +433 -0
  1482. package/skills/_shared/skill-chaining-patterns.md +240 -0
  1483. package/skills/_shared/subagent-protocol-base.md +221 -0
  1484. package/skills/_shared/task-system-integration.md +232 -0
  1485. package/skills/_shared/testing-framework-config.md +110 -0
  1486. package/skills/agentskills-integrate.md +104 -0
  1487. package/skills/agentskills-specs.md +255 -0
  1488. package/skills/agentskills-what-are-skills.md +75 -0
  1489. package/skills/manifest.json +510 -0
  1490. package/templates/AGENT-INJECTION.md +166 -0
  1491. package/templates/CLEO-INJECTION.md +470 -0
  1492. package/templates/CONTRIBUTION-INJECTION.md +19 -0
  1493. package/templates/CONTRIBUTION-PROTOCOL.template.md +224 -0
  1494. package/templates/README.md +110 -0
  1495. package/templates/agent-registry.json +305 -0
  1496. package/templates/agents/BASE-SUBAGENT-PROTOCOL.md +115 -0
  1497. package/templates/agents/README.md +197 -0
  1498. package/templates/agents/cleo-subagent.md +147 -0
  1499. package/templates/archive.template.json +24 -0
  1500. package/templates/backups/archive/.gitkeep +0 -0
  1501. package/templates/backups/incremental/.gitkeep +0 -0
  1502. package/templates/backups/migration/.gitkeep +0 -0
  1503. package/templates/backups/safety/.gitkeep +0 -0
  1504. package/templates/backups/snapshot/.gitkeep +0 -0
  1505. package/templates/ci/circleci/config.yml +96 -0
  1506. package/templates/ci/github-actions/release.yml +91 -0
  1507. package/templates/ci/gitlab-ci/release.yml +61 -0
  1508. package/templates/cleo-gitignore +62 -0
  1509. package/templates/config.template.json +187 -0
  1510. package/templates/global-config.template.json +56 -0
  1511. package/templates/hooks/precompact-safestop.sh +89 -0
  1512. package/templates/log.template.json +13 -0
  1513. package/templates/migrations.template.json +8 -0
  1514. package/templates/orchestrator-protocol/PLACEHOLDER-REGISTRY.md +150 -0
  1515. package/templates/orchestrator-protocol/README.md +162 -0
  1516. package/templates/sessions.template.json +20 -0
  1517. package/templates/skillsmp.json.example +28 -0
  1518. package/templates/skillsmp.json.example.md +214 -0
  1519. package/templates/subagent-protocol/INJECT.md +32 -0
  1520. package/templates/subagent-protocol/MANIFEST.jsonl +0 -0
  1521. package/templates/subagent-protocol/README.md +76 -0
  1522. package/templates/subagent-protocol/SUBAGENT_PROTOCOL.md +135 -0
  1523. package/templates/subagent-protocol/install.sh +41 -0
  1524. package/templates/todo.template.json +68 -0
@@ -0,0 +1,1840 @@
1
+ /**
2
+ * Task Engine
3
+ *
4
+ * Native TypeScript implementation of core task CRUD operations.
5
+ * Uses StoreProvider (via getStore()) for task/session data access,
6
+ * falling back to direct JSON for config and specialized operations.
7
+ *
8
+ * Supports: show, get, list, find, exists, create/add, update, complete, delete, archive
9
+ *
10
+ * @task T4657
11
+ * @epic T4654
12
+ */
13
+ import { readJsonFile, readLogFileEntries, getDataPath } from './store.js';
14
+ import { getAccessor } from '../../store/data-accessor.js';
15
+ // validation-rules.js still used by other engines; core modules handle their own validation
16
+ // Core module imports for accessor-based operations
17
+ import { addTask as coreAddTask } from '../../core/tasks/add.js';
18
+ import { updateTask as coreUpdateTask } from '../../core/tasks/update.js';
19
+ import { deleteTask as coreDeleteTask } from '../../core/tasks/delete.js';
20
+ import { archiveTasks as coreArchiveTasks } from '../../core/tasks/archive.js';
21
+ import { showTask as coreShowTask } from '../../core/tasks/show.js';
22
+ import { listTasks as coreListTasks } from '../../core/tasks/list.js';
23
+ import { findTasks as coreFindTasks } from '../../core/tasks/find.js';
24
+ /**
25
+ * Read hierarchy limits from .cleo/config.json.
26
+ * Falls back to defaults if config is missing or unset.
27
+ */
28
+ function getHierarchyLimits(projectRoot) {
29
+ const configPath = getDataPath(projectRoot, 'config.json');
30
+ const config = readJsonFile(configPath);
31
+ let maxDepth = 3;
32
+ let maxSiblings = 7;
33
+ if (config) {
34
+ const hierarchy = config.hierarchy;
35
+ if (hierarchy) {
36
+ if (typeof hierarchy.maxDepth === 'number')
37
+ maxDepth = hierarchy.maxDepth;
38
+ if (typeof hierarchy.maxSiblings === 'number')
39
+ maxSiblings = hierarchy.maxSiblings;
40
+ }
41
+ }
42
+ return { maxDepth, maxSiblings };
43
+ }
44
+ /**
45
+ * Load all tasks via DataAccessor.
46
+ * Returns Task[] from the accessor abstraction layer.
47
+ *
48
+ * @task T4657
49
+ * @epic T4654
50
+ */
51
+ async function loadAllTasksAsync(projectRoot) {
52
+ const accessor = await getAccessor(projectRoot);
53
+ const data = await accessor.loadTodoFile();
54
+ return data.tasks;
55
+ }
56
+ /**
57
+ * Convert a core Task to a TaskRecord for backward compatibility.
58
+ * TaskRecord has string-typed status/priority; Task has union types.
59
+ *
60
+ * @task T4657
61
+ * @epic T4654
62
+ */
63
+ function taskToRecord(task) {
64
+ return task;
65
+ }
66
+ /**
67
+ * Convert an array of core Tasks to TaskRecords.
68
+ *
69
+ * @task T4657
70
+ * @epic T4654
71
+ */
72
+ function tasksToRecords(tasks) {
73
+ return tasks;
74
+ }
75
+ // loadTodoFile and saveTodoFile removed — all operations now use DataAccessor.
76
+ // Config reads (hierarchy limits, phase meta) still use readJsonFile directly
77
+ // since they are NOT domain data (they don't go through the accessor).
78
+ // Priority normalization moved to core/tasks/add.ts (normalizePriority)
79
+ // ===== Query Operations =====
80
+ /**
81
+ * Get a single task by ID
82
+ * @task T4657
83
+ * @epic T4654
84
+ */
85
+ export async function taskShow(projectRoot, taskId) {
86
+ try {
87
+ const accessor = await getAccessor(projectRoot);
88
+ const detail = await coreShowTask(taskId, projectRoot, accessor);
89
+ return { success: true, data: taskToRecord(detail) };
90
+ }
91
+ catch (err) {
92
+ const code = err?.code;
93
+ if (code === 5 /* NOT_FOUND */) {
94
+ return {
95
+ success: false,
96
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
97
+ };
98
+ }
99
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
100
+ }
101
+ }
102
+ /**
103
+ * List tasks with optional filters
104
+ * @task T4657
105
+ * @epic T4654
106
+ */
107
+ export async function taskList(projectRoot, params) {
108
+ try {
109
+ const accessor = await getAccessor(projectRoot);
110
+ const result = await coreListTasks({
111
+ parentId: params?.parent ?? undefined,
112
+ status: params?.status,
113
+ limit: params?.limit,
114
+ }, projectRoot, accessor);
115
+ return { success: true, data: tasksToRecords(result.tasks) };
116
+ }
117
+ catch {
118
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
119
+ }
120
+ }
121
+ /**
122
+ * Fuzzy search tasks by title/description/ID
123
+ * @task T4657
124
+ * @epic T4654
125
+ */
126
+ export async function taskFind(projectRoot, query, limit) {
127
+ try {
128
+ const accessor = await getAccessor(projectRoot);
129
+ const findResult = await coreFindTasks({
130
+ query,
131
+ limit: limit ?? 20,
132
+ }, projectRoot, accessor);
133
+ const results = findResult.results.map((r) => ({
134
+ id: r.id,
135
+ title: r.title,
136
+ status: r.status,
137
+ priority: r.priority,
138
+ parentId: r.parentId,
139
+ }));
140
+ return { success: true, data: results };
141
+ }
142
+ catch {
143
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
144
+ }
145
+ }
146
+ /**
147
+ * Check if a task exists
148
+ * @task T4657
149
+ * @epic T4654
150
+ */
151
+ export async function taskExists(projectRoot, taskId) {
152
+ try {
153
+ const accessor = await getAccessor(projectRoot);
154
+ const data = await accessor.loadTodoFile();
155
+ const exists = data.tasks.some((t) => t.id === taskId);
156
+ return { success: true, data: { exists, taskId } };
157
+ }
158
+ catch {
159
+ return { success: true, data: { exists: false, taskId } };
160
+ }
161
+ }
162
+ // ===== Mutate Operations =====
163
+ /**
164
+ * Create a new task
165
+ */
166
+ export async function taskCreate(projectRoot, params) {
167
+ try {
168
+ const accessor = await getAccessor(projectRoot);
169
+ const result = await coreAddTask({
170
+ title: params.title,
171
+ description: params.description,
172
+ parentId: params.parent || null,
173
+ depends: params.depends,
174
+ priority: params.priority || 'medium',
175
+ labels: params.labels,
176
+ type: params.type || undefined,
177
+ }, projectRoot, accessor);
178
+ if (result.duplicate) {
179
+ return {
180
+ success: true,
181
+ data: taskToRecord(result.task),
182
+ };
183
+ }
184
+ return { success: true, data: taskToRecord(result.task) };
185
+ }
186
+ catch (err) {
187
+ const cleoErr = err;
188
+ // Map CleoError exit codes to engine error codes
189
+ if (cleoErr.code === 7 /* PARENT_NOT_FOUND */) {
190
+ return { success: false, error: { code: 'E_PARENT_NOT_FOUND', message: cleoErr.message ?? 'Parent task not found' } };
191
+ }
192
+ if (cleoErr.code === 9 /* DEPTH_EXCEEDED */) {
193
+ return { success: false, error: { code: 'E_DEPTH_EXCEEDED', message: cleoErr.message ?? 'Max hierarchy depth exceeded' } };
194
+ }
195
+ if (cleoErr.code === 10 /* SIBLING_LIMIT */) {
196
+ return { success: false, error: { code: 'E_SIBLING_LIMIT', message: cleoErr.message ?? 'Max siblings exceeded' } };
197
+ }
198
+ if (cleoErr.code === 4 /* VALIDATION_ERROR */ || cleoErr.code === 3 /* INVALID_INPUT */) {
199
+ return { success: false, error: { code: 'E_VALIDATION_FAILED', message: cleoErr.message ?? 'Validation failed' } };
200
+ }
201
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: cleoErr.message ?? 'No valid todo.json found' } };
202
+ }
203
+ }
204
+ /**
205
+ * Update a task
206
+ */
207
+ export async function taskUpdate(projectRoot, taskId, updates) {
208
+ try {
209
+ const accessor = await getAccessor(projectRoot);
210
+ const result = await coreUpdateTask({
211
+ taskId,
212
+ title: updates.title,
213
+ description: updates.description,
214
+ status: updates.status,
215
+ priority: updates.priority,
216
+ notes: updates.notes,
217
+ labels: updates.labels,
218
+ addLabels: updates.addLabels,
219
+ removeLabels: updates.removeLabels,
220
+ depends: updates.depends,
221
+ addDepends: updates.addDepends,
222
+ removeDepends: updates.removeDepends,
223
+ acceptance: updates.acceptance,
224
+ parentId: updates.parent,
225
+ type: updates.type,
226
+ size: updates.size,
227
+ }, projectRoot, accessor);
228
+ return { success: true, data: taskToRecord(result.task) };
229
+ }
230
+ catch (err) {
231
+ const cleoErr = err;
232
+ if (cleoErr.code === 5 /* NOT_FOUND */) {
233
+ return { success: false, error: { code: 'E_NOT_FOUND', message: cleoErr.message ?? `Task '${taskId}' not found` } };
234
+ }
235
+ if (cleoErr.code === 4 /* VALIDATION_ERROR */ || cleoErr.code === 3 /* INVALID_INPUT */) {
236
+ return { success: false, error: { code: 'E_VALIDATION_FAILED', message: cleoErr.message ?? 'Validation failed' } };
237
+ }
238
+ if (cleoErr.code === 50 /* NO_CHANGE */) {
239
+ return { success: false, error: { code: 'E_NO_CHANGE', message: cleoErr.message ?? 'No changes specified' } };
240
+ }
241
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: cleoErr.message ?? 'No valid todo.json found' } };
242
+ }
243
+ }
244
+ /**
245
+ * Complete a task (set status to done)
246
+ */
247
+ export async function taskComplete(projectRoot, taskId, notes) {
248
+ return taskUpdate(projectRoot, taskId, {
249
+ status: 'done',
250
+ notes: notes || undefined,
251
+ });
252
+ }
253
+ /**
254
+ * Delete a task
255
+ */
256
+ export async function taskDelete(projectRoot, taskId, force) {
257
+ try {
258
+ const accessor = await getAccessor(projectRoot);
259
+ await coreDeleteTask({
260
+ taskId,
261
+ force: force ?? false,
262
+ cascade: force ?? false,
263
+ }, projectRoot, accessor);
264
+ return { success: true, data: { deleted: true, taskId } };
265
+ }
266
+ catch (err) {
267
+ const cleoErr = err;
268
+ if (cleoErr.code === 5 /* NOT_FOUND */) {
269
+ return { success: false, error: { code: 'E_NOT_FOUND', message: cleoErr.message ?? `Task '${taskId}' not found` } };
270
+ }
271
+ if (cleoErr.code === 11 /* HAS_CHILDREN */) {
272
+ return { success: false, error: { code: 'E_HAS_CHILDREN', message: cleoErr.message ?? `Task '${taskId}' has children` } };
273
+ }
274
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: cleoErr.message ?? 'No valid todo.json found' } };
275
+ }
276
+ }
277
+ /**
278
+ * Archive completed tasks.
279
+ * Moves done/cancelled tasks from todo.json to todo-archive.json.
280
+ */
281
+ export async function taskArchive(projectRoot, taskId, before) {
282
+ try {
283
+ const accessor = await getAccessor(projectRoot);
284
+ const result = await coreArchiveTasks({
285
+ taskIds: taskId ? [taskId] : undefined,
286
+ before,
287
+ }, projectRoot, accessor);
288
+ return {
289
+ success: true,
290
+ data: { archived: result.archived.length, taskIds: result.archived },
291
+ };
292
+ }
293
+ catch (err) {
294
+ const cleoErr = err;
295
+ if (cleoErr.code === 5 /* NOT_FOUND */) {
296
+ return { success: false, error: { code: 'E_NOT_FOUND', message: cleoErr.message ?? `Task not found` } };
297
+ }
298
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: cleoErr.message ?? 'No valid todo.json found' } };
299
+ }
300
+ }
301
+ // ===== Scoring & Analysis Operations =====
302
+ /**
303
+ * Priority score weights for task scoring
304
+ */
305
+ const PRIORITY_SCORE = {
306
+ critical: 100,
307
+ high: 75,
308
+ medium: 50,
309
+ low: 25,
310
+ };
311
+ /**
312
+ * Check if all dependencies of a task are satisfied (done/cancelled).
313
+ */
314
+ function depsReady(task, taskMap) {
315
+ if (!task.depends || task.depends.length === 0)
316
+ return true;
317
+ return task.depends.every((depId) => {
318
+ const dep = taskMap.get(depId);
319
+ return dep && (dep.status === 'done' || dep.status === 'cancelled');
320
+ });
321
+ }
322
+ /**
323
+ * Suggest next task to work on based on priority, phase alignment, age, and dependency readiness.
324
+ * @task T4657
325
+ * @epic T4654
326
+ */
327
+ export async function taskNext(projectRoot, params) {
328
+ let allTasks;
329
+ try {
330
+ const tasks = await loadAllTasksAsync(projectRoot);
331
+ allTasks = tasksToRecords(tasks);
332
+ }
333
+ catch {
334
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
335
+ }
336
+ const taskMap = new Map(allTasks.map((t) => [t.id, t]));
337
+ // Read current phase from config (not domain data - keep as direct JSON)
338
+ const todoPath = getDataPath(projectRoot, 'todo.json');
339
+ const todoMeta = readJsonFile(todoPath);
340
+ const currentPhase = todoMeta?.project?.currentPhase;
341
+ // Filter candidates: pending, deps ready
342
+ const candidates = allTasks.filter((t) => t.status === 'pending' && depsReady(t, taskMap));
343
+ if (candidates.length === 0) {
344
+ return {
345
+ success: true,
346
+ data: {
347
+ suggestions: [],
348
+ totalCandidates: 0,
349
+ },
350
+ };
351
+ }
352
+ // Score each candidate
353
+ const scored = candidates.map((task) => {
354
+ const reasons = [];
355
+ let score = 0;
356
+ // Priority score
357
+ score += PRIORITY_SCORE[task.priority] ?? 50;
358
+ reasons.push(`priority: ${task.priority} (+${PRIORITY_SCORE[task.priority] ?? 50})`);
359
+ // Phase alignment bonus
360
+ if (currentPhase && task.phase === currentPhase) {
361
+ score += 20;
362
+ reasons.push(`phase alignment: ${currentPhase} (+20)`);
363
+ }
364
+ // Dependencies ready bonus
365
+ if (depsReady(task, taskMap)) {
366
+ score += 10;
367
+ reasons.push('all dependencies satisfied (+10)');
368
+ }
369
+ // Age bonus (older tasks get slight priority)
370
+ if (task.createdAt) {
371
+ const ageMs = Date.now() - new Date(task.createdAt).getTime();
372
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
373
+ if (ageDays > 7) {
374
+ const ageBonus = Math.min(15, Math.floor(ageDays / 7));
375
+ score += ageBonus;
376
+ reasons.push(`age: ${Math.floor(ageDays)} days (+${ageBonus})`);
377
+ }
378
+ }
379
+ return { task, score, reasons };
380
+ }).sort((a, b) => b.score - a.score);
381
+ const count = Math.min(params?.count || 1, scored.length);
382
+ const explain = params?.explain ?? false;
383
+ const suggestions = scored.slice(0, count).map(({ task, score, reasons }) => ({
384
+ id: task.id,
385
+ title: task.title,
386
+ priority: task.priority,
387
+ phase: task.phase ?? null,
388
+ score,
389
+ ...(explain && { reasons }),
390
+ }));
391
+ return {
392
+ success: true,
393
+ data: {
394
+ suggestions,
395
+ totalCandidates: candidates.length,
396
+ },
397
+ };
398
+ }
399
+ // ===== Blocking Chain Operations =====
400
+ /**
401
+ * Build blocking chain for a task recursively.
402
+ */
403
+ function buildBlockingChain(task, taskMap, visited = new Set()) {
404
+ const chain = [];
405
+ if (visited.has(task.id))
406
+ return chain;
407
+ visited.add(task.id);
408
+ if (task.depends) {
409
+ for (const depId of task.depends) {
410
+ const dep = taskMap.get(depId);
411
+ if (dep && dep.status !== 'done' && dep.status !== 'cancelled') {
412
+ chain.push(depId);
413
+ chain.push(...buildBlockingChain(dep, taskMap, visited));
414
+ }
415
+ }
416
+ }
417
+ return chain;
418
+ }
419
+ /**
420
+ * Show blocked tasks and analyze blocking chains.
421
+ * @task T4657
422
+ * @epic T4654
423
+ */
424
+ export async function taskBlockers(projectRoot, params) {
425
+ let allTasks;
426
+ try {
427
+ const tasks = await loadAllTasksAsync(projectRoot);
428
+ allTasks = tasksToRecords(tasks);
429
+ }
430
+ catch {
431
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
432
+ }
433
+ const taskMap = new Map(allTasks.map((t) => [t.id, t]));
434
+ const analyze = params?.analyze ?? false;
435
+ // Find tasks with status 'blocked'
436
+ const blockedTasks = allTasks.filter((t) => t.status === 'blocked');
437
+ // Find pending tasks with unsatisfied dependencies
438
+ const depBlockedTasks = allTasks.filter((t) => t.status === 'pending' &&
439
+ t.depends &&
440
+ t.depends.length > 0 &&
441
+ t.depends.some((depId) => {
442
+ const dep = taskMap.get(depId);
443
+ return dep && dep.status !== 'done' && dep.status !== 'cancelled';
444
+ }));
445
+ const blockerInfos = [
446
+ ...blockedTasks.map((t) => ({
447
+ id: t.id,
448
+ title: t.title,
449
+ status: t.status,
450
+ depends: t.depends,
451
+ blockingChain: analyze ? buildBlockingChain(t, taskMap) : [],
452
+ })),
453
+ ...depBlockedTasks
454
+ .filter((t) => !blockedTasks.some((bt) => bt.id === t.id))
455
+ .map((t) => ({
456
+ id: t.id,
457
+ title: t.title,
458
+ status: t.status,
459
+ depends: t.depends,
460
+ blockingChain: analyze ? buildBlockingChain(t, taskMap) : [],
461
+ })),
462
+ ];
463
+ // Find critical blockers (tasks that block the most others)
464
+ const blockerCounts = new Map();
465
+ for (const info of blockerInfos) {
466
+ for (const depId of info.blockingChain) {
467
+ blockerCounts.set(depId, (blockerCounts.get(depId) ?? 0) + 1);
468
+ }
469
+ }
470
+ const criticalBlockers = [...blockerCounts.entries()]
471
+ .sort((a, b) => b[1] - a[1])
472
+ .slice(0, 5)
473
+ .map(([id, count]) => {
474
+ const task = taskMap.get(id);
475
+ return { id, title: task?.title ?? 'Unknown', blocksCount: count };
476
+ });
477
+ return {
478
+ success: true,
479
+ data: {
480
+ blockedTasks: blockerInfos,
481
+ criticalBlockers,
482
+ summary: blockerInfos.length === 0
483
+ ? 'No blocked tasks found'
484
+ : `${blockerInfos.length} blocked task(s)`,
485
+ },
486
+ };
487
+ }
488
+ /**
489
+ * Build a tree node recursively from a task
490
+ */
491
+ function buildTreeNode(task, childrenMap) {
492
+ const children = (childrenMap.get(task.id) ?? []).map((child) => buildTreeNode(child, childrenMap));
493
+ return {
494
+ id: task.id,
495
+ title: task.title,
496
+ status: task.status,
497
+ type: task.type,
498
+ children,
499
+ };
500
+ }
501
+ /**
502
+ * Build hierarchy tree. If taskId is provided, build subtree rooted at that task.
503
+ * Otherwise, build full tree from all root tasks.
504
+ * @task T4657
505
+ * @epic T4654
506
+ */
507
+ export async function taskTree(projectRoot, taskId) {
508
+ let allTasks;
509
+ try {
510
+ const tasks = await loadAllTasksAsync(projectRoot);
511
+ allTasks = tasksToRecords(tasks);
512
+ }
513
+ catch {
514
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
515
+ }
516
+ if (taskId) {
517
+ const task = allTasks.find((t) => t.id === taskId);
518
+ if (!task) {
519
+ return {
520
+ success: false,
521
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
522
+ };
523
+ }
524
+ }
525
+ // Build children lookup
526
+ const childrenMap = new Map();
527
+ for (const task of allTasks) {
528
+ const parentKey = task.parentId ?? '__root__';
529
+ if (!childrenMap.has(parentKey)) {
530
+ childrenMap.set(parentKey, []);
531
+ }
532
+ childrenMap.get(parentKey).push(task);
533
+ }
534
+ let roots;
535
+ if (taskId) {
536
+ const rootTask = allTasks.find((t) => t.id === taskId);
537
+ roots = [rootTask];
538
+ }
539
+ else {
540
+ roots = childrenMap.get('__root__') ?? [];
541
+ }
542
+ const tree = roots.map((root) => buildTreeNode(root, childrenMap));
543
+ // Count total nodes
544
+ function countNodes(nodes) {
545
+ let count = nodes.length;
546
+ for (const node of nodes) {
547
+ count += countNodes(node.children);
548
+ }
549
+ return count;
550
+ }
551
+ return {
552
+ success: true,
553
+ data: { tree, totalNodes: countNodes(tree) },
554
+ };
555
+ }
556
+ // ===== Dependency Operations =====
557
+ /**
558
+ * Show dependencies for a task - both what it depends on and what depends on it.
559
+ * @task T4657
560
+ * @epic T4654
561
+ */
562
+ export async function taskDeps(projectRoot, taskId) {
563
+ let allTasks;
564
+ try {
565
+ const tasks = await loadAllTasksAsync(projectRoot);
566
+ allTasks = tasksToRecords(tasks);
567
+ }
568
+ catch {
569
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
570
+ }
571
+ const task = allTasks.find((t) => t.id === taskId);
572
+ if (!task) {
573
+ return {
574
+ success: false,
575
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
576
+ };
577
+ }
578
+ const taskMap = new Map(allTasks.map((t) => [t.id, t]));
579
+ const completedIds = new Set(allTasks.filter((t) => t.status === 'done' || t.status === 'cancelled').map((t) => t.id));
580
+ // What this task depends on
581
+ const dependsOn = (task.depends ?? [])
582
+ .map((depId) => {
583
+ const dep = taskMap.get(depId);
584
+ return dep ? { id: dep.id, title: dep.title, status: dep.status } : null;
585
+ })
586
+ .filter((d) => d !== null);
587
+ // What depends on this task
588
+ const dependedOnBy = allTasks
589
+ .filter((t) => t.depends?.includes(taskId))
590
+ .map((t) => ({ id: t.id, title: t.title, status: t.status }));
591
+ // Unresolved deps
592
+ const unresolvedDeps = (task.depends ?? []).filter((depId) => !completedIds.has(depId));
593
+ return {
594
+ success: true,
595
+ data: {
596
+ taskId,
597
+ dependsOn,
598
+ dependedOnBy,
599
+ unresolvedDeps,
600
+ allDepsReady: unresolvedDeps.length === 0,
601
+ },
602
+ };
603
+ }
604
+ // ===== Relation Operations =====
605
+ /**
606
+ * Show task relations (existing relates entries).
607
+ * @task T4657
608
+ * @epic T4654
609
+ */
610
+ export async function taskRelates(projectRoot, taskId) {
611
+ let allTasks;
612
+ try {
613
+ const tasks = await loadAllTasksAsync(projectRoot);
614
+ allTasks = tasksToRecords(tasks);
615
+ }
616
+ catch {
617
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
618
+ }
619
+ const task = allTasks.find((t) => t.id === taskId);
620
+ if (!task) {
621
+ return {
622
+ success: false,
623
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
624
+ };
625
+ }
626
+ const relations = task.relates ?? [];
627
+ return {
628
+ success: true,
629
+ data: {
630
+ taskId,
631
+ relations,
632
+ count: relations.length,
633
+ },
634
+ };
635
+ }
636
+ /**
637
+ * Add a relation between two tasks.
638
+ */
639
+ export async function taskRelatesAdd(projectRoot, taskId, relatedId, type, reason) {
640
+ try {
641
+ const accessor = await getAccessor(projectRoot);
642
+ const current = await accessor.loadTodoFile();
643
+ if (!current || !current.tasks) {
644
+ return {
645
+ success: false,
646
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
647
+ };
648
+ }
649
+ const fromTask = current.tasks.find((t) => t.id === taskId);
650
+ if (!fromTask) {
651
+ return {
652
+ success: false,
653
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
654
+ };
655
+ }
656
+ const toTask = current.tasks.find((t) => t.id === relatedId);
657
+ if (!toTask) {
658
+ return {
659
+ success: false,
660
+ error: { code: 'E_NOT_FOUND', message: `Task '${relatedId}' not found` },
661
+ };
662
+ }
663
+ if (!fromTask.relates) {
664
+ fromTask.relates = [];
665
+ }
666
+ fromTask.relates.push({
667
+ taskId: relatedId,
668
+ type,
669
+ reason: reason || undefined,
670
+ });
671
+ fromTask.updatedAt = new Date().toISOString();
672
+ await accessor.saveTodoFile(current);
673
+ return {
674
+ success: true,
675
+ data: { from: taskId, to: relatedId, type, added: true },
676
+ };
677
+ }
678
+ catch {
679
+ return {
680
+ success: false,
681
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to update task relations' },
682
+ };
683
+ }
684
+ }
685
+ // ===== Analysis Operations =====
686
+ /**
687
+ * Analyze a task for description quality, missing fields, and dependency health.
688
+ * @task T4657
689
+ * @epic T4654
690
+ */
691
+ export async function taskAnalyze(projectRoot, taskId) {
692
+ let allTasks;
693
+ try {
694
+ const loaded = await loadAllTasksAsync(projectRoot);
695
+ allTasks = tasksToRecords(loaded);
696
+ }
697
+ catch {
698
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
699
+ }
700
+ const tasks = taskId
701
+ ? allTasks.filter((t) => t.id === taskId || t.parentId === taskId)
702
+ : allTasks;
703
+ // Build dependency graph: who blocks whom
704
+ const blocksMap = {};
705
+ for (const task of tasks) {
706
+ if (task.depends) {
707
+ for (const dep of task.depends) {
708
+ if (!blocksMap[dep])
709
+ blocksMap[dep] = [];
710
+ blocksMap[dep].push(task.id);
711
+ }
712
+ }
713
+ }
714
+ // Calculate leverage for each task
715
+ const leverageMap = {};
716
+ for (const task of tasks) {
717
+ leverageMap[task.id] = (blocksMap[task.id] ?? []).length;
718
+ }
719
+ // Actionable tasks (pending or active)
720
+ const actionable = tasks.filter((t) => t.status === 'pending' || t.status === 'active');
721
+ const blocked = tasks.filter((t) => t.status === 'blocked');
722
+ // Bottlenecks: tasks blocking the most others
723
+ const bottlenecks = tasks
724
+ .filter((t) => (blocksMap[t.id]?.length ?? 0) > 0 && t.status !== 'done')
725
+ .map((t) => ({ id: t.id, title: t.title, blocksCount: blocksMap[t.id].length }))
726
+ .sort((a, b) => b.blocksCount - a.blocksCount)
727
+ .slice(0, 5);
728
+ // Score and tier actionable tasks
729
+ const scored = actionable.map((t) => ({
730
+ id: t.id,
731
+ title: t.title,
732
+ leverage: leverageMap[t.id] ?? 0,
733
+ priority: t.priority,
734
+ }));
735
+ scored.sort((a, b) => {
736
+ const priorityWeight = { critical: 100, high: 50, medium: 20, low: 5 };
737
+ const aScore = (priorityWeight[a.priority ?? 'medium'] ?? 20) + a.leverage * 10;
738
+ const bScore = (priorityWeight[b.priority ?? 'medium'] ?? 20) + b.leverage * 10;
739
+ return bScore - aScore;
740
+ });
741
+ const critical = scored.filter((t) => t.priority === 'critical');
742
+ const high = scored.filter((t) => t.priority === 'high');
743
+ const normal = scored.filter((t) => t.priority !== 'critical' && t.priority !== 'high');
744
+ const recommended = scored.length > 0
745
+ ? {
746
+ id: scored[0].id,
747
+ title: scored[0].title,
748
+ leverage: scored[0].leverage,
749
+ reason: 'Highest combined priority and leverage score',
750
+ }
751
+ : null;
752
+ const totalLeverage = Object.values(leverageMap).reduce((s, v) => s + v, 0);
753
+ const avgLeverage = tasks.length > 0
754
+ ? Math.round((totalLeverage / tasks.length) * 100) / 100
755
+ : 0;
756
+ return {
757
+ success: true,
758
+ data: {
759
+ recommended,
760
+ bottlenecks,
761
+ tiers: {
762
+ critical: critical.map(({ id, title, leverage }) => ({ id, title, leverage })),
763
+ high: high.map(({ id, title, leverage }) => ({ id, title, leverage })),
764
+ normal: normal.slice(0, 10).map(({ id, title, leverage }) => ({ id, title, leverage })),
765
+ },
766
+ metrics: {
767
+ totalTasks: tasks.length,
768
+ actionable: actionable.length,
769
+ blocked: blocked.length,
770
+ avgLeverage,
771
+ },
772
+ },
773
+ };
774
+ }
775
+ // ===== Status Restoration Operations =====
776
+ /**
777
+ * Restore a cancelled task back to pending.
778
+ */
779
+ export async function taskRestore(projectRoot, taskId, params) {
780
+ try {
781
+ const accessor = await getAccessor(projectRoot);
782
+ const current = await accessor.loadTodoFile();
783
+ if (!current || !current.tasks) {
784
+ return {
785
+ success: false,
786
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
787
+ };
788
+ }
789
+ const task = current.tasks.find((t) => t.id === taskId);
790
+ if (!task) {
791
+ return {
792
+ success: false,
793
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
794
+ };
795
+ }
796
+ if (task.status !== 'cancelled') {
797
+ return {
798
+ success: false,
799
+ error: {
800
+ code: 'E_INVALID_STATUS',
801
+ message: `Task '${taskId}' is not cancelled (status: ${task.status}). Only cancelled tasks can be restored.`,
802
+ },
803
+ };
804
+ }
805
+ // Collect tasks to restore (cast to TaskRecord for mutation)
806
+ const tasksToRestore = [task];
807
+ if (params?.cascade) {
808
+ const findCancelledChildren = (parentId) => {
809
+ const children = current.tasks.filter((t) => t.parentId === parentId && t.status === 'cancelled');
810
+ for (const child of children) {
811
+ tasksToRestore.push(child);
812
+ findCancelledChildren(child.id);
813
+ }
814
+ };
815
+ findCancelledChildren(taskId);
816
+ }
817
+ const now = new Date().toISOString();
818
+ const restored = [];
819
+ for (const t of tasksToRestore) {
820
+ t.status = 'pending';
821
+ t.cancelledAt = null;
822
+ t.cancellationReason = undefined;
823
+ t.updatedAt = now;
824
+ if (!t.notes)
825
+ t.notes = [];
826
+ t.notes.push(`[${now}] Restored from cancelled${params?.notes ? ': ' + params.notes : ''}`);
827
+ restored.push(t.id);
828
+ }
829
+ await accessor.saveTodoFile(current);
830
+ return {
831
+ success: true,
832
+ data: { task: taskId, restored, count: restored.length },
833
+ };
834
+ }
835
+ catch {
836
+ return {
837
+ success: false,
838
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to restore task' },
839
+ };
840
+ }
841
+ }
842
+ /**
843
+ * Move an archived task back to todo.json with status 'done' (or specified status).
844
+ */
845
+ export async function taskUnarchive(projectRoot, taskId, params) {
846
+ try {
847
+ const accessor = await getAccessor(projectRoot);
848
+ const todo = await accessor.loadTodoFile();
849
+ if (!todo || !todo.tasks) {
850
+ return {
851
+ success: false,
852
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
853
+ };
854
+ }
855
+ const archive = await accessor.loadArchive();
856
+ if (!archive || !archive.archivedTasks) {
857
+ return {
858
+ success: false,
859
+ error: { code: 'E_NOT_FOUND', message: 'No archive file found' },
860
+ };
861
+ }
862
+ const taskIndex = archive.archivedTasks.findIndex((t) => t.id === taskId);
863
+ if (taskIndex === -1) {
864
+ return {
865
+ success: false,
866
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found in archive` },
867
+ };
868
+ }
869
+ // Check for ID collision
870
+ if (todo.tasks.some((t) => t.id === taskId)) {
871
+ return {
872
+ success: false,
873
+ error: { code: 'E_ID_COLLISION', message: `Task '${taskId}' already exists in todo.json` },
874
+ };
875
+ }
876
+ const task = archive.archivedTasks[taskIndex];
877
+ // Remove archive metadata
878
+ delete task._archive;
879
+ // Set status
880
+ if (!params?.preserveStatus) {
881
+ const targetStatus = params?.status || 'pending';
882
+ task.status = targetStatus;
883
+ if (targetStatus !== 'done') {
884
+ task.completedAt = null;
885
+ }
886
+ }
887
+ task.updatedAt = new Date().toISOString();
888
+ // Add to todo.json
889
+ todo.tasks.push(task);
890
+ // Remove from archive
891
+ archive.archivedTasks.splice(taskIndex, 1);
892
+ // Save both files via accessor
893
+ await accessor.saveTodoFile(todo);
894
+ await accessor.saveArchive(archive);
895
+ return {
896
+ success: true,
897
+ data: {
898
+ task: taskId,
899
+ unarchived: true,
900
+ title: task.title,
901
+ status: task.status,
902
+ },
903
+ };
904
+ }
905
+ catch {
906
+ return {
907
+ success: false,
908
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to unarchive task' },
909
+ };
910
+ }
911
+ }
912
+ // ===== Hierarchy Mutation Operations =====
913
+ /**
914
+ * Change task position within its sibling group.
915
+ */
916
+ export async function taskReorder(projectRoot, taskId, position) {
917
+ try {
918
+ const accessor = await getAccessor(projectRoot);
919
+ const current = await accessor.loadTodoFile();
920
+ if (!current || !current.tasks) {
921
+ return {
922
+ success: false,
923
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
924
+ };
925
+ }
926
+ const task = current.tasks.find((t) => t.id === taskId);
927
+ if (!task) {
928
+ return {
929
+ success: false,
930
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
931
+ };
932
+ }
933
+ // Get all siblings (same parent, including self), sorted by position
934
+ const allSiblings = current.tasks
935
+ .filter((t) => t.parentId === task.parentId)
936
+ .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
937
+ const currentIndex = allSiblings.findIndex((t) => t.id === taskId);
938
+ const newIndex = Math.max(0, Math.min(position - 1, allSiblings.length - 1));
939
+ // Remove from current position and insert at new position
940
+ allSiblings.splice(currentIndex, 1);
941
+ allSiblings.splice(newIndex, 0, task);
942
+ // Update positions on the actual tasks in current.tasks
943
+ const now = new Date().toISOString();
944
+ for (let i = 0; i < allSiblings.length; i++) {
945
+ const sibling = current.tasks.find((t) => t.id === allSiblings[i].id);
946
+ if (sibling) {
947
+ sibling.position = i + 1;
948
+ sibling.positionVersion = (sibling.positionVersion ?? 0) + 1;
949
+ sibling.updatedAt = now;
950
+ }
951
+ }
952
+ await accessor.saveTodoFile(current);
953
+ return {
954
+ success: true,
955
+ data: {
956
+ task: taskId,
957
+ reordered: true,
958
+ newPosition: newIndex + 1,
959
+ totalSiblings: allSiblings.length,
960
+ },
961
+ };
962
+ }
963
+ catch {
964
+ return {
965
+ success: false,
966
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to reorder task' },
967
+ };
968
+ }
969
+ }
970
+ /**
971
+ * Move task under a different parent.
972
+ * Pass null or empty string for newParentId to make it a root task.
973
+ */
974
+ export async function taskReparent(projectRoot, taskId, newParentId) {
975
+ try {
976
+ const accessor = await getAccessor(projectRoot);
977
+ const current = await accessor.loadTodoFile();
978
+ if (!current || !current.tasks) {
979
+ return {
980
+ success: false,
981
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
982
+ };
983
+ }
984
+ const taskMap = new Map(current.tasks.map((t) => [t.id, t]));
985
+ const task = taskMap.get(taskId);
986
+ if (!task) {
987
+ return {
988
+ success: false,
989
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
990
+ };
991
+ }
992
+ const effectiveParentId = newParentId || null;
993
+ // Promote to root
994
+ if (!effectiveParentId) {
995
+ const oldParent = task.parentId ?? null;
996
+ task.parentId = null;
997
+ if (task.type === 'subtask')
998
+ task.type = 'task';
999
+ task.updatedAt = new Date().toISOString();
1000
+ await accessor.saveTodoFile(current);
1001
+ return {
1002
+ success: true,
1003
+ data: {
1004
+ task: taskId,
1005
+ reparented: true,
1006
+ oldParent,
1007
+ newParent: null,
1008
+ newType: task.type,
1009
+ },
1010
+ };
1011
+ }
1012
+ const newParent = taskMap.get(effectiveParentId);
1013
+ if (!newParent) {
1014
+ return {
1015
+ success: false,
1016
+ error: { code: 'E_PARENT_NOT_FOUND', message: `Parent task '${effectiveParentId}' not found` },
1017
+ };
1018
+ }
1019
+ // Cannot parent under a subtask
1020
+ if (newParent.type === 'subtask') {
1021
+ return {
1022
+ success: false,
1023
+ error: { code: 'E_INVALID_PARENT_TYPE', message: `Cannot parent under subtask '${effectiveParentId}'` },
1024
+ };
1025
+ }
1026
+ // Check circular reference: walk newParent's ancestors to ensure taskId is not among them
1027
+ let ancestor = newParent;
1028
+ while (ancestor) {
1029
+ if (ancestor.id === taskId) {
1030
+ return {
1031
+ success: false,
1032
+ error: { code: 'E_CIRCULAR_REFERENCE', message: `Moving '${taskId}' under '${effectiveParentId}' would create circular reference` },
1033
+ };
1034
+ }
1035
+ if (!ancestor.parentId)
1036
+ break;
1037
+ ancestor = taskMap.get(ancestor.parentId);
1038
+ if (!ancestor)
1039
+ break;
1040
+ }
1041
+ // Check depth limit (max 3: epic -> task -> subtask)
1042
+ let parentDepth = 0;
1043
+ let cur = newParent;
1044
+ while (cur?.parentId) {
1045
+ parentDepth++;
1046
+ cur = taskMap.get(cur.parentId);
1047
+ if (!cur || parentDepth > 10)
1048
+ break;
1049
+ }
1050
+ const reparentLimits = getHierarchyLimits(projectRoot);
1051
+ if (parentDepth + 1 >= reparentLimits.maxDepth) {
1052
+ return {
1053
+ success: false,
1054
+ error: { code: 'E_DEPTH_EXCEEDED', message: `Move would exceed max depth of ${reparentLimits.maxDepth}` },
1055
+ };
1056
+ }
1057
+ // Check sibling limit
1058
+ const siblingCount = current.tasks.filter((t) => t.parentId === effectiveParentId && t.id !== taskId).length;
1059
+ if (siblingCount >= reparentLimits.maxSiblings) {
1060
+ return {
1061
+ success: false,
1062
+ error: { code: 'E_SIBLING_LIMIT', message: `Cannot add child to ${effectiveParentId}: max siblings (${reparentLimits.maxSiblings}) exceeded` },
1063
+ };
1064
+ }
1065
+ const oldParent = task.parentId ?? null;
1066
+ task.parentId = effectiveParentId;
1067
+ // Update type based on new depth
1068
+ const newDepth = parentDepth + 1;
1069
+ if (newDepth === 1)
1070
+ task.type = 'task';
1071
+ else if (newDepth >= 2)
1072
+ task.type = 'subtask';
1073
+ task.updatedAt = new Date().toISOString();
1074
+ await accessor.saveTodoFile(current);
1075
+ return {
1076
+ success: true,
1077
+ data: {
1078
+ task: taskId,
1079
+ reparented: true,
1080
+ oldParent,
1081
+ newParent: effectiveParentId,
1082
+ newType: task.type,
1083
+ },
1084
+ };
1085
+ }
1086
+ catch {
1087
+ return {
1088
+ success: false,
1089
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to reparent task' },
1090
+ };
1091
+ }
1092
+ }
1093
+ /**
1094
+ * Promote a subtask to task or task to root (remove parent).
1095
+ */
1096
+ export async function taskPromote(projectRoot, taskId) {
1097
+ try {
1098
+ const accessor = await getAccessor(projectRoot);
1099
+ const current = await accessor.loadTodoFile();
1100
+ if (!current || !current.tasks) {
1101
+ return {
1102
+ success: false,
1103
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
1104
+ };
1105
+ }
1106
+ const task = current.tasks.find((t) => t.id === taskId);
1107
+ if (!task) {
1108
+ return {
1109
+ success: false,
1110
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
1111
+ };
1112
+ }
1113
+ if (!task.parentId) {
1114
+ return {
1115
+ success: true,
1116
+ data: { task: taskId, promoted: false, previousParent: null, typeChanged: false },
1117
+ };
1118
+ }
1119
+ const oldParent = task.parentId;
1120
+ task.parentId = null;
1121
+ task.updatedAt = new Date().toISOString();
1122
+ let typeChanged = false;
1123
+ if (task.type === 'subtask') {
1124
+ task.type = 'task';
1125
+ typeChanged = true;
1126
+ }
1127
+ await accessor.saveTodoFile(current);
1128
+ return {
1129
+ success: true,
1130
+ data: { task: taskId, promoted: true, previousParent: oldParent, typeChanged },
1131
+ };
1132
+ }
1133
+ catch {
1134
+ return {
1135
+ success: false,
1136
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to promote task' },
1137
+ };
1138
+ }
1139
+ }
1140
+ /**
1141
+ * Reopen a completed task (set status back to pending).
1142
+ */
1143
+ export async function taskReopen(projectRoot, taskId, params) {
1144
+ try {
1145
+ const accessor = await getAccessor(projectRoot);
1146
+ const current = await accessor.loadTodoFile();
1147
+ if (!current || !current.tasks) {
1148
+ return {
1149
+ success: false,
1150
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
1151
+ };
1152
+ }
1153
+ const task = current.tasks.find((t) => t.id === taskId);
1154
+ if (!task) {
1155
+ return {
1156
+ success: false,
1157
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
1158
+ };
1159
+ }
1160
+ if (task.status !== 'done') {
1161
+ return {
1162
+ success: false,
1163
+ error: {
1164
+ code: 'E_INVALID_STATUS',
1165
+ message: `Task '${taskId}' is not completed (status: ${task.status}). Only done tasks can be reopened.`,
1166
+ },
1167
+ };
1168
+ }
1169
+ const targetStatus = params?.status || 'pending';
1170
+ if (targetStatus !== 'pending' && targetStatus !== 'active') {
1171
+ return {
1172
+ success: false,
1173
+ error: {
1174
+ code: 'E_INVALID_INPUT',
1175
+ message: `Invalid target status: ${targetStatus}. Must be 'pending' or 'active'.`,
1176
+ },
1177
+ };
1178
+ }
1179
+ const previousStatus = task.status;
1180
+ task.status = targetStatus;
1181
+ task.completedAt = null;
1182
+ task.updatedAt = new Date().toISOString();
1183
+ // Add note about reopening
1184
+ if (!task.notes)
1185
+ task.notes = [];
1186
+ const reason = params?.reason;
1187
+ task.notes.push(`[${task.updatedAt}] Reopened from ${previousStatus}${reason ? ': ' + reason : ''}`);
1188
+ await accessor.saveTodoFile(current);
1189
+ return {
1190
+ success: true,
1191
+ data: {
1192
+ task: taskId,
1193
+ reopened: true,
1194
+ previousStatus,
1195
+ newStatus: targetStatus,
1196
+ },
1197
+ };
1198
+ }
1199
+ catch {
1200
+ return {
1201
+ success: false,
1202
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to reopen task' },
1203
+ };
1204
+ }
1205
+ }
1206
+ /**
1207
+ * Walk the dependency chain recursively and return the maximum depth.
1208
+ */
1209
+ function measureDependencyDepth(taskId, taskMap, visited = new Set()) {
1210
+ if (visited.has(taskId))
1211
+ return 0;
1212
+ visited.add(taskId);
1213
+ const task = taskMap.get(taskId);
1214
+ if (!task || !task.depends || task.depends.length === 0)
1215
+ return 0;
1216
+ let maxDepth = 0;
1217
+ for (const depId of task.depends) {
1218
+ const depth = 1 + measureDependencyDepth(depId, taskMap, visited);
1219
+ if (depth > maxDepth)
1220
+ maxDepth = depth;
1221
+ }
1222
+ return maxDepth;
1223
+ }
1224
+ /**
1225
+ * Deterministic complexity scoring from task metadata.
1226
+ * NOT a time estimate. Produces a size classification (small/medium/large)
1227
+ * based on description length, acceptance criteria count, dependency depth,
1228
+ * subtask count, and file reference count.
1229
+ */
1230
+ /**
1231
+ * @task T4657
1232
+ * @epic T4654
1233
+ */
1234
+ export async function taskComplexityEstimate(projectRoot, params) {
1235
+ let allTasks;
1236
+ try {
1237
+ const loaded = await loadAllTasksAsync(projectRoot);
1238
+ allTasks = tasksToRecords(loaded);
1239
+ }
1240
+ catch {
1241
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1242
+ }
1243
+ const task = allTasks.find((t) => t.id === params.taskId);
1244
+ if (!task) {
1245
+ return {
1246
+ success: false,
1247
+ error: { code: 'E_NOT_FOUND', message: `Task '${params.taskId}' not found` },
1248
+ };
1249
+ }
1250
+ const factors = [];
1251
+ let score = 0;
1252
+ // Factor 1: Description length
1253
+ const descLen = (task.description || '').length;
1254
+ let descScore;
1255
+ let descLabel;
1256
+ if (descLen < 100) {
1257
+ descScore = 1;
1258
+ descLabel = 'short';
1259
+ }
1260
+ else if (descLen < 500) {
1261
+ descScore = 2;
1262
+ descLabel = 'medium';
1263
+ }
1264
+ else {
1265
+ descScore = 3;
1266
+ descLabel = 'long';
1267
+ }
1268
+ score += descScore;
1269
+ factors.push({ name: 'descriptionLength', value: descScore, detail: `${descLabel} (${descLen} chars)` });
1270
+ // Factor 2: Acceptance criteria count
1271
+ const acceptanceCount = task.acceptance?.length ?? 0;
1272
+ const acceptanceScore = Math.min(acceptanceCount, 3);
1273
+ score += acceptanceScore;
1274
+ factors.push({ name: 'acceptanceCriteria', value: acceptanceScore, detail: `${acceptanceCount} criteria` });
1275
+ // Factor 3: Dependency depth (recursive walk)
1276
+ const taskMap = new Map(allTasks.map((t) => [t.id, t]));
1277
+ const dependencyDepth = measureDependencyDepth(params.taskId, taskMap);
1278
+ const depthScore = Math.min(dependencyDepth, 3);
1279
+ score += depthScore;
1280
+ factors.push({ name: 'dependencyDepth', value: depthScore, detail: `depth ${dependencyDepth}` });
1281
+ // Factor 4: Subtask count (direct children)
1282
+ const subtaskCount = allTasks.filter((t) => t.parentId === params.taskId).length;
1283
+ const subtaskScore = Math.min(subtaskCount, 3);
1284
+ score += subtaskScore;
1285
+ factors.push({ name: 'subtaskCount', value: subtaskScore, detail: `${subtaskCount} subtasks` });
1286
+ // Factor 5: File reference count
1287
+ const fileCount = task.files?.length ?? 0;
1288
+ const fileScore = Math.min(fileCount, 3);
1289
+ score += fileScore;
1290
+ factors.push({ name: 'fileReferences', value: fileScore, detail: `${fileCount} files` });
1291
+ // Size classification
1292
+ let size;
1293
+ if (score <= 3) {
1294
+ size = 'small';
1295
+ }
1296
+ else if (score <= 7) {
1297
+ size = 'medium';
1298
+ }
1299
+ else {
1300
+ size = 'large';
1301
+ }
1302
+ return {
1303
+ success: true,
1304
+ data: {
1305
+ size,
1306
+ score,
1307
+ factors,
1308
+ dependencyDepth,
1309
+ subtaskCount,
1310
+ fileCount,
1311
+ },
1312
+ };
1313
+ }
1314
+ // ===== Dependency Query Operations =====
1315
+ /**
1316
+ * List dependencies for a task in a given direction.
1317
+ * 'upstream' = what this task depends on
1318
+ * 'downstream' = what depends on this task
1319
+ * 'both' = both directions
1320
+ */
1321
+ /**
1322
+ * @task T4657
1323
+ * @epic T4654
1324
+ */
1325
+ export async function taskDepends(projectRoot, taskId, direction = 'both') {
1326
+ let allTasks;
1327
+ try {
1328
+ const loaded = await loadAllTasksAsync(projectRoot);
1329
+ allTasks = tasksToRecords(loaded);
1330
+ }
1331
+ catch {
1332
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1333
+ }
1334
+ const task = allTasks.find((t) => t.id === taskId);
1335
+ if (!task) {
1336
+ return {
1337
+ success: false,
1338
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
1339
+ };
1340
+ }
1341
+ const taskMap = new Map(allTasks.map((t) => [t.id, t]));
1342
+ // Upstream: tasks this task depends on
1343
+ const upstream = [];
1344
+ if (direction === 'upstream' || direction === 'both') {
1345
+ for (const depId of task.depends ?? []) {
1346
+ const dep = taskMap.get(depId);
1347
+ if (dep) {
1348
+ upstream.push({ id: dep.id, title: dep.title, status: dep.status });
1349
+ }
1350
+ }
1351
+ }
1352
+ // Downstream: tasks that depend on this task
1353
+ const downstream = [];
1354
+ if (direction === 'downstream' || direction === 'both') {
1355
+ for (const t of allTasks) {
1356
+ if (t.depends?.includes(taskId)) {
1357
+ downstream.push({ id: t.id, title: t.title, status: t.status });
1358
+ }
1359
+ }
1360
+ }
1361
+ return {
1362
+ success: true,
1363
+ data: { taskId, direction, upstream, downstream },
1364
+ };
1365
+ }
1366
+ // ===== Statistics Operations =====
1367
+ /**
1368
+ * Compute task statistics, optionally scoped to an epic.
1369
+ */
1370
+ /**
1371
+ * @task T4657
1372
+ * @epic T4654
1373
+ */
1374
+ export async function taskStats(projectRoot, epicId) {
1375
+ let allTasks;
1376
+ try {
1377
+ const loaded = await loadAllTasksAsync(projectRoot);
1378
+ allTasks = tasksToRecords(loaded);
1379
+ }
1380
+ catch {
1381
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1382
+ }
1383
+ let tasks = allTasks;
1384
+ // Scope to epic if provided
1385
+ if (epicId) {
1386
+ const epicIds = new Set();
1387
+ epicIds.add(epicId);
1388
+ // Collect all descendants
1389
+ const collectChildren = (parentId) => {
1390
+ for (const t of allTasks) {
1391
+ if (t.parentId === parentId && !epicIds.has(t.id)) {
1392
+ epicIds.add(t.id);
1393
+ collectChildren(t.id);
1394
+ }
1395
+ }
1396
+ };
1397
+ collectChildren(epicId);
1398
+ tasks = allTasks.filter((t) => epicIds.has(t.id));
1399
+ }
1400
+ const byStatus = {};
1401
+ const byPriority = {};
1402
+ const byType = {};
1403
+ for (const task of tasks) {
1404
+ byStatus[task.status] = (byStatus[task.status] ?? 0) + 1;
1405
+ byPriority[task.priority] = (byPriority[task.priority] ?? 0) + 1;
1406
+ const taskType = task.type ?? 'task';
1407
+ byType[taskType] = (byType[taskType] ?? 0) + 1;
1408
+ }
1409
+ return {
1410
+ success: true,
1411
+ data: {
1412
+ total: tasks.length,
1413
+ pending: byStatus['pending'] ?? 0,
1414
+ active: byStatus['active'] ?? 0,
1415
+ blocked: byStatus['blocked'] ?? 0,
1416
+ done: byStatus['done'] ?? 0,
1417
+ cancelled: byStatus['cancelled'] ?? 0,
1418
+ byPriority,
1419
+ byType,
1420
+ },
1421
+ };
1422
+ }
1423
+ // ===== Export Operations =====
1424
+ /**
1425
+ * Export tasks as JSON or CSV.
1426
+ */
1427
+ /**
1428
+ * @task T4657
1429
+ * @epic T4654
1430
+ */
1431
+ export async function taskExport(projectRoot, params) {
1432
+ let allTasks;
1433
+ try {
1434
+ const loaded = await loadAllTasksAsync(projectRoot);
1435
+ allTasks = tasksToRecords(loaded);
1436
+ }
1437
+ catch {
1438
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1439
+ }
1440
+ let tasks = allTasks;
1441
+ if (params?.status) {
1442
+ tasks = tasks.filter((t) => t.status === params.status);
1443
+ }
1444
+ if (params?.parent) {
1445
+ // Collect parent + all descendants
1446
+ const parentIds = new Set();
1447
+ parentIds.add(params.parent);
1448
+ const collectChildren = (parentId) => {
1449
+ for (const t of allTasks) {
1450
+ if (t.parentId === parentId && !parentIds.has(t.id)) {
1451
+ parentIds.add(t.id);
1452
+ collectChildren(t.id);
1453
+ }
1454
+ }
1455
+ };
1456
+ collectChildren(params.parent);
1457
+ tasks = tasks.filter((t) => parentIds.has(t.id));
1458
+ }
1459
+ if (params?.format === 'csv') {
1460
+ // Build CSV output
1461
+ const headers = ['id', 'title', 'status', 'priority', 'type', 'parentId', 'createdAt'];
1462
+ const rows = tasks.map((t) => [
1463
+ t.id,
1464
+ `"${(t.title || '').replace(/"/g, '""')}"`,
1465
+ t.status,
1466
+ t.priority,
1467
+ t.type ?? 'task',
1468
+ t.parentId ?? '',
1469
+ t.createdAt,
1470
+ ].join(','));
1471
+ const csv = [headers.join(','), ...rows].join('\n');
1472
+ return { success: true, data: { format: 'csv', content: csv, taskCount: tasks.length } };
1473
+ }
1474
+ // Default: JSON format
1475
+ return {
1476
+ success: true,
1477
+ data: {
1478
+ format: 'json',
1479
+ tasks,
1480
+ taskCount: tasks.length,
1481
+ },
1482
+ };
1483
+ }
1484
+ // ===== History Operations =====
1485
+ /**
1486
+ * Get task history from the log file.
1487
+ */
1488
+ /**
1489
+ * @task T4657
1490
+ * @epic T4654
1491
+ */
1492
+ export async function taskHistory(projectRoot, taskId, limit) {
1493
+ const logPath = getDataPath(projectRoot, 'todo-log.jsonl');
1494
+ const entries = readLogFileEntries(logPath);
1495
+ // Filter entries that reference this task
1496
+ const taskEntries = entries.filter((entry) => {
1497
+ // Check multiple fields where task ID might appear
1498
+ if (entry.taskId === taskId)
1499
+ return true;
1500
+ if (entry.id === taskId)
1501
+ return true;
1502
+ if (typeof entry.details === 'string' && entry.details.includes(taskId))
1503
+ return true;
1504
+ if (typeof entry.message === 'string' && entry.message.includes(taskId))
1505
+ return true;
1506
+ return false;
1507
+ });
1508
+ // Sort by timestamp descending (most recent first)
1509
+ taskEntries.sort((a, b) => {
1510
+ const timeA = String(a.timestamp ?? a.date ?? '');
1511
+ const timeB = String(b.timestamp ?? b.date ?? '');
1512
+ return timeB.localeCompare(timeA);
1513
+ });
1514
+ const result = limit && limit > 0 ? taskEntries.slice(0, limit) : taskEntries;
1515
+ return { success: true, data: result };
1516
+ }
1517
+ // ===== Lint Operations =====
1518
+ /**
1519
+ * Lint tasks for common issues.
1520
+ */
1521
+ /**
1522
+ * @task T4657
1523
+ * @epic T4654
1524
+ */
1525
+ export async function taskLint(projectRoot, taskId) {
1526
+ let allTasks;
1527
+ try {
1528
+ const loaded = await loadAllTasksAsync(projectRoot);
1529
+ allTasks = tasksToRecords(loaded);
1530
+ }
1531
+ catch {
1532
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1533
+ }
1534
+ const tasks = taskId
1535
+ ? allTasks.filter((t) => t.id === taskId)
1536
+ : allTasks;
1537
+ if (taskId && tasks.length === 0) {
1538
+ return {
1539
+ success: false,
1540
+ error: { code: 'E_NOT_FOUND', message: `Task '${taskId}' not found` },
1541
+ };
1542
+ }
1543
+ const issues = [];
1544
+ const allDescriptions = new Set();
1545
+ const allIds = new Set();
1546
+ for (const task of allTasks) {
1547
+ // Check ID uniqueness
1548
+ if (allIds.has(task.id)) {
1549
+ issues.push({
1550
+ taskId: task.id,
1551
+ severity: 'error',
1552
+ rule: 'unique-id',
1553
+ message: `Duplicate task ID: ${task.id}`,
1554
+ });
1555
+ }
1556
+ allIds.add(task.id);
1557
+ // Only lint targeted tasks
1558
+ if (taskId && task.id !== taskId) {
1559
+ if (task.description)
1560
+ allDescriptions.add(task.description.toLowerCase());
1561
+ continue;
1562
+ }
1563
+ // Check title present
1564
+ if (!task.title || task.title.trim().length === 0) {
1565
+ issues.push({
1566
+ taskId: task.id,
1567
+ severity: 'error',
1568
+ rule: 'title-required',
1569
+ message: 'Task is missing a title',
1570
+ });
1571
+ }
1572
+ // Check description present
1573
+ if (!task.description || task.description.trim().length === 0) {
1574
+ issues.push({
1575
+ taskId: task.id,
1576
+ severity: 'warning',
1577
+ rule: 'description-required',
1578
+ message: 'Task is missing a description',
1579
+ });
1580
+ }
1581
+ // Check title != description
1582
+ if (task.title && task.description && task.title.trim() === task.description.trim()) {
1583
+ issues.push({
1584
+ taskId: task.id,
1585
+ severity: 'warning',
1586
+ rule: 'title-description-different',
1587
+ message: 'Title and description should not be identical',
1588
+ });
1589
+ }
1590
+ // Check duplicate descriptions
1591
+ if (task.description) {
1592
+ const descLower = task.description.toLowerCase();
1593
+ if (allDescriptions.has(descLower)) {
1594
+ issues.push({
1595
+ taskId: task.id,
1596
+ severity: 'warning',
1597
+ rule: 'unique-description',
1598
+ message: 'Duplicate task description found',
1599
+ });
1600
+ }
1601
+ allDescriptions.add(descLower);
1602
+ }
1603
+ // Check valid status
1604
+ const validStatuses = ['pending', 'active', 'blocked', 'done', 'cancelled'];
1605
+ if (!validStatuses.includes(task.status)) {
1606
+ issues.push({
1607
+ taskId: task.id,
1608
+ severity: 'error',
1609
+ rule: 'valid-status',
1610
+ message: `Invalid status: ${task.status}`,
1611
+ });
1612
+ }
1613
+ // Check future timestamps
1614
+ const now = new Date();
1615
+ if (task.createdAt && new Date(task.createdAt) > now) {
1616
+ issues.push({
1617
+ taskId: task.id,
1618
+ severity: 'warning',
1619
+ rule: 'no-future-timestamps',
1620
+ message: 'createdAt is in the future',
1621
+ });
1622
+ }
1623
+ // Check orphaned parent references
1624
+ if (task.parentId && !allTasks.some((t) => t.id === task.parentId)) {
1625
+ issues.push({
1626
+ taskId: task.id,
1627
+ severity: 'error',
1628
+ rule: 'valid-parent',
1629
+ message: `Parent task '${task.parentId}' does not exist`,
1630
+ });
1631
+ }
1632
+ // Check orphaned dependency references
1633
+ for (const depId of task.depends ?? []) {
1634
+ if (!allTasks.some((t) => t.id === depId)) {
1635
+ issues.push({
1636
+ taskId: task.id,
1637
+ severity: 'warning',
1638
+ rule: 'valid-dependency',
1639
+ message: `Dependency '${depId}' does not exist`,
1640
+ });
1641
+ }
1642
+ }
1643
+ }
1644
+ return { success: true, data: issues };
1645
+ }
1646
+ // ===== Batch Validate Operations =====
1647
+ /**
1648
+ * Validate multiple tasks at once.
1649
+ */
1650
+ /**
1651
+ * @task T4657
1652
+ * @epic T4654
1653
+ */
1654
+ export async function taskBatchValidate(projectRoot, taskIds, checkMode = 'full') {
1655
+ let allTasks;
1656
+ try {
1657
+ const loaded = await loadAllTasksAsync(projectRoot);
1658
+ allTasks = tasksToRecords(loaded);
1659
+ }
1660
+ catch {
1661
+ return { success: false, error: { code: 'E_NOT_INITIALIZED', message: 'No todo.json found' } };
1662
+ }
1663
+ const results = {};
1664
+ let totalErrors = 0;
1665
+ let totalWarnings = 0;
1666
+ for (const id of taskIds) {
1667
+ const task = allTasks.find((t) => t.id === id);
1668
+ if (!task) {
1669
+ results[id] = [{ severity: 'error', rule: 'exists', message: `Task '${id}' not found` }];
1670
+ totalErrors++;
1671
+ continue;
1672
+ }
1673
+ const taskIssues = [];
1674
+ // Quick mode: basic checks
1675
+ if (!task.title || task.title.trim().length === 0) {
1676
+ taskIssues.push({ severity: 'error', rule: 'title-required', message: 'Missing title' });
1677
+ }
1678
+ if (!task.description || task.description.trim().length === 0) {
1679
+ taskIssues.push({ severity: 'warning', rule: 'description-required', message: 'Missing description' });
1680
+ }
1681
+ const validStatuses = ['pending', 'active', 'blocked', 'done', 'cancelled'];
1682
+ if (!validStatuses.includes(task.status)) {
1683
+ taskIssues.push({ severity: 'error', rule: 'valid-status', message: `Invalid status: ${task.status}` });
1684
+ }
1685
+ // Full mode: additional checks
1686
+ if (checkMode === 'full') {
1687
+ if (task.title && task.description && task.title.trim() === task.description.trim()) {
1688
+ taskIssues.push({ severity: 'warning', rule: 'title-description-different', message: 'Title equals description' });
1689
+ }
1690
+ if (task.parentId && !allTasks.some((t) => t.id === task.parentId)) {
1691
+ taskIssues.push({ severity: 'error', rule: 'valid-parent', message: `Parent '${task.parentId}' not found` });
1692
+ }
1693
+ for (const depId of task.depends ?? []) {
1694
+ if (!allTasks.some((t) => t.id === depId)) {
1695
+ taskIssues.push({ severity: 'warning', rule: 'valid-dependency', message: `Dependency '${depId}' not found` });
1696
+ }
1697
+ }
1698
+ const now = new Date();
1699
+ if (task.createdAt && new Date(task.createdAt) > now) {
1700
+ taskIssues.push({ severity: 'warning', rule: 'no-future-timestamps', message: 'createdAt in future' });
1701
+ }
1702
+ }
1703
+ results[id] = taskIssues;
1704
+ totalErrors += taskIssues.filter((i) => i.severity === 'error').length;
1705
+ totalWarnings += taskIssues.filter((i) => i.severity === 'warning').length;
1706
+ }
1707
+ const invalidTasks = Object.values(results).filter((issues) => issues.some((i) => i.severity === 'error')).length;
1708
+ return {
1709
+ success: true,
1710
+ data: {
1711
+ results,
1712
+ summary: {
1713
+ totalTasks: taskIds.length,
1714
+ validTasks: taskIds.length - invalidTasks,
1715
+ invalidTasks,
1716
+ totalIssues: totalErrors + totalWarnings,
1717
+ errors: totalErrors,
1718
+ warnings: totalWarnings,
1719
+ },
1720
+ },
1721
+ };
1722
+ }
1723
+ // ===== Import Operations =====
1724
+ /**
1725
+ * Import tasks from a JSON source string or export package.
1726
+ */
1727
+ export async function taskImport(projectRoot, source, overwrite) {
1728
+ try {
1729
+ const accessor = await getAccessor(projectRoot);
1730
+ const current = await accessor.loadTodoFile();
1731
+ if (!current || !current.tasks) {
1732
+ return {
1733
+ success: false,
1734
+ error: { code: 'E_NOT_INITIALIZED', message: 'No valid todo.json found' },
1735
+ };
1736
+ }
1737
+ // Parse the source JSON
1738
+ let importData;
1739
+ try {
1740
+ importData = JSON.parse(source);
1741
+ }
1742
+ catch {
1743
+ return {
1744
+ success: false,
1745
+ error: { code: 'E_INVALID_INPUT', message: 'Invalid JSON in import source' },
1746
+ };
1747
+ }
1748
+ // Extract tasks from various formats
1749
+ let importTasks = [];
1750
+ if (Array.isArray(importData)) {
1751
+ importTasks = importData;
1752
+ }
1753
+ else if (typeof importData === 'object' && importData !== null) {
1754
+ const data = importData;
1755
+ if (Array.isArray(data.tasks)) {
1756
+ importTasks = data.tasks;
1757
+ }
1758
+ else if (data._meta && Array.isArray(data.tasks)) {
1759
+ // Export package format
1760
+ importTasks = data.tasks;
1761
+ }
1762
+ }
1763
+ if (importTasks.length === 0) {
1764
+ return {
1765
+ success: true,
1766
+ data: { imported: 0, skipped: 0, errors: ['No tasks found in import source'] },
1767
+ };
1768
+ }
1769
+ const existingIds = new Set(current.tasks.map((t) => t.id));
1770
+ const allIds = new Set(current.tasks.map((t) => t.id));
1771
+ const errors = [];
1772
+ let imported = 0;
1773
+ let skipped = 0;
1774
+ const remapTable = {};
1775
+ // Generate new IDs for imported tasks
1776
+ let nextIdNum = 0;
1777
+ for (const t of current.tasks) {
1778
+ const num = parseInt(t.id.replace('T', ''), 10);
1779
+ if (!isNaN(num) && num > nextIdNum)
1780
+ nextIdNum = num;
1781
+ }
1782
+ const tasksList = current.tasks;
1783
+ for (const importTask of importTasks) {
1784
+ if (!importTask.id || !importTask.title) {
1785
+ errors.push(`Skipped task with missing id or title`);
1786
+ skipped++;
1787
+ continue;
1788
+ }
1789
+ if (existingIds.has(importTask.id) && !overwrite) {
1790
+ skipped++;
1791
+ continue;
1792
+ }
1793
+ // Generate new ID if collision
1794
+ let newId = importTask.id;
1795
+ if (allIds.has(importTask.id) && !overwrite) {
1796
+ nextIdNum++;
1797
+ newId = `T${String(nextIdNum).padStart(3, '0')}`;
1798
+ remapTable[importTask.id] = newId;
1799
+ }
1800
+ const now = new Date().toISOString();
1801
+ const newTask = {
1802
+ ...importTask,
1803
+ id: newId,
1804
+ createdAt: importTask.createdAt || now,
1805
+ updatedAt: now,
1806
+ };
1807
+ if (overwrite && existingIds.has(importTask.id)) {
1808
+ // Replace existing
1809
+ const idx = tasksList.findIndex((t) => t.id === importTask.id);
1810
+ if (idx !== -1) {
1811
+ tasksList[idx] = newTask;
1812
+ }
1813
+ }
1814
+ else {
1815
+ tasksList.push(newTask);
1816
+ }
1817
+ allIds.add(newId);
1818
+ imported++;
1819
+ }
1820
+ if (imported > 0) {
1821
+ await accessor.saveTodoFile(current);
1822
+ }
1823
+ return {
1824
+ success: true,
1825
+ data: {
1826
+ imported,
1827
+ skipped,
1828
+ errors,
1829
+ ...(Object.keys(remapTable).length > 0 ? { remapTable } : {}),
1830
+ },
1831
+ };
1832
+ }
1833
+ catch {
1834
+ return {
1835
+ success: false,
1836
+ error: { code: 'E_NOT_INITIALIZED', message: 'Failed to import tasks' },
1837
+ };
1838
+ }
1839
+ }
1840
+ //# sourceMappingURL=task-engine.js.map