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,498 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// DEBT 5 Phase 3 — ARC EXTRACTION PIPELINE
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// Reads `conversation_turns` rows in a given range (status='pass01_done' from
|
|
6
|
+
// Phase 2's per-turn capture), consolidates them into D1+D4-shaped input
|
|
7
|
+
// (raw transcripts + Pass 0-1 outputs in chronological order, sew-as-event
|
|
8
|
+
// framing), and runs Pass 2-5 over the merged input via the EXISTING runAuto-
|
|
9
|
+
// Reflect checkpoint mechanism (resumeFrom: 'pass2'). After successful
|
|
10
|
+
// extraction, creates a `conversation_turn_ranges` row and flips each turn's
|
|
11
|
+
// status to 'extracted' with pairing_range_id set.
|
|
12
|
+
//
|
|
13
|
+
// Design anchors:
|
|
14
|
+
// docs/DEBT5-ATOMIC-AND-ARC-EXTRACTION.md §1.5 (D4 sew-as-event)
|
|
15
|
+
// §2.5 (re-extraction semantics)
|
|
16
|
+
// §2.5.1 (D2 dedup principle — relies on source_excerpt + value)
|
|
17
|
+
// §2.6 (Pass routing — arc runs Pass 2-5)
|
|
18
|
+
// §2.6.2 (D1 raw-transcripts-at-arc input layout)
|
|
19
|
+
// docs/DEBT5-INVENTORY-MAP.md §6 (ReflectJob.precomputedPassN pattern reused here)
|
|
20
|
+
//
|
|
21
|
+
// What this file does NOT do (deferred to later phases):
|
|
22
|
+
// - Phase 4: dedup-by-source-and-value at pre-Pass-3 / write-time
|
|
23
|
+
// - Phase 5: source_excerpt propagation Pass 1 → 2 → 3
|
|
24
|
+
// - Phase 6: D4 Pass 2 prompt addition (sew-as-event instruction in pass2a.ts)
|
|
25
|
+
// - Phase 7: triggers (phase tag detector / MCP tool / API endpoint)
|
|
26
|
+
// - Phase 8: backend handler (idempotency + rate-limit + range validation)
|
|
27
|
+
// - Phase 9: extracted_from + source_excerpt wiring at createBlock sites
|
|
28
|
+
// - Phase 10: safety nets (PreCompact hook + inactivity timeout)
|
|
29
|
+
import { runAutoReflect } from "./pipeline.js";
|
|
30
|
+
import { getLLMProvider } from "../../engine/providers/index.js";
|
|
31
|
+
import { pipelineV2Enabled, arcMaxRetries } from "./comprehend.js";
|
|
32
|
+
import { runComprehendFrontHalf } from "./v2-integrate.js";
|
|
33
|
+
import { isInsufficientCreditError } from "../../engine/providers/failure-policy.js";
|
|
34
|
+
import { writeSpendPauseFile, creditExhausted } from "./cost-guard.js";
|
|
35
|
+
import { setSpendPaused } from "../../routes/state.js";
|
|
36
|
+
import { callPass0LLM, formatSceneCard } from "./pass0.js";
|
|
37
|
+
import { callPass1LLM } from "./pass1.js";
|
|
38
|
+
// Lazy-capture safety net: turns captured WITHOUT Pass 0-1 (NODEDEX_V2_LAZY_CAPTURE)
|
|
39
|
+
// rely on the v2 arc engine, which re-reads raw. If v2 FAILS at arc, the v1 path
|
|
40
|
+
// needs items — so fill Pass 0-1 now from each turn's raw transcript. Runs ONLY on
|
|
41
|
+
// (lazy-capture + v2 failed + empty items): the rare path. Reuses the SAME Pass 0-1
|
|
42
|
+
// the capture would have run, persisting back to the turn so v1 + provenance work.
|
|
43
|
+
export async function lazyFillPass01(db, provider, turns) {
|
|
44
|
+
for (const t of turns) {
|
|
45
|
+
let tr = {};
|
|
46
|
+
try {
|
|
47
|
+
tr = JSON.parse(t.transcript_json);
|
|
48
|
+
}
|
|
49
|
+
catch { /* malformed — degrade to empty */ }
|
|
50
|
+
try {
|
|
51
|
+
const p0 = await callPass0LLM(provider, tr.agent_thinking ?? "", tr.agent_response ?? "", [], [], tr.user_message ?? "");
|
|
52
|
+
const sceneCard = p0.result ? formatSceneCard(p0.result) : "";
|
|
53
|
+
const p1 = await callPass1LLM(provider, tr.agent_thinking ?? "", tr.agent_response ?? "", "", sceneCard, [], tr.user_message ?? "");
|
|
54
|
+
// REFILL (not updateConversationTurnPass01): the turn is ALREADY pass01_done
|
|
55
|
+
// (lazy capture marked it so as the arc-ready signal) — write items in place.
|
|
56
|
+
db.refillConversationTurnPass01(t.id, JSON.stringify({ scene_card: p0.result ?? null, items: p1.result?.items ?? [] }));
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.warn(`[arc-extract] lazy-fill Pass 0-1 failed for turn ${t.turn_number}: ${e?.message ?? e}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ─── Phase 8: backend handler — idempotency + rate-limit + min-range guard ───
|
|
64
|
+
//
|
|
65
|
+
// These guards are CENTRAL — every trigger path (phase tag detector, MCP tool,
|
|
66
|
+
// API endpoint) goes through runArcExtraction, so wiring the checks here covers
|
|
67
|
+
// all three at once. Per design §3.5.
|
|
68
|
+
//
|
|
69
|
+
// Idempotency (in-memory): a Set of agent_ids currently being extracted.
|
|
70
|
+
// Second trigger while one's in flight → returns 'in_progress' without
|
|
71
|
+
// running. Survives single-process lifetime only; restart resets. For
|
|
72
|
+
// multi-process deployments, a DB-backed lock would replace this — Phase 9+
|
|
73
|
+
// work if needed.
|
|
74
|
+
//
|
|
75
|
+
// Rate-limit: last-extraction-end timestamp per agent. Default 60s gap;
|
|
76
|
+
// configurable via NODEDEX_ARC_RATE_LIMIT_SECONDS env.
|
|
77
|
+
//
|
|
78
|
+
// Min-range: < 2 turns means atomic extraction was enough — arc adds no value.
|
|
79
|
+
// Returns 'min_range_too_small' (caller can log + ignore).
|
|
80
|
+
const _arcInProgress = new Set(); // agent_ids currently extracting
|
|
81
|
+
const _arcLastEndTs = new Map(); // agent_id → epoch ms of last successful end
|
|
82
|
+
function getRateLimitMs() {
|
|
83
|
+
const envSec = process.env.NODEDEX_ARC_RATE_LIMIT_SECONDS;
|
|
84
|
+
if (envSec) {
|
|
85
|
+
const n = Number.parseInt(envSec, 10);
|
|
86
|
+
if (Number.isFinite(n) && n >= 0)
|
|
87
|
+
return n * 1000;
|
|
88
|
+
}
|
|
89
|
+
return 60_000; // default 60s per design §3.5
|
|
90
|
+
}
|
|
91
|
+
// Exported for tests — reset the in-memory guards. NOT for production callers.
|
|
92
|
+
export function _resetArcGuardsForTests() {
|
|
93
|
+
_arcInProgress.clear();
|
|
94
|
+
_arcLastEndTs.clear();
|
|
95
|
+
}
|
|
96
|
+
// ─── runArcExtraction — the orchestrator ──────────────────────────────────────
|
|
97
|
+
export async function runArcExtraction(db, opts) {
|
|
98
|
+
// ── Phase 8 guard 1: idempotency (in-memory) ───────────────────────────────
|
|
99
|
+
// Reject if an arc extraction is already in flight for this agent_id. The
|
|
100
|
+
// caller (hook / API / MCP) should retry later — the in-flight extraction
|
|
101
|
+
// will catch the same range (or a superset).
|
|
102
|
+
if (_arcInProgress.has(opts.agent_id)) {
|
|
103
|
+
return {
|
|
104
|
+
range_id: null,
|
|
105
|
+
turns_consumed: 0,
|
|
106
|
+
status: 'in_progress',
|
|
107
|
+
reflect_result: null,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// ── Phase 8 guard 2: rate-limit ────────────────────────────────────────────
|
|
111
|
+
// Reject if the last successful extraction for this agent ended < N seconds
|
|
112
|
+
// ago. Per design §3.5 + Rule 4: don't trust LLM restraint as the sole guard
|
|
113
|
+
// — the agent might emit <!-- arc-extract --> twice in close succession,
|
|
114
|
+
// or two trigger paths (phase tag + hook fallback) might fire in parallel.
|
|
115
|
+
const rateLimitMs = getRateLimitMs();
|
|
116
|
+
const lastEnd = _arcLastEndTs.get(opts.agent_id);
|
|
117
|
+
if (lastEnd !== undefined) {
|
|
118
|
+
const elapsed = Date.now() - lastEnd;
|
|
119
|
+
if (elapsed < rateLimitMs) {
|
|
120
|
+
return {
|
|
121
|
+
range_id: null,
|
|
122
|
+
turns_consumed: 0,
|
|
123
|
+
status: 'rate_limited',
|
|
124
|
+
reflect_result: null,
|
|
125
|
+
rate_limited_retry_after_ms: rateLimitMs - elapsed,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// 1. Resolve the range. Default to "all pass01_done turns for this agent."
|
|
130
|
+
// Explicit start/end let callers (MCP tool, API, re-extract) scope tighter.
|
|
131
|
+
const candidatesAll = db.listConversationTurnsByAgent(opts.agent_id, { status: 'pass01_done' });
|
|
132
|
+
if (candidatesAll.length === 0) {
|
|
133
|
+
return {
|
|
134
|
+
range_id: null,
|
|
135
|
+
turns_consumed: 0,
|
|
136
|
+
status: 'no_turns',
|
|
137
|
+
reflect_result: null,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const startTurn = opts.start_turn ?? candidatesAll[0].turn_number;
|
|
141
|
+
const endTurn = opts.end_turn ?? candidatesAll[candidatesAll.length - 1].turn_number;
|
|
142
|
+
// Re-read with the explicit range bounds (in case caller scoped tighter than 'all').
|
|
143
|
+
let turnsInRange = db.listConversationTurnsByAgent(opts.agent_id, {
|
|
144
|
+
status: 'pass01_done',
|
|
145
|
+
minTurn: startTurn,
|
|
146
|
+
maxTurn: endTurn,
|
|
147
|
+
});
|
|
148
|
+
if (turnsInRange.length === 0) {
|
|
149
|
+
return { range_id: null, turns_consumed: 0, status: 'no_turns', reflect_result: null, start_turn: startTurn, end_turn: endTurn };
|
|
150
|
+
}
|
|
151
|
+
// ── Phase 8 guard 3: minimum range size ────────────────────────────────────
|
|
152
|
+
// Arc extraction over < 2 turns adds no value over atomic — refuse and let
|
|
153
|
+
// caller try later when more turns have accumulated. Per design §3.5.
|
|
154
|
+
// Exception: re_extract bypasses the min check (caller explicitly wants
|
|
155
|
+
// to reprocess even a single turn — they've made the cost-benefit call).
|
|
156
|
+
if (turnsInRange.length < 2 && !opts.re_extract) {
|
|
157
|
+
return {
|
|
158
|
+
range_id: null,
|
|
159
|
+
turns_consumed: turnsInRange.length,
|
|
160
|
+
status: 'min_range_too_small',
|
|
161
|
+
start_turn: startTurn,
|
|
162
|
+
end_turn: endTurn,
|
|
163
|
+
reflect_result: null,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// followup 1: on EVERY failure path below, mark the range's still-pending turns
|
|
167
|
+
// with the error (non-destructive — they stay pass01_done/re-extractable) so the
|
|
168
|
+
// freshness surface can tell "queued/coming" from "last attempt failed". Defined
|
|
169
|
+
// here so no failure return can forget it.
|
|
170
|
+
const failClean = (status, error) => {
|
|
171
|
+
try {
|
|
172
|
+
db.markConversationTurnsExtractFailed(opts.agent_id, startTurn, endTurn, error);
|
|
173
|
+
}
|
|
174
|
+
catch { /* best-effort marker */ }
|
|
175
|
+
return { range_id: null, turns_consumed: turnsInRange.length, status, start_turn: startTurn, end_turn: endTurn, reflect_result: null, error };
|
|
176
|
+
};
|
|
177
|
+
// ── Phase 8: acquire the in-flight marker BEFORE the heavy work ──
|
|
178
|
+
// We hold this through the pipeline run + DB writes. The try/finally
|
|
179
|
+
// below ensures we release on every exit path, including thrown errors.
|
|
180
|
+
_arcInProgress.add(opts.agent_id);
|
|
181
|
+
try {
|
|
182
|
+
// 2. Build consolidated input — the D1+D4 transformation.
|
|
183
|
+
// Raw transcripts (D1) + scene cards + Pass-1 items merged with turn-prefixed
|
|
184
|
+
// IDs (so Pass 2c can wire cross-turn relations unambiguously). Sew-as-event
|
|
185
|
+
// header (D4) instructs Pass 2 to treat as ONE continuous arc.
|
|
186
|
+
let consolidated = buildArcConsolidatedInput(opts.agent_id, turnsInRange);
|
|
187
|
+
// ─── PIPELINE v2 (TRANSFORM) — default ON (NODEDEX_PIPELINE_V2) ──────────────
|
|
188
|
+
// When ON, replace the extraction front-half (Stage C + the resumeFrom:'pass2'
|
|
189
|
+
// checkpoint over per-turn Pass-0/1 items) with ONE holistic COMPREHEND read of
|
|
190
|
+
// the RAW arc transcript → a resumeFrom:'pass3' checkpoint. The recognizer
|
|
191
|
+
// (inside runComprehendFrontHalf) does Stage C's root-matching job, so Stage C
|
|
192
|
+
// is skipped here.
|
|
193
|
+
//
|
|
194
|
+
// V2-ONLY failure policy (2026-06-16) — replaces the old "auto-fall-to-v1" degrade:
|
|
195
|
+
// • checkpoint set → success, run the back-half.
|
|
196
|
+
// • reason 'empty' → v2 read the arc and judged NO residue worth saving.
|
|
197
|
+
// A clean, FINAL outcome — we trust the comprehender
|
|
198
|
+
// (no v1 double-check); marks turns extracted, 0 blocks.
|
|
199
|
+
// • failed / threw → BOUNDED-RETRY (arcMaxRetries); on exhaustion FAIL
|
|
200
|
+
// CLEAN (return below) — turns stay re-extractable,
|
|
201
|
+
// NEVER auto-fall to v1. v1 runs ONLY as the explicit
|
|
202
|
+
// off-switch (NODEDEX_PIPELINE_V2=0 → the !checkpoint
|
|
203
|
+
// block below).
|
|
204
|
+
// NOTE: in v2 mode the per-turn pass01 scene-cards/items that
|
|
205
|
+
// buildArcConsolidatedInput assembles go unused — v2 reads the raw transcript
|
|
206
|
+
// instead (intended; v2 replaces that front-half).
|
|
207
|
+
let checkpoint;
|
|
208
|
+
let v2FrontFailed = false; // a real front-half failure that persisted after all retries
|
|
209
|
+
let v2FrontEmpty = false; // v2 ran fine but found no residue worth saving (clean no-op)
|
|
210
|
+
let v2CreditOut = false; // the account ran out of credit mid-extraction (pause, don't burn retries)
|
|
211
|
+
if (pipelineV2Enabled()) {
|
|
212
|
+
const v2Transcript = turnsInRange.map((t) => {
|
|
213
|
+
let tr = {};
|
|
214
|
+
try {
|
|
215
|
+
tr = JSON.parse(t.transcript_json);
|
|
216
|
+
}
|
|
217
|
+
catch { /* malformed — degrade to empty */ }
|
|
218
|
+
const h = `[TURN ${t.turn_number}${t.turn_name ? ` — ${t.turn_name}` : ""}]`;
|
|
219
|
+
return `${h}\nUSER: ${tr.user_message ?? ""}\nAGENT: ${tr.agent_response ?? ""}`;
|
|
220
|
+
}).join("\n\n");
|
|
221
|
+
const maxRetries = arcMaxRetries();
|
|
222
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
223
|
+
try {
|
|
224
|
+
const provider = getLLMProvider();
|
|
225
|
+
const front = await runComprehendFrontHalf(db, provider, v2Transcript);
|
|
226
|
+
if (front.checkpoint) {
|
|
227
|
+
checkpoint = front.checkpoint;
|
|
228
|
+
v2FrontFailed = false;
|
|
229
|
+
console.log(`[arc-extract] PIPELINE v2: ${front.groups} group(s), ${front.blocks} block(s), ${front.filled} filled, recognizer attached=${front.recognizer.attached}`);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
if (front.reason === 'empty') {
|
|
233
|
+
v2FrontEmpty = true;
|
|
234
|
+
console.log(`[arc-extract] PIPELINE v2: no residue worth saving (empty) — nothing to extract`);
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
// Out of credit → DON'T burn the remaining retries (every one 402s identically).
|
|
238
|
+
// Pause spending + bail; arc fail-cleans below so turns stay re-extractable, and
|
|
239
|
+
// the auto-resume timer re-extracts on top-up.
|
|
240
|
+
if (front.reason === 'insufficient_credit') {
|
|
241
|
+
v2CreditOut = true;
|
|
242
|
+
console.warn(`[arc-extract] PIPELINE v2: insufficient credit — pausing spending, leaving turns re-extractable`);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
// comprehend_failed / seam1_invalid → a real failure; retry if budget remains.
|
|
246
|
+
v2FrontFailed = true;
|
|
247
|
+
console.warn(`[arc-extract] PIPELINE v2 front-half failed (${front.reason}) — attempt ${attempt + 1}/${maxRetries + 1}`);
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
if (isInsufficientCreditError(e)) {
|
|
251
|
+
v2CreditOut = true;
|
|
252
|
+
console.warn(`[arc-extract] PIPELINE v2 front-half: insufficient credit — pausing spending, leaving turns re-extractable`);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
v2FrontFailed = true;
|
|
256
|
+
console.warn(`[arc-extract] PIPELINE v2 front-half threw (${e?.message ?? e}) — attempt ${attempt + 1}/${maxRetries + 1}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// CREDIT-OUT (arc) — pause spending + fail clean. Unlike the per-turn queue (which
|
|
261
|
+
// requeues into a paused drain), arc capture stores turns RAW and /extract consumes
|
|
262
|
+
// them only on SUCCESS, so failing clean already leaves the whole arc re-extractable.
|
|
263
|
+
// Setting the spend-pause makes the TUI alert + auto-resume timer apply uniformly: on
|
|
264
|
+
// top-up the pause clears and the next arc trigger re-extracts. Belt-and-suspenders:
|
|
265
|
+
// re-check the live balance so a stale 'insufficient_credit' reason can't false-pause.
|
|
266
|
+
if (v2CreditOut && !checkpoint) {
|
|
267
|
+
const c = await creditExhausted();
|
|
268
|
+
setSpendPaused(true);
|
|
269
|
+
writeSpendPauseFile(`credit exhausted${c.remaining != null ? ` — remaining $${c.remaining.toFixed(2)}` : ""} (auto-resume on top-up)`);
|
|
270
|
+
return failClean('pipeline_incomplete', 'insufficient credit — spending paused; turns left re-extractable (auto-resume on top-up)');
|
|
271
|
+
}
|
|
272
|
+
// V2-ONLY FAIL CLEAN: v2 was the engine, it truly failed (not just empty), and the
|
|
273
|
+
// retry budget is spent. Do NOT fall through to v1 and do NOT mark turns extracted —
|
|
274
|
+
// return so the arc stays re-extractable (a later trigger / a fixed model retries).
|
|
275
|
+
if (v2FrontFailed && !checkpoint) {
|
|
276
|
+
return failClean('pipeline_incomplete', `v2 COMPREHEND front-half failed after ${arcMaxRetries() + 1} attempt(s) — turns left re-extractable`);
|
|
277
|
+
}
|
|
278
|
+
// ⚠ OLD v1 PIPELINE — DO NOT TURN ON. v2 is unconditional now (pipelineV2Enabled()
|
|
279
|
+
// always returns true), so on the v2 path a checkpoint = success, a real failure
|
|
280
|
+
// already returned above, and 'empty' is a clean 0-block result. This v1 block is
|
|
281
|
+
// intentionally unreachable — kept in-tree for reference only.
|
|
282
|
+
if (!checkpoint && !v2FrontEmpty) {
|
|
283
|
+
// ⚠ v1 ARC FALLBACK — RETIRED & DISABLED (2026-06-22). Unreachable: v2 is
|
|
284
|
+
// unconditional (pipelineV2Enabled() always true), so success set `checkpoint`, a real
|
|
285
|
+
// failure already returned failClean above, credit-out returned above, and 'empty' set
|
|
286
|
+
// v2FrontEmpty. Reaching here = a routing regression. FAIL CLEAN (turns stay
|
|
287
|
+
// re-extractable) instead of silently running the retired v1 arc path (lazyFillPass01 +
|
|
288
|
+
// Stage C). The code below is kept verbatim for the follow-up deletion PR.
|
|
289
|
+
return failClean('pipeline_incomplete', 'v1 arc fallback is retired and disabled — v2 produced neither a checkpoint nor an ' +
|
|
290
|
+
'empty result (routing bug); turns left re-extractable');
|
|
291
|
+
}
|
|
292
|
+
// 4. Invoke runAutoReflect with the checkpoint — OR, when v2 judged the arc empty,
|
|
293
|
+
// skip the back-half and synthesize a clean 0-block result. turnNumber/turnName
|
|
294
|
+
// are LEFT undefined deliberately — arc extraction is NOT a new "turn"; it
|
|
295
|
+
// consumes existing pass01_done turns. The Phase 2 INSERT path checks
|
|
296
|
+
// (agentId && turnNumber !== undefined), so it's correctly skipped here.
|
|
297
|
+
const runBackHalf = (cp) => runAutoReflect(db, consolidated.agentResponse, // sew-as-event narrative + raw transcripts
|
|
298
|
+
[], // loadedBlocks — empty; Phase 9 may wire if needed
|
|
299
|
+
consolidated.userMessage, // chronological aggregate of user messages
|
|
300
|
+
consolidated.agentThinking, // chronological aggregate of agent thinking
|
|
301
|
+
undefined, // embeddings
|
|
302
|
+
[], // recalledBlocks
|
|
303
|
+
opts.agent_id, // agentId — used for session-state labels
|
|
304
|
+
cp);
|
|
305
|
+
let reflectResult;
|
|
306
|
+
if (v2FrontEmpty) {
|
|
307
|
+
// v2-only: no residue worth saving. No back-half; record a clean 0-block
|
|
308
|
+
// extraction (turns consumed, range created, nothing saved).
|
|
309
|
+
reflectResult = { saved: 0, updated: 0, skipped: 0, saved_labels: [], uncertain_count: 0, created_blocks: [], updated_blocks: [] };
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
try {
|
|
313
|
+
reflectResult = await runBackHalf(checkpoint);
|
|
314
|
+
}
|
|
315
|
+
catch (e) {
|
|
316
|
+
return failClean('pipeline_failed', String(e?.message ?? e).slice(0, 500));
|
|
317
|
+
}
|
|
318
|
+
// ─── BACK-HALF BOUNDED RE-QUEUE (v2-only fail-clean; fixes silent-loss) ─────
|
|
319
|
+
// runAutoReflect RETURNS a checkpoint (it does not throw) when Pass 3 dropped
|
|
320
|
+
// items (truncation / mandatory-item miss). The per-turn QUEUE consumes that to
|
|
321
|
+
// re-run from pass3; the inline arc path has no queue, so we drive the SAME
|
|
322
|
+
// resume here, bounded by arcMaxRetries. The re-run is idempotent — Pass 3 seeds
|
|
323
|
+
// allBlocks from the DB, so already-saved blocks hit the label-dedup MERGE path
|
|
324
|
+
// (no dups) and only the still-missing items are created. The OLD code IGNORED
|
|
325
|
+
// this checkpoint and marked turns extracted with 0 saved blocks = silent,
|
|
326
|
+
// unrecoverable loss; this loop + the fail-clean below close that hole.
|
|
327
|
+
const maxBack = arcMaxRetries();
|
|
328
|
+
for (let backRetries = 1; reflectResult.checkpoint && backRetries <= maxBack; backRetries++) {
|
|
329
|
+
console.warn(`[arc-extract] back-half incomplete (resumeFrom=${reflectResult.checkpoint.resumeFrom}, saved=${reflectResult.saved}) — inline retry ${backRetries}/${maxBack}`);
|
|
330
|
+
try {
|
|
331
|
+
reflectResult = await runBackHalf(reflectResult.checkpoint);
|
|
332
|
+
}
|
|
333
|
+
catch (e) {
|
|
334
|
+
return failClean('pipeline_failed', String(e?.message ?? e).slice(0, 500));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// Still incomplete after the retry budget → FAIL CLEAN: do NOT mark turns
|
|
338
|
+
// extracted. Turns stay pending = re-extractable (never silent loss).
|
|
339
|
+
if (reflectResult.checkpoint) {
|
|
340
|
+
console.error(`[arc-extract] back-half STILL incomplete after ${maxBack} retr(ies) (resumeFrom=${reflectResult.checkpoint.resumeFrom}) — failing clean, turns left re-extractable`);
|
|
341
|
+
return failClean('pipeline_incomplete', `Pass 3 incomplete after ${maxBack + 1} attempt(s) — turns left re-extractable`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// 5. Pipeline succeeded — record the extraction event and flip turn statuses.
|
|
345
|
+
// Per design §2.5: re-extraction creates a NEW range (extraction_type=
|
|
346
|
+
// 're-extract') rather than mutating prior. Old turns' pairing_range_id
|
|
347
|
+
// POINTS to the original; re-extract creates new blocks linked to new range.
|
|
348
|
+
// For first-extraction (default), extraction_type='arc'.
|
|
349
|
+
const rangeRow = db.createConversationTurnRange({
|
|
350
|
+
agent_id: opts.agent_id,
|
|
351
|
+
start_turn_number: startTurn,
|
|
352
|
+
end_turn_number: endTurn,
|
|
353
|
+
extraction_type: opts.re_extract ? 're-extract' : 'arc',
|
|
354
|
+
trigger_source: opts.trigger_source,
|
|
355
|
+
pipeline_run_id: null, // Phase 8 wires this through from the backend handler
|
|
356
|
+
});
|
|
357
|
+
for (const turn of turnsInRange) {
|
|
358
|
+
try {
|
|
359
|
+
db.markConversationTurnExtracted(turn.id, rangeRow.id);
|
|
360
|
+
}
|
|
361
|
+
catch (e) {
|
|
362
|
+
// Defensive — a turn that's already 'extracted' (re-extract path) would
|
|
363
|
+
// have failed UPDATE. Phase 8's idempotency layer should catch this
|
|
364
|
+
// before we reach here; tolerate for now and log.
|
|
365
|
+
console.warn(`[arc-extract] mark-extracted failed for ct ${turn.id}: ${e?.message}`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// ── Phase 9: extracted_from provenance — record block → range join ────────
|
|
369
|
+
// For every block runAutoReflect created during this arc run, write a row to
|
|
370
|
+
// block_extractions linking it to rangeRow.id. The reflectResult only carries
|
|
371
|
+
// labels (not ids), so look up each by label. Failures here are logged but
|
|
372
|
+
// not fatal — the arc itself succeeded; the provenance is a secondary write.
|
|
373
|
+
let provenanceRecorded = 0;
|
|
374
|
+
let provenanceMisses = 0;
|
|
375
|
+
for (const cb of (reflectResult.created_blocks ?? [])) {
|
|
376
|
+
try {
|
|
377
|
+
const block = db.getBlock(cb.label);
|
|
378
|
+
if (!block) {
|
|
379
|
+
provenanceMisses++;
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
const created = db.recordBlockExtraction(block.id, rangeRow.id);
|
|
383
|
+
if (created)
|
|
384
|
+
provenanceRecorded++;
|
|
385
|
+
}
|
|
386
|
+
catch (e) {
|
|
387
|
+
console.warn(`[arc-extract] recordBlockExtraction failed for label="${cb.label}": ${e?.message}`);
|
|
388
|
+
provenanceMisses++;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (provenanceRecorded > 0 || provenanceMisses > 0) {
|
|
392
|
+
console.log(`[arc-extract] provenance: ${provenanceRecorded} block_extractions recorded, ${provenanceMisses} misses (range_id=${rangeRow.id})`);
|
|
393
|
+
}
|
|
394
|
+
// ─── STAGE FLAG (Sub-step 1.4 — now active, in pipeline.ts) ───────────────
|
|
395
|
+
// The atomic_dup_candidate flag writes live in pipeline.ts after the Pass 3
|
|
396
|
+
// createBlock loop (after stampFlowRolesAndChains) because that's where
|
|
397
|
+
// item_id → block_id resolution becomes possible via itemIdToLabel. This
|
|
398
|
+
// arc-pipeline.ts level sees the COMPLETED reflect_result and could add
|
|
399
|
+
// ARC-level flag writes (e.g., project_dup_candidate post-AUDIT) in a
|
|
400
|
+
// future slice — Stage AUDIT (Slice 2) is the natural owner.
|
|
401
|
+
//
|
|
402
|
+
// origin_range_id backfill: flags written from pipeline.ts know nothing
|
|
403
|
+
// about arc range_id; could be backfilled here from rangeRow.id if the
|
|
404
|
+
// async reviewer needs the arc-attribution. Deferred until Slice 2
|
|
405
|
+
// reviewer surfaces the need.
|
|
406
|
+
// Set rate-limit timestamp on success ONLY — failure shouldn't block retry.
|
|
407
|
+
_arcLastEndTs.set(opts.agent_id, Date.now());
|
|
408
|
+
return {
|
|
409
|
+
range_id: rangeRow.id,
|
|
410
|
+
turns_consumed: turnsInRange.length,
|
|
411
|
+
status: 'extracted',
|
|
412
|
+
start_turn: startTurn,
|
|
413
|
+
end_turn: endTurn,
|
|
414
|
+
reflect_result: reflectResult,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
// Release the in-progress marker on EVERY exit path (success, failure,
|
|
419
|
+
// thrown exception). Done in finally so even a runtime error in DB
|
|
420
|
+
// writes above doesn't leave the agent permanently locked.
|
|
421
|
+
_arcInProgress.delete(opts.agent_id);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// ─── buildArcConsolidatedInput — the D1+D4 input transformation ──────────────
|
|
425
|
+
//
|
|
426
|
+
// Converts N conversation_turn rows into a single arc-shaped input for Pass 2-5.
|
|
427
|
+
// Per design §2.6.2:
|
|
428
|
+
// - Inter-turn order: chronological (oldest first) — caller already passed in
|
|
429
|
+
// ASC order (listConversationTurnsByAgent sorts), so we trust it.
|
|
430
|
+
// - Intra-turn order: scene_card → items → raw transcript (dependency order;
|
|
431
|
+
// Pass 1 consumed Pass 0; raw transcript is the source under both).
|
|
432
|
+
// - Raw transcripts INCLUDED (D1, post-cap-bump): visible to Pass 2c for
|
|
433
|
+
// sew-as-event accuracy.
|
|
434
|
+
// - Item IDs prefixed `item_T<turn>_<original>` (D2 dedup composability).
|
|
435
|
+
// - Sew-as-event header (D4) prepended to instruct Pass 2 to treat as ONE
|
|
436
|
+
// continuous event.
|
|
437
|
+
export function buildArcConsolidatedInput(agentId, turns) {
|
|
438
|
+
const startTurn = turns[0].turn_number;
|
|
439
|
+
const endTurn = turns[turns.length - 1].turn_number;
|
|
440
|
+
const sewHeader = `[ARC EXTRACTION — agent_id=${agentId}, turns ${startTurn}-${endTurn}, ${turns.length} turn(s)]
|
|
441
|
+
This input represents ONE CONTINUOUS CONVERSATION ARC, not N independent turns.
|
|
442
|
+
- Items mentioned in multiple turns are the SAME item — sew them together, do NOT emit duplicates needing supersedes.
|
|
443
|
+
- Reason about cross-turn relations (causal chains, decisions built progressively, dead-ends abandoned then re-considered).
|
|
444
|
+
- Turn headers [TURN N] mark sequence only; the conversation flowed as one thought.
|
|
445
|
+
`;
|
|
446
|
+
const userMessageParts = [];
|
|
447
|
+
const agentResponseParts = [sewHeader];
|
|
448
|
+
const agentThinkingParts = [];
|
|
449
|
+
const sceneCardParts = [];
|
|
450
|
+
const sceneCardRawList = [];
|
|
451
|
+
const mergedItems = [];
|
|
452
|
+
for (const turn of turns) {
|
|
453
|
+
let transcript = {};
|
|
454
|
+
try {
|
|
455
|
+
transcript = JSON.parse(turn.transcript_json);
|
|
456
|
+
}
|
|
457
|
+
catch { /* malformed — degrade to empty */ }
|
|
458
|
+
const turnHeader = `[TURN ${turn.turn_number}${turn.turn_name ? ` — ${turn.turn_name}` : ''}]`;
|
|
459
|
+
if (transcript.user_message) {
|
|
460
|
+
userMessageParts.push(`${turnHeader}\nUSER: ${transcript.user_message}`);
|
|
461
|
+
}
|
|
462
|
+
if (transcript.agent_response) {
|
|
463
|
+
agentResponseParts.push(`${turnHeader}\nAGENT: ${transcript.agent_response}`);
|
|
464
|
+
}
|
|
465
|
+
if (transcript.agent_thinking) {
|
|
466
|
+
agentThinkingParts.push(`${turnHeader}\nTHINKING: ${transcript.agent_thinking}`);
|
|
467
|
+
}
|
|
468
|
+
// Pass 0-1 outputs from per-turn capture (Phase 2)
|
|
469
|
+
let pass01 = null;
|
|
470
|
+
try {
|
|
471
|
+
pass01 = turn.pass01_output_json ? JSON.parse(turn.pass01_output_json) : null;
|
|
472
|
+
}
|
|
473
|
+
catch { /* */ }
|
|
474
|
+
if (pass01?.scene_card) {
|
|
475
|
+
sceneCardRawList.push({ turn: turn.turn_number, scene_card: pass01.scene_card });
|
|
476
|
+
sceneCardParts.push(`[TURN ${turn.turn_number} SCENE CARD]\n${typeof pass01.scene_card === 'string' ? pass01.scene_card : JSON.stringify(pass01.scene_card, null, 2)}`);
|
|
477
|
+
}
|
|
478
|
+
if (Array.isArray(pass01?.items)) {
|
|
479
|
+
for (const item of pass01.items) {
|
|
480
|
+
// Prefix item IDs with turn number per §2.6.2. Strip any existing
|
|
481
|
+
// 'item_' prefix to avoid `item_T2_item_1` (some Pass 1 implementations
|
|
482
|
+
// emit ids like 'item_1', others bare integers as strings — both ok).
|
|
483
|
+
const cleanId = String(item.id ?? '').replace(/^item_/, '') || `${mergedItems.length + 1}`;
|
|
484
|
+
const arcId = `item_T${turn.turn_number}_${cleanId}`;
|
|
485
|
+
mergedItems.push({ ...item, id: arcId });
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
return {
|
|
490
|
+
agentResponse: agentResponseParts.join('\n\n'),
|
|
491
|
+
userMessage: userMessageParts.join('\n\n'),
|
|
492
|
+
agentThinking: agentThinkingParts.join('\n\n'),
|
|
493
|
+
sceneCardFormatted: sceneCardParts.join('\n\n---\n\n'),
|
|
494
|
+
sceneCardMerged: { merged_turns: sceneCardRawList, agent_id: agentId, start_turn: startTurn, end_turn: endTurn },
|
|
495
|
+
items: mergedItems,
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
//# sourceMappingURL=arc-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arc-pipeline.js","sourceRoot":"","sources":["../../../src/middleware/reflect/arc-pipeline.ts"],"names":[],"mappings":"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"}
|