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,498 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // DEBT 5 Phase 3 — ARC EXTRACTION PIPELINE
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // Reads `conversation_turns` rows in a given range (status='pass01_done' from
6
+ // Phase 2's per-turn capture), consolidates them into D1+D4-shaped input
7
+ // (raw transcripts + Pass 0-1 outputs in chronological order, sew-as-event
8
+ // framing), and runs Pass 2-5 over the merged input via the EXISTING runAuto-
9
+ // Reflect checkpoint mechanism (resumeFrom: 'pass2'). After successful
10
+ // extraction, creates a `conversation_turn_ranges` row and flips each turn's
11
+ // status to 'extracted' with pairing_range_id set.
12
+ //
13
+ // Design anchors:
14
+ // docs/DEBT5-ATOMIC-AND-ARC-EXTRACTION.md §1.5 (D4 sew-as-event)
15
+ // §2.5 (re-extraction semantics)
16
+ // §2.5.1 (D2 dedup principle — relies on source_excerpt + value)
17
+ // §2.6 (Pass routing — arc runs Pass 2-5)
18
+ // §2.6.2 (D1 raw-transcripts-at-arc input layout)
19
+ // docs/DEBT5-INVENTORY-MAP.md §6 (ReflectJob.precomputedPassN pattern reused here)
20
+ //
21
+ // What this file does NOT do (deferred to later phases):
22
+ // - Phase 4: dedup-by-source-and-value at pre-Pass-3 / write-time
23
+ // - Phase 5: source_excerpt propagation Pass 1 → 2 → 3
24
+ // - Phase 6: D4 Pass 2 prompt addition (sew-as-event instruction in pass2a.ts)
25
+ // - Phase 7: triggers (phase tag detector / MCP tool / API endpoint)
26
+ // - Phase 8: backend handler (idempotency + rate-limit + range validation)
27
+ // - Phase 9: extracted_from + source_excerpt wiring at createBlock sites
28
+ // - Phase 10: safety nets (PreCompact hook + inactivity timeout)
29
+ import { runAutoReflect } from "./pipeline.js";
30
+ import { getLLMProvider } from "../../engine/providers/index.js";
31
+ import { pipelineV2Enabled, arcMaxRetries } from "./comprehend.js";
32
+ import { runComprehendFrontHalf } from "./v2-integrate.js";
33
+ import { isInsufficientCreditError } from "../../engine/providers/failure-policy.js";
34
+ import { writeSpendPauseFile, creditExhausted } from "./cost-guard.js";
35
+ import { setSpendPaused } from "../../routes/state.js";
36
+ import { callPass0LLM, formatSceneCard } from "./pass0.js";
37
+ import { callPass1LLM } from "./pass1.js";
38
+ // Lazy-capture safety net: turns captured WITHOUT Pass 0-1 (NODEDEX_V2_LAZY_CAPTURE)
39
+ // rely on the v2 arc engine, which re-reads raw. If v2 FAILS at arc, the v1 path
40
+ // needs items — so fill Pass 0-1 now from each turn's raw transcript. Runs ONLY on
41
+ // (lazy-capture + v2 failed + empty items): the rare path. Reuses the SAME Pass 0-1
42
+ // the capture would have run, persisting back to the turn so v1 + provenance work.
43
+ export async function lazyFillPass01(db, provider, turns) {
44
+ for (const t of turns) {
45
+ let tr = {};
46
+ try {
47
+ tr = JSON.parse(t.transcript_json);
48
+ }
49
+ catch { /* malformed — degrade to empty */ }
50
+ try {
51
+ const p0 = await callPass0LLM(provider, tr.agent_thinking ?? "", tr.agent_response ?? "", [], [], tr.user_message ?? "");
52
+ const sceneCard = p0.result ? formatSceneCard(p0.result) : "";
53
+ const p1 = await callPass1LLM(provider, tr.agent_thinking ?? "", tr.agent_response ?? "", "", sceneCard, [], tr.user_message ?? "");
54
+ // REFILL (not updateConversationTurnPass01): the turn is ALREADY pass01_done
55
+ // (lazy capture marked it so as the arc-ready signal) — write items in place.
56
+ db.refillConversationTurnPass01(t.id, JSON.stringify({ scene_card: p0.result ?? null, items: p1.result?.items ?? [] }));
57
+ }
58
+ catch (e) {
59
+ console.warn(`[arc-extract] lazy-fill Pass 0-1 failed for turn ${t.turn_number}: ${e?.message ?? e}`);
60
+ }
61
+ }
62
+ }
63
+ // ─── Phase 8: backend handler — idempotency + rate-limit + min-range guard ───
64
+ //
65
+ // These guards are CENTRAL — every trigger path (phase tag detector, MCP tool,
66
+ // API endpoint) goes through runArcExtraction, so wiring the checks here covers
67
+ // all three at once. Per design §3.5.
68
+ //
69
+ // Idempotency (in-memory): a Set of agent_ids currently being extracted.
70
+ // Second trigger while one's in flight → returns 'in_progress' without
71
+ // running. Survives single-process lifetime only; restart resets. For
72
+ // multi-process deployments, a DB-backed lock would replace this — Phase 9+
73
+ // work if needed.
74
+ //
75
+ // Rate-limit: last-extraction-end timestamp per agent. Default 60s gap;
76
+ // configurable via NODEDEX_ARC_RATE_LIMIT_SECONDS env.
77
+ //
78
+ // Min-range: < 2 turns means atomic extraction was enough — arc adds no value.
79
+ // Returns 'min_range_too_small' (caller can log + ignore).
80
+ const _arcInProgress = new Set(); // agent_ids currently extracting
81
+ const _arcLastEndTs = new Map(); // agent_id → epoch ms of last successful end
82
+ function getRateLimitMs() {
83
+ const envSec = process.env.NODEDEX_ARC_RATE_LIMIT_SECONDS;
84
+ if (envSec) {
85
+ const n = Number.parseInt(envSec, 10);
86
+ if (Number.isFinite(n) && n >= 0)
87
+ return n * 1000;
88
+ }
89
+ return 60_000; // default 60s per design §3.5
90
+ }
91
+ // Exported for tests — reset the in-memory guards. NOT for production callers.
92
+ export function _resetArcGuardsForTests() {
93
+ _arcInProgress.clear();
94
+ _arcLastEndTs.clear();
95
+ }
96
+ // ─── runArcExtraction — the orchestrator ──────────────────────────────────────
97
+ export async function runArcExtraction(db, opts) {
98
+ // ── Phase 8 guard 1: idempotency (in-memory) ───────────────────────────────
99
+ // Reject if an arc extraction is already in flight for this agent_id. The
100
+ // caller (hook / API / MCP) should retry later — the in-flight extraction
101
+ // will catch the same range (or a superset).
102
+ if (_arcInProgress.has(opts.agent_id)) {
103
+ return {
104
+ range_id: null,
105
+ turns_consumed: 0,
106
+ status: 'in_progress',
107
+ reflect_result: null,
108
+ };
109
+ }
110
+ // ── Phase 8 guard 2: rate-limit ────────────────────────────────────────────
111
+ // Reject if the last successful extraction for this agent ended < N seconds
112
+ // ago. Per design §3.5 + Rule 4: don't trust LLM restraint as the sole guard
113
+ // — the agent might emit <!-- arc-extract --> twice in close succession,
114
+ // or two trigger paths (phase tag + hook fallback) might fire in parallel.
115
+ const rateLimitMs = getRateLimitMs();
116
+ const lastEnd = _arcLastEndTs.get(opts.agent_id);
117
+ if (lastEnd !== undefined) {
118
+ const elapsed = Date.now() - lastEnd;
119
+ if (elapsed < rateLimitMs) {
120
+ return {
121
+ range_id: null,
122
+ turns_consumed: 0,
123
+ status: 'rate_limited',
124
+ reflect_result: null,
125
+ rate_limited_retry_after_ms: rateLimitMs - elapsed,
126
+ };
127
+ }
128
+ }
129
+ // 1. Resolve the range. Default to "all pass01_done turns for this agent."
130
+ // Explicit start/end let callers (MCP tool, API, re-extract) scope tighter.
131
+ const candidatesAll = db.listConversationTurnsByAgent(opts.agent_id, { status: 'pass01_done' });
132
+ if (candidatesAll.length === 0) {
133
+ return {
134
+ range_id: null,
135
+ turns_consumed: 0,
136
+ status: 'no_turns',
137
+ reflect_result: null,
138
+ };
139
+ }
140
+ const startTurn = opts.start_turn ?? candidatesAll[0].turn_number;
141
+ const endTurn = opts.end_turn ?? candidatesAll[candidatesAll.length - 1].turn_number;
142
+ // Re-read with the explicit range bounds (in case caller scoped tighter than 'all').
143
+ let turnsInRange = db.listConversationTurnsByAgent(opts.agent_id, {
144
+ status: 'pass01_done',
145
+ minTurn: startTurn,
146
+ maxTurn: endTurn,
147
+ });
148
+ if (turnsInRange.length === 0) {
149
+ return { range_id: null, turns_consumed: 0, status: 'no_turns', reflect_result: null, start_turn: startTurn, end_turn: endTurn };
150
+ }
151
+ // ── Phase 8 guard 3: minimum range size ────────────────────────────────────
152
+ // Arc extraction over < 2 turns adds no value over atomic — refuse and let
153
+ // caller try later when more turns have accumulated. Per design §3.5.
154
+ // Exception: re_extract bypasses the min check (caller explicitly wants
155
+ // to reprocess even a single turn — they've made the cost-benefit call).
156
+ if (turnsInRange.length < 2 && !opts.re_extract) {
157
+ return {
158
+ range_id: null,
159
+ turns_consumed: turnsInRange.length,
160
+ status: 'min_range_too_small',
161
+ start_turn: startTurn,
162
+ end_turn: endTurn,
163
+ reflect_result: null,
164
+ };
165
+ }
166
+ // followup 1: on EVERY failure path below, mark the range's still-pending turns
167
+ // with the error (non-destructive — they stay pass01_done/re-extractable) so the
168
+ // freshness surface can tell "queued/coming" from "last attempt failed". Defined
169
+ // here so no failure return can forget it.
170
+ const failClean = (status, error) => {
171
+ try {
172
+ db.markConversationTurnsExtractFailed(opts.agent_id, startTurn, endTurn, error);
173
+ }
174
+ catch { /* best-effort marker */ }
175
+ return { range_id: null, turns_consumed: turnsInRange.length, status, start_turn: startTurn, end_turn: endTurn, reflect_result: null, error };
176
+ };
177
+ // ── Phase 8: acquire the in-flight marker BEFORE the heavy work ──
178
+ // We hold this through the pipeline run + DB writes. The try/finally
179
+ // below ensures we release on every exit path, including thrown errors.
180
+ _arcInProgress.add(opts.agent_id);
181
+ try {
182
+ // 2. Build consolidated input — the D1+D4 transformation.
183
+ // Raw transcripts (D1) + scene cards + Pass-1 items merged with turn-prefixed
184
+ // IDs (so Pass 2c can wire cross-turn relations unambiguously). Sew-as-event
185
+ // header (D4) instructs Pass 2 to treat as ONE continuous arc.
186
+ let consolidated = buildArcConsolidatedInput(opts.agent_id, turnsInRange);
187
+ // ─── PIPELINE v2 (TRANSFORM) — default ON (NODEDEX_PIPELINE_V2) ──────────────
188
+ // When ON, replace the extraction front-half (Stage C + the resumeFrom:'pass2'
189
+ // checkpoint over per-turn Pass-0/1 items) with ONE holistic COMPREHEND read of
190
+ // the RAW arc transcript → a resumeFrom:'pass3' checkpoint. The recognizer
191
+ // (inside runComprehendFrontHalf) does Stage C's root-matching job, so Stage C
192
+ // is skipped here.
193
+ //
194
+ // V2-ONLY failure policy (2026-06-16) — replaces the old "auto-fall-to-v1" degrade:
195
+ // • checkpoint set → success, run the back-half.
196
+ // • reason 'empty' → v2 read the arc and judged NO residue worth saving.
197
+ // A clean, FINAL outcome — we trust the comprehender
198
+ // (no v1 double-check); marks turns extracted, 0 blocks.
199
+ // • failed / threw → BOUNDED-RETRY (arcMaxRetries); on exhaustion FAIL
200
+ // CLEAN (return below) — turns stay re-extractable,
201
+ // NEVER auto-fall to v1. v1 runs ONLY as the explicit
202
+ // off-switch (NODEDEX_PIPELINE_V2=0 → the !checkpoint
203
+ // block below).
204
+ // NOTE: in v2 mode the per-turn pass01 scene-cards/items that
205
+ // buildArcConsolidatedInput assembles go unused — v2 reads the raw transcript
206
+ // instead (intended; v2 replaces that front-half).
207
+ let checkpoint;
208
+ let v2FrontFailed = false; // a real front-half failure that persisted after all retries
209
+ let v2FrontEmpty = false; // v2 ran fine but found no residue worth saving (clean no-op)
210
+ let v2CreditOut = false; // the account ran out of credit mid-extraction (pause, don't burn retries)
211
+ if (pipelineV2Enabled()) {
212
+ const v2Transcript = turnsInRange.map((t) => {
213
+ let tr = {};
214
+ try {
215
+ tr = JSON.parse(t.transcript_json);
216
+ }
217
+ catch { /* malformed — degrade to empty */ }
218
+ const h = `[TURN ${t.turn_number}${t.turn_name ? ` — ${t.turn_name}` : ""}]`;
219
+ return `${h}\nUSER: ${tr.user_message ?? ""}\nAGENT: ${tr.agent_response ?? ""}`;
220
+ }).join("\n\n");
221
+ const maxRetries = arcMaxRetries();
222
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
223
+ try {
224
+ const provider = getLLMProvider();
225
+ const front = await runComprehendFrontHalf(db, provider, v2Transcript);
226
+ if (front.checkpoint) {
227
+ checkpoint = front.checkpoint;
228
+ v2FrontFailed = false;
229
+ console.log(`[arc-extract] PIPELINE v2: ${front.groups} group(s), ${front.blocks} block(s), ${front.filled} filled, recognizer attached=${front.recognizer.attached}`);
230
+ break;
231
+ }
232
+ if (front.reason === 'empty') {
233
+ v2FrontEmpty = true;
234
+ console.log(`[arc-extract] PIPELINE v2: no residue worth saving (empty) — nothing to extract`);
235
+ break;
236
+ }
237
+ // Out of credit → DON'T burn the remaining retries (every one 402s identically).
238
+ // Pause spending + bail; arc fail-cleans below so turns stay re-extractable, and
239
+ // the auto-resume timer re-extracts on top-up.
240
+ if (front.reason === 'insufficient_credit') {
241
+ v2CreditOut = true;
242
+ console.warn(`[arc-extract] PIPELINE v2: insufficient credit — pausing spending, leaving turns re-extractable`);
243
+ break;
244
+ }
245
+ // comprehend_failed / seam1_invalid → a real failure; retry if budget remains.
246
+ v2FrontFailed = true;
247
+ console.warn(`[arc-extract] PIPELINE v2 front-half failed (${front.reason}) — attempt ${attempt + 1}/${maxRetries + 1}`);
248
+ }
249
+ catch (e) {
250
+ if (isInsufficientCreditError(e)) {
251
+ v2CreditOut = true;
252
+ console.warn(`[arc-extract] PIPELINE v2 front-half: insufficient credit — pausing spending, leaving turns re-extractable`);
253
+ break;
254
+ }
255
+ v2FrontFailed = true;
256
+ console.warn(`[arc-extract] PIPELINE v2 front-half threw (${e?.message ?? e}) — attempt ${attempt + 1}/${maxRetries + 1}`);
257
+ }
258
+ }
259
+ }
260
+ // CREDIT-OUT (arc) — pause spending + fail clean. Unlike the per-turn queue (which
261
+ // requeues into a paused drain), arc capture stores turns RAW and /extract consumes
262
+ // them only on SUCCESS, so failing clean already leaves the whole arc re-extractable.
263
+ // Setting the spend-pause makes the TUI alert + auto-resume timer apply uniformly: on
264
+ // top-up the pause clears and the next arc trigger re-extracts. Belt-and-suspenders:
265
+ // re-check the live balance so a stale 'insufficient_credit' reason can't false-pause.
266
+ if (v2CreditOut && !checkpoint) {
267
+ const c = await creditExhausted();
268
+ setSpendPaused(true);
269
+ writeSpendPauseFile(`credit exhausted${c.remaining != null ? ` — remaining $${c.remaining.toFixed(2)}` : ""} (auto-resume on top-up)`);
270
+ return failClean('pipeline_incomplete', 'insufficient credit — spending paused; turns left re-extractable (auto-resume on top-up)');
271
+ }
272
+ // V2-ONLY FAIL CLEAN: v2 was the engine, it truly failed (not just empty), and the
273
+ // retry budget is spent. Do NOT fall through to v1 and do NOT mark turns extracted —
274
+ // return so the arc stays re-extractable (a later trigger / a fixed model retries).
275
+ if (v2FrontFailed && !checkpoint) {
276
+ return failClean('pipeline_incomplete', `v2 COMPREHEND front-half failed after ${arcMaxRetries() + 1} attempt(s) — turns left re-extractable`);
277
+ }
278
+ // ⚠ OLD v1 PIPELINE — DO NOT TURN ON. v2 is unconditional now (pipelineV2Enabled()
279
+ // always returns true), so on the v2 path a checkpoint = success, a real failure
280
+ // already returned above, and 'empty' is a clean 0-block result. This v1 block is
281
+ // intentionally unreachable — kept in-tree for reference only.
282
+ if (!checkpoint && !v2FrontEmpty) {
283
+ // ⚠ v1 ARC FALLBACK — RETIRED & DISABLED (2026-06-22). Unreachable: v2 is
284
+ // unconditional (pipelineV2Enabled() always true), so success set `checkpoint`, a real
285
+ // failure already returned failClean above, credit-out returned above, and 'empty' set
286
+ // v2FrontEmpty. Reaching here = a routing regression. FAIL CLEAN (turns stay
287
+ // re-extractable) instead of silently running the retired v1 arc path (lazyFillPass01 +
288
+ // Stage C). The code below is kept verbatim for the follow-up deletion PR.
289
+ return failClean('pipeline_incomplete', 'v1 arc fallback is retired and disabled — v2 produced neither a checkpoint nor an ' +
290
+ 'empty result (routing bug); turns left re-extractable');
291
+ }
292
+ // 4. Invoke runAutoReflect with the checkpoint — OR, when v2 judged the arc empty,
293
+ // skip the back-half and synthesize a clean 0-block result. turnNumber/turnName
294
+ // are LEFT undefined deliberately — arc extraction is NOT a new "turn"; it
295
+ // consumes existing pass01_done turns. The Phase 2 INSERT path checks
296
+ // (agentId && turnNumber !== undefined), so it's correctly skipped here.
297
+ const runBackHalf = (cp) => runAutoReflect(db, consolidated.agentResponse, // sew-as-event narrative + raw transcripts
298
+ [], // loadedBlocks — empty; Phase 9 may wire if needed
299
+ consolidated.userMessage, // chronological aggregate of user messages
300
+ consolidated.agentThinking, // chronological aggregate of agent thinking
301
+ undefined, // embeddings
302
+ [], // recalledBlocks
303
+ opts.agent_id, // agentId — used for session-state labels
304
+ cp);
305
+ let reflectResult;
306
+ if (v2FrontEmpty) {
307
+ // v2-only: no residue worth saving. No back-half; record a clean 0-block
308
+ // extraction (turns consumed, range created, nothing saved).
309
+ reflectResult = { saved: 0, updated: 0, skipped: 0, saved_labels: [], uncertain_count: 0, created_blocks: [], updated_blocks: [] };
310
+ }
311
+ else {
312
+ try {
313
+ reflectResult = await runBackHalf(checkpoint);
314
+ }
315
+ catch (e) {
316
+ return failClean('pipeline_failed', String(e?.message ?? e).slice(0, 500));
317
+ }
318
+ // ─── BACK-HALF BOUNDED RE-QUEUE (v2-only fail-clean; fixes silent-loss) ─────
319
+ // runAutoReflect RETURNS a checkpoint (it does not throw) when Pass 3 dropped
320
+ // items (truncation / mandatory-item miss). The per-turn QUEUE consumes that to
321
+ // re-run from pass3; the inline arc path has no queue, so we drive the SAME
322
+ // resume here, bounded by arcMaxRetries. The re-run is idempotent — Pass 3 seeds
323
+ // allBlocks from the DB, so already-saved blocks hit the label-dedup MERGE path
324
+ // (no dups) and only the still-missing items are created. The OLD code IGNORED
325
+ // this checkpoint and marked turns extracted with 0 saved blocks = silent,
326
+ // unrecoverable loss; this loop + the fail-clean below close that hole.
327
+ const maxBack = arcMaxRetries();
328
+ for (let backRetries = 1; reflectResult.checkpoint && backRetries <= maxBack; backRetries++) {
329
+ console.warn(`[arc-extract] back-half incomplete (resumeFrom=${reflectResult.checkpoint.resumeFrom}, saved=${reflectResult.saved}) — inline retry ${backRetries}/${maxBack}`);
330
+ try {
331
+ reflectResult = await runBackHalf(reflectResult.checkpoint);
332
+ }
333
+ catch (e) {
334
+ return failClean('pipeline_failed', String(e?.message ?? e).slice(0, 500));
335
+ }
336
+ }
337
+ // Still incomplete after the retry budget → FAIL CLEAN: do NOT mark turns
338
+ // extracted. Turns stay pending = re-extractable (never silent loss).
339
+ if (reflectResult.checkpoint) {
340
+ console.error(`[arc-extract] back-half STILL incomplete after ${maxBack} retr(ies) (resumeFrom=${reflectResult.checkpoint.resumeFrom}) — failing clean, turns left re-extractable`);
341
+ return failClean('pipeline_incomplete', `Pass 3 incomplete after ${maxBack + 1} attempt(s) — turns left re-extractable`);
342
+ }
343
+ }
344
+ // 5. Pipeline succeeded — record the extraction event and flip turn statuses.
345
+ // Per design §2.5: re-extraction creates a NEW range (extraction_type=
346
+ // 're-extract') rather than mutating prior. Old turns' pairing_range_id
347
+ // POINTS to the original; re-extract creates new blocks linked to new range.
348
+ // For first-extraction (default), extraction_type='arc'.
349
+ const rangeRow = db.createConversationTurnRange({
350
+ agent_id: opts.agent_id,
351
+ start_turn_number: startTurn,
352
+ end_turn_number: endTurn,
353
+ extraction_type: opts.re_extract ? 're-extract' : 'arc',
354
+ trigger_source: opts.trigger_source,
355
+ pipeline_run_id: null, // Phase 8 wires this through from the backend handler
356
+ });
357
+ for (const turn of turnsInRange) {
358
+ try {
359
+ db.markConversationTurnExtracted(turn.id, rangeRow.id);
360
+ }
361
+ catch (e) {
362
+ // Defensive — a turn that's already 'extracted' (re-extract path) would
363
+ // have failed UPDATE. Phase 8's idempotency layer should catch this
364
+ // before we reach here; tolerate for now and log.
365
+ console.warn(`[arc-extract] mark-extracted failed for ct ${turn.id}: ${e?.message}`);
366
+ }
367
+ }
368
+ // ── Phase 9: extracted_from provenance — record block → range join ────────
369
+ // For every block runAutoReflect created during this arc run, write a row to
370
+ // block_extractions linking it to rangeRow.id. The reflectResult only carries
371
+ // labels (not ids), so look up each by label. Failures here are logged but
372
+ // not fatal — the arc itself succeeded; the provenance is a secondary write.
373
+ let provenanceRecorded = 0;
374
+ let provenanceMisses = 0;
375
+ for (const cb of (reflectResult.created_blocks ?? [])) {
376
+ try {
377
+ const block = db.getBlock(cb.label);
378
+ if (!block) {
379
+ provenanceMisses++;
380
+ continue;
381
+ }
382
+ const created = db.recordBlockExtraction(block.id, rangeRow.id);
383
+ if (created)
384
+ provenanceRecorded++;
385
+ }
386
+ catch (e) {
387
+ console.warn(`[arc-extract] recordBlockExtraction failed for label="${cb.label}": ${e?.message}`);
388
+ provenanceMisses++;
389
+ }
390
+ }
391
+ if (provenanceRecorded > 0 || provenanceMisses > 0) {
392
+ console.log(`[arc-extract] provenance: ${provenanceRecorded} block_extractions recorded, ${provenanceMisses} misses (range_id=${rangeRow.id})`);
393
+ }
394
+ // ─── STAGE FLAG (Sub-step 1.4 — now active, in pipeline.ts) ───────────────
395
+ // The atomic_dup_candidate flag writes live in pipeline.ts after the Pass 3
396
+ // createBlock loop (after stampFlowRolesAndChains) because that's where
397
+ // item_id → block_id resolution becomes possible via itemIdToLabel. This
398
+ // arc-pipeline.ts level sees the COMPLETED reflect_result and could add
399
+ // ARC-level flag writes (e.g., project_dup_candidate post-AUDIT) in a
400
+ // future slice — Stage AUDIT (Slice 2) is the natural owner.
401
+ //
402
+ // origin_range_id backfill: flags written from pipeline.ts know nothing
403
+ // about arc range_id; could be backfilled here from rangeRow.id if the
404
+ // async reviewer needs the arc-attribution. Deferred until Slice 2
405
+ // reviewer surfaces the need.
406
+ // Set rate-limit timestamp on success ONLY — failure shouldn't block retry.
407
+ _arcLastEndTs.set(opts.agent_id, Date.now());
408
+ return {
409
+ range_id: rangeRow.id,
410
+ turns_consumed: turnsInRange.length,
411
+ status: 'extracted',
412
+ start_turn: startTurn,
413
+ end_turn: endTurn,
414
+ reflect_result: reflectResult,
415
+ };
416
+ }
417
+ finally {
418
+ // Release the in-progress marker on EVERY exit path (success, failure,
419
+ // thrown exception). Done in finally so even a runtime error in DB
420
+ // writes above doesn't leave the agent permanently locked.
421
+ _arcInProgress.delete(opts.agent_id);
422
+ }
423
+ }
424
+ // ─── buildArcConsolidatedInput — the D1+D4 input transformation ──────────────
425
+ //
426
+ // Converts N conversation_turn rows into a single arc-shaped input for Pass 2-5.
427
+ // Per design §2.6.2:
428
+ // - Inter-turn order: chronological (oldest first) — caller already passed in
429
+ // ASC order (listConversationTurnsByAgent sorts), so we trust it.
430
+ // - Intra-turn order: scene_card → items → raw transcript (dependency order;
431
+ // Pass 1 consumed Pass 0; raw transcript is the source under both).
432
+ // - Raw transcripts INCLUDED (D1, post-cap-bump): visible to Pass 2c for
433
+ // sew-as-event accuracy.
434
+ // - Item IDs prefixed `item_T<turn>_<original>` (D2 dedup composability).
435
+ // - Sew-as-event header (D4) prepended to instruct Pass 2 to treat as ONE
436
+ // continuous event.
437
+ export function buildArcConsolidatedInput(agentId, turns) {
438
+ const startTurn = turns[0].turn_number;
439
+ const endTurn = turns[turns.length - 1].turn_number;
440
+ const sewHeader = `[ARC EXTRACTION — agent_id=${agentId}, turns ${startTurn}-${endTurn}, ${turns.length} turn(s)]
441
+ This input represents ONE CONTINUOUS CONVERSATION ARC, not N independent turns.
442
+ - Items mentioned in multiple turns are the SAME item — sew them together, do NOT emit duplicates needing supersedes.
443
+ - Reason about cross-turn relations (causal chains, decisions built progressively, dead-ends abandoned then re-considered).
444
+ - Turn headers [TURN N] mark sequence only; the conversation flowed as one thought.
445
+ `;
446
+ const userMessageParts = [];
447
+ const agentResponseParts = [sewHeader];
448
+ const agentThinkingParts = [];
449
+ const sceneCardParts = [];
450
+ const sceneCardRawList = [];
451
+ const mergedItems = [];
452
+ for (const turn of turns) {
453
+ let transcript = {};
454
+ try {
455
+ transcript = JSON.parse(turn.transcript_json);
456
+ }
457
+ catch { /* malformed — degrade to empty */ }
458
+ const turnHeader = `[TURN ${turn.turn_number}${turn.turn_name ? ` — ${turn.turn_name}` : ''}]`;
459
+ if (transcript.user_message) {
460
+ userMessageParts.push(`${turnHeader}\nUSER: ${transcript.user_message}`);
461
+ }
462
+ if (transcript.agent_response) {
463
+ agentResponseParts.push(`${turnHeader}\nAGENT: ${transcript.agent_response}`);
464
+ }
465
+ if (transcript.agent_thinking) {
466
+ agentThinkingParts.push(`${turnHeader}\nTHINKING: ${transcript.agent_thinking}`);
467
+ }
468
+ // Pass 0-1 outputs from per-turn capture (Phase 2)
469
+ let pass01 = null;
470
+ try {
471
+ pass01 = turn.pass01_output_json ? JSON.parse(turn.pass01_output_json) : null;
472
+ }
473
+ catch { /* */ }
474
+ if (pass01?.scene_card) {
475
+ sceneCardRawList.push({ turn: turn.turn_number, scene_card: pass01.scene_card });
476
+ sceneCardParts.push(`[TURN ${turn.turn_number} SCENE CARD]\n${typeof pass01.scene_card === 'string' ? pass01.scene_card : JSON.stringify(pass01.scene_card, null, 2)}`);
477
+ }
478
+ if (Array.isArray(pass01?.items)) {
479
+ for (const item of pass01.items) {
480
+ // Prefix item IDs with turn number per §2.6.2. Strip any existing
481
+ // 'item_' prefix to avoid `item_T2_item_1` (some Pass 1 implementations
482
+ // emit ids like 'item_1', others bare integers as strings — both ok).
483
+ const cleanId = String(item.id ?? '').replace(/^item_/, '') || `${mergedItems.length + 1}`;
484
+ const arcId = `item_T${turn.turn_number}_${cleanId}`;
485
+ mergedItems.push({ ...item, id: arcId });
486
+ }
487
+ }
488
+ }
489
+ return {
490
+ agentResponse: agentResponseParts.join('\n\n'),
491
+ userMessage: userMessageParts.join('\n\n'),
492
+ agentThinking: agentThinkingParts.join('\n\n'),
493
+ sceneCardFormatted: sceneCardParts.join('\n\n---\n\n'),
494
+ sceneCardMerged: { merged_turns: sceneCardRawList, agent_id: agentId, start_turn: startTurn, end_turn: endTurn },
495
+ items: mergedItems,
496
+ };
497
+ }
498
+ //# sourceMappingURL=arc-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arc-pipeline.js","sourceRoot":"","sources":["../../../src/middleware/reflect/arc-pipeline.ts"],"names":[],"mappings":"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"}