@cleocode/core 2026.4.9 → 2026.4.12

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 (1011) hide show
  1. package/dist/adapters/adapter-registry.js +64 -0
  2. package/dist/adapters/adapter-registry.js.map +1 -0
  3. package/dist/adapters/discovery.js +83 -0
  4. package/dist/adapters/discovery.js.map +1 -0
  5. package/dist/adapters/index.js +9 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/manager.js +260 -0
  8. package/dist/adapters/manager.js.map +1 -0
  9. package/dist/admin/export-tasks.js +171 -0
  10. package/dist/admin/export-tasks.js.map +1 -0
  11. package/dist/admin/export.js +103 -0
  12. package/dist/admin/export.js.map +1 -0
  13. package/dist/admin/help.js +106 -0
  14. package/dist/admin/help.js.map +1 -0
  15. package/dist/admin/import-tasks.js +182 -0
  16. package/dist/admin/import-tasks.js.map +1 -0
  17. package/dist/admin/import.js +129 -0
  18. package/dist/admin/import.js.map +1 -0
  19. package/dist/admin/index.js +13 -0
  20. package/dist/admin/index.js.map +1 -0
  21. package/dist/adrs/find.js +134 -0
  22. package/dist/adrs/find.js.map +1 -0
  23. package/dist/adrs/index.js +15 -0
  24. package/dist/adrs/index.js.map +1 -0
  25. package/dist/adrs/link-pipeline.js +160 -0
  26. package/dist/adrs/link-pipeline.js.map +1 -0
  27. package/dist/adrs/list.js +43 -0
  28. package/dist/adrs/list.js.map +1 -0
  29. package/dist/adrs/parse.js +51 -0
  30. package/dist/adrs/parse.js.map +1 -0
  31. package/dist/adrs/show.js +22 -0
  32. package/dist/adrs/show.js.map +1 -0
  33. package/dist/adrs/sync.js +188 -0
  34. package/dist/adrs/sync.js.map +1 -0
  35. package/dist/adrs/types.js +9 -0
  36. package/dist/adrs/types.js.map +1 -0
  37. package/dist/adrs/validate.js +57 -0
  38. package/dist/adrs/validate.js.map +1 -0
  39. package/dist/agents/agent-registry.js +288 -0
  40. package/dist/agents/agent-registry.js.map +1 -0
  41. package/dist/agents/agent-schema.d.ts +2 -2
  42. package/dist/agents/agent-schema.js +82 -0
  43. package/dist/agents/agent-schema.js.map +1 -0
  44. package/dist/agents/capacity.js +116 -0
  45. package/dist/agents/capacity.js.map +1 -0
  46. package/dist/agents/execution-learning.js +474 -0
  47. package/dist/agents/execution-learning.js.map +1 -0
  48. package/dist/agents/health-monitor.js +217 -0
  49. package/dist/agents/health-monitor.js.map +1 -0
  50. package/dist/agents/index.js +29 -0
  51. package/dist/agents/index.js.map +1 -0
  52. package/dist/agents/registry.js +314 -0
  53. package/dist/agents/registry.js.map +1 -0
  54. package/dist/agents/retry.js +215 -0
  55. package/dist/agents/retry.js.map +1 -0
  56. package/dist/audit-prune.js +94 -0
  57. package/dist/audit-prune.js.map +1 -0
  58. package/dist/audit.js +68 -0
  59. package/dist/audit.js.map +1 -0
  60. package/dist/backfill/index.js +229 -0
  61. package/dist/backfill/index.js.map +1 -0
  62. package/dist/bootstrap.js +344 -0
  63. package/dist/bootstrap.js.map +1 -0
  64. package/dist/caamp/adapter.js +259 -0
  65. package/dist/caamp/adapter.js.map +1 -0
  66. package/dist/caamp/capability-check.js +38 -0
  67. package/dist/caamp/capability-check.js.map +1 -0
  68. package/dist/caamp/index.js +21 -0
  69. package/dist/caamp/index.js.map +1 -0
  70. package/dist/caamp-init.js +16 -0
  71. package/dist/caamp-init.js.map +1 -0
  72. package/dist/cleo.js +322 -0
  73. package/dist/cleo.js.map +1 -0
  74. package/dist/code/index.js +10 -0
  75. package/dist/code/index.js.map +1 -0
  76. package/dist/code/outline.js +165 -0
  77. package/dist/code/outline.js.map +1 -0
  78. package/dist/code/parser.js +295 -0
  79. package/dist/code/parser.js.map +1 -0
  80. package/dist/code/search.js +135 -0
  81. package/dist/code/search.js.map +1 -0
  82. package/dist/code/unfold.js +155 -0
  83. package/dist/code/unfold.js.map +1 -0
  84. package/dist/codebase-map/analyzers/architecture.d.ts.map +1 -1
  85. package/dist/codebase-map/analyzers/architecture.js +129 -0
  86. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  87. package/dist/codebase-map/analyzers/concerns.js +122 -0
  88. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  89. package/dist/codebase-map/analyzers/conventions.js +149 -0
  90. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  91. package/dist/codebase-map/analyzers/integrations.js +108 -0
  92. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  93. package/dist/codebase-map/analyzers/stack.js +117 -0
  94. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  95. package/dist/codebase-map/analyzers/structure.js +137 -0
  96. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  97. package/dist/codebase-map/analyzers/testing.js +118 -0
  98. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  99. package/dist/codebase-map/index.js +57 -0
  100. package/dist/codebase-map/index.js.map +1 -0
  101. package/dist/codebase-map/store.js +122 -0
  102. package/dist/codebase-map/store.js.map +1 -0
  103. package/dist/codebase-map/summary.js +152 -0
  104. package/dist/codebase-map/summary.js.map +1 -0
  105. package/dist/compliance/index.js +288 -0
  106. package/dist/compliance/index.js.map +1 -0
  107. package/dist/compliance/protocol-enforcement.js +332 -0
  108. package/dist/compliance/protocol-enforcement.js.map +1 -0
  109. package/dist/compliance/protocol-rules.js +786 -0
  110. package/dist/compliance/protocol-rules.js.map +1 -0
  111. package/dist/compliance/protocol-types.js +79 -0
  112. package/dist/compliance/protocol-types.js.map +1 -0
  113. package/dist/compliance/store.js +53 -0
  114. package/dist/compliance/store.js.map +1 -0
  115. package/dist/conduit/conduit-client.js +107 -0
  116. package/dist/conduit/conduit-client.js.map +1 -0
  117. package/dist/conduit/factory.js +52 -0
  118. package/dist/conduit/factory.js.map +1 -0
  119. package/dist/conduit/http-transport.js +155 -0
  120. package/dist/conduit/http-transport.js.map +1 -0
  121. package/dist/conduit/index.js +15 -0
  122. package/dist/conduit/index.js.map +1 -0
  123. package/dist/conduit/local-transport.d.ts +18 -8
  124. package/dist/conduit/local-transport.d.ts.map +1 -1
  125. package/dist/conduit/local-transport.js +255 -0
  126. package/dist/conduit/local-transport.js.map +1 -0
  127. package/dist/conduit/sse-transport.js +299 -0
  128. package/dist/conduit/sse-transport.js.map +1 -0
  129. package/dist/config/build-config.js +29 -0
  130. package/dist/config/build-config.js.map +1 -0
  131. package/dist/config.d.ts.map +1 -1
  132. package/dist/config.js +400 -0
  133. package/dist/config.js.map +1 -0
  134. package/dist/constants.js +18 -0
  135. package/dist/constants.js.map +1 -0
  136. package/dist/context/index.js +137 -0
  137. package/dist/context/index.js.map +1 -0
  138. package/dist/crypto/credentials.js +191 -0
  139. package/dist/crypto/credentials.js.map +1 -0
  140. package/dist/discovery.js +182 -0
  141. package/dist/discovery.js.map +1 -0
  142. package/dist/engine-result.js +12 -0
  143. package/dist/engine-result.js.map +1 -0
  144. package/dist/error-catalog.js +404 -0
  145. package/dist/error-catalog.js.map +1 -0
  146. package/dist/error-registry.js +393 -0
  147. package/dist/error-registry.js.map +1 -0
  148. package/dist/errors.d.ts +19 -0
  149. package/dist/errors.d.ts.map +1 -1
  150. package/dist/errors.js +173 -0
  151. package/dist/errors.js.map +1 -0
  152. package/dist/hooks/handlers/agent-hooks.js +106 -0
  153. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  154. package/dist/hooks/handlers/context-hooks.js +111 -0
  155. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  156. package/dist/hooks/handlers/error-hooks.js +52 -0
  157. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  158. package/dist/hooks/handlers/file-hooks.js +104 -0
  159. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  160. package/dist/hooks/handlers/handler-helpers.js +61 -0
  161. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  162. package/dist/hooks/handlers/index.js +28 -0
  163. package/dist/hooks/handlers/index.js.map +1 -0
  164. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  165. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  166. package/dist/hooks/handlers/notification-hooks.js +62 -0
  167. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  168. package/dist/hooks/handlers/session-hooks.d.ts +21 -0
  169. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  170. package/dist/hooks/handlers/session-hooks.js +142 -0
  171. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  172. package/dist/hooks/handlers/task-hooks.js +65 -0
  173. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  174. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  175. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  176. package/dist/hooks/index.js +13 -0
  177. package/dist/hooks/index.js.map +1 -0
  178. package/dist/hooks/payload-schemas.d.ts +2 -2
  179. package/dist/hooks/payload-schemas.js +220 -0
  180. package/dist/hooks/payload-schemas.js.map +1 -0
  181. package/dist/hooks/provider-hooks.js +66 -0
  182. package/dist/hooks/provider-hooks.js.map +1 -0
  183. package/dist/hooks/registry.js +229 -0
  184. package/dist/hooks/registry.js.map +1 -0
  185. package/dist/hooks/types.js +66 -0
  186. package/dist/hooks/types.js.map +1 -0
  187. package/dist/hooks.js +136 -0
  188. package/dist/hooks.js.map +1 -0
  189. package/dist/index.js +175 -68684
  190. package/dist/index.js.map +1 -7
  191. package/dist/init.d.ts +1 -2
  192. package/dist/init.d.ts.map +1 -1
  193. package/dist/init.js +851 -0
  194. package/dist/init.js.map +1 -0
  195. package/dist/inject/index.js +82 -0
  196. package/dist/inject/index.js.map +1 -0
  197. package/dist/injection.js +343 -0
  198. package/dist/injection.js.map +1 -0
  199. package/dist/intelligence/adaptive-validation.js +497 -0
  200. package/dist/intelligence/adaptive-validation.js.map +1 -0
  201. package/dist/intelligence/impact.js +675 -0
  202. package/dist/intelligence/impact.js.map +1 -0
  203. package/dist/intelligence/index.js +22 -0
  204. package/dist/intelligence/index.js.map +1 -0
  205. package/dist/intelligence/patterns.js +492 -0
  206. package/dist/intelligence/patterns.js.map +1 -0
  207. package/dist/intelligence/prediction.js +499 -0
  208. package/dist/intelligence/prediction.js.map +1 -0
  209. package/dist/intelligence/types.js +13 -0
  210. package/dist/intelligence/types.js.map +1 -0
  211. package/dist/internal.d.ts +15 -5
  212. package/dist/internal.d.ts.map +1 -1
  213. package/dist/internal.js +306 -0
  214. package/dist/internal.js.map +1 -0
  215. package/dist/issue/create.js +121 -0
  216. package/dist/issue/create.js.map +1 -0
  217. package/dist/issue/diagnostics.js +59 -0
  218. package/dist/issue/diagnostics.js.map +1 -0
  219. package/dist/issue/index.js +10 -0
  220. package/dist/issue/index.js.map +1 -0
  221. package/dist/issue/template-parser.js +267 -0
  222. package/dist/issue/template-parser.js.map +1 -0
  223. package/dist/json-schema-validator.js +76 -0
  224. package/dist/json-schema-validator.js.map +1 -0
  225. package/dist/lib/index.js +11 -0
  226. package/dist/lib/index.js.map +1 -0
  227. package/dist/lib/retry.js +152 -0
  228. package/dist/lib/retry.js.map +1 -0
  229. package/dist/lib/tree-sitter-languages.js +71 -0
  230. package/dist/lib/tree-sitter-languages.js.map +1 -0
  231. package/dist/lifecycle/chain-composition.js +152 -0
  232. package/dist/lifecycle/chain-composition.js.map +1 -0
  233. package/dist/lifecycle/chain-store.js +246 -0
  234. package/dist/lifecycle/chain-store.js.map +1 -0
  235. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  236. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  237. package/dist/lifecycle/default-chain.js +176 -0
  238. package/dist/lifecycle/default-chain.js.map +1 -0
  239. package/dist/lifecycle/evidence.js +180 -0
  240. package/dist/lifecycle/evidence.js.map +1 -0
  241. package/dist/lifecycle/frontmatter.js +363 -0
  242. package/dist/lifecycle/frontmatter.js.map +1 -0
  243. package/dist/lifecycle/index.js +756 -0
  244. package/dist/lifecycle/index.js.map +1 -0
  245. package/dist/lifecycle/pipeline.js +656 -0
  246. package/dist/lifecycle/pipeline.js.map +1 -0
  247. package/dist/lifecycle/rcasd-index.js +326 -0
  248. package/dist/lifecycle/rcasd-index.js.map +1 -0
  249. package/dist/lifecycle/rcasd-paths.js +220 -0
  250. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  251. package/dist/lifecycle/resume.js +864 -0
  252. package/dist/lifecycle/resume.js.map +1 -0
  253. package/dist/lifecycle/stage-artifacts.js +94 -0
  254. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  255. package/dist/lifecycle/stage-guidance.js +234 -0
  256. package/dist/lifecycle/stage-guidance.js.map +1 -0
  257. package/dist/lifecycle/stages.js +534 -0
  258. package/dist/lifecycle/stages.js.map +1 -0
  259. package/dist/lifecycle/state-machine.js +516 -0
  260. package/dist/lifecycle/state-machine.js.map +1 -0
  261. package/dist/lifecycle/tessera-engine.js +249 -0
  262. package/dist/lifecycle/tessera-engine.js.map +1 -0
  263. package/dist/logger.js +140 -0
  264. package/dist/logger.js.map +1 -0
  265. package/dist/memory/auto-extract.js +177 -0
  266. package/dist/memory/auto-extract.js.map +1 -0
  267. package/dist/memory/brain-embedding.js +66 -0
  268. package/dist/memory/brain-embedding.js.map +1 -0
  269. package/dist/memory/brain-lifecycle.js +298 -0
  270. package/dist/memory/brain-lifecycle.js.map +1 -0
  271. package/dist/memory/brain-links.js +161 -0
  272. package/dist/memory/brain-links.js.map +1 -0
  273. package/dist/memory/brain-maintenance.js +114 -0
  274. package/dist/memory/brain-maintenance.js.map +1 -0
  275. package/dist/memory/brain-migration.js +149 -0
  276. package/dist/memory/brain-migration.js.map +1 -0
  277. package/dist/memory/brain-reasoning.js +215 -0
  278. package/dist/memory/brain-reasoning.js.map +1 -0
  279. package/dist/memory/brain-retrieval.js +542 -0
  280. package/dist/memory/brain-retrieval.js.map +1 -0
  281. package/dist/memory/brain-row-types.js +10 -0
  282. package/dist/memory/brain-row-types.js.map +1 -0
  283. package/dist/memory/brain-search.js +519 -0
  284. package/dist/memory/brain-search.js.map +1 -0
  285. package/dist/memory/brain-similarity.js +145 -0
  286. package/dist/memory/brain-similarity.js.map +1 -0
  287. package/dist/memory/claude-mem-migration.js +277 -0
  288. package/dist/memory/claude-mem-migration.js.map +1 -0
  289. package/dist/memory/decisions.js +162 -0
  290. package/dist/memory/decisions.js.map +1 -0
  291. package/dist/memory/embedding-local.js +97 -0
  292. package/dist/memory/embedding-local.js.map +1 -0
  293. package/dist/memory/embedding-queue.js +271 -0
  294. package/dist/memory/embedding-queue.js.map +1 -0
  295. package/dist/memory/embedding-worker.js +58 -0
  296. package/dist/memory/embedding-worker.js.map +1 -0
  297. package/dist/memory/engine-compat.js +1397 -0
  298. package/dist/memory/engine-compat.js.map +1 -0
  299. package/dist/memory/index.js +1140 -0
  300. package/dist/memory/index.js.map +1 -0
  301. package/dist/memory/learnings.d.ts +2 -2
  302. package/dist/memory/learnings.js +121 -0
  303. package/dist/memory/learnings.js.map +1 -0
  304. package/dist/memory/memory-bridge.js +370 -0
  305. package/dist/memory/memory-bridge.js.map +1 -0
  306. package/dist/memory/patterns.d.ts +4 -4
  307. package/dist/memory/patterns.js +122 -0
  308. package/dist/memory/patterns.js.map +1 -0
  309. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  310. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  311. package/dist/memory/session-memory.js +331 -0
  312. package/dist/memory/session-memory.js.map +1 -0
  313. package/dist/metrics/ab-test.js +260 -0
  314. package/dist/metrics/ab-test.js.map +1 -0
  315. package/dist/metrics/aggregation.js +363 -0
  316. package/dist/metrics/aggregation.js.map +1 -0
  317. package/dist/metrics/common.js +64 -0
  318. package/dist/metrics/common.js.map +1 -0
  319. package/dist/metrics/enums.js +78 -0
  320. package/dist/metrics/enums.js.map +1 -0
  321. package/dist/metrics/index.js +19 -0
  322. package/dist/metrics/index.js.map +1 -0
  323. package/dist/metrics/model-provider-registry.js +88 -0
  324. package/dist/metrics/model-provider-registry.js.map +1 -0
  325. package/dist/metrics/otel-integration.js +263 -0
  326. package/dist/metrics/otel-integration.js.map +1 -0
  327. package/dist/metrics/provider-detection.js +103 -0
  328. package/dist/metrics/provider-detection.js.map +1 -0
  329. package/dist/metrics/token-estimation.js +253 -0
  330. package/dist/metrics/token-estimation.js.map +1 -0
  331. package/dist/metrics/token-service.js +450 -0
  332. package/dist/metrics/token-service.js.map +1 -0
  333. package/dist/migration/agent-outputs.js +316 -0
  334. package/dist/migration/agent-outputs.js.map +1 -0
  335. package/dist/migration/checksum.js +92 -0
  336. package/dist/migration/checksum.js.map +1 -0
  337. package/dist/migration/index.js +282 -0
  338. package/dist/migration/index.js.map +1 -0
  339. package/dist/migration/logger.js +360 -0
  340. package/dist/migration/logger.js.map +1 -0
  341. package/dist/migration/preflight.js +9 -0
  342. package/dist/migration/preflight.js.map +1 -0
  343. package/dist/migration/state.js +421 -0
  344. package/dist/migration/state.js.map +1 -0
  345. package/dist/migration/validate.js +241 -0
  346. package/dist/migration/validate.js.map +1 -0
  347. package/dist/mvi-helpers.js +74 -0
  348. package/dist/mvi-helpers.js.map +1 -0
  349. package/dist/nexus/deps.js +375 -0
  350. package/dist/nexus/deps.js.map +1 -0
  351. package/dist/nexus/discover.js +288 -0
  352. package/dist/nexus/discover.js.map +1 -0
  353. package/dist/nexus/hash.js +10 -0
  354. package/dist/nexus/hash.js.map +1 -0
  355. package/dist/nexus/index.js +40 -0
  356. package/dist/nexus/index.js.map +1 -0
  357. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  358. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  359. package/dist/nexus/permissions.js +105 -0
  360. package/dist/nexus/permissions.js.map +1 -0
  361. package/dist/nexus/query.js +175 -0
  362. package/dist/nexus/query.js.map +1 -0
  363. package/dist/nexus/registry.js +584 -0
  364. package/dist/nexus/registry.js.map +1 -0
  365. package/dist/nexus/sharing/index.js +288 -0
  366. package/dist/nexus/sharing/index.js.map +1 -0
  367. package/dist/nexus/transfer-types.js +8 -0
  368. package/dist/nexus/transfer-types.js.map +1 -0
  369. package/dist/nexus/transfer.js +263 -0
  370. package/dist/nexus/transfer.js.map +1 -0
  371. package/dist/nexus/workspace.js +355 -0
  372. package/dist/nexus/workspace.js.map +1 -0
  373. package/dist/observability/index.js +103 -0
  374. package/dist/observability/index.js.map +1 -0
  375. package/dist/observability/log-filter.js +63 -0
  376. package/dist/observability/log-filter.js.map +1 -0
  377. package/dist/observability/log-parser.js +99 -0
  378. package/dist/observability/log-parser.js.map +1 -0
  379. package/dist/observability/log-reader.js +139 -0
  380. package/dist/observability/log-reader.js.map +1 -0
  381. package/dist/observability/types.js +19 -0
  382. package/dist/observability/types.js.map +1 -0
  383. package/dist/orchestration/analyze.js +107 -0
  384. package/dist/orchestration/analyze.js.map +1 -0
  385. package/dist/orchestration/bootstrap.js +132 -0
  386. package/dist/orchestration/bootstrap.js.map +1 -0
  387. package/dist/orchestration/context.js +56 -0
  388. package/dist/orchestration/context.js.map +1 -0
  389. package/dist/orchestration/critical-path.js +100 -0
  390. package/dist/orchestration/critical-path.js.map +1 -0
  391. package/dist/orchestration/hierarchy.js +183 -0
  392. package/dist/orchestration/hierarchy.js.map +1 -0
  393. package/dist/orchestration/index.js +287 -0
  394. package/dist/orchestration/index.js.map +1 -0
  395. package/dist/orchestration/parallel.js +89 -0
  396. package/dist/orchestration/parallel.js.map +1 -0
  397. package/dist/orchestration/protocol-validators.js +815 -0
  398. package/dist/orchestration/protocol-validators.js.map +1 -0
  399. package/dist/orchestration/skill-ops.js +98 -0
  400. package/dist/orchestration/skill-ops.js.map +1 -0
  401. package/dist/orchestration/status.js +107 -0
  402. package/dist/orchestration/status.js.map +1 -0
  403. package/dist/orchestration/unblock.js +103 -0
  404. package/dist/orchestration/unblock.js.map +1 -0
  405. package/dist/orchestration/validate-spawn.js +67 -0
  406. package/dist/orchestration/validate-spawn.js.map +1 -0
  407. package/dist/orchestration/waves.js +86 -0
  408. package/dist/orchestration/waves.js.map +1 -0
  409. package/dist/otel/index.js +163 -0
  410. package/dist/otel/index.js.map +1 -0
  411. package/dist/output.d.ts +32 -11
  412. package/dist/output.d.ts.map +1 -1
  413. package/dist/output.js +164 -0
  414. package/dist/output.js.map +1 -0
  415. package/dist/pagination.js +64 -0
  416. package/dist/pagination.js.map +1 -0
  417. package/dist/paths.d.ts +39 -9
  418. package/dist/paths.d.ts.map +1 -1
  419. package/dist/paths.js +842 -0
  420. package/dist/paths.js.map +1 -0
  421. package/dist/phases/deps.js +372 -0
  422. package/dist/phases/deps.js.map +1 -0
  423. package/dist/phases/index.js +349 -0
  424. package/dist/phases/index.js.map +1 -0
  425. package/dist/pipeline/index.js +10 -0
  426. package/dist/pipeline/index.js.map +1 -0
  427. package/dist/pipeline/phase.js +45 -0
  428. package/dist/pipeline/phase.js.map +1 -0
  429. package/dist/platform.js +211 -0
  430. package/dist/platform.js.map +1 -0
  431. package/dist/project-info.js +84 -0
  432. package/dist/project-info.js.map +1 -0
  433. package/dist/reconciliation/index.js +10 -0
  434. package/dist/reconciliation/index.js.map +1 -0
  435. package/dist/reconciliation/link-store.js +129 -0
  436. package/dist/reconciliation/link-store.js.map +1 -0
  437. package/dist/reconciliation/reconciliation-engine.js +298 -0
  438. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  439. package/dist/release/artifacts.js +427 -0
  440. package/dist/release/artifacts.js.map +1 -0
  441. package/dist/release/changelog-writer.js +151 -0
  442. package/dist/release/changelog-writer.js.map +1 -0
  443. package/dist/release/channel.js +144 -0
  444. package/dist/release/channel.js.map +1 -0
  445. package/dist/release/ci.js +166 -0
  446. package/dist/release/ci.js.map +1 -0
  447. package/dist/release/github-pr.js +225 -0
  448. package/dist/release/github-pr.js.map +1 -0
  449. package/dist/release/guards.js +116 -0
  450. package/dist/release/guards.js.map +1 -0
  451. package/dist/release/index.js +22 -0
  452. package/dist/release/index.js.map +1 -0
  453. package/dist/release/release-config.js +158 -0
  454. package/dist/release/release-config.js.map +1 -0
  455. package/dist/release/release-manifest.js +1019 -0
  456. package/dist/release/release-manifest.js.map +1 -0
  457. package/dist/release/version-bump.js +255 -0
  458. package/dist/release/version-bump.js.map +1 -0
  459. package/dist/remote/index.js +257 -0
  460. package/dist/remote/index.js.map +1 -0
  461. package/dist/repair.js +130 -0
  462. package/dist/repair.js.map +1 -0
  463. package/dist/research/index.js +2 -0
  464. package/dist/research/index.js.map +1 -0
  465. package/dist/roadmap/index.js +59 -0
  466. package/dist/roadmap/index.js.map +1 -0
  467. package/dist/routing/capability-matrix.js +1556 -0
  468. package/dist/routing/capability-matrix.js.map +1 -0
  469. package/dist/routing/index.js +9 -0
  470. package/dist/routing/index.js.map +1 -0
  471. package/dist/scaffold.d.ts +15 -2
  472. package/dist/scaffold.d.ts.map +1 -1
  473. package/dist/scaffold.js +1759 -0
  474. package/dist/scaffold.js.map +1 -0
  475. package/dist/schema-management.js +295 -0
  476. package/dist/schema-management.js.map +1 -0
  477. package/dist/security/index.js +9 -0
  478. package/dist/security/index.js.map +1 -0
  479. package/dist/security/input-sanitization.js +321 -0
  480. package/dist/security/input-sanitization.js.map +1 -0
  481. package/dist/sequence/index.js +295 -0
  482. package/dist/sequence/index.js.map +1 -0
  483. package/dist/sessions/assumptions.js +54 -0
  484. package/dist/sessions/assumptions.js.map +1 -0
  485. package/dist/sessions/briefing.js +377 -0
  486. package/dist/sessions/briefing.js.map +1 -0
  487. package/dist/sessions/context-alert.js +222 -0
  488. package/dist/sessions/context-alert.js.map +1 -0
  489. package/dist/sessions/context-inject.js +61 -0
  490. package/dist/sessions/context-inject.js.map +1 -0
  491. package/dist/sessions/context-monitor.js +98 -0
  492. package/dist/sessions/context-monitor.js.map +1 -0
  493. package/dist/sessions/decisions.js +65 -0
  494. package/dist/sessions/decisions.js.map +1 -0
  495. package/dist/sessions/find.js +65 -0
  496. package/dist/sessions/find.js.map +1 -0
  497. package/dist/sessions/handoff.js +328 -0
  498. package/dist/sessions/handoff.js.map +1 -0
  499. package/dist/sessions/hitl-warnings.js +254 -0
  500. package/dist/sessions/hitl-warnings.js.map +1 -0
  501. package/dist/sessions/index.js +327 -0
  502. package/dist/sessions/index.js.map +1 -0
  503. package/dist/sessions/session-archive.js +40 -0
  504. package/dist/sessions/session-archive.js.map +1 -0
  505. package/dist/sessions/session-cleanup.js +59 -0
  506. package/dist/sessions/session-cleanup.js.map +1 -0
  507. package/dist/sessions/session-drift.js +134 -0
  508. package/dist/sessions/session-drift.js.map +1 -0
  509. package/dist/sessions/session-enforcement.js +144 -0
  510. package/dist/sessions/session-enforcement.js.map +1 -0
  511. package/dist/sessions/session-grade.js +253 -0
  512. package/dist/sessions/session-grade.js.map +1 -0
  513. package/dist/sessions/session-history.js +42 -0
  514. package/dist/sessions/session-history.js.map +1 -0
  515. package/dist/sessions/session-id.js +81 -0
  516. package/dist/sessions/session-id.js.map +1 -0
  517. package/dist/sessions/session-memory-bridge.js +52 -0
  518. package/dist/sessions/session-memory-bridge.js.map +1 -0
  519. package/dist/sessions/session-show.js +24 -0
  520. package/dist/sessions/session-show.js.map +1 -0
  521. package/dist/sessions/session-stats.js +69 -0
  522. package/dist/sessions/session-stats.js.map +1 -0
  523. package/dist/sessions/session-suspend.js +39 -0
  524. package/dist/sessions/session-suspend.js.map +1 -0
  525. package/dist/sessions/session-switch.js +51 -0
  526. package/dist/sessions/session-switch.js.map +1 -0
  527. package/dist/sessions/session-view.js +76 -0
  528. package/dist/sessions/session-view.js.map +1 -0
  529. package/dist/sessions/snapshot.js +213 -0
  530. package/dist/sessions/snapshot.js.map +1 -0
  531. package/dist/sessions/statusline-setup.js +85 -0
  532. package/dist/sessions/statusline-setup.js.map +1 -0
  533. package/dist/sessions/types.js +8 -0
  534. package/dist/sessions/types.js.map +1 -0
  535. package/dist/skills/agents/config.js +94 -0
  536. package/dist/skills/agents/config.js.map +1 -0
  537. package/dist/skills/agents/install.js +116 -0
  538. package/dist/skills/agents/install.js.map +1 -0
  539. package/dist/skills/agents/registry.js +161 -0
  540. package/dist/skills/agents/registry.js.map +1 -0
  541. package/dist/skills/discovery.js +333 -0
  542. package/dist/skills/discovery.js.map +1 -0
  543. package/dist/skills/dispatch.js +347 -0
  544. package/dist/skills/dispatch.js.map +1 -0
  545. package/dist/skills/dynamic-skill-generator.d.ts +0 -2
  546. package/dist/skills/dynamic-skill-generator.d.ts.map +1 -1
  547. package/dist/skills/dynamic-skill-generator.js +87 -0
  548. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  549. package/dist/skills/index.js +44 -0
  550. package/dist/skills/index.js.map +1 -0
  551. package/dist/skills/injection/subagent.js +195 -0
  552. package/dist/skills/injection/subagent.js.map +1 -0
  553. package/dist/skills/injection/token.js +260 -0
  554. package/dist/skills/injection/token.js.map +1 -0
  555. package/dist/skills/install.js +40 -0
  556. package/dist/skills/install.js.map +1 -0
  557. package/dist/skills/manifests/contribution.js +175 -0
  558. package/dist/skills/manifests/contribution.js.map +1 -0
  559. package/dist/skills/manifests/research.js +281 -0
  560. package/dist/skills/manifests/research.js.map +1 -0
  561. package/dist/skills/manifests/resolver.js +146 -0
  562. package/dist/skills/manifests/resolver.js.map +1 -0
  563. package/dist/skills/marketplace.js +90 -0
  564. package/dist/skills/marketplace.js.map +1 -0
  565. package/dist/skills/orchestrator/spawn.js +178 -0
  566. package/dist/skills/orchestrator/spawn.js.map +1 -0
  567. package/dist/skills/orchestrator/startup.js +451 -0
  568. package/dist/skills/orchestrator/startup.js.map +1 -0
  569. package/dist/skills/orchestrator/validator.js +301 -0
  570. package/dist/skills/orchestrator/validator.js.map +1 -0
  571. package/dist/skills/precedence-integration.js +73 -0
  572. package/dist/skills/precedence-integration.js.map +1 -0
  573. package/dist/skills/precedence-types.js +16 -0
  574. package/dist/skills/precedence-types.js.map +1 -0
  575. package/dist/skills/routing-table.js +63 -0
  576. package/dist/skills/routing-table.js.map +1 -0
  577. package/dist/skills/skill-paths.js +217 -0
  578. package/dist/skills/skill-paths.js.map +1 -0
  579. package/dist/skills/test-utility.js +55 -0
  580. package/dist/skills/test-utility.js.map +1 -0
  581. package/dist/skills/types.js +118 -0
  582. package/dist/skills/types.js.map +1 -0
  583. package/dist/skills/validation.js +183 -0
  584. package/dist/skills/validation.js.map +1 -0
  585. package/dist/skills/version.js +57 -0
  586. package/dist/skills/version.js.map +1 -0
  587. package/dist/snapshot/index.js +188 -0
  588. package/dist/snapshot/index.js.map +1 -0
  589. package/dist/spawn/adapter-registry.js +246 -0
  590. package/dist/spawn/adapter-registry.js.map +1 -0
  591. package/dist/spawn/index.js +10 -0
  592. package/dist/spawn/index.js.map +1 -0
  593. package/dist/stats/index.js +343 -0
  594. package/dist/stats/index.js.map +1 -0
  595. package/dist/stats/workflow-telemetry.js +400 -0
  596. package/dist/stats/workflow-telemetry.js.map +1 -0
  597. package/dist/sticky/archive.js +47 -0
  598. package/dist/sticky/archive.js.map +1 -0
  599. package/dist/sticky/convert.js +235 -0
  600. package/dist/sticky/convert.js.map +1 -0
  601. package/dist/sticky/create.js +48 -0
  602. package/dist/sticky/create.js.map +1 -0
  603. package/dist/sticky/id.js +35 -0
  604. package/dist/sticky/id.js.map +1 -0
  605. package/dist/sticky/index.js +16 -0
  606. package/dist/sticky/index.js.map +1 -0
  607. package/dist/sticky/list.js +44 -0
  608. package/dist/sticky/list.js.map +1 -0
  609. package/dist/sticky/purge.js +45 -0
  610. package/dist/sticky/purge.js.map +1 -0
  611. package/dist/sticky/show.js +42 -0
  612. package/dist/sticky/show.js.map +1 -0
  613. package/dist/sticky/types.js +10 -0
  614. package/dist/sticky/types.js.map +1 -0
  615. package/dist/store/agent-registry-accessor.d.ts +203 -12
  616. package/dist/store/agent-registry-accessor.d.ts.map +1 -1
  617. package/dist/store/agent-registry-accessor.js +783 -0
  618. package/dist/store/agent-registry-accessor.js.map +1 -0
  619. package/dist/store/api-key-kdf.d.ts +73 -0
  620. package/dist/store/api-key-kdf.d.ts.map +1 -0
  621. package/dist/store/api-key-kdf.js +84 -0
  622. package/dist/store/api-key-kdf.js.map +1 -0
  623. package/dist/store/atomic.js +167 -0
  624. package/dist/store/atomic.js.map +1 -0
  625. package/dist/store/backup.js +94 -0
  626. package/dist/store/backup.js.map +1 -0
  627. package/dist/store/brain-accessor.js +397 -0
  628. package/dist/store/brain-accessor.js.map +1 -0
  629. package/dist/store/brain-schema.d.ts +8 -8
  630. package/dist/store/brain-schema.js +215 -0
  631. package/dist/store/brain-schema.js.map +1 -0
  632. package/dist/store/brain-sqlite.js +222 -0
  633. package/dist/store/brain-sqlite.js.map +1 -0
  634. package/dist/store/cache.js +168 -0
  635. package/dist/store/cache.js.map +1 -0
  636. package/dist/store/chain-schema.js +51 -0
  637. package/dist/store/chain-schema.js.map +1 -0
  638. package/dist/store/cleanup-legacy.d.ts +128 -0
  639. package/dist/store/cleanup-legacy.d.ts.map +1 -0
  640. package/dist/store/cleanup-legacy.js +171 -0
  641. package/dist/store/cleanup-legacy.js.map +1 -0
  642. package/dist/store/conduit-sqlite.d.ts +184 -0
  643. package/dist/store/conduit-sqlite.d.ts.map +1 -0
  644. package/dist/store/conduit-sqlite.js +570 -0
  645. package/dist/store/conduit-sqlite.js.map +1 -0
  646. package/dist/store/converters.js +124 -0
  647. package/dist/store/converters.js.map +1 -0
  648. package/dist/store/cross-db-cleanup.js +319 -0
  649. package/dist/store/cross-db-cleanup.js.map +1 -0
  650. package/dist/store/data-accessor.js +26 -0
  651. package/dist/store/data-accessor.js.map +1 -0
  652. package/dist/store/data-safety-central.js +269 -0
  653. package/dist/store/data-safety-central.js.map +1 -0
  654. package/dist/store/data-safety.js +274 -0
  655. package/dist/store/data-safety.js.map +1 -0
  656. package/dist/store/db-helpers.js +224 -0
  657. package/dist/store/db-helpers.js.map +1 -0
  658. package/dist/store/export.js +155 -0
  659. package/dist/store/export.js.map +1 -0
  660. package/dist/store/file-utils.js +270 -0
  661. package/dist/store/file-utils.js.map +1 -0
  662. package/dist/store/git-checkpoint.js +365 -0
  663. package/dist/store/git-checkpoint.js.map +1 -0
  664. package/dist/store/global-salt.d.ts +78 -0
  665. package/dist/store/global-salt.d.ts.map +1 -0
  666. package/dist/store/global-salt.js +147 -0
  667. package/dist/store/global-salt.js.map +1 -0
  668. package/dist/store/import-logging.js +139 -0
  669. package/dist/store/import-logging.js.map +1 -0
  670. package/dist/store/import-remap.js +145 -0
  671. package/dist/store/import-remap.js.map +1 -0
  672. package/dist/store/import-sort.js +121 -0
  673. package/dist/store/import-sort.js.map +1 -0
  674. package/dist/store/index.d.ts +1 -0
  675. package/dist/store/index.d.ts.map +1 -1
  676. package/dist/store/index.js +29 -0
  677. package/dist/store/index.js.map +1 -0
  678. package/dist/store/json.js +208 -0
  679. package/dist/store/json.js.map +1 -0
  680. package/dist/store/lifecycle-store.js +249 -0
  681. package/dist/store/lifecycle-store.js.map +1 -0
  682. package/dist/store/lock.js +70 -0
  683. package/dist/store/lock.js.map +1 -0
  684. package/dist/store/migrate-signaldock-to-conduit.d.ts +81 -0
  685. package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -0
  686. package/dist/store/migrate-signaldock-to-conduit.js +555 -0
  687. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  688. package/dist/store/migration-manager.js +151 -0
  689. package/dist/store/migration-manager.js.map +1 -0
  690. package/dist/store/migration-sqlite.js +676 -0
  691. package/dist/store/migration-sqlite.js.map +1 -0
  692. package/dist/store/nexus-schema.js +62 -0
  693. package/dist/store/nexus-schema.js.map +1 -0
  694. package/dist/store/nexus-sqlite.d.ts +14 -2
  695. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  696. package/dist/store/nexus-sqlite.js +242 -0
  697. package/dist/store/nexus-sqlite.js.map +1 -0
  698. package/dist/store/nexus-validation-schemas.js +40 -0
  699. package/dist/store/nexus-validation-schemas.js.map +1 -0
  700. package/dist/store/parsers.js +37 -0
  701. package/dist/store/parsers.js.map +1 -0
  702. package/dist/store/project-detect.js +457 -0
  703. package/dist/store/project-detect.js.map +1 -0
  704. package/dist/store/provider.js +101 -0
  705. package/dist/store/provider.js.map +1 -0
  706. package/dist/store/safety-data-accessor.js +257 -0
  707. package/dist/store/safety-data-accessor.js.map +1 -0
  708. package/dist/store/schema.js +7 -0
  709. package/dist/store/schema.js.map +1 -0
  710. package/dist/store/session-store.js +219 -0
  711. package/dist/store/session-store.js.map +1 -0
  712. package/dist/store/signaldock-sqlite.d.ts +122 -19
  713. package/dist/store/signaldock-sqlite.d.ts.map +1 -1
  714. package/dist/store/signaldock-sqlite.js +550 -0
  715. package/dist/store/signaldock-sqlite.js.map +1 -0
  716. package/dist/store/sqlite-backup.d.ts +121 -10
  717. package/dist/store/sqlite-backup.d.ts.map +1 -1
  718. package/dist/store/sqlite-backup.js +359 -0
  719. package/dist/store/sqlite-backup.js.map +1 -0
  720. package/dist/store/sqlite-data-accessor.js +787 -0
  721. package/dist/store/sqlite-data-accessor.js.map +1 -0
  722. package/dist/store/sqlite.d.ts.map +1 -1
  723. package/dist/store/sqlite.js +481 -0
  724. package/dist/store/sqlite.js.map +1 -0
  725. package/dist/store/status-registry.js +8 -0
  726. package/dist/store/status-registry.js.map +1 -0
  727. package/dist/store/task-store.js +358 -0
  728. package/dist/store/task-store.js.map +1 -0
  729. package/dist/store/tasks-schema.d.ts +8 -8
  730. package/dist/store/tasks-schema.js +610 -0
  731. package/dist/store/tasks-schema.js.map +1 -0
  732. package/dist/store/typed-query.js +15 -0
  733. package/dist/store/typed-query.js.map +1 -0
  734. package/dist/store/validation-schemas.d.ts +37 -37
  735. package/dist/store/validation-schemas.js +278 -0
  736. package/dist/store/validation-schemas.js.map +1 -0
  737. package/dist/system/archive-analytics.js +277 -0
  738. package/dist/system/archive-analytics.js.map +1 -0
  739. package/dist/system/archive-stats.js +64 -0
  740. package/dist/system/archive-stats.js.map +1 -0
  741. package/dist/system/audit.js +145 -0
  742. package/dist/system/audit.js.map +1 -0
  743. package/dist/system/backup.d.ts +65 -3
  744. package/dist/system/backup.d.ts.map +1 -1
  745. package/dist/system/backup.js +280 -0
  746. package/dist/system/backup.js.map +1 -0
  747. package/dist/system/cleanup.js +134 -0
  748. package/dist/system/cleanup.js.map +1 -0
  749. package/dist/system/health.js +1100 -0
  750. package/dist/system/health.js.map +1 -0
  751. package/dist/system/index.js +18 -0
  752. package/dist/system/index.js.map +1 -0
  753. package/dist/system/inject-generate.js +122 -0
  754. package/dist/system/inject-generate.js.map +1 -0
  755. package/dist/system/labels.js +38 -0
  756. package/dist/system/labels.js.map +1 -0
  757. package/dist/system/metrics.js +61 -0
  758. package/dist/system/metrics.js.map +1 -0
  759. package/dist/system/migrate.js +43 -0
  760. package/dist/system/migrate.js.map +1 -0
  761. package/dist/system/platform-paths.js +80 -0
  762. package/dist/system/platform-paths.js.map +1 -0
  763. package/dist/system/runtime.d.ts +0 -2
  764. package/dist/system/runtime.d.ts.map +1 -1
  765. package/dist/system/runtime.js +161 -0
  766. package/dist/system/runtime.js.map +1 -0
  767. package/dist/system/safestop.js +99 -0
  768. package/dist/system/safestop.js.map +1 -0
  769. package/dist/system/storage-preflight.js +123 -0
  770. package/dist/system/storage-preflight.js.map +1 -0
  771. package/dist/task-work/index.js +159 -0
  772. package/dist/task-work/index.js.map +1 -0
  773. package/dist/tasks/add.d.ts +1 -1
  774. package/dist/tasks/add.d.ts.map +1 -1
  775. package/dist/tasks/add.js +736 -0
  776. package/dist/tasks/add.js.map +1 -0
  777. package/dist/tasks/analyze.js +85 -0
  778. package/dist/tasks/analyze.js.map +1 -0
  779. package/dist/tasks/archive.js +90 -0
  780. package/dist/tasks/archive.js.map +1 -0
  781. package/dist/tasks/atomicity.js +83 -0
  782. package/dist/tasks/atomicity.js.map +1 -0
  783. package/dist/tasks/cancel-ops.js +83 -0
  784. package/dist/tasks/cancel-ops.js.map +1 -0
  785. package/dist/tasks/complete.d.ts.map +1 -1
  786. package/dist/tasks/complete.js +214 -0
  787. package/dist/tasks/complete.js.map +1 -0
  788. package/dist/tasks/crossref-extract.js +73 -0
  789. package/dist/tasks/crossref-extract.js.map +1 -0
  790. package/dist/tasks/delete-preview.js +192 -0
  791. package/dist/tasks/delete-preview.js.map +1 -0
  792. package/dist/tasks/delete.js +120 -0
  793. package/dist/tasks/delete.js.map +1 -0
  794. package/dist/tasks/deletion-strategy.js +200 -0
  795. package/dist/tasks/deletion-strategy.js.map +1 -0
  796. package/dist/tasks/dependency-check.js +278 -0
  797. package/dist/tasks/dependency-check.js.map +1 -0
  798. package/dist/tasks/deps-ready.js +32 -0
  799. package/dist/tasks/deps-ready.js.map +1 -0
  800. package/dist/tasks/enforcement.js +86 -0
  801. package/dist/tasks/enforcement.js.map +1 -0
  802. package/dist/tasks/epic-enforcement.js +294 -0
  803. package/dist/tasks/epic-enforcement.js.map +1 -0
  804. package/dist/tasks/find.d.ts.map +1 -1
  805. package/dist/tasks/find.js +157 -0
  806. package/dist/tasks/find.js.map +1 -0
  807. package/dist/tasks/graph-cache.js +127 -0
  808. package/dist/tasks/graph-cache.js.map +1 -0
  809. package/dist/tasks/graph-ops.js +171 -0
  810. package/dist/tasks/graph-ops.js.map +1 -0
  811. package/dist/tasks/graph-rag.js +328 -0
  812. package/dist/tasks/graph-rag.js.map +1 -0
  813. package/dist/tasks/hierarchy-policy.js +149 -0
  814. package/dist/tasks/hierarchy-policy.js.map +1 -0
  815. package/dist/tasks/hierarchy.js +185 -0
  816. package/dist/tasks/hierarchy.js.map +1 -0
  817. package/dist/tasks/id-generator.js +65 -0
  818. package/dist/tasks/id-generator.js.map +1 -0
  819. package/dist/tasks/index.js +14 -0
  820. package/dist/tasks/index.js.map +1 -0
  821. package/dist/tasks/labels.d.ts.map +1 -1
  822. package/dist/tasks/labels.js +55 -0
  823. package/dist/tasks/labels.js.map +1 -0
  824. package/dist/tasks/list.js +75 -0
  825. package/dist/tasks/list.js.map +1 -0
  826. package/dist/tasks/phase-tracking.js +133 -0
  827. package/dist/tasks/phase-tracking.js.map +1 -0
  828. package/dist/tasks/pipeline-stage.js +248 -0
  829. package/dist/tasks/pipeline-stage.js.map +1 -0
  830. package/dist/tasks/plan.js +268 -0
  831. package/dist/tasks/plan.js.map +1 -0
  832. package/dist/tasks/relates.d.ts.map +1 -1
  833. package/dist/tasks/relates.js +101 -0
  834. package/dist/tasks/relates.js.map +1 -0
  835. package/dist/tasks/show.d.ts.map +1 -1
  836. package/dist/tasks/show.js +83 -0
  837. package/dist/tasks/show.js.map +1 -0
  838. package/dist/tasks/size-weighting.js +86 -0
  839. package/dist/tasks/size-weighting.js.map +1 -0
  840. package/dist/tasks/staleness.js +86 -0
  841. package/dist/tasks/staleness.js.map +1 -0
  842. package/dist/tasks/task-ops.js +1741 -0
  843. package/dist/tasks/task-ops.js.map +1 -0
  844. package/dist/tasks/update.d.ts.map +1 -1
  845. package/dist/tasks/update.js +303 -0
  846. package/dist/tasks/update.js.map +1 -0
  847. package/dist/templates/index.js +10 -0
  848. package/dist/templates/index.js.map +1 -0
  849. package/dist/templates/parser.js +254 -0
  850. package/dist/templates/parser.js.map +1 -0
  851. package/dist/ui/aliases.js +153 -0
  852. package/dist/ui/aliases.js.map +1 -0
  853. package/dist/ui/changelog.js +184 -0
  854. package/dist/ui/changelog.js.map +1 -0
  855. package/dist/ui/command-registry.js +168 -0
  856. package/dist/ui/command-registry.js.map +1 -0
  857. package/dist/ui/flags.js +94 -0
  858. package/dist/ui/flags.js.map +1 -0
  859. package/dist/ui/index.js +24 -0
  860. package/dist/ui/index.js.map +1 -0
  861. package/dist/upgrade.js +1148 -0
  862. package/dist/upgrade.js.map +1 -0
  863. package/dist/validation/chain-validation.js +146 -0
  864. package/dist/validation/chain-validation.js.map +1 -0
  865. package/dist/validation/compliance.js +155 -0
  866. package/dist/validation/compliance.js.map +1 -0
  867. package/dist/validation/docs-sync.js +212 -0
  868. package/dist/validation/docs-sync.js.map +1 -0
  869. package/dist/validation/doctor/checks.js +1069 -0
  870. package/dist/validation/doctor/checks.js.map +1 -0
  871. package/dist/validation/doctor/index.js +9 -0
  872. package/dist/validation/doctor/index.js.map +1 -0
  873. package/dist/validation/doctor/project-cache.js +160 -0
  874. package/dist/validation/doctor/project-cache.js.map +1 -0
  875. package/dist/validation/doctor/utils.js +155 -0
  876. package/dist/validation/doctor/utils.js.map +1 -0
  877. package/dist/validation/engine.d.ts.map +1 -1
  878. package/dist/validation/engine.js +914 -0
  879. package/dist/validation/engine.js.map +1 -0
  880. package/dist/validation/gap-check.js +175 -0
  881. package/dist/validation/gap-check.js.map +1 -0
  882. package/dist/validation/index.js +40 -0
  883. package/dist/validation/index.js.map +1 -0
  884. package/dist/validation/manifest.js +237 -0
  885. package/dist/validation/manifest.js.map +1 -0
  886. package/dist/validation/operation-gate-validators.js +724 -0
  887. package/dist/validation/operation-gate-validators.js.map +1 -0
  888. package/dist/validation/operation-verification-gates.js +532 -0
  889. package/dist/validation/operation-verification-gates.js.map +1 -0
  890. package/dist/validation/param-utils.d.ts +5 -3
  891. package/dist/validation/param-utils.d.ts.map +1 -1
  892. package/dist/validation/param-utils.js +141 -0
  893. package/dist/validation/param-utils.js.map +1 -0
  894. package/dist/validation/protocol-common.js +300 -0
  895. package/dist/validation/protocol-common.js.map +1 -0
  896. package/dist/validation/protocols/_shared.d.ts.map +1 -1
  897. package/dist/validation/protocols/_shared.js +82 -0
  898. package/dist/validation/protocols/_shared.js.map +1 -0
  899. package/dist/validation/protocols/architecture-decision.js +31 -0
  900. package/dist/validation/protocols/architecture-decision.js.map +1 -0
  901. package/dist/validation/protocols/artifact-publish.js +28 -0
  902. package/dist/validation/protocols/artifact-publish.js.map +1 -0
  903. package/dist/validation/protocols/consensus.js +41 -0
  904. package/dist/validation/protocols/consensus.js.map +1 -0
  905. package/dist/validation/protocols/contribution.js +27 -0
  906. package/dist/validation/protocols/contribution.js.map +1 -0
  907. package/dist/validation/protocols/decomposition.js +28 -0
  908. package/dist/validation/protocols/decomposition.js.map +1 -0
  909. package/dist/validation/protocols/implementation.js +24 -0
  910. package/dist/validation/protocols/implementation.js.map +1 -0
  911. package/dist/validation/protocols/provenance.js +29 -0
  912. package/dist/validation/protocols/provenance.js.map +1 -0
  913. package/dist/validation/protocols/release.js +29 -0
  914. package/dist/validation/protocols/release.js.map +1 -0
  915. package/dist/validation/protocols/research.js +24 -0
  916. package/dist/validation/protocols/research.js.map +1 -0
  917. package/dist/validation/protocols/specification.js +27 -0
  918. package/dist/validation/protocols/specification.js.map +1 -0
  919. package/dist/validation/protocols/testing.js +30 -0
  920. package/dist/validation/protocols/testing.js.map +1 -0
  921. package/dist/validation/protocols/validation.js +30 -0
  922. package/dist/validation/protocols/validation.js.map +1 -0
  923. package/dist/validation/schema-integrity.js +170 -0
  924. package/dist/validation/schema-integrity.js.map +1 -0
  925. package/dist/validation/schema-validator.js +176 -0
  926. package/dist/validation/schema-validator.js.map +1 -0
  927. package/dist/validation/validate-ops.js +937 -0
  928. package/dist/validation/validate-ops.js.map +1 -0
  929. package/dist/validation/validation-rules.js +226 -0
  930. package/dist/validation/validation-rules.js.map +1 -0
  931. package/dist/validation/verification.js +321 -0
  932. package/dist/validation/verification.js.map +1 -0
  933. package/package.json +10 -8
  934. package/src/__tests__/paths-walkup.test.ts +305 -0
  935. package/src/__tests__/paths.test.ts +61 -17
  936. package/src/adapters/__tests__/manager.test.ts +0 -1
  937. package/src/codebase-map/analyzers/architecture.ts +0 -1
  938. package/src/conduit/__tests__/local-credential-flow.test.ts +20 -18
  939. package/src/conduit/__tests__/local-transport.test.ts +14 -12
  940. package/src/conduit/local-transport.ts +23 -13
  941. package/src/config.ts +0 -1
  942. package/src/errors.ts +24 -0
  943. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.ts +2 -5
  944. package/src/hooks/handlers/session-hooks.ts +42 -0
  945. package/src/init.ts +1 -2
  946. package/src/internal.ts +67 -3
  947. package/src/lifecycle/cant/lifecycle-rcasd.cant +133 -0
  948. package/src/memory/__tests__/engine-compat.test.ts +2 -2
  949. package/src/memory/__tests__/pipeline-manifest-sqlite.test.ts +4 -4
  950. package/src/observability/__tests__/index.test.ts +4 -4
  951. package/src/observability/__tests__/log-filter.test.ts +4 -4
  952. package/src/output.ts +73 -75
  953. package/src/paths.ts +91 -14
  954. package/src/scaffold.ts +22 -3
  955. package/src/sessions/__tests__/session-grade.integration.test.ts +1 -1
  956. package/src/sessions/__tests__/session-grade.test.ts +2 -2
  957. package/src/skills/__tests__/dynamic-skill-generator.test.ts +0 -2
  958. package/src/skills/dynamic-skill-generator.ts +0 -2
  959. package/src/store/__tests__/agent-registry-accessor.test.ts +807 -0
  960. package/src/store/__tests__/api-key-kdf.test.ts +113 -0
  961. package/src/store/__tests__/cleanup-legacy.test.ts +268 -0
  962. package/src/store/__tests__/conduit-sqlite.test.ts +413 -0
  963. package/src/store/__tests__/database-topology-integration.test.ts +504 -0
  964. package/src/store/__tests__/global-salt.test.ts +195 -0
  965. package/src/store/__tests__/migrate-signaldock-to-conduit.test.ts +715 -0
  966. package/src/store/__tests__/signaldock-sqlite.test.ts +652 -0
  967. package/src/store/__tests__/sqlite-backup-global.test.ts +585 -0
  968. package/src/store/__tests__/sqlite-backup.test.ts +122 -10
  969. package/src/store/__tests__/t310-integration.test.ts +1150 -0
  970. package/src/store/agent-registry-accessor.ts +847 -140
  971. package/src/store/api-key-kdf.ts +104 -0
  972. package/src/store/cleanup-legacy.ts +208 -0
  973. package/src/store/conduit-sqlite.ts +655 -0
  974. package/src/store/global-salt.ts +175 -0
  975. package/src/store/index.ts +7 -0
  976. package/src/store/migrate-signaldock-to-conduit.ts +669 -0
  977. package/src/store/nexus-sqlite.ts +32 -3
  978. package/src/store/signaldock-sqlite.ts +431 -254
  979. package/src/store/sqlite-backup.ts +544 -38
  980. package/src/store/sqlite.ts +19 -3
  981. package/src/system/__tests__/backup.test.ts +237 -0
  982. package/src/system/backup.ts +186 -26
  983. package/src/system/runtime.ts +4 -6
  984. package/src/tasks/__tests__/error-hints.test.ts +256 -0
  985. package/src/tasks/add.ts +99 -9
  986. package/src/tasks/complete.ts +4 -1
  987. package/src/tasks/find.ts +4 -1
  988. package/src/tasks/labels.ts +4 -1
  989. package/src/tasks/relates.ts +16 -4
  990. package/src/tasks/show.ts +4 -1
  991. package/src/tasks/update.ts +32 -3
  992. package/src/validation/__tests__/error-hints.test.ts +97 -0
  993. package/src/validation/engine.ts +16 -1
  994. package/src/validation/param-utils.ts +10 -7
  995. package/src/validation/protocols/_shared.ts +14 -6
  996. package/src/validation/protocols/cant/architecture-decision.cant +80 -0
  997. package/src/validation/protocols/cant/artifact-publish.cant +95 -0
  998. package/src/validation/protocols/cant/consensus.cant +74 -0
  999. package/src/validation/protocols/cant/contribution.cant +82 -0
  1000. package/src/validation/protocols/cant/decomposition.cant +92 -0
  1001. package/src/validation/protocols/cant/implementation.cant +67 -0
  1002. package/src/validation/protocols/cant/provenance.cant +88 -0
  1003. package/src/validation/protocols/cant/release.cant +96 -0
  1004. package/src/validation/protocols/cant/research.cant +66 -0
  1005. package/src/validation/protocols/cant/specification.cant +67 -0
  1006. package/src/validation/protocols/cant/testing.cant +88 -0
  1007. package/src/validation/protocols/cant/validation.cant +65 -0
  1008. package/src/validation/protocols/protocols-markdown/decomposition.md +0 -4
  1009. package/templates/cleo-gitignore +19 -3
  1010. package/templates/config.template.json +0 -1
  1011. package/templates/global-config.template.json +0 -1
@@ -0,0 +1,975 @@
1
+ /**
2
+ * Pipeline Manifest SQLite Implementation
3
+ *
4
+ * Reimplements all 14 pipeline manifest operations using Drizzle ORM +
5
+ * SQLite (tasks.db pipeline_manifest table) instead of JSONL file I/O.
6
+ *
7
+ * Provides a one-time migration function to import existing MANIFEST.jsonl
8
+ * entries into the new table.
9
+ *
10
+ * @task T5581
11
+ * @epic T5576
12
+ */
13
+ import { createHash } from 'node:crypto';
14
+ import { existsSync, readFileSync, renameSync } from 'node:fs';
15
+ import { join } from 'node:path';
16
+ import { and, count, desc, eq, gte, isNull, like, lte, or } from 'drizzle-orm';
17
+ import { pipelineManifest } from '../store/tasks-schema.js';
18
+ async function getDb(cwd) {
19
+ const { getDb: _getDb } = await import('../store/sqlite.js');
20
+ return _getDb(cwd);
21
+ }
22
+ async function getNativeDb() {
23
+ const { getNativeDb: _getNativeDb } = await import('../store/sqlite.js');
24
+ return _getNativeDb();
25
+ }
26
+ import { createPage } from '../pagination.js';
27
+ import { getCleoDirAbsolute, getProjectRoot } from '../paths.js';
28
+ import { filterManifestEntries, } from './index.js';
29
+ export { filterManifestEntries };
30
+ function normalizeLimit(limit) {
31
+ return typeof limit === 'number' && limit > 0 ? limit : undefined;
32
+ }
33
+ function normalizeOffset(offset) {
34
+ return typeof offset === 'number' && offset > 0 ? offset : undefined;
35
+ }
36
+ function effectivePageLimit(limit, offset) {
37
+ return limit ?? (offset !== undefined ? 50 : undefined);
38
+ }
39
+ function buildManifestSqlFilters(filter) {
40
+ const conditions = [isNull(pipelineManifest.archivedAt)];
41
+ if (filter.status) {
42
+ const storedStatus = filter.status === 'completed' ? 'active' : filter.status;
43
+ conditions.push(eq(pipelineManifest.status, storedStatus));
44
+ }
45
+ if (filter.agent_type) {
46
+ conditions.push(eq(pipelineManifest.type, filter.agent_type));
47
+ }
48
+ if (filter.dateAfter) {
49
+ conditions.push(gte(pipelineManifest.createdAt, `${filter.dateAfter} 00:00:00`));
50
+ }
51
+ if (filter.dateBefore) {
52
+ conditions.push(lte(pipelineManifest.createdAt, `${filter.dateBefore} 23:59:59`));
53
+ }
54
+ return {
55
+ conditions,
56
+ requiresInMemoryFiltering: filter.taskId !== undefined || filter.topic !== undefined || filter.actionable !== undefined,
57
+ };
58
+ }
59
+ function applyManifestMemoryOnlyFilters(entries, filter) {
60
+ const inMemoryFilter = {
61
+ taskId: filter.taskId,
62
+ topic: filter.topic,
63
+ actionable: filter.actionable,
64
+ };
65
+ return filterManifestEntries(entries, inMemoryFilter);
66
+ }
67
+ // ============================================================================
68
+ // Internal helpers
69
+ // ============================================================================
70
+ function now() {
71
+ return new Date().toISOString().replace('T', ' ').slice(0, 19);
72
+ }
73
+ function computeContentHash(content) {
74
+ return createHash('sha256')
75
+ .update(content || '')
76
+ .digest('hex')
77
+ .slice(0, 16);
78
+ }
79
+ /**
80
+ * Convert a pipeline_manifest row back to ExtendedManifestEntry format
81
+ * for backward-compatible output.
82
+ */
83
+ function rowToEntry(row) {
84
+ let meta = {};
85
+ if (row.metadataJson) {
86
+ try {
87
+ meta = JSON.parse(row.metadataJson);
88
+ }
89
+ catch {
90
+ // ignore malformed JSON
91
+ }
92
+ }
93
+ return {
94
+ id: row.id,
95
+ file: meta['file'] ?? row.sourceFile ?? '',
96
+ title: meta['title'] ?? row.type,
97
+ date: row.createdAt.slice(0, 10),
98
+ status: (row.status === 'active' ? 'completed' : row.status),
99
+ agent_type: row.type,
100
+ topics: meta['topics'] ?? [],
101
+ key_findings: meta['key_findings'] ?? [],
102
+ actionable: meta['actionable'] ?? true,
103
+ needs_followup: meta['needs_followup'] ?? [],
104
+ linked_tasks: meta['linked_tasks'] ?? (row.taskId ? [row.taskId] : []),
105
+ confidence: meta['confidence'],
106
+ file_checksum: meta['file_checksum'],
107
+ duration_seconds: meta['duration_seconds'],
108
+ };
109
+ }
110
+ /**
111
+ * Convert an ExtendedManifestEntry to a pipeline_manifest row for insertion.
112
+ */
113
+ function entryToRow(entry) {
114
+ const serializedContent = JSON.stringify(entry);
115
+ const contentHash = computeContentHash(serializedContent);
116
+ // Extract the first linked task (primary association)
117
+ const primaryTaskId = entry.linked_tasks?.[0] ?? null;
118
+ // Store full entry in metadataJson for round-trip fidelity
119
+ const metadataJson = JSON.stringify({
120
+ file: entry.file,
121
+ title: entry.title,
122
+ topics: entry.topics ?? [],
123
+ key_findings: entry.key_findings ?? [],
124
+ actionable: entry.actionable,
125
+ needs_followup: entry.needs_followup ?? [],
126
+ linked_tasks: entry.linked_tasks ?? [],
127
+ confidence: entry.confidence,
128
+ file_checksum: entry.file_checksum,
129
+ duration_seconds: entry.duration_seconds,
130
+ });
131
+ // Normalize status: completed → active for storage
132
+ let storedStatus = entry.status;
133
+ if (storedStatus === 'completed')
134
+ storedStatus = 'active';
135
+ return {
136
+ id: entry.id,
137
+ taskId: primaryTaskId,
138
+ type: entry.agent_type,
139
+ content: serializedContent,
140
+ contentHash,
141
+ status: storedStatus,
142
+ distilled: false,
143
+ sourceFile: entry.file || null,
144
+ metadataJson,
145
+ createdAt: entry.date + ' 00:00:00',
146
+ archivedAt: null,
147
+ };
148
+ }
149
+ // ============================================================================
150
+ // EngineResult-wrapped functions
151
+ // ============================================================================
152
+ /** pipeline.manifest.show - Get manifest entry details by ID */
153
+ export async function pipelineManifestShow(researchId, projectRoot) {
154
+ if (!researchId) {
155
+ return {
156
+ success: false,
157
+ error: { code: 'E_INVALID_INPUT', message: 'researchId is required' },
158
+ };
159
+ }
160
+ try {
161
+ const db = await getDb(projectRoot);
162
+ const rows = await db
163
+ .select()
164
+ .from(pipelineManifest)
165
+ .where(eq(pipelineManifest.id, researchId))
166
+ .limit(1);
167
+ if (rows.length === 0) {
168
+ return {
169
+ success: false,
170
+ error: { code: 'E_NOT_FOUND', message: `Research entry '${researchId}' not found` },
171
+ };
172
+ }
173
+ const entry = rowToEntry(rows[0]);
174
+ const root = getProjectRoot(projectRoot);
175
+ let fileContent = null;
176
+ try {
177
+ const filePath = join(root, entry.file);
178
+ if (existsSync(filePath)) {
179
+ fileContent = readFileSync(filePath, 'utf-8');
180
+ }
181
+ }
182
+ catch {
183
+ // File may not exist or be unreadable
184
+ }
185
+ return {
186
+ success: true,
187
+ data: { ...entry, fileContent, fileExists: fileContent !== null },
188
+ };
189
+ }
190
+ catch (error) {
191
+ return {
192
+ success: false,
193
+ error: {
194
+ code: 'E_MANIFEST_SHOW',
195
+ message: error instanceof Error ? error.message : String(error),
196
+ },
197
+ };
198
+ }
199
+ }
200
+ /** pipeline.manifest.list - List manifest entries with filters */
201
+ export async function pipelineManifestList(params, projectRoot) {
202
+ try {
203
+ const db = await getDb(projectRoot);
204
+ const filter = { ...params };
205
+ if (params.type) {
206
+ filter.agent_type = params.type;
207
+ }
208
+ const limit = normalizeLimit(params.limit);
209
+ const offset = normalizeOffset(params.offset);
210
+ const pageLimit = effectivePageLimit(limit, offset);
211
+ const { conditions, requiresInMemoryFiltering } = buildManifestSqlFilters(filter);
212
+ const whereClause = and(...conditions);
213
+ const totalRow = await db
214
+ .select({ count: count() })
215
+ .from(pipelineManifest)
216
+ .where(isNull(pipelineManifest.archivedAt))
217
+ .get();
218
+ const total = totalRow?.count ?? 0;
219
+ if (!requiresInMemoryFiltering) {
220
+ const filteredRow = await db
221
+ .select({ count: count() })
222
+ .from(pipelineManifest)
223
+ .where(whereClause)
224
+ .get();
225
+ const filtered = filteredRow?.count ?? 0;
226
+ let query = db
227
+ .select()
228
+ .from(pipelineManifest)
229
+ .where(whereClause)
230
+ .orderBy(desc(pipelineManifest.createdAt));
231
+ if (pageLimit !== undefined) {
232
+ query = query.limit(pageLimit);
233
+ }
234
+ if (offset !== undefined) {
235
+ query = query.offset(offset);
236
+ }
237
+ const rows = await query;
238
+ return {
239
+ success: true,
240
+ data: { entries: rows.map(rowToEntry), total, filtered },
241
+ page: createPage({ total: filtered, limit: pageLimit, offset }),
242
+ };
243
+ }
244
+ const rows = await db
245
+ .select()
246
+ .from(pipelineManifest)
247
+ .where(whereClause)
248
+ .orderBy(desc(pipelineManifest.createdAt));
249
+ const filteredEntries = applyManifestMemoryOnlyFilters(rows.map(rowToEntry), filter);
250
+ const filtered = filteredEntries.length;
251
+ const start = offset ?? 0;
252
+ const pagedEntries = pageLimit !== undefined
253
+ ? filteredEntries.slice(start, start + pageLimit)
254
+ : filteredEntries.slice(start);
255
+ return {
256
+ success: true,
257
+ data: { entries: pagedEntries, total, filtered },
258
+ page: createPage({ total: filtered, limit: pageLimit, offset }),
259
+ };
260
+ }
261
+ catch (error) {
262
+ return {
263
+ success: false,
264
+ error: {
265
+ code: 'E_MANIFEST_LIST',
266
+ message: error instanceof Error ? error.message : String(error),
267
+ },
268
+ };
269
+ }
270
+ }
271
+ /** pipeline.manifest.find - Find manifest entries by text (LIKE search on content + type) */
272
+ export async function pipelineManifestFind(query, options, projectRoot) {
273
+ if (!query) {
274
+ return { success: false, error: { code: 'E_INVALID_INPUT', message: 'query is required' } };
275
+ }
276
+ try {
277
+ const db = await getDb(projectRoot);
278
+ const likePattern = `%${query}%`;
279
+ const rows = await db
280
+ .select()
281
+ .from(pipelineManifest)
282
+ .where(and(isNull(pipelineManifest.archivedAt), or(like(pipelineManifest.content, likePattern), like(pipelineManifest.type, likePattern))))
283
+ .orderBy(desc(pipelineManifest.createdAt));
284
+ const queryLower = query.toLowerCase();
285
+ const entries = rows.map(rowToEntry);
286
+ const scored = entries.map((entry) => {
287
+ let score = 0;
288
+ if (entry.title.toLowerCase().includes(queryLower))
289
+ score += 0.5;
290
+ if (entry.topics.some((t) => t.toLowerCase().includes(queryLower)))
291
+ score += 0.3;
292
+ if (entry.key_findings?.some((f) => f.toLowerCase().includes(queryLower)))
293
+ score += 0.2;
294
+ if (entry.id.toLowerCase().includes(queryLower))
295
+ score += 0.1;
296
+ return { entry, score };
297
+ });
298
+ const minConfidence = options?.confidence ?? 0.1;
299
+ let results = scored.filter((s) => s.score >= minConfidence).sort((a, b) => b.score - a.score);
300
+ if (options?.limit && options.limit > 0) {
301
+ results = results.slice(0, options.limit);
302
+ }
303
+ return {
304
+ success: true,
305
+ data: {
306
+ query,
307
+ results: results.map((r) => ({
308
+ ...r.entry,
309
+ relevanceScore: Math.round(r.score * 100) / 100,
310
+ })),
311
+ total: results.length,
312
+ },
313
+ };
314
+ }
315
+ catch (error) {
316
+ return {
317
+ success: false,
318
+ error: {
319
+ code: 'E_MANIFEST_FIND',
320
+ message: error instanceof Error ? error.message : String(error),
321
+ },
322
+ };
323
+ }
324
+ }
325
+ /** pipeline.manifest.pending - Get pending manifest items */
326
+ export async function pipelineManifestPending(epicId, projectRoot) {
327
+ try {
328
+ const db = await getDb(projectRoot);
329
+ const rows = await db
330
+ .select()
331
+ .from(pipelineManifest)
332
+ .where(isNull(pipelineManifest.archivedAt))
333
+ .orderBy(desc(pipelineManifest.createdAt));
334
+ const entries = rows.map(rowToEntry);
335
+ let pending = entries.filter((e) => e.status === 'partial' ||
336
+ e.status === 'blocked' ||
337
+ (e.needs_followup && e.needs_followup.length > 0));
338
+ if (epicId) {
339
+ pending = pending.filter((e) => e.id.startsWith(epicId) || e.linked_tasks?.includes(epicId));
340
+ }
341
+ return {
342
+ success: true,
343
+ data: {
344
+ entries: pending,
345
+ total: pending.length,
346
+ byStatus: {
347
+ partial: pending.filter((e) => e.status === 'partial').length,
348
+ blocked: pending.filter((e) => e.status === 'blocked').length,
349
+ needsFollowup: pending.filter((e) => e.needs_followup && e.needs_followup.length > 0)
350
+ .length,
351
+ },
352
+ },
353
+ };
354
+ }
355
+ catch (error) {
356
+ return {
357
+ success: false,
358
+ error: {
359
+ code: 'E_MANIFEST_PENDING',
360
+ message: error instanceof Error ? error.message : String(error),
361
+ },
362
+ };
363
+ }
364
+ }
365
+ /** pipeline.manifest.stats - Manifest statistics */
366
+ export async function pipelineManifestStats(epicId, projectRoot) {
367
+ try {
368
+ const db = await getDb(projectRoot);
369
+ const rows = await db
370
+ .select()
371
+ .from(pipelineManifest)
372
+ .where(isNull(pipelineManifest.archivedAt));
373
+ const entries = rows.map(rowToEntry);
374
+ let filtered = entries;
375
+ if (epicId) {
376
+ filtered = entries.filter((e) => e.id.startsWith(epicId) || e.linked_tasks?.includes(epicId));
377
+ }
378
+ const byStatus = {};
379
+ const byType = {};
380
+ let actionable = 0;
381
+ let needsFollowup = 0;
382
+ let totalFindings = 0;
383
+ for (const entry of filtered) {
384
+ byStatus[entry.status] = (byStatus[entry.status] || 0) + 1;
385
+ byType[entry.agent_type] = (byType[entry.agent_type] || 0) + 1;
386
+ if (entry.actionable)
387
+ actionable++;
388
+ if (entry.needs_followup && entry.needs_followup.length > 0)
389
+ needsFollowup++;
390
+ if (entry.key_findings)
391
+ totalFindings += entry.key_findings.length;
392
+ }
393
+ return {
394
+ success: true,
395
+ data: {
396
+ total: filtered.length,
397
+ byStatus,
398
+ byType,
399
+ actionable,
400
+ needsFollowup,
401
+ averageFindings: filtered.length > 0 ? Math.round((totalFindings / filtered.length) * 10) / 10 : 0,
402
+ },
403
+ };
404
+ }
405
+ catch (error) {
406
+ return {
407
+ success: false,
408
+ error: {
409
+ code: 'E_MANIFEST_STATS',
410
+ message: error instanceof Error ? error.message : String(error),
411
+ },
412
+ };
413
+ }
414
+ }
415
+ /** pipeline.manifest.read - Read manifest entries with optional filter */
416
+ export async function pipelineManifestRead(filter, projectRoot) {
417
+ try {
418
+ const db = await getDb(projectRoot);
419
+ const rows = await db
420
+ .select()
421
+ .from(pipelineManifest)
422
+ .where(isNull(pipelineManifest.archivedAt))
423
+ .orderBy(desc(pipelineManifest.createdAt));
424
+ const entries = rows.map(rowToEntry);
425
+ const filtered = filter ? filterManifestEntries(entries, filter) : entries;
426
+ return {
427
+ success: true,
428
+ data: { entries: filtered, total: filtered.length, filter: filter || {} },
429
+ };
430
+ }
431
+ catch (error) {
432
+ return {
433
+ success: false,
434
+ error: {
435
+ code: 'E_MANIFEST_READ',
436
+ message: error instanceof Error ? error.message : String(error),
437
+ },
438
+ };
439
+ }
440
+ }
441
+ /** pipeline.manifest.append - Append entry to pipeline_manifest table */
442
+ export async function pipelineManifestAppend(entry, projectRoot) {
443
+ if (!entry) {
444
+ return { success: false, error: { code: 'E_INVALID_INPUT', message: 'entry is required' } };
445
+ }
446
+ const errors = [];
447
+ if (!entry.id)
448
+ errors.push('id is required');
449
+ if (!entry.file)
450
+ errors.push('file is required');
451
+ if (!entry.title)
452
+ errors.push('title is required');
453
+ if (!entry.date)
454
+ errors.push('date is required');
455
+ if (!entry.status)
456
+ errors.push('status is required');
457
+ if (!entry.agent_type)
458
+ errors.push('agent_type is required');
459
+ if (!entry.topics)
460
+ errors.push('topics is required');
461
+ if (entry.actionable === undefined)
462
+ errors.push('actionable is required');
463
+ if (errors.length > 0) {
464
+ return {
465
+ success: false,
466
+ error: {
467
+ code: 'E_VALIDATION_FAILED',
468
+ message: `Invalid manifest entry: ${errors.join(', ')}`,
469
+ },
470
+ };
471
+ }
472
+ try {
473
+ const db = await getDb(projectRoot);
474
+ const row = entryToRow(entry);
475
+ await db
476
+ .insert(pipelineManifest)
477
+ .values(row)
478
+ .onConflictDoUpdate({
479
+ target: pipelineManifest.id,
480
+ set: {
481
+ content: row.content,
482
+ contentHash: row.contentHash,
483
+ status: row.status,
484
+ metadataJson: row.metadataJson,
485
+ sourceFile: row.sourceFile,
486
+ taskId: row.taskId,
487
+ },
488
+ });
489
+ return { success: true, data: { appended: true, entryId: entry.id } };
490
+ }
491
+ catch (error) {
492
+ return {
493
+ success: false,
494
+ error: {
495
+ code: 'E_MANIFEST_APPEND',
496
+ message: error instanceof Error ? error.message : String(error),
497
+ },
498
+ };
499
+ }
500
+ }
501
+ /** pipeline.manifest.archive - Archive old manifest entries by date */
502
+ export async function pipelineManifestArchive(beforeDate, projectRoot) {
503
+ if (!beforeDate) {
504
+ return {
505
+ success: false,
506
+ error: {
507
+ code: 'E_INVALID_INPUT',
508
+ message: 'beforeDate is required (ISO-8601 format: YYYY-MM-DD)',
509
+ },
510
+ };
511
+ }
512
+ try {
513
+ const db = await getDb(projectRoot);
514
+ const nativeDb = await getNativeDb();
515
+ if (!nativeDb) {
516
+ return {
517
+ success: false,
518
+ error: { code: 'E_DB_NOT_INITIALIZED', message: 'Database not initialized' },
519
+ };
520
+ }
521
+ // Find entries to archive (before date, not already archived)
522
+ const rows = await db
523
+ .select()
524
+ .from(pipelineManifest)
525
+ .where(isNull(pipelineManifest.archivedAt));
526
+ const toArchive = rows.filter((r) => r.createdAt.slice(0, 10) < beforeDate);
527
+ if (toArchive.length === 0) {
528
+ const remaining = rows.length;
529
+ return {
530
+ success: true,
531
+ data: { archived: 0, remaining, message: 'No entries found before the specified date' },
532
+ };
533
+ }
534
+ const archivedAt = now();
535
+ for (const row of toArchive) {
536
+ await db.update(pipelineManifest).set({ archivedAt }).where(eq(pipelineManifest.id, row.id));
537
+ }
538
+ const remaining = rows.length - toArchive.length;
539
+ return { success: true, data: { archived: toArchive.length, remaining } };
540
+ }
541
+ catch (error) {
542
+ return {
543
+ success: false,
544
+ error: {
545
+ code: 'E_MANIFEST_ARCHIVE',
546
+ message: error instanceof Error ? error.message : String(error),
547
+ },
548
+ };
549
+ }
550
+ }
551
+ /** pipeline.manifest.compact - Dedup by contentHash (keep newest by createdAt) */
552
+ export async function pipelineManifestCompact(projectRoot) {
553
+ try {
554
+ const db = await getDb(projectRoot);
555
+ const rows = await db
556
+ .select()
557
+ .from(pipelineManifest)
558
+ .where(isNull(pipelineManifest.archivedAt))
559
+ .orderBy(desc(pipelineManifest.createdAt));
560
+ const originalCount = rows.length;
561
+ if (originalCount === 0) {
562
+ return { success: true, data: { compacted: false, message: 'No entries found' } };
563
+ }
564
+ // Dedup by contentHash — keep newest (first seen due to DESC order)
565
+ const seenHashes = new Set();
566
+ const seenIds = new Set();
567
+ const toDelete = [];
568
+ for (const row of rows) {
569
+ const hash = row.contentHash ?? computeContentHash(row.content);
570
+ if (seenHashes.has(hash) || seenIds.has(row.id)) {
571
+ toDelete.push(row.id);
572
+ }
573
+ else {
574
+ seenHashes.add(hash);
575
+ seenIds.add(row.id);
576
+ }
577
+ }
578
+ for (const id of toDelete) {
579
+ await db.delete(pipelineManifest).where(eq(pipelineManifest.id, id));
580
+ }
581
+ return {
582
+ success: true,
583
+ data: {
584
+ compacted: true,
585
+ originalLines: originalCount,
586
+ malformedRemoved: 0,
587
+ duplicatesRemoved: toDelete.length,
588
+ remainingEntries: originalCount - toDelete.length,
589
+ },
590
+ };
591
+ }
592
+ catch (error) {
593
+ return {
594
+ success: false,
595
+ error: {
596
+ code: 'E_COMPACT_FAILED',
597
+ message: error instanceof Error ? error.message : String(error),
598
+ },
599
+ };
600
+ }
601
+ }
602
+ /** pipeline.manifest.validate - Validate manifest entries for a task */
603
+ export async function pipelineManifestValidate(taskId, projectRoot) {
604
+ if (!taskId) {
605
+ return { success: false, error: { code: 'E_INVALID_INPUT', message: 'taskId is required' } };
606
+ }
607
+ try {
608
+ const db = await getDb(projectRoot);
609
+ const root = getProjectRoot(projectRoot);
610
+ const rows = await db
611
+ .select()
612
+ .from(pipelineManifest)
613
+ .where(isNull(pipelineManifest.archivedAt));
614
+ const entries = rows.map(rowToEntry);
615
+ const linked = entries.filter((e) => e.id.startsWith(taskId) || e.linked_tasks?.includes(taskId));
616
+ if (linked.length === 0) {
617
+ return {
618
+ success: true,
619
+ data: {
620
+ taskId,
621
+ valid: true,
622
+ entriesFound: 0,
623
+ message: `No research entries found for task ${taskId}`,
624
+ issues: [],
625
+ },
626
+ };
627
+ }
628
+ const issues = [];
629
+ for (const entry of linked) {
630
+ if (!entry.id)
631
+ issues.push({ entryId: entry.id || '(unknown)', issue: 'Missing id', severity: 'error' });
632
+ if (!entry.file)
633
+ issues.push({ entryId: entry.id, issue: 'Missing file path', severity: 'error' });
634
+ if (!entry.title)
635
+ issues.push({ entryId: entry.id, issue: 'Missing title', severity: 'error' });
636
+ if (!entry.date)
637
+ issues.push({ entryId: entry.id, issue: 'Missing date', severity: 'error' });
638
+ if (!entry.status)
639
+ issues.push({ entryId: entry.id, issue: 'Missing status', severity: 'error' });
640
+ if (!entry.agent_type)
641
+ issues.push({ entryId: entry.id, issue: 'Missing agent_type', severity: 'error' });
642
+ if (entry.status && !['completed', 'partial', 'blocked'].includes(entry.status)) {
643
+ issues.push({
644
+ entryId: entry.id,
645
+ issue: `Invalid status: ${entry.status}`,
646
+ severity: 'error',
647
+ });
648
+ }
649
+ if (entry.file) {
650
+ const filePath = join(root, entry.file);
651
+ if (!existsSync(filePath)) {
652
+ issues.push({
653
+ entryId: entry.id,
654
+ issue: `Output file not found: ${entry.file}`,
655
+ severity: 'warning',
656
+ });
657
+ }
658
+ }
659
+ if (entry.agent_type === 'research' &&
660
+ (!entry.key_findings || entry.key_findings.length === 0)) {
661
+ issues.push({
662
+ entryId: entry.id,
663
+ issue: 'Research entry missing key_findings',
664
+ severity: 'warning',
665
+ });
666
+ }
667
+ }
668
+ return {
669
+ success: true,
670
+ data: {
671
+ taskId,
672
+ valid: issues.filter((i) => i.severity === 'error').length === 0,
673
+ entriesFound: linked.length,
674
+ issues,
675
+ errorCount: issues.filter((i) => i.severity === 'error').length,
676
+ warningCount: issues.filter((i) => i.severity === 'warning').length,
677
+ },
678
+ };
679
+ }
680
+ catch (error) {
681
+ return {
682
+ success: false,
683
+ error: {
684
+ code: 'E_MANIFEST_VALIDATE',
685
+ message: error instanceof Error ? error.message : String(error),
686
+ },
687
+ };
688
+ }
689
+ }
690
+ /** pipeline.manifest.contradictions - Find entries with overlapping topics but conflicting key_findings */
691
+ export async function pipelineManifestContradictions(projectRoot, params) {
692
+ try {
693
+ const db = await getDb(projectRoot);
694
+ const rows = await db
695
+ .select()
696
+ .from(pipelineManifest)
697
+ .where(isNull(pipelineManifest.archivedAt));
698
+ const entries = rows.map(rowToEntry);
699
+ // In-memory negation pattern matching (same logic as compat layer)
700
+ const byTopic = new Map();
701
+ for (const entry of entries) {
702
+ if (!entry.key_findings || entry.key_findings.length === 0)
703
+ continue;
704
+ for (const topic of entry.topics) {
705
+ if (params?.topic && topic !== params.topic)
706
+ continue;
707
+ if (!byTopic.has(topic))
708
+ byTopic.set(topic, []);
709
+ byTopic.get(topic).push(entry);
710
+ }
711
+ }
712
+ const negationPairs = [
713
+ [/\bdoes NOT\b/i, /\bdoes\b(?!.*\bnot\b)/i],
714
+ [/\bcannot\b/i, /\bcan\b(?!.*\bnot\b)/i],
715
+ [/\bno\s+\w+\s+required\b/i, /\brequired\b(?!.*\bno\b)/i],
716
+ [
717
+ /\bnot\s+(?:available|supported|possible|recommended)\b/i,
718
+ /\b(?:available|supported|possible|recommended)\b(?!.*\bnot\b)/i,
719
+ ],
720
+ [/\bwithout\b/i, /\brequires?\b/i],
721
+ [/\bavoid\b/i, /\buse\b/i],
722
+ [/\bdeprecated\b/i, /\brecommended\b/i],
723
+ [/\banti-pattern\b/i, /\bbest practice\b/i],
724
+ ];
725
+ const contradictions = [];
726
+ for (const [topic, topicEntries] of byTopic) {
727
+ if (topicEntries.length < 2)
728
+ continue;
729
+ for (let i = 0; i < topicEntries.length; i++) {
730
+ for (let j = i + 1; j < topicEntries.length; j++) {
731
+ const a = topicEntries[i];
732
+ const b = topicEntries[j];
733
+ const conflicts = [];
734
+ for (const findingA of a.key_findings) {
735
+ for (const findingB of b.key_findings) {
736
+ for (const [patternNeg, patternPos] of negationPairs) {
737
+ if ((patternNeg.test(findingA) && patternPos.test(findingB)) ||
738
+ (patternPos.test(findingA) && patternNeg.test(findingB))) {
739
+ conflicts.push(`"${findingA}" vs "${findingB}"`);
740
+ break;
741
+ }
742
+ }
743
+ }
744
+ }
745
+ if (conflicts.length > 0) {
746
+ contradictions.push({
747
+ entryA: a,
748
+ entryB: b,
749
+ topic,
750
+ conflictDetails: conflicts.join('; '),
751
+ });
752
+ }
753
+ }
754
+ }
755
+ }
756
+ return { success: true, data: { contradictions } };
757
+ }
758
+ catch (error) {
759
+ return {
760
+ success: false,
761
+ error: {
762
+ code: 'E_MANIFEST_CONTRADICTIONS',
763
+ message: error instanceof Error ? error.message : String(error),
764
+ },
765
+ };
766
+ }
767
+ }
768
+ /** pipeline.manifest.superseded - Identify entries replaced by newer work on same topic */
769
+ export async function pipelineManifestSuperseded(projectRoot, params) {
770
+ try {
771
+ const db = await getDb(projectRoot);
772
+ const rows = await db
773
+ .select()
774
+ .from(pipelineManifest)
775
+ .where(isNull(pipelineManifest.archivedAt));
776
+ const entries = rows.map(rowToEntry);
777
+ const byTopicAndType = new Map();
778
+ for (const entry of entries) {
779
+ for (const topic of entry.topics) {
780
+ if (params?.topic && topic !== params.topic)
781
+ continue;
782
+ const key = `${topic}::${entry.agent_type}`;
783
+ if (!byTopicAndType.has(key))
784
+ byTopicAndType.set(key, []);
785
+ byTopicAndType.get(key).push(entry);
786
+ }
787
+ }
788
+ const superseded = [];
789
+ const seenPairs = new Set();
790
+ for (const [key, groupEntries] of byTopicAndType) {
791
+ if (groupEntries.length < 2)
792
+ continue;
793
+ const topic = key.split('::')[0];
794
+ const sorted = [...groupEntries].sort((a, b) => a.date.localeCompare(b.date));
795
+ for (let i = 0; i < sorted.length - 1; i++) {
796
+ const pairKey = `${sorted[i].id}::${sorted[sorted.length - 1].id}::${topic}`;
797
+ if (seenPairs.has(pairKey))
798
+ continue;
799
+ seenPairs.add(pairKey);
800
+ superseded.push({ old: sorted[i], replacement: sorted[sorted.length - 1], topic });
801
+ }
802
+ }
803
+ return { success: true, data: { superseded } };
804
+ }
805
+ catch (error) {
806
+ return {
807
+ success: false,
808
+ error: {
809
+ code: 'E_MANIFEST_SUPERSEDED',
810
+ message: error instanceof Error ? error.message : String(error),
811
+ },
812
+ };
813
+ }
814
+ }
815
+ /** pipeline.manifest.link - Link manifest entry to a task */
816
+ export async function pipelineManifestLink(taskId, researchId, notes, projectRoot) {
817
+ if (!taskId || !researchId) {
818
+ return {
819
+ success: false,
820
+ error: { code: 'E_INVALID_INPUT', message: 'taskId and researchId are required' },
821
+ };
822
+ }
823
+ try {
824
+ const db = await getDb(projectRoot);
825
+ const rows = await db
826
+ .select()
827
+ .from(pipelineManifest)
828
+ .where(eq(pipelineManifest.id, researchId))
829
+ .limit(1);
830
+ if (rows.length === 0) {
831
+ return {
832
+ success: false,
833
+ error: { code: 'E_NOT_FOUND', message: `Research entry '${researchId}' not found` },
834
+ };
835
+ }
836
+ const row = rows[0];
837
+ const entry = rowToEntry(row);
838
+ if (entry.linked_tasks?.includes(taskId)) {
839
+ return { success: true, data: { taskId, researchId, linked: true, alreadyLinked: true } };
840
+ }
841
+ // Update linked_tasks in metadataJson
842
+ const updatedLinkedTasks = [...(entry.linked_tasks ?? []), taskId];
843
+ let meta = {};
844
+ try {
845
+ meta = row.metadataJson ? JSON.parse(row.metadataJson) : {};
846
+ }
847
+ catch {
848
+ // ignore
849
+ }
850
+ meta['linked_tasks'] = updatedLinkedTasks;
851
+ await db
852
+ .update(pipelineManifest)
853
+ .set({
854
+ taskId: row.taskId ?? taskId,
855
+ metadataJson: JSON.stringify(meta),
856
+ })
857
+ .where(eq(pipelineManifest.id, researchId));
858
+ return { success: true, data: { taskId, researchId, linked: true, notes: notes || null } };
859
+ }
860
+ catch (error) {
861
+ return {
862
+ success: false,
863
+ error: {
864
+ code: 'E_MANIFEST_LINK',
865
+ message: error instanceof Error ? error.message : String(error),
866
+ },
867
+ };
868
+ }
869
+ }
870
+ // ============================================================================
871
+ // Helper exported for compat consumers
872
+ // ============================================================================
873
+ /**
874
+ * Read all manifest entries from the pipeline_manifest table.
875
+ * Replaces readManifestEntries() from pipeline-manifest-compat.
876
+ */
877
+ export async function readManifestEntries(projectRoot) {
878
+ try {
879
+ const db = await getDb(projectRoot);
880
+ const rows = await db
881
+ .select()
882
+ .from(pipelineManifest)
883
+ .where(isNull(pipelineManifest.archivedAt))
884
+ .orderBy(desc(pipelineManifest.createdAt));
885
+ return rows.map(rowToEntry);
886
+ }
887
+ catch {
888
+ return [];
889
+ }
890
+ }
891
+ /**
892
+ * Filter manifest entries by criteria (alias for backward compatibility).
893
+ */
894
+ export function filterEntries(entries, filter) {
895
+ return filterManifestEntries(entries, filter);
896
+ }
897
+ // ============================================================================
898
+ // Distillation stub (Phase 3)
899
+ // ============================================================================
900
+ /**
901
+ * Distill a manifest entry to brain.db observation (Phase 3, pending).
902
+ */
903
+ export async function distillManifestEntry(_entryId, _projectRoot) {
904
+ return { success: true, data: { skipped: true, reason: 'distillation_pending_phase3' } };
905
+ }
906
+ // ============================================================================
907
+ // One-time migration: MANIFEST.jsonl → SQLite
908
+ // ============================================================================
909
+ /**
910
+ * Migrate existing .cleo/MANIFEST.jsonl entries into the pipeline_manifest table.
911
+ * Skips entries that already exist (by id). Renames MANIFEST.jsonl to
912
+ * MANIFEST.jsonl.migrated when done.
913
+ *
914
+ * @returns Count of migrated and skipped entries.
915
+ */
916
+ export async function migrateManifestJsonlToSqlite(projectRoot) {
917
+ const root = getProjectRoot(projectRoot);
918
+ const manifestPath = join(getCleoDirAbsolute(root), 'MANIFEST.jsonl');
919
+ if (!existsSync(manifestPath)) {
920
+ return { migrated: 0, skipped: 0 };
921
+ }
922
+ const content = readFileSync(manifestPath, 'utf-8');
923
+ const lines = content.split('\n');
924
+ const entries = [];
925
+ for (const line of lines) {
926
+ const trimmed = line.trim();
927
+ if (!trimmed)
928
+ continue;
929
+ try {
930
+ entries.push(JSON.parse(trimmed));
931
+ }
932
+ catch {
933
+ // skip malformed lines
934
+ }
935
+ }
936
+ if (entries.length === 0) {
937
+ return { migrated: 0, skipped: 0 };
938
+ }
939
+ const db = await getDb(projectRoot);
940
+ let migrated = 0;
941
+ let skipped = 0;
942
+ for (const entry of entries) {
943
+ if (!entry.id) {
944
+ skipped++;
945
+ continue;
946
+ }
947
+ // Check if already exists
948
+ const existing = await db
949
+ .select({ id: pipelineManifest.id })
950
+ .from(pipelineManifest)
951
+ .where(eq(pipelineManifest.id, entry.id))
952
+ .limit(1);
953
+ if (existing.length > 0) {
954
+ skipped++;
955
+ continue;
956
+ }
957
+ try {
958
+ const row = entryToRow(entry);
959
+ await db.insert(pipelineManifest).values(row);
960
+ migrated++;
961
+ }
962
+ catch {
963
+ skipped++;
964
+ }
965
+ }
966
+ // Rename MANIFEST.jsonl to MANIFEST.jsonl.migrated
967
+ try {
968
+ renameSync(manifestPath, manifestPath + '.migrated');
969
+ }
970
+ catch {
971
+ // Non-fatal — file may already be renamed or locked
972
+ }
973
+ return { migrated, skipped };
974
+ }
975
+ //# sourceMappingURL=pipeline-manifest-sqlite.js.map