nodedex 0.1.0

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 (469) hide show
  1. package/adapters/claude-code-watcher.mjs +336 -0
  2. package/adapters/hermes-statedb-watcher.mjs +234 -0
  3. package/adapters/nodedex-capture-core.mjs +129 -0
  4. package/adapters/nodedex-capture.mjs +169 -0
  5. package/dist/agent-protocol.d.ts +7 -0
  6. package/dist/agent-protocol.d.ts.map +1 -0
  7. package/dist/agent-protocol.js +38 -0
  8. package/dist/agent-protocol.js.map +1 -0
  9. package/dist/api-server.d.ts +5 -0
  10. package/dist/api-server.d.ts.map +1 -0
  11. package/dist/api-server.js +351 -0
  12. package/dist/api-server.js.map +1 -0
  13. package/dist/boot-env.d.ts +2 -0
  14. package/dist/boot-env.d.ts.map +1 -0
  15. package/dist/boot-env.js +12 -0
  16. package/dist/boot-env.js.map +1 -0
  17. package/dist/engine/__tests__/search-core.test.d.ts +2 -0
  18. package/dist/engine/__tests__/search-core.test.d.ts.map +1 -0
  19. package/dist/engine/__tests__/search-core.test.js +139 -0
  20. package/dist/engine/__tests__/search-core.test.js.map +1 -0
  21. package/dist/engine/ai-provider.d.ts +45 -0
  22. package/dist/engine/ai-provider.d.ts.map +1 -0
  23. package/dist/engine/ai-provider.js +5 -0
  24. package/dist/engine/ai-provider.js.map +1 -0
  25. package/dist/engine/embeddings.d.ts +51 -0
  26. package/dist/engine/embeddings.d.ts.map +1 -0
  27. package/dist/engine/embeddings.js +89 -0
  28. package/dist/engine/embeddings.js.map +1 -0
  29. package/dist/engine/providers/__tests__/failure-policy.test.d.ts +2 -0
  30. package/dist/engine/providers/__tests__/failure-policy.test.d.ts.map +1 -0
  31. package/dist/engine/providers/__tests__/failure-policy.test.js +134 -0
  32. package/dist/engine/providers/__tests__/failure-policy.test.js.map +1 -0
  33. package/dist/engine/providers/__tests__/model-caps.test.d.ts +2 -0
  34. package/dist/engine/providers/__tests__/model-caps.test.d.ts.map +1 -0
  35. package/dist/engine/providers/__tests__/model-caps.test.js +38 -0
  36. package/dist/engine/providers/__tests__/model-caps.test.js.map +1 -0
  37. package/dist/engine/providers/__tests__/openai-structured.test.d.ts +2 -0
  38. package/dist/engine/providers/__tests__/openai-structured.test.d.ts.map +1 -0
  39. package/dist/engine/providers/__tests__/openai-structured.test.js +73 -0
  40. package/dist/engine/providers/__tests__/openai-structured.test.js.map +1 -0
  41. package/dist/engine/providers/__tests__/usage-ledger.test.d.ts +2 -0
  42. package/dist/engine/providers/__tests__/usage-ledger.test.d.ts.map +1 -0
  43. package/dist/engine/providers/__tests__/usage-ledger.test.js +108 -0
  44. package/dist/engine/providers/__tests__/usage-ledger.test.js.map +1 -0
  45. package/dist/engine/providers/anthropic.d.ts +17 -0
  46. package/dist/engine/providers/anthropic.d.ts.map +1 -0
  47. package/dist/engine/providers/anthropic.js +125 -0
  48. package/dist/engine/providers/anthropic.js.map +1 -0
  49. package/dist/engine/providers/failure-policy.d.ts +56 -0
  50. package/dist/engine/providers/failure-policy.d.ts.map +1 -0
  51. package/dist/engine/providers/failure-policy.js +120 -0
  52. package/dist/engine/providers/failure-policy.js.map +1 -0
  53. package/dist/engine/providers/gemini.d.ts +22 -0
  54. package/dist/engine/providers/gemini.d.ts.map +1 -0
  55. package/dist/engine/providers/gemini.js +180 -0
  56. package/dist/engine/providers/gemini.js.map +1 -0
  57. package/dist/engine/providers/index.d.ts +8 -0
  58. package/dist/engine/providers/index.d.ts.map +1 -0
  59. package/dist/engine/providers/index.js +67 -0
  60. package/dist/engine/providers/index.js.map +1 -0
  61. package/dist/engine/providers/local.d.ts +12 -0
  62. package/dist/engine/providers/local.d.ts.map +1 -0
  63. package/dist/engine/providers/local.js +46 -0
  64. package/dist/engine/providers/local.js.map +1 -0
  65. package/dist/engine/providers/model-caps.d.ts +6 -0
  66. package/dist/engine/providers/model-caps.d.ts.map +1 -0
  67. package/dist/engine/providers/model-caps.js +49 -0
  68. package/dist/engine/providers/model-caps.js.map +1 -0
  69. package/dist/engine/providers/openai.d.ts +30 -0
  70. package/dist/engine/providers/openai.d.ts.map +1 -0
  71. package/dist/engine/providers/openai.js +309 -0
  72. package/dist/engine/providers/openai.js.map +1 -0
  73. package/dist/engine/providers/usage-ledger.d.ts +69 -0
  74. package/dist/engine/providers/usage-ledger.d.ts.map +1 -0
  75. package/dist/engine/providers/usage-ledger.js +209 -0
  76. package/dist/engine/providers/usage-ledger.js.map +1 -0
  77. package/dist/engine/search-core.d.ts +40 -0
  78. package/dist/engine/search-core.d.ts.map +1 -0
  79. package/dist/engine/search-core.js +109 -0
  80. package/dist/engine/search-core.js.map +1 -0
  81. package/dist/engine/vector-math.d.ts +5 -0
  82. package/dist/engine/vector-math.d.ts.map +1 -0
  83. package/dist/engine/vector-math.js +25 -0
  84. package/dist/engine/vector-math.js.map +1 -0
  85. package/dist/home-env.d.ts +26 -0
  86. package/dist/home-env.d.ts.map +1 -0
  87. package/dist/home-env.js +87 -0
  88. package/dist/home-env.js.map +1 -0
  89. package/dist/mcp-server.d.ts +13 -0
  90. package/dist/mcp-server.d.ts.map +1 -0
  91. package/dist/mcp-server.js +79 -0
  92. package/dist/mcp-server.js.map +1 -0
  93. package/dist/middleware/auth.d.ts +23 -0
  94. package/dist/middleware/auth.d.ts.map +1 -0
  95. package/dist/middleware/auth.js +104 -0
  96. package/dist/middleware/auth.js.map +1 -0
  97. package/dist/middleware/auto-recall.d.ts +7 -0
  98. package/dist/middleware/auto-recall.d.ts.map +1 -0
  99. package/dist/middleware/auto-recall.js +257 -0
  100. package/dist/middleware/auto-recall.js.map +1 -0
  101. package/dist/middleware/auto-reflect.d.ts +4 -0
  102. package/dist/middleware/auto-reflect.d.ts.map +1 -0
  103. package/dist/middleware/auto-reflect.js +5 -0
  104. package/dist/middleware/auto-reflect.js.map +1 -0
  105. package/dist/middleware/reflect/apply-flag-verdict.d.ts +27 -0
  106. package/dist/middleware/reflect/apply-flag-verdict.d.ts.map +1 -0
  107. package/dist/middleware/reflect/apply-flag-verdict.js +57 -0
  108. package/dist/middleware/reflect/apply-flag-verdict.js.map +1 -0
  109. package/dist/middleware/reflect/arc-entity-resolve.d.ts +29 -0
  110. package/dist/middleware/reflect/arc-entity-resolve.d.ts.map +1 -0
  111. package/dist/middleware/reflect/arc-entity-resolve.js +356 -0
  112. package/dist/middleware/reflect/arc-entity-resolve.js.map +1 -0
  113. package/dist/middleware/reflect/arc-inactivity-timer.d.ts +47 -0
  114. package/dist/middleware/reflect/arc-inactivity-timer.d.ts.map +1 -0
  115. package/dist/middleware/reflect/arc-inactivity-timer.js +175 -0
  116. package/dist/middleware/reflect/arc-inactivity-timer.js.map +1 -0
  117. package/dist/middleware/reflect/arc-pipeline.d.ts +33 -0
  118. package/dist/middleware/reflect/arc-pipeline.d.ts.map +1 -0
  119. package/dist/middleware/reflect/arc-pipeline.js +498 -0
  120. package/dist/middleware/reflect/arc-pipeline.js.map +1 -0
  121. package/dist/middleware/reflect/comprehend-pergroup.d.ts +100 -0
  122. package/dist/middleware/reflect/comprehend-pergroup.d.ts.map +1 -0
  123. package/dist/middleware/reflect/comprehend-pergroup.js +610 -0
  124. package/dist/middleware/reflect/comprehend-pergroup.js.map +1 -0
  125. package/dist/middleware/reflect/comprehend.d.ts +237 -0
  126. package/dist/middleware/reflect/comprehend.d.ts.map +1 -0
  127. package/dist/middleware/reflect/comprehend.js +706 -0
  128. package/dist/middleware/reflect/comprehend.js.map +1 -0
  129. package/dist/middleware/reflect/config.d.ts +34 -0
  130. package/dist/middleware/reflect/config.d.ts.map +1 -0
  131. package/dist/middleware/reflect/config.js +131 -0
  132. package/dist/middleware/reflect/config.js.map +1 -0
  133. package/dist/middleware/reflect/context.d.ts +138 -0
  134. package/dist/middleware/reflect/context.d.ts.map +1 -0
  135. package/dist/middleware/reflect/context.js +619 -0
  136. package/dist/middleware/reflect/context.js.map +1 -0
  137. package/dist/middleware/reflect/cost-breakdown.d.ts +69 -0
  138. package/dist/middleware/reflect/cost-breakdown.d.ts.map +1 -0
  139. package/dist/middleware/reflect/cost-breakdown.js +63 -0
  140. package/dist/middleware/reflect/cost-breakdown.js.map +1 -0
  141. package/dist/middleware/reflect/cost-guard.d.ts +102 -0
  142. package/dist/middleware/reflect/cost-guard.d.ts.map +1 -0
  143. package/dist/middleware/reflect/cost-guard.js +243 -0
  144. package/dist/middleware/reflect/cost-guard.js.map +1 -0
  145. package/dist/middleware/reflect/cost-pricing.d.ts +54 -0
  146. package/dist/middleware/reflect/cost-pricing.d.ts.map +1 -0
  147. package/dist/middleware/reflect/cost-pricing.js +148 -0
  148. package/dist/middleware/reflect/cost-pricing.js.map +1 -0
  149. package/dist/middleware/reflect/cross-group-link.d.ts +61 -0
  150. package/dist/middleware/reflect/cross-group-link.d.ts.map +1 -0
  151. package/dist/middleware/reflect/cross-group-link.js +212 -0
  152. package/dist/middleware/reflect/cross-group-link.js.map +1 -0
  153. package/dist/middleware/reflect/dedup-by-source-and-value.d.ts +70 -0
  154. package/dist/middleware/reflect/dedup-by-source-and-value.d.ts.map +1 -0
  155. package/dist/middleware/reflect/dedup-by-source-and-value.js +0 -0
  156. package/dist/middleware/reflect/dedup-by-source-and-value.js.map +1 -0
  157. package/dist/middleware/reflect/describe-roots.d.ts +58 -0
  158. package/dist/middleware/reflect/describe-roots.d.ts.map +1 -0
  159. package/dist/middleware/reflect/describe-roots.js +266 -0
  160. package/dist/middleware/reflect/describe-roots.js.map +1 -0
  161. package/dist/middleware/reflect/flag-reviewer-startup.d.ts +16 -0
  162. package/dist/middleware/reflect/flag-reviewer-startup.d.ts.map +1 -0
  163. package/dist/middleware/reflect/flag-reviewer-startup.js +107 -0
  164. package/dist/middleware/reflect/flag-reviewer-startup.js.map +1 -0
  165. package/dist/middleware/reflect/flag-reviewer.d.ts +69 -0
  166. package/dist/middleware/reflect/flag-reviewer.d.ts.map +1 -0
  167. package/dist/middleware/reflect/flag-reviewer.js +520 -0
  168. package/dist/middleware/reflect/flag-reviewer.js.map +1 -0
  169. package/dist/middleware/reflect/inline-dedup.d.ts +26 -0
  170. package/dist/middleware/reflect/inline-dedup.d.ts.map +1 -0
  171. package/dist/middleware/reflect/inline-dedup.js +131 -0
  172. package/dist/middleware/reflect/inline-dedup.js.map +1 -0
  173. package/dist/middleware/reflect/justify-decisions.d.ts +37 -0
  174. package/dist/middleware/reflect/justify-decisions.d.ts.map +1 -0
  175. package/dist/middleware/reflect/justify-decisions.js +159 -0
  176. package/dist/middleware/reflect/justify-decisions.js.map +1 -0
  177. package/dist/middleware/reflect/nl-accept.d.ts +35 -0
  178. package/dist/middleware/reflect/nl-accept.d.ts.map +1 -0
  179. package/dist/middleware/reflect/nl-accept.js +167 -0
  180. package/dist/middleware/reflect/nl-accept.js.map +1 -0
  181. package/dist/middleware/reflect/pass0.d.ts +20 -0
  182. package/dist/middleware/reflect/pass0.d.ts.map +1 -0
  183. package/dist/middleware/reflect/pass0.js +423 -0
  184. package/dist/middleware/reflect/pass0.js.map +1 -0
  185. package/dist/middleware/reflect/pass1.d.ts +17 -0
  186. package/dist/middleware/reflect/pass1.d.ts.map +1 -0
  187. package/dist/middleware/reflect/pass1.js +241 -0
  188. package/dist/middleware/reflect/pass1.js.map +1 -0
  189. package/dist/middleware/reflect/pass2-quarantine.d.ts +129 -0
  190. package/dist/middleware/reflect/pass2-quarantine.d.ts.map +1 -0
  191. package/dist/middleware/reflect/pass2-quarantine.js +272 -0
  192. package/dist/middleware/reflect/pass2-quarantine.js.map +1 -0
  193. package/dist/middleware/reflect/pass2-seams.d.ts +205 -0
  194. package/dist/middleware/reflect/pass2-seams.d.ts.map +1 -0
  195. package/dist/middleware/reflect/pass2-seams.js +279 -0
  196. package/dist/middleware/reflect/pass2-seams.js.map +1 -0
  197. package/dist/middleware/reflect/pass2-split-orchestrator.d.ts +37 -0
  198. package/dist/middleware/reflect/pass2-split-orchestrator.d.ts.map +1 -0
  199. package/dist/middleware/reflect/pass2-split-orchestrator.js +531 -0
  200. package/dist/middleware/reflect/pass2-split-orchestrator.js.map +1 -0
  201. package/dist/middleware/reflect/pass2.d.ts +17 -0
  202. package/dist/middleware/reflect/pass2.d.ts.map +1 -0
  203. package/dist/middleware/reflect/pass2.js +324 -0
  204. package/dist/middleware/reflect/pass2.js.map +1 -0
  205. package/dist/middleware/reflect/pass2a.d.ts +141 -0
  206. package/dist/middleware/reflect/pass2a.d.ts.map +1 -0
  207. package/dist/middleware/reflect/pass2a.js +404 -0
  208. package/dist/middleware/reflect/pass2a.js.map +1 -0
  209. package/dist/middleware/reflect/pass2b.d.ts +108 -0
  210. package/dist/middleware/reflect/pass2b.d.ts.map +1 -0
  211. package/dist/middleware/reflect/pass2b.js +480 -0
  212. package/dist/middleware/reflect/pass2b.js.map +1 -0
  213. package/dist/middleware/reflect/pass2c.d.ts +113 -0
  214. package/dist/middleware/reflect/pass2c.d.ts.map +1 -0
  215. package/dist/middleware/reflect/pass2c.js +360 -0
  216. package/dist/middleware/reflect/pass2c.js.map +1 -0
  217. package/dist/middleware/reflect/pass3-batch.d.ts +62 -0
  218. package/dist/middleware/reflect/pass3-batch.d.ts.map +1 -0
  219. package/dist/middleware/reflect/pass3-batch.js +139 -0
  220. package/dist/middleware/reflect/pass3-batch.js.map +1 -0
  221. package/dist/middleware/reflect/pass3.d.ts +23 -0
  222. package/dist/middleware/reflect/pass3.d.ts.map +1 -0
  223. package/dist/middleware/reflect/pass3.js +371 -0
  224. package/dist/middleware/reflect/pass3.js.map +1 -0
  225. package/dist/middleware/reflect/pass4-slice.d.ts +25 -0
  226. package/dist/middleware/reflect/pass4-slice.d.ts.map +1 -0
  227. package/dist/middleware/reflect/pass4-slice.js +315 -0
  228. package/dist/middleware/reflect/pass4-slice.js.map +1 -0
  229. package/dist/middleware/reflect/pass4.d.ts +30 -0
  230. package/dist/middleware/reflect/pass4.d.ts.map +1 -0
  231. package/dist/middleware/reflect/pass4.js +193 -0
  232. package/dist/middleware/reflect/pass4.js.map +1 -0
  233. package/dist/middleware/reflect/pass5.d.ts +22 -0
  234. package/dist/middleware/reflect/pass5.d.ts.map +1 -0
  235. package/dist/middleware/reflect/pass5.js +178 -0
  236. package/dist/middleware/reflect/pass5.js.map +1 -0
  237. package/dist/middleware/reflect/pass_judge.d.ts +44 -0
  238. package/dist/middleware/reflect/pass_judge.d.ts.map +1 -0
  239. package/dist/middleware/reflect/pass_judge.js +263 -0
  240. package/dist/middleware/reflect/pass_judge.js.map +1 -0
  241. package/dist/middleware/reflect/pipeline-flags.d.ts +140 -0
  242. package/dist/middleware/reflect/pipeline-flags.d.ts.map +1 -0
  243. package/dist/middleware/reflect/pipeline-flags.js +314 -0
  244. package/dist/middleware/reflect/pipeline-flags.js.map +1 -0
  245. package/dist/middleware/reflect/pipeline.d.ts +237 -0
  246. package/dist/middleware/reflect/pipeline.d.ts.map +1 -0
  247. package/dist/middleware/reflect/pipeline.js +3114 -0
  248. package/dist/middleware/reflect/pipeline.js.map +1 -0
  249. package/dist/middleware/reflect/promptOverride.d.ts +14 -0
  250. package/dist/middleware/reflect/promptOverride.d.ts.map +1 -0
  251. package/dist/middleware/reflect/promptOverride.js +28 -0
  252. package/dist/middleware/reflect/promptOverride.js.map +1 -0
  253. package/dist/middleware/reflect/provenance-check.d.ts +48 -0
  254. package/dist/middleware/reflect/provenance-check.d.ts.map +1 -0
  255. package/dist/middleware/reflect/provenance-check.js +180 -0
  256. package/dist/middleware/reflect/provenance-check.js.map +1 -0
  257. package/dist/middleware/reflect/provenance-reviewer.d.ts +52 -0
  258. package/dist/middleware/reflect/provenance-reviewer.d.ts.map +1 -0
  259. package/dist/middleware/reflect/provenance-reviewer.js +253 -0
  260. package/dist/middleware/reflect/provenance-reviewer.js.map +1 -0
  261. package/dist/middleware/reflect/prune-collapsed-types.d.ts +11 -0
  262. package/dist/middleware/reflect/prune-collapsed-types.d.ts.map +1 -0
  263. package/dist/middleware/reflect/prune-collapsed-types.js +32 -0
  264. package/dist/middleware/reflect/prune-collapsed-types.js.map +1 -0
  265. package/dist/middleware/reflect/recognize-root.d.ts +75 -0
  266. package/dist/middleware/reflect/recognize-root.d.ts.map +1 -0
  267. package/dist/middleware/reflect/recognize-root.js +204 -0
  268. package/dist/middleware/reflect/recognize-root.js.map +1 -0
  269. package/dist/middleware/reflect/render-agent-flag.d.ts +25 -0
  270. package/dist/middleware/reflect/render-agent-flag.d.ts.map +1 -0
  271. package/dist/middleware/reflect/render-agent-flag.js +39 -0
  272. package/dist/middleware/reflect/render-agent-flag.js.map +1 -0
  273. package/dist/middleware/reflect/retrieve-graph-slice.d.ts +54 -0
  274. package/dist/middleware/reflect/retrieve-graph-slice.d.ts.map +1 -0
  275. package/dist/middleware/reflect/retrieve-graph-slice.js +173 -0
  276. package/dist/middleware/reflect/retrieve-graph-slice.js.map +1 -0
  277. package/dist/middleware/reflect/root-relatedness.d.ts +31 -0
  278. package/dist/middleware/reflect/root-relatedness.d.ts.map +1 -0
  279. package/dist/middleware/reflect/root-relatedness.js +92 -0
  280. package/dist/middleware/reflect/root-relatedness.js.map +1 -0
  281. package/dist/middleware/reflect/schema-heal.d.ts +22 -0
  282. package/dist/middleware/reflect/schema-heal.d.ts.map +1 -0
  283. package/dist/middleware/reflect/schema-heal.js +119 -0
  284. package/dist/middleware/reflect/schema-heal.js.map +1 -0
  285. package/dist/middleware/reflect/schema-validator.d.ts +85 -0
  286. package/dist/middleware/reflect/schema-validator.d.ts.map +1 -0
  287. package/dist/middleware/reflect/schema-validator.js +196 -0
  288. package/dist/middleware/reflect/schema-validator.js.map +1 -0
  289. package/dist/middleware/reflect/stage-audit-graph.d.ts +115 -0
  290. package/dist/middleware/reflect/stage-audit-graph.d.ts.map +1 -0
  291. package/dist/middleware/reflect/stage-audit-graph.js +563 -0
  292. package/dist/middleware/reflect/stage-audit-graph.js.map +1 -0
  293. package/dist/middleware/reflect/stage-d-resolve-graph.d.ts +87 -0
  294. package/dist/middleware/reflect/stage-d-resolve-graph.d.ts.map +1 -0
  295. package/dist/middleware/reflect/stage-d-resolve-graph.js +256 -0
  296. package/dist/middleware/reflect/stage-d-resolve-graph.js.map +1 -0
  297. package/dist/middleware/reflect/synthesizeFromSceneCard.d.ts +15 -0
  298. package/dist/middleware/reflect/synthesizeFromSceneCard.d.ts.map +1 -0
  299. package/dist/middleware/reflect/synthesizeFromSceneCard.js +91 -0
  300. package/dist/middleware/reflect/synthesizeFromSceneCard.js.map +1 -0
  301. package/dist/middleware/reflect/types.d.ts +261 -0
  302. package/dist/middleware/reflect/types.d.ts.map +1 -0
  303. package/dist/middleware/reflect/types.js +3 -0
  304. package/dist/middleware/reflect/types.js.map +1 -0
  305. package/dist/middleware/reflect/v2-integrate.d.ts +120 -0
  306. package/dist/middleware/reflect/v2-integrate.d.ts.map +1 -0
  307. package/dist/middleware/reflect/v2-integrate.js +388 -0
  308. package/dist/middleware/reflect/v2-integrate.js.map +1 -0
  309. package/dist/middleware/reflect/v2-judge.d.ts +44 -0
  310. package/dist/middleware/reflect/v2-judge.d.ts.map +1 -0
  311. package/dist/middleware/reflect/v2-judge.js +191 -0
  312. package/dist/middleware/reflect/v2-judge.js.map +1 -0
  313. package/dist/relation-sets.d.ts +2 -0
  314. package/dist/relation-sets.d.ts.map +1 -0
  315. package/dist/relation-sets.js +35 -0
  316. package/dist/relation-sets.js.map +1 -0
  317. package/dist/routes/__tests__/flags.test.d.ts +2 -0
  318. package/dist/routes/__tests__/flags.test.d.ts.map +1 -0
  319. package/dist/routes/__tests__/flags.test.js +257 -0
  320. package/dist/routes/__tests__/flags.test.js.map +1 -0
  321. package/dist/routes/__tests__/models-catalog.test.d.ts +2 -0
  322. package/dist/routes/__tests__/models-catalog.test.d.ts.map +1 -0
  323. package/dist/routes/__tests__/models-catalog.test.js +130 -0
  324. package/dist/routes/__tests__/models-catalog.test.js.map +1 -0
  325. package/dist/routes/__tests__/reflect-pause-drain.test.d.ts +2 -0
  326. package/dist/routes/__tests__/reflect-pause-drain.test.d.ts.map +1 -0
  327. package/dist/routes/__tests__/reflect-pause-drain.test.js +38 -0
  328. package/dist/routes/__tests__/reflect-pause-drain.test.js.map +1 -0
  329. package/dist/routes/__tests__/spend-pause-drain.test.d.ts +2 -0
  330. package/dist/routes/__tests__/spend-pause-drain.test.d.ts.map +1 -0
  331. package/dist/routes/__tests__/spend-pause-drain.test.js +38 -0
  332. package/dist/routes/__tests__/spend-pause-drain.test.js.map +1 -0
  333. package/dist/routes/admin.d.ts +49 -0
  334. package/dist/routes/admin.d.ts.map +1 -0
  335. package/dist/routes/admin.js +471 -0
  336. package/dist/routes/admin.js.map +1 -0
  337. package/dist/routes/blocks.d.ts +4 -0
  338. package/dist/routes/blocks.d.ts.map +1 -0
  339. package/dist/routes/blocks.js +893 -0
  340. package/dist/routes/blocks.js.map +1 -0
  341. package/dist/routes/chat-proxy.d.ts +5 -0
  342. package/dist/routes/chat-proxy.d.ts.map +1 -0
  343. package/dist/routes/chat-proxy.js +225 -0
  344. package/dist/routes/chat-proxy.js.map +1 -0
  345. package/dist/routes/conversations.d.ts +4 -0
  346. package/dist/routes/conversations.d.ts.map +1 -0
  347. package/dist/routes/conversations.js +139 -0
  348. package/dist/routes/conversations.js.map +1 -0
  349. package/dist/routes/flags.d.ts +4 -0
  350. package/dist/routes/flags.d.ts.map +1 -0
  351. package/dist/routes/flags.js +151 -0
  352. package/dist/routes/flags.js.map +1 -0
  353. package/dist/routes/inject.d.ts +4 -0
  354. package/dist/routes/inject.d.ts.map +1 -0
  355. package/dist/routes/inject.js +183 -0
  356. package/dist/routes/inject.js.map +1 -0
  357. package/dist/routes/mcp-http.d.ts +5 -0
  358. package/dist/routes/mcp-http.d.ts.map +1 -0
  359. package/dist/routes/mcp-http.js +94 -0
  360. package/dist/routes/mcp-http.js.map +1 -0
  361. package/dist/routes/quarantine.d.ts +4 -0
  362. package/dist/routes/quarantine.d.ts.map +1 -0
  363. package/dist/routes/quarantine.js +66 -0
  364. package/dist/routes/quarantine.js.map +1 -0
  365. package/dist/routes/recall.d.ts +5 -0
  366. package/dist/routes/recall.d.ts.map +1 -0
  367. package/dist/routes/recall.js +573 -0
  368. package/dist/routes/recall.js.map +1 -0
  369. package/dist/routes/reflect.d.ts +5 -0
  370. package/dist/routes/reflect.d.ts.map +1 -0
  371. package/dist/routes/reflect.js +231 -0
  372. package/dist/routes/reflect.js.map +1 -0
  373. package/dist/routes/session.d.ts +4 -0
  374. package/dist/routes/session.d.ts.map +1 -0
  375. package/dist/routes/session.js +418 -0
  376. package/dist/routes/session.js.map +1 -0
  377. package/dist/routes/state.d.ts +116 -0
  378. package/dist/routes/state.d.ts.map +1 -0
  379. package/dist/routes/state.js +621 -0
  380. package/dist/routes/state.js.map +1 -0
  381. package/dist/routes/usage.d.ts +3 -0
  382. package/dist/routes/usage.d.ts.map +1 -0
  383. package/dist/routes/usage.js +141 -0
  384. package/dist/routes/usage.js.map +1 -0
  385. package/dist/routes/workspace.d.ts +5 -0
  386. package/dist/routes/workspace.d.ts.map +1 -0
  387. package/dist/routes/workspace.js +435 -0
  388. package/dist/routes/workspace.js.map +1 -0
  389. package/dist/server.d.ts +13 -0
  390. package/dist/server.d.ts.map +1 -0
  391. package/dist/server.js +298 -0
  392. package/dist/server.js.map +1 -0
  393. package/dist/store/__tests__/backup.test.d.ts +2 -0
  394. package/dist/store/__tests__/backup.test.d.ts.map +1 -0
  395. package/dist/store/__tests__/backup.test.js +53 -0
  396. package/dist/store/__tests__/backup.test.js.map +1 -0
  397. package/dist/store/__tests__/quality.test.d.ts +2 -0
  398. package/dist/store/__tests__/quality.test.d.ts.map +1 -0
  399. package/dist/store/__tests__/quality.test.js +75 -0
  400. package/dist/store/__tests__/quality.test.js.map +1 -0
  401. package/dist/store/backup.d.ts +14 -0
  402. package/dist/store/backup.d.ts.map +1 -0
  403. package/dist/store/backup.js +95 -0
  404. package/dist/store/backup.js.map +1 -0
  405. package/dist/store/database.d.ts +407 -0
  406. package/dist/store/database.d.ts.map +1 -0
  407. package/dist/store/database.js +2004 -0
  408. package/dist/store/database.js.map +1 -0
  409. package/dist/store/quality.d.ts +25 -0
  410. package/dist/store/quality.d.ts.map +1 -0
  411. package/dist/store/quality.js +48 -0
  412. package/dist/store/quality.js.map +1 -0
  413. package/dist/tools/__tests__/assemble-block-chains.test.d.ts +2 -0
  414. package/dist/tools/__tests__/assemble-block-chains.test.d.ts.map +1 -0
  415. package/dist/tools/__tests__/assemble-block-chains.test.js +118 -0
  416. package/dist/tools/__tests__/assemble-block-chains.test.js.map +1 -0
  417. package/dist/tools/__tests__/filter-roots-by-concepts.test.d.ts +2 -0
  418. package/dist/tools/__tests__/filter-roots-by-concepts.test.d.ts.map +1 -0
  419. package/dist/tools/__tests__/filter-roots-by-concepts.test.js +68 -0
  420. package/dist/tools/__tests__/filter-roots-by-concepts.test.js.map +1 -0
  421. package/dist/tools/__tests__/flag-surface.test.d.ts +2 -0
  422. package/dist/tools/__tests__/flag-surface.test.d.ts.map +1 -0
  423. package/dist/tools/__tests__/flag-surface.test.js +130 -0
  424. package/dist/tools/__tests__/flag-surface.test.js.map +1 -0
  425. package/dist/tools/core.d.ts +5 -0
  426. package/dist/tools/core.d.ts.map +1 -0
  427. package/dist/tools/core.js +962 -0
  428. package/dist/tools/core.js.map +1 -0
  429. package/dist/tools/derive.d.ts +5 -0
  430. package/dist/tools/derive.d.ts.map +1 -0
  431. package/dist/tools/derive.js +182 -0
  432. package/dist/tools/derive.js.map +1 -0
  433. package/dist/tools/flag-surface.d.ts +26 -0
  434. package/dist/tools/flag-surface.d.ts.map +1 -0
  435. package/dist/tools/flag-surface.js +59 -0
  436. package/dist/tools/flag-surface.js.map +1 -0
  437. package/dist/tools/helpers.d.ts +99 -0
  438. package/dist/tools/helpers.d.ts.map +1 -0
  439. package/dist/tools/helpers.js +243 -0
  440. package/dist/tools/helpers.js.map +1 -0
  441. package/dist/tools/projects.d.ts +5 -0
  442. package/dist/tools/projects.d.ts.map +1 -0
  443. package/dist/tools/projects.js +175 -0
  444. package/dist/tools/projects.js.map +1 -0
  445. package/dist/tools/system.d.ts +5 -0
  446. package/dist/tools/system.d.ts.map +1 -0
  447. package/dist/tools/system.js +1361 -0
  448. package/dist/tools/system.js.map +1 -0
  449. package/dist/tools/tasks.d.ts +5 -0
  450. package/dist/tools/tasks.d.ts.map +1 -0
  451. package/dist/tools/tasks.js +289 -0
  452. package/dist/tools/tasks.js.map +1 -0
  453. package/package.json +69 -0
  454. package/scripts/nodedex-entry.mjs +396 -0
  455. package/tui-dist/App.js +185 -0
  456. package/tui-dist/api.js +197 -0
  457. package/tui-dist/cli.js +53 -0
  458. package/tui-dist/components.js +63 -0
  459. package/tui-dist/config.js +242 -0
  460. package/tui-dist/connect-snippets.js +98 -0
  461. package/tui-dist/feed.js +51 -0
  462. package/tui-dist/health.js +465 -0
  463. package/tui-dist/hooks.js +23 -0
  464. package/tui-dist/memory.js +220 -0
  465. package/tui-dist/onboarding.js +498 -0
  466. package/tui-dist/review.js +193 -0
  467. package/tui-dist/servers.js +556 -0
  468. package/tui-dist/smoke.js +15 -0
  469. package/tui-dist/theme.js +106 -0
@@ -0,0 +1,388 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // PIPELINE v2 (TRANSFORM) — INTEGRATE half (graph-AWARE): root-recognition wiring
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // Design: docs/PIPELINE-TRANSFORM-DESIGN.md §15.4 (the INTEGRATE / LLM-2 contract).
6
+ //
7
+ // COMPREHEND (comprehend.ts) is GRAPH-BLIND by design — it reads ONLY the
8
+ // transcript. This module is the GRAPH-AWARE counterpart: it reconciles the v2
9
+ // fragment against the EXISTING graph. STEP 1 (this file) wires the already-built
10
+ // RECOGNIZER (recognize-root.ts) into the v2 path so a new cluster ATTACHES to an
11
+ // existing project root instead of forking a parallel root every session (the
12
+ // compounding property the whole recognition layer exists to protect).
13
+ //
14
+ // WHY THIS LIVES HERE, NOT IN pipeline.ts:
15
+ // The live recognizer block (pipeline.ts:~1406) gates on
16
+ // `checkpoint.arcEntityResolution` — a field the v2 checkpoint
17
+ // (comprehendResultToCheckpoint → resumeFrom:"pass3") NEVER sets, so on the v2
18
+ // path the recognizer is inert. But the recognizer CALL only needs
19
+ // (items + knownRoots + provider); it does NOT read arcEntityResolution's
20
+ // content (that field is purely the arc-mode gate). So v2 runs the SAME
21
+ // recognizer here, in its own caller, BEFORE building the checkpoint. Zero edits
22
+ // to the live pipeline; 100% reuse of recognize-root.ts. (v2 is a CALLER of
23
+ // runAutoReflect, not an edit to it — the established v2 invariant.)
24
+ //
25
+ // FLAG: gated on recognizerEnabled() — DEFAULT ON since 2026-06-12
26
+ // (NODEDEX_RECOGNIZER_ENABLED=0 opts out); the SAME switch the live path uses, so
27
+ // "recognizer on/off" is ONE flag everywhere. When off (or when the graph has no
28
+ // roots yet) this is a pure passthrough: no DB read beyond the root scan, no LLM,
29
+ // items returned unchanged. (Runs in BOTH per-turn and arc v2 — it's in the front-half.)
30
+ //
31
+ // NEXT inhabitant of this module: the cross-group / cross-session LINKER (the
32
+ // islanding fix, design §15.4) — it joins here, also graph-aware, also a v2 caller.
33
+ import { intFromEnv } from "./config.js";
34
+ import { recognizeRootsForArc, applyRootRemap, recognizerEnabled, } from "./recognize-root.js";
35
+ import { callComprehendLLM, comprehendResultToPass2Items, } from "./comprehend.js";
36
+ import { pergroupEnabled, runComprehendPerGroup } from "./comprehend-pergroup.js";
37
+ import { runCrossGroupLink } from "./cross-group-link.js";
38
+ import { runJustifyConclusions } from "./justify-decisions.js";
39
+ import { runV2Judge, v2JudgeEnabled } from "./v2-judge.js";
40
+ import { callPass2bLLM, callPass2bBatchedFill, v2FillBatchEnabled } from "./pass2b.js";
41
+ import { extractPrimaryValueFromUnique } from "./dedup-by-source-and-value.js";
42
+ import { getSpendBetween } from "../../engine/providers/usage-ledger.js";
43
+ /** Existing project ROOTS as recognizer fuel: {label, essence}. essence is the
44
+ * root's surface description (domain + owner), maintained by the describer —
45
+ * the recognizer judges the new cluster against THIS, not the label string. */
46
+ export function loadKnownRoots(db) {
47
+ return db
48
+ .getAllBlocks()
49
+ .filter((b) => b.type === "project")
50
+ .map((b) => ({ label: b.label, essence: b.essence || "" }));
51
+ }
52
+ /**
53
+ * v2 INTEGRATE — STEP 1: root recognition.
54
+ *
55
+ * For each NEW-root candidate cluster in the v2 fragment (an item.project that is
56
+ * not already an existing root), ask the recognizer "does this belong to an
57
+ * EXISTING root — same domain AND same owner?" On a confident attach, rewrite the
58
+ * cluster's items' .project to that root's EXACT label. Pass 3 (downstream) then
59
+ * finds it in KNOWN PROJECT ROOTS and attaches — no fork. Anything short of a
60
+ * confident same-owner fit keeps the new root (a fork is the safe failure; the
61
+ * post-hoc AUDIT-heal pass surfaces fork-pairs for the agent/user).
62
+ *
63
+ * Reuses the validated recognizer wholesale: recognizeRootsForArc (LLM judgment +
64
+ * the 5 guards + bias-to-fork) and applyRootRemap (pure remap). This function is
65
+ * the thin v2-side glue (load roots → recognize → apply). Default OFF →
66
+ * passthrough.
67
+ */
68
+ export async function integrateV2Roots(db, provider, items) {
69
+ if (!recognizerEnabled()) {
70
+ return { items, ran: false, recognition: null, rewritten: 0 };
71
+ }
72
+ const knownRoots = loadKnownRoots(db);
73
+ if (knownRoots.length === 0) {
74
+ // No roots to attach to (e.g. a brand-new graph) → nothing to recognize.
75
+ return { items, ran: false, recognition: null, rewritten: 0 };
76
+ }
77
+ const recognition = await recognizeRootsForArc({ provider, items, knownRoots });
78
+ const { items: remapped, rewritten } = applyRootRemap(items, recognition.remap);
79
+ return { items: remapped, ran: true, recognition, rewritten };
80
+ }
81
+ /**
82
+ * Run the v2 TRANSFORM front-half over a raw arc transcript:
83
+ * COMPREHEND → SEAM 1 → convert → Pass 2b unique{}-fill (parallel) →
84
+ * INTEGRATE (recognizer, default-OFF passthrough) → resumeFrom:pass3 checkpoint.
85
+ *
86
+ * Graph-aware only via the recognizer (COMPREHEND itself is graph-blind — it reads
87
+ * the transcript only). Returns checkpoint=null on any path where v2 should not
88
+ * produce a graph, so the caller can degrade to v1 (mirrors the arc path's
89
+ * graceful-degrade contract). Never throws on a bad fragment.
90
+ */
91
+ export function mergeCrossGroupDupsEnabled() {
92
+ // DEFAULT ON since 2026-06-12 (part of the validated v2 stack). =0 opts out.
93
+ return process.env.NODEDEX_V2_MERGE_DUPS !== "0";
94
+ }
95
+ /** Run the cross-group linker BEFORE the SELECTOR instead of after JUSTIFY (default OFF,
96
+ * NODEDEX_V2_CROSSLINK_FIRST). Cross-link needs only id/type/text (not the filled
97
+ * unique{}), so it can run right after convert — giving the judge each block's
98
+ * cross-thread role before it decides keep/drop (its rescue then protects cross-group
99
+ * deps, not just within-group), and pre-computing the cross-group links so they wire
100
+ * across Pass-3 batches. The expensive 2b fill still runs AFTER the judge, so dropped
101
+ * blocks never pay it. Off → cross-link runs in its original slot, byte-identical. */
102
+ export function v2CrossLinkFirstEnabled() {
103
+ // Default ON (promoted 2026-06-14 — validated SOUND); set =0 to opt out.
104
+ return process.env.NODEDEX_V2_CROSSLINK_FIRST !== "0";
105
+ }
106
+ /** Transcript size (chars) up to which ONE COMPREHEND call is the default.
107
+ * Per-group exists ONLY to survive output-truncation on a BIG arc (the 307s
108
+ * truncate-retry root cause); on input that fits one call it over-splits and
109
+ * its N blind parallel PRODUCE calls re-extract shared claims → cross-group
110
+ * dups + ~3× wall time (measured 2026-06-11: 1 group=175s vs 7 groups=554s on
111
+ * comparable single turns). Env-tunable: NODEDEX_V2_HOLISTIC_MAX_CHARS. */
112
+ export function holisticMaxChars() {
113
+ return intFromEnv("NODEDEX_V2_HOLISTIC_MAX_CHARS", 20000);
114
+ }
115
+ /** Which COMPREHEND mode for this input — the size discriminator is structural,
116
+ * so code decides (charter rule 3); `forced` (a caller's explicit opts.holistic)
117
+ * always wins. Pure / testable. */
118
+ export function chooseHolistic(transcriptLength, forced) {
119
+ if (forced !== undefined)
120
+ return forced;
121
+ return transcriptLength <= holisticMaxChars();
122
+ }
123
+ /**
124
+ * Collapse CROSS-GROUP DUPLICATES — the same residue extracted by multiple PRODUCE
125
+ * groups (per-group PRODUCE runs each group in isolation, so a claim relevant to
126
+ * several threads gets written once PER group → N copies of one block; the dup we
127
+ * proved via provenance: 3 "Leaky Bucket" blocks citing the identical source line).
128
+ *
129
+ * Keep ONE survivor; re-point every reference (causal fields + relations[].target)
130
+ * from the dropped copies → the survivor, and UNION the survivor's links so it stays
131
+ * connected to all the threads its copies touched. (This is "one block, many threads"
132
+ * — realized by links, because v2 groups are an extraction scaffold, not persisted
133
+ * graph entities; final chains come from causal edges.)
134
+ *
135
+ * KEY = type + unique{} primary_value (via extractPrimaryValueFromUnique — the SAME
136
+ * identity the block-dedup layer uses). Essence AND even the source excerpt DRIFT
137
+ * across per-group PRODUCE calls (each phrases its own summary, "AGENT:"-prefix vs
138
+ * not), but the primary_value — the approach / choice / limit — is STABLE, so it's
139
+ * what actually catches the real dups (validated against the dup run: excerpt+essence
140
+ * caught 0; primary_value catches them). Within one extraction, same type + same
141
+ * primary_value = the same claim → safe to merge (the established identity rule).
142
+ * MUST run AFTER 2b fill (primary_value is empty before that). Default OFF
143
+ * (NODEDEX_V2_MERGE_DUPS).
144
+ */
145
+ export function mergeCrossGroupDups(items) {
146
+ const norm = (s) => (s ?? "").toLowerCase().replace(/\s+/g, " ").trim();
147
+ const survivorByKey = new Map();
148
+ const remap = new Map(); // dropped id → survivor id
149
+ const kept = [];
150
+ for (const it of items) {
151
+ const pv = norm(extractPrimaryValueFromUnique(it.type, it.unique ?? {}));
152
+ const key = `${it.type}|${pv}`;
153
+ const survivor = pv.length > 0 ? survivorByKey.get(key) : undefined; // need a real claim to merge on
154
+ if (survivor) {
155
+ remap.set(it.id, survivor.id);
156
+ survivor.based_on_items.push(...it.based_on_items);
157
+ survivor.triggered_by_items.push(...it.triggered_by_items);
158
+ survivor.extends_item ??= it.extends_item;
159
+ survivor.supersedes_ref ??= it.supersedes_ref;
160
+ survivor.resolved_ref ??= it.resolved_ref;
161
+ if (it.relations?.length)
162
+ (survivor.relations ??= []).push(...it.relations);
163
+ }
164
+ else {
165
+ if (pv.length > 0)
166
+ survivorByKey.set(key, it);
167
+ kept.push(it);
168
+ }
169
+ }
170
+ if (remap.size === 0)
171
+ return { items, merged: 0 };
172
+ // Re-point every reference from a dropped copy → its survivor; drop self-refs + dedup.
173
+ const fix = (id) => remap.get(id) ?? id;
174
+ const uniqNoSelf = (arr, self) => [...new Set(arr.map(fix))].filter((x) => x !== self);
175
+ for (const it of kept) {
176
+ it.based_on_items = uniqNoSelf(it.based_on_items, it.id);
177
+ it.triggered_by_items = uniqNoSelf(it.triggered_by_items, it.id);
178
+ if (it.extends_item)
179
+ it.extends_item = fix(it.extends_item);
180
+ if (it.supersedes_ref)
181
+ it.supersedes_ref = fix(it.supersedes_ref);
182
+ if (it.resolved_ref)
183
+ it.resolved_ref = fix(it.resolved_ref);
184
+ if (it.relations) {
185
+ const seen = new Set();
186
+ const out = [];
187
+ for (const r of it.relations) {
188
+ const t = fix(r.target);
189
+ const k = r.type + "|" + t;
190
+ if (t !== it.id && !seen.has(k)) {
191
+ seen.add(k);
192
+ out.push({ ...r, target: t });
193
+ }
194
+ }
195
+ it.relations = out;
196
+ }
197
+ }
198
+ return { items: kept, merged: remap.size };
199
+ }
200
+ export async function runComprehendFrontHalf(db, provider, transcript, opts = {}) {
201
+ const empty = (reason) => ({
202
+ checkpoint: null, reason, groups: 0, blocks: 0, filled: 0,
203
+ recognizer: { ran: false, attached: 0, rewritten: 0 }, crossLinks: 0, merged: 0,
204
+ });
205
+ // Stage wall-time telemetry (observability before optimization — the front-half
206
+ // was the pipeline's unmeasured majority of wall time). Travels via the checkpoint
207
+ // into the turn-log's pass_wall_ms.
208
+ const wall = {};
209
+ // Per-stage [start,end] windows → per-stage COST, attributed from the usage
210
+ // ledger after the run (stages are sequential, so windows don't overlap and
211
+ // every front-half LLM call falls in exactly one stage). Avoids threading
212
+ // usage out of all six stage functions; reuses the complete ledger.
213
+ const window = {};
214
+ const timed = async (key, fn) => {
215
+ const t0 = Date.now();
216
+ try {
217
+ return await fn();
218
+ }
219
+ finally {
220
+ const end = Date.now();
221
+ wall[key] = (wall[key] ?? 0) + (end - t0);
222
+ window[key] = { start: window[key]?.start ?? t0, end };
223
+ }
224
+ };
225
+ // 1. COMPREHEND + SEAM 1 — the single holistic call, OR PER-GROUP (design §17,
226
+ // the structural truncate fix) when NODEDEX_COMPREHEND_PERGROUP=1. Both return
227
+ // the same {result, validation}: per-group SEGMENTs then PRODUCEs per group and
228
+ // stitches back to the identical ComprehendResult shape, so the rest of this
229
+ // function is unchanged.
230
+ // opts.holistic FORCES a mode; when the caller doesn't force one, SIZE decides
231
+ // (chooseHolistic): per-group exists ONLY to survive truncation on a BIG arc, so
232
+ // input that fits one call's budget gets the holistic call — which cannot produce
233
+ // the cross-group dups that N blind parallel PRODUCE calls do (they can't see each
234
+ // other's output). Per-group (+ the merge safety net) engages only on genuinely
235
+ // big input where truncation is the greater risk.
236
+ const usePerGroup = pergroupEnabled() && !chooseHolistic(transcript.length, opts.holistic);
237
+ const comp = await timed("v2_comprehend", async () => usePerGroup
238
+ ? await runComprehendPerGroup(provider, transcript)
239
+ : await callComprehendLLM(provider, transcript));
240
+ // Out-of-credit is surfaced DISTINCTLY (not "comprehend_failed") so the reflect queue
241
+ // pauses-the-spend + requeues the turn instead of counting it toward the drop cap.
242
+ if (!comp.result)
243
+ return empty(comp.creditExhausted ? "insufficient_credit" : "comprehend_failed");
244
+ if (comp.validation && !comp.validation.valid)
245
+ return empty("seam1_invalid");
246
+ const groups = comp.result.groups ?? [];
247
+ if (groups.length === 0)
248
+ return empty("empty"); // no residue — nothing to save
249
+ // 2. convert to Pass2Item[] (groupByItemId carries the thread membership forward
250
+ // for the cross-group linker).
251
+ const { items: candidateItems, groupByItemId } = comprehendResultToPass2Items(comp.result);
252
+ if (candidateItems.length === 0)
253
+ return empty("empty");
254
+ // 2.4 CROSS-LINK FIRST (default-OFF NODEDEX_V2_CROSSLINK_FIRST) — when on, draw the
255
+ // cross-group links NOW, before the SELECTOR, so the judge sees each block's
256
+ // cross-thread role (its rescue then protects cross-group deps, not just
257
+ // within-group) and Pass 3 gets the links pre-computed. runCrossGroupLink no-ops
258
+ // if NODEDEX_V2_CROSSLINK is off. The expensive 2b fill still runs AFTER the
259
+ // judge, so dropped blocks never pay it; the judge cleans links to dropped blocks.
260
+ let earlyCrossLink;
261
+ if (v2CrossLinkFirstEnabled()) {
262
+ earlyCrossLink = await timed("v2_crosslink", () => runCrossGroupLink(provider, candidateItems, groupByItemId));
263
+ }
264
+ // 2.5 SELECTOR (Fix 1, default-OFF NODEDEX_V2_JUDGE) — the worth-gate. Drops low-worth
265
+ // candidates BEFORE the per-block 2b fill, so dropped ones never pay downstream cost
266
+ // (fill / naming / relations). Keeps a kept item's causal evidence (anchor-override);
267
+ // judge-fail → keep all. COMPREHEND is the comprehender (high recall); this is the
268
+ // SELECTOR (precision) — the selective half memory requires (design: worth-gate doc).
269
+ const sel = v2JudgeEnabled()
270
+ ? await timed("v2_judge", () => runV2Judge(provider, candidateItems, transcript, groupByItemId))
271
+ : { kept: candidateItems, ran: false, droppedCount: 0, rescued: 0 };
272
+ let items = sel.kept;
273
+ if (items.length === 0)
274
+ return empty("empty");
275
+ // 3. Pass 2b unique{}-fill (parallel, bounded) — the fused COMPREHEND can't fill
276
+ // unique{} under load (the bet's limit), so this focused per-block step does.
277
+ const provById = new Map();
278
+ for (const g of groups) {
279
+ for (const b of g.blocks ?? []) {
280
+ provById.set(`${g.group_id}::${b.local_id}`, { essence: b.essence, prov: b.provenance });
281
+ }
282
+ }
283
+ const CONC = opts.fillConcurrency ?? 5;
284
+ let fillMode = "per-item";
285
+ await timed("v2_fill_2b", async () => {
286
+ const fillInput = (it) => {
287
+ const p = provById.get(it.id) ?? { essence: it.text, prov: it.excerpt ?? "" };
288
+ return { id: it.id, type: it.type, text: `${p.essence ?? it.text}\n\nSOURCE (verbatim): ${p.prov ?? ""}` };
289
+ };
290
+ if (v2FillBatchEnabled()) {
291
+ // Stage B: N blocks per call instead of one each (the measured fan-out was
292
+ // the front-half's dominant wall cost). Falls back per-item for anything
293
+ // the batch can't account for — never loses a fill.
294
+ const b = await callPass2bBatchedFill(provider, items.map(fillInput));
295
+ const byId = new Map(b.results.map((r) => [r.id, r.unique]));
296
+ for (const it of items) {
297
+ const u = byId.get(it.id);
298
+ if (u)
299
+ it.unique = u;
300
+ }
301
+ fillMode = `batch:${b.llmCalls} call(s)${b.fellBackIds.length ? `, ${b.fellBackIds.length} fell back per-item` : ""}`;
302
+ }
303
+ else {
304
+ for (let i = 0; i < items.length; i += CONC) {
305
+ await Promise.all(items.slice(i, i + CONC).map(async (it) => {
306
+ const r = await callPass2bLLM(provider, fillInput(it));
307
+ if (r.result?.unique)
308
+ it.unique = r.result.unique;
309
+ }));
310
+ }
311
+ fillMode = `per-item conc=${CONC}`;
312
+ }
313
+ });
314
+ // 3.25 MERGE cross-group dups (default-OFF NODEDEX_V2_MERGE_DUPS) — NOW that 2b has
315
+ // filled unique{}, collapse copies of the same residue produced by overlapping
316
+ // groups, keyed on the STABLE identity (type + unique{} primary_value). Re-points
317
+ // refs to the survivor; the cross-group linker (next) connects it to the threads
318
+ // its copies touched. Off → passthrough.
319
+ let merged = 0;
320
+ if (mergeCrossGroupDupsEnabled()) {
321
+ const m = mergeCrossGroupDups(items);
322
+ items = m.items;
323
+ merged = m.merged;
324
+ }
325
+ const filled = items.filter((i) => i.unique && Object.keys(i.unique).length > 0).length;
326
+ // 3.4 JUSTIFY (default-ON NODEDEX_V2_JUSTIFY) — repair grounded conclusions
327
+ // (decision / hypothesis / insight) that arrived with no based_on wiring
328
+ // (SEAM-1 warns; this consumes the warning). Runs on the POST-MERGE survivors
329
+ // so repaired links can't point at dropped copies. One batched call, one
330
+ // attempt; legitimate-empty stays unwired (the grounding may be out-of-scope
331
+ // this session). Without this, Pass 5 correctly assembles no chain (no causal
332
+ // path reaches the conclusion) and the conclusion loses its re-openable WHY
333
+ // (2026-06-11 React-arc finding; generalized to hypothesis/insight 2026-06-15).
334
+ const justify = await timed("v2_justify", () => runJustifyConclusions(provider, items, groupByItemId));
335
+ // 3.5 CROSS-GROUP LINK (design §15.4; default-OFF NODEDEX_V2_CROSSLINK). Per-group
336
+ // PRODUCE wires only WITHIN each thread; this adds the sparse links that cross
337
+ // BETWEEN threads, over all blocks. Mutates items in place. No-op for <2
338
+ // threads / when off. Bounded output (just links) → can't run away.
339
+ // When cross-link-first already ran (before the judge), reuse its result; else
340
+ // run it here in the original slot (after justify) — byte-identical to before.
341
+ const crossLink = earlyCrossLink ?? await timed("v2_crosslink", () => runCrossGroupLink(provider, items, groupByItemId));
342
+ // 4. INTEGRATE (recognizer; default-OFF → passthrough). Graph-aware root match.
343
+ const integ = await timed("v2_integrate", () => integrateV2Roots(db, provider, items));
344
+ const finalItems = integ.items;
345
+ // Per-stage COST attribution: sum the ledger over each stage's timing window.
346
+ // Closes the "front-half spend invisible in cost_breakdown" gap — the breaker
347
+ // never needed it (the ledger total is complete), but this shows WHICH stage
348
+ // spent what, the cost twin of v2WallMs. Sits beside v2WallMs rather than in
349
+ // cost_breakdown's pass slots (comprehend/justify/crosslink/integrate have no
350
+ // pass slot; this is a different, v2-native decomposition).
351
+ const v2FrontCostUsd = {};
352
+ for (const [k, w] of Object.entries(window))
353
+ v2FrontCostUsd[k] = getSpendBetween(w.start, w.end);
354
+ // 5. resumeFrom:pass3 checkpoint from the FINAL (filled + recognized) items.
355
+ const pass1Items = finalItems.map((it) => ({
356
+ id: it.id, text: it.text, source: "comprehend",
357
+ excerpt: it.excerpt ?? "", provisional_type: it.type,
358
+ }));
359
+ const checkpoint = {
360
+ resumeFrom: "pass3",
361
+ pass0: { sceneCard: undefined, raw: undefined },
362
+ pass1Items,
363
+ pass2Classified: finalItems,
364
+ v2WallMs: wall,
365
+ v2FrontCostUsd,
366
+ };
367
+ const s = (k) => ((wall[k] ?? 0) / 1000).toFixed(1);
368
+ const c = (k) => (v2FrontCostUsd[k] ?? 0).toFixed(4);
369
+ const frontTotal = Object.values(v2FrontCostUsd).reduce((a, b) => a + b, 0);
370
+ console.log(`[v2-front] wall: comprehend=${s("v2_comprehend")}s judge=${s("v2_judge")}s ` +
371
+ `fill_2b=${s("v2_fill_2b")}s (${items.length} blocks, ${fillMode}) ` +
372
+ `justify=${s("v2_justify")}s crosslink=${s("v2_crosslink")}s integrate=${s("v2_integrate")}s`);
373
+ console.log(`[v2-front] cost: $${frontTotal.toFixed(4)} total — comprehend=$${c("v2_comprehend")} ` +
374
+ `judge=$${c("v2_judge")} fill_2b=$${c("v2_fill_2b")} justify=$${c("v2_justify")} ` +
375
+ `crosslink=$${c("v2_crosslink")} integrate=$${c("v2_integrate")}`);
376
+ return {
377
+ checkpoint,
378
+ groups: groups.length,
379
+ blocks: items.length,
380
+ filled,
381
+ recognizer: { ran: integ.ran, attached: integ.recognition?.attached ?? 0, rewritten: integ.rewritten },
382
+ crossLinks: crossLink.added,
383
+ selector: { ran: sel.ran, dropped: sel.droppedCount, rescued: sel.rescued },
384
+ merged,
385
+ justify,
386
+ };
387
+ }
388
+ //# sourceMappingURL=v2-integrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-integrate.js","sourceRoot":"","sources":["../../../src/middleware/reflect/v2-integrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { LLMProvider } from "../../engine/ai-provider.js";
2
+ import type { Pass2Item } from "./types.js";
3
+ import { type PassJudgeResult } from "./pass_judge.js";
4
+ export declare function v2JudgeEnabled(): boolean;
5
+ /** Context-aware judge (default OFF, NODEDEX_V2_JUDGE_CONTEXT): show the SELECTOR each
6
+ * block's structural ROLE (what depends on it / what it builds on) so it judges worth in
7
+ * context, not by the sentence alone — the proactive complement to the mechanical rescue
8
+ * below. Best paired with cross-link-first (so the role includes cross-group deps);
9
+ * degrades to within-group roles when cross-link runs after the judge. */
10
+ export declare function v2JudgeContextEnabled(): boolean;
11
+ /** Each item's structural ROLE for the context-aware judge: what DEPENDS ON it (incoming
12
+ * edges — the load-bearing signal) and what it BUILDS ON (outgoing), summarized by the
13
+ * NEIGHBOUR blocks' TYPES (ids are noise to the judge). Built over the WHOLE item set, so
14
+ * cross-group roles appear when cross-link ran first; degrades to within-group otherwise.
15
+ * Isolated blocks get no entry (judged on text alone). Pure / testable. */
16
+ export declare function buildRoleContext(items: Pass2Item[]): Record<string, string>;
17
+ /** Apply JUDGE verdicts to v2 candidates. DROP the low-worth; RESCUE any dropped item a
18
+ * KEPT item causally depends on (never orphan a kept decision's evidence); then CLEAN
19
+ * any remaining refs to still-dropped items so no edge dangles. judge=null → keep all
20
+ * (a failed selector must NEVER drop residue — precision is an improvement, not a gate).
21
+ * Mutates kept items' ref arrays in place (cleaning). Pure w.r.t. the input list otherwise. */
22
+ export declare function applyV2JudgeVerdicts(items: Pass2Item[], judge: PassJudgeResult | null): {
23
+ kept: Pass2Item[];
24
+ droppedCount: number;
25
+ rescued: number;
26
+ };
27
+ /** Run the SELECTOR PER GROUP, all groups in PARALLEL. Judging per group is how v1's
28
+ * judge actually runs (per turn — never hundreds at once) and how PRODUCE already runs
29
+ * (per group): it keeps each call's VERDICT output bounded so the judge never truncates
30
+ * on a big arc (the one-shot-over-all-314 version did). The path-specificity test is
31
+ * per-item-independent, so splitting by group changes no verdict — only the call size.
32
+ *
33
+ * Each group's items are judged with the transcript as shared session context. A group
34
+ * whose judge call FAILS contributes no verdicts → its items default to KEEP (recall
35
+ * guard — a failed selector never drops residue). Verdicts are merged and applied once
36
+ * (so anchor-override / dangling-clean see the whole item set). No-op (keep all) for <2.
37
+ */
38
+ export declare function runV2Judge(provider: LLMProvider, items: Pass2Item[], transcript: string, groupByItemId?: Record<string, string>): Promise<{
39
+ kept: Pass2Item[];
40
+ ran: boolean;
41
+ droppedCount: number;
42
+ rescued: number;
43
+ }>;
44
+ //# sourceMappingURL=v2-judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-judge.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/v2-judge.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED;;;;2EAI2E;AAC3E,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAiBD;;;;4EAI4E;AAC5E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8B3E;AAED;;;;gGAIgG;AAChG,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,eAAe,GAAG,IAAI,GAC5B;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiC9D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,SAAS,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CrF"}