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,610 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // PIPELINE v2 — PER-GROUP COMPREHEND (the structural truncate fix; design §17)
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // Splits the one monolithic COMPREHEND call (comprehend.ts) into two, each with ONE
6
+ // job, so each call's OUTPUT is BOUNDED and can't run away (the 307s truncate-retry
7
+ // root cause):
8
+ // CALL 1 SEGMENT (1 call, whole transcript) → the group SKELETON only.
9
+ // CALL 2 PRODUCE (N calls, one per group, PARALLEL) → one group's blocks + links.
10
+ // A thin stitch reassembles the EXISTING ComprehendResult shape, so everything
11
+ // downstream (converter, Pass 2b, recognizer, checkpoint, Pass 3/4/5) is UNCHANGED.
12
+ //
13
+ // Default OFF: NODEDEX_COMPREHEND_PERGROUP=1 (only meaningful under v2). When off,
14
+ // runComprehendFrontHalf uses the original single callComprehendLLM.
15
+ //
16
+ // Prompt discipline (PROMPT-CHARTER): the STATE CONVENTION / worth-spine / STEP
17
+ // text is reused VERBATIM from COMPREHEND_PROMPT (copied, not refactored, to leave
18
+ // the validated 1-call prompt byte-untouched), recomposed for each narrower job.
19
+ // Each stage's MUST-NOTs (design §17.2) are stated in-prompt: SEGMENT never produces
20
+ // content; PRODUCE never re-decides the root or links across threads.
21
+ import { getThinkingBudget } from "./config.js";
22
+ import { validateComprehendResult, summarizeWarnings, comprehendModel, } from "./comprehend.js";
23
+ import { appendFileSync } from "node:fs";
24
+ export function pergroupEnabled() {
25
+ // DEFAULT ON since 2026-06-12 (v2 promoted to default; chooseHolistic still
26
+ // size-decides holistic-vs-pergroup per arc). NODEDEX_COMPREHEND_PERGROUP=0 opts out.
27
+ return process.env.NODEDEX_COMPREHEND_PERGROUP !== "0";
28
+ }
29
+ /** DIAGNOSTIC (flag-gated NODEDEX_DEBUG_PERGROUP=1): dump what each group was told to
30
+ * extract (topic + turn_numbers — note PRODUCE also gets the FULL transcript) and what
31
+ * each block CITES (provenance), so cross-group duplicates can be traced to their cause
32
+ * (overlapping turn_numbers / the same source line claimed by >1 group). Off = no-op. */
33
+ function dumpPerGroupDebug(seg, stitched) {
34
+ const file = process.env.NODEDEX_DEBUG_PERGROUP_FILE || "C:/tmp/pergroup-debug.jsonl";
35
+ const segByGid = new Map((seg.groups ?? []).map((g) => [g.group_id, g]));
36
+ const rec = {
37
+ ts: new Date().toISOString(),
38
+ segment_reasoning: seg.reasoning ?? "",
39
+ groups: (stitched.groups ?? []).map((g) => {
40
+ const sg = segByGid.get(g.group_id);
41
+ return {
42
+ group_id: g.group_id,
43
+ topic: sg?.topic ?? "",
44
+ turn_numbers: sg?.turn_numbers ?? [],
45
+ blocks: (g.blocks ?? []).map((b) => ({
46
+ local_id: b.local_id, type: b.type, unique: b.unique, essence: b.essence, provenance: b.provenance,
47
+ keep_reason: b.keep_reason, type_reasoning: b.type_reasoning,
48
+ })),
49
+ };
50
+ }),
51
+ };
52
+ try {
53
+ appendFileSync(file, JSON.stringify(rec) + "\n");
54
+ }
55
+ catch { /* diagnostic only */ }
56
+ }
57
+ export const SEGMENT_PROMPT = `You read ONE complete work session between a user and an AI agent and split it into
58
+ the THREADS it contains. You do NOT extract any content yet — only the thread
59
+ structure. Read the whole session first.
60
+
61
+ Decide EVERYTHING by reasoning about MEANING in this session's context — what each
62
+ part was trying to DO. Never decide by matching surface words, phrasings, or
63
+ connectors. The same meaning appears in countless wordings across domains; you are
64
+ reading for the structure beneath the words.
65
+
66
+ ── STATE CONVENTION ─────────────────────────────────────────────────────────
67
+ "State" = text in the TRANSCRIPT below. Your training knowledge and "what's
68
+ commonly known" are NOT state. If it is not in the transcript, it is not a thread
69
+ here. Familiarity ≠ recorded.
70
+
71
+ ── SEGMENT into GROUPS (clusters under a root) ──────────────────────────────
72
+ Split the session into GROUPS. A group is one coherent sub-thread — a single
73
+ problem worked, question pursued, or thing decided. KEEP DISTINCT SUB-THREADS AS
74
+ SEPARATE GROUPS even when they belong to the same overall project; one sub-thread
75
+ scattered across the session is one group. Judge by what the participants were
76
+ trying to do, not by topic words. Do NOT collapse several sub-threads into one big
77
+ group — keep them fine-grained.
78
+
79
+ THEN assign each group a provisional_project — the ONE overarching ROOT it belongs
80
+ to. The ROOT is the project; the GROUP is a CLUSTER under it; ONE root has MANY
81
+ clusters. Sub-threads of the same overall effort SHARE a root but STAY SEPARATE
82
+ GROUPS — same root, several clusters; do NOT merge them into one group.
83
+ • Use a DIFFERENT provisional_project ONLY for a genuinely separate topic — a
84
+ real context-switch or an unrelated tangent.
85
+ • A separate root must have a NAMEABLE SUBJECT: you must be able to say what the
86
+ group's work is ABOUT without referring to the speaker's own remembering,
87
+ reasoning, or composing of replies in this conversation. Recalling, weighing,
88
+ and planning how to respond are the MEANS of every conversation, never a topic
89
+ of their own — claims born of that procedure belong under the root of the work
90
+ they serve.
91
+ • When unsure whether two groups share a root, prefer the SAME root — splitting
92
+ one topic across many roots (fragmentation) is worse than a slightly-broad root.
93
+ NAME the root with the most SPECIFIC identifier the session gives the SUBJECT the work
94
+ is ABOUT — named as specifically as the session itself names it. NEVER a generic
95
+ category word, a placeholder, or the group_id; if nothing that specific is named, use
96
+ the clearest phrase for what the work is about — never a bare "group"/number. Project
97
+ names are lowercase with hyphens only (no underscores), and provisional_project must
98
+ always be filled. This is provisional; cross-SESSION matching to existing roots happens later.
99
+
100
+ For each group, also list turn_numbers: the [TURN N] numbers whose content belongs
101
+ to this thread. A turn may belong to more than one group, and a thread may span
102
+ non-contiguous turns — list every turn the thread touches.
103
+
104
+ Output ONLY the thread structure: each group's group_id, topic, provisional_project
105
+ (the root), and turn_numbers. Do NOT produce any blocks, fields, content, or links —
106
+ a later step extracts those, one thread at a time. You need not emit a group for
107
+ pure greeting/closing chatter that did no work.`;
108
+ const SEGMENT_SCHEMA = {
109
+ type: "object",
110
+ properties: {
111
+ groups: {
112
+ type: "array",
113
+ items: {
114
+ type: "object",
115
+ properties: {
116
+ group_id: { type: "string" },
117
+ topic: { type: "string" },
118
+ provisional_project: { type: "string" },
119
+ turn_numbers: { type: "array", items: { type: "number" } },
120
+ },
121
+ required: ["group_id", "topic", "provisional_project"],
122
+ },
123
+ },
124
+ reasoning: { type: "string" },
125
+ },
126
+ required: ["groups"],
127
+ };
128
+ /** Run the SEGMENT call. Tiny maxOutputTokens (just the skeleton) — bounded by
129
+ * construction. Graph-blind (transcript only), like callComprehendLLM. */
130
+ export async function callSegmentLLM(provider, transcript, thinkingBudget = 2048) {
131
+ const userInput = `TRANSCRIPT (one work session — read all of it, then list its threads):\n\n${transcript}`;
132
+ const r = await provider.generateStructured(SEGMENT_PROMPT, userInput, SEGMENT_SCHEMA, { thinkingBudget: getThinkingBudget(thinkingBudget), maxOutputTokens: 4096, modelOverride: comprehendModel() });
133
+ return { result: r.result ?? null, rateLimited: r.rateLimited, model: r.model, usage: r.usage };
134
+ }
135
+ // SEAM 1.5 — validate the skeleton before fanning out to PRODUCE.
136
+ export function validateSegmentResult(result) {
137
+ const errors = [];
138
+ const warnings = [];
139
+ const r = result;
140
+ if (!r || typeof r !== "object" || !Array.isArray(r.groups)) {
141
+ errors.push({ severity: "error", message: "segment result.groups is missing or not an array" });
142
+ return { valid: false, errors, warnings };
143
+ }
144
+ if (r.groups.length === 0)
145
+ return { valid: true, errors, warnings }; // no residue — valid
146
+ const seen = new Set();
147
+ for (const g of r.groups) {
148
+ const gid = g?.group_id;
149
+ if (!gid) {
150
+ errors.push({ severity: "error", message: "group missing group_id" });
151
+ continue;
152
+ }
153
+ if (seen.has(gid))
154
+ errors.push({ severity: "error", message: `duplicate group_id "${gid}"`, group_id: gid });
155
+ seen.add(gid);
156
+ if (!g.topic || !String(g.topic).trim())
157
+ warnings.push({ severity: "warning", message: "group missing topic", group_id: gid });
158
+ if (!g.provisional_project || !String(g.provisional_project).trim())
159
+ warnings.push({ severity: "warning", message: "group missing provisional_project", group_id: gid });
160
+ }
161
+ return { valid: errors.length === 0, errors, warnings };
162
+ }
163
+ export const PRODUCE_PROMPT = `You are extracting ONE thread from a work session between a user and an AI agent.
164
+ The whole transcript is given for context, but you extract ONLY the thread identified
165
+ below — its TOPIC and PROJECT are already decided (do not change them) and its turns
166
+ are listed.
167
+
168
+ Decide EVERYTHING by reasoning about MEANING in this session's context — what role
169
+ each piece played in what actually happened here. Never decide by matching surface
170
+ words, phrasings, or connectors. The same meaning appears in countless wordings
171
+ across domains; you are reading for the structure beneath the words.
172
+
173
+ ── STATE CONVENTION ─────────────────────────────────────────────────────────
174
+ "State" = text in the TRANSCRIPT below. Your training knowledge and "what's
175
+ commonly known" are NOT state. Every block must quote a verbatim excerpt from the
176
+ transcript as its provenance. If it is not in the transcript, do not write it.
177
+ Familiarity ≠ recorded.
178
+
179
+ ── WHAT TO KEEP (reason per candidate, from this thread) ────────────────────
180
+ Keep the irreplaceable RESIDUE of this thread — what was DECIDED, TRIED-AND-
181
+ ABANDONED, CONSTRAINED, OBSERVED, or STATED here — together with the REASONING.
182
+
183
+ The spine question, per candidate:
184
+ "Could a competent model — given the project context but WITHOUT having lived
185
+ this session — already produce this?"
186
+ YES → it is knowledge the model already carries → do not emit.
187
+ NO → it exists only because this session happened → emit it.
188
+
189
+ Asymmetric cost: anything that exists ONLY because this session happened is
190
+ unrecoverable once dropped — not just a decision / dead_end / constraint, but also a
191
+ session-specific observation, measurement, or stated value. Only what the model
192
+ ALREADY carries regenerates for free; a value measured or stated here is not that.
193
+ When unsure → keep.
194
+
195
+ Consulting the agent's own memory is not such a happening. A statement whose subject
196
+ is that MEMORY itself — that what is already stored is complete, was reviewed, or that
197
+ reading it changed nothing — is not residue, even though the reading occurred this
198
+ session; reading memory is not an action in the work. Emit only what the work produced
199
+ about ITS subject, never the agent's reading of what it had already stored.
200
+
201
+ A conclusion's EVIDENCE is residue too — the observation, measurement, or result it
202
+ is reasoned from. Keep it as its own block and ground the conclusion to it
203
+ (based_on / supports); a conclusion saved without what it rests on is
204
+ half the record. Keep that evidence EVEN when nothing links to it yet — a later
205
+ session grounds it; never drop a session-specific observation for lack of a link.
206
+
207
+ Do not emit:
208
+ • an option that was only RAISED in thought — never chosen, entered, or acted on.
209
+ • a bare sequence of steps carrying no reason that nothing rests on — the WHEN with
210
+ no WHY. (A step or value a conclusion is reasoned from is not bare — keep it.)
211
+
212
+ If the same claim appears more than once (e.g. restated in a recap), write it once,
213
+ using its most complete statement. If this thread holds no residue at all — pure
214
+ procedure, scaffolding, or chatter — output no blocks.
215
+
216
+ Every block carries keep_reason: one line, from the session, naming what makes it
217
+ residue (it was chosen / entered-then-abandoned / imposed / measured / asserted by
218
+ a party), or why you kept it when it was borderline.
219
+
220
+ Every block also carries type_reasoning: one line stating why THIS type's epistemic
221
+ role fits — what distinguishes it from the neighbouring types, judged by the role the
222
+ block plays for a future reader, not by surface wording. Decide this before you commit
223
+ the type.
224
+
225
+ ── WRITE TYPED blocks for THIS thread ───────────────────────────────────────
226
+ A type is the agent's RELATIONSHIP to the knowledge, not its subject matter — the
227
+ same type spans every domain. For each piece of residue, reason about which
228
+ relationship fits, then FILL THAT TYPE'S unique{} FIELDS — this is the block's
229
+ structured identity and is REQUIRED, never empty. Put the actual content there
230
+ (the choice + reason, the value, the limit, the approach + why it failed), in the
231
+ session's own language. essence is only a one-line SUMMARY of those fields — it
232
+ does not replace them. One passage can carry several relationships → several blocks.
233
+
234
+ CORE relationships (consider these first):
235
+ decision {choice, reason, alternatives_rejected} — the participants CLOSED a
236
+ fork: a path was committed to, adopted, or acted on. The decision is
237
+ the path TAKEN; a path they CLOSED OFF is a dead_end (below), not a
238
+ decision — even when one passage both settles the choice and rules out
239
+ the alternative. A path one participant PUT FORWARD for another to
240
+ accept leaves the fork open — that is a blueprint (below), not a
241
+ decision, no matter how strongly it was urged. To type decision you
242
+ must be able to point at WHERE the fork closed, not just where a path
243
+ was proposed. Justify it: link based_on >=1 fact/constraint (below).
244
+ dead_end {approach, reason, alternative} — an approach CLOSED OFF for a stated
245
+ reason, so a future reader should not re-open it. Covers one tried then
246
+ abandoned AND one evaluated and definitively rejected before trying. A
247
+ path merely floated with no verdict is NOT a dead_end — the close-off
248
+ must be definite and reasoned.
249
+ constraint {limit, reason, source} — a boundary that bounds EVERY option and that
250
+ the participants must work within. May be imposed from outside OR set by
251
+ the participants as a fixed limit; what makes it a constraint is that it
252
+ GOVERNS the other choices rather than being one of them.
253
+ fact {value, why_matters} — a specific observed value or concrete state.
254
+ insight {observation, implication} — a realization drawn from combining things.
255
+ blueprint {purpose, status, trigger_to_implement} — a planned or proposed path
256
+ whose outcome is not yet settled: a plan adopted but not yet executed,
257
+ OR a path put forward that no one has yet accepted. The fork is still
258
+ open; when it later closes, a decision supersedes this.
259
+ preference {lean, over, condition} — a standing lean that shapes future choices,
260
+ short of a committed decision.
261
+ question {question, why_matters} — left genuinely open, with no path forward.
262
+
263
+ When the level of commitment is unclear, type the LESS-committed role (blueprint
264
+ over decision, preference over constraint): the residue is still captured, and a
265
+ later session promotes it (a decision supersedes its blueprint). A false decision
266
+ misleads every future reader into treating an open fork as closed.
267
+
268
+ OTHER roles, with their REQUIRED fields (fill these exact field names), when none of
269
+ the above fits:
270
+ hypothesis {proposal, evidence_against} — a claim offered as possibly true but
271
+ NOT yet verified: reasoned TOWARD, not asserted as established. What it
272
+ rests on is recorded as its OWN block and linked (based_on), not
273
+ restated here; evidence_against is only what would weigh against it.
274
+ entity {name, role} — a thing the work REFERS TO by name, not a claim about it;
275
+ identity is the name, role is the part it plays in the work.
276
+ task {status, description, owner} — work still TO BE DONE, tracked by its state
277
+ of completion and who holds it.
278
+ event {what_happened, outcome, date} — a thing that OCCURRED at a point in time,
279
+ as opposed to a standing truth that simply holds.
280
+ note {} — no field schema; the catch-all, only when no sharper role fits.
281
+ If a genuinely distinct epistemic role STILL fits none of these, name the type and
282
+ include schema{} (field -> what it captures).
283
+
284
+ Each block also carries: essence (one sentence, <=120 chars — what it is and why
285
+ it matters), concepts (a few terms naming what it is about), provisional_name (a
286
+ short slug for the thing — provisional, not a final label), provenance, keep_reason.
287
+
288
+ ── WIRE the relationships WITHIN this thread ────────────────────────────────
289
+ Where the thread shows one block standing in a real relationship to another — one
290
+ thing led to another, justified it, replaced it, answered it, elaborates it,
291
+ provides evidence for it, or conflicts with it — record that link. Infer it from
292
+ what happened, whether or not any connecting word is present.
293
+
294
+ Each link is {from, to, type}, where "from" holds the relationship. Choose the
295
+ type whose MEANING matches:
296
+ prompted_by — from happened as a consequence of to (to is the trigger)
297
+ based_on — from is a conclusion grounded in to (evidence)
298
+ extends — from is a more specific case of to (broader)
299
+ supersedes — from replaces an earlier to
300
+ resolves — from answers the open question to
301
+ supports — from is evidence for the proposal to
302
+ contradicts — from and to conflict
303
+ related_to — from and to are associated, with no sharper relationship
304
+ derived_from — from was reasoned out from to
305
+ affects — from has an impact on to
306
+
307
+ Reach for the SHARPEST relation the meaning supports. related_to and affects are
308
+ the WEAKEST — a last resort, used ONLY when no grounding, consequence, replacement,
309
+ or answer actually holds between the two. When a sharper relation is true, name it.
310
+
311
+ Every block sits in a HISTORY — wire each way it connects BACKWARD to what came
312
+ before, not only its evidence:
313
+ - what it was REASONED FROM: the observation, measurement, or result a later
314
+ realization, boundary, choice, or lean rests on (based_on / supports / derived_from);
315
+ - what it REPLACED: an earlier approach, value, or state this makes obsolete. The
316
+ earlier block stays as history and MUST be linked FROM the newer one (supersedes) —
317
+ never leave a superseded block standing as if nothing replaced it;
318
+ - what TRIGGERED it: the event, failure, or need it arose as a consequence of
319
+ (prompted_by);
320
+ - the open QUESTION it answers (resolves).
321
+ The trap to avoid, for ANY block type: a block that REPLACED or was TRIGGERED BY
322
+ another, but is wired only to its supporting evidence, leaves that other block
323
+ ORPHANED — you recorded why it is justified but dropped what it displaced or
324
+ responded to. Both are how the state was reached; wire both.
325
+
326
+ The link type MUST be exactly one of these ten relations — never invent one, and
327
+ never use a block's unique{} field name as a link type. A detail that belongs to a
328
+ single block (a decision's rejected alternatives, a constraint's source, and the
329
+ like) is recorded INSIDE that block's own fields — never as a link, and never as a
330
+ separate block created only so something can link to it.
331
+
332
+ Every decision — and every hypothesis or insight that rests on a finding — needs >=1
333
+ based_on to the observation it is reasoned from. If that evidence is genuinely not in
334
+ this session, mark the block uncertain — never supply the evidence yourself.
335
+
336
+ The PROJECT is already assigned — do not change it. Do not assign final names, do
337
+ not match against any existing memory, and do NOT link to blocks in OTHER threads
338
+ (cross-thread links are a later stage). Output only this thread's blocks and
339
+ within-thread links.`;
340
+ // Block + link item schemas — identical to COMPREHEND_SCHEMA's (kept in sync by
341
+ // copy; the per-group path is default-OFF/experimental).
342
+ const PRODUCE_SCHEMA = {
343
+ type: "object",
344
+ properties: {
345
+ blocks: {
346
+ type: "array",
347
+ items: {
348
+ type: "object",
349
+ properties: {
350
+ local_id: { type: "string" },
351
+ type: { type: "string" },
352
+ unique: {
353
+ type: "object",
354
+ description: "REQUIRED structured identity fields for the type — never empty. e.g. decision: {choice, reason, alternatives_rejected}; fact: {value, why_matters}; dead_end: {approach, reason, alternative}; constraint: {limit, reason, source}; insight: {observation, implication}. Fill from the transcript.",
355
+ },
356
+ schema: { type: "object" },
357
+ essence: { type: "string" },
358
+ concepts: { type: "array", items: { type: "string" } },
359
+ provisional_name: { type: "string" },
360
+ provenance: { type: "string" },
361
+ keep_reason: { type: "string" },
362
+ type_reasoning: { type: "string" },
363
+ uncertain: { type: "boolean" },
364
+ },
365
+ required: ["local_id", "type", "unique", "essence", "provenance", "keep_reason"],
366
+ },
367
+ },
368
+ within_group_links: {
369
+ type: "array",
370
+ items: {
371
+ type: "object",
372
+ properties: {
373
+ from: { type: "string" },
374
+ to: { type: "string" },
375
+ type: { type: "string" },
376
+ reasoning: { type: "string" },
377
+ },
378
+ required: ["from", "to", "type"],
379
+ },
380
+ },
381
+ },
382
+ required: ["blocks", "within_group_links"],
383
+ };
384
+ /** Produce ONE group's blocks + within-group links. maxOutputTokens is bounded to
385
+ * one thread's worth (24576, still under the 32768 cap) — the runaway can't fire.
386
+ * Was 16384, but a normal group in a 6-turn convo occasionally overflowed it →
387
+ * truncation-bump round-trip (worktest run 5); 24576 absorbs the dense-group case
388
+ * up front. Genuine over-generation past this still splits via produceGroupBounded. */
389
+ export async function callProduceGroupLLM(provider, transcript, group, thinkingBudget = 4096) {
390
+ const turns = group.turn_numbers?.length ? ` (turns ${group.turn_numbers.join(", ")})` : "";
391
+ const userInput = `THREAD TO EXTRACT — topic: "${group.topic}"; project: "${group.provisional_project ?? ""}"${turns}\n\n` +
392
+ `FULL TRANSCRIPT (context; extract ONLY the thread above):\n\n${transcript}`;
393
+ const r = await provider.generateStructured(PRODUCE_PROMPT, userInput, PRODUCE_SCHEMA, { thinkingBudget: getThinkingBudget(thinkingBudget), maxOutputTokens: 24576, modelOverride: comprehendModel() });
394
+ // truncated = the call failed specifically because output hit the token ceiling
395
+ // (finish=length → openai.ts marks the attempt "truncated"), distinct from empty/
396
+ // rate-limit/other. Only this case is worth a split-and-retry (the output was too big).
397
+ const truncated = !r.result && (r.attempts ?? []).some((a) => a.outcome === "truncated");
398
+ return { result: r.result ?? null, rateLimited: r.rateLimited, truncated, usage: r.usage };
399
+ }
400
+ // ── Output-bound (Fix 2 Layer 1, 2026-06-07) ─────────────────────────────────────
401
+ // A statement-dense group can make PRODUCE emit more JSON than the output-token budget
402
+ // → genuine truncation (finish=length) → the whole group was silently dropped by
403
+ // keep-partial. Instead: on truncation, split the transcript in half and recurse,
404
+ // merging the sub-results. local_ids are namespaced so they stay unique; within-group
405
+ // links across the split seam are dropped (the cross-group linker bridges boundaries
406
+ // later). Depth-capped; past the cap, keep whatever parsed. GUARANTEES a group is never
407
+ // silently lost to truncation. (Dogfood doc-feed 2026-06-07: a 19KB doc truncated a
408
+ // PRODUCE call at finish=length and lost the group.)
409
+ const MAX_PRODUCE_SPLIT_DEPTH = 3;
410
+ /** Split a transcript roughly in half by lines. Returns [t] when it can't be split. */
411
+ export function splitTranscriptForRetry(transcript) {
412
+ const lines = transcript.split("\n");
413
+ if (lines.length < 2)
414
+ return [transcript];
415
+ const mid = Math.floor(lines.length / 2);
416
+ return [lines.slice(0, mid).join("\n"), lines.slice(mid).join("\n")];
417
+ }
418
+ /** Merge PRODUCE sub-results, NAMESPACING each part's local_ids (and the link endpoints
419
+ * that reference them) so the merged group has unique ids. within_group_links only ever
420
+ * reference blocks within their own part, so prefixing both endpoints per-part is safe. */
421
+ export function mergeProduceResults(parts) {
422
+ const blocks = [];
423
+ const within_group_links = [];
424
+ parts.forEach((part, i) => {
425
+ const pfx = `s${i}_`;
426
+ for (const b of part?.blocks ?? [])
427
+ blocks.push({ ...b, local_id: pfx + b.local_id });
428
+ for (const l of part?.within_group_links ?? [])
429
+ within_group_links.push({ ...l, from: pfx + l.from, to: pfx + l.to });
430
+ });
431
+ return { blocks, within_group_links };
432
+ }
433
+ /** PRODUCE one group, BOUNDED against truncation: on a genuine truncation, split the
434
+ * transcript and recurse. ok=false only when it truly couldn't produce (a non-truncation
435
+ * failure, or still truncating at the depth cap) — a legit empty group is ok=true.
436
+ * `onCall` is invoked once per actual (sub-)call so the caller can count them. */
437
+ export async function produceGroupBounded(provider, transcript, group, depth, onCall) {
438
+ onCall();
439
+ const p = await callProduceGroupLLM(provider, transcript, group);
440
+ if (p.result && Array.isArray(p.result.blocks))
441
+ return { result: p.result, ok: true };
442
+ if (p.truncated && depth < MAX_PRODUCE_SPLIT_DEPTH) {
443
+ const halves = splitTranscriptForRetry(transcript);
444
+ if (halves.length === 2) {
445
+ console.warn(` [per-group PRODUCE] group "${group.group_id}" truncated — splitting transcript (depth ${depth + 1}) and retrying`);
446
+ const [a, b] = await Promise.all([
447
+ produceGroupBounded(provider, halves[0], group, depth + 1, onCall),
448
+ produceGroupBounded(provider, halves[1], group, depth + 1, onCall),
449
+ ]);
450
+ return { result: mergeProduceResults([a.result, b.result]), ok: a.ok || b.ok };
451
+ }
452
+ }
453
+ return { result: { blocks: [], within_group_links: [] }, ok: false };
454
+ }
455
+ // ═══════════════════════════════════════════════════════════════════════════════
456
+ // STITCH + ORCHESTRATE
457
+ // ═══════════════════════════════════════════════════════════════════════════════
458
+ /** Reassemble the SEGMENT skeleton + per-group PRODUCE outputs into the EXISTING
459
+ * ComprehendResult shape. A group with no produce output → empty blocks/links
460
+ * (valid; keep-partial). Pure. */
461
+ export function stitchToComprehendResult(seg, produced) {
462
+ const groups = (seg.groups ?? []).map((g) => {
463
+ const p = produced.get(g.group_id);
464
+ return {
465
+ group_id: g.group_id,
466
+ topic: g.topic,
467
+ provisional_project: g.provisional_project,
468
+ blocks: Array.isArray(p?.blocks) ? p.blocks : [],
469
+ within_group_links: Array.isArray(p?.within_group_links) ? p.within_group_links : [],
470
+ };
471
+ });
472
+ return { groups, reasoning: seg.reasoning };
473
+ }
474
+ // ── REDO + QUARANTINE helpers (per-group SEAM-1 recovery, 2026-06-07) ─────────────
475
+ /** The group_ids that appear in any validation ERROR — i.e. which groups are "bad".
476
+ * Every post-stitch hard error carries a group_id (SEAM 1.5 guarantees each stitched
477
+ * group has one), so this attributes a failed validation to the responsible group(s),
478
+ * letting us redo / quarantine ONLY those — never the whole arc. */
479
+ export function groupIdsWithErrors(errors) {
480
+ const ids = new Set();
481
+ for (const e of errors ?? [])
482
+ if (e.group_id)
483
+ ids.add(e.group_id);
484
+ return ids;
485
+ }
486
+ /** Empty the named groups (blocks + within-group links), leaving the rest untouched —
487
+ * the QUARANTINE floor. Pure. An emptied group is VALID (0 blocks), exactly like
488
+ * keep-partial, and carries no dangling links (cross-group links don't exist yet at
489
+ * this stage). The group skeleton stays so counts/grouping downstream are unchanged. */
490
+ export function quarantineGroups(result, gids) {
491
+ if (!gids.size)
492
+ return result;
493
+ return {
494
+ ...result,
495
+ groups: (result.groups ?? []).map((g) => gids.has(g.group_id) ? { ...g, blocks: [], within_group_links: [] } : g),
496
+ };
497
+ }
498
+ /**
499
+ * Orchestrate per-group COMPREHEND: SEGMENT → SEAM 1.5 → PRODUCE per group
500
+ * (parallel, bounded) → stitch → SEAM 1 (validateComprehendResult). Returns the
501
+ * SAME {result, validation} shape as callComprehendLLM so runComprehendFrontHalf
502
+ * uses it interchangeably. KEEP-PARTIAL: one group's PRODUCE failing → that group
503
+ * is empty, the rest proceed (the single-point-of-failure removal). Degrades
504
+ * (result=null) only when SEGMENT itself fails/invalidates.
505
+ */
506
+ export async function runComprehendPerGroup(provider, transcript, opts = {}) {
507
+ const base = {
508
+ result: null, validation: null, rateLimited: false,
509
+ segmentGroups: 0, produceCalls: 0, produceFailures: 0,
510
+ redoneGroups: 0, quarantinedGroups: 0,
511
+ };
512
+ // CALL 1 — SEGMENT
513
+ const seg = await callSegmentLLM(provider, transcript);
514
+ if (!seg.result) {
515
+ console.warn(`Auto-Reflect COMPREHEND (per-group): SEGMENT ${seg.rateLimited ? "rate limited" : "failed"} — degrade to v1`);
516
+ return { ...base, rateLimited: seg.rateLimited };
517
+ }
518
+ const segVal = validateSegmentResult(seg.result);
519
+ if (!segVal.valid) {
520
+ console.warn(`Auto-Reflect COMPREHEND (per-group): SEAM 1.5 invalid (${segVal.errors.length} error(s)) — degrade to v1`);
521
+ return base;
522
+ }
523
+ const groups = seg.result.groups ?? [];
524
+ base.segmentGroups = groups.length;
525
+ base.model = seg.model;
526
+ // No residue → a valid empty result (the caller treats groups.length===0 as "nothing to save").
527
+ if (groups.length === 0) {
528
+ const emptyResult = { groups: [] };
529
+ return { ...base, result: emptyResult, validation: validateComprehendResult(emptyResult) };
530
+ }
531
+ // CALL 2 — PRODUCE per group, parallel + bounded; keep-partial on failure.
532
+ const produced = new Map();
533
+ const CONC = opts.produceConcurrency ?? 4;
534
+ for (let i = 0; i < groups.length; i += CONC) {
535
+ await Promise.all(groups.slice(i, i + CONC).map(async (g) => {
536
+ try {
537
+ // Output-bound (Fix 2 Layer 1): split-and-retry on genuine truncation so a
538
+ // dense group is never silently dropped. onCall counts every (sub-)call.
539
+ const { result, ok } = await produceGroupBounded(provider, transcript, g, 0, () => { base.produceCalls += 1; });
540
+ produced.set(g.group_id, result);
541
+ if (!ok)
542
+ base.produceFailures += 1;
543
+ }
544
+ catch (e) {
545
+ base.produceFailures += 1;
546
+ produced.set(g.group_id, { blocks: [], within_group_links: [] });
547
+ console.warn(` [per-group PRODUCE] group "${g.group_id}" threw: ${e?.message ?? e}`);
548
+ }
549
+ }));
550
+ }
551
+ let stitched = stitchToComprehendResult(seg.result, produced);
552
+ let validation = validateComprehendResult(stitched);
553
+ // ── REDO bad groups, then QUARANTINE the unrecoverable ───────────────────────
554
+ // Per-group PRODUCE isolates failures, but SEAM 1 validates the WHOLE stitched
555
+ // result: ONE group's HARD error (e.g. a block missing its provenance excerpt —
556
+ // common when an empty draw escalated to a weaker fallback model) fails the entire
557
+ // arc → the caller degrades to v1 → the whole session's residue is lost. Instead:
558
+ // 1. RE-RUN PRODUCE for ONLY the invalid groups. Each redo gets the SAME context
559
+ // the first call did (full transcript + that group's scope, via
560
+ // produceGroupBounded) and re-uses the provider's empty→escalate path, so a
561
+ // redraw usually lands valid.
562
+ // 2. Any group STILL invalid after the redo is QUARANTINED (emptied) so the VALID
563
+ // groups survive — one bad thread no longer sinks the others.
564
+ // Degrade to v1 only when NO group survives (every group bad, or errors that can't
565
+ // be attributed to a group) — the existing total-failure path, unchanged.
566
+ if (!validation.valid) {
567
+ const badIds = groupIdsWithErrors(validation.errors);
568
+ if (badIds.size > 0) {
569
+ const segByGid = new Map((seg.result.groups ?? []).map((g) => [g.group_id, g]));
570
+ console.warn(`Auto-Reflect COMPREHEND (per-group): ${badIds.size} group(s) invalid at SEAM 1 — redoing ONLY those`);
571
+ await Promise.all([...badIds].map(async (gid) => {
572
+ const g = segByGid.get(gid);
573
+ if (!g)
574
+ return; // no segment to redo from (shouldn't happen)
575
+ try {
576
+ const { result } = await produceGroupBounded(provider, transcript, g, 0, () => { base.produceCalls += 1; });
577
+ produced.set(gid, result);
578
+ base.redoneGroups += 1;
579
+ }
580
+ catch (e) {
581
+ console.warn(` [per-group REDO] group "${gid}" threw: ${e?.message ?? e}`);
582
+ }
583
+ }));
584
+ stitched = stitchToComprehendResult(seg.result, produced);
585
+ validation = validateComprehendResult(stitched);
586
+ // QUARANTINE floor — keep the good groups, empty the still-bad ones. Only when at
587
+ // least one group survives; if every group is still bad, leave it invalid so the
588
+ // caller degrades to v1.
589
+ if (!validation.valid) {
590
+ const stillBad = groupIdsWithErrors(validation.errors);
591
+ if (stillBad.size > 0 && stillBad.size < stitched.groups.length) {
592
+ stitched = quarantineGroups(stitched, stillBad);
593
+ validation = validateComprehendResult(stitched);
594
+ base.quarantinedGroups = stillBad.size;
595
+ console.warn(`Auto-Reflect COMPREHEND (per-group): quarantined ${stillBad.size} unrecoverable group(s) — kept ${stitched.groups.length - stillBad.size} valid group(s)`);
596
+ }
597
+ }
598
+ }
599
+ }
600
+ const blockCount = stitched.groups.reduce((n, g) => n + (g.blocks?.length ?? 0), 0);
601
+ const extra = (base.redoneGroups ? `, ${base.redoneGroups} redone` : "") +
602
+ (base.quarantinedGroups ? `, ${base.quarantinedGroups} quarantined` : "");
603
+ console.log(`Auto-Reflect COMPREHEND (per-group): ${groups.length} group(s), ${blockCount} block(s) | ` +
604
+ `produce ${base.produceCalls} call(s), ${base.produceFailures} fail${extra} | valid=${validation.valid} ` +
605
+ `errors=${validation.errors.length} warnings: ${summarizeWarnings(validation.warnings)}`);
606
+ if (process.env.NODEDEX_DEBUG_PERGROUP === "1")
607
+ dumpPerGroupDebug(seg.result, stitched);
608
+ return { ...base, result: stitched, validation };
609
+ }
610
+ //# sourceMappingURL=comprehend-pergroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comprehend-pergroup.js","sourceRoot":"","sources":["../../../src/middleware/reflect/comprehend-pergroup.ts"],"names":[],"mappings":"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"}