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,360 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// PASS 2c — WIRE CAUSALITY (Week 3 piece, debt #1, 2026-05-25)
|
|
3
|
+
//
|
|
4
|
+
// Role: The third of three sub-passes in the Pass 2 split (see
|
|
5
|
+
// docs/PASS2-SPLIT-DESIGN.md §2 Pass ownership). Takes the items 2a
|
|
6
|
+
// classified and 2b filled, and decides their causal wiring:
|
|
7
|
+
// triggered_by (counterfactual), based_on (evidence), and semantic
|
|
8
|
+
// relations (contradicts / supports / resolves). BATCH visibility:
|
|
9
|
+
// a single LLM call sees all items at once because Q3/Q5 reason
|
|
10
|
+
// about pairs.
|
|
11
|
+
//
|
|
12
|
+
// What this pass DOES (§2 ownership):
|
|
13
|
+
// - Q3 TRIGGERED_BY — counterfactual wiring, circularity guard,
|
|
14
|
+
// REPLACEMENTS rule, HIERARCHY-level wiring rule
|
|
15
|
+
// - Q4 BASED_ON — evidence wiring
|
|
16
|
+
// - Q5 SEMANTIC RELATIONS — contradicts / supports / resolves
|
|
17
|
+
// (Parity note: design §2 also lists `derived_from` + `affects`, but the
|
|
18
|
+
// monolith pass2.ts Q5 emits ONLY the three above. Per §4 parity rule,
|
|
19
|
+
// pass2c mirrors monolith Q5 EXACTLY; extending Q5 to 5 relation types
|
|
20
|
+
// is a deliberate follow-up change, not part of this split.)
|
|
21
|
+
//
|
|
22
|
+
// What this pass does NOT do (anti-examples, §2 + Seam β contract):
|
|
23
|
+
// - Touch `type`, `unique`, `text`, `id`, `project`, or any other field
|
|
24
|
+
// written by 2a/2b — all READ-ONLY per §1 Seam β contract
|
|
25
|
+
// - Reclassify (a model that wants to re-type must FAIL back, not mutate)
|
|
26
|
+
// - Dedup — 2a already did Q0
|
|
27
|
+
// - Emit `skipped[]` — items reach 2c only if they survived 2a + Seam α
|
|
28
|
+
// - Validate the type↔unique{} schema — Tier 1B at Seam α did that pre-2c
|
|
29
|
+
// - Touch other PROJECT GRAPH blocks via writes — read-only, the orchestrator
|
|
30
|
+
// in pipeline.ts owns relation writes (this just RETURNS the wiring decisions)
|
|
31
|
+
//
|
|
32
|
+
// Status:
|
|
33
|
+
// - Standalone file. NOT wired into pipeline.ts yet (next step:
|
|
34
|
+
// composeForDownstream() then pipeline.ts behind NODEDEX_PASS2_SPLIT=1).
|
|
35
|
+
// - `pass2.ts` is FROZEN per §4. This file does NOT replace it.
|
|
36
|
+
//
|
|
37
|
+
// Charter alignment:
|
|
38
|
+
// - Rule 6 (guards catch failure, never override success): sanitizer strips
|
|
39
|
+
// forbidden output keys (anything outside the wiring bundle) and filters
|
|
40
|
+
// relation `type`s to the monolith-parity allowed set. A pass2c that emits
|
|
41
|
+
// less is fine; a pass2c that smuggles new shape into downstream is not.
|
|
42
|
+
// - Rule 7 (determinism is local): sanitizer + schema are pure code;
|
|
43
|
+
// judgment (which pairs are causally linked) is the LLM's.
|
|
44
|
+
// - Rule 9 (bugs live at seams): the Seam β contract that 2c MUST NOT mutate
|
|
45
|
+
// read-only fields is enforced STRUCTURALLY by `snapshotForSeamBeta` +
|
|
46
|
+
// `checkSeamBetaInvariant` in pass2-seams.ts — pass2c's output shape here
|
|
47
|
+
// is designed so the read-only fields are not even in the schema.
|
|
48
|
+
// - Rule 14 (store the path): one item ↔ one wiring bundle. The wiring
|
|
49
|
+
// decisions pass2c made for an item are ONE conceptual record;
|
|
50
|
+
// `Pass2cItemWiring` stores them as one unit, not split across arrays.
|
|
51
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
52
|
+
import { CONFIG } from "./config.js";
|
|
53
|
+
// ─── Prompt ────────────────────────────────────────────────────────────────────
|
|
54
|
+
//
|
|
55
|
+
// Carved from PASS2_PROMPT in pass2.ts CAUSAL WIRING section (Q3 + Q4 + Q5
|
|
56
|
+
// verbatim, lines 167-189 in the monolith). Sections REMOVED per §2:
|
|
57
|
+
// - Q0 DEDUP (2a)
|
|
58
|
+
// - Q1 TYPE — 5 TESTs (2a)
|
|
59
|
+
// - Q2 HIERARCHY (2a)
|
|
60
|
+
// - PROJECT ATTRIBUTION (2a)
|
|
61
|
+
// - SUPERSEDES_REF (2a; passed through as context)
|
|
62
|
+
// - REVIEW FLAGS (2a)
|
|
63
|
+
// - CLASSIFICATION REASONING (2a; passed through as context)
|
|
64
|
+
// - UNIQUE FIELDS section (2b)
|
|
65
|
+
// - NOVEL TYPE (2a)
|
|
66
|
+
//
|
|
67
|
+
// STATE CONVENTION preserved (Q5 references PROJECT GRAPH for cross-batch
|
|
68
|
+
// relations; the same "state = text in marked regions" discipline applies).
|
|
69
|
+
// SCENE CARD CONTEXT pared to just the CAUSAL LINKS note (Q3 still uses it;
|
|
70
|
+
// APPROACHES/UNCHANGED/TASKS were 2a-only signals).
|
|
71
|
+
//
|
|
72
|
+
// Top framing adds Seam β read-only callout — explicit guard against the
|
|
73
|
+
// model "fixing" what it thinks 2a got wrong by emitting new type/unique
|
|
74
|
+
// fields. The sanitizer + Seam β invariant check are the structural backup.
|
|
75
|
+
export const PASS2C_PROMPT = `You receive classified items from Pass 2a (type, project, refs)
|
|
76
|
+
already filled by Pass 2b (unique{}). Your ONE job: wire causal relations
|
|
77
|
+
between these items (and to existing blocks in PROJECT GRAPH).
|
|
78
|
+
|
|
79
|
+
── SEAM β CONTRACT — READ-ONLY ─────────────────────────────────────────────
|
|
80
|
+
DO NOT change any item's type. DO NOT touch unique{} fields. DO NOT change
|
|
81
|
+
text, id, project, supersedes_ref, resolved_ref, or extends_item. DO NOT add
|
|
82
|
+
or remove items. DO NOT emit skipped[]. DO NOT re-dedup (Pass 2a did Q0).
|
|
83
|
+
DO NOT re-classify (Pass 2a did Q1). If you think 2a or 2b got something
|
|
84
|
+
wrong, EMIT ONLY YOUR WIRING DECISIONS anyway — the seam validator will
|
|
85
|
+
catch the mismatch.
|
|
86
|
+
|
|
87
|
+
── STATE CONVENTION ─────────────────────────────────────────────────────────
|
|
88
|
+
"State" in this prompt = text in marked regions below (PROJECT GRAPH, SCENE
|
|
89
|
+
CARD, ITEMS). Your training knowledge and "what's commonly known about this
|
|
90
|
+
domain" are NOT state. A causal link to an existing block is valid ONLY if a
|
|
91
|
+
block in PROJECT GRAPH has that exact label.
|
|
92
|
+
|
|
93
|
+
For EACH item: walk Q3 → Q4 → Q5 in order.
|
|
94
|
+
|
|
95
|
+
── Q3: TRIGGERED_BY — "In a world where (X) didn't happen, would (Y) still have occurred?"
|
|
96
|
+
YES → no link. NO → X goes in triggered_by.
|
|
97
|
+
UNCERTAIN → no link. Wrong wiring (false narrative) costs more than missing wiring (recoverable).
|
|
98
|
+
CIRCULARITY GUARD: before adding A→B, check "Did I already put B→A?" YES → skip.
|
|
99
|
+
Use item IDs for batch, block labels for PROJECT GRAPH. Genesis → triggered_by: [].
|
|
100
|
+
REPLACEMENTS "X→Y": dead_end for X is triggered_by the decision that adopted Y.
|
|
101
|
+
HIERARCHY: "Did cause make the DECISION necessary, or only this mechanism?"
|
|
102
|
+
Decision → triggered_by on parent. Mechanism only → triggered_by on child.
|
|
103
|
+
|
|
104
|
+
── Q4: BASED_ON — "Would this claim be UNSUPPORTED without that specific finding?"
|
|
105
|
+
NO → no link. YES → based_on.
|
|
106
|
+
UNCERTAIN → no link. False evidence link costs more than missing one.
|
|
107
|
+
Applies to conclusions, decisions justified by findings.
|
|
108
|
+
|
|
109
|
+
── Q5: SEMANTIC RELATIONS — for each item pair in this batch:
|
|
110
|
+
"Does (X) directly contradict, support, or answer (Y)?"
|
|
111
|
+
contradicts: opposite claims about the same specific thing.
|
|
112
|
+
supports: independent evidence strengthening the same claim.
|
|
113
|
+
resolves: (X) answers the question or settles the hypothesis (Y) poses.
|
|
114
|
+
Use ONLY these three relation types. Other relation kinds are emitted by
|
|
115
|
+
other passes (e.g. supersedes, extends, derived_from) — do not emit them here.
|
|
116
|
+
|
|
117
|
+
PER-RELATION REASONING: every emitted relation MUST carry a reasoning field
|
|
118
|
+
that NAMES the case (contradicts / supports / resolves) AND CITES the specific
|
|
119
|
+
claim from each item that grounded the decision — e.g. a contradicts entry
|
|
120
|
+
should read "contradicts: item_5 claims X always Y; item_9 reports X did not Y in case Z".
|
|
121
|
+
This is the audit trail downstream consumers (chains, agent inspection) read to
|
|
122
|
+
understand WHY this wire exists. A wire without grounded reasoning is corruption;
|
|
123
|
+
if you cannot cite a specific claim-pair, do not emit the relation.
|
|
124
|
+
|
|
125
|
+
── SCENE CARD CONTEXT ──────────────────────────────────────────────────────
|
|
126
|
+
CAUSAL LINKS in the scene card name explicit cause→effect pairs the agent
|
|
127
|
+
stated in this session — use them as Q3 input.
|
|
128
|
+
|
|
129
|
+
── OUTPUT ──────────────────────────────────────────────────────────────────
|
|
130
|
+
For EACH item, emit one wiring entry: { id, triggered_by[], based_on[], relations[] }.
|
|
131
|
+
Each entry in relations[] is { type, target, reasoning } — reasoning REQUIRED per
|
|
132
|
+
Q5 (names the case + cites the claim-pair). Use [] (empty array) for any axis
|
|
133
|
+
with no links — do not omit fields. The id MUST match an input item's id exactly.
|
|
134
|
+
Do NOT emit wiring for items not in the input.
|
|
135
|
+
|
|
136
|
+
`;
|
|
137
|
+
// ─── Output schema ─────────────────────────────────────────────────────────────
|
|
138
|
+
//
|
|
139
|
+
// Mirrors `Pass2cResult` — { wiring: [{ id, triggered_by, based_on, relations }] }.
|
|
140
|
+
// Read-only fields (type, unique, text, project, etc.) are deliberately ABSENT
|
|
141
|
+
// so any leakage is visible in pass-log output. Per Seam β contract, structural
|
|
142
|
+
// exclusion is the first line of defense; the sanitizer + Seam β invariant
|
|
143
|
+
// check are deeper backstops.
|
|
144
|
+
const PASS2C_SCHEMA = {
|
|
145
|
+
type: "object",
|
|
146
|
+
properties: {
|
|
147
|
+
wiring: {
|
|
148
|
+
type: "array",
|
|
149
|
+
items: {
|
|
150
|
+
type: "object",
|
|
151
|
+
properties: {
|
|
152
|
+
id: { type: "string" },
|
|
153
|
+
triggered_by: { type: "array", items: { type: "string" } },
|
|
154
|
+
based_on: { type: "array", items: { type: "string" } },
|
|
155
|
+
relations: {
|
|
156
|
+
type: "array",
|
|
157
|
+
items: {
|
|
158
|
+
type: "object",
|
|
159
|
+
properties: {
|
|
160
|
+
type: { type: "string" },
|
|
161
|
+
target: { type: "string" },
|
|
162
|
+
reasoning: { type: "string" }, // Q5 case + claim-pair evidence (per meaning-first)
|
|
163
|
+
},
|
|
164
|
+
required: ["type", "target", "reasoning"],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
required: ["id", "triggered_by", "based_on", "relations"],
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
required: ["wiring"],
|
|
173
|
+
};
|
|
174
|
+
// ─── Sanitizers ────────────────────────────────────────────────────────────────
|
|
175
|
+
//
|
|
176
|
+
// Two structural guards (charter rule 6):
|
|
177
|
+
//
|
|
178
|
+
// (1) FORBIDDEN_KEYS — keys outside the wiring bundle that some model may
|
|
179
|
+
// leak (especially if it "corrects" type or unique{}). Stripped at sanitize
|
|
180
|
+
// time so the leakage never reaches downstream. Includes the read-only
|
|
181
|
+
// Seam β fields plus a few false-friends (skipped, classified) that exist
|
|
182
|
+
// in the monolith schema but have no place in 2c output.
|
|
183
|
+
//
|
|
184
|
+
// (2) ALLOWED_PASS2C_RELATION_TYPES — Q5 emits only contradicts / supports /
|
|
185
|
+
// resolves per monolith parity. Other relation types come from other
|
|
186
|
+
// passes (Pass 4 cross-session, post-process CHAIN_RELS) or other 2a/2b
|
|
187
|
+
// mechanisms (supersedes, extends). Filter to keep the split's "what each
|
|
188
|
+
// pass owns" boundary structural, not just prompted.
|
|
189
|
+
const FORBIDDEN_KEYS_ON_PASS2C_OUTPUT = [
|
|
190
|
+
"type",
|
|
191
|
+
"unique",
|
|
192
|
+
"text",
|
|
193
|
+
"project",
|
|
194
|
+
"extends_item",
|
|
195
|
+
"supersedes_ref",
|
|
196
|
+
"resolved_ref",
|
|
197
|
+
"review_reason",
|
|
198
|
+
"classification_reasoning",
|
|
199
|
+
"schema",
|
|
200
|
+
"skipped",
|
|
201
|
+
"classified",
|
|
202
|
+
"note",
|
|
203
|
+
];
|
|
204
|
+
export const ALLOWED_PASS2C_RELATION_TYPES = new Set([
|
|
205
|
+
"contradicts",
|
|
206
|
+
"supports",
|
|
207
|
+
"resolves",
|
|
208
|
+
]);
|
|
209
|
+
/**
|
|
210
|
+
* Strip forbidden keys from a single wiring entry. Returns the cleaned wiring
|
|
211
|
+
* + the list of stripped keys (so callers can audit-log contract violations).
|
|
212
|
+
*
|
|
213
|
+
* If `triggered_by` / `based_on` / `relations` are missing, default to empty
|
|
214
|
+
* arrays (the schema requires them; this is defensive). If `relations` items
|
|
215
|
+
* have type values outside ALLOWED_PASS2C_RELATION_TYPES, those entries are
|
|
216
|
+
* dropped — reported in `strippedRelationTypes`.
|
|
217
|
+
*/
|
|
218
|
+
export function sanitizePass2cItem(raw) {
|
|
219
|
+
const stripped = [];
|
|
220
|
+
const cleaned = { ...raw };
|
|
221
|
+
for (const k of FORBIDDEN_KEYS_ON_PASS2C_OUTPUT) {
|
|
222
|
+
if (k in cleaned) {
|
|
223
|
+
stripped.push(k);
|
|
224
|
+
delete cleaned[k];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const id = typeof cleaned.id === "string" ? cleaned.id : String(cleaned.id ?? "");
|
|
228
|
+
const triggered_by = Array.isArray(cleaned.triggered_by)
|
|
229
|
+
? cleaned.triggered_by.filter((x) => typeof x === "string" && x.trim() !== "")
|
|
230
|
+
: [];
|
|
231
|
+
const based_on = Array.isArray(cleaned.based_on)
|
|
232
|
+
? cleaned.based_on.filter((x) => typeof x === "string" && x.trim() !== "")
|
|
233
|
+
: [];
|
|
234
|
+
// Relations: filter to allowed types, coerce target to string, default reasoning
|
|
235
|
+
// to empty string if the model omitted it (the schema requires it, but be
|
|
236
|
+
// defensive — a missing reasoning is a contract failure to log, not a crash).
|
|
237
|
+
const strippedRelationTypes = [];
|
|
238
|
+
const relations = [];
|
|
239
|
+
if (Array.isArray(cleaned.relations)) {
|
|
240
|
+
for (const r of cleaned.relations) {
|
|
241
|
+
if (!r || typeof r !== "object")
|
|
242
|
+
continue;
|
|
243
|
+
const rType = typeof r.type === "string" ? r.type : "";
|
|
244
|
+
const rTarget = typeof r.target === "string" ? r.target : String(r.target ?? "");
|
|
245
|
+
const rReasoning = typeof r.reasoning === "string" ? r.reasoning : "";
|
|
246
|
+
if (!rType || !rTarget.trim())
|
|
247
|
+
continue;
|
|
248
|
+
if (!ALLOWED_PASS2C_RELATION_TYPES.has(rType)) {
|
|
249
|
+
strippedRelationTypes.push(rType);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
relations.push({ type: rType, target: rTarget, reasoning: rReasoning });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
item: { id, triggered_by, based_on, relations },
|
|
257
|
+
stripped,
|
|
258
|
+
strippedRelationTypes,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Sanitize the full pass2c result. Aggregates per-item stripped keys + relation
|
|
263
|
+
* types so the caller can log the contract-violation surface.
|
|
264
|
+
*/
|
|
265
|
+
export function sanitizePass2cResult(raw) {
|
|
266
|
+
const perItemStripped = [];
|
|
267
|
+
const perItemStrippedRelationTypes = [];
|
|
268
|
+
let totalStrippedFields = 0;
|
|
269
|
+
const wiring = (raw.wiring ?? []).map((w) => {
|
|
270
|
+
const { item, stripped, strippedRelationTypes } = sanitizePass2cItem(w);
|
|
271
|
+
if (stripped.length > 0) {
|
|
272
|
+
perItemStripped.push({ id: item.id, stripped });
|
|
273
|
+
totalStrippedFields += stripped.length;
|
|
274
|
+
}
|
|
275
|
+
if (strippedRelationTypes.length > 0) {
|
|
276
|
+
perItemStrippedRelationTypes.push({ id: item.id, types: strippedRelationTypes });
|
|
277
|
+
}
|
|
278
|
+
return item;
|
|
279
|
+
});
|
|
280
|
+
return {
|
|
281
|
+
result: { wiring },
|
|
282
|
+
totalStrippedFields,
|
|
283
|
+
perItemStripped,
|
|
284
|
+
perItemStrippedRelationTypes,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
// ─── LLM call ──────────────────────────────────────────────────────────────────
|
|
288
|
+
//
|
|
289
|
+
// BATCH call (single LLM invocation for all items) — per §2, pass2c needs full
|
|
290
|
+
// batch visibility because Q3 counterfactuals and Q5 semantic relations reason
|
|
291
|
+
// about PAIRS. Per-item parallelism would lose that visibility.
|
|
292
|
+
//
|
|
293
|
+
// Signature mirrors callPass2aLLM as far as practical so wiring code can
|
|
294
|
+
// uniformly route between sub-passes. Returns usage + sanitization stats so
|
|
295
|
+
// the caller can stamp the turn log without touching global state. Does NOT
|
|
296
|
+
// update reflectTokenStats (wiring concern, deferred to pipeline.ts wiring step).
|
|
297
|
+
export async function callPass2cLLM(provider, items, projectContext, thinkingBudget = 1024, sceneCard,
|
|
298
|
+
// Multi-model routing (C, 2026-05-25): 2c is semantic wiring — typically
|
|
299
|
+
// the expensive-model slot (Gemini Flash/Pro) while 2a/2b go to Haiku.
|
|
300
|
+
// Universal — provider-agnostic string. Undefined → use provider default.
|
|
301
|
+
modelOverride) {
|
|
302
|
+
// Defensive: an empty batch is a valid (degenerate) input — emit empty wiring,
|
|
303
|
+
// skip the LLM. Spares cost on trivially-empty turns.
|
|
304
|
+
if (items.length === 0) {
|
|
305
|
+
return {
|
|
306
|
+
result: { wiring: [] },
|
|
307
|
+
thinking: "",
|
|
308
|
+
rateLimited: false,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const sceneCardSection = sceneCard
|
|
312
|
+
? `SCENE CARD (CAUSAL LINKS name explicit cause→effect pairs from the session):\n${sceneCard}\n\n`
|
|
313
|
+
: "";
|
|
314
|
+
const projectSection = projectContext
|
|
315
|
+
? `PROJECT GRAPH (existing blocks — use labels for cross-batch triggered_by/based_on/relations targets):\n${projectContext}\n\n`
|
|
316
|
+
: "";
|
|
317
|
+
const itemsSection = `ITEMS:\n${JSON.stringify(items, null, 2)}`;
|
|
318
|
+
const userInput = `${sceneCardSection}${projectSection}${itemsSection}`;
|
|
319
|
+
const r = await provider.generateStructured(PASS2C_PROMPT, userInput, PASS2C_SCHEMA, {
|
|
320
|
+
thinkingBudget,
|
|
321
|
+
maxOutputTokens: CONFIG.pass2.maxOutputTokens,
|
|
322
|
+
...(modelOverride ? { modelOverride } : {}),
|
|
323
|
+
});
|
|
324
|
+
if (!r.result) {
|
|
325
|
+
console.error(`Auto-Reflect Pass 2c: ${r.rateLimited ? "rate limited" : "failed"} [${provider.getName()}]`);
|
|
326
|
+
return {
|
|
327
|
+
result: null,
|
|
328
|
+
thinking: r.thinking ?? "",
|
|
329
|
+
rateLimited: r.rateLimited,
|
|
330
|
+
model: r.model,
|
|
331
|
+
attempts: r.attempts,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
const { result: clean, totalStrippedFields, perItemStripped, perItemStrippedRelationTypes, } = sanitizePass2cResult(r.result);
|
|
335
|
+
const tag = provider.getName() !== "gemini" ? ` [${provider.getName()}]` : "";
|
|
336
|
+
console.log(`Auto-Reflect Pass 2c: wired ${items.length} items | tokens: in=${r.usage?.input ?? "?"} think=${r.usage?.thinking ?? "?"} out=${r.usage?.output ?? "?"}${tag}`);
|
|
337
|
+
if (totalStrippedFields > 0) {
|
|
338
|
+
console.log(`Auto-Reflect Pass 2c: SANITIZER stripped ${totalStrippedFields} forbidden field(s) across ${perItemStripped.length} item(s)`);
|
|
339
|
+
for (const s of perItemStripped) {
|
|
340
|
+
console.log(` ${s.id}: removed ${s.stripped.join(", ")}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (perItemStrippedRelationTypes.length > 0) {
|
|
344
|
+
console.log(`Auto-Reflect Pass 2c: SANITIZER dropped non-parity relation type(s) across ${perItemStrippedRelationTypes.length} item(s)`);
|
|
345
|
+
for (const s of perItemStrippedRelationTypes) {
|
|
346
|
+
console.log(` ${s.id}: dropped relation types ${s.types.join(", ")}`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
result: clean,
|
|
351
|
+
thinking: r.thinking ?? "",
|
|
352
|
+
rateLimited: r.rateLimited,
|
|
353
|
+
model: r.model,
|
|
354
|
+
attempts: r.attempts,
|
|
355
|
+
usage: r.usage,
|
|
356
|
+
strippedFields: perItemStripped.length > 0 ? perItemStripped : undefined,
|
|
357
|
+
strippedRelationTypes: perItemStrippedRelationTypes.length > 0 ? perItemStrippedRelationTypes : undefined,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=pass2c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass2c.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2c.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
2
|
+
import type { Pass2Item } from "./types.js";
|
|
3
|
+
export declare function pass3BatchEnabled(): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Pass 3 batch size = min(reliability bound, token bound).
|
|
6
|
+
*
|
|
7
|
+
* RELIABILITY bound (NODEDEX_PASS3_BATCH_SIZE, default 20): under the empirically-
|
|
8
|
+
* reliable ~25 (25 & 15 covered fully; 59 dropped ~half). This is THE cap on a
|
|
9
|
+
* big-cap model — its output budget is never the limit (20 blocks ≈ 6k vs Gemini's
|
|
10
|
+
* 65536), so a big-cap model always lands here.
|
|
11
|
+
*
|
|
12
|
+
* TOKEN bound (small-cap models only): a model with a small output ceiling (e.g.
|
|
13
|
+
* claude-3.5-sonnet 8192) can hit that ceiling BEFORE the reliability bound, so scale
|
|
14
|
+
* the batch down to keep (batchSize × ~tokens/block + thinking) under the ceiling.
|
|
15
|
+
* `model` undefined → the provider default (assumed big-cap) → the flat bound. Pairs
|
|
16
|
+
* with the openai.ts per-model ceiling CLAMP (which already prevents the over-request
|
|
17
|
+
* glitch); this just reduces the truncation-retries that clamp would otherwise cause
|
|
18
|
+
* on a small-cap model. Pure (reads env + KNOWN_CAPS).
|
|
19
|
+
*/
|
|
20
|
+
export declare function pass3BatchSize(model?: string, thinkingBudget?: number): number;
|
|
21
|
+
type Pass3Analysis = {
|
|
22
|
+
project_creates?: any[];
|
|
23
|
+
new_blocks?: any[];
|
|
24
|
+
updates?: any[];
|
|
25
|
+
skip_reasons?: any[];
|
|
26
|
+
};
|
|
27
|
+
/** Merge per-chunk Pass-3 analyses into ONE analysis the save loop consumes unchanged.
|
|
28
|
+
* new_blocks/updates/skip_reasons concatenate (item ids are globally unique → no
|
|
29
|
+
* collision); project_creates DEDUP by label (two chunks of a fresh project each coin
|
|
30
|
+
* the same root). Pure / testable. */
|
|
31
|
+
export declare function mergePass3Analyses(parts: Array<Pass3Analysis | null | undefined>): Pass3Analysis;
|
|
32
|
+
/** Split items into chunks of at most `size`. Pure / testable. */
|
|
33
|
+
export declare function chunkItems<T>(items: T[], size: number): T[][];
|
|
34
|
+
type Pass3Result = {
|
|
35
|
+
analysis: any;
|
|
36
|
+
geminiThinking: string;
|
|
37
|
+
rateLimited: boolean;
|
|
38
|
+
model?: string;
|
|
39
|
+
attempts?: Array<{
|
|
40
|
+
model: string;
|
|
41
|
+
outcome: string;
|
|
42
|
+
}>;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Batched Pass 3 — drop-in for callPass3LLM. Delegates to a single call when the flag
|
|
46
|
+
* is off OR the item count fits one call; otherwise chunks → per-chunk callPass3LLM
|
|
47
|
+
* (sequential, sharing the same graph snapshot) → mergePass3Analyses. Sequential (not
|
|
48
|
+
* parallel) to stay gentle on rate limits — the chunks are independent reads of the
|
|
49
|
+
* same snapshot, so order does not change correctness (cross-chunk links wire at save).
|
|
50
|
+
*/
|
|
51
|
+
export declare function callPass3Batched(provider: LLMProvider, classified: Pass2Item[], knownRoots: Array<{
|
|
52
|
+
label: string;
|
|
53
|
+
essence: string;
|
|
54
|
+
}>, projectContext: string, agentSavedBlocks: Array<{
|
|
55
|
+
id: string;
|
|
56
|
+
label: string;
|
|
57
|
+
type: string;
|
|
58
|
+
essence: string;
|
|
59
|
+
unique: Record<string, any>;
|
|
60
|
+
}>, thinkingBudget?: number, duplicateAlerts?: string, itemContext?: Record<string, string>, batchSize?: number): Promise<Pass3Result>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=pass3-batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass3-batch.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3-batch.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,SAAO,GAAG,MAAM,CAO5E;AAED,KAAK,aAAa,GAAG;IACnB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB,CAAC;AAEF;;;uCAGuC;AACvC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,aAAa,CAgBhG;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAK7D;AAED,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,EAClH,cAAc,SAAO,EACrB,eAAe,SAAK,EACpB,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACxC,SAAS,SAAwD,GAChE,OAAO,CAAC,WAAW,CAAC,CAgCtB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// PASS 3 — BATCHED WRITE (the back-half scale fix; 2026-06-14)
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// WHY: Pass 3 writes EVERY block in ONE LLM call. The model reliably covers ~25
|
|
6
|
+
// items; past that it returns a syntactically-valid but INCOMPLETE response
|
|
7
|
+
// (live: 59 items → only 28 covered, using 5751/65536 output tokens = 9% of budget).
|
|
8
|
+
// So it is NOT a token ceiling — it is the model giving up on a too-long item list.
|
|
9
|
+
// Per-group fixed the same failure at the FRONT (COMPREHEND); this fixes it at the
|
|
10
|
+
// BACK (the write).
|
|
11
|
+
//
|
|
12
|
+
// HOW: split `classified` into chunks of ~N (default 20, safely under the proven-good
|
|
13
|
+
// 25), run callPass3LLM per chunk against the SAME existing-graph snapshot, then MERGE
|
|
14
|
+
// the per-chunk analyses into the ONE analysis shape the save loop already consumes.
|
|
15
|
+
// The merge is safe because:
|
|
16
|
+
// - item ids are globally unique across the arc → from_item_id stays unique → the
|
|
17
|
+
// save loop's itemIdToLabel map is consistent → cross-CHUNK triggered_by/based_on
|
|
18
|
+
// resolve SERVER-SIDE (pipeline.ts:1772+), with pendingTriggeredBy for forward refs;
|
|
19
|
+
// - Pass 2 already owns cross-item dedup (Pass 3 only checks label collision) → no
|
|
20
|
+
// dedup is lost by not showing chunks each other;
|
|
21
|
+
// - novel cross-chunk links the per-chunk LLM couldn't see are swept by Pass 4.
|
|
22
|
+
//
|
|
23
|
+
// DROP-IN: callPass3Batched has the SAME signature + return shape as callPass3LLM and,
|
|
24
|
+
// when the flag is OFF or the item count is ≤ batch size, simply DELEGATES to it — so
|
|
25
|
+
// the default path is byte-identical to today. Default OFF: NODEDEX_PASS3_BATCH=1.
|
|
26
|
+
import { intFromEnv, modelForPass } from "./config.js";
|
|
27
|
+
import { modelOutputCeiling } from "../../engine/providers/model-caps.js";
|
|
28
|
+
import { callPass3LLM } from "./pass3.js";
|
|
29
|
+
// Default ON (promoted 2026-06-14 — validated: bounds the last unbounded write pass);
|
|
30
|
+
// set NODEDEX_PASS3_BATCH=0 to opt out (single-call write, byte-identical for small sets).
|
|
31
|
+
export function pass3BatchEnabled() {
|
|
32
|
+
return process.env.NODEDEX_PASS3_BATCH !== "0";
|
|
33
|
+
}
|
|
34
|
+
// Heuristic visible-output tokens per Pass-3 block (~300 observed: "20 blocks ≈ 6k"
|
|
35
|
+
// + headroom for dense unique{}/relations). Used ONLY to keep a batch from
|
|
36
|
+
// over-requesting a SMALL-CAP model's output ceiling; a big-cap model fits the flat
|
|
37
|
+
// default many times over so this never lowers it there.
|
|
38
|
+
const PASS3_OUTPUT_TOKENS_PER_BLOCK = 400;
|
|
39
|
+
/**
|
|
40
|
+
* Pass 3 batch size = min(reliability bound, token bound).
|
|
41
|
+
*
|
|
42
|
+
* RELIABILITY bound (NODEDEX_PASS3_BATCH_SIZE, default 20): under the empirically-
|
|
43
|
+
* reliable ~25 (25 & 15 covered fully; 59 dropped ~half). This is THE cap on a
|
|
44
|
+
* big-cap model — its output budget is never the limit (20 blocks ≈ 6k vs Gemini's
|
|
45
|
+
* 65536), so a big-cap model always lands here.
|
|
46
|
+
*
|
|
47
|
+
* TOKEN bound (small-cap models only): a model with a small output ceiling (e.g.
|
|
48
|
+
* claude-3.5-sonnet 8192) can hit that ceiling BEFORE the reliability bound, so scale
|
|
49
|
+
* the batch down to keep (batchSize × ~tokens/block + thinking) under the ceiling.
|
|
50
|
+
* `model` undefined → the provider default (assumed big-cap) → the flat bound. Pairs
|
|
51
|
+
* with the openai.ts per-model ceiling CLAMP (which already prevents the over-request
|
|
52
|
+
* glitch); this just reduces the truncation-retries that clamp would otherwise cause
|
|
53
|
+
* on a small-cap model. Pure (reads env + KNOWN_CAPS).
|
|
54
|
+
*/
|
|
55
|
+
export function pass3BatchSize(model, thinkingBudget = 4096) {
|
|
56
|
+
const flat = intFromEnv("NODEDEX_PASS3_BATCH_SIZE", 20);
|
|
57
|
+
if (!model)
|
|
58
|
+
return flat;
|
|
59
|
+
const outBudget = modelOutputCeiling(model) - thinkingBudget;
|
|
60
|
+
if (outBudget <= PASS3_OUTPUT_TOKENS_PER_BLOCK)
|
|
61
|
+
return 1; // tiny ceiling — one block per call
|
|
62
|
+
const tokenBound = Math.floor(outBudget / PASS3_OUTPUT_TOKENS_PER_BLOCK);
|
|
63
|
+
return Math.max(1, Math.min(flat, tokenBound));
|
|
64
|
+
}
|
|
65
|
+
/** Merge per-chunk Pass-3 analyses into ONE analysis the save loop consumes unchanged.
|
|
66
|
+
* new_blocks/updates/skip_reasons concatenate (item ids are globally unique → no
|
|
67
|
+
* collision); project_creates DEDUP by label (two chunks of a fresh project each coin
|
|
68
|
+
* the same root). Pure / testable. */
|
|
69
|
+
export function mergePass3Analyses(parts) {
|
|
70
|
+
const new_blocks = [];
|
|
71
|
+
const updates = [];
|
|
72
|
+
const skip_reasons = [];
|
|
73
|
+
const projByLabel = new Map();
|
|
74
|
+
for (const p of parts) {
|
|
75
|
+
if (!p)
|
|
76
|
+
continue;
|
|
77
|
+
for (const b of p.new_blocks ?? [])
|
|
78
|
+
new_blocks.push(b);
|
|
79
|
+
for (const u of p.updates ?? [])
|
|
80
|
+
updates.push(u);
|
|
81
|
+
for (const s of p.skip_reasons ?? [])
|
|
82
|
+
skip_reasons.push(s);
|
|
83
|
+
for (const pc of p.project_creates ?? []) {
|
|
84
|
+
const k = String(pc?.label ?? "").trim();
|
|
85
|
+
if (k && !projByLabel.has(k))
|
|
86
|
+
projByLabel.set(k, pc);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { project_creates: [...projByLabel.values()], new_blocks, updates, skip_reasons };
|
|
90
|
+
}
|
|
91
|
+
/** Split items into chunks of at most `size`. Pure / testable. */
|
|
92
|
+
export function chunkItems(items, size) {
|
|
93
|
+
if (size <= 0)
|
|
94
|
+
return [items];
|
|
95
|
+
const out = [];
|
|
96
|
+
for (let i = 0; i < items.length; i += size)
|
|
97
|
+
out.push(items.slice(i, i + size));
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Batched Pass 3 — drop-in for callPass3LLM. Delegates to a single call when the flag
|
|
102
|
+
* is off OR the item count fits one call; otherwise chunks → per-chunk callPass3LLM
|
|
103
|
+
* (sequential, sharing the same graph snapshot) → mergePass3Analyses. Sequential (not
|
|
104
|
+
* parallel) to stay gentle on rate limits — the chunks are independent reads of the
|
|
105
|
+
* same snapshot, so order does not change correctness (cross-chunk links wire at save).
|
|
106
|
+
*/
|
|
107
|
+
export async function callPass3Batched(provider, classified, knownRoots, projectContext, agentSavedBlocks, thinkingBudget = 4096, duplicateAlerts = "", itemContext = {}, batchSize = pass3BatchSize(modelForPass("pass3"), thinkingBudget)) {
|
|
108
|
+
if (!pass3BatchEnabled() || classified.length <= batchSize) {
|
|
109
|
+
return callPass3LLM(provider, classified, knownRoots, projectContext, agentSavedBlocks, thinkingBudget, duplicateAlerts, itemContext);
|
|
110
|
+
}
|
|
111
|
+
const chunks = chunkItems(classified, batchSize);
|
|
112
|
+
console.log(`Auto-Reflect Pass 3: batched write — ${classified.length} items in ${chunks.length} chunk(s) of ≤${batchSize}`);
|
|
113
|
+
const analyses = [];
|
|
114
|
+
let rateLimited = false;
|
|
115
|
+
let model;
|
|
116
|
+
let geminiThinking = "";
|
|
117
|
+
const attempts = [];
|
|
118
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
119
|
+
const r = await callPass3LLM(provider, chunks[i], knownRoots, projectContext, agentSavedBlocks, thinkingBudget, duplicateAlerts, itemContext);
|
|
120
|
+
if (r.analysis)
|
|
121
|
+
analyses.push(r.analysis);
|
|
122
|
+
rateLimited = rateLimited || r.rateLimited;
|
|
123
|
+
if (!model)
|
|
124
|
+
model = r.model;
|
|
125
|
+
if (r.attempts)
|
|
126
|
+
attempts.push(...r.attempts);
|
|
127
|
+
if (r.geminiThinking)
|
|
128
|
+
geminiThinking += (geminiThinking ? "\n" : "") + r.geminiThinking;
|
|
129
|
+
const got = (r.analysis?.new_blocks?.length ?? 0) + (r.analysis?.skip_reasons?.length ?? 0) + (r.analysis?.updates?.length ?? 0);
|
|
130
|
+
console.log(` [pass3-batch] chunk ${i + 1}/${chunks.length}: ${chunks[i].length} item(s) → ${got} accounted${r.rateLimited ? " (rate limited)" : ""}`);
|
|
131
|
+
}
|
|
132
|
+
// Every chunk failed (all null) → bubble up a null analysis so the existing
|
|
133
|
+
// re-queue path fires, exactly as a single failed call would.
|
|
134
|
+
if (analyses.length === 0) {
|
|
135
|
+
return { analysis: null, geminiThinking, rateLimited, model, attempts };
|
|
136
|
+
}
|
|
137
|
+
return { analysis: mergePass3Analyses(analyses), geminiThinking, rateLimited, model, attempts };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=pass3-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass3-batch.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3-batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
2
|
+
import type { Pass2Item } from "./types.js";
|
|
3
|
+
export declare const PASS3_PROMPT: string;
|
|
4
|
+
export declare function callPass3LLM(provider: LLMProvider, classified: Pass2Item[], knownRoots: Array<{
|
|
5
|
+
label: string;
|
|
6
|
+
essence: string;
|
|
7
|
+
}>, projectContext: string, agentSavedBlocks: Array<{
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
type: string;
|
|
11
|
+
essence: string;
|
|
12
|
+
unique: Record<string, any>;
|
|
13
|
+
}>, thinkingBudget?: number, duplicateAlerts?: string, itemContext?: Record<string, string>): Promise<{
|
|
14
|
+
analysis: any;
|
|
15
|
+
geminiThinking: string;
|
|
16
|
+
rateLimited: boolean;
|
|
17
|
+
model?: string;
|
|
18
|
+
attempts?: Array<{
|
|
19
|
+
model: string;
|
|
20
|
+
outcome: string;
|
|
21
|
+
}>;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=pass3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass3.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass3.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8B5C,eAAO,MAAM,YAAY,QAkI4D,CAAC;AAkItF,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,EAClH,cAAc,SAAO,EACrB,eAAe,SAAK,EACpB,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmGhJ"}
|