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,360 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // PASS 2c — WIRE CAUSALITY (Week 3 piece, debt #1, 2026-05-25)
3
+ //
4
+ // Role: The third of three sub-passes in the Pass 2 split (see
5
+ // docs/PASS2-SPLIT-DESIGN.md §2 Pass ownership). Takes the items 2a
6
+ // classified and 2b filled, and decides their causal wiring:
7
+ // triggered_by (counterfactual), based_on (evidence), and semantic
8
+ // relations (contradicts / supports / resolves). BATCH visibility:
9
+ // a single LLM call sees all items at once because Q3/Q5 reason
10
+ // about pairs.
11
+ //
12
+ // What this pass DOES (§2 ownership):
13
+ // - Q3 TRIGGERED_BY — counterfactual wiring, circularity guard,
14
+ // REPLACEMENTS rule, HIERARCHY-level wiring rule
15
+ // - Q4 BASED_ON — evidence wiring
16
+ // - Q5 SEMANTIC RELATIONS — contradicts / supports / resolves
17
+ // (Parity note: design §2 also lists `derived_from` + `affects`, but the
18
+ // monolith pass2.ts Q5 emits ONLY the three above. Per §4 parity rule,
19
+ // pass2c mirrors monolith Q5 EXACTLY; extending Q5 to 5 relation types
20
+ // is a deliberate follow-up change, not part of this split.)
21
+ //
22
+ // What this pass does NOT do (anti-examples, §2 + Seam β contract):
23
+ // - Touch `type`, `unique`, `text`, `id`, `project`, or any other field
24
+ // written by 2a/2b — all READ-ONLY per §1 Seam β contract
25
+ // - Reclassify (a model that wants to re-type must FAIL back, not mutate)
26
+ // - Dedup — 2a already did Q0
27
+ // - Emit `skipped[]` — items reach 2c only if they survived 2a + Seam α
28
+ // - Validate the type↔unique{} schema — Tier 1B at Seam α did that pre-2c
29
+ // - Touch other PROJECT GRAPH blocks via writes — read-only, the orchestrator
30
+ // in pipeline.ts owns relation writes (this just RETURNS the wiring decisions)
31
+ //
32
+ // Status:
33
+ // - Standalone file. NOT wired into pipeline.ts yet (next step:
34
+ // composeForDownstream() then pipeline.ts behind NODEDEX_PASS2_SPLIT=1).
35
+ // - `pass2.ts` is FROZEN per §4. This file does NOT replace it.
36
+ //
37
+ // Charter alignment:
38
+ // - Rule 6 (guards catch failure, never override success): sanitizer strips
39
+ // forbidden output keys (anything outside the wiring bundle) and filters
40
+ // relation `type`s to the monolith-parity allowed set. A pass2c that emits
41
+ // less is fine; a pass2c that smuggles new shape into downstream is not.
42
+ // - Rule 7 (determinism is local): sanitizer + schema are pure code;
43
+ // judgment (which pairs are causally linked) is the LLM's.
44
+ // - Rule 9 (bugs live at seams): the Seam β contract that 2c MUST NOT mutate
45
+ // read-only fields is enforced STRUCTURALLY by `snapshotForSeamBeta` +
46
+ // `checkSeamBetaInvariant` in pass2-seams.ts — pass2c's output shape here
47
+ // is designed so the read-only fields are not even in the schema.
48
+ // - Rule 14 (store the path): one item ↔ one wiring bundle. The wiring
49
+ // decisions pass2c made for an item are ONE conceptual record;
50
+ // `Pass2cItemWiring` stores them as one unit, not split across arrays.
51
+ // ═══════════════════════════════════════════════════════════════════════════════
52
+ import { CONFIG } from "./config.js";
53
+ // ─── Prompt ────────────────────────────────────────────────────────────────────
54
+ //
55
+ // Carved from PASS2_PROMPT in pass2.ts CAUSAL WIRING section (Q3 + Q4 + Q5
56
+ // verbatim, lines 167-189 in the monolith). Sections REMOVED per §2:
57
+ // - Q0 DEDUP (2a)
58
+ // - Q1 TYPE — 5 TESTs (2a)
59
+ // - Q2 HIERARCHY (2a)
60
+ // - PROJECT ATTRIBUTION (2a)
61
+ // - SUPERSEDES_REF (2a; passed through as context)
62
+ // - REVIEW FLAGS (2a)
63
+ // - CLASSIFICATION REASONING (2a; passed through as context)
64
+ // - UNIQUE FIELDS section (2b)
65
+ // - NOVEL TYPE (2a)
66
+ //
67
+ // STATE CONVENTION preserved (Q5 references PROJECT GRAPH for cross-batch
68
+ // relations; the same "state = text in marked regions" discipline applies).
69
+ // SCENE CARD CONTEXT pared to just the CAUSAL LINKS note (Q3 still uses it;
70
+ // APPROACHES/UNCHANGED/TASKS were 2a-only signals).
71
+ //
72
+ // Top framing adds Seam β read-only callout — explicit guard against the
73
+ // model "fixing" what it thinks 2a got wrong by emitting new type/unique
74
+ // fields. The sanitizer + Seam β invariant check are the structural backup.
75
+ export const PASS2C_PROMPT = `You receive classified items from Pass 2a (type, project, refs)
76
+ already filled by Pass 2b (unique{}). Your ONE job: wire causal relations
77
+ between these items (and to existing blocks in PROJECT GRAPH).
78
+
79
+ ── SEAM β CONTRACT — READ-ONLY ─────────────────────────────────────────────
80
+ DO NOT change any item's type. DO NOT touch unique{} fields. DO NOT change
81
+ text, id, project, supersedes_ref, resolved_ref, or extends_item. DO NOT add
82
+ or remove items. DO NOT emit skipped[]. DO NOT re-dedup (Pass 2a did Q0).
83
+ DO NOT re-classify (Pass 2a did Q1). If you think 2a or 2b got something
84
+ wrong, EMIT ONLY YOUR WIRING DECISIONS anyway — the seam validator will
85
+ catch the mismatch.
86
+
87
+ ── STATE CONVENTION ─────────────────────────────────────────────────────────
88
+ "State" in this prompt = text in marked regions below (PROJECT GRAPH, SCENE
89
+ CARD, ITEMS). Your training knowledge and "what's commonly known about this
90
+ domain" are NOT state. A causal link to an existing block is valid ONLY if a
91
+ block in PROJECT GRAPH has that exact label.
92
+
93
+ For EACH item: walk Q3 → Q4 → Q5 in order.
94
+
95
+ ── Q3: TRIGGERED_BY — "In a world where (X) didn't happen, would (Y) still have occurred?"
96
+ YES → no link. NO → X goes in triggered_by.
97
+ UNCERTAIN → no link. Wrong wiring (false narrative) costs more than missing wiring (recoverable).
98
+ CIRCULARITY GUARD: before adding A→B, check "Did I already put B→A?" YES → skip.
99
+ Use item IDs for batch, block labels for PROJECT GRAPH. Genesis → triggered_by: [].
100
+ REPLACEMENTS "X→Y": dead_end for X is triggered_by the decision that adopted Y.
101
+ HIERARCHY: "Did cause make the DECISION necessary, or only this mechanism?"
102
+ Decision → triggered_by on parent. Mechanism only → triggered_by on child.
103
+
104
+ ── Q4: BASED_ON — "Would this claim be UNSUPPORTED without that specific finding?"
105
+ NO → no link. YES → based_on.
106
+ UNCERTAIN → no link. False evidence link costs more than missing one.
107
+ Applies to conclusions, decisions justified by findings.
108
+
109
+ ── Q5: SEMANTIC RELATIONS — for each item pair in this batch:
110
+ "Does (X) directly contradict, support, or answer (Y)?"
111
+ contradicts: opposite claims about the same specific thing.
112
+ supports: independent evidence strengthening the same claim.
113
+ resolves: (X) answers the question or settles the hypothesis (Y) poses.
114
+ Use ONLY these three relation types. Other relation kinds are emitted by
115
+ other passes (e.g. supersedes, extends, derived_from) — do not emit them here.
116
+
117
+ PER-RELATION REASONING: every emitted relation MUST carry a reasoning field
118
+ that NAMES the case (contradicts / supports / resolves) AND CITES the specific
119
+ claim from each item that grounded the decision — e.g. a contradicts entry
120
+ should read "contradicts: item_5 claims X always Y; item_9 reports X did not Y in case Z".
121
+ This is the audit trail downstream consumers (chains, agent inspection) read to
122
+ understand WHY this wire exists. A wire without grounded reasoning is corruption;
123
+ if you cannot cite a specific claim-pair, do not emit the relation.
124
+
125
+ ── SCENE CARD CONTEXT ──────────────────────────────────────────────────────
126
+ CAUSAL LINKS in the scene card name explicit cause→effect pairs the agent
127
+ stated in this session — use them as Q3 input.
128
+
129
+ ── OUTPUT ──────────────────────────────────────────────────────────────────
130
+ For EACH item, emit one wiring entry: { id, triggered_by[], based_on[], relations[] }.
131
+ Each entry in relations[] is { type, target, reasoning } — reasoning REQUIRED per
132
+ Q5 (names the case + cites the claim-pair). Use [] (empty array) for any axis
133
+ with no links — do not omit fields. The id MUST match an input item's id exactly.
134
+ Do NOT emit wiring for items not in the input.
135
+
136
+ `;
137
+ // ─── Output schema ─────────────────────────────────────────────────────────────
138
+ //
139
+ // Mirrors `Pass2cResult` — { wiring: [{ id, triggered_by, based_on, relations }] }.
140
+ // Read-only fields (type, unique, text, project, etc.) are deliberately ABSENT
141
+ // so any leakage is visible in pass-log output. Per Seam β contract, structural
142
+ // exclusion is the first line of defense; the sanitizer + Seam β invariant
143
+ // check are deeper backstops.
144
+ const PASS2C_SCHEMA = {
145
+ type: "object",
146
+ properties: {
147
+ wiring: {
148
+ type: "array",
149
+ items: {
150
+ type: "object",
151
+ properties: {
152
+ id: { type: "string" },
153
+ triggered_by: { type: "array", items: { type: "string" } },
154
+ based_on: { type: "array", items: { type: "string" } },
155
+ relations: {
156
+ type: "array",
157
+ items: {
158
+ type: "object",
159
+ properties: {
160
+ type: { type: "string" },
161
+ target: { type: "string" },
162
+ reasoning: { type: "string" }, // Q5 case + claim-pair evidence (per meaning-first)
163
+ },
164
+ required: ["type", "target", "reasoning"],
165
+ },
166
+ },
167
+ },
168
+ required: ["id", "triggered_by", "based_on", "relations"],
169
+ },
170
+ },
171
+ },
172
+ required: ["wiring"],
173
+ };
174
+ // ─── Sanitizers ────────────────────────────────────────────────────────────────
175
+ //
176
+ // Two structural guards (charter rule 6):
177
+ //
178
+ // (1) FORBIDDEN_KEYS — keys outside the wiring bundle that some model may
179
+ // leak (especially if it "corrects" type or unique{}). Stripped at sanitize
180
+ // time so the leakage never reaches downstream. Includes the read-only
181
+ // Seam β fields plus a few false-friends (skipped, classified) that exist
182
+ // in the monolith schema but have no place in 2c output.
183
+ //
184
+ // (2) ALLOWED_PASS2C_RELATION_TYPES — Q5 emits only contradicts / supports /
185
+ // resolves per monolith parity. Other relation types come from other
186
+ // passes (Pass 4 cross-session, post-process CHAIN_RELS) or other 2a/2b
187
+ // mechanisms (supersedes, extends). Filter to keep the split's "what each
188
+ // pass owns" boundary structural, not just prompted.
189
+ const FORBIDDEN_KEYS_ON_PASS2C_OUTPUT = [
190
+ "type",
191
+ "unique",
192
+ "text",
193
+ "project",
194
+ "extends_item",
195
+ "supersedes_ref",
196
+ "resolved_ref",
197
+ "review_reason",
198
+ "classification_reasoning",
199
+ "schema",
200
+ "skipped",
201
+ "classified",
202
+ "note",
203
+ ];
204
+ export const ALLOWED_PASS2C_RELATION_TYPES = new Set([
205
+ "contradicts",
206
+ "supports",
207
+ "resolves",
208
+ ]);
209
+ /**
210
+ * Strip forbidden keys from a single wiring entry. Returns the cleaned wiring
211
+ * + the list of stripped keys (so callers can audit-log contract violations).
212
+ *
213
+ * If `triggered_by` / `based_on` / `relations` are missing, default to empty
214
+ * arrays (the schema requires them; this is defensive). If `relations` items
215
+ * have type values outside ALLOWED_PASS2C_RELATION_TYPES, those entries are
216
+ * dropped — reported in `strippedRelationTypes`.
217
+ */
218
+ export function sanitizePass2cItem(raw) {
219
+ const stripped = [];
220
+ const cleaned = { ...raw };
221
+ for (const k of FORBIDDEN_KEYS_ON_PASS2C_OUTPUT) {
222
+ if (k in cleaned) {
223
+ stripped.push(k);
224
+ delete cleaned[k];
225
+ }
226
+ }
227
+ const id = typeof cleaned.id === "string" ? cleaned.id : String(cleaned.id ?? "");
228
+ const triggered_by = Array.isArray(cleaned.triggered_by)
229
+ ? cleaned.triggered_by.filter((x) => typeof x === "string" && x.trim() !== "")
230
+ : [];
231
+ const based_on = Array.isArray(cleaned.based_on)
232
+ ? cleaned.based_on.filter((x) => typeof x === "string" && x.trim() !== "")
233
+ : [];
234
+ // Relations: filter to allowed types, coerce target to string, default reasoning
235
+ // to empty string if the model omitted it (the schema requires it, but be
236
+ // defensive — a missing reasoning is a contract failure to log, not a crash).
237
+ const strippedRelationTypes = [];
238
+ const relations = [];
239
+ if (Array.isArray(cleaned.relations)) {
240
+ for (const r of cleaned.relations) {
241
+ if (!r || typeof r !== "object")
242
+ continue;
243
+ const rType = typeof r.type === "string" ? r.type : "";
244
+ const rTarget = typeof r.target === "string" ? r.target : String(r.target ?? "");
245
+ const rReasoning = typeof r.reasoning === "string" ? r.reasoning : "";
246
+ if (!rType || !rTarget.trim())
247
+ continue;
248
+ if (!ALLOWED_PASS2C_RELATION_TYPES.has(rType)) {
249
+ strippedRelationTypes.push(rType);
250
+ continue;
251
+ }
252
+ relations.push({ type: rType, target: rTarget, reasoning: rReasoning });
253
+ }
254
+ }
255
+ return {
256
+ item: { id, triggered_by, based_on, relations },
257
+ stripped,
258
+ strippedRelationTypes,
259
+ };
260
+ }
261
+ /**
262
+ * Sanitize the full pass2c result. Aggregates per-item stripped keys + relation
263
+ * types so the caller can log the contract-violation surface.
264
+ */
265
+ export function sanitizePass2cResult(raw) {
266
+ const perItemStripped = [];
267
+ const perItemStrippedRelationTypes = [];
268
+ let totalStrippedFields = 0;
269
+ const wiring = (raw.wiring ?? []).map((w) => {
270
+ const { item, stripped, strippedRelationTypes } = sanitizePass2cItem(w);
271
+ if (stripped.length > 0) {
272
+ perItemStripped.push({ id: item.id, stripped });
273
+ totalStrippedFields += stripped.length;
274
+ }
275
+ if (strippedRelationTypes.length > 0) {
276
+ perItemStrippedRelationTypes.push({ id: item.id, types: strippedRelationTypes });
277
+ }
278
+ return item;
279
+ });
280
+ return {
281
+ result: { wiring },
282
+ totalStrippedFields,
283
+ perItemStripped,
284
+ perItemStrippedRelationTypes,
285
+ };
286
+ }
287
+ // ─── LLM call ──────────────────────────────────────────────────────────────────
288
+ //
289
+ // BATCH call (single LLM invocation for all items) — per §2, pass2c needs full
290
+ // batch visibility because Q3 counterfactuals and Q5 semantic relations reason
291
+ // about PAIRS. Per-item parallelism would lose that visibility.
292
+ //
293
+ // Signature mirrors callPass2aLLM as far as practical so wiring code can
294
+ // uniformly route between sub-passes. Returns usage + sanitization stats so
295
+ // the caller can stamp the turn log without touching global state. Does NOT
296
+ // update reflectTokenStats (wiring concern, deferred to pipeline.ts wiring step).
297
+ export async function callPass2cLLM(provider, items, projectContext, thinkingBudget = 1024, sceneCard,
298
+ // Multi-model routing (C, 2026-05-25): 2c is semantic wiring — typically
299
+ // the expensive-model slot (Gemini Flash/Pro) while 2a/2b go to Haiku.
300
+ // Universal — provider-agnostic string. Undefined → use provider default.
301
+ modelOverride) {
302
+ // Defensive: an empty batch is a valid (degenerate) input — emit empty wiring,
303
+ // skip the LLM. Spares cost on trivially-empty turns.
304
+ if (items.length === 0) {
305
+ return {
306
+ result: { wiring: [] },
307
+ thinking: "",
308
+ rateLimited: false,
309
+ };
310
+ }
311
+ const sceneCardSection = sceneCard
312
+ ? `SCENE CARD (CAUSAL LINKS name explicit cause→effect pairs from the session):\n${sceneCard}\n\n`
313
+ : "";
314
+ const projectSection = projectContext
315
+ ? `PROJECT GRAPH (existing blocks — use labels for cross-batch triggered_by/based_on/relations targets):\n${projectContext}\n\n`
316
+ : "";
317
+ const itemsSection = `ITEMS:\n${JSON.stringify(items, null, 2)}`;
318
+ const userInput = `${sceneCardSection}${projectSection}${itemsSection}`;
319
+ const r = await provider.generateStructured(PASS2C_PROMPT, userInput, PASS2C_SCHEMA, {
320
+ thinkingBudget,
321
+ maxOutputTokens: CONFIG.pass2.maxOutputTokens,
322
+ ...(modelOverride ? { modelOverride } : {}),
323
+ });
324
+ if (!r.result) {
325
+ console.error(`Auto-Reflect Pass 2c: ${r.rateLimited ? "rate limited" : "failed"} [${provider.getName()}]`);
326
+ return {
327
+ result: null,
328
+ thinking: r.thinking ?? "",
329
+ rateLimited: r.rateLimited,
330
+ model: r.model,
331
+ attempts: r.attempts,
332
+ };
333
+ }
334
+ const { result: clean, totalStrippedFields, perItemStripped, perItemStrippedRelationTypes, } = sanitizePass2cResult(r.result);
335
+ const tag = provider.getName() !== "gemini" ? ` [${provider.getName()}]` : "";
336
+ console.log(`Auto-Reflect Pass 2c: wired ${items.length} items | tokens: in=${r.usage?.input ?? "?"} think=${r.usage?.thinking ?? "?"} out=${r.usage?.output ?? "?"}${tag}`);
337
+ if (totalStrippedFields > 0) {
338
+ console.log(`Auto-Reflect Pass 2c: SANITIZER stripped ${totalStrippedFields} forbidden field(s) across ${perItemStripped.length} item(s)`);
339
+ for (const s of perItemStripped) {
340
+ console.log(` ${s.id}: removed ${s.stripped.join(", ")}`);
341
+ }
342
+ }
343
+ if (perItemStrippedRelationTypes.length > 0) {
344
+ console.log(`Auto-Reflect Pass 2c: SANITIZER dropped non-parity relation type(s) across ${perItemStrippedRelationTypes.length} item(s)`);
345
+ for (const s of perItemStrippedRelationTypes) {
346
+ console.log(` ${s.id}: dropped relation types ${s.types.join(", ")}`);
347
+ }
348
+ }
349
+ return {
350
+ result: clean,
351
+ thinking: r.thinking ?? "",
352
+ rateLimited: r.rateLimited,
353
+ model: r.model,
354
+ attempts: r.attempts,
355
+ usage: r.usage,
356
+ strippedFields: perItemStripped.length > 0 ? perItemStripped : undefined,
357
+ strippedRelationTypes: perItemStrippedRelationTypes.length > 0 ? perItemStrippedRelationTypes : undefined,
358
+ };
359
+ }
360
+ //# sourceMappingURL=pass2c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass2c.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { LLMProvider } from "../../engine/ai-provider.js";
2
+ import type { Pass2Item } from "./types.js";
3
+ export declare function pass3BatchEnabled(): boolean;
4
+ /**
5
+ * Pass 3 batch size = min(reliability bound, token bound).
6
+ *
7
+ * RELIABILITY bound (NODEDEX_PASS3_BATCH_SIZE, default 20): under the empirically-
8
+ * reliable ~25 (25 & 15 covered fully; 59 dropped ~half). This is THE cap on a
9
+ * big-cap model — its output budget is never the limit (20 blocks ≈ 6k vs Gemini's
10
+ * 65536), so a big-cap model always lands here.
11
+ *
12
+ * TOKEN bound (small-cap models only): a model with a small output ceiling (e.g.
13
+ * claude-3.5-sonnet 8192) can hit that ceiling BEFORE the reliability bound, so scale
14
+ * the batch down to keep (batchSize × ~tokens/block + thinking) under the ceiling.
15
+ * `model` undefined → the provider default (assumed big-cap) → the flat bound. Pairs
16
+ * with the openai.ts per-model ceiling CLAMP (which already prevents the over-request
17
+ * glitch); this just reduces the truncation-retries that clamp would otherwise cause
18
+ * on a small-cap model. Pure (reads env + KNOWN_CAPS).
19
+ */
20
+ export declare function pass3BatchSize(model?: string, thinkingBudget?: number): number;
21
+ type Pass3Analysis = {
22
+ project_creates?: any[];
23
+ new_blocks?: any[];
24
+ updates?: any[];
25
+ skip_reasons?: any[];
26
+ };
27
+ /** Merge per-chunk Pass-3 analyses into ONE analysis the save loop consumes unchanged.
28
+ * new_blocks/updates/skip_reasons concatenate (item ids are globally unique → no
29
+ * collision); project_creates DEDUP by label (two chunks of a fresh project each coin
30
+ * the same root). Pure / testable. */
31
+ export declare function mergePass3Analyses(parts: Array<Pass3Analysis | null | undefined>): Pass3Analysis;
32
+ /** Split items into chunks of at most `size`. Pure / testable. */
33
+ export declare function chunkItems<T>(items: T[], size: number): T[][];
34
+ type Pass3Result = {
35
+ analysis: any;
36
+ geminiThinking: string;
37
+ rateLimited: boolean;
38
+ model?: string;
39
+ attempts?: Array<{
40
+ model: string;
41
+ outcome: string;
42
+ }>;
43
+ };
44
+ /**
45
+ * Batched Pass 3 — drop-in for callPass3LLM. Delegates to a single call when the flag
46
+ * is off OR the item count fits one call; otherwise chunks → per-chunk callPass3LLM
47
+ * (sequential, sharing the same graph snapshot) → mergePass3Analyses. Sequential (not
48
+ * parallel) to stay gentle on rate limits — the chunks are independent reads of the
49
+ * same snapshot, so order does not change correctness (cross-chunk links wire at save).
50
+ */
51
+ export declare function callPass3Batched(provider: LLMProvider, classified: Pass2Item[], knownRoots: Array<{
52
+ label: string;
53
+ essence: string;
54
+ }>, projectContext: string, agentSavedBlocks: Array<{
55
+ id: string;
56
+ label: string;
57
+ type: string;
58
+ essence: string;
59
+ unique: Record<string, any>;
60
+ }>, thinkingBudget?: number, duplicateAlerts?: string, itemContext?: Record<string, string>, batchSize?: number): Promise<Pass3Result>;
61
+ export {};
62
+ //# sourceMappingURL=pass3-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass3-batch.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3-batch.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,SAAO,GAAG,MAAM,CAO5E;AAED,KAAK,aAAa,GAAG;IACnB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB,CAAC;AAEF;;;uCAGuC;AACvC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,aAAa,CAgBhG;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAK7D;AAED,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,EAClH,cAAc,SAAO,EACrB,eAAe,SAAK,EACpB,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACxC,SAAS,SAAwD,GAChE,OAAO,CAAC,WAAW,CAAC,CAgCtB"}
@@ -0,0 +1,139 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // PASS 3 — BATCHED WRITE (the back-half scale fix; 2026-06-14)
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // WHY: Pass 3 writes EVERY block in ONE LLM call. The model reliably covers ~25
6
+ // items; past that it returns a syntactically-valid but INCOMPLETE response
7
+ // (live: 59 items → only 28 covered, using 5751/65536 output tokens = 9% of budget).
8
+ // So it is NOT a token ceiling — it is the model giving up on a too-long item list.
9
+ // Per-group fixed the same failure at the FRONT (COMPREHEND); this fixes it at the
10
+ // BACK (the write).
11
+ //
12
+ // HOW: split `classified` into chunks of ~N (default 20, safely under the proven-good
13
+ // 25), run callPass3LLM per chunk against the SAME existing-graph snapshot, then MERGE
14
+ // the per-chunk analyses into the ONE analysis shape the save loop already consumes.
15
+ // The merge is safe because:
16
+ // - item ids are globally unique across the arc → from_item_id stays unique → the
17
+ // save loop's itemIdToLabel map is consistent → cross-CHUNK triggered_by/based_on
18
+ // resolve SERVER-SIDE (pipeline.ts:1772+), with pendingTriggeredBy for forward refs;
19
+ // - Pass 2 already owns cross-item dedup (Pass 3 only checks label collision) → no
20
+ // dedup is lost by not showing chunks each other;
21
+ // - novel cross-chunk links the per-chunk LLM couldn't see are swept by Pass 4.
22
+ //
23
+ // DROP-IN: callPass3Batched has the SAME signature + return shape as callPass3LLM and,
24
+ // when the flag is OFF or the item count is ≤ batch size, simply DELEGATES to it — so
25
+ // the default path is byte-identical to today. Default OFF: NODEDEX_PASS3_BATCH=1.
26
+ import { intFromEnv, modelForPass } from "./config.js";
27
+ import { modelOutputCeiling } from "../../engine/providers/model-caps.js";
28
+ import { callPass3LLM } from "./pass3.js";
29
+ // Default ON (promoted 2026-06-14 — validated: bounds the last unbounded write pass);
30
+ // set NODEDEX_PASS3_BATCH=0 to opt out (single-call write, byte-identical for small sets).
31
+ export function pass3BatchEnabled() {
32
+ return process.env.NODEDEX_PASS3_BATCH !== "0";
33
+ }
34
+ // Heuristic visible-output tokens per Pass-3 block (~300 observed: "20 blocks ≈ 6k"
35
+ // + headroom for dense unique{}/relations). Used ONLY to keep a batch from
36
+ // over-requesting a SMALL-CAP model's output ceiling; a big-cap model fits the flat
37
+ // default many times over so this never lowers it there.
38
+ const PASS3_OUTPUT_TOKENS_PER_BLOCK = 400;
39
+ /**
40
+ * Pass 3 batch size = min(reliability bound, token bound).
41
+ *
42
+ * RELIABILITY bound (NODEDEX_PASS3_BATCH_SIZE, default 20): under the empirically-
43
+ * reliable ~25 (25 & 15 covered fully; 59 dropped ~half). This is THE cap on a
44
+ * big-cap model — its output budget is never the limit (20 blocks ≈ 6k vs Gemini's
45
+ * 65536), so a big-cap model always lands here.
46
+ *
47
+ * TOKEN bound (small-cap models only): a model with a small output ceiling (e.g.
48
+ * claude-3.5-sonnet 8192) can hit that ceiling BEFORE the reliability bound, so scale
49
+ * the batch down to keep (batchSize × ~tokens/block + thinking) under the ceiling.
50
+ * `model` undefined → the provider default (assumed big-cap) → the flat bound. Pairs
51
+ * with the openai.ts per-model ceiling CLAMP (which already prevents the over-request
52
+ * glitch); this just reduces the truncation-retries that clamp would otherwise cause
53
+ * on a small-cap model. Pure (reads env + KNOWN_CAPS).
54
+ */
55
+ export function pass3BatchSize(model, thinkingBudget = 4096) {
56
+ const flat = intFromEnv("NODEDEX_PASS3_BATCH_SIZE", 20);
57
+ if (!model)
58
+ return flat;
59
+ const outBudget = modelOutputCeiling(model) - thinkingBudget;
60
+ if (outBudget <= PASS3_OUTPUT_TOKENS_PER_BLOCK)
61
+ return 1; // tiny ceiling — one block per call
62
+ const tokenBound = Math.floor(outBudget / PASS3_OUTPUT_TOKENS_PER_BLOCK);
63
+ return Math.max(1, Math.min(flat, tokenBound));
64
+ }
65
+ /** Merge per-chunk Pass-3 analyses into ONE analysis the save loop consumes unchanged.
66
+ * new_blocks/updates/skip_reasons concatenate (item ids are globally unique → no
67
+ * collision); project_creates DEDUP by label (two chunks of a fresh project each coin
68
+ * the same root). Pure / testable. */
69
+ export function mergePass3Analyses(parts) {
70
+ const new_blocks = [];
71
+ const updates = [];
72
+ const skip_reasons = [];
73
+ const projByLabel = new Map();
74
+ for (const p of parts) {
75
+ if (!p)
76
+ continue;
77
+ for (const b of p.new_blocks ?? [])
78
+ new_blocks.push(b);
79
+ for (const u of p.updates ?? [])
80
+ updates.push(u);
81
+ for (const s of p.skip_reasons ?? [])
82
+ skip_reasons.push(s);
83
+ for (const pc of p.project_creates ?? []) {
84
+ const k = String(pc?.label ?? "").trim();
85
+ if (k && !projByLabel.has(k))
86
+ projByLabel.set(k, pc);
87
+ }
88
+ }
89
+ return { project_creates: [...projByLabel.values()], new_blocks, updates, skip_reasons };
90
+ }
91
+ /** Split items into chunks of at most `size`. Pure / testable. */
92
+ export function chunkItems(items, size) {
93
+ if (size <= 0)
94
+ return [items];
95
+ const out = [];
96
+ for (let i = 0; i < items.length; i += size)
97
+ out.push(items.slice(i, i + size));
98
+ return out;
99
+ }
100
+ /**
101
+ * Batched Pass 3 — drop-in for callPass3LLM. Delegates to a single call when the flag
102
+ * is off OR the item count fits one call; otherwise chunks → per-chunk callPass3LLM
103
+ * (sequential, sharing the same graph snapshot) → mergePass3Analyses. Sequential (not
104
+ * parallel) to stay gentle on rate limits — the chunks are independent reads of the
105
+ * same snapshot, so order does not change correctness (cross-chunk links wire at save).
106
+ */
107
+ export async function callPass3Batched(provider, classified, knownRoots, projectContext, agentSavedBlocks, thinkingBudget = 4096, duplicateAlerts = "", itemContext = {}, batchSize = pass3BatchSize(modelForPass("pass3"), thinkingBudget)) {
108
+ if (!pass3BatchEnabled() || classified.length <= batchSize) {
109
+ return callPass3LLM(provider, classified, knownRoots, projectContext, agentSavedBlocks, thinkingBudget, duplicateAlerts, itemContext);
110
+ }
111
+ const chunks = chunkItems(classified, batchSize);
112
+ console.log(`Auto-Reflect Pass 3: batched write — ${classified.length} items in ${chunks.length} chunk(s) of ≤${batchSize}`);
113
+ const analyses = [];
114
+ let rateLimited = false;
115
+ let model;
116
+ let geminiThinking = "";
117
+ const attempts = [];
118
+ for (let i = 0; i < chunks.length; i++) {
119
+ const r = await callPass3LLM(provider, chunks[i], knownRoots, projectContext, agentSavedBlocks, thinkingBudget, duplicateAlerts, itemContext);
120
+ if (r.analysis)
121
+ analyses.push(r.analysis);
122
+ rateLimited = rateLimited || r.rateLimited;
123
+ if (!model)
124
+ model = r.model;
125
+ if (r.attempts)
126
+ attempts.push(...r.attempts);
127
+ if (r.geminiThinking)
128
+ geminiThinking += (geminiThinking ? "\n" : "") + r.geminiThinking;
129
+ const got = (r.analysis?.new_blocks?.length ?? 0) + (r.analysis?.skip_reasons?.length ?? 0) + (r.analysis?.updates?.length ?? 0);
130
+ console.log(` [pass3-batch] chunk ${i + 1}/${chunks.length}: ${chunks[i].length} item(s) → ${got} accounted${r.rateLimited ? " (rate limited)" : ""}`);
131
+ }
132
+ // Every chunk failed (all null) → bubble up a null analysis so the existing
133
+ // re-queue path fires, exactly as a single failed call would.
134
+ if (analyses.length === 0) {
135
+ return { analysis: null, geminiThinking, rateLimited, model, attempts };
136
+ }
137
+ return { analysis: mergePass3Analyses(analyses), geminiThinking, rateLimited, model, attempts };
138
+ }
139
+ //# sourceMappingURL=pass3-batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass3-batch.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3-batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { LLMProvider } from "../../engine/ai-provider.js";
2
+ import type { Pass2Item } from "./types.js";
3
+ export declare const PASS3_PROMPT: string;
4
+ export declare function callPass3LLM(provider: LLMProvider, classified: Pass2Item[], knownRoots: Array<{
5
+ label: string;
6
+ essence: string;
7
+ }>, projectContext: string, agentSavedBlocks: Array<{
8
+ id: string;
9
+ label: string;
10
+ type: string;
11
+ essence: string;
12
+ unique: Record<string, any>;
13
+ }>, thinkingBudget?: number, duplicateAlerts?: string, itemContext?: Record<string, string>): Promise<{
14
+ analysis: any;
15
+ geminiThinking: string;
16
+ rateLimited: boolean;
17
+ model?: string;
18
+ attempts?: Array<{
19
+ model: string;
20
+ outcome: string;
21
+ }>;
22
+ }>;
23
+ //# sourceMappingURL=pass3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass3.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8B5C,eAAO,MAAM,YAAY,QAkI4D,CAAC;AAkItF,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,EAClH,cAAc,SAAO,EACrB,eAAe,SAAK,EACpB,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmGhJ"}