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,531 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // PASS 2 SPLIT ORCHESTRATOR (Week 3 piece, debt #1, 2026-05-25)
3
+ //
4
+ // Role: Drop-in replacement for `callPass2LLM` (monolith) when
5
+ // NODEDEX_PASS2_SPLIT=1. Runs the full split-mode flow:
6
+ //
7
+ // 1. pass2a (classify, full batch) — 1 LLM call
8
+ // 2. pass2b (per-item fill, parallelized) — N LLM calls
9
+ // 3. validateSeamAlphaBatch (pure code)
10
+ // 4. pass2c (batch wiring) — 1 LLM call
11
+ // 5. checkSeamBetaInvariant per 2c output item (pure code)
12
+ // 6. composeForDownstream → existing Pass2Result shape
13
+ //
14
+ // Returns the SAME signature the pipeline.ts call site expects from
15
+ // callPass2LLM, so the if/else branch around it stays minimal.
16
+ //
17
+ // What goes to quarantine (the audit-safe drain per §3 + §1):
18
+ // - 2b per-item failures (rate-limit, llm-error) — that item never got filled
19
+ // - Seam α failures that survive the RE-FILL RETRY (see step 3.5): 2b's first
20
+ // fill missed a required field → one re-fill attempt at the same type with
21
+ // the failure detail → if it STILL fails, quarantine (retry_attempted=true)
22
+ // - Seam β invariant violations (2c mutated a read-only field)
23
+ // - composer inconsistencies of kind missing_pass2b_fill (defensive — should
24
+ // not happen if upstream routing is correct; if it does, audit the entry)
25
+ //
26
+ // What goes back as a re-queue checkpoint (transient failure, retry whole pass):
27
+ // - 2a returns null/rate-limited
28
+ // - 2c returns null/rate-limited
29
+ //
30
+ // Route-back retry — IMPLEMENTED as RE-FILL (step 3.5), an evidence-driven
31
+ // deviation from design §3. Design §3 specified reclassify-via-2a (pick a
32
+ // different type matching what 2b filled). The 2026-05-25 smoke run showed
33
+ // the real cause of seam α failure is 2b UNDER-filling (missing a field that
34
+ // IS in the text), not a wrong type — so reclassify would have downgraded
35
+ // genuine insights to facts. Re-fill instead gives 2b one more shot at the
36
+ // SAME type with the failure detail, targeting the actual root cause and
37
+ // never creating a mis-typed block. Reclassify-via-2a remains available as a
38
+ // future addition IF a genuine wrong-type seam failure is ever observed.
39
+ //
40
+ // What's DEFERRED for this first wiring (gaps from design's "ready to flip"):
41
+ // 1. Multi-model routing — design §7 NON-OPTIONAL (Haiku for 2a/2b, Gemini
42
+ // for 2c). This wiring uses the same provider for all 3 sub-passes
43
+ // (Gemini), which lands in §7 Warning tier ($0.25-0.40/turn expected).
44
+ // Must be implemented BEFORE any default-on flag flip per §7's "MUST
45
+ // hold" list.
46
+ // 2. $$ cost telemetry — token counts are tracked in reflectTokenStats but
47
+ // $$ conversion requires per-provider pricing. §7's "Per-pass cost
48
+ // telemetry shipped and reconciles with OpenRouter dashboard within
49
+ // ±10%" is satisfied for tokens, not $$. Conversion is orthogonal,
50
+ // can land as a wrapper over reflectTokenStats post-wiring.
51
+ //
52
+ // Charter alignment:
53
+ // - Rule 2 (never delete vetted blocks): quarantine entries aren't deletes;
54
+ // candidates that failed the gate are preserved with full audit trail
55
+ // - Rule 6 (guards catch failure, never override success): seam validators
56
+ // REJECT bad input, never silently pass it; orchestrator routes to
57
+ // quarantine, never to /dev/null
58
+ // - Rule 9 (bugs live at seams): this file IS the seam orchestration; every
59
+ // seam transition is explicit + audit-logged
60
+ // - Rule 14 (store the path): quarantine entries carry pass1_text / 2a
61
+ // reasoning / 2b attempt / failure_reason — the full path to the
62
+ // failure, not just the failure
63
+ // ═══════════════════════════════════════════════════════════════════════════════
64
+ import { v4 as uuidv4 } from "uuid";
65
+ import { reflectTokenStats } from "./context.js";
66
+ import { callPass2aLLM } from "./pass2a.js";
67
+ import { callPass2bBatch } from "./pass2b.js";
68
+ import { callPass2cLLM } from "./pass2c.js";
69
+ import { modelForPass } from "./config.js";
70
+ import { validateSeamAlphaBatch, snapshotForSeamBeta, composeForDownstream, } from "./pass2-seams.js";
71
+ import { ensureQuarantineTable, writeQuarantineEntry, } from "./pass2-quarantine.js";
72
+ // ─── runPass2Split — the orchestration ─────────────────────────────────────────
73
+ //
74
+ // Signature mirrors `callPass2LLM(provider, items, projectContext, prevMap,
75
+ // thinkingBudget, sceneCard)` so pipeline.ts can substitute one for the other
76
+ // without other call-site changes.
77
+ export async function runPass2Split(provider, db, pass1Items, projectContext, prevEntityMap, thinkingBudget, sceneCard, sourceSessionId) {
78
+ // Ensure quarantine table exists. Idempotent — safe to call every turn.
79
+ // First-call latency is one CREATE IF NOT EXISTS + 4 indexes; negligible.
80
+ ensureQuarantineTable(db.rawDb);
81
+ // Stable batch_id for all quarantine entries from this turn.
82
+ const batch_id = `batch_${uuidv4()}`;
83
+ const allAttempts = [];
84
+ // ── Multi-model routing (C, 2026-05-25) ──────────────────────────────────────
85
+ // Per PASS2-SPLIT-DESIGN.md §7 cost recalibration, the split's cost-tier bet
86
+ // depends on routing 2a/2b (structural) to a cheaper model (Haiku-class)
87
+ // while keeping 2c (semantic wiring) on a stronger model (Gemini Flash/Pro).
88
+ //
89
+ // Opt-in via env vars (universal — provider-agnostic string passed straight
90
+ // through to provider.generateStructured's modelOverride). Absent env var →
91
+ // no routing for that sub-pass → uses provider default → identical to today.
92
+ //
93
+ // NODEDEX_PASS2A_MODEL — e.g. "anthropic/claude-haiku-4-5" (via OpenRouter)
94
+ // NODEDEX_PASS2B_MODEL — e.g. "anthropic/claude-haiku-4-5"
95
+ // NODEDEX_PASS2C_MODEL — e.g. "google/gemini-2.5-flash" (typically left unset
96
+ // so 2c uses provider default; useful for A/B)
97
+ //
98
+ // Safety guard: if the provider is "gemini" (the GeminiProvider singleton),
99
+ // modelOverride to a non-Gemini model name will fail at the provider layer.
100
+ // We DON'T block the override here — the user is responsible for ensuring
101
+ // their AI_PROVIDER can serve the model they request. Logging the intent so
102
+ // a failure is debuggable (the turn log providers[] will show the failed model).
103
+ // Per-pass override → NODEDEX_REASONING_MODEL (2a/2c) / NODEDEX_STRUCTURAL_MODEL (2b)
104
+ // tier → provider default. modelForPass keeps the existing NODEDEX_PASS2{A,B,C}_MODEL
105
+ // as the highest-priority override (backward compatible).
106
+ const pass2aModel = modelForPass("pass2a");
107
+ const pass2bModel = modelForPass("pass2b");
108
+ const pass2cModel = modelForPass("pass2c");
109
+ // Demote-edge (2026-05-27, debt-3 structural-small). Seam α emits a `demote`
110
+ // verdict for items whose required field is unfillable but whose source field
111
+ // for a structurally-equivalent type IS present (see DEMOTE_TARGETS in
112
+ // pass2-seams.ts); the orchestrator re-types those items and routes to proceed
113
+ // instead of quarantining. DEFAULT-ON as of 2026-05-27 (flip after E2E
114
+ // validation: 14 demotes insight→fact, 0 regression, quarantine drained 9→0)
115
+ // — mirrors the NODEDEX_PASS2_SPLIT flip pattern. Reversible: set
116
+ // NODEDEX_SEAM_ALPHA_DEMOTE=0 to disable. Full diagnosis + plan + validation:
117
+ // memory project-insight-fact-typing-gap.
118
+ const enableDemote = process.env.NODEDEX_SEAM_ALPHA_DEMOTE !== "0";
119
+ if (!enableDemote) {
120
+ console.log(`Auto-Reflect Pass 2 split: seam α demote DISABLED (NODEDEX_SEAM_ALPHA_DEMOTE=0)`);
121
+ }
122
+ if (pass2aModel || pass2bModel || pass2cModel) {
123
+ const parts = [];
124
+ if (pass2aModel)
125
+ parts.push(`2a→${pass2aModel}`);
126
+ if (pass2bModel)
127
+ parts.push(`2b→${pass2bModel}`);
128
+ if (pass2cModel)
129
+ parts.push(`2c→${pass2cModel}`);
130
+ console.log(`Auto-Reflect Pass 2 split: multi-model routing ${parts.join(", ")} (provider=${provider.getName()})`);
131
+ }
132
+ // ── Step 1: Pass 2a (classify) ───────────────────────────────────────────────
133
+ const a = await callPass2aLLM(provider, pass1Items, projectContext, prevEntityMap, thinkingBudget, sceneCard, pass2aModel);
134
+ // Stamp 2a usage into telemetry.
135
+ if (a.usage) {
136
+ reflectTokenStats.pass2a.input += a.usage.input ?? 0;
137
+ reflectTokenStats.pass2a.thinking += a.usage.thinking ?? 0;
138
+ reflectTokenStats.pass2a.output += a.usage.output ?? 0;
139
+ reflectTokenStats.pass2a.calls += 1;
140
+ }
141
+ if (a.attempts)
142
+ allAttempts.push(...a.attempts.map((x) => ({ ...x, model: `2a:${x.model}` })));
143
+ if (!a.result) {
144
+ // 2a failed — bubble up as if monolith failed. pipeline.ts will re-queue.
145
+ return {
146
+ result: null,
147
+ thinking: a.thinking,
148
+ rateLimited: a.rateLimited,
149
+ model: a.model,
150
+ attempts: allAttempts,
151
+ };
152
+ }
153
+ // ── Step 2: Pass 2b batch (fill unique{} per item) ───────────────────────────
154
+ // Defensive empty-classified case: no items to fill or wire; emit empty result.
155
+ if (a.result.classified.length === 0) {
156
+ return {
157
+ result: { skipped: a.result.skipped, classified: [], causal_wiring: [] },
158
+ thinking: a.thinking,
159
+ rateLimited: false,
160
+ model: a.model,
161
+ attempts: allAttempts,
162
+ splitAudit: {
163
+ pass2a_items_in: pass1Items.length,
164
+ pass2a_classified: 0,
165
+ pass2a_skipped: a.result.skipped.length,
166
+ pass2b_filled: 0, pass2b_failed: 0,
167
+ seam_alpha_proceed: 0, seam_alpha_route_back: 0,
168
+ refill_attempted: 0, refill_salvaged: 0,
169
+ seam_alpha_quarantine: 0,
170
+ demote_enabled: process.env.NODEDEX_SEAM_ALPHA_DEMOTE === "1",
171
+ seam_alpha_demoted: 0,
172
+ demoted_breakdown: {},
173
+ seam_beta_violations: 0, pass2c_wired: 0,
174
+ quarantine_writes: 0, compose_inconsistencies: 0,
175
+ },
176
+ };
177
+ }
178
+ const pass2bInputs = a.result.classified.map((c) => ({
179
+ id: c.id,
180
+ text: c.text,
181
+ type: c.type,
182
+ classification_reasoning: c.classification_reasoning,
183
+ }));
184
+ const b = await callPass2bBatch(provider, pass2bInputs, pass2bModel ? { modelOverride: pass2bModel } : undefined);
185
+ // Stamp 2b usage: callPass2bBatch rolls up per-item usage across the whole
186
+ // batch (D-fix 2026-05-25 — previously only .calls was bumped → pass2b billed $0).
187
+ reflectTokenStats.pass2b.input += b.usage.input;
188
+ reflectTokenStats.pass2b.thinking += b.usage.thinking;
189
+ reflectTokenStats.pass2b.output += b.usage.output;
190
+ reflectTokenStats.pass2b.calls += b.results.length + b.failures.length;
191
+ // Map back: each 2a-classified item has either a 2b result, or it failed.
192
+ const filledById = new Map();
193
+ for (const r of b.results)
194
+ filledById.set(r.id, r);
195
+ // Quarantine helpers — defined before Step 3 so both first-pass and the
196
+ // re-fill retry stage can use them. Collect a count for the audit summary.
197
+ let quarantineWrites = 0;
198
+ let refillAttempted = 0;
199
+ let refillSalvaged = 0;
200
+ const now = () => new Date().toISOString();
201
+ const quarantineForFailedB = (item, failure_reason) => ({
202
+ // Turn-unique PK. item.id is the Pass 1 id (item_1..item_N), which RESETS
203
+ // per turn — using it bare as the quarantine PK collides across turns in one
204
+ // workspace (cross-session), throwing UNIQUE-constraint and crashing the turn.
205
+ // batch_id is a fresh per-turn uuid, so this is unique across turns AND within
206
+ // one (item.id unique within a turn). Fixed 2026-05-26 (deep-test turn 3).
207
+ id: `${batch_id}_${item.id}`,
208
+ pass1_text: item.text,
209
+ pass1_provisional_type: pass1Items.find((p) => p.id === item.id)?.provisional_type ?? "",
210
+ pass1_reasoning: pass1Items.find((p) => p.id === item.id)?.extraction_reasoning ?? null,
211
+ pass1_excerpt: pass1Items.find((p) => p.id === item.id)?.excerpt ?? null,
212
+ pass2a_classified: item.type,
213
+ pass2a_reasoning: item.classification_reasoning ?? "",
214
+ pass2a_alternatives: [],
215
+ pass2b_attempted: {},
216
+ pass2b_failure_reason: failure_reason,
217
+ retry_attempted: false,
218
+ retry_2a_classified: null,
219
+ retry_outcome: null,
220
+ batch_id,
221
+ source_session_id: sourceSessionId,
222
+ quarantined_at: now(),
223
+ siblings_promoted: [],
224
+ queued_for_enrichment: true,
225
+ enrichment_attempts: [],
226
+ promotion_blocked_until: null,
227
+ agent_clarification: null,
228
+ });
229
+ const quarantineForSeamFailure = (item, fill, failure_reason, retried) => ({
230
+ // Turn-unique PK. item.id is the Pass 1 id (item_1..item_N), which RESETS
231
+ // per turn — using it bare as the quarantine PK collides across turns in one
232
+ // workspace (cross-session), throwing UNIQUE-constraint and crashing the turn.
233
+ // batch_id is a fresh per-turn uuid, so this is unique across turns AND within
234
+ // one (item.id unique within a turn). Fixed 2026-05-26 (deep-test turn 3).
235
+ id: `${batch_id}_${item.id}`,
236
+ pass1_text: item.text,
237
+ pass1_provisional_type: pass1Items.find((p) => p.id === item.id)?.provisional_type ?? "",
238
+ pass1_reasoning: pass1Items.find((p) => p.id === item.id)?.extraction_reasoning ?? null,
239
+ pass1_excerpt: pass1Items.find((p) => p.id === item.id)?.excerpt ?? null,
240
+ pass2a_classified: item.type,
241
+ pass2a_reasoning: item.classification_reasoning ?? "",
242
+ pass2a_alternatives: [],
243
+ pass2b_attempted: fill.unique,
244
+ pass2b_failure_reason: failure_reason,
245
+ retry_attempted: retried,
246
+ retry_2a_classified: null, // re-fill keeps the same type (no 2a reclassify)
247
+ retry_outcome: retried ? "same_type_quarantined" : null,
248
+ batch_id,
249
+ source_session_id: sourceSessionId,
250
+ quarantined_at: now(),
251
+ siblings_promoted: [],
252
+ queued_for_enrichment: true,
253
+ enrichment_attempts: [],
254
+ promotion_blocked_until: null,
255
+ agent_clarification: null,
256
+ });
257
+ // Rule 6 (guards catch failure, never destroy): a single quarantine write
258
+ // failure must not abort the whole turn — writeQuarantineEntry runs inside
259
+ // pipeline.ts's try/catch, so an uncaught throw here zeroes EVERY block this
260
+ // turn. Log + skip the one entry instead. (Surfaced 2026-05-26: a duplicate-PK
261
+ // SqliteError crashed turn 3 of the deep test before the composite-id fix.)
262
+ const safeQuarantine = (entry) => {
263
+ try {
264
+ writeQuarantineEntry(db.rawDb, entry);
265
+ quarantineWrites++;
266
+ }
267
+ catch (e) {
268
+ console.error(`Auto-Reflect Pass 2 split: quarantine write failed for "${entry.id}" — skipping (non-fatal): ${e instanceof Error ? e.message : String(e)}`);
269
+ }
270
+ };
271
+ // ── Step 3: Seam α validation (first pass) ───────────────────────────────────
272
+ // For items 2b successfully filled, run validateSeamAlphaBatch. Items 2b
273
+ // hard-failed on (rate-limit / error) never got a fill → quarantined in Step 4.
274
+ const seamAlphaInputs = [];
275
+ for (const c of a.result.classified) {
276
+ const fill = filledById.get(c.id);
277
+ if (!fill)
278
+ continue;
279
+ seamAlphaInputs.push({ id: c.id, type: c.type, unique: fill.unique, schema: c.schema });
280
+ }
281
+ // First pass: items have _seam_alpha_retries=0, so the `demote` verdict can
282
+ // never fire here (demote requires retries >= MAX_RETRIES). Pass the option
283
+ // anyway for consistency — `seam1.demote` will always be empty by design.
284
+ const seam1 = validateSeamAlphaBatch(seamAlphaInputs, { enable_demote: enableDemote });
285
+ const proceedIds = new Set(seam1.proceed.map((p) => p.item.id));
286
+ // Demote audit: counter + per-pair breakdown for telemetry.
287
+ let demotedCount = 0;
288
+ const demotedBreakdown = {};
289
+ // ── Step 3.5: RE-FILL RETRY for seam α route_back items ──────────────────────
290
+ // A route_back verdict means 2b's filled unique{} didn't satisfy the type's
291
+ // schema (a required field missing). Instead of reclassifying the type (design
292
+ // §3's original spec), we give 2b ONE more shot at the SAME type with the
293
+ // failure detail injected — because the smoke run showed the real cause is 2b
294
+ // UNDER-filling (e.g. missing an implication that IS in the text), not a wrong
295
+ // type. Re-fill targets that root cause and can't create mis-typed blocks.
296
+ // Genuinely-unfillable items fail again (retries=1 → quarantine verdict).
297
+ //
298
+ // Evidence-driven deviation from design §3 (reclassify-via-2a), documented
299
+ // 2026-05-25. Reclassify remains available as a future addition if we ever
300
+ // observe a genuine wrong-type seam failure.
301
+ if (seam1.route_back.length > 0) {
302
+ refillAttempted = seam1.route_back.length;
303
+ // Stable alias — `a.result` narrowing is lost across the awaits below.
304
+ const classified2a = a.result.classified;
305
+ const retryInputs = seam1.route_back.map((rb) => {
306
+ const c = classified2a.find((x) => x.id === rb.item.id);
307
+ return {
308
+ id: c.id,
309
+ text: c.text,
310
+ type: c.type,
311
+ classification_reasoning: c.classification_reasoning,
312
+ retryFailureDetail: rb.failure_detail,
313
+ };
314
+ });
315
+ const retryB = await callPass2bBatch(provider, retryInputs, pass2bModel ? { modelOverride: pass2bModel } : undefined);
316
+ reflectTokenStats.pass2b.input += retryB.usage.input;
317
+ reflectTokenStats.pass2b.thinking += retryB.usage.thinking;
318
+ reflectTokenStats.pass2b.output += retryB.usage.output;
319
+ reflectTokenStats.pass2b.calls += retryB.results.length + retryB.failures.length;
320
+ // Retry hard-failures (rate-limit / error) → quarantine.
321
+ for (const f of retryB.failures) {
322
+ const item = classified2a.find((c) => c.id === f.id);
323
+ if (!item)
324
+ continue;
325
+ safeQuarantine(quarantineForFailedB(item, `pass2b_retry_${f.reason}${f.detail ? `:${f.detail.slice(0, 100)}` : ""}`));
326
+ }
327
+ // Re-validate seam α with _seam_alpha_retries=1 → a second failure now
328
+ // yields a quarantine verdict (not another route_back).
329
+ const retryFilledById = new Map();
330
+ for (const r of retryB.results)
331
+ retryFilledById.set(r.id, r);
332
+ const retrySeamInputs = retryB.results.map((r) => {
333
+ const c = classified2a.find((x) => x.id === r.id);
334
+ return { id: r.id, type: c.type, unique: r.unique, schema: c.schema, _seam_alpha_retries: 1 };
335
+ });
336
+ const seam2 = validateSeamAlphaBatch(retrySeamInputs, { enable_demote: enableDemote });
337
+ // Salvaged → proceed (override the fill with the successful retry fill).
338
+ for (const p of seam2.proceed) {
339
+ proceedIds.add(p.item.id);
340
+ filledById.set(p.item.id, retryFilledById.get(p.item.id));
341
+ refillSalvaged++;
342
+ }
343
+ // ── Demote handling (debt-3 structural-small, 2026-05-27) ─────────────────
344
+ // Items that 2b couldn't fill the required field for, but whose source field
345
+ // for a structurally-equivalent type IS present, are re-typed via the seam α
346
+ // demote verdict. We mutate a.result.classified[].type so Pass 2c + composer
347
+ // + Pass 3 see the new type; we replace the fill's unique{} with the
348
+ // remapped one (so the type's NEW schema is satisfied); and we augment
349
+ // classification_reasoning so the re-type is auditable in the persisted
350
+ // block (lightweight provenance — full source_type=seam_demoted column-level
351
+ // stamp is a separate sub-chunk that needs Pass 3 / database.createBlock
352
+ // plumbing). Rule 6: guard catches failure (unfillable required field),
353
+ // routes to recoverable type, never overrides a 2c/Pass 3 success.
354
+ for (const d of seam2.demote) {
355
+ const item = a.result.classified.find((c) => c.id === d.item.id);
356
+ const fill = retryFilledById.get(d.item.id);
357
+ if (!item || !fill)
358
+ continue;
359
+ const original_type = item.type;
360
+ // Apply the re-type. Mutating the classified item is safe — this is the
361
+ // orchestrator's working data, not shared elsewhere after compose.
362
+ item.type = d.new_type;
363
+ // Block-level provenance: carried via composeForDownstream → Pass2Item →
364
+ // pipeline.ts sourceTypeMap → blocks.source_type column. This is the ONLY
365
+ // block-level marker (classification_reasoning does NOT persist to the
366
+ // block — confirmed in the 2026-05-27 E2E run). debt-2 enrichment uses it
367
+ // to find fact→insight re-promotion candidates.
368
+ item.source_type = "seam_demoted";
369
+ const note = `[DEMOTED ${original_type}→${d.new_type} at seam α: ${d.reason}]`;
370
+ item.classification_reasoning = item.classification_reasoning
371
+ ? `${item.classification_reasoning} ${note}`
372
+ : note;
373
+ // Replace the fill's unique{} with the remapped one (insight.observation
374
+ // becomes fact.value). Pass 2c + composer + Pass 3 see only the new shape.
375
+ filledById.set(d.item.id, { ...fill, unique: d.remapped_unique });
376
+ proceedIds.add(d.item.id);
377
+ demotedCount++;
378
+ const key = `${original_type}->${d.new_type}`;
379
+ demotedBreakdown[key] = (demotedBreakdown[key] ?? 0) + 1;
380
+ console.log(` [seam α demote] ${d.item.id} ${original_type}→${d.new_type}: ${d.reason}`);
381
+ }
382
+ // Still failing after retry → quarantine (retries exhausted, no demote path).
383
+ for (const q of [...seam2.quarantine, ...seam2.route_back]) {
384
+ const item = classified2a.find((c) => c.id === q.item.id);
385
+ const fill = retryFilledById.get(q.item.id);
386
+ if (!item || !fill)
387
+ continue;
388
+ safeQuarantine(quarantineForSeamFailure(item, fill, `seam_alpha_retry_exhausted:${q.failure_detail}`, true));
389
+ }
390
+ }
391
+ // ── Step 4: First-pass 2b hard-failures → quarantine ─────────────────────────
392
+ // Items 2b never filled at all (rate-limit / error on the first batch). These
393
+ // never reached seam α. Transient-failure retry of the whole item is out of
394
+ // scope for this wiring; preserve in quarantine (recoverable).
395
+ for (const f of b.failures) {
396
+ const item = a.result.classified.find((c) => c.id === f.id);
397
+ if (!item)
398
+ continue;
399
+ safeQuarantine(quarantineForFailedB(item, `pass2b_${f.reason}${f.detail ? `:${f.detail.slice(0, 100)}` : ""}`));
400
+ }
401
+ // First-pass seam α quarantine verdicts (only fire if an item entered with
402
+ // _seam_alpha_retries already ≥1, which doesn't happen on the first pass —
403
+ // defensive).
404
+ for (const q of seam1.quarantine) {
405
+ const item = a.result.classified.find((c) => c.id === q.item.id);
406
+ const fill = filledById.get(q.item.id);
407
+ if (!item || !fill)
408
+ continue;
409
+ safeQuarantine(quarantineForSeamFailure(item, fill, `seam_alpha_quarantine:${q.failure_detail}`, false));
410
+ }
411
+ // ── Step 5: Pass 2c batch wiring (only proceed items) ────────────────────────
412
+ // Build 2c inputs from proceed items — read-only context per Seam β contract.
413
+ const pass2cInputs = a.result.classified
414
+ .filter((c) => proceedIds.has(c.id))
415
+ .map((c) => {
416
+ const fill = filledById.get(c.id);
417
+ return {
418
+ id: c.id,
419
+ text: c.text,
420
+ type: c.type,
421
+ project: c.project,
422
+ unique: fill.unique,
423
+ extends_item: c.extends_item,
424
+ supersedes_ref: c.supersedes_ref,
425
+ resolved_ref: c.resolved_ref,
426
+ classification_reasoning: c.classification_reasoning,
427
+ };
428
+ });
429
+ // Seam β snapshots — taken BEFORE 2c sees the items, verified AFTER.
430
+ const seamBetaSnapshots = new Map(pass2cInputs.map((i) => [i.id, snapshotForSeamBeta({ id: i.id, type: i.type, unique: i.unique, text: i.text })]));
431
+ const c = await callPass2cLLM(provider, pass2cInputs, projectContext, thinkingBudget, sceneCard, pass2cModel);
432
+ // Stamp 2c usage.
433
+ if (c.usage) {
434
+ reflectTokenStats.pass2c.input += c.usage.input ?? 0;
435
+ reflectTokenStats.pass2c.thinking += c.usage.thinking ?? 0;
436
+ reflectTokenStats.pass2c.output += c.usage.output ?? 0;
437
+ reflectTokenStats.pass2c.calls += 1;
438
+ }
439
+ if (c.attempts)
440
+ allAttempts.push(...c.attempts.map((x) => ({ ...x, model: `2c:${x.model}` })));
441
+ if (!c.result) {
442
+ // 2c failed — re-queue the whole pass. The work 2a + 2b did is lost
443
+ // (they'll re-run from scratch). Acceptable; transient failure path.
444
+ return {
445
+ result: null,
446
+ thinking: a.thinking + (c.thinking ? `\n\n[2c]\n${c.thinking}` : ""),
447
+ rateLimited: c.rateLimited,
448
+ model: c.model,
449
+ attempts: allAttempts,
450
+ };
451
+ }
452
+ // ── Step 6: Seam β invariant check ───────────────────────────────────────────
453
+ // 2c output IDs should match the inputs (passed in unique-as-context). Per
454
+ // Seam β, 2c is forbidden to mutate type/unique/text/id. Our schema doesn't
455
+ // even let 2c emit those fields, so the LLM CAN'T return them — but check
456
+ // anyway because the sanitizer also runs and we want the invariant verified
457
+ // structurally, not assumed.
458
+ //
459
+ // In this wiring, 2c only emits wiring bundles (no type/unique/text). So
460
+ // the only Seam β violation we could see is a wiring entry with an ID not
461
+ // matching a proceed input — which composeForDownstream catches as
462
+ // orphan_pass2c. So technically Seam β snapshot/check is redundant here.
463
+ // Keep the code path active anyway so when 2c's schema grows (e.g., if Q5
464
+ // is ever expanded to write back to relations on the item directly), the
465
+ // invariant check is already in place. Defense in depth, rule 6.
466
+ //
467
+ // For now: no per-output mutation check possible because 2c output is the
468
+ // wiring bundle, not a (type, unique, text)-shaped item. The snapshot map
469
+ // remains in scope for future use (when 2c output shape expands).
470
+ void seamBetaSnapshots; // mark as intentionally retained for future invariant
471
+ let seamBetaViolations = 0;
472
+ // ── Step 7: Compose for downstream ───────────────────────────────────────────
473
+ // Only proceed items get passed to compose. The skipped[] from 2a passes
474
+ // through. Quarantined items are NOT in classified (they don't ship to the
475
+ // live graph).
476
+ const proceedClassified = a.result.classified.filter((c2a) => proceedIds.has(c2a.id));
477
+ const proceedFills = Array.from(filledById.entries())
478
+ .filter(([id]) => proceedIds.has(id))
479
+ .map(([, r]) => r);
480
+ const composeInput = {
481
+ pass2a: { skipped: a.result.skipped, classified: proceedClassified },
482
+ pass2b_results: proceedFills,
483
+ pass2c: c.result,
484
+ };
485
+ const composed = composeForDownstream(composeInput);
486
+ // Log composer inconsistencies — they're rare (orchestrator design avoids
487
+ // missing_pass2b_fill / missing_pass2c_wiring by routing), but if they
488
+ // occur they're orchestrator bugs to investigate.
489
+ if (composed.inconsistencies.length > 0) {
490
+ console.warn(`Pass 2 split: composer surfaced ${composed.inconsistencies.length} inconsistency(ies) — investigate`);
491
+ for (const inc of composed.inconsistencies) {
492
+ console.warn(` ${inc.kind} on ${inc.id}: ${inc.detail}`);
493
+ }
494
+ }
495
+ // Summary log line — concise turn-level signal.
496
+ const demoteFragment = demotedCount > 0
497
+ ? `, demoted=${demotedCount} (${Object.entries(demotedBreakdown).map(([k, n]) => `${k}:${n}`).join(",")})`
498
+ : "";
499
+ console.log(`Pass 2 split summary: 2a classified=${a.result.classified.length}/${pass1Items.length}, 2b filled=${b.results.length}/${b.failures.length + b.results.length}, ` +
500
+ `seam α first-pass (proceed/route_back)=${seam1.proceed.length}/${seam1.route_back.length}, ` +
501
+ `re-fill (attempted/salvaged)=${refillAttempted}/${refillSalvaged}, final proceed=${proceedIds.size}${demoteFragment}, ` +
502
+ `seam β violations=${seamBetaViolations}, 2c wired=${c.result.wiring.length}, ` +
503
+ `quarantine writes=${quarantineWrites}, compose inconsistencies=${composed.inconsistencies.length}`);
504
+ return {
505
+ result: composed.result,
506
+ thinking: a.thinking + (c.thinking ? `\n\n[2c]\n${c.thinking}` : ""),
507
+ rateLimited: false,
508
+ model: a.model ?? c.model,
509
+ attempts: allAttempts,
510
+ splitAudit: {
511
+ pass2a_items_in: pass1Items.length,
512
+ pass2a_classified: a.result.classified.length,
513
+ pass2a_skipped: a.result.skipped.length,
514
+ pass2b_filled: b.results.length,
515
+ pass2b_failed: b.failures.length,
516
+ seam_alpha_proceed: proceedIds.size,
517
+ seam_alpha_route_back: seam1.route_back.length,
518
+ refill_attempted: refillAttempted,
519
+ refill_salvaged: refillSalvaged,
520
+ seam_alpha_quarantine: seam1.quarantine.length,
521
+ demote_enabled: enableDemote,
522
+ seam_alpha_demoted: demotedCount,
523
+ demoted_breakdown: demotedBreakdown,
524
+ seam_beta_violations: seamBetaViolations,
525
+ pass2c_wired: c.result.wiring.length,
526
+ quarantine_writes: quarantineWrites,
527
+ compose_inconsistencies: composed.inconsistencies.length,
528
+ },
529
+ };
530
+ }
531
+ //# sourceMappingURL=pass2-split-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass2-split-orchestrator.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2-split-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { LLMProvider } from "../../engine/ai-provider.js";
2
+ import type { Pass1Item, Pass2Result } from "./types.js";
3
+ export declare const PASS2_PROMPT = "You receive extracted items from an agent session.\nEach item has a provisional_type set by Pass 1 based on surface form.\n\n\u2500\u2500 STATE CONVENTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"State\" in this prompt = text in marked regions below (PROJECT GRAPH, SCENE CARD,\nPREVIOUS TURN ENTITY MAP, ITEMS FROM PASS 1). Your training knowledge and\n\"what's commonly known about this domain\" are NOT state. A claim is \"already\nrecorded\" ONLY if a block in PROJECT GRAPH has a matching essence text or\nunique{} field value. Familiarity \u2260 recorded. The fact that something is widely\nknown, famous, or established in the field is irrelevant to dedup.\n\nYour job: verify the type, draw causal links, fill unique fields.\nProcessing order: DEDUP (Q0) \u2192 TYPE (Q1) \u2192 HIERARCHY (Q2) \u2192 UNIQUE FIELDS \u2192 classified[].\nThen: CAUSAL WIRING (Q3\u2013Q4) \u2192 causal_wiring[].\n\n\u2500\u2500 Q0: DEDUP \u2014 intra-batch first, then against PROJECT GRAPH \u2500\u2500\n\"Does this item add a claim not already covered \u2014 by another item in this same\nbatch, or by a block in PROJECT GRAPH?\"\n\nFor EVERY item, walk these steps in order. Stop at the first verdict.\n\nSTEP I \u2014 Intra-batch duplicate (check before the graph):\n \"Does another ITEM in this batch make the SAME claim \u2014 same type, same\n specific subject and values? Two items can word it differently and still be\n the same claim; a merely related claim is NOT the same claim.\"\n YES \u2192 keep exactly ONE \u2014 the item with the more complete text and unique\n values. The other does not become a block: do not emit it in\n classified[], and do not put it in skipped[] \u2014 simply omit it. In the\n kept item's classification_reasoning, name the dropped item's id. Any\n causal link wires to the kept item.\n NO \u2192 proceed to STEP 0.\n\nSTEP 0 \u2014 Pre-check before graph dedup:\n PROJECT GRAPH empty (no blocks shown at all) \u2192 item is GENUINELY NEW. Stop.\n Item's project absent from PROJECT GRAPH \u2192 item is GENUINELY NEW. Stop.\n Item's (project, provisional_type) pair has no matching blocks \u2192 GENUINELY NEW. Stop.\n Only when one or more concrete candidate blocks exist \u2192 proceed to STEP A.\n\nSTEP A \u2014 Identify candidate blocks in PROJECT GRAPH by project prefix + provisional type.\n Each candidate has a visible essence and (sometimes) unique{} values.\n Ask: \"Would the item and the candidate be saying the SAME THING or DIFFERENT\n THINGS as graph blocks?\" Same = same specific claim with same values. Related\n topic \u2260 same claim.\n\nSTEP B \u2014 \"Is this turn CHANGING the recorded state, or CONFIRMING what is\nrecorded in PROJECT GRAPH?\" The comparison is against the candidate's ESSENCE\nTEXT and UNIQUE FIELD VALUES \u2014 not against domain knowledge.\n\n NOTHING NEW (same claim, same value, candidate already says it) \u2192 skipped[].\n UPDATES (same claim, CHANGES outcome/value) \u2192 classify + supersedes_ref = candidate label.\n \"Is the old block still the CURRENT STATE?\" NO \u2192 supersedes_ref. YES but wrong \u2192 contradicts.\n NOT UPDATES: item USES or BUILDS ON the candidate \u2192 GENUINELY NEW (wire in causal_wiring).\n GENUINELY NEW \u2192 classify normally.\n\nSKIP EVIDENCE \u2014 falsifiability rule:\n A skip in skipped[] makes a claim about PROJECT GRAPH state. The reason must\n reference the specific block \u2014 by label or by its essence text \u2014 that the\n skip is checked against. If you cannot point to a block in PROJECT GRAPH that\n a reader could verify the claim against, the claim is unfalsifiable: classify\n the item, do not skip it.\n\nASYMMETRIC COST: false skip = permanent data loss. false save = minor bloat.\nWhen in doubt at any step, default to GENUINELY NEW.\n\n\u2500\u2500 Q1: TYPE \u2014 \"What is the speaker's EPISTEMIC STANCE toward this claim?\" \u2500\u2500\nType = speaker's relationship to knowledge, not content topic.\nextends_id and type are independent axes. Apply Q1 regardless.\n\nPass 1's type is correct unless one of these structural tests fires:\n\n TEST 1: \"Expected answer or proposed mechanism BEFORE confirmation?\"\n YES \u2192 hypothesis. Already confirmed \u2192 remains fact.\n\n TEST 2: \"CLOSING something or ADOPTING something?\"\n ADOPTING \u2192 decision.\n CLOSING \u2192 \"Were resources committed INTO this path before closure?\"\n \"If I removed the closing event, would there be active work to stop?\"\n YES \u2192 dead_end. NO (only analysis, never entered) \u2192 fact.\n EXTERNAL FORCE closed it \u2192 constraint.\n\n TEST 3: \"Has an outcome already been selected and closed?\"\n YES \u2192 decision. Path committed, destination unknown \u2192 blueprint. Nothing committed \u2192 question.\n\n TEST 4: \"PROJECT GRAPH has same concept with different type?\"\n YES \u2192 align with graph's type. Set review_reason = \"graph_align\".\n\nWhen overriding, set review_reason = \"type_override\".\nWhen keeping, fill classification_reasoning explaining why it held.\n\nNOVEL TYPE: all three must pass \u2014 (1) future agent would behave differently than any existing type,\n(2) can't be expressed as existing type + richer unique{}, (3) name describes epistemic stance not content shape.\n\u2192 set type, define schema{} with 2-3 fields, review_reason = \"novel_type\".\n\nBLUEPRINT \u2192 DECISION: planned/uncertain \u2192 active/current? \u2192 decision + supersedes_ref to blueprint label.\nUNCERTAIN ITEMS: preserve type. Never downgrade. Set review_reason = \"incomplete_context\".\n\n\u2500\u2500 Q2: HIERARCHY \u2014 \"Can this item stand alone as knowledge?\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"If I deleted the item it points to, would THIS item make sense standalone?\"\n YES \u2192 clear extends_item. NO \u2192 set extends_item = that item's ID.\nCaptures MEANING DEPENDENCY, not topic relatedness. Type does not change.\n\n\u2500\u2500 PROJECT ATTRIBUTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nEvery item MUST get a project. Decide in order:\n 1. Item is about one specific named system/project \u2192 that project (a valid root\n from PROJECT GRAPH or scene card PROJECTS; use APPROACHES project tags).\n 2. Item is cross-cutting \u2014 background/intro context, a field-level conclusion,\n or a question or comparison spanning multiple projects \u2192 the SCOPE PROJECT\n named in the scene card.\nThe scene card always names a scope project; it is the home for anything that\nbelongs to no single project. \"null\", \"\", \"unknown\", \"general\" are never valid\nproject values \u2014 if you cannot name a specific project, the answer is the scope\nproject, not a placeholder.\n\n\u2500\u2500 SUPERSEDES_REF \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"After this item exists, is the old block still the CURRENT STATE?\"\n NO \u2192 supersedes_ref = old label. YES but wrong \u2192 contradicts relation.\n Within-batch: predecessor item ID. Cross-batch: exact label from PROJECT GRAPH.\nresolved_ref \u2014 label for same entity by different name. High confidence only.\n\n\u2500\u2500 REVIEW FLAGS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nSet review_reason when not confident: type_override, weak_match, no_evidence,\nproject_uncertain, incomplete_context, graph_align, novel_type. Empty when confident.\n\n\u2500\u2500 CLASSIFICATION REASONING (required) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nFor EVERY item: 1-2 sentences \u2014 which test determined the outcome and what evidence.\n\n\u2500\u2500 UNIQUE FIELDS \u2014 populate AFTER type is final \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nUse ONLY the assigned type's fields. Fields NEVER determine type.\n\n decision { choice, reason, alternatives_rejected }\n dead_end { approach, reason, alternative }\n blueprint { purpose, status, trigger_to_implement }\n question { question, why_matters }\n fact { value, why_matters }\n constraint { limit, reason, source }\n hypothesis { proposal, evidence_for, evidence_against }\n insight { observation, implication }\n preference { lean, over, condition }\n entity { name, role }\n event { what_happened, outcome, date }\n task { status, description, owner }\n\nOmit empty fields. Use verbatim excerpt language. Specific named things \u2192 unique{}.\ninsight's second field is \"implication\" (what the observation means going forward) \u2014 NOT\n\"proposal\" (that field belongs to hypothesis: an unverified guess) and NOT a bare \"reason\".\nDiscriminator when the content is \"X, therefore/because Y\": a guess or theory \u2192 hypothesis;\na single observed effect or state \u2192 fact; a realization combining 2+ things \u2192 insight.\n\n\u2500\u2500 SCENE CARD CONTEXT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nAPPROACHES \u2192 engagement level (for TEST 3) and project tags.\nCAUSAL LINKS \u2192 use in Q3. UNCHANGED \u2192 source=\"recap\", Q0 handles. TASKS \u2192 active work.\n\n\u2500\u2500 CAUSAL WIRING (output AFTER classified[]) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nAfter all items are in classified[], output causal_wiring[] with full batch visibility.\n\nQ3: TRIGGERED_BY \u2014 \"In a world where (X) didn't happen, would (Y) still have occurred?\"\n YES \u2192 no link. NO \u2192 X goes in triggered_by.\n UNCERTAIN \u2192 no link. Wrong wiring (false narrative) costs more than missing wiring (recoverable).\n CIRCULARITY GUARD: before adding A\u2192B, check \"Did I already put B\u2192A?\" YES \u2192 skip.\n Use item IDs for batch, block labels for PROJECT GRAPH. Genesis \u2192 triggered_by: [].\n REPLACEMENTS \"X\u2192Y\": dead_end for X is triggered_by the decision that adopted Y.\n HIERARCHY: \"Did cause make the DECISION necessary, or only this mechanism?\"\n Decision \u2192 triggered_by on parent. Mechanism only \u2192 triggered_by on child.\n\nQ4: BASED_ON \u2014 \"Would this claim be UNSUPPORTED without that specific finding?\"\n NO \u2192 no link. YES \u2192 based_on.\n UNCERTAIN \u2192 no link. False evidence link costs more than missing one.\n Applies to conclusions, decisions justified by findings.\n\nQ5: SEMANTIC RELATIONS \u2014 for each item pair in this batch:\n \"Does (X) directly contradict, support, or answer (Y)?\"\n contradicts: opposite claims about the same specific thing.\n supports: independent evidence strengthening the same claim.\n resolves: (X) answers the question or settles the hypothesis (Y) poses.\n\n";
4
+ export declare function callPass2LLM(provider: LLMProvider, pass1Items: Pass1Item[], projectContext: string, prevEntityMap: Array<{
5
+ reference: string;
6
+ resolved_to: string;
7
+ }>, thinkingBudget?: number, sceneCard?: string): Promise<{
8
+ result: Pass2Result | null;
9
+ thinking: string;
10
+ rateLimited: boolean;
11
+ model?: string;
12
+ attempts?: Array<{
13
+ model: string;
14
+ outcome: string;
15
+ }>;
16
+ }>;
17
+ //# sourceMappingURL=pass2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass2.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOzD,eAAO,MAAM,YAAY,2wYA+KxB,CAAC;AAmGF,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,cAAc,SAAO,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,QAAQ,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,CAiDvJ"}