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.
- package/adapters/claude-code-watcher.mjs +336 -0
- package/adapters/hermes-statedb-watcher.mjs +234 -0
- package/adapters/nodedex-capture-core.mjs +129 -0
- package/adapters/nodedex-capture.mjs +169 -0
- package/dist/agent-protocol.d.ts +7 -0
- package/dist/agent-protocol.d.ts.map +1 -0
- package/dist/agent-protocol.js +38 -0
- package/dist/agent-protocol.js.map +1 -0
- package/dist/api-server.d.ts +5 -0
- package/dist/api-server.d.ts.map +1 -0
- package/dist/api-server.js +351 -0
- package/dist/api-server.js.map +1 -0
- package/dist/boot-env.d.ts +2 -0
- package/dist/boot-env.d.ts.map +1 -0
- package/dist/boot-env.js +12 -0
- package/dist/boot-env.js.map +1 -0
- package/dist/engine/__tests__/search-core.test.d.ts +2 -0
- package/dist/engine/__tests__/search-core.test.d.ts.map +1 -0
- package/dist/engine/__tests__/search-core.test.js +139 -0
- package/dist/engine/__tests__/search-core.test.js.map +1 -0
- package/dist/engine/ai-provider.d.ts +45 -0
- package/dist/engine/ai-provider.d.ts.map +1 -0
- package/dist/engine/ai-provider.js +5 -0
- package/dist/engine/ai-provider.js.map +1 -0
- package/dist/engine/embeddings.d.ts +51 -0
- package/dist/engine/embeddings.d.ts.map +1 -0
- package/dist/engine/embeddings.js +89 -0
- package/dist/engine/embeddings.js.map +1 -0
- package/dist/engine/providers/__tests__/failure-policy.test.d.ts +2 -0
- package/dist/engine/providers/__tests__/failure-policy.test.d.ts.map +1 -0
- package/dist/engine/providers/__tests__/failure-policy.test.js +134 -0
- package/dist/engine/providers/__tests__/failure-policy.test.js.map +1 -0
- package/dist/engine/providers/__tests__/model-caps.test.d.ts +2 -0
- package/dist/engine/providers/__tests__/model-caps.test.d.ts.map +1 -0
- package/dist/engine/providers/__tests__/model-caps.test.js +38 -0
- package/dist/engine/providers/__tests__/model-caps.test.js.map +1 -0
- package/dist/engine/providers/__tests__/openai-structured.test.d.ts +2 -0
- package/dist/engine/providers/__tests__/openai-structured.test.d.ts.map +1 -0
- package/dist/engine/providers/__tests__/openai-structured.test.js +73 -0
- package/dist/engine/providers/__tests__/openai-structured.test.js.map +1 -0
- package/dist/engine/providers/__tests__/usage-ledger.test.d.ts +2 -0
- package/dist/engine/providers/__tests__/usage-ledger.test.d.ts.map +1 -0
- package/dist/engine/providers/__tests__/usage-ledger.test.js +108 -0
- package/dist/engine/providers/__tests__/usage-ledger.test.js.map +1 -0
- package/dist/engine/providers/anthropic.d.ts +17 -0
- package/dist/engine/providers/anthropic.d.ts.map +1 -0
- package/dist/engine/providers/anthropic.js +125 -0
- package/dist/engine/providers/anthropic.js.map +1 -0
- package/dist/engine/providers/failure-policy.d.ts +56 -0
- package/dist/engine/providers/failure-policy.d.ts.map +1 -0
- package/dist/engine/providers/failure-policy.js +120 -0
- package/dist/engine/providers/failure-policy.js.map +1 -0
- package/dist/engine/providers/gemini.d.ts +22 -0
- package/dist/engine/providers/gemini.d.ts.map +1 -0
- package/dist/engine/providers/gemini.js +180 -0
- package/dist/engine/providers/gemini.js.map +1 -0
- package/dist/engine/providers/index.d.ts +8 -0
- package/dist/engine/providers/index.d.ts.map +1 -0
- package/dist/engine/providers/index.js +67 -0
- package/dist/engine/providers/index.js.map +1 -0
- package/dist/engine/providers/local.d.ts +12 -0
- package/dist/engine/providers/local.d.ts.map +1 -0
- package/dist/engine/providers/local.js +46 -0
- package/dist/engine/providers/local.js.map +1 -0
- package/dist/engine/providers/model-caps.d.ts +6 -0
- package/dist/engine/providers/model-caps.d.ts.map +1 -0
- package/dist/engine/providers/model-caps.js +49 -0
- package/dist/engine/providers/model-caps.js.map +1 -0
- package/dist/engine/providers/openai.d.ts +30 -0
- package/dist/engine/providers/openai.d.ts.map +1 -0
- package/dist/engine/providers/openai.js +309 -0
- package/dist/engine/providers/openai.js.map +1 -0
- package/dist/engine/providers/usage-ledger.d.ts +69 -0
- package/dist/engine/providers/usage-ledger.d.ts.map +1 -0
- package/dist/engine/providers/usage-ledger.js +209 -0
- package/dist/engine/providers/usage-ledger.js.map +1 -0
- package/dist/engine/search-core.d.ts +40 -0
- package/dist/engine/search-core.d.ts.map +1 -0
- package/dist/engine/search-core.js +109 -0
- package/dist/engine/search-core.js.map +1 -0
- package/dist/engine/vector-math.d.ts +5 -0
- package/dist/engine/vector-math.d.ts.map +1 -0
- package/dist/engine/vector-math.js +25 -0
- package/dist/engine/vector-math.js.map +1 -0
- package/dist/home-env.d.ts +26 -0
- package/dist/home-env.d.ts.map +1 -0
- package/dist/home-env.js +87 -0
- package/dist/home-env.js.map +1 -0
- package/dist/mcp-server.d.ts +13 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +79 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/middleware/auth.d.ts +23 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +104 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/auto-recall.d.ts +7 -0
- package/dist/middleware/auto-recall.d.ts.map +1 -0
- package/dist/middleware/auto-recall.js +257 -0
- package/dist/middleware/auto-recall.js.map +1 -0
- package/dist/middleware/auto-reflect.d.ts +4 -0
- package/dist/middleware/auto-reflect.d.ts.map +1 -0
- package/dist/middleware/auto-reflect.js +5 -0
- package/dist/middleware/auto-reflect.js.map +1 -0
- package/dist/middleware/reflect/apply-flag-verdict.d.ts +27 -0
- package/dist/middleware/reflect/apply-flag-verdict.d.ts.map +1 -0
- package/dist/middleware/reflect/apply-flag-verdict.js +57 -0
- package/dist/middleware/reflect/apply-flag-verdict.js.map +1 -0
- package/dist/middleware/reflect/arc-entity-resolve.d.ts +29 -0
- package/dist/middleware/reflect/arc-entity-resolve.d.ts.map +1 -0
- package/dist/middleware/reflect/arc-entity-resolve.js +356 -0
- package/dist/middleware/reflect/arc-entity-resolve.js.map +1 -0
- package/dist/middleware/reflect/arc-inactivity-timer.d.ts +47 -0
- package/dist/middleware/reflect/arc-inactivity-timer.d.ts.map +1 -0
- package/dist/middleware/reflect/arc-inactivity-timer.js +175 -0
- package/dist/middleware/reflect/arc-inactivity-timer.js.map +1 -0
- package/dist/middleware/reflect/arc-pipeline.d.ts +33 -0
- package/dist/middleware/reflect/arc-pipeline.d.ts.map +1 -0
- package/dist/middleware/reflect/arc-pipeline.js +498 -0
- package/dist/middleware/reflect/arc-pipeline.js.map +1 -0
- package/dist/middleware/reflect/comprehend-pergroup.d.ts +100 -0
- package/dist/middleware/reflect/comprehend-pergroup.d.ts.map +1 -0
- package/dist/middleware/reflect/comprehend-pergroup.js +610 -0
- package/dist/middleware/reflect/comprehend-pergroup.js.map +1 -0
- package/dist/middleware/reflect/comprehend.d.ts +237 -0
- package/dist/middleware/reflect/comprehend.d.ts.map +1 -0
- package/dist/middleware/reflect/comprehend.js +706 -0
- package/dist/middleware/reflect/comprehend.js.map +1 -0
- package/dist/middleware/reflect/config.d.ts +34 -0
- package/dist/middleware/reflect/config.d.ts.map +1 -0
- package/dist/middleware/reflect/config.js +131 -0
- package/dist/middleware/reflect/config.js.map +1 -0
- package/dist/middleware/reflect/context.d.ts +138 -0
- package/dist/middleware/reflect/context.d.ts.map +1 -0
- package/dist/middleware/reflect/context.js +619 -0
- package/dist/middleware/reflect/context.js.map +1 -0
- package/dist/middleware/reflect/cost-breakdown.d.ts +69 -0
- package/dist/middleware/reflect/cost-breakdown.d.ts.map +1 -0
- package/dist/middleware/reflect/cost-breakdown.js +63 -0
- package/dist/middleware/reflect/cost-breakdown.js.map +1 -0
- package/dist/middleware/reflect/cost-guard.d.ts +102 -0
- package/dist/middleware/reflect/cost-guard.d.ts.map +1 -0
- package/dist/middleware/reflect/cost-guard.js +243 -0
- package/dist/middleware/reflect/cost-guard.js.map +1 -0
- package/dist/middleware/reflect/cost-pricing.d.ts +54 -0
- package/dist/middleware/reflect/cost-pricing.d.ts.map +1 -0
- package/dist/middleware/reflect/cost-pricing.js +148 -0
- package/dist/middleware/reflect/cost-pricing.js.map +1 -0
- package/dist/middleware/reflect/cross-group-link.d.ts +61 -0
- package/dist/middleware/reflect/cross-group-link.d.ts.map +1 -0
- package/dist/middleware/reflect/cross-group-link.js +212 -0
- package/dist/middleware/reflect/cross-group-link.js.map +1 -0
- package/dist/middleware/reflect/dedup-by-source-and-value.d.ts +70 -0
- package/dist/middleware/reflect/dedup-by-source-and-value.d.ts.map +1 -0
- package/dist/middleware/reflect/dedup-by-source-and-value.js +0 -0
- package/dist/middleware/reflect/dedup-by-source-and-value.js.map +1 -0
- package/dist/middleware/reflect/describe-roots.d.ts +58 -0
- package/dist/middleware/reflect/describe-roots.d.ts.map +1 -0
- package/dist/middleware/reflect/describe-roots.js +266 -0
- package/dist/middleware/reflect/describe-roots.js.map +1 -0
- package/dist/middleware/reflect/flag-reviewer-startup.d.ts +16 -0
- package/dist/middleware/reflect/flag-reviewer-startup.d.ts.map +1 -0
- package/dist/middleware/reflect/flag-reviewer-startup.js +107 -0
- package/dist/middleware/reflect/flag-reviewer-startup.js.map +1 -0
- package/dist/middleware/reflect/flag-reviewer.d.ts +69 -0
- package/dist/middleware/reflect/flag-reviewer.d.ts.map +1 -0
- package/dist/middleware/reflect/flag-reviewer.js +520 -0
- package/dist/middleware/reflect/flag-reviewer.js.map +1 -0
- package/dist/middleware/reflect/inline-dedup.d.ts +26 -0
- package/dist/middleware/reflect/inline-dedup.d.ts.map +1 -0
- package/dist/middleware/reflect/inline-dedup.js +131 -0
- package/dist/middleware/reflect/inline-dedup.js.map +1 -0
- package/dist/middleware/reflect/justify-decisions.d.ts +37 -0
- package/dist/middleware/reflect/justify-decisions.d.ts.map +1 -0
- package/dist/middleware/reflect/justify-decisions.js +159 -0
- package/dist/middleware/reflect/justify-decisions.js.map +1 -0
- package/dist/middleware/reflect/nl-accept.d.ts +35 -0
- package/dist/middleware/reflect/nl-accept.d.ts.map +1 -0
- package/dist/middleware/reflect/nl-accept.js +167 -0
- package/dist/middleware/reflect/nl-accept.js.map +1 -0
- package/dist/middleware/reflect/pass0.d.ts +20 -0
- package/dist/middleware/reflect/pass0.d.ts.map +1 -0
- package/dist/middleware/reflect/pass0.js +423 -0
- package/dist/middleware/reflect/pass0.js.map +1 -0
- package/dist/middleware/reflect/pass1.d.ts +17 -0
- package/dist/middleware/reflect/pass1.d.ts.map +1 -0
- package/dist/middleware/reflect/pass1.js +241 -0
- package/dist/middleware/reflect/pass1.js.map +1 -0
- package/dist/middleware/reflect/pass2-quarantine.d.ts +129 -0
- package/dist/middleware/reflect/pass2-quarantine.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2-quarantine.js +272 -0
- package/dist/middleware/reflect/pass2-quarantine.js.map +1 -0
- package/dist/middleware/reflect/pass2-seams.d.ts +205 -0
- package/dist/middleware/reflect/pass2-seams.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2-seams.js +279 -0
- package/dist/middleware/reflect/pass2-seams.js.map +1 -0
- package/dist/middleware/reflect/pass2-split-orchestrator.d.ts +37 -0
- package/dist/middleware/reflect/pass2-split-orchestrator.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2-split-orchestrator.js +531 -0
- package/dist/middleware/reflect/pass2-split-orchestrator.js.map +1 -0
- package/dist/middleware/reflect/pass2.d.ts +17 -0
- package/dist/middleware/reflect/pass2.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2.js +324 -0
- package/dist/middleware/reflect/pass2.js.map +1 -0
- package/dist/middleware/reflect/pass2a.d.ts +141 -0
- package/dist/middleware/reflect/pass2a.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2a.js +404 -0
- package/dist/middleware/reflect/pass2a.js.map +1 -0
- package/dist/middleware/reflect/pass2b.d.ts +108 -0
- package/dist/middleware/reflect/pass2b.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2b.js +480 -0
- package/dist/middleware/reflect/pass2b.js.map +1 -0
- package/dist/middleware/reflect/pass2c.d.ts +113 -0
- package/dist/middleware/reflect/pass2c.d.ts.map +1 -0
- package/dist/middleware/reflect/pass2c.js +360 -0
- package/dist/middleware/reflect/pass2c.js.map +1 -0
- package/dist/middleware/reflect/pass3-batch.d.ts +62 -0
- package/dist/middleware/reflect/pass3-batch.d.ts.map +1 -0
- package/dist/middleware/reflect/pass3-batch.js +139 -0
- package/dist/middleware/reflect/pass3-batch.js.map +1 -0
- package/dist/middleware/reflect/pass3.d.ts +23 -0
- package/dist/middleware/reflect/pass3.d.ts.map +1 -0
- package/dist/middleware/reflect/pass3.js +371 -0
- package/dist/middleware/reflect/pass3.js.map +1 -0
- package/dist/middleware/reflect/pass4-slice.d.ts +25 -0
- package/dist/middleware/reflect/pass4-slice.d.ts.map +1 -0
- package/dist/middleware/reflect/pass4-slice.js +315 -0
- package/dist/middleware/reflect/pass4-slice.js.map +1 -0
- package/dist/middleware/reflect/pass4.d.ts +30 -0
- package/dist/middleware/reflect/pass4.d.ts.map +1 -0
- package/dist/middleware/reflect/pass4.js +193 -0
- package/dist/middleware/reflect/pass4.js.map +1 -0
- package/dist/middleware/reflect/pass5.d.ts +22 -0
- package/dist/middleware/reflect/pass5.d.ts.map +1 -0
- package/dist/middleware/reflect/pass5.js +178 -0
- package/dist/middleware/reflect/pass5.js.map +1 -0
- package/dist/middleware/reflect/pass_judge.d.ts +44 -0
- package/dist/middleware/reflect/pass_judge.d.ts.map +1 -0
- package/dist/middleware/reflect/pass_judge.js +263 -0
- package/dist/middleware/reflect/pass_judge.js.map +1 -0
- package/dist/middleware/reflect/pipeline-flags.d.ts +140 -0
- package/dist/middleware/reflect/pipeline-flags.d.ts.map +1 -0
- package/dist/middleware/reflect/pipeline-flags.js +314 -0
- package/dist/middleware/reflect/pipeline-flags.js.map +1 -0
- package/dist/middleware/reflect/pipeline.d.ts +237 -0
- package/dist/middleware/reflect/pipeline.d.ts.map +1 -0
- package/dist/middleware/reflect/pipeline.js +3114 -0
- package/dist/middleware/reflect/pipeline.js.map +1 -0
- package/dist/middleware/reflect/promptOverride.d.ts +14 -0
- package/dist/middleware/reflect/promptOverride.d.ts.map +1 -0
- package/dist/middleware/reflect/promptOverride.js +28 -0
- package/dist/middleware/reflect/promptOverride.js.map +1 -0
- package/dist/middleware/reflect/provenance-check.d.ts +48 -0
- package/dist/middleware/reflect/provenance-check.d.ts.map +1 -0
- package/dist/middleware/reflect/provenance-check.js +180 -0
- package/dist/middleware/reflect/provenance-check.js.map +1 -0
- package/dist/middleware/reflect/provenance-reviewer.d.ts +52 -0
- package/dist/middleware/reflect/provenance-reviewer.d.ts.map +1 -0
- package/dist/middleware/reflect/provenance-reviewer.js +253 -0
- package/dist/middleware/reflect/provenance-reviewer.js.map +1 -0
- package/dist/middleware/reflect/prune-collapsed-types.d.ts +11 -0
- package/dist/middleware/reflect/prune-collapsed-types.d.ts.map +1 -0
- package/dist/middleware/reflect/prune-collapsed-types.js +32 -0
- package/dist/middleware/reflect/prune-collapsed-types.js.map +1 -0
- package/dist/middleware/reflect/recognize-root.d.ts +75 -0
- package/dist/middleware/reflect/recognize-root.d.ts.map +1 -0
- package/dist/middleware/reflect/recognize-root.js +204 -0
- package/dist/middleware/reflect/recognize-root.js.map +1 -0
- package/dist/middleware/reflect/render-agent-flag.d.ts +25 -0
- package/dist/middleware/reflect/render-agent-flag.d.ts.map +1 -0
- package/dist/middleware/reflect/render-agent-flag.js +39 -0
- package/dist/middleware/reflect/render-agent-flag.js.map +1 -0
- package/dist/middleware/reflect/retrieve-graph-slice.d.ts +54 -0
- package/dist/middleware/reflect/retrieve-graph-slice.d.ts.map +1 -0
- package/dist/middleware/reflect/retrieve-graph-slice.js +173 -0
- package/dist/middleware/reflect/retrieve-graph-slice.js.map +1 -0
- package/dist/middleware/reflect/root-relatedness.d.ts +31 -0
- package/dist/middleware/reflect/root-relatedness.d.ts.map +1 -0
- package/dist/middleware/reflect/root-relatedness.js +92 -0
- package/dist/middleware/reflect/root-relatedness.js.map +1 -0
- package/dist/middleware/reflect/schema-heal.d.ts +22 -0
- package/dist/middleware/reflect/schema-heal.d.ts.map +1 -0
- package/dist/middleware/reflect/schema-heal.js +119 -0
- package/dist/middleware/reflect/schema-heal.js.map +1 -0
- package/dist/middleware/reflect/schema-validator.d.ts +85 -0
- package/dist/middleware/reflect/schema-validator.d.ts.map +1 -0
- package/dist/middleware/reflect/schema-validator.js +196 -0
- package/dist/middleware/reflect/schema-validator.js.map +1 -0
- package/dist/middleware/reflect/stage-audit-graph.d.ts +115 -0
- package/dist/middleware/reflect/stage-audit-graph.d.ts.map +1 -0
- package/dist/middleware/reflect/stage-audit-graph.js +563 -0
- package/dist/middleware/reflect/stage-audit-graph.js.map +1 -0
- package/dist/middleware/reflect/stage-d-resolve-graph.d.ts +87 -0
- package/dist/middleware/reflect/stage-d-resolve-graph.d.ts.map +1 -0
- package/dist/middleware/reflect/stage-d-resolve-graph.js +256 -0
- package/dist/middleware/reflect/stage-d-resolve-graph.js.map +1 -0
- package/dist/middleware/reflect/synthesizeFromSceneCard.d.ts +15 -0
- package/dist/middleware/reflect/synthesizeFromSceneCard.d.ts.map +1 -0
- package/dist/middleware/reflect/synthesizeFromSceneCard.js +91 -0
- package/dist/middleware/reflect/synthesizeFromSceneCard.js.map +1 -0
- package/dist/middleware/reflect/types.d.ts +261 -0
- package/dist/middleware/reflect/types.d.ts.map +1 -0
- package/dist/middleware/reflect/types.js +3 -0
- package/dist/middleware/reflect/types.js.map +1 -0
- package/dist/middleware/reflect/v2-integrate.d.ts +120 -0
- package/dist/middleware/reflect/v2-integrate.d.ts.map +1 -0
- package/dist/middleware/reflect/v2-integrate.js +388 -0
- package/dist/middleware/reflect/v2-integrate.js.map +1 -0
- package/dist/middleware/reflect/v2-judge.d.ts +44 -0
- package/dist/middleware/reflect/v2-judge.d.ts.map +1 -0
- package/dist/middleware/reflect/v2-judge.js +191 -0
- package/dist/middleware/reflect/v2-judge.js.map +1 -0
- package/dist/relation-sets.d.ts +2 -0
- package/dist/relation-sets.d.ts.map +1 -0
- package/dist/relation-sets.js +35 -0
- package/dist/relation-sets.js.map +1 -0
- package/dist/routes/__tests__/flags.test.d.ts +2 -0
- package/dist/routes/__tests__/flags.test.d.ts.map +1 -0
- package/dist/routes/__tests__/flags.test.js +257 -0
- package/dist/routes/__tests__/flags.test.js.map +1 -0
- package/dist/routes/__tests__/models-catalog.test.d.ts +2 -0
- package/dist/routes/__tests__/models-catalog.test.d.ts.map +1 -0
- package/dist/routes/__tests__/models-catalog.test.js +130 -0
- package/dist/routes/__tests__/models-catalog.test.js.map +1 -0
- package/dist/routes/__tests__/reflect-pause-drain.test.d.ts +2 -0
- package/dist/routes/__tests__/reflect-pause-drain.test.d.ts.map +1 -0
- package/dist/routes/__tests__/reflect-pause-drain.test.js +38 -0
- package/dist/routes/__tests__/reflect-pause-drain.test.js.map +1 -0
- package/dist/routes/__tests__/spend-pause-drain.test.d.ts +2 -0
- package/dist/routes/__tests__/spend-pause-drain.test.d.ts.map +1 -0
- package/dist/routes/__tests__/spend-pause-drain.test.js +38 -0
- package/dist/routes/__tests__/spend-pause-drain.test.js.map +1 -0
- package/dist/routes/admin.d.ts +49 -0
- package/dist/routes/admin.d.ts.map +1 -0
- package/dist/routes/admin.js +471 -0
- package/dist/routes/admin.js.map +1 -0
- package/dist/routes/blocks.d.ts +4 -0
- package/dist/routes/blocks.d.ts.map +1 -0
- package/dist/routes/blocks.js +893 -0
- package/dist/routes/blocks.js.map +1 -0
- package/dist/routes/chat-proxy.d.ts +5 -0
- package/dist/routes/chat-proxy.d.ts.map +1 -0
- package/dist/routes/chat-proxy.js +225 -0
- package/dist/routes/chat-proxy.js.map +1 -0
- package/dist/routes/conversations.d.ts +4 -0
- package/dist/routes/conversations.d.ts.map +1 -0
- package/dist/routes/conversations.js +139 -0
- package/dist/routes/conversations.js.map +1 -0
- package/dist/routes/flags.d.ts +4 -0
- package/dist/routes/flags.d.ts.map +1 -0
- package/dist/routes/flags.js +151 -0
- package/dist/routes/flags.js.map +1 -0
- package/dist/routes/inject.d.ts +4 -0
- package/dist/routes/inject.d.ts.map +1 -0
- package/dist/routes/inject.js +183 -0
- package/dist/routes/inject.js.map +1 -0
- package/dist/routes/mcp-http.d.ts +5 -0
- package/dist/routes/mcp-http.d.ts.map +1 -0
- package/dist/routes/mcp-http.js +94 -0
- package/dist/routes/mcp-http.js.map +1 -0
- package/dist/routes/quarantine.d.ts +4 -0
- package/dist/routes/quarantine.d.ts.map +1 -0
- package/dist/routes/quarantine.js +66 -0
- package/dist/routes/quarantine.js.map +1 -0
- package/dist/routes/recall.d.ts +5 -0
- package/dist/routes/recall.d.ts.map +1 -0
- package/dist/routes/recall.js +573 -0
- package/dist/routes/recall.js.map +1 -0
- package/dist/routes/reflect.d.ts +5 -0
- package/dist/routes/reflect.d.ts.map +1 -0
- package/dist/routes/reflect.js +231 -0
- package/dist/routes/reflect.js.map +1 -0
- package/dist/routes/session.d.ts +4 -0
- package/dist/routes/session.d.ts.map +1 -0
- package/dist/routes/session.js +418 -0
- package/dist/routes/session.js.map +1 -0
- package/dist/routes/state.d.ts +116 -0
- package/dist/routes/state.d.ts.map +1 -0
- package/dist/routes/state.js +621 -0
- package/dist/routes/state.js.map +1 -0
- package/dist/routes/usage.d.ts +3 -0
- package/dist/routes/usage.d.ts.map +1 -0
- package/dist/routes/usage.js +141 -0
- package/dist/routes/usage.js.map +1 -0
- package/dist/routes/workspace.d.ts +5 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +435 -0
- package/dist/routes/workspace.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +298 -0
- package/dist/server.js.map +1 -0
- package/dist/store/__tests__/backup.test.d.ts +2 -0
- package/dist/store/__tests__/backup.test.d.ts.map +1 -0
- package/dist/store/__tests__/backup.test.js +53 -0
- package/dist/store/__tests__/backup.test.js.map +1 -0
- package/dist/store/__tests__/quality.test.d.ts +2 -0
- package/dist/store/__tests__/quality.test.d.ts.map +1 -0
- package/dist/store/__tests__/quality.test.js +75 -0
- package/dist/store/__tests__/quality.test.js.map +1 -0
- package/dist/store/backup.d.ts +14 -0
- package/dist/store/backup.d.ts.map +1 -0
- package/dist/store/backup.js +95 -0
- package/dist/store/backup.js.map +1 -0
- package/dist/store/database.d.ts +407 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +2004 -0
- package/dist/store/database.js.map +1 -0
- package/dist/store/quality.d.ts +25 -0
- package/dist/store/quality.d.ts.map +1 -0
- package/dist/store/quality.js +48 -0
- package/dist/store/quality.js.map +1 -0
- package/dist/tools/__tests__/assemble-block-chains.test.d.ts +2 -0
- package/dist/tools/__tests__/assemble-block-chains.test.d.ts.map +1 -0
- package/dist/tools/__tests__/assemble-block-chains.test.js +118 -0
- package/dist/tools/__tests__/assemble-block-chains.test.js.map +1 -0
- package/dist/tools/__tests__/filter-roots-by-concepts.test.d.ts +2 -0
- package/dist/tools/__tests__/filter-roots-by-concepts.test.d.ts.map +1 -0
- package/dist/tools/__tests__/filter-roots-by-concepts.test.js +68 -0
- package/dist/tools/__tests__/filter-roots-by-concepts.test.js.map +1 -0
- package/dist/tools/__tests__/flag-surface.test.d.ts +2 -0
- package/dist/tools/__tests__/flag-surface.test.d.ts.map +1 -0
- package/dist/tools/__tests__/flag-surface.test.js +130 -0
- package/dist/tools/__tests__/flag-surface.test.js.map +1 -0
- package/dist/tools/core.d.ts +5 -0
- package/dist/tools/core.d.ts.map +1 -0
- package/dist/tools/core.js +962 -0
- package/dist/tools/core.js.map +1 -0
- package/dist/tools/derive.d.ts +5 -0
- package/dist/tools/derive.d.ts.map +1 -0
- package/dist/tools/derive.js +182 -0
- package/dist/tools/derive.js.map +1 -0
- package/dist/tools/flag-surface.d.ts +26 -0
- package/dist/tools/flag-surface.d.ts.map +1 -0
- package/dist/tools/flag-surface.js +59 -0
- package/dist/tools/flag-surface.js.map +1 -0
- package/dist/tools/helpers.d.ts +99 -0
- package/dist/tools/helpers.d.ts.map +1 -0
- package/dist/tools/helpers.js +243 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/projects.d.ts +5 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +175 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/system.d.ts +5 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +1361 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/tools/tasks.d.ts +5 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +289 -0
- package/dist/tools/tasks.js.map +1 -0
- package/package.json +69 -0
- package/scripts/nodedex-entry.mjs +396 -0
- package/tui-dist/App.js +185 -0
- package/tui-dist/api.js +197 -0
- package/tui-dist/cli.js +53 -0
- package/tui-dist/components.js +63 -0
- package/tui-dist/config.js +242 -0
- package/tui-dist/connect-snippets.js +98 -0
- package/tui-dist/feed.js +51 -0
- package/tui-dist/health.js +465 -0
- package/tui-dist/hooks.js +23 -0
- package/tui-dist/memory.js +220 -0
- package/tui-dist/onboarding.js +498 -0
- package/tui-dist/review.js +193 -0
- package/tui-dist/servers.js +556 -0
- package/tui-dist/smoke.js +15 -0
- package/tui-dist/theme.js +106 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
2
|
+
// v2 SELECTOR β the worth-gate (Fix 1, 2026-06-07)
|
|
3
|
+
//
|
|
4
|
+
// First principles: forming memory is comprehension + SELECTION, two opposing stances
|
|
5
|
+
// (capture vs discard) that can't be one breath β so they're two LLMs. v2's COMPREHEND
|
|
6
|
+
// is the comprehender (high recall); this is the SELECTOR (precision). Without it,
|
|
7
|
+
// COMPREHEND keeps everything it forms (dogfood: 242 blocks from a 19KB doc, all kept).
|
|
8
|
+
//
|
|
9
|
+
// Placement: AFTER COMPREHEND-stitch + convert, BEFORE Pass 2b fill β so a dropped
|
|
10
|
+
// candidate never pays its per-block downstream cost (2b fill, naming, relations).
|
|
11
|
+
//
|
|
12
|
+
// Reuse: v1's PASS JUDGE (pass_judge.ts) IS the discard-biased selector we want β the
|
|
13
|
+
// path-specificity test, default-KEEP-on-uncertain (recall guard), the reason_category
|
|
14
|
+
// enum. We feed it the v2 candidates and apply the verdicts with a v2-aware override.
|
|
15
|
+
//
|
|
16
|
+
// Default-OFF: NODEDEX_V2_JUDGE.
|
|
17
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
18
|
+
import { callPassJudgeLLM } from "./pass_judge.js";
|
|
19
|
+
export function v2JudgeEnabled() {
|
|
20
|
+
// DEFAULT ON since 2026-06-12 (part of the validated v2 stack). =0 opts out.
|
|
21
|
+
return process.env.NODEDEX_V2_JUDGE !== "0";
|
|
22
|
+
}
|
|
23
|
+
/** Context-aware judge (default OFF, NODEDEX_V2_JUDGE_CONTEXT): show the SELECTOR each
|
|
24
|
+
* block's structural ROLE (what depends on it / what it builds on) so it judges worth in
|
|
25
|
+
* context, not by the sentence alone β the proactive complement to the mechanical rescue
|
|
26
|
+
* below. Best paired with cross-link-first (so the role includes cross-group deps);
|
|
27
|
+
* degrades to within-group roles when cross-link runs after the judge. */
|
|
28
|
+
export function v2JudgeContextEnabled() {
|
|
29
|
+
return process.env.NODEDEX_V2_JUDGE_CONTEXT === "1";
|
|
30
|
+
}
|
|
31
|
+
/** Strong causal dependencies: a KEPT item with one of these pointing at a DROPPED item
|
|
32
|
+
* would be orphaned (a decision losing its `based_on` evidence = the islanding failure).
|
|
33
|
+
* These get RESCUED. (Weak `relations[]` β supports/related_to/affects β are NOT rescued;
|
|
34
|
+
* their dangling targets are just cleaned.) Only within-batch item-ids match dropIds;
|
|
35
|
+
* external labels (supersedes_ref/resolved_ref can be labels) simply never match. */
|
|
36
|
+
function strongRefs(it) {
|
|
37
|
+
const out = [];
|
|
38
|
+
if (Array.isArray(it.based_on_items))
|
|
39
|
+
out.push(...it.based_on_items);
|
|
40
|
+
if (Array.isArray(it.triggered_by_items))
|
|
41
|
+
out.push(...it.triggered_by_items);
|
|
42
|
+
if (it.extends_item)
|
|
43
|
+
out.push(it.extends_item);
|
|
44
|
+
if (it.supersedes_ref)
|
|
45
|
+
out.push(it.supersedes_ref);
|
|
46
|
+
if (it.resolved_ref)
|
|
47
|
+
out.push(it.resolved_ref);
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/** Each item's structural ROLE for the context-aware judge: what DEPENDS ON it (incoming
|
|
51
|
+
* edges β the load-bearing signal) and what it BUILDS ON (outgoing), summarized by the
|
|
52
|
+
* NEIGHBOUR blocks' TYPES (ids are noise to the judge). Built over the WHOLE item set, so
|
|
53
|
+
* cross-group roles appear when cross-link ran first; degrades to within-group otherwise.
|
|
54
|
+
* Isolated blocks get no entry (judged on text alone). Pure / testable. */
|
|
55
|
+
export function buildRoleContext(items) {
|
|
56
|
+
const typeOf = new Map(items.map((it) => [it.id, it.type]));
|
|
57
|
+
const outRefs = (it) => {
|
|
58
|
+
const o = strongRefs(it).slice();
|
|
59
|
+
if (Array.isArray(it.relations))
|
|
60
|
+
for (const r of it.relations)
|
|
61
|
+
if (r?.target)
|
|
62
|
+
o.push(r.target);
|
|
63
|
+
return o.filter((id) => typeOf.has(id)); // only in-set refs (external labels never match)
|
|
64
|
+
};
|
|
65
|
+
const incoming = new Map(); // id β types of blocks that point AT it
|
|
66
|
+
for (const it of items) {
|
|
67
|
+
for (const ref of outRefs(it)) {
|
|
68
|
+
const arr = incoming.get(ref) ?? [];
|
|
69
|
+
arr.push(it.type);
|
|
70
|
+
incoming.set(ref, arr);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const summarize = (types) => {
|
|
74
|
+
const counts = new Map();
|
|
75
|
+
for (const t of types)
|
|
76
|
+
counts.set(t, (counts.get(t) ?? 0) + 1);
|
|
77
|
+
return [...counts.entries()].map(([t, n]) => (n > 1 ? `${t}Γ${n}` : t)).join(", ");
|
|
78
|
+
};
|
|
79
|
+
const out = {};
|
|
80
|
+
for (const it of items) {
|
|
81
|
+
const inc = incoming.get(it.id) ?? [];
|
|
82
|
+
const outg = outRefs(it).map((id) => typeOf.get(id));
|
|
83
|
+
const parts = [];
|
|
84
|
+
if (inc.length)
|
|
85
|
+
parts.push(`needed-by ${summarize(inc)}`);
|
|
86
|
+
if (outg.length)
|
|
87
|
+
parts.push(`builds-on ${summarize(outg)}`);
|
|
88
|
+
if (parts.length)
|
|
89
|
+
out[it.id] = parts.join("; ");
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
/** Apply JUDGE verdicts to v2 candidates. DROP the low-worth; RESCUE any dropped item a
|
|
94
|
+
* KEPT item causally depends on (never orphan a kept decision's evidence); then CLEAN
|
|
95
|
+
* any remaining refs to still-dropped items so no edge dangles. judge=null β keep all
|
|
96
|
+
* (a failed selector must NEVER drop residue β precision is an improvement, not a gate).
|
|
97
|
+
* Mutates kept items' ref arrays in place (cleaning). Pure w.r.t. the input list otherwise. */
|
|
98
|
+
export function applyV2JudgeVerdicts(items, judge) {
|
|
99
|
+
if (!judge)
|
|
100
|
+
return { kept: items, droppedCount: 0, rescued: 0 };
|
|
101
|
+
const allIds = new Set(items.map((i) => i.id));
|
|
102
|
+
const dropIds = new Set(judge.verdicts.filter((v) => v.verdict === "DROP" && allIds.has(v.item_id)).map((v) => v.item_id));
|
|
103
|
+
// Anchor-override to fixpoint: rescue strong-causal deps of kept items.
|
|
104
|
+
let rescued = 0, changed = true;
|
|
105
|
+
while (changed) {
|
|
106
|
+
changed = false;
|
|
107
|
+
for (const it of items) {
|
|
108
|
+
if (dropIds.has(it.id))
|
|
109
|
+
continue; // a dropped item's deps don't rescue
|
|
110
|
+
for (const ref of strongRefs(it)) {
|
|
111
|
+
if (dropIds.has(ref)) {
|
|
112
|
+
dropIds.delete(ref);
|
|
113
|
+
rescued++;
|
|
114
|
+
changed = true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const kept = items.filter((it) => !dropIds.has(it.id));
|
|
120
|
+
// Clean refs to still-dropped items so nothing dangles downstream.
|
|
121
|
+
for (const it of kept) {
|
|
122
|
+
if (Array.isArray(it.based_on_items))
|
|
123
|
+
it.based_on_items = it.based_on_items.filter((r) => !dropIds.has(r));
|
|
124
|
+
if (Array.isArray(it.triggered_by_items))
|
|
125
|
+
it.triggered_by_items = it.triggered_by_items.filter((r) => !dropIds.has(r));
|
|
126
|
+
if (it.extends_item && dropIds.has(it.extends_item))
|
|
127
|
+
delete it.extends_item;
|
|
128
|
+
if (it.supersedes_ref && dropIds.has(it.supersedes_ref))
|
|
129
|
+
delete it.supersedes_ref;
|
|
130
|
+
if (it.resolved_ref && dropIds.has(it.resolved_ref))
|
|
131
|
+
delete it.resolved_ref;
|
|
132
|
+
if (Array.isArray(it.relations))
|
|
133
|
+
it.relations = it.relations.filter((r) => !dropIds.has(r.target));
|
|
134
|
+
}
|
|
135
|
+
return { kept, droppedCount: dropIds.size, rescued };
|
|
136
|
+
}
|
|
137
|
+
/** Run the SELECTOR PER GROUP, all groups in PARALLEL. Judging per group is how v1's
|
|
138
|
+
* judge actually runs (per turn β never hundreds at once) and how PRODUCE already runs
|
|
139
|
+
* (per group): it keeps each call's VERDICT output bounded so the judge never truncates
|
|
140
|
+
* on a big arc (the one-shot-over-all-314 version did). The path-specificity test is
|
|
141
|
+
* per-item-independent, so splitting by group changes no verdict β only the call size.
|
|
142
|
+
*
|
|
143
|
+
* Each group's items are judged with the transcript as shared session context. A group
|
|
144
|
+
* whose judge call FAILS contributes no verdicts β its items default to KEEP (recall
|
|
145
|
+
* guard β a failed selector never drops residue). Verdicts are merged and applied once
|
|
146
|
+
* (so anchor-override / dangling-clean see the whole item set). No-op (keep all) for <2.
|
|
147
|
+
*/
|
|
148
|
+
export async function runV2Judge(provider, items, transcript, groupByItemId) {
|
|
149
|
+
if (items.length < 2)
|
|
150
|
+
return { kept: items, ran: false, droppedCount: 0, rescued: 0 };
|
|
151
|
+
// Bucket candidates by group (id is `{group_id}::{local_id}`; fall back to that prefix
|
|
152
|
+
// when no map is given). The group is the v2-native small unit for the judge.
|
|
153
|
+
const groupOf = (it) => groupByItemId?.[it.id] ?? it.id.split("::")[0] ?? "_";
|
|
154
|
+
const byGroup = new Map();
|
|
155
|
+
for (const it of items) {
|
|
156
|
+
const g = groupOf(it);
|
|
157
|
+
let bucket = byGroup.get(g);
|
|
158
|
+
if (!bucket) {
|
|
159
|
+
bucket = [];
|
|
160
|
+
byGroup.set(g, bucket);
|
|
161
|
+
}
|
|
162
|
+
bucket.push(it);
|
|
163
|
+
}
|
|
164
|
+
// Judge every group AT ONCE (parallel). Each call judges only its group's items (small,
|
|
165
|
+
// bounded output) with the transcript as shared context. The v1 judge reads id /
|
|
166
|
+
// provisional_type / text / excerpt only.
|
|
167
|
+
const groups = [...byGroup.values()];
|
|
168
|
+
// Context-aware judge (default OFF): each item's role is computed over ALL items (so a
|
|
169
|
+
// cross-group dependency shows when cross-link ran first), then passed to every group's
|
|
170
|
+
// judge call. Empty map when off β callPassJudgeLLM is byte-identical to before.
|
|
171
|
+
const roleById = v2JudgeContextEnabled() ? buildRoleContext(items) : {};
|
|
172
|
+
if (v2JudgeContextEnabled()) {
|
|
173
|
+
console.log(`Auto-Reflect v2 SELECTOR: context-aware β roles for ${Object.keys(roleById).length}/${items.length} block(s)`);
|
|
174
|
+
}
|
|
175
|
+
const results = await Promise.all(groups.map(async (groupItems) => {
|
|
176
|
+
const judgeItems = groupItems.map((it) => ({
|
|
177
|
+
id: it.id, provisional_type: it.type, text: it.text, excerpt: it.excerpt,
|
|
178
|
+
}));
|
|
179
|
+
const r = await callPassJudgeLLM(provider, judgeItems, undefined, "", transcript, 1024, "", roleById);
|
|
180
|
+
return r.result; // PassJudgeResult | null (null β this group's items default to KEEP)
|
|
181
|
+
}));
|
|
182
|
+
// Merge verdicts from all groups; failed groups contribute none. anyRan=false β judge
|
|
183
|
+
// fully failed β applyV2JudgeVerdicts(null) keeps all.
|
|
184
|
+
const anyRan = results.some((r) => !!r);
|
|
185
|
+
const merged = anyRan ? { verdicts: results.flatMap((r) => r?.verdicts ?? []) } : null;
|
|
186
|
+
const failedGroups = results.filter((r) => !r).length;
|
|
187
|
+
const { kept, droppedCount, rescued } = applyV2JudgeVerdicts(items, merged);
|
|
188
|
+
console.log(`Auto-Reflect v2 SELECTOR: ${items.length} β ${kept.length} kept (${droppedCount} dropped, ${rescued} rescued) over ${groups.length} group(s) in parallel${failedGroups ? ` [${failedGroups} group-judge(s) failed β those kept]` : ""}`);
|
|
189
|
+
return { kept, ran: anyRan, droppedCount, rescued };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=v2-judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-judge.js","sourceRoot":"","sources":["../../../src/middleware/reflect/v2-judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-sets.d.ts","sourceRoot":"","sources":["../src/relation-sets.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CASpD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// relation-sets.ts β single source of truth for the CAUSAL TRAVERSAL thread.
|
|
2
|
+
//
|
|
3
|
+
// "Which relation types are 'how was this reached?'" Every READ-SIDE traversal
|
|
4
|
+
// endpoint imports this ONE set so they walk a consistent causal graph, instead of
|
|
5
|
+
// the historical inconsistency where /chain walked only 3 types and `extends` /
|
|
6
|
+
// `supports` (the bulk of real elaboration edges) were invisible β making
|
|
7
|
+
// genuinely-connected blocks render as orphans.
|
|
8
|
+
//
|
|
9
|
+
// IN β the cause-and-effect reasoning thread the agent walks to understand how a
|
|
10
|
+
// state was reached.
|
|
11
|
+
// OUT β `part_of` (containment), `member_of` (chain membership β a grouping, like a
|
|
12
|
+
// folder), `related_to` (loose), `contradicts` (conflict, not "how reached"),
|
|
13
|
+
// and task/manual edges. Those are real, but they are not the causal thread.
|
|
14
|
+
//
|
|
15
|
+
// SCOPE: this is now the single source of truth for the causal thread across all
|
|
16
|
+
// three "chain" notions β read-side TRAVERSAL (/chain, /nav), the chain_id
|
|
17
|
+
// clustering WRITER (stampFlowRolesAndChains), AND Pass 5 chain assembly β unified
|
|
18
|
+
// 2026-06-05 so they agree on which edges are "how was this reached?". (Earlier
|
|
19
|
+
// the clustering writer was deliberately fenced off on a narrower set; that fence
|
|
20
|
+
// was reversed once a clustering simulation showed adding supports/supersedes/
|
|
21
|
+
// resolves pulls supports-linked residue into its arc WITHOUT cross-arc over-merge.
|
|
22
|
+
// supports alone is ~half of all causal edges, so excluding it orphaned real
|
|
23
|
+
// members like a user's lived failure.) The pipeline's internal CONTEXT-BUILDING
|
|
24
|
+
// sets remain tuned independently β they shape extraction, not the causal thread.
|
|
25
|
+
export const CAUSAL_TRAVERSAL_RELS = new Set([
|
|
26
|
+
"prompted_by", // consequence β trigger (primary causal coordinate)
|
|
27
|
+
"based_on", // conclusion β evidence
|
|
28
|
+
"derived_from", // derived β source (logical inference)
|
|
29
|
+
"extends", // specific β broader (mechanism elaboration)
|
|
30
|
+
"supports", // fact β hypothesis (evidential grounding)
|
|
31
|
+
"supersedes", // new β old (replacement β walk back to history)
|
|
32
|
+
"superseded_by", // old β new (inverse)
|
|
33
|
+
"resolves", // answer β question
|
|
34
|
+
]);
|
|
35
|
+
//# sourceMappingURL=relation-sets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-sets.js","sourceRoot":"","sources":["../src/relation-sets.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,+EAA+E;AAC/E,mFAAmF;AACnF,gFAAgF;AAChF,0EAA0E;AAC1E,gDAAgD;AAChD,EAAE;AACF,kFAAkF;AAClF,2BAA2B;AAC3B,oFAAoF;AACpF,oFAAoF;AACpF,mFAAmF;AACnF,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,mFAAmF;AACnF,gFAAgF;AAChF,kFAAkF;AAClF,+EAA+E;AAC/E,oFAAoF;AACpF,6EAA6E;AAC7E,iFAAiF;AACjF,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,aAAa,EAAI,oDAAoD;IACrE,UAAU,EAAO,wBAAwB;IACzC,cAAc,EAAG,uCAAuC;IACxD,SAAS,EAAQ,6CAA6C;IAC9D,UAAU,EAAO,2CAA2C;IAC5D,YAAY,EAAK,iDAAiD;IAClE,eAAe,EAAE,sBAAsB;IACvC,UAAU,EAAO,oBAAoB;CACtC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.test.d.ts","sourceRoot":"","sources":["../../../src/routes/__tests__/flags.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEBT 5 Slice 2 Sub-step 2.4 β /api/flags REST endpoint tests.
|
|
3
|
+
*
|
|
4
|
+
* Boots a real api-server on a random port (matches src/__tests__/api.test.ts
|
|
5
|
+
* harness) so route wiring + JSON body parsing + the executeMerge path are all
|
|
6
|
+
* exercised end-to-end. No LLM (manual review is operator-driven, no model).
|
|
7
|
+
*
|
|
8
|
+
* Covers:
|
|
9
|
+
* GET /api/flags/summary β counts
|
|
10
|
+
* GET /api/flags β list + filters (flag_type, reviewed, block_id)
|
|
11
|
+
* GET /api/flags/:id β single flag + both blocks embedded; 404
|
|
12
|
+
* POST /api/flags/:id/review β verdict-only; merge+execute (archive+relation);
|
|
13
|
+
* validation (bad verdict / missing reason /
|
|
14
|
+
* bad winning_block_id); 409 on already-reviewed
|
|
15
|
+
*
|
|
16
|
+
* Run: node --import=tsx/esm --test src/routes/__tests__/flags.test.ts
|
|
17
|
+
*/
|
|
18
|
+
import { test, describe, before, after, beforeEach } from "node:test";
|
|
19
|
+
import assert from "node:assert/strict";
|
|
20
|
+
import fs from "node:fs";
|
|
21
|
+
import { WorkspaceDB } from "../../store/database.js";
|
|
22
|
+
import { startApiServer } from "../../api-server.js";
|
|
23
|
+
import { writePipelineFlag, markFlagPendingClarification } from "../../middleware/reflect/pipeline-flags.js";
|
|
24
|
+
const TEST_DB = "/tmp/wmcs_flags_route_test.db";
|
|
25
|
+
let db;
|
|
26
|
+
let raw;
|
|
27
|
+
let server;
|
|
28
|
+
let baseUrl;
|
|
29
|
+
function cleanFiles() {
|
|
30
|
+
for (const s of ["", "-wal", "-shm"]) {
|
|
31
|
+
try {
|
|
32
|
+
if (fs.existsSync(TEST_DB + s))
|
|
33
|
+
fs.unlinkSync(TEST_DB + s);
|
|
34
|
+
}
|
|
35
|
+
catch { /* ignore */ }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
before(async () => {
|
|
39
|
+
cleanFiles();
|
|
40
|
+
db = new WorkspaceDB(TEST_DB);
|
|
41
|
+
await db.init();
|
|
42
|
+
raw = db["db"];
|
|
43
|
+
server = startApiServer(db, undefined, 0);
|
|
44
|
+
await new Promise((resolve) => server.once("listening", resolve));
|
|
45
|
+
const addr = server.address();
|
|
46
|
+
baseUrl = `http://localhost:${addr.port}`;
|
|
47
|
+
});
|
|
48
|
+
after(() => {
|
|
49
|
+
server.close();
|
|
50
|
+
try {
|
|
51
|
+
db["db"]?.close();
|
|
52
|
+
}
|
|
53
|
+
catch { /* ignore */ }
|
|
54
|
+
cleanFiles();
|
|
55
|
+
});
|
|
56
|
+
beforeEach(() => {
|
|
57
|
+
raw.pragma("foreign_keys = OFF");
|
|
58
|
+
raw.exec(`DELETE FROM pipeline_flags`);
|
|
59
|
+
raw.exec(`DELETE FROM relations`);
|
|
60
|
+
raw.exec(`DELETE FROM blocks`);
|
|
61
|
+
raw.pragma("foreign_keys = ON");
|
|
62
|
+
});
|
|
63
|
+
function mkBlock(label, opts = {}) {
|
|
64
|
+
return db.createBlock({
|
|
65
|
+
label, type: opts.type ?? "fact", essence: `essence ${label}`,
|
|
66
|
+
content: { value: label }, concepts: opts.concepts ?? [], ttl: "permanent",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function writeFlag(a, b, flag_type = "atomic_dup_candidate") {
|
|
70
|
+
return writePipelineFlag(raw, {
|
|
71
|
+
flag_type, block_id_a: a, block_id_b: b,
|
|
72
|
+
criteria: { value_match: "x" }, scope_check: "unknown",
|
|
73
|
+
origin_writer: "stage_flag_dedup", origin_range_id: null,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// βββ GET summary + list βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
77
|
+
describe("GET /api/flags/summary + /api/flags", () => {
|
|
78
|
+
test("summary counts total + unreviewed + by_type", async () => {
|
|
79
|
+
const a = mkBlock("sum_a");
|
|
80
|
+
const b = mkBlock("sum_b");
|
|
81
|
+
writeFlag(a.id, b.id, "atomic_dup_candidate");
|
|
82
|
+
writeFlag(a.id, b.id, "island_candidate");
|
|
83
|
+
const res = await fetch(`${baseUrl}/api/flags/summary`);
|
|
84
|
+
assert.equal(res.status, 200);
|
|
85
|
+
const json = await res.json();
|
|
86
|
+
assert.equal(json.total, 2);
|
|
87
|
+
assert.equal(json.unreviewed, 2);
|
|
88
|
+
assert.ok(Array.isArray(json.by_type));
|
|
89
|
+
});
|
|
90
|
+
test("list returns all flags, count matches", async () => {
|
|
91
|
+
const a = mkBlock("list_a");
|
|
92
|
+
const b = mkBlock("list_b");
|
|
93
|
+
writeFlag(a.id, b.id);
|
|
94
|
+
const res = await fetch(`${baseUrl}/api/flags`);
|
|
95
|
+
const json = await res.json();
|
|
96
|
+
assert.equal(json.count, 1);
|
|
97
|
+
assert.equal(json.flags.length, 1);
|
|
98
|
+
});
|
|
99
|
+
test("agent-pending renders owner-unknown flags as plain questions (no ids/schema)", async () => {
|
|
100
|
+
const owned = mkBlock("customer-c_decision_redis", { type: "decision" });
|
|
101
|
+
const orphan = mkBlock("unspecified-project_decision_redis", { type: "decision" });
|
|
102
|
+
const id = writePipelineFlag(raw, {
|
|
103
|
+
flag_type: "cross_arc_dup_candidate",
|
|
104
|
+
block_id_a: owned.id, block_id_b: orphan.id,
|
|
105
|
+
criteria: { decision: "flag_for_review" },
|
|
106
|
+
scope_check: "unknown", origin_writer: "stage_d_resolve", origin_range_id: null,
|
|
107
|
+
});
|
|
108
|
+
markFlagPendingClarification(raw, { flag_id: id, reason: "owner unknown β routed to agent" });
|
|
109
|
+
const res = await fetch(`${baseUrl}/api/flags/agent-pending`);
|
|
110
|
+
assert.equal(res.status, 200);
|
|
111
|
+
const json = await res.json();
|
|
112
|
+
assert.equal(json.count, 1);
|
|
113
|
+
const f = json.flags[0];
|
|
114
|
+
assert.equal(f.id, id);
|
|
115
|
+
assert.match(f.question, /same thing/i); // a plain question, not a verdict form
|
|
116
|
+
assert.match(f.question, /ask the user/i); // the escalation affordance
|
|
117
|
+
assert.equal(f.you_are_recording.owner, "customer-c"); // owner from label, in plain terms
|
|
118
|
+
assert.equal(f.existing_uncertain.owner, "unspecified-project");
|
|
119
|
+
// No raw flag schema leaked to the agent surface
|
|
120
|
+
assert.equal(f.block_id_a, undefined);
|
|
121
|
+
assert.equal(f.scope_check, undefined);
|
|
122
|
+
});
|
|
123
|
+
test("agent-pending excludes flags still in the reviewer queue (not yet routed)", async () => {
|
|
124
|
+
const a = mkBlock("notrouted_a");
|
|
125
|
+
const b = mkBlock("notrouted_b");
|
|
126
|
+
writeFlag(a.id, b.id); // unreviewed, verdict NULL β reviewer's queue, not the agent's
|
|
127
|
+
const res = await fetch(`${baseUrl}/api/flags/agent-pending`);
|
|
128
|
+
const json = await res.json();
|
|
129
|
+
assert.equal(json.count, 0);
|
|
130
|
+
});
|
|
131
|
+
test("list filters by flag_type", async () => {
|
|
132
|
+
const a = mkBlock("ft_a");
|
|
133
|
+
const b = mkBlock("ft_b");
|
|
134
|
+
writeFlag(a.id, b.id, "atomic_dup_candidate");
|
|
135
|
+
writeFlag(a.id, b.id, "island_candidate");
|
|
136
|
+
const res = await fetch(`${baseUrl}/api/flags?flag_type=island_candidate`);
|
|
137
|
+
const json = await res.json();
|
|
138
|
+
assert.equal(json.count, 1);
|
|
139
|
+
assert.equal(json.flags[0].flag_type, "island_candidate");
|
|
140
|
+
});
|
|
141
|
+
test("list filters by reviewed=false (unreviewed only)", async () => {
|
|
142
|
+
const a = mkBlock("rv_a");
|
|
143
|
+
const b = mkBlock("rv_b");
|
|
144
|
+
const f1 = writeFlag(a.id, b.id, "atomic_dup_candidate");
|
|
145
|
+
writeFlag(a.id, b.id, "island_candidate");
|
|
146
|
+
// Review one
|
|
147
|
+
raw.prepare(`UPDATE pipeline_flags SET reviewed_at='2026-01-01', review_verdict='leave' WHERE id=?`).run(f1);
|
|
148
|
+
const res = await fetch(`${baseUrl}/api/flags?reviewed=false`);
|
|
149
|
+
const json = await res.json();
|
|
150
|
+
assert.equal(json.count, 1, "only the unreviewed flag");
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
// βββ GET :id ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
154
|
+
describe("GET /api/flags/:id", () => {
|
|
155
|
+
test("returns flag + both blocks embedded", async () => {
|
|
156
|
+
const a = mkBlock("det_a");
|
|
157
|
+
const b = mkBlock("det_b");
|
|
158
|
+
const id = writeFlag(a.id, b.id);
|
|
159
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}`);
|
|
160
|
+
assert.equal(res.status, 200);
|
|
161
|
+
const json = await res.json();
|
|
162
|
+
assert.equal(json.flag.id, id);
|
|
163
|
+
assert.equal(json.block_a.label, "det_a");
|
|
164
|
+
assert.equal(json.block_b.label, "det_b");
|
|
165
|
+
});
|
|
166
|
+
test("404 for unknown id", async () => {
|
|
167
|
+
const res = await fetch(`${baseUrl}/api/flags/pfl_does_not_exist`);
|
|
168
|
+
assert.equal(res.status, 404);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
// βββ POST :id/review ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
172
|
+
describe("POST /api/flags/:id/review", () => {
|
|
173
|
+
test("verdict-only (no execute) writes verdict, no graph change", async () => {
|
|
174
|
+
const a = mkBlock("vo_a");
|
|
175
|
+
const b = mkBlock("vo_b");
|
|
176
|
+
const id = writeFlag(a.id, b.id);
|
|
177
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
178
|
+
method: "POST",
|
|
179
|
+
headers: { "content-type": "application/json" },
|
|
180
|
+
body: JSON.stringify({ verdict: "leave", reason: "different scope" }),
|
|
181
|
+
});
|
|
182
|
+
assert.equal(res.status, 200);
|
|
183
|
+
const json = await res.json();
|
|
184
|
+
assert.equal(json.verdict, "leave");
|
|
185
|
+
assert.equal(json.action_taken, "none");
|
|
186
|
+
// Block still active
|
|
187
|
+
assert.notEqual(db.getBlock(b.id).status, "archived");
|
|
188
|
+
});
|
|
189
|
+
test("merge + execute archives loser + wires supersedes", async () => {
|
|
190
|
+
const winner = mkBlock("mx_winner");
|
|
191
|
+
const loser = mkBlock("mx_loser");
|
|
192
|
+
const id = writeFlag(winner.id, loser.id);
|
|
193
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
194
|
+
method: "POST",
|
|
195
|
+
headers: { "content-type": "application/json" },
|
|
196
|
+
body: JSON.stringify({ verdict: "merge", reason: "same entity", execute: true, winning_block_id: winner.id }),
|
|
197
|
+
});
|
|
198
|
+
assert.equal(res.status, 200);
|
|
199
|
+
const json = await res.json();
|
|
200
|
+
assert.equal(json.action_taken, "archived_loser_and_wired_superseded_by");
|
|
201
|
+
assert.equal(db.getBlock(loser.id).status, "archived");
|
|
202
|
+
const rel = raw.prepare(`SELECT * FROM relations WHERE source_id=? AND target_id=? AND type='supersedes'`).get(winner.id, loser.id);
|
|
203
|
+
assert.ok(rel, "supersedes relation winnerβloser exists");
|
|
204
|
+
});
|
|
205
|
+
test("400 on invalid verdict", async () => {
|
|
206
|
+
const a = mkBlock("iv_a");
|
|
207
|
+
const b = mkBlock("iv_b");
|
|
208
|
+
const id = writeFlag(a.id, b.id);
|
|
209
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
210
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
211
|
+
body: JSON.stringify({ verdict: "frobnicate", reason: "x" }),
|
|
212
|
+
});
|
|
213
|
+
assert.equal(res.status, 400);
|
|
214
|
+
});
|
|
215
|
+
test("400 on missing reason", async () => {
|
|
216
|
+
const a = mkBlock("mr_a");
|
|
217
|
+
const b = mkBlock("mr_b");
|
|
218
|
+
const id = writeFlag(a.id, b.id);
|
|
219
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
220
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
221
|
+
body: JSON.stringify({ verdict: "leave" }),
|
|
222
|
+
});
|
|
223
|
+
assert.equal(res.status, 400);
|
|
224
|
+
});
|
|
225
|
+
test("400 when merge+execute but winning_block_id not a candidate", async () => {
|
|
226
|
+
const a = mkBlock("bw_a");
|
|
227
|
+
const b = mkBlock("bw_b");
|
|
228
|
+
const id = writeFlag(a.id, b.id);
|
|
229
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
230
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
231
|
+
body: JSON.stringify({ verdict: "merge", reason: "x", execute: true, winning_block_id: "blk_bogus" }),
|
|
232
|
+
});
|
|
233
|
+
assert.equal(res.status, 400);
|
|
234
|
+
// Neither block archived
|
|
235
|
+
assert.notEqual(db.getBlock(a.id).status, "archived");
|
|
236
|
+
assert.notEqual(db.getBlock(b.id).status, "archived");
|
|
237
|
+
});
|
|
238
|
+
test("409 on already-reviewed flag", async () => {
|
|
239
|
+
const a = mkBlock("ar_a");
|
|
240
|
+
const b = mkBlock("ar_b");
|
|
241
|
+
const id = writeFlag(a.id, b.id);
|
|
242
|
+
raw.prepare(`UPDATE pipeline_flags SET reviewed_at='2026-01-01', review_verdict='leave' WHERE id=?`).run(id);
|
|
243
|
+
const res = await fetch(`${baseUrl}/api/flags/${id}/review`, {
|
|
244
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
245
|
+
body: JSON.stringify({ verdict: "merge", reason: "x" }),
|
|
246
|
+
});
|
|
247
|
+
assert.equal(res.status, 409);
|
|
248
|
+
});
|
|
249
|
+
test("404 review on unknown flag", async () => {
|
|
250
|
+
const res = await fetch(`${baseUrl}/api/flags/pfl_nope/review`, {
|
|
251
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
252
|
+
body: JSON.stringify({ verdict: "leave", reason: "x" }),
|
|
253
|
+
});
|
|
254
|
+
assert.equal(res.status, 404);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
//# sourceMappingURL=flags.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.test.js","sourceRoot":"","sources":["../../../src/routes/__tests__/flags.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-catalog.test.d.ts","sourceRoot":"","sources":["../../../src/routes/__tests__/models-catalog.test.ts"],"names":[],"mappings":""}
|