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 @@
1
+ {"version":3,"file":"apply-flag-verdict.js","sourceRoot":"","sources":["../../../src/middleware/reflect/apply-flag-verdict.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { LLMProvider } from "../../engine/ai-provider.js";
2
+ import type { ConversationTurnRow } from "../../store/database.js";
3
+ import type { ArcEntityResolveResult, Pass2Item } from "./types.js";
4
+ export declare const ARC_ENTITY_RESOLVE_PROMPT = "You receive scene cards from N turns of ONE CONTINUOUS conversation arc.\n\n\u2500\u2500 YOUR JOB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nIdentify entities mentioned across these turns. Group anaphoric mentions of\nthe same entity \u2014 where one turn names a thing specifically and a later turn\nrefers back to it with a generic noun or pronoun-like reference (\"the X\",\n\"this one\", \"it\"). For each entity, pick a single canonical_name following the\nstrict naming rule.\n\nThis is ANAPHORA RESOLUTION over a single conversation. The entity IS the\nunit the speaker keeps coming back to, even when they switch names for it.\n\n\u2500\u2500 STATE CONVENTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"State\" in this prompt = text in the SCENE CARDS region below. Your training\nknowledge and \"what's commonly true about this domain\" are NOT state. An\nentity exists ONLY if the scene cards reference it. Familiarity \u2260 recorded.\n\n\u2500\u2500 WHEN TO CLUSTER (group mentions into ONE entity) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nTwo scene cards refer to the SAME entity when:\n - Heavy overlap in technologies mentioned (\u22653 shared techs is a strong signal)\n - Same people/actors referenced across both\n - Anaphoric naming pattern: one scene card has a specific name and others\n use a generic noun or back-reference (\"the X\", \"this X\", \"it\") that fits\n the same concept\n - Scene card scope descriptions tell the same story\n\n\u2500\u2500 WHEN TO KEEP SEPARATE (multiple entities, multiple clusters) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nTwo scene cards refer to DIFFERENT entities when:\n - Disjoint signal sets \u2014 the technologies/tools/methods named in one do not\n overlap with the other\n - Different owners/contexts even when the kind of thing is similar (one\n party's instance vs another party's instance of the same kind)\n - The conversation legitimately covers multiple distinct topics\n\nDO NOT force-cluster just because scene cards are sequential. Anaphora is a\nLANGUAGE pattern (pronoun referencing) \u2014 only group when the signals say\n\"same entity,\" not \"same conversation.\"\n\n\u2500\u2500 CANONICAL NAME (the canonical_name field) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nThe canonical_name is the project segment of the strict label rule\n{project}_{type}_{concept}. Constraints:\n - lowercase, hyphens-only (NO underscores \u2014 underscores separate label\n DIMENSIONS, not words within a segment)\n - 2-5 words separated by hyphens\n - Use the MOST SPECIFIC name available across the scene cards: prefer a\n specific name over a generic back-reference \u2014 the specific one carries\n information, the generic one doesn't\n - If multiple scene cards agree on a specific name, use that\n - If all scene cards use generic names, synthesize the most specific name\n you can defend from the scope descriptions and the signals present\n\nYOU pick the name. Do not return a bare generic noun just because that's what\nsome scene cards said \u2014 those are anaphoric forms, not the canonical name.\n\n\u2500\u2500 EVIDENCE (the evidence field \u2014 REQUIRED per cluster) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nFor each cluster you emit, populate evidence.{shared_technologies,\nshared_entities, shared_concepts} with the OBSERVED OVERLAPS that made you\ncluster these mentions. Empty arrays are valid when no overlap exists for\nthat dimension. But at least one of the three should be non-empty for a\nreal cluster (otherwise there's no evidence).\n\n\u2500\u2500 REASONING (the reasoning field \u2014 REQUIRED per cluster) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nFor each cluster, the reasoning field MUST:\n 1. Name which turns are in this cluster\n 2. Name SPECIFIC overlap signals you used (the shared technologies,\n the anaphoric naming pattern, etc.)\n 3. Explain why mentions NOT in this cluster were excluded (when applicable)\n\nA reasoning that says only \"these mentions are related\" without naming\nspecifics fails. Cite the concrete signals.\n\n\u2500\u2500 UNRESOLVED MENTIONS (the unresolved_mentions field \u2014 OPTIONAL) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nIf a turn's scene card is too thin or ambiguous to confidently assign to any\ncluster, list it in unresolved_mentions instead of force-fitting. The caller\nwill decide whether to flag for review or fall back to per-turn naming.\n\n\u2500\u2500 OUTPUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nReturn a JSON object matching this SHAPE (placeholders show structure only \u2014\nfill every field from the actual scene cards, do not echo these labels):\n {\n \"clusters\": [\n {\n \"canonical_name\": \"<specific-hyphenated-name-you-chose>\",\n \"mentions\": [\n { \"turn_number\": <n>, \"scope_project_name\": \"<what that turn called it>\", \"item_ids\": [\"item_T<n>_<id>\", ...] }\n ],\n \"evidence\": {\n \"shared_technologies\": [\"<observed overlapping tool/tech/method names>\"],\n \"shared_entities\": [\"<observed shared people/orgs>\"],\n \"shared_concepts\": [\"<observed shared concept tags>\"]\n },\n \"reasoning\": \"<which turns; the SPECIFIC overlap signals used; why excluded mentions were excluded>\"\n }\n ],\n \"unresolved_mentions\": [],\n \"arc_resolve_reasoning\": \"<one line: single- vs multi-entity arc, and why>\"\n }";
5
+ export interface StageCInputContext {
6
+ agent_id: string;
7
+ turns: ConversationTurnRow[];
8
+ }
9
+ export declare function buildArcEntityResolveInput(ctx: StageCInputContext): string;
10
+ export interface RunArcEntityResolveOpts {
11
+ provider: LLMProvider;
12
+ agent_id: string;
13
+ turns: ConversationTurnRow[];
14
+ /** Stage C is skipped entirely when this is true (Sub-step 1.5 fixture
15
+ * may want to A/B compare with and without). Default false (Stage C runs). */
16
+ disabled?: boolean;
17
+ /** When set, the helper returns AFTER the LLM call without parsing the
18
+ * result schema (used by unit tests). Production callers leave this false. */
19
+ _testHookReturnRaw?: boolean;
20
+ }
21
+ export declare function runArcEntityResolve(opts: RunArcEntityResolveOpts): Promise<ArcEntityResolveResult | undefined>;
22
+ export interface ApplyCanonicalNamesResult {
23
+ items: Pass2Item[];
24
+ renamed_count: number;
25
+ clusters_used: number;
26
+ unmatched_item_ids: string[];
27
+ }
28
+ export declare function applyArcEntityCanonicalNames(items: Pass2Item[], resolution: ArcEntityResolveResult | undefined): ApplyCanonicalNamesResult;
29
+ //# sourceMappingURL=arc-entity-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arc-entity-resolve.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/arc-entity-resolve.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAsC,SAAS,EAAE,MAAM,YAAY,CAAC;AAoBxG,eAAO,MAAM,yBAAyB,4yNAgGlC,CAAC;AAkEL,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAsC1E;AAeD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B;kFAC8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kFAC8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAgG7C;AAwBD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,SAAS,EAAE,EAClB,UAAU,EAAE,sBAAsB,GAAG,SAAS,GAC7C,yBAAyB,CAkD3B"}
@@ -0,0 +1,356 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // DEBT 5 Slice 1 Sub-step 1.2 — STAGE C: ARC ENTITY RESOLVE
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // Runs ONCE per arc trigger BEFORE Pass 2-5 over the consolidated input.
6
+ //
7
+ // Why this exists (Phase 11 evidence):
8
+ // In our 5-turn arc fixture, per-turn Pass 0 emitted 5 different
9
+ // `scope_project.name` values for what was clearly ONE entity (a Python web
10
+ // service): `json-api-service`, `service`, `this-service`, `the-service`,
11
+ // `system-performance`. Pass 3 trusted those verbatim (pass3.ts:75-77),
12
+ // producing 5 fragmented project roots for one arc.
13
+ //
14
+ // What this fixes:
15
+ // The MISSING cognitive step #11 (PROJECT-RESOLVE) per
16
+ // docs/PIPELINE-AUDIT-VS-FIRST-PRINCIPLES.md §2. Adds a reconciliation
17
+ // seam at arc time so Pass 3 receives a canonical entity map instead of
18
+ // per-turn-derived noise.
19
+ //
20
+ // Identity model (per docs/PIPELINE-AUDIT-DEPENDENCY-MAP.md §1):
21
+ // - Within-arc: entity = clustered by LLM judgment using technology +
22
+ // entity + scene-card-scope overlap signals
23
+ // - LLM picks canonical_name following strict {project}_{type}_{concept}
24
+ // naming rule — code does NOT pick names (rule 3 compliance)
25
+ // - Code only assembles the input + parses the output (rule 3 split)
26
+ //
27
+ // What this does NOT do (Slice 1 scope):
28
+ // - Cross-graph resolution (Slice 3 Stage D — checks scope/owner against
29
+ // existing graph; this is within-arc only)
30
+ // - Auto-merge — only emits canonical_name + cluster. Pass 3 uses the
31
+ // canonical name; system never silently merges blocks.
32
+ // - Flag unresolved mentions to pipeline_flags (could later via
33
+ // 'entity_unresolved' flag_type; Sub-step 1.2 just emits them in the
34
+ // unresolved_mentions array for caller to inspect/decide)
35
+ import { reflectTokenStats } from "./context.js";
36
+ import { getThinkingBudget } from "./config.js";
37
+ // Provider model override. Stage C is reasoning-heavy (anaphora judgment +
38
+ // canonical-name selection) — same shape as Pass 4 which defaults to Pro for
39
+ // Gemini. Defaults to provider's standard; opt-in to Pro via env.
40
+ const STAGE_C_MODEL_OVERRIDE = process.env.NODEDEX_STAGE_C_MODEL ?? null;
41
+ // ─── Prompt ────────────────────────────────────────────────────────────────────
42
+ //
43
+ // Design notes (per docs/PIPELINE-SLICE-1-DESIGN.md §7):
44
+ // - Frames the work as ANAPHORA RESOLUTION (LLM-good) not generic-clustering
45
+ // - Forces explicit evidence citation (model can't hand-wave "they seem related")
46
+ // - Defers to LLM for canonical name (rule 3 — naming is LLM's job)
47
+ // - Strict naming rule enforced at prompt level (no underscore in project segment)
48
+ // - Multi-entity arcs explicitly permitted (don't over-cluster legitimately
49
+ // distinct entities like auth-service + billing-service)
50
+ // - Unresolved fallback explicit (not all mentions need to cluster)
51
+ export const ARC_ENTITY_RESOLVE_PROMPT = `You receive scene cards from N turns of ONE CONTINUOUS conversation arc.
52
+
53
+ ── YOUR JOB ─────────────────────────────────────────────────────────────────
54
+ Identify entities mentioned across these turns. Group anaphoric mentions of
55
+ the same entity — where one turn names a thing specifically and a later turn
56
+ refers back to it with a generic noun or pronoun-like reference ("the X",
57
+ "this one", "it"). For each entity, pick a single canonical_name following the
58
+ strict naming rule.
59
+
60
+ This is ANAPHORA RESOLUTION over a single conversation. The entity IS the
61
+ unit the speaker keeps coming back to, even when they switch names for it.
62
+
63
+ ── STATE CONVENTION ─────────────────────────────────────────────────────────
64
+ "State" in this prompt = text in the SCENE CARDS region below. Your training
65
+ knowledge and "what's commonly true about this domain" are NOT state. An
66
+ entity exists ONLY if the scene cards reference it. Familiarity ≠ recorded.
67
+
68
+ ── WHEN TO CLUSTER (group mentions into ONE entity) ─────────────────────────
69
+ Two scene cards refer to the SAME entity when:
70
+ - Heavy overlap in technologies mentioned (≥3 shared techs is a strong signal)
71
+ - Same people/actors referenced across both
72
+ - Anaphoric naming pattern: one scene card has a specific name and others
73
+ use a generic noun or back-reference ("the X", "this X", "it") that fits
74
+ the same concept
75
+ - Scene card scope descriptions tell the same story
76
+
77
+ ── WHEN TO KEEP SEPARATE (multiple entities, multiple clusters) ─────────────
78
+ Two scene cards refer to DIFFERENT entities when:
79
+ - Disjoint signal sets — the technologies/tools/methods named in one do not
80
+ overlap with the other
81
+ - Different owners/contexts even when the kind of thing is similar (one
82
+ party's instance vs another party's instance of the same kind)
83
+ - The conversation legitimately covers multiple distinct topics
84
+
85
+ DO NOT force-cluster just because scene cards are sequential. Anaphora is a
86
+ LANGUAGE pattern (pronoun referencing) — only group when the signals say
87
+ "same entity," not "same conversation."
88
+
89
+ ── CANONICAL NAME (the canonical_name field) ────────────────────────────────
90
+ The canonical_name is the project segment of the strict label rule
91
+ {project}_{type}_{concept}. Constraints:
92
+ - lowercase, hyphens-only (NO underscores — underscores separate label
93
+ DIMENSIONS, not words within a segment)
94
+ - 2-5 words separated by hyphens
95
+ - Use the MOST SPECIFIC name available across the scene cards: prefer a
96
+ specific name over a generic back-reference — the specific one carries
97
+ information, the generic one doesn't
98
+ - If multiple scene cards agree on a specific name, use that
99
+ - If all scene cards use generic names, synthesize the most specific name
100
+ you can defend from the scope descriptions and the signals present
101
+
102
+ YOU pick the name. Do not return a bare generic noun just because that's what
103
+ some scene cards said — those are anaphoric forms, not the canonical name.
104
+
105
+ ── EVIDENCE (the evidence field — REQUIRED per cluster) ─────────────────────
106
+ For each cluster you emit, populate evidence.{shared_technologies,
107
+ shared_entities, shared_concepts} with the OBSERVED OVERLAPS that made you
108
+ cluster these mentions. Empty arrays are valid when no overlap exists for
109
+ that dimension. But at least one of the three should be non-empty for a
110
+ real cluster (otherwise there's no evidence).
111
+
112
+ ── REASONING (the reasoning field — REQUIRED per cluster) ───────────────────
113
+ For each cluster, the reasoning field MUST:
114
+ 1. Name which turns are in this cluster
115
+ 2. Name SPECIFIC overlap signals you used (the shared technologies,
116
+ the anaphoric naming pattern, etc.)
117
+ 3. Explain why mentions NOT in this cluster were excluded (when applicable)
118
+
119
+ A reasoning that says only "these mentions are related" without naming
120
+ specifics fails. Cite the concrete signals.
121
+
122
+ ── UNRESOLVED MENTIONS (the unresolved_mentions field — OPTIONAL) ──────────
123
+ If a turn's scene card is too thin or ambiguous to confidently assign to any
124
+ cluster, list it in unresolved_mentions instead of force-fitting. The caller
125
+ will decide whether to flag for review or fall back to per-turn naming.
126
+
127
+ ── OUTPUT ───────────────────────────────────────────────────────────────────
128
+ Return a JSON object matching this SHAPE (placeholders show structure only —
129
+ fill every field from the actual scene cards, do not echo these labels):
130
+ {
131
+ "clusters": [
132
+ {
133
+ "canonical_name": "<specific-hyphenated-name-you-chose>",
134
+ "mentions": [
135
+ { "turn_number": <n>, "scope_project_name": "<what that turn called it>", "item_ids": ["item_T<n>_<id>", ...] }
136
+ ],
137
+ "evidence": {
138
+ "shared_technologies": ["<observed overlapping tool/tech/method names>"],
139
+ "shared_entities": ["<observed shared people/orgs>"],
140
+ "shared_concepts": ["<observed shared concept tags>"]
141
+ },
142
+ "reasoning": "<which turns; the SPECIFIC overlap signals used; why excluded mentions were excluded>"
143
+ }
144
+ ],
145
+ "unresolved_mentions": [],
146
+ "arc_resolve_reasoning": "<one line: single- vs multi-entity arc, and why>"
147
+ }`;
148
+ const ARC_ENTITY_RESOLVE_SCHEMA = {
149
+ type: "object",
150
+ properties: {
151
+ clusters: {
152
+ type: "array",
153
+ items: {
154
+ type: "object",
155
+ properties: {
156
+ canonical_name: { type: "string" },
157
+ mentions: {
158
+ type: "array",
159
+ items: {
160
+ type: "object",
161
+ properties: {
162
+ turn_number: { type: "integer" },
163
+ scope_project_name: { type: "string" },
164
+ item_ids: { type: "array", items: { type: "string" } },
165
+ },
166
+ required: ["turn_number", "scope_project_name", "item_ids"],
167
+ },
168
+ },
169
+ evidence: {
170
+ type: "object",
171
+ properties: {
172
+ shared_technologies: { type: "array", items: { type: "string" } },
173
+ shared_entities: { type: "array", items: { type: "string" } },
174
+ shared_concepts: { type: "array", items: { type: "string" } },
175
+ },
176
+ required: ["shared_technologies", "shared_entities", "shared_concepts"],
177
+ },
178
+ reasoning: { type: "string" },
179
+ },
180
+ required: ["canonical_name", "mentions", "evidence", "reasoning"],
181
+ },
182
+ },
183
+ unresolved_mentions: {
184
+ type: "array",
185
+ items: {
186
+ type: "object",
187
+ properties: {
188
+ turn_number: { type: "integer" },
189
+ scope_project_name: { type: "string" },
190
+ item_ids: { type: "array", items: { type: "string" } },
191
+ },
192
+ required: ["turn_number", "scope_project_name", "item_ids"],
193
+ },
194
+ },
195
+ arc_resolve_reasoning: { type: "string" },
196
+ },
197
+ required: ["clusters"],
198
+ };
199
+ export function buildArcEntityResolveInput(ctx) {
200
+ const header = `[ARC ENTITY RESOLVE — agent_id=${ctx.agent_id}, ${ctx.turns.length} turn(s)]
201
+ This is ONE continuous conversation arc. Identify entities across turns and
202
+ group anaphoric mentions. Pick canonical names following strict naming rule.
203
+ `;
204
+ const sections = [header];
205
+ for (const turn of ctx.turns) {
206
+ let pass01 = null;
207
+ try {
208
+ pass01 = turn.pass01_output_json ? JSON.parse(turn.pass01_output_json) : null;
209
+ }
210
+ catch { /* malformed */ }
211
+ const sc = pass01?.scene_card ?? {};
212
+ const scopeName = sc.scope_project?.name ?? "(no scope project)";
213
+ const scopeDesc = sc.scope_project?.scope ?? "";
214
+ const projects = Array.isArray(sc.projects) ? sc.projects : [];
215
+ const technologies = Array.isArray(sc.technologies) ? sc.technologies : [];
216
+ const people = Array.isArray(sc.people) ? sc.people : [];
217
+ const items = Array.isArray(pass01?.items) ? pass01.items : [];
218
+ // Mirror the arc-prefix id convention from buildArcConsolidatedInput so
219
+ // the LLM emits matching item_ids (Pass 3 joins on these later).
220
+ const itemIds = items.map((it) => {
221
+ const cleanId = String(it.id ?? '').replace(/^item_/, '') || '?';
222
+ return `item_T${turn.turn_number}_${cleanId}`;
223
+ });
224
+ sections.push(`[TURN ${turn.turn_number}${turn.turn_name ? ` — ${turn.turn_name}` : ''}]
225
+ Scope project: ${scopeName}${scopeDesc ? ` — "${scopeDesc}"` : ''}
226
+ Projects: ${projects.length === 0 ? "(none)" : projects.map(p => `${p.name}${p.scope ? ` ("${p.scope}")` : ''}`).join(", ")}
227
+ Technologies: ${technologies.length === 0 ? "(none)" : technologies.map(t => t.name).join(", ")}
228
+ People/Actors: ${people.length === 0 ? "(none)" : people.map(p => `${p.name} (${p.role})`).join(", ")}
229
+ Item IDs: ${itemIds.length === 0 ? "(none)" : itemIds.join(", ")}`);
230
+ }
231
+ return sections.join("\n\n");
232
+ }
233
+ export async function runArcEntityResolve(opts) {
234
+ if (opts.disabled) {
235
+ console.log("[arc-entity-resolve] skipped (disabled flag)");
236
+ return undefined;
237
+ }
238
+ if (opts.turns.length === 0) {
239
+ console.warn("[arc-entity-resolve] no turns to resolve — returning empty result");
240
+ return { clusters: [], unresolved_mentions: [] };
241
+ }
242
+ if (!opts.provider.isAvailable()) {
243
+ console.warn("[arc-entity-resolve] provider unavailable — degrading (Pass 3 will use per-turn names)");
244
+ return undefined;
245
+ }
246
+ const userInput = buildArcEntityResolveInput({ agent_id: opts.agent_id, turns: opts.turns });
247
+ const r = await opts.provider.generateStructured(ARC_ENTITY_RESOLVE_PROMPT, userInput, ARC_ENTITY_RESOLVE_SCHEMA, {
248
+ thinkingBudget: getThinkingBudget(2048),
249
+ maxOutputTokens: 16384,
250
+ modelOverride: STAGE_C_MODEL_OVERRIDE ?? undefined,
251
+ });
252
+ // Telemetry — own slot per debt-4 §3
253
+ if (r.usage) {
254
+ reflectTokenStats.pass_c_resolve.input += r.usage.input ?? 0;
255
+ reflectTokenStats.pass_c_resolve.thinking += r.usage.thinking ?? 0;
256
+ reflectTokenStats.pass_c_resolve.output += r.usage.output ?? 0;
257
+ }
258
+ reflectTokenStats.pass_c_resolve.calls += 1;
259
+ if (!r.result) {
260
+ const reason = r.rateLimited ? "rate limited" : "failed";
261
+ console.warn(`[arc-entity-resolve] LLM call ${reason} — degrading (Pass 3 will use per-turn names) [${opts.provider.getName()}]`);
262
+ return undefined;
263
+ }
264
+ // Map raw LLM output → typed ArcEntityResolveResult. We trust the schema
265
+ // validator + sanitize defensively (LLM may emit extra fields the schema
266
+ // doesn't reject; we ignore them).
267
+ const clusters = (r.result.clusters ?? []).map(c => {
268
+ const mentions = (c.mentions ?? []).map(m => {
269
+ const sourceTurn = opts.turns.find(t => t.turn_number === m.turn_number);
270
+ return {
271
+ turn_id: sourceTurn?.id ?? `unknown_turn_${m.turn_number}`,
272
+ turn_number: m.turn_number,
273
+ scope_project_name: m.scope_project_name ?? "",
274
+ item_ids: Array.isArray(m.item_ids) ? m.item_ids : [],
275
+ };
276
+ });
277
+ return {
278
+ canonical_name: c.canonical_name ?? "",
279
+ mentions,
280
+ evidence: {
281
+ shared_technologies: c.evidence?.shared_technologies ?? [],
282
+ shared_entities: c.evidence?.shared_entities ?? [],
283
+ shared_concepts: c.evidence?.shared_concepts ?? [],
284
+ },
285
+ reasoning: c.reasoning ?? "",
286
+ };
287
+ });
288
+ const unresolved = (r.result.unresolved_mentions ?? []).map(m => {
289
+ const sourceTurn = opts.turns.find(t => t.turn_number === m.turn_number);
290
+ return {
291
+ turn_id: sourceTurn?.id ?? `unknown_turn_${m.turn_number}`,
292
+ turn_number: m.turn_number,
293
+ scope_project_name: m.scope_project_name ?? "",
294
+ item_ids: Array.isArray(m.item_ids) ? m.item_ids : [],
295
+ };
296
+ });
297
+ console.log(`[arc-entity-resolve] resolved ${clusters.length} cluster(s), ${unresolved.length} unresolved mention(s) [${opts.provider.getName()}]`);
298
+ return {
299
+ clusters,
300
+ unresolved_mentions: unresolved,
301
+ arc_resolve_reasoning: r.result.arc_resolve_reasoning,
302
+ // Provider trail — buildCostBreakdown reads these to bill Stage C in
303
+ // its own pass_c_resolve slot (mirror of 742f50d pass5 own-slot fix).
304
+ model: r.model,
305
+ attempts: r.attempts,
306
+ };
307
+ }
308
+ export function applyArcEntityCanonicalNames(items, resolution) {
309
+ // Degrade path — no resolution available
310
+ if (!resolution || resolution.clusters.length === 0) {
311
+ return {
312
+ items,
313
+ renamed_count: 0,
314
+ clusters_used: 0,
315
+ unmatched_item_ids: items.map(i => i.id),
316
+ };
317
+ }
318
+ // Build item_id → canonical_name map. If the same item_id appears in
319
+ // multiple clusters (shouldn't happen, but defensive), the first wins.
320
+ const idToCanonical = new Map();
321
+ const clustersUsedSet = new Set();
322
+ for (const cluster of resolution.clusters) {
323
+ for (const mention of cluster.mentions) {
324
+ for (const itemId of mention.item_ids) {
325
+ if (!idToCanonical.has(itemId)) {
326
+ idToCanonical.set(itemId, cluster.canonical_name);
327
+ }
328
+ }
329
+ }
330
+ }
331
+ const unmatched = [];
332
+ let renamedCount = 0;
333
+ const out = items.map(item => {
334
+ const canonical = idToCanonical.get(item.id);
335
+ if (!canonical) {
336
+ unmatched.push(item.id);
337
+ return item;
338
+ }
339
+ if (canonical === item.project) {
340
+ // Already named correctly — count as cluster_used but not as rename
341
+ clustersUsedSet.add(canonical);
342
+ return item;
343
+ }
344
+ // Overwrite project. Shallow copy preserves all other fields.
345
+ renamedCount++;
346
+ clustersUsedSet.add(canonical);
347
+ return { ...item, project: canonical };
348
+ });
349
+ return {
350
+ items: out,
351
+ renamed_count: renamedCount,
352
+ clusters_used: clustersUsedSet.size,
353
+ unmatched_item_ids: unmatched,
354
+ };
355
+ }
356
+ //# sourceMappingURL=arc-entity-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arc-entity-resolve.js","sourceRoot":"","sources":["../../../src/middleware/reflect/arc-entity-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { WorkspaceDB } from "../../store/database.js";
2
+ /**
3
+ * Run one inactivity check. For each stale agent, fire arc extraction with
4
+ * trigger_source='inactivity'. Per-agent failures are logged but don't stop
5
+ * the tick. Exported so tests can drive it directly without setInterval.
6
+ */
7
+ export declare function runInactivityTick(db: WorkspaceDB, thresholdMs?: number): Promise<{
8
+ checked: number;
9
+ extracted: number;
10
+ skipped_in_progress: number;
11
+ skipped_rate_limited: number;
12
+ skipped_min_range: number;
13
+ errors: number;
14
+ }>;
15
+ /**
16
+ * Start the inactivity check timer. Idempotent — calling twice is a no-op
17
+ * after the first call. Honor the enabled flag — if off, do nothing.
18
+ * Returns true if the timer started, false if it was disabled or already running.
19
+ */
20
+ export declare function startArcInactivityTimer(db: WorkspaceDB): boolean;
21
+ /**
22
+ * One-shot BOOT SWEEP — recover arcs stranded by a restart.
23
+ *
24
+ * The per-turn auto-trigger fires arc extraction fire-and-forget, so a restart
25
+ * mid-extraction kills it and leaves the turns `pass01_done` with nothing to
26
+ * re-trigger them. Without this they wait up to the full inactivity threshold
27
+ * (default 30 min) — or forever if the inactivity timer is off.
28
+ *
29
+ * After a short settle delay this runs ONE inactivity-style tick using the delay
30
+ * itself as the idle window, so it sweeps turns that were already sitting at boot
31
+ * but NOT a conversation that resumed afterwards (those are < delay old and the
32
+ * normal auto-trigger owns them). Distinct from the proactive inactivity timer:
33
+ * this is restart RECOVERY, so it's gated only on arc mode being on — a user who
34
+ * turned off the 30-min inactivity sweep still doesn't want a restart to strand
35
+ * captured turns. Off-switch: NODEDEX_ARC_BOOT_SWEEP=off. runArcExtraction's own
36
+ * in-flight + rate guards keep it from racing a live trigger.
37
+ */
38
+ export declare function startBootArcSweep(db: WorkspaceDB): boolean;
39
+ /**
40
+ * Stop the inactivity check timer. Used on shutdown + by tests.
41
+ */
42
+ export declare function stopArcInactivityTimer(): void;
43
+ /**
44
+ * For tests only — reports whether the timer is currently running.
45
+ */
46
+ export declare function _isArcInactivityTimerRunningForTests(): boolean;
47
+ //# sourceMappingURL=arc-inactivity-timer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arc-inactivity-timer.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/arc-inactivity-timer.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAuB3D;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,GAAE,MAAyB,GAAG,OAAO,CAAC;IACxG,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAoCD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAoBhE;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAe1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAED;;GAEG;AACH,wBAAgB,oCAAoC,IAAI,OAAO,CAE9D"}