@cleocode/core 2026.4.31 → 2026.4.35

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 (985) 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 +52 -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/index.js +15 -0
  120. package/dist/conduit/index.js.map +1 -0
  121. package/dist/conduit/local-transport.js +255 -0
  122. package/dist/conduit/local-transport.js.map +1 -0
  123. package/dist/conduit/sse-transport.js +299 -0
  124. package/dist/conduit/sse-transport.js.map +1 -0
  125. package/dist/config/build-config.js +29 -0
  126. package/dist/config/build-config.js.map +1 -0
  127. package/dist/config.js +400 -0
  128. package/dist/config.js.map +1 -0
  129. package/dist/constants.js +18 -0
  130. package/dist/constants.js.map +1 -0
  131. package/dist/context/index.js +137 -0
  132. package/dist/context/index.js.map +1 -0
  133. package/dist/crypto/credentials.js +219 -0
  134. package/dist/crypto/credentials.js.map +1 -0
  135. package/dist/discovery.js +182 -0
  136. package/dist/discovery.js.map +1 -0
  137. package/dist/engine-result.js +12 -0
  138. package/dist/engine-result.js.map +1 -0
  139. package/dist/error-catalog.js +404 -0
  140. package/dist/error-catalog.js.map +1 -0
  141. package/dist/error-registry.js +393 -0
  142. package/dist/error-registry.js.map +1 -0
  143. package/dist/errors.js +173 -0
  144. package/dist/errors.js.map +1 -0
  145. package/dist/hooks/handlers/agent-hooks.js +106 -0
  146. package/dist/hooks/handlers/agent-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.d.ts +4 -0
  156. package/dist/hooks/handlers/index.d.ts.map +1 -1
  157. package/dist/hooks/handlers/index.js +34 -0
  158. package/dist/hooks/handlers/index.js.map +1 -0
  159. package/dist/hooks/handlers/intelligence-hooks.d.ts +26 -0
  160. package/dist/hooks/handlers/intelligence-hooks.d.ts.map +1 -0
  161. package/dist/hooks/handlers/intelligence-hooks.js +69 -0
  162. package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
  163. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  164. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  165. package/dist/hooks/handlers/notification-hooks.js +62 -0
  166. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  167. package/dist/hooks/handlers/session-hooks.d.ts +16 -0
  168. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  169. package/dist/hooks/handlers/session-hooks.js +157 -0
  170. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  171. package/dist/hooks/handlers/task-hooks.js +65 -0
  172. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  173. package/dist/hooks/handlers/watchdog-hooks.d.ts +49 -0
  174. package/dist/hooks/handlers/watchdog-hooks.d.ts.map +1 -0
  175. package/dist/hooks/handlers/watchdog-hooks.js +162 -0
  176. package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
  177. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  178. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  179. package/dist/hooks/index.js +13 -0
  180. package/dist/hooks/index.js.map +1 -0
  181. package/dist/hooks/payload-schemas.js +220 -0
  182. package/dist/hooks/payload-schemas.js.map +1 -0
  183. package/dist/hooks/provider-hooks.js +66 -0
  184. package/dist/hooks/provider-hooks.js.map +1 -0
  185. package/dist/hooks/registry.js +229 -0
  186. package/dist/hooks/registry.js.map +1 -0
  187. package/dist/hooks/types.js +66 -0
  188. package/dist/hooks/types.js.map +1 -0
  189. package/dist/hooks.js +136 -0
  190. package/dist/hooks.js.map +1 -0
  191. package/dist/index.js +3828 -2167
  192. package/dist/index.js.map +4 -4
  193. package/dist/init.js +920 -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.d.ts +13 -1
  198. package/dist/injection.d.ts.map +1 -1
  199. package/dist/injection.js +377 -0
  200. package/dist/injection.js.map +1 -0
  201. package/dist/intelligence/adaptive-validation.js +497 -0
  202. package/dist/intelligence/adaptive-validation.js.map +1 -0
  203. package/dist/intelligence/impact.js +675 -0
  204. package/dist/intelligence/impact.js.map +1 -0
  205. package/dist/intelligence/index.js +22 -0
  206. package/dist/intelligence/index.js.map +1 -0
  207. package/dist/intelligence/patterns.js +492 -0
  208. package/dist/intelligence/patterns.js.map +1 -0
  209. package/dist/intelligence/prediction.js +499 -0
  210. package/dist/intelligence/prediction.js.map +1 -0
  211. package/dist/intelligence/types.js +13 -0
  212. package/dist/intelligence/types.js.map +1 -0
  213. package/dist/internal.d.ts +8 -3
  214. package/dist/internal.d.ts.map +1 -1
  215. package/dist/internal.js +320 -0
  216. package/dist/internal.js.map +1 -0
  217. package/dist/issue/create.js +121 -0
  218. package/dist/issue/create.js.map +1 -0
  219. package/dist/issue/diagnostics.js +59 -0
  220. package/dist/issue/diagnostics.js.map +1 -0
  221. package/dist/issue/index.js +10 -0
  222. package/dist/issue/index.js.map +1 -0
  223. package/dist/issue/template-parser.js +267 -0
  224. package/dist/issue/template-parser.js.map +1 -0
  225. package/dist/json-schema-validator.js +76 -0
  226. package/dist/json-schema-validator.js.map +1 -0
  227. package/dist/lib/index.js +11 -0
  228. package/dist/lib/index.js.map +1 -0
  229. package/dist/lib/retry.js +152 -0
  230. package/dist/lib/retry.js.map +1 -0
  231. package/dist/lib/tree-sitter-languages.js +75 -0
  232. package/dist/lib/tree-sitter-languages.js.map +1 -0
  233. package/dist/lifecycle/chain-composition.js +152 -0
  234. package/dist/lifecycle/chain-composition.js.map +1 -0
  235. package/dist/lifecycle/chain-store.js +246 -0
  236. package/dist/lifecycle/chain-store.js.map +1 -0
  237. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  238. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  239. package/dist/lifecycle/default-chain.js +176 -0
  240. package/dist/lifecycle/default-chain.js.map +1 -0
  241. package/dist/lifecycle/evidence.js +180 -0
  242. package/dist/lifecycle/evidence.js.map +1 -0
  243. package/dist/lifecycle/frontmatter.js +363 -0
  244. package/dist/lifecycle/frontmatter.js.map +1 -0
  245. package/dist/lifecycle/index.js +756 -0
  246. package/dist/lifecycle/index.js.map +1 -0
  247. package/dist/lifecycle/pipeline.js +656 -0
  248. package/dist/lifecycle/pipeline.js.map +1 -0
  249. package/dist/lifecycle/rcasd-index.js +326 -0
  250. package/dist/lifecycle/rcasd-index.js.map +1 -0
  251. package/dist/lifecycle/rcasd-paths.js +220 -0
  252. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  253. package/dist/lifecycle/resume.js +864 -0
  254. package/dist/lifecycle/resume.js.map +1 -0
  255. package/dist/lifecycle/stage-artifacts.js +94 -0
  256. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  257. package/dist/lifecycle/stage-guidance.js +234 -0
  258. package/dist/lifecycle/stage-guidance.js.map +1 -0
  259. package/dist/lifecycle/stages.js +534 -0
  260. package/dist/lifecycle/stages.js.map +1 -0
  261. package/dist/lifecycle/state-machine.js +516 -0
  262. package/dist/lifecycle/state-machine.js.map +1 -0
  263. package/dist/lifecycle/tessera-engine.js +249 -0
  264. package/dist/lifecycle/tessera-engine.js.map +1 -0
  265. package/dist/logger.js +140 -0
  266. package/dist/logger.js.map +1 -0
  267. package/dist/memory/auto-extract.js +96 -0
  268. package/dist/memory/auto-extract.js.map +1 -0
  269. package/dist/memory/brain-backfill.js +389 -0
  270. package/dist/memory/brain-backfill.js.map +1 -0
  271. package/dist/memory/brain-consolidator.d.ts +48 -0
  272. package/dist/memory/brain-consolidator.d.ts.map +1 -0
  273. package/dist/memory/brain-consolidator.js +294 -0
  274. package/dist/memory/brain-consolidator.js.map +1 -0
  275. package/dist/memory/brain-embedding.js +66 -0
  276. package/dist/memory/brain-embedding.js.map +1 -0
  277. package/dist/memory/brain-lifecycle.d.ts +83 -2
  278. package/dist/memory/brain-lifecycle.d.ts.map +1 -1
  279. package/dist/memory/brain-lifecycle.js +807 -0
  280. package/dist/memory/brain-lifecycle.js.map +1 -0
  281. package/dist/memory/brain-links.js +161 -0
  282. package/dist/memory/brain-links.js.map +1 -0
  283. package/dist/memory/brain-maintenance.js +114 -0
  284. package/dist/memory/brain-maintenance.js.map +1 -0
  285. package/dist/memory/brain-migration.js +149 -0
  286. package/dist/memory/brain-migration.js.map +1 -0
  287. package/dist/memory/brain-purge.js +243 -0
  288. package/dist/memory/brain-purge.js.map +1 -0
  289. package/dist/memory/brain-reasoning.js +215 -0
  290. package/dist/memory/brain-reasoning.js.map +1 -0
  291. package/dist/memory/brain-retrieval.d.ts +69 -1
  292. package/dist/memory/brain-retrieval.d.ts.map +1 -1
  293. package/dist/memory/brain-retrieval.js +912 -0
  294. package/dist/memory/brain-retrieval.js.map +1 -0
  295. package/dist/memory/brain-row-types.js +10 -0
  296. package/dist/memory/brain-row-types.js.map +1 -0
  297. package/dist/memory/brain-search.d.ts.map +1 -1
  298. package/dist/memory/brain-search.js +528 -0
  299. package/dist/memory/brain-search.js.map +1 -0
  300. package/dist/memory/brain-similarity.js +145 -0
  301. package/dist/memory/brain-similarity.js.map +1 -0
  302. package/dist/memory/claude-mem-migration.js +277 -0
  303. package/dist/memory/claude-mem-migration.js.map +1 -0
  304. package/dist/memory/decisions.d.ts.map +1 -1
  305. package/dist/memory/decisions.js +218 -0
  306. package/dist/memory/decisions.js.map +1 -0
  307. package/dist/memory/embedding-local.js +102 -0
  308. package/dist/memory/embedding-local.js.map +1 -0
  309. package/dist/memory/embedding-queue.js +271 -0
  310. package/dist/memory/embedding-queue.js.map +1 -0
  311. package/dist/memory/embedding-worker.js +58 -0
  312. package/dist/memory/embedding-worker.js.map +1 -0
  313. package/dist/memory/engine-compat.d.ts.map +1 -1
  314. package/dist/memory/engine-compat.js +1564 -0
  315. package/dist/memory/engine-compat.js.map +1 -0
  316. package/dist/memory/extraction-gate.d.ts +139 -0
  317. package/dist/memory/extraction-gate.d.ts.map +1 -0
  318. package/dist/memory/extraction-gate.js +459 -0
  319. package/dist/memory/extraction-gate.js.map +1 -0
  320. package/dist/memory/graph-auto-populate.js +148 -0
  321. package/dist/memory/graph-auto-populate.js.map +1 -0
  322. package/dist/memory/graph-queries.js +290 -0
  323. package/dist/memory/graph-queries.js.map +1 -0
  324. package/dist/memory/index.d.ts +2 -0
  325. package/dist/memory/index.d.ts.map +1 -1
  326. package/dist/memory/index.js +1144 -0
  327. package/dist/memory/index.js.map +1 -0
  328. package/dist/memory/learnings.d.ts +14 -0
  329. package/dist/memory/learnings.d.ts.map +1 -1
  330. package/dist/memory/learnings.js +178 -0
  331. package/dist/memory/learnings.js.map +1 -0
  332. package/dist/memory/memory-bridge.js +370 -0
  333. package/dist/memory/memory-bridge.js.map +1 -0
  334. package/dist/memory/mental-model-injection.js +61 -0
  335. package/dist/memory/mental-model-injection.js.map +1 -0
  336. package/dist/memory/mental-model-queue.js +211 -0
  337. package/dist/memory/mental-model-queue.js.map +1 -0
  338. package/dist/memory/patterns.d.ts +24 -4
  339. package/dist/memory/patterns.d.ts.map +1 -1
  340. package/dist/memory/patterns.js +174 -0
  341. package/dist/memory/patterns.js.map +1 -0
  342. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  343. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  344. package/dist/memory/quality-scoring.d.ts +42 -5
  345. package/dist/memory/quality-scoring.d.ts.map +1 -1
  346. package/dist/memory/quality-scoring.js +182 -0
  347. package/dist/memory/quality-scoring.js.map +1 -0
  348. package/dist/memory/session-memory.js +331 -0
  349. package/dist/memory/session-memory.js.map +1 -0
  350. package/dist/metrics/ab-test.js +260 -0
  351. package/dist/metrics/ab-test.js.map +1 -0
  352. package/dist/metrics/aggregation.js +363 -0
  353. package/dist/metrics/aggregation.js.map +1 -0
  354. package/dist/metrics/common.js +64 -0
  355. package/dist/metrics/common.js.map +1 -0
  356. package/dist/metrics/enums.js +78 -0
  357. package/dist/metrics/enums.js.map +1 -0
  358. package/dist/metrics/index.js +19 -0
  359. package/dist/metrics/index.js.map +1 -0
  360. package/dist/metrics/model-provider-registry.js +88 -0
  361. package/dist/metrics/model-provider-registry.js.map +1 -0
  362. package/dist/metrics/otel-integration.js +263 -0
  363. package/dist/metrics/otel-integration.js.map +1 -0
  364. package/dist/metrics/provider-detection.js +103 -0
  365. package/dist/metrics/provider-detection.js.map +1 -0
  366. package/dist/metrics/token-estimation.js +253 -0
  367. package/dist/metrics/token-estimation.js.map +1 -0
  368. package/dist/metrics/token-service.js +450 -0
  369. package/dist/metrics/token-service.js.map +1 -0
  370. package/dist/migration/agent-outputs.js +316 -0
  371. package/dist/migration/agent-outputs.js.map +1 -0
  372. package/dist/migration/checksum.js +92 -0
  373. package/dist/migration/checksum.js.map +1 -0
  374. package/dist/migration/index.js +282 -0
  375. package/dist/migration/index.js.map +1 -0
  376. package/dist/migration/logger.js +360 -0
  377. package/dist/migration/logger.js.map +1 -0
  378. package/dist/migration/preflight.js +9 -0
  379. package/dist/migration/preflight.js.map +1 -0
  380. package/dist/migration/state.js +421 -0
  381. package/dist/migration/state.js.map +1 -0
  382. package/dist/migration/validate.js +241 -0
  383. package/dist/migration/validate.js.map +1 -0
  384. package/dist/mvi-helpers.js +73 -0
  385. package/dist/mvi-helpers.js.map +1 -0
  386. package/dist/nexus/deps.js +375 -0
  387. package/dist/nexus/deps.js.map +1 -0
  388. package/dist/nexus/discover.js +288 -0
  389. package/dist/nexus/discover.js.map +1 -0
  390. package/dist/nexus/hash.js +10 -0
  391. package/dist/nexus/hash.js.map +1 -0
  392. package/dist/nexus/index.js +40 -0
  393. package/dist/nexus/index.js.map +1 -0
  394. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  395. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  396. package/dist/nexus/nexus-bridge.d.ts +51 -0
  397. package/dist/nexus/nexus-bridge.d.ts.map +1 -0
  398. package/dist/nexus/nexus-bridge.js +321 -0
  399. package/dist/nexus/nexus-bridge.js.map +1 -0
  400. package/dist/nexus/permissions.js +105 -0
  401. package/dist/nexus/permissions.js.map +1 -0
  402. package/dist/nexus/query.js +175 -0
  403. package/dist/nexus/query.js.map +1 -0
  404. package/dist/nexus/registry.js +584 -0
  405. package/dist/nexus/registry.js.map +1 -0
  406. package/dist/nexus/sharing/index.js +288 -0
  407. package/dist/nexus/sharing/index.js.map +1 -0
  408. package/dist/nexus/transfer-types.js +8 -0
  409. package/dist/nexus/transfer-types.js.map +1 -0
  410. package/dist/nexus/transfer.js +271 -0
  411. package/dist/nexus/transfer.js.map +1 -0
  412. package/dist/nexus/workspace.js +355 -0
  413. package/dist/nexus/workspace.js.map +1 -0
  414. package/dist/observability/index.js +103 -0
  415. package/dist/observability/index.js.map +1 -0
  416. package/dist/observability/log-filter.js +63 -0
  417. package/dist/observability/log-filter.js.map +1 -0
  418. package/dist/observability/log-parser.js +99 -0
  419. package/dist/observability/log-parser.js.map +1 -0
  420. package/dist/observability/log-reader.js +139 -0
  421. package/dist/observability/log-reader.js.map +1 -0
  422. package/dist/observability/types.js +19 -0
  423. package/dist/observability/types.js.map +1 -0
  424. package/dist/orchestration/analyze.js +107 -0
  425. package/dist/orchestration/analyze.js.map +1 -0
  426. package/dist/orchestration/bootstrap.js +132 -0
  427. package/dist/orchestration/bootstrap.js.map +1 -0
  428. package/dist/orchestration/context.js +56 -0
  429. package/dist/orchestration/context.js.map +1 -0
  430. package/dist/orchestration/critical-path.js +100 -0
  431. package/dist/orchestration/critical-path.js.map +1 -0
  432. package/dist/orchestration/hierarchy.js +183 -0
  433. package/dist/orchestration/hierarchy.js.map +1 -0
  434. package/dist/orchestration/index.js +287 -0
  435. package/dist/orchestration/index.js.map +1 -0
  436. package/dist/orchestration/parallel.js +89 -0
  437. package/dist/orchestration/parallel.js.map +1 -0
  438. package/dist/orchestration/protocol-validators.js +815 -0
  439. package/dist/orchestration/protocol-validators.js.map +1 -0
  440. package/dist/orchestration/skill-ops.js +98 -0
  441. package/dist/orchestration/skill-ops.js.map +1 -0
  442. package/dist/orchestration/status.js +107 -0
  443. package/dist/orchestration/status.js.map +1 -0
  444. package/dist/orchestration/unblock.js +103 -0
  445. package/dist/orchestration/unblock.js.map +1 -0
  446. package/dist/orchestration/validate-spawn.js +67 -0
  447. package/dist/orchestration/validate-spawn.js.map +1 -0
  448. package/dist/orchestration/waves.js +86 -0
  449. package/dist/orchestration/waves.js.map +1 -0
  450. package/dist/otel/index.js +163 -0
  451. package/dist/otel/index.js.map +1 -0
  452. package/dist/output.js +164 -0
  453. package/dist/output.js.map +1 -0
  454. package/dist/pagination.js +64 -0
  455. package/dist/pagination.js.map +1 -0
  456. package/dist/paths.js +882 -0
  457. package/dist/paths.js.map +1 -0
  458. package/dist/phases/deps.js +372 -0
  459. package/dist/phases/deps.js.map +1 -0
  460. package/dist/phases/index.js +349 -0
  461. package/dist/phases/index.js.map +1 -0
  462. package/dist/pipeline/index.js +10 -0
  463. package/dist/pipeline/index.js.map +1 -0
  464. package/dist/pipeline/phase.js +45 -0
  465. package/dist/pipeline/phase.js.map +1 -0
  466. package/dist/platform.js +211 -0
  467. package/dist/platform.js.map +1 -0
  468. package/dist/project-info.js +84 -0
  469. package/dist/project-info.js.map +1 -0
  470. package/dist/reconciliation/index.js +10 -0
  471. package/dist/reconciliation/index.js.map +1 -0
  472. package/dist/reconciliation/link-store.js +175 -0
  473. package/dist/reconciliation/link-store.js.map +1 -0
  474. package/dist/reconciliation/reconciliation-engine.js +298 -0
  475. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  476. package/dist/release/artifacts.js +427 -0
  477. package/dist/release/artifacts.js.map +1 -0
  478. package/dist/release/changelog-writer.js +151 -0
  479. package/dist/release/changelog-writer.js.map +1 -0
  480. package/dist/release/channel.js +144 -0
  481. package/dist/release/channel.js.map +1 -0
  482. package/dist/release/ci.js +166 -0
  483. package/dist/release/ci.js.map +1 -0
  484. package/dist/release/github-pr.js +225 -0
  485. package/dist/release/github-pr.js.map +1 -0
  486. package/dist/release/guards.js +116 -0
  487. package/dist/release/guards.js.map +1 -0
  488. package/dist/release/index.js +22 -0
  489. package/dist/release/index.js.map +1 -0
  490. package/dist/release/release-config.js +158 -0
  491. package/dist/release/release-config.js.map +1 -0
  492. package/dist/release/release-manifest.js +1019 -0
  493. package/dist/release/release-manifest.js.map +1 -0
  494. package/dist/release/version-bump.js +255 -0
  495. package/dist/release/version-bump.js.map +1 -0
  496. package/dist/remote/index.js +257 -0
  497. package/dist/remote/index.js.map +1 -0
  498. package/dist/repair.js +130 -0
  499. package/dist/repair.js.map +1 -0
  500. package/dist/research/index.js +2 -0
  501. package/dist/research/index.js.map +1 -0
  502. package/dist/roadmap/index.js +59 -0
  503. package/dist/roadmap/index.js.map +1 -0
  504. package/dist/routing/capability-matrix.js +1556 -0
  505. package/dist/routing/capability-matrix.js.map +1 -0
  506. package/dist/routing/index.js +9 -0
  507. package/dist/routing/index.js.map +1 -0
  508. package/dist/scaffold.d.ts +18 -0
  509. package/dist/scaffold.d.ts.map +1 -1
  510. package/dist/scaffold.js +1798 -0
  511. package/dist/scaffold.js.map +1 -0
  512. package/dist/schema-management.js +295 -0
  513. package/dist/schema-management.js.map +1 -0
  514. package/dist/security/index.js +9 -0
  515. package/dist/security/index.js.map +1 -0
  516. package/dist/security/input-sanitization.js +326 -0
  517. package/dist/security/input-sanitization.js.map +1 -0
  518. package/dist/sequence/index.js +295 -0
  519. package/dist/sequence/index.js.map +1 -0
  520. package/dist/sessions/assumptions.js +54 -0
  521. package/dist/sessions/assumptions.js.map +1 -0
  522. package/dist/sessions/briefing.js +377 -0
  523. package/dist/sessions/briefing.js.map +1 -0
  524. package/dist/sessions/context-alert.js +222 -0
  525. package/dist/sessions/context-alert.js.map +1 -0
  526. package/dist/sessions/context-inject.js +61 -0
  527. package/dist/sessions/context-inject.js.map +1 -0
  528. package/dist/sessions/context-monitor.js +98 -0
  529. package/dist/sessions/context-monitor.js.map +1 -0
  530. package/dist/sessions/decisions.js +65 -0
  531. package/dist/sessions/decisions.js.map +1 -0
  532. package/dist/sessions/find.js +65 -0
  533. package/dist/sessions/find.js.map +1 -0
  534. package/dist/sessions/handoff.js +328 -0
  535. package/dist/sessions/handoff.js.map +1 -0
  536. package/dist/sessions/hitl-warnings.js +254 -0
  537. package/dist/sessions/hitl-warnings.js.map +1 -0
  538. package/dist/sessions/index.js +327 -0
  539. package/dist/sessions/index.js.map +1 -0
  540. package/dist/sessions/session-archive.js +40 -0
  541. package/dist/sessions/session-archive.js.map +1 -0
  542. package/dist/sessions/session-cleanup.js +59 -0
  543. package/dist/sessions/session-cleanup.js.map +1 -0
  544. package/dist/sessions/session-drift.js +134 -0
  545. package/dist/sessions/session-drift.js.map +1 -0
  546. package/dist/sessions/session-enforcement.js +144 -0
  547. package/dist/sessions/session-enforcement.js.map +1 -0
  548. package/dist/sessions/session-grade.js +253 -0
  549. package/dist/sessions/session-grade.js.map +1 -0
  550. package/dist/sessions/session-history.js +42 -0
  551. package/dist/sessions/session-history.js.map +1 -0
  552. package/dist/sessions/session-id.js +81 -0
  553. package/dist/sessions/session-id.js.map +1 -0
  554. package/dist/sessions/session-memory-bridge.js +30 -0
  555. package/dist/sessions/session-memory-bridge.js.map +1 -0
  556. package/dist/sessions/session-show.js +24 -0
  557. package/dist/sessions/session-show.js.map +1 -0
  558. package/dist/sessions/session-stats.js +69 -0
  559. package/dist/sessions/session-stats.js.map +1 -0
  560. package/dist/sessions/session-suspend.js +39 -0
  561. package/dist/sessions/session-suspend.js.map +1 -0
  562. package/dist/sessions/session-switch.js +51 -0
  563. package/dist/sessions/session-switch.js.map +1 -0
  564. package/dist/sessions/session-view.js +76 -0
  565. package/dist/sessions/session-view.js.map +1 -0
  566. package/dist/sessions/snapshot.js +213 -0
  567. package/dist/sessions/snapshot.js.map +1 -0
  568. package/dist/sessions/statusline-setup.js +85 -0
  569. package/dist/sessions/statusline-setup.js.map +1 -0
  570. package/dist/sessions/types.js +8 -0
  571. package/dist/sessions/types.js.map +1 -0
  572. package/dist/skills/agents/config.js +94 -0
  573. package/dist/skills/agents/config.js.map +1 -0
  574. package/dist/skills/agents/install.js +116 -0
  575. package/dist/skills/agents/install.js.map +1 -0
  576. package/dist/skills/agents/registry.js +161 -0
  577. package/dist/skills/agents/registry.js.map +1 -0
  578. package/dist/skills/discovery.js +333 -0
  579. package/dist/skills/discovery.js.map +1 -0
  580. package/dist/skills/dispatch.js +347 -0
  581. package/dist/skills/dispatch.js.map +1 -0
  582. package/dist/skills/dynamic-skill-generator.js +87 -0
  583. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  584. package/dist/skills/index.js +44 -0
  585. package/dist/skills/index.js.map +1 -0
  586. package/dist/skills/injection/subagent.js +195 -0
  587. package/dist/skills/injection/subagent.js.map +1 -0
  588. package/dist/skills/injection/token.js +260 -0
  589. package/dist/skills/injection/token.js.map +1 -0
  590. package/dist/skills/install.js +40 -0
  591. package/dist/skills/install.js.map +1 -0
  592. package/dist/skills/manifests/contribution.js +175 -0
  593. package/dist/skills/manifests/contribution.js.map +1 -0
  594. package/dist/skills/manifests/research.js +281 -0
  595. package/dist/skills/manifests/research.js.map +1 -0
  596. package/dist/skills/manifests/resolver.js +146 -0
  597. package/dist/skills/manifests/resolver.js.map +1 -0
  598. package/dist/skills/marketplace.js +90 -0
  599. package/dist/skills/marketplace.js.map +1 -0
  600. package/dist/skills/orchestrator/spawn.js +178 -0
  601. package/dist/skills/orchestrator/spawn.js.map +1 -0
  602. package/dist/skills/orchestrator/startup.js +451 -0
  603. package/dist/skills/orchestrator/startup.js.map +1 -0
  604. package/dist/skills/orchestrator/validator.js +301 -0
  605. package/dist/skills/orchestrator/validator.js.map +1 -0
  606. package/dist/skills/precedence-integration.js +73 -0
  607. package/dist/skills/precedence-integration.js.map +1 -0
  608. package/dist/skills/precedence-types.js +16 -0
  609. package/dist/skills/precedence-types.js.map +1 -0
  610. package/dist/skills/routing-table.js +63 -0
  611. package/dist/skills/routing-table.js.map +1 -0
  612. package/dist/skills/skill-paths.js +217 -0
  613. package/dist/skills/skill-paths.js.map +1 -0
  614. package/dist/skills/test-utility.js +55 -0
  615. package/dist/skills/test-utility.js.map +1 -0
  616. package/dist/skills/types.js +118 -0
  617. package/dist/skills/types.js.map +1 -0
  618. package/dist/skills/validation.js +183 -0
  619. package/dist/skills/validation.js.map +1 -0
  620. package/dist/skills/version.js +57 -0
  621. package/dist/skills/version.js.map +1 -0
  622. package/dist/snapshot/index.js +188 -0
  623. package/dist/snapshot/index.js.map +1 -0
  624. package/dist/spawn/adapter-registry.js +246 -0
  625. package/dist/spawn/adapter-registry.js.map +1 -0
  626. package/dist/spawn/index.js +10 -0
  627. package/dist/spawn/index.js.map +1 -0
  628. package/dist/stats/index.d.ts.map +1 -1
  629. package/dist/stats/index.js +350 -0
  630. package/dist/stats/index.js.map +1 -0
  631. package/dist/stats/workflow-telemetry.js +400 -0
  632. package/dist/stats/workflow-telemetry.js.map +1 -0
  633. package/dist/sticky/archive.js +47 -0
  634. package/dist/sticky/archive.js.map +1 -0
  635. package/dist/sticky/convert.js +235 -0
  636. package/dist/sticky/convert.js.map +1 -0
  637. package/dist/sticky/create.js +48 -0
  638. package/dist/sticky/create.js.map +1 -0
  639. package/dist/sticky/id.js +35 -0
  640. package/dist/sticky/id.js.map +1 -0
  641. package/dist/sticky/index.js +16 -0
  642. package/dist/sticky/index.js.map +1 -0
  643. package/dist/sticky/list.js +57 -0
  644. package/dist/sticky/list.js.map +1 -0
  645. package/dist/sticky/purge.js +45 -0
  646. package/dist/sticky/purge.js.map +1 -0
  647. package/dist/sticky/show.js +42 -0
  648. package/dist/sticky/show.js.map +1 -0
  649. package/dist/sticky/types.js +10 -0
  650. package/dist/sticky/types.js.map +1 -0
  651. package/dist/store/agent-registry-accessor.js +886 -0
  652. package/dist/store/agent-registry-accessor.js.map +1 -0
  653. package/dist/store/api-key-kdf.js +84 -0
  654. package/dist/store/api-key-kdf.js.map +1 -0
  655. package/dist/store/atomic.js +167 -0
  656. package/dist/store/atomic.js.map +1 -0
  657. package/dist/store/backup-crypto.js +184 -0
  658. package/dist/store/backup-crypto.js.map +1 -0
  659. package/dist/store/backup-pack.js +581 -0
  660. package/dist/store/backup-pack.js.map +1 -0
  661. package/dist/store/backup-unpack.js +449 -0
  662. package/dist/store/backup-unpack.js.map +1 -0
  663. package/dist/store/backup.js +94 -0
  664. package/dist/store/backup.js.map +1 -0
  665. package/dist/store/brain-accessor.js +429 -0
  666. package/dist/store/brain-accessor.js.map +1 -0
  667. package/dist/store/brain-schema.d.ts +496 -3
  668. package/dist/store/brain-schema.d.ts.map +1 -1
  669. package/dist/store/brain-schema.js +549 -0
  670. package/dist/store/brain-schema.js.map +1 -0
  671. package/dist/store/brain-sqlite.d.ts.map +1 -1
  672. package/dist/store/brain-sqlite.js +257 -0
  673. package/dist/store/brain-sqlite.js.map +1 -0
  674. package/dist/store/cache.js +168 -0
  675. package/dist/store/cache.js.map +1 -0
  676. package/dist/store/chain-schema.js +51 -0
  677. package/dist/store/chain-schema.js.map +1 -0
  678. package/dist/store/cleanup-legacy.js +171 -0
  679. package/dist/store/cleanup-legacy.js.map +1 -0
  680. package/dist/store/conduit-sqlite.js +570 -0
  681. package/dist/store/conduit-sqlite.js.map +1 -0
  682. package/dist/store/converters.js +124 -0
  683. package/dist/store/converters.js.map +1 -0
  684. package/dist/store/cross-db-cleanup.js +319 -0
  685. package/dist/store/cross-db-cleanup.js.map +1 -0
  686. package/dist/store/data-accessor.js +26 -0
  687. package/dist/store/data-accessor.js.map +1 -0
  688. package/dist/store/data-safety-central.js +269 -0
  689. package/dist/store/data-safety-central.js.map +1 -0
  690. package/dist/store/data-safety.js +274 -0
  691. package/dist/store/data-safety.js.map +1 -0
  692. package/dist/store/db-helpers.js +224 -0
  693. package/dist/store/db-helpers.js.map +1 -0
  694. package/dist/store/export.js +155 -0
  695. package/dist/store/export.js.map +1 -0
  696. package/dist/store/file-utils.js +270 -0
  697. package/dist/store/file-utils.js.map +1 -0
  698. package/dist/store/git-checkpoint.js +365 -0
  699. package/dist/store/git-checkpoint.js.map +1 -0
  700. package/dist/store/global-salt.js +147 -0
  701. package/dist/store/global-salt.js.map +1 -0
  702. package/dist/store/import-logging.js +139 -0
  703. package/dist/store/import-logging.js.map +1 -0
  704. package/dist/store/import-remap.js +145 -0
  705. package/dist/store/import-remap.js.map +1 -0
  706. package/dist/store/import-sort.js +121 -0
  707. package/dist/store/import-sort.js.map +1 -0
  708. package/dist/store/index.js +29 -0
  709. package/dist/store/index.js.map +1 -0
  710. package/dist/store/json.js +208 -0
  711. package/dist/store/json.js.map +1 -0
  712. package/dist/store/lifecycle-store.js +249 -0
  713. package/dist/store/lifecycle-store.js.map +1 -0
  714. package/dist/store/lock.js +70 -0
  715. package/dist/store/lock.js.map +1 -0
  716. package/dist/store/migrate-signaldock-to-conduit.js +562 -0
  717. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  718. package/dist/store/migration-manager.d.ts +5 -1
  719. package/dist/store/migration-manager.d.ts.map +1 -1
  720. package/dist/store/migration-manager.js +288 -0
  721. package/dist/store/migration-manager.js.map +1 -0
  722. package/dist/store/migration-sqlite.js +676 -0
  723. package/dist/store/migration-sqlite.js.map +1 -0
  724. package/dist/store/nexus-schema.js +268 -0
  725. package/dist/store/nexus-schema.js.map +1 -0
  726. package/dist/store/nexus-sqlite.js +242 -0
  727. package/dist/store/nexus-sqlite.js.map +1 -0
  728. package/dist/store/nexus-validation-schemas.js +40 -0
  729. package/dist/store/nexus-validation-schemas.js.map +1 -0
  730. package/dist/store/parsers.js +37 -0
  731. package/dist/store/parsers.js.map +1 -0
  732. package/dist/store/project-detect.js +457 -0
  733. package/dist/store/project-detect.js.map +1 -0
  734. package/dist/store/provider.js +101 -0
  735. package/dist/store/provider.js.map +1 -0
  736. package/dist/store/regenerators.js +207 -0
  737. package/dist/store/regenerators.js.map +1 -0
  738. package/dist/store/restore-conflict-report.js +206 -0
  739. package/dist/store/restore-conflict-report.js.map +1 -0
  740. package/dist/store/restore-json-merge.js +454 -0
  741. package/dist/store/restore-json-merge.js.map +1 -0
  742. package/dist/store/safety-data-accessor.js +257 -0
  743. package/dist/store/safety-data-accessor.js.map +1 -0
  744. package/dist/store/schema.js +7 -0
  745. package/dist/store/schema.js.map +1 -0
  746. package/dist/store/session-store.js +219 -0
  747. package/dist/store/session-store.js.map +1 -0
  748. package/dist/store/signaldock-sqlite.js +550 -0
  749. package/dist/store/signaldock-sqlite.js.map +1 -0
  750. package/dist/store/sqlite-backup.js +498 -0
  751. package/dist/store/sqlite-backup.js.map +1 -0
  752. package/dist/store/sqlite-data-accessor.js +787 -0
  753. package/dist/store/sqlite-data-accessor.js.map +1 -0
  754. package/dist/store/sqlite.js +483 -0
  755. package/dist/store/sqlite.js.map +1 -0
  756. package/dist/store/status-registry.js +8 -0
  757. package/dist/store/status-registry.js.map +1 -0
  758. package/dist/store/t310-readiness.js +115 -0
  759. package/dist/store/t310-readiness.js.map +1 -0
  760. package/dist/store/task-store.js +358 -0
  761. package/dist/store/task-store.js.map +1 -0
  762. package/dist/store/tasks-schema.d.ts +1 -1
  763. package/dist/store/tasks-schema.js +610 -0
  764. package/dist/store/tasks-schema.js.map +1 -0
  765. package/dist/store/typed-query.js +15 -0
  766. package/dist/store/typed-query.js.map +1 -0
  767. package/dist/store/validation-schemas.d.ts +6 -6
  768. package/dist/store/validation-schemas.js +278 -0
  769. package/dist/store/validation-schemas.js.map +1 -0
  770. package/dist/system/archive-analytics.js +277 -0
  771. package/dist/system/archive-analytics.js.map +1 -0
  772. package/dist/system/archive-stats.js +64 -0
  773. package/dist/system/archive-stats.js.map +1 -0
  774. package/dist/system/audit.js +145 -0
  775. package/dist/system/audit.js.map +1 -0
  776. package/dist/system/backup.js +280 -0
  777. package/dist/system/backup.js.map +1 -0
  778. package/dist/system/cleanup.js +134 -0
  779. package/dist/system/cleanup.js.map +1 -0
  780. package/dist/system/dependencies.js +466 -0
  781. package/dist/system/dependencies.js.map +1 -0
  782. package/dist/system/health.d.ts.map +1 -1
  783. package/dist/system/health.js +1206 -0
  784. package/dist/system/health.js.map +1 -0
  785. package/dist/system/index.js +18 -0
  786. package/dist/system/index.js.map +1 -0
  787. package/dist/system/inject-generate.js +122 -0
  788. package/dist/system/inject-generate.js.map +1 -0
  789. package/dist/system/labels.js +38 -0
  790. package/dist/system/labels.js.map +1 -0
  791. package/dist/system/metrics.js +61 -0
  792. package/dist/system/metrics.js.map +1 -0
  793. package/dist/system/migrate.js +43 -0
  794. package/dist/system/migrate.js.map +1 -0
  795. package/dist/system/platform-paths.js +80 -0
  796. package/dist/system/platform-paths.js.map +1 -0
  797. package/dist/system/runtime.js +161 -0
  798. package/dist/system/runtime.js.map +1 -0
  799. package/dist/system/safestop.js +89 -0
  800. package/dist/system/safestop.js.map +1 -0
  801. package/dist/system/storage-preflight.js +123 -0
  802. package/dist/system/storage-preflight.js.map +1 -0
  803. package/dist/task-work/index.js +159 -0
  804. package/dist/task-work/index.js.map +1 -0
  805. package/dist/tasks/add.js +837 -0
  806. package/dist/tasks/add.js.map +1 -0
  807. package/dist/tasks/analyze.js +85 -0
  808. package/dist/tasks/analyze.js.map +1 -0
  809. package/dist/tasks/archive.js +90 -0
  810. package/dist/tasks/archive.js.map +1 -0
  811. package/dist/tasks/atomicity.js +83 -0
  812. package/dist/tasks/atomicity.js.map +1 -0
  813. package/dist/tasks/cancel-ops.js +83 -0
  814. package/dist/tasks/cancel-ops.js.map +1 -0
  815. package/dist/tasks/complete.js +229 -0
  816. package/dist/tasks/complete.js.map +1 -0
  817. package/dist/tasks/crossref-extract.js +73 -0
  818. package/dist/tasks/crossref-extract.js.map +1 -0
  819. package/dist/tasks/delete-preview.js +192 -0
  820. package/dist/tasks/delete-preview.js.map +1 -0
  821. package/dist/tasks/delete.js +120 -0
  822. package/dist/tasks/delete.js.map +1 -0
  823. package/dist/tasks/deletion-strategy.js +200 -0
  824. package/dist/tasks/deletion-strategy.js.map +1 -0
  825. package/dist/tasks/dependency-check.js +278 -0
  826. package/dist/tasks/dependency-check.js.map +1 -0
  827. package/dist/tasks/deps-ready.js +32 -0
  828. package/dist/tasks/deps-ready.js.map +1 -0
  829. package/dist/tasks/enforcement.js +86 -0
  830. package/dist/tasks/enforcement.js.map +1 -0
  831. package/dist/tasks/epic-enforcement.js +294 -0
  832. package/dist/tasks/epic-enforcement.js.map +1 -0
  833. package/dist/tasks/find.js +163 -0
  834. package/dist/tasks/find.js.map +1 -0
  835. package/dist/tasks/graph-cache.js +127 -0
  836. package/dist/tasks/graph-cache.js.map +1 -0
  837. package/dist/tasks/graph-ops.d.ts.map +1 -1
  838. package/dist/tasks/graph-ops.js +173 -0
  839. package/dist/tasks/graph-ops.js.map +1 -0
  840. package/dist/tasks/graph-rag.js +328 -0
  841. package/dist/tasks/graph-rag.js.map +1 -0
  842. package/dist/tasks/hierarchy-policy.js +149 -0
  843. package/dist/tasks/hierarchy-policy.js.map +1 -0
  844. package/dist/tasks/hierarchy.js +185 -0
  845. package/dist/tasks/hierarchy.js.map +1 -0
  846. package/dist/tasks/id-generator.js +65 -0
  847. package/dist/tasks/id-generator.js.map +1 -0
  848. package/dist/tasks/index.js +14 -0
  849. package/dist/tasks/index.js.map +1 -0
  850. package/dist/tasks/labels.js +55 -0
  851. package/dist/tasks/labels.js.map +1 -0
  852. package/dist/tasks/list.js +75 -0
  853. package/dist/tasks/list.js.map +1 -0
  854. package/dist/tasks/phase-tracking.js +133 -0
  855. package/dist/tasks/phase-tracking.js.map +1 -0
  856. package/dist/tasks/pipeline-stage.js +248 -0
  857. package/dist/tasks/pipeline-stage.js.map +1 -0
  858. package/dist/tasks/plan.js +268 -0
  859. package/dist/tasks/plan.js.map +1 -0
  860. package/dist/tasks/relates.js +101 -0
  861. package/dist/tasks/relates.js.map +1 -0
  862. package/dist/tasks/show.js +83 -0
  863. package/dist/tasks/show.js.map +1 -0
  864. package/dist/tasks/size-weighting.js +86 -0
  865. package/dist/tasks/size-weighting.js.map +1 -0
  866. package/dist/tasks/staleness.js +86 -0
  867. package/dist/tasks/staleness.js.map +1 -0
  868. package/dist/tasks/task-ops.js +1741 -0
  869. package/dist/tasks/task-ops.js.map +1 -0
  870. package/dist/tasks/update.js +303 -0
  871. package/dist/tasks/update.js.map +1 -0
  872. package/dist/templates/index.js +10 -0
  873. package/dist/templates/index.js.map +1 -0
  874. package/dist/templates/parser.js +254 -0
  875. package/dist/templates/parser.js.map +1 -0
  876. package/dist/ui/aliases.js +153 -0
  877. package/dist/ui/aliases.js.map +1 -0
  878. package/dist/ui/changelog.js +184 -0
  879. package/dist/ui/changelog.js.map +1 -0
  880. package/dist/ui/command-registry.js +168 -0
  881. package/dist/ui/command-registry.js.map +1 -0
  882. package/dist/ui/flags.js +94 -0
  883. package/dist/ui/flags.js.map +1 -0
  884. package/dist/ui/index.js +24 -0
  885. package/dist/ui/index.js.map +1 -0
  886. package/dist/upgrade.js +1148 -0
  887. package/dist/upgrade.js.map +1 -0
  888. package/dist/validation/chain-validation.js +146 -0
  889. package/dist/validation/chain-validation.js.map +1 -0
  890. package/dist/validation/compliance.js +155 -0
  891. package/dist/validation/compliance.js.map +1 -0
  892. package/dist/validation/docs-sync.js +212 -0
  893. package/dist/validation/docs-sync.js.map +1 -0
  894. package/dist/validation/doctor/checks.js +1069 -0
  895. package/dist/validation/doctor/checks.js.map +1 -0
  896. package/dist/validation/doctor/index.js +9 -0
  897. package/dist/validation/doctor/index.js.map +1 -0
  898. package/dist/validation/doctor/project-cache.js +160 -0
  899. package/dist/validation/doctor/project-cache.js.map +1 -0
  900. package/dist/validation/doctor/utils.js +155 -0
  901. package/dist/validation/doctor/utils.js.map +1 -0
  902. package/dist/validation/engine.js +914 -0
  903. package/dist/validation/engine.js.map +1 -0
  904. package/dist/validation/gap-check.js +175 -0
  905. package/dist/validation/gap-check.js.map +1 -0
  906. package/dist/validation/index.js +40 -0
  907. package/dist/validation/index.js.map +1 -0
  908. package/dist/validation/manifest.js +237 -0
  909. package/dist/validation/manifest.js.map +1 -0
  910. package/dist/validation/operation-gate-validators.js +724 -0
  911. package/dist/validation/operation-gate-validators.js.map +1 -0
  912. package/dist/validation/operation-verification-gates.js +532 -0
  913. package/dist/validation/operation-verification-gates.js.map +1 -0
  914. package/dist/validation/param-utils.js +141 -0
  915. package/dist/validation/param-utils.js.map +1 -0
  916. package/dist/validation/protocol-common.js +300 -0
  917. package/dist/validation/protocol-common.js.map +1 -0
  918. package/dist/validation/protocols/_shared.js +82 -0
  919. package/dist/validation/protocols/_shared.js.map +1 -0
  920. package/dist/validation/protocols/architecture-decision.js +31 -0
  921. package/dist/validation/protocols/architecture-decision.js.map +1 -0
  922. package/dist/validation/protocols/artifact-publish.js +28 -0
  923. package/dist/validation/protocols/artifact-publish.js.map +1 -0
  924. package/dist/validation/protocols/consensus.js +41 -0
  925. package/dist/validation/protocols/consensus.js.map +1 -0
  926. package/dist/validation/protocols/contribution.js +27 -0
  927. package/dist/validation/protocols/contribution.js.map +1 -0
  928. package/dist/validation/protocols/decomposition.js +28 -0
  929. package/dist/validation/protocols/decomposition.js.map +1 -0
  930. package/dist/validation/protocols/implementation.js +24 -0
  931. package/dist/validation/protocols/implementation.js.map +1 -0
  932. package/dist/validation/protocols/provenance.js +29 -0
  933. package/dist/validation/protocols/provenance.js.map +1 -0
  934. package/dist/validation/protocols/release.js +29 -0
  935. package/dist/validation/protocols/release.js.map +1 -0
  936. package/dist/validation/protocols/research.js +24 -0
  937. package/dist/validation/protocols/research.js.map +1 -0
  938. package/dist/validation/protocols/specification.js +27 -0
  939. package/dist/validation/protocols/specification.js.map +1 -0
  940. package/dist/validation/protocols/testing.js +30 -0
  941. package/dist/validation/protocols/testing.js.map +1 -0
  942. package/dist/validation/protocols/validation.js +30 -0
  943. package/dist/validation/protocols/validation.js.map +1 -0
  944. package/dist/validation/schema-integrity.js +170 -0
  945. package/dist/validation/schema-integrity.js.map +1 -0
  946. package/dist/validation/schema-validator.js +176 -0
  947. package/dist/validation/schema-validator.js.map +1 -0
  948. package/dist/validation/validate-ops.js +937 -0
  949. package/dist/validation/validate-ops.js.map +1 -0
  950. package/dist/validation/validation-rules.js +226 -0
  951. package/dist/validation/validation-rules.js.map +1 -0
  952. package/dist/validation/verification.js +321 -0
  953. package/dist/validation/verification.js.map +1 -0
  954. package/migrations/drizzle-brain/20260411000001_t528-graph-schema-expansion/migration.sql +47 -0
  955. package/migrations/drizzle-brain/20260412000001_t531-quality-score-typed-tables/migration.sql +23 -0
  956. package/migrations/drizzle-brain/20260413000001_t549-tiered-typed-memory/migration.sql +195 -0
  957. package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +49 -0
  958. package/package.json +8 -8
  959. package/src/hooks/handlers/index.ts +6 -0
  960. package/src/hooks/handlers/intelligence-hooks.ts +80 -0
  961. package/src/hooks/handlers/session-hooks.ts +41 -0
  962. package/src/hooks/handlers/watchdog-hooks.ts +187 -0
  963. package/src/injection.ts +41 -2
  964. package/src/internal.ts +31 -2
  965. package/src/memory/brain-consolidator.ts +344 -0
  966. package/src/memory/brain-lifecycle.ts +636 -2
  967. package/src/memory/brain-retrieval.ts +445 -2
  968. package/src/memory/brain-search.ts +38 -4
  969. package/src/memory/decisions.ts +21 -1
  970. package/src/memory/engine-compat.ts +9 -11
  971. package/src/memory/extraction-gate.ts +574 -0
  972. package/src/memory/index.ts +6 -2
  973. package/src/memory/learnings.ts +33 -1
  974. package/src/memory/patterns.ts +30 -1
  975. package/src/memory/quality-scoring.ts +93 -9
  976. package/src/nexus/nexus-bridge.ts +444 -0
  977. package/src/scaffold.ts +42 -0
  978. package/src/stats/index.ts +11 -3
  979. package/src/store/brain-schema.ts +238 -0
  980. package/src/store/brain-sqlite.ts +55 -0
  981. package/src/store/migration-manager.ts +83 -12
  982. package/src/system/health.ts +17 -0
  983. package/src/tasks/graph-ops.ts +1 -0
  984. package/src/tasks/task-ops.ts +1 -1
  985. package/templates/CLEO-INJECTION.md +15 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Watchdog Scheduler Hook Handlers
3
+ *
4
+ * Starts a periodic health-check timer when a session begins and stops it when
5
+ * the session ends. One watchdog per project root, enforced by a module-level
6
+ * Map keyed on the resolved project root.
7
+ *
8
+ * Each 60-second tick:
9
+ * 1. Detects agents with a stale heartbeat (> STALE_THRESHOLD_MS)
10
+ * 2. Records each crash as a learning event in brain.db
11
+ * 3. Attempts recovery (status reset to 'starting') for all crashed agents
12
+ * 4. Fires the `onPatrol` hook for observability
13
+ *
14
+ * Best-effort contract: the watchdog NEVER crashes or throws. Any tick failure
15
+ * is swallowed so the timer continues. Any error in the start/stop handlers is
16
+ * also swallowed so it never blocks session operations.
17
+ *
18
+ * Gated behind `brain.autoCapture` config — the watchdog does NOT start unless
19
+ * auto-capture is enabled.
20
+ *
21
+ * Auto-registers on module load.
22
+ *
23
+ * @task T549
24
+ * @epic T5149
25
+ */
26
+
27
+ import { hooks } from '../registry.js';
28
+ import type { OnPatrolPayload, SessionEndPayload, SessionStartPayload } from '../types.js';
29
+ import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Module-level watchdog state
33
+ // ---------------------------------------------------------------------------
34
+
35
+ /** One active timer per project root (resolved path). */
36
+ const activeWatchdogs = new Map<string, ReturnType<typeof setInterval>>();
37
+
38
+ /** Interval between watchdog ticks in milliseconds. */
39
+ const WATCHDOG_INTERVAL_MS = 60_000;
40
+
41
+ // ---------------------------------------------------------------------------
42
+ // Watchdog tick
43
+ // ---------------------------------------------------------------------------
44
+
45
+ /**
46
+ * Execute one watchdog patrol tick.
47
+ *
48
+ * Steps:
49
+ * 1. detectCrashedAgents — find and mark stale agents as 'crashed'
50
+ * 2. processAgentLifecycleEvent — write failure events to brain.db for each
51
+ * 3. recoverCrashedAgents — reset crashed agents to 'starting'
52
+ * 4. hooks.dispatch('onPatrol') — emit observability event
53
+ *
54
+ * Any thrown error is caught and logged as a warning; the timer continues.
55
+ *
56
+ * @param projectRoot - Absolute path to the project root directory.
57
+ */
58
+ async function runWatchdogTick(projectRoot: string): Promise<void> {
59
+ try {
60
+ const { detectCrashedAgents, STALE_THRESHOLD_MS } = await import(
61
+ '../../agents/health-monitor.js'
62
+ );
63
+ const { recoverCrashedAgents } = await import('../../agents/retry.js');
64
+ const { processAgentLifecycleEvent } = await import('../../agents/execution-learning.js');
65
+
66
+ // Step 1: Detect and mark crashed agents
67
+ const crashed = await detectCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
68
+
69
+ // Step 2: Record each crash as a brain learning event
70
+ for (const agent of crashed) {
71
+ try {
72
+ await processAgentLifecycleEvent(
73
+ {
74
+ agentId: agent.id,
75
+ agentType:
76
+ (agent.agentType as import('../../agents/agent-schema.js').AgentType) ?? 'custom',
77
+ taskId: agent.taskId ?? 'unknown',
78
+ taskType: 'unknown',
79
+ outcome: 'failure',
80
+ errorMessage: 'Heartbeat timeout — agent presumed crashed',
81
+ errorType: 'retriable',
82
+ sessionId: agent.sessionId ?? undefined,
83
+ },
84
+ projectRoot,
85
+ );
86
+ } catch (err) {
87
+ if (!isMissingBrainSchemaError(err)) {
88
+ console.warn('[watchdog] Failed to record agent crash event:', err);
89
+ }
90
+ }
91
+ }
92
+
93
+ // Step 3: Attempt recovery for all crashed agents
94
+ if (crashed.length > 0) {
95
+ await recoverCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
96
+ }
97
+
98
+ // Step 4: Fire onPatrol for observability
99
+ const patrolPayload: OnPatrolPayload = {
100
+ timestamp: new Date().toISOString(),
101
+ watcherId: 'health-watchdog',
102
+ patrolType: 'health',
103
+ scope: `crashed=${crashed.length}`,
104
+ };
105
+ await hooks.dispatch('onPatrol', projectRoot, patrolPayload);
106
+ } catch (err) {
107
+ // Best-effort — never crash the watchdog timer
108
+ console.warn('[watchdog] Tick failed:', err);
109
+ }
110
+ }
111
+
112
+ // ---------------------------------------------------------------------------
113
+ // Lifecycle handlers
114
+ // ---------------------------------------------------------------------------
115
+
116
+ /**
117
+ * Handle SessionStart — start the watchdog timer for this project root.
118
+ *
119
+ * Idempotent: if a watchdog is already running for this root (e.g. a second
120
+ * session in the same process), the existing timer is reused.
121
+ *
122
+ * Gated behind `brain.autoCapture` — watchdog does not start unless auto-capture
123
+ * is enabled. This aligns with all other brain-capture hooks.
124
+ *
125
+ * @param projectRoot - Absolute path to the project root directory.
126
+ * @param _payload - SessionStart payload (unused).
127
+ */
128
+ export async function handleWatchdogStart(
129
+ projectRoot: string,
130
+ _payload: SessionStartPayload,
131
+ ): Promise<void> {
132
+ try {
133
+ if (!(await isAutoCaptureEnabled(projectRoot))) return;
134
+
135
+ // Idempotency guard — one watchdog per project root
136
+ if (activeWatchdogs.has(projectRoot)) return;
137
+
138
+ const timer = setInterval(() => {
139
+ void runWatchdogTick(projectRoot);
140
+ }, WATCHDOG_INTERVAL_MS);
141
+
142
+ activeWatchdogs.set(projectRoot, timer);
143
+ } catch {
144
+ // Never block session start on watchdog errors
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Handle SessionEnd — stop the watchdog timer for this project root.
150
+ *
151
+ * Safe to call when no watchdog is running (no-op).
152
+ *
153
+ * @param projectRoot - Absolute path to the project root directory.
154
+ * @param _payload - SessionEnd payload (unused).
155
+ */
156
+ export async function handleWatchdogStop(
157
+ projectRoot: string,
158
+ _payload: SessionEndPayload,
159
+ ): Promise<void> {
160
+ try {
161
+ const timer = activeWatchdogs.get(projectRoot);
162
+ if (timer) {
163
+ clearInterval(timer);
164
+ activeWatchdogs.delete(projectRoot);
165
+ }
166
+ } catch {
167
+ // Never block session end on watchdog errors
168
+ }
169
+ }
170
+
171
+ // ---------------------------------------------------------------------------
172
+ // Auto-registration
173
+ // ---------------------------------------------------------------------------
174
+
175
+ hooks.register({
176
+ id: 'watchdog-session-start',
177
+ event: 'SessionStart',
178
+ handler: handleWatchdogStart,
179
+ priority: 50,
180
+ });
181
+
182
+ hooks.register({
183
+ id: 'watchdog-session-end',
184
+ event: 'SessionEnd',
185
+ handler: handleWatchdogStop,
186
+ priority: 50,
187
+ });
package/src/injection.ts CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { execFileSync } from 'node:child_process';
18
18
  import { existsSync, readFileSync } from 'node:fs';
19
- import { mkdir, rm, writeFile } from 'node:fs/promises';
19
+ import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
20
20
  import { homedir } from 'node:os';
21
21
  import { basename, join } from 'node:path';
22
22
  import { getAgentsHome, getCleoHome, getCleoTemplatesTildePath } from './paths.js';
@@ -68,6 +68,32 @@ async function removeStaleAgentInjection(projectRoot: string): Promise<boolean>
68
68
  return true;
69
69
  }
70
70
 
71
+ /**
72
+ * Strip hardcoded `<!-- gitnexus:start -->...<!-- gitnexus:end -->` blocks
73
+ * from AGENTS.md. These blocks are replaced by the `@.cleo/nexus-bridge.md`
74
+ * reference which contains auto-generated code intelligence content (T552).
75
+ *
76
+ * Also strips any other known vendor marker blocks using the same pattern
77
+ * (e.g. `<!-- gitnexus:start -->...<!-- gitnexus:end -->`).
78
+ *
79
+ * @param filePath - Absolute path to the file to strip
80
+ * @returns True if the file was modified, false otherwise
81
+ */
82
+ export async function stripGitNexusBlocks(filePath: string): Promise<boolean> {
83
+ if (!existsSync(filePath)) return false;
84
+ const content = await readFile(filePath, 'utf8');
85
+ // Strip <!-- gitnexus:start --> ... <!-- gitnexus:end --> blocks (case-insensitive markers)
86
+ const stripped = content.replace(
87
+ /\n?<!--\s*gitnexus:start\s*-->[\s\S]*?<!--\s*gitnexus:end\s*-->\n?/gi,
88
+ '',
89
+ );
90
+ if (stripped !== content) {
91
+ await writeFile(filePath, stripped, 'utf8');
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+
71
97
  // ── Ensure injection ─────────────────────────────────────────────────
72
98
 
73
99
  /**
@@ -78,7 +104,7 @@ async function removeStaleAgentInjection(projectRoot: string): Promise<boolean>
78
104
  *
79
105
  * Target architecture:
80
106
  * CLAUDE.md/GEMINI.md -> @AGENTS.md (via injectAll)
81
- * AGENTS.md -> @~/.agents/AGENTS.md + @.cleo/project-context.json + @.cleo/memory-bridge.md
107
+ * AGENTS.md -> @~/.agents/AGENTS.md + @.cleo/project-context.json + @.cleo/memory-bridge.md + @.cleo/nexus-bridge.md
82
108
  *
83
109
  * @task T4682
84
110
  */
@@ -114,6 +140,13 @@ export async function ensureInjection(projectRoot: string): Promise<ScaffoldResu
114
140
  actions.push('removed deprecated AGENT-INJECTION.md');
115
141
  }
116
142
 
143
+ // Step 0b: Strip hardcoded gitnexus blocks from AGENTS.md (T552)
144
+ // These are replaced by the @.cleo/nexus-bridge.md reference.
145
+ const removedGitNexus = await stripGitNexusBlocks(join(projectRoot, 'AGENTS.md'));
146
+ if (removedGitNexus) {
147
+ actions.push('removed hardcoded gitnexus block from AGENTS.md');
148
+ }
149
+
117
150
  // Step 1: Inject @AGENTS.md into all provider instruction files
118
151
  const injectionContent = buildInjectionContent({ references: ['@AGENTS.md'] });
119
152
  const results = await injectAll(providers, projectRoot, 'project', injectionContent);
@@ -140,6 +173,12 @@ export async function ensureInjection(projectRoot: string): Promise<ScaffoldResu
140
173
  agentsMdLines.push('@.cleo/memory-bridge.md');
141
174
  }
142
175
 
176
+ // Nexus bridge: auto-generated code intelligence summary (T552)
177
+ const nexusBridgePath = join(projectRoot, '.cleo', 'nexus-bridge.md');
178
+ if (existsSync(nexusBridgePath)) {
179
+ agentsMdLines.push('@.cleo/nexus-bridge.md');
180
+ }
181
+
143
182
  // Contributor project warning (ADR-029): inject dev-channel guidance when
144
183
  // this project IS the CLEO source repo, so agents use cleo-dev not @latest.
145
184
  const contributorBlock = buildContributorInjectionBlock(projectRoot);
package/src/internal.ts CHANGED
@@ -75,6 +75,19 @@ export type { HookEvent, ProviderHookEvent } from './hooks/provider-hooks.js';
75
75
  export { isProviderHookEvent } from './hooks/types.js';
76
76
  // Init (additional)
77
77
  export { isAutoInitEnabled } from './init.js';
78
+ export type {
79
+ AdaptiveValidationSuggestion,
80
+ GateFocusRecommendation,
81
+ StorePredictionOptions,
82
+ VerificationConfidenceScore,
83
+ } from './intelligence/adaptive-validation.js';
84
+ // Intelligence — adaptive validation (suggestGateFocus, scoreVerificationConfidence)
85
+ export {
86
+ predictAndStore,
87
+ scoreVerificationConfidence,
88
+ storePrediction,
89
+ suggestGateFocus,
90
+ } from './intelligence/adaptive-validation.js';
78
91
  export {
79
92
  analyzeChangeImpact,
80
93
  analyzeTaskImpact,
@@ -173,10 +186,13 @@ export { runBrainMaintenance } from './memory/brain-maintenance.js';
173
186
  export type { PurgeResult } from './memory/brain-purge.js';
174
187
  export { purgeBrainNoise } from './memory/brain-purge.js';
175
188
  export type {
189
+ BudgetedEntry,
190
+ BudgetedResult,
191
+ BudgetedRetrievalOptions,
176
192
  PopulateEmbeddingsOptions,
177
193
  PopulateEmbeddingsResult,
178
194
  } from './memory/brain-retrieval.js';
179
- export { populateEmbeddings } from './memory/brain-retrieval.js';
195
+ export { populateEmbeddings, retrieveWithBudget } from './memory/brain-retrieval.js';
180
196
  export { migrateClaudeMem } from './memory/claude-mem-migration.js';
181
197
  // Memory — engine-compat
182
198
  export {
@@ -437,6 +453,9 @@ export { createBackup, listBackups, restoreFromBackup } from './store/backup.js'
437
453
  // Backup portability — bundle packer (T311 / T347)
438
454
  export type { PackBundleInput, PackBundleResult } from './store/backup-pack.js';
439
455
  export { packBundle } from './store/backup-pack.js';
456
+ export type { BrainDataAccessor } from './store/brain-accessor.js';
457
+ // Brain accessor — for intelligence domain handler construction
458
+ export { getBrainAccessor } from './store/brain-accessor.js';
440
459
  export { getBrainDb, getBrainNativeDb } from './store/brain-sqlite.js';
441
460
  export type { LegacyCleanupResult, StrayNexusCleanupResult } from './store/cleanup-legacy.js';
442
461
  export {
@@ -867,7 +886,11 @@ export type {
867
886
  BrainTimelineNeighborRow,
868
887
  } from './memory/brain-row-types.js';
869
888
  // Memory (additional)
870
- export { generateContextAwareContent, writeMemoryBridge } from './memory/memory-bridge.js';
889
+ export {
890
+ generateContextAwareContent,
891
+ refreshMemoryBridge,
892
+ writeMemoryBridge,
893
+ } from './memory/memory-bridge.js';
871
894
  export type { SessionMemoryContext } from './memory/session-memory.js';
872
895
  export {
873
896
  buildSummarizationPrompt,
@@ -881,6 +904,12 @@ export {
881
904
  discoverRelated as nexusDiscoverRelated,
882
905
  searchAcrossProjects as nexusSearchAcrossProjects,
883
906
  } from './nexus/discover.js';
907
+ // Nexus — bridge (code intelligence summary for agents)
908
+ export {
909
+ generateNexusBridgeContent,
910
+ refreshNexusBridge,
911
+ writeNexusBridge,
912
+ } from './nexus/nexus-bridge.js';
884
913
  // Nexus — readRegistry (exported as nexusReadRegistry to avoid name clash with skills readRegistry)
885
914
  export { readRegistry as nexusReadRegistry } from './nexus/registry.js';
886
915
  // Nexus — transfer
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Brain Consolidator — contradiction detection for the CLEO BRAIN memory system.
3
+ *
4
+ * Implements heuristic contradiction detection based on keyword polarity flip.
5
+ * No LLM required — uses negation markers to identify entries that assert
6
+ * opposing claims about the same subject.
7
+ *
8
+ * When a contradiction is detected:
9
+ * 1. A 'contradicts' edge is created in brain_page_edges (both directions).
10
+ * 2. The lower-quality entry's qualityScore is reduced by 0.15.
11
+ *
12
+ * All operations are BEST-EFFORT — failures never crash the consolidator.
13
+ *
14
+ * @task T549 Wave 3-C
15
+ * @epic T549
16
+ */
17
+
18
+ import { getBrainDb, getBrainNativeDb } from '../store/brain-sqlite.js';
19
+ import { typedAll } from '../store/typed-query.js';
20
+
21
+ // ============================================================================
22
+ // Types
23
+ // ============================================================================
24
+
25
+ /** A detected contradiction between two memory entries. */
26
+ export interface ContradictionResult {
27
+ /** ID of the first entry in the contradiction pair. */
28
+ entryAId: string;
29
+ /** ID of the second entry in the contradiction pair. */
30
+ entryBId: string;
31
+ /** Which entry was considered the "contradicted" one (lower quality). */
32
+ contradictedId: string;
33
+ /** Table name where the entries live. */
34
+ table: string;
35
+ /** Shared keywords that connected the two entries. */
36
+ sharedKeywords: string[];
37
+ /** Negation markers found in one of the entries. */
38
+ negationMarkers: string[];
39
+ }
40
+
41
+ // ============================================================================
42
+ // Constants
43
+ // ============================================================================
44
+
45
+ /** Minimum number of shared keywords to consider two entries related. */
46
+ const MIN_SHARED_KEYWORDS = 3;
47
+
48
+ /**
49
+ * Negation markers that, when present in one entry but not the other,
50
+ * indicate a potential contradiction.
51
+ */
52
+ const NEGATION_MARKERS = [
53
+ 'not',
54
+ 'never',
55
+ 'deprecated',
56
+ 'removed',
57
+ 'replaced',
58
+ 'avoid',
59
+ 'no longer',
60
+ 'do not',
61
+ "don't",
62
+ 'disabled',
63
+ 'deleted',
64
+ 'dropped',
65
+ 'broken',
66
+ 'invalid',
67
+ 'obsolete',
68
+ 'reverted',
69
+ 'undone',
70
+ 'superseded',
71
+ ] as const;
72
+
73
+ /** Stop words excluded from keyword extraction (matches brain-lifecycle stop words). */
74
+ const STOP_WORDS = new Set([
75
+ 'the',
76
+ 'a',
77
+ 'an',
78
+ 'is',
79
+ 'are',
80
+ 'was',
81
+ 'were',
82
+ 'be',
83
+ 'been',
84
+ 'being',
85
+ 'have',
86
+ 'has',
87
+ 'had',
88
+ 'do',
89
+ 'does',
90
+ 'did',
91
+ 'will',
92
+ 'would',
93
+ 'could',
94
+ 'should',
95
+ 'may',
96
+ 'might',
97
+ 'shall',
98
+ 'can',
99
+ 'to',
100
+ 'of',
101
+ 'in',
102
+ 'for',
103
+ 'on',
104
+ 'with',
105
+ 'at',
106
+ 'by',
107
+ 'from',
108
+ 'as',
109
+ 'into',
110
+ 'through',
111
+ 'and',
112
+ 'but',
113
+ 'or',
114
+ 'nor',
115
+ 'so',
116
+ 'yet',
117
+ 'this',
118
+ 'that',
119
+ 'these',
120
+ 'those',
121
+ 'it',
122
+ 'its',
123
+ 'not',
124
+ 'no',
125
+ ]);
126
+
127
+ // ============================================================================
128
+ // Helpers
129
+ // ============================================================================
130
+
131
+ /**
132
+ * Extract significant keywords from text for overlap comparison.
133
+ * Filters stop words and tokens shorter than 4 characters.
134
+ */
135
+ function extractKeywords(text: string): Set<string> {
136
+ const words = text
137
+ .toLowerCase()
138
+ .replace(/[^a-z0-9\s\-_]/g, ' ')
139
+ .split(/\s+/);
140
+ const keywords = new Set<string>();
141
+ for (const w of words) {
142
+ if (w.length >= 4 && !STOP_WORDS.has(w)) {
143
+ keywords.add(w);
144
+ }
145
+ }
146
+ return keywords;
147
+ }
148
+
149
+ /**
150
+ * Find negation markers present in the text.
151
+ */
152
+ function findNegationMarkers(text: string): string[] {
153
+ const lower = text.toLowerCase();
154
+ return NEGATION_MARKERS.filter((marker) => lower.includes(marker));
155
+ }
156
+
157
+ /**
158
+ * Return the intersection of two keyword sets.
159
+ */
160
+ function keywordIntersection(a: Set<string>, b: Set<string>): string[] {
161
+ const result: string[] = [];
162
+ for (const w of a) {
163
+ if (b.has(w)) result.push(w);
164
+ }
165
+ return result;
166
+ }
167
+
168
+ // ============================================================================
169
+ // Row types for raw SQL queries
170
+ // ============================================================================
171
+
172
+ interface EntryRow {
173
+ id: string;
174
+ text: string;
175
+ quality_score: number | null;
176
+ }
177
+
178
+ // ============================================================================
179
+ // Main Export
180
+ // ============================================================================
181
+
182
+ /**
183
+ * Detect contradiction pairs across all verified memory entries.
184
+ *
185
+ * For each verified entry:
186
+ * 1. Find entries with >= MIN_SHARED_KEYWORDS shared keywords.
187
+ * 2. Check for negation markers in one but not the other.
188
+ * 3. If contradiction detected: create 'contradicts' graph edges.
189
+ * 4. Lower quality score of the contradicted (lower quality) entry by 0.15.
190
+ *
191
+ * Only considers entries where invalid_at IS NULL (currently valid).
192
+ * Short-circuits after 50 contradiction pairs to limit consolidation cost.
193
+ *
194
+ * @param projectRoot - Project root directory for brain.db resolution
195
+ * @returns List of contradiction pairs found
196
+ */
197
+ export async function detectContradictions(projectRoot: string): Promise<ContradictionResult[]> {
198
+ await getBrainDb(projectRoot);
199
+ const nativeDb = getBrainNativeDb();
200
+ if (!nativeDb) return [];
201
+
202
+ const results: ContradictionResult[] = [];
203
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
204
+
205
+ // Process each table that holds verified entries
206
+ const tables: Array<{ table: string; textCol: string }> = [
207
+ { table: 'brain_observations', textCol: 'narrative' },
208
+ { table: 'brain_learnings', textCol: 'insight' },
209
+ { table: 'brain_patterns', textCol: 'pattern' },
210
+ { table: 'brain_decisions', textCol: 'decision' },
211
+ ];
212
+
213
+ for (const { table, textCol } of tables) {
214
+ if (results.length >= 50) break;
215
+
216
+ let entries: EntryRow[] = [];
217
+ try {
218
+ // Only examine verified, valid entries for contradiction scanning
219
+ entries = typedAll<EntryRow>(
220
+ nativeDb.prepare(`
221
+ SELECT id, COALESCE(${textCol}, '') AS text, quality_score
222
+ FROM ${table}
223
+ WHERE invalid_at IS NULL
224
+ AND verified = 1
225
+ LIMIT 200
226
+ `),
227
+ );
228
+ } catch {
229
+ // Table or column may not exist — best-effort
230
+ continue;
231
+ }
232
+
233
+ if (entries.length < 2) continue;
234
+
235
+ // Extract keywords for all entries up front
236
+ const keywordMap = new Map<string, Set<string>>();
237
+ const negationMap = new Map<string, string[]>();
238
+ for (const entry of entries) {
239
+ keywordMap.set(entry.id, extractKeywords(entry.text));
240
+ negationMap.set(entry.id, findNegationMarkers(entry.text));
241
+ }
242
+
243
+ // Compare all pairs — O(n²) but capped at 200 entries (40k ops max)
244
+ for (let i = 0; i < entries.length; i++) {
245
+ if (results.length >= 50) break;
246
+ const entryA = entries[i]!;
247
+ const keywordsA = keywordMap.get(entryA.id)!;
248
+ const negationsA = negationMap.get(entryA.id)!;
249
+
250
+ for (let j = i + 1; j < entries.length; j++) {
251
+ if (results.length >= 50) break;
252
+ const entryB = entries[j]!;
253
+ const keywordsB = keywordMap.get(entryB.id)!;
254
+ const negationsB = negationMap.get(entryB.id)!;
255
+
256
+ // Step 1: Need sufficient shared keywords to be "about the same thing"
257
+ const shared = keywordIntersection(keywordsA, keywordsB);
258
+ if (shared.length < MIN_SHARED_KEYWORDS) continue;
259
+
260
+ // Step 2: Check for negation polarity flip — one entry negates the other
261
+ // A contradiction occurs when one entry has negation markers that the other lacks
262
+ const negationsOnlyInA = negationsA.filter((m) => !negationsB.includes(m));
263
+ const negationsOnlyInB = negationsB.filter((m) => !negationsA.includes(m));
264
+ const negationFlip = negationsOnlyInA.length > 0 || negationsOnlyInB.length > 0;
265
+
266
+ if (!negationFlip) continue;
267
+
268
+ // Found a contradiction pair
269
+ const negMarkers = [...negationsOnlyInA, ...negationsOnlyInB];
270
+
271
+ // The contradicted entry is the lower-quality one
272
+ const qualA = entryA.quality_score ?? 0.5;
273
+ const qualB = entryB.quality_score ?? 0.5;
274
+ const contradictedId = qualA <= qualB ? entryA.id : entryB.id;
275
+ const winningId = contradictedId === entryA.id ? entryB.id : entryA.id;
276
+
277
+ results.push({
278
+ entryAId: entryA.id,
279
+ entryBId: entryB.id,
280
+ contradictedId,
281
+ table,
282
+ sharedKeywords: shared.slice(0, 10),
283
+ negationMarkers: negMarkers.slice(0, 5),
284
+ });
285
+
286
+ // Step 3: Create 'contradicts' graph edges (best-effort)
287
+ const nodeA = buildNodeId(table, entryA.id);
288
+ const nodeB = buildNodeId(table, entryB.id);
289
+
290
+ try {
291
+ nativeDb
292
+ .prepare(`
293
+ INSERT OR IGNORE INTO brain_page_edges
294
+ (from_id, to_id, edge_type, weight, provenance, created_at)
295
+ VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)
296
+ `)
297
+ .run(nodeA, nodeB, now);
298
+ nativeDb
299
+ .prepare(`
300
+ INSERT OR IGNORE INTO brain_page_edges
301
+ (from_id, to_id, edge_type, weight, provenance, created_at)
302
+ VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)
303
+ `)
304
+ .run(nodeB, nodeA, now);
305
+ } catch {
306
+ /* graph population is best-effort */
307
+ }
308
+
309
+ // Step 4: Lower quality of the contradicted entry by 0.15
310
+ try {
311
+ nativeDb
312
+ .prepare(`
313
+ UPDATE ${table}
314
+ SET quality_score = MAX(0.0, COALESCE(quality_score, 0.5) - 0.15),
315
+ updated_at = ?
316
+ WHERE id = ?
317
+ `)
318
+ .run(now, contradictedId);
319
+ // Also ensure the winning entry's quality is noted
320
+ void winningId; // used above for clarity
321
+ } catch {
322
+ /* best-effort */
323
+ }
324
+ }
325
+ }
326
+ }
327
+
328
+ return results;
329
+ }
330
+
331
+ /**
332
+ * Build the graph node ID for a given table + entry ID combination.
333
+ * Mirrors the convention used in graph-auto-populate.ts.
334
+ */
335
+ function buildNodeId(table: string, entryId: string): string {
336
+ const typeMap: Record<string, string> = {
337
+ brain_observations: 'observation',
338
+ brain_learnings: 'learning',
339
+ brain_patterns: 'pattern',
340
+ brain_decisions: 'decision',
341
+ };
342
+ const type = typeMap[table] ?? 'entry';
343
+ return `${type}:${entryId}`;
344
+ }