@cleocode/core 2026.3.74 → 2026.3.76

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 (1087) hide show
  1. package/README.md +1 -1
  2. package/dist/cant/approval.d.ts +110 -0
  3. package/dist/cant/approval.d.ts.map +1 -0
  4. package/dist/cant/context-builder.d.ts +79 -0
  5. package/dist/cant/context-builder.d.ts.map +1 -0
  6. package/dist/cant/discretion.d.ts +95 -0
  7. package/dist/cant/discretion.d.ts.map +1 -0
  8. package/dist/cant/index.d.ts +25 -0
  9. package/dist/cant/index.d.ts.map +1 -0
  10. package/dist/cant/parallel-runner.d.ts +38 -0
  11. package/dist/cant/parallel-runner.d.ts.map +1 -0
  12. package/dist/cant/types.d.ts +127 -0
  13. package/dist/cant/types.d.ts.map +1 -0
  14. package/dist/cant/workflow-executor.d.ts +105 -0
  15. package/dist/cant/workflow-executor.d.ts.map +1 -0
  16. package/dist/conduit/conduit-client.d.ts +26 -0
  17. package/dist/conduit/conduit-client.d.ts.map +1 -0
  18. package/dist/conduit/factory.d.ts +13 -0
  19. package/dist/conduit/factory.d.ts.map +1 -0
  20. package/dist/conduit/http-transport.d.ts +32 -0
  21. package/dist/conduit/http-transport.d.ts.map +1 -0
  22. package/dist/conduit/index.d.ts +12 -0
  23. package/dist/conduit/index.d.ts.map +1 -0
  24. package/dist/crypto/credentials.d.ts +40 -0
  25. package/dist/crypto/credentials.d.ts.map +1 -0
  26. package/dist/engine-result.d.ts +1 -1
  27. package/dist/engine-result.d.ts.map +1 -1
  28. package/dist/error-catalog.d.ts +1 -1
  29. package/dist/error-catalog.d.ts.map +1 -1
  30. package/dist/error-registry.d.ts +1 -1
  31. package/dist/error-registry.d.ts.map +1 -1
  32. package/dist/errors.d.ts +1 -1
  33. package/dist/errors.d.ts.map +1 -1
  34. package/dist/hooks/handlers/agent-hooks.d.ts.map +1 -1
  35. package/dist/hooks/handlers/context-hooks.d.ts.map +1 -1
  36. package/dist/hooks/handlers/error-hooks.d.ts +14 -5
  37. package/dist/hooks/handlers/error-hooks.d.ts.map +1 -1
  38. package/dist/hooks/handlers/file-hooks.d.ts.map +1 -1
  39. package/dist/hooks/handlers/handler-helpers.d.ts +41 -0
  40. package/dist/hooks/handlers/handler-helpers.d.ts.map +1 -0
  41. package/dist/hooks/handlers/mcp-hooks.d.ts.map +1 -1
  42. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  43. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  44. package/dist/hooks/handlers/work-capture-hooks.d.ts.map +1 -1
  45. package/dist/index.d.ts +3 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2285 -767
  48. package/dist/index.js.map +4 -4
  49. package/dist/init.d.ts.map +1 -1
  50. package/dist/internal.d.ts +7 -0
  51. package/dist/internal.d.ts.map +1 -1
  52. package/dist/memory/brain-retrieval.d.ts +3 -0
  53. package/dist/memory/brain-retrieval.d.ts.map +1 -1
  54. package/dist/mvi-helpers.d.ts +52 -0
  55. package/dist/mvi-helpers.d.ts.map +1 -0
  56. package/dist/nexus/workspace.d.ts.map +1 -1
  57. package/dist/output.d.ts +2 -2
  58. package/dist/output.d.ts.map +1 -1
  59. package/dist/pagination.d.ts +1 -1
  60. package/dist/pagination.d.ts.map +1 -1
  61. package/dist/sessions/find.d.ts +3 -0
  62. package/dist/sessions/find.d.ts.map +1 -1
  63. package/dist/sessions/index.d.ts.map +1 -1
  64. package/dist/store/agent-registry-accessor.d.ts +454 -0
  65. package/dist/store/agent-registry-accessor.d.ts.map +1 -0
  66. package/dist/store/converters.d.ts.map +1 -1
  67. package/dist/store/db-helpers.d.ts.map +1 -1
  68. package/dist/store/safety-data-accessor.d.ts +7 -0
  69. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  70. package/dist/store/signaldock-sqlite.d.ts +48 -0
  71. package/dist/store/signaldock-sqlite.d.ts.map +1 -0
  72. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  73. package/dist/store/sqlite.d.ts.map +1 -1
  74. package/dist/store/task-store.d.ts.map +1 -1
  75. package/dist/store/tasks-schema.d.ts +240 -0
  76. package/dist/store/tasks-schema.d.ts.map +1 -1
  77. package/dist/store/validation-schemas.d.ts +32 -0
  78. package/dist/store/validation-schemas.d.ts.map +1 -1
  79. package/dist/system/health.d.ts.map +1 -1
  80. package/dist/task-work/index.d.ts.map +1 -1
  81. package/dist/tasks/find.d.ts +3 -0
  82. package/dist/tasks/find.d.ts.map +1 -1
  83. package/dist/tasks/list.d.ts +5 -2
  84. package/dist/tasks/list.d.ts.map +1 -1
  85. package/dist/tasks/show.d.ts +3 -0
  86. package/dist/tasks/show.d.ts.map +1 -1
  87. package/dist/upgrade.d.ts.map +1 -1
  88. package/migrations/drizzle-tasks/20260324000000_assignee-column/migration.sql +6 -0
  89. package/migrations/drizzle-tasks/20260324000000_assignee-column/snapshot.json +9 -0
  90. package/migrations/drizzle-tasks/20260327000000_agent-credentials/migration.sql +23 -0
  91. package/package.json +7 -7
  92. package/src/__tests__/cli-parity.test.js +11 -1
  93. package/src/__tests__/cli-parity.test.js.map +1 -1
  94. package/src/__tests__/cli-parity.test.ts +17 -1
  95. package/src/__tests__/human-output.test.js +11 -1
  96. package/src/__tests__/human-output.test.js.map +1 -1
  97. package/src/__tests__/human-output.test.ts +18 -1
  98. package/src/__tests__/injection-chain.test.js +3 -2
  99. package/src/__tests__/injection-chain.test.js.map +1 -1
  100. package/src/__tests__/injection-mvi-tiers.test.d.ts +2 -2
  101. package/src/__tests__/injection-mvi-tiers.test.js +15 -15
  102. package/src/__tests__/injection-mvi-tiers.test.js.map +1 -1
  103. package/src/__tests__/lafs-conformance.test.d.ts +1 -1
  104. package/src/__tests__/lafs-conformance.test.js +2 -2
  105. package/src/__tests__/sharing.test.js +19 -0
  106. package/src/__tests__/sharing.test.js.map +1 -1
  107. package/src/agents/__tests__/agent-registry.test.d.ts +12 -0
  108. package/src/agents/__tests__/agent-registry.test.d.ts.map +1 -0
  109. package/src/agents/__tests__/agent-registry.test.js +262 -0
  110. package/src/agents/__tests__/agent-registry.test.js.map +1 -0
  111. package/src/agents/__tests__/execution-learning.test.d.ts +14 -0
  112. package/src/agents/__tests__/execution-learning.test.d.ts.map +1 -0
  113. package/src/agents/__tests__/execution-learning.test.js +533 -0
  114. package/src/agents/__tests__/execution-learning.test.js.map +1 -0
  115. package/src/agents/__tests__/health-monitor.test.d.ts +10 -0
  116. package/src/agents/__tests__/health-monitor.test.d.ts.map +1 -0
  117. package/src/agents/__tests__/health-monitor.test.js +259 -0
  118. package/src/agents/__tests__/health-monitor.test.js.map +1 -0
  119. package/src/agents/__tests__/registry.test.js +27 -2
  120. package/src/agents/__tests__/registry.test.js.map +1 -1
  121. package/src/cant/__tests__/cant-agent-parse.test.ts +94 -0
  122. package/src/cant/approval.ts +218 -0
  123. package/src/cant/context-builder.ts +135 -0
  124. package/src/cant/discretion.ts +149 -0
  125. package/src/cant/index.ts +58 -0
  126. package/src/cant/parallel-runner.ts +205 -0
  127. package/src/cant/types.ts +158 -0
  128. package/src/cant/workflow-executor.ts +618 -0
  129. package/src/conduit/conduit-client.ts +114 -0
  130. package/src/conduit/factory.ts +45 -0
  131. package/src/conduit/http-transport.ts +140 -0
  132. package/src/conduit/index.ts +12 -0
  133. package/src/crypto/credentials.ts +166 -0
  134. package/src/engine-result.ts +1 -1
  135. package/src/error-catalog.ts +1 -1
  136. package/src/error-registry.ts +1 -1
  137. package/src/errors.ts +1 -1
  138. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts +13 -0
  139. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts.map +1 -0
  140. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +501 -0
  141. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +1 -0
  142. package/src/hooks/handlers/agent-hooks.ts +1 -30
  143. package/src/hooks/handlers/context-hooks.ts +1 -30
  144. package/src/hooks/handlers/error-hooks.ts +14 -5
  145. package/src/hooks/handlers/file-hooks.ts +1 -6
  146. package/src/hooks/handlers/handler-helpers.ts +62 -0
  147. package/src/hooks/handlers/mcp-hooks.ts +2 -14
  148. package/src/hooks/handlers/session-hooks.ts +1 -6
  149. package/src/hooks/handlers/task-hooks.ts +1 -6
  150. package/src/hooks/handlers/work-capture-hooks.ts +1 -10
  151. package/src/index.ts +11 -1
  152. package/src/init.ts +12 -0
  153. package/src/intelligence/__tests__/adaptive-validation.test.d.ts +11 -0
  154. package/src/intelligence/__tests__/adaptive-validation.test.d.ts.map +1 -0
  155. package/src/intelligence/__tests__/adaptive-validation.test.js +517 -0
  156. package/src/intelligence/__tests__/adaptive-validation.test.js.map +1 -0
  157. package/src/intelligence/__tests__/impact.test.d.ts +1 -0
  158. package/src/intelligence/__tests__/impact.test.d.ts.map +1 -1
  159. package/src/intelligence/__tests__/impact.test.js +132 -1
  160. package/src/intelligence/__tests__/impact.test.js.map +1 -1
  161. package/src/internal.ts +17 -0
  162. package/src/lib/__tests__/retry.test.d.ts +7 -0
  163. package/src/lib/__tests__/retry.test.d.ts.map +1 -0
  164. package/src/lib/__tests__/retry.test.js +225 -0
  165. package/src/lib/__tests__/retry.test.js.map +1 -0
  166. package/src/lifecycle/__tests__/chain-store.test.js +6 -0
  167. package/src/lifecycle/__tests__/chain-store.test.js.map +1 -1
  168. package/src/lifecycle/__tests__/tessera-engine.test.js +52 -0
  169. package/src/lifecycle/__tests__/tessera-engine.test.js.map +1 -1
  170. package/src/memory/__tests__/brain-automation.test.d.ts +11 -0
  171. package/src/memory/__tests__/brain-automation.test.d.ts.map +1 -0
  172. package/src/memory/__tests__/brain-automation.test.js +730 -0
  173. package/src/memory/__tests__/brain-automation.test.js.map +1 -0
  174. package/src/memory/brain-retrieval.ts +9 -0
  175. package/src/mvi-helpers.ts +81 -0
  176. package/src/nexus/workspace.ts +19 -7
  177. package/src/output.ts +43 -10
  178. package/src/pagination.ts +1 -1
  179. package/src/sessions/__tests__/session-edge-cases.test.js +20 -1
  180. package/src/sessions/__tests__/session-edge-cases.test.js.map +1 -1
  181. package/src/sessions/__tests__/session-find.test.js +1 -1
  182. package/src/sessions/__tests__/session-find.test.js.map +1 -1
  183. package/src/sessions/__tests__/session-find.test.ts +1 -1
  184. package/src/sessions/find.ts +6 -1
  185. package/src/sessions/index.ts +9 -0
  186. package/src/store/__tests__/migration-safety.test.js +3 -0
  187. package/src/store/__tests__/migration-safety.test.js.map +1 -1
  188. package/src/store/__tests__/session-store.test.js +128 -1
  189. package/src/store/__tests__/session-store.test.js.map +1 -1
  190. package/src/store/__tests__/task-store.test.js +18 -1
  191. package/src/store/__tests__/task-store.test.js.map +1 -1
  192. package/src/store/__tests__/test-db-helper.d.ts.map +1 -1
  193. package/src/store/__tests__/test-db-helper.js +12 -0
  194. package/src/store/__tests__/test-db-helper.js.map +1 -1
  195. package/src/store/agent-registry-accessor.ts +199 -0
  196. package/src/store/converters.ts +2 -0
  197. package/src/store/db-helpers.ts +1 -0
  198. package/src/store/safety-data-accessor.ts +23 -0
  199. package/src/store/signaldock-sqlite.ts +227 -0
  200. package/src/store/sqlite-data-accessor.ts +69 -0
  201. package/src/store/sqlite.ts +4 -1
  202. package/src/store/task-store.ts +1 -0
  203. package/src/store/tasks-schema.ts +42 -0
  204. package/src/system/health.ts +33 -0
  205. package/src/task-work/index.ts +5 -0
  206. package/src/tasks/__tests__/add.test.js +19 -1
  207. package/src/tasks/__tests__/add.test.js.map +1 -1
  208. package/src/tasks/__tests__/assignee.test.d.ts +14 -0
  209. package/src/tasks/__tests__/assignee.test.d.ts.map +1 -0
  210. package/src/tasks/__tests__/assignee.test.js +125 -0
  211. package/src/tasks/__tests__/assignee.test.js.map +1 -0
  212. package/src/tasks/__tests__/assignee.test.ts +162 -0
  213. package/src/tasks/__tests__/complete-unblocks.test.js +13 -1
  214. package/src/tasks/__tests__/complete-unblocks.test.js.map +1 -1
  215. package/src/tasks/__tests__/complete.test.js +28 -7
  216. package/src/tasks/__tests__/complete.test.js.map +1 -1
  217. package/src/tasks/__tests__/epic-enforcement.test.d.ts +15 -0
  218. package/src/tasks/__tests__/epic-enforcement.test.d.ts.map +1 -0
  219. package/src/tasks/__tests__/epic-enforcement.test.js +669 -0
  220. package/src/tasks/__tests__/epic-enforcement.test.js.map +1 -0
  221. package/src/tasks/__tests__/hierarchy-policy.test.js +5 -0
  222. package/src/tasks/__tests__/hierarchy-policy.test.js.map +1 -1
  223. package/src/tasks/__tests__/minimal-test.test.d.ts +2 -0
  224. package/src/tasks/__tests__/minimal-test.test.d.ts.map +1 -0
  225. package/src/tasks/__tests__/minimal-test.test.js +25 -0
  226. package/src/tasks/__tests__/minimal-test.test.js.map +1 -0
  227. package/src/tasks/__tests__/pipeline-stage.test.d.ts +14 -0
  228. package/src/tasks/__tests__/pipeline-stage.test.d.ts.map +1 -0
  229. package/src/tasks/__tests__/pipeline-stage.test.js +277 -0
  230. package/src/tasks/__tests__/pipeline-stage.test.js.map +1 -0
  231. package/src/tasks/__tests__/update.test.js +43 -6
  232. package/src/tasks/__tests__/update.test.js.map +1 -1
  233. package/src/tasks/find.ts +11 -1
  234. package/src/tasks/list.ts +14 -3
  235. package/src/tasks/show.ts +6 -0
  236. package/src/upgrade.ts +16 -0
  237. package/dist/adapters/adapter-registry.js +0 -64
  238. package/dist/adapters/adapter-registry.js.map +0 -1
  239. package/dist/adapters/discovery.js +0 -83
  240. package/dist/adapters/discovery.js.map +0 -1
  241. package/dist/adapters/index.js +0 -9
  242. package/dist/adapters/index.js.map +0 -1
  243. package/dist/adapters/manager.js +0 -260
  244. package/dist/adapters/manager.js.map +0 -1
  245. package/dist/admin/export-tasks.js +0 -171
  246. package/dist/admin/export-tasks.js.map +0 -1
  247. package/dist/admin/export.js +0 -103
  248. package/dist/admin/export.js.map +0 -1
  249. package/dist/admin/help.js +0 -106
  250. package/dist/admin/help.js.map +0 -1
  251. package/dist/admin/import-tasks.js +0 -182
  252. package/dist/admin/import-tasks.js.map +0 -1
  253. package/dist/admin/import.js +0 -129
  254. package/dist/admin/import.js.map +0 -1
  255. package/dist/admin/index.js +0 -13
  256. package/dist/admin/index.js.map +0 -1
  257. package/dist/adrs/find.js +0 -134
  258. package/dist/adrs/find.js.map +0 -1
  259. package/dist/adrs/index.js +0 -15
  260. package/dist/adrs/index.js.map +0 -1
  261. package/dist/adrs/link-pipeline.js +0 -160
  262. package/dist/adrs/link-pipeline.js.map +0 -1
  263. package/dist/adrs/list.js +0 -43
  264. package/dist/adrs/list.js.map +0 -1
  265. package/dist/adrs/parse.js +0 -51
  266. package/dist/adrs/parse.js.map +0 -1
  267. package/dist/adrs/show.js +0 -22
  268. package/dist/adrs/show.js.map +0 -1
  269. package/dist/adrs/sync.js +0 -188
  270. package/dist/adrs/sync.js.map +0 -1
  271. package/dist/adrs/types.js +0 -9
  272. package/dist/adrs/types.js.map +0 -1
  273. package/dist/adrs/validate.js +0 -57
  274. package/dist/adrs/validate.js.map +0 -1
  275. package/dist/agents/agent-registry.js +0 -288
  276. package/dist/agents/agent-registry.js.map +0 -1
  277. package/dist/agents/agent-schema.js +0 -85
  278. package/dist/agents/agent-schema.js.map +0 -1
  279. package/dist/agents/capacity.js +0 -116
  280. package/dist/agents/capacity.js.map +0 -1
  281. package/dist/agents/execution-learning.js +0 -474
  282. package/dist/agents/execution-learning.js.map +0 -1
  283. package/dist/agents/health-monitor.js +0 -217
  284. package/dist/agents/health-monitor.js.map +0 -1
  285. package/dist/agents/index.js +0 -29
  286. package/dist/agents/index.js.map +0 -1
  287. package/dist/agents/registry.js +0 -314
  288. package/dist/agents/registry.js.map +0 -1
  289. package/dist/agents/retry.js +0 -210
  290. package/dist/agents/retry.js.map +0 -1
  291. package/dist/audit-prune.js +0 -94
  292. package/dist/audit-prune.js.map +0 -1
  293. package/dist/audit.js +0 -68
  294. package/dist/audit.js.map +0 -1
  295. package/dist/backfill/index.js +0 -229
  296. package/dist/backfill/index.js.map +0 -1
  297. package/dist/bootstrap.js +0 -367
  298. package/dist/bootstrap.js.map +0 -1
  299. package/dist/caamp/adapter.js +0 -434
  300. package/dist/caamp/adapter.js.map +0 -1
  301. package/dist/caamp/capability-check.js +0 -38
  302. package/dist/caamp/capability-check.js.map +0 -1
  303. package/dist/caamp/index.js +0 -23
  304. package/dist/caamp/index.js.map +0 -1
  305. package/dist/caamp-init.js +0 -16
  306. package/dist/caamp-init.js.map +0 -1
  307. package/dist/cleo.js +0 -302
  308. package/dist/cleo.js.map +0 -1
  309. package/dist/codebase-map/analyzers/architecture.js +0 -130
  310. package/dist/codebase-map/analyzers/architecture.js.map +0 -1
  311. package/dist/codebase-map/analyzers/concerns.js +0 -122
  312. package/dist/codebase-map/analyzers/concerns.js.map +0 -1
  313. package/dist/codebase-map/analyzers/conventions.js +0 -149
  314. package/dist/codebase-map/analyzers/conventions.js.map +0 -1
  315. package/dist/codebase-map/analyzers/integrations.js +0 -108
  316. package/dist/codebase-map/analyzers/integrations.js.map +0 -1
  317. package/dist/codebase-map/analyzers/stack.js +0 -117
  318. package/dist/codebase-map/analyzers/stack.js.map +0 -1
  319. package/dist/codebase-map/analyzers/structure.js +0 -137
  320. package/dist/codebase-map/analyzers/structure.js.map +0 -1
  321. package/dist/codebase-map/analyzers/testing.js +0 -118
  322. package/dist/codebase-map/analyzers/testing.js.map +0 -1
  323. package/dist/codebase-map/index.js +0 -57
  324. package/dist/codebase-map/index.js.map +0 -1
  325. package/dist/codebase-map/store.js +0 -122
  326. package/dist/codebase-map/store.js.map +0 -1
  327. package/dist/codebase-map/summary.js +0 -152
  328. package/dist/codebase-map/summary.js.map +0 -1
  329. package/dist/compliance/index.js +0 -288
  330. package/dist/compliance/index.js.map +0 -1
  331. package/dist/compliance/protocol-enforcement.js +0 -332
  332. package/dist/compliance/protocol-enforcement.js.map +0 -1
  333. package/dist/compliance/protocol-rules.js +0 -786
  334. package/dist/compliance/protocol-rules.js.map +0 -1
  335. package/dist/compliance/protocol-types.js +0 -80
  336. package/dist/compliance/protocol-types.js.map +0 -1
  337. package/dist/compliance/store.js +0 -53
  338. package/dist/compliance/store.js.map +0 -1
  339. package/dist/config/build-config.js +0 -29
  340. package/dist/config/build-config.js.map +0 -1
  341. package/dist/config.js +0 -400
  342. package/dist/config.js.map +0 -1
  343. package/dist/constants.js +0 -18
  344. package/dist/constants.js.map +0 -1
  345. package/dist/context/index.js +0 -137
  346. package/dist/context/index.js.map +0 -1
  347. package/dist/engine-result.js +0 -12
  348. package/dist/engine-result.js.map +0 -1
  349. package/dist/error-catalog.js +0 -404
  350. package/dist/error-catalog.js.map +0 -1
  351. package/dist/error-registry.js +0 -393
  352. package/dist/error-registry.js.map +0 -1
  353. package/dist/errors.js +0 -167
  354. package/dist/errors.js.map +0 -1
  355. package/dist/hooks/handlers/error-hooks.js +0 -43
  356. package/dist/hooks/handlers/error-hooks.js.map +0 -1
  357. package/dist/hooks/handlers/file-hooks.js +0 -80
  358. package/dist/hooks/handlers/file-hooks.js.map +0 -1
  359. package/dist/hooks/handlers/index.js +0 -19
  360. package/dist/hooks/handlers/index.js.map +0 -1
  361. package/dist/hooks/handlers/mcp-hooks.js +0 -80
  362. package/dist/hooks/handlers/mcp-hooks.js.map +0 -1
  363. package/dist/hooks/handlers/memory-bridge-refresh.js +0 -42
  364. package/dist/hooks/handlers/memory-bridge-refresh.js.map +0 -1
  365. package/dist/hooks/handlers/session-hooks.js +0 -109
  366. package/dist/hooks/handlers/session-hooks.js.map +0 -1
  367. package/dist/hooks/handlers/task-hooks.js +0 -70
  368. package/dist/hooks/handlers/task-hooks.js.map +0 -1
  369. package/dist/hooks/index.js +0 -13
  370. package/dist/hooks/index.js.map +0 -1
  371. package/dist/hooks/payload-schemas.js +0 -163
  372. package/dist/hooks/payload-schemas.js.map +0 -1
  373. package/dist/hooks/provider-hooks.js +0 -34
  374. package/dist/hooks/provider-hooks.js.map +0 -1
  375. package/dist/hooks/registry.js +0 -176
  376. package/dist/hooks/registry.js.map +0 -1
  377. package/dist/hooks/types.js +0 -62
  378. package/dist/hooks/types.js.map +0 -1
  379. package/dist/hooks.js +0 -136
  380. package/dist/hooks.js.map +0 -1
  381. package/dist/init.js +0 -711
  382. package/dist/init.js.map +0 -1
  383. package/dist/inject/index.js +0 -82
  384. package/dist/inject/index.js.map +0 -1
  385. package/dist/injection.js +0 -343
  386. package/dist/injection.js.map +0 -1
  387. package/dist/intelligence/adaptive-validation.js +0 -497
  388. package/dist/intelligence/adaptive-validation.js.map +0 -1
  389. package/dist/intelligence/impact.js +0 -675
  390. package/dist/intelligence/impact.js.map +0 -1
  391. package/dist/intelligence/index.js +0 -22
  392. package/dist/intelligence/index.js.map +0 -1
  393. package/dist/intelligence/patterns.js +0 -492
  394. package/dist/intelligence/patterns.js.map +0 -1
  395. package/dist/intelligence/prediction.js +0 -499
  396. package/dist/intelligence/prediction.js.map +0 -1
  397. package/dist/intelligence/types.js +0 -13
  398. package/dist/intelligence/types.js.map +0 -1
  399. package/dist/internal.js +0 -276
  400. package/dist/internal.js.map +0 -1
  401. package/dist/issue/create.js +0 -121
  402. package/dist/issue/create.js.map +0 -1
  403. package/dist/issue/diagnostics.js +0 -59
  404. package/dist/issue/diagnostics.js.map +0 -1
  405. package/dist/issue/index.js +0 -10
  406. package/dist/issue/index.js.map +0 -1
  407. package/dist/issue/template-parser.js +0 -267
  408. package/dist/issue/template-parser.js.map +0 -1
  409. package/dist/json-schema-validator.js +0 -76
  410. package/dist/json-schema-validator.js.map +0 -1
  411. package/dist/lib/index.js +0 -10
  412. package/dist/lib/index.js.map +0 -1
  413. package/dist/lib/retry.js +0 -152
  414. package/dist/lib/retry.js.map +0 -1
  415. package/dist/lifecycle/chain-composition.js +0 -152
  416. package/dist/lifecycle/chain-composition.js.map +0 -1
  417. package/dist/lifecycle/chain-store.js +0 -246
  418. package/dist/lifecycle/chain-store.js.map +0 -1
  419. package/dist/lifecycle/consolidate-rcasd.js +0 -352
  420. package/dist/lifecycle/consolidate-rcasd.js.map +0 -1
  421. package/dist/lifecycle/default-chain.js +0 -167
  422. package/dist/lifecycle/default-chain.js.map +0 -1
  423. package/dist/lifecycle/evidence.js +0 -180
  424. package/dist/lifecycle/evidence.js.map +0 -1
  425. package/dist/lifecycle/frontmatter.js +0 -363
  426. package/dist/lifecycle/frontmatter.js.map +0 -1
  427. package/dist/lifecycle/index.js +0 -753
  428. package/dist/lifecycle/index.js.map +0 -1
  429. package/dist/lifecycle/pipeline.js +0 -656
  430. package/dist/lifecycle/pipeline.js.map +0 -1
  431. package/dist/lifecycle/rcasd-index.js +0 -326
  432. package/dist/lifecycle/rcasd-index.js.map +0 -1
  433. package/dist/lifecycle/rcasd-paths.js +0 -220
  434. package/dist/lifecycle/rcasd-paths.js.map +0 -1
  435. package/dist/lifecycle/resume.js +0 -864
  436. package/dist/lifecycle/resume.js.map +0 -1
  437. package/dist/lifecycle/stage-artifacts.js +0 -94
  438. package/dist/lifecycle/stage-artifacts.js.map +0 -1
  439. package/dist/lifecycle/stages.js +0 -534
  440. package/dist/lifecycle/stages.js.map +0 -1
  441. package/dist/lifecycle/state-machine.js +0 -516
  442. package/dist/lifecycle/state-machine.js.map +0 -1
  443. package/dist/lifecycle/tessera-engine.js +0 -249
  444. package/dist/lifecycle/tessera-engine.js.map +0 -1
  445. package/dist/logger.js +0 -140
  446. package/dist/logger.js.map +0 -1
  447. package/dist/mcp/index.js +0 -146
  448. package/dist/mcp/index.js.map +0 -1
  449. package/dist/memory/auto-extract.js +0 -177
  450. package/dist/memory/auto-extract.js.map +0 -1
  451. package/dist/memory/brain-embedding.js +0 -66
  452. package/dist/memory/brain-embedding.js.map +0 -1
  453. package/dist/memory/brain-lifecycle.js +0 -298
  454. package/dist/memory/brain-lifecycle.js.map +0 -1
  455. package/dist/memory/brain-links.js +0 -148
  456. package/dist/memory/brain-links.js.map +0 -1
  457. package/dist/memory/brain-maintenance.js +0 -98
  458. package/dist/memory/brain-maintenance.js.map +0 -1
  459. package/dist/memory/brain-migration.js +0 -149
  460. package/dist/memory/brain-migration.js.map +0 -1
  461. package/dist/memory/brain-reasoning.js +0 -215
  462. package/dist/memory/brain-reasoning.js.map +0 -1
  463. package/dist/memory/brain-retrieval.js +0 -521
  464. package/dist/memory/brain-retrieval.js.map +0 -1
  465. package/dist/memory/brain-row-types.js +0 -10
  466. package/dist/memory/brain-row-types.js.map +0 -1
  467. package/dist/memory/brain-search.js +0 -519
  468. package/dist/memory/brain-search.js.map +0 -1
  469. package/dist/memory/brain-similarity.js +0 -145
  470. package/dist/memory/brain-similarity.js.map +0 -1
  471. package/dist/memory/claude-mem-migration.js +0 -277
  472. package/dist/memory/claude-mem-migration.js.map +0 -1
  473. package/dist/memory/decisions.js +0 -148
  474. package/dist/memory/decisions.js.map +0 -1
  475. package/dist/memory/embedding-local.js +0 -97
  476. package/dist/memory/embedding-local.js.map +0 -1
  477. package/dist/memory/embedding-queue.js +0 -271
  478. package/dist/memory/embedding-queue.js.map +0 -1
  479. package/dist/memory/embedding-worker.js +0 -58
  480. package/dist/memory/embedding-worker.js.map +0 -1
  481. package/dist/memory/engine-compat.js +0 -1030
  482. package/dist/memory/engine-compat.js.map +0 -1
  483. package/dist/memory/index.js +0 -773
  484. package/dist/memory/index.js.map +0 -1
  485. package/dist/memory/learnings.js +0 -121
  486. package/dist/memory/learnings.js.map +0 -1
  487. package/dist/memory/memory-bridge.js +0 -370
  488. package/dist/memory/memory-bridge.js.map +0 -1
  489. package/dist/memory/patterns.js +0 -122
  490. package/dist/memory/patterns.js.map +0 -1
  491. package/dist/memory/pipeline-manifest-sqlite.js +0 -975
  492. package/dist/memory/pipeline-manifest-sqlite.js.map +0 -1
  493. package/dist/memory/session-memory.js +0 -331
  494. package/dist/memory/session-memory.js.map +0 -1
  495. package/dist/metrics/ab-test.js +0 -260
  496. package/dist/metrics/ab-test.js.map +0 -1
  497. package/dist/metrics/aggregation.js +0 -363
  498. package/dist/metrics/aggregation.js.map +0 -1
  499. package/dist/metrics/common.js +0 -64
  500. package/dist/metrics/common.js.map +0 -1
  501. package/dist/metrics/enums.js +0 -78
  502. package/dist/metrics/enums.js.map +0 -1
  503. package/dist/metrics/index.js +0 -19
  504. package/dist/metrics/index.js.map +0 -1
  505. package/dist/metrics/model-provider-registry.js +0 -88
  506. package/dist/metrics/model-provider-registry.js.map +0 -1
  507. package/dist/metrics/otel-integration.js +0 -263
  508. package/dist/metrics/otel-integration.js.map +0 -1
  509. package/dist/metrics/provider-detection.js +0 -103
  510. package/dist/metrics/provider-detection.js.map +0 -1
  511. package/dist/metrics/token-estimation.js +0 -253
  512. package/dist/metrics/token-estimation.js.map +0 -1
  513. package/dist/metrics/token-service.js +0 -450
  514. package/dist/metrics/token-service.js.map +0 -1
  515. package/dist/migration/agent-outputs.js +0 -316
  516. package/dist/migration/agent-outputs.js.map +0 -1
  517. package/dist/migration/checksum.js +0 -92
  518. package/dist/migration/checksum.js.map +0 -1
  519. package/dist/migration/index.js +0 -282
  520. package/dist/migration/index.js.map +0 -1
  521. package/dist/migration/logger.js +0 -360
  522. package/dist/migration/logger.js.map +0 -1
  523. package/dist/migration/preflight.js +0 -9
  524. package/dist/migration/preflight.js.map +0 -1
  525. package/dist/migration/state.js +0 -421
  526. package/dist/migration/state.js.map +0 -1
  527. package/dist/migration/validate.js +0 -241
  528. package/dist/migration/validate.js.map +0 -1
  529. package/dist/nexus/deps.js +0 -375
  530. package/dist/nexus/deps.js.map +0 -1
  531. package/dist/nexus/discover.js +0 -288
  532. package/dist/nexus/discover.js.map +0 -1
  533. package/dist/nexus/hash.js +0 -10
  534. package/dist/nexus/hash.js.map +0 -1
  535. package/dist/nexus/index.js +0 -38
  536. package/dist/nexus/index.js.map +0 -1
  537. package/dist/nexus/migrate-json-to-sqlite.js +0 -115
  538. package/dist/nexus/migrate-json-to-sqlite.js.map +0 -1
  539. package/dist/nexus/permissions.js +0 -105
  540. package/dist/nexus/permissions.js.map +0 -1
  541. package/dist/nexus/query.js +0 -175
  542. package/dist/nexus/query.js.map +0 -1
  543. package/dist/nexus/registry.js +0 -584
  544. package/dist/nexus/registry.js.map +0 -1
  545. package/dist/nexus/sharing/index.js +0 -288
  546. package/dist/nexus/sharing/index.js.map +0 -1
  547. package/dist/nexus/transfer-types.js +0 -8
  548. package/dist/nexus/transfer-types.js.map +0 -1
  549. package/dist/nexus/transfer.js +0 -263
  550. package/dist/nexus/transfer.js.map +0 -1
  551. package/dist/observability/index.js +0 -103
  552. package/dist/observability/index.js.map +0 -1
  553. package/dist/observability/log-filter.js +0 -63
  554. package/dist/observability/log-filter.js.map +0 -1
  555. package/dist/observability/log-parser.js +0 -99
  556. package/dist/observability/log-parser.js.map +0 -1
  557. package/dist/observability/log-reader.js +0 -139
  558. package/dist/observability/log-reader.js.map +0 -1
  559. package/dist/observability/types.js +0 -19
  560. package/dist/observability/types.js.map +0 -1
  561. package/dist/orchestration/analyze.js +0 -107
  562. package/dist/orchestration/analyze.js.map +0 -1
  563. package/dist/orchestration/bootstrap.js +0 -132
  564. package/dist/orchestration/bootstrap.js.map +0 -1
  565. package/dist/orchestration/context.js +0 -56
  566. package/dist/orchestration/context.js.map +0 -1
  567. package/dist/orchestration/critical-path.js +0 -100
  568. package/dist/orchestration/critical-path.js.map +0 -1
  569. package/dist/orchestration/index.js +0 -286
  570. package/dist/orchestration/index.js.map +0 -1
  571. package/dist/orchestration/parallel.js +0 -89
  572. package/dist/orchestration/parallel.js.map +0 -1
  573. package/dist/orchestration/protocol-validators.js +0 -524
  574. package/dist/orchestration/protocol-validators.js.map +0 -1
  575. package/dist/orchestration/skill-ops.js +0 -98
  576. package/dist/orchestration/skill-ops.js.map +0 -1
  577. package/dist/orchestration/status.js +0 -107
  578. package/dist/orchestration/status.js.map +0 -1
  579. package/dist/orchestration/unblock.js +0 -103
  580. package/dist/orchestration/unblock.js.map +0 -1
  581. package/dist/orchestration/validate-spawn.js +0 -67
  582. package/dist/orchestration/validate-spawn.js.map +0 -1
  583. package/dist/orchestration/waves.js +0 -86
  584. package/dist/orchestration/waves.js.map +0 -1
  585. package/dist/otel/index.js +0 -163
  586. package/dist/otel/index.js.map +0 -1
  587. package/dist/output.js +0 -132
  588. package/dist/output.js.map +0 -1
  589. package/dist/pagination.js +0 -64
  590. package/dist/pagination.js.map +0 -1
  591. package/dist/paths.js +0 -337
  592. package/dist/paths.js.map +0 -1
  593. package/dist/phases/deps.js +0 -372
  594. package/dist/phases/deps.js.map +0 -1
  595. package/dist/phases/index.js +0 -349
  596. package/dist/phases/index.js.map +0 -1
  597. package/dist/pipeline/index.js +0 -10
  598. package/dist/pipeline/index.js.map +0 -1
  599. package/dist/pipeline/phase.js +0 -45
  600. package/dist/pipeline/phase.js.map +0 -1
  601. package/dist/platform.js +0 -211
  602. package/dist/platform.js.map +0 -1
  603. package/dist/project-info.js +0 -84
  604. package/dist/project-info.js.map +0 -1
  605. package/dist/reconciliation/index.js +0 -10
  606. package/dist/reconciliation/index.js.map +0 -1
  607. package/dist/reconciliation/link-store.js +0 -129
  608. package/dist/reconciliation/link-store.js.map +0 -1
  609. package/dist/reconciliation/reconciliation-engine.js +0 -298
  610. package/dist/reconciliation/reconciliation-engine.js.map +0 -1
  611. package/dist/release/artifacts.js +0 -427
  612. package/dist/release/artifacts.js.map +0 -1
  613. package/dist/release/changelog-writer.js +0 -151
  614. package/dist/release/changelog-writer.js.map +0 -1
  615. package/dist/release/channel.js +0 -144
  616. package/dist/release/channel.js.map +0 -1
  617. package/dist/release/ci.js +0 -166
  618. package/dist/release/ci.js.map +0 -1
  619. package/dist/release/github-pr.js +0 -225
  620. package/dist/release/github-pr.js.map +0 -1
  621. package/dist/release/guards.js +0 -116
  622. package/dist/release/guards.js.map +0 -1
  623. package/dist/release/index.js +0 -22
  624. package/dist/release/index.js.map +0 -1
  625. package/dist/release/release-config.js +0 -158
  626. package/dist/release/release-config.js.map +0 -1
  627. package/dist/release/release-manifest.js +0 -1019
  628. package/dist/release/release-manifest.js.map +0 -1
  629. package/dist/release/version-bump.js +0 -255
  630. package/dist/release/version-bump.js.map +0 -1
  631. package/dist/remote/index.js +0 -257
  632. package/dist/remote/index.js.map +0 -1
  633. package/dist/repair.js +0 -130
  634. package/dist/repair.js.map +0 -1
  635. package/dist/research/index.js +0 -2
  636. package/dist/research/index.js.map +0 -1
  637. package/dist/roadmap/index.js +0 -59
  638. package/dist/roadmap/index.js.map +0 -1
  639. package/dist/routing/capability-matrix.js +0 -1557
  640. package/dist/routing/capability-matrix.js.map +0 -1
  641. package/dist/routing/index.js +0 -9
  642. package/dist/routing/index.js.map +0 -1
  643. package/dist/scaffold.js +0 -1178
  644. package/dist/scaffold.js.map +0 -1
  645. package/dist/schema-management.js +0 -295
  646. package/dist/schema-management.js.map +0 -1
  647. package/dist/security/index.js +0 -9
  648. package/dist/security/index.js.map +0 -1
  649. package/dist/security/input-sanitization.js +0 -321
  650. package/dist/security/input-sanitization.js.map +0 -1
  651. package/dist/sequence/index.js +0 -295
  652. package/dist/sequence/index.js.map +0 -1
  653. package/dist/sessions/assumptions.js +0 -54
  654. package/dist/sessions/assumptions.js.map +0 -1
  655. package/dist/sessions/briefing.js +0 -377
  656. package/dist/sessions/briefing.js.map +0 -1
  657. package/dist/sessions/context-alert.js +0 -222
  658. package/dist/sessions/context-alert.js.map +0 -1
  659. package/dist/sessions/context-inject.js +0 -61
  660. package/dist/sessions/context-inject.js.map +0 -1
  661. package/dist/sessions/context-monitor.js +0 -98
  662. package/dist/sessions/context-monitor.js.map +0 -1
  663. package/dist/sessions/decisions.js +0 -65
  664. package/dist/sessions/decisions.js.map +0 -1
  665. package/dist/sessions/find.js +0 -63
  666. package/dist/sessions/find.js.map +0 -1
  667. package/dist/sessions/handoff.js +0 -328
  668. package/dist/sessions/handoff.js.map +0 -1
  669. package/dist/sessions/hitl-warnings.js +0 -254
  670. package/dist/sessions/hitl-warnings.js.map +0 -1
  671. package/dist/sessions/index.js +0 -314
  672. package/dist/sessions/index.js.map +0 -1
  673. package/dist/sessions/session-archive.js +0 -40
  674. package/dist/sessions/session-archive.js.map +0 -1
  675. package/dist/sessions/session-cleanup.js +0 -59
  676. package/dist/sessions/session-cleanup.js.map +0 -1
  677. package/dist/sessions/session-drift.js +0 -134
  678. package/dist/sessions/session-drift.js.map +0 -1
  679. package/dist/sessions/session-enforcement.js +0 -144
  680. package/dist/sessions/session-enforcement.js.map +0 -1
  681. package/dist/sessions/session-grade.js +0 -253
  682. package/dist/sessions/session-grade.js.map +0 -1
  683. package/dist/sessions/session-history.js +0 -42
  684. package/dist/sessions/session-history.js.map +0 -1
  685. package/dist/sessions/session-id.js +0 -81
  686. package/dist/sessions/session-id.js.map +0 -1
  687. package/dist/sessions/session-memory-bridge.js +0 -52
  688. package/dist/sessions/session-memory-bridge.js.map +0 -1
  689. package/dist/sessions/session-show.js +0 -24
  690. package/dist/sessions/session-show.js.map +0 -1
  691. package/dist/sessions/session-stats.js +0 -69
  692. package/dist/sessions/session-stats.js.map +0 -1
  693. package/dist/sessions/session-suspend.js +0 -39
  694. package/dist/sessions/session-suspend.js.map +0 -1
  695. package/dist/sessions/session-switch.js +0 -51
  696. package/dist/sessions/session-switch.js.map +0 -1
  697. package/dist/sessions/session-view.js +0 -76
  698. package/dist/sessions/session-view.js.map +0 -1
  699. package/dist/sessions/statusline-setup.js +0 -85
  700. package/dist/sessions/statusline-setup.js.map +0 -1
  701. package/dist/sessions/types.js +0 -8
  702. package/dist/sessions/types.js.map +0 -1
  703. package/dist/signaldock/claude-code-transport.d.ts +0 -34
  704. package/dist/signaldock/claude-code-transport.d.ts.map +0 -1
  705. package/dist/signaldock/claude-code-transport.js +0 -107
  706. package/dist/signaldock/claude-code-transport.js.map +0 -1
  707. package/dist/signaldock/factory.d.ts +0 -22
  708. package/dist/signaldock/factory.d.ts.map +0 -1
  709. package/dist/signaldock/factory.js +0 -25
  710. package/dist/signaldock/factory.js.map +0 -1
  711. package/dist/signaldock/index.d.ts +0 -13
  712. package/dist/signaldock/index.d.ts.map +0 -1
  713. package/dist/signaldock/index.js +0 -9
  714. package/dist/signaldock/index.js.map +0 -1
  715. package/dist/signaldock/signaldock-transport.d.ts +0 -45
  716. package/dist/signaldock/signaldock-transport.d.ts.map +0 -1
  717. package/dist/signaldock/signaldock-transport.js +0 -122
  718. package/dist/signaldock/signaldock-transport.js.map +0 -1
  719. package/dist/signaldock/transport.d.ts +0 -49
  720. package/dist/signaldock/transport.d.ts.map +0 -1
  721. package/dist/signaldock/transport.js +0 -11
  722. package/dist/signaldock/transport.js.map +0 -1
  723. package/dist/signaldock/types.d.ts +0 -88
  724. package/dist/signaldock/types.d.ts.map +0 -1
  725. package/dist/signaldock/types.js +0 -11
  726. package/dist/signaldock/types.js.map +0 -1
  727. package/dist/skills/agents/config.js +0 -94
  728. package/dist/skills/agents/config.js.map +0 -1
  729. package/dist/skills/agents/install.js +0 -116
  730. package/dist/skills/agents/install.js.map +0 -1
  731. package/dist/skills/agents/registry.js +0 -161
  732. package/dist/skills/agents/registry.js.map +0 -1
  733. package/dist/skills/discovery.js +0 -333
  734. package/dist/skills/discovery.js.map +0 -1
  735. package/dist/skills/dispatch.js +0 -347
  736. package/dist/skills/dispatch.js.map +0 -1
  737. package/dist/skills/dynamic-skill-generator.js +0 -100
  738. package/dist/skills/dynamic-skill-generator.js.map +0 -1
  739. package/dist/skills/index.js +0 -44
  740. package/dist/skills/index.js.map +0 -1
  741. package/dist/skills/injection/subagent.js +0 -195
  742. package/dist/skills/injection/subagent.js.map +0 -1
  743. package/dist/skills/injection/token.js +0 -260
  744. package/dist/skills/injection/token.js.map +0 -1
  745. package/dist/skills/install.js +0 -40
  746. package/dist/skills/install.js.map +0 -1
  747. package/dist/skills/manifests/contribution.js +0 -175
  748. package/dist/skills/manifests/contribution.js.map +0 -1
  749. package/dist/skills/manifests/research.js +0 -281
  750. package/dist/skills/manifests/research.js.map +0 -1
  751. package/dist/skills/manifests/resolver.js +0 -146
  752. package/dist/skills/manifests/resolver.js.map +0 -1
  753. package/dist/skills/marketplace.js +0 -90
  754. package/dist/skills/marketplace.js.map +0 -1
  755. package/dist/skills/orchestrator/spawn.js +0 -178
  756. package/dist/skills/orchestrator/spawn.js.map +0 -1
  757. package/dist/skills/orchestrator/startup.js +0 -451
  758. package/dist/skills/orchestrator/startup.js.map +0 -1
  759. package/dist/skills/orchestrator/validator.js +0 -301
  760. package/dist/skills/orchestrator/validator.js.map +0 -1
  761. package/dist/skills/precedence-integration.js +0 -73
  762. package/dist/skills/precedence-integration.js.map +0 -1
  763. package/dist/skills/precedence-types.js +0 -16
  764. package/dist/skills/precedence-types.js.map +0 -1
  765. package/dist/skills/routing-table.js +0 -63
  766. package/dist/skills/routing-table.js.map +0 -1
  767. package/dist/skills/skill-paths.js +0 -220
  768. package/dist/skills/skill-paths.js.map +0 -1
  769. package/dist/skills/test-utility.js +0 -55
  770. package/dist/skills/test-utility.js.map +0 -1
  771. package/dist/skills/types.js +0 -118
  772. package/dist/skills/types.js.map +0 -1
  773. package/dist/skills/validation.js +0 -183
  774. package/dist/skills/validation.js.map +0 -1
  775. package/dist/skills/version.js +0 -57
  776. package/dist/skills/version.js.map +0 -1
  777. package/dist/snapshot/index.js +0 -188
  778. package/dist/snapshot/index.js.map +0 -1
  779. package/dist/spawn/adapter-registry.js +0 -246
  780. package/dist/spawn/adapter-registry.js.map +0 -1
  781. package/dist/spawn/index.js +0 -10
  782. package/dist/spawn/index.js.map +0 -1
  783. package/dist/stats/index.js +0 -343
  784. package/dist/stats/index.js.map +0 -1
  785. package/dist/stats/workflow-telemetry.js +0 -400
  786. package/dist/stats/workflow-telemetry.js.map +0 -1
  787. package/dist/sticky/archive.js +0 -47
  788. package/dist/sticky/archive.js.map +0 -1
  789. package/dist/sticky/convert.js +0 -235
  790. package/dist/sticky/convert.js.map +0 -1
  791. package/dist/sticky/create.js +0 -48
  792. package/dist/sticky/create.js.map +0 -1
  793. package/dist/sticky/id.js +0 -35
  794. package/dist/sticky/id.js.map +0 -1
  795. package/dist/sticky/index.js +0 -16
  796. package/dist/sticky/index.js.map +0 -1
  797. package/dist/sticky/list.js +0 -44
  798. package/dist/sticky/list.js.map +0 -1
  799. package/dist/sticky/purge.js +0 -45
  800. package/dist/sticky/purge.js.map +0 -1
  801. package/dist/sticky/show.js +0 -42
  802. package/dist/sticky/show.js.map +0 -1
  803. package/dist/sticky/types.js +0 -10
  804. package/dist/sticky/types.js.map +0 -1
  805. package/dist/store/atomic.js +0 -167
  806. package/dist/store/atomic.js.map +0 -1
  807. package/dist/store/backup.js +0 -94
  808. package/dist/store/backup.js.map +0 -1
  809. package/dist/store/brain-accessor.js +0 -397
  810. package/dist/store/brain-accessor.js.map +0 -1
  811. package/dist/store/brain-schema.js +0 -215
  812. package/dist/store/brain-schema.js.map +0 -1
  813. package/dist/store/brain-sqlite.js +0 -222
  814. package/dist/store/brain-sqlite.js.map +0 -1
  815. package/dist/store/cache.js +0 -168
  816. package/dist/store/cache.js.map +0 -1
  817. package/dist/store/chain-schema.js +0 -51
  818. package/dist/store/chain-schema.js.map +0 -1
  819. package/dist/store/converters.js +0 -122
  820. package/dist/store/converters.js.map +0 -1
  821. package/dist/store/cross-db-cleanup.js +0 -169
  822. package/dist/store/cross-db-cleanup.js.map +0 -1
  823. package/dist/store/data-accessor.js +0 -26
  824. package/dist/store/data-accessor.js.map +0 -1
  825. package/dist/store/data-safety-central.js +0 -269
  826. package/dist/store/data-safety-central.js.map +0 -1
  827. package/dist/store/data-safety.js +0 -274
  828. package/dist/store/data-safety.js.map +0 -1
  829. package/dist/store/db-helpers.js +0 -223
  830. package/dist/store/db-helpers.js.map +0 -1
  831. package/dist/store/export.js +0 -155
  832. package/dist/store/export.js.map +0 -1
  833. package/dist/store/file-utils.js +0 -270
  834. package/dist/store/file-utils.js.map +0 -1
  835. package/dist/store/git-checkpoint.js +0 -365
  836. package/dist/store/git-checkpoint.js.map +0 -1
  837. package/dist/store/import-logging.js +0 -139
  838. package/dist/store/import-logging.js.map +0 -1
  839. package/dist/store/import-remap.js +0 -145
  840. package/dist/store/import-remap.js.map +0 -1
  841. package/dist/store/import-sort.js +0 -121
  842. package/dist/store/import-sort.js.map +0 -1
  843. package/dist/store/index.js +0 -28
  844. package/dist/store/index.js.map +0 -1
  845. package/dist/store/json.js +0 -208
  846. package/dist/store/json.js.map +0 -1
  847. package/dist/store/lifecycle-store.js +0 -249
  848. package/dist/store/lifecycle-store.js.map +0 -1
  849. package/dist/store/lock.js +0 -70
  850. package/dist/store/lock.js.map +0 -1
  851. package/dist/store/migration-manager.js +0 -151
  852. package/dist/store/migration-manager.js.map +0 -1
  853. package/dist/store/migration-sqlite.js +0 -676
  854. package/dist/store/migration-sqlite.js.map +0 -1
  855. package/dist/store/nexus-schema.js +0 -62
  856. package/dist/store/nexus-schema.js.map +0 -1
  857. package/dist/store/nexus-sqlite.js +0 -217
  858. package/dist/store/nexus-sqlite.js.map +0 -1
  859. package/dist/store/nexus-validation-schemas.js +0 -40
  860. package/dist/store/nexus-validation-schemas.js.map +0 -1
  861. package/dist/store/parsers.js +0 -37
  862. package/dist/store/parsers.js.map +0 -1
  863. package/dist/store/project-detect.js +0 -457
  864. package/dist/store/project-detect.js.map +0 -1
  865. package/dist/store/provider.js +0 -101
  866. package/dist/store/provider.js.map +0 -1
  867. package/dist/store/safety-data-accessor.js +0 -243
  868. package/dist/store/safety-data-accessor.js.map +0 -1
  869. package/dist/store/schema.js +0 -7
  870. package/dist/store/schema.js.map +0 -1
  871. package/dist/store/session-store.js +0 -219
  872. package/dist/store/session-store.js.map +0 -1
  873. package/dist/store/sqlite-backup.js +0 -105
  874. package/dist/store/sqlite-backup.js.map +0 -1
  875. package/dist/store/sqlite-data-accessor.js +0 -734
  876. package/dist/store/sqlite-data-accessor.js.map +0 -1
  877. package/dist/store/sqlite.js +0 -436
  878. package/dist/store/sqlite.js.map +0 -1
  879. package/dist/store/status-registry.js +0 -8
  880. package/dist/store/status-registry.js.map +0 -1
  881. package/dist/store/task-store.js +0 -348
  882. package/dist/store/task-store.js.map +0 -1
  883. package/dist/store/tasks-schema.js +0 -604
  884. package/dist/store/tasks-schema.js.map +0 -1
  885. package/dist/store/typed-query.js +0 -15
  886. package/dist/store/typed-query.js.map +0 -1
  887. package/dist/store/validation-schemas.js +0 -278
  888. package/dist/store/validation-schemas.js.map +0 -1
  889. package/dist/system/archive-analytics.js +0 -277
  890. package/dist/system/archive-analytics.js.map +0 -1
  891. package/dist/system/archive-stats.js +0 -64
  892. package/dist/system/archive-stats.js.map +0 -1
  893. package/dist/system/audit.js +0 -145
  894. package/dist/system/audit.js.map +0 -1
  895. package/dist/system/backup.js +0 -141
  896. package/dist/system/backup.js.map +0 -1
  897. package/dist/system/cleanup.js +0 -134
  898. package/dist/system/cleanup.js.map +0 -1
  899. package/dist/system/health.js +0 -1054
  900. package/dist/system/health.js.map +0 -1
  901. package/dist/system/index.js +0 -18
  902. package/dist/system/index.js.map +0 -1
  903. package/dist/system/inject-generate.js +0 -122
  904. package/dist/system/inject-generate.js.map +0 -1
  905. package/dist/system/labels.js +0 -38
  906. package/dist/system/labels.js.map +0 -1
  907. package/dist/system/metrics.js +0 -61
  908. package/dist/system/metrics.js.map +0 -1
  909. package/dist/system/migrate.js +0 -43
  910. package/dist/system/migrate.js.map +0 -1
  911. package/dist/system/platform-paths.js +0 -80
  912. package/dist/system/platform-paths.js.map +0 -1
  913. package/dist/system/runtime.js +0 -161
  914. package/dist/system/runtime.js.map +0 -1
  915. package/dist/system/safestop.js +0 -99
  916. package/dist/system/safestop.js.map +0 -1
  917. package/dist/system/storage-preflight.js +0 -123
  918. package/dist/system/storage-preflight.js.map +0 -1
  919. package/dist/task-work/index.js +0 -155
  920. package/dist/task-work/index.js.map +0 -1
  921. package/dist/tasks/add.js +0 -661
  922. package/dist/tasks/add.js.map +0 -1
  923. package/dist/tasks/analyze.js +0 -85
  924. package/dist/tasks/analyze.js.map +0 -1
  925. package/dist/tasks/archive.js +0 -90
  926. package/dist/tasks/archive.js.map +0 -1
  927. package/dist/tasks/atomicity.js +0 -83
  928. package/dist/tasks/atomicity.js.map +0 -1
  929. package/dist/tasks/cancel-ops.js +0 -83
  930. package/dist/tasks/cancel-ops.js.map +0 -1
  931. package/dist/tasks/complete.js +0 -208
  932. package/dist/tasks/complete.js.map +0 -1
  933. package/dist/tasks/crossref-extract.js +0 -73
  934. package/dist/tasks/crossref-extract.js.map +0 -1
  935. package/dist/tasks/delete-preview.js +0 -192
  936. package/dist/tasks/delete-preview.js.map +0 -1
  937. package/dist/tasks/delete.js +0 -120
  938. package/dist/tasks/delete.js.map +0 -1
  939. package/dist/tasks/deletion-strategy.js +0 -200
  940. package/dist/tasks/deletion-strategy.js.map +0 -1
  941. package/dist/tasks/dependency-check.js +0 -278
  942. package/dist/tasks/dependency-check.js.map +0 -1
  943. package/dist/tasks/deps-ready.js +0 -32
  944. package/dist/tasks/deps-ready.js.map +0 -1
  945. package/dist/tasks/enforcement.js +0 -86
  946. package/dist/tasks/enforcement.js.map +0 -1
  947. package/dist/tasks/epic-enforcement.js +0 -294
  948. package/dist/tasks/epic-enforcement.js.map +0 -1
  949. package/dist/tasks/find.js +0 -148
  950. package/dist/tasks/find.js.map +0 -1
  951. package/dist/tasks/graph-cache.js +0 -127
  952. package/dist/tasks/graph-cache.js.map +0 -1
  953. package/dist/tasks/graph-ops.js +0 -171
  954. package/dist/tasks/graph-ops.js.map +0 -1
  955. package/dist/tasks/graph-rag.js +0 -328
  956. package/dist/tasks/graph-rag.js.map +0 -1
  957. package/dist/tasks/hierarchy-policy.js +0 -149
  958. package/dist/tasks/hierarchy-policy.js.map +0 -1
  959. package/dist/tasks/hierarchy.js +0 -185
  960. package/dist/tasks/hierarchy.js.map +0 -1
  961. package/dist/tasks/id-generator.js +0 -65
  962. package/dist/tasks/id-generator.js.map +0 -1
  963. package/dist/tasks/index.js +0 -14
  964. package/dist/tasks/index.js.map +0 -1
  965. package/dist/tasks/labels.js +0 -52
  966. package/dist/tasks/labels.js.map +0 -1
  967. package/dist/tasks/list.js +0 -68
  968. package/dist/tasks/list.js.map +0 -1
  969. package/dist/tasks/phase-tracking.js +0 -133
  970. package/dist/tasks/phase-tracking.js.map +0 -1
  971. package/dist/tasks/pipeline-stage.js +0 -248
  972. package/dist/tasks/pipeline-stage.js.map +0 -1
  973. package/dist/tasks/plan.js +0 -268
  974. package/dist/tasks/plan.js.map +0 -1
  975. package/dist/tasks/relates.js +0 -89
  976. package/dist/tasks/relates.js.map +0 -1
  977. package/dist/tasks/reparent.d.ts +0 -38
  978. package/dist/tasks/reparent.d.ts.map +0 -1
  979. package/dist/tasks/show.js +0 -78
  980. package/dist/tasks/show.js.map +0 -1
  981. package/dist/tasks/size-weighting.js +0 -86
  982. package/dist/tasks/size-weighting.js.map +0 -1
  983. package/dist/tasks/staleness.js +0 -86
  984. package/dist/tasks/staleness.js.map +0 -1
  985. package/dist/tasks/task-ops.js +0 -1340
  986. package/dist/tasks/task-ops.js.map +0 -1
  987. package/dist/tasks/update.js +0 -271
  988. package/dist/tasks/update.js.map +0 -1
  989. package/dist/templates/index.js +0 -10
  990. package/dist/templates/index.js.map +0 -1
  991. package/dist/templates/parser.js +0 -254
  992. package/dist/templates/parser.js.map +0 -1
  993. package/dist/ui/aliases.js +0 -153
  994. package/dist/ui/aliases.js.map +0 -1
  995. package/dist/ui/changelog.js +0 -184
  996. package/dist/ui/changelog.js.map +0 -1
  997. package/dist/ui/command-registry.js +0 -168
  998. package/dist/ui/command-registry.js.map +0 -1
  999. package/dist/ui/flags.js +0 -94
  1000. package/dist/ui/flags.js.map +0 -1
  1001. package/dist/ui/index.js +0 -24
  1002. package/dist/ui/index.js.map +0 -1
  1003. package/dist/ui/injection-legacy.d.ts +0 -26
  1004. package/dist/ui/injection-legacy.d.ts.map +0 -1
  1005. package/dist/ui/injection-legacy.js +0 -42
  1006. package/dist/ui/injection-legacy.js.map +0 -1
  1007. package/dist/upgrade.js +0 -1144
  1008. package/dist/upgrade.js.map +0 -1
  1009. package/dist/validation/chain-validation.js +0 -146
  1010. package/dist/validation/chain-validation.js.map +0 -1
  1011. package/dist/validation/compliance.js +0 -155
  1012. package/dist/validation/compliance.js.map +0 -1
  1013. package/dist/validation/docs-sync.js +0 -212
  1014. package/dist/validation/docs-sync.js.map +0 -1
  1015. package/dist/validation/doctor/checks.js +0 -1069
  1016. package/dist/validation/doctor/checks.js.map +0 -1
  1017. package/dist/validation/doctor/index.js +0 -9
  1018. package/dist/validation/doctor/index.js.map +0 -1
  1019. package/dist/validation/doctor/project-cache.js +0 -160
  1020. package/dist/validation/doctor/project-cache.js.map +0 -1
  1021. package/dist/validation/doctor/utils.js +0 -155
  1022. package/dist/validation/doctor/utils.js.map +0 -1
  1023. package/dist/validation/engine.js +0 -902
  1024. package/dist/validation/engine.js.map +0 -1
  1025. package/dist/validation/gap-check.js +0 -175
  1026. package/dist/validation/gap-check.js.map +0 -1
  1027. package/dist/validation/index.js +0 -40
  1028. package/dist/validation/index.js.map +0 -1
  1029. package/dist/validation/manifest.js +0 -237
  1030. package/dist/validation/manifest.js.map +0 -1
  1031. package/dist/validation/operation-gate-validators.js +0 -724
  1032. package/dist/validation/operation-gate-validators.js.map +0 -1
  1033. package/dist/validation/operation-verification-gates.js +0 -532
  1034. package/dist/validation/operation-verification-gates.js.map +0 -1
  1035. package/dist/validation/param-utils.js +0 -139
  1036. package/dist/validation/param-utils.js.map +0 -1
  1037. package/dist/validation/protocol-common.js +0 -300
  1038. package/dist/validation/protocol-common.js.map +0 -1
  1039. package/dist/validation/protocols/consensus.js +0 -71
  1040. package/dist/validation/protocols/consensus.js.map +0 -1
  1041. package/dist/validation/protocols/contribution.js +0 -59
  1042. package/dist/validation/protocols/contribution.js.map +0 -1
  1043. package/dist/validation/protocols/decomposition.js +0 -59
  1044. package/dist/validation/protocols/decomposition.js.map +0 -1
  1045. package/dist/validation/protocols/implementation.js +0 -59
  1046. package/dist/validation/protocols/implementation.js.map +0 -1
  1047. package/dist/validation/protocols/release-protocol.js +0 -60
  1048. package/dist/validation/protocols/release-protocol.js.map +0 -1
  1049. package/dist/validation/protocols/research.js +0 -77
  1050. package/dist/validation/protocols/research.js.map +0 -1
  1051. package/dist/validation/protocols/specification.js +0 -84
  1052. package/dist/validation/protocols/specification.js.map +0 -1
  1053. package/dist/validation/protocols/testing-protocol.js +0 -70
  1054. package/dist/validation/protocols/testing-protocol.js.map +0 -1
  1055. package/dist/validation/protocols/validation-protocol.js +0 -70
  1056. package/dist/validation/protocols/validation-protocol.js.map +0 -1
  1057. package/dist/validation/schema-integrity.js +0 -170
  1058. package/dist/validation/schema-integrity.js.map +0 -1
  1059. package/dist/validation/schema-validator.js +0 -176
  1060. package/dist/validation/schema-validator.js.map +0 -1
  1061. package/dist/validation/validate-ops.js +0 -937
  1062. package/dist/validation/validate-ops.js.map +0 -1
  1063. package/dist/validation/validation-rules.js +0 -226
  1064. package/dist/validation/validation-rules.js.map +0 -1
  1065. package/dist/validation/verification.js +0 -321
  1066. package/dist/validation/verification.js.map +0 -1
  1067. package/src/signaldock/__tests__/claude-code-transport.test.d.ts +0 -7
  1068. package/src/signaldock/__tests__/claude-code-transport.test.d.ts.map +0 -1
  1069. package/src/signaldock/__tests__/claude-code-transport.test.js +0 -147
  1070. package/src/signaldock/__tests__/claude-code-transport.test.js.map +0 -1
  1071. package/src/signaldock/__tests__/claude-code-transport.test.ts +0 -180
  1072. package/src/signaldock/__tests__/factory.test.d.ts +0 -7
  1073. package/src/signaldock/__tests__/factory.test.d.ts.map +0 -1
  1074. package/src/signaldock/__tests__/factory.test.js +0 -55
  1075. package/src/signaldock/__tests__/factory.test.js.map +0 -1
  1076. package/src/signaldock/__tests__/factory.test.ts +0 -61
  1077. package/src/signaldock/__tests__/signaldock-transport.test.d.ts +0 -9
  1078. package/src/signaldock/__tests__/signaldock-transport.test.d.ts.map +0 -1
  1079. package/src/signaldock/__tests__/signaldock-transport.test.js +0 -321
  1080. package/src/signaldock/__tests__/signaldock-transport.test.js.map +0 -1
  1081. package/src/signaldock/__tests__/signaldock-transport.test.ts +0 -421
  1082. package/src/signaldock/claude-code-transport.ts +0 -137
  1083. package/src/signaldock/factory.ts +0 -39
  1084. package/src/signaldock/index.ts +0 -28
  1085. package/src/signaldock/signaldock-transport.ts +0 -194
  1086. package/src/signaldock/transport.ts +0 -78
  1087. package/src/signaldock/types.ts +0 -100
@@ -1,937 +0,0 @@
1
- /**
2
- * Core validation operations - business logic extracted from validate-engine.ts.
3
- *
4
- * These are pure business logic functions that throw on failure and return
5
- * data directly (no EngineResult wrapper). The engine layer wraps these
6
- * in try/catch to produce EngineResult.
7
- *
8
- * @task T4786
9
- * @epic T4654
10
- */
11
- import { execFileSync } from 'node:child_process';
12
- import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
13
- import { dirname, join, resolve } from 'node:path';
14
- import { TASK_STATUSES } from '@cleocode/contracts';
15
- import { getManifestPath as getCentralManifestPath } from '../paths.js';
16
- import { getAccessor } from '../store/data-accessor.js';
17
- import { computeChecksum } from '../store/json.js';
18
- import { detectCircularDeps, validateDependencies } from '../tasks/dependency-check.js';
19
- import { validateSchema as ajvValidateSchema } from './schema-validator.js';
20
- import { hasErrors, validateHierarchy, validateIdUniqueness, validateNoDuplicateDescription, validateTimestamps, validateTitleDescription, } from './validation-rules.js';
21
- /**
22
- * Run comprehensive validation report on tasks database — checks business rules,
23
- * dependencies, checksums, data integrity, and schema compliance.
24
- * @task T4795
25
- */
26
- export async function coreValidateReport(projectRoot) {
27
- const accessor = await getAccessor(projectRoot);
28
- const { tasks: allTasks } = await accessor.queryTasks({});
29
- const details = [];
30
- let errors = 0;
31
- let warnings = 0;
32
- const addOk = (check, message) => {
33
- details.push({ check, status: 'ok', message });
34
- };
35
- const addError = (check, message) => {
36
- details.push({ check, status: 'error', message });
37
- errors++;
38
- };
39
- const addWarn = (check, message) => {
40
- details.push({ check, status: 'warning', message });
41
- warnings++;
42
- };
43
- // 1. JSON syntax (already parsed above)
44
- addOk('json_syntax', 'JSON syntax valid');
45
- // 2. Check duplicate task IDs
46
- const idCounts = new Map();
47
- for (const t of allTasks) {
48
- idCounts.set(t.id, (idCounts.get(t.id) ?? 0) + 1);
49
- }
50
- const duplicateIds = [...idCounts.entries()].filter(([, c]) => c > 1).map(([id]) => id);
51
- if (duplicateIds.length > 0) {
52
- addError('duplicate_ids_todo', `Duplicate task IDs in tasks database: ${duplicateIds.join(', ')}`);
53
- }
54
- else {
55
- addOk('duplicate_ids_todo', 'No duplicate task IDs in tasks database');
56
- }
57
- // 2b. Cross-file duplicates with archive
58
- const archive = await accessor.loadArchive();
59
- if (archive && archive.archivedTasks.length > 0) {
60
- const archiveIds = new Set(archive.archivedTasks.map((t) => t.id));
61
- const todoIds = new Set(allTasks.map((t) => t.id));
62
- const crossDups = [...todoIds].filter((id) => archiveIds.has(id));
63
- if (crossDups.length > 0) {
64
- addError('duplicate_ids_cross', `IDs exist in both tasks database and archive: ${crossDups.join(', ')}`);
65
- }
66
- else {
67
- addOk('duplicate_ids_cross', 'No cross-file duplicate IDs');
68
- }
69
- }
70
- // 3. Active task limit
71
- const activeTasks = allTasks.filter((t) => t.status === 'active');
72
- if (activeTasks.length > 1) {
73
- addError('active_task', `Too many active tasks: ${activeTasks.length}. Maximum allowed: 1`);
74
- }
75
- else if (activeTasks.length === 1) {
76
- addOk('active_task', 'Single active task');
77
- }
78
- else {
79
- addOk('active_task', 'No active tasks');
80
- }
81
- // 4. Dependencies exist
82
- const taskIds = new Set(allTasks.map((t) => t.id));
83
- const missingDeps = [];
84
- for (const t of allTasks) {
85
- if (t.depends) {
86
- for (const depId of t.depends) {
87
- if (!taskIds.has(depId))
88
- missingDeps.push(depId);
89
- }
90
- }
91
- }
92
- if (missingDeps.length > 0) {
93
- addError('dependencies', `Missing dependency references: ${[...new Set(missingDeps)].join(', ')}`);
94
- }
95
- else {
96
- addOk('dependencies', 'All dependencies exist');
97
- }
98
- // 5. Circular dependencies
99
- const depResult = validateDependencies(allTasks);
100
- const circularErrors = depResult.errors.filter((e) => e.code === 'E_CIRCULAR_DEP');
101
- if (circularErrors.length > 0) {
102
- for (const err of circularErrors) {
103
- addError('circular_deps', err.message);
104
- }
105
- }
106
- else {
107
- addOk('circular_deps', 'No circular dependencies');
108
- }
109
- // 6. Blocked tasks have blockedBy
110
- const blockedNoReason = allTasks.filter((t) => t.status === 'blocked' && !t.blockedBy);
111
- if (blockedNoReason.length > 0) {
112
- addError('blocked_reasons', `${blockedNoReason.length} blocked task(s) missing blockedBy reason`);
113
- }
114
- else {
115
- addOk('blocked_reasons', 'All blocked tasks have reasons');
116
- }
117
- // 7. Done tasks have completedAt
118
- const doneNoDate = allTasks.filter((t) => t.status === 'done' && !t.completedAt);
119
- if (doneNoDate.length > 0) {
120
- addError('completed_at', `${doneNoDate.length} done task(s) missing completedAt`);
121
- }
122
- else {
123
- addOk('completed_at', 'All done tasks have completedAt');
124
- }
125
- // 8. Schema version
126
- const schemaVersion = await accessor.getSchemaVersion();
127
- if (!schemaVersion) {
128
- addError('schema_version', 'Missing ._meta.schemaVersion field. Run: cleo upgrade');
129
- }
130
- else {
131
- addOk('schema_version', `Schema version compatible (${schemaVersion})`);
132
- }
133
- // 9. Required fields
134
- const missingFieldTasks = allTasks.filter((t) => !t.id || !t.title || !t.status || !t.priority || !t.createdAt);
135
- if (missingFieldTasks.length > 0) {
136
- for (const t of missingFieldTasks) {
137
- const missing = [];
138
- if (!t.id)
139
- missing.push('id');
140
- if (!t.title)
141
- missing.push('title');
142
- if (!t.status)
143
- missing.push('status');
144
- if (!t.priority)
145
- missing.push('priority');
146
- if (!t.createdAt)
147
- missing.push('createdAt');
148
- addError('required_fields', `Task ${t.id ?? '(unknown)'} missing: ${missing.join(', ')}`);
149
- }
150
- }
151
- else {
152
- addOk('required_fields', 'All tasks have required fields');
153
- }
154
- // 10. Focus matches active task
155
- const focusState = await accessor.getMetaValue('focus_state');
156
- const focusTask = focusState?.currentTask;
157
- const activeTaskId = activeTasks[0]?.id ?? null;
158
- if (focusTask && focusTask !== activeTaskId) {
159
- addError('focus_match', `focus.currentTask (${focusTask}) doesn't match active task (${activeTaskId ?? 'none'})`);
160
- }
161
- else {
162
- addOk('focus_match', 'Focus matches active task');
163
- }
164
- // 11. Checksum
165
- const fileMeta = await accessor.getMetaValue('file_meta');
166
- const storedChecksum = fileMeta?.checksum;
167
- if (storedChecksum) {
168
- const computed = computeChecksum(allTasks);
169
- if (storedChecksum !== computed) {
170
- addError('checksum', `Checksum mismatch: stored=${storedChecksum}, computed=${computed}`);
171
- }
172
- else {
173
- addOk('checksum', 'Checksum valid');
174
- }
175
- }
176
- else {
177
- addWarn('checksum', 'No checksum found');
178
- }
179
- // 12. Missing size fields
180
- const missingSizeTasks = allTasks.filter((t) => !t.size);
181
- if (missingSizeTasks.length > 0) {
182
- addWarn('missing_sizes', `${missingSizeTasks.length} task(s) missing size field`);
183
- }
184
- else {
185
- addOk('missing_sizes', 'All tasks have size field');
186
- }
187
- // 13. Stale tasks (pending > 30 days)
188
- const staleDays = 30;
189
- const staleThreshold = Date.now() - staleDays * 86400 * 1000;
190
- const staleTasks = allTasks.filter((t) => t.status === 'pending' && t.createdAt && new Date(t.createdAt).getTime() < staleThreshold);
191
- if (staleTasks.length > 0) {
192
- addWarn('stale_tasks', `${staleTasks.length} task(s) pending for >${staleDays} days`);
193
- }
194
- return {
195
- valid: errors === 0,
196
- schemaVersion: schemaVersion ?? 'unknown',
197
- errors,
198
- warnings,
199
- details,
200
- };
201
- }
202
- // ============================================================================
203
- // Validate and Fix
204
- // ============================================================================
205
- import { runAllRepairs } from '../repair.js';
206
- /**
207
- * Run validation report, then apply data repairs for fixable issues.
208
- * Calls runAllRepairs() from src/core/repair.ts (same repairs used by `upgrade`).
209
- * @task T4795
210
- */
211
- export async function coreValidateAndFix(projectRoot, dryRun = false) {
212
- // Repairs operate directly on SQLite — no TaskFile loading required
213
- const repairs = await runAllRepairs(projectRoot, dryRun);
214
- const applied = repairs.filter((r) => r.status === 'applied');
215
- // Run validation report after repairs
216
- const report = await coreValidateReport(projectRoot);
217
- return {
218
- ...report,
219
- repairsApplied: applied.length,
220
- repairs,
221
- };
222
- }
223
- // ============================================================================
224
- // Schema Validation
225
- // ============================================================================
226
- /** Read a JSON file, returning parsed data or null. */
227
- function readJsonFile(filePath) {
228
- try {
229
- const raw = readFileSync(filePath, 'utf-8');
230
- return JSON.parse(raw);
231
- }
232
- catch {
233
- return null;
234
- }
235
- }
236
- /**
237
- * Validate data against a schema type.
238
- *
239
- * For SQLite-backed types (todo, archive, sessions, log), queries rows
240
- * directly from SQLite and validates with drizzle-zod schemas.
241
- * For config type, uses AJV against the JSON schema file.
242
- * If raw `data` is provided, validates directly with AJV (backward compat).
243
- *
244
- * @task T4786
245
- */
246
- export async function coreValidateSchema(type, data, projectRoot) {
247
- if (!type) {
248
- throw new Error('type is required (todo, config, archive, log, sessions)');
249
- }
250
- const validTypes = ['todo', 'config', 'archive', 'log', 'sessions'];
251
- if (!validTypes.includes(type)) {
252
- throw new Error(`Unknown schema type: ${type}. Valid types: ${validTypes.join(', ')}`);
253
- }
254
- // Config type: AJV against JSON schema file (not stored in SQLite)
255
- if (type === 'config') {
256
- const filePath = join(projectRoot, '.cleo', 'config.json');
257
- if (!existsSync(filePath)) {
258
- throw new Error('File not found: .cleo/config.json');
259
- }
260
- const configData = data ?? readJsonFile(filePath);
261
- const result = ajvValidateSchema('config', configData);
262
- return { type, valid: result.valid, errors: result.errors, errorCount: result.errors.length };
263
- }
264
- // SQLite-backed types: query rows and validate with drizzle-zod
265
- return validateSqliteRows(type, projectRoot);
266
- }
267
- /** Collect validation errors from a Zod safeParse result for a given row. */
268
- function collectZodErrors(result, rowId) {
269
- if (result.success)
270
- return [];
271
- return (result.error?.issues ?? []).map((issue) => ({
272
- path: `/${rowId}/` + issue.path.map(String).join('/'),
273
- message: issue.message,
274
- keyword: issue.code,
275
- rowId,
276
- }));
277
- }
278
- /**
279
- * Query rows from SQLite and validate each against the drizzle-zod select schema.
280
- */
281
- async function validateSqliteRows(type, projectRoot) {
282
- const { getDb } = await import('../store/sqlite.js');
283
- const schemaTable = await import('../store/tasks-schema.js');
284
- const zodSchemas = await import('../store/validation-schemas.js');
285
- const { ne, eq } = await import('drizzle-orm');
286
- const db = await getDb(projectRoot);
287
- const errors = [];
288
- switch (type) {
289
- case 'todo': {
290
- const rows = await db
291
- .select()
292
- .from(schemaTable.tasks)
293
- .where(ne(schemaTable.tasks.status, 'archived'));
294
- for (const row of rows) {
295
- errors.push(...collectZodErrors(zodSchemas.selectTaskSchema.safeParse(row), row.id));
296
- }
297
- break;
298
- }
299
- case 'archive': {
300
- const rows = await db
301
- .select()
302
- .from(schemaTable.tasks)
303
- .where(eq(schemaTable.tasks.status, 'archived'));
304
- for (const row of rows) {
305
- errors.push(...collectZodErrors(zodSchemas.selectTaskSchema.safeParse(row), row.id));
306
- }
307
- break;
308
- }
309
- case 'sessions': {
310
- const rows = await db.select().from(schemaTable.sessions);
311
- for (const row of rows) {
312
- errors.push(...collectZodErrors(zodSchemas.selectSessionSchema.safeParse(row), row.id));
313
- }
314
- break;
315
- }
316
- case 'log': {
317
- const rows = await db.select().from(schemaTable.auditLog).limit(1000);
318
- for (const row of rows) {
319
- errors.push(...collectZodErrors(zodSchemas.selectAuditLogSchema.safeParse(row), row.id));
320
- }
321
- break;
322
- }
323
- default:
324
- throw new Error(`Unknown SQLite type: ${type}`);
325
- }
326
- return { type, valid: errors.length === 0, errors, errorCount: errors.length };
327
- }
328
- // ============================================================================
329
- // Task Validation (Anti-Hallucination)
330
- // ============================================================================
331
- /**
332
- * Validate a single task against anti-hallucination rules.
333
- * @task T4786
334
- */
335
- export async function coreValidateTask(taskId, projectRoot) {
336
- if (!taskId) {
337
- throw new Error('taskId is required');
338
- }
339
- const accessor = await getAccessor(projectRoot);
340
- const { tasks: activeTasks } = await accessor.queryTasks({});
341
- const archiveData = await accessor.loadArchive();
342
- const allValidationTasks = [...activeTasks, ...(archiveData?.archivedTasks || [])];
343
- const task = allValidationTasks.find((t) => t.id === taskId);
344
- if (!task) {
345
- throw new Error(`Task ${taskId} not found`);
346
- }
347
- const violations = [];
348
- violations.push(...validateTitleDescription(task.title, task.description));
349
- violations.push(...validateTimestamps(task));
350
- const allIds = new Set(allValidationTasks.map((t) => t.id));
351
- violations.push(...validateIdUniqueness(task.id, allIds));
352
- const allDescriptions = allValidationTasks
353
- .filter((t) => t.id !== task.id)
354
- .map((t) => t.description ?? '');
355
- violations.push(...validateNoDuplicateDescription(task.description ?? '', allDescriptions));
356
- if (task.parentId) {
357
- const parent = allValidationTasks.find((t) => t.id === task.parentId);
358
- if (parent) {
359
- violations.push(...validateHierarchy(task.parentId, allValidationTasks));
360
- }
361
- }
362
- return {
363
- taskId,
364
- valid: !hasErrors(violations),
365
- violations,
366
- errorCount: violations.filter((v) => v.severity === 'error').length,
367
- warningCount: violations.filter((v) => v.severity === 'warning').length,
368
- };
369
- }
370
- // ============================================================================
371
- // Protocol Validation
372
- // ============================================================================
373
- /**
374
- * Check basic protocol compliance for a task.
375
- * @task T4786
376
- */
377
- export async function coreValidateProtocol(taskId, protocolType, projectRoot) {
378
- if (!taskId) {
379
- throw new Error('taskId is required');
380
- }
381
- const accessor = await getAccessor(projectRoot);
382
- const task = await accessor.loadSingleTask(taskId);
383
- if (!task) {
384
- throw new Error(`Task ${taskId} not found`);
385
- }
386
- const violations = [];
387
- if (!task.title) {
388
- violations.push({
389
- code: 'P_MISSING_TITLE',
390
- message: 'Task title is missing',
391
- severity: 'error',
392
- });
393
- }
394
- if (!task.description) {
395
- violations.push({
396
- code: 'P_MISSING_DESCRIPTION',
397
- message: 'Task description is missing',
398
- severity: 'error',
399
- });
400
- }
401
- if (task.title === task.description) {
402
- violations.push({
403
- code: 'P_SAME_TITLE_DESC',
404
- message: 'Title and description must be different',
405
- severity: 'error',
406
- });
407
- }
408
- if (!TASK_STATUSES.includes(task.status)) {
409
- violations.push({
410
- code: 'P_INVALID_STATUS',
411
- message: `Invalid status: ${task.status}. Valid: ${TASK_STATUSES.join(', ')}`,
412
- severity: 'error',
413
- });
414
- }
415
- return {
416
- taskId,
417
- protocolType: protocolType || 'generic',
418
- compliant: violations.filter((v) => v.severity === 'error').length === 0,
419
- violations,
420
- };
421
- }
422
- // ============================================================================
423
- // Manifest Validation
424
- // ============================================================================
425
- /**
426
- * Validate manifest JSONL entries for required fields.
427
- * @task T4786
428
- */
429
- export function coreValidateManifest(projectRoot) {
430
- const manifestPath = getCentralManifestPath(projectRoot);
431
- if (!existsSync(manifestPath)) {
432
- return {
433
- valid: true,
434
- totalEntries: 0,
435
- validEntries: 0,
436
- invalidEntries: 0,
437
- errors: [],
438
- message: 'No manifest file found',
439
- };
440
- }
441
- const content = readFileSync(manifestPath, 'utf-8');
442
- const lines = content.split('\n').filter((l) => l.trim());
443
- let validCount = 0;
444
- let invalidCount = 0;
445
- const errors = [];
446
- for (let i = 0; i < lines.length; i++) {
447
- try {
448
- const entry = JSON.parse(lines[i]);
449
- const entryErrors = [];
450
- if (!entry.id)
451
- entryErrors.push('missing id');
452
- if (!entry.file)
453
- entryErrors.push('missing file');
454
- if (!entry.title)
455
- entryErrors.push('missing title');
456
- if (!entry.date)
457
- entryErrors.push('missing date');
458
- if (!entry.status)
459
- entryErrors.push('missing status');
460
- if (!entry.agent_type)
461
- entryErrors.push('missing agent_type');
462
- if (!entry.topics)
463
- entryErrors.push('missing topics');
464
- if (entry.actionable === undefined)
465
- entryErrors.push('missing actionable');
466
- if (entryErrors.length > 0) {
467
- invalidCount++;
468
- errors.push({ line: i + 1, entryId: entry.id || `line-${i + 1}`, errors: entryErrors });
469
- }
470
- else {
471
- validCount++;
472
- }
473
- }
474
- catch {
475
- invalidCount++;
476
- errors.push({ line: i + 1, entryId: `line-${i + 1}`, errors: ['invalid JSON'] });
477
- }
478
- }
479
- return {
480
- valid: invalidCount === 0,
481
- totalEntries: lines.length,
482
- validEntries: validCount,
483
- invalidEntries: invalidCount,
484
- errors,
485
- };
486
- }
487
- // ============================================================================
488
- // Output Validation
489
- // ============================================================================
490
- /**
491
- * Validate an output file for required sections.
492
- * @task T4786
493
- */
494
- export function coreValidateOutput(filePath, taskId, projectRoot) {
495
- if (!filePath) {
496
- throw new Error('filePath is required');
497
- }
498
- const fullPath = resolve(projectRoot, filePath);
499
- if (!existsSync(fullPath)) {
500
- throw new Error(`Output file not found: ${filePath}`);
501
- }
502
- const content = readFileSync(fullPath, 'utf-8');
503
- const issues = [];
504
- if (!content.includes('# ')) {
505
- issues.push({
506
- code: 'O_MISSING_TITLE',
507
- message: 'Output file should have a markdown title',
508
- severity: 'warning',
509
- });
510
- }
511
- if (taskId && !content.includes(taskId)) {
512
- issues.push({
513
- code: 'O_MISSING_TASK_REF',
514
- message: `Output file should reference task ${taskId}`,
515
- severity: 'warning',
516
- });
517
- }
518
- if (!content.includes('## Summary') && !content.includes('## summary')) {
519
- issues.push({
520
- code: 'O_MISSING_SUMMARY',
521
- message: 'Output file should have a Summary section',
522
- severity: 'warning',
523
- });
524
- }
525
- return {
526
- filePath,
527
- valid: issues.filter((i) => i.severity === 'error').length === 0,
528
- issues,
529
- fileSize: content.length,
530
- lineCount: content.split('\n').length,
531
- };
532
- }
533
- // ============================================================================
534
- // Compliance Summary
535
- // ============================================================================
536
- /** Parse COMPLIANCE.jsonl entries. */
537
- function parseComplianceEntries(projectRoot) {
538
- const compliancePath = join(projectRoot, '.cleo', 'metrics', 'COMPLIANCE.jsonl');
539
- if (!existsSync(compliancePath)) {
540
- return [];
541
- }
542
- const content = readFileSync(compliancePath, 'utf-8');
543
- const entries = [];
544
- for (const line of content.split('\n')) {
545
- const trimmed = line.trim();
546
- if (!trimmed)
547
- continue;
548
- try {
549
- entries.push(JSON.parse(trimmed));
550
- }
551
- catch { }
552
- }
553
- return entries;
554
- }
555
- /**
556
- * Get aggregated compliance metrics.
557
- * @task T4786
558
- */
559
- export function coreComplianceSummary(projectRoot) {
560
- const entries = parseComplianceEntries(projectRoot);
561
- const pass = entries.filter((e) => e.result === 'pass').length;
562
- const fail = entries.filter((e) => e.result === 'fail').length;
563
- const partial = entries.filter((e) => e.result === 'partial').length;
564
- const total = entries.length;
565
- const byProtocol = {};
566
- for (const entry of entries) {
567
- if (!byProtocol[entry.protocol]) {
568
- byProtocol[entry.protocol] = { pass: 0, fail: 0, partial: 0 };
569
- }
570
- byProtocol[entry.protocol][entry.result]++;
571
- }
572
- return {
573
- total,
574
- pass,
575
- fail,
576
- partial,
577
- passRate: total > 0 ? Math.round((pass / total) * 100) : 0,
578
- byProtocol,
579
- };
580
- }
581
- // ============================================================================
582
- // Compliance Violations
583
- // ============================================================================
584
- /**
585
- * List compliance violations.
586
- * @task T4786
587
- */
588
- export function coreComplianceViolations(limit, projectRoot) {
589
- const entries = parseComplianceEntries(projectRoot);
590
- let violations = entries.filter((e) => e.result === 'fail' || e.result === 'partial');
591
- if (limit && limit > 0) {
592
- violations = violations.slice(-limit);
593
- }
594
- return {
595
- violations: violations.map((v) => ({
596
- timestamp: v.timestamp,
597
- taskId: v.taskId,
598
- protocol: v.protocol,
599
- result: v.result,
600
- violations: v.violations,
601
- })),
602
- total: violations.length,
603
- };
604
- }
605
- // ============================================================================
606
- // Compliance Record
607
- // ============================================================================
608
- /**
609
- * Record a compliance check result to COMPLIANCE.jsonl.
610
- * @task T4786
611
- */
612
- export function coreComplianceRecord(taskId, result, protocol, violations, projectRoot) {
613
- if (!taskId || !result) {
614
- throw new Error('taskId and result are required');
615
- }
616
- const validResults = ['pass', 'fail', 'partial'];
617
- if (!validResults.includes(result)) {
618
- throw new Error(`Invalid result: ${result}. Valid: ${validResults.join(', ')}`);
619
- }
620
- const compliancePath = join(projectRoot, '.cleo', 'metrics', 'COMPLIANCE.jsonl');
621
- const dir = dirname(compliancePath);
622
- if (!existsSync(dir)) {
623
- mkdirSync(dir, { recursive: true });
624
- }
625
- const entry = {
626
- timestamp: new Date().toISOString(),
627
- taskId,
628
- protocol: protocol || 'generic',
629
- result: result,
630
- violations,
631
- linkedTask: taskId,
632
- };
633
- appendFileSync(compliancePath, JSON.stringify(entry) + '\n', 'utf-8');
634
- return {
635
- recorded: true,
636
- taskId,
637
- result,
638
- protocol: protocol || 'generic',
639
- };
640
- }
641
- // ============================================================================
642
- // Test Status
643
- // ============================================================================
644
- /**
645
- * Check test suite availability.
646
- * @task T4786
647
- */
648
- export function coreTestStatus(projectRoot) {
649
- const testDir = join(projectRoot, 'tests');
650
- const mcpTestDir = join(projectRoot, 'src', 'mcp', '__tests__');
651
- const hasBatsTests = existsSync(testDir);
652
- const hasMcpTests = existsSync(mcpTestDir);
653
- return {
654
- batsTests: {
655
- available: hasBatsTests,
656
- directory: hasBatsTests ? 'tests/' : null,
657
- },
658
- mcpTests: {
659
- available: hasMcpTests,
660
- directory: hasMcpTests ? 'src/mcp/__tests__/' : null,
661
- },
662
- message: 'Use validate.test.run to execute tests',
663
- };
664
- }
665
- // ============================================================================
666
- // Coherence Check
667
- // ============================================================================
668
- /**
669
- * Cross-validate task graph for consistency.
670
- * @task T4786
671
- */
672
- export async function coreCoherenceCheck(projectRoot) {
673
- const accessor = await getAccessor(projectRoot);
674
- const { tasks } = await accessor.queryTasks({});
675
- if (!tasks || tasks.length === 0) {
676
- throw new Error('No task data found (SQLite store unavailable)');
677
- }
678
- const taskMap = new Map(tasks.map((t) => [t.id, t]));
679
- const issues = [];
680
- // 1. Done tasks with incomplete subtasks
681
- for (const task of tasks) {
682
- if (task.status === 'done') {
683
- const incompleteChildren = tasks.filter((t) => t.parentId === task.id && t.status !== 'done' && t.status !== 'cancelled');
684
- for (const child of incompleteChildren) {
685
- issues.push({
686
- type: 'done_with_incomplete_subtask',
687
- taskId: task.id,
688
- message: `Task ${task.id} is done but child ${child.id} ("${child.title}") has status "${child.status}"`,
689
- severity: 'error',
690
- });
691
- }
692
- }
693
- }
694
- // 2. Dependency cycles
695
- const reportedCycles = new Set();
696
- for (const task of tasks) {
697
- if (task.depends && task.depends.length > 0) {
698
- const cycle = detectCircularDeps(task.id, tasks);
699
- if (cycle.length > 0) {
700
- const cycleKey = [...cycle].sort().join(',');
701
- if (!reportedCycles.has(cycleKey)) {
702
- reportedCycles.add(cycleKey);
703
- issues.push({
704
- type: 'dependency_cycle',
705
- taskId: task.id,
706
- message: `Dependency cycle detected: ${cycle.join(' -> ')}`,
707
- severity: 'error',
708
- });
709
- }
710
- }
711
- }
712
- }
713
- // 3. Orphaned references — query taskDependencies directly to catch refs filtered
714
- // out by loadDependenciesForTasks (which strips non-existent dependsOn IDs).
715
- try {
716
- const { getDb } = await import('../store/sqlite.js');
717
- const schemaTable = await import('../store/tasks-schema.js');
718
- const db = await getDb(projectRoot);
719
- const allDepRows = await db.select().from(schemaTable.taskDependencies).all();
720
- for (const dep of allDepRows) {
721
- if (!taskMap.has(dep.dependsOn)) {
722
- issues.push({
723
- type: 'orphaned_dependency',
724
- taskId: dep.taskId,
725
- message: `Task ${dep.taskId} depends on non-existent task ${dep.dependsOn}`,
726
- severity: 'error',
727
- });
728
- }
729
- }
730
- }
731
- catch {
732
- // Fall back to task.depends if direct DB query unavailable
733
- for (const task of tasks) {
734
- if (task.depends) {
735
- for (const depId of task.depends) {
736
- if (!taskMap.has(depId)) {
737
- issues.push({
738
- type: 'orphaned_dependency',
739
- taskId: task.id,
740
- message: `Task ${task.id} depends on non-existent task ${depId}`,
741
- severity: 'error',
742
- });
743
- }
744
- }
745
- }
746
- }
747
- }
748
- // 4. Stale tasks
749
- const thirtyDaysMs = 30 * 24 * 60 * 60 * 1000;
750
- const now = Date.now();
751
- for (const task of tasks) {
752
- if (task.status === 'active') {
753
- const lastUpdate = task.updatedAt || task.createdAt;
754
- if (lastUpdate) {
755
- const ageMs = now - new Date(lastUpdate).getTime();
756
- if (ageMs > thirtyDaysMs) {
757
- const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));
758
- issues.push({
759
- type: 'stale_task',
760
- taskId: task.id,
761
- message: `Task ${task.id} has been active for ${ageDays} days without update`,
762
- severity: 'warning',
763
- });
764
- }
765
- }
766
- }
767
- }
768
- // 5. Status inconsistencies
769
- for (const task of tasks) {
770
- if (task.parentId && (task.status === 'active' || task.status === 'pending')) {
771
- const parent = taskMap.get(task.parentId);
772
- if (parent && (parent.status === 'done' || parent.status === 'cancelled')) {
773
- issues.push({
774
- type: 'status_inconsistency',
775
- taskId: task.id,
776
- message: `Task ${task.id} is "${task.status}" but parent ${parent.id} is "${parent.status}"`,
777
- severity: 'error',
778
- });
779
- }
780
- }
781
- }
782
- // 6. Duplicate titles
783
- const titleMap = new Map();
784
- for (const task of tasks) {
785
- const titleLower = task.title.toLowerCase().trim();
786
- if (!titleMap.has(titleLower)) {
787
- titleMap.set(titleLower, []);
788
- }
789
- titleMap.get(titleLower).push(task.id);
790
- }
791
- for (const [title, ids] of titleMap) {
792
- if (ids.length > 1) {
793
- issues.push({
794
- type: 'duplicate_title',
795
- taskId: ids[0],
796
- message: `Duplicate title "${title}" found on tasks: ${ids.join(', ')}`,
797
- severity: 'info',
798
- });
799
- }
800
- }
801
- return {
802
- coherent: issues.filter((i) => i.severity === 'error').length === 0,
803
- issues,
804
- };
805
- }
806
- // ============================================================================
807
- // Test Run
808
- // ============================================================================
809
- /**
810
- * Execute test suite via subprocess.
811
- * @task T4786
812
- */
813
- export function coreTestRun(params, projectRoot) {
814
- const hasVitest = existsSync(join(projectRoot, 'node_modules', '.bin', 'vitest'));
815
- const hasBats = existsSync(join(projectRoot, 'tests'));
816
- if (!hasVitest && !hasBats) {
817
- return {
818
- ran: false,
819
- message: 'No test runner found (vitest or bats tests/ directory)',
820
- };
821
- }
822
- try {
823
- const args = ['vitest', 'run', '--reporter=json'];
824
- if (params?.scope) {
825
- args.push(params.scope);
826
- }
827
- if (params?.pattern) {
828
- args.push('--testNamePattern', params.pattern);
829
- }
830
- const result = execFileSync('npx', args, {
831
- cwd: projectRoot,
832
- timeout: 120000,
833
- encoding: 'utf-8',
834
- stdio: ['pipe', 'pipe', 'pipe'],
835
- });
836
- let parsed;
837
- try {
838
- parsed = JSON.parse(result);
839
- }
840
- catch {
841
- parsed = null;
842
- }
843
- return {
844
- ran: true,
845
- runner: 'vitest',
846
- output: parsed || result.slice(0, 2000),
847
- exitCode: 0,
848
- };
849
- }
850
- catch (error) {
851
- const execError = error;
852
- return {
853
- ran: true,
854
- runner: 'vitest',
855
- exitCode: execError.status || 1,
856
- stdout: (execError.stdout || '').slice(0, 2000),
857
- stderr: (execError.stderr || '').slice(0, 2000),
858
- passed: false,
859
- };
860
- }
861
- }
862
- // ============================================================================
863
- // Batch Validate
864
- // ============================================================================
865
- /**
866
- * Batch validate all tasks against schema and rules.
867
- * @task T4786
868
- */
869
- export async function coreBatchValidate(projectRoot) {
870
- const accessor = await getAccessor(projectRoot);
871
- const { tasks: batchTasks } = await accessor.queryTasks({});
872
- const archiveData = await accessor.loadArchive();
873
- const allTasks = [...batchTasks, ...(archiveData?.archivedTasks || [])];
874
- const results = [];
875
- let totalErrors = 0;
876
- let totalWarnings = 0;
877
- const allIds = new Set(allTasks.map((t) => t.id));
878
- const allDescriptions = allTasks.map((t) => t.description ?? '');
879
- for (const task of allTasks) {
880
- const violations = [];
881
- violations.push(...validateTitleDescription(task.title, task.description));
882
- violations.push(...validateTimestamps(task));
883
- violations.push(...validateIdUniqueness(task.id, allIds));
884
- const otherDescs = allDescriptions.filter((_, i) => allTasks[i].id !== task.id);
885
- violations.push(...validateNoDuplicateDescription(task.description ?? '', otherDescs));
886
- if (task.parentId) {
887
- const parent = allTasks.find((t) => t.id === task.parentId);
888
- if (parent) {
889
- violations.push(...validateHierarchy(task.parentId, allTasks));
890
- }
891
- }
892
- const errors = violations.filter((v) => v.severity === 'error').length;
893
- const warnings = violations.filter((v) => v.severity === 'warning').length;
894
- totalErrors += errors;
895
- totalWarnings += warnings;
896
- results.push({
897
- taskId: task.id,
898
- valid: errors === 0,
899
- errorCount: errors,
900
- warningCount: warnings,
901
- violations,
902
- });
903
- }
904
- return {
905
- totalTasks: allTasks.length,
906
- validTasks: results.filter((r) => r.valid).length,
907
- invalidTasks: results.filter((r) => !r.valid).length,
908
- totalErrors,
909
- totalWarnings,
910
- results: results.filter((r) => !r.valid),
911
- };
912
- }
913
- // ============================================================================
914
- // Test Coverage
915
- // ============================================================================
916
- /**
917
- * Get test coverage metrics.
918
- * @task T4786
919
- */
920
- export function coreTestCoverage(projectRoot) {
921
- const coveragePath = join(projectRoot, 'coverage', 'coverage-summary.json');
922
- if (!existsSync(coveragePath)) {
923
- return {
924
- available: false,
925
- message: 'No coverage data found. Run tests with coverage first.',
926
- };
927
- }
928
- const coverageData = readJsonFile(coveragePath);
929
- if (!coverageData) {
930
- throw new Error('Failed to read coverage data');
931
- }
932
- return {
933
- available: true,
934
- ...coverageData,
935
- };
936
- }
937
- //# sourceMappingURL=validate-ops.js.map