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,324 @@
|
|
|
1
|
+
import { CONFIG } from "./config.js";
|
|
2
|
+
import { reflectTokenStats } from "./context.js";
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
// PASS 2 — CLASSIFY + CAUSALITY
|
|
5
|
+
// Job: verify type, draw causal arrows, fill unique fields, set project.
|
|
6
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
7
|
+
export const PASS2_PROMPT = `You receive extracted items from an agent session.
|
|
8
|
+
Each item has a provisional_type set by Pass 1 based on surface form.
|
|
9
|
+
|
|
10
|
+
── STATE CONVENTION ─────────────────────────────────────────────────────────
|
|
11
|
+
"State" in this prompt = text in marked regions below (PROJECT GRAPH, SCENE CARD,
|
|
12
|
+
PREVIOUS TURN ENTITY MAP, ITEMS FROM PASS 1). Your training knowledge and
|
|
13
|
+
"what's commonly known about this domain" are NOT state. A claim is "already
|
|
14
|
+
recorded" ONLY if a block in PROJECT GRAPH has a matching essence text or
|
|
15
|
+
unique{} field value. Familiarity ≠ recorded. The fact that something is widely
|
|
16
|
+
known, famous, or established in the field is irrelevant to dedup.
|
|
17
|
+
|
|
18
|
+
Your job: verify the type, draw causal links, fill unique fields.
|
|
19
|
+
Processing order: DEDUP (Q0) → TYPE (Q1) → HIERARCHY (Q2) → UNIQUE FIELDS → classified[].
|
|
20
|
+
Then: CAUSAL WIRING (Q3–Q4) → causal_wiring[].
|
|
21
|
+
|
|
22
|
+
── Q0: DEDUP — intra-batch first, then against PROJECT GRAPH ──
|
|
23
|
+
"Does this item add a claim not already covered — by another item in this same
|
|
24
|
+
batch, or by a block in PROJECT GRAPH?"
|
|
25
|
+
|
|
26
|
+
For EVERY item, walk these steps in order. Stop at the first verdict.
|
|
27
|
+
|
|
28
|
+
STEP I — Intra-batch duplicate (check before the graph):
|
|
29
|
+
"Does another ITEM in this batch make the SAME claim — same type, same
|
|
30
|
+
specific subject and values? Two items can word it differently and still be
|
|
31
|
+
the same claim; a merely related claim is NOT the same claim."
|
|
32
|
+
YES → keep exactly ONE — the item with the more complete text and unique
|
|
33
|
+
values. The other does not become a block: do not emit it in
|
|
34
|
+
classified[], and do not put it in skipped[] — simply omit it. In the
|
|
35
|
+
kept item's classification_reasoning, name the dropped item's id. Any
|
|
36
|
+
causal link wires to the kept item.
|
|
37
|
+
NO → proceed to STEP 0.
|
|
38
|
+
|
|
39
|
+
STEP 0 — Pre-check before graph dedup:
|
|
40
|
+
PROJECT GRAPH empty (no blocks shown at all) → item is GENUINELY NEW. Stop.
|
|
41
|
+
Item's project absent from PROJECT GRAPH → item is GENUINELY NEW. Stop.
|
|
42
|
+
Item's (project, provisional_type) pair has no matching blocks → GENUINELY NEW. Stop.
|
|
43
|
+
Only when one or more concrete candidate blocks exist → proceed to STEP A.
|
|
44
|
+
|
|
45
|
+
STEP A — Identify candidate blocks in PROJECT GRAPH by project prefix + provisional type.
|
|
46
|
+
Each candidate has a visible essence and (sometimes) unique{} values.
|
|
47
|
+
Ask: "Would the item and the candidate be saying the SAME THING or DIFFERENT
|
|
48
|
+
THINGS as graph blocks?" Same = same specific claim with same values. Related
|
|
49
|
+
topic ≠ same claim.
|
|
50
|
+
|
|
51
|
+
STEP B — "Is this turn CHANGING the recorded state, or CONFIRMING what is
|
|
52
|
+
recorded in PROJECT GRAPH?" The comparison is against the candidate's ESSENCE
|
|
53
|
+
TEXT and UNIQUE FIELD VALUES — not against domain knowledge.
|
|
54
|
+
|
|
55
|
+
NOTHING NEW (same claim, same value, candidate already says it) → skipped[].
|
|
56
|
+
UPDATES (same claim, CHANGES outcome/value) → classify + supersedes_ref = candidate label.
|
|
57
|
+
"Is the old block still the CURRENT STATE?" NO → supersedes_ref. YES but wrong → contradicts.
|
|
58
|
+
NOT UPDATES: item USES or BUILDS ON the candidate → GENUINELY NEW (wire in causal_wiring).
|
|
59
|
+
GENUINELY NEW → classify normally.
|
|
60
|
+
|
|
61
|
+
SKIP EVIDENCE — falsifiability rule:
|
|
62
|
+
A skip in skipped[] makes a claim about PROJECT GRAPH state. The reason must
|
|
63
|
+
reference the specific block — by label or by its essence text — that the
|
|
64
|
+
skip is checked against. If you cannot point to a block in PROJECT GRAPH that
|
|
65
|
+
a reader could verify the claim against, the claim is unfalsifiable: classify
|
|
66
|
+
the item, do not skip it.
|
|
67
|
+
|
|
68
|
+
ASYMMETRIC COST: false skip = permanent data loss. false save = minor bloat.
|
|
69
|
+
When in doubt at any step, default to GENUINELY NEW.
|
|
70
|
+
|
|
71
|
+
── Q1: TYPE — "What is the speaker's EPISTEMIC STANCE toward this claim?" ──
|
|
72
|
+
Type = speaker's relationship to knowledge, not content topic.
|
|
73
|
+
extends_id and type are independent axes. Apply Q1 regardless.
|
|
74
|
+
|
|
75
|
+
Pass 1's type is correct unless one of these structural tests fires:
|
|
76
|
+
|
|
77
|
+
TEST 1: "Expected answer or proposed mechanism BEFORE confirmation?"
|
|
78
|
+
YES → hypothesis. Already confirmed → remains fact.
|
|
79
|
+
|
|
80
|
+
TEST 2: "CLOSING something or ADOPTING something?"
|
|
81
|
+
ADOPTING → decision.
|
|
82
|
+
CLOSING → "Were resources committed INTO this path before closure?"
|
|
83
|
+
"If I removed the closing event, would there be active work to stop?"
|
|
84
|
+
YES → dead_end. NO (only analysis, never entered) → fact.
|
|
85
|
+
EXTERNAL FORCE closed it → constraint.
|
|
86
|
+
|
|
87
|
+
TEST 3: "Has an outcome already been selected and closed?"
|
|
88
|
+
YES → decision. Path committed, destination unknown → blueprint. Nothing committed → question.
|
|
89
|
+
|
|
90
|
+
TEST 4: "PROJECT GRAPH has same concept with different type?"
|
|
91
|
+
YES → align with graph's type. Set review_reason = "graph_align".
|
|
92
|
+
|
|
93
|
+
When overriding, set review_reason = "type_override".
|
|
94
|
+
When keeping, fill classification_reasoning explaining why it held.
|
|
95
|
+
|
|
96
|
+
NOVEL TYPE: all three must pass — (1) future agent would behave differently than any existing type,
|
|
97
|
+
(2) can't be expressed as existing type + richer unique{}, (3) name describes epistemic stance not content shape.
|
|
98
|
+
→ set type, define schema{} with 2-3 fields, review_reason = "novel_type".
|
|
99
|
+
|
|
100
|
+
BLUEPRINT → DECISION: planned/uncertain → active/current? → decision + supersedes_ref to blueprint label.
|
|
101
|
+
UNCERTAIN ITEMS: preserve type. Never downgrade. Set review_reason = "incomplete_context".
|
|
102
|
+
|
|
103
|
+
── Q2: HIERARCHY — "Can this item stand alone as knowledge?" ───────────────
|
|
104
|
+
"If I deleted the item it points to, would THIS item make sense standalone?"
|
|
105
|
+
YES → clear extends_item. NO → set extends_item = that item's ID.
|
|
106
|
+
Captures MEANING DEPENDENCY, not topic relatedness. Type does not change.
|
|
107
|
+
|
|
108
|
+
── PROJECT ATTRIBUTION ─────────────────────────────────────────────────────
|
|
109
|
+
Every item MUST get a project. Decide in order:
|
|
110
|
+
1. Item is about one specific named system/project → that project (a valid root
|
|
111
|
+
from PROJECT GRAPH or scene card PROJECTS; use APPROACHES project tags).
|
|
112
|
+
2. Item is cross-cutting — background/intro context, a field-level conclusion,
|
|
113
|
+
or a question or comparison spanning multiple projects → the SCOPE PROJECT
|
|
114
|
+
named in the scene card.
|
|
115
|
+
The scene card always names a scope project; it is the home for anything that
|
|
116
|
+
belongs to no single project. "null", "", "unknown", "general" are never valid
|
|
117
|
+
project values — if you cannot name a specific project, the answer is the scope
|
|
118
|
+
project, not a placeholder.
|
|
119
|
+
|
|
120
|
+
── SUPERSEDES_REF ──────────────────────────────────────────────────────────
|
|
121
|
+
"After this item exists, is the old block still the CURRENT STATE?"
|
|
122
|
+
NO → supersedes_ref = old label. YES but wrong → contradicts relation.
|
|
123
|
+
Within-batch: predecessor item ID. Cross-batch: exact label from PROJECT GRAPH.
|
|
124
|
+
resolved_ref — label for same entity by different name. High confidence only.
|
|
125
|
+
|
|
126
|
+
── REVIEW FLAGS ────────────────────────────────────────────────────────────
|
|
127
|
+
Set review_reason when not confident: type_override, weak_match, no_evidence,
|
|
128
|
+
project_uncertain, incomplete_context, graph_align, novel_type. Empty when confident.
|
|
129
|
+
|
|
130
|
+
── CLASSIFICATION REASONING (required) ─────────────────────────────────────
|
|
131
|
+
For EVERY item: 1-2 sentences — which test determined the outcome and what evidence.
|
|
132
|
+
|
|
133
|
+
── UNIQUE FIELDS — populate AFTER type is final ────────────────────────────
|
|
134
|
+
Use ONLY the assigned type's fields. Fields NEVER determine type.
|
|
135
|
+
|
|
136
|
+
decision { choice, reason, alternatives_rejected }
|
|
137
|
+
dead_end { approach, reason, alternative }
|
|
138
|
+
blueprint { purpose, status, trigger_to_implement }
|
|
139
|
+
question { question, why_matters }
|
|
140
|
+
fact { value, why_matters }
|
|
141
|
+
constraint { limit, reason, source }
|
|
142
|
+
hypothesis { proposal, evidence_for, evidence_against }
|
|
143
|
+
insight { observation, implication }
|
|
144
|
+
preference { lean, over, condition }
|
|
145
|
+
entity { name, role }
|
|
146
|
+
event { what_happened, outcome, date }
|
|
147
|
+
task { status, description, owner }
|
|
148
|
+
|
|
149
|
+
Omit empty fields. Use verbatim excerpt language. Specific named things → unique{}.
|
|
150
|
+
insight's second field is "implication" (what the observation means going forward) — NOT
|
|
151
|
+
"proposal" (that field belongs to hypothesis: an unverified guess) and NOT a bare "reason".
|
|
152
|
+
Discriminator when the content is "X, therefore/because Y": a guess or theory → hypothesis;
|
|
153
|
+
a single observed effect or state → fact; a realization combining 2+ things → insight.
|
|
154
|
+
|
|
155
|
+
── SCENE CARD CONTEXT ──────────────────────────────────────────────────────
|
|
156
|
+
APPROACHES → engagement level (for TEST 3) and project tags.
|
|
157
|
+
CAUSAL LINKS → use in Q3. UNCHANGED → source="recap", Q0 handles. TASKS → active work.
|
|
158
|
+
|
|
159
|
+
── CAUSAL WIRING (output AFTER classified[]) ───────────────────────────────
|
|
160
|
+
After all items are in classified[], output causal_wiring[] with full batch visibility.
|
|
161
|
+
|
|
162
|
+
Q3: TRIGGERED_BY — "In a world where (X) didn't happen, would (Y) still have occurred?"
|
|
163
|
+
YES → no link. NO → X goes in triggered_by.
|
|
164
|
+
UNCERTAIN → no link. Wrong wiring (false narrative) costs more than missing wiring (recoverable).
|
|
165
|
+
CIRCULARITY GUARD: before adding A→B, check "Did I already put B→A?" YES → skip.
|
|
166
|
+
Use item IDs for batch, block labels for PROJECT GRAPH. Genesis → triggered_by: [].
|
|
167
|
+
REPLACEMENTS "X→Y": dead_end for X is triggered_by the decision that adopted Y.
|
|
168
|
+
HIERARCHY: "Did cause make the DECISION necessary, or only this mechanism?"
|
|
169
|
+
Decision → triggered_by on parent. Mechanism only → triggered_by on child.
|
|
170
|
+
|
|
171
|
+
Q4: BASED_ON — "Would this claim be UNSUPPORTED without that specific finding?"
|
|
172
|
+
NO → no link. YES → based_on.
|
|
173
|
+
UNCERTAIN → no link. False evidence link costs more than missing one.
|
|
174
|
+
Applies to conclusions, decisions justified by findings.
|
|
175
|
+
|
|
176
|
+
Q5: SEMANTIC RELATIONS — for each item pair in this batch:
|
|
177
|
+
"Does (X) directly contradict, support, or answer (Y)?"
|
|
178
|
+
contradicts: opposite claims about the same specific thing.
|
|
179
|
+
supports: independent evidence strengthening the same claim.
|
|
180
|
+
resolves: (X) answers the question or settles the hypothesis (Y) poses.
|
|
181
|
+
|
|
182
|
+
`;
|
|
183
|
+
const PASS2_SCHEMA = {
|
|
184
|
+
type: "object",
|
|
185
|
+
properties: {
|
|
186
|
+
skipped: {
|
|
187
|
+
type: "array",
|
|
188
|
+
items: {
|
|
189
|
+
type: "object",
|
|
190
|
+
properties: {
|
|
191
|
+
id: { type: "string" },
|
|
192
|
+
reason: { type: "string" },
|
|
193
|
+
},
|
|
194
|
+
required: ["id", "reason"],
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
classified: {
|
|
198
|
+
type: "array",
|
|
199
|
+
items: {
|
|
200
|
+
type: "object",
|
|
201
|
+
properties: {
|
|
202
|
+
id: { type: "string" },
|
|
203
|
+
text: { type: "string" },
|
|
204
|
+
type: { type: "string" },
|
|
205
|
+
project: { type: "string" },
|
|
206
|
+
unique: {
|
|
207
|
+
type: "object",
|
|
208
|
+
properties: {
|
|
209
|
+
choice: { type: "string" },
|
|
210
|
+
reason: { type: "string" },
|
|
211
|
+
alternatives_rejected: { type: "string" },
|
|
212
|
+
approach: { type: "string" },
|
|
213
|
+
alternative: { type: "string" },
|
|
214
|
+
limit: { type: "string" },
|
|
215
|
+
source: { type: "string" },
|
|
216
|
+
value: { type: "string" },
|
|
217
|
+
name: { type: "string" },
|
|
218
|
+
role: { type: "string" },
|
|
219
|
+
purpose: { type: "string" },
|
|
220
|
+
status: { type: "string" },
|
|
221
|
+
trigger_to_implement: { type: "string" },
|
|
222
|
+
question: { type: "string" },
|
|
223
|
+
why_matters: { type: "string" },
|
|
224
|
+
observation: { type: "string" },
|
|
225
|
+
implication: { type: "string" },
|
|
226
|
+
description: { type: "string" },
|
|
227
|
+
owner: { type: "string" },
|
|
228
|
+
outcome: { type: "string" },
|
|
229
|
+
proposal: { type: "string" },
|
|
230
|
+
evidence_for: { type: "string" },
|
|
231
|
+
evidence_against: { type: "string" },
|
|
232
|
+
definition: { type: "string" },
|
|
233
|
+
current_value: { type: "string" },
|
|
234
|
+
target: { type: "string" },
|
|
235
|
+
what_happened: { type: "string" },
|
|
236
|
+
date: { type: "string" },
|
|
237
|
+
lean: { type: "string" },
|
|
238
|
+
over: { type: "string" },
|
|
239
|
+
condition: { type: "string" },
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
extends_item: { type: "string" },
|
|
243
|
+
supersedes_ref: { type: "string" },
|
|
244
|
+
resolved_ref: { type: "string" },
|
|
245
|
+
relations: {
|
|
246
|
+
type: "array",
|
|
247
|
+
items: {
|
|
248
|
+
type: "object",
|
|
249
|
+
properties: {
|
|
250
|
+
type: { type: "string" },
|
|
251
|
+
target: { type: "string" },
|
|
252
|
+
},
|
|
253
|
+
required: ["type", "target"],
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
note: { type: "string" },
|
|
257
|
+
review_reason: { type: "string" },
|
|
258
|
+
schema: { type: "object" },
|
|
259
|
+
classification_reasoning: { type: "string" },
|
|
260
|
+
},
|
|
261
|
+
required: ["id", "text", "type", "project", "unique", "classification_reasoning"],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
causal_wiring: {
|
|
265
|
+
type: "array",
|
|
266
|
+
items: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
item_id: { type: "string" },
|
|
270
|
+
triggered_by: { type: "array", items: { type: "string" } },
|
|
271
|
+
based_on: { type: "array", items: { type: "string" } },
|
|
272
|
+
},
|
|
273
|
+
required: ["item_id", "triggered_by", "based_on"],
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
required: ["skipped", "classified", "causal_wiring"],
|
|
278
|
+
};
|
|
279
|
+
export async function callPass2LLM(provider, pass1Items, projectContext, prevEntityMap, thinkingBudget = 1024, sceneCard) {
|
|
280
|
+
const sceneCardSection = sceneCard
|
|
281
|
+
? `SCENE CARD (APPROACHES entries give investment level and blueprint/dead_end context; ACTOR-ACTIONS confirm who committed to what):\n${sceneCard}\n\n`
|
|
282
|
+
: "";
|
|
283
|
+
const projectSection = projectContext
|
|
284
|
+
? `PROJECT GRAPH (all existing blocks — use for causality and dedup):\n${projectContext}\n\n`
|
|
285
|
+
: "";
|
|
286
|
+
const prevMapSection = prevEntityMap.length > 0
|
|
287
|
+
? `PREVIOUS TURN ENTITY MAP:\n${prevEntityMap.map((e) => `"${e.reference}" → ${e.resolved_to}`).join("\n")}\n\n`
|
|
288
|
+
: "";
|
|
289
|
+
const itemsSection = `ITEMS FROM PASS 1:\n${JSON.stringify(pass1Items, null, 2)}`;
|
|
290
|
+
const userInput = `${sceneCardSection}${projectSection}${prevMapSection}${itemsSection}`;
|
|
291
|
+
const r = await provider.generateStructured(PASS2_PROMPT, userInput, PASS2_SCHEMA, {
|
|
292
|
+
thinkingBudget,
|
|
293
|
+
maxOutputTokens: CONFIG.pass2.maxOutputTokens,
|
|
294
|
+
});
|
|
295
|
+
if (r.result) {
|
|
296
|
+
reflectTokenStats.pass2.input += r.usage?.input ?? 0;
|
|
297
|
+
reflectTokenStats.pass2.thinking += r.usage?.thinking ?? 0;
|
|
298
|
+
reflectTokenStats.pass2.output += r.usage?.output ?? 0;
|
|
299
|
+
reflectTokenStats.pass2.calls += 1;
|
|
300
|
+
const tag = provider.getName() !== "gemini" ? ` [${provider.getName()}]` : "";
|
|
301
|
+
console.log(`Auto-Reflect Pass 2: classified ${pass1Items.length} items | tokens: in=${r.usage?.input ?? "?"} think=${r.usage?.thinking ?? "?"} out=${r.usage?.output ?? "?"}${tag}`);
|
|
302
|
+
for (const item of r.result.classified) {
|
|
303
|
+
if (item.classification_reasoning) {
|
|
304
|
+
console.log(` [Pass 2 reasoning] ${item.id} [${item.type}]: ${item.classification_reasoning}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const groupingItems = r.result.classified.filter(i => i.extends_item || i.supersedes_ref);
|
|
308
|
+
if (groupingItems.length > 0) {
|
|
309
|
+
for (const item of groupingItems) {
|
|
310
|
+
const ext = item.extends_item ? ` extends_item=${item.extends_item}` : "";
|
|
311
|
+
const sup = item.supersedes_ref ? ` supersedes_ref=${item.supersedes_ref}` : "";
|
|
312
|
+
console.log(`Auto-Reflect Pass 2 grouping: [${item.type}] "${item.text.slice(0, 60)}"${ext}${sup}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
console.log(`Auto-Reflect Pass 2 grouping: no extends_item or supersedes_ref set`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
console.error(`Auto-Reflect Pass 2: ${r.rateLimited ? "rate limited" : "failed"} [${provider.getName()}]`);
|
|
321
|
+
}
|
|
322
|
+
return { result: r.result, thinking: r.thinking ?? "", rateLimited: r.rateLimited, model: r.model, attempts: r.attempts };
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=pass2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass2.js","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,kFAAkF;AAClF,gCAAgC;AAChC,yEAAyE;AACzE,kFAAkF;AAElF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+K3B,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,EAAE,EAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B;gBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;aAC3B;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,EAAE,EAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,IAAI,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,IAAI,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,OAAO,EAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,MAAM,EAAe;wBACnB,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,MAAM,EAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,MAAM,EAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,qBAAqB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,QAAQ,EAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,WAAW,EAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,KAAK,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,MAAM,EAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,KAAK,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,IAAI,EAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,IAAI,EAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,OAAO,EAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,MAAM,EAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,QAAQ,EAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,WAAW,EAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,WAAW,EAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,WAAW,EAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,WAAW,EAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,KAAK,EAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,OAAO,EAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,QAAQ,EAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,YAAY,EAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,gBAAgB,EAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,UAAU,EAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,aAAa,EAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,MAAM,EAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,aAAa,EAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,IAAI,EAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,IAAI,EAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,IAAI,EAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxC,SAAS,EAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACzC;qBACF;oBACD,YAAY,EAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,cAAc,EAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,YAAY,EAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvC,SAAS,EAAE;wBACT,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,IAAI,EAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;gCAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC3B;4BACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;yBAC7B;qBACF;oBACD,IAAI,EAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3C,aAAa,EAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3C,MAAM,EAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3C,wBAAwB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC7C;gBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC;aAClF;SACF;QACD,aAAa,EAAE;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,YAAY,EAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAC7D,QAAQ,EAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;iBAC9D;gBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC;aAClD;SACF;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC;CACrD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAqB,EACrB,UAAuB,EACvB,cAAsB,EACtB,aAAgE,EAChE,cAAc,GAAG,IAAI,EACrB,SAAkB;IAElB,MAAM,gBAAgB,GAAG,SAAS;QAChC,CAAC,CAAC,uIAAuI,SAAS,MAAM;QACxJ,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,cAAc;QACnC,CAAC,CAAC,uEAAuE,cAAc,MAAM;QAC7F,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;QAC7C,CAAC,CAAC,8BAA8B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAChH,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,uBAAuB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,SAAS,GAAG,GAAG,gBAAgB,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,EAAE,CAAC;IAEzF,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAc,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE;QAC9F,cAAc;QACd,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;KAC9C,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,iBAAiB,CAAC,KAAK,CAAC,KAAK,IAAO,CAAC,CAAC,KAAK,EAAE,KAAK,IAAO,CAAC,CAAC;QAC3D,iBAAiB,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;QAC3D,iBAAiB,CAAC,KAAK,CAAC,MAAM,IAAM,CAAC,CAAC,KAAK,EAAE,MAAM,IAAM,CAAC,CAAC;QAC3D,iBAAiB,CAAC,KAAK,CAAC,KAAK,IAAO,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,mCAAmC,UAAU,CAAC,MAAM,uBAAuB,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QACtL,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;QAC1F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7G,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
2
|
+
import type { Pass1Item } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pass 2a output per item — a SUBSET of `Pass2Item` (defined in types.ts).
|
|
5
|
+
*
|
|
6
|
+
* Critical absences (enforced by schema, asserted by pass2-pass-ownership tests):
|
|
7
|
+
* - NO `unique` (2b populates it)
|
|
8
|
+
* - NO `triggered_by_items` / `based_on_items` / `relations` (2c populates them)
|
|
9
|
+
* - NO `note` (deferred — 2c may emit if needed)
|
|
10
|
+
*
|
|
11
|
+
* `text` is NOT emitted by the LLM (the schema omits it — see PASS2A_SCHEMA).
|
|
12
|
+
* It is re-joined from the Pass 1 input by `id` inside callPass2aLLM so the
|
|
13
|
+
* returned Pass2aResult is complete for downstream (orchestrator/composer →
|
|
14
|
+
* Pass2Item.text). Source of truth = Pass 1, not an LLM echo — removes
|
|
15
|
+
* output-token waste + paraphrase risk (project-future-enhancements #6).
|
|
16
|
+
*
|
|
17
|
+
* `schema` is populated ONLY for novel_type items where 2a coined a new type
|
|
18
|
+
* and must declare its field definitions (§2 Pass 2a ownership, last bullet).
|
|
19
|
+
*/
|
|
20
|
+
export interface Pass2aItem {
|
|
21
|
+
id: string;
|
|
22
|
+
text: string;
|
|
23
|
+
type: string;
|
|
24
|
+
project?: string;
|
|
25
|
+
extends_item?: string;
|
|
26
|
+
supersedes_ref?: string;
|
|
27
|
+
resolved_ref?: string;
|
|
28
|
+
schema?: Record<string, string>;
|
|
29
|
+
review_reason?: string;
|
|
30
|
+
classification_reasoning?: string;
|
|
31
|
+
source_type?: string;
|
|
32
|
+
excerpt?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Pass 2a result envelope. `skipped[]` carries Q0 dedup drops only — items
|
|
36
|
+
* that failed structural checks at Seam α are NOT in `skipped[]` here;
|
|
37
|
+
* they reach quarantine via the seam validator (see pass2-seams.ts).
|
|
38
|
+
*/
|
|
39
|
+
export interface Pass2aResult {
|
|
40
|
+
skipped: Array<{
|
|
41
|
+
id: string;
|
|
42
|
+
reason: string;
|
|
43
|
+
}>;
|
|
44
|
+
classified: Pass2aItem[];
|
|
45
|
+
}
|
|
46
|
+
export declare const PASS2A_PROMPT = "You receive extracted items from an agent session.\nEach item has a provisional_type set by Pass 1 based on surface form.\n\n\u2500\u2500 ARC-MODE NOTE (DEBT 5 D4, applies when input is multi-turn arc) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nIf the input begins with \"[ARC EXTRACTION \u2014 agent_id=..., turns S-E, N turn(s)]\"\nheader AND items carry IDs prefixed \"item_T<turn>_<n>\", you are reading ONE\nCONTINUOUS CONVERSATION ARC, not N independent turns. Treat it that way:\n - Items mentioned in MULTIPLE turns about the SAME thing \u2192 ONE item, not\n duplicates needing supersedes. Sew them together via your DEDUP pass (Q0).\n - The conversation flowed as one ongoing thought; [TURN N] headers mark\n sequence only.\n - Use the chronological order to reason about cross-turn causal links\n (decisions built progressively, dead-ends abandoned then re-considered).\nFor single-turn input (no ARC header), behave as before \u2014 this section is a\nno-op.\n\n\u2500\u2500 STATE CONVENTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"State\" in this prompt = text in marked regions below (PROJECT GRAPH, SCENE CARD,\nPREVIOUS TURN ENTITY MAP, ITEMS FROM PASS 1). Your training knowledge and\n\"what's commonly known about this domain\" are NOT state. A claim is \"already\nrecorded\" ONLY if a block in PROJECT GRAPH has a matching essence text or\nunique{} field value. Familiarity \u2260 recorded. The fact that something is widely\nknown, famous, or established in the field is irrelevant to dedup.\n\nYour job: verify the type, dedup the batch, assign project + supersession refs.\nProcessing order: DEDUP (Q0) \u2192 TYPE (Q1) \u2192 HIERARCHY (Q2) \u2192 classified[].\nDO NOT output unique{} fields and DO NOT output causal links \u2014 those are\nhandled by later passes. Output ONLY the type + project + reasoning + refs.\nReference each item by its id only \u2014 do NOT echo the item's text back; the\nsystem already has it from Pass 1.\n\n\u2500\u2500 Q0: DEDUP \u2014 intra-batch first, then against PROJECT GRAPH \u2500\u2500\n\"Does this item add a claim not already covered \u2014 by another item in this same\nbatch, or by a block in PROJECT GRAPH?\"\n\nFor EVERY item, walk these steps in order. Stop at the first verdict.\n\nSTEP I \u2014 Intra-batch duplicate (check before the graph):\n \"Does another ITEM in this batch make the SAME claim \u2014 same type, same\n specific subject and values? Two items can word it differently and still be\n the same claim; a merely related claim is NOT the same claim.\"\n YES \u2192 keep exactly ONE \u2014 the item with the more complete text. The other\n does not become a block: do not emit it in classified[], and do not\n put it in skipped[] \u2014 simply omit it. In the kept item's\n classification_reasoning, name the dropped item's id.\n NO \u2192 proceed to STEP 0.\n\nSTEP 0 \u2014 Pre-check before graph dedup:\n PROJECT GRAPH empty (no blocks shown at all) \u2192 item is GENUINELY NEW. Stop.\n Item's project absent from PROJECT GRAPH \u2192 item is GENUINELY NEW. Stop.\n Item's (project, provisional_type) pair has no matching blocks \u2192 GENUINELY NEW. Stop.\n Only when one or more concrete candidate blocks exist \u2192 proceed to STEP A.\n\nSTEP A \u2014 Identify candidate blocks in PROJECT GRAPH by project prefix + provisional type.\n Each candidate has a visible essence and (sometimes) unique{} values.\n Ask: \"Would the item and the candidate be saying the SAME THING or DIFFERENT\n THINGS as graph blocks?\" Same = same specific claim with same values. Related\n topic \u2260 same claim.\n\nSTEP B \u2014 \"Is this turn CHANGING the recorded state, or CONFIRMING what is\nrecorded in PROJECT GRAPH?\" The comparison is against the candidate's ESSENCE\nTEXT and UNIQUE FIELD VALUES \u2014 not against domain knowledge.\n\n NOTHING NEW (same claim, same value, candidate already says it) \u2192 skipped[].\n UPDATES (same claim, CHANGES outcome/value) \u2192 classify + supersedes_ref = candidate label.\n \"Is the old block still the CURRENT STATE?\" NO \u2192 supersedes_ref. YES but wrong \u2192 contradicts.\n NOT UPDATES: item USES or BUILDS ON the candidate \u2192 GENUINELY NEW.\n GENUINELY NEW \u2192 classify normally.\n\nSKIP EVIDENCE \u2014 falsifiability rule:\n A skip in skipped[] makes a claim about PROJECT GRAPH state. The reason must\n reference the specific block \u2014 by label or by its essence text \u2014 that the\n skip is checked against. If you cannot point to a block in PROJECT GRAPH that\n a reader could verify the claim against, the claim is unfalsifiable: classify\n the item, do not skip it.\n\nASYMMETRIC COST: false skip = permanent data loss. false save = minor bloat.\nWhen in doubt at any step, default to GENUINELY NEW.\n\n\u2500\u2500 Q1: TYPE \u2014 \"What is the speaker's EPISTEMIC STANCE toward this claim?\" \u2500\u2500\nType = speaker's relationship to knowledge, not content topic.\nextends_id and type are independent axes. Apply Q1 regardless.\n\nPass 1's type is correct unless one of these structural tests fires:\n\n TEST 1: \"Same quantity at two distinct points \u2014 showing a change?\"\n YES \u2192 metric. Single value alone = fact.\n\n TEST 2: \"Expected answer or proposed mechanism BEFORE confirmation?\"\n YES \u2192 hypothesis. Already confirmed \u2192 remains fact.\n\n TEST 3: \"CLOSING something or ADOPTING something?\"\n ADOPTING \u2192 decision.\n CLOSING \u2192 \"Were resources committed INTO this path before closure?\"\n \"If I removed the closing event, would there be active work to stop?\"\n YES \u2192 dead_end. NO (only analysis, never entered) \u2192 fact.\n EXTERNAL FORCE closed it \u2192 constraint.\n\n TEST 4: \"Has an outcome already been selected and closed?\"\n YES \u2192 decision. Path committed, destination unknown \u2192 blueprint. Nothing committed \u2192 question.\n\n TEST 5: \"PROJECT GRAPH has same concept with different type?\"\n YES \u2192 align with graph's type. Set review_reason = \"graph_align\".\n\nWhen overriding, set review_reason = \"type_override\".\nWhen keeping, fill classification_reasoning explaining why it held.\n\nNOVEL TYPE: all three must pass \u2014 (1) future agent would behave differently than any existing type,\n(2) can't be expressed as existing type + richer unique{}, (3) name describes epistemic stance not content shape.\n\u2192 set type, define schema{} with 2-3 fields, review_reason = \"novel_type\".\n\nBLUEPRINT \u2192 DECISION: planned/uncertain \u2192 active/current? \u2192 decision + supersedes_ref to blueprint label.\nUNCERTAIN ITEMS: preserve type. Never downgrade. Set review_reason = \"incomplete_context\".\n\n\u2500\u2500 Q2: HIERARCHY \u2014 \"Can this item stand alone as knowledge?\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"If I deleted the item it points to, would THIS item make sense standalone?\"\n YES \u2192 clear extends_item. NO \u2192 set extends_item = that item's ID.\nCaptures MEANING DEPENDENCY, not topic relatedness. Type does not change.\n\n\u2500\u2500 PROJECT ATTRIBUTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nEvery item MUST get a project. Decide in order:\n 1. Item is about one specific named system/project \u2192 that project (a valid root\n from PROJECT GRAPH or scene card PROJECTS; use APPROACHES project tags).\n 2. Item is cross-cutting \u2014 background/intro context, a field-level conclusion,\n or a question or comparison spanning multiple projects \u2192 the SCOPE PROJECT\n named in the scene card.\nThe scene card always names a scope project; it is the home for anything that\nbelongs to no single project. \"null\", \"\", \"unknown\", \"general\" are never valid\nproject values \u2014 if you cannot name a specific project, the answer is the scope\nproject, not a placeholder.\n\n\u2500\u2500 SUPERSEDES_REF \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\"After this item exists, is the old block still the CURRENT STATE?\"\n NO \u2192 supersedes_ref = old label. YES but wrong \u2192 contradicts relation (handled by Pass 2c).\n Within-batch: predecessor item ID. Cross-batch: exact label from PROJECT GRAPH.\nresolved_ref \u2014 label for same entity by different name. High confidence only.\n\n\u2500\u2500 REVIEW FLAGS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nSet review_reason when not confident: type_override, weak_match, no_evidence,\nproject_uncertain, incomplete_context, graph_align, novel_type. Empty when confident.\n\n\u2500\u2500 CLASSIFICATION REASONING (required) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nFor EVERY item: 1-2 sentences \u2014 which test determined the outcome and what evidence.\n\n\u2500\u2500 SCENE CARD CONTEXT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nAPPROACHES \u2192 engagement level (for TEST 3) and project tags.\nUNCHANGED \u2192 source=\"recap\", Q0 handles. TASKS \u2192 active work.\n\n";
|
|
47
|
+
export declare const PASS2A_SCHEMA: {
|
|
48
|
+
type: string;
|
|
49
|
+
properties: {
|
|
50
|
+
skipped: {
|
|
51
|
+
type: string;
|
|
52
|
+
items: {
|
|
53
|
+
type: string;
|
|
54
|
+
properties: {
|
|
55
|
+
id: {
|
|
56
|
+
type: string;
|
|
57
|
+
};
|
|
58
|
+
reason: {
|
|
59
|
+
type: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
required: string[];
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
classified: {
|
|
66
|
+
type: string;
|
|
67
|
+
items: {
|
|
68
|
+
type: string;
|
|
69
|
+
properties: {
|
|
70
|
+
id: {
|
|
71
|
+
type: string;
|
|
72
|
+
};
|
|
73
|
+
type: {
|
|
74
|
+
type: string;
|
|
75
|
+
};
|
|
76
|
+
project: {
|
|
77
|
+
type: string;
|
|
78
|
+
};
|
|
79
|
+
extends_item: {
|
|
80
|
+
type: string;
|
|
81
|
+
};
|
|
82
|
+
supersedes_ref: {
|
|
83
|
+
type: string;
|
|
84
|
+
};
|
|
85
|
+
resolved_ref: {
|
|
86
|
+
type: string;
|
|
87
|
+
};
|
|
88
|
+
review_reason: {
|
|
89
|
+
type: string;
|
|
90
|
+
};
|
|
91
|
+
schema: {
|
|
92
|
+
type: string;
|
|
93
|
+
};
|
|
94
|
+
classification_reasoning: {
|
|
95
|
+
type: string;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
required: string[];
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
required: string[];
|
|
103
|
+
};
|
|
104
|
+
export declare function sanitizePass2aItem(raw: Record<string, unknown>): {
|
|
105
|
+
item: Pass2aItem;
|
|
106
|
+
stripped: string[];
|
|
107
|
+
};
|
|
108
|
+
export declare function sanitizePass2aResult(raw: {
|
|
109
|
+
skipped?: any[];
|
|
110
|
+
classified?: any[];
|
|
111
|
+
}): {
|
|
112
|
+
result: Pass2aResult;
|
|
113
|
+
totalStrippedFields: number;
|
|
114
|
+
perItemStripped: Array<{
|
|
115
|
+
id: string;
|
|
116
|
+
stripped: string[];
|
|
117
|
+
}>;
|
|
118
|
+
};
|
|
119
|
+
export declare function callPass2aLLM(provider: LLMProvider, pass1Items: Pass1Item[], projectContext: string, prevEntityMap: Array<{
|
|
120
|
+
reference: string;
|
|
121
|
+
resolved_to: string;
|
|
122
|
+
}>, thinkingBudget?: number, sceneCard?: string, modelOverride?: string): Promise<{
|
|
123
|
+
result: Pass2aResult | null;
|
|
124
|
+
thinking: string;
|
|
125
|
+
rateLimited: boolean;
|
|
126
|
+
model?: string;
|
|
127
|
+
attempts?: Array<{
|
|
128
|
+
model: string;
|
|
129
|
+
outcome: string;
|
|
130
|
+
}>;
|
|
131
|
+
usage?: {
|
|
132
|
+
input?: number;
|
|
133
|
+
thinking?: number;
|
|
134
|
+
output?: number;
|
|
135
|
+
};
|
|
136
|
+
strippedFields?: Array<{
|
|
137
|
+
id: string;
|
|
138
|
+
stripped: string[];
|
|
139
|
+
}>;
|
|
140
|
+
}>;
|
|
141
|
+
//# sourceMappingURL=pass2a.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pass2a.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/pass2a.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAK,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B;AAsBD,eAAO,MAAM,aAAa,s8UAoJzB,CAAC;AAmBF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCzB,CAAC;AAaF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAUzG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,GAAG;IAClF,MAAM,EAAE,YAAY,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D,CAmBA;AAgBD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,cAAc,SAAO,EACrB,SAAS,CAAC,EAAE,MAAM,EAOlB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,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;IACrD,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D,CAAC,CAoGD"}
|