@cleocode/core 2026.4.58 → 2026.4.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (933) hide show
  1. package/dist/adapters/adapter-registry.js +64 -0
  2. package/dist/adapters/adapter-registry.js.map +1 -0
  3. package/dist/adapters/discovery.js +83 -0
  4. package/dist/adapters/discovery.js.map +1 -0
  5. package/dist/adapters/index.js +9 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/manager.js +260 -0
  8. package/dist/adapters/manager.js.map +1 -0
  9. package/dist/admin/export-tasks.js +171 -0
  10. package/dist/admin/export-tasks.js.map +1 -0
  11. package/dist/admin/export.js +103 -0
  12. package/dist/admin/export.js.map +1 -0
  13. package/dist/admin/help.js +106 -0
  14. package/dist/admin/help.js.map +1 -0
  15. package/dist/admin/import-tasks.js +182 -0
  16. package/dist/admin/import-tasks.js.map +1 -0
  17. package/dist/admin/import.js +129 -0
  18. package/dist/admin/import.js.map +1 -0
  19. package/dist/admin/index.js +13 -0
  20. package/dist/admin/index.js.map +1 -0
  21. package/dist/adrs/find.js +134 -0
  22. package/dist/adrs/find.js.map +1 -0
  23. package/dist/adrs/index.js +15 -0
  24. package/dist/adrs/index.js.map +1 -0
  25. package/dist/adrs/link-pipeline.js +160 -0
  26. package/dist/adrs/link-pipeline.js.map +1 -0
  27. package/dist/adrs/list.js +43 -0
  28. package/dist/adrs/list.js.map +1 -0
  29. package/dist/adrs/parse.js +51 -0
  30. package/dist/adrs/parse.js.map +1 -0
  31. package/dist/adrs/show.js +22 -0
  32. package/dist/adrs/show.js.map +1 -0
  33. package/dist/adrs/sync.js +232 -0
  34. package/dist/adrs/sync.js.map +1 -0
  35. package/dist/adrs/types.js +9 -0
  36. package/dist/adrs/types.js.map +1 -0
  37. package/dist/adrs/validate.js +57 -0
  38. package/dist/adrs/validate.js.map +1 -0
  39. package/dist/agents/agent-registry.js +288 -0
  40. package/dist/agents/agent-registry.js.map +1 -0
  41. package/dist/agents/agent-schema.js +82 -0
  42. package/dist/agents/agent-schema.js.map +1 -0
  43. package/dist/agents/capacity.js +116 -0
  44. package/dist/agents/capacity.js.map +1 -0
  45. package/dist/agents/execution-learning.js +474 -0
  46. package/dist/agents/execution-learning.js.map +1 -0
  47. package/dist/agents/health-monitor.js +217 -0
  48. package/dist/agents/health-monitor.js.map +1 -0
  49. package/dist/agents/index.js +29 -0
  50. package/dist/agents/index.js.map +1 -0
  51. package/dist/agents/registry.js +314 -0
  52. package/dist/agents/registry.js.map +1 -0
  53. package/dist/agents/retry.js +215 -0
  54. package/dist/agents/retry.js.map +1 -0
  55. package/dist/audit-prune.js +94 -0
  56. package/dist/audit-prune.js.map +1 -0
  57. package/dist/audit.js +68 -0
  58. package/dist/audit.js.map +1 -0
  59. package/dist/backfill/index.js +229 -0
  60. package/dist/backfill/index.js.map +1 -0
  61. package/dist/bootstrap.js +435 -0
  62. package/dist/bootstrap.js.map +1 -0
  63. package/dist/caamp/adapter.js +259 -0
  64. package/dist/caamp/adapter.js.map +1 -0
  65. package/dist/caamp/capability-check.js +38 -0
  66. package/dist/caamp/capability-check.js.map +1 -0
  67. package/dist/caamp/index.js +21 -0
  68. package/dist/caamp/index.js.map +1 -0
  69. package/dist/caamp-init.js +16 -0
  70. package/dist/caamp-init.js.map +1 -0
  71. package/dist/cleo.js +322 -0
  72. package/dist/cleo.js.map +1 -0
  73. package/dist/code/index.js +14 -0
  74. package/dist/code/index.js.map +1 -0
  75. package/dist/code/outline.js +165 -0
  76. package/dist/code/outline.js.map +1 -0
  77. package/dist/code/parser.js +420 -0
  78. package/dist/code/parser.js.map +1 -0
  79. package/dist/code/search.js +135 -0
  80. package/dist/code/search.js.map +1 -0
  81. package/dist/code/unfold.js +155 -0
  82. package/dist/code/unfold.js.map +1 -0
  83. package/dist/codebase-map/analyzers/architecture.js +129 -0
  84. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  85. package/dist/codebase-map/analyzers/concerns.js +122 -0
  86. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  87. package/dist/codebase-map/analyzers/conventions.js +149 -0
  88. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  89. package/dist/codebase-map/analyzers/integrations.js +108 -0
  90. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  91. package/dist/codebase-map/analyzers/stack.js +117 -0
  92. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  93. package/dist/codebase-map/analyzers/structure.js +137 -0
  94. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  95. package/dist/codebase-map/analyzers/testing.js +118 -0
  96. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  97. package/dist/codebase-map/index.js +57 -0
  98. package/dist/codebase-map/index.js.map +1 -0
  99. package/dist/codebase-map/store.js +122 -0
  100. package/dist/codebase-map/store.js.map +1 -0
  101. package/dist/codebase-map/summary.js +152 -0
  102. package/dist/codebase-map/summary.js.map +1 -0
  103. package/dist/compliance/index.js +288 -0
  104. package/dist/compliance/index.js.map +1 -0
  105. package/dist/compliance/protocol-enforcement.js +332 -0
  106. package/dist/compliance/protocol-enforcement.js.map +1 -0
  107. package/dist/compliance/protocol-rules.js +786 -0
  108. package/dist/compliance/protocol-rules.js.map +1 -0
  109. package/dist/compliance/protocol-types.js +79 -0
  110. package/dist/compliance/protocol-types.js.map +1 -0
  111. package/dist/compliance/store.js +53 -0
  112. package/dist/compliance/store.js.map +1 -0
  113. package/dist/conduit/conduit-client.js +107 -0
  114. package/dist/conduit/conduit-client.js.map +1 -0
  115. package/dist/conduit/factory.js +55 -0
  116. package/dist/conduit/factory.js.map +1 -0
  117. package/dist/conduit/http-transport.js +155 -0
  118. package/dist/conduit/http-transport.js.map +1 -0
  119. package/dist/conduit/local-transport.js +255 -0
  120. package/dist/conduit/local-transport.js.map +1 -0
  121. package/dist/conduit/sse-transport.js +299 -0
  122. package/dist/conduit/sse-transport.js.map +1 -0
  123. package/dist/config/build-config.js +29 -0
  124. package/dist/config/build-config.js.map +1 -0
  125. package/dist/config.js +407 -0
  126. package/dist/config.js.map +1 -0
  127. package/dist/constants.js +18 -0
  128. package/dist/constants.js.map +1 -0
  129. package/dist/context/index.js +137 -0
  130. package/dist/context/index.js.map +1 -0
  131. package/dist/crypto/credentials.js +219 -0
  132. package/dist/crypto/credentials.js.map +1 -0
  133. package/dist/discovery.js +182 -0
  134. package/dist/discovery.js.map +1 -0
  135. package/dist/engine-result.js +12 -0
  136. package/dist/engine-result.js.map +1 -0
  137. package/dist/error-catalog.js +404 -0
  138. package/dist/error-catalog.js.map +1 -0
  139. package/dist/error-registry.js +393 -0
  140. package/dist/error-registry.js.map +1 -0
  141. package/dist/errors.js +173 -0
  142. package/dist/errors.js.map +1 -0
  143. package/dist/hooks/handlers/agent-hooks.js +106 -0
  144. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  145. package/dist/hooks/handlers/conduit-hooks.js +229 -0
  146. package/dist/hooks/handlers/conduit-hooks.js.map +1 -0
  147. package/dist/hooks/handlers/context-hooks.js +111 -0
  148. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  149. package/dist/hooks/handlers/error-hooks.js +52 -0
  150. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  151. package/dist/hooks/handlers/file-hooks.js +104 -0
  152. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  153. package/dist/hooks/handlers/handler-helpers.js +61 -0
  154. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  155. package/dist/hooks/handlers/index.js +37 -0
  156. package/dist/hooks/handlers/index.js.map +1 -0
  157. package/dist/hooks/handlers/intelligence-hooks.js +69 -0
  158. package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
  159. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  160. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  161. package/dist/hooks/handlers/notification-hooks.js +62 -0
  162. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  163. package/dist/hooks/handlers/session-hooks.js +190 -0
  164. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  165. package/dist/hooks/handlers/task-hooks.js +90 -0
  166. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  167. package/dist/hooks/handlers/watchdog-hooks.js +162 -0
  168. package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
  169. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  170. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  171. package/dist/hooks/index.js +13 -0
  172. package/dist/hooks/index.js.map +1 -0
  173. package/dist/hooks/payload-schemas.js +220 -0
  174. package/dist/hooks/payload-schemas.js.map +1 -0
  175. package/dist/hooks/provider-hooks.js +66 -0
  176. package/dist/hooks/provider-hooks.js.map +1 -0
  177. package/dist/hooks/registry.js +229 -0
  178. package/dist/hooks/registry.js.map +1 -0
  179. package/dist/hooks/types.js +66 -0
  180. package/dist/hooks/types.js.map +1 -0
  181. package/dist/hooks.js +136 -0
  182. package/dist/hooks.js.map +1 -0
  183. package/dist/init.js +959 -0
  184. package/dist/init.js.map +1 -0
  185. package/dist/inject/index.js +82 -0
  186. package/dist/inject/index.js.map +1 -0
  187. package/dist/injection.js +377 -0
  188. package/dist/injection.js.map +1 -0
  189. package/dist/intelligence/adaptive-validation.js +497 -0
  190. package/dist/intelligence/adaptive-validation.js.map +1 -0
  191. package/dist/intelligence/impact.js +675 -0
  192. package/dist/intelligence/impact.js.map +1 -0
  193. package/dist/intelligence/index.js +22 -0
  194. package/dist/intelligence/index.js.map +1 -0
  195. package/dist/intelligence/patterns.js +492 -0
  196. package/dist/intelligence/patterns.js.map +1 -0
  197. package/dist/intelligence/prediction.js +499 -0
  198. package/dist/intelligence/prediction.js.map +1 -0
  199. package/dist/intelligence/types.js +13 -0
  200. package/dist/intelligence/types.js.map +1 -0
  201. package/dist/issue/create.js +121 -0
  202. package/dist/issue/create.js.map +1 -0
  203. package/dist/issue/diagnostics.js +59 -0
  204. package/dist/issue/diagnostics.js.map +1 -0
  205. package/dist/issue/index.js +10 -0
  206. package/dist/issue/index.js.map +1 -0
  207. package/dist/issue/template-parser.js +267 -0
  208. package/dist/issue/template-parser.js.map +1 -0
  209. package/dist/json-schema-validator.js +76 -0
  210. package/dist/json-schema-validator.js.map +1 -0
  211. package/dist/lib/index.js +11 -0
  212. package/dist/lib/index.js.map +1 -0
  213. package/dist/lib/retry.js +152 -0
  214. package/dist/lib/retry.js.map +1 -0
  215. package/dist/lib/tree-sitter-languages.js +75 -0
  216. package/dist/lib/tree-sitter-languages.js.map +1 -0
  217. package/dist/lifecycle/chain-composition.js +152 -0
  218. package/dist/lifecycle/chain-composition.js.map +1 -0
  219. package/dist/lifecycle/chain-store.js +246 -0
  220. package/dist/lifecycle/chain-store.js.map +1 -0
  221. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  222. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  223. package/dist/lifecycle/default-chain.js +176 -0
  224. package/dist/lifecycle/default-chain.js.map +1 -0
  225. package/dist/lifecycle/evidence.js +180 -0
  226. package/dist/lifecycle/evidence.js.map +1 -0
  227. package/dist/lifecycle/frontmatter.js +363 -0
  228. package/dist/lifecycle/frontmatter.js.map +1 -0
  229. package/dist/lifecycle/index.js +756 -0
  230. package/dist/lifecycle/index.js.map +1 -0
  231. package/dist/lifecycle/pipeline.js +656 -0
  232. package/dist/lifecycle/pipeline.js.map +1 -0
  233. package/dist/lifecycle/rcasd-index.js +326 -0
  234. package/dist/lifecycle/rcasd-index.js.map +1 -0
  235. package/dist/lifecycle/rcasd-paths.js +220 -0
  236. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  237. package/dist/lifecycle/resume.js +864 -0
  238. package/dist/lifecycle/resume.js.map +1 -0
  239. package/dist/lifecycle/stage-artifacts.js +94 -0
  240. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  241. package/dist/lifecycle/stage-guidance.js +234 -0
  242. package/dist/lifecycle/stage-guidance.js.map +1 -0
  243. package/dist/lifecycle/stages.js +534 -0
  244. package/dist/lifecycle/stages.js.map +1 -0
  245. package/dist/lifecycle/state-machine.js +516 -0
  246. package/dist/lifecycle/state-machine.js.map +1 -0
  247. package/dist/lifecycle/tessera-engine.js +249 -0
  248. package/dist/lifecycle/tessera-engine.js.map +1 -0
  249. package/dist/logger.js +140 -0
  250. package/dist/logger.js.map +1 -0
  251. package/dist/memory/anthropic-key-resolver.js +105 -0
  252. package/dist/memory/anthropic-key-resolver.js.map +1 -0
  253. package/dist/memory/auto-extract.js +77 -0
  254. package/dist/memory/auto-extract.js.map +1 -0
  255. package/dist/memory/brain-backfill.js +389 -0
  256. package/dist/memory/brain-backfill.js.map +1 -0
  257. package/dist/memory/brain-consolidator.js +294 -0
  258. package/dist/memory/brain-consolidator.js.map +1 -0
  259. package/dist/memory/brain-embedding.js +66 -0
  260. package/dist/memory/brain-embedding.js.map +1 -0
  261. package/dist/memory/brain-export.js +239 -0
  262. package/dist/memory/brain-export.js.map +1 -0
  263. package/dist/memory/brain-lifecycle.js +841 -0
  264. package/dist/memory/brain-lifecycle.js.map +1 -0
  265. package/dist/memory/brain-links.js +161 -0
  266. package/dist/memory/brain-links.js.map +1 -0
  267. package/dist/memory/brain-maintenance.js +125 -0
  268. package/dist/memory/brain-maintenance.js.map +1 -0
  269. package/dist/memory/brain-migration.js +149 -0
  270. package/dist/memory/brain-migration.js.map +1 -0
  271. package/dist/memory/brain-purge.js +243 -0
  272. package/dist/memory/brain-purge.js.map +1 -0
  273. package/dist/memory/brain-reasoning.js +215 -0
  274. package/dist/memory/brain-reasoning.js.map +1 -0
  275. package/dist/memory/brain-retrieval.js +1088 -0
  276. package/dist/memory/brain-retrieval.js.map +1 -0
  277. package/dist/memory/brain-row-types.js +10 -0
  278. package/dist/memory/brain-row-types.js.map +1 -0
  279. package/dist/memory/brain-search.js +613 -0
  280. package/dist/memory/brain-search.js.map +1 -0
  281. package/dist/memory/brain-similarity.js +145 -0
  282. package/dist/memory/brain-similarity.js.map +1 -0
  283. package/dist/memory/brain-stdp.js +297 -0
  284. package/dist/memory/brain-stdp.js.map +1 -0
  285. package/dist/memory/claude-mem-migration.js +277 -0
  286. package/dist/memory/claude-mem-migration.js.map +1 -0
  287. package/dist/memory/decision-cross-link.js +228 -0
  288. package/dist/memory/decision-cross-link.js.map +1 -0
  289. package/dist/memory/decisions.js +242 -0
  290. package/dist/memory/decisions.js.map +1 -0
  291. package/dist/memory/edge-types.js +31 -0
  292. package/dist/memory/edge-types.js.map +1 -0
  293. package/dist/memory/embedding-local.js +102 -0
  294. package/dist/memory/embedding-local.js.map +1 -0
  295. package/dist/memory/embedding-queue.js +271 -0
  296. package/dist/memory/embedding-queue.js.map +1 -0
  297. package/dist/memory/embedding-worker.js +58 -0
  298. package/dist/memory/embedding-worker.js.map +1 -0
  299. package/dist/memory/engine-compat.js +1597 -0
  300. package/dist/memory/engine-compat.js.map +1 -0
  301. package/dist/memory/extraction-gate.js +459 -0
  302. package/dist/memory/extraction-gate.js.map +1 -0
  303. package/dist/memory/graph-auto-populate.js +148 -0
  304. package/dist/memory/graph-auto-populate.js.map +1 -0
  305. package/dist/memory/graph-memory-bridge.js +517 -0
  306. package/dist/memory/graph-memory-bridge.js.map +1 -0
  307. package/dist/memory/graph-queries.js +290 -0
  308. package/dist/memory/graph-queries.js.map +1 -0
  309. package/dist/memory/index.js +1148 -0
  310. package/dist/memory/index.js.map +1 -0
  311. package/dist/memory/learnings.js +197 -0
  312. package/dist/memory/learnings.js.map +1 -0
  313. package/dist/memory/llm-extraction.js +425 -0
  314. package/dist/memory/llm-extraction.js.map +1 -0
  315. package/dist/memory/memory-bridge.js +382 -0
  316. package/dist/memory/memory-bridge.js.map +1 -0
  317. package/dist/memory/mental-model-injection.js +61 -0
  318. package/dist/memory/mental-model-injection.js.map +1 -0
  319. package/dist/memory/mental-model-queue.js +211 -0
  320. package/dist/memory/mental-model-queue.js.map +1 -0
  321. package/dist/memory/observer-reflector.js +626 -0
  322. package/dist/memory/observer-reflector.js.map +1 -0
  323. package/dist/memory/patterns.js +192 -0
  324. package/dist/memory/patterns.js.map +1 -0
  325. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  326. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  327. package/dist/memory/quality-feedback.js +449 -0
  328. package/dist/memory/quality-feedback.js.map +1 -0
  329. package/dist/memory/quality-scoring.js +182 -0
  330. package/dist/memory/quality-scoring.js.map +1 -0
  331. package/dist/memory/session-memory.js +331 -0
  332. package/dist/memory/session-memory.js.map +1 -0
  333. package/dist/memory/sleep-consolidation.js +706 -0
  334. package/dist/memory/sleep-consolidation.js.map +1 -0
  335. package/dist/memory/temporal-supersession.js +403 -0
  336. package/dist/memory/temporal-supersession.js.map +1 -0
  337. package/dist/metrics/ab-test.js +260 -0
  338. package/dist/metrics/ab-test.js.map +1 -0
  339. package/dist/metrics/aggregation.js +363 -0
  340. package/dist/metrics/aggregation.js.map +1 -0
  341. package/dist/metrics/common.js +64 -0
  342. package/dist/metrics/common.js.map +1 -0
  343. package/dist/metrics/enums.js +78 -0
  344. package/dist/metrics/enums.js.map +1 -0
  345. package/dist/metrics/index.js +19 -0
  346. package/dist/metrics/index.js.map +1 -0
  347. package/dist/metrics/model-provider-registry.js +88 -0
  348. package/dist/metrics/model-provider-registry.js.map +1 -0
  349. package/dist/metrics/otel-integration.js +263 -0
  350. package/dist/metrics/otel-integration.js.map +1 -0
  351. package/dist/metrics/provider-detection.js +103 -0
  352. package/dist/metrics/provider-detection.js.map +1 -0
  353. package/dist/metrics/token-estimation.js +253 -0
  354. package/dist/metrics/token-estimation.js.map +1 -0
  355. package/dist/metrics/token-service.js +450 -0
  356. package/dist/metrics/token-service.js.map +1 -0
  357. package/dist/migration/agent-outputs.js +316 -0
  358. package/dist/migration/agent-outputs.js.map +1 -0
  359. package/dist/migration/checksum.js +92 -0
  360. package/dist/migration/checksum.js.map +1 -0
  361. package/dist/migration/index.js +282 -0
  362. package/dist/migration/index.js.map +1 -0
  363. package/dist/migration/logger.js +360 -0
  364. package/dist/migration/logger.js.map +1 -0
  365. package/dist/migration/preflight.js +9 -0
  366. package/dist/migration/preflight.js.map +1 -0
  367. package/dist/migration/state.js +421 -0
  368. package/dist/migration/state.js.map +1 -0
  369. package/dist/migration/validate.js +241 -0
  370. package/dist/migration/validate.js.map +1 -0
  371. package/dist/mvi-helpers.js +73 -0
  372. package/dist/mvi-helpers.js.map +1 -0
  373. package/dist/nexus/deps.js +375 -0
  374. package/dist/nexus/deps.js.map +1 -0
  375. package/dist/nexus/discover.js +288 -0
  376. package/dist/nexus/discover.js.map +1 -0
  377. package/dist/nexus/hash.js +10 -0
  378. package/dist/nexus/hash.js.map +1 -0
  379. package/dist/nexus/index.js +40 -0
  380. package/dist/nexus/index.js.map +1 -0
  381. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  382. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  383. package/dist/nexus/nexus-bridge.js +321 -0
  384. package/dist/nexus/nexus-bridge.js.map +1 -0
  385. package/dist/nexus/permissions.js +105 -0
  386. package/dist/nexus/permissions.js.map +1 -0
  387. package/dist/nexus/query.js +175 -0
  388. package/dist/nexus/query.js.map +1 -0
  389. package/dist/nexus/registry.js +665 -0
  390. package/dist/nexus/registry.js.map +1 -0
  391. package/dist/nexus/sharing/index.js +288 -0
  392. package/dist/nexus/sharing/index.js.map +1 -0
  393. package/dist/nexus/transfer-types.js +8 -0
  394. package/dist/nexus/transfer-types.js.map +1 -0
  395. package/dist/nexus/transfer.js +271 -0
  396. package/dist/nexus/transfer.js.map +1 -0
  397. package/dist/nexus/workspace.js +355 -0
  398. package/dist/nexus/workspace.js.map +1 -0
  399. package/dist/observability/index.js +103 -0
  400. package/dist/observability/index.js.map +1 -0
  401. package/dist/observability/log-filter.js +63 -0
  402. package/dist/observability/log-filter.js.map +1 -0
  403. package/dist/observability/log-parser.js +99 -0
  404. package/dist/observability/log-parser.js.map +1 -0
  405. package/dist/observability/log-reader.js +139 -0
  406. package/dist/observability/log-reader.js.map +1 -0
  407. package/dist/observability/types.js +19 -0
  408. package/dist/observability/types.js.map +1 -0
  409. package/dist/orchestration/analyze.js +107 -0
  410. package/dist/orchestration/analyze.js.map +1 -0
  411. package/dist/orchestration/bootstrap.js +132 -0
  412. package/dist/orchestration/bootstrap.js.map +1 -0
  413. package/dist/orchestration/context.js +56 -0
  414. package/dist/orchestration/context.js.map +1 -0
  415. package/dist/orchestration/critical-path.js +100 -0
  416. package/dist/orchestration/critical-path.js.map +1 -0
  417. package/dist/orchestration/hierarchy.js +183 -0
  418. package/dist/orchestration/hierarchy.js.map +1 -0
  419. package/dist/orchestration/index.js +287 -0
  420. package/dist/orchestration/index.js.map +1 -0
  421. package/dist/orchestration/parallel.js +89 -0
  422. package/dist/orchestration/parallel.js.map +1 -0
  423. package/dist/orchestration/protocol-validators.js +815 -0
  424. package/dist/orchestration/protocol-validators.js.map +1 -0
  425. package/dist/orchestration/skill-ops.js +98 -0
  426. package/dist/orchestration/skill-ops.js.map +1 -0
  427. package/dist/orchestration/status.js +107 -0
  428. package/dist/orchestration/status.js.map +1 -0
  429. package/dist/orchestration/unblock.js +103 -0
  430. package/dist/orchestration/unblock.js.map +1 -0
  431. package/dist/orchestration/validate-spawn.js +67 -0
  432. package/dist/orchestration/validate-spawn.js.map +1 -0
  433. package/dist/orchestration/waves.js +86 -0
  434. package/dist/orchestration/waves.js.map +1 -0
  435. package/dist/otel/index.js +163 -0
  436. package/dist/otel/index.js.map +1 -0
  437. package/dist/output.js +164 -0
  438. package/dist/output.js.map +1 -0
  439. package/dist/pagination.js +64 -0
  440. package/dist/pagination.js.map +1 -0
  441. package/dist/paths.js +882 -0
  442. package/dist/paths.js.map +1 -0
  443. package/dist/phases/deps.js +372 -0
  444. package/dist/phases/deps.js.map +1 -0
  445. package/dist/phases/index.js +349 -0
  446. package/dist/phases/index.js.map +1 -0
  447. package/dist/pipeline/index.js +10 -0
  448. package/dist/pipeline/index.js.map +1 -0
  449. package/dist/pipeline/phase.js +45 -0
  450. package/dist/pipeline/phase.js.map +1 -0
  451. package/dist/platform.js +211 -0
  452. package/dist/platform.js.map +1 -0
  453. package/dist/project-info.js +84 -0
  454. package/dist/project-info.js.map +1 -0
  455. package/dist/reconciliation/index.js +10 -0
  456. package/dist/reconciliation/index.js.map +1 -0
  457. package/dist/reconciliation/link-store.js +175 -0
  458. package/dist/reconciliation/link-store.js.map +1 -0
  459. package/dist/reconciliation/reconciliation-engine.js +298 -0
  460. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  461. package/dist/release/artifacts.js +427 -0
  462. package/dist/release/artifacts.js.map +1 -0
  463. package/dist/release/changelog-writer.js +151 -0
  464. package/dist/release/changelog-writer.js.map +1 -0
  465. package/dist/release/channel.js +144 -0
  466. package/dist/release/channel.js.map +1 -0
  467. package/dist/release/ci.js +166 -0
  468. package/dist/release/ci.js.map +1 -0
  469. package/dist/release/github-pr.js +225 -0
  470. package/dist/release/github-pr.js.map +1 -0
  471. package/dist/release/guards.js +116 -0
  472. package/dist/release/guards.js.map +1 -0
  473. package/dist/release/index.js +22 -0
  474. package/dist/release/index.js.map +1 -0
  475. package/dist/release/release-config.js +158 -0
  476. package/dist/release/release-config.js.map +1 -0
  477. package/dist/release/release-manifest.js +1019 -0
  478. package/dist/release/release-manifest.js.map +1 -0
  479. package/dist/release/version-bump.js +255 -0
  480. package/dist/release/version-bump.js.map +1 -0
  481. package/dist/remote/index.js +257 -0
  482. package/dist/remote/index.js.map +1 -0
  483. package/dist/repair.js +130 -0
  484. package/dist/repair.js.map +1 -0
  485. package/dist/research/index.js +2 -0
  486. package/dist/research/index.js.map +1 -0
  487. package/dist/roadmap/index.js +59 -0
  488. package/dist/roadmap/index.js.map +1 -0
  489. package/dist/routing/capability-matrix.js +1556 -0
  490. package/dist/routing/capability-matrix.js.map +1 -0
  491. package/dist/routing/index.js +9 -0
  492. package/dist/routing/index.js.map +1 -0
  493. package/dist/scaffold.js +1937 -0
  494. package/dist/scaffold.js.map +1 -0
  495. package/dist/schema-management.js +295 -0
  496. package/dist/schema-management.js.map +1 -0
  497. package/dist/security/index.js +9 -0
  498. package/dist/security/index.js.map +1 -0
  499. package/dist/security/input-sanitization.js +326 -0
  500. package/dist/security/input-sanitization.js.map +1 -0
  501. package/dist/sequence/index.js +295 -0
  502. package/dist/sequence/index.js.map +1 -0
  503. package/dist/sessions/assumptions.js +54 -0
  504. package/dist/sessions/assumptions.js.map +1 -0
  505. package/dist/sessions/briefing.js +377 -0
  506. package/dist/sessions/briefing.js.map +1 -0
  507. package/dist/sessions/context-alert.js +222 -0
  508. package/dist/sessions/context-alert.js.map +1 -0
  509. package/dist/sessions/context-inject.js +61 -0
  510. package/dist/sessions/context-inject.js.map +1 -0
  511. package/dist/sessions/context-monitor.js +98 -0
  512. package/dist/sessions/context-monitor.js.map +1 -0
  513. package/dist/sessions/decisions.js +65 -0
  514. package/dist/sessions/decisions.js.map +1 -0
  515. package/dist/sessions/find.js +65 -0
  516. package/dist/sessions/find.js.map +1 -0
  517. package/dist/sessions/handoff.js +328 -0
  518. package/dist/sessions/handoff.js.map +1 -0
  519. package/dist/sessions/hitl-warnings.js +254 -0
  520. package/dist/sessions/hitl-warnings.js.map +1 -0
  521. package/dist/sessions/index.js +327 -0
  522. package/dist/sessions/index.js.map +1 -0
  523. package/dist/sessions/session-archive.js +40 -0
  524. package/dist/sessions/session-archive.js.map +1 -0
  525. package/dist/sessions/session-cleanup.js +59 -0
  526. package/dist/sessions/session-cleanup.js.map +1 -0
  527. package/dist/sessions/session-drift.js +134 -0
  528. package/dist/sessions/session-drift.js.map +1 -0
  529. package/dist/sessions/session-enforcement.js +144 -0
  530. package/dist/sessions/session-enforcement.js.map +1 -0
  531. package/dist/sessions/session-grade.js +253 -0
  532. package/dist/sessions/session-grade.js.map +1 -0
  533. package/dist/sessions/session-history.js +42 -0
  534. package/dist/sessions/session-history.js.map +1 -0
  535. package/dist/sessions/session-id.js +81 -0
  536. package/dist/sessions/session-id.js.map +1 -0
  537. package/dist/sessions/session-memory-bridge.js +30 -0
  538. package/dist/sessions/session-memory-bridge.js.map +1 -0
  539. package/dist/sessions/session-show.js +24 -0
  540. package/dist/sessions/session-show.js.map +1 -0
  541. package/dist/sessions/session-stats.js +69 -0
  542. package/dist/sessions/session-stats.js.map +1 -0
  543. package/dist/sessions/session-suspend.js +39 -0
  544. package/dist/sessions/session-suspend.js.map +1 -0
  545. package/dist/sessions/session-switch.js +51 -0
  546. package/dist/sessions/session-switch.js.map +1 -0
  547. package/dist/sessions/session-view.js +76 -0
  548. package/dist/sessions/session-view.js.map +1 -0
  549. package/dist/sessions/snapshot.js +213 -0
  550. package/dist/sessions/snapshot.js.map +1 -0
  551. package/dist/sessions/statusline-setup.js +85 -0
  552. package/dist/sessions/statusline-setup.js.map +1 -0
  553. package/dist/sessions/types.js +8 -0
  554. package/dist/sessions/types.js.map +1 -0
  555. package/dist/skills/agents/config.js +94 -0
  556. package/dist/skills/agents/config.js.map +1 -0
  557. package/dist/skills/agents/install.js +116 -0
  558. package/dist/skills/agents/install.js.map +1 -0
  559. package/dist/skills/agents/registry.js +161 -0
  560. package/dist/skills/agents/registry.js.map +1 -0
  561. package/dist/skills/discovery.js +333 -0
  562. package/dist/skills/discovery.js.map +1 -0
  563. package/dist/skills/dispatch.js +347 -0
  564. package/dist/skills/dispatch.js.map +1 -0
  565. package/dist/skills/dynamic-skill-generator.js +87 -0
  566. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  567. package/dist/skills/index.js +44 -0
  568. package/dist/skills/index.js.map +1 -0
  569. package/dist/skills/injection/subagent.js +195 -0
  570. package/dist/skills/injection/subagent.js.map +1 -0
  571. package/dist/skills/injection/token.js +260 -0
  572. package/dist/skills/injection/token.js.map +1 -0
  573. package/dist/skills/install.js +40 -0
  574. package/dist/skills/install.js.map +1 -0
  575. package/dist/skills/manifests/contribution.js +175 -0
  576. package/dist/skills/manifests/contribution.js.map +1 -0
  577. package/dist/skills/manifests/research.js +281 -0
  578. package/dist/skills/manifests/research.js.map +1 -0
  579. package/dist/skills/manifests/resolver.js +146 -0
  580. package/dist/skills/manifests/resolver.js.map +1 -0
  581. package/dist/skills/marketplace.js +90 -0
  582. package/dist/skills/marketplace.js.map +1 -0
  583. package/dist/skills/orchestrator/spawn.js +178 -0
  584. package/dist/skills/orchestrator/spawn.js.map +1 -0
  585. package/dist/skills/orchestrator/startup.js +451 -0
  586. package/dist/skills/orchestrator/startup.js.map +1 -0
  587. package/dist/skills/orchestrator/validator.js +301 -0
  588. package/dist/skills/orchestrator/validator.js.map +1 -0
  589. package/dist/skills/precedence-integration.js +73 -0
  590. package/dist/skills/precedence-integration.js.map +1 -0
  591. package/dist/skills/precedence-types.js +16 -0
  592. package/dist/skills/precedence-types.js.map +1 -0
  593. package/dist/skills/routing-table.js +63 -0
  594. package/dist/skills/routing-table.js.map +1 -0
  595. package/dist/skills/skill-paths.js +217 -0
  596. package/dist/skills/skill-paths.js.map +1 -0
  597. package/dist/skills/test-utility.js +55 -0
  598. package/dist/skills/test-utility.js.map +1 -0
  599. package/dist/skills/types.js +118 -0
  600. package/dist/skills/types.js.map +1 -0
  601. package/dist/skills/validation.js +183 -0
  602. package/dist/skills/validation.js.map +1 -0
  603. package/dist/skills/version.js +57 -0
  604. package/dist/skills/version.js.map +1 -0
  605. package/dist/snapshot/index.js +188 -0
  606. package/dist/snapshot/index.js.map +1 -0
  607. package/dist/spawn/adapter-registry.js +246 -0
  608. package/dist/spawn/adapter-registry.js.map +1 -0
  609. package/dist/spawn/index.js +10 -0
  610. package/dist/spawn/index.js.map +1 -0
  611. package/dist/stats/index.js +350 -0
  612. package/dist/stats/index.js.map +1 -0
  613. package/dist/stats/workflow-telemetry.js +400 -0
  614. package/dist/stats/workflow-telemetry.js.map +1 -0
  615. package/dist/sticky/archive.js +47 -0
  616. package/dist/sticky/archive.js.map +1 -0
  617. package/dist/sticky/convert.js +235 -0
  618. package/dist/sticky/convert.js.map +1 -0
  619. package/dist/sticky/create.js +48 -0
  620. package/dist/sticky/create.js.map +1 -0
  621. package/dist/sticky/id.js +35 -0
  622. package/dist/sticky/id.js.map +1 -0
  623. package/dist/sticky/index.js +16 -0
  624. package/dist/sticky/index.js.map +1 -0
  625. package/dist/sticky/list.js +57 -0
  626. package/dist/sticky/list.js.map +1 -0
  627. package/dist/sticky/purge.js +45 -0
  628. package/dist/sticky/purge.js.map +1 -0
  629. package/dist/sticky/show.js +42 -0
  630. package/dist/sticky/show.js.map +1 -0
  631. package/dist/sticky/types.js +10 -0
  632. package/dist/sticky/types.js.map +1 -0
  633. package/dist/store/agent-registry-accessor.js +886 -0
  634. package/dist/store/agent-registry-accessor.js.map +1 -0
  635. package/dist/store/api-key-kdf.js +84 -0
  636. package/dist/store/api-key-kdf.js.map +1 -0
  637. package/dist/store/atomic.js +167 -0
  638. package/dist/store/atomic.js.map +1 -0
  639. package/dist/store/backup-crypto.js +184 -0
  640. package/dist/store/backup-crypto.js.map +1 -0
  641. package/dist/store/backup-pack.js +581 -0
  642. package/dist/store/backup-pack.js.map +1 -0
  643. package/dist/store/backup-unpack.js +449 -0
  644. package/dist/store/backup-unpack.js.map +1 -0
  645. package/dist/store/backup.js +94 -0
  646. package/dist/store/backup.js.map +1 -0
  647. package/dist/store/brain-accessor.js +429 -0
  648. package/dist/store/brain-accessor.js.map +1 -0
  649. package/dist/store/brain-schema.js +628 -0
  650. package/dist/store/brain-schema.js.map +1 -0
  651. package/dist/store/brain-sqlite.js +320 -0
  652. package/dist/store/brain-sqlite.js.map +1 -0
  653. package/dist/store/cache.js +168 -0
  654. package/dist/store/cache.js.map +1 -0
  655. package/dist/store/chain-schema.js +51 -0
  656. package/dist/store/chain-schema.js.map +1 -0
  657. package/dist/store/cleanup-legacy.js +171 -0
  658. package/dist/store/cleanup-legacy.js.map +1 -0
  659. package/dist/store/conduit-sqlite.js +570 -0
  660. package/dist/store/conduit-sqlite.js.map +1 -0
  661. package/dist/store/converters.js +124 -0
  662. package/dist/store/converters.js.map +1 -0
  663. package/dist/store/cross-db-cleanup.js +319 -0
  664. package/dist/store/cross-db-cleanup.js.map +1 -0
  665. package/dist/store/data-accessor.js +26 -0
  666. package/dist/store/data-accessor.js.map +1 -0
  667. package/dist/store/data-safety-central.js +269 -0
  668. package/dist/store/data-safety-central.js.map +1 -0
  669. package/dist/store/data-safety.js +274 -0
  670. package/dist/store/data-safety.js.map +1 -0
  671. package/dist/store/db-helpers.js +241 -0
  672. package/dist/store/db-helpers.js.map +1 -0
  673. package/dist/store/export.js +155 -0
  674. package/dist/store/export.js.map +1 -0
  675. package/dist/store/file-utils.js +270 -0
  676. package/dist/store/file-utils.js.map +1 -0
  677. package/dist/store/git-checkpoint.js +365 -0
  678. package/dist/store/git-checkpoint.js.map +1 -0
  679. package/dist/store/global-salt.js +147 -0
  680. package/dist/store/global-salt.js.map +1 -0
  681. package/dist/store/import-logging.js +139 -0
  682. package/dist/store/import-logging.js.map +1 -0
  683. package/dist/store/import-remap.js +145 -0
  684. package/dist/store/import-remap.js.map +1 -0
  685. package/dist/store/import-sort.js +121 -0
  686. package/dist/store/import-sort.js.map +1 -0
  687. package/dist/store/index.js +29 -0
  688. package/dist/store/index.js.map +1 -0
  689. package/dist/store/json.js +208 -0
  690. package/dist/store/json.js.map +1 -0
  691. package/dist/store/lifecycle-store.js +249 -0
  692. package/dist/store/lifecycle-store.js.map +1 -0
  693. package/dist/store/lock.js +70 -0
  694. package/dist/store/lock.js.map +1 -0
  695. package/dist/store/migrate-signaldock-to-conduit.js +562 -0
  696. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  697. package/dist/store/migration-manager.js +403 -0
  698. package/dist/store/migration-manager.js.map +1 -0
  699. package/dist/store/migration-sqlite.js +676 -0
  700. package/dist/store/migration-sqlite.js.map +1 -0
  701. package/dist/store/nexus-schema.js +277 -0
  702. package/dist/store/nexus-schema.js.map +1 -0
  703. package/dist/store/nexus-sqlite.js +242 -0
  704. package/dist/store/nexus-sqlite.js.map +1 -0
  705. package/dist/store/nexus-validation-schemas.js +40 -0
  706. package/dist/store/nexus-validation-schemas.js.map +1 -0
  707. package/dist/store/parsers.js +37 -0
  708. package/dist/store/parsers.js.map +1 -0
  709. package/dist/store/project-detect.js +457 -0
  710. package/dist/store/project-detect.js.map +1 -0
  711. package/dist/store/provider.js +101 -0
  712. package/dist/store/provider.js.map +1 -0
  713. package/dist/store/regenerators.js +207 -0
  714. package/dist/store/regenerators.js.map +1 -0
  715. package/dist/store/restore-conflict-report.js +206 -0
  716. package/dist/store/restore-conflict-report.js.map +1 -0
  717. package/dist/store/restore-json-merge.js +454 -0
  718. package/dist/store/restore-json-merge.js.map +1 -0
  719. package/dist/store/safety-data-accessor.js +257 -0
  720. package/dist/store/safety-data-accessor.js.map +1 -0
  721. package/dist/store/schema.js +7 -0
  722. package/dist/store/schema.js.map +1 -0
  723. package/dist/store/session-store.js +219 -0
  724. package/dist/store/session-store.js.map +1 -0
  725. package/dist/store/signaldock-sqlite.js +550 -0
  726. package/dist/store/signaldock-sqlite.js.map +1 -0
  727. package/dist/store/sqlite-backup.js +498 -0
  728. package/dist/store/sqlite-backup.js.map +1 -0
  729. package/dist/store/sqlite-data-accessor.js +788 -0
  730. package/dist/store/sqlite-data-accessor.js.map +1 -0
  731. package/dist/store/sqlite.js +483 -0
  732. package/dist/store/sqlite.js.map +1 -0
  733. package/dist/store/status-registry.js +8 -0
  734. package/dist/store/status-registry.js.map +1 -0
  735. package/dist/store/t310-readiness.js +115 -0
  736. package/dist/store/t310-readiness.js.map +1 -0
  737. package/dist/store/task-store.js +358 -0
  738. package/dist/store/task-store.js.map +1 -0
  739. package/dist/store/tasks-schema.js +610 -0
  740. package/dist/store/tasks-schema.js.map +1 -0
  741. package/dist/store/typed-query.js +15 -0
  742. package/dist/store/typed-query.js.map +1 -0
  743. package/dist/store/validation-schemas.js +278 -0
  744. package/dist/store/validation-schemas.js.map +1 -0
  745. package/dist/system/archive-analytics.js +277 -0
  746. package/dist/system/archive-analytics.js.map +1 -0
  747. package/dist/system/archive-stats.js +64 -0
  748. package/dist/system/archive-stats.js.map +1 -0
  749. package/dist/system/audit.js +145 -0
  750. package/dist/system/audit.js.map +1 -0
  751. package/dist/system/backup.js +280 -0
  752. package/dist/system/backup.js.map +1 -0
  753. package/dist/system/cleanup.js +134 -0
  754. package/dist/system/cleanup.js.map +1 -0
  755. package/dist/system/dependencies.js +466 -0
  756. package/dist/system/dependencies.js.map +1 -0
  757. package/dist/system/health.js +1207 -0
  758. package/dist/system/health.js.map +1 -0
  759. package/dist/system/index.js +18 -0
  760. package/dist/system/index.js.map +1 -0
  761. package/dist/system/inject-generate.js +122 -0
  762. package/dist/system/inject-generate.js.map +1 -0
  763. package/dist/system/labels.js +38 -0
  764. package/dist/system/labels.js.map +1 -0
  765. package/dist/system/metrics.js +61 -0
  766. package/dist/system/metrics.js.map +1 -0
  767. package/dist/system/migrate.js +43 -0
  768. package/dist/system/migrate.js.map +1 -0
  769. package/dist/system/platform-paths.js +80 -0
  770. package/dist/system/platform-paths.js.map +1 -0
  771. package/dist/system/runtime.js +161 -0
  772. package/dist/system/runtime.js.map +1 -0
  773. package/dist/system/safestop.js +89 -0
  774. package/dist/system/safestop.js.map +1 -0
  775. package/dist/system/storage-preflight.js +123 -0
  776. package/dist/system/storage-preflight.js.map +1 -0
  777. package/dist/task-work/index.js +159 -0
  778. package/dist/task-work/index.js.map +1 -0
  779. package/dist/tasks/add.js +837 -0
  780. package/dist/tasks/add.js.map +1 -0
  781. package/dist/tasks/analyze.js +85 -0
  782. package/dist/tasks/analyze.js.map +1 -0
  783. package/dist/tasks/archive.js +90 -0
  784. package/dist/tasks/archive.js.map +1 -0
  785. package/dist/tasks/atomicity.js +83 -0
  786. package/dist/tasks/atomicity.js.map +1 -0
  787. package/dist/tasks/cancel-ops.js +83 -0
  788. package/dist/tasks/cancel-ops.js.map +1 -0
  789. package/dist/tasks/complete.js +252 -0
  790. package/dist/tasks/complete.js.map +1 -0
  791. package/dist/tasks/crossref-extract.js +73 -0
  792. package/dist/tasks/crossref-extract.js.map +1 -0
  793. package/dist/tasks/delete-preview.js +192 -0
  794. package/dist/tasks/delete-preview.js.map +1 -0
  795. package/dist/tasks/delete.js +120 -0
  796. package/dist/tasks/delete.js.map +1 -0
  797. package/dist/tasks/deletion-strategy.js +200 -0
  798. package/dist/tasks/deletion-strategy.js.map +1 -0
  799. package/dist/tasks/dependency-check.js +278 -0
  800. package/dist/tasks/dependency-check.js.map +1 -0
  801. package/dist/tasks/deps-ready.js +32 -0
  802. package/dist/tasks/deps-ready.js.map +1 -0
  803. package/dist/tasks/enforcement.js +86 -0
  804. package/dist/tasks/enforcement.js.map +1 -0
  805. package/dist/tasks/epic-enforcement.js +294 -0
  806. package/dist/tasks/epic-enforcement.js.map +1 -0
  807. package/dist/tasks/find.js +163 -0
  808. package/dist/tasks/find.js.map +1 -0
  809. package/dist/tasks/graph-cache.js +127 -0
  810. package/dist/tasks/graph-cache.js.map +1 -0
  811. package/dist/tasks/graph-ops.js +173 -0
  812. package/dist/tasks/graph-ops.js.map +1 -0
  813. package/dist/tasks/graph-rag.js +328 -0
  814. package/dist/tasks/graph-rag.js.map +1 -0
  815. package/dist/tasks/hierarchy-policy.js +149 -0
  816. package/dist/tasks/hierarchy-policy.js.map +1 -0
  817. package/dist/tasks/hierarchy.js +185 -0
  818. package/dist/tasks/hierarchy.js.map +1 -0
  819. package/dist/tasks/id-generator.js +65 -0
  820. package/dist/tasks/id-generator.js.map +1 -0
  821. package/dist/tasks/index.js +14 -0
  822. package/dist/tasks/index.js.map +1 -0
  823. package/dist/tasks/labels.js +55 -0
  824. package/dist/tasks/labels.js.map +1 -0
  825. package/dist/tasks/list.js +75 -0
  826. package/dist/tasks/list.js.map +1 -0
  827. package/dist/tasks/phase-tracking.js +133 -0
  828. package/dist/tasks/phase-tracking.js.map +1 -0
  829. package/dist/tasks/pipeline-stage.js +248 -0
  830. package/dist/tasks/pipeline-stage.js.map +1 -0
  831. package/dist/tasks/plan.js +268 -0
  832. package/dist/tasks/plan.js.map +1 -0
  833. package/dist/tasks/relates.js +101 -0
  834. package/dist/tasks/relates.js.map +1 -0
  835. package/dist/tasks/show.js +83 -0
  836. package/dist/tasks/show.js.map +1 -0
  837. package/dist/tasks/size-weighting.js +86 -0
  838. package/dist/tasks/size-weighting.js.map +1 -0
  839. package/dist/tasks/staleness.js +86 -0
  840. package/dist/tasks/staleness.js.map +1 -0
  841. package/dist/tasks/task-ops.js +1741 -0
  842. package/dist/tasks/task-ops.js.map +1 -0
  843. package/dist/tasks/update.js +303 -0
  844. package/dist/tasks/update.js.map +1 -0
  845. package/dist/telemetry/index.js +249 -0
  846. package/dist/telemetry/index.js.map +1 -0
  847. package/dist/telemetry/schema.js +60 -0
  848. package/dist/telemetry/schema.js.map +1 -0
  849. package/dist/telemetry/sqlite.js +111 -0
  850. package/dist/telemetry/sqlite.js.map +1 -0
  851. package/dist/templates/index.js +10 -0
  852. package/dist/templates/index.js.map +1 -0
  853. package/dist/templates/parser.js +254 -0
  854. package/dist/templates/parser.js.map +1 -0
  855. package/dist/ui/aliases.js +153 -0
  856. package/dist/ui/aliases.js.map +1 -0
  857. package/dist/ui/changelog.js +184 -0
  858. package/dist/ui/changelog.js.map +1 -0
  859. package/dist/ui/command-registry.js +168 -0
  860. package/dist/ui/command-registry.js.map +1 -0
  861. package/dist/ui/flags.js +94 -0
  862. package/dist/ui/flags.js.map +1 -0
  863. package/dist/ui/index.js +24 -0
  864. package/dist/ui/index.js.map +1 -0
  865. package/dist/upgrade.js +1387 -0
  866. package/dist/upgrade.js.map +1 -0
  867. package/dist/validation/chain-validation.js +146 -0
  868. package/dist/validation/chain-validation.js.map +1 -0
  869. package/dist/validation/compliance.js +155 -0
  870. package/dist/validation/compliance.js.map +1 -0
  871. package/dist/validation/docs-sync.js +212 -0
  872. package/dist/validation/docs-sync.js.map +1 -0
  873. package/dist/validation/doctor/checks.js +1069 -0
  874. package/dist/validation/doctor/checks.js.map +1 -0
  875. package/dist/validation/doctor/index.js +9 -0
  876. package/dist/validation/doctor/index.js.map +1 -0
  877. package/dist/validation/doctor/project-cache.js +160 -0
  878. package/dist/validation/doctor/project-cache.js.map +1 -0
  879. package/dist/validation/doctor/utils.js +155 -0
  880. package/dist/validation/doctor/utils.js.map +1 -0
  881. package/dist/validation/engine.js +914 -0
  882. package/dist/validation/engine.js.map +1 -0
  883. package/dist/validation/gap-check.js +175 -0
  884. package/dist/validation/gap-check.js.map +1 -0
  885. package/dist/validation/index.js +40 -0
  886. package/dist/validation/index.js.map +1 -0
  887. package/dist/validation/manifest.js +237 -0
  888. package/dist/validation/manifest.js.map +1 -0
  889. package/dist/validation/operation-gate-validators.js +724 -0
  890. package/dist/validation/operation-gate-validators.js.map +1 -0
  891. package/dist/validation/operation-verification-gates.js +532 -0
  892. package/dist/validation/operation-verification-gates.js.map +1 -0
  893. package/dist/validation/param-utils.js +141 -0
  894. package/dist/validation/param-utils.js.map +1 -0
  895. package/dist/validation/protocol-common.js +300 -0
  896. package/dist/validation/protocol-common.js.map +1 -0
  897. package/dist/validation/protocols/_shared.js +82 -0
  898. package/dist/validation/protocols/_shared.js.map +1 -0
  899. package/dist/validation/protocols/architecture-decision.js +31 -0
  900. package/dist/validation/protocols/architecture-decision.js.map +1 -0
  901. package/dist/validation/protocols/artifact-publish.js +28 -0
  902. package/dist/validation/protocols/artifact-publish.js.map +1 -0
  903. package/dist/validation/protocols/consensus.js +41 -0
  904. package/dist/validation/protocols/consensus.js.map +1 -0
  905. package/dist/validation/protocols/contribution.js +27 -0
  906. package/dist/validation/protocols/contribution.js.map +1 -0
  907. package/dist/validation/protocols/decomposition.js +28 -0
  908. package/dist/validation/protocols/decomposition.js.map +1 -0
  909. package/dist/validation/protocols/implementation.js +24 -0
  910. package/dist/validation/protocols/implementation.js.map +1 -0
  911. package/dist/validation/protocols/provenance.js +29 -0
  912. package/dist/validation/protocols/provenance.js.map +1 -0
  913. package/dist/validation/protocols/release.js +29 -0
  914. package/dist/validation/protocols/release.js.map +1 -0
  915. package/dist/validation/protocols/research.js +24 -0
  916. package/dist/validation/protocols/research.js.map +1 -0
  917. package/dist/validation/protocols/specification.js +27 -0
  918. package/dist/validation/protocols/specification.js.map +1 -0
  919. package/dist/validation/protocols/testing.js +30 -0
  920. package/dist/validation/protocols/testing.js.map +1 -0
  921. package/dist/validation/protocols/validation.js +30 -0
  922. package/dist/validation/protocols/validation.js.map +1 -0
  923. package/dist/validation/schema-integrity.js +170 -0
  924. package/dist/validation/schema-integrity.js.map +1 -0
  925. package/dist/validation/schema-validator.js +176 -0
  926. package/dist/validation/schema-validator.js.map +1 -0
  927. package/dist/validation/validate-ops.js +937 -0
  928. package/dist/validation/validate-ops.js.map +1 -0
  929. package/dist/validation/validation-rules.js +226 -0
  930. package/dist/validation/validation-rules.js.map +1 -0
  931. package/dist/validation/verification.js +321 -0
  932. package/dist/validation/verification.js.map +1 -0
  933. package/package.json +8 -8
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Decision Memory module for CLEO BRAIN.
3
+ * Uses brain.db via BrainDataAccessor for persistent storage.
4
+ *
5
+ * Provides functions to store, recall, search, and update decisions
6
+ * with sequential ID generation (D001, D002, ...).
7
+ *
8
+ * @task T5155
9
+ * @epic T5149
10
+ */
11
+ import { getBrainAccessor } from '../store/brain-accessor.js';
12
+ import { taskExistsInTasksDb } from '../store/cross-db-cleanup.js';
13
+ import { getDb } from '../store/sqlite.js';
14
+ import { autoCrossLinkDecision } from './decision-cross-link.js';
15
+ import { addGraphEdge, upsertGraphNode } from './graph-auto-populate.js';
16
+ import { computeDecisionQuality } from './quality-scoring.js';
17
+ import { detectSupersession, supersedeMemory } from './temporal-supersession.js';
18
+ /**
19
+ * Generate the next sequential decision ID (D001, D002, ...).
20
+ * Reads the highest existing ID from brain_decisions to determine next.
21
+ */
22
+ async function nextDecisionId(projectRoot) {
23
+ const { getBrainDb } = await import('../store/brain-sqlite.js');
24
+ const { brainDecisions } = await import('../store/brain-schema.js');
25
+ const { desc } = await import('drizzle-orm');
26
+ const db = await getBrainDb(projectRoot);
27
+ const rows = await db
28
+ .select({ id: brainDecisions.id })
29
+ .from(brainDecisions)
30
+ .orderBy(desc(brainDecisions.id))
31
+ .limit(1);
32
+ if (rows.length === 0) {
33
+ return 'D001';
34
+ }
35
+ const lastId = rows[0].id;
36
+ const num = parseInt(lastId.slice(1), 10);
37
+ if (Number.isNaN(num)) {
38
+ return 'D001';
39
+ }
40
+ return `D${String(num + 1).padStart(3, '0')}`;
41
+ }
42
+ /**
43
+ * Store a new decision or update an existing one if a duplicate is found.
44
+ * Duplicate detection: same decision text (case-insensitive).
45
+ *
46
+ * @task T5155
47
+ */
48
+ export async function storeDecision(projectRoot, params) {
49
+ if (!params.decision?.trim()) {
50
+ throw new Error('Decision text is required');
51
+ }
52
+ if (!params.rationale?.trim()) {
53
+ throw new Error('Rationale is required');
54
+ }
55
+ const accessor = await getBrainAccessor(projectRoot);
56
+ // Check for duplicate (same decision text, case-insensitive)
57
+ const existing = await accessor.findDecisions({ type: params.type });
58
+ const duplicate = existing.find((d) => d.decision.toLowerCase() === params.decision.toLowerCase());
59
+ if (duplicate) {
60
+ // Update the existing decision
61
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
62
+ await accessor.updateDecision(duplicate.id, {
63
+ rationale: params.rationale.trim(),
64
+ confidence: params.confidence,
65
+ outcome: params.outcome ?? duplicate.outcome,
66
+ alternativesJson: params.alternatives
67
+ ? JSON.stringify(params.alternatives)
68
+ : duplicate.alternativesJson,
69
+ updatedAt: now,
70
+ });
71
+ const updated = await accessor.getDecision(duplicate.id);
72
+ // Refresh the graph node for the updated decision (best-effort).
73
+ const updatedQuality = computeDecisionQuality({
74
+ confidence: params.confidence,
75
+ rationale: params.rationale.trim(),
76
+ contextTaskId: params.contextTaskId ?? null,
77
+ });
78
+ upsertGraphNode(projectRoot, `decision:${duplicate.id}`, 'decision', params.decision.trim().substring(0, 200), updatedQuality, params.decision.trim() + params.rationale.trim(), { type: params.type, confidence: params.confidence }).catch(() => {
79
+ /* best-effort */
80
+ });
81
+ return updated;
82
+ }
83
+ // Create new decision with sequential ID
84
+ const id = await nextDecisionId(projectRoot);
85
+ // Write-guard: validate cross-db task references before inserting
86
+ let validEpicId = params.contextEpicId;
87
+ let validTaskId = params.contextTaskId;
88
+ if (validEpicId || validTaskId) {
89
+ const tasksDb = await getDb(projectRoot);
90
+ if (validEpicId && !(await taskExistsInTasksDb(validEpicId, tasksDb))) {
91
+ validEpicId = undefined;
92
+ }
93
+ if (validTaskId && !(await taskExistsInTasksDb(validTaskId, tasksDb))) {
94
+ validTaskId = undefined;
95
+ }
96
+ }
97
+ // T549 Wave 1-A: Tier routing for decisions.
98
+ // Decisions are always medium-term semantic entries — they are intentional acts,
99
+ // always manually entered via cleo memory decision-store or the CLI.
100
+ // sourceConfidence = 'owner' (decisions are owner-stated facts by definition)
101
+ // verified = true (the act of deciding IS verification)
102
+ // memoryTier = 'medium' (decisions skip short-term; may promote to long after 7d+outcome:success)
103
+ // memoryType = 'semantic' (decisions are declarative architectural facts)
104
+ const memoryTier = 'medium';
105
+ const memoryType = 'semantic';
106
+ const sourceConfidence = 'owner';
107
+ const verified = true;
108
+ // Compute quality score from confidence level, rationale richness, task linkage,
109
+ // and T549 source multiplier (owner = 1.0, medium tier = +0.05).
110
+ const qualityScore = computeDecisionQuality({
111
+ confidence: params.confidence,
112
+ rationale: params.rationale.trim(),
113
+ contextTaskId: validTaskId ?? null,
114
+ sourceConfidence,
115
+ memoryTier,
116
+ });
117
+ const row = {
118
+ id,
119
+ type: params.type,
120
+ decision: params.decision.trim(),
121
+ rationale: params.rationale.trim(),
122
+ confidence: params.confidence,
123
+ outcome: params.outcome,
124
+ alternativesJson: params.alternatives ? JSON.stringify(params.alternatives) : undefined,
125
+ contextEpicId: validEpicId,
126
+ contextTaskId: validTaskId,
127
+ contextPhase: params.contextPhase,
128
+ qualityScore,
129
+ // T549 Wave 1-A: tier/type/confidence assigned at write time
130
+ memoryTier,
131
+ memoryType,
132
+ sourceConfidence,
133
+ verified,
134
+ };
135
+ const saved = await accessor.addDecision(row);
136
+ // Auto-populate graph node + edges for the new decision (best-effort, T537).
137
+ // All graph writes run fire-and-forget so they never block the return.
138
+ try {
139
+ await upsertGraphNode(projectRoot, `decision:${saved.id}`, 'decision', saved.decision.substring(0, 200), qualityScore, saved.decision + saved.rationale, { type: saved.type, confidence: saved.confidence });
140
+ // Link decision → task when a task context is present.
141
+ if (validTaskId) {
142
+ await upsertGraphNode(projectRoot, `task:${validTaskId}`, 'task', validTaskId, 1.0, '');
143
+ await addGraphEdge(projectRoot, `decision:${saved.id}`, `task:${validTaskId}`, 'applies_to', 1.0, 'auto:store-decision');
144
+ }
145
+ // Link decision → epic when an epic context is present.
146
+ if (validEpicId) {
147
+ await upsertGraphNode(projectRoot, `epic:${validEpicId}`, 'epic', validEpicId, 1.0, '');
148
+ await addGraphEdge(projectRoot, `decision:${saved.id}`, `epic:${validEpicId}`, 'applies_to', 1.0, 'auto:store-decision');
149
+ }
150
+ // Cross-link decision → referenced file/symbol nodes (T626 phase 1).
151
+ // Fire-and-forget — autoCrossLinkDecision swallows its own errors.
152
+ autoCrossLinkDecision(projectRoot, saved.id, saved.decision, saved.rationale).catch(() => {
153
+ /* best-effort */
154
+ });
155
+ }
156
+ catch {
157
+ /* Graph population is best-effort — never block the primary return */
158
+ }
159
+ // Detect supersession: check if this new decision supersedes any existing ones.
160
+ // Fire-and-forget — never block the primary return.
161
+ detectSupersession(projectRoot, {
162
+ id: saved.id,
163
+ text: saved.decision + ' ' + saved.rationale,
164
+ createdAt: saved.createdAt ?? new Date().toISOString().replace('T', ' ').slice(0, 19),
165
+ })
166
+ .then((candidates) => {
167
+ for (const candidate of candidates) {
168
+ supersedeMemory(projectRoot, candidate.existingId, saved.id, 'auto:decision-supersedes — high overlap detected at store time').catch(() => {
169
+ /* best-effort */
170
+ });
171
+ }
172
+ })
173
+ .catch(() => {
174
+ /* best-effort */
175
+ });
176
+ return saved;
177
+ }
178
+ /**
179
+ * Recall a specific decision by ID.
180
+ *
181
+ * @task T5155
182
+ */
183
+ export async function recallDecision(projectRoot, id) {
184
+ const accessor = await getBrainAccessor(projectRoot);
185
+ return accessor.getDecision(id);
186
+ }
187
+ /**
188
+ * Search decisions by type, confidence, outcome, and/or free-text query.
189
+ * Query searches across decision + rationale fields using LIKE.
190
+ *
191
+ * @task T5155
192
+ */
193
+ export async function searchDecisions(projectRoot, params = {}) {
194
+ const accessor = await getBrainAccessor(projectRoot);
195
+ // Use the accessor for structured filters
196
+ let results = await accessor.findDecisions({
197
+ type: params.type,
198
+ confidence: params.confidence,
199
+ outcome: params.outcome ?? undefined,
200
+ limit: params.query ? undefined : params.limit,
201
+ });
202
+ // Apply free-text search on top
203
+ if (params.query) {
204
+ const q = params.query.toLowerCase();
205
+ results = results.filter((d) => d.decision.toLowerCase().includes(q) || d.rationale.toLowerCase().includes(q));
206
+ }
207
+ if (params.limit && params.limit > 0) {
208
+ results = results.slice(0, params.limit);
209
+ }
210
+ return results;
211
+ }
212
+ /**
213
+ * List decisions with pagination.
214
+ *
215
+ * @task T5155
216
+ */
217
+ export async function listDecisions(projectRoot, params = {}) {
218
+ const accessor = await getBrainAccessor(projectRoot);
219
+ // Get all decisions for total count
220
+ const all = await accessor.findDecisions({});
221
+ const total = all.length;
222
+ const offset = params.offset ?? 0;
223
+ const limit = params.limit ?? 50;
224
+ const decisions = all.slice(offset, offset + limit);
225
+ return { decisions, total };
226
+ }
227
+ /**
228
+ * Update the outcome of a decision after learning from results.
229
+ *
230
+ * @task T5155
231
+ */
232
+ export async function updateDecisionOutcome(projectRoot, id, outcome) {
233
+ const accessor = await getBrainAccessor(projectRoot);
234
+ const existing = await accessor.getDecision(id);
235
+ if (!existing) {
236
+ throw new Error(`Decision not found: ${id}`);
237
+ }
238
+ await accessor.updateDecision(id, { outcome });
239
+ const updated = await accessor.getDecision(id);
240
+ return updated;
241
+ }
242
+ //# sourceMappingURL=decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../src/memory/decisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Canonical edge-type constants for `brain_page_edges`.
3
+ *
4
+ * All code that writes or queries `brain_page_edges.edge_type` MUST use
5
+ * these constants instead of raw string literals to prevent enum drift.
6
+ *
7
+ * The values here are a subset of `BRAIN_EDGE_TYPES` (brain-schema.ts).
8
+ * They are duplicated as constants so callers do not need to import the
9
+ * schema module (which carries Drizzle + SQLite dependencies).
10
+ *
11
+ * @epic T626
12
+ */
13
+ export const EDGE_TYPES = {
14
+ // Plasticity (Hebbian / STDP co-retrieval)
15
+ CO_RETRIEVED: 'co_retrieved',
16
+ // Temporal supersession
17
+ SUPERSEDES: 'supersedes',
18
+ // Task / decision / pattern → target context
19
+ APPLIES_TO: 'applies_to',
20
+ // Provenance
21
+ DERIVED_FROM: 'derived_from',
22
+ // Observation → symbol/file impact
23
+ AFFECTS: 'affects',
24
+ // Observation → symbol name mention
25
+ MENTIONS: 'mentions',
26
+ // Observation → symbol/file structural link
27
+ DOCUMENTS: 'documents',
28
+ // Memory node → nexus symbol/file (T645)
29
+ CODE_REFERENCE: 'code_reference',
30
+ };
31
+ //# sourceMappingURL=edge-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-types.js","sourceRoot":"","sources":["../../src/memory/edge-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,2CAA2C;IAC3C,YAAY,EAAE,cAAc;IAC5B,wBAAwB;IACxB,UAAU,EAAE,YAAY;IACxB,6CAA6C;IAC7C,UAAU,EAAE,YAAY;IACxB,aAAa;IACb,YAAY,EAAE,cAAc;IAC5B,mCAAmC;IACnC,OAAO,EAAE,SAAS;IAClB,oCAAoC;IACpC,QAAQ,EAAE,UAAU;IACpB,4CAA4C;IAC5C,SAAS,EAAE,WAAW;IACtB,yCAAyC;IACzC,cAAc,EAAE,gBAAgB;CACxB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Local embedding provider using @huggingface/transformers (transformers.js v4).
3
+ *
4
+ * Implements the EmbeddingProvider interface for brain memory vector search.
5
+ * Uses all-MiniLM-L6-v2 (22MB, 384 dimensions) — matches the brain_embeddings
6
+ * vec0 table schema. Model downloads on first call and is cached locally by
7
+ * the transformers library.
8
+ *
9
+ * @epic T134
10
+ * @task T136
11
+ * @why Ship vector search out-of-the-box without external API keys
12
+ * @what Local embedding provider using @huggingface/transformers all-MiniLM-L6-v2
13
+ * @remarks Brain embeddings are a FIRST-CLASS CLEO feature — the transformers
14
+ * package is a regular dependency of `@cleocode/core`, not optional.
15
+ * Migrated from `@xenova/transformers` v2 to `@huggingface/transformers`
16
+ * v4 (upstream rename, same author) which drops the deprecated
17
+ * `prebuild-install` transitive via `sharp@0.34+`.
18
+ */
19
+ import { EMBEDDING_DIMENSIONS } from './brain-embedding.js';
20
+ /** Model identifier for all-MiniLM-L6-v2 via Xenova hub. */
21
+ const MODEL_NAME = 'Xenova/all-MiniLM-L6-v2';
22
+ /** Pipeline singleton — initialized lazily on first call. */
23
+ let _pipeline = null;
24
+ /** Whether the pipeline has been successfully initialized. */
25
+ let _ready = false;
26
+ /**
27
+ * Load the transformers feature-extraction pipeline lazily.
28
+ * Dynamic import prevents the heavy model from loading unless embedding is enabled.
29
+ */
30
+ async function loadPipeline() {
31
+ if (_ready)
32
+ return;
33
+ // Dynamic import — only resolves when embedding is explicitly enabled
34
+ const { pipeline } = await import('@huggingface/transformers');
35
+ _pipeline = await pipeline('feature-extraction', MODEL_NAME);
36
+ _ready = true;
37
+ }
38
+ /**
39
+ * Local embedding provider backed by @huggingface/transformers.
40
+ *
41
+ * Produces 384-dimension Float32Array vectors compatible with the
42
+ * brain_embeddings vec0 table. The model is downloaded on first use
43
+ * and cached locally by the transformers library.
44
+ *
45
+ * Use {@link initDefaultProvider} (in brain-embedding.ts) to register an
46
+ * instance when brain.embedding.enabled=true and
47
+ * brain.embedding.provider='local'.
48
+ */
49
+ export class LocalEmbeddingProvider {
50
+ /** Number of dimensions produced — must match brain_embeddings vec0 table. */
51
+ dimensions = EMBEDDING_DIMENSIONS;
52
+ /**
53
+ * Whether the pipeline has been successfully initialized and is ready to produce embeddings.
54
+ */
55
+ isAvailable() {
56
+ return _ready;
57
+ }
58
+ /**
59
+ * Convert a single text string into a 384-dimension float vector.
60
+ * Triggers model download on first call if not already cached.
61
+ *
62
+ * @param text - The text to embed.
63
+ * @returns A Float32Array of length 384.
64
+ */
65
+ async embed(text) {
66
+ await loadPipeline();
67
+ const output = await _pipeline(text, { pooling: 'mean', normalize: true });
68
+ // output.data is DataArray (AnyTypedArray | any[]). For feature-extraction
69
+ // with all-MiniLM-L6-v2, the runtime value is always Float32Array. Copy via
70
+ // Float32Array constructor which accepts any iterable of numbers.
71
+ return Float32Array.from(output.data);
72
+ }
73
+ /**
74
+ * Embed multiple texts in sequence, reusing the cached pipeline.
75
+ *
76
+ * @param texts - Array of text strings to embed.
77
+ * @returns Array of Float32Array vectors, one per input text.
78
+ */
79
+ async embedBatch(texts) {
80
+ await loadPipeline();
81
+ const results = [];
82
+ for (const text of texts) {
83
+ const output = await _pipeline(text, { pooling: 'mean', normalize: true });
84
+ results.push(Float32Array.from(output.data));
85
+ }
86
+ return results;
87
+ }
88
+ }
89
+ /** Module-level singleton instance. */
90
+ let _instance = null;
91
+ /**
92
+ * Get or create the shared LocalEmbeddingProvider singleton.
93
+ *
94
+ * @returns The shared LocalEmbeddingProvider instance.
95
+ */
96
+ export function getLocalEmbeddingProvider() {
97
+ if (!_instance) {
98
+ _instance = new LocalEmbeddingProvider();
99
+ }
100
+ return _instance;
101
+ }
102
+ //# sourceMappingURL=embedding-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-local.js","sourceRoot":"","sources":["../../src/memory/embedding-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,4DAA4D;AAC5D,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C,6DAA6D;AAC7D,IAAI,SAAS,GAAyE,IAAI,CAAC;AAE3F,8DAA8D;AAC9D,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB;;;GAGG;AACH,KAAK,UAAU,YAAY;IACzB,IAAI,MAAM;QAAE,OAAO;IACnB,sEAAsE;IACtE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC/D,SAAS,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,sBAAsB;IACjC,8EAA8E;IACrE,UAAU,GAAG,oBAAoB,CAAC;IAE3C;;OAEG;IACH,WAAW;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,SAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,2EAA2E;QAC3E,4EAA4E;QAC5E,kEAAkE;QAClE,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,SAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,uCAAuC;AACvC,IAAI,SAAS,GAAkC,IAAI,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Embedding Queue Manager
3
+ *
4
+ * Manages an async queue of embedding requests, processing them in batches
5
+ * via a worker thread to avoid blocking the main Node.js event loop.
6
+ *
7
+ * Architecture:
8
+ * - {@link EmbeddingQueue} is a singleton — one worker thread per process
9
+ * - {@link EmbeddingQueue.enqueue} adds items; the drain loop batches them
10
+ * - Batches up to {@link BATCH_SIZE} items per processing cycle
11
+ * - Falls back to `setImmediate` + direct embedding when worker threads
12
+ * are unavailable or the worker script cannot be resolved
13
+ * - Registers a `process.on('exit')` handler for graceful shutdown
14
+ *
15
+ * @epic T134
16
+ * @task T137
17
+ * @why Non-blocking embedding generation for observeBrain()
18
+ * @what Singleton queue + worker-thread batch processor
19
+ */
20
+ import { existsSync } from 'node:fs';
21
+ import { dirname, join } from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+ /** Maximum items processed per worker message cycle. */
24
+ const BATCH_SIZE = 10;
25
+ /** How long to wait between drain cycles when the queue is non-empty (ms). */
26
+ const DRAIN_INTERVAL_MS = 50;
27
+ /**
28
+ * Resolve the absolute path to the compiled embedding-worker script.
29
+ *
30
+ * Strategy (cheap-first):
31
+ * 1. Adjacent to this file (tsc dev: `dist/memory/embedding-worker.js`)
32
+ * 2. Falls back to null when the file cannot be found (esbuild bundle context)
33
+ */
34
+ function resolveWorkerPath() {
35
+ try {
36
+ // In ESM, __dirname is not available — use import.meta.url
37
+ const currentDir = dirname(fileURLToPath(import.meta.url));
38
+ const candidate = join(currentDir, 'embedding-worker.js');
39
+ if (existsSync(candidate)) {
40
+ return candidate;
41
+ }
42
+ // Also try ../ for cases where the queue is loaded from a subdirectory
43
+ const parentCandidate = join(currentDir, '..', 'memory', 'embedding-worker.js');
44
+ if (existsSync(parentCandidate)) {
45
+ return parentCandidate;
46
+ }
47
+ return null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Singleton embedding queue.
55
+ *
56
+ * Batches embedding requests and processes them via a worker thread,
57
+ * keeping heavy model inference off the main event loop.
58
+ *
59
+ * Use {@link getEmbeddingQueue} to obtain the shared instance.
60
+ */
61
+ export class EmbeddingQueue {
62
+ queue = [];
63
+ worker = null;
64
+ workerAvailable = false;
65
+ draining = false;
66
+ shutdownPromise = null;
67
+ /**
68
+ * Store the observation ID → DB write callback so the worker result
69
+ * can be persisted back to brain_embeddings without coupling to SQLite here.
70
+ */
71
+ callbacks = new Map();
72
+ /** Initialise the worker thread if possible. Called lazily on first enqueue. */
73
+ async initWorker() {
74
+ if (this.workerAvailable || this.worker !== null)
75
+ return;
76
+ const workerPath = resolveWorkerPath();
77
+ if (!workerPath) {
78
+ // esbuild bundle context — worker file not available, use fallback
79
+ this.workerAvailable = false;
80
+ return;
81
+ }
82
+ try {
83
+ const { Worker } = await import('node:worker_threads');
84
+ const worker = new Worker(workerPath);
85
+ worker.on('message', (msg) => {
86
+ const cb = this.callbacks.get(msg.id);
87
+ if (!cb)
88
+ return;
89
+ this.callbacks.delete(msg.id);
90
+ if (msg.embedding) {
91
+ const vector = Float32Array.from(msg.embedding);
92
+ cb(msg.id, vector).catch(() => {
93
+ // Persistence is best-effort; observation already saved without vector
94
+ });
95
+ }
96
+ // On error, skip silently — observation exists without embedding
97
+ });
98
+ worker.on('error', () => {
99
+ // Worker crashed — disable worker path, drain remaining via fallback
100
+ this.worker = null;
101
+ this.workerAvailable = false;
102
+ this.callbacks.clear();
103
+ });
104
+ worker.on('exit', () => {
105
+ this.worker = null;
106
+ this.workerAvailable = false;
107
+ });
108
+ this.worker = worker;
109
+ this.workerAvailable = true;
110
+ }
111
+ catch {
112
+ // worker_threads unavailable (rare)
113
+ this.workerAvailable = false;
114
+ }
115
+ }
116
+ /**
117
+ * Add an observation to the embedding queue.
118
+ *
119
+ * The observation must already be persisted in brain_observations before
120
+ * calling this method. `onComplete` is called asynchronously with the
121
+ * generated vector once the worker finishes.
122
+ *
123
+ * @param observationId - The brain observation ID (e.g. `O-abc123-0`)
124
+ * @param text - Raw text to embed
125
+ * @param onComplete - Callback to persist the embedding vector
126
+ */
127
+ enqueue(observationId, text, onComplete) {
128
+ if (this.shutdownPromise)
129
+ return; // queue is shutting down
130
+ this.callbacks.set(observationId, onComplete);
131
+ this.queue.push({ observationId, text });
132
+ if (!this.draining) {
133
+ this.scheduleDrain();
134
+ }
135
+ }
136
+ /** Schedule the next drain cycle via setImmediate. */
137
+ scheduleDrain() {
138
+ setImmediate(() => {
139
+ this.drain().catch(() => {
140
+ // Drain errors are non-fatal
141
+ this.draining = false;
142
+ });
143
+ });
144
+ }
145
+ /**
146
+ * Process up to {@link BATCH_SIZE} items from the queue.
147
+ * Uses the worker thread when available, falls back to inline setImmediate.
148
+ */
149
+ async drain() {
150
+ this.draining = true;
151
+ // Ensure worker is initialised (no-op after first call)
152
+ await this.initWorker();
153
+ while (this.queue.length > 0) {
154
+ const batch = this.queue.splice(0, BATCH_SIZE);
155
+ if (this.workerAvailable && this.worker) {
156
+ // Dispatch to worker thread — results arrive via 'message' event
157
+ for (const item of batch) {
158
+ this.worker.postMessage({ id: item.observationId, text: item.text });
159
+ }
160
+ }
161
+ else {
162
+ // Fallback: process inline via setImmediate to yield to event loop
163
+ for (const item of batch) {
164
+ setImmediate(() => {
165
+ this.fallbackEmbed(item).catch(() => {
166
+ // Silently skip — observation already persisted without embedding
167
+ this.callbacks.delete(item.observationId);
168
+ });
169
+ });
170
+ }
171
+ }
172
+ if (this.queue.length > 0) {
173
+ // Yield to event loop between batches
174
+ await new Promise((resolve) => setTimeout(resolve, DRAIN_INTERVAL_MS));
175
+ }
176
+ }
177
+ this.draining = false;
178
+ }
179
+ /**
180
+ * Inline fallback embedding — used when worker thread is unavailable.
181
+ * Runs directly on the main thread (but inside setImmediate to yield first).
182
+ */
183
+ async fallbackEmbed(item) {
184
+ const cb = this.callbacks.get(item.observationId);
185
+ if (!cb)
186
+ return;
187
+ this.callbacks.delete(item.observationId);
188
+ const { getLocalEmbeddingProvider } = await import('./embedding-local.js');
189
+ const provider = getLocalEmbeddingProvider();
190
+ const vector = await provider.embed(item.text);
191
+ await cb(item.observationId, vector);
192
+ }
193
+ /**
194
+ * Flush the queue and terminate the worker thread.
195
+ *
196
+ * Waits for in-flight worker messages to drain, then terminates.
197
+ * Safe to call multiple times — subsequent calls return the same promise.
198
+ */
199
+ shutdown() {
200
+ if (this.shutdownPromise)
201
+ return this.shutdownPromise;
202
+ this.shutdownPromise = this.doShutdown();
203
+ return this.shutdownPromise;
204
+ }
205
+ async doShutdown() {
206
+ // Drain remaining queue items
207
+ if (this.queue.length > 0) {
208
+ await this.drain();
209
+ }
210
+ // Terminate the worker
211
+ if (this.worker) {
212
+ try {
213
+ await this.worker.terminate();
214
+ }
215
+ catch {
216
+ // Worker may already be gone
217
+ }
218
+ this.worker = null;
219
+ }
220
+ this.callbacks.clear();
221
+ }
222
+ }
223
+ /** Module-level singleton. */
224
+ let _instance = null;
225
+ /**
226
+ * Get or create the shared EmbeddingQueue singleton.
227
+ *
228
+ * Registers a process `exit` handler on first call to flush and
229
+ * terminate the worker thread cleanly.
230
+ *
231
+ * @returns The shared EmbeddingQueue instance.
232
+ */
233
+ export function getEmbeddingQueue() {
234
+ if (!_instance) {
235
+ _instance = new EmbeddingQueue();
236
+ // Best-effort flush on process exit (synchronous handlers only get ~50ms)
237
+ process.on('exit', () => {
238
+ _instance?.shutdown().catch(() => {
239
+ // exit handler — cannot await
240
+ });
241
+ });
242
+ // For SIGTERM/SIGINT give the queue time to flush
243
+ const gracefulShutdown = () => {
244
+ if (_instance) {
245
+ _instance
246
+ .shutdown()
247
+ .catch(() => { })
248
+ .finally(() => process.exit(0));
249
+ }
250
+ else {
251
+ process.exit(0);
252
+ }
253
+ };
254
+ process.once('SIGTERM', gracefulShutdown);
255
+ process.once('SIGINT', gracefulShutdown);
256
+ }
257
+ return _instance;
258
+ }
259
+ /**
260
+ * Reset the singleton (for testing only).
261
+ * Shuts down the existing queue before clearing the reference.
262
+ *
263
+ * @internal
264
+ */
265
+ export async function resetEmbeddingQueue() {
266
+ if (_instance) {
267
+ await _instance.shutdown();
268
+ _instance = null;
269
+ }
270
+ }
271
+ //# sourceMappingURL=embedding-queue.js.map