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,388 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// PIPELINE v2 (TRANSFORM) — INTEGRATE half (graph-AWARE): root-recognition wiring
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// Design: docs/PIPELINE-TRANSFORM-DESIGN.md §15.4 (the INTEGRATE / LLM-2 contract).
|
|
6
|
+
//
|
|
7
|
+
// COMPREHEND (comprehend.ts) is GRAPH-BLIND by design — it reads ONLY the
|
|
8
|
+
// transcript. This module is the GRAPH-AWARE counterpart: it reconciles the v2
|
|
9
|
+
// fragment against the EXISTING graph. STEP 1 (this file) wires the already-built
|
|
10
|
+
// RECOGNIZER (recognize-root.ts) into the v2 path so a new cluster ATTACHES to an
|
|
11
|
+
// existing project root instead of forking a parallel root every session (the
|
|
12
|
+
// compounding property the whole recognition layer exists to protect).
|
|
13
|
+
//
|
|
14
|
+
// WHY THIS LIVES HERE, NOT IN pipeline.ts:
|
|
15
|
+
// The live recognizer block (pipeline.ts:~1406) gates on
|
|
16
|
+
// `checkpoint.arcEntityResolution` — a field the v2 checkpoint
|
|
17
|
+
// (comprehendResultToCheckpoint → resumeFrom:"pass3") NEVER sets, so on the v2
|
|
18
|
+
// path the recognizer is inert. But the recognizer CALL only needs
|
|
19
|
+
// (items + knownRoots + provider); it does NOT read arcEntityResolution's
|
|
20
|
+
// content (that field is purely the arc-mode gate). So v2 runs the SAME
|
|
21
|
+
// recognizer here, in its own caller, BEFORE building the checkpoint. Zero edits
|
|
22
|
+
// to the live pipeline; 100% reuse of recognize-root.ts. (v2 is a CALLER of
|
|
23
|
+
// runAutoReflect, not an edit to it — the established v2 invariant.)
|
|
24
|
+
//
|
|
25
|
+
// FLAG: gated on recognizerEnabled() — DEFAULT ON since 2026-06-12
|
|
26
|
+
// (NODEDEX_RECOGNIZER_ENABLED=0 opts out); the SAME switch the live path uses, so
|
|
27
|
+
// "recognizer on/off" is ONE flag everywhere. When off (or when the graph has no
|
|
28
|
+
// roots yet) this is a pure passthrough: no DB read beyond the root scan, no LLM,
|
|
29
|
+
// items returned unchanged. (Runs in BOTH per-turn and arc v2 — it's in the front-half.)
|
|
30
|
+
//
|
|
31
|
+
// NEXT inhabitant of this module: the cross-group / cross-session LINKER (the
|
|
32
|
+
// islanding fix, design §15.4) — it joins here, also graph-aware, also a v2 caller.
|
|
33
|
+
import { intFromEnv } from "./config.js";
|
|
34
|
+
import { recognizeRootsForArc, applyRootRemap, recognizerEnabled, } from "./recognize-root.js";
|
|
35
|
+
import { callComprehendLLM, comprehendResultToPass2Items, } from "./comprehend.js";
|
|
36
|
+
import { pergroupEnabled, runComprehendPerGroup } from "./comprehend-pergroup.js";
|
|
37
|
+
import { runCrossGroupLink } from "./cross-group-link.js";
|
|
38
|
+
import { runJustifyConclusions } from "./justify-decisions.js";
|
|
39
|
+
import { runV2Judge, v2JudgeEnabled } from "./v2-judge.js";
|
|
40
|
+
import { callPass2bLLM, callPass2bBatchedFill, v2FillBatchEnabled } from "./pass2b.js";
|
|
41
|
+
import { extractPrimaryValueFromUnique } from "./dedup-by-source-and-value.js";
|
|
42
|
+
import { getSpendBetween } from "../../engine/providers/usage-ledger.js";
|
|
43
|
+
/** Existing project ROOTS as recognizer fuel: {label, essence}. essence is the
|
|
44
|
+
* root's surface description (domain + owner), maintained by the describer —
|
|
45
|
+
* the recognizer judges the new cluster against THIS, not the label string. */
|
|
46
|
+
export function loadKnownRoots(db) {
|
|
47
|
+
return db
|
|
48
|
+
.getAllBlocks()
|
|
49
|
+
.filter((b) => b.type === "project")
|
|
50
|
+
.map((b) => ({ label: b.label, essence: b.essence || "" }));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* v2 INTEGRATE — STEP 1: root recognition.
|
|
54
|
+
*
|
|
55
|
+
* For each NEW-root candidate cluster in the v2 fragment (an item.project that is
|
|
56
|
+
* not already an existing root), ask the recognizer "does this belong to an
|
|
57
|
+
* EXISTING root — same domain AND same owner?" On a confident attach, rewrite the
|
|
58
|
+
* cluster's items' .project to that root's EXACT label. Pass 3 (downstream) then
|
|
59
|
+
* finds it in KNOWN PROJECT ROOTS and attaches — no fork. Anything short of a
|
|
60
|
+
* confident same-owner fit keeps the new root (a fork is the safe failure; the
|
|
61
|
+
* post-hoc AUDIT-heal pass surfaces fork-pairs for the agent/user).
|
|
62
|
+
*
|
|
63
|
+
* Reuses the validated recognizer wholesale: recognizeRootsForArc (LLM judgment +
|
|
64
|
+
* the 5 guards + bias-to-fork) and applyRootRemap (pure remap). This function is
|
|
65
|
+
* the thin v2-side glue (load roots → recognize → apply). Default OFF →
|
|
66
|
+
* passthrough.
|
|
67
|
+
*/
|
|
68
|
+
export async function integrateV2Roots(db, provider, items) {
|
|
69
|
+
if (!recognizerEnabled()) {
|
|
70
|
+
return { items, ran: false, recognition: null, rewritten: 0 };
|
|
71
|
+
}
|
|
72
|
+
const knownRoots = loadKnownRoots(db);
|
|
73
|
+
if (knownRoots.length === 0) {
|
|
74
|
+
// No roots to attach to (e.g. a brand-new graph) → nothing to recognize.
|
|
75
|
+
return { items, ran: false, recognition: null, rewritten: 0 };
|
|
76
|
+
}
|
|
77
|
+
const recognition = await recognizeRootsForArc({ provider, items, knownRoots });
|
|
78
|
+
const { items: remapped, rewritten } = applyRootRemap(items, recognition.remap);
|
|
79
|
+
return { items: remapped, ran: true, recognition, rewritten };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Run the v2 TRANSFORM front-half over a raw arc transcript:
|
|
83
|
+
* COMPREHEND → SEAM 1 → convert → Pass 2b unique{}-fill (parallel) →
|
|
84
|
+
* INTEGRATE (recognizer, default-OFF passthrough) → resumeFrom:pass3 checkpoint.
|
|
85
|
+
*
|
|
86
|
+
* Graph-aware only via the recognizer (COMPREHEND itself is graph-blind — it reads
|
|
87
|
+
* the transcript only). Returns checkpoint=null on any path where v2 should not
|
|
88
|
+
* produce a graph, so the caller can degrade to v1 (mirrors the arc path's
|
|
89
|
+
* graceful-degrade contract). Never throws on a bad fragment.
|
|
90
|
+
*/
|
|
91
|
+
export function mergeCrossGroupDupsEnabled() {
|
|
92
|
+
// DEFAULT ON since 2026-06-12 (part of the validated v2 stack). =0 opts out.
|
|
93
|
+
return process.env.NODEDEX_V2_MERGE_DUPS !== "0";
|
|
94
|
+
}
|
|
95
|
+
/** Run the cross-group linker BEFORE the SELECTOR instead of after JUSTIFY (default OFF,
|
|
96
|
+
* NODEDEX_V2_CROSSLINK_FIRST). Cross-link needs only id/type/text (not the filled
|
|
97
|
+
* unique{}), so it can run right after convert — giving the judge each block's
|
|
98
|
+
* cross-thread role before it decides keep/drop (its rescue then protects cross-group
|
|
99
|
+
* deps, not just within-group), and pre-computing the cross-group links so they wire
|
|
100
|
+
* across Pass-3 batches. The expensive 2b fill still runs AFTER the judge, so dropped
|
|
101
|
+
* blocks never pay it. Off → cross-link runs in its original slot, byte-identical. */
|
|
102
|
+
export function v2CrossLinkFirstEnabled() {
|
|
103
|
+
// Default ON (promoted 2026-06-14 — validated SOUND); set =0 to opt out.
|
|
104
|
+
return process.env.NODEDEX_V2_CROSSLINK_FIRST !== "0";
|
|
105
|
+
}
|
|
106
|
+
/** Transcript size (chars) up to which ONE COMPREHEND call is the default.
|
|
107
|
+
* Per-group exists ONLY to survive output-truncation on a BIG arc (the 307s
|
|
108
|
+
* truncate-retry root cause); on input that fits one call it over-splits and
|
|
109
|
+
* its N blind parallel PRODUCE calls re-extract shared claims → cross-group
|
|
110
|
+
* dups + ~3× wall time (measured 2026-06-11: 1 group=175s vs 7 groups=554s on
|
|
111
|
+
* comparable single turns). Env-tunable: NODEDEX_V2_HOLISTIC_MAX_CHARS. */
|
|
112
|
+
export function holisticMaxChars() {
|
|
113
|
+
return intFromEnv("NODEDEX_V2_HOLISTIC_MAX_CHARS", 20000);
|
|
114
|
+
}
|
|
115
|
+
/** Which COMPREHEND mode for this input — the size discriminator is structural,
|
|
116
|
+
* so code decides (charter rule 3); `forced` (a caller's explicit opts.holistic)
|
|
117
|
+
* always wins. Pure / testable. */
|
|
118
|
+
export function chooseHolistic(transcriptLength, forced) {
|
|
119
|
+
if (forced !== undefined)
|
|
120
|
+
return forced;
|
|
121
|
+
return transcriptLength <= holisticMaxChars();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Collapse CROSS-GROUP DUPLICATES — the same residue extracted by multiple PRODUCE
|
|
125
|
+
* groups (per-group PRODUCE runs each group in isolation, so a claim relevant to
|
|
126
|
+
* several threads gets written once PER group → N copies of one block; the dup we
|
|
127
|
+
* proved via provenance: 3 "Leaky Bucket" blocks citing the identical source line).
|
|
128
|
+
*
|
|
129
|
+
* Keep ONE survivor; re-point every reference (causal fields + relations[].target)
|
|
130
|
+
* from the dropped copies → the survivor, and UNION the survivor's links so it stays
|
|
131
|
+
* connected to all the threads its copies touched. (This is "one block, many threads"
|
|
132
|
+
* — realized by links, because v2 groups are an extraction scaffold, not persisted
|
|
133
|
+
* graph entities; final chains come from causal edges.)
|
|
134
|
+
*
|
|
135
|
+
* KEY = type + unique{} primary_value (via extractPrimaryValueFromUnique — the SAME
|
|
136
|
+
* identity the block-dedup layer uses). Essence AND even the source excerpt DRIFT
|
|
137
|
+
* across per-group PRODUCE calls (each phrases its own summary, "AGENT:"-prefix vs
|
|
138
|
+
* not), but the primary_value — the approach / choice / limit — is STABLE, so it's
|
|
139
|
+
* what actually catches the real dups (validated against the dup run: excerpt+essence
|
|
140
|
+
* caught 0; primary_value catches them). Within one extraction, same type + same
|
|
141
|
+
* primary_value = the same claim → safe to merge (the established identity rule).
|
|
142
|
+
* MUST run AFTER 2b fill (primary_value is empty before that). Default OFF
|
|
143
|
+
* (NODEDEX_V2_MERGE_DUPS).
|
|
144
|
+
*/
|
|
145
|
+
export function mergeCrossGroupDups(items) {
|
|
146
|
+
const norm = (s) => (s ?? "").toLowerCase().replace(/\s+/g, " ").trim();
|
|
147
|
+
const survivorByKey = new Map();
|
|
148
|
+
const remap = new Map(); // dropped id → survivor id
|
|
149
|
+
const kept = [];
|
|
150
|
+
for (const it of items) {
|
|
151
|
+
const pv = norm(extractPrimaryValueFromUnique(it.type, it.unique ?? {}));
|
|
152
|
+
const key = `${it.type}|${pv}`;
|
|
153
|
+
const survivor = pv.length > 0 ? survivorByKey.get(key) : undefined; // need a real claim to merge on
|
|
154
|
+
if (survivor) {
|
|
155
|
+
remap.set(it.id, survivor.id);
|
|
156
|
+
survivor.based_on_items.push(...it.based_on_items);
|
|
157
|
+
survivor.triggered_by_items.push(...it.triggered_by_items);
|
|
158
|
+
survivor.extends_item ??= it.extends_item;
|
|
159
|
+
survivor.supersedes_ref ??= it.supersedes_ref;
|
|
160
|
+
survivor.resolved_ref ??= it.resolved_ref;
|
|
161
|
+
if (it.relations?.length)
|
|
162
|
+
(survivor.relations ??= []).push(...it.relations);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
if (pv.length > 0)
|
|
166
|
+
survivorByKey.set(key, it);
|
|
167
|
+
kept.push(it);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (remap.size === 0)
|
|
171
|
+
return { items, merged: 0 };
|
|
172
|
+
// Re-point every reference from a dropped copy → its survivor; drop self-refs + dedup.
|
|
173
|
+
const fix = (id) => remap.get(id) ?? id;
|
|
174
|
+
const uniqNoSelf = (arr, self) => [...new Set(arr.map(fix))].filter((x) => x !== self);
|
|
175
|
+
for (const it of kept) {
|
|
176
|
+
it.based_on_items = uniqNoSelf(it.based_on_items, it.id);
|
|
177
|
+
it.triggered_by_items = uniqNoSelf(it.triggered_by_items, it.id);
|
|
178
|
+
if (it.extends_item)
|
|
179
|
+
it.extends_item = fix(it.extends_item);
|
|
180
|
+
if (it.supersedes_ref)
|
|
181
|
+
it.supersedes_ref = fix(it.supersedes_ref);
|
|
182
|
+
if (it.resolved_ref)
|
|
183
|
+
it.resolved_ref = fix(it.resolved_ref);
|
|
184
|
+
if (it.relations) {
|
|
185
|
+
const seen = new Set();
|
|
186
|
+
const out = [];
|
|
187
|
+
for (const r of it.relations) {
|
|
188
|
+
const t = fix(r.target);
|
|
189
|
+
const k = r.type + "|" + t;
|
|
190
|
+
if (t !== it.id && !seen.has(k)) {
|
|
191
|
+
seen.add(k);
|
|
192
|
+
out.push({ ...r, target: t });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
it.relations = out;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return { items: kept, merged: remap.size };
|
|
199
|
+
}
|
|
200
|
+
export async function runComprehendFrontHalf(db, provider, transcript, opts = {}) {
|
|
201
|
+
const empty = (reason) => ({
|
|
202
|
+
checkpoint: null, reason, groups: 0, blocks: 0, filled: 0,
|
|
203
|
+
recognizer: { ran: false, attached: 0, rewritten: 0 }, crossLinks: 0, merged: 0,
|
|
204
|
+
});
|
|
205
|
+
// Stage wall-time telemetry (observability before optimization — the front-half
|
|
206
|
+
// was the pipeline's unmeasured majority of wall time). Travels via the checkpoint
|
|
207
|
+
// into the turn-log's pass_wall_ms.
|
|
208
|
+
const wall = {};
|
|
209
|
+
// Per-stage [start,end] windows → per-stage COST, attributed from the usage
|
|
210
|
+
// ledger after the run (stages are sequential, so windows don't overlap and
|
|
211
|
+
// every front-half LLM call falls in exactly one stage). Avoids threading
|
|
212
|
+
// usage out of all six stage functions; reuses the complete ledger.
|
|
213
|
+
const window = {};
|
|
214
|
+
const timed = async (key, fn) => {
|
|
215
|
+
const t0 = Date.now();
|
|
216
|
+
try {
|
|
217
|
+
return await fn();
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
const end = Date.now();
|
|
221
|
+
wall[key] = (wall[key] ?? 0) + (end - t0);
|
|
222
|
+
window[key] = { start: window[key]?.start ?? t0, end };
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
// 1. COMPREHEND + SEAM 1 — the single holistic call, OR PER-GROUP (design §17,
|
|
226
|
+
// the structural truncate fix) when NODEDEX_COMPREHEND_PERGROUP=1. Both return
|
|
227
|
+
// the same {result, validation}: per-group SEGMENTs then PRODUCEs per group and
|
|
228
|
+
// stitches back to the identical ComprehendResult shape, so the rest of this
|
|
229
|
+
// function is unchanged.
|
|
230
|
+
// opts.holistic FORCES a mode; when the caller doesn't force one, SIZE decides
|
|
231
|
+
// (chooseHolistic): per-group exists ONLY to survive truncation on a BIG arc, so
|
|
232
|
+
// input that fits one call's budget gets the holistic call — which cannot produce
|
|
233
|
+
// the cross-group dups that N blind parallel PRODUCE calls do (they can't see each
|
|
234
|
+
// other's output). Per-group (+ the merge safety net) engages only on genuinely
|
|
235
|
+
// big input where truncation is the greater risk.
|
|
236
|
+
const usePerGroup = pergroupEnabled() && !chooseHolistic(transcript.length, opts.holistic);
|
|
237
|
+
const comp = await timed("v2_comprehend", async () => usePerGroup
|
|
238
|
+
? await runComprehendPerGroup(provider, transcript)
|
|
239
|
+
: await callComprehendLLM(provider, transcript));
|
|
240
|
+
// Out-of-credit is surfaced DISTINCTLY (not "comprehend_failed") so the reflect queue
|
|
241
|
+
// pauses-the-spend + requeues the turn instead of counting it toward the drop cap.
|
|
242
|
+
if (!comp.result)
|
|
243
|
+
return empty(comp.creditExhausted ? "insufficient_credit" : "comprehend_failed");
|
|
244
|
+
if (comp.validation && !comp.validation.valid)
|
|
245
|
+
return empty("seam1_invalid");
|
|
246
|
+
const groups = comp.result.groups ?? [];
|
|
247
|
+
if (groups.length === 0)
|
|
248
|
+
return empty("empty"); // no residue — nothing to save
|
|
249
|
+
// 2. convert to Pass2Item[] (groupByItemId carries the thread membership forward
|
|
250
|
+
// for the cross-group linker).
|
|
251
|
+
const { items: candidateItems, groupByItemId } = comprehendResultToPass2Items(comp.result);
|
|
252
|
+
if (candidateItems.length === 0)
|
|
253
|
+
return empty("empty");
|
|
254
|
+
// 2.4 CROSS-LINK FIRST (default-OFF NODEDEX_V2_CROSSLINK_FIRST) — when on, draw the
|
|
255
|
+
// cross-group links NOW, before the SELECTOR, so the judge sees each block's
|
|
256
|
+
// cross-thread role (its rescue then protects cross-group deps, not just
|
|
257
|
+
// within-group) and Pass 3 gets the links pre-computed. runCrossGroupLink no-ops
|
|
258
|
+
// if NODEDEX_V2_CROSSLINK is off. The expensive 2b fill still runs AFTER the
|
|
259
|
+
// judge, so dropped blocks never pay it; the judge cleans links to dropped blocks.
|
|
260
|
+
let earlyCrossLink;
|
|
261
|
+
if (v2CrossLinkFirstEnabled()) {
|
|
262
|
+
earlyCrossLink = await timed("v2_crosslink", () => runCrossGroupLink(provider, candidateItems, groupByItemId));
|
|
263
|
+
}
|
|
264
|
+
// 2.5 SELECTOR (Fix 1, default-OFF NODEDEX_V2_JUDGE) — the worth-gate. Drops low-worth
|
|
265
|
+
// candidates BEFORE the per-block 2b fill, so dropped ones never pay downstream cost
|
|
266
|
+
// (fill / naming / relations). Keeps a kept item's causal evidence (anchor-override);
|
|
267
|
+
// judge-fail → keep all. COMPREHEND is the comprehender (high recall); this is the
|
|
268
|
+
// SELECTOR (precision) — the selective half memory requires (design: worth-gate doc).
|
|
269
|
+
const sel = v2JudgeEnabled()
|
|
270
|
+
? await timed("v2_judge", () => runV2Judge(provider, candidateItems, transcript, groupByItemId))
|
|
271
|
+
: { kept: candidateItems, ran: false, droppedCount: 0, rescued: 0 };
|
|
272
|
+
let items = sel.kept;
|
|
273
|
+
if (items.length === 0)
|
|
274
|
+
return empty("empty");
|
|
275
|
+
// 3. Pass 2b unique{}-fill (parallel, bounded) — the fused COMPREHEND can't fill
|
|
276
|
+
// unique{} under load (the bet's limit), so this focused per-block step does.
|
|
277
|
+
const provById = new Map();
|
|
278
|
+
for (const g of groups) {
|
|
279
|
+
for (const b of g.blocks ?? []) {
|
|
280
|
+
provById.set(`${g.group_id}::${b.local_id}`, { essence: b.essence, prov: b.provenance });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const CONC = opts.fillConcurrency ?? 5;
|
|
284
|
+
let fillMode = "per-item";
|
|
285
|
+
await timed("v2_fill_2b", async () => {
|
|
286
|
+
const fillInput = (it) => {
|
|
287
|
+
const p = provById.get(it.id) ?? { essence: it.text, prov: it.excerpt ?? "" };
|
|
288
|
+
return { id: it.id, type: it.type, text: `${p.essence ?? it.text}\n\nSOURCE (verbatim): ${p.prov ?? ""}` };
|
|
289
|
+
};
|
|
290
|
+
if (v2FillBatchEnabled()) {
|
|
291
|
+
// Stage B: N blocks per call instead of one each (the measured fan-out was
|
|
292
|
+
// the front-half's dominant wall cost). Falls back per-item for anything
|
|
293
|
+
// the batch can't account for — never loses a fill.
|
|
294
|
+
const b = await callPass2bBatchedFill(provider, items.map(fillInput));
|
|
295
|
+
const byId = new Map(b.results.map((r) => [r.id, r.unique]));
|
|
296
|
+
for (const it of items) {
|
|
297
|
+
const u = byId.get(it.id);
|
|
298
|
+
if (u)
|
|
299
|
+
it.unique = u;
|
|
300
|
+
}
|
|
301
|
+
fillMode = `batch:${b.llmCalls} call(s)${b.fellBackIds.length ? `, ${b.fellBackIds.length} fell back per-item` : ""}`;
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
for (let i = 0; i < items.length; i += CONC) {
|
|
305
|
+
await Promise.all(items.slice(i, i + CONC).map(async (it) => {
|
|
306
|
+
const r = await callPass2bLLM(provider, fillInput(it));
|
|
307
|
+
if (r.result?.unique)
|
|
308
|
+
it.unique = r.result.unique;
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
311
|
+
fillMode = `per-item conc=${CONC}`;
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
// 3.25 MERGE cross-group dups (default-OFF NODEDEX_V2_MERGE_DUPS) — NOW that 2b has
|
|
315
|
+
// filled unique{}, collapse copies of the same residue produced by overlapping
|
|
316
|
+
// groups, keyed on the STABLE identity (type + unique{} primary_value). Re-points
|
|
317
|
+
// refs to the survivor; the cross-group linker (next) connects it to the threads
|
|
318
|
+
// its copies touched. Off → passthrough.
|
|
319
|
+
let merged = 0;
|
|
320
|
+
if (mergeCrossGroupDupsEnabled()) {
|
|
321
|
+
const m = mergeCrossGroupDups(items);
|
|
322
|
+
items = m.items;
|
|
323
|
+
merged = m.merged;
|
|
324
|
+
}
|
|
325
|
+
const filled = items.filter((i) => i.unique && Object.keys(i.unique).length > 0).length;
|
|
326
|
+
// 3.4 JUSTIFY (default-ON NODEDEX_V2_JUSTIFY) — repair grounded conclusions
|
|
327
|
+
// (decision / hypothesis / insight) that arrived with no based_on wiring
|
|
328
|
+
// (SEAM-1 warns; this consumes the warning). Runs on the POST-MERGE survivors
|
|
329
|
+
// so repaired links can't point at dropped copies. One batched call, one
|
|
330
|
+
// attempt; legitimate-empty stays unwired (the grounding may be out-of-scope
|
|
331
|
+
// this session). Without this, Pass 5 correctly assembles no chain (no causal
|
|
332
|
+
// path reaches the conclusion) and the conclusion loses its re-openable WHY
|
|
333
|
+
// (2026-06-11 React-arc finding; generalized to hypothesis/insight 2026-06-15).
|
|
334
|
+
const justify = await timed("v2_justify", () => runJustifyConclusions(provider, items, groupByItemId));
|
|
335
|
+
// 3.5 CROSS-GROUP LINK (design §15.4; default-OFF NODEDEX_V2_CROSSLINK). Per-group
|
|
336
|
+
// PRODUCE wires only WITHIN each thread; this adds the sparse links that cross
|
|
337
|
+
// BETWEEN threads, over all blocks. Mutates items in place. No-op for <2
|
|
338
|
+
// threads / when off. Bounded output (just links) → can't run away.
|
|
339
|
+
// When cross-link-first already ran (before the judge), reuse its result; else
|
|
340
|
+
// run it here in the original slot (after justify) — byte-identical to before.
|
|
341
|
+
const crossLink = earlyCrossLink ?? await timed("v2_crosslink", () => runCrossGroupLink(provider, items, groupByItemId));
|
|
342
|
+
// 4. INTEGRATE (recognizer; default-OFF → passthrough). Graph-aware root match.
|
|
343
|
+
const integ = await timed("v2_integrate", () => integrateV2Roots(db, provider, items));
|
|
344
|
+
const finalItems = integ.items;
|
|
345
|
+
// Per-stage COST attribution: sum the ledger over each stage's timing window.
|
|
346
|
+
// Closes the "front-half spend invisible in cost_breakdown" gap — the breaker
|
|
347
|
+
// never needed it (the ledger total is complete), but this shows WHICH stage
|
|
348
|
+
// spent what, the cost twin of v2WallMs. Sits beside v2WallMs rather than in
|
|
349
|
+
// cost_breakdown's pass slots (comprehend/justify/crosslink/integrate have no
|
|
350
|
+
// pass slot; this is a different, v2-native decomposition).
|
|
351
|
+
const v2FrontCostUsd = {};
|
|
352
|
+
for (const [k, w] of Object.entries(window))
|
|
353
|
+
v2FrontCostUsd[k] = getSpendBetween(w.start, w.end);
|
|
354
|
+
// 5. resumeFrom:pass3 checkpoint from the FINAL (filled + recognized) items.
|
|
355
|
+
const pass1Items = finalItems.map((it) => ({
|
|
356
|
+
id: it.id, text: it.text, source: "comprehend",
|
|
357
|
+
excerpt: it.excerpt ?? "", provisional_type: it.type,
|
|
358
|
+
}));
|
|
359
|
+
const checkpoint = {
|
|
360
|
+
resumeFrom: "pass3",
|
|
361
|
+
pass0: { sceneCard: undefined, raw: undefined },
|
|
362
|
+
pass1Items,
|
|
363
|
+
pass2Classified: finalItems,
|
|
364
|
+
v2WallMs: wall,
|
|
365
|
+
v2FrontCostUsd,
|
|
366
|
+
};
|
|
367
|
+
const s = (k) => ((wall[k] ?? 0) / 1000).toFixed(1);
|
|
368
|
+
const c = (k) => (v2FrontCostUsd[k] ?? 0).toFixed(4);
|
|
369
|
+
const frontTotal = Object.values(v2FrontCostUsd).reduce((a, b) => a + b, 0);
|
|
370
|
+
console.log(`[v2-front] wall: comprehend=${s("v2_comprehend")}s judge=${s("v2_judge")}s ` +
|
|
371
|
+
`fill_2b=${s("v2_fill_2b")}s (${items.length} blocks, ${fillMode}) ` +
|
|
372
|
+
`justify=${s("v2_justify")}s crosslink=${s("v2_crosslink")}s integrate=${s("v2_integrate")}s`);
|
|
373
|
+
console.log(`[v2-front] cost: $${frontTotal.toFixed(4)} total — comprehend=$${c("v2_comprehend")} ` +
|
|
374
|
+
`judge=$${c("v2_judge")} fill_2b=$${c("v2_fill_2b")} justify=$${c("v2_justify")} ` +
|
|
375
|
+
`crosslink=$${c("v2_crosslink")} integrate=$${c("v2_integrate")}`);
|
|
376
|
+
return {
|
|
377
|
+
checkpoint,
|
|
378
|
+
groups: groups.length,
|
|
379
|
+
blocks: items.length,
|
|
380
|
+
filled,
|
|
381
|
+
recognizer: { ran: integ.ran, attached: integ.recognition?.attached ?? 0, rewritten: integ.rewritten },
|
|
382
|
+
crossLinks: crossLink.added,
|
|
383
|
+
selector: { ran: sel.ran, dropped: sel.droppedCount, rescued: sel.rescued },
|
|
384
|
+
merged,
|
|
385
|
+
justify,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=v2-integrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-integrate.js","sourceRoot":"","sources":["../../../src/middleware/reflect/v2-integrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
2
|
+
import type { Pass2Item } from "./types.js";
|
|
3
|
+
import { type PassJudgeResult } from "./pass_judge.js";
|
|
4
|
+
export declare function v2JudgeEnabled(): boolean;
|
|
5
|
+
/** Context-aware judge (default OFF, NODEDEX_V2_JUDGE_CONTEXT): show the SELECTOR each
|
|
6
|
+
* block's structural ROLE (what depends on it / what it builds on) so it judges worth in
|
|
7
|
+
* context, not by the sentence alone — the proactive complement to the mechanical rescue
|
|
8
|
+
* below. Best paired with cross-link-first (so the role includes cross-group deps);
|
|
9
|
+
* degrades to within-group roles when cross-link runs after the judge. */
|
|
10
|
+
export declare function v2JudgeContextEnabled(): boolean;
|
|
11
|
+
/** Each item's structural ROLE for the context-aware judge: what DEPENDS ON it (incoming
|
|
12
|
+
* edges — the load-bearing signal) and what it BUILDS ON (outgoing), summarized by the
|
|
13
|
+
* NEIGHBOUR blocks' TYPES (ids are noise to the judge). Built over the WHOLE item set, so
|
|
14
|
+
* cross-group roles appear when cross-link ran first; degrades to within-group otherwise.
|
|
15
|
+
* Isolated blocks get no entry (judged on text alone). Pure / testable. */
|
|
16
|
+
export declare function buildRoleContext(items: Pass2Item[]): Record<string, string>;
|
|
17
|
+
/** Apply JUDGE verdicts to v2 candidates. DROP the low-worth; RESCUE any dropped item a
|
|
18
|
+
* KEPT item causally depends on (never orphan a kept decision's evidence); then CLEAN
|
|
19
|
+
* any remaining refs to still-dropped items so no edge dangles. judge=null → keep all
|
|
20
|
+
* (a failed selector must NEVER drop residue — precision is an improvement, not a gate).
|
|
21
|
+
* Mutates kept items' ref arrays in place (cleaning). Pure w.r.t. the input list otherwise. */
|
|
22
|
+
export declare function applyV2JudgeVerdicts(items: Pass2Item[], judge: PassJudgeResult | null): {
|
|
23
|
+
kept: Pass2Item[];
|
|
24
|
+
droppedCount: number;
|
|
25
|
+
rescued: number;
|
|
26
|
+
};
|
|
27
|
+
/** Run the SELECTOR PER GROUP, all groups in PARALLEL. Judging per group is how v1's
|
|
28
|
+
* judge actually runs (per turn — never hundreds at once) and how PRODUCE already runs
|
|
29
|
+
* (per group): it keeps each call's VERDICT output bounded so the judge never truncates
|
|
30
|
+
* on a big arc (the one-shot-over-all-314 version did). The path-specificity test is
|
|
31
|
+
* per-item-independent, so splitting by group changes no verdict — only the call size.
|
|
32
|
+
*
|
|
33
|
+
* Each group's items are judged with the transcript as shared session context. A group
|
|
34
|
+
* whose judge call FAILS contributes no verdicts → its items default to KEEP (recall
|
|
35
|
+
* guard — a failed selector never drops residue). Verdicts are merged and applied once
|
|
36
|
+
* (so anchor-override / dangling-clean see the whole item set). No-op (keep all) for <2.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runV2Judge(provider: LLMProvider, items: Pass2Item[], transcript: string, groupByItemId?: Record<string, string>): Promise<{
|
|
39
|
+
kept: Pass2Item[];
|
|
40
|
+
ran: boolean;
|
|
41
|
+
droppedCount: number;
|
|
42
|
+
rescued: number;
|
|
43
|
+
}>;
|
|
44
|
+
//# sourceMappingURL=v2-judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-judge.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/v2-judge.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED;;;;2EAI2E;AAC3E,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAiBD;;;;4EAI4E;AAC5E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8B3E;AAED;;;;gGAIgG;AAChG,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,eAAe,GAAG,IAAI,GAC5B;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiC9D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,SAAS,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CrF"}
|