@miller-tech/uap 1.0.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/LICENSE +21 -0
- package/README.md +888 -0
- package/dist/analyzers/index.d.ts +3 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +684 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/benchmarks/agents/naive-agent.d.ts +60 -0
- package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/naive-agent.js +144 -0
- package/dist/benchmarks/agents/naive-agent.js.map +1 -0
- package/dist/benchmarks/agents/uap-agent.d.ts +167 -0
- package/dist/benchmarks/agents/uap-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/uap-agent.js +437 -0
- package/dist/benchmarks/agents/uap-agent.js.map +1 -0
- package/dist/benchmarks/benchmark.d.ts +328 -0
- package/dist/benchmarks/benchmark.d.ts.map +1 -0
- package/dist/benchmarks/benchmark.js +112 -0
- package/dist/benchmarks/benchmark.js.map +1 -0
- package/dist/benchmarks/execution-verifier.d.ts +41 -0
- package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
- package/dist/benchmarks/execution-verifier.js +340 -0
- package/dist/benchmarks/execution-verifier.js.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.js +246 -0
- package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
- package/dist/benchmarks/improved-benchmark.d.ts +89 -0
- package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
- package/dist/benchmarks/improved-benchmark.js +585 -0
- package/dist/benchmarks/improved-benchmark.js.map +1 -0
- package/dist/benchmarks/index.d.ts +11 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +11 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/model-integration.d.ts +111 -0
- package/dist/benchmarks/model-integration.d.ts.map +1 -0
- package/dist/benchmarks/model-integration.js +904 -0
- package/dist/benchmarks/model-integration.js.map +1 -0
- package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
- package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
- package/dist/benchmarks/multi-turn-agent.js +254 -0
- package/dist/benchmarks/multi-turn-agent.js.map +1 -0
- package/dist/benchmarks/multi-turn-loop.d.ts +57 -0
- package/dist/benchmarks/multi-turn-loop.d.ts.map +1 -0
- package/dist/benchmarks/multi-turn-loop.js +167 -0
- package/dist/benchmarks/multi-turn-loop.js.map +1 -0
- package/dist/benchmarks/tasks.d.ts +19 -0
- package/dist/benchmarks/tasks.d.ts.map +1 -0
- package/dist/benchmarks/tasks.js +435 -0
- package/dist/benchmarks/tasks.js.map +1 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +546 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/llama-server-optimize.d.ts +18 -0
- package/dist/bin/llama-server-optimize.d.ts.map +1 -0
- package/dist/bin/llama-server-optimize.js +708 -0
- package/dist/bin/llama-server-optimize.js.map +1 -0
- package/dist/bin/policy.d.ts +3 -0
- package/dist/bin/policy.d.ts.map +1 -0
- package/dist/bin/policy.js +143 -0
- package/dist/bin/policy.js.map +1 -0
- package/dist/bin/tool-calls.d.ts +3 -0
- package/dist/bin/tool-calls.d.ts.map +1 -0
- package/dist/bin/tool-calls.js +4 -0
- package/dist/bin/tool-calls.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +2 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/web-browser.d.ts +30 -0
- package/dist/browser/web-browser.d.ts.map +1 -0
- package/dist/browser/web-browser.js +93 -0
- package/dist/browser/web-browser.js.map +1 -0
- package/dist/cli/agent.d.ts +20 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +474 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/analyze.d.ts +7 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +103 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/completion-gates.d.ts +51 -0
- package/dist/cli/completion-gates.d.ts.map +1 -0
- package/dist/cli/completion-gates.js +201 -0
- package/dist/cli/completion-gates.js.map +1 -0
- package/dist/cli/compliance.d.ts +8 -0
- package/dist/cli/compliance.d.ts.map +1 -0
- package/dist/cli/compliance.js +509 -0
- package/dist/cli/compliance.js.map +1 -0
- package/dist/cli/coord.d.ts +7 -0
- package/dist/cli/coord.d.ts.map +1 -0
- package/dist/cli/coord.js +138 -0
- package/dist/cli/coord.js.map +1 -0
- package/dist/cli/dashboard.d.ts +21 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +1508 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/deploy.d.ts +19 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +387 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/droids.d.ts +9 -0
- package/dist/cli/droids.d.ts.map +1 -0
- package/dist/cli/droids.js +227 -0
- package/dist/cli/droids.js.map +1 -0
- package/dist/cli/generate.d.ts +17 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +432 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/hooks.d.ts +9 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +464 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/init.d.ts +12 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +364 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-router.d.ts +16 -0
- package/dist/cli/mcp-router.d.ts.map +1 -0
- package/dist/cli/mcp-router.js +143 -0
- package/dist/cli/mcp-router.js.map +1 -0
- package/dist/cli/memory.d.ts +24 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +885 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model.d.ts +15 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +290 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/patterns.d.ts +26 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +862 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/rtk-validation.d.ts +9 -0
- package/dist/cli/rtk-validation.d.ts.map +1 -0
- package/dist/cli/rtk-validation.js +9 -0
- package/dist/cli/rtk-validation.js.map +1 -0
- package/dist/cli/rtk.d.ts +34 -0
- package/dist/cli/rtk.d.ts.map +1 -0
- package/dist/cli/rtk.js +401 -0
- package/dist/cli/rtk.js.map +1 -0
- package/dist/cli/schema-diff.d.ts +7 -0
- package/dist/cli/schema-diff.d.ts.map +1 -0
- package/dist/cli/schema-diff.js +11 -0
- package/dist/cli/schema-diff.js.map +1 -0
- package/dist/cli/setup-mcp-router.d.ts +8 -0
- package/dist/cli/setup-mcp-router.d.ts.map +1 -0
- package/dist/cli/setup-mcp-router.js +163 -0
- package/dist/cli/setup-mcp-router.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +2 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +806 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/setup.d.ts +15 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +154 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/sync.d.ts +8 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +395 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/task.d.ts +33 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +672 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/tool-calls.d.ts +20 -0
- package/dist/cli/tool-calls.d.ts.map +1 -0
- package/dist/cli/tool-calls.js +605 -0
- package/dist/cli/tool-calls.js.map +1 -0
- package/dist/cli/uap.d.ts +10 -0
- package/dist/cli/uap.d.ts.map +1 -0
- package/dist/cli/uap.js +398 -0
- package/dist/cli/uap.js.map +1 -0
- package/dist/cli/update.d.ts +10 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +300 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/visualize.d.ts +77 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +287 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/cli/worktree.d.ts +9 -0
- package/dist/cli/worktree.d.ts.map +1 -0
- package/dist/cli/worktree.js +213 -0
- package/dist/cli/worktree.js.map +1 -0
- package/dist/coordination/adaptive-patterns.d.ts +65 -0
- package/dist/coordination/adaptive-patterns.d.ts.map +1 -0
- package/dist/coordination/adaptive-patterns.js +108 -0
- package/dist/coordination/adaptive-patterns.js.map +1 -0
- package/dist/coordination/auto-agent.d.ts +82 -0
- package/dist/coordination/auto-agent.d.ts.map +1 -0
- package/dist/coordination/auto-agent.js +145 -0
- package/dist/coordination/auto-agent.js.map +1 -0
- package/dist/coordination/capability-router.d.ts +79 -0
- package/dist/coordination/capability-router.d.ts.map +1 -0
- package/dist/coordination/capability-router.js +334 -0
- package/dist/coordination/capability-router.js.map +1 -0
- package/dist/coordination/database.d.ts +13 -0
- package/dist/coordination/database.d.ts.map +1 -0
- package/dist/coordination/database.js +136 -0
- package/dist/coordination/database.js.map +1 -0
- package/dist/coordination/deploy-batcher.d.ts +122 -0
- package/dist/coordination/deploy-batcher.d.ts.map +1 -0
- package/dist/coordination/deploy-batcher.js +718 -0
- package/dist/coordination/deploy-batcher.js.map +1 -0
- package/dist/coordination/droid-validator.d.ts +59 -0
- package/dist/coordination/droid-validator.d.ts.map +1 -0
- package/dist/coordination/droid-validator.js +142 -0
- package/dist/coordination/droid-validator.js.map +1 -0
- package/dist/coordination/index.d.ts +10 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +10 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/pattern-router.d.ts +50 -0
- package/dist/coordination/pattern-router.d.ts.map +1 -0
- package/dist/coordination/pattern-router.js +118 -0
- package/dist/coordination/pattern-router.js.map +1 -0
- package/dist/coordination/service.d.ts +81 -0
- package/dist/coordination/service.d.ts.map +1 -0
- package/dist/coordination/service.js +619 -0
- package/dist/coordination/service.js.map +1 -0
- package/dist/coordination/worktree-enforcer.d.ts +22 -0
- package/dist/coordination/worktree-enforcer.d.ts.map +1 -0
- package/dist/coordination/worktree-enforcer.js +71 -0
- package/dist/coordination/worktree-enforcer.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +1020 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/template-loader.d.ts +105 -0
- package/dist/generators/template-loader.d.ts.map +1 -0
- package/dist/generators/template-loader.js +291 -0
- package/dist/generators/template-loader.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-router/config/parser.d.ts +9 -0
- package/dist/mcp-router/config/parser.d.ts.map +1 -0
- package/dist/mcp-router/config/parser.js +174 -0
- package/dist/mcp-router/config/parser.js.map +1 -0
- package/dist/mcp-router/executor/client.d.ts +31 -0
- package/dist/mcp-router/executor/client.d.ts.map +1 -0
- package/dist/mcp-router/executor/client.js +189 -0
- package/dist/mcp-router/executor/client.js.map +1 -0
- package/dist/mcp-router/index.d.ts +22 -0
- package/dist/mcp-router/index.d.ts.map +1 -0
- package/dist/mcp-router/index.js +18 -0
- package/dist/mcp-router/index.js.map +1 -0
- package/dist/mcp-router/output-compressor.d.ts +26 -0
- package/dist/mcp-router/output-compressor.d.ts.map +1 -0
- package/dist/mcp-router/output-compressor.js +236 -0
- package/dist/mcp-router/output-compressor.js.map +1 -0
- package/dist/mcp-router/search/fuzzy.d.ts +26 -0
- package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
- package/dist/mcp-router/search/fuzzy.js +94 -0
- package/dist/mcp-router/search/fuzzy.js.map +1 -0
- package/dist/mcp-router/server.d.ts +50 -0
- package/dist/mcp-router/server.d.ts.map +1 -0
- package/dist/mcp-router/server.js +229 -0
- package/dist/mcp-router/server.js.map +1 -0
- package/dist/mcp-router/session-stats.d.ts +37 -0
- package/dist/mcp-router/session-stats.d.ts.map +1 -0
- package/dist/mcp-router/session-stats.js +56 -0
- package/dist/mcp-router/session-stats.js.map +1 -0
- package/dist/mcp-router/tools/discover.d.ts +37 -0
- package/dist/mcp-router/tools/discover.d.ts.map +1 -0
- package/dist/mcp-router/tools/discover.js +65 -0
- package/dist/mcp-router/tools/discover.js.map +1 -0
- package/dist/mcp-router/tools/execute.d.ts +43 -0
- package/dist/mcp-router/tools/execute.d.ts.map +1 -0
- package/dist/mcp-router/tools/execute.js +144 -0
- package/dist/mcp-router/tools/execute.js.map +1 -0
- package/dist/mcp-router/types.d.ts +62 -0
- package/dist/mcp-router/types.d.ts.map +1 -0
- package/dist/mcp-router/types.js +6 -0
- package/dist/mcp-router/types.js.map +1 -0
- package/dist/memory/adaptive-context.d.ts +149 -0
- package/dist/memory/adaptive-context.d.ts.map +1 -0
- package/dist/memory/adaptive-context.js +1095 -0
- package/dist/memory/adaptive-context.js.map +1 -0
- package/dist/memory/agent-scoped-memory.d.ts +67 -0
- package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
- package/dist/memory/agent-scoped-memory.js +126 -0
- package/dist/memory/agent-scoped-memory.js.map +1 -0
- package/dist/memory/ambiguity-detector.d.ts +54 -0
- package/dist/memory/ambiguity-detector.d.ts.map +1 -0
- package/dist/memory/ambiguity-detector.js +401 -0
- package/dist/memory/ambiguity-detector.js.map +1 -0
- package/dist/memory/backends/base.d.ts +18 -0
- package/dist/memory/backends/base.d.ts.map +1 -0
- package/dist/memory/backends/base.js +2 -0
- package/dist/memory/backends/base.js.map +1 -0
- package/dist/memory/backends/factory.d.ts +4 -0
- package/dist/memory/backends/factory.d.ts.map +1 -0
- package/dist/memory/backends/factory.js +53 -0
- package/dist/memory/backends/factory.js.map +1 -0
- package/dist/memory/backends/github.d.ts +27 -0
- package/dist/memory/backends/github.d.ts.map +1 -0
- package/dist/memory/backends/github.js +134 -0
- package/dist/memory/backends/github.js.map +1 -0
- package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
- package/dist/memory/backends/qdrant-cloud.js +167 -0
- package/dist/memory/backends/qdrant-cloud.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +116 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +430 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/context-pruner.d.ts +55 -0
- package/dist/memory/context-pruner.d.ts.map +1 -0
- package/dist/memory/context-pruner.js +85 -0
- package/dist/memory/context-pruner.js.map +1 -0
- package/dist/memory/correction-propagator.d.ts +44 -0
- package/dist/memory/correction-propagator.d.ts.map +1 -0
- package/dist/memory/correction-propagator.js +156 -0
- package/dist/memory/correction-propagator.js.map +1 -0
- package/dist/memory/daily-log.d.ts +67 -0
- package/dist/memory/daily-log.d.ts.map +1 -0
- package/dist/memory/daily-log.js +143 -0
- package/dist/memory/daily-log.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +112 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +908 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +172 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +780 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/generic-uap-patterns.d.ts +7 -0
- package/dist/memory/generic-uap-patterns.d.ts.map +1 -0
- package/dist/memory/generic-uap-patterns.js +43 -0
- package/dist/memory/generic-uap-patterns.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +141 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +485 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/knowledge-graph.d.ts +98 -0
- package/dist/memory/knowledge-graph.d.ts.map +1 -0
- package/dist/memory/knowledge-graph.js +275 -0
- package/dist/memory/knowledge-graph.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +124 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +514 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-maintenance.d.ts +39 -0
- package/dist/memory/memory-maintenance.d.ts.map +1 -0
- package/dist/memory/memory-maintenance.js +336 -0
- package/dist/memory/memory-maintenance.js.map +1 -0
- package/dist/memory/model-router.d.ts +105 -0
- package/dist/memory/model-router.d.ts.map +1 -0
- package/dist/memory/model-router.js +474 -0
- package/dist/memory/model-router.js.map +1 -0
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +430 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/predictive-memory.d.ts +79 -0
- package/dist/memory/predictive-memory.d.ts.map +1 -0
- package/dist/memory/predictive-memory.js +294 -0
- package/dist/memory/predictive-memory.js.map +1 -0
- package/dist/memory/prepopulate.d.ts +76 -0
- package/dist/memory/prepopulate.d.ts.map +1 -0
- package/dist/memory/prepopulate.js +832 -0
- package/dist/memory/prepopulate.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +359 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/serverless-qdrant.d.ts +102 -0
- package/dist/memory/serverless-qdrant.d.ts.map +1 -0
- package/dist/memory/serverless-qdrant.js +369 -0
- package/dist/memory/serverless-qdrant.js.map +1 -0
- package/dist/memory/short-term/factory.d.ts +26 -0
- package/dist/memory/short-term/factory.d.ts.map +1 -0
- package/dist/memory/short-term/factory.js +28 -0
- package/dist/memory/short-term/factory.js.map +1 -0
- package/dist/memory/short-term/indexeddb.d.ts +25 -0
- package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
- package/dist/memory/short-term/indexeddb.js +64 -0
- package/dist/memory/short-term/indexeddb.js.map +1 -0
- package/dist/memory/short-term/schema.d.ts +6 -0
- package/dist/memory/short-term/schema.d.ts.map +1 -0
- package/dist/memory/short-term/schema.js +141 -0
- package/dist/memory/short-term/schema.js.map +1 -0
- package/dist/memory/short-term/sqlite.d.ts +64 -0
- package/dist/memory/short-term/sqlite.d.ts.map +1 -0
- package/dist/memory/short-term/sqlite.js +274 -0
- package/dist/memory/short-term/sqlite.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +111 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +457 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +40 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +342 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
- package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
- package/dist/memory/terminal-bench-knowledge.js +622 -0
- package/dist/memory/terminal-bench-knowledge.js.map +1 -0
- package/dist/memory/write-gate.d.ts +39 -0
- package/dist/memory/write-gate.d.ts.map +1 -0
- package/dist/memory/write-gate.js +190 -0
- package/dist/memory/write-gate.js.map +1 -0
- package/dist/models/api-client.d.ts +46 -0
- package/dist/models/api-client.d.ts.map +1 -0
- package/dist/models/api-client.js +182 -0
- package/dist/models/api-client.js.map +1 -0
- package/dist/models/execution-profiles.d.ts +64 -0
- package/dist/models/execution-profiles.d.ts.map +1 -0
- package/dist/models/execution-profiles.js +403 -0
- package/dist/models/execution-profiles.js.map +1 -0
- package/dist/models/executor.d.ts +130 -0
- package/dist/models/executor.d.ts.map +1 -0
- package/dist/models/executor.js +382 -0
- package/dist/models/executor.js.map +1 -0
- package/dist/models/index.d.ts +19 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +23 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/plan-validator.d.ts +37 -0
- package/dist/models/plan-validator.d.ts.map +1 -0
- package/dist/models/plan-validator.js +179 -0
- package/dist/models/plan-validator.js.map +1 -0
- package/dist/models/planner.d.ts +73 -0
- package/dist/models/planner.d.ts.map +1 -0
- package/dist/models/planner.js +375 -0
- package/dist/models/planner.js.map +1 -0
- package/dist/models/router.d.ts +96 -0
- package/dist/models/router.d.ts.map +1 -0
- package/dist/models/router.js +523 -0
- package/dist/models/router.js.map +1 -0
- package/dist/models/types.d.ts +370 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +232 -0
- package/dist/models/types.js.map +1 -0
- package/dist/models/unified-router.d.ts +152 -0
- package/dist/models/unified-router.d.ts.map +1 -0
- package/dist/models/unified-router.js +313 -0
- package/dist/models/unified-router.js.map +1 -0
- package/dist/policies/convert-policy-to-claude.d.ts +3 -0
- package/dist/policies/convert-policy-to-claude.d.ts.map +1 -0
- package/dist/policies/convert-policy-to-claude.js +87 -0
- package/dist/policies/convert-policy-to-claude.js.map +1 -0
- package/dist/policies/database-manager.d.ts +27 -0
- package/dist/policies/database-manager.d.ts.map +1 -0
- package/dist/policies/database-manager.js +198 -0
- package/dist/policies/database-manager.js.map +1 -0
- package/dist/policies/enforced-tool-router.d.ts +53 -0
- package/dist/policies/enforced-tool-router.d.ts.map +1 -0
- package/dist/policies/enforced-tool-router.js +80 -0
- package/dist/policies/enforced-tool-router.js.map +1 -0
- package/dist/policies/index.d.ts +10 -0
- package/dist/policies/index.d.ts.map +1 -0
- package/dist/policies/index.js +8 -0
- package/dist/policies/index.js.map +1 -0
- package/dist/policies/policy-gate.d.ts +59 -0
- package/dist/policies/policy-gate.d.ts.map +1 -0
- package/dist/policies/policy-gate.js +171 -0
- package/dist/policies/policy-gate.js.map +1 -0
- package/dist/policies/policy-memory.d.ts +18 -0
- package/dist/policies/policy-memory.d.ts.map +1 -0
- package/dist/policies/policy-memory.js +126 -0
- package/dist/policies/policy-memory.js.map +1 -0
- package/dist/policies/policy-tools.d.ts +11 -0
- package/dist/policies/policy-tools.d.ts.map +1 -0
- package/dist/policies/policy-tools.js +66 -0
- package/dist/policies/policy-tools.js.map +1 -0
- package/dist/policies/schemas/policy.d.ts +69 -0
- package/dist/policies/schemas/policy.d.ts.map +1 -0
- package/dist/policies/schemas/policy.js +31 -0
- package/dist/policies/schemas/policy.js.map +1 -0
- package/dist/tasks/coordination.d.ts +83 -0
- package/dist/tasks/coordination.d.ts.map +1 -0
- package/dist/tasks/coordination.js +291 -0
- package/dist/tasks/coordination.js.map +1 -0
- package/dist/tasks/database.d.ts +19 -0
- package/dist/tasks/database.d.ts.map +1 -0
- package/dist/tasks/database.js +149 -0
- package/dist/tasks/database.js.map +1 -0
- package/dist/tasks/decoder-gate.d.ts +64 -0
- package/dist/tasks/decoder-gate.d.ts.map +1 -0
- package/dist/tasks/decoder-gate.js +268 -0
- package/dist/tasks/decoder-gate.js.map +1 -0
- package/dist/tasks/index.d.ts +6 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +6 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/service.d.ts +40 -0
- package/dist/tasks/service.d.ts.map +1 -0
- package/dist/tasks/service.js +671 -0
- package/dist/tasks/service.js.map +1 -0
- package/dist/tasks/types.d.ts +238 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +74 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +2 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/session-telemetry.d.ts +56 -0
- package/dist/telemetry/session-telemetry.d.ts.map +1 -0
- package/dist/telemetry/session-telemetry.js +807 -0
- package/dist/telemetry/session-telemetry.js.map +1 -0
- package/dist/types/analysis.d.ts +82 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/config.d.ts +3324 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +418 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coordination.d.ts +240 -0
- package/dist/types/coordination.d.ts.map +1 -0
- package/dist/types/coordination.js +43 -0
- package/dist/types/coordination.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/uap-droids-strict.d.ts +59 -0
- package/dist/uap-droids-strict.d.ts.map +1 -0
- package/dist/uap-droids-strict.js +200 -0
- package/dist/uap-droids-strict.js.map +1 -0
- package/dist/utils/config-manager.d.ts +30 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +41 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/fetch-with-retry.d.ts +5 -0
- package/dist/utils/fetch-with-retry.d.ts.map +1 -0
- package/dist/utils/fetch-with-retry.js +61 -0
- package/dist/utils/fetch-with-retry.js.map +1 -0
- package/dist/utils/merge-claude-md.d.ts +28 -0
- package/dist/utils/merge-claude-md.d.ts.map +1 -0
- package/dist/utils/merge-claude-md.js +342 -0
- package/dist/utils/merge-claude-md.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +58 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +100 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +37 -0
- package/dist/utils/string-similarity.d.ts.map +1 -0
- package/dist/utils/string-similarity.js +114 -0
- package/dist/utils/string-similarity.js.map +1 -0
- package/dist/utils/validate-json.d.ts +51 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +94 -0
- package/dist/utils/validate-json.js.map +1 -0
- package/docs/INDEX.md +66 -0
- package/docs/architecture/MULTI_MODEL.md +224 -0
- package/docs/architecture/SYSTEM_ANALYSIS.md +1117 -0
- package/docs/architecture/UAP_COMPLIANCE.md +217 -0
- package/docs/architecture/UAP_PROTOCOL.md +339 -0
- package/docs/architecture/UAP_STRICT_DROIDS.md +172 -0
- package/docs/archive/BALLS_MODE_SELF_ANALYSIS.md +260 -0
- package/docs/archive/FAILING_TASKS_SOLUTION_PLAN.md +668 -0
- package/docs/archive/JINJA2-SYSTEM-MESSAGE-FIX.md +209 -0
- package/docs/archive/NPM-PUBLISH-V0.9.1.md +240 -0
- package/docs/archive/OPTIMIZATION_OPTIONS.md +334 -0
- package/docs/archive/SETUP_IMPROVEMENTS.md +213 -0
- package/docs/archive/UAP_GENERIC_OPTIMIZATION_PLAN.md +270 -0
- package/docs/archive/UAP_V103_PATTERN_DESIGN.md +315 -0
- package/docs/archive/UAP_V104_COMPLIANCE_DESIGN.md +223 -0
- package/docs/archive/changelog/2026-03-10_uap-100-compliance.md +77 -0
- package/docs/archive/changelog/2026-03-10_uap-full-system-verification.md +109 -0
- package/docs/benchmarks/ACCURACY_ANALYSIS.md +471 -0
- package/docs/benchmarks/TOKEN_OPTIMIZATION.md +572 -0
- package/docs/benchmarks/VALIDATION_PLAN.md +568 -0
- package/docs/benchmarks/VALIDATION_RESULTS.md +161 -0
- package/docs/deployment/DEPLOYMENT.md +895 -0
- package/docs/deployment/DEPLOYMENT_STRATEGIES.md +518 -0
- package/docs/deployment/DEPLOY_BATCHER_ANALYSIS.md +856 -0
- package/docs/deployment/DEPLOY_BATCHING.md +273 -0
- package/docs/deployment/DEPLOY_BUCKETING_ANALYSIS.md +420 -0
- package/docs/deployment/QWEN35_LLAMA_CPP.md +265 -0
- package/docs/getting-started/INTEGRATION.md +449 -0
- package/docs/getting-started/OVERVIEW.md +344 -0
- package/docs/getting-started/SETUP.md +203 -0
- package/docs/integrations/MCP_ROUTER_SETUP.md +445 -0
- package/docs/integrations/RTK_INTEGRATION.md +468 -0
- package/docs/operations/TROUBLESHOOTING.md +660 -0
- package/docs/reference/API_REFERENCE.md +903 -0
- package/docs/reference/FEATURES.md +472 -0
- package/docs/reference/HARNESS-MATRIX.md +318 -0
- package/docs/reference/UAP_CLI_REFERENCE.md +600 -0
- package/docs/research/BEHAVIORAL_PATTERNS.md +228 -0
- package/docs/research/DOMAIN_STRATEGIES.md +316 -0
- package/docs/research/MEMORY_SYSTEMS_COMPARISON.md +812 -0
- package/docs/research/PATTERN_ANALYSIS_2026-01-18.md +436 -0
- package/docs/research/PERFORMANCE_ANALYSIS_2026-01-18.md +209 -0
- package/docs/research/PERFORMANCE_TEST_PLAN.md +383 -0
- package/docs/research/TERMINAL_BENCH_LEARNINGS.md +217 -0
- package/package.json +113 -0
- package/scripts/README.md +161 -0
- package/templates/CLAUDE.template.md +10 -0
- package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
- package/templates/CLAUDE_CODING.template.md +127 -0
- package/templates/CLAUDE_DROIDS.template.md +109 -0
- package/templates/CLAUDE_MEMORY.template.md +131 -0
- package/templates/CLAUDE_WORKFLOWS.template.md +139 -0
- package/templates/PROJECT.template.md +209 -0
- package/templates/SCHEMA.md +57 -0
- package/templates/archive/CLAUDE.template.root-v6.md +534 -0
- package/templates/archive/CLAUDE.template.v6.md +534 -0
- package/templates/hooks/forgecode/pre-compact.sh +68 -0
- package/templates/hooks/forgecode/session-start.sh +169 -0
- package/templates/hooks/forgecode.plugin.sh +128 -0
- package/templates/hooks/pre-compact.sh +74 -0
- package/templates/hooks/session-start.sh +366 -0
- package/tools/agents/README.md +224 -0
- package/tools/agents/UAP/README.md +386 -0
- package/tools/agents/UAP/__init__.py +9 -0
- package/tools/agents/UAP/cli.py +901 -0
- package/tools/agents/UAP/compliance_verify.sh +108 -0
- package/tools/agents/UAP/full_verification.sh +126 -0
- package/tools/agents/UAP/version.py +32 -0
- package/tools/agents/benchmarks/benchmark_memory_systems.py +730 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
- package/tools/agents/config/chat_template.jinja +77 -0
- package/tools/agents/config/tool-call-schema.json +19 -0
- package/tools/agents/config/tool-call.gbnf +58 -0
- package/tools/agents/docker/Dockerfile.python +52 -0
- package/tools/agents/docker/Dockerfile.ubuntu +55 -0
- package/tools/agents/docker-compose.qdrant.yml +24 -0
- package/tools/agents/install-opencode-local.sh.j2 +135 -0
- package/tools/agents/migrations/apply.py +256 -0
- package/tools/agents/opencode_uap_agent.py +1505 -0
- package/tools/agents/plugin/README.md +91 -0
- package/tools/agents/plugin/index.ts +46 -0
- package/tools/agents/plugin/pre-compact.sh +68 -0
- package/tools/agents/plugin/session-start.sh +175 -0
- package/tools/agents/plugin/uap-commands.ts +45 -0
- package/tools/agents/plugin/uap-droids.ts +54 -0
- package/tools/agents/plugin/uap-patterns.ts +54 -0
- package/tools/agents/plugin/uap-skills.ts +52 -0
- package/tools/agents/plugins/uap-enforce.ts +314 -0
- package/tools/agents/scripts/__pycache__/tool_call_wrapper.cpython-313.pyc +0 -0
- package/tools/agents/scripts/chat_template_verifier.py +343 -0
- package/tools/agents/scripts/fix-qwen-template.js +38 -0
- package/tools/agents/scripts/fix_qwen_chat_template.py +316 -0
- package/tools/agents/scripts/generate_lora_training_data.py +412 -0
- package/tools/agents/scripts/init_qdrant.py +151 -0
- package/tools/agents/scripts/memory_migration.py +560 -0
- package/tools/agents/scripts/migrate_memory_to_qdrant.py +110 -0
- package/tools/agents/scripts/prepare_lora.sh +512 -0
- package/tools/agents/scripts/query_memory.py +200 -0
- package/tools/agents/scripts/qwen-tool-call-test.js +38 -0
- package/tools/agents/scripts/qwen-tool-call-wrapper.js +38 -0
- package/tools/agents/scripts/qwen_tool_call_test.py +464 -0
- package/tools/agents/scripts/qwen_tool_call_wrapper.py +686 -0
- package/tools/agents/scripts/start-services.sh +96 -0
- package/tools/agents/scripts/tool-choice-proxy.cjs +296 -0
- package/tools/agents/scripts/tool_call_test.py +656 -0
- package/tools/agents/scripts/tool_call_wrapper.py +799 -0
- package/tools/agents/tests/test_uap_compliance.py +257 -0
- package/tools/agents/uap_agent.py +122 -0
- package/tools/agents/uap_agent_install.sh +12 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Compression Module for UAP
|
|
3
|
+
*
|
|
4
|
+
* Implements semantic compression to reduce token usage while preserving meaning.
|
|
5
|
+
* Based on Acon (Agent Context Optimization) and AgentCompress research.
|
|
6
|
+
*/
|
|
7
|
+
import { jaccardSimilarity } from '../utils/string-similarity.js';
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
maxTokens: 800,
|
|
10
|
+
minSemanticPreservation: 0.85,
|
|
11
|
+
compressionLevel: 'medium',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Estimate token count using improved heuristics for mixed code/prose
|
|
15
|
+
* More accurate than simple length/4: accounts for whitespace splits,
|
|
16
|
+
* special characters, camelCase, and numeric tokens.
|
|
17
|
+
*/
|
|
18
|
+
export function estimateTokens(text) {
|
|
19
|
+
if (!text || text.length === 0)
|
|
20
|
+
return 0;
|
|
21
|
+
// Split by whitespace for base word count
|
|
22
|
+
const words = text.split(/\s+/).filter((w) => w.length > 0);
|
|
23
|
+
// Special characters that typically become separate tokens
|
|
24
|
+
const specialChars = (text.match(/[{}()\[\]<>:;,."'`@#$%^&*+=|\\/?!~-]/g) || []).length;
|
|
25
|
+
// Code tokens: camelCase/snake_case boundaries add sub-word tokens
|
|
26
|
+
const codeTokens = (text.match(/[a-z][A-Z]|_[a-z]/g) || []).length;
|
|
27
|
+
// Numeric sequences often tokenize separately
|
|
28
|
+
const numbers = (text.match(/\d+/g) || []).length;
|
|
29
|
+
// Average English word is ~1.3 tokens, code identifiers ~1.5
|
|
30
|
+
const baseTokens = words.length * 1.3;
|
|
31
|
+
const specialTokens = specialChars * 0.5;
|
|
32
|
+
const extraCodeTokens = codeTokens * 0.3;
|
|
33
|
+
const numberTokens = numbers * 0.5;
|
|
34
|
+
return Math.ceil(baseTokens + specialTokens + extraCodeTokens + numberTokens);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compress a single memory entry
|
|
38
|
+
*/
|
|
39
|
+
export function compressMemoryEntry(content, config = {}) {
|
|
40
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
41
|
+
const originalTokens = estimateTokens(content);
|
|
42
|
+
if (originalTokens <= cfg.maxTokens / 4) {
|
|
43
|
+
return {
|
|
44
|
+
original: content,
|
|
45
|
+
compressed: content,
|
|
46
|
+
originalTokens,
|
|
47
|
+
compressedTokens: originalTokens,
|
|
48
|
+
tokenReduction: 0,
|
|
49
|
+
preservedSemantics: 1.0,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
let compressed = content;
|
|
53
|
+
// Level 1: Remove redundant whitespace and formatting
|
|
54
|
+
compressed = compressed.replace(/\s+/g, ' ').trim();
|
|
55
|
+
compressed = compressed.replace(/\n{3,}/g, '\n\n');
|
|
56
|
+
// Level 2: Remove common filler phrases
|
|
57
|
+
if (cfg.compressionLevel !== 'light') {
|
|
58
|
+
const fillerPatterns = [
|
|
59
|
+
/\b(basically|essentially|actually|really|very|quite|somewhat|rather)\b/gi,
|
|
60
|
+
/\b(in order to)\b/gi,
|
|
61
|
+
/\b(it is worth noting that|it should be noted that)\b/gi,
|
|
62
|
+
/\b(as a matter of fact|in fact)\b/gi,
|
|
63
|
+
/\b(at the end of the day)\b/gi,
|
|
64
|
+
/\b(the fact that)\b/gi,
|
|
65
|
+
/\b(in this case|in that case)\b/gi,
|
|
66
|
+
];
|
|
67
|
+
for (const pattern of fillerPatterns) {
|
|
68
|
+
compressed = compressed.replace(pattern, '');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Level 3: Aggressive - truncate to key sentences
|
|
72
|
+
if (cfg.compressionLevel === 'aggressive') {
|
|
73
|
+
const sentences = compressed.split(/(?<=[.!?])\s+/);
|
|
74
|
+
const maxSentences = Math.max(3, Math.ceil(sentences.length * 0.4));
|
|
75
|
+
// Keep first sentence (context), middle sentences (key info), last sentence (conclusion)
|
|
76
|
+
if (sentences.length > maxSentences) {
|
|
77
|
+
const first = sentences.slice(0, 1);
|
|
78
|
+
const middle = sentences.slice(1, -1).slice(0, maxSentences - 2);
|
|
79
|
+
const last = sentences.slice(-1);
|
|
80
|
+
compressed = [...first, ...middle, ...last].join(' ');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Clean up artifacts
|
|
84
|
+
compressed = compressed.replace(/\s{2,}/g, ' ').trim();
|
|
85
|
+
const compressedTokens = estimateTokens(compressed);
|
|
86
|
+
const tokenReduction = 1 - compressedTokens / originalTokens;
|
|
87
|
+
// Estimate semantic preservation (based on compression ratio - rough heuristic)
|
|
88
|
+
const preservedSemantics = Math.max(0.7, 1 - tokenReduction * 0.3);
|
|
89
|
+
return {
|
|
90
|
+
original: content,
|
|
91
|
+
compressed,
|
|
92
|
+
originalTokens,
|
|
93
|
+
compressedTokens,
|
|
94
|
+
tokenReduction,
|
|
95
|
+
preservedSemantics,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Compress multiple memories into a consolidated context
|
|
100
|
+
*/
|
|
101
|
+
export function compressMemoryBatch(memories, config = {}) {
|
|
102
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
103
|
+
// Sort by importance (descending)
|
|
104
|
+
const sorted = [...memories].sort((a, b) => (b.importance || 5) - (a.importance || 5));
|
|
105
|
+
// Group by type for structured output
|
|
106
|
+
const grouped = {};
|
|
107
|
+
for (const mem of sorted) {
|
|
108
|
+
const type = mem.type || 'general';
|
|
109
|
+
if (!grouped[type])
|
|
110
|
+
grouped[type] = [];
|
|
111
|
+
grouped[type].push(mem.content);
|
|
112
|
+
}
|
|
113
|
+
// Build consolidated context
|
|
114
|
+
const sections = [];
|
|
115
|
+
const typeOrder = ['goal', 'action', 'observation', 'thought'];
|
|
116
|
+
for (const type of typeOrder) {
|
|
117
|
+
if (grouped[type] && grouped[type].length > 0) {
|
|
118
|
+
const compressed = grouped[type].map((c) => compressMemoryEntry(c, cfg).compressed);
|
|
119
|
+
sections.push(`[${type.toUpperCase()}]\n${compressed.join('\n')}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Add remaining types
|
|
123
|
+
for (const type of Object.keys(grouped)) {
|
|
124
|
+
if (!typeOrder.includes(type)) {
|
|
125
|
+
const compressed = grouped[type].map((c) => compressMemoryEntry(c, cfg).compressed);
|
|
126
|
+
sections.push(`[${type.toUpperCase()}]\n${compressed.join('\n')}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const original = memories.map((m) => m.content).join('\n');
|
|
130
|
+
const compressed = sections.join('\n\n');
|
|
131
|
+
const originalTokens = estimateTokens(original);
|
|
132
|
+
const compressedTokens = estimateTokens(compressed);
|
|
133
|
+
return {
|
|
134
|
+
original,
|
|
135
|
+
compressed,
|
|
136
|
+
originalTokens,
|
|
137
|
+
compressedTokens,
|
|
138
|
+
tokenReduction: 1 - compressedTokens / originalTokens,
|
|
139
|
+
preservedSemantics: 0.9, // Batch compression preserves structure
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Summarize old memories into a single compressed entry
|
|
144
|
+
*/
|
|
145
|
+
export function summarizeMemories(memories, maxOutputTokens = 500) {
|
|
146
|
+
if (memories.length === 0)
|
|
147
|
+
return '';
|
|
148
|
+
// Group by type
|
|
149
|
+
const byType = {};
|
|
150
|
+
for (const mem of memories) {
|
|
151
|
+
if (!byType[mem.type])
|
|
152
|
+
byType[mem.type] = [];
|
|
153
|
+
byType[mem.type].push(mem.content);
|
|
154
|
+
}
|
|
155
|
+
// Create summary sections
|
|
156
|
+
const summaryParts = [];
|
|
157
|
+
for (const [type, contents] of Object.entries(byType)) {
|
|
158
|
+
// Deduplicate similar content
|
|
159
|
+
const unique = deduplicateContent(contents);
|
|
160
|
+
// Compress each unique entry
|
|
161
|
+
const compressed = unique.map((c) => {
|
|
162
|
+
const result = compressMemoryEntry(c, { compressionLevel: 'aggressive' });
|
|
163
|
+
return result.compressed;
|
|
164
|
+
});
|
|
165
|
+
// Limit to most important entries
|
|
166
|
+
const maxPerType = Math.max(2, Math.floor(maxOutputTokens / (Object.keys(byType).length * 50)));
|
|
167
|
+
const limited = compressed.slice(0, maxPerType);
|
|
168
|
+
if (limited.length > 0) {
|
|
169
|
+
summaryParts.push(`${type}: ${limited.join('; ')}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const dateRange = getDateRange(memories.map((m) => m.timestamp));
|
|
173
|
+
const header = `[Summary ${dateRange}]`;
|
|
174
|
+
return `${header}\n${summaryParts.join('\n')}`;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Deduplicate content using simple similarity check
|
|
178
|
+
*/
|
|
179
|
+
function deduplicateContent(contents, threshold = 0.8) {
|
|
180
|
+
const unique = [];
|
|
181
|
+
for (const content of contents) {
|
|
182
|
+
const normalizedNew = content.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
183
|
+
let isDuplicate = false;
|
|
184
|
+
for (const existing of unique) {
|
|
185
|
+
const normalizedExisting = existing.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
186
|
+
const similarity = jaccardSimilarity(normalizedNew, normalizedExisting);
|
|
187
|
+
if (similarity > threshold) {
|
|
188
|
+
isDuplicate = true;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (!isDuplicate) {
|
|
193
|
+
unique.push(content);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return unique;
|
|
197
|
+
}
|
|
198
|
+
// jaccardSimilarity imported from ../utils/string-similarity.js
|
|
199
|
+
/**
|
|
200
|
+
* Get date range string
|
|
201
|
+
*/
|
|
202
|
+
function getDateRange(timestamps) {
|
|
203
|
+
if (timestamps.length === 0)
|
|
204
|
+
return 'unknown';
|
|
205
|
+
const dates = timestamps.map((t) => new Date(t)).filter((d) => !isNaN(d.getTime()));
|
|
206
|
+
if (dates.length === 0)
|
|
207
|
+
return 'unknown';
|
|
208
|
+
const min = new Date(Math.min(...dates.map((d) => d.getTime())));
|
|
209
|
+
const max = new Date(Math.max(...dates.map((d) => d.getTime())));
|
|
210
|
+
const formatDate = (d) => d.toISOString().split('T')[0];
|
|
211
|
+
if (formatDate(min) === formatDate(max)) {
|
|
212
|
+
return formatDate(min);
|
|
213
|
+
}
|
|
214
|
+
return `${formatDate(min)} to ${formatDate(max)}`;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Smart truncation using head+tail split.
|
|
218
|
+
* Preserves both initial context (setup, config) and final output (errors, results).
|
|
219
|
+
* Head gets 60%, tail gets 40% of the allowed line budget.
|
|
220
|
+
*/
|
|
221
|
+
export function smartTruncate(content, maxChars) {
|
|
222
|
+
if (content.length <= maxChars)
|
|
223
|
+
return content;
|
|
224
|
+
const lines = content.split('\n');
|
|
225
|
+
if (lines.length <= 4) {
|
|
226
|
+
// Too few lines for head+tail split, just char-truncate
|
|
227
|
+
return content.slice(0, maxChars) + '\n... [truncated]';
|
|
228
|
+
}
|
|
229
|
+
const ratio = Math.min(1, maxChars / content.length);
|
|
230
|
+
const totalLines = Math.max(2, Math.floor(lines.length * ratio));
|
|
231
|
+
const headLines = Math.max(1, Math.ceil(totalLines * 0.6));
|
|
232
|
+
const tailLines = Math.max(1, totalLines - headLines);
|
|
233
|
+
// Avoid overlap when head + tail >= total lines
|
|
234
|
+
if (headLines + tailLines >= lines.length) {
|
|
235
|
+
return content.slice(0, maxChars) + '\n... [truncated]';
|
|
236
|
+
}
|
|
237
|
+
const headPart = lines.slice(0, headLines);
|
|
238
|
+
const tailPart = lines.slice(-tailLines);
|
|
239
|
+
const omitted = lines.length - headLines - tailLines;
|
|
240
|
+
return [
|
|
241
|
+
...headPart,
|
|
242
|
+
`\n... [${omitted} lines truncated — showing first ${headLines} + last ${tailLines} lines] ...\n`,
|
|
243
|
+
...tailPart,
|
|
244
|
+
].join('\n');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Context budget manager
|
|
248
|
+
*/
|
|
249
|
+
export class ContextBudget {
|
|
250
|
+
maxTokens;
|
|
251
|
+
usedTokens = 0;
|
|
252
|
+
sections = new Map();
|
|
253
|
+
constructor(maxTokens = 12000) {
|
|
254
|
+
this.maxTokens = maxTokens;
|
|
255
|
+
}
|
|
256
|
+
allocate(section, content) {
|
|
257
|
+
const tokens = estimateTokens(content);
|
|
258
|
+
const available = this.maxTokens - this.usedTokens;
|
|
259
|
+
if (tokens <= available) {
|
|
260
|
+
this.usedTokens += tokens;
|
|
261
|
+
this.sections.set(section, tokens);
|
|
262
|
+
return { content, tokens, truncated: false };
|
|
263
|
+
}
|
|
264
|
+
// Need to truncate - use head+tail split to preserve error context
|
|
265
|
+
const targetTokens = Math.floor(available * 0.9);
|
|
266
|
+
const targetChars = targetTokens * 4;
|
|
267
|
+
const truncated = smartTruncate(content, targetChars);
|
|
268
|
+
const actualTokens = estimateTokens(truncated);
|
|
269
|
+
this.usedTokens += actualTokens;
|
|
270
|
+
this.sections.set(section, actualTokens);
|
|
271
|
+
return { content: truncated, tokens: actualTokens, truncated: true };
|
|
272
|
+
}
|
|
273
|
+
remaining() {
|
|
274
|
+
return this.maxTokens - this.usedTokens;
|
|
275
|
+
}
|
|
276
|
+
usage() {
|
|
277
|
+
return {
|
|
278
|
+
total: this.maxTokens,
|
|
279
|
+
used: this.usedTokens,
|
|
280
|
+
remaining: this.remaining(),
|
|
281
|
+
sections: Object.fromEntries(this.sections),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
reset() {
|
|
285
|
+
this.usedTokens = 0;
|
|
286
|
+
this.sections.clear();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Dynamic Compressor - adjusts compression level based on available context budget.
|
|
291
|
+
*
|
|
292
|
+
* Tiers:
|
|
293
|
+
* - light (budget >70% remaining): remove whitespace/comments only
|
|
294
|
+
* - medium (30-70%): also summarize verbose sections
|
|
295
|
+
* - aggressive (<30%): extract only key facts
|
|
296
|
+
*/
|
|
297
|
+
export class DynamicCompressor {
|
|
298
|
+
/**
|
|
299
|
+
* Determine compression tier from budget ratio.
|
|
300
|
+
*/
|
|
301
|
+
determineTier(budgetRemaining, budgetTotal) {
|
|
302
|
+
if (budgetTotal <= 0)
|
|
303
|
+
return 'aggressive';
|
|
304
|
+
const ratio = budgetRemaining / budgetTotal;
|
|
305
|
+
if (ratio > 0.7)
|
|
306
|
+
return 'light';
|
|
307
|
+
if (ratio >= 0.3)
|
|
308
|
+
return 'medium';
|
|
309
|
+
return 'aggressive';
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Light compression: strip whitespace and comment lines only.
|
|
313
|
+
*/
|
|
314
|
+
compressLight(content) {
|
|
315
|
+
let result = content;
|
|
316
|
+
// Remove single-line comments (// ...)
|
|
317
|
+
result = result.replace(/\/\/[^\n]*/g, '');
|
|
318
|
+
// Remove multi-line comments (/* ... */)
|
|
319
|
+
result = result.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
320
|
+
// Remove hash comments (# ...)
|
|
321
|
+
result = result.replace(/^#[^\n]*/gm, '');
|
|
322
|
+
// Collapse redundant whitespace
|
|
323
|
+
result = result.replace(/\n{3,}/g, '\n\n');
|
|
324
|
+
result = result.replace(/[ \t]+/g, ' ');
|
|
325
|
+
return result.trim();
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Medium compression: light + summarize verbose sections by removing filler.
|
|
329
|
+
*/
|
|
330
|
+
compressMedium(content) {
|
|
331
|
+
let result = this.compressLight(content);
|
|
332
|
+
// Remove filler phrases
|
|
333
|
+
const fillerPatterns = [
|
|
334
|
+
/\b(basically|essentially|actually|really|very|quite|somewhat|rather)\b/gi,
|
|
335
|
+
/\b(in order to)\b/gi,
|
|
336
|
+
/\b(it is worth noting that|it should be noted that)\b/gi,
|
|
337
|
+
/\b(as a matter of fact|in fact)\b/gi,
|
|
338
|
+
/\b(at the end of the day)\b/gi,
|
|
339
|
+
/\b(the fact that)\b/gi,
|
|
340
|
+
/\b(in this case|in that case)\b/gi,
|
|
341
|
+
/\b(please note that|note that)\b/gi,
|
|
342
|
+
];
|
|
343
|
+
for (const pattern of fillerPatterns) {
|
|
344
|
+
result = result.replace(pattern, '');
|
|
345
|
+
}
|
|
346
|
+
// Remove filler sentences
|
|
347
|
+
const sentences = result.split(/(?<=[.!?])\s+/);
|
|
348
|
+
const kept = sentences.filter((s) => {
|
|
349
|
+
const lower = s.toLowerCase().trim();
|
|
350
|
+
if (lower.length < 10)
|
|
351
|
+
return false;
|
|
352
|
+
if (/^(let me|i will|i'll|okay|alright|sure|thanks|thank you)/i.test(lower))
|
|
353
|
+
return false;
|
|
354
|
+
if (/^(as mentioned|as noted|as stated|as discussed)/i.test(lower))
|
|
355
|
+
return false;
|
|
356
|
+
if (/^(in conclusion|to summarize|in summary|overall)/i.test(lower))
|
|
357
|
+
return false;
|
|
358
|
+
return true;
|
|
359
|
+
});
|
|
360
|
+
result = kept.join(' ');
|
|
361
|
+
result = result.replace(/\s{2,}/g, ' ').trim();
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Aggressive compression: extract only key facts (entities, decisions, actions).
|
|
366
|
+
*/
|
|
367
|
+
compressAggressive(content) {
|
|
368
|
+
const mediumResult = this.compressMedium(content);
|
|
369
|
+
const sentences = mediumResult.split(/(?<=[.!?])\s+/).filter((s) => s.trim().length > 10);
|
|
370
|
+
// Score each sentence and keep only high-value ones
|
|
371
|
+
const scored = sentences.map((s) => {
|
|
372
|
+
let score = 0;
|
|
373
|
+
// Boost for technical content
|
|
374
|
+
if (/`[^`]+`|"[^"]+"|'[^']+'/.test(s))
|
|
375
|
+
score += 2;
|
|
376
|
+
if (/\.(ts|js|py|sh|json|yaml|md)\b|\/[\w/]+/.test(s))
|
|
377
|
+
score += 2;
|
|
378
|
+
// Boost for actionable/important language
|
|
379
|
+
if (/^(use|run|execute|call|apply|implement|add|remove|fix|change)/i.test(s))
|
|
380
|
+
score += 2;
|
|
381
|
+
if (/careful|watch out|gotcha|avoid|don't|never|must|critical|important/i.test(s))
|
|
382
|
+
score += 3;
|
|
383
|
+
if (/decided|chose|selected|learned|realized|discovered/i.test(s))
|
|
384
|
+
score += 2;
|
|
385
|
+
// Penalty for vague language
|
|
386
|
+
if (/might|maybe|perhaps|possibly|somewhat|kind of/i.test(s))
|
|
387
|
+
score -= 1;
|
|
388
|
+
if (/I think|I believe|in my opinion|it seems/i.test(s))
|
|
389
|
+
score -= 1;
|
|
390
|
+
return { sentence: s, score };
|
|
391
|
+
});
|
|
392
|
+
// Keep sentences with positive scores, or at minimum the top 40%
|
|
393
|
+
scored.sort((a, b) => b.score - a.score);
|
|
394
|
+
const minKeep = Math.max(1, Math.ceil(scored.length * 0.4));
|
|
395
|
+
const kept = scored.filter((s) => s.score > 0);
|
|
396
|
+
const result = kept.length >= minKeep ? kept : scored.slice(0, minKeep);
|
|
397
|
+
return result
|
|
398
|
+
.map((s) => s.sentence)
|
|
399
|
+
.join(' ')
|
|
400
|
+
.trim();
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Compress content dynamically based on remaining context budget.
|
|
404
|
+
*
|
|
405
|
+
* @param content - The text to compress
|
|
406
|
+
* @param budgetRemaining - Tokens remaining in the context budget
|
|
407
|
+
* @param budgetTotal - Total context budget in tokens
|
|
408
|
+
* @returns Compressed content and compression ratio
|
|
409
|
+
*/
|
|
410
|
+
compressDynamic(content, budgetRemaining, budgetTotal) {
|
|
411
|
+
const tier = this.determineTier(budgetRemaining, budgetTotal);
|
|
412
|
+
const originalTokens = estimateTokens(content);
|
|
413
|
+
let compressed;
|
|
414
|
+
switch (tier) {
|
|
415
|
+
case 'light':
|
|
416
|
+
compressed = this.compressLight(content);
|
|
417
|
+
break;
|
|
418
|
+
case 'medium':
|
|
419
|
+
compressed = this.compressMedium(content);
|
|
420
|
+
break;
|
|
421
|
+
case 'aggressive':
|
|
422
|
+
compressed = this.compressAggressive(content);
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
const compressedTokens = estimateTokens(compressed);
|
|
426
|
+
const ratio = originalTokens > 0 ? compressedTokens / originalTokens : 1;
|
|
427
|
+
return { compressed, ratio };
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=context-compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compressor.js","sourceRoot":"","sources":["../../src/memory/context-compressor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Pruner Module for UAP
|
|
3
|
+
*
|
|
4
|
+
* Scores and prunes memories based on relevance, recency, and access frequency
|
|
5
|
+
* to fit within a token budget. Uses a composite scoring formula to decide
|
|
6
|
+
* which memories to keep.
|
|
7
|
+
*/
|
|
8
|
+
export interface PrunableMemory {
|
|
9
|
+
content: string;
|
|
10
|
+
relevance: number;
|
|
11
|
+
age: number;
|
|
12
|
+
accessCount: number;
|
|
13
|
+
}
|
|
14
|
+
export interface PrunedMemory {
|
|
15
|
+
content: string;
|
|
16
|
+
relevance: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Estimate token count from text using a rough 4-chars-per-token heuristic.
|
|
20
|
+
*/
|
|
21
|
+
export declare function estimateTokens(text: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* ContextPruner scores memories using a composite formula and removes
|
|
24
|
+
* low-scoring entries until the remaining set fits within a token budget.
|
|
25
|
+
*
|
|
26
|
+
* Scoring formula:
|
|
27
|
+
* score = relevance * 0.5 + recency * 0.3 + frequency * 0.2
|
|
28
|
+
*
|
|
29
|
+
* where:
|
|
30
|
+
* recency = 1 / (1 + age_hours)
|
|
31
|
+
* frequency = min(accessCount / 10, 1)
|
|
32
|
+
*/
|
|
33
|
+
export declare class ContextPruner {
|
|
34
|
+
/**
|
|
35
|
+
* Calculate composite score for a memory entry.
|
|
36
|
+
*/
|
|
37
|
+
private scoreMemory;
|
|
38
|
+
/**
|
|
39
|
+
* Prune memories to fit within a token budget.
|
|
40
|
+
*
|
|
41
|
+
* Scores each memory, sorts by score descending, then keeps memories
|
|
42
|
+
* until the budget is exhausted.
|
|
43
|
+
*
|
|
44
|
+
* @param memories - Array of memory entries with metadata
|
|
45
|
+
* @param budget - Maximum number of tokens for the result
|
|
46
|
+
* @returns Pruned array of memories that fit within budget
|
|
47
|
+
*/
|
|
48
|
+
prune(memories: PrunableMemory[], budget: number): PrunedMemory[];
|
|
49
|
+
/**
|
|
50
|
+
* Rough token estimation at 4 characters per token.
|
|
51
|
+
*/
|
|
52
|
+
estimateTokens(text: string): number;
|
|
53
|
+
}
|
|
54
|
+
export declare function getContextPruner(): ContextPruner;
|
|
55
|
+
//# sourceMappingURL=context-pruner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pruner.d.ts","sourceRoot":"","sources":["../../src/memory/context-pruner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IA4BjE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGrC;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Pruner Module for UAP
|
|
3
|
+
*
|
|
4
|
+
* Scores and prunes memories based on relevance, recency, and access frequency
|
|
5
|
+
* to fit within a token budget. Uses a composite scoring formula to decide
|
|
6
|
+
* which memories to keep.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Estimate token count from text using a rough 4-chars-per-token heuristic.
|
|
10
|
+
*/
|
|
11
|
+
export function estimateTokens(text) {
|
|
12
|
+
if (!text || text.length === 0)
|
|
13
|
+
return 0;
|
|
14
|
+
return Math.ceil(text.length / 4);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* ContextPruner scores memories using a composite formula and removes
|
|
18
|
+
* low-scoring entries until the remaining set fits within a token budget.
|
|
19
|
+
*
|
|
20
|
+
* Scoring formula:
|
|
21
|
+
* score = relevance * 0.5 + recency * 0.3 + frequency * 0.2
|
|
22
|
+
*
|
|
23
|
+
* where:
|
|
24
|
+
* recency = 1 / (1 + age_hours)
|
|
25
|
+
* frequency = min(accessCount / 10, 1)
|
|
26
|
+
*/
|
|
27
|
+
export class ContextPruner {
|
|
28
|
+
/**
|
|
29
|
+
* Calculate composite score for a memory entry.
|
|
30
|
+
*/
|
|
31
|
+
scoreMemory(memory) {
|
|
32
|
+
const recency = 1 / (1 + memory.age);
|
|
33
|
+
const frequency = Math.min(memory.accessCount / 10, 1);
|
|
34
|
+
return memory.relevance * 0.5 + recency * 0.3 + frequency * 0.2;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Prune memories to fit within a token budget.
|
|
38
|
+
*
|
|
39
|
+
* Scores each memory, sorts by score descending, then keeps memories
|
|
40
|
+
* until the budget is exhausted.
|
|
41
|
+
*
|
|
42
|
+
* @param memories - Array of memory entries with metadata
|
|
43
|
+
* @param budget - Maximum number of tokens for the result
|
|
44
|
+
* @returns Pruned array of memories that fit within budget
|
|
45
|
+
*/
|
|
46
|
+
prune(memories, budget) {
|
|
47
|
+
if (memories.length === 0)
|
|
48
|
+
return [];
|
|
49
|
+
// Score and sort descending
|
|
50
|
+
const scored = memories.map((m) => ({
|
|
51
|
+
memory: m,
|
|
52
|
+
score: this.scoreMemory(m),
|
|
53
|
+
tokens: estimateTokens(m.content),
|
|
54
|
+
}));
|
|
55
|
+
scored.sort((a, b) => b.score - a.score);
|
|
56
|
+
// Greedily keep memories until budget is used
|
|
57
|
+
const result = [];
|
|
58
|
+
let usedTokens = 0;
|
|
59
|
+
for (const entry of scored) {
|
|
60
|
+
if (usedTokens + entry.tokens > budget)
|
|
61
|
+
continue;
|
|
62
|
+
usedTokens += entry.tokens;
|
|
63
|
+
result.push({
|
|
64
|
+
content: entry.memory.content,
|
|
65
|
+
relevance: entry.memory.relevance,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Rough token estimation at 4 characters per token.
|
|
72
|
+
*/
|
|
73
|
+
estimateTokens(text) {
|
|
74
|
+
return estimateTokens(text);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Singleton
|
|
78
|
+
let instance = null;
|
|
79
|
+
export function getContextPruner() {
|
|
80
|
+
if (!instance) {
|
|
81
|
+
instance = new ContextPruner();
|
|
82
|
+
}
|
|
83
|
+
return instance;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=context-pruner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pruner.js","sourceRoot":"","sources":["../../src/memory/context-pruner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IACxB;;OAEG;IACK,WAAW,CAAC,MAAsB;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;IAClE,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,QAA0B,EAAE,MAAc;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,4BAA4B;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzC,8CAA8C;QAC9C,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM;gBAAE,SAAS;YACjD,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;gBAC7B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;aAClC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,YAAY;AACZ,IAAI,QAAQ,GAAyB,IAAI,CAAC;AAE1C,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correction Propagation Protocol
|
|
3
|
+
*
|
|
4
|
+
* When a memory is corrected, updates propagate across all tiers:
|
|
5
|
+
* daily log, working memory, and session memory. Old claims are marked
|
|
6
|
+
* [superseded] with date and reason, preserving the audit trail.
|
|
7
|
+
*
|
|
8
|
+
* Inspired by Total Recall's correction gate.
|
|
9
|
+
*/
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
export interface CorrectionResult {
|
|
12
|
+
originalFound: boolean;
|
|
13
|
+
originalId?: number;
|
|
14
|
+
originalContent?: string;
|
|
15
|
+
tiersUpdated: string[];
|
|
16
|
+
supersededCount: number;
|
|
17
|
+
correctedEntryId?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SupersededEntry {
|
|
20
|
+
id: number;
|
|
21
|
+
tier: string;
|
|
22
|
+
originalContent: string;
|
|
23
|
+
supersededDate: string;
|
|
24
|
+
supersededBy: string;
|
|
25
|
+
reason: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Ensure the superseded tracking table exists.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ensureSupersededSchema(db: Database.Database): void;
|
|
31
|
+
/**
|
|
32
|
+
* Propagate a correction across all memory tiers.
|
|
33
|
+
*
|
|
34
|
+
* @param dbPath Path to the SQLite database
|
|
35
|
+
* @param searchContent Content to find and correct (fuzzy match)
|
|
36
|
+
* @param correctedContent The corrected version
|
|
37
|
+
* @param reason Why the correction was made
|
|
38
|
+
*/
|
|
39
|
+
export declare function propagateCorrection(dbPath: string, searchContent: string, correctedContent: string, reason?: string): CorrectionResult;
|
|
40
|
+
/**
|
|
41
|
+
* Get the superseded history for audit trail.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getSupersededHistory(dbPath: string, limit?: number): SupersededEntry[];
|
|
44
|
+
//# sourceMappingURL=correction-propagator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correction-propagator.d.ts","sourceRoot":"","sources":["../../src/memory/correction-propagator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAalE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,MAAM,GAAE,MAA0B,GACjC,gBAAgB,CAwGlB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,eAAe,EAAE,CAgCnB"}
|