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,140 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { PipelineFlag, PipelineFlagType, PipelineFlagWriter, ScopeCheck, ReviewVerdict, FlagActionTaken } from "./types.js";
3
+ /**
4
+ * Create the pipeline_flags table + indexes if they don't exist. Safe to call
5
+ * repeatedly (CREATE IF NOT EXISTS + indexes are idempotent).
6
+ *
7
+ * Caller responsibility: invoke once at server boot. Writers do NOT auto-
8
+ * create the table — they assume it exists. Keeps the call graph predictable
9
+ * (no silent side effects in hot paths). Matches pass2-quarantine.ts pattern.
10
+ *
11
+ * criteria_json + review/action fields are stored as nullable TEXT so the
12
+ * shape can evolve without per-field column adds (SQLite JSON1 can query
13
+ * into them if composition analysis ever needed).
14
+ */
15
+ export declare function ensurePipelineFlagsTable(db: Database.Database): void;
16
+ export interface WritePipelineFlagInput {
17
+ flag_type: PipelineFlagType;
18
+ block_id_a: string;
19
+ block_id_b: string | null;
20
+ criteria: Record<string, unknown>;
21
+ scope_check: ScopeCheck;
22
+ origin_writer: PipelineFlagWriter;
23
+ origin_range_id: string | null;
24
+ }
25
+ /**
26
+ * Write a new flag for async-reviewer pickup. Returns the generated id.
27
+ *
28
+ * Writes are additive — multiple flags for the same block_id_a are allowed
29
+ * (different flag_types, or different block_id_b candidates). Reviewer
30
+ * deduplicates by inspecting the unreviewed set + the actual graph state.
31
+ *
32
+ * No FK or shape validation here beyond what SQLite enforces — caller is
33
+ * expected to assemble a valid criteria object per the flag_type's schema
34
+ * (see PIPELINE-SLICE-1-DESIGN.md §3.1).
35
+ */
36
+ export declare function writePipelineFlag(db: Database.Database, input: WritePipelineFlagInput): string;
37
+ export interface MarkFlagReviewedInput {
38
+ flag_id: string;
39
+ verdict: ReviewVerdict;
40
+ reason: string;
41
+ /** What the reviewer actually completed (dup merge / provenance correct/demote).
42
+ * null when the reviewer only wrote a verdict (verdict-only mode). */
43
+ action_taken?: FlagActionTaken;
44
+ winning_block_id?: string | null;
45
+ }
46
+ /**
47
+ * Mark a flag as reviewed — idempotent via `WHERE reviewed_at IS NULL` guard.
48
+ * Returns true if the row was updated, false if it was already reviewed
49
+ * (concurrent reviewer tick won the race, or manual REST review beat the
50
+ * async worker). False is NOT an error — caller logs and moves on.
51
+ *
52
+ * Slice 2.2 reviewer worker (flag-reviewer.ts) writes via this helper after
53
+ * each LLM call. Slice 2.4 REST endpoint (POST /api/flags/:id/review) also
54
+ * uses it for manual operator override.
55
+ */
56
+ export declare function markFlagReviewed(db: Database.Database, input: MarkFlagReviewedInput): boolean;
57
+ /**
58
+ * Route a flag to the AGENT for clarification WITHOUT consuming the single review
59
+ * slot. Sets review_verdict='pending_clarification' + review_reason but leaves
60
+ * reviewed_at NULL, so:
61
+ * - getPendingFlags excludes it (the autonomous reviewer won't re-process it), AND
62
+ * - the agent can still resolve it via POST /api/flags/:id/review — that endpoint
63
+ * guards on reviewed_at (not verdict), so the agent's later verdict IS the real
64
+ * review and overwrites this routing marker.
65
+ *
66
+ * Used by the reviewer for owner-unknown flags it must NOT auto-decide: ownership
67
+ * needs context the autonomous reviewer lacks (the conversation + the ability to ask
68
+ * the user). FLAG, don't guess. Returns true if a row was updated (false if the flag
69
+ * was already reviewed, or already routed).
70
+ */
71
+ export declare function markFlagPendingClarification(db: Database.Database, input: {
72
+ flag_id: string;
73
+ reason: string;
74
+ }): boolean;
75
+ export interface GetPendingFlagsOpts {
76
+ flag_type?: PipelineFlagType;
77
+ origin_writer?: PipelineFlagWriter;
78
+ limit?: number;
79
+ }
80
+ /**
81
+ * Get flags awaiting review (reviewed_at IS NULL). Default limit 100.
82
+ * Used by Slice 2 async reviewer worker. Also useful for debug REST endpoint
83
+ * (Slice 2 will add GET /api/flags).
84
+ */
85
+ export declare function getPendingFlags(db: Database.Database, opts?: GetPendingFlagsOpts): PipelineFlag[];
86
+ /**
87
+ * Flags routed to the AGENT for clarification (reviewed_at NULL + verdict=
88
+ * 'pending_clarification'). The context hook surfaces these as plain-English
89
+ * questions; the agent resolves them (POST /api/flags/:id/review) or asks the user.
90
+ * Oldest first (resolve the longest-waiting ambiguity first).
91
+ */
92
+ export declare function getAgentPendingFlags(db: Database.Database, opts?: {
93
+ limit?: number;
94
+ }): PipelineFlag[];
95
+ /**
96
+ * Cheap COUNT of flags routed to the agent (same predicate as getAgentPendingFlags,
97
+ * no row materialization). Drives the lightweight "N items need your input" nudge
98
+ * that rides on every tool result — a passive MCP tool can't push, so the agent
99
+ * discovers pending work by bumping into this on calls it was already making.
100
+ */
101
+ export declare function countAgentPendingFlags(db: Database.Database): number;
102
+ export interface ListFlagsOpts {
103
+ flag_type?: PipelineFlagType;
104
+ origin_writer?: PipelineFlagWriter;
105
+ /** true → only reviewed; false → only unreviewed; undefined → all. */
106
+ reviewed?: boolean;
107
+ block_id?: string;
108
+ limit?: number;
109
+ }
110
+ /**
111
+ * General flag lister for the REST endpoint (Slice 2.4). Unlike getPendingFlags
112
+ * (unreviewed-only), this handles the reviewed=true / =false / =all (undefined)
113
+ * tri-state + a block_id filter (matches either block_id_a or block_id_b).
114
+ * Newest-first ordering (REST consumers want the recent flags up top).
115
+ */
116
+ export declare function listFlags(db: Database.Database, opts?: ListFlagsOpts): PipelineFlag[];
117
+ /** Single flag by id, or null if not found. */
118
+ export declare function getFlagById(db: Database.Database, id: string): PipelineFlag | null;
119
+ /**
120
+ * Get all flags for a given block (reviewed or not). Useful for surfacing
121
+ * flag history per block (Slice 2 REST endpoint, debug, audit).
122
+ */
123
+ export declare function getFlagsForBlock(db: Database.Database, blockId: string): PipelineFlag[];
124
+ /**
125
+ * Summary counts — useful for telemetry + debug visibility (mirrors
126
+ * summarizeQuarantine pattern from pass2-quarantine.ts).
127
+ */
128
+ export declare function summarizePipelineFlags(db: Database.Database): {
129
+ total: number;
130
+ unreviewed: number;
131
+ by_type: Array<{
132
+ flag_type: string;
133
+ count: number;
134
+ }>;
135
+ by_writer: Array<{
136
+ origin_writer: string;
137
+ count: number;
138
+ }>;
139
+ };
140
+ //# sourceMappingURL=pipeline-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-flags.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pipeline-flags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,314 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════════
2
+ // DEBT 5 Slice 1 — PIPELINE FLAGS (Stage FLAG infrastructure)
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ //
5
+ // Replaces auto-drop semantics in dedupBySourceAndValue + provides the durable
6
+ // flag persistence layer for Stage AUDIT (Slice 2) + entity resolution
7
+ // uncertainty (Stage C, Sub-step 1.2).
8
+ //
9
+ // Per user direction: system FLAGS, reasoning MERGES. This module is the
10
+ // system FLAGS half — code-only, no LLM, just durable persistence of
11
+ // "these two blocks look like duplicates — needs reasoning to decide."
12
+ //
13
+ // The async LLM reviewer (Slice 2) is the reasoning MERGES half — it
14
+ // consumes rows written here, calls LLM with full context, writes verdict +
15
+ // optional merge action back.
16
+ //
17
+ // Pattern reference: pass2-quarantine.ts (table + writer + reader module).
18
+ // Per docs/PIPELINE-SLICE-1-DESIGN.md §3.
19
+ //
20
+ // Sub-step 1.1 (this file): table schema + function signatures + stub impls.
21
+ // - ensurePipelineFlagsTable: real impl (idempotent CREATE)
22
+ // - writePipelineFlag: real impl (INSERT)
23
+ // - getPendingFlags: real impl (SELECT)
24
+ // No callers yet — Sub-step 1.4 wires Stage FLAG to call writePipelineFlag.
25
+ //
26
+ // What this module does NOT do:
27
+ // - The async LLM reviewer (that's Slice 2 — its own module)
28
+ // - Stage AUDIT background process (that's Slice 2)
29
+ // - Auto-merge actions (reviewer's job, not flag-writer's)
30
+ import { v4 as uuidv4 } from "uuid";
31
+ // ─── Schema migration ──────────────────────────────────────────────────────────
32
+ /**
33
+ * Create the pipeline_flags table + indexes if they don't exist. Safe to call
34
+ * repeatedly (CREATE IF NOT EXISTS + indexes are idempotent).
35
+ *
36
+ * Caller responsibility: invoke once at server boot. Writers do NOT auto-
37
+ * create the table — they assume it exists. Keeps the call graph predictable
38
+ * (no silent side effects in hot paths). Matches pass2-quarantine.ts pattern.
39
+ *
40
+ * criteria_json + review/action fields are stored as nullable TEXT so the
41
+ * shape can evolve without per-field column adds (SQLite JSON1 can query
42
+ * into them if composition analysis ever needed).
43
+ */
44
+ export function ensurePipelineFlagsTable(db) {
45
+ db.exec(`
46
+ CREATE TABLE IF NOT EXISTS pipeline_flags (
47
+ id TEXT PRIMARY KEY,
48
+ flag_type TEXT NOT NULL,
49
+ block_id_a TEXT NOT NULL,
50
+ block_id_b TEXT,
51
+ criteria_json TEXT NOT NULL,
52
+ scope_check TEXT NOT NULL,
53
+ origin_writer TEXT NOT NULL,
54
+ origin_range_id TEXT,
55
+ created_at TEXT NOT NULL,
56
+
57
+ reviewed_at TEXT,
58
+ review_verdict TEXT,
59
+ review_reason TEXT,
60
+
61
+ action_taken TEXT,
62
+ action_at TEXT,
63
+ winning_block_id TEXT,
64
+
65
+ FOREIGN KEY (block_id_a) REFERENCES blocks(id),
66
+ FOREIGN KEY (block_id_b) REFERENCES blocks(id),
67
+ FOREIGN KEY (origin_range_id) REFERENCES conversation_turn_ranges(id),
68
+ FOREIGN KEY (winning_block_id) REFERENCES blocks(id)
69
+ )
70
+ `);
71
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_pipeline_flags_unreviewed
72
+ ON pipeline_flags(reviewed_at) WHERE reviewed_at IS NULL`);
73
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_pipeline_flags_type
74
+ ON pipeline_flags(flag_type)`);
75
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_pipeline_flags_block_a
76
+ ON pipeline_flags(block_id_a)`);
77
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_pipeline_flags_origin_writer
78
+ ON pipeline_flags(origin_writer)`);
79
+ }
80
+ /**
81
+ * Write a new flag for async-reviewer pickup. Returns the generated id.
82
+ *
83
+ * Writes are additive — multiple flags for the same block_id_a are allowed
84
+ * (different flag_types, or different block_id_b candidates). Reviewer
85
+ * deduplicates by inspecting the unreviewed set + the actual graph state.
86
+ *
87
+ * No FK or shape validation here beyond what SQLite enforces — caller is
88
+ * expected to assemble a valid criteria object per the flag_type's schema
89
+ * (see PIPELINE-SLICE-1-DESIGN.md §3.1).
90
+ */
91
+ export function writePipelineFlag(db, input) {
92
+ const id = `pfl_${uuidv4().slice(0, 12)}`;
93
+ const stmt = db.prepare(`
94
+ INSERT INTO pipeline_flags (
95
+ id, flag_type, block_id_a, block_id_b, criteria_json,
96
+ scope_check, origin_writer, origin_range_id, created_at,
97
+ reviewed_at, review_verdict, review_reason,
98
+ action_taken, action_at, winning_block_id
99
+ ) VALUES (
100
+ @id, @flag_type, @block_id_a, @block_id_b, @criteria_json,
101
+ @scope_check, @origin_writer, @origin_range_id, @created_at,
102
+ NULL, NULL, NULL,
103
+ NULL, NULL, NULL
104
+ )
105
+ `);
106
+ stmt.run({
107
+ id,
108
+ flag_type: input.flag_type,
109
+ block_id_a: input.block_id_a,
110
+ block_id_b: input.block_id_b,
111
+ criteria_json: JSON.stringify(input.criteria ?? {}),
112
+ scope_check: input.scope_check,
113
+ origin_writer: input.origin_writer,
114
+ origin_range_id: input.origin_range_id,
115
+ created_at: new Date().toISOString(),
116
+ });
117
+ return id;
118
+ }
119
+ /**
120
+ * Mark a flag as reviewed — idempotent via `WHERE reviewed_at IS NULL` guard.
121
+ * Returns true if the row was updated, false if it was already reviewed
122
+ * (concurrent reviewer tick won the race, or manual REST review beat the
123
+ * async worker). False is NOT an error — caller logs and moves on.
124
+ *
125
+ * Slice 2.2 reviewer worker (flag-reviewer.ts) writes via this helper after
126
+ * each LLM call. Slice 2.4 REST endpoint (POST /api/flags/:id/review) also
127
+ * uses it for manual operator override.
128
+ */
129
+ export function markFlagReviewed(db, input) {
130
+ const stmt = db.prepare(`
131
+ UPDATE pipeline_flags
132
+ SET reviewed_at = @reviewed_at,
133
+ review_verdict = @verdict,
134
+ review_reason = @reason,
135
+ action_taken = @action_taken,
136
+ action_at = @action_at,
137
+ winning_block_id = @winning_block_id
138
+ WHERE id = @flag_id
139
+ AND reviewed_at IS NULL
140
+ `);
141
+ const action_taken = input.action_taken ?? null;
142
+ const r = stmt.run({
143
+ flag_id: input.flag_id,
144
+ reviewed_at: new Date().toISOString(),
145
+ verdict: input.verdict,
146
+ reason: input.reason,
147
+ action_taken,
148
+ // action_at populated only when an action actually fired
149
+ action_at: action_taken && action_taken !== 'none' ? new Date().toISOString() : null,
150
+ winning_block_id: input.winning_block_id ?? null,
151
+ });
152
+ return r.changes === 1;
153
+ }
154
+ /**
155
+ * Route a flag to the AGENT for clarification WITHOUT consuming the single review
156
+ * slot. Sets review_verdict='pending_clarification' + review_reason but leaves
157
+ * reviewed_at NULL, so:
158
+ * - getPendingFlags excludes it (the autonomous reviewer won't re-process it), AND
159
+ * - the agent can still resolve it via POST /api/flags/:id/review — that endpoint
160
+ * guards on reviewed_at (not verdict), so the agent's later verdict IS the real
161
+ * review and overwrites this routing marker.
162
+ *
163
+ * Used by the reviewer for owner-unknown flags it must NOT auto-decide: ownership
164
+ * needs context the autonomous reviewer lacks (the conversation + the ability to ask
165
+ * the user). FLAG, don't guess. Returns true if a row was updated (false if the flag
166
+ * was already reviewed, or already routed).
167
+ */
168
+ export function markFlagPendingClarification(db, input) {
169
+ const stmt = db.prepare(`
170
+ UPDATE pipeline_flags
171
+ SET review_verdict = 'pending_clarification',
172
+ review_reason = @reason
173
+ WHERE id = @flag_id
174
+ AND reviewed_at IS NULL
175
+ AND (review_verdict IS NULL OR review_verdict != 'pending_clarification')
176
+ `);
177
+ const r = stmt.run({ flag_id: input.flag_id, reason: input.reason });
178
+ return r.changes === 1;
179
+ }
180
+ function rowToFlag(row) {
181
+ let criteria = {};
182
+ try {
183
+ criteria = JSON.parse(row.criteria_json);
184
+ }
185
+ catch { /* tolerate bad JSON — empty criteria */ }
186
+ return {
187
+ id: row.id,
188
+ flag_type: row.flag_type,
189
+ block_id_a: row.block_id_a,
190
+ block_id_b: row.block_id_b,
191
+ criteria,
192
+ scope_check: row.scope_check,
193
+ origin_writer: row.origin_writer,
194
+ origin_range_id: row.origin_range_id,
195
+ created_at: row.created_at,
196
+ reviewed_at: row.reviewed_at,
197
+ review_verdict: row.review_verdict ?? null,
198
+ review_reason: row.review_reason,
199
+ action_taken: row.action_taken ?? null,
200
+ action_at: row.action_at,
201
+ winning_block_id: row.winning_block_id,
202
+ };
203
+ }
204
+ /**
205
+ * Get flags awaiting review (reviewed_at IS NULL). Default limit 100.
206
+ * Used by Slice 2 async reviewer worker. Also useful for debug REST endpoint
207
+ * (Slice 2 will add GET /api/flags).
208
+ */
209
+ export function getPendingFlags(db, opts = {}) {
210
+ // Exclude flags routed to the agent (verdict='pending_clarification', reviewed_at
211
+ // still NULL) — those await the agent/user, not the autonomous reviewer. Without
212
+ // this the reviewer would re-route them every tick.
213
+ const where = [
214
+ "reviewed_at IS NULL",
215
+ "(review_verdict IS NULL OR review_verdict != 'pending_clarification')",
216
+ ];
217
+ const params = {};
218
+ if (opts.flag_type) {
219
+ where.push("flag_type = @flag_type");
220
+ params.flag_type = opts.flag_type;
221
+ }
222
+ if (opts.origin_writer) {
223
+ where.push("origin_writer = @origin_writer");
224
+ params.origin_writer = opts.origin_writer;
225
+ }
226
+ const limit = opts.limit ?? 100;
227
+ const sql = `SELECT * FROM pipeline_flags WHERE ${where.join(" AND ")} ORDER BY created_at ASC LIMIT ${limit}`;
228
+ const rows = db.prepare(sql).all(params);
229
+ return rows.map(rowToFlag);
230
+ }
231
+ /**
232
+ * Flags routed to the AGENT for clarification (reviewed_at NULL + verdict=
233
+ * 'pending_clarification'). The context hook surfaces these as plain-English
234
+ * questions; the agent resolves them (POST /api/flags/:id/review) or asks the user.
235
+ * Oldest first (resolve the longest-waiting ambiguity first).
236
+ */
237
+ export function getAgentPendingFlags(db, opts = {}) {
238
+ const limit = opts.limit ?? 20;
239
+ const rows = db.prepare(`SELECT * FROM pipeline_flags
240
+ WHERE reviewed_at IS NULL AND review_verdict = 'pending_clarification'
241
+ ORDER BY created_at ASC LIMIT ${limit}`).all();
242
+ return rows.map(rowToFlag);
243
+ }
244
+ /**
245
+ * Cheap COUNT of flags routed to the agent (same predicate as getAgentPendingFlags,
246
+ * no row materialization). Drives the lightweight "N items need your input" nudge
247
+ * that rides on every tool result — a passive MCP tool can't push, so the agent
248
+ * discovers pending work by bumping into this on calls it was already making.
249
+ */
250
+ export function countAgentPendingFlags(db) {
251
+ const row = db.prepare(`SELECT COUNT(*) AS n FROM pipeline_flags
252
+ WHERE reviewed_at IS NULL AND review_verdict = 'pending_clarification'`).get();
253
+ return row?.n ?? 0;
254
+ }
255
+ /**
256
+ * General flag lister for the REST endpoint (Slice 2.4). Unlike getPendingFlags
257
+ * (unreviewed-only), this handles the reviewed=true / =false / =all (undefined)
258
+ * tri-state + a block_id filter (matches either block_id_a or block_id_b).
259
+ * Newest-first ordering (REST consumers want the recent flags up top).
260
+ */
261
+ export function listFlags(db, opts = {}) {
262
+ const where = [];
263
+ const params = {};
264
+ if (opts.flag_type) {
265
+ where.push("flag_type = @flag_type");
266
+ params.flag_type = opts.flag_type;
267
+ }
268
+ if (opts.origin_writer) {
269
+ where.push("origin_writer = @origin_writer");
270
+ params.origin_writer = opts.origin_writer;
271
+ }
272
+ if (opts.reviewed === true)
273
+ where.push("reviewed_at IS NOT NULL");
274
+ if (opts.reviewed === false)
275
+ where.push("reviewed_at IS NULL");
276
+ if (opts.block_id) {
277
+ where.push("(block_id_a = @block_id OR block_id_b = @block_id)");
278
+ params.block_id = opts.block_id;
279
+ }
280
+ const limit = opts.limit ?? 100;
281
+ const whereClause = where.length ? `WHERE ${where.join(" AND ")}` : "";
282
+ const sql = `SELECT * FROM pipeline_flags ${whereClause} ORDER BY created_at DESC LIMIT ${limit}`;
283
+ const rows = db.prepare(sql).all(params);
284
+ return rows.map(rowToFlag);
285
+ }
286
+ /** Single flag by id, or null if not found. */
287
+ export function getFlagById(db, id) {
288
+ const row = db.prepare(`SELECT * FROM pipeline_flags WHERE id = ?`).get(id);
289
+ return row ? rowToFlag(row) : null;
290
+ }
291
+ /**
292
+ * Get all flags for a given block (reviewed or not). Useful for surfacing
293
+ * flag history per block (Slice 2 REST endpoint, debug, audit).
294
+ */
295
+ export function getFlagsForBlock(db, blockId) {
296
+ const rows = db.prepare(`
297
+ SELECT * FROM pipeline_flags
298
+ WHERE block_id_a = @blockId OR block_id_b = @blockId
299
+ ORDER BY created_at DESC
300
+ `).all({ blockId });
301
+ return rows.map(rowToFlag);
302
+ }
303
+ /**
304
+ * Summary counts — useful for telemetry + debug visibility (mirrors
305
+ * summarizeQuarantine pattern from pass2-quarantine.ts).
306
+ */
307
+ export function summarizePipelineFlags(db) {
308
+ const total = db.prepare(`SELECT COUNT(*) as n FROM pipeline_flags`).get().n;
309
+ const unreviewed = db.prepare(`SELECT COUNT(*) as n FROM pipeline_flags WHERE reviewed_at IS NULL`).get().n;
310
+ const by_type = db.prepare(`SELECT flag_type, COUNT(*) as count FROM pipeline_flags GROUP BY flag_type ORDER BY count DESC`).all();
311
+ const by_writer = db.prepare(`SELECT origin_writer, COUNT(*) as count FROM pipeline_flags GROUP BY origin_writer ORDER BY count DESC`).all();
312
+ return { total, unreviewed, by_type, by_writer };
313
+ }
314
+ //# sourceMappingURL=pipeline-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-flags.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pipeline-flags.ts"],"names":[],"mappings":"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"}