@cleocode/core 2026.4.31 → 2026.4.36

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 (1024) 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.d.ts.map +1 -1
  128. package/dist/config.js +407 -0
  129. package/dist/config.js.map +1 -0
  130. package/dist/constants.js +18 -0
  131. package/dist/constants.js.map +1 -0
  132. package/dist/context/index.js +137 -0
  133. package/dist/context/index.js.map +1 -0
  134. package/dist/crypto/credentials.js +219 -0
  135. package/dist/crypto/credentials.js.map +1 -0
  136. package/dist/discovery.js +182 -0
  137. package/dist/discovery.js.map +1 -0
  138. package/dist/engine-result.js +12 -0
  139. package/dist/engine-result.js.map +1 -0
  140. package/dist/error-catalog.js +404 -0
  141. package/dist/error-catalog.js.map +1 -0
  142. package/dist/error-registry.js +393 -0
  143. package/dist/error-registry.js.map +1 -0
  144. package/dist/errors.js +173 -0
  145. package/dist/errors.js.map +1 -0
  146. package/dist/hooks/handlers/agent-hooks.js +106 -0
  147. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  148. package/dist/hooks/handlers/conduit-hooks.d.ts +72 -0
  149. package/dist/hooks/handlers/conduit-hooks.d.ts.map +1 -0
  150. package/dist/hooks/handlers/conduit-hooks.js +229 -0
  151. package/dist/hooks/handlers/conduit-hooks.js.map +1 -0
  152. package/dist/hooks/handlers/context-hooks.js +111 -0
  153. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  154. package/dist/hooks/handlers/error-hooks.js +52 -0
  155. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  156. package/dist/hooks/handlers/file-hooks.js +104 -0
  157. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  158. package/dist/hooks/handlers/handler-helpers.js +61 -0
  159. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  160. package/dist/hooks/handlers/index.d.ts +6 -0
  161. package/dist/hooks/handlers/index.d.ts.map +1 -1
  162. package/dist/hooks/handlers/index.js +37 -0
  163. package/dist/hooks/handlers/index.js.map +1 -0
  164. package/dist/hooks/handlers/intelligence-hooks.d.ts +26 -0
  165. package/dist/hooks/handlers/intelligence-hooks.d.ts.map +1 -0
  166. package/dist/hooks/handlers/intelligence-hooks.js +69 -0
  167. package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
  168. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  169. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  170. package/dist/hooks/handlers/notification-hooks.js +62 -0
  171. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  172. package/dist/hooks/handlers/session-hooks.d.ts +30 -0
  173. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  174. package/dist/hooks/handlers/session-hooks.js +190 -0
  175. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  176. package/dist/hooks/handlers/task-hooks.d.ts +2 -0
  177. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  178. package/dist/hooks/handlers/task-hooks.js +79 -0
  179. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  180. package/dist/hooks/handlers/watchdog-hooks.d.ts +49 -0
  181. package/dist/hooks/handlers/watchdog-hooks.d.ts.map +1 -0
  182. package/dist/hooks/handlers/watchdog-hooks.js +162 -0
  183. package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
  184. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  185. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  186. package/dist/hooks/index.js +13 -0
  187. package/dist/hooks/index.js.map +1 -0
  188. package/dist/hooks/payload-schemas.js +220 -0
  189. package/dist/hooks/payload-schemas.js.map +1 -0
  190. package/dist/hooks/provider-hooks.js +66 -0
  191. package/dist/hooks/provider-hooks.js.map +1 -0
  192. package/dist/hooks/registry.js +229 -0
  193. package/dist/hooks/registry.js.map +1 -0
  194. package/dist/hooks/types.js +66 -0
  195. package/dist/hooks/types.js.map +1 -0
  196. package/dist/hooks.js +136 -0
  197. package/dist/hooks.js.map +1 -0
  198. package/dist/index.js +56736 -47002
  199. package/dist/index.js.map +4 -4
  200. package/dist/init.js +920 -0
  201. package/dist/init.js.map +1 -0
  202. package/dist/inject/index.js +82 -0
  203. package/dist/inject/index.js.map +1 -0
  204. package/dist/injection.d.ts +13 -1
  205. package/dist/injection.d.ts.map +1 -1
  206. package/dist/injection.js +377 -0
  207. package/dist/injection.js.map +1 -0
  208. package/dist/intelligence/adaptive-validation.js +497 -0
  209. package/dist/intelligence/adaptive-validation.js.map +1 -0
  210. package/dist/intelligence/impact.js +675 -0
  211. package/dist/intelligence/impact.js.map +1 -0
  212. package/dist/intelligence/index.js +22 -0
  213. package/dist/intelligence/index.js.map +1 -0
  214. package/dist/intelligence/patterns.js +492 -0
  215. package/dist/intelligence/patterns.js.map +1 -0
  216. package/dist/intelligence/prediction.js +499 -0
  217. package/dist/intelligence/prediction.js.map +1 -0
  218. package/dist/intelligence/types.js +13 -0
  219. package/dist/intelligence/types.js.map +1 -0
  220. package/dist/internal.d.ts +10 -3
  221. package/dist/internal.d.ts.map +1 -1
  222. package/dist/internal.js +321 -0
  223. package/dist/internal.js.map +1 -0
  224. package/dist/issue/create.js +121 -0
  225. package/dist/issue/create.js.map +1 -0
  226. package/dist/issue/diagnostics.js +59 -0
  227. package/dist/issue/diagnostics.js.map +1 -0
  228. package/dist/issue/index.js +10 -0
  229. package/dist/issue/index.js.map +1 -0
  230. package/dist/issue/template-parser.js +267 -0
  231. package/dist/issue/template-parser.js.map +1 -0
  232. package/dist/json-schema-validator.js +76 -0
  233. package/dist/json-schema-validator.js.map +1 -0
  234. package/dist/lib/index.js +11 -0
  235. package/dist/lib/index.js.map +1 -0
  236. package/dist/lib/retry.js +152 -0
  237. package/dist/lib/retry.js.map +1 -0
  238. package/dist/lib/tree-sitter-languages.js +75 -0
  239. package/dist/lib/tree-sitter-languages.js.map +1 -0
  240. package/dist/lifecycle/chain-composition.js +152 -0
  241. package/dist/lifecycle/chain-composition.js.map +1 -0
  242. package/dist/lifecycle/chain-store.js +246 -0
  243. package/dist/lifecycle/chain-store.js.map +1 -0
  244. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  245. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  246. package/dist/lifecycle/default-chain.js +176 -0
  247. package/dist/lifecycle/default-chain.js.map +1 -0
  248. package/dist/lifecycle/evidence.js +180 -0
  249. package/dist/lifecycle/evidence.js.map +1 -0
  250. package/dist/lifecycle/frontmatter.js +363 -0
  251. package/dist/lifecycle/frontmatter.js.map +1 -0
  252. package/dist/lifecycle/index.js +756 -0
  253. package/dist/lifecycle/index.js.map +1 -0
  254. package/dist/lifecycle/pipeline.js +656 -0
  255. package/dist/lifecycle/pipeline.js.map +1 -0
  256. package/dist/lifecycle/rcasd-index.js +326 -0
  257. package/dist/lifecycle/rcasd-index.js.map +1 -0
  258. package/dist/lifecycle/rcasd-paths.js +220 -0
  259. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  260. package/dist/lifecycle/resume.js +864 -0
  261. package/dist/lifecycle/resume.js.map +1 -0
  262. package/dist/lifecycle/stage-artifacts.js +94 -0
  263. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  264. package/dist/lifecycle/stage-guidance.js +234 -0
  265. package/dist/lifecycle/stage-guidance.js.map +1 -0
  266. package/dist/lifecycle/stages.js +534 -0
  267. package/dist/lifecycle/stages.js.map +1 -0
  268. package/dist/lifecycle/state-machine.js +516 -0
  269. package/dist/lifecycle/state-machine.js.map +1 -0
  270. package/dist/lifecycle/tessera-engine.js +249 -0
  271. package/dist/lifecycle/tessera-engine.js.map +1 -0
  272. package/dist/logger.js +140 -0
  273. package/dist/logger.js.map +1 -0
  274. package/dist/memory/anthropic-key-resolver.d.ts +35 -0
  275. package/dist/memory/anthropic-key-resolver.d.ts.map +1 -0
  276. package/dist/memory/anthropic-key-resolver.js +105 -0
  277. package/dist/memory/anthropic-key-resolver.js.map +1 -0
  278. package/dist/memory/auto-extract.d.ts +38 -42
  279. package/dist/memory/auto-extract.d.ts.map +1 -1
  280. package/dist/memory/auto-extract.js +77 -0
  281. package/dist/memory/auto-extract.js.map +1 -0
  282. package/dist/memory/brain-backfill.js +389 -0
  283. package/dist/memory/brain-backfill.js.map +1 -0
  284. package/dist/memory/brain-consolidator.d.ts +48 -0
  285. package/dist/memory/brain-consolidator.d.ts.map +1 -0
  286. package/dist/memory/brain-consolidator.js +294 -0
  287. package/dist/memory/brain-consolidator.js.map +1 -0
  288. package/dist/memory/brain-embedding.js +66 -0
  289. package/dist/memory/brain-embedding.js.map +1 -0
  290. package/dist/memory/brain-lifecycle.d.ts +83 -2
  291. package/dist/memory/brain-lifecycle.d.ts.map +1 -1
  292. package/dist/memory/brain-lifecycle.js +807 -0
  293. package/dist/memory/brain-lifecycle.js.map +1 -0
  294. package/dist/memory/brain-links.js +161 -0
  295. package/dist/memory/brain-links.js.map +1 -0
  296. package/dist/memory/brain-maintenance.js +114 -0
  297. package/dist/memory/brain-maintenance.js.map +1 -0
  298. package/dist/memory/brain-migration.js +149 -0
  299. package/dist/memory/brain-migration.js.map +1 -0
  300. package/dist/memory/brain-purge.js +243 -0
  301. package/dist/memory/brain-purge.js.map +1 -0
  302. package/dist/memory/brain-reasoning.js +215 -0
  303. package/dist/memory/brain-reasoning.js.map +1 -0
  304. package/dist/memory/brain-retrieval.d.ts +75 -1
  305. package/dist/memory/brain-retrieval.d.ts.map +1 -1
  306. package/dist/memory/brain-retrieval.js +1044 -0
  307. package/dist/memory/brain-retrieval.js.map +1 -0
  308. package/dist/memory/brain-row-types.js +10 -0
  309. package/dist/memory/brain-row-types.js.map +1 -0
  310. package/dist/memory/brain-search.d.ts +82 -15
  311. package/dist/memory/brain-search.d.ts.map +1 -1
  312. package/dist/memory/brain-search.js +613 -0
  313. package/dist/memory/brain-search.js.map +1 -0
  314. package/dist/memory/brain-similarity.js +145 -0
  315. package/dist/memory/brain-similarity.js.map +1 -0
  316. package/dist/memory/claude-mem-migration.js +277 -0
  317. package/dist/memory/claude-mem-migration.js.map +1 -0
  318. package/dist/memory/decisions.d.ts.map +1 -1
  319. package/dist/memory/decisions.js +218 -0
  320. package/dist/memory/decisions.js.map +1 -0
  321. package/dist/memory/embedding-local.js +102 -0
  322. package/dist/memory/embedding-local.js.map +1 -0
  323. package/dist/memory/embedding-queue.js +271 -0
  324. package/dist/memory/embedding-queue.js.map +1 -0
  325. package/dist/memory/embedding-worker.js +58 -0
  326. package/dist/memory/embedding-worker.js.map +1 -0
  327. package/dist/memory/engine-compat.d.ts +16 -1
  328. package/dist/memory/engine-compat.d.ts.map +1 -1
  329. package/dist/memory/engine-compat.js +1561 -0
  330. package/dist/memory/engine-compat.js.map +1 -0
  331. package/dist/memory/extraction-gate.d.ts +139 -0
  332. package/dist/memory/extraction-gate.d.ts.map +1 -0
  333. package/dist/memory/extraction-gate.js +459 -0
  334. package/dist/memory/extraction-gate.js.map +1 -0
  335. package/dist/memory/graph-auto-populate.js +148 -0
  336. package/dist/memory/graph-auto-populate.js.map +1 -0
  337. package/dist/memory/graph-queries.js +290 -0
  338. package/dist/memory/graph-queries.js.map +1 -0
  339. package/dist/memory/index.d.ts +2 -0
  340. package/dist/memory/index.d.ts.map +1 -1
  341. package/dist/memory/index.js +1144 -0
  342. package/dist/memory/index.js.map +1 -0
  343. package/dist/memory/learnings.d.ts +14 -0
  344. package/dist/memory/learnings.d.ts.map +1 -1
  345. package/dist/memory/learnings.js +179 -0
  346. package/dist/memory/learnings.js.map +1 -0
  347. package/dist/memory/llm-extraction.d.ts +107 -0
  348. package/dist/memory/llm-extraction.d.ts.map +1 -0
  349. package/dist/memory/llm-extraction.js +425 -0
  350. package/dist/memory/llm-extraction.js.map +1 -0
  351. package/dist/memory/memory-bridge.js +382 -0
  352. package/dist/memory/memory-bridge.js.map +1 -0
  353. package/dist/memory/mental-model-injection.js +61 -0
  354. package/dist/memory/mental-model-injection.js.map +1 -0
  355. package/dist/memory/mental-model-queue.js +211 -0
  356. package/dist/memory/mental-model-queue.js.map +1 -0
  357. package/dist/memory/observer-reflector.d.ts +157 -0
  358. package/dist/memory/observer-reflector.d.ts.map +1 -0
  359. package/dist/memory/observer-reflector.js +626 -0
  360. package/dist/memory/observer-reflector.js.map +1 -0
  361. package/dist/memory/patterns.d.ts +24 -4
  362. package/dist/memory/patterns.d.ts.map +1 -1
  363. package/dist/memory/patterns.js +174 -0
  364. package/dist/memory/patterns.js.map +1 -0
  365. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  366. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  367. package/dist/memory/quality-scoring.d.ts +42 -5
  368. package/dist/memory/quality-scoring.d.ts.map +1 -1
  369. package/dist/memory/quality-scoring.js +182 -0
  370. package/dist/memory/quality-scoring.js.map +1 -0
  371. package/dist/memory/session-memory.js +331 -0
  372. package/dist/memory/session-memory.js.map +1 -0
  373. package/dist/metrics/ab-test.js +260 -0
  374. package/dist/metrics/ab-test.js.map +1 -0
  375. package/dist/metrics/aggregation.js +363 -0
  376. package/dist/metrics/aggregation.js.map +1 -0
  377. package/dist/metrics/common.js +64 -0
  378. package/dist/metrics/common.js.map +1 -0
  379. package/dist/metrics/enums.js +78 -0
  380. package/dist/metrics/enums.js.map +1 -0
  381. package/dist/metrics/index.js +19 -0
  382. package/dist/metrics/index.js.map +1 -0
  383. package/dist/metrics/model-provider-registry.js +88 -0
  384. package/dist/metrics/model-provider-registry.js.map +1 -0
  385. package/dist/metrics/otel-integration.js +263 -0
  386. package/dist/metrics/otel-integration.js.map +1 -0
  387. package/dist/metrics/provider-detection.js +103 -0
  388. package/dist/metrics/provider-detection.js.map +1 -0
  389. package/dist/metrics/token-estimation.js +253 -0
  390. package/dist/metrics/token-estimation.js.map +1 -0
  391. package/dist/metrics/token-service.js +450 -0
  392. package/dist/metrics/token-service.js.map +1 -0
  393. package/dist/migration/agent-outputs.js +316 -0
  394. package/dist/migration/agent-outputs.js.map +1 -0
  395. package/dist/migration/checksum.js +92 -0
  396. package/dist/migration/checksum.js.map +1 -0
  397. package/dist/migration/index.js +282 -0
  398. package/dist/migration/index.js.map +1 -0
  399. package/dist/migration/logger.js +360 -0
  400. package/dist/migration/logger.js.map +1 -0
  401. package/dist/migration/preflight.js +9 -0
  402. package/dist/migration/preflight.js.map +1 -0
  403. package/dist/migration/state.js +421 -0
  404. package/dist/migration/state.js.map +1 -0
  405. package/dist/migration/validate.js +241 -0
  406. package/dist/migration/validate.js.map +1 -0
  407. package/dist/mvi-helpers.js +73 -0
  408. package/dist/mvi-helpers.js.map +1 -0
  409. package/dist/nexus/deps.js +375 -0
  410. package/dist/nexus/deps.js.map +1 -0
  411. package/dist/nexus/discover.js +288 -0
  412. package/dist/nexus/discover.js.map +1 -0
  413. package/dist/nexus/hash.js +10 -0
  414. package/dist/nexus/hash.js.map +1 -0
  415. package/dist/nexus/index.js +40 -0
  416. package/dist/nexus/index.js.map +1 -0
  417. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  418. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  419. package/dist/nexus/nexus-bridge.d.ts +51 -0
  420. package/dist/nexus/nexus-bridge.d.ts.map +1 -0
  421. package/dist/nexus/nexus-bridge.js +321 -0
  422. package/dist/nexus/nexus-bridge.js.map +1 -0
  423. package/dist/nexus/permissions.js +105 -0
  424. package/dist/nexus/permissions.js.map +1 -0
  425. package/dist/nexus/query.js +175 -0
  426. package/dist/nexus/query.js.map +1 -0
  427. package/dist/nexus/registry.js +584 -0
  428. package/dist/nexus/registry.js.map +1 -0
  429. package/dist/nexus/sharing/index.js +288 -0
  430. package/dist/nexus/sharing/index.js.map +1 -0
  431. package/dist/nexus/transfer-types.js +8 -0
  432. package/dist/nexus/transfer-types.js.map +1 -0
  433. package/dist/nexus/transfer.js +271 -0
  434. package/dist/nexus/transfer.js.map +1 -0
  435. package/dist/nexus/workspace.js +355 -0
  436. package/dist/nexus/workspace.js.map +1 -0
  437. package/dist/observability/index.js +103 -0
  438. package/dist/observability/index.js.map +1 -0
  439. package/dist/observability/log-filter.js +63 -0
  440. package/dist/observability/log-filter.js.map +1 -0
  441. package/dist/observability/log-parser.js +99 -0
  442. package/dist/observability/log-parser.js.map +1 -0
  443. package/dist/observability/log-reader.js +139 -0
  444. package/dist/observability/log-reader.js.map +1 -0
  445. package/dist/observability/types.js +19 -0
  446. package/dist/observability/types.js.map +1 -0
  447. package/dist/orchestration/analyze.js +107 -0
  448. package/dist/orchestration/analyze.js.map +1 -0
  449. package/dist/orchestration/bootstrap.js +132 -0
  450. package/dist/orchestration/bootstrap.js.map +1 -0
  451. package/dist/orchestration/context.js +56 -0
  452. package/dist/orchestration/context.js.map +1 -0
  453. package/dist/orchestration/critical-path.js +100 -0
  454. package/dist/orchestration/critical-path.js.map +1 -0
  455. package/dist/orchestration/hierarchy.js +183 -0
  456. package/dist/orchestration/hierarchy.js.map +1 -0
  457. package/dist/orchestration/index.js +287 -0
  458. package/dist/orchestration/index.js.map +1 -0
  459. package/dist/orchestration/parallel.js +89 -0
  460. package/dist/orchestration/parallel.js.map +1 -0
  461. package/dist/orchestration/protocol-validators.js +815 -0
  462. package/dist/orchestration/protocol-validators.js.map +1 -0
  463. package/dist/orchestration/skill-ops.js +98 -0
  464. package/dist/orchestration/skill-ops.js.map +1 -0
  465. package/dist/orchestration/status.js +107 -0
  466. package/dist/orchestration/status.js.map +1 -0
  467. package/dist/orchestration/unblock.js +103 -0
  468. package/dist/orchestration/unblock.js.map +1 -0
  469. package/dist/orchestration/validate-spawn.js +67 -0
  470. package/dist/orchestration/validate-spawn.js.map +1 -0
  471. package/dist/orchestration/waves.js +86 -0
  472. package/dist/orchestration/waves.js.map +1 -0
  473. package/dist/otel/index.js +163 -0
  474. package/dist/otel/index.js.map +1 -0
  475. package/dist/output.js +164 -0
  476. package/dist/output.js.map +1 -0
  477. package/dist/pagination.js +64 -0
  478. package/dist/pagination.js.map +1 -0
  479. package/dist/paths.js +882 -0
  480. package/dist/paths.js.map +1 -0
  481. package/dist/phases/deps.js +372 -0
  482. package/dist/phases/deps.js.map +1 -0
  483. package/dist/phases/index.js +349 -0
  484. package/dist/phases/index.js.map +1 -0
  485. package/dist/pipeline/index.js +10 -0
  486. package/dist/pipeline/index.js.map +1 -0
  487. package/dist/pipeline/phase.js +45 -0
  488. package/dist/pipeline/phase.js.map +1 -0
  489. package/dist/platform.js +211 -0
  490. package/dist/platform.js.map +1 -0
  491. package/dist/project-info.js +84 -0
  492. package/dist/project-info.js.map +1 -0
  493. package/dist/reconciliation/index.js +10 -0
  494. package/dist/reconciliation/index.js.map +1 -0
  495. package/dist/reconciliation/link-store.js +175 -0
  496. package/dist/reconciliation/link-store.js.map +1 -0
  497. package/dist/reconciliation/reconciliation-engine.js +298 -0
  498. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  499. package/dist/release/artifacts.js +427 -0
  500. package/dist/release/artifacts.js.map +1 -0
  501. package/dist/release/changelog-writer.js +151 -0
  502. package/dist/release/changelog-writer.js.map +1 -0
  503. package/dist/release/channel.js +144 -0
  504. package/dist/release/channel.js.map +1 -0
  505. package/dist/release/ci.js +166 -0
  506. package/dist/release/ci.js.map +1 -0
  507. package/dist/release/github-pr.js +225 -0
  508. package/dist/release/github-pr.js.map +1 -0
  509. package/dist/release/guards.js +116 -0
  510. package/dist/release/guards.js.map +1 -0
  511. package/dist/release/index.js +22 -0
  512. package/dist/release/index.js.map +1 -0
  513. package/dist/release/release-config.js +158 -0
  514. package/dist/release/release-config.js.map +1 -0
  515. package/dist/release/release-manifest.js +1019 -0
  516. package/dist/release/release-manifest.js.map +1 -0
  517. package/dist/release/version-bump.js +255 -0
  518. package/dist/release/version-bump.js.map +1 -0
  519. package/dist/remote/index.js +257 -0
  520. package/dist/remote/index.js.map +1 -0
  521. package/dist/repair.js +130 -0
  522. package/dist/repair.js.map +1 -0
  523. package/dist/research/index.js +2 -0
  524. package/dist/research/index.js.map +1 -0
  525. package/dist/roadmap/index.js +59 -0
  526. package/dist/roadmap/index.js.map +1 -0
  527. package/dist/routing/capability-matrix.js +1556 -0
  528. package/dist/routing/capability-matrix.js.map +1 -0
  529. package/dist/routing/index.js +9 -0
  530. package/dist/routing/index.js.map +1 -0
  531. package/dist/scaffold.d.ts +18 -0
  532. package/dist/scaffold.d.ts.map +1 -1
  533. package/dist/scaffold.js +1798 -0
  534. package/dist/scaffold.js.map +1 -0
  535. package/dist/schema-management.js +295 -0
  536. package/dist/schema-management.js.map +1 -0
  537. package/dist/security/index.js +9 -0
  538. package/dist/security/index.js.map +1 -0
  539. package/dist/security/input-sanitization.js +326 -0
  540. package/dist/security/input-sanitization.js.map +1 -0
  541. package/dist/sequence/index.js +295 -0
  542. package/dist/sequence/index.js.map +1 -0
  543. package/dist/sessions/assumptions.js +54 -0
  544. package/dist/sessions/assumptions.js.map +1 -0
  545. package/dist/sessions/briefing.js +377 -0
  546. package/dist/sessions/briefing.js.map +1 -0
  547. package/dist/sessions/context-alert.js +222 -0
  548. package/dist/sessions/context-alert.js.map +1 -0
  549. package/dist/sessions/context-inject.js +61 -0
  550. package/dist/sessions/context-inject.js.map +1 -0
  551. package/dist/sessions/context-monitor.js +98 -0
  552. package/dist/sessions/context-monitor.js.map +1 -0
  553. package/dist/sessions/decisions.js +65 -0
  554. package/dist/sessions/decisions.js.map +1 -0
  555. package/dist/sessions/find.js +65 -0
  556. package/dist/sessions/find.js.map +1 -0
  557. package/dist/sessions/handoff.js +328 -0
  558. package/dist/sessions/handoff.js.map +1 -0
  559. package/dist/sessions/hitl-warnings.js +254 -0
  560. package/dist/sessions/hitl-warnings.js.map +1 -0
  561. package/dist/sessions/index.js +327 -0
  562. package/dist/sessions/index.js.map +1 -0
  563. package/dist/sessions/session-archive.js +40 -0
  564. package/dist/sessions/session-archive.js.map +1 -0
  565. package/dist/sessions/session-cleanup.js +59 -0
  566. package/dist/sessions/session-cleanup.js.map +1 -0
  567. package/dist/sessions/session-drift.js +134 -0
  568. package/dist/sessions/session-drift.js.map +1 -0
  569. package/dist/sessions/session-enforcement.js +144 -0
  570. package/dist/sessions/session-enforcement.js.map +1 -0
  571. package/dist/sessions/session-grade.js +253 -0
  572. package/dist/sessions/session-grade.js.map +1 -0
  573. package/dist/sessions/session-history.js +42 -0
  574. package/dist/sessions/session-history.js.map +1 -0
  575. package/dist/sessions/session-id.js +81 -0
  576. package/dist/sessions/session-id.js.map +1 -0
  577. package/dist/sessions/session-memory-bridge.js +30 -0
  578. package/dist/sessions/session-memory-bridge.js.map +1 -0
  579. package/dist/sessions/session-show.js +24 -0
  580. package/dist/sessions/session-show.js.map +1 -0
  581. package/dist/sessions/session-stats.js +69 -0
  582. package/dist/sessions/session-stats.js.map +1 -0
  583. package/dist/sessions/session-suspend.js +39 -0
  584. package/dist/sessions/session-suspend.js.map +1 -0
  585. package/dist/sessions/session-switch.js +51 -0
  586. package/dist/sessions/session-switch.js.map +1 -0
  587. package/dist/sessions/session-view.js +76 -0
  588. package/dist/sessions/session-view.js.map +1 -0
  589. package/dist/sessions/snapshot.js +213 -0
  590. package/dist/sessions/snapshot.js.map +1 -0
  591. package/dist/sessions/statusline-setup.js +85 -0
  592. package/dist/sessions/statusline-setup.js.map +1 -0
  593. package/dist/sessions/types.js +8 -0
  594. package/dist/sessions/types.js.map +1 -0
  595. package/dist/skills/agents/config.js +94 -0
  596. package/dist/skills/agents/config.js.map +1 -0
  597. package/dist/skills/agents/install.js +116 -0
  598. package/dist/skills/agents/install.js.map +1 -0
  599. package/dist/skills/agents/registry.js +161 -0
  600. package/dist/skills/agents/registry.js.map +1 -0
  601. package/dist/skills/discovery.js +333 -0
  602. package/dist/skills/discovery.js.map +1 -0
  603. package/dist/skills/dispatch.js +347 -0
  604. package/dist/skills/dispatch.js.map +1 -0
  605. package/dist/skills/dynamic-skill-generator.js +87 -0
  606. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  607. package/dist/skills/index.js +44 -0
  608. package/dist/skills/index.js.map +1 -0
  609. package/dist/skills/injection/subagent.js +195 -0
  610. package/dist/skills/injection/subagent.js.map +1 -0
  611. package/dist/skills/injection/token.js +260 -0
  612. package/dist/skills/injection/token.js.map +1 -0
  613. package/dist/skills/install.js +40 -0
  614. package/dist/skills/install.js.map +1 -0
  615. package/dist/skills/manifests/contribution.js +175 -0
  616. package/dist/skills/manifests/contribution.js.map +1 -0
  617. package/dist/skills/manifests/research.js +281 -0
  618. package/dist/skills/manifests/research.js.map +1 -0
  619. package/dist/skills/manifests/resolver.js +146 -0
  620. package/dist/skills/manifests/resolver.js.map +1 -0
  621. package/dist/skills/marketplace.js +90 -0
  622. package/dist/skills/marketplace.js.map +1 -0
  623. package/dist/skills/orchestrator/spawn.js +178 -0
  624. package/dist/skills/orchestrator/spawn.js.map +1 -0
  625. package/dist/skills/orchestrator/startup.js +451 -0
  626. package/dist/skills/orchestrator/startup.js.map +1 -0
  627. package/dist/skills/orchestrator/validator.js +301 -0
  628. package/dist/skills/orchestrator/validator.js.map +1 -0
  629. package/dist/skills/precedence-integration.js +73 -0
  630. package/dist/skills/precedence-integration.js.map +1 -0
  631. package/dist/skills/precedence-types.js +16 -0
  632. package/dist/skills/precedence-types.js.map +1 -0
  633. package/dist/skills/routing-table.js +63 -0
  634. package/dist/skills/routing-table.js.map +1 -0
  635. package/dist/skills/skill-paths.js +217 -0
  636. package/dist/skills/skill-paths.js.map +1 -0
  637. package/dist/skills/test-utility.js +55 -0
  638. package/dist/skills/test-utility.js.map +1 -0
  639. package/dist/skills/types.js +118 -0
  640. package/dist/skills/types.js.map +1 -0
  641. package/dist/skills/validation.js +183 -0
  642. package/dist/skills/validation.js.map +1 -0
  643. package/dist/skills/version.js +57 -0
  644. package/dist/skills/version.js.map +1 -0
  645. package/dist/snapshot/index.js +188 -0
  646. package/dist/snapshot/index.js.map +1 -0
  647. package/dist/spawn/adapter-registry.js +246 -0
  648. package/dist/spawn/adapter-registry.js.map +1 -0
  649. package/dist/spawn/index.js +10 -0
  650. package/dist/spawn/index.js.map +1 -0
  651. package/dist/stats/index.d.ts.map +1 -1
  652. package/dist/stats/index.js +350 -0
  653. package/dist/stats/index.js.map +1 -0
  654. package/dist/stats/workflow-telemetry.js +400 -0
  655. package/dist/stats/workflow-telemetry.js.map +1 -0
  656. package/dist/sticky/archive.js +47 -0
  657. package/dist/sticky/archive.js.map +1 -0
  658. package/dist/sticky/convert.js +235 -0
  659. package/dist/sticky/convert.js.map +1 -0
  660. package/dist/sticky/create.js +48 -0
  661. package/dist/sticky/create.js.map +1 -0
  662. package/dist/sticky/id.js +35 -0
  663. package/dist/sticky/id.js.map +1 -0
  664. package/dist/sticky/index.js +16 -0
  665. package/dist/sticky/index.js.map +1 -0
  666. package/dist/sticky/list.js +57 -0
  667. package/dist/sticky/list.js.map +1 -0
  668. package/dist/sticky/purge.js +45 -0
  669. package/dist/sticky/purge.js.map +1 -0
  670. package/dist/sticky/show.js +42 -0
  671. package/dist/sticky/show.js.map +1 -0
  672. package/dist/sticky/types.js +10 -0
  673. package/dist/sticky/types.js.map +1 -0
  674. package/dist/store/agent-registry-accessor.js +886 -0
  675. package/dist/store/agent-registry-accessor.js.map +1 -0
  676. package/dist/store/api-key-kdf.js +84 -0
  677. package/dist/store/api-key-kdf.js.map +1 -0
  678. package/dist/store/atomic.js +167 -0
  679. package/dist/store/atomic.js.map +1 -0
  680. package/dist/store/backup-crypto.js +184 -0
  681. package/dist/store/backup-crypto.js.map +1 -0
  682. package/dist/store/backup-pack.js +581 -0
  683. package/dist/store/backup-pack.js.map +1 -0
  684. package/dist/store/backup-unpack.js +449 -0
  685. package/dist/store/backup-unpack.js.map +1 -0
  686. package/dist/store/backup.js +94 -0
  687. package/dist/store/backup.js.map +1 -0
  688. package/dist/store/brain-accessor.js +429 -0
  689. package/dist/store/brain-accessor.js.map +1 -0
  690. package/dist/store/brain-schema.d.ts +663 -39
  691. package/dist/store/brain-schema.d.ts.map +1 -1
  692. package/dist/store/brain-schema.js +579 -0
  693. package/dist/store/brain-schema.js.map +1 -0
  694. package/dist/store/brain-sqlite.d.ts.map +1 -1
  695. package/dist/store/brain-sqlite.js +297 -0
  696. package/dist/store/brain-sqlite.js.map +1 -0
  697. package/dist/store/cache.js +168 -0
  698. package/dist/store/cache.js.map +1 -0
  699. package/dist/store/chain-schema.js +51 -0
  700. package/dist/store/chain-schema.js.map +1 -0
  701. package/dist/store/cleanup-legacy.js +171 -0
  702. package/dist/store/cleanup-legacy.js.map +1 -0
  703. package/dist/store/conduit-sqlite.js +570 -0
  704. package/dist/store/conduit-sqlite.js.map +1 -0
  705. package/dist/store/converters.js +124 -0
  706. package/dist/store/converters.js.map +1 -0
  707. package/dist/store/cross-db-cleanup.js +319 -0
  708. package/dist/store/cross-db-cleanup.js.map +1 -0
  709. package/dist/store/data-accessor.js +26 -0
  710. package/dist/store/data-accessor.js.map +1 -0
  711. package/dist/store/data-safety-central.js +269 -0
  712. package/dist/store/data-safety-central.js.map +1 -0
  713. package/dist/store/data-safety.js +274 -0
  714. package/dist/store/data-safety.js.map +1 -0
  715. package/dist/store/db-helpers.js +224 -0
  716. package/dist/store/db-helpers.js.map +1 -0
  717. package/dist/store/export.js +155 -0
  718. package/dist/store/export.js.map +1 -0
  719. package/dist/store/file-utils.js +270 -0
  720. package/dist/store/file-utils.js.map +1 -0
  721. package/dist/store/git-checkpoint.js +365 -0
  722. package/dist/store/git-checkpoint.js.map +1 -0
  723. package/dist/store/global-salt.js +147 -0
  724. package/dist/store/global-salt.js.map +1 -0
  725. package/dist/store/import-logging.js +139 -0
  726. package/dist/store/import-logging.js.map +1 -0
  727. package/dist/store/import-remap.js +145 -0
  728. package/dist/store/import-remap.js.map +1 -0
  729. package/dist/store/import-sort.js +121 -0
  730. package/dist/store/import-sort.js.map +1 -0
  731. package/dist/store/index.js +29 -0
  732. package/dist/store/index.js.map +1 -0
  733. package/dist/store/json.js +208 -0
  734. package/dist/store/json.js.map +1 -0
  735. package/dist/store/lifecycle-store.js +249 -0
  736. package/dist/store/lifecycle-store.js.map +1 -0
  737. package/dist/store/lock.js +70 -0
  738. package/dist/store/lock.js.map +1 -0
  739. package/dist/store/migrate-signaldock-to-conduit.js +562 -0
  740. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  741. package/dist/store/migration-manager.d.ts +5 -1
  742. package/dist/store/migration-manager.d.ts.map +1 -1
  743. package/dist/store/migration-manager.js +288 -0
  744. package/dist/store/migration-manager.js.map +1 -0
  745. package/dist/store/migration-sqlite.js +676 -0
  746. package/dist/store/migration-sqlite.js.map +1 -0
  747. package/dist/store/nexus-schema.js +268 -0
  748. package/dist/store/nexus-schema.js.map +1 -0
  749. package/dist/store/nexus-sqlite.js +242 -0
  750. package/dist/store/nexus-sqlite.js.map +1 -0
  751. package/dist/store/nexus-validation-schemas.js +40 -0
  752. package/dist/store/nexus-validation-schemas.js.map +1 -0
  753. package/dist/store/parsers.js +37 -0
  754. package/dist/store/parsers.js.map +1 -0
  755. package/dist/store/project-detect.js +457 -0
  756. package/dist/store/project-detect.js.map +1 -0
  757. package/dist/store/provider.js +101 -0
  758. package/dist/store/provider.js.map +1 -0
  759. package/dist/store/regenerators.js +207 -0
  760. package/dist/store/regenerators.js.map +1 -0
  761. package/dist/store/restore-conflict-report.js +206 -0
  762. package/dist/store/restore-conflict-report.js.map +1 -0
  763. package/dist/store/restore-json-merge.js +454 -0
  764. package/dist/store/restore-json-merge.js.map +1 -0
  765. package/dist/store/safety-data-accessor.js +257 -0
  766. package/dist/store/safety-data-accessor.js.map +1 -0
  767. package/dist/store/schema.js +7 -0
  768. package/dist/store/schema.js.map +1 -0
  769. package/dist/store/session-store.js +219 -0
  770. package/dist/store/session-store.js.map +1 -0
  771. package/dist/store/signaldock-sqlite.js +550 -0
  772. package/dist/store/signaldock-sqlite.js.map +1 -0
  773. package/dist/store/sqlite-backup.js +498 -0
  774. package/dist/store/sqlite-backup.js.map +1 -0
  775. package/dist/store/sqlite-data-accessor.js +787 -0
  776. package/dist/store/sqlite-data-accessor.js.map +1 -0
  777. package/dist/store/sqlite.js +483 -0
  778. package/dist/store/sqlite.js.map +1 -0
  779. package/dist/store/status-registry.js +8 -0
  780. package/dist/store/status-registry.js.map +1 -0
  781. package/dist/store/t310-readiness.js +115 -0
  782. package/dist/store/t310-readiness.js.map +1 -0
  783. package/dist/store/task-store.js +358 -0
  784. package/dist/store/task-store.js.map +1 -0
  785. package/dist/store/tasks-schema.d.ts +1 -1
  786. package/dist/store/tasks-schema.js +610 -0
  787. package/dist/store/tasks-schema.js.map +1 -0
  788. package/dist/store/typed-query.js +15 -0
  789. package/dist/store/typed-query.js.map +1 -0
  790. package/dist/store/validation-schemas.d.ts +6 -6
  791. package/dist/store/validation-schemas.js +278 -0
  792. package/dist/store/validation-schemas.js.map +1 -0
  793. package/dist/system/archive-analytics.js +277 -0
  794. package/dist/system/archive-analytics.js.map +1 -0
  795. package/dist/system/archive-stats.js +64 -0
  796. package/dist/system/archive-stats.js.map +1 -0
  797. package/dist/system/audit.js +145 -0
  798. package/dist/system/audit.js.map +1 -0
  799. package/dist/system/backup.js +280 -0
  800. package/dist/system/backup.js.map +1 -0
  801. package/dist/system/cleanup.js +134 -0
  802. package/dist/system/cleanup.js.map +1 -0
  803. package/dist/system/dependencies.js +466 -0
  804. package/dist/system/dependencies.js.map +1 -0
  805. package/dist/system/health.d.ts.map +1 -1
  806. package/dist/system/health.js +1206 -0
  807. package/dist/system/health.js.map +1 -0
  808. package/dist/system/index.js +18 -0
  809. package/dist/system/index.js.map +1 -0
  810. package/dist/system/inject-generate.js +122 -0
  811. package/dist/system/inject-generate.js.map +1 -0
  812. package/dist/system/labels.js +38 -0
  813. package/dist/system/labels.js.map +1 -0
  814. package/dist/system/metrics.js +61 -0
  815. package/dist/system/metrics.js.map +1 -0
  816. package/dist/system/migrate.js +43 -0
  817. package/dist/system/migrate.js.map +1 -0
  818. package/dist/system/platform-paths.js +80 -0
  819. package/dist/system/platform-paths.js.map +1 -0
  820. package/dist/system/runtime.js +161 -0
  821. package/dist/system/runtime.js.map +1 -0
  822. package/dist/system/safestop.js +89 -0
  823. package/dist/system/safestop.js.map +1 -0
  824. package/dist/system/storage-preflight.js +123 -0
  825. package/dist/system/storage-preflight.js.map +1 -0
  826. package/dist/task-work/index.js +159 -0
  827. package/dist/task-work/index.js.map +1 -0
  828. package/dist/tasks/add.js +837 -0
  829. package/dist/tasks/add.js.map +1 -0
  830. package/dist/tasks/analyze.js +85 -0
  831. package/dist/tasks/analyze.js.map +1 -0
  832. package/dist/tasks/archive.js +90 -0
  833. package/dist/tasks/archive.js.map +1 -0
  834. package/dist/tasks/atomicity.js +83 -0
  835. package/dist/tasks/atomicity.js.map +1 -0
  836. package/dist/tasks/cancel-ops.js +83 -0
  837. package/dist/tasks/cancel-ops.js.map +1 -0
  838. package/dist/tasks/complete.d.ts.map +1 -1
  839. package/dist/tasks/complete.js +228 -0
  840. package/dist/tasks/complete.js.map +1 -0
  841. package/dist/tasks/crossref-extract.js +73 -0
  842. package/dist/tasks/crossref-extract.js.map +1 -0
  843. package/dist/tasks/delete-preview.js +192 -0
  844. package/dist/tasks/delete-preview.js.map +1 -0
  845. package/dist/tasks/delete.js +120 -0
  846. package/dist/tasks/delete.js.map +1 -0
  847. package/dist/tasks/deletion-strategy.js +200 -0
  848. package/dist/tasks/deletion-strategy.js.map +1 -0
  849. package/dist/tasks/dependency-check.js +278 -0
  850. package/dist/tasks/dependency-check.js.map +1 -0
  851. package/dist/tasks/deps-ready.js +32 -0
  852. package/dist/tasks/deps-ready.js.map +1 -0
  853. package/dist/tasks/enforcement.js +86 -0
  854. package/dist/tasks/enforcement.js.map +1 -0
  855. package/dist/tasks/epic-enforcement.js +294 -0
  856. package/dist/tasks/epic-enforcement.js.map +1 -0
  857. package/dist/tasks/find.js +163 -0
  858. package/dist/tasks/find.js.map +1 -0
  859. package/dist/tasks/graph-cache.js +127 -0
  860. package/dist/tasks/graph-cache.js.map +1 -0
  861. package/dist/tasks/graph-ops.d.ts.map +1 -1
  862. package/dist/tasks/graph-ops.js +173 -0
  863. package/dist/tasks/graph-ops.js.map +1 -0
  864. package/dist/tasks/graph-rag.js +328 -0
  865. package/dist/tasks/graph-rag.js.map +1 -0
  866. package/dist/tasks/hierarchy-policy.js +149 -0
  867. package/dist/tasks/hierarchy-policy.js.map +1 -0
  868. package/dist/tasks/hierarchy.js +185 -0
  869. package/dist/tasks/hierarchy.js.map +1 -0
  870. package/dist/tasks/id-generator.js +65 -0
  871. package/dist/tasks/id-generator.js.map +1 -0
  872. package/dist/tasks/index.js +14 -0
  873. package/dist/tasks/index.js.map +1 -0
  874. package/dist/tasks/labels.js +55 -0
  875. package/dist/tasks/labels.js.map +1 -0
  876. package/dist/tasks/list.js +75 -0
  877. package/dist/tasks/list.js.map +1 -0
  878. package/dist/tasks/phase-tracking.js +133 -0
  879. package/dist/tasks/phase-tracking.js.map +1 -0
  880. package/dist/tasks/pipeline-stage.js +248 -0
  881. package/dist/tasks/pipeline-stage.js.map +1 -0
  882. package/dist/tasks/plan.js +268 -0
  883. package/dist/tasks/plan.js.map +1 -0
  884. package/dist/tasks/relates.js +101 -0
  885. package/dist/tasks/relates.js.map +1 -0
  886. package/dist/tasks/show.js +83 -0
  887. package/dist/tasks/show.js.map +1 -0
  888. package/dist/tasks/size-weighting.js +86 -0
  889. package/dist/tasks/size-weighting.js.map +1 -0
  890. package/dist/tasks/staleness.js +86 -0
  891. package/dist/tasks/staleness.js.map +1 -0
  892. package/dist/tasks/task-ops.js +1741 -0
  893. package/dist/tasks/task-ops.js.map +1 -0
  894. package/dist/tasks/update.js +303 -0
  895. package/dist/tasks/update.js.map +1 -0
  896. package/dist/templates/index.js +10 -0
  897. package/dist/templates/index.js.map +1 -0
  898. package/dist/templates/parser.js +254 -0
  899. package/dist/templates/parser.js.map +1 -0
  900. package/dist/ui/aliases.js +153 -0
  901. package/dist/ui/aliases.js.map +1 -0
  902. package/dist/ui/changelog.js +184 -0
  903. package/dist/ui/changelog.js.map +1 -0
  904. package/dist/ui/command-registry.js +168 -0
  905. package/dist/ui/command-registry.js.map +1 -0
  906. package/dist/ui/flags.js +94 -0
  907. package/dist/ui/flags.js.map +1 -0
  908. package/dist/ui/index.js +24 -0
  909. package/dist/ui/index.js.map +1 -0
  910. package/dist/upgrade.js +1148 -0
  911. package/dist/upgrade.js.map +1 -0
  912. package/dist/validation/chain-validation.js +146 -0
  913. package/dist/validation/chain-validation.js.map +1 -0
  914. package/dist/validation/compliance.js +155 -0
  915. package/dist/validation/compliance.js.map +1 -0
  916. package/dist/validation/docs-sync.js +212 -0
  917. package/dist/validation/docs-sync.js.map +1 -0
  918. package/dist/validation/doctor/checks.js +1069 -0
  919. package/dist/validation/doctor/checks.js.map +1 -0
  920. package/dist/validation/doctor/index.js +9 -0
  921. package/dist/validation/doctor/index.js.map +1 -0
  922. package/dist/validation/doctor/project-cache.js +160 -0
  923. package/dist/validation/doctor/project-cache.js.map +1 -0
  924. package/dist/validation/doctor/utils.js +155 -0
  925. package/dist/validation/doctor/utils.js.map +1 -0
  926. package/dist/validation/engine.js +914 -0
  927. package/dist/validation/engine.js.map +1 -0
  928. package/dist/validation/gap-check.js +175 -0
  929. package/dist/validation/gap-check.js.map +1 -0
  930. package/dist/validation/index.js +40 -0
  931. package/dist/validation/index.js.map +1 -0
  932. package/dist/validation/manifest.js +237 -0
  933. package/dist/validation/manifest.js.map +1 -0
  934. package/dist/validation/operation-gate-validators.js +724 -0
  935. package/dist/validation/operation-gate-validators.js.map +1 -0
  936. package/dist/validation/operation-verification-gates.js +532 -0
  937. package/dist/validation/operation-verification-gates.js.map +1 -0
  938. package/dist/validation/param-utils.js +141 -0
  939. package/dist/validation/param-utils.js.map +1 -0
  940. package/dist/validation/protocol-common.js +300 -0
  941. package/dist/validation/protocol-common.js.map +1 -0
  942. package/dist/validation/protocols/_shared.js +82 -0
  943. package/dist/validation/protocols/_shared.js.map +1 -0
  944. package/dist/validation/protocols/architecture-decision.js +31 -0
  945. package/dist/validation/protocols/architecture-decision.js.map +1 -0
  946. package/dist/validation/protocols/artifact-publish.js +28 -0
  947. package/dist/validation/protocols/artifact-publish.js.map +1 -0
  948. package/dist/validation/protocols/consensus.js +41 -0
  949. package/dist/validation/protocols/consensus.js.map +1 -0
  950. package/dist/validation/protocols/contribution.js +27 -0
  951. package/dist/validation/protocols/contribution.js.map +1 -0
  952. package/dist/validation/protocols/decomposition.js +28 -0
  953. package/dist/validation/protocols/decomposition.js.map +1 -0
  954. package/dist/validation/protocols/implementation.js +24 -0
  955. package/dist/validation/protocols/implementation.js.map +1 -0
  956. package/dist/validation/protocols/provenance.js +29 -0
  957. package/dist/validation/protocols/provenance.js.map +1 -0
  958. package/dist/validation/protocols/release.js +29 -0
  959. package/dist/validation/protocols/release.js.map +1 -0
  960. package/dist/validation/protocols/research.js +24 -0
  961. package/dist/validation/protocols/research.js.map +1 -0
  962. package/dist/validation/protocols/specification.js +27 -0
  963. package/dist/validation/protocols/specification.js.map +1 -0
  964. package/dist/validation/protocols/testing.js +30 -0
  965. package/dist/validation/protocols/testing.js.map +1 -0
  966. package/dist/validation/protocols/validation.js +30 -0
  967. package/dist/validation/protocols/validation.js.map +1 -0
  968. package/dist/validation/schema-integrity.js +170 -0
  969. package/dist/validation/schema-integrity.js.map +1 -0
  970. package/dist/validation/schema-validator.js +176 -0
  971. package/dist/validation/schema-validator.js.map +1 -0
  972. package/dist/validation/validate-ops.js +937 -0
  973. package/dist/validation/validate-ops.js.map +1 -0
  974. package/dist/validation/validation-rules.js +226 -0
  975. package/dist/validation/validation-rules.js.map +1 -0
  976. package/dist/validation/verification.js +321 -0
  977. package/dist/validation/verification.js.map +1 -0
  978. package/migrations/drizzle-brain/20260411000001_t528-graph-schema-expansion/migration.sql +47 -0
  979. package/migrations/drizzle-brain/20260412000001_t531-quality-score-typed-tables/migration.sql +23 -0
  980. package/migrations/drizzle-brain/20260413000001_t549-tiered-typed-memory/migration.sql +195 -0
  981. package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +49 -0
  982. package/package.json +13 -12
  983. package/src/config.ts +7 -0
  984. package/src/hooks/handlers/__tests__/conduit-hooks.test.ts +356 -0
  985. package/src/hooks/handlers/conduit-hooks.ts +258 -0
  986. package/src/hooks/handlers/index.ts +13 -0
  987. package/src/hooks/handlers/intelligence-hooks.ts +80 -0
  988. package/src/hooks/handlers/session-hooks.ts +78 -0
  989. package/src/hooks/handlers/task-hooks.ts +14 -0
  990. package/src/hooks/handlers/watchdog-hooks.ts +187 -0
  991. package/src/injection.ts +41 -2
  992. package/src/internal.ts +39 -2
  993. package/src/memory/__tests__/auto-extract.test.ts +43 -114
  994. package/src/memory/__tests__/brain-automation.test.ts +16 -39
  995. package/src/memory/__tests__/brain-rrf.test.ts +431 -0
  996. package/src/memory/__tests__/llm-extraction.test.ts +342 -0
  997. package/src/memory/__tests__/observer-reflector.test.ts +475 -0
  998. package/src/memory/anthropic-key-resolver.ts +113 -0
  999. package/src/memory/auto-extract.ts +40 -72
  1000. package/src/memory/brain-consolidator.ts +344 -0
  1001. package/src/memory/brain-lifecycle.ts +636 -2
  1002. package/src/memory/brain-retrieval.ts +630 -18
  1003. package/src/memory/brain-search.ts +234 -132
  1004. package/src/memory/decisions.ts +21 -1
  1005. package/src/memory/engine-compat.ts +25 -15
  1006. package/src/memory/extraction-gate.ts +574 -0
  1007. package/src/memory/index.ts +6 -2
  1008. package/src/memory/learnings.ts +34 -1
  1009. package/src/memory/llm-extraction.ts +524 -0
  1010. package/src/memory/memory-bridge.ts +29 -12
  1011. package/src/memory/observer-reflector.ts +829 -0
  1012. package/src/memory/patterns.ts +30 -1
  1013. package/src/memory/quality-scoring.ts +93 -9
  1014. package/src/nexus/nexus-bridge.ts +444 -0
  1015. package/src/scaffold.ts +42 -0
  1016. package/src/stats/index.ts +11 -3
  1017. package/src/store/brain-schema.ts +282 -0
  1018. package/src/store/brain-sqlite.ts +55 -0
  1019. package/src/store/migration-manager.ts +83 -12
  1020. package/src/system/health.ts +17 -0
  1021. package/src/tasks/complete.ts +7 -10
  1022. package/src/tasks/graph-ops.ts +1 -0
  1023. package/src/tasks/task-ops.ts +1 -1
  1024. package/templates/CLEO-INJECTION.md +15 -0
@@ -23,6 +23,8 @@ import { getBrainAccessor } from '../store/brain-accessor.js';
23
23
  import type {
24
24
  BRAIN_OBSERVATION_SOURCE_TYPES,
25
25
  BRAIN_OBSERVATION_TYPES,
26
+ BrainMemoryTier,
27
+ BrainSourceConfidence,
26
28
  } from '../store/brain-schema.js';
27
29
  import { sessionExistsInTasksDb } from '../store/cross-db-cleanup.js';
28
30
  import { getDb } from '../store/sqlite.js';
@@ -34,7 +36,8 @@ import type {
34
36
  BrainNarrativeRow,
35
37
  BrainTimelineNeighborRow,
36
38
  } from './brain-row-types.js';
37
- import { searchBrain } from './brain-search.js';
39
+ import { hybridSearch, searchBrain } from './brain-search.js';
40
+ import { searchSimilar } from './brain-similarity.js';
38
41
  import { addGraphEdge, upsertGraphNode } from './graph-auto-populate.js';
39
42
  import { computeObservationQuality } from './quality-scoring.js';
40
43
 
@@ -62,6 +65,12 @@ export interface SearchBrainCompactParams {
62
65
  dateEnd?: string;
63
66
  /** T418: filter results to observations produced by a specific agent (Wave 8 mental models). */
64
67
  agent?: string;
68
+ /**
69
+ * When true (default), use Reciprocal Rank Fusion to combine FTS5 and
70
+ * vector search results for higher recall and better ranking.
71
+ * When false, fall back to FTS5-only search (faster, no embeddings needed).
72
+ */
73
+ useRRF?: boolean;
65
74
  }
66
75
 
67
76
  /** Result from searchBrainCompact. */
@@ -127,6 +136,14 @@ export interface ObserveBrainParams {
127
136
  sourceType?: BrainObservationSourceType;
128
137
  /** T417: agent provenance — the name of the spawned agent producing this observation. */
129
138
  agent?: string;
139
+ /**
140
+ * T549 Wave 1-A: source reliability level.
141
+ * Overrides the default routing. If omitted, routing is determined automatically:
142
+ * - sourceType 'manual' → 'owner'
143
+ * - sourceType 'session-debrief' → 'task-outcome'
144
+ * - otherwise → 'agent'
145
+ */
146
+ sourceConfidence?: BrainSourceConfidence;
130
147
  }
131
148
 
132
149
  /** Result from observeBrain. */
@@ -155,20 +172,109 @@ export async function searchBrainCompact(
155
172
  projectRoot: string,
156
173
  params: SearchBrainCompactParams,
157
174
  ): Promise<SearchBrainCompactResult> {
158
- const { query, limit, tables, dateStart, dateEnd, agent } = params;
175
+ const { query, limit, tables, dateStart, dateEnd, agent, useRRF = true } = params;
159
176
 
160
177
  if (!query?.trim()) {
161
178
  return { results: [], total: 0, tokensEstimated: 0 };
162
179
  }
163
180
 
164
- // T418: when agent filter is set, restrict search to observations table only
165
- const effectiveTables =
166
- agent !== undefined && agent !== null
167
- ? (['observations'] as Array<'decisions' | 'patterns' | 'learnings' | 'observations'>)
168
- : tables;
181
+ const effectiveLimit = limit ?? 10;
182
+
183
+ // T418: agent filter always forces FTS-only on observations table
184
+ const agentFilter = agent !== undefined && agent !== null;
185
+
186
+ // ----- RRF path (default) -----
187
+ if (useRRF && !agentFilter) {
188
+ // Run FTS (for dates + table-level data) and RRF fusion in parallel.
189
+ // FTS gives us row-level dates; RRF gives us the fused ranking order.
190
+ const [ftsResult, rrfResults] = await Promise.all([
191
+ searchBrain(projectRoot, query, { limit: effectiveLimit * 3, tables }).catch(() => ({
192
+ decisions: [],
193
+ patterns: [],
194
+ learnings: [],
195
+ observations: [],
196
+ })),
197
+ hybridSearch(query, projectRoot, { limit: effectiveLimit * 2 }),
198
+ ]);
199
+
200
+ // Build a date map from FTS rows (id -> date string)
201
+ const dateMap = new Map<string, string>();
202
+ for (const d of ftsResult.decisions) {
203
+ const raw = d as Record<string, unknown>;
204
+ dateMap.set(d.id, (d.createdAt ?? (raw['created_at'] as string)) || '');
205
+ }
206
+ for (const p of ftsResult.patterns) {
207
+ const raw = p as Record<string, unknown>;
208
+ dateMap.set(p.id, (p.extractedAt ?? (raw['extracted_at'] as string)) || '');
209
+ }
210
+ for (const l of ftsResult.learnings) {
211
+ const raw = l as Record<string, unknown>;
212
+ dateMap.set(l.id, (l.createdAt ?? (raw['created_at'] as string)) || '');
213
+ }
214
+ for (const o of ftsResult.observations) {
215
+ const raw = o as Record<string, unknown>;
216
+ dateMap.set(o.id, (o.createdAt ?? (raw['created_at'] as string)) || '');
217
+ }
218
+
219
+ // Apply table filter when specified (map singular type names to plural table names)
220
+ const singularToTable: Record<string, string> = {
221
+ decision: 'decisions',
222
+ pattern: 'patterns',
223
+ learning: 'learnings',
224
+ observation: 'observations',
225
+ };
226
+
227
+ let results: BrainCompactHit[] = rrfResults
228
+ .map((r) => ({
229
+ id: r.id,
230
+ type: r.type as 'decision' | 'pattern' | 'learning' | 'observation',
231
+ title: r.title.slice(0, 80),
232
+ date: dateMap.get(r.id) ?? '',
233
+ relevance: r.score,
234
+ }))
235
+ .filter((r) => {
236
+ // Only include items that the FTS scan returned (ensures quality gating is respected)
237
+ return dateMap.has(r.id);
238
+ });
239
+
240
+ if (tables && tables.length > 0) {
241
+ results = results.filter((r) =>
242
+ tables.includes(
243
+ singularToTable[r.type] as 'decisions' | 'patterns' | 'learnings' | 'observations',
244
+ ),
245
+ );
246
+ }
247
+
248
+ // Apply date filters client-side
249
+ if (dateStart) results = results.filter((r) => !r.date || r.date >= dateStart);
250
+ if (dateEnd) results = results.filter((r) => !r.date || r.date <= dateEnd);
251
+
252
+ results = results.slice(0, effectiveLimit);
253
+
254
+ for (const hit of results) {
255
+ hit._next = memoryFindHitNext(hit.id);
256
+ }
257
+
258
+ if (results.length > 0) {
259
+ const returnedIds = results.map((r) => r.id);
260
+ setImmediate(() => {
261
+ incrementCitationCounts(projectRoot, returnedIds).catch(() => {});
262
+ logRetrieval(projectRoot, query, returnedIds, 'find-rrf', results.length * 50).catch(
263
+ () => {},
264
+ );
265
+ });
266
+ }
267
+
268
+ return { results, total: results.length, tokensEstimated: results.length * 50 };
269
+ }
270
+
271
+ // ----- FTS-only path (useRRF=false or agent filter) -----
272
+ const effectiveTables = agentFilter
273
+ ? (['observations'] as Array<'decisions' | 'patterns' | 'learnings' | 'observations'>)
274
+ : tables;
169
275
 
170
276
  const searchResult = await searchBrain(projectRoot, query, {
171
- limit: limit ?? 10,
277
+ limit: effectiveLimit,
172
278
  tables: effectiveTables,
173
279
  });
174
280
 
@@ -178,7 +284,7 @@ export async function searchBrainCompact(
178
284
  // We handle both naming conventions for robustness.
179
285
  let results: BrainCompactHit[] = [];
180
286
 
181
- if (!agent) {
287
+ if (!agentFilter) {
182
288
  for (const d of searchResult.decisions) {
183
289
  const raw = d as Record<string, unknown>;
184
290
  results.push({
@@ -213,7 +319,7 @@ export async function searchBrainCompact(
213
319
  for (const o of searchResult.observations) {
214
320
  const raw = o as Record<string, unknown>;
215
321
  // T418: apply agent post-filter when specified
216
- if (agent) {
322
+ if (agentFilter) {
217
323
  const rowAgent = o.agent ?? (raw['agent'] as string | null) ?? null;
218
324
  if (rowAgent !== agent) continue;
219
325
  }
@@ -226,18 +332,23 @@ export async function searchBrainCompact(
226
332
  }
227
333
 
228
334
  // Apply date filters client-side if provided
229
- if (dateStart) {
230
- results = results.filter((r) => r.date >= dateStart);
231
- }
232
- if (dateEnd) {
233
- results = results.filter((r) => r.date <= dateEnd);
234
- }
335
+ if (dateStart) results = results.filter((r) => r.date >= dateStart);
336
+ if (dateEnd) results = results.filter((r) => r.date <= dateEnd);
235
337
 
236
338
  // Enrich each hit with _next progressive disclosure directives
237
339
  for (const hit of results) {
238
340
  hit._next = memoryFindHitNext(hit.id);
239
341
  }
240
342
 
343
+ // Citation tracking + retrieval logging (non-blocking)
344
+ if (results.length > 0) {
345
+ const returnedIds = results.map((r) => r.id);
346
+ setImmediate(() => {
347
+ incrementCitationCounts(projectRoot, returnedIds).catch(() => {});
348
+ logRetrieval(projectRoot, query, returnedIds, 'find', results.length * 50).catch(() => {});
349
+ });
350
+ }
351
+
241
352
  return {
242
353
  results,
243
354
  total: results.length,
@@ -488,6 +599,21 @@ export async function fetchBrainEntries(
488
599
  }
489
600
  }
490
601
 
602
+ // Citation tracking + retrieval logging (non-blocking)
603
+ if (results.length > 0) {
604
+ const fetchedIds = results.map((r) => r.id);
605
+ setImmediate(() => {
606
+ incrementCitationCounts(projectRoot, fetchedIds).catch(() => {});
607
+ logRetrieval(
608
+ projectRoot,
609
+ fetchedIds.join(','),
610
+ fetchedIds,
611
+ 'fetch',
612
+ results.length * 500,
613
+ ).catch(() => {});
614
+ });
615
+ }
616
+
491
617
  return {
492
618
  results,
493
619
  notFound,
@@ -551,6 +677,7 @@ export async function observeBrain(
551
677
  sourceSessionId,
552
678
  sourceType,
553
679
  agent,
680
+ sourceConfidence: sourceConfidenceParam,
554
681
  } = params;
555
682
 
556
683
  if (!text?.trim()) {
@@ -561,6 +688,30 @@ export async function observeBrain(
561
688
  const title = titleParam ?? text.slice(0, 120);
562
689
  const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
563
690
 
691
+ // T549 Wave 1-A: Tier routing for observations.
692
+ // Observations always start as short-term episodic entries.
693
+ // sourceConfidence routing (spec §4.1 Decision Tree):
694
+ // - sourceType 'manual' → 'owner' (owner-stated facts skip short-term in consolidator)
695
+ // - sourceType 'session-debrief' → 'task-outcome' (synthesized summaries)
696
+ // - otherwise → 'agent' (default for all hook/agent writes)
697
+ // Source confidence routing (spec §4.1 Decision Tree):
698
+ // - sourceType 'manual' → 'owner' (owner-stated facts are ground truth)
699
+ // - sourceType 'session-debrief' → 'task-outcome' (verified by completion)
700
+ // - otherwise → 'agent' (default for all hook/agent writes)
701
+ // Owner and task-outcome sources are auto-verified as ground truth.
702
+ // Agent-inferred entries start unverified — consolidator promotes via corroboration.
703
+ const resolvedSourceConfidence: BrainSourceConfidence =
704
+ sourceConfidenceParam ??
705
+ (sourceType === 'manual'
706
+ ? 'owner'
707
+ : sourceType === 'session-debrief'
708
+ ? 'task-outcome'
709
+ : 'agent');
710
+ const memoryTier: BrainMemoryTier = 'short';
711
+ const memoryType = 'episodic' as const;
712
+ const verified =
713
+ resolvedSourceConfidence === 'owner' || resolvedSourceConfidence === 'task-outcome';
714
+
564
715
  // Content-hash dedup: SHA-256 prefix of title+text
565
716
  const contentHash = createHash('sha256')
566
717
  .update(title + text)
@@ -603,8 +754,13 @@ export async function observeBrain(
603
754
  }
604
755
  }
605
756
 
606
- // Compute quality score from text richness and title length.
607
- const qualityScore = computeObservationQuality({ text, title });
757
+ // Compute quality score from text richness, title length, and T549 source multiplier.
758
+ const qualityScore = computeObservationQuality({
759
+ text,
760
+ title,
761
+ sourceConfidence: resolvedSourceConfidence,
762
+ memoryTier,
763
+ });
608
764
 
609
765
  const id = `O-${Date.now().toString(36)}-${(observeSeq++ % 1000).toString(36)}`;
610
766
  const accessor = await getBrainAccessor(projectRoot);
@@ -621,6 +777,11 @@ export async function observeBrain(
621
777
  agent: agent ?? null,
622
778
  qualityScore,
623
779
  createdAt: now,
780
+ // T549 Wave 1-A: tier/type/confidence assigned at write time
781
+ memoryTier,
782
+ memoryType,
783
+ sourceConfidence: resolvedSourceConfidence,
784
+ verified,
624
785
  });
625
786
 
626
787
  // Populate embedding if provider is available (T5387).
@@ -846,3 +1007,454 @@ export async function populateEmbeddings(
846
1007
 
847
1008
  return { processed, skipped, errors };
848
1009
  }
1010
+
1011
+ // ============================================================================
1012
+ // Budget-Aware Retrieval (T549 Wave 3-A)
1013
+ // ============================================================================
1014
+
1015
+ /** Options for budget-aware retrieval. */
1016
+ export interface BudgetedRetrievalOptions {
1017
+ /** Filter by cognitive types (semantic / episodic / procedural). */
1018
+ types?: Array<'semantic' | 'episodic' | 'procedural'>;
1019
+ /** Filter by memory tiers (short / medium / long). */
1020
+ tiers?: Array<'short' | 'medium' | 'long'>;
1021
+ /** When true, only return verified entries. Default: false. */
1022
+ verified?: boolean;
1023
+ }
1024
+
1025
+ /** A single entry returned by budget-aware retrieval. */
1026
+ export interface BudgetedEntry {
1027
+ id: string;
1028
+ type: string;
1029
+ title: string;
1030
+ text: string;
1031
+ /** Fused relevance score: FTS50% + vector40% + graph10% × qualityScore. */
1032
+ score: number;
1033
+ /** Estimated token cost for this entry (~chars/4). */
1034
+ tokensEstimated: number;
1035
+ /** Memory tier for this entry. */
1036
+ memoryTier?: string;
1037
+ /** Cognitive type for this entry. */
1038
+ memoryType?: string;
1039
+ }
1040
+
1041
+ /** Result from retrieveWithBudget. */
1042
+ export interface BudgetedResult {
1043
+ entries: BudgetedEntry[];
1044
+ /** Total tokens consumed by returned entries. */
1045
+ tokensUsed: number;
1046
+ /** Tokens remaining from the original budget. */
1047
+ tokensRemaining: number;
1048
+ /** Number of entries excluded due to budget constraints. */
1049
+ excluded: number;
1050
+ }
1051
+
1052
+ /**
1053
+ * Budget-aware hybrid retrieval combining FTS5, vector KNN, and graph neighbor scores.
1054
+ *
1055
+ * Strategy (parallel where possible):
1056
+ * A. FTS5 BM25 search (always) — keyword precision (50% weight)
1057
+ * B. Vector KNN search (optional) — semantic recall (40% weight, skipped if no embeddings)
1058
+ * C. Graph neighbors (optional) — associative context (10% weight, skipped if graph empty)
1059
+ *
1060
+ * Score fusion: final = (fts*0.50 + vec*0.40 + graph*0.10) × qualityScore
1061
+ * Recency boost: +0.05 for entries updated in last 7 days.
1062
+ * Type priority: procedural entries get +0.10 (always-useful rules).
1063
+ *
1064
+ * Budget enforcement:
1065
+ * - Rank top-50 candidates by fused score.
1066
+ * - Walk list, accumulate token cost (≈ textLen/4), stop at budget.
1067
+ * - Episodic entries dropped first when budget is tight.
1068
+ *
1069
+ * Citation tracking: increments citationCount for returned entries in background (setImmediate).
1070
+ *
1071
+ * @param projectRoot - Project root directory
1072
+ * @param query - Text to search for
1073
+ * @param tokenBudget - Maximum tokens to spend on results (default 500)
1074
+ * @param options - Optional filters (types, tiers, verified)
1075
+ * @returns Retrieved entries within budget with token accounting
1076
+ */
1077
+ export async function retrieveWithBudget(
1078
+ projectRoot: string,
1079
+ query: string,
1080
+ tokenBudget = 500,
1081
+ options?: BudgetedRetrievalOptions,
1082
+ ): Promise<BudgetedResult> {
1083
+ if (!query?.trim()) {
1084
+ return { entries: [], tokensUsed: 0, tokensRemaining: tokenBudget, excluded: 0 };
1085
+ }
1086
+
1087
+ // -------------------------------------------------------------------------
1088
+ // Run search strategies in parallel
1089
+ // -------------------------------------------------------------------------
1090
+ const [ftsResult, vecResults, graphNeighbors] = await Promise.all([
1091
+ // A. FTS5
1092
+ searchBrain(projectRoot, query, { limit: 30 }).catch(() => ({
1093
+ decisions: [],
1094
+ patterns: [],
1095
+ learnings: [],
1096
+ observations: [],
1097
+ })),
1098
+ // B. Vector KNN (degrades gracefully when unavailable)
1099
+ searchSimilar(query, projectRoot, 20).catch(
1100
+ () => [] as ReturnType<typeof searchSimilar> extends Promise<infer T> ? T : never[],
1101
+ ),
1102
+ // C. Graph neighbors from top FTS hit
1103
+ Promise.resolve([] as Array<{ id: string; graphScore: number }>),
1104
+ ]);
1105
+
1106
+ // -------------------------------------------------------------------------
1107
+ // Build ID → score map from FTS results
1108
+ // -------------------------------------------------------------------------
1109
+ interface ScoredEntry {
1110
+ id: string;
1111
+ type: string;
1112
+ title: string;
1113
+ text: string;
1114
+ ftsScore: number;
1115
+ vecScore: number;
1116
+ graphScore: number;
1117
+ qualityScore: number;
1118
+ memoryTier?: string;
1119
+ memoryType?: string;
1120
+ updatedAt?: string;
1121
+ }
1122
+
1123
+ const candidateMap = new Map<string, ScoredEntry>();
1124
+
1125
+ // FTS results (normalized score 0.5 starting point — BM25 doesn't give 0..1)
1126
+ const FTS_BASE = 0.5;
1127
+ for (const d of ftsResult.decisions) {
1128
+ const raw = d as Record<string, unknown>;
1129
+ const id = d.id;
1130
+ const tier = (d.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1131
+ const mtype = (d.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1132
+ const updatedAt = (d.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1133
+ candidateMap.set(id, {
1134
+ id,
1135
+ type: 'decision',
1136
+ title: d.decision.slice(0, 120),
1137
+ text: `${d.decision} — ${d.rationale}`,
1138
+ ftsScore: FTS_BASE,
1139
+ vecScore: 0,
1140
+ graphScore: 0,
1141
+ qualityScore: d.qualityScore ?? 0.5,
1142
+ memoryTier: tier,
1143
+ memoryType: mtype,
1144
+ updatedAt,
1145
+ });
1146
+ }
1147
+
1148
+ for (const p of ftsResult.patterns) {
1149
+ const raw = p as Record<string, unknown>;
1150
+ const id = p.id;
1151
+ const tier = (p.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1152
+ const mtype = (p.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1153
+ const updatedAt = (p.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1154
+ candidateMap.set(id, {
1155
+ id,
1156
+ type: 'pattern',
1157
+ title: p.pattern.slice(0, 120),
1158
+ text: `${p.pattern} — ${p.context}`,
1159
+ ftsScore: FTS_BASE,
1160
+ vecScore: 0,
1161
+ graphScore: 0,
1162
+ qualityScore: p.qualityScore ?? 0.5,
1163
+ memoryTier: tier,
1164
+ memoryType: mtype,
1165
+ updatedAt,
1166
+ });
1167
+ }
1168
+
1169
+ for (const l of ftsResult.learnings) {
1170
+ const raw = l as Record<string, unknown>;
1171
+ const id = l.id;
1172
+ const tier = (l.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1173
+ const mtype = (l.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1174
+ const updatedAt = (l.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1175
+ candidateMap.set(id, {
1176
+ id,
1177
+ type: 'learning',
1178
+ title: l.insight.slice(0, 120),
1179
+ text: `${l.insight} (source: ${l.source})`,
1180
+ ftsScore: FTS_BASE,
1181
+ vecScore: 0,
1182
+ graphScore: 0,
1183
+ qualityScore: l.qualityScore ?? 0.5,
1184
+ memoryTier: tier,
1185
+ memoryType: mtype,
1186
+ updatedAt,
1187
+ });
1188
+ }
1189
+
1190
+ for (const o of ftsResult.observations) {
1191
+ const raw = o as Record<string, unknown>;
1192
+ const id = o.id;
1193
+ const tier = (o.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1194
+ const mtype = (o.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1195
+ const updatedAt = (o.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1196
+ candidateMap.set(id, {
1197
+ id,
1198
+ type: 'observation',
1199
+ title: o.title.slice(0, 120),
1200
+ text: o.narrative ?? o.title,
1201
+ ftsScore: FTS_BASE,
1202
+ vecScore: 0,
1203
+ graphScore: 0,
1204
+ qualityScore: o.qualityScore ?? 0.5,
1205
+ memoryTier: tier,
1206
+ memoryType: mtype,
1207
+ updatedAt,
1208
+ });
1209
+ }
1210
+
1211
+ // B. Merge vector scores (distance → similarity: similarity = 1 - distance)
1212
+ for (const v of vecResults) {
1213
+ const simScore = Math.max(0, 1 - v.distance);
1214
+ const existing = candidateMap.get(v.id);
1215
+ if (existing) {
1216
+ existing.vecScore = simScore;
1217
+ } else {
1218
+ candidateMap.set(v.id, {
1219
+ id: v.id,
1220
+ type: v.type,
1221
+ title: v.title.slice(0, 120),
1222
+ text: v.text,
1223
+ ftsScore: 0,
1224
+ vecScore: simScore,
1225
+ graphScore: 0,
1226
+ qualityScore: 0.5,
1227
+ memoryTier: undefined,
1228
+ memoryType: undefined,
1229
+ });
1230
+ }
1231
+ }
1232
+
1233
+ // C. Merge graph scores
1234
+ for (const g of graphNeighbors) {
1235
+ const existing = candidateMap.get(g.id);
1236
+ if (existing) {
1237
+ existing.graphScore = g.graphScore;
1238
+ }
1239
+ }
1240
+
1241
+ // -------------------------------------------------------------------------
1242
+ // Score fusion + ranking
1243
+ // -------------------------------------------------------------------------
1244
+ const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
1245
+ .toISOString()
1246
+ .replace('T', ' ')
1247
+ .slice(0, 19);
1248
+
1249
+ const candidates = Array.from(candidateMap.values()).map((c) => {
1250
+ // Fused score
1251
+ let score = c.ftsScore * 0.5 + c.vecScore * 0.4 + c.graphScore * 0.1;
1252
+
1253
+ // Quality multiplier
1254
+ score *= c.qualityScore;
1255
+
1256
+ // Recency boost for recently-updated entries
1257
+ if (c.updatedAt && c.updatedAt >= sevenDaysAgo) {
1258
+ score += 0.05;
1259
+ }
1260
+
1261
+ // Type priority boost for procedural entries (always-useful rules)
1262
+ if (c.memoryType === 'procedural' || c.type === 'pattern') {
1263
+ score += 0.1;
1264
+ }
1265
+
1266
+ return { ...c, score };
1267
+ });
1268
+
1269
+ // -------------------------------------------------------------------------
1270
+ // Apply option filters (types, tiers, verified)
1271
+ // -------------------------------------------------------------------------
1272
+
1273
+ // We'll apply verified filter by checking the DB if requested
1274
+ let filtered = candidates;
1275
+
1276
+ if (options?.types && options.types.length > 0) {
1277
+ const allowedTypes = new Set(options.types);
1278
+ filtered = filtered.filter((c) => {
1279
+ if (!c.memoryType) return true; // unknown type — include
1280
+ return allowedTypes.has(c.memoryType as 'semantic' | 'episodic' | 'procedural');
1281
+ });
1282
+ }
1283
+
1284
+ if (options?.tiers && options.tiers.length > 0) {
1285
+ const allowedTiers = new Set(options.tiers);
1286
+ filtered = filtered.filter((c) => {
1287
+ if (!c.memoryTier) return true; // unknown tier — include
1288
+ return allowedTiers.has(c.memoryTier as 'short' | 'medium' | 'long');
1289
+ });
1290
+ }
1291
+
1292
+ // -------------------------------------------------------------------------
1293
+ // Sort: procedural first, then by score descending
1294
+ // -------------------------------------------------------------------------
1295
+ filtered.sort((a, b) => {
1296
+ const aProcedural = a.memoryType === 'procedural' || a.type === 'pattern' ? 1 : 0;
1297
+ const bProcedural = b.memoryType === 'procedural' || b.type === 'pattern' ? 1 : 0;
1298
+ if (aProcedural !== bProcedural) return bProcedural - aProcedural;
1299
+ return b.score - a.score;
1300
+ });
1301
+
1302
+ // Cap candidate list at top 50
1303
+ const topCandidates = filtered.slice(0, 50);
1304
+
1305
+ // -------------------------------------------------------------------------
1306
+ // Budget enforcement — episodic entries are dropped first when budget tight
1307
+ // -------------------------------------------------------------------------
1308
+
1309
+ // Sort for budget walk: procedural first, semantic second, episodic last
1310
+ const typeOrder = (c: ScoredEntry & { score: number }): number => {
1311
+ if (c.memoryType === 'procedural' || c.type === 'pattern') return 0;
1312
+ if (c.memoryType === 'semantic' || c.type === 'decision' || c.type === 'learning') return 1;
1313
+ return 2; // episodic
1314
+ };
1315
+
1316
+ const budgetOrdered = [...topCandidates].sort((a, b) => {
1317
+ const orderDiff = typeOrder(a) - typeOrder(b);
1318
+ if (orderDiff !== 0) return orderDiff;
1319
+ return b.score - a.score;
1320
+ });
1321
+
1322
+ const result: BudgetedEntry[] = [];
1323
+ let tokensUsed = 0;
1324
+ let excluded = 0;
1325
+
1326
+ for (const candidate of budgetOrdered) {
1327
+ const entryTokens = Math.ceil(candidate.text.length / 4);
1328
+
1329
+ if (tokensUsed + entryTokens > tokenBudget) {
1330
+ excluded++;
1331
+ continue;
1332
+ }
1333
+
1334
+ result.push({
1335
+ id: candidate.id,
1336
+ type: candidate.type,
1337
+ title: candidate.title,
1338
+ text: candidate.text,
1339
+ score: candidate.score,
1340
+ tokensEstimated: entryTokens,
1341
+ memoryTier: candidate.memoryTier,
1342
+ memoryType: candidate.memoryType,
1343
+ });
1344
+ tokensUsed += entryTokens;
1345
+ }
1346
+
1347
+ // -------------------------------------------------------------------------
1348
+ // Citation tracking — non-blocking background increment
1349
+ // -------------------------------------------------------------------------
1350
+ if (result.length > 0) {
1351
+ const returnedIds = result.map((e) => e.id);
1352
+ setImmediate(() => {
1353
+ incrementCitationCounts(projectRoot, returnedIds).catch(() => {
1354
+ /* best-effort */
1355
+ });
1356
+ });
1357
+ }
1358
+
1359
+ return {
1360
+ entries: result,
1361
+ tokensUsed,
1362
+ tokensRemaining: tokenBudget - tokensUsed,
1363
+ excluded,
1364
+ };
1365
+ }
1366
+
1367
+ // ============================================================================
1368
+ // Citation Count Increment (non-blocking helper)
1369
+ // ============================================================================
1370
+
1371
+ /**
1372
+ * Increment citationCount for a list of entry IDs.
1373
+ *
1374
+ * Routes each ID to the correct table based on its ID prefix. All updates
1375
+ * are best-effort — errors are silently swallowed.
1376
+ *
1377
+ * @param projectRoot - Project root for brain.db resolution
1378
+ * @param ids - Entry IDs whose citation counts should be incremented
1379
+ */
1380
+ async function incrementCitationCounts(projectRoot: string, ids: string[]): Promise<void> {
1381
+ if (ids.length === 0) return;
1382
+
1383
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
1384
+ await getBrainDb(projectRoot);
1385
+ const nativeDb = getBrainNativeDb();
1386
+ if (!nativeDb) return;
1387
+
1388
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
1389
+
1390
+ for (const id of ids) {
1391
+ let table: string;
1392
+ if (id.startsWith('D-') || /^D\d/.test(id)) {
1393
+ table = 'brain_decisions';
1394
+ } else if (id.startsWith('P-') || /^P\d/.test(id)) {
1395
+ table = 'brain_patterns';
1396
+ } else if (id.startsWith('L-') || /^L\d/.test(id)) {
1397
+ table = 'brain_learnings';
1398
+ } else {
1399
+ table = 'brain_observations';
1400
+ }
1401
+
1402
+ try {
1403
+ nativeDb
1404
+ .prepare(
1405
+ `UPDATE ${table} SET citation_count = citation_count + 1, updated_at = ? WHERE id = ?`,
1406
+ )
1407
+ .run(now, id);
1408
+ } catch {
1409
+ /* best-effort — column may not exist in older schemas */
1410
+ }
1411
+ }
1412
+ }
1413
+
1414
+ /**
1415
+ * Log a retrieval event to brain_retrieval_log for co-retrieval analysis.
1416
+ *
1417
+ * Creates the table on first use if it doesn't exist (self-healing).
1418
+ * Best-effort: errors are silently swallowed.
1419
+ */
1420
+ async function logRetrieval(
1421
+ projectRoot: string,
1422
+ query: string,
1423
+ entryIds: string[],
1424
+ source: string,
1425
+ tokensUsed?: number,
1426
+ ): Promise<void> {
1427
+ if (entryIds.length === 0) return;
1428
+
1429
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
1430
+ await getBrainDb(projectRoot);
1431
+ const nativeDb = getBrainNativeDb();
1432
+ if (!nativeDb) return;
1433
+
1434
+ // Self-healing: create table if not exists
1435
+ const createSql =
1436
+ 'CREATE TABLE IF NOT EXISTS brain_retrieval_log (' +
1437
+ 'id INTEGER PRIMARY KEY AUTOINCREMENT,' +
1438
+ 'query TEXT NOT NULL,' +
1439
+ 'entry_ids TEXT NOT NULL,' +
1440
+ 'entry_count INTEGER NOT NULL,' +
1441
+ 'source TEXT NOT NULL,' +
1442
+ 'tokens_used INTEGER,' +
1443
+ "created_at TEXT NOT NULL DEFAULT (datetime('now'))" +
1444
+ ')';
1445
+ try {
1446
+ nativeDb.prepare(createSql).run();
1447
+ } catch {
1448
+ return;
1449
+ }
1450
+
1451
+ try {
1452
+ nativeDb
1453
+ .prepare(
1454
+ 'INSERT INTO brain_retrieval_log (query, entry_ids, entry_count, source, tokens_used) VALUES (?, ?, ?, ?, ?)',
1455
+ )
1456
+ .run(query, entryIds.join(','), entryIds.length, source, tokensUsed ?? null);
1457
+ } catch {
1458
+ /* best-effort */
1459
+ }
1460
+ }