@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
@@ -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';
@@ -35,6 +37,7 @@ import type {
35
37
  BrainTimelineNeighborRow,
36
38
  } from './brain-row-types.js';
37
39
  import { 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
 
@@ -127,6 +130,14 @@ export interface ObserveBrainParams {
127
130
  sourceType?: BrainObservationSourceType;
128
131
  /** T417: agent provenance — the name of the spawned agent producing this observation. */
129
132
  agent?: string;
133
+ /**
134
+ * T549 Wave 1-A: source reliability level.
135
+ * Overrides the default routing. If omitted, routing is determined automatically:
136
+ * - sourceType 'manual' → 'owner'
137
+ * - sourceType 'session-debrief' → 'task-outcome'
138
+ * - otherwise → 'agent'
139
+ */
140
+ sourceConfidence?: BrainSourceConfidence;
130
141
  }
131
142
 
132
143
  /** Result from observeBrain. */
@@ -551,6 +562,7 @@ export async function observeBrain(
551
562
  sourceSessionId,
552
563
  sourceType,
553
564
  agent,
565
+ sourceConfidence: sourceConfidenceParam,
554
566
  } = params;
555
567
 
556
568
  if (!text?.trim()) {
@@ -561,6 +573,24 @@ export async function observeBrain(
561
573
  const title = titleParam ?? text.slice(0, 120);
562
574
  const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
563
575
 
576
+ // T549 Wave 1-A: Tier routing for observations.
577
+ // Observations always start as short-term episodic entries.
578
+ // sourceConfidence routing (spec §4.1 Decision Tree):
579
+ // - sourceType 'manual' → 'owner' (owner-stated facts skip short-term in consolidator)
580
+ // - sourceType 'session-debrief' → 'task-outcome' (synthesized summaries)
581
+ // - otherwise → 'agent' (default for all hook/agent writes)
582
+ // verified is always false at write time — consolidator sets true via corroboration gate.
583
+ const resolvedSourceConfidence: BrainSourceConfidence =
584
+ sourceConfidenceParam ??
585
+ (sourceType === 'manual'
586
+ ? 'owner'
587
+ : sourceType === 'session-debrief'
588
+ ? 'task-outcome'
589
+ : 'agent');
590
+ const memoryTier: BrainMemoryTier = 'short';
591
+ const memoryType = 'episodic' as const;
592
+ const verified = false;
593
+
564
594
  // Content-hash dedup: SHA-256 prefix of title+text
565
595
  const contentHash = createHash('sha256')
566
596
  .update(title + text)
@@ -603,8 +633,13 @@ export async function observeBrain(
603
633
  }
604
634
  }
605
635
 
606
- // Compute quality score from text richness and title length.
607
- const qualityScore = computeObservationQuality({ text, title });
636
+ // Compute quality score from text richness, title length, and T549 source multiplier.
637
+ const qualityScore = computeObservationQuality({
638
+ text,
639
+ title,
640
+ sourceConfidence: resolvedSourceConfidence,
641
+ memoryTier,
642
+ });
608
643
 
609
644
  const id = `O-${Date.now().toString(36)}-${(observeSeq++ % 1000).toString(36)}`;
610
645
  const accessor = await getBrainAccessor(projectRoot);
@@ -621,6 +656,11 @@ export async function observeBrain(
621
656
  agent: agent ?? null,
622
657
  qualityScore,
623
658
  createdAt: now,
659
+ // T549 Wave 1-A: tier/type/confidence assigned at write time
660
+ memoryTier,
661
+ memoryType,
662
+ sourceConfidence: resolvedSourceConfidence,
663
+ verified,
624
664
  });
625
665
 
626
666
  // Populate embedding if provider is available (T5387).
@@ -846,3 +886,406 @@ export async function populateEmbeddings(
846
886
 
847
887
  return { processed, skipped, errors };
848
888
  }
889
+
890
+ // ============================================================================
891
+ // Budget-Aware Retrieval (T549 Wave 3-A)
892
+ // ============================================================================
893
+
894
+ /** Options for budget-aware retrieval. */
895
+ export interface BudgetedRetrievalOptions {
896
+ /** Filter by cognitive types (semantic / episodic / procedural). */
897
+ types?: Array<'semantic' | 'episodic' | 'procedural'>;
898
+ /** Filter by memory tiers (short / medium / long). */
899
+ tiers?: Array<'short' | 'medium' | 'long'>;
900
+ /** When true, only return verified entries. Default: false. */
901
+ verified?: boolean;
902
+ }
903
+
904
+ /** A single entry returned by budget-aware retrieval. */
905
+ export interface BudgetedEntry {
906
+ id: string;
907
+ type: string;
908
+ title: string;
909
+ text: string;
910
+ /** Fused relevance score: FTS50% + vector40% + graph10% × qualityScore. */
911
+ score: number;
912
+ /** Estimated token cost for this entry (~chars/4). */
913
+ tokensEstimated: number;
914
+ /** Memory tier for this entry. */
915
+ memoryTier?: string;
916
+ /** Cognitive type for this entry. */
917
+ memoryType?: string;
918
+ }
919
+
920
+ /** Result from retrieveWithBudget. */
921
+ export interface BudgetedResult {
922
+ entries: BudgetedEntry[];
923
+ /** Total tokens consumed by returned entries. */
924
+ tokensUsed: number;
925
+ /** Tokens remaining from the original budget. */
926
+ tokensRemaining: number;
927
+ /** Number of entries excluded due to budget constraints. */
928
+ excluded: number;
929
+ }
930
+
931
+ /**
932
+ * Budget-aware hybrid retrieval combining FTS5, vector KNN, and graph neighbor scores.
933
+ *
934
+ * Strategy (parallel where possible):
935
+ * A. FTS5 BM25 search (always) — keyword precision (50% weight)
936
+ * B. Vector KNN search (optional) — semantic recall (40% weight, skipped if no embeddings)
937
+ * C. Graph neighbors (optional) — associative context (10% weight, skipped if graph empty)
938
+ *
939
+ * Score fusion: final = (fts*0.50 + vec*0.40 + graph*0.10) × qualityScore
940
+ * Recency boost: +0.05 for entries updated in last 7 days.
941
+ * Type priority: procedural entries get +0.10 (always-useful rules).
942
+ *
943
+ * Budget enforcement:
944
+ * - Rank top-50 candidates by fused score.
945
+ * - Walk list, accumulate token cost (≈ textLen/4), stop at budget.
946
+ * - Episodic entries dropped first when budget is tight.
947
+ *
948
+ * Citation tracking: increments citationCount for returned entries in background (setImmediate).
949
+ *
950
+ * @param projectRoot - Project root directory
951
+ * @param query - Text to search for
952
+ * @param tokenBudget - Maximum tokens to spend on results (default 500)
953
+ * @param options - Optional filters (types, tiers, verified)
954
+ * @returns Retrieved entries within budget with token accounting
955
+ */
956
+ export async function retrieveWithBudget(
957
+ projectRoot: string,
958
+ query: string,
959
+ tokenBudget = 500,
960
+ options?: BudgetedRetrievalOptions,
961
+ ): Promise<BudgetedResult> {
962
+ if (!query?.trim()) {
963
+ return { entries: [], tokensUsed: 0, tokensRemaining: tokenBudget, excluded: 0 };
964
+ }
965
+
966
+ // -------------------------------------------------------------------------
967
+ // Run search strategies in parallel
968
+ // -------------------------------------------------------------------------
969
+ const [ftsResult, vecResults, graphNeighbors] = await Promise.all([
970
+ // A. FTS5
971
+ searchBrain(projectRoot, query, { limit: 30 }).catch(() => ({
972
+ decisions: [],
973
+ patterns: [],
974
+ learnings: [],
975
+ observations: [],
976
+ })),
977
+ // B. Vector KNN (degrades gracefully when unavailable)
978
+ searchSimilar(query, projectRoot, 20).catch(
979
+ () => [] as ReturnType<typeof searchSimilar> extends Promise<infer T> ? T : never[],
980
+ ),
981
+ // C. Graph neighbors from top FTS hit
982
+ Promise.resolve([] as Array<{ id: string; graphScore: number }>),
983
+ ]);
984
+
985
+ // -------------------------------------------------------------------------
986
+ // Build ID → score map from FTS results
987
+ // -------------------------------------------------------------------------
988
+ interface ScoredEntry {
989
+ id: string;
990
+ type: string;
991
+ title: string;
992
+ text: string;
993
+ ftsScore: number;
994
+ vecScore: number;
995
+ graphScore: number;
996
+ qualityScore: number;
997
+ memoryTier?: string;
998
+ memoryType?: string;
999
+ updatedAt?: string;
1000
+ }
1001
+
1002
+ const candidateMap = new Map<string, ScoredEntry>();
1003
+
1004
+ // FTS results (normalized score 0.5 starting point — BM25 doesn't give 0..1)
1005
+ const FTS_BASE = 0.5;
1006
+ for (const d of ftsResult.decisions) {
1007
+ const raw = d as Record<string, unknown>;
1008
+ const id = d.id;
1009
+ const tier = (d.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1010
+ const mtype = (d.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1011
+ const updatedAt = (d.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1012
+ candidateMap.set(id, {
1013
+ id,
1014
+ type: 'decision',
1015
+ title: d.decision.slice(0, 120),
1016
+ text: `${d.decision} — ${d.rationale}`,
1017
+ ftsScore: FTS_BASE,
1018
+ vecScore: 0,
1019
+ graphScore: 0,
1020
+ qualityScore: d.qualityScore ?? 0.5,
1021
+ memoryTier: tier,
1022
+ memoryType: mtype,
1023
+ updatedAt,
1024
+ });
1025
+ }
1026
+
1027
+ for (const p of ftsResult.patterns) {
1028
+ const raw = p as Record<string, unknown>;
1029
+ const id = p.id;
1030
+ const tier = (p.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1031
+ const mtype = (p.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1032
+ const updatedAt = (p.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1033
+ candidateMap.set(id, {
1034
+ id,
1035
+ type: 'pattern',
1036
+ title: p.pattern.slice(0, 120),
1037
+ text: `${p.pattern} — ${p.context}`,
1038
+ ftsScore: FTS_BASE,
1039
+ vecScore: 0,
1040
+ graphScore: 0,
1041
+ qualityScore: p.qualityScore ?? 0.5,
1042
+ memoryTier: tier,
1043
+ memoryType: mtype,
1044
+ updatedAt,
1045
+ });
1046
+ }
1047
+
1048
+ for (const l of ftsResult.learnings) {
1049
+ const raw = l as Record<string, unknown>;
1050
+ const id = l.id;
1051
+ const tier = (l.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1052
+ const mtype = (l.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1053
+ const updatedAt = (l.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1054
+ candidateMap.set(id, {
1055
+ id,
1056
+ type: 'learning',
1057
+ title: l.insight.slice(0, 120),
1058
+ text: `${l.insight} (source: ${l.source})`,
1059
+ ftsScore: FTS_BASE,
1060
+ vecScore: 0,
1061
+ graphScore: 0,
1062
+ qualityScore: l.qualityScore ?? 0.5,
1063
+ memoryTier: tier,
1064
+ memoryType: mtype,
1065
+ updatedAt,
1066
+ });
1067
+ }
1068
+
1069
+ for (const o of ftsResult.observations) {
1070
+ const raw = o as Record<string, unknown>;
1071
+ const id = o.id;
1072
+ const tier = (o.memoryTier ?? (raw['memory_tier'] as string | undefined)) || undefined;
1073
+ const mtype = (o.memoryType ?? (raw['memory_type'] as string | undefined)) || undefined;
1074
+ const updatedAt = (o.updatedAt ?? (raw['updated_at'] as string | undefined)) || undefined;
1075
+ candidateMap.set(id, {
1076
+ id,
1077
+ type: 'observation',
1078
+ title: o.title.slice(0, 120),
1079
+ text: o.narrative ?? o.title,
1080
+ ftsScore: FTS_BASE,
1081
+ vecScore: 0,
1082
+ graphScore: 0,
1083
+ qualityScore: o.qualityScore ?? 0.5,
1084
+ memoryTier: tier,
1085
+ memoryType: mtype,
1086
+ updatedAt,
1087
+ });
1088
+ }
1089
+
1090
+ // B. Merge vector scores (distance → similarity: similarity = 1 - distance)
1091
+ for (const v of vecResults) {
1092
+ const simScore = Math.max(0, 1 - v.distance);
1093
+ const existing = candidateMap.get(v.id);
1094
+ if (existing) {
1095
+ existing.vecScore = simScore;
1096
+ } else {
1097
+ candidateMap.set(v.id, {
1098
+ id: v.id,
1099
+ type: v.type,
1100
+ title: v.title.slice(0, 120),
1101
+ text: v.text,
1102
+ ftsScore: 0,
1103
+ vecScore: simScore,
1104
+ graphScore: 0,
1105
+ qualityScore: 0.5,
1106
+ memoryTier: undefined,
1107
+ memoryType: undefined,
1108
+ });
1109
+ }
1110
+ }
1111
+
1112
+ // C. Merge graph scores
1113
+ for (const g of graphNeighbors) {
1114
+ const existing = candidateMap.get(g.id);
1115
+ if (existing) {
1116
+ existing.graphScore = g.graphScore;
1117
+ }
1118
+ }
1119
+
1120
+ // -------------------------------------------------------------------------
1121
+ // Score fusion + ranking
1122
+ // -------------------------------------------------------------------------
1123
+ const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
1124
+ .toISOString()
1125
+ .replace('T', ' ')
1126
+ .slice(0, 19);
1127
+
1128
+ const candidates = Array.from(candidateMap.values()).map((c) => {
1129
+ // Fused score
1130
+ let score = c.ftsScore * 0.5 + c.vecScore * 0.4 + c.graphScore * 0.1;
1131
+
1132
+ // Quality multiplier
1133
+ score *= c.qualityScore;
1134
+
1135
+ // Recency boost for recently-updated entries
1136
+ if (c.updatedAt && c.updatedAt >= sevenDaysAgo) {
1137
+ score += 0.05;
1138
+ }
1139
+
1140
+ // Type priority boost for procedural entries (always-useful rules)
1141
+ if (c.memoryType === 'procedural' || c.type === 'pattern') {
1142
+ score += 0.1;
1143
+ }
1144
+
1145
+ return { ...c, score };
1146
+ });
1147
+
1148
+ // -------------------------------------------------------------------------
1149
+ // Apply option filters (types, tiers, verified)
1150
+ // -------------------------------------------------------------------------
1151
+
1152
+ // We'll apply verified filter by checking the DB if requested
1153
+ let filtered = candidates;
1154
+
1155
+ if (options?.types && options.types.length > 0) {
1156
+ const allowedTypes = new Set(options.types);
1157
+ filtered = filtered.filter((c) => {
1158
+ if (!c.memoryType) return true; // unknown type — include
1159
+ return allowedTypes.has(c.memoryType as 'semantic' | 'episodic' | 'procedural');
1160
+ });
1161
+ }
1162
+
1163
+ if (options?.tiers && options.tiers.length > 0) {
1164
+ const allowedTiers = new Set(options.tiers);
1165
+ filtered = filtered.filter((c) => {
1166
+ if (!c.memoryTier) return true; // unknown tier — include
1167
+ return allowedTiers.has(c.memoryTier as 'short' | 'medium' | 'long');
1168
+ });
1169
+ }
1170
+
1171
+ // -------------------------------------------------------------------------
1172
+ // Sort: procedural first, then by score descending
1173
+ // -------------------------------------------------------------------------
1174
+ filtered.sort((a, b) => {
1175
+ const aProcedural = a.memoryType === 'procedural' || a.type === 'pattern' ? 1 : 0;
1176
+ const bProcedural = b.memoryType === 'procedural' || b.type === 'pattern' ? 1 : 0;
1177
+ if (aProcedural !== bProcedural) return bProcedural - aProcedural;
1178
+ return b.score - a.score;
1179
+ });
1180
+
1181
+ // Cap candidate list at top 50
1182
+ const topCandidates = filtered.slice(0, 50);
1183
+
1184
+ // -------------------------------------------------------------------------
1185
+ // Budget enforcement — episodic entries are dropped first when budget tight
1186
+ // -------------------------------------------------------------------------
1187
+
1188
+ // Sort for budget walk: procedural first, semantic second, episodic last
1189
+ const typeOrder = (c: ScoredEntry & { score: number }): number => {
1190
+ if (c.memoryType === 'procedural' || c.type === 'pattern') return 0;
1191
+ if (c.memoryType === 'semantic' || c.type === 'decision' || c.type === 'learning') return 1;
1192
+ return 2; // episodic
1193
+ };
1194
+
1195
+ const budgetOrdered = [...topCandidates].sort((a, b) => {
1196
+ const orderDiff = typeOrder(a) - typeOrder(b);
1197
+ if (orderDiff !== 0) return orderDiff;
1198
+ return b.score - a.score;
1199
+ });
1200
+
1201
+ const result: BudgetedEntry[] = [];
1202
+ let tokensUsed = 0;
1203
+ let excluded = 0;
1204
+
1205
+ for (const candidate of budgetOrdered) {
1206
+ const entryTokens = Math.ceil(candidate.text.length / 4);
1207
+
1208
+ if (tokensUsed + entryTokens > tokenBudget) {
1209
+ excluded++;
1210
+ continue;
1211
+ }
1212
+
1213
+ result.push({
1214
+ id: candidate.id,
1215
+ type: candidate.type,
1216
+ title: candidate.title,
1217
+ text: candidate.text,
1218
+ score: candidate.score,
1219
+ tokensEstimated: entryTokens,
1220
+ memoryTier: candidate.memoryTier,
1221
+ memoryType: candidate.memoryType,
1222
+ });
1223
+ tokensUsed += entryTokens;
1224
+ }
1225
+
1226
+ // -------------------------------------------------------------------------
1227
+ // Citation tracking — non-blocking background increment
1228
+ // -------------------------------------------------------------------------
1229
+ if (result.length > 0) {
1230
+ const returnedIds = result.map((e) => e.id);
1231
+ setImmediate(() => {
1232
+ incrementCitationCounts(projectRoot, returnedIds).catch(() => {
1233
+ /* best-effort */
1234
+ });
1235
+ });
1236
+ }
1237
+
1238
+ return {
1239
+ entries: result,
1240
+ tokensUsed,
1241
+ tokensRemaining: tokenBudget - tokensUsed,
1242
+ excluded,
1243
+ };
1244
+ }
1245
+
1246
+ // ============================================================================
1247
+ // Citation Count Increment (non-blocking helper)
1248
+ // ============================================================================
1249
+
1250
+ /**
1251
+ * Increment citationCount for a list of entry IDs.
1252
+ *
1253
+ * Routes each ID to the correct table based on its ID prefix. All updates
1254
+ * are best-effort — errors are silently swallowed.
1255
+ *
1256
+ * @param projectRoot - Project root for brain.db resolution
1257
+ * @param ids - Entry IDs whose citation counts should be incremented
1258
+ */
1259
+ async function incrementCitationCounts(projectRoot: string, ids: string[]): Promise<void> {
1260
+ if (ids.length === 0) return;
1261
+
1262
+ const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
1263
+ await getBrainDb(projectRoot);
1264
+ const nativeDb = getBrainNativeDb();
1265
+ if (!nativeDb) return;
1266
+
1267
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
1268
+
1269
+ for (const id of ids) {
1270
+ let table: string;
1271
+ if (id.startsWith('D-') || /^D\d/.test(id)) {
1272
+ table = 'brain_decisions';
1273
+ } else if (id.startsWith('P-') || /^P\d/.test(id)) {
1274
+ table = 'brain_patterns';
1275
+ } else if (id.startsWith('L-') || /^L\d/.test(id)) {
1276
+ table = 'brain_learnings';
1277
+ } else {
1278
+ table = 'brain_observations';
1279
+ }
1280
+
1281
+ try {
1282
+ nativeDb
1283
+ .prepare(
1284
+ `UPDATE ${table} SET citation_count = citation_count + 1, updated_at = ? WHERE id = ?`,
1285
+ )
1286
+ .run(now, id);
1287
+ } catch {
1288
+ /* best-effort — column may not exist in older schemas */
1289
+ }
1290
+ }
1291
+ }
@@ -545,13 +545,47 @@ function likeSearchObservations(
545
545
 
546
546
  /**
547
547
  * Escape special FTS5 characters in query string.
548
- * Wraps each token in quotes to prevent syntax errors from special chars.
548
+ *
549
+ * Wraps each meaningful token in double quotes and joins with OR so that
550
+ * partial matches are returned even when some tokens are not indexable
551
+ * (e.g. task prefixes like "EPIC:", em-dashes "—", or short stop-words).
552
+ *
553
+ * Strategy:
554
+ * 1. Split on whitespace.
555
+ * 2. Keep only tokens that contain at least one word character (\w), which
556
+ * ensures punctuation-only tokens (em dashes, colons standalone, etc.)
557
+ * are dropped before they zero-out the entire result set.
558
+ * 3. Deduplicate case-insensitively.
559
+ * 4. Join with OR so the query broadens rather than requiring ALL tokens.
560
+ *
561
+ * Using AND (implicit FTS5 join) caused empty results whenever a task title
562
+ * contained non-word tokens such as em dashes ("—") or trailing colons
563
+ * ("EPIC:"), because FTS5's default tokenizer cannot index them and the
564
+ * AND semantics then guaranteed zero matches for the whole query. (T553 bug fix)
549
565
  */
550
566
  function escapeFts5Query(query: string): string {
551
- // Split on whitespace, wrap each token in double quotes
552
- const tokens = query.trim().split(/\s+/).filter(Boolean);
567
+ const rawTokens = query.trim().split(/\s+/).filter(Boolean);
568
+ if (rawTokens.length === 0) return '""';
569
+
570
+ // Keep tokens that have at least one alphanumeric character and are not
571
+ // pure stop-words (length ≥ 2 after stripping leading/trailing punctuation).
572
+ const seen = new Set<string>();
573
+ const tokens: string[] = [];
574
+ for (const t of rawTokens) {
575
+ // Strip leading/trailing non-word characters (e.g. "EPIC:" → "EPIC", "—" → "")
576
+ const stripped = t.replace(/^\W+|\W+$/g, '');
577
+ if (stripped.length < 2) continue; // skip very short or empty tokens
578
+ if (!/\w/.test(stripped)) continue; // skip tokens with no word chars
579
+ const lower = stripped.toLowerCase();
580
+ if (seen.has(lower)) continue; // deduplicate
581
+ seen.add(lower);
582
+ tokens.push(`"${stripped.replace(/"/g, '""')}"`);
583
+ }
584
+
553
585
  if (tokens.length === 0) return '""';
554
- return tokens.map((t) => `"${t.replace(/"/g, '""')}"`).join(' ');
586
+
587
+ // OR semantics: any matching token returns the row, ranked by BM25 relevance.
588
+ return tokens.join(' OR ');
555
589
  }
556
590
 
557
591
  /**
@@ -147,11 +147,26 @@ export async function storeDecision(
147
147
  }
148
148
  }
149
149
 
150
- // Compute quality score from confidence level, rationale richness, and task linkage.
150
+ // T549 Wave 1-A: Tier routing for decisions.
151
+ // Decisions are always medium-term semantic entries — they are intentional acts,
152
+ // always manually entered via cleo memory decision-store or the CLI.
153
+ // sourceConfidence = 'owner' (decisions are owner-stated facts by definition)
154
+ // verified = true (the act of deciding IS verification)
155
+ // memoryTier = 'medium' (decisions skip short-term; may promote to long after 7d+outcome:success)
156
+ // memoryType = 'semantic' (decisions are declarative architectural facts)
157
+ const memoryTier = 'medium' as const;
158
+ const memoryType = 'semantic' as const;
159
+ const sourceConfidence = 'owner' as const;
160
+ const verified = true;
161
+
162
+ // Compute quality score from confidence level, rationale richness, task linkage,
163
+ // and T549 source multiplier (owner = 1.0, medium tier = +0.05).
151
164
  const qualityScore = computeDecisionQuality({
152
165
  confidence: params.confidence,
153
166
  rationale: params.rationale.trim(),
154
167
  contextTaskId: validTaskId ?? null,
168
+ sourceConfidence,
169
+ memoryTier,
155
170
  });
156
171
 
157
172
  const row: NewBrainDecisionRow = {
@@ -166,6 +181,11 @@ export async function storeDecision(
166
181
  contextTaskId: validTaskId,
167
182
  contextPhase: params.contextPhase,
168
183
  qualityScore,
184
+ // T549 Wave 1-A: tier/type/confidence assigned at write time
185
+ memoryTier,
186
+ memoryType,
187
+ sourceConfidence,
188
+ verified,
169
189
  };
170
190
 
171
191
  const saved = await accessor.addDecision(row);
@@ -28,6 +28,8 @@ import {
28
28
  searchBrainCompact,
29
29
  timelineBrain,
30
30
  } from './brain-retrieval.js';
31
+ // T545: Decision store with quality scoring and graph auto-population
32
+ import { storeDecision } from './decisions.js';
31
33
  import {
32
34
  learningStats,
33
35
  type SearchLearningParams,
@@ -349,22 +351,18 @@ export async function memoryDecisionStore(
349
351
 
350
352
  try {
351
353
  const root = resolveRoot(projectRoot);
352
- const accessor = await getBrainAccessor(root);
353
- const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
354
- const id = `D-${Date.now().toString(36)}`;
355
-
356
- const row = await accessor.addDecision({
357
- id,
354
+ // Route through storeDecision() so quality scoring and graph auto-population
355
+ // (upsertGraphNode) run on every insert fixes T545 regression where
356
+ // engine-compat bypassed decisions.ts and wrote directly to the accessor,
357
+ // leaving quality_score NULL and no graph node created.
358
+ const row = await storeDecision(root, {
358
359
  type: 'technical',
359
360
  decision: params.decision,
360
361
  rationale: params.rationale,
361
362
  confidence: 'medium',
362
363
  outcome: 'pending',
363
- alternativesJson: params.alternatives ? JSON.stringify(params.alternatives) : null,
364
- contextTaskId: params.taskId ?? null,
365
- contextEpicId: null,
366
- contextPhase: null,
367
- createdAt: now,
364
+ alternatives: params.alternatives,
365
+ contextTaskId: params.taskId,
368
366
  });
369
367
 
370
368
  return {