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,52 @@
|
|
|
1
|
+
import type { WorkspaceDB, Block } from "../../store/database.js";
|
|
2
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
3
|
+
import type { PipelineFlag, FlagActionTaken, ReviewVerdict } from "./types.js";
|
|
4
|
+
export declare function provenanceReviewerEnabled(): boolean;
|
|
5
|
+
/** Level 2 gate: only when on does the reviewer MUTATE (correct/demote). */
|
|
6
|
+
export declare function provenanceAutoActEnabled(): boolean;
|
|
7
|
+
export declare const PROVENANCE_REVIEW_PROMPT = "You are auditing a knowledge-graph block's PROVENANCE. The block claims it was\nextracted from a conversation, but an automatic check found its stored EXCERPT does\nnot appear in the transcript. Decide whether the block's CLAIM is actually grounded\nin the SOURCE TRANSCRIPT at all \u2014 read the transcript as ground truth.\n\n grounded=true \u2014 the claim IS supported somewhere in the transcript (the excerpt\n was merely paraphrased / reordered / mis-quoted). If you can find\n the exact passage the claim comes from, copy it VERBATIM into\n correct_excerpt; otherwise leave correct_excerpt empty.\n grounded=false \u2014 the claim is NOT present in the transcript (the excerpt AND the\n claim were fabricated or mis-attributed). The block will be demoted.\n\nJudge by MEANING \u2014 surface word overlap is NOT enough. When genuinely uncertain\nwhether the claim is in the transcript, prefer grounded=true (demoting is heavier\nthan keeping a flagged block). correct_excerpt must be copied verbatim from the\ntranscript or left empty. reasoning \u2264 200 chars, citing what you found (or didn't).";
|
|
8
|
+
export interface ProvenanceVerdict {
|
|
9
|
+
grounded: boolean;
|
|
10
|
+
correct_excerpt: string;
|
|
11
|
+
reasoning: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function buildReviewInput(db: WorkspaceDB, block: Block, transcript: string): string;
|
|
14
|
+
export declare function judgeProvenance(provider: LLMProvider, userInput: string): Promise<{
|
|
15
|
+
verdict: ProvenanceVerdict | null;
|
|
16
|
+
rateLimited: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
export interface AppliedVerdict {
|
|
19
|
+
verdict: ReviewVerdict;
|
|
20
|
+
action_taken: FlagActionTaken;
|
|
21
|
+
reason: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Apply a verdict to one flagged block + record it. autoAct=false → verdict only,
|
|
25
|
+
* NO mutation (Level 1). Mutations (Level 2): correct the excerpt (grounded + a real
|
|
26
|
+
* fix) or archive the block (ungrounded) — both recoverable.
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyProvenanceVerdict(db: WorkspaceDB, flag: PipelineFlag, block: Block, verdict: ProvenanceVerdict, autoAct: boolean): AppliedVerdict;
|
|
29
|
+
export interface ProvenanceReviewerTickResult {
|
|
30
|
+
pending: number;
|
|
31
|
+
reviewed: number;
|
|
32
|
+
corrected: number;
|
|
33
|
+
demoted: number;
|
|
34
|
+
left: number;
|
|
35
|
+
skipped_soft: number;
|
|
36
|
+
skipped_no_transcript: number;
|
|
37
|
+
rate_limited: number;
|
|
38
|
+
errors: number;
|
|
39
|
+
wall_ms: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function runProvenanceReviewerTick(opts: {
|
|
42
|
+
db: WorkspaceDB;
|
|
43
|
+
provider: LLMProvider;
|
|
44
|
+
limit?: number;
|
|
45
|
+
autoAct?: boolean;
|
|
46
|
+
}): Promise<ProvenanceReviewerTickResult>;
|
|
47
|
+
/** Start the reviewer timer. Idempotent; default OFF. Returns true if started. */
|
|
48
|
+
export declare function startProvenanceReviewerTimer(db: WorkspaceDB): boolean;
|
|
49
|
+
export declare function stopProvenanceReviewerTimer(): void;
|
|
50
|
+
/** Tests only — is the timer running? */
|
|
51
|
+
export declare function _isProvenanceReviewerTimerRunningForTests(): boolean;
|
|
52
|
+
//# sourceMappingURL=provenance-reviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-reviewer.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/provenance-reviewer.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU/E,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AACD,4EAA4E;AAC5E,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAcD,eAAO,MAAM,wBAAwB,iqCAe+C,CAAC;AAYrF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA0B1F;AAID,wBAAsB,eAAe,CACnC,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAMtE;AAID,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAE1G;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,OAAO,GACf,cAAc,CAwBhB;AAID,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IACpF,YAAY,EAAE,MAAM,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAC5G;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,EAAE,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3E,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA8CxC;AA4BD,kFAAkF;AAClF,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAWrE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,yCAAyC;AACzC,wBAAgB,yCAAyC,IAAI,OAAO,CAEnE"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// GAP ④(b) — PROVENANCE MEANING-REVIEWER (the expensive-narrow half)
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
//
|
|
5
|
+
// Consumes the HARD (severity='missing') provenance_mismatch flags the $0 detector
|
|
6
|
+
// (provenance-check.ts) wrote. For each, it re-reads the STORED source transcript
|
|
7
|
+
// (never the user's new turn) + the block's chain, and judges BY MEANING:
|
|
8
|
+
//
|
|
9
|
+
// grounded=true → the block's claim IS in the transcript (the excerpt was just
|
|
10
|
+
// mis-quoted). If it can find the real passage → correct_excerpt.
|
|
11
|
+
// grounded=false → the claim is NOT in the transcript at all → fabricated → demote.
|
|
12
|
+
//
|
|
13
|
+
// TRIAGE → INVESTIGATE: fuzzy (soft) flags NEVER reach here — they're benign
|
|
14
|
+
// paraphrase and would be the scale-cost trap. Only hard flags cost an LLM call.
|
|
15
|
+
//
|
|
16
|
+
// Mirrors flag-reviewer.ts (the dup reviewer) + describe-roots.ts (the timer):
|
|
17
|
+
// input builder → LLM judge → act → markFlagReviewed → bounded async tick.
|
|
18
|
+
//
|
|
19
|
+
// Safety LEVELS (mirror flag-reviewer's auto-merge gate):
|
|
20
|
+
// Level 0 (default): NODEDEX_PROVENANCE_REVIEWER_ENABLED unset → worker never
|
|
21
|
+
// starts. runProvenanceReviewerTick still callable (REST/tests).
|
|
22
|
+
// Level 1: ENABLED=on, AUTO_ACT unset → verdicts WRITTEN, graph NOT mutated.
|
|
23
|
+
// Level 2: + NODEDEX_PROVENANCE_AUTO_ACT=on → corrections + demotes execute
|
|
24
|
+
// (updateBlock excerpt / archiveBlock — recoverable, charter Rule 2).
|
|
25
|
+
import { getPendingFlags, markFlagReviewed } from "./pipeline-flags.js";
|
|
26
|
+
import { getBlockTranscript } from "./provenance-check.js";
|
|
27
|
+
import { extractPrimaryValueFromUnique } from "./dedup-by-source-and-value.js";
|
|
28
|
+
import { getLLMProvider } from "../../engine/providers/index.js";
|
|
29
|
+
import { budgetTripped } from "./cost-guard.js";
|
|
30
|
+
import { modelOverride, intFromEnv } from "./config.js";
|
|
31
|
+
// ─── Config ──────────────────────────────────────────────────────────────────────
|
|
32
|
+
export function provenanceReviewerEnabled() {
|
|
33
|
+
return (process.env.NODEDEX_PROVENANCE_REVIEWER_ENABLED ?? "").toLowerCase() === "on";
|
|
34
|
+
}
|
|
35
|
+
/** Level 2 gate: only when on does the reviewer MUTATE (correct/demote). */
|
|
36
|
+
export function provenanceAutoActEnabled() {
|
|
37
|
+
return (process.env.NODEDEX_PROVENANCE_AUTO_ACT ?? "").toLowerCase() === "on";
|
|
38
|
+
}
|
|
39
|
+
function batchSize() {
|
|
40
|
+
return intFromEnv("NODEDEX_PROVENANCE_REVIEWER_BATCH", 5); // caps $$ per tick
|
|
41
|
+
}
|
|
42
|
+
function intervalMs() {
|
|
43
|
+
return intFromEnv("NODEDEX_PROVENANCE_REVIEWER_INTERVAL_MS", 1_800_000); // 30 min (slow background)
|
|
44
|
+
}
|
|
45
|
+
function reviewerModel() {
|
|
46
|
+
return modelOverride("NODEDEX_PROVENANCE_REVIEWER_MODEL");
|
|
47
|
+
}
|
|
48
|
+
const MAX_TRANSCRIPT_CHARS = 8000; // bound input tokens
|
|
49
|
+
// ─── Prompt + schema ───────────────────────────────────────────────────────────
|
|
50
|
+
export const PROVENANCE_REVIEW_PROMPT = `You are auditing a knowledge-graph block's PROVENANCE. The block claims it was
|
|
51
|
+
extracted from a conversation, but an automatic check found its stored EXCERPT does
|
|
52
|
+
not appear in the transcript. Decide whether the block's CLAIM is actually grounded
|
|
53
|
+
in the SOURCE TRANSCRIPT at all — read the transcript as ground truth.
|
|
54
|
+
|
|
55
|
+
grounded=true — the claim IS supported somewhere in the transcript (the excerpt
|
|
56
|
+
was merely paraphrased / reordered / mis-quoted). If you can find
|
|
57
|
+
the exact passage the claim comes from, copy it VERBATIM into
|
|
58
|
+
correct_excerpt; otherwise leave correct_excerpt empty.
|
|
59
|
+
grounded=false — the claim is NOT present in the transcript (the excerpt AND the
|
|
60
|
+
claim were fabricated or mis-attributed). The block will be demoted.
|
|
61
|
+
|
|
62
|
+
Judge by MEANING — surface word overlap is NOT enough. When genuinely uncertain
|
|
63
|
+
whether the claim is in the transcript, prefer grounded=true (demoting is heavier
|
|
64
|
+
than keeping a flagged block). correct_excerpt must be copied verbatim from the
|
|
65
|
+
transcript or left empty. reasoning ≤ 200 chars, citing what you found (or didn't).`;
|
|
66
|
+
const PROVENANCE_REVIEW_SCHEMA = {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
grounded: { type: "boolean" },
|
|
70
|
+
correct_excerpt: { type: "string" },
|
|
71
|
+
reasoning: { type: "string" },
|
|
72
|
+
},
|
|
73
|
+
required: ["grounded", "reasoning"],
|
|
74
|
+
};
|
|
75
|
+
// ─── Context builder (DB reads, no LLM — testable) ──────────────────────────────
|
|
76
|
+
export function buildReviewInput(db, block, transcript) {
|
|
77
|
+
let claim = "";
|
|
78
|
+
try {
|
|
79
|
+
const c = typeof block.content === "string" ? JSON.parse(block.content) : (block.content || {});
|
|
80
|
+
claim = extractPrimaryValueFromUnique(block.type, c.unique || {}) || "";
|
|
81
|
+
}
|
|
82
|
+
catch { /* tolerate */ }
|
|
83
|
+
const chainLines = [];
|
|
84
|
+
const cid = block.chain_id;
|
|
85
|
+
if (cid) {
|
|
86
|
+
try {
|
|
87
|
+
for (const m of db.getBlocksByChain(cid)) {
|
|
88
|
+
if (m.id === block.id)
|
|
89
|
+
continue;
|
|
90
|
+
chainLines.push(` - [${m.type}] ${m.label} — "${(m.essence || "").slice(0, 100)}"`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch { /* tolerate */ }
|
|
94
|
+
}
|
|
95
|
+
const tx = transcript.length > MAX_TRANSCRIPT_CHARS ? transcript.slice(0, MAX_TRANSCRIPT_CHARS) + " …[truncated]" : transcript;
|
|
96
|
+
return [
|
|
97
|
+
`BLOCK: [${block.type}] "${(block.essence || "").slice(0, 200)}"`,
|
|
98
|
+
claim ? `IDENTITY CLAIM: "${claim.slice(0, 200)}"` : "",
|
|
99
|
+
`STORED EXCERPT (suspect): "${String(block.source_excerpt ?? "").slice(0, 300)}"`,
|
|
100
|
+
chainLines.length ? `CHAIN (context):\n${chainLines.join("\n")}` : "CHAIN: (none)",
|
|
101
|
+
`\nSOURCE TRANSCRIPT:\n${tx}`,
|
|
102
|
+
].filter(Boolean).join("\n");
|
|
103
|
+
}
|
|
104
|
+
// ─── LLM judge (the only cost) ──────────────────────────────────────────────────
|
|
105
|
+
export async function judgeProvenance(provider, userInput) {
|
|
106
|
+
const r = await provider.generateStructured(PROVENANCE_REVIEW_PROMPT, userInput, PROVENANCE_REVIEW_SCHEMA, { thinkingBudget: 512, modelOverride: reviewerModel() });
|
|
107
|
+
return { verdict: r.result ?? null, rateLimited: r.rateLimited };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply a verdict to one flagged block + record it. autoAct=false → verdict only,
|
|
111
|
+
* NO mutation (Level 1). Mutations (Level 2): correct the excerpt (grounded + a real
|
|
112
|
+
* fix) or archive the block (ungrounded) — both recoverable.
|
|
113
|
+
*/
|
|
114
|
+
export function applyProvenanceVerdict(db, flag, block, verdict, autoAct) {
|
|
115
|
+
const raw = db.db;
|
|
116
|
+
let out;
|
|
117
|
+
if (!verdict.grounded) {
|
|
118
|
+
if (autoAct)
|
|
119
|
+
db.archiveBlock(block.id, `provenance: claim not found in source transcript — ${verdict.reasoning.slice(0, 120)}`);
|
|
120
|
+
out = { verdict: "demoted", action_taken: autoAct ? "demoted_unprovenanced" : "none", reason: verdict.reasoning };
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const fix = (verdict.correct_excerpt ?? "").trim();
|
|
124
|
+
const needsFix = fix.length > 0 && fix !== String(block.source_excerpt ?? "").trim();
|
|
125
|
+
if (needsFix && autoAct) {
|
|
126
|
+
db.updateBlock(block.id, { source_excerpt: fix }, "provenance: corrected excerpt to verbatim source", "provenance_reviewer");
|
|
127
|
+
out = { verdict: "corrected", action_taken: "corrected_excerpt", reason: verdict.reasoning };
|
|
128
|
+
}
|
|
129
|
+
else if (needsFix) {
|
|
130
|
+
out = { verdict: "corrected", action_taken: "none", reason: verdict.reasoning }; // Level 1: would-correct, not applied
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
out = { verdict: "leave", action_taken: "none", reason: verdict.reasoning };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
markFlagReviewed(raw, {
|
|
137
|
+
flag_id: flag.id, verdict: out.verdict, reason: out.reason, action_taken: out.action_taken,
|
|
138
|
+
});
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
export async function runProvenanceReviewerTick(opts) {
|
|
142
|
+
const t0 = Date.now();
|
|
143
|
+
const { db, provider } = opts;
|
|
144
|
+
const autoAct = opts.autoAct ?? provenanceAutoActEnabled();
|
|
145
|
+
const res = {
|
|
146
|
+
pending: 0, reviewed: 0, corrected: 0, demoted: 0, left: 0,
|
|
147
|
+
skipped_soft: 0, skipped_no_transcript: 0, rate_limited: 0, errors: 0, wall_ms: 0,
|
|
148
|
+
};
|
|
149
|
+
const raw = db.db;
|
|
150
|
+
const flags = getPendingFlags(raw, {
|
|
151
|
+
flag_type: "provenance_mismatch", origin_writer: "provenance_check", limit: opts.limit ?? batchSize(),
|
|
152
|
+
});
|
|
153
|
+
res.pending = flags.length;
|
|
154
|
+
for (const flag of flags) {
|
|
155
|
+
try {
|
|
156
|
+
// soft (fuzzy) flags never cost an LLM call — close them with 'leave'.
|
|
157
|
+
if (flag.criteria?.severity !== "hard") {
|
|
158
|
+
markFlagReviewed(raw, { flag_id: flag.id, verdict: "leave", reason: "soft (paraphrase) — not LLM-reviewed", action_taken: "none" });
|
|
159
|
+
res.skipped_soft++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const block = db.getBlock(flag.block_id_a);
|
|
163
|
+
if (!block || block.status === "archived") {
|
|
164
|
+
markFlagReviewed(raw, { flag_id: flag.id, verdict: "leave", reason: "block gone/archived", action_taken: "none" });
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const src = getBlockTranscript(db, block.id);
|
|
168
|
+
if (!src) {
|
|
169
|
+
markFlagReviewed(raw, { flag_id: flag.id, verdict: "leave", reason: "no source transcript to verify against", action_taken: "none" });
|
|
170
|
+
res.skipped_no_transcript++;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const { verdict, rateLimited } = await judgeProvenance(provider, buildReviewInput(db, block, src.text));
|
|
174
|
+
if (rateLimited || !verdict) {
|
|
175
|
+
res.rate_limited += rateLimited ? 1 : 0;
|
|
176
|
+
res.errors += verdict ? 0 : 1;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const applied = applyProvenanceVerdict(db, flag, block, verdict, autoAct);
|
|
180
|
+
res.reviewed++;
|
|
181
|
+
if (applied.verdict === "corrected")
|
|
182
|
+
res.corrected++;
|
|
183
|
+
else if (applied.verdict === "demoted")
|
|
184
|
+
res.demoted++;
|
|
185
|
+
else
|
|
186
|
+
res.left++;
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
res.errors++;
|
|
190
|
+
console.warn(`[provenance-reviewer] flag ${flag.id} threw: ${e?.message ?? e}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
res.wall_ms = Date.now() - t0;
|
|
194
|
+
return res;
|
|
195
|
+
}
|
|
196
|
+
// ─── Timer wrapper (env-gated, default OFF — mirrors describe-roots) ─────────────
|
|
197
|
+
let _handle = null;
|
|
198
|
+
let _inFlight = false;
|
|
199
|
+
async function tick(db) {
|
|
200
|
+
if (_inFlight)
|
|
201
|
+
return;
|
|
202
|
+
_inFlight = true;
|
|
203
|
+
try {
|
|
204
|
+
const budget = await budgetTripped();
|
|
205
|
+
if (budget?.tripped) {
|
|
206
|
+
console.warn(`[provenance-reviewer] tick skipped — cost breaker: ${budget.reason}`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const provider = getLLMProvider();
|
|
210
|
+
if (!provider.isAvailable()) {
|
|
211
|
+
console.warn("[provenance-reviewer] provider unavailable — skipping tick");
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const r = await runProvenanceReviewerTick({ db, provider });
|
|
215
|
+
if (r.reviewed > 0 || r.errors > 0) {
|
|
216
|
+
console.log(`[provenance-reviewer] tick: pending=${r.pending} reviewed=${r.reviewed} ` +
|
|
217
|
+
`corrected=${r.corrected} demoted=${r.demoted} left=${r.left} soft=${r.skipped_soft} ` +
|
|
218
|
+
`errors=${r.errors} wall_ms=${r.wall_ms}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
console.warn(`[provenance-reviewer] tick threw: ${e?.message ?? e}`);
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
_inFlight = false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** Start the reviewer timer. Idempotent; default OFF. Returns true if started. */
|
|
229
|
+
export function startProvenanceReviewerTimer(db) {
|
|
230
|
+
if (!provenanceReviewerEnabled()) {
|
|
231
|
+
console.log("[provenance-reviewer] disabled (set NODEDEX_PROVENANCE_REVIEWER_ENABLED=on to enable)");
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
if (_handle !== null)
|
|
235
|
+
return false;
|
|
236
|
+
const ms = intervalMs();
|
|
237
|
+
console.log(`[provenance-reviewer] starting: interval=${ms}ms autoAct=${provenanceAutoActEnabled()}`);
|
|
238
|
+
_handle = setInterval(() => { tick(db).catch((e) => console.warn(`[provenance-reviewer] interval rejected: ${e?.message ?? e}`)); }, ms);
|
|
239
|
+
if (typeof _handle.unref === "function")
|
|
240
|
+
_handle.unref();
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
export function stopProvenanceReviewerTimer() {
|
|
244
|
+
if (_handle !== null) {
|
|
245
|
+
clearInterval(_handle);
|
|
246
|
+
_handle = null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/** Tests only — is the timer running? */
|
|
250
|
+
export function _isProvenanceReviewerTimerRunningForTests() {
|
|
251
|
+
return _handle !== null;
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=provenance-reviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-reviewer.js","sourceRoot":"","sources":["../../../src/middleware/reflect/provenance-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkspaceDB } from "../../store/database.js";
|
|
2
|
+
/** The block types collapsed on 2026-06-15. Their content folded into fact/insight. */
|
|
3
|
+
export declare const COLLAPSED_TYPE_NAMES: readonly ["reasoning_chain", "metric", "claim"];
|
|
4
|
+
export interface PruneCollapsedResult {
|
|
5
|
+
/** Which of the collapsed-type rows actually existed and were removed. */
|
|
6
|
+
deleted: string[];
|
|
7
|
+
/** block_types row count AFTER the prune (sanity). */
|
|
8
|
+
remaining_types: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function pruneCollapsedTypes(db: WorkspaceDB): PruneCollapsedResult;
|
|
11
|
+
//# sourceMappingURL=prune-collapsed-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune-collapsed-types.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/prune-collapsed-types.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,iDAAkD,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,oBAAoB,CAYzE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// prune-collapsed-types.ts — registry cleanup for the 2026-06-15 type collapse.
|
|
2
|
+
//
|
|
3
|
+
// reasoning_chain→insight and metric/claim→fact were collapsed: removed from the
|
|
4
|
+
// code's builtin-types seed, the prompts, and the validator. But a DB seeded BEFORE
|
|
5
|
+
// the collapse still carries their `block_types` rows — `INSERT OR IGNORE` only adds,
|
|
6
|
+
// never deletes — so they persist and still surface to the agent (via /api/session)
|
|
7
|
+
// and re-union into the pipeline's seedTypeNames. This prunes EXACTLY those three
|
|
8
|
+
// rows by name.
|
|
9
|
+
//
|
|
10
|
+
// Deliberately NOT a "delete everything not in the seed" reconcile: that would also
|
|
11
|
+
// wipe user-created custom types (workspace_create_type). Explicit names = zero
|
|
12
|
+
// collateral. Idempotent. $0, no LLM. Existing BLOCKS of these types are left
|
|
13
|
+
// forward-only — the validator trusts unknown types, so they recall/traverse fine;
|
|
14
|
+
// re-typing old blocks is a separate, heavier migration we deliberately do not do.
|
|
15
|
+
//
|
|
16
|
+
// Runs through the server's single DB connection (safe live, unlike a side-script).
|
|
17
|
+
/** The block types collapsed on 2026-06-15. Their content folded into fact/insight. */
|
|
18
|
+
export const COLLAPSED_TYPE_NAMES = ["reasoning_chain", "metric", "claim"];
|
|
19
|
+
export function pruneCollapsedTypes(db) {
|
|
20
|
+
const raw = db.db;
|
|
21
|
+
const placeholders = COLLAPSED_TYPE_NAMES.map(() => "?").join(",");
|
|
22
|
+
const present = raw
|
|
23
|
+
.prepare(`SELECT name FROM block_types WHERE name IN (${placeholders})`)
|
|
24
|
+
.all(...COLLAPSED_TYPE_NAMES)
|
|
25
|
+
.map((r) => r.name);
|
|
26
|
+
if (present.length > 0) {
|
|
27
|
+
raw.prepare(`DELETE FROM block_types WHERE name IN (${present.map(() => "?").join(",")})`).run(...present);
|
|
28
|
+
}
|
|
29
|
+
const remaining_types = raw.prepare(`SELECT COUNT(*) AS n FROM block_types`).get().n;
|
|
30
|
+
return { deleted: present, remaining_types };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=prune-collapsed-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune-collapsed-types.js","sourceRoot":"","sources":["../../../src/middleware/reflect/prune-collapsed-types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,iFAAiF;AACjF,oFAAoF;AACpF,sFAAsF;AACtF,oFAAoF;AACpF,kFAAkF;AAClF,gBAAgB;AAChB,EAAE;AACF,oFAAoF;AACpF,gFAAgF;AAChF,8EAA8E;AAC9E,mFAAmF;AACnF,mFAAmF;AACnF,EAAE;AACF,oFAAoF;AAKpF,uFAAuF;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AASpF,MAAM,UAAU,mBAAmB,CAAC,EAAe;IACjD,MAAM,GAAG,GAAI,EAAU,CAAC,EAAuB,CAAC;IAChD,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG;SAChB,OAAO,CAAC,+CAA+C,YAAY,GAAG,CAAC;SACvE,GAAG,CAAC,GAAG,oBAAoB,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,0CAA0C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,eAAe,GAAI,GAAG,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,EAAU,CAAC,CAAW,CAAC;IACxG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { LLMProvider } from "../../engine/ai-provider.js";
|
|
2
|
+
import type { Pass2Item } from "./types.js";
|
|
3
|
+
export declare function recognizerEnabled(): boolean;
|
|
4
|
+
export interface KnownRoot {
|
|
5
|
+
label: string;
|
|
6
|
+
essence: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RecognizerVerdict {
|
|
9
|
+
decision: "attach" | "new" | "uncertain";
|
|
10
|
+
matched_root: string;
|
|
11
|
+
same_owner: boolean;
|
|
12
|
+
shared_subject: string;
|
|
13
|
+
reasoning: string;
|
|
14
|
+
}
|
|
15
|
+
/** The deterministic action after applying guard #4 (bias to NOT-attach). */
|
|
16
|
+
export interface RecognizerAction {
|
|
17
|
+
action: "attach" | "keep";
|
|
18
|
+
root?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Map an LLM verdict → an action. ATTACH only when the model is confident
|
|
22
|
+
* (decision==="attach"), names a root that ACTUALLY EXISTS, confirms same
|
|
23
|
+
* owner, AND names the shared subject-matter (guard #6 — an attach must carry
|
|
24
|
+
* its falsifiable evidence; an unevidenced attach is a contract violation, so
|
|
25
|
+
* the safe direction is fork). Everything else → keep. Pure / testable.
|
|
26
|
+
*/
|
|
27
|
+
export declare function decideAction(verdict: RecognizerVerdict, knownRootLabels: ReadonlySet<string>): RecognizerAction;
|
|
28
|
+
/** Distinct project names among items that are NOT existing roots = the
|
|
29
|
+
* new-root candidates the recognizer should judge. Pure / testable. */
|
|
30
|
+
export declare function newRootCandidateNames(items: Pass2Item[], knownRootLabels: ReadonlySet<string>): string[];
|
|
31
|
+
export declare const RECOGNIZE_ROOT_PROMPT = "A knowledge graph is about to create a NEW project root for a cluster of new\nknowledge. Decide whether that cluster actually belongs to an EXISTING project\ninstead \u2014 so related knowledge COMPOUNDS onto one project rather than fragmenting.\n\nYou are given:\n - NEW CLUSTER: the new knowledge (its proposed project name + member items).\n - EXISTING PROJECTS: each as a one-line DESCRIPTION (domain + owner).\n\nDecide ONE:\n - \"attach\" \u2014 the cluster clearly belongs to one EXISTING project: SAME DOMAIN\n AND SAME OWNER. Set matched_root to that project's exact label and\n shared_subject to the specific subject-matter they share.\n - \"new\" \u2014 no existing project fits; this is genuinely a new project.\n - \"uncertain\" \u2014 plausibly related to an existing project but you are NOT confident\n (e.g. similar domain but unclear/different owner, or a weak fit).\n\nRULES (read carefully):\n - Judge on the DESCRIPTION's meaning, NOT on label string similarity. Two similar\n names can be different projects; two different names can be the same project.\n - SAME OWNER is required for \"attach\". Same domain but a DIFFERENT or UNKNOWN owner\n (e.g. one customer's data vs another's) is NOT the same project \u2192 \"new\" or \"uncertain\".\n - \"attach\" requires a NAMEABLE SHARED SUBJECT: shared_subject must name the specific\n thing both bodies of work are ABOUT. A shared MANNER is not a subject \u2014 that both\n involve someone remembering, reasoning, or planning a response names no subject,\n because every conversation involves those. If you cannot name what they are both\n about, the fit is not real \u2192 \"new\" or \"uncertain\", with shared_subject \"\".\n - When the fit is merely plausible, choose \"uncertain\", NOT \"attach\". A wrong attach\n silently merges two real projects (hard to undo); a fork is recoverable. Bias to caution.\n - reasoning MUST cite the specific evidence (which description, which overlapping\n content) \u2014 not \"they seem related\".";
|
|
32
|
+
export declare function buildRecognizeInput(newProjectName: string, clusterItems: Pass2Item[], candidateRoots: KnownRoot[], itemCap: number, rootCap: number): string;
|
|
33
|
+
export declare function recognizeClusterRoot(provider: LLMProvider, newProjectName: string, clusterItems: Pass2Item[], candidateRoots: KnownRoot[]): Promise<{
|
|
34
|
+
verdict: RecognizerVerdict | null;
|
|
35
|
+
rateLimited: boolean;
|
|
36
|
+
usage?: {
|
|
37
|
+
input?: number;
|
|
38
|
+
thinking?: number;
|
|
39
|
+
output?: number;
|
|
40
|
+
};
|
|
41
|
+
}>;
|
|
42
|
+
export interface RecognizeRootsResult {
|
|
43
|
+
/** project-name → existing-root-label rewrites to apply to items. */
|
|
44
|
+
remap: Array<{
|
|
45
|
+
from: string;
|
|
46
|
+
to: string;
|
|
47
|
+
}>;
|
|
48
|
+
candidates: number;
|
|
49
|
+
attached: number;
|
|
50
|
+
llm_calls: number;
|
|
51
|
+
rate_limited: number;
|
|
52
|
+
errors: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* For each new-root candidate cluster, ask the recognizer "attach to an existing
|
|
56
|
+
* root?" and collect the confident-attach rewrites. Caller applies the remap to
|
|
57
|
+
* item.project (then Pass 3 + root-create attach to the existing root). Does NOT
|
|
58
|
+
* mutate items itself (pure-ish: returns the remap). LLM-bounded (one call per
|
|
59
|
+
* new-root candidate). NO knownRoots → nothing to attach to → empty remap.
|
|
60
|
+
*/
|
|
61
|
+
export declare function recognizeRootsForArc(opts: {
|
|
62
|
+
provider: LLMProvider;
|
|
63
|
+
items: Pass2Item[];
|
|
64
|
+
knownRoots: KnownRoot[];
|
|
65
|
+
}): Promise<RecognizeRootsResult>;
|
|
66
|
+
/** Apply a remap (from recognizeRootsForArc) to items' .project — returns a NEW
|
|
67
|
+
* array (shallow-copies only the rewritten items). Pure / testable. */
|
|
68
|
+
export declare function applyRootRemap(items: Pass2Item[], remap: Array<{
|
|
69
|
+
from: string;
|
|
70
|
+
to: string;
|
|
71
|
+
}>): {
|
|
72
|
+
items: Pass2Item[];
|
|
73
|
+
rewritten: number;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=recognize-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recognize-root.d.ts","sourceRoot":"","sources":["../../../src/middleware/reflect/recognize-root.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAUD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,gBAAgB,CAalB;AAED;wEACwE;AACxE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAAE,EAClB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,MAAM,EAAE,CAUV;AAID,eAAO,MAAM,qBAAqB,wjEA6BM,CAAC;AAczC,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,SAAS,EAAE,EACzB,cAAc,EAAE,SAAS,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAaR;AAID,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,WAAW,EACrB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,SAAS,EAAE,EACzB,cAAc,EAAE,SAAS,EAAE,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAQtI;AAID,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiChC;AAED;wEACwE;AACxE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,GACzC;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAW3C"}
|