@cleocode/core 2026.4.58 → 2026.4.59

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 (933) 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 +232 -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.js +82 -0
  42. package/dist/agents/agent-schema.js.map +1 -0
  43. package/dist/agents/capacity.js +116 -0
  44. package/dist/agents/capacity.js.map +1 -0
  45. package/dist/agents/execution-learning.js +474 -0
  46. package/dist/agents/execution-learning.js.map +1 -0
  47. package/dist/agents/health-monitor.js +217 -0
  48. package/dist/agents/health-monitor.js.map +1 -0
  49. package/dist/agents/index.js +29 -0
  50. package/dist/agents/index.js.map +1 -0
  51. package/dist/agents/registry.js +314 -0
  52. package/dist/agents/registry.js.map +1 -0
  53. package/dist/agents/retry.js +215 -0
  54. package/dist/agents/retry.js.map +1 -0
  55. package/dist/audit-prune.js +94 -0
  56. package/dist/audit-prune.js.map +1 -0
  57. package/dist/audit.js +68 -0
  58. package/dist/audit.js.map +1 -0
  59. package/dist/backfill/index.js +229 -0
  60. package/dist/backfill/index.js.map +1 -0
  61. package/dist/bootstrap.js +435 -0
  62. package/dist/bootstrap.js.map +1 -0
  63. package/dist/caamp/adapter.js +259 -0
  64. package/dist/caamp/adapter.js.map +1 -0
  65. package/dist/caamp/capability-check.js +38 -0
  66. package/dist/caamp/capability-check.js.map +1 -0
  67. package/dist/caamp/index.js +21 -0
  68. package/dist/caamp/index.js.map +1 -0
  69. package/dist/caamp-init.js +16 -0
  70. package/dist/caamp-init.js.map +1 -0
  71. package/dist/cleo.js +322 -0
  72. package/dist/cleo.js.map +1 -0
  73. package/dist/code/index.js +14 -0
  74. package/dist/code/index.js.map +1 -0
  75. package/dist/code/outline.js +165 -0
  76. package/dist/code/outline.js.map +1 -0
  77. package/dist/code/parser.js +420 -0
  78. package/dist/code/parser.js.map +1 -0
  79. package/dist/code/search.js +135 -0
  80. package/dist/code/search.js.map +1 -0
  81. package/dist/code/unfold.js +155 -0
  82. package/dist/code/unfold.js.map +1 -0
  83. package/dist/codebase-map/analyzers/architecture.js +129 -0
  84. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  85. package/dist/codebase-map/analyzers/concerns.js +122 -0
  86. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  87. package/dist/codebase-map/analyzers/conventions.js +149 -0
  88. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  89. package/dist/codebase-map/analyzers/integrations.js +108 -0
  90. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  91. package/dist/codebase-map/analyzers/stack.js +117 -0
  92. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  93. package/dist/codebase-map/analyzers/structure.js +137 -0
  94. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  95. package/dist/codebase-map/analyzers/testing.js +118 -0
  96. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  97. package/dist/codebase-map/index.js +57 -0
  98. package/dist/codebase-map/index.js.map +1 -0
  99. package/dist/codebase-map/store.js +122 -0
  100. package/dist/codebase-map/store.js.map +1 -0
  101. package/dist/codebase-map/summary.js +152 -0
  102. package/dist/codebase-map/summary.js.map +1 -0
  103. package/dist/compliance/index.js +288 -0
  104. package/dist/compliance/index.js.map +1 -0
  105. package/dist/compliance/protocol-enforcement.js +332 -0
  106. package/dist/compliance/protocol-enforcement.js.map +1 -0
  107. package/dist/compliance/protocol-rules.js +786 -0
  108. package/dist/compliance/protocol-rules.js.map +1 -0
  109. package/dist/compliance/protocol-types.js +79 -0
  110. package/dist/compliance/protocol-types.js.map +1 -0
  111. package/dist/compliance/store.js +53 -0
  112. package/dist/compliance/store.js.map +1 -0
  113. package/dist/conduit/conduit-client.js +107 -0
  114. package/dist/conduit/conduit-client.js.map +1 -0
  115. package/dist/conduit/factory.js +55 -0
  116. package/dist/conduit/factory.js.map +1 -0
  117. package/dist/conduit/http-transport.js +155 -0
  118. package/dist/conduit/http-transport.js.map +1 -0
  119. package/dist/conduit/local-transport.js +255 -0
  120. package/dist/conduit/local-transport.js.map +1 -0
  121. package/dist/conduit/sse-transport.js +299 -0
  122. package/dist/conduit/sse-transport.js.map +1 -0
  123. package/dist/config/build-config.js +29 -0
  124. package/dist/config/build-config.js.map +1 -0
  125. package/dist/config.js +407 -0
  126. package/dist/config.js.map +1 -0
  127. package/dist/constants.js +18 -0
  128. package/dist/constants.js.map +1 -0
  129. package/dist/context/index.js +137 -0
  130. package/dist/context/index.js.map +1 -0
  131. package/dist/crypto/credentials.js +219 -0
  132. package/dist/crypto/credentials.js.map +1 -0
  133. package/dist/discovery.js +182 -0
  134. package/dist/discovery.js.map +1 -0
  135. package/dist/engine-result.js +12 -0
  136. package/dist/engine-result.js.map +1 -0
  137. package/dist/error-catalog.js +404 -0
  138. package/dist/error-catalog.js.map +1 -0
  139. package/dist/error-registry.js +393 -0
  140. package/dist/error-registry.js.map +1 -0
  141. package/dist/errors.js +173 -0
  142. package/dist/errors.js.map +1 -0
  143. package/dist/hooks/handlers/agent-hooks.js +106 -0
  144. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  145. package/dist/hooks/handlers/conduit-hooks.js +229 -0
  146. package/dist/hooks/handlers/conduit-hooks.js.map +1 -0
  147. package/dist/hooks/handlers/context-hooks.js +111 -0
  148. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  149. package/dist/hooks/handlers/error-hooks.js +52 -0
  150. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  151. package/dist/hooks/handlers/file-hooks.js +104 -0
  152. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  153. package/dist/hooks/handlers/handler-helpers.js +61 -0
  154. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  155. package/dist/hooks/handlers/index.js +37 -0
  156. package/dist/hooks/handlers/index.js.map +1 -0
  157. package/dist/hooks/handlers/intelligence-hooks.js +69 -0
  158. package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
  159. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  160. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  161. package/dist/hooks/handlers/notification-hooks.js +62 -0
  162. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  163. package/dist/hooks/handlers/session-hooks.js +190 -0
  164. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  165. package/dist/hooks/handlers/task-hooks.js +90 -0
  166. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  167. package/dist/hooks/handlers/watchdog-hooks.js +162 -0
  168. package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
  169. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  170. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  171. package/dist/hooks/index.js +13 -0
  172. package/dist/hooks/index.js.map +1 -0
  173. package/dist/hooks/payload-schemas.js +220 -0
  174. package/dist/hooks/payload-schemas.js.map +1 -0
  175. package/dist/hooks/provider-hooks.js +66 -0
  176. package/dist/hooks/provider-hooks.js.map +1 -0
  177. package/dist/hooks/registry.js +229 -0
  178. package/dist/hooks/registry.js.map +1 -0
  179. package/dist/hooks/types.js +66 -0
  180. package/dist/hooks/types.js.map +1 -0
  181. package/dist/hooks.js +136 -0
  182. package/dist/hooks.js.map +1 -0
  183. package/dist/init.js +959 -0
  184. package/dist/init.js.map +1 -0
  185. package/dist/inject/index.js +82 -0
  186. package/dist/inject/index.js.map +1 -0
  187. package/dist/injection.js +377 -0
  188. package/dist/injection.js.map +1 -0
  189. package/dist/intelligence/adaptive-validation.js +497 -0
  190. package/dist/intelligence/adaptive-validation.js.map +1 -0
  191. package/dist/intelligence/impact.js +675 -0
  192. package/dist/intelligence/impact.js.map +1 -0
  193. package/dist/intelligence/index.js +22 -0
  194. package/dist/intelligence/index.js.map +1 -0
  195. package/dist/intelligence/patterns.js +492 -0
  196. package/dist/intelligence/patterns.js.map +1 -0
  197. package/dist/intelligence/prediction.js +499 -0
  198. package/dist/intelligence/prediction.js.map +1 -0
  199. package/dist/intelligence/types.js +13 -0
  200. package/dist/intelligence/types.js.map +1 -0
  201. package/dist/issue/create.js +121 -0
  202. package/dist/issue/create.js.map +1 -0
  203. package/dist/issue/diagnostics.js +59 -0
  204. package/dist/issue/diagnostics.js.map +1 -0
  205. package/dist/issue/index.js +10 -0
  206. package/dist/issue/index.js.map +1 -0
  207. package/dist/issue/template-parser.js +267 -0
  208. package/dist/issue/template-parser.js.map +1 -0
  209. package/dist/json-schema-validator.js +76 -0
  210. package/dist/json-schema-validator.js.map +1 -0
  211. package/dist/lib/index.js +11 -0
  212. package/dist/lib/index.js.map +1 -0
  213. package/dist/lib/retry.js +152 -0
  214. package/dist/lib/retry.js.map +1 -0
  215. package/dist/lib/tree-sitter-languages.js +75 -0
  216. package/dist/lib/tree-sitter-languages.js.map +1 -0
  217. package/dist/lifecycle/chain-composition.js +152 -0
  218. package/dist/lifecycle/chain-composition.js.map +1 -0
  219. package/dist/lifecycle/chain-store.js +246 -0
  220. package/dist/lifecycle/chain-store.js.map +1 -0
  221. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  222. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  223. package/dist/lifecycle/default-chain.js +176 -0
  224. package/dist/lifecycle/default-chain.js.map +1 -0
  225. package/dist/lifecycle/evidence.js +180 -0
  226. package/dist/lifecycle/evidence.js.map +1 -0
  227. package/dist/lifecycle/frontmatter.js +363 -0
  228. package/dist/lifecycle/frontmatter.js.map +1 -0
  229. package/dist/lifecycle/index.js +756 -0
  230. package/dist/lifecycle/index.js.map +1 -0
  231. package/dist/lifecycle/pipeline.js +656 -0
  232. package/dist/lifecycle/pipeline.js.map +1 -0
  233. package/dist/lifecycle/rcasd-index.js +326 -0
  234. package/dist/lifecycle/rcasd-index.js.map +1 -0
  235. package/dist/lifecycle/rcasd-paths.js +220 -0
  236. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  237. package/dist/lifecycle/resume.js +864 -0
  238. package/dist/lifecycle/resume.js.map +1 -0
  239. package/dist/lifecycle/stage-artifacts.js +94 -0
  240. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  241. package/dist/lifecycle/stage-guidance.js +234 -0
  242. package/dist/lifecycle/stage-guidance.js.map +1 -0
  243. package/dist/lifecycle/stages.js +534 -0
  244. package/dist/lifecycle/stages.js.map +1 -0
  245. package/dist/lifecycle/state-machine.js +516 -0
  246. package/dist/lifecycle/state-machine.js.map +1 -0
  247. package/dist/lifecycle/tessera-engine.js +249 -0
  248. package/dist/lifecycle/tessera-engine.js.map +1 -0
  249. package/dist/logger.js +140 -0
  250. package/dist/logger.js.map +1 -0
  251. package/dist/memory/anthropic-key-resolver.js +105 -0
  252. package/dist/memory/anthropic-key-resolver.js.map +1 -0
  253. package/dist/memory/auto-extract.js +77 -0
  254. package/dist/memory/auto-extract.js.map +1 -0
  255. package/dist/memory/brain-backfill.js +389 -0
  256. package/dist/memory/brain-backfill.js.map +1 -0
  257. package/dist/memory/brain-consolidator.js +294 -0
  258. package/dist/memory/brain-consolidator.js.map +1 -0
  259. package/dist/memory/brain-embedding.js +66 -0
  260. package/dist/memory/brain-embedding.js.map +1 -0
  261. package/dist/memory/brain-export.js +239 -0
  262. package/dist/memory/brain-export.js.map +1 -0
  263. package/dist/memory/brain-lifecycle.js +841 -0
  264. package/dist/memory/brain-lifecycle.js.map +1 -0
  265. package/dist/memory/brain-links.js +161 -0
  266. package/dist/memory/brain-links.js.map +1 -0
  267. package/dist/memory/brain-maintenance.js +125 -0
  268. package/dist/memory/brain-maintenance.js.map +1 -0
  269. package/dist/memory/brain-migration.js +149 -0
  270. package/dist/memory/brain-migration.js.map +1 -0
  271. package/dist/memory/brain-purge.js +243 -0
  272. package/dist/memory/brain-purge.js.map +1 -0
  273. package/dist/memory/brain-reasoning.js +215 -0
  274. package/dist/memory/brain-reasoning.js.map +1 -0
  275. package/dist/memory/brain-retrieval.js +1088 -0
  276. package/dist/memory/brain-retrieval.js.map +1 -0
  277. package/dist/memory/brain-row-types.js +10 -0
  278. package/dist/memory/brain-row-types.js.map +1 -0
  279. package/dist/memory/brain-search.js +613 -0
  280. package/dist/memory/brain-search.js.map +1 -0
  281. package/dist/memory/brain-similarity.js +145 -0
  282. package/dist/memory/brain-similarity.js.map +1 -0
  283. package/dist/memory/brain-stdp.js +297 -0
  284. package/dist/memory/brain-stdp.js.map +1 -0
  285. package/dist/memory/claude-mem-migration.js +277 -0
  286. package/dist/memory/claude-mem-migration.js.map +1 -0
  287. package/dist/memory/decision-cross-link.js +228 -0
  288. package/dist/memory/decision-cross-link.js.map +1 -0
  289. package/dist/memory/decisions.js +242 -0
  290. package/dist/memory/decisions.js.map +1 -0
  291. package/dist/memory/edge-types.js +31 -0
  292. package/dist/memory/edge-types.js.map +1 -0
  293. package/dist/memory/embedding-local.js +102 -0
  294. package/dist/memory/embedding-local.js.map +1 -0
  295. package/dist/memory/embedding-queue.js +271 -0
  296. package/dist/memory/embedding-queue.js.map +1 -0
  297. package/dist/memory/embedding-worker.js +58 -0
  298. package/dist/memory/embedding-worker.js.map +1 -0
  299. package/dist/memory/engine-compat.js +1597 -0
  300. package/dist/memory/engine-compat.js.map +1 -0
  301. package/dist/memory/extraction-gate.js +459 -0
  302. package/dist/memory/extraction-gate.js.map +1 -0
  303. package/dist/memory/graph-auto-populate.js +148 -0
  304. package/dist/memory/graph-auto-populate.js.map +1 -0
  305. package/dist/memory/graph-memory-bridge.js +517 -0
  306. package/dist/memory/graph-memory-bridge.js.map +1 -0
  307. package/dist/memory/graph-queries.js +290 -0
  308. package/dist/memory/graph-queries.js.map +1 -0
  309. package/dist/memory/index.js +1148 -0
  310. package/dist/memory/index.js.map +1 -0
  311. package/dist/memory/learnings.js +197 -0
  312. package/dist/memory/learnings.js.map +1 -0
  313. package/dist/memory/llm-extraction.js +425 -0
  314. package/dist/memory/llm-extraction.js.map +1 -0
  315. package/dist/memory/memory-bridge.js +382 -0
  316. package/dist/memory/memory-bridge.js.map +1 -0
  317. package/dist/memory/mental-model-injection.js +61 -0
  318. package/dist/memory/mental-model-injection.js.map +1 -0
  319. package/dist/memory/mental-model-queue.js +211 -0
  320. package/dist/memory/mental-model-queue.js.map +1 -0
  321. package/dist/memory/observer-reflector.js +626 -0
  322. package/dist/memory/observer-reflector.js.map +1 -0
  323. package/dist/memory/patterns.js +192 -0
  324. package/dist/memory/patterns.js.map +1 -0
  325. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  326. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  327. package/dist/memory/quality-feedback.js +449 -0
  328. package/dist/memory/quality-feedback.js.map +1 -0
  329. package/dist/memory/quality-scoring.js +182 -0
  330. package/dist/memory/quality-scoring.js.map +1 -0
  331. package/dist/memory/session-memory.js +331 -0
  332. package/dist/memory/session-memory.js.map +1 -0
  333. package/dist/memory/sleep-consolidation.js +706 -0
  334. package/dist/memory/sleep-consolidation.js.map +1 -0
  335. package/dist/memory/temporal-supersession.js +403 -0
  336. package/dist/memory/temporal-supersession.js.map +1 -0
  337. package/dist/metrics/ab-test.js +260 -0
  338. package/dist/metrics/ab-test.js.map +1 -0
  339. package/dist/metrics/aggregation.js +363 -0
  340. package/dist/metrics/aggregation.js.map +1 -0
  341. package/dist/metrics/common.js +64 -0
  342. package/dist/metrics/common.js.map +1 -0
  343. package/dist/metrics/enums.js +78 -0
  344. package/dist/metrics/enums.js.map +1 -0
  345. package/dist/metrics/index.js +19 -0
  346. package/dist/metrics/index.js.map +1 -0
  347. package/dist/metrics/model-provider-registry.js +88 -0
  348. package/dist/metrics/model-provider-registry.js.map +1 -0
  349. package/dist/metrics/otel-integration.js +263 -0
  350. package/dist/metrics/otel-integration.js.map +1 -0
  351. package/dist/metrics/provider-detection.js +103 -0
  352. package/dist/metrics/provider-detection.js.map +1 -0
  353. package/dist/metrics/token-estimation.js +253 -0
  354. package/dist/metrics/token-estimation.js.map +1 -0
  355. package/dist/metrics/token-service.js +450 -0
  356. package/dist/metrics/token-service.js.map +1 -0
  357. package/dist/migration/agent-outputs.js +316 -0
  358. package/dist/migration/agent-outputs.js.map +1 -0
  359. package/dist/migration/checksum.js +92 -0
  360. package/dist/migration/checksum.js.map +1 -0
  361. package/dist/migration/index.js +282 -0
  362. package/dist/migration/index.js.map +1 -0
  363. package/dist/migration/logger.js +360 -0
  364. package/dist/migration/logger.js.map +1 -0
  365. package/dist/migration/preflight.js +9 -0
  366. package/dist/migration/preflight.js.map +1 -0
  367. package/dist/migration/state.js +421 -0
  368. package/dist/migration/state.js.map +1 -0
  369. package/dist/migration/validate.js +241 -0
  370. package/dist/migration/validate.js.map +1 -0
  371. package/dist/mvi-helpers.js +73 -0
  372. package/dist/mvi-helpers.js.map +1 -0
  373. package/dist/nexus/deps.js +375 -0
  374. package/dist/nexus/deps.js.map +1 -0
  375. package/dist/nexus/discover.js +288 -0
  376. package/dist/nexus/discover.js.map +1 -0
  377. package/dist/nexus/hash.js +10 -0
  378. package/dist/nexus/hash.js.map +1 -0
  379. package/dist/nexus/index.js +40 -0
  380. package/dist/nexus/index.js.map +1 -0
  381. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  382. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  383. package/dist/nexus/nexus-bridge.js +321 -0
  384. package/dist/nexus/nexus-bridge.js.map +1 -0
  385. package/dist/nexus/permissions.js +105 -0
  386. package/dist/nexus/permissions.js.map +1 -0
  387. package/dist/nexus/query.js +175 -0
  388. package/dist/nexus/query.js.map +1 -0
  389. package/dist/nexus/registry.js +665 -0
  390. package/dist/nexus/registry.js.map +1 -0
  391. package/dist/nexus/sharing/index.js +288 -0
  392. package/dist/nexus/sharing/index.js.map +1 -0
  393. package/dist/nexus/transfer-types.js +8 -0
  394. package/dist/nexus/transfer-types.js.map +1 -0
  395. package/dist/nexus/transfer.js +271 -0
  396. package/dist/nexus/transfer.js.map +1 -0
  397. package/dist/nexus/workspace.js +355 -0
  398. package/dist/nexus/workspace.js.map +1 -0
  399. package/dist/observability/index.js +103 -0
  400. package/dist/observability/index.js.map +1 -0
  401. package/dist/observability/log-filter.js +63 -0
  402. package/dist/observability/log-filter.js.map +1 -0
  403. package/dist/observability/log-parser.js +99 -0
  404. package/dist/observability/log-parser.js.map +1 -0
  405. package/dist/observability/log-reader.js +139 -0
  406. package/dist/observability/log-reader.js.map +1 -0
  407. package/dist/observability/types.js +19 -0
  408. package/dist/observability/types.js.map +1 -0
  409. package/dist/orchestration/analyze.js +107 -0
  410. package/dist/orchestration/analyze.js.map +1 -0
  411. package/dist/orchestration/bootstrap.js +132 -0
  412. package/dist/orchestration/bootstrap.js.map +1 -0
  413. package/dist/orchestration/context.js +56 -0
  414. package/dist/orchestration/context.js.map +1 -0
  415. package/dist/orchestration/critical-path.js +100 -0
  416. package/dist/orchestration/critical-path.js.map +1 -0
  417. package/dist/orchestration/hierarchy.js +183 -0
  418. package/dist/orchestration/hierarchy.js.map +1 -0
  419. package/dist/orchestration/index.js +287 -0
  420. package/dist/orchestration/index.js.map +1 -0
  421. package/dist/orchestration/parallel.js +89 -0
  422. package/dist/orchestration/parallel.js.map +1 -0
  423. package/dist/orchestration/protocol-validators.js +815 -0
  424. package/dist/orchestration/protocol-validators.js.map +1 -0
  425. package/dist/orchestration/skill-ops.js +98 -0
  426. package/dist/orchestration/skill-ops.js.map +1 -0
  427. package/dist/orchestration/status.js +107 -0
  428. package/dist/orchestration/status.js.map +1 -0
  429. package/dist/orchestration/unblock.js +103 -0
  430. package/dist/orchestration/unblock.js.map +1 -0
  431. package/dist/orchestration/validate-spawn.js +67 -0
  432. package/dist/orchestration/validate-spawn.js.map +1 -0
  433. package/dist/orchestration/waves.js +86 -0
  434. package/dist/orchestration/waves.js.map +1 -0
  435. package/dist/otel/index.js +163 -0
  436. package/dist/otel/index.js.map +1 -0
  437. package/dist/output.js +164 -0
  438. package/dist/output.js.map +1 -0
  439. package/dist/pagination.js +64 -0
  440. package/dist/pagination.js.map +1 -0
  441. package/dist/paths.js +882 -0
  442. package/dist/paths.js.map +1 -0
  443. package/dist/phases/deps.js +372 -0
  444. package/dist/phases/deps.js.map +1 -0
  445. package/dist/phases/index.js +349 -0
  446. package/dist/phases/index.js.map +1 -0
  447. package/dist/pipeline/index.js +10 -0
  448. package/dist/pipeline/index.js.map +1 -0
  449. package/dist/pipeline/phase.js +45 -0
  450. package/dist/pipeline/phase.js.map +1 -0
  451. package/dist/platform.js +211 -0
  452. package/dist/platform.js.map +1 -0
  453. package/dist/project-info.js +84 -0
  454. package/dist/project-info.js.map +1 -0
  455. package/dist/reconciliation/index.js +10 -0
  456. package/dist/reconciliation/index.js.map +1 -0
  457. package/dist/reconciliation/link-store.js +175 -0
  458. package/dist/reconciliation/link-store.js.map +1 -0
  459. package/dist/reconciliation/reconciliation-engine.js +298 -0
  460. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  461. package/dist/release/artifacts.js +427 -0
  462. package/dist/release/artifacts.js.map +1 -0
  463. package/dist/release/changelog-writer.js +151 -0
  464. package/dist/release/changelog-writer.js.map +1 -0
  465. package/dist/release/channel.js +144 -0
  466. package/dist/release/channel.js.map +1 -0
  467. package/dist/release/ci.js +166 -0
  468. package/dist/release/ci.js.map +1 -0
  469. package/dist/release/github-pr.js +225 -0
  470. package/dist/release/github-pr.js.map +1 -0
  471. package/dist/release/guards.js +116 -0
  472. package/dist/release/guards.js.map +1 -0
  473. package/dist/release/index.js +22 -0
  474. package/dist/release/index.js.map +1 -0
  475. package/dist/release/release-config.js +158 -0
  476. package/dist/release/release-config.js.map +1 -0
  477. package/dist/release/release-manifest.js +1019 -0
  478. package/dist/release/release-manifest.js.map +1 -0
  479. package/dist/release/version-bump.js +255 -0
  480. package/dist/release/version-bump.js.map +1 -0
  481. package/dist/remote/index.js +257 -0
  482. package/dist/remote/index.js.map +1 -0
  483. package/dist/repair.js +130 -0
  484. package/dist/repair.js.map +1 -0
  485. package/dist/research/index.js +2 -0
  486. package/dist/research/index.js.map +1 -0
  487. package/dist/roadmap/index.js +59 -0
  488. package/dist/roadmap/index.js.map +1 -0
  489. package/dist/routing/capability-matrix.js +1556 -0
  490. package/dist/routing/capability-matrix.js.map +1 -0
  491. package/dist/routing/index.js +9 -0
  492. package/dist/routing/index.js.map +1 -0
  493. package/dist/scaffold.js +1937 -0
  494. package/dist/scaffold.js.map +1 -0
  495. package/dist/schema-management.js +295 -0
  496. package/dist/schema-management.js.map +1 -0
  497. package/dist/security/index.js +9 -0
  498. package/dist/security/index.js.map +1 -0
  499. package/dist/security/input-sanitization.js +326 -0
  500. package/dist/security/input-sanitization.js.map +1 -0
  501. package/dist/sequence/index.js +295 -0
  502. package/dist/sequence/index.js.map +1 -0
  503. package/dist/sessions/assumptions.js +54 -0
  504. package/dist/sessions/assumptions.js.map +1 -0
  505. package/dist/sessions/briefing.js +377 -0
  506. package/dist/sessions/briefing.js.map +1 -0
  507. package/dist/sessions/context-alert.js +222 -0
  508. package/dist/sessions/context-alert.js.map +1 -0
  509. package/dist/sessions/context-inject.js +61 -0
  510. package/dist/sessions/context-inject.js.map +1 -0
  511. package/dist/sessions/context-monitor.js +98 -0
  512. package/dist/sessions/context-monitor.js.map +1 -0
  513. package/dist/sessions/decisions.js +65 -0
  514. package/dist/sessions/decisions.js.map +1 -0
  515. package/dist/sessions/find.js +65 -0
  516. package/dist/sessions/find.js.map +1 -0
  517. package/dist/sessions/handoff.js +328 -0
  518. package/dist/sessions/handoff.js.map +1 -0
  519. package/dist/sessions/hitl-warnings.js +254 -0
  520. package/dist/sessions/hitl-warnings.js.map +1 -0
  521. package/dist/sessions/index.js +327 -0
  522. package/dist/sessions/index.js.map +1 -0
  523. package/dist/sessions/session-archive.js +40 -0
  524. package/dist/sessions/session-archive.js.map +1 -0
  525. package/dist/sessions/session-cleanup.js +59 -0
  526. package/dist/sessions/session-cleanup.js.map +1 -0
  527. package/dist/sessions/session-drift.js +134 -0
  528. package/dist/sessions/session-drift.js.map +1 -0
  529. package/dist/sessions/session-enforcement.js +144 -0
  530. package/dist/sessions/session-enforcement.js.map +1 -0
  531. package/dist/sessions/session-grade.js +253 -0
  532. package/dist/sessions/session-grade.js.map +1 -0
  533. package/dist/sessions/session-history.js +42 -0
  534. package/dist/sessions/session-history.js.map +1 -0
  535. package/dist/sessions/session-id.js +81 -0
  536. package/dist/sessions/session-id.js.map +1 -0
  537. package/dist/sessions/session-memory-bridge.js +30 -0
  538. package/dist/sessions/session-memory-bridge.js.map +1 -0
  539. package/dist/sessions/session-show.js +24 -0
  540. package/dist/sessions/session-show.js.map +1 -0
  541. package/dist/sessions/session-stats.js +69 -0
  542. package/dist/sessions/session-stats.js.map +1 -0
  543. package/dist/sessions/session-suspend.js +39 -0
  544. package/dist/sessions/session-suspend.js.map +1 -0
  545. package/dist/sessions/session-switch.js +51 -0
  546. package/dist/sessions/session-switch.js.map +1 -0
  547. package/dist/sessions/session-view.js +76 -0
  548. package/dist/sessions/session-view.js.map +1 -0
  549. package/dist/sessions/snapshot.js +213 -0
  550. package/dist/sessions/snapshot.js.map +1 -0
  551. package/dist/sessions/statusline-setup.js +85 -0
  552. package/dist/sessions/statusline-setup.js.map +1 -0
  553. package/dist/sessions/types.js +8 -0
  554. package/dist/sessions/types.js.map +1 -0
  555. package/dist/skills/agents/config.js +94 -0
  556. package/dist/skills/agents/config.js.map +1 -0
  557. package/dist/skills/agents/install.js +116 -0
  558. package/dist/skills/agents/install.js.map +1 -0
  559. package/dist/skills/agents/registry.js +161 -0
  560. package/dist/skills/agents/registry.js.map +1 -0
  561. package/dist/skills/discovery.js +333 -0
  562. package/dist/skills/discovery.js.map +1 -0
  563. package/dist/skills/dispatch.js +347 -0
  564. package/dist/skills/dispatch.js.map +1 -0
  565. package/dist/skills/dynamic-skill-generator.js +87 -0
  566. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  567. package/dist/skills/index.js +44 -0
  568. package/dist/skills/index.js.map +1 -0
  569. package/dist/skills/injection/subagent.js +195 -0
  570. package/dist/skills/injection/subagent.js.map +1 -0
  571. package/dist/skills/injection/token.js +260 -0
  572. package/dist/skills/injection/token.js.map +1 -0
  573. package/dist/skills/install.js +40 -0
  574. package/dist/skills/install.js.map +1 -0
  575. package/dist/skills/manifests/contribution.js +175 -0
  576. package/dist/skills/manifests/contribution.js.map +1 -0
  577. package/dist/skills/manifests/research.js +281 -0
  578. package/dist/skills/manifests/research.js.map +1 -0
  579. package/dist/skills/manifests/resolver.js +146 -0
  580. package/dist/skills/manifests/resolver.js.map +1 -0
  581. package/dist/skills/marketplace.js +90 -0
  582. package/dist/skills/marketplace.js.map +1 -0
  583. package/dist/skills/orchestrator/spawn.js +178 -0
  584. package/dist/skills/orchestrator/spawn.js.map +1 -0
  585. package/dist/skills/orchestrator/startup.js +451 -0
  586. package/dist/skills/orchestrator/startup.js.map +1 -0
  587. package/dist/skills/orchestrator/validator.js +301 -0
  588. package/dist/skills/orchestrator/validator.js.map +1 -0
  589. package/dist/skills/precedence-integration.js +73 -0
  590. package/dist/skills/precedence-integration.js.map +1 -0
  591. package/dist/skills/precedence-types.js +16 -0
  592. package/dist/skills/precedence-types.js.map +1 -0
  593. package/dist/skills/routing-table.js +63 -0
  594. package/dist/skills/routing-table.js.map +1 -0
  595. package/dist/skills/skill-paths.js +217 -0
  596. package/dist/skills/skill-paths.js.map +1 -0
  597. package/dist/skills/test-utility.js +55 -0
  598. package/dist/skills/test-utility.js.map +1 -0
  599. package/dist/skills/types.js +118 -0
  600. package/dist/skills/types.js.map +1 -0
  601. package/dist/skills/validation.js +183 -0
  602. package/dist/skills/validation.js.map +1 -0
  603. package/dist/skills/version.js +57 -0
  604. package/dist/skills/version.js.map +1 -0
  605. package/dist/snapshot/index.js +188 -0
  606. package/dist/snapshot/index.js.map +1 -0
  607. package/dist/spawn/adapter-registry.js +246 -0
  608. package/dist/spawn/adapter-registry.js.map +1 -0
  609. package/dist/spawn/index.js +10 -0
  610. package/dist/spawn/index.js.map +1 -0
  611. package/dist/stats/index.js +350 -0
  612. package/dist/stats/index.js.map +1 -0
  613. package/dist/stats/workflow-telemetry.js +400 -0
  614. package/dist/stats/workflow-telemetry.js.map +1 -0
  615. package/dist/sticky/archive.js +47 -0
  616. package/dist/sticky/archive.js.map +1 -0
  617. package/dist/sticky/convert.js +235 -0
  618. package/dist/sticky/convert.js.map +1 -0
  619. package/dist/sticky/create.js +48 -0
  620. package/dist/sticky/create.js.map +1 -0
  621. package/dist/sticky/id.js +35 -0
  622. package/dist/sticky/id.js.map +1 -0
  623. package/dist/sticky/index.js +16 -0
  624. package/dist/sticky/index.js.map +1 -0
  625. package/dist/sticky/list.js +57 -0
  626. package/dist/sticky/list.js.map +1 -0
  627. package/dist/sticky/purge.js +45 -0
  628. package/dist/sticky/purge.js.map +1 -0
  629. package/dist/sticky/show.js +42 -0
  630. package/dist/sticky/show.js.map +1 -0
  631. package/dist/sticky/types.js +10 -0
  632. package/dist/sticky/types.js.map +1 -0
  633. package/dist/store/agent-registry-accessor.js +886 -0
  634. package/dist/store/agent-registry-accessor.js.map +1 -0
  635. package/dist/store/api-key-kdf.js +84 -0
  636. package/dist/store/api-key-kdf.js.map +1 -0
  637. package/dist/store/atomic.js +167 -0
  638. package/dist/store/atomic.js.map +1 -0
  639. package/dist/store/backup-crypto.js +184 -0
  640. package/dist/store/backup-crypto.js.map +1 -0
  641. package/dist/store/backup-pack.js +581 -0
  642. package/dist/store/backup-pack.js.map +1 -0
  643. package/dist/store/backup-unpack.js +449 -0
  644. package/dist/store/backup-unpack.js.map +1 -0
  645. package/dist/store/backup.js +94 -0
  646. package/dist/store/backup.js.map +1 -0
  647. package/dist/store/brain-accessor.js +429 -0
  648. package/dist/store/brain-accessor.js.map +1 -0
  649. package/dist/store/brain-schema.js +628 -0
  650. package/dist/store/brain-schema.js.map +1 -0
  651. package/dist/store/brain-sqlite.js +320 -0
  652. package/dist/store/brain-sqlite.js.map +1 -0
  653. package/dist/store/cache.js +168 -0
  654. package/dist/store/cache.js.map +1 -0
  655. package/dist/store/chain-schema.js +51 -0
  656. package/dist/store/chain-schema.js.map +1 -0
  657. package/dist/store/cleanup-legacy.js +171 -0
  658. package/dist/store/cleanup-legacy.js.map +1 -0
  659. package/dist/store/conduit-sqlite.js +570 -0
  660. package/dist/store/conduit-sqlite.js.map +1 -0
  661. package/dist/store/converters.js +124 -0
  662. package/dist/store/converters.js.map +1 -0
  663. package/dist/store/cross-db-cleanup.js +319 -0
  664. package/dist/store/cross-db-cleanup.js.map +1 -0
  665. package/dist/store/data-accessor.js +26 -0
  666. package/dist/store/data-accessor.js.map +1 -0
  667. package/dist/store/data-safety-central.js +269 -0
  668. package/dist/store/data-safety-central.js.map +1 -0
  669. package/dist/store/data-safety.js +274 -0
  670. package/dist/store/data-safety.js.map +1 -0
  671. package/dist/store/db-helpers.js +241 -0
  672. package/dist/store/db-helpers.js.map +1 -0
  673. package/dist/store/export.js +155 -0
  674. package/dist/store/export.js.map +1 -0
  675. package/dist/store/file-utils.js +270 -0
  676. package/dist/store/file-utils.js.map +1 -0
  677. package/dist/store/git-checkpoint.js +365 -0
  678. package/dist/store/git-checkpoint.js.map +1 -0
  679. package/dist/store/global-salt.js +147 -0
  680. package/dist/store/global-salt.js.map +1 -0
  681. package/dist/store/import-logging.js +139 -0
  682. package/dist/store/import-logging.js.map +1 -0
  683. package/dist/store/import-remap.js +145 -0
  684. package/dist/store/import-remap.js.map +1 -0
  685. package/dist/store/import-sort.js +121 -0
  686. package/dist/store/import-sort.js.map +1 -0
  687. package/dist/store/index.js +29 -0
  688. package/dist/store/index.js.map +1 -0
  689. package/dist/store/json.js +208 -0
  690. package/dist/store/json.js.map +1 -0
  691. package/dist/store/lifecycle-store.js +249 -0
  692. package/dist/store/lifecycle-store.js.map +1 -0
  693. package/dist/store/lock.js +70 -0
  694. package/dist/store/lock.js.map +1 -0
  695. package/dist/store/migrate-signaldock-to-conduit.js +562 -0
  696. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  697. package/dist/store/migration-manager.js +403 -0
  698. package/dist/store/migration-manager.js.map +1 -0
  699. package/dist/store/migration-sqlite.js +676 -0
  700. package/dist/store/migration-sqlite.js.map +1 -0
  701. package/dist/store/nexus-schema.js +277 -0
  702. package/dist/store/nexus-schema.js.map +1 -0
  703. package/dist/store/nexus-sqlite.js +242 -0
  704. package/dist/store/nexus-sqlite.js.map +1 -0
  705. package/dist/store/nexus-validation-schemas.js +40 -0
  706. package/dist/store/nexus-validation-schemas.js.map +1 -0
  707. package/dist/store/parsers.js +37 -0
  708. package/dist/store/parsers.js.map +1 -0
  709. package/dist/store/project-detect.js +457 -0
  710. package/dist/store/project-detect.js.map +1 -0
  711. package/dist/store/provider.js +101 -0
  712. package/dist/store/provider.js.map +1 -0
  713. package/dist/store/regenerators.js +207 -0
  714. package/dist/store/regenerators.js.map +1 -0
  715. package/dist/store/restore-conflict-report.js +206 -0
  716. package/dist/store/restore-conflict-report.js.map +1 -0
  717. package/dist/store/restore-json-merge.js +454 -0
  718. package/dist/store/restore-json-merge.js.map +1 -0
  719. package/dist/store/safety-data-accessor.js +257 -0
  720. package/dist/store/safety-data-accessor.js.map +1 -0
  721. package/dist/store/schema.js +7 -0
  722. package/dist/store/schema.js.map +1 -0
  723. package/dist/store/session-store.js +219 -0
  724. package/dist/store/session-store.js.map +1 -0
  725. package/dist/store/signaldock-sqlite.js +550 -0
  726. package/dist/store/signaldock-sqlite.js.map +1 -0
  727. package/dist/store/sqlite-backup.js +498 -0
  728. package/dist/store/sqlite-backup.js.map +1 -0
  729. package/dist/store/sqlite-data-accessor.js +788 -0
  730. package/dist/store/sqlite-data-accessor.js.map +1 -0
  731. package/dist/store/sqlite.js +483 -0
  732. package/dist/store/sqlite.js.map +1 -0
  733. package/dist/store/status-registry.js +8 -0
  734. package/dist/store/status-registry.js.map +1 -0
  735. package/dist/store/t310-readiness.js +115 -0
  736. package/dist/store/t310-readiness.js.map +1 -0
  737. package/dist/store/task-store.js +358 -0
  738. package/dist/store/task-store.js.map +1 -0
  739. package/dist/store/tasks-schema.js +610 -0
  740. package/dist/store/tasks-schema.js.map +1 -0
  741. package/dist/store/typed-query.js +15 -0
  742. package/dist/store/typed-query.js.map +1 -0
  743. package/dist/store/validation-schemas.js +278 -0
  744. package/dist/store/validation-schemas.js.map +1 -0
  745. package/dist/system/archive-analytics.js +277 -0
  746. package/dist/system/archive-analytics.js.map +1 -0
  747. package/dist/system/archive-stats.js +64 -0
  748. package/dist/system/archive-stats.js.map +1 -0
  749. package/dist/system/audit.js +145 -0
  750. package/dist/system/audit.js.map +1 -0
  751. package/dist/system/backup.js +280 -0
  752. package/dist/system/backup.js.map +1 -0
  753. package/dist/system/cleanup.js +134 -0
  754. package/dist/system/cleanup.js.map +1 -0
  755. package/dist/system/dependencies.js +466 -0
  756. package/dist/system/dependencies.js.map +1 -0
  757. package/dist/system/health.js +1207 -0
  758. package/dist/system/health.js.map +1 -0
  759. package/dist/system/index.js +18 -0
  760. package/dist/system/index.js.map +1 -0
  761. package/dist/system/inject-generate.js +122 -0
  762. package/dist/system/inject-generate.js.map +1 -0
  763. package/dist/system/labels.js +38 -0
  764. package/dist/system/labels.js.map +1 -0
  765. package/dist/system/metrics.js +61 -0
  766. package/dist/system/metrics.js.map +1 -0
  767. package/dist/system/migrate.js +43 -0
  768. package/dist/system/migrate.js.map +1 -0
  769. package/dist/system/platform-paths.js +80 -0
  770. package/dist/system/platform-paths.js.map +1 -0
  771. package/dist/system/runtime.js +161 -0
  772. package/dist/system/runtime.js.map +1 -0
  773. package/dist/system/safestop.js +89 -0
  774. package/dist/system/safestop.js.map +1 -0
  775. package/dist/system/storage-preflight.js +123 -0
  776. package/dist/system/storage-preflight.js.map +1 -0
  777. package/dist/task-work/index.js +159 -0
  778. package/dist/task-work/index.js.map +1 -0
  779. package/dist/tasks/add.js +837 -0
  780. package/dist/tasks/add.js.map +1 -0
  781. package/dist/tasks/analyze.js +85 -0
  782. package/dist/tasks/analyze.js.map +1 -0
  783. package/dist/tasks/archive.js +90 -0
  784. package/dist/tasks/archive.js.map +1 -0
  785. package/dist/tasks/atomicity.js +83 -0
  786. package/dist/tasks/atomicity.js.map +1 -0
  787. package/dist/tasks/cancel-ops.js +83 -0
  788. package/dist/tasks/cancel-ops.js.map +1 -0
  789. package/dist/tasks/complete.js +252 -0
  790. package/dist/tasks/complete.js.map +1 -0
  791. package/dist/tasks/crossref-extract.js +73 -0
  792. package/dist/tasks/crossref-extract.js.map +1 -0
  793. package/dist/tasks/delete-preview.js +192 -0
  794. package/dist/tasks/delete-preview.js.map +1 -0
  795. package/dist/tasks/delete.js +120 -0
  796. package/dist/tasks/delete.js.map +1 -0
  797. package/dist/tasks/deletion-strategy.js +200 -0
  798. package/dist/tasks/deletion-strategy.js.map +1 -0
  799. package/dist/tasks/dependency-check.js +278 -0
  800. package/dist/tasks/dependency-check.js.map +1 -0
  801. package/dist/tasks/deps-ready.js +32 -0
  802. package/dist/tasks/deps-ready.js.map +1 -0
  803. package/dist/tasks/enforcement.js +86 -0
  804. package/dist/tasks/enforcement.js.map +1 -0
  805. package/dist/tasks/epic-enforcement.js +294 -0
  806. package/dist/tasks/epic-enforcement.js.map +1 -0
  807. package/dist/tasks/find.js +163 -0
  808. package/dist/tasks/find.js.map +1 -0
  809. package/dist/tasks/graph-cache.js +127 -0
  810. package/dist/tasks/graph-cache.js.map +1 -0
  811. package/dist/tasks/graph-ops.js +173 -0
  812. package/dist/tasks/graph-ops.js.map +1 -0
  813. package/dist/tasks/graph-rag.js +328 -0
  814. package/dist/tasks/graph-rag.js.map +1 -0
  815. package/dist/tasks/hierarchy-policy.js +149 -0
  816. package/dist/tasks/hierarchy-policy.js.map +1 -0
  817. package/dist/tasks/hierarchy.js +185 -0
  818. package/dist/tasks/hierarchy.js.map +1 -0
  819. package/dist/tasks/id-generator.js +65 -0
  820. package/dist/tasks/id-generator.js.map +1 -0
  821. package/dist/tasks/index.js +14 -0
  822. package/dist/tasks/index.js.map +1 -0
  823. package/dist/tasks/labels.js +55 -0
  824. package/dist/tasks/labels.js.map +1 -0
  825. package/dist/tasks/list.js +75 -0
  826. package/dist/tasks/list.js.map +1 -0
  827. package/dist/tasks/phase-tracking.js +133 -0
  828. package/dist/tasks/phase-tracking.js.map +1 -0
  829. package/dist/tasks/pipeline-stage.js +248 -0
  830. package/dist/tasks/pipeline-stage.js.map +1 -0
  831. package/dist/tasks/plan.js +268 -0
  832. package/dist/tasks/plan.js.map +1 -0
  833. package/dist/tasks/relates.js +101 -0
  834. package/dist/tasks/relates.js.map +1 -0
  835. package/dist/tasks/show.js +83 -0
  836. package/dist/tasks/show.js.map +1 -0
  837. package/dist/tasks/size-weighting.js +86 -0
  838. package/dist/tasks/size-weighting.js.map +1 -0
  839. package/dist/tasks/staleness.js +86 -0
  840. package/dist/tasks/staleness.js.map +1 -0
  841. package/dist/tasks/task-ops.js +1741 -0
  842. package/dist/tasks/task-ops.js.map +1 -0
  843. package/dist/tasks/update.js +303 -0
  844. package/dist/tasks/update.js.map +1 -0
  845. package/dist/telemetry/index.js +249 -0
  846. package/dist/telemetry/index.js.map +1 -0
  847. package/dist/telemetry/schema.js +60 -0
  848. package/dist/telemetry/schema.js.map +1 -0
  849. package/dist/telemetry/sqlite.js +111 -0
  850. package/dist/telemetry/sqlite.js.map +1 -0
  851. package/dist/templates/index.js +10 -0
  852. package/dist/templates/index.js.map +1 -0
  853. package/dist/templates/parser.js +254 -0
  854. package/dist/templates/parser.js.map +1 -0
  855. package/dist/ui/aliases.js +153 -0
  856. package/dist/ui/aliases.js.map +1 -0
  857. package/dist/ui/changelog.js +184 -0
  858. package/dist/ui/changelog.js.map +1 -0
  859. package/dist/ui/command-registry.js +168 -0
  860. package/dist/ui/command-registry.js.map +1 -0
  861. package/dist/ui/flags.js +94 -0
  862. package/dist/ui/flags.js.map +1 -0
  863. package/dist/ui/index.js +24 -0
  864. package/dist/ui/index.js.map +1 -0
  865. package/dist/upgrade.js +1387 -0
  866. package/dist/upgrade.js.map +1 -0
  867. package/dist/validation/chain-validation.js +146 -0
  868. package/dist/validation/chain-validation.js.map +1 -0
  869. package/dist/validation/compliance.js +155 -0
  870. package/dist/validation/compliance.js.map +1 -0
  871. package/dist/validation/docs-sync.js +212 -0
  872. package/dist/validation/docs-sync.js.map +1 -0
  873. package/dist/validation/doctor/checks.js +1069 -0
  874. package/dist/validation/doctor/checks.js.map +1 -0
  875. package/dist/validation/doctor/index.js +9 -0
  876. package/dist/validation/doctor/index.js.map +1 -0
  877. package/dist/validation/doctor/project-cache.js +160 -0
  878. package/dist/validation/doctor/project-cache.js.map +1 -0
  879. package/dist/validation/doctor/utils.js +155 -0
  880. package/dist/validation/doctor/utils.js.map +1 -0
  881. package/dist/validation/engine.js +914 -0
  882. package/dist/validation/engine.js.map +1 -0
  883. package/dist/validation/gap-check.js +175 -0
  884. package/dist/validation/gap-check.js.map +1 -0
  885. package/dist/validation/index.js +40 -0
  886. package/dist/validation/index.js.map +1 -0
  887. package/dist/validation/manifest.js +237 -0
  888. package/dist/validation/manifest.js.map +1 -0
  889. package/dist/validation/operation-gate-validators.js +724 -0
  890. package/dist/validation/operation-gate-validators.js.map +1 -0
  891. package/dist/validation/operation-verification-gates.js +532 -0
  892. package/dist/validation/operation-verification-gates.js.map +1 -0
  893. package/dist/validation/param-utils.js +141 -0
  894. package/dist/validation/param-utils.js.map +1 -0
  895. package/dist/validation/protocol-common.js +300 -0
  896. package/dist/validation/protocol-common.js.map +1 -0
  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 +8 -8
@@ -0,0 +1,841 @@
1
+ /**
2
+ * BRAIN lifecycle operations — temporal decay, memory consolidation, and tier promotion.
3
+ *
4
+ * Reduces confidence of stale learnings based on age, following an
5
+ * exponential decay model: new_confidence = confidence * (decayRate ^ daysSinceUpdate).
6
+ *
7
+ * Consolidation groups old observations by keyword overlap and merges
8
+ * clusters into summary observations, archiving the originals.
9
+ *
10
+ * Wave 3 additions (T549):
11
+ * - runTierPromotion — promotes entries through short→medium→long based on citation count,
12
+ * age, and verification; soft-evicts stale short-term entries.
13
+ * - runConsolidation — orchestrates all consolidation steps (dedup, quality recompute,
14
+ * tier promotion, contradiction detection, soft eviction, graph strengthening, summaries).
15
+ *
16
+ * @task T5394 T5395 T549
17
+ * @epic T5149
18
+ */
19
+ import { createHash } from 'node:crypto';
20
+ import { getBrainAccessor } from '../store/brain-accessor.js';
21
+ import { typedAll } from '../store/typed-query.js';
22
+ import { EDGE_TYPES } from './edge-types.js';
23
+ /**
24
+ * Apply temporal decay to brain_learnings confidence values.
25
+ *
26
+ * Entries older than `olderThanDays` have their confidence reduced
27
+ * by an exponential decay factor based on the number of days since
28
+ * their last update (or creation if never updated).
29
+ *
30
+ * Formula: new_confidence = confidence * (decayRate ^ daysSinceUpdate)
31
+ *
32
+ * @param projectRoot - Project root directory for brain.db resolution
33
+ * @param options - Decay configuration
34
+ * @returns Count of updated rows and tables processed
35
+ */
36
+ export async function applyTemporalDecay(projectRoot, options) {
37
+ const decayRate = options?.decayRate ?? 0.995;
38
+ const olderThanDays = options?.olderThanDays ?? 30;
39
+ // Ensure brain.db is initialized
40
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
41
+ await getBrainDb(projectRoot);
42
+ const nativeDb = getBrainNativeDb();
43
+ if (!nativeDb) {
44
+ return { updated: 0, tablesProcessed: [] };
45
+ }
46
+ // Calculate the cutoff date
47
+ const cutoffDate = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000)
48
+ .toISOString()
49
+ .replace('T', ' ')
50
+ .slice(0, 19);
51
+ // Update learnings: reduce confidence based on age since last update (or creation).
52
+ // SQLite's julianday function computes the difference in days.
53
+ // We use COALESCE to prefer updated_at over created_at for the age calculation.
54
+ const stmt = nativeDb.prepare(`
55
+ UPDATE brain_learnings
56
+ SET confidence = confidence * POWER(?, julianday('now') - julianday(COALESCE(updated_at, created_at))),
57
+ updated_at = datetime('now')
58
+ WHERE COALESCE(updated_at, created_at) < ?
59
+ AND confidence > 0.01
60
+ `);
61
+ const result = stmt.run(decayRate, cutoffDate);
62
+ const updated = typeof result.changes === 'number' ? result.changes : 0;
63
+ return {
64
+ updated,
65
+ tablesProcessed: ['brain_learnings'],
66
+ };
67
+ }
68
+ /** Stop words excluded from keyword extraction. */
69
+ const STOP_WORDS = new Set([
70
+ 'the',
71
+ 'a',
72
+ 'an',
73
+ 'is',
74
+ 'are',
75
+ 'was',
76
+ 'were',
77
+ 'be',
78
+ 'been',
79
+ 'being',
80
+ 'have',
81
+ 'has',
82
+ 'had',
83
+ 'do',
84
+ 'does',
85
+ 'did',
86
+ 'will',
87
+ 'would',
88
+ 'could',
89
+ 'should',
90
+ 'may',
91
+ 'might',
92
+ 'shall',
93
+ 'can',
94
+ 'need',
95
+ 'dare',
96
+ 'ought',
97
+ 'used',
98
+ 'to',
99
+ 'of',
100
+ 'in',
101
+ 'for',
102
+ 'on',
103
+ 'with',
104
+ 'at',
105
+ 'by',
106
+ 'from',
107
+ 'as',
108
+ 'into',
109
+ 'through',
110
+ 'during',
111
+ 'before',
112
+ 'after',
113
+ 'above',
114
+ 'below',
115
+ 'between',
116
+ 'out',
117
+ 'off',
118
+ 'over',
119
+ 'under',
120
+ 'again',
121
+ 'further',
122
+ 'then',
123
+ 'once',
124
+ 'and',
125
+ 'but',
126
+ 'or',
127
+ 'nor',
128
+ 'not',
129
+ 'so',
130
+ 'yet',
131
+ 'both',
132
+ 'either',
133
+ 'neither',
134
+ 'each',
135
+ 'every',
136
+ 'all',
137
+ 'any',
138
+ 'few',
139
+ 'more',
140
+ 'most',
141
+ 'other',
142
+ 'some',
143
+ 'such',
144
+ 'no',
145
+ 'only',
146
+ 'own',
147
+ 'same',
148
+ 'than',
149
+ 'too',
150
+ 'very',
151
+ 'just',
152
+ 'because',
153
+ 'until',
154
+ 'while',
155
+ 'about',
156
+ 'against',
157
+ 'this',
158
+ 'that',
159
+ 'these',
160
+ 'those',
161
+ 'it',
162
+ 'its',
163
+ ]);
164
+ /**
165
+ * Extract significant keywords from text for grouping.
166
+ * Filters stop words and short tokens, returns lowercase words.
167
+ */
168
+ function extractKeywords(text) {
169
+ const words = text
170
+ .toLowerCase()
171
+ .replace(/[^a-z0-9\s-]/g, '')
172
+ .split(/\s+/);
173
+ const keywords = new Set();
174
+ for (const w of words) {
175
+ if (w.length >= 4 && !STOP_WORDS.has(w)) {
176
+ keywords.add(w);
177
+ }
178
+ }
179
+ return keywords;
180
+ }
181
+ /**
182
+ * Calculate keyword overlap ratio between two sets.
183
+ * Returns the Jaccard similarity coefficient.
184
+ */
185
+ function keywordOverlap(a, b) {
186
+ if (a.size === 0 || b.size === 0)
187
+ return 0;
188
+ let intersection = 0;
189
+ for (const w of a) {
190
+ if (b.has(w))
191
+ intersection++;
192
+ }
193
+ const union = a.size + b.size - intersection;
194
+ return union > 0 ? intersection / union : 0;
195
+ }
196
+ /**
197
+ * Consolidate old observations by keyword similarity.
198
+ *
199
+ * Groups observations older than `olderThanDays` by FTS5 keyword overlap.
200
+ * For groups with at least `minClusterSize` entries, creates one summary
201
+ * observation and marks originals as archived (updated_at set, narrative
202
+ * prefixed with [ARCHIVED]).
203
+ *
204
+ * @param projectRoot - Project root directory for brain.db resolution
205
+ * @param options - Consolidation configuration
206
+ * @returns Counts of grouped, merged, and archived observations
207
+ */
208
+ export async function consolidateMemories(projectRoot, options) {
209
+ const olderThanDays = options?.olderThanDays ?? 90;
210
+ const minClusterSize = options?.minClusterSize ?? 3;
211
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
212
+ await getBrainDb(projectRoot);
213
+ const nativeDb = getBrainNativeDb();
214
+ if (!nativeDb) {
215
+ return { grouped: 0, merged: 0, archived: 0 };
216
+ }
217
+ const cutoffDate = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000)
218
+ .toISOString()
219
+ .replace('T', ' ')
220
+ .slice(0, 19);
221
+ // Fetch old observations that are not already archived
222
+ const stmt = nativeDb.prepare(`
223
+ SELECT id, type, title, narrative, project, created_at
224
+ FROM brain_observations
225
+ WHERE created_at < ?
226
+ AND narrative NOT LIKE '[ARCHIVED]%'
227
+ ORDER BY created_at DESC
228
+ `);
229
+ const oldObservations = typedAll(stmt, cutoffDate);
230
+ if (oldObservations.length < minClusterSize) {
231
+ return { grouped: 0, merged: 0, archived: 0 };
232
+ }
233
+ // Extract keywords for each observation
234
+ const entries = oldObservations.map((obs) => ({
235
+ ...obs,
236
+ keywords: extractKeywords(`${obs.title} ${obs.narrative ?? ''}`),
237
+ clustered: false,
238
+ }));
239
+ // Greedy clustering: group by keyword overlap >= 0.3
240
+ const clusters = [];
241
+ const overlapThreshold = 0.3;
242
+ for (let i = 0; i < entries.length; i++) {
243
+ if (entries[i].clustered)
244
+ continue;
245
+ const cluster = [entries[i]];
246
+ entries[i].clustered = true;
247
+ for (let j = i + 1; j < entries.length; j++) {
248
+ if (entries[j].clustered)
249
+ continue;
250
+ if (entries[i].type !== entries[j].type)
251
+ continue;
252
+ const overlap = keywordOverlap(entries[i].keywords, entries[j].keywords);
253
+ if (overlap >= overlapThreshold) {
254
+ cluster.push(entries[j]);
255
+ entries[j].clustered = true;
256
+ }
257
+ }
258
+ if (cluster.length >= minClusterSize) {
259
+ clusters.push(cluster);
260
+ }
261
+ }
262
+ let grouped = 0;
263
+ let merged = 0;
264
+ let archived = 0;
265
+ const accessor = await getBrainAccessor(projectRoot);
266
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
267
+ for (const cluster of clusters) {
268
+ grouped += cluster.length;
269
+ // Create summary observation from cluster
270
+ const titles = cluster.map((c) => c.title).join('; ');
271
+ const summaryTitle = `Consolidated: ${cluster[0].type} observations (${cluster.length} entries)`;
272
+ const summaryNarrative = `Merged from ${cluster.length} observations: ${titles.slice(0, 500)}`;
273
+ const contentHash = createHash('sha256')
274
+ .update(summaryTitle + summaryNarrative)
275
+ .digest('hex')
276
+ .slice(0, 16);
277
+ const id = `O-${Date.now().toString(36)}`;
278
+ await accessor.addObservation({
279
+ id,
280
+ type: cluster[0]
281
+ .type,
282
+ title: summaryTitle,
283
+ narrative: summaryNarrative,
284
+ contentHash,
285
+ project: cluster[0].project ?? null,
286
+ sourceType: 'agent',
287
+ createdAt: now,
288
+ });
289
+ merged++;
290
+ // Archive originals by prefixing narrative
291
+ for (const obs of cluster) {
292
+ nativeDb
293
+ .prepare(`
294
+ UPDATE brain_observations
295
+ SET narrative = '[ARCHIVED] ' || COALESCE(narrative, ''),
296
+ updated_at = ?
297
+ WHERE id = ?
298
+ `)
299
+ .run(now, obs.id);
300
+ archived++;
301
+ }
302
+ }
303
+ return { grouped, merged, archived };
304
+ }
305
+ /**
306
+ * Run tier promotion for all memory tables.
307
+ *
308
+ * Promotion rules (per spec §1.1–§1.3, relaxed in T614):
309
+ * - short → medium:
310
+ * A. (citationCount >= 3 AND age > 24h) — citation-based track
311
+ * B. (qualityScore >= 0.7 AND age > 24h) — quality fast-track
312
+ * C. (verified = true AND age > 24h) — owner-verified track
313
+ * Note: `verified` is no longer a hard gate for routes A and B.
314
+ * Requiring verified=true on all paths caused all 235 short-tier observations
315
+ * to be permanently stuck (T614 bug).
316
+ * - medium → long:
317
+ * (citationCount >= 5 AND age > 7 days) OR (verified = true AND age > 7 days)
318
+ * Verified entries accelerate to long-tier without citation threshold.
319
+ *
320
+ * Eviction rules:
321
+ * - short-term entries older than 7 days with no promotion eligibility are
322
+ * soft-evicted (invalidAt = now).
323
+ * - long-term entries are NEVER auto-evicted.
324
+ *
325
+ * @param projectRoot - Project root directory for brain.db resolution
326
+ * @returns Lists of promoted and evicted entries
327
+ */
328
+ export async function runTierPromotion(projectRoot) {
329
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
330
+ await getBrainDb(projectRoot);
331
+ const nativeDb = getBrainNativeDb();
332
+ if (!nativeDb) {
333
+ return { promoted: [], evicted: [] };
334
+ }
335
+ const promoted = [];
336
+ const evicted = [];
337
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
338
+ // Threshold timestamps
339
+ const age24h = new Date(Date.now() - 24 * 60 * 60 * 1000)
340
+ .toISOString()
341
+ .replace('T', ' ')
342
+ .slice(0, 19);
343
+ const age7d = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
344
+ .toISOString()
345
+ .replace('T', ' ')
346
+ .slice(0, 19);
347
+ const evictionCutoff = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
348
+ .toISOString()
349
+ .replace('T', ' ')
350
+ .slice(0, 19);
351
+ // Tables + their date column name (mixed conventions in schema)
352
+ const tables = [
353
+ { table: 'brain_observations', dateCol: 'created_at' },
354
+ { table: 'brain_learnings', dateCol: 'created_at' },
355
+ { table: 'brain_patterns', dateCol: 'extracted_at' },
356
+ { table: 'brain_decisions', dateCol: 'created_at' },
357
+ ];
358
+ for (const { table, dateCol } of tables) {
359
+ let shortToMedium = [];
360
+ try {
361
+ shortToMedium = typedAll(nativeDb.prepare(`
362
+ SELECT id, citation_count, quality_score, verified
363
+ FROM ${table}
364
+ WHERE memory_tier = 'short'
365
+ AND invalid_at IS NULL
366
+ AND ${dateCol} < ?
367
+ AND (
368
+ citation_count >= 3
369
+ OR quality_score >= 0.7
370
+ OR verified = 1
371
+ )
372
+ `), age24h);
373
+ }
374
+ catch {
375
+ // Table may lack columns on older DB — best-effort
376
+ continue;
377
+ }
378
+ for (const row of shortToMedium) {
379
+ try {
380
+ nativeDb
381
+ .prepare(`UPDATE ${table} SET memory_tier = 'medium', updated_at = ? WHERE id = ?`)
382
+ .run(now, row.id);
383
+ let reason;
384
+ if (row.citation_count >= 3) {
385
+ reason = `citationCount=${row.citation_count} >= 3, age > 24h`;
386
+ }
387
+ else if ((row.quality_score ?? 0) >= 0.7) {
388
+ reason = `qualityScore=${row.quality_score?.toFixed(2)} >= 0.70, age > 24h`;
389
+ }
390
+ else {
391
+ reason = `verified=true, age > 24h`;
392
+ }
393
+ promoted.push({ id: row.id, table, fromTier: 'short', toTier: 'medium', reason });
394
+ }
395
+ catch {
396
+ /* best-effort */
397
+ }
398
+ }
399
+ // --- medium → long promotion ---
400
+ // Two criteria (union — verified accelerates to long without citation threshold):
401
+ // A. citationCount >= 5 AND age > 7d
402
+ // B. verified = 1 AND age > 7d (owner-verified accelerated track)
403
+ let mediumToLong = [];
404
+ try {
405
+ mediumToLong = typedAll(nativeDb.prepare(`
406
+ SELECT id, citation_count, quality_score, verified
407
+ FROM ${table}
408
+ WHERE memory_tier = 'medium'
409
+ AND invalid_at IS NULL
410
+ AND ${dateCol} < ?
411
+ AND (citation_count >= 5 OR verified = 1)
412
+ `), age7d);
413
+ }
414
+ catch {
415
+ continue;
416
+ }
417
+ for (const row of mediumToLong) {
418
+ try {
419
+ nativeDb
420
+ .prepare(`UPDATE ${table} SET memory_tier = 'long', updated_at = ? WHERE id = ?`)
421
+ .run(now, row.id);
422
+ const reason = row.citation_count >= 5
423
+ ? `citationCount=${row.citation_count} >= 5, age > 7d`
424
+ : `verified=true, age > 7d`;
425
+ promoted.push({ id: row.id, table, fromTier: 'medium', toTier: 'long', reason });
426
+ }
427
+ catch {
428
+ /* best-effort */
429
+ }
430
+ }
431
+ let toEvict = [];
432
+ try {
433
+ toEvict = typedAll(nativeDb.prepare(`
434
+ SELECT id, quality_score
435
+ FROM ${table}
436
+ WHERE memory_tier = 'short'
437
+ AND invalid_at IS NULL
438
+ AND ${dateCol} < ?
439
+ AND (verified = 0 OR verified IS NULL)
440
+ AND (quality_score IS NULL OR quality_score < 0.5)
441
+ `), evictionCutoff);
442
+ }
443
+ catch {
444
+ continue;
445
+ }
446
+ for (const row of toEvict) {
447
+ try {
448
+ nativeDb
449
+ .prepare(`UPDATE ${table} SET invalid_at = ?, updated_at = ? WHERE id = ?`)
450
+ .run(now, now, row.id);
451
+ evicted.push({
452
+ id: row.id,
453
+ table,
454
+ tier: 'short',
455
+ reason: `age > 7d, unverified, qualityScore=${row.quality_score?.toFixed(2) ?? 'null'} < 0.5`,
456
+ });
457
+ }
458
+ catch {
459
+ /* best-effort */
460
+ }
461
+ }
462
+ }
463
+ return { promoted, evicted };
464
+ }
465
+ /**
466
+ * Run the full sleep-time consolidation pipeline.
467
+ *
468
+ * This is the "Letta OS sleep-time compute" pattern — consolidation runs
469
+ * during idle time (after session end), never during active work.
470
+ *
471
+ * Steps (in order):
472
+ * 1. Deduplication — merge entries with >0.85 content similarity
473
+ * 2. Quality recompute — recalculate scores with current age/citations
474
+ * 3. Tier promotion — runTierPromotion()
475
+ * 4. Contradiction detection — from brain-consolidator
476
+ * 5. Soft eviction — invalidate low-quality medium-term entries
477
+ * 6. Graph edge strengthening — increment weight on frequently-traversed edges
478
+ * 7. Summary generation — existing consolidateMemories() for large clusters
479
+ *
480
+ * All steps are BEST-EFFORT — any step failure is caught and logged to console.warn.
481
+ *
482
+ * @param projectRoot - Project root directory for brain.db resolution
483
+ * @returns Aggregated counts from each consolidation step
484
+ */
485
+ export async function runConsolidation(projectRoot) {
486
+ const result = {
487
+ deduplicated: 0,
488
+ qualityRecomputed: 0,
489
+ tierPromotions: { promoted: [], evicted: [] },
490
+ contradictions: 0,
491
+ softEvicted: 0,
492
+ edgesStrengthened: 0,
493
+ summariesGenerated: 0,
494
+ };
495
+ // Step 1: Deduplication (embedding-based when available)
496
+ try {
497
+ const deduped = await deduplicateByEmbedding(projectRoot);
498
+ result.deduplicated = deduped;
499
+ }
500
+ catch (err) {
501
+ console.warn('[consolidation] Step 1 deduplication failed:', err);
502
+ }
503
+ // Step 2: Quality recompute (age + citation factor)
504
+ try {
505
+ const recomputed = await recomputeQualityScores(projectRoot);
506
+ result.qualityRecomputed = recomputed;
507
+ }
508
+ catch (err) {
509
+ console.warn('[consolidation] Step 2 quality recompute failed:', err);
510
+ }
511
+ // Step 3: Tier promotion
512
+ try {
513
+ result.tierPromotions = await runTierPromotion(projectRoot);
514
+ }
515
+ catch (err) {
516
+ console.warn('[consolidation] Step 3 tier promotion failed:', err);
517
+ }
518
+ // Step 4: Contradiction detection
519
+ try {
520
+ const { detectContradictions } = await import('./brain-consolidator.js');
521
+ const contradictions = await detectContradictions(projectRoot);
522
+ result.contradictions = contradictions.length;
523
+ }
524
+ catch (err) {
525
+ console.warn('[consolidation] Step 4 contradiction detection failed:', err);
526
+ }
527
+ // Step 5: Soft eviction of low-quality medium-term entries
528
+ try {
529
+ const evicted = await softEvictLowQualityMedium(projectRoot);
530
+ result.softEvicted = evicted;
531
+ }
532
+ catch (err) {
533
+ console.warn('[consolidation] Step 5 soft eviction failed:', err);
534
+ }
535
+ // Step 6: Graph edge strengthening
536
+ try {
537
+ const strengthened = await strengthenCoRetrievedEdges(projectRoot);
538
+ result.edgesStrengthened = strengthened;
539
+ }
540
+ catch (err) {
541
+ console.warn('[consolidation] Step 6 edge strengthening failed:', err);
542
+ }
543
+ // Step 7: Summary generation from large observation clusters
544
+ try {
545
+ const summaryResult = await consolidateMemories(projectRoot, {
546
+ olderThanDays: 30,
547
+ minClusterSize: 5,
548
+ });
549
+ result.summariesGenerated = summaryResult.merged;
550
+ }
551
+ catch (err) {
552
+ console.warn('[consolidation] Step 7 summary generation failed:', err);
553
+ }
554
+ // Step 8: Link memory nodes to code graph (graph-memory-bridge, T555)
555
+ // Scans brain entries for entity references and creates code_reference
556
+ // edges connecting memory to nexus-indexed symbols.
557
+ try {
558
+ const { autoLinkMemories } = await import('./graph-memory-bridge.js');
559
+ const bridgeResult = await autoLinkMemories(projectRoot);
560
+ result.graphLinksCreated = bridgeResult.linked;
561
+ }
562
+ catch (err) {
563
+ console.warn('[consolidation] Step 8 graph memory bridge failed:', err);
564
+ }
565
+ // Step 9: STDP timing-dependent plasticity (T626 phase 5)
566
+ // Refines co_retrieved edge weights using retrieval temporal order.
567
+ // Runs after Hebbian strengthening (step 6) so it builds on existing edges.
568
+ try {
569
+ const { applyStdpPlasticity } = await import('./brain-stdp.js');
570
+ const stdpResult = await applyStdpPlasticity(projectRoot);
571
+ result.stdpPlasticity = stdpResult;
572
+ }
573
+ catch (err) {
574
+ console.warn('[consolidation] Step 9 STDP plasticity failed:', err);
575
+ }
576
+ return result;
577
+ }
578
+ // ============================================================================
579
+ // Deduplication (Step 1)
580
+ // ============================================================================
581
+ /**
582
+ * Merge entries with high embedding similarity (> 0.85 cosine similarity).
583
+ *
584
+ * For each pair above the threshold: keep the higher-quality entry, transfer
585
+ * citationCount, and soft-evict the clone (set invalidAt). When embeddings
586
+ * are unavailable, falls back to exact content-hash deduplication.
587
+ *
588
+ * @param projectRoot - Project root for brain.db resolution
589
+ * @returns Count of merged/evicted duplicate entries
590
+ */
591
+ async function deduplicateByEmbedding(projectRoot) {
592
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
593
+ await getBrainDb(projectRoot);
594
+ const nativeDb = getBrainNativeDb();
595
+ if (!nativeDb)
596
+ return 0;
597
+ let merged = 0;
598
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
599
+ const dupHashes = typedAll(nativeDb.prepare(`
600
+ SELECT content_hash, COUNT(*) as cnt
601
+ FROM brain_observations
602
+ WHERE content_hash IS NOT NULL
603
+ AND invalid_at IS NULL
604
+ GROUP BY content_hash
605
+ HAVING cnt > 1
606
+ `));
607
+ for (const dup of dupHashes) {
608
+ const dupes = typedAll(nativeDb.prepare(`
609
+ SELECT id, quality_score, citation_count
610
+ FROM brain_observations
611
+ WHERE content_hash = ?
612
+ AND invalid_at IS NULL
613
+ ORDER BY quality_score DESC, citation_count DESC
614
+ `), dup.content_hash);
615
+ if (dupes.length < 2)
616
+ continue;
617
+ // Keep the best entry, evict the rest and transfer their citations
618
+ const [keeper, ...clones] = dupes;
619
+ if (!keeper)
620
+ continue;
621
+ let totalCitations = keeper.citation_count;
622
+ for (const clone of clones) {
623
+ totalCitations += clone.citation_count;
624
+ nativeDb
625
+ .prepare(`UPDATE brain_observations SET invalid_at = ?, updated_at = ? WHERE id = ?`)
626
+ .run(now, now, clone.id);
627
+ merged++;
628
+ }
629
+ if (totalCitations !== keeper.citation_count) {
630
+ nativeDb
631
+ .prepare(`UPDATE brain_observations SET citation_count = ?, updated_at = ? WHERE id = ?`)
632
+ .run(totalCitations, now, keeper.id);
633
+ }
634
+ }
635
+ return merged;
636
+ }
637
+ // ============================================================================
638
+ // Quality Recompute (Step 2)
639
+ // ============================================================================
640
+ /**
641
+ * Recompute quality scores factoring in current citation count and age.
642
+ *
643
+ * Applies a citation boost: +0.01 per citation, capped at +0.15.
644
+ * Applies age decay only on episodic entries (observations, episodic learnings).
645
+ *
646
+ * @param projectRoot - Project root for brain.db resolution
647
+ * @returns Count of entries updated
648
+ */
649
+ async function recomputeQualityScores(projectRoot) {
650
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
651
+ await getBrainDb(projectRoot);
652
+ const nativeDb = getBrainNativeDb();
653
+ if (!nativeDb)
654
+ return 0;
655
+ let updated = 0;
656
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
657
+ // Update observation quality: base + citation boost, min 0.0, max 1.0
658
+ // Only update entries with citation_count > 0 (others unchanged)
659
+ try {
660
+ const stmt = nativeDb.prepare(`
661
+ UPDATE brain_observations
662
+ SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),
663
+ updated_at = ?
664
+ WHERE citation_count > 0
665
+ AND invalid_at IS NULL
666
+ `);
667
+ const r = stmt.run(now);
668
+ updated += typeof r.changes === 'number' ? r.changes : 0;
669
+ }
670
+ catch {
671
+ /* table may not have all columns — best-effort */
672
+ }
673
+ // Same for learnings
674
+ try {
675
+ const stmt = nativeDb.prepare(`
676
+ UPDATE brain_learnings
677
+ SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),
678
+ updated_at = ?
679
+ WHERE citation_count > 0
680
+ AND invalid_at IS NULL
681
+ `);
682
+ const r = stmt.run(now);
683
+ updated += typeof r.changes === 'number' ? r.changes : 0;
684
+ }
685
+ catch {
686
+ /* best-effort */
687
+ }
688
+ return updated;
689
+ }
690
+ // ============================================================================
691
+ // Soft Eviction of Low-Quality Medium-Term Entries (Step 5)
692
+ // ============================================================================
693
+ /**
694
+ * Soft-evict medium-term entries that have decayed below quality threshold.
695
+ *
696
+ * Entries are invalidated (invalidAt = now) when:
697
+ * - memoryTier = 'medium'
698
+ * - qualityScore < 0.30 AND age > 30 days
699
+ * - NOT long-term (protected from auto-eviction)
700
+ *
701
+ * @param projectRoot - Project root for brain.db resolution
702
+ * @returns Count of entries soft-evicted
703
+ */
704
+ async function softEvictLowQualityMedium(projectRoot) {
705
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
706
+ await getBrainDb(projectRoot);
707
+ const nativeDb = getBrainNativeDb();
708
+ if (!nativeDb)
709
+ return 0;
710
+ let evicted = 0;
711
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
712
+ const age30d = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
713
+ .toISOString()
714
+ .replace('T', ' ')
715
+ .slice(0, 19);
716
+ const tables = [
717
+ { table: 'brain_observations', dateCol: 'created_at' },
718
+ { table: 'brain_learnings', dateCol: 'created_at' },
719
+ { table: 'brain_patterns', dateCol: 'extracted_at' },
720
+ { table: 'brain_decisions', dateCol: 'created_at' },
721
+ ];
722
+ for (const { table, dateCol } of tables) {
723
+ try {
724
+ const stmt = nativeDb.prepare(`
725
+ UPDATE ${table}
726
+ SET invalid_at = ?, updated_at = ?
727
+ WHERE memory_tier = 'medium'
728
+ AND invalid_at IS NULL
729
+ AND quality_score IS NOT NULL
730
+ AND quality_score < 0.30
731
+ AND ${dateCol} < ?
732
+ `);
733
+ const r = stmt.run(now, now, age30d);
734
+ evicted += typeof r.changes === 'number' ? r.changes : 0;
735
+ }
736
+ catch {
737
+ /* column may not exist on older rows — best-effort */
738
+ }
739
+ }
740
+ return evicted;
741
+ }
742
+ // ============================================================================
743
+ // Graph Edge Strengthening (Step 6)
744
+ // ============================================================================
745
+ /**
746
+ * Strengthen edges between frequently co-retrieved brain graph nodes.
747
+ *
748
+ * Queries the brain_retrieval_log table (if it exists) to find pairs of
749
+ * entries that were returned together frequently (>= 3 times in the last
750
+ * 30 days). For each qualifying pair, increments the edge weight by 0.1
751
+ * (capped at 1.0) in brain_page_edges.
752
+ *
753
+ * Gracefully no-ops when brain_retrieval_log does not yet exist.
754
+ *
755
+ * @param projectRoot - Project root for brain.db resolution
756
+ * @returns Count of edges strengthened
757
+ */
758
+ async function strengthenCoRetrievedEdges(projectRoot) {
759
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
760
+ await getBrainDb(projectRoot);
761
+ const nativeDb = getBrainNativeDb();
762
+ if (!nativeDb)
763
+ return 0;
764
+ // Check if retrieval log table exists
765
+ try {
766
+ nativeDb.prepare('SELECT 1 FROM brain_retrieval_log LIMIT 1').get();
767
+ }
768
+ catch {
769
+ // Table doesn't exist yet — nothing to do
770
+ return 0;
771
+ }
772
+ const age30d = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
773
+ .toISOString()
774
+ .replace('T', ' ')
775
+ .slice(0, 19);
776
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
777
+ let logRows = [];
778
+ try {
779
+ logRows = typedAll(nativeDb.prepare(`SELECT entry_ids FROM brain_retrieval_log WHERE created_at >= ? LIMIT 1000`), age30d);
780
+ }
781
+ catch {
782
+ return 0;
783
+ }
784
+ // Build co-occurrence counts from JSON entry_ids arrays
785
+ const coOccurrence = new Map();
786
+ for (const row of logRows) {
787
+ let ids;
788
+ try {
789
+ ids = JSON.parse(row.entry_ids);
790
+ }
791
+ catch {
792
+ continue;
793
+ }
794
+ // Generate all pairs from the returned ID list
795
+ for (let i = 0; i < ids.length; i++) {
796
+ for (let j = i + 1; j < ids.length; j++) {
797
+ const a = ids[i];
798
+ const b = ids[j];
799
+ // Normalize pair key to canonical order
800
+ const key = a < b ? `${a}|${b}` : `${b}|${a}`;
801
+ coOccurrence.set(key, (coOccurrence.get(key) ?? 0) + 1);
802
+ }
803
+ }
804
+ }
805
+ let strengthened = 0;
806
+ for (const [pair, count] of coOccurrence) {
807
+ if (count < 3)
808
+ continue;
809
+ const [fromId, toId] = pair.split('|');
810
+ if (!fromId || !toId)
811
+ continue;
812
+ const nodeFrom = `observation:${fromId}`;
813
+ const nodeTo = `observation:${toId}`;
814
+ try {
815
+ // Try to update existing edge
816
+ const updateStmt = nativeDb.prepare(`
817
+ UPDATE brain_page_edges
818
+ SET weight = MIN(1.0, weight + 0.1)
819
+ WHERE from_id = ? AND to_id = ? AND edge_type = ?
820
+ `);
821
+ const updateResult = updateStmt.run(nodeFrom, nodeTo, EDGE_TYPES.CO_RETRIEVED);
822
+ const changes = typeof updateResult.changes === 'number' ? updateResult.changes : 0;
823
+ if (changes === 0) {
824
+ // Edge doesn't exist; insert it
825
+ nativeDb
826
+ .prepare(`
827
+ INSERT OR IGNORE INTO brain_page_edges
828
+ (from_id, to_id, edge_type, weight, provenance, created_at)
829
+ VALUES (?, ?, ?, 0.3, 'consolidation:co-retrieval', ?)
830
+ `)
831
+ .run(nodeFrom, nodeTo, EDGE_TYPES.CO_RETRIEVED, now);
832
+ }
833
+ strengthened++;
834
+ }
835
+ catch {
836
+ /* best-effort */
837
+ }
838
+ }
839
+ return strengthened;
840
+ }
841
+ //# sourceMappingURL=brain-lifecycle.js.map