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,563 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // DEBT 5 Slice 2 Sub-step 2.3 — STAGE AUDIT (graph-health background scan)
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // The SECOND writer to pipeline_flags (complements Slice 1's Stage FLAG, which
6
+ // fires per-pipeline-run). Stage AUDIT runs periodically over the WHOLE graph
7
+ // and detects cross-block patterns no single pipeline run can see:
8
+ //
9
+ // project_dup_candidate — two type='project' roots with high concept overlap
10
+ // and no cross-link (cross-customer / cross-arc
11
+ // anaphora Stage C missed)
12
+ // scope_disagreement — two blocks sharing the SAME source_excerpt but
13
+ // living under DIFFERENT project scopes (scope
14
+ // contamination — same source text filed twice)
15
+ // island_candidate — two blocks with strong concept overlap but NO
16
+ // relation between them (a missed supports/relates_to)
17
+ //
18
+ // Stage AUDIT does NOT call the LLM. It only WRITES flags. The async reviewer
19
+ // (Sub-step 2.2) is the LLM consumer that decides merge/leave/split.
20
+ //
21
+ // Design contract: docs/PIPELINE-SLICE-2-DESIGN.md §3.
22
+ // Worker pattern: stage-audit-startup wraps this in setInterval (folded into
23
+ // flag-reviewer-startup.ts-style wiring at Sub-step 2.4 / server bootstrap).
24
+ //
25
+ // Charter Rule 5 (producers disjoint): each flag_type has exactly ONE writer.
26
+ // AUDIT owns project_dup_candidate / scope_disagreement / island_candidate.
27
+ // Stage FLAG owns atomic_dup_candidate. Stage C owns entity_unresolved.
28
+ //
29
+ // What this module does NOT do:
30
+ // - LLM calls (reviewer's job)
31
+ // - mutate blocks/relations (reviewer's job; AUDIT is read + write-flag only)
32
+ // - cosine/embedding similarity (cheaper concept + source_excerpt signals
33
+ // for now; cosine is a future enhancement — see SCALE NOTE)
34
+ // - cross-graph resolve (that's Slice 3 Stage D)
35
+ // - scan archived blocks (getAllBlocks already excludes status='archived')
36
+ import { cosineSim } from "../../engine/vector-math.js";
37
+ import { intFromEnv } from "./config.js";
38
+ import { writePipelineFlag } from "./pipeline-flags.js";
39
+ import { extractPrimaryValueFromUnique } from "./dedup-by-source-and-value.js";
40
+ import { budgetTripped } from "./cost-guard.js";
41
+ // ─── Config (env-controlled) ──────────────────────────────────────────────────
42
+ /** Jaccard threshold for project_dup_candidate (concept-set overlap). */
43
+ function projectDupThreshold() {
44
+ const v = parseFloat(process.env.NODEDEX_AUDIT_PROJECT_DUP_THRESHOLD ?? "");
45
+ return Number.isFinite(v) && v > 0 && v <= 1 ? v : 0.6;
46
+ }
47
+ /** Min shared concepts for island_candidate. */
48
+ function islandSharedMin() {
49
+ return intFromEnv("NODEDEX_AUDIT_ISLAND_SHARED_MIN", 3);
50
+ }
51
+ /** Max pairwise comparisons per tick — bounds O(n²) wall time. Pairs beyond
52
+ * this are deferred to the next tick (round-robin via the block-id offset).
53
+ * SCALE NOTE: at 10000+ blocks, replace the pairwise scan with the retrieval
54
+ * mechanism Slice 3/4 builds (design §3.3). */
55
+ function maxPairsPerTick() {
56
+ return intFromEnv("NODEDEX_AUDIT_MAX_PAIRS", 5000);
57
+ }
58
+ /** Min shared ESSENCE tokens for a project-dup candidate (the recall net for
59
+ * DRIFTED-concept fork pairs the concept-jaccard misses — see the project_dup
60
+ * branch). Recognition-layer step 4 (heal existing forks). */
61
+ function essenceOverlapMin() {
62
+ return intFromEnv("NODEDEX_AUDIT_ESSENCE_MIN", 2);
63
+ }
64
+ /** Block-dup detector: ON only when opted in. AUDIT itself may be on (live) while
65
+ * this newer block-level detection stays silent — so it never adds block_dup
66
+ * flags to an existing AUDIT user without an explicit opt-in. Default OFF. */
67
+ function blockDupDetectEnabled() {
68
+ // Default ON (locked-on dup detection — validated 2026-06-20); set =off for dev/test.
69
+ return (process.env.NODEDEX_BLOCK_DUP_DETECT ?? "").toLowerCase() !== "off";
70
+ }
71
+ /** Min shared CLAIM tokens (on unique{} primary_value) for a block_dup candidate.
72
+ * Anchored on the CLAIM, not the essence: essence carries TOPIC ("pydantic",
73
+ * "validation", "fastapi") which over-flags in a dense single-project graph
74
+ * (real-data validation: 33 pairs, ~30 false). primary_value is the per-type
75
+ * identity (PRIMARY_KEYS) — the same-claim signal a dup actually IS. The reviewer
76
+ * is the precision judge, so this is recall-tuned. */
77
+ function blockDupClaimMin() {
78
+ return intFromEnv("NODEDEX_BLOCK_DUP_CLAIM_MIN", 3);
79
+ }
80
+ /** DRIFT recall (default OFF). Also flag a block_dup candidate when two SAME-TYPE
81
+ * blocks under the same scope are SEMANTICALLY near-identical (cosine on the stored
82
+ * label+essence+concepts embedding). This catches reworded IDENTITY the exact/token
83
+ * match misses — e.g. approach "Sliding Window Log" vs "Sliding Window Logging".
84
+ * The SAME-TYPE gate + a high threshold limit the topic-similarity false flags that
85
+ * essence-meaning over-flags on (e.g. a Redis fact vs a Redis constraint); the
86
+ * reviewer remains the precision judge, so this stays recall-tuned. Opt-in so it
87
+ * never widens flags for existing block-dup users without an explicit choice. */
88
+ function blockDupEmbedEnabled() {
89
+ return (process.env.NODEDEX_BLOCK_DUP_EMBED ?? "").toLowerCase() === "on";
90
+ }
91
+ function blockDupEmbedMin() {
92
+ const v = parseFloat(process.env.NODEDEX_BLOCK_DUP_EMBED_MIN ?? "");
93
+ // Default 0.80: a real reworded restatement scored cosine 0.840 on live extraction
94
+ // (label+essence+concepts vector), while genuinely-different same-type claims sat at
95
+ // <=0.684 (worth-watch test, 2026-06-08) — a wide gap, so 0.80 catches drift with
96
+ // margin and false-flags nothing. Recall-biased on purpose: a false flag is filtered
97
+ // by the reviewer (cheap), a missed dup persists forever (expensive). Env-tunable.
98
+ return Number.isFinite(v) && v > 0 && v <= 1 ? v : 0.80;
99
+ }
100
+ // ─── Pure helpers (no DB, no LLM — unit-testable) ──────────────────────────────
101
+ /** Jaccard similarity of two concept sets: |A∩B| / |A∪B|. 0 when both empty. */
102
+ export function jaccard(a, b) {
103
+ if (a.length === 0 && b.length === 0)
104
+ return 0;
105
+ const setA = new Set(a.map(s => s.toLowerCase().trim()));
106
+ const setB = new Set(b.map(s => s.toLowerCase().trim()));
107
+ let inter = 0;
108
+ for (const x of setA)
109
+ if (setB.has(x))
110
+ inter += 1;
111
+ const union = setA.size + setB.size - inter;
112
+ return union === 0 ? 0 : inter / union;
113
+ }
114
+ /** Count shared concepts (case-insensitive). */
115
+ export function sharedConceptCount(a, b) {
116
+ const setB = new Set(b.map(s => s.toLowerCase().trim()));
117
+ let n = 0;
118
+ const seen = new Set();
119
+ for (const x of a) {
120
+ const k = x.toLowerCase().trim();
121
+ if (setB.has(k) && !seen.has(k)) {
122
+ n += 1;
123
+ seen.add(k);
124
+ }
125
+ }
126
+ return n;
127
+ }
128
+ // Common words that carry no domain signal — excluded from the essence-overlap
129
+ // recall signal so two unrelated roots don't pair on "this/that/with". NOT an
130
+ // exhaustive list; just the high-frequency noise. Real domain words (coffee,
131
+ // roasting, billing, customer) are what we want to match on.
132
+ const ESSENCE_STOPWORDS = new Set([
133
+ "the", "and", "for", "with", "this", "that", "from", "into", "your", "you", "are", "not",
134
+ "but", "has", "was", "its", "our", "their", "other", "some", "more", "than", "then", "over",
135
+ "onto", "only", "also", "such", "when", "what", "which", "both", "each", "per", "about",
136
+ "these", "those", "they", "them", "have", "will", "would", "should", "could", "been",
137
+ ]);
138
+ /** Count distinct shared SIGNIFICANT tokens between two essences (descriptions).
139
+ * The recall net for drifted-concept fork pairs: two roots about the same domain
140
+ * share domain words in their descriptions even when their concept tags drift
141
+ * (measured: home-coffee-roasting vs ...-activities had 0 concept overlap but
142
+ * share "coffee"+"roasting" in essence). Keys on the DESCRIPTION (meaning), not
143
+ * the label (name-vs-meaning). Pure / testable. */
144
+ export function sharedEssenceTokens(a, b) {
145
+ const tok = (s) => new Set((s ?? "").toLowerCase().split(/[^a-z0-9]+/)
146
+ .filter((w) => w.length >= 4 && !ESSENCE_STOPWORDS.has(w)));
147
+ const ta = tok(a), tb = tok(b);
148
+ let n = 0;
149
+ for (const w of ta)
150
+ if (tb.has(w))
151
+ n += 1;
152
+ return n;
153
+ }
154
+ // cosineSim now lives in engine/vector-math.ts (single source). Re-exported for
155
+ // callers that import it from this module.
156
+ export { cosineSim };
157
+ export function toAuditBlock(b) {
158
+ let concepts = [];
159
+ try {
160
+ const parsed = JSON.parse(b.concepts ?? "[]");
161
+ if (Array.isArray(parsed))
162
+ concepts = parsed;
163
+ }
164
+ catch { /* tolerate */ }
165
+ // Identity value lives in content.unique{} (NOT label/essence). Parse it +
166
+ // extract the per-type primary value the SAME way D2 dedup does.
167
+ let unique = {};
168
+ try {
169
+ const c = JSON.parse(b.content ?? "{}");
170
+ if (c && typeof c.unique === "object" && c.unique !== null)
171
+ unique = c.unique;
172
+ }
173
+ catch { /* tolerate */ }
174
+ const primary_value = extractPrimaryValueFromUnique(b.type, unique).trim().toLowerCase();
175
+ let embedding = null;
176
+ try {
177
+ const e = b.embedding;
178
+ if (typeof e === "string" && e.length > 0) {
179
+ const v = JSON.parse(e);
180
+ if (Array.isArray(v))
181
+ embedding = v;
182
+ }
183
+ else if (Array.isArray(e))
184
+ embedding = e;
185
+ }
186
+ catch { /* tolerate malformed embedding */ }
187
+ return {
188
+ id: b.id,
189
+ label: b.label,
190
+ type: b.type,
191
+ concepts,
192
+ project_id: b.project_id ?? null,
193
+ source_excerpt: b.source_excerpt ?? null,
194
+ primary_value,
195
+ essence: b.essence ?? "",
196
+ embedding,
197
+ };
198
+ }
199
+ /** Read the block-dup judge config once, from the SAME env readers the periodic
200
+ * AUDIT uses, so the inline recognize-before-write path can never drift apart
201
+ * from the AUDIT scan. */
202
+ export function blockDupJudgeOpts() {
203
+ return { claimMin: blockDupClaimMin(), embedOn: blockDupEmbedEnabled(), embedMin: blockDupEmbedMin() };
204
+ }
205
+ /**
206
+ * DO: decide whether two blocks are a same-scope duplicate CANDIDATE — exact
207
+ * primary_value, primary_value token-overlap, or (opt-in) near-identical
208
+ * same-type essence embedding (the drift net).
209
+ * SERVE: compounding — one piece of residue should be ONE block. This is the
210
+ * RECALL stage; the flag-reviewer is the precision judge.
211
+ * CARRY: identity is unique{} primary_value, NOT label/essence; same-scope
212
+ * (project_id) is the merge guard — a cross-scope same-claim pair is a
213
+ * scope_disagreement (never merged), so it can never be a candidate here.
214
+ *
215
+ * Pure: no DB, no LLM. The supersedes-skip + flag idempotency are caller-side
216
+ * (they need the DB). This is the ONE implementation shared by the periodic
217
+ * AUDIT (runStageAuditTick) and the inline path (dedupNewBlocksInline) — so the
218
+ * two seams detect identically (Rule 5 spirit: one detection, two timings).
219
+ */
220
+ export function judgeBlockDupPair(a, b, opts) {
221
+ const sameScope = a.project_id != null && a.project_id === b.project_id;
222
+ if (!sameScope)
223
+ return { isCandidate: false, sameScope: false, signal: null, claimTokens: 0, embedSim: 0 };
224
+ const sameIdentity = a.primary_value.length > 0 && a.primary_value === b.primary_value;
225
+ const claimTokens = sharedEssenceTokens(a.primary_value, b.primary_value);
226
+ // SAME-TYPE gate on the token-overlap signal (2026-06-15): a primary_value token
227
+ // overlap is a dup CANDIDATE only when the two blocks share the same epistemic role.
228
+ // Different types are different kinds of knowledge — "almost never duplicates" (the
229
+ // reviewer's own rule) — and in a dense single-domain graph the shared domain tokens
230
+ // (useFetch/hook/state) otherwise flood the queue with cross-type false candidates.
231
+ // This aligns the token signal with the embedding signal below, which ALREADY requires
232
+ // same-type. Measured on the collapse-e2e graph: 66→15 candidates, real dup preserved.
233
+ // (A concept-overlap gate was rejected — it cut 66→3 but LOST the real dup pair.)
234
+ // Exact-identity (sameIdentity) stays type-agnostic: an identical primary_value is a
235
+ // strong enough signal to flag regardless of type.
236
+ const byClaim = claimTokens >= opts.claimMin && a.type === b.type;
237
+ const embedSim = (opts.embedOn && a.type === b.type && a.embedding && b.embedding)
238
+ ? cosineSim(a.embedding, b.embedding) : 0;
239
+ const byEmbedding = embedSim >= opts.embedMin && embedSim > 0;
240
+ const isCandidate = sameIdentity || byClaim || byEmbedding;
241
+ const signal = !isCandidate ? null
242
+ : sameIdentity ? 'primary_value_exact'
243
+ : byClaim ? 'primary_value_overlap'
244
+ : 'essence_embedding';
245
+ return { isCandidate, sameScope, signal, claimTokens, embedSim };
246
+ }
247
+ // ─── Relation + flag existence (idempotency) ───────────────────────────────────
248
+ /** True if any active relation exists between the pair in EITHER direction. */
249
+ function hasRelationBetween(raw, idA, idB) {
250
+ const row = raw.prepare(`
251
+ SELECT 1 FROM relations
252
+ WHERE valid_to IS NULL
253
+ AND ((source_id = @a AND target_id = @b) OR (source_id = @b AND target_id = @a))
254
+ LIMIT 1
255
+ `).get({ a: idA, b: idB });
256
+ return !!row;
257
+ }
258
+ /** True if a supersedes/superseded_by relation exists between the pair (either
259
+ * direction). Used by the block_dup detector to SKIP pairs already in a
260
+ * replacement chain (the recap "reconfirmed → abandoned" case): the supersede
261
+ * mechanism already collapsed them, re-flagging is redundant. Deliberately
262
+ * NARROWER than hasRelationBetween — a `supports`/`contradicts` edge between two
263
+ * same-claim blocks is NOT a dedup and must NOT suppress the flag (the 50ms-SLA
264
+ * pair carries a `supports` edge yet is still an un-merged duplicate). */
265
+ export function hasSupersedesBetween(raw, idA, idB) {
266
+ const row = raw.prepare(`
267
+ SELECT 1 FROM relations
268
+ WHERE valid_to IS NULL
269
+ AND type IN ('supersedes', 'superseded_by')
270
+ AND ((source_id = @a AND target_id = @b) OR (source_id = @b AND target_id = @a))
271
+ LIMIT 1
272
+ `).get({ a: idA, b: idB });
273
+ return !!row;
274
+ }
275
+ /** True if a flag of this type already exists for the pair (either direction),
276
+ * reviewed OR not. Prevents re-flagging a known pair on every tick (incl.
277
+ * re-spending reviewer $$ on a pair already verdicted 'leave'). */
278
+ export function flagAlreadyExists(raw, flag_type, idA, idB) {
279
+ const row = raw.prepare(`
280
+ SELECT 1 FROM pipeline_flags
281
+ WHERE flag_type = @t
282
+ AND ((block_id_a = @a AND block_id_b = @b) OR (block_id_a = @b AND block_id_b = @a))
283
+ LIMIT 1
284
+ `).get({ t: flag_type, a: idA, b: idB });
285
+ return !!row;
286
+ }
287
+ /**
288
+ * One Stage AUDIT tick: scan blocks pairwise, write flags for the 3 audit
289
+ * patterns. Bounded by maxPairsPerTick. Idempotent — never re-flags a pair
290
+ * already in pipeline_flags for that type.
291
+ *
292
+ * Returns per-tick result for telemetry + log + the next-tick offset.
293
+ *
294
+ * Per-pair precedence to avoid double-flagging the same pair:
295
+ * both type='project' → project_dup_candidate only (skip scope/island)
296
+ * else same source_excerpt + different project → scope_disagreement
297
+ * else strong concept overlap + no link → island_candidate
298
+ */
299
+ export function runStageAuditTick(opts) {
300
+ const t0 = Date.now();
301
+ const raw = opts.db.db;
302
+ const result = {
303
+ scanned_pairs: 0,
304
+ flags_written: { project_dup_candidate: 0, scope_disagreement: 0, island_candidate: 0, block_dup_candidate: 0 },
305
+ flags_skipped_already_pending: 0,
306
+ errors: 0,
307
+ wall_ms: 0,
308
+ };
309
+ let blocks;
310
+ try {
311
+ blocks = opts.db.getAllBlocks().map(toAuditBlock);
312
+ }
313
+ catch (e) {
314
+ result.errors += 1;
315
+ result.wall_ms = Date.now() - t0;
316
+ console.warn(`[stage-audit] getAllBlocks threw: ${e?.message ?? e}`);
317
+ return result;
318
+ }
319
+ const projDupThresh = projectDupThreshold();
320
+ const essMin = essenceOverlapMin();
321
+ const islandMin = islandSharedMin();
322
+ const pairCap = maxPairsPerTick();
323
+ const blockDupOn = blockDupDetectEnabled();
324
+ const blockDupEmbedOn = blockDupEmbedEnabled();
325
+ const embedMin = blockDupEmbedMin();
326
+ const blockDupClaim = blockDupClaimMin();
327
+ const n = blocks.length;
328
+ const start = Math.min(opts.startOffset ?? 0, Math.max(0, n - 1));
329
+ outer: for (let i = start; i < n; i++) {
330
+ const a = blocks[i];
331
+ for (let j = i + 1; j < n; j++) {
332
+ if (result.scanned_pairs >= pairCap)
333
+ break outer;
334
+ const b = blocks[j];
335
+ result.scanned_pairs += 1;
336
+ try {
337
+ // ── project_dup_candidate: both projects, high concept overlap, no link
338
+ if (a.type === 'project' && b.type === 'project') {
339
+ // Recall = concept-jaccard OR shared-essence-tokens. The essence signal
340
+ // catches DRIFTED-concept fork pairs the jaccard misses (the
341
+ // recognizer-validated gap: home-coffee-roasting vs ...-activities had
342
+ // ~0 concept overlap but share "coffee"+"roasting" in essence). Detection
343
+ // is RECALL only + LLM-free; the flag-reviewer is the precision judge
344
+ // (same domain + same owner -> merge; different scope -> leave), so a
345
+ // looser recall is safe (false pairs get 'leave').
346
+ const conceptJac = jaccard(a.concepts, b.concepts);
347
+ const essTokens = sharedEssenceTokens(a.essence, b.essence);
348
+ const byConcept = conceptJac >= projDupThresh;
349
+ const byEssence = essTokens >= essMin;
350
+ if ((byConcept || byEssence) && !hasRelationBetween(raw, a.id, b.id)) {
351
+ if (flagAlreadyExists(raw, 'project_dup_candidate', a.id, b.id)) {
352
+ result.flags_skipped_already_pending += 1;
353
+ }
354
+ else {
355
+ writePipelineFlag(raw, {
356
+ flag_type: 'project_dup_candidate',
357
+ block_id_a: a.id,
358
+ block_id_b: b.id,
359
+ criteria: {
360
+ jaccard: Number(conceptJac.toFixed(3)),
361
+ shared_essence_tokens: essTokens,
362
+ signal: byConcept ? (byEssence ? 'concept+essence' : 'concept') : 'essence',
363
+ shared_concepts: a.concepts.filter(c => b.concepts.map(x => x.toLowerCase()).includes(c.toLowerCase())),
364
+ label_a: a.label, label_b: b.label,
365
+ },
366
+ scope_check: 'different',
367
+ origin_writer: 'stage_audit_project_dup',
368
+ origin_range_id: null,
369
+ });
370
+ result.flags_written.project_dup_candidate += 1;
371
+ }
372
+ }
373
+ continue; // both-projects pair handled — don't also scope/island it
374
+ }
375
+ // ── scope_disagreement: SAME identity (unique{} primary value) under
376
+ // DIFFERENT owner (project_id). Identity is content.unique{}, NOT
377
+ // label/essence/source_excerpt (per [[feedback-identity-is-unique-
378
+ // not-label]] + the provider-drift finding). This catches the EXACT
379
+ // cross-owner collision precisely: "the same specific claim is filed
380
+ // under two different projects." It does NOT catch paraphrased-same-
381
+ // meaning across owners (different words → different primary_value) —
382
+ // that's PARAPHRASE = LLM territory (Stage D / Slice 3 + reviewer),
383
+ // explicitly not solved in code per the identity memory. The code
384
+ // AUDIT is the precise smoke alarm; Stage D is the semantic sprinkler.
385
+ const sameIdentity = a.primary_value.length > 0 && a.primary_value === b.primary_value;
386
+ const differentScope = (a.project_id ?? null) !== (b.project_id ?? null);
387
+ if (sameIdentity && differentScope) {
388
+ if (flagAlreadyExists(raw, 'scope_disagreement', a.id, b.id)) {
389
+ result.flags_skipped_already_pending += 1;
390
+ }
391
+ else {
392
+ writePipelineFlag(raw, {
393
+ flag_type: 'scope_disagreement',
394
+ block_id_a: a.id,
395
+ block_id_b: b.id,
396
+ criteria: {
397
+ similarity_type: 'unique_primary_value',
398
+ primary_value: a.primary_value.slice(0, 200),
399
+ scope_a: a.project_id, scope_b: b.project_id,
400
+ },
401
+ scope_check: 'different',
402
+ origin_writer: 'stage_audit_scope',
403
+ origin_range_id: null,
404
+ });
405
+ result.flags_written.scope_disagreement += 1;
406
+ }
407
+ continue; // scope handled — don't also island it
408
+ }
409
+ // ── block_dup_candidate: two NON-root blocks under the SAME scope that look
410
+ // like the same claim — the recap-restatement gap (reworded same claim
411
+ // OR same claim re-typed). Recall = same primary_value (exact identity)
412
+ // OR essence-token overlap (the reworded net). SAME-scope is the merge
413
+ // guard: cross-scope is scope_disagreement (handled above, must NOT merge);
414
+ // only same-scope pairs are merge candidates. The reviewer is the precision
415
+ // judge (merge/leave). Skips pairs already in a SUPERSEDES chain (the
416
+ // supersede mechanism already collapsed them) — but NOT pairs merely linked
417
+ // by supports/contradicts (those ARE the un-merged dups). Opt-in
418
+ // (NODEDEX_BLOCK_DUP_DETECT=on) so it stays silent for existing AUDIT users.
419
+ if (blockDupOn) {
420
+ // The pair-decision (same-scope gate + claim/embedding recall) is the ONE
421
+ // shared judge — reused verbatim by the inline recognize-before-write path
422
+ // so the two seams can never drift. Same-scope is the structural merge guard
423
+ // (cross-scope = scope_disagreement, handled above); identity is unique{}
424
+ // primary_value, NOT essence (essence carries topic and over-flags). The
425
+ // reviewer is the precision judge, so this stays recall-tuned.
426
+ const v = judgeBlockDupPair(a, b, { claimMin: blockDupClaim, embedOn: blockDupEmbedOn, embedMin });
427
+ if (v.isCandidate && !hasSupersedesBetween(raw, a.id, b.id)) {
428
+ if (flagAlreadyExists(raw, 'block_dup_candidate', a.id, b.id)) {
429
+ result.flags_skipped_already_pending += 1;
430
+ }
431
+ else {
432
+ writePipelineFlag(raw, {
433
+ flag_type: 'block_dup_candidate',
434
+ block_id_a: a.id,
435
+ block_id_b: b.id,
436
+ criteria: {
437
+ signal: v.signal,
438
+ claim_tokens: v.claimTokens,
439
+ embed_sim: v.signal === 'essence_embedding' ? Number(v.embedSim.toFixed(3)) : undefined,
440
+ shared_concepts: sharedConceptCount(a.concepts, b.concepts),
441
+ primary_value: a.primary_value.slice(0, 200),
442
+ scope: a.project_id,
443
+ type_a: a.type, type_b: b.type,
444
+ label_a: a.label, label_b: b.label,
445
+ },
446
+ scope_check: 'same',
447
+ origin_writer: 'stage_audit_block_dup',
448
+ origin_range_id: null,
449
+ });
450
+ result.flags_written.block_dup_candidate += 1;
451
+ }
452
+ continue; // block-dup handled — don't also island it
453
+ }
454
+ }
455
+ // ── island_candidate: strong concept overlap, no relation
456
+ const shared = sharedConceptCount(a.concepts, b.concepts);
457
+ if (shared >= islandMin && !hasRelationBetween(raw, a.id, b.id)) {
458
+ if (flagAlreadyExists(raw, 'island_candidate', a.id, b.id)) {
459
+ result.flags_skipped_already_pending += 1;
460
+ }
461
+ else {
462
+ writePipelineFlag(raw, {
463
+ flag_type: 'island_candidate',
464
+ block_id_a: a.id,
465
+ block_id_b: b.id,
466
+ criteria: {
467
+ shared_concept_count: shared,
468
+ shared_concepts: a.concepts.filter(c => b.concepts.map(x => x.toLowerCase()).includes(c.toLowerCase())),
469
+ potential_relation_type: 'relates_to',
470
+ },
471
+ scope_check: 'unknown',
472
+ origin_writer: 'stage_audit_islands',
473
+ origin_range_id: null,
474
+ });
475
+ result.flags_written.island_candidate += 1;
476
+ }
477
+ }
478
+ }
479
+ catch (e) {
480
+ result.errors += 1;
481
+ console.warn(`[stage-audit] pair (${a.id}, ${b.id}) threw: ${e?.message ?? e}`);
482
+ }
483
+ }
484
+ }
485
+ result.wall_ms = Date.now() - t0;
486
+ return result;
487
+ }
488
+ // ─── Timer wrapper (env-gated, mirror arc-inactivity-timer) ────────────────────
489
+ //
490
+ // Default OFF. Opt-in via NODEDEX_AUDIT_ENABLED=on. Longer interval than the
491
+ // reviewer (graph-wide scan; no need to be fast) — default 30 min. Round-robins
492
+ // the startOffset across ticks so large graphs eventually get full coverage.
493
+ let _auditHandle = null;
494
+ let _auditInFlight = false;
495
+ let _auditOffset = 0;
496
+ function auditEnabled() {
497
+ // Default ON (self-maintenance locked-on per release decision 2026-06-20); set =off for dev/test.
498
+ return (process.env.NODEDEX_AUDIT_ENABLED ?? "").toLowerCase() !== "off";
499
+ }
500
+ function auditIntervalMs() {
501
+ return intFromEnv("NODEDEX_AUDIT_INTERVAL_MS", 1_800_000); // 30 min default
502
+ }
503
+ async function auditTick(db) {
504
+ if (_auditInFlight) {
505
+ console.log("[stage-audit] tick still running, skipping this interval");
506
+ return;
507
+ }
508
+ _auditInFlight = true;
509
+ try {
510
+ // Cost breaker (production gap 2, Phase B): self-gate before spending
511
+ // (audit's spend is embeddings; the flags it writes feed the gated reviewer).
512
+ const budget = await budgetTripped();
513
+ if (budget?.tripped) {
514
+ console.warn(`[stage-audit] tick skipped — cost breaker: ${budget.reason}`);
515
+ return;
516
+ }
517
+ const res = runStageAuditTick({ db, startOffset: _auditOffset });
518
+ // Advance the round-robin offset; wrap when we've covered the graph.
519
+ const total = db.getAllBlocks().length;
520
+ _auditOffset = res.scanned_pairs > 0 && total > 0 ? (_auditOffset + 1) % Math.max(1, total) : 0;
521
+ const w = res.flags_written;
522
+ if (w.project_dup_candidate + w.scope_disagreement + w.island_candidate > 0 || res.errors > 0) {
523
+ console.log(`[stage-audit] tick: pairs=${res.scanned_pairs} ` +
524
+ `flags={project_dup:${w.project_dup_candidate}, scope:${w.scope_disagreement}, island:${w.island_candidate}} ` +
525
+ `skipped=${res.flags_skipped_already_pending} errors=${res.errors} wall_ms=${res.wall_ms}`);
526
+ }
527
+ }
528
+ catch (e) {
529
+ console.warn(`[stage-audit] tick threw: ${e?.message ?? e}`);
530
+ }
531
+ finally {
532
+ _auditInFlight = false;
533
+ }
534
+ }
535
+ /** Start the Stage AUDIT timer. Idempotent; returns true if started. */
536
+ export function startStageAuditTimer(db) {
537
+ if (!auditEnabled()) {
538
+ console.log("[stage-audit] disabled (set NODEDEX_AUDIT_ENABLED=on to enable)");
539
+ return false;
540
+ }
541
+ if (_auditHandle !== null)
542
+ return false;
543
+ const intervalMs = auditIntervalMs();
544
+ console.log(`[stage-audit] starting: interval=${intervalMs}ms`);
545
+ _auditHandle = setInterval(() => {
546
+ auditTick(db).catch((e) => console.warn(`[stage-audit] interval tick rejected: ${e?.message ?? e}`));
547
+ }, intervalMs);
548
+ if (typeof _auditHandle.unref === "function")
549
+ _auditHandle.unref();
550
+ return true;
551
+ }
552
+ /** Stop the Stage AUDIT timer. Used on shutdown + by tests. */
553
+ export function stopStageAuditTimer() {
554
+ if (_auditHandle !== null) {
555
+ clearInterval(_auditHandle);
556
+ _auditHandle = null;
557
+ }
558
+ }
559
+ /** For tests only — reports whether the timer is currently running. */
560
+ export function _isStageAuditTimerRunningForTests() {
561
+ return _auditHandle !== null;
562
+ }
563
+ //# sourceMappingURL=stage-audit-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-audit-graph.js","sourceRoot":"","sources":["../../../src/middleware/reflect/stage-audit-graph.ts"],"names":[],"mappings":"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"}