cognitive-core 0.1.2 → 0.2.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/CLAUDE.md +233 -0
- package/README.md +370 -54
- package/dist/atlas.d.ts +10 -10
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +79 -48
- package/dist/atlas.js.map +1 -1
- package/dist/bin/cli-utils.d.ts +37 -0
- package/dist/bin/cli-utils.d.ts.map +1 -0
- package/dist/bin/cli-utils.js +176 -0
- package/dist/bin/cli-utils.js.map +1 -0
- package/dist/bin/cognitive-core.d.ts +2 -12
- package/dist/bin/cognitive-core.d.ts.map +1 -1
- package/dist/bin/cognitive-core.js +76 -351
- package/dist/bin/cognitive-core.js.map +1 -1
- package/dist/bin/commands/kb.d.ts +6 -0
- package/dist/bin/commands/kb.d.ts.map +1 -0
- package/dist/bin/commands/kb.js +240 -0
- package/dist/bin/commands/kb.js.map +1 -0
- package/dist/bin/commands/learn.d.ts +6 -0
- package/dist/bin/commands/learn.d.ts.map +1 -0
- package/dist/bin/commands/learn.js +91 -0
- package/dist/bin/commands/learn.js.map +1 -0
- package/dist/bin/commands/legacy.d.ts +12 -0
- package/dist/bin/commands/legacy.d.ts.map +1 -0
- package/dist/bin/commands/legacy.js +142 -0
- package/dist/bin/commands/legacy.js.map +1 -0
- package/dist/bin/commands/run.d.ts +3 -0
- package/dist/bin/commands/run.d.ts.map +1 -0
- package/dist/bin/commands/run.js +99 -0
- package/dist/bin/commands/run.js.map +1 -0
- package/dist/bin/commands/sessions.d.ts +9 -0
- package/dist/bin/commands/sessions.d.ts.map +1 -0
- package/dist/bin/commands/sessions.js +183 -0
- package/dist/bin/commands/sessions.js.map +1 -0
- package/dist/bin/commands/skills.d.ts +6 -0
- package/dist/bin/commands/skills.d.ts.map +1 -0
- package/dist/bin/commands/skills.js +135 -0
- package/dist/bin/commands/skills.js.map +1 -0
- package/dist/embeddings/index.d.ts +1 -0
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +2 -0
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/inverted-index.d.ts +47 -0
- package/dist/embeddings/inverted-index.d.ts.map +1 -0
- package/dist/embeddings/inverted-index.js +122 -0
- package/dist/embeddings/inverted-index.js.map +1 -0
- package/dist/embeddings/manager.d.ts +3 -1
- package/dist/embeddings/manager.d.ts.map +1 -1
- package/dist/embeddings/manager.js +12 -7
- package/dist/embeddings/manager.js.map +1 -1
- package/dist/embeddings/vector-store.d.ts +7 -3
- package/dist/embeddings/vector-store.d.ts.map +1 -1
- package/dist/embeddings/vector-store.js +22 -6
- package/dist/embeddings/vector-store.js.map +1 -1
- package/dist/factory.d.ts +11 -12
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +20 -7
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/dist/learning/analyzer.d.ts.map +1 -1
- package/dist/learning/analyzer.js +17 -35
- package/dist/learning/analyzer.js.map +1 -1
- package/dist/learning/energy-evaluator.d.ts +128 -0
- package/dist/learning/energy-evaluator.d.ts.map +1 -0
- package/dist/learning/energy-evaluator.js +175 -0
- package/dist/learning/energy-evaluator.js.map +1 -0
- package/dist/learning/healing-orchestrator.d.ts +182 -0
- package/dist/learning/healing-orchestrator.d.ts.map +1 -0
- package/dist/learning/healing-orchestrator.js +250 -0
- package/dist/learning/healing-orchestrator.js.map +1 -0
- package/dist/learning/index.d.ts +7 -2
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +13 -2
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/instant-loop.d.ts +87 -0
- package/dist/learning/instant-loop.d.ts.map +1 -0
- package/dist/learning/instant-loop.js +264 -0
- package/dist/learning/instant-loop.js.map +1 -0
- package/dist/learning/loop-coordinator.d.ts +61 -0
- package/dist/learning/loop-coordinator.d.ts.map +1 -0
- package/dist/learning/loop-coordinator.js +96 -0
- package/dist/learning/loop-coordinator.js.map +1 -0
- package/dist/learning/maintenance-scheduler.d.ts +141 -0
- package/dist/learning/maintenance-scheduler.d.ts.map +1 -0
- package/dist/learning/maintenance-scheduler.js +186 -0
- package/dist/learning/maintenance-scheduler.js.map +1 -0
- package/dist/learning/meta-learner.d.ts.map +1 -1
- package/dist/learning/meta-learner.js +4 -21
- package/dist/learning/meta-learner.js.map +1 -1
- package/dist/learning/pipeline.d.ts +31 -4
- package/dist/learning/pipeline.d.ts.map +1 -1
- package/dist/learning/pipeline.js +64 -12
- package/dist/learning/pipeline.js.map +1 -1
- package/dist/learning/reflexion-generator.d.ts +64 -0
- package/dist/learning/reflexion-generator.d.ts.map +1 -0
- package/dist/learning/reflexion-generator.js +194 -0
- package/dist/learning/reflexion-generator.js.map +1 -0
- package/dist/learning/trajectory-sources/entire.d.ts +8 -5
- package/dist/learning/trajectory-sources/entire.d.ts.map +1 -1
- package/dist/learning/trajectory-sources/entire.js +13 -6
- package/dist/learning/trajectory-sources/entire.js.map +1 -1
- package/dist/learning/trajectory-sources/index.d.ts +1 -1
- package/dist/learning/trajectory-sources/index.d.ts.map +1 -1
- package/dist/learning/trajectory-sources/index.js +1 -1
- package/dist/learning/trajectory-sources/index.js.map +1 -1
- package/dist/learning/trajectory-sources/pipeline.d.ts +4 -4
- package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -1
- package/dist/learning/trajectory-sources/pipeline.js +2 -2
- package/dist/learning/trajectory-sources/pipeline.js.map +1 -1
- package/dist/learning/unified-pipeline.d.ts +281 -0
- package/dist/learning/unified-pipeline.d.ts.map +1 -0
- package/dist/learning/unified-pipeline.js +637 -0
- package/dist/learning/unified-pipeline.js.map +1 -0
- package/dist/memory/candidate-retrieval.d.ts +43 -0
- package/dist/memory/candidate-retrieval.d.ts.map +1 -0
- package/dist/memory/candidate-retrieval.js +41 -0
- package/dist/memory/candidate-retrieval.js.map +1 -0
- package/dist/memory/causal-store.d.ts +97 -0
- package/dist/memory/causal-store.d.ts.map +1 -0
- package/dist/memory/causal-store.js +209 -0
- package/dist/memory/causal-store.js.map +1 -0
- package/dist/memory/coherence.d.ts +71 -0
- package/dist/memory/coherence.d.ts.map +1 -0
- package/dist/memory/coherence.js +176 -0
- package/dist/memory/coherence.js.map +1 -0
- package/dist/memory/experience.d.ts +39 -6
- package/dist/memory/experience.d.ts.map +1 -1
- package/dist/memory/experience.js +193 -49
- package/dist/memory/experience.js.map +1 -1
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +12 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/knowledge-bank.d.ts +14 -0
- package/dist/memory/knowledge-bank.d.ts.map +1 -1
- package/dist/memory/knowledge-bank.js +45 -0
- package/dist/memory/knowledge-bank.js.map +1 -1
- package/dist/memory/meta.d.ts +7 -8
- package/dist/memory/meta.d.ts.map +1 -1
- package/dist/memory/meta.js +73 -79
- package/dist/memory/meta.js.map +1 -1
- package/dist/memory/playbook.d.ts +26 -9
- package/dist/memory/playbook.d.ts.map +1 -1
- package/dist/memory/playbook.js +198 -74
- package/dist/memory/playbook.js.map +1 -1
- package/dist/memory/reasoning-bank.d.ts +130 -0
- package/dist/memory/reasoning-bank.d.ts.map +1 -0
- package/dist/memory/reasoning-bank.js +342 -0
- package/dist/memory/reasoning-bank.js.map +1 -0
- package/dist/memory/reflexion.d.ts +59 -0
- package/dist/memory/reflexion.d.ts.map +1 -0
- package/dist/memory/reflexion.js +96 -0
- package/dist/memory/reflexion.js.map +1 -0
- package/dist/memory/system.d.ts +7 -2
- package/dist/memory/system.d.ts.map +1 -1
- package/dist/memory/system.js +19 -7
- package/dist/memory/system.js.map +1 -1
- package/dist/memory/temporal-compressor.d.ts +126 -0
- package/dist/memory/temporal-compressor.d.ts.map +1 -0
- package/dist/memory/temporal-compressor.js +335 -0
- package/dist/memory/temporal-compressor.js.map +1 -0
- package/dist/persistence/index.d.ts +11 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +11 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/migrator.d.ts +40 -0
- package/dist/persistence/migrator.d.ts.map +1 -0
- package/dist/persistence/migrator.js +238 -0
- package/dist/persistence/migrator.js.map +1 -0
- package/dist/persistence/serializers.d.ts +45 -0
- package/dist/persistence/serializers.d.ts.map +1 -0
- package/dist/persistence/serializers.js +80 -0
- package/dist/persistence/serializers.js.map +1 -0
- package/dist/persistence/sqlite-persistence.d.ts +228 -0
- package/dist/persistence/sqlite-persistence.d.ts.map +1 -0
- package/dist/persistence/sqlite-persistence.js +588 -0
- package/dist/persistence/sqlite-persistence.js.map +1 -0
- package/dist/runtime/flows/learning.d.ts +10 -12
- package/dist/runtime/flows/learning.d.ts.map +1 -1
- package/dist/runtime/flows/learning.js +10 -23
- package/dist/runtime/flows/learning.js.map +1 -1
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +2 -0
- package/dist/search/index.js.map +1 -1
- package/dist/search/moe-gate.d.ts +124 -0
- package/dist/search/moe-gate.d.ts.map +1 -0
- package/dist/search/moe-gate.js +234 -0
- package/dist/search/moe-gate.js.map +1 -0
- package/dist/search/router.d.ts +32 -2
- package/dist/search/router.d.ts.map +1 -1
- package/dist/search/router.js +87 -4
- package/dist/search/router.js.map +1 -1
- package/dist/session-bank/git-reader.d.ts +9 -4
- package/dist/session-bank/git-reader.d.ts.map +1 -1
- package/dist/session-bank/git-reader.js +22 -15
- package/dist/session-bank/git-reader.js.map +1 -1
- package/dist/session-bank/index.d.ts +2 -2
- package/dist/session-bank/index.d.ts.map +1 -1
- package/dist/session-bank/index.js +2 -2
- package/dist/session-bank/index.js.map +1 -1
- package/dist/session-bank/parser.d.ts +16 -5
- package/dist/session-bank/parser.d.ts.map +1 -1
- package/dist/session-bank/parser.js +187 -80
- package/dist/session-bank/parser.js.map +1 -1
- package/dist/session-bank/session-bank.d.ts +5 -0
- package/dist/session-bank/session-bank.d.ts.map +1 -1
- package/dist/session-bank/session-bank.js +30 -9
- package/dist/session-bank/session-bank.js.map +1 -1
- package/dist/session-bank/types.d.ts +4 -1
- package/dist/session-bank/types.d.ts.map +1 -1
- package/dist/session-bank/types.js +3 -3
- package/dist/session-bank/types.js.map +1 -1
- package/dist/surfacing/skill-publisher.d.ts.map +1 -1
- package/dist/surfacing/skill-publisher.js +15 -43
- package/dist/surfacing/skill-publisher.js.map +1 -1
- package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -1
- package/dist/surfacing/sqlite-storage-adapter.js +13 -21
- package/dist/surfacing/sqlite-storage-adapter.js.map +1 -1
- package/dist/types/config.d.ts +100 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +27 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/memory.d.ts +52 -0
- package/dist/types/memory.d.ts.map +1 -1
- package/dist/types/memory.js +13 -0
- package/dist/types/memory.js.map +1 -1
- package/dist/types/playbook.d.ts +4 -0
- package/dist/types/playbook.d.ts.map +1 -1
- package/dist/types/playbook.js.map +1 -1
- package/dist/utils/error-classifier.d.ts +30 -0
- package/dist/utils/error-classifier.d.ts.map +1 -0
- package/dist/utils/error-classifier.js +85 -0
- package/dist/utils/error-classifier.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/partitioned-store.d.ts +93 -0
- package/dist/utils/partitioned-store.d.ts.map +1 -0
- package/dist/utils/partitioned-store.js +251 -0
- package/dist/utils/partitioned-store.js.map +1 -0
- package/dist/utils/trajectory-helpers.d.ts +39 -0
- package/dist/utils/trajectory-helpers.d.ts.map +1 -0
- package/dist/utils/trajectory-helpers.js +57 -0
- package/dist/utils/trajectory-helpers.js.map +1 -0
- package/dist/workspace/runner.d.ts +3 -4
- package/dist/workspace/runner.d.ts.map +1 -1
- package/dist/workspace/runner.js.map +1 -1
- package/dist/workspace/types.d.ts +9 -2
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/types.js.map +1 -1
- package/package.json +6 -4
- package/references/sessionlog/.husky/pre-commit +1 -0
- package/references/sessionlog/.lintstagedrc.json +4 -0
- package/references/sessionlog/.prettierignore +4 -0
- package/references/sessionlog/.prettierrc.json +11 -0
- package/references/sessionlog/LICENSE +21 -0
- package/references/sessionlog/README.md +453 -0
- package/references/sessionlog/eslint.config.js +58 -0
- package/references/sessionlog/package-lock.json +3672 -0
- package/references/sessionlog/package.json +65 -0
- package/references/sessionlog/src/__tests__/agent-hooks.test.ts +570 -0
- package/references/sessionlog/src/__tests__/agent-registry.test.ts +127 -0
- package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +225 -0
- package/references/sessionlog/src/__tests__/claude-generator.test.ts +46 -0
- package/references/sessionlog/src/__tests__/commit-msg.test.ts +86 -0
- package/references/sessionlog/src/__tests__/cursor-agent.test.ts +224 -0
- package/references/sessionlog/src/__tests__/e2e-live.test.ts +890 -0
- package/references/sessionlog/src/__tests__/event-log.test.ts +183 -0
- package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +105 -0
- package/references/sessionlog/src/__tests__/gemini-agent.test.ts +375 -0
- package/references/sessionlog/src/__tests__/git-hooks.test.ts +78 -0
- package/references/sessionlog/src/__tests__/hook-managers.test.ts +121 -0
- package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +759 -0
- package/references/sessionlog/src/__tests__/opencode-agent.test.ts +338 -0
- package/references/sessionlog/src/__tests__/redaction.test.ts +136 -0
- package/references/sessionlog/src/__tests__/session-repo.test.ts +353 -0
- package/references/sessionlog/src/__tests__/session-store.test.ts +166 -0
- package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +466 -0
- package/references/sessionlog/src/__tests__/skill-live.test.ts +461 -0
- package/references/sessionlog/src/__tests__/summarize.test.ts +348 -0
- package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +610 -0
- package/references/sessionlog/src/__tests__/task-plan-live.test.ts +632 -0
- package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +121 -0
- package/references/sessionlog/src/__tests__/types.test.ts +166 -0
- package/references/sessionlog/src/__tests__/utils.test.ts +333 -0
- package/references/sessionlog/src/__tests__/validation.test.ts +103 -0
- package/references/sessionlog/src/__tests__/worktree.test.ts +57 -0
- package/references/sessionlog/src/agent/agents/claude-code.ts +1089 -0
- package/references/sessionlog/src/agent/agents/cursor.ts +361 -0
- package/references/sessionlog/src/agent/agents/gemini-cli.ts +632 -0
- package/references/sessionlog/src/agent/agents/opencode.ts +540 -0
- package/references/sessionlog/src/agent/registry.ts +143 -0
- package/references/sessionlog/src/agent/session-types.ts +113 -0
- package/references/sessionlog/src/agent/types.ts +220 -0
- package/references/sessionlog/src/cli.ts +597 -0
- package/references/sessionlog/src/commands/clean.ts +133 -0
- package/references/sessionlog/src/commands/disable.ts +84 -0
- package/references/sessionlog/src/commands/doctor.ts +145 -0
- package/references/sessionlog/src/commands/enable.ts +202 -0
- package/references/sessionlog/src/commands/explain.ts +261 -0
- package/references/sessionlog/src/commands/reset.ts +105 -0
- package/references/sessionlog/src/commands/resume.ts +180 -0
- package/references/sessionlog/src/commands/rewind.ts +195 -0
- package/references/sessionlog/src/commands/setup-ccweb.ts +275 -0
- package/references/sessionlog/src/commands/status.ts +172 -0
- package/references/sessionlog/src/config.ts +165 -0
- package/references/sessionlog/src/events/event-log.ts +126 -0
- package/references/sessionlog/src/git-operations.ts +558 -0
- package/references/sessionlog/src/hooks/git-hooks.ts +165 -0
- package/references/sessionlog/src/hooks/lifecycle.ts +391 -0
- package/references/sessionlog/src/index.ts +650 -0
- package/references/sessionlog/src/security/redaction.ts +283 -0
- package/references/sessionlog/src/session/state-machine.ts +452 -0
- package/references/sessionlog/src/store/checkpoint-store.ts +509 -0
- package/references/sessionlog/src/store/native-store.ts +173 -0
- package/references/sessionlog/src/store/provider-types.ts +99 -0
- package/references/sessionlog/src/store/session-store.ts +266 -0
- package/references/sessionlog/src/strategy/attribution.ts +296 -0
- package/references/sessionlog/src/strategy/common.ts +207 -0
- package/references/sessionlog/src/strategy/content-overlap.ts +228 -0
- package/references/sessionlog/src/strategy/manual-commit.ts +988 -0
- package/references/sessionlog/src/strategy/types.ts +279 -0
- package/references/sessionlog/src/summarize/claude-generator.ts +115 -0
- package/references/sessionlog/src/summarize/summarize.ts +432 -0
- package/references/sessionlog/src/types.ts +508 -0
- package/references/sessionlog/src/utils/chunk-files.ts +49 -0
- package/references/sessionlog/src/utils/commit-message.ts +65 -0
- package/references/sessionlog/src/utils/detect-agent.ts +36 -0
- package/references/sessionlog/src/utils/hook-managers.ts +125 -0
- package/references/sessionlog/src/utils/ide-tags.ts +32 -0
- package/references/sessionlog/src/utils/paths.ts +79 -0
- package/references/sessionlog/src/utils/preview-rewind.ts +80 -0
- package/references/sessionlog/src/utils/rewind-conflict.ts +121 -0
- package/references/sessionlog/src/utils/shadow-branch.ts +109 -0
- package/references/sessionlog/src/utils/string-utils.ts +46 -0
- package/references/sessionlog/src/utils/todo-extract.ts +188 -0
- package/references/sessionlog/src/utils/trailers.ts +187 -0
- package/references/sessionlog/src/utils/transcript-parse.ts +177 -0
- package/references/sessionlog/src/utils/transcript-timestamp.ts +59 -0
- package/references/sessionlog/src/utils/tree-ops.ts +219 -0
- package/references/sessionlog/src/utils/tty.ts +72 -0
- package/references/sessionlog/src/utils/validation.ts +65 -0
- package/references/sessionlog/src/utils/worktree.ts +58 -0
- package/references/sessionlog/src/wire-types.ts +59 -0
- package/references/sessionlog/templates/setup-env.sh +153 -0
- package/references/sessionlog/tsconfig.json +18 -0
- package/references/sessionlog/vitest.config.ts +12 -0
- package/references/skill-tree/.sudocode/issues.jsonl +8 -0
- package/references/skill-tree/.sudocode/specs.jsonl +2 -0
- package/references/skill-tree/CLAUDE.md +56 -80
- package/references/skill-tree/README.md +188 -140
- package/references/skill-tree/examples/basic-usage.ts +95 -121
- package/references/skill-tree/package-lock.json +369 -26
- package/references/skill-tree/package.json +1 -1
- package/src/atlas.ts +97 -67
- package/src/bin/cli-utils.ts +220 -0
- package/src/bin/cognitive-core.ts +84 -392
- package/src/bin/commands/kb.ts +266 -0
- package/src/bin/commands/learn.ts +100 -0
- package/src/bin/commands/legacy.ts +182 -0
- package/src/bin/commands/run.ts +113 -0
- package/src/bin/commands/sessions.ts +221 -0
- package/src/bin/commands/skills.ts +146 -0
- package/src/embeddings/index.ts +3 -0
- package/src/embeddings/inverted-index.ts +134 -0
- package/src/embeddings/manager.ts +13 -8
- package/src/embeddings/vector-store.ts +21 -9
- package/src/factory.ts +33 -16
- package/src/index.ts +109 -9
- package/src/learning/analyzer.ts +21 -37
- package/src/learning/energy-evaluator.ts +282 -0
- package/src/learning/healing-orchestrator.ts +383 -0
- package/src/learning/index.ts +65 -9
- package/src/learning/instant-loop.ts +357 -0
- package/src/learning/maintenance-scheduler.ts +271 -0
- package/src/learning/meta-learner.ts +5 -23
- package/src/learning/reflexion-generator.ts +273 -0
- package/src/learning/trajectory-sources/entire.ts +24 -13
- package/src/learning/trajectory-sources/index.ts +2 -2
- package/src/learning/trajectory-sources/pipeline.ts +5 -5
- package/src/learning/unified-pipeline.ts +921 -0
- package/src/memory/candidate-retrieval.ts +71 -0
- package/src/memory/causal-store.ts +273 -0
- package/src/memory/coherence.ts +252 -0
- package/src/memory/experience.ts +217 -50
- package/src/memory/index.ts +43 -0
- package/src/memory/knowledge-bank.ts +57 -0
- package/src/memory/meta.ts +78 -96
- package/src/memory/playbook.ts +239 -75
- package/src/memory/reasoning-bank.ts +458 -0
- package/src/memory/reflexion.ts +122 -0
- package/src/memory/system.ts +21 -5
- package/src/memory/temporal-compressor.ts +409 -0
- package/src/persistence/index.ts +37 -0
- package/src/persistence/migrator.ts +298 -0
- package/src/persistence/serializers.ts +79 -0
- package/src/persistence/sqlite-persistence.ts +925 -0
- package/src/runtime/flows/learning.ts +25 -42
- package/src/search/index.ts +10 -0
- package/src/search/moe-gate.ts +304 -0
- package/src/search/router.ts +111 -4
- package/src/session-bank/git-reader.ts +29 -19
- package/src/session-bank/index.ts +4 -2
- package/src/session-bank/parser.ts +280 -98
- package/src/session-bank/session-bank.ts +33 -12
- package/src/session-bank/types.ts +8 -5
- package/src/surfacing/skill-publisher.ts +17 -49
- package/src/surfacing/sqlite-storage-adapter.ts +16 -32
- package/src/types/config.ts +30 -0
- package/src/types/index.ts +3 -0
- package/src/types/memory.ts +30 -0
- package/src/types/playbook.ts +4 -0
- package/src/utils/error-classifier.ts +113 -0
- package/src/utils/index.ts +18 -0
- package/src/utils/partitioned-store.ts +299 -0
- package/src/utils/trajectory-helpers.ts +79 -0
- package/src/workspace/runner.ts +3 -3
- package/src/workspace/types.ts +10 -2
- package/tests/embeddings/inverted-index.test.ts +138 -0
- package/tests/feature-toggles.test.ts +275 -0
- package/tests/gap-fixes.test.ts +17 -4
- package/tests/integration/cli-e2e.test.ts +621 -0
- package/tests/integration/e2e.test.ts +6 -5
- package/tests/integration/entire-e2e.test.ts +314 -125
- package/tests/integration/persistence-e2e.test.ts +741 -0
- package/tests/integration/phase-e2e.test.ts +1143 -0
- package/tests/integration/session-bank.test.ts +20 -14
- package/tests/integration/sessionlog-e2e.test.ts +329 -0
- package/tests/integration/unified-pipeline-e2e.test.ts +634 -0
- package/tests/learning/analyzer.test.ts +1 -1
- package/tests/learning/energy-evaluator.test.ts +180 -0
- package/tests/learning/entire-trajectory-source.test.ts +25 -25
- package/tests/learning/healing-orchestrator.test.ts +269 -0
- package/tests/learning/instant-loop.test.ts +243 -0
- package/tests/learning/maintenance-scheduler.test.ts +191 -0
- package/tests/learning/reflexion-generator.test.ts +411 -0
- package/tests/learning/trajectory-sources.test.ts +12 -4
- package/tests/learning/unified-pipeline.test.ts +322 -0
- package/tests/mcp/playbook-server.test.ts +6 -1
- package/tests/memory/causal-store.test.ts +276 -0
- package/tests/memory/coherence.test.ts +232 -0
- package/tests/memory/experience.test.ts +8 -3
- package/tests/memory/playbook.test.ts +307 -1
- package/tests/memory/provenance.test.ts +11 -2
- package/tests/memory/reasoning-bank.test.ts +239 -0
- package/tests/memory/reflexion.test.ts +166 -0
- package/tests/memory/skill-exporter.test.ts +6 -1
- package/tests/memory/system.test.ts +6 -1
- package/tests/memory/temporal-compressor.test.ts +318 -0
- package/tests/persistence/migrator.test.ts +1009 -0
- package/tests/persistence/sqlite-persistence.test.ts +635 -0
- package/tests/runtime/agent-manager.test.ts +6 -1
- package/tests/runtime/delegate.test.ts +6 -1
- package/tests/search/moe-gate.test.ts +250 -0
- package/tests/search/refinement-loop.test.ts +11 -2
- package/tests/search/router.test.ts +81 -2
- package/tests/session-bank/fixtures/sessionlog-root-metadata.json +16 -0
- package/tests/session-bank/fixtures/sessionlog-session/full.jsonl +6 -0
- package/tests/session-bank/fixtures/sessionlog-session/metadata.json +55 -0
- package/tests/session-bank/git-reader.test.ts +13 -13
- package/tests/session-bank/parser.test.ts +135 -3
- package/tests/session-bank/session-bank.test.ts +1 -1
- package/tests/surfacing/skill-library.test.ts +6 -1
- package/tests/surfacing/skill-publisher.test.ts +24 -58
- package/tests/surfacing/sqlite-storage-adapter.test.ts +11 -23
- package/tests/utils/partitioned-store.test.ts +230 -0
- package/tests/workspace/full-flow.test.ts +10 -4
- package/tests/workspace/runner.test.ts +10 -4
- package/docs/DESIGN-workspace-migration.md +0 -1079
- package/docs/PLAN-agentic-workspace-implementation.md +0 -717
- package/docs/PLAN-graph-migration.md +0 -299
- package/docs/PLAN-session-bank-implementation.md +0 -474
- package/src/learning/pipeline.ts +0 -323
- package/tests/learning/pipeline.test.ts +0 -176
package/src/factory.ts
CHANGED
|
@@ -14,18 +14,22 @@
|
|
|
14
14
|
* const memory = factory.createMemorySystem('./.memory');
|
|
15
15
|
* await memory.init();
|
|
16
16
|
*
|
|
17
|
-
* const pipeline = factory.createLearningPipeline(memory
|
|
18
|
-
*
|
|
19
|
-
* });
|
|
17
|
+
* const pipeline = factory.createLearningPipeline(memory);
|
|
18
|
+
* await pipeline.init();
|
|
20
19
|
* ```
|
|
21
20
|
*/
|
|
22
21
|
|
|
23
|
-
import type { Task, Trajectory, Step, Outcome
|
|
22
|
+
import type { Task, Trajectory, Step, Outcome } from './types/index.js';
|
|
24
23
|
import { createTask, createTrajectory, createStep, successOutcome, failureOutcome } from './types/index.js';
|
|
25
24
|
import type { MemorySystem } from './memory/system.js';
|
|
26
25
|
import { createMemorySystem } from './memory/system.js';
|
|
27
|
-
import
|
|
28
|
-
import {
|
|
26
|
+
import { createSqlitePersistence } from './persistence/index.js';
|
|
27
|
+
import type {
|
|
28
|
+
ImmediateResult,
|
|
29
|
+
UnifiedBatchResult,
|
|
30
|
+
UnifiedPipelineConfig,
|
|
31
|
+
} from './learning/unified-pipeline.js';
|
|
32
|
+
import { createUnifiedPipeline } from './learning/unified-pipeline.js';
|
|
29
33
|
|
|
30
34
|
/**
|
|
31
35
|
* Parameters for creating a Task
|
|
@@ -71,10 +75,10 @@ export interface OutcomeParams {
|
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
/**
|
|
74
|
-
* Learning pipeline configuration
|
|
78
|
+
* Learning pipeline configuration (subset exposed to external consumers)
|
|
75
79
|
*/
|
|
76
80
|
export interface LearningPipelineConfig {
|
|
77
|
-
creditStrategy?: 'simple' | '
|
|
81
|
+
creditStrategy?: 'simple' | 'llm' | 'counterfactual';
|
|
78
82
|
minTrajectories?: number;
|
|
79
83
|
deduplicationThreshold?: number;
|
|
80
84
|
minSuccessRate?: number;
|
|
@@ -84,11 +88,10 @@ export interface LearningPipelineConfig {
|
|
|
84
88
|
* Interface for the LearningPipeline that external consumers need
|
|
85
89
|
*/
|
|
86
90
|
export interface ILearningPipeline {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
init(): Promise<void>;
|
|
92
|
+
processTrajectory(trajectory: Trajectory): Promise<ImmediateResult>;
|
|
93
|
+
runBatch(): Promise<UnifiedBatchResult>;
|
|
90
94
|
getAccumulatedCount(): number;
|
|
91
|
-
clearAccumulated(): void;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
/**
|
|
@@ -159,16 +162,29 @@ export interface CognitiveCoreFactory {
|
|
|
159
162
|
*/
|
|
160
163
|
class CognitiveCoreFactoryImpl implements CognitiveCoreFactory {
|
|
161
164
|
createMemorySystem(storagePath: string): IMemorySystem {
|
|
162
|
-
|
|
165
|
+
const persistence = createSqlitePersistence({ baseDir: storagePath });
|
|
166
|
+
return createMemorySystem(persistence, storagePath) as IMemorySystem;
|
|
163
167
|
}
|
|
164
168
|
|
|
165
169
|
createLearningPipeline(
|
|
166
170
|
memory: IMemorySystem,
|
|
167
171
|
config?: LearningPipelineConfig
|
|
168
172
|
): ILearningPipeline {
|
|
169
|
-
|
|
173
|
+
const pipelineConfig: Partial<UnifiedPipelineConfig> = config ? {
|
|
174
|
+
batch: {
|
|
175
|
+
learning: {
|
|
176
|
+
creditStrategy: config.creditStrategy,
|
|
177
|
+
minTrajectories: config.minTrajectories,
|
|
178
|
+
deduplicationThreshold: config.deduplicationThreshold,
|
|
179
|
+
minSuccessRate: config.minSuccessRate,
|
|
180
|
+
},
|
|
181
|
+
energy: {},
|
|
182
|
+
},
|
|
183
|
+
} : {};
|
|
184
|
+
|
|
185
|
+
return createUnifiedPipeline(
|
|
170
186
|
memory as MemorySystem,
|
|
171
|
-
|
|
187
|
+
pipelineConfig,
|
|
172
188
|
) as ILearningPipeline;
|
|
173
189
|
}
|
|
174
190
|
|
|
@@ -212,6 +228,7 @@ class CognitiveCoreFactoryImpl implements CognitiveCoreFactory {
|
|
|
212
228
|
* minTrajectories: 10,
|
|
213
229
|
* deduplicationThreshold: 0.85,
|
|
214
230
|
* });
|
|
231
|
+
* await pipeline.init();
|
|
215
232
|
*
|
|
216
233
|
* // Create and process trajectory
|
|
217
234
|
* const task = factory.createTask({
|
|
@@ -254,7 +271,7 @@ export const cognitiveCoreFactory = createCognitiveCoreFactory();
|
|
|
254
271
|
*/
|
|
255
272
|
export {
|
|
256
273
|
createMemorySystem,
|
|
257
|
-
createLearningPipeline,
|
|
274
|
+
createUnifiedPipeline as createLearningPipeline,
|
|
258
275
|
createTask,
|
|
259
276
|
createTrajectory,
|
|
260
277
|
createStep,
|
package/src/index.ts
CHANGED
|
@@ -62,6 +62,29 @@ export {
|
|
|
62
62
|
createTeamExperienceMemory,
|
|
63
63
|
type TeamExperience,
|
|
64
64
|
type TeamAnalysisResult,
|
|
65
|
+
// Reflexion episodes
|
|
66
|
+
ReflexionMemory,
|
|
67
|
+
createReflexionMemory,
|
|
68
|
+
// Coherence checking
|
|
69
|
+
CoherenceChecker,
|
|
70
|
+
createCoherenceChecker,
|
|
71
|
+
type CoherenceResult,
|
|
72
|
+
type CoherenceCheckerConfig,
|
|
73
|
+
// Reasoning bank (clustered experience retrieval)
|
|
74
|
+
ReasoningBank,
|
|
75
|
+
createReasoningBank,
|
|
76
|
+
type ExperienceCluster,
|
|
77
|
+
type ClusterStats,
|
|
78
|
+
type ReasoningBankConfig,
|
|
79
|
+
// Causal edge store
|
|
80
|
+
CausalStore,
|
|
81
|
+
createCausalStore,
|
|
82
|
+
type CausalEdge,
|
|
83
|
+
// Temporal compression
|
|
84
|
+
TemporalCompressor,
|
|
85
|
+
createTemporalCompressor,
|
|
86
|
+
type TemporalCompressorConfig,
|
|
87
|
+
type CompressionResult,
|
|
65
88
|
// Knowledge bank (semantic memory)
|
|
66
89
|
KnowledgeBank,
|
|
67
90
|
KnowledgeGraphManager,
|
|
@@ -80,12 +103,8 @@ export {
|
|
|
80
103
|
|
|
81
104
|
// Learning engine
|
|
82
105
|
export {
|
|
83
|
-
LearningPipeline,
|
|
84
|
-
createLearningPipeline,
|
|
85
106
|
TrajectoryAnalyzer,
|
|
86
107
|
createAnalyzer,
|
|
87
|
-
type ProcessResult,
|
|
88
|
-
type BatchResult,
|
|
89
108
|
type AnalysisResult,
|
|
90
109
|
// Playbook-based learning
|
|
91
110
|
PlaybookExtractor,
|
|
@@ -123,17 +142,70 @@ export {
|
|
|
123
142
|
InMemoryTrajectorySource,
|
|
124
143
|
FileTrajectorySource,
|
|
125
144
|
PipelineTrajectorySource,
|
|
126
|
-
|
|
127
|
-
type
|
|
145
|
+
SessionTrajectorySource,
|
|
146
|
+
type SessionSynthesisOptions,
|
|
128
147
|
DataclawTrajectorySource,
|
|
129
148
|
type DataclawSourceOptions,
|
|
149
|
+
// Instant (hot-path) learning
|
|
150
|
+
InstantLoop,
|
|
151
|
+
createInstantLoop,
|
|
152
|
+
type InstantLoopResult,
|
|
153
|
+
type InstantLoopConfig,
|
|
154
|
+
// Reflexion generation
|
|
155
|
+
ReflexionGenerator,
|
|
156
|
+
createReflexionGenerator,
|
|
157
|
+
type ReflexionGeneratorConfig,
|
|
158
|
+
// Effectiveness tracking
|
|
159
|
+
LearningEffectivenessTracker,
|
|
160
|
+
createEffectivenessTracker,
|
|
161
|
+
type TaskAnnotation,
|
|
162
|
+
type EffectivenessMetrics,
|
|
163
|
+
type PlaybookEffectivenessEntry,
|
|
164
|
+
// Unified learning pipeline (three-speed: immediate + batch + maintenance)
|
|
165
|
+
UnifiedLearningPipeline,
|
|
166
|
+
createUnifiedPipeline,
|
|
167
|
+
type UnifiedPipelineConfig,
|
|
168
|
+
type UnifiedPipelineFeatures,
|
|
169
|
+
type ImmediateResult,
|
|
170
|
+
type UnifiedBatchResult,
|
|
171
|
+
type UnifiedPipelineStats,
|
|
172
|
+
// Energy evaluator
|
|
173
|
+
EnergyEvaluator,
|
|
174
|
+
createEnergyEvaluator,
|
|
175
|
+
type EnergyEvaluatorConfig,
|
|
176
|
+
type EnergyEvaluation,
|
|
177
|
+
type EnergySignal,
|
|
178
|
+
type EscalationReason,
|
|
179
|
+
type LaneTransition,
|
|
180
|
+
// Maintenance scheduler
|
|
181
|
+
MaintenanceScheduler,
|
|
182
|
+
createMaintenanceScheduler,
|
|
183
|
+
type MaintenanceSchedulerConfig,
|
|
184
|
+
type MaintenanceMode,
|
|
185
|
+
type MaintenanceCycleResult,
|
|
186
|
+
type MaintenanceTask,
|
|
187
|
+
type MaintenanceTaskResult,
|
|
188
|
+
// Healing orchestrator
|
|
189
|
+
HealingOrchestrator,
|
|
190
|
+
createHealingOrchestrator,
|
|
191
|
+
PlaybookDriftDetector,
|
|
192
|
+
MemoryBloatDetector,
|
|
193
|
+
MetricDriftDetector,
|
|
194
|
+
type HealingCycleResult,
|
|
195
|
+
type HealthContext,
|
|
196
|
+
type AnomalyDetector,
|
|
197
|
+
type RepairStrategy,
|
|
198
|
+
type Anomaly,
|
|
199
|
+
type RepairResult,
|
|
130
200
|
} from './learning/index.js';
|
|
131
201
|
|
|
132
|
-
// Session bank (Entire CLI
|
|
202
|
+
// Session bank (SessionLog checkpoint reader, with Entire CLI fallback)
|
|
133
203
|
export {
|
|
134
204
|
SessionBank,
|
|
135
|
-
|
|
136
|
-
|
|
205
|
+
CheckpointGitReader,
|
|
206
|
+
CheckpointParser,
|
|
207
|
+
detectFormat,
|
|
208
|
+
type CheckpointFormat,
|
|
137
209
|
type SessionRecord,
|
|
138
210
|
type SessionMetadata,
|
|
139
211
|
type TranscriptMessage,
|
|
@@ -159,6 +231,13 @@ export {
|
|
|
159
231
|
createSolver,
|
|
160
232
|
type RoutingDecision,
|
|
161
233
|
type SolverResult,
|
|
234
|
+
// MoE-inspired routing gate
|
|
235
|
+
MoEGate,
|
|
236
|
+
createMoEGate,
|
|
237
|
+
extractTaskFeatures,
|
|
238
|
+
MOE_FEATURE_SIZE,
|
|
239
|
+
MOE_STRATEGIES,
|
|
240
|
+
type MoEGateState,
|
|
162
241
|
// Refinement
|
|
163
242
|
SolutionEvaluator,
|
|
164
243
|
createSolutionEvaluator,
|
|
@@ -211,6 +290,9 @@ export {
|
|
|
211
290
|
JsonStore,
|
|
212
291
|
saveJson,
|
|
213
292
|
loadJson,
|
|
293
|
+
// Domain-partitioned storage
|
|
294
|
+
PartitionedStore,
|
|
295
|
+
type PartitionedStoreOptions,
|
|
214
296
|
} from './utils/index.js';
|
|
215
297
|
|
|
216
298
|
// Embeddings - Vector search and similarity
|
|
@@ -230,6 +312,8 @@ export {
|
|
|
230
312
|
SqliteVectorStore,
|
|
231
313
|
createVectorStore,
|
|
232
314
|
type VectorSearchResult,
|
|
315
|
+
// Inverted index (candidate narrowing)
|
|
316
|
+
InvertedIndex,
|
|
233
317
|
// Embedding manager
|
|
234
318
|
EmbeddingManager,
|
|
235
319
|
createEmbeddingManager,
|
|
@@ -353,6 +437,22 @@ export {
|
|
|
353
437
|
AgenticTaskOutputError,
|
|
354
438
|
} from './workspace/index.js';
|
|
355
439
|
|
|
440
|
+
// Persistence - Unified SQLite database for system-internal state
|
|
441
|
+
export {
|
|
442
|
+
SqlitePersistence,
|
|
443
|
+
createSqlitePersistence,
|
|
444
|
+
type SqlitePersistenceConfig,
|
|
445
|
+
type ExperienceRow,
|
|
446
|
+
type PlaybookRow,
|
|
447
|
+
type ReflexionRow,
|
|
448
|
+
type CausalEdgeRow,
|
|
449
|
+
type MetaObservationRow,
|
|
450
|
+
type MetaStrategyRow,
|
|
451
|
+
JsonToSqliteMigrator,
|
|
452
|
+
runMigration,
|
|
453
|
+
type MigrationResult,
|
|
454
|
+
} from './persistence/index.js';
|
|
455
|
+
|
|
356
456
|
// Factory - Unified interface for external integration (e.g., skill-tree)
|
|
357
457
|
export {
|
|
358
458
|
createCognitiveCoreFactory,
|
package/src/learning/analyzer.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Trajectory, CreditStrategy } from '../types/index.js';
|
|
2
|
+
import { classifyError } from '../utils/error-classifier.js';
|
|
3
|
+
import { detectRepeatedActions } from '../utils/trajectory-helpers.js';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Analysis result from trajectory examination
|
|
@@ -189,48 +191,30 @@ export class TrajectoryAnalyzer {
|
|
|
189
191
|
const patterns: ErrorPattern[] = [];
|
|
190
192
|
|
|
191
193
|
if (!trajectory.outcome.success && trajectory.outcome.errorInfo) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
[/permission denied/i, 'permission', 'Permission denied'],
|
|
200
|
-
[/syntax error/i, 'syntax', 'Syntax error in code'],
|
|
201
|
-
[/type error/i, 'type', 'Type mismatch error'],
|
|
202
|
-
[/assertion|assert/i, 'assertion', 'Assertion failed'],
|
|
203
|
-
[/exception|error/i, 'general', 'General error'],
|
|
204
|
-
];
|
|
205
|
-
|
|
206
|
-
for (const [pattern, type, desc] of errorTypes) {
|
|
207
|
-
if (pattern.test(errorInfo)) {
|
|
208
|
-
patterns.push({
|
|
209
|
-
type,
|
|
210
|
-
signature: errorInfo.slice(0, 100),
|
|
211
|
-
description: desc,
|
|
212
|
-
});
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
194
|
+
const classification = classifyError(trajectory.outcome.errorInfo);
|
|
195
|
+
if (classification) {
|
|
196
|
+
patterns.push({
|
|
197
|
+
type: classification.type,
|
|
198
|
+
signature: trajectory.outcome.errorInfo.slice(0, 100),
|
|
199
|
+
description: classification.description,
|
|
200
|
+
});
|
|
215
201
|
}
|
|
216
202
|
}
|
|
217
203
|
|
|
218
204
|
// Check for repeated failed actions
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
205
|
+
const repeated = detectRepeatedActions(
|
|
206
|
+
trajectory.steps,
|
|
207
|
+
this.config.actionRepetitionThreshold,
|
|
208
|
+
(a) => a, // Use raw action strings for analyzer (preserves full action for signature)
|
|
209
|
+
);
|
|
224
210
|
|
|
225
|
-
for (const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
});
|
|
233
|
-
}
|
|
211
|
+
for (const { action, count } of repeated) {
|
|
212
|
+
patterns.push({
|
|
213
|
+
type: 'repetition',
|
|
214
|
+
signature: action,
|
|
215
|
+
description: `Action repeated ${count} times`,
|
|
216
|
+
suggestedFix: 'Try a different approach',
|
|
217
|
+
});
|
|
234
218
|
}
|
|
235
219
|
|
|
236
220
|
return patterns;
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnergyEvaluator — Ruvector-inspired energy-threshold batch trigger.
|
|
3
|
+
*
|
|
4
|
+
* Instead of a simple count threshold, the evaluator measures "incoherence
|
|
5
|
+
* energy" from trajectory signals. A trajectory that introduces contradictions,
|
|
6
|
+
* encounters a novel domain with no playbooks, or triggers a high error rate
|
|
7
|
+
* can escalate to batch processing even before the count threshold is met.
|
|
8
|
+
*
|
|
9
|
+
* Inspired by ruvector's Compute Ladder (prime-radiant/execution/ladder.rs)
|
|
10
|
+
* which uses energy-driven escalation with named transition reasons.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { Trajectory } from '../types/index.js';
|
|
14
|
+
import type { InstantLoopResult } from './instant-loop.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Reasons why a batch was triggered — named transitions for audit.
|
|
18
|
+
*/
|
|
19
|
+
export type EscalationReason =
|
|
20
|
+
| 'count_threshold'
|
|
21
|
+
| 'contradiction_detected'
|
|
22
|
+
| 'novel_domain'
|
|
23
|
+
| 'high_error_rate'
|
|
24
|
+
| 'pattern_shift'
|
|
25
|
+
| 'manual_override';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Signals extracted from a trajectory that contribute to energy.
|
|
29
|
+
*/
|
|
30
|
+
export interface EnergySignal {
|
|
31
|
+
/** Whether a coherence contradiction was detected during instant loop */
|
|
32
|
+
contradictionDetected: boolean;
|
|
33
|
+
/** Whether this trajectory's domain has no existing playbooks */
|
|
34
|
+
novelDomain: boolean;
|
|
35
|
+
/** Error rate in the recent window exceeds threshold */
|
|
36
|
+
highErrorRate: boolean;
|
|
37
|
+
/** Significant shift in patterns (e.g., new tool usage, domain change) */
|
|
38
|
+
patternShift: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Result of an energy evaluation.
|
|
43
|
+
*/
|
|
44
|
+
export interface EnergyEvaluation {
|
|
45
|
+
/** Computed energy score (0.0 = calm, 1.0 = high incoherence) */
|
|
46
|
+
energy: number;
|
|
47
|
+
/** Whether the energy exceeds the batch trigger threshold */
|
|
48
|
+
shouldTriggerBatch: boolean;
|
|
49
|
+
/** Named reason(s) for the trigger decision */
|
|
50
|
+
reasons: EscalationReason[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Lane transition record for audit purposes.
|
|
55
|
+
*/
|
|
56
|
+
export interface LaneTransition {
|
|
57
|
+
timestamp: Date;
|
|
58
|
+
fromPhase: 'immediate' | 'batch' | 'maintenance';
|
|
59
|
+
toPhase: 'immediate' | 'batch' | 'maintenance';
|
|
60
|
+
reasons: EscalationReason[];
|
|
61
|
+
energy: number;
|
|
62
|
+
trajectoryId: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Configuration for the EnergyEvaluator.
|
|
67
|
+
*/
|
|
68
|
+
export interface EnergyEvaluatorConfig {
|
|
69
|
+
/** Trajectories needed before count-based batch trigger (default: 10) */
|
|
70
|
+
countThreshold: number;
|
|
71
|
+
/** Trigger batch when a contradiction is detected (default: true) */
|
|
72
|
+
triggerOnContradiction: boolean;
|
|
73
|
+
/** Trigger batch when a novel domain is encountered (default: true) */
|
|
74
|
+
triggerOnNovelDomain: boolean;
|
|
75
|
+
/** Error rate threshold for triggering batch (default: 0.6) */
|
|
76
|
+
errorRateThreshold: number;
|
|
77
|
+
/** Minimum time between batches in ms — debounce (default: 30000) */
|
|
78
|
+
minIntervalMs: number;
|
|
79
|
+
/** Number of recent trajectories to consider for error rate (default: 5) */
|
|
80
|
+
recentWindowSize: number;
|
|
81
|
+
/** Energy threshold for triggering batch (0.0–1.0, default: 0.7) */
|
|
82
|
+
energyThreshold: number;
|
|
83
|
+
/** Energy contribution weights */
|
|
84
|
+
weights: {
|
|
85
|
+
contradiction: number; // default: 0.4
|
|
86
|
+
novelDomain: number; // default: 0.3
|
|
87
|
+
highErrorRate: number; // default: 0.2
|
|
88
|
+
patternShift: number; // default: 0.1
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const DEFAULT_CONFIG: EnergyEvaluatorConfig = {
|
|
93
|
+
countThreshold: 10,
|
|
94
|
+
triggerOnContradiction: true,
|
|
95
|
+
triggerOnNovelDomain: true,
|
|
96
|
+
errorRateThreshold: 0.6,
|
|
97
|
+
minIntervalMs: 30_000,
|
|
98
|
+
recentWindowSize: 5,
|
|
99
|
+
energyThreshold: 0.7,
|
|
100
|
+
weights: {
|
|
101
|
+
contradiction: 0.4,
|
|
102
|
+
novelDomain: 0.3,
|
|
103
|
+
highErrorRate: 0.2,
|
|
104
|
+
patternShift: 0.1,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* EnergyEvaluator — determines when batch processing should be triggered
|
|
110
|
+
* based on measured incoherence energy from trajectory signals.
|
|
111
|
+
*/
|
|
112
|
+
export class EnergyEvaluator {
|
|
113
|
+
private config: EnergyEvaluatorConfig;
|
|
114
|
+
private pendingCount = 0;
|
|
115
|
+
private lastBatchTime = 0;
|
|
116
|
+
private recentOutcomes: boolean[] = [];
|
|
117
|
+
private knownDomains = new Set<string>();
|
|
118
|
+
private transitionLog: LaneTransition[] = [];
|
|
119
|
+
|
|
120
|
+
constructor(config?: Partial<EnergyEvaluatorConfig>) {
|
|
121
|
+
this.config = {
|
|
122
|
+
...DEFAULT_CONFIG,
|
|
123
|
+
...config,
|
|
124
|
+
weights: { ...DEFAULT_CONFIG.weights, ...config?.weights },
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Record a trajectory and evaluate whether batch should be triggered.
|
|
130
|
+
*/
|
|
131
|
+
evaluate(
|
|
132
|
+
trajectory: Trajectory,
|
|
133
|
+
_instantResult: InstantLoopResult,
|
|
134
|
+
signals?: Partial<EnergySignal>,
|
|
135
|
+
): EnergyEvaluation {
|
|
136
|
+
this.pendingCount++;
|
|
137
|
+
|
|
138
|
+
// Track recent outcomes for error rate
|
|
139
|
+
this.recentOutcomes.push(trajectory.outcome.success);
|
|
140
|
+
if (this.recentOutcomes.length > this.config.recentWindowSize) {
|
|
141
|
+
this.recentOutcomes.shift();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Build the energy signal
|
|
145
|
+
const domain = trajectory.task.domain ?? 'general';
|
|
146
|
+
const isNovelDomain = !this.knownDomains.has(domain);
|
|
147
|
+
this.knownDomains.add(domain);
|
|
148
|
+
|
|
149
|
+
const errorRate = this.recentOutcomes.length > 0
|
|
150
|
+
? this.recentOutcomes.filter(s => !s).length / this.recentOutcomes.length
|
|
151
|
+
: 0;
|
|
152
|
+
|
|
153
|
+
const signal: EnergySignal = {
|
|
154
|
+
contradictionDetected: signals?.contradictionDetected ?? false,
|
|
155
|
+
novelDomain: isNovelDomain && (signals?.novelDomain ?? true),
|
|
156
|
+
highErrorRate: errorRate >= this.config.errorRateThreshold,
|
|
157
|
+
patternShift: signals?.patternShift ?? false,
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// Compute energy
|
|
161
|
+
const energy = this.computeEnergy(signal);
|
|
162
|
+
|
|
163
|
+
// Determine reasons
|
|
164
|
+
const reasons: EscalationReason[] = [];
|
|
165
|
+
|
|
166
|
+
if (this.pendingCount >= this.config.countThreshold) {
|
|
167
|
+
reasons.push('count_threshold');
|
|
168
|
+
}
|
|
169
|
+
if (signal.contradictionDetected && this.config.triggerOnContradiction) {
|
|
170
|
+
reasons.push('contradiction_detected');
|
|
171
|
+
}
|
|
172
|
+
if (signal.novelDomain && this.config.triggerOnNovelDomain) {
|
|
173
|
+
reasons.push('novel_domain');
|
|
174
|
+
}
|
|
175
|
+
if (signal.highErrorRate) {
|
|
176
|
+
reasons.push('high_error_rate');
|
|
177
|
+
}
|
|
178
|
+
if (signal.patternShift) {
|
|
179
|
+
reasons.push('pattern_shift');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Check debounce
|
|
183
|
+
const now = Date.now();
|
|
184
|
+
const withinDebounce = (now - this.lastBatchTime) < this.config.minIntervalMs;
|
|
185
|
+
|
|
186
|
+
// Trigger if count threshold reached OR energy exceeds threshold
|
|
187
|
+
const shouldTrigger = !withinDebounce && (
|
|
188
|
+
this.pendingCount >= this.config.countThreshold ||
|
|
189
|
+
energy >= this.config.energyThreshold
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
if (shouldTrigger && reasons.length > 0) {
|
|
193
|
+
this.transitionLog.push({
|
|
194
|
+
timestamp: new Date(),
|
|
195
|
+
fromPhase: 'immediate',
|
|
196
|
+
toPhase: 'batch',
|
|
197
|
+
reasons,
|
|
198
|
+
energy,
|
|
199
|
+
trajectoryId: trajectory.id,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
energy,
|
|
205
|
+
shouldTriggerBatch: shouldTrigger,
|
|
206
|
+
reasons: shouldTrigger ? reasons : [],
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Compute energy from signal using weighted sum.
|
|
212
|
+
*/
|
|
213
|
+
private computeEnergy(signal: EnergySignal): number {
|
|
214
|
+
const w = this.config.weights;
|
|
215
|
+
let energy = 0;
|
|
216
|
+
|
|
217
|
+
if (signal.contradictionDetected) energy += w.contradiction;
|
|
218
|
+
if (signal.novelDomain) energy += w.novelDomain;
|
|
219
|
+
if (signal.highErrorRate) energy += w.highErrorRate;
|
|
220
|
+
if (signal.patternShift) energy += w.patternShift;
|
|
221
|
+
|
|
222
|
+
return Math.min(1.0, energy);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Reset after a batch run completes.
|
|
227
|
+
*/
|
|
228
|
+
resetAfterBatch(): void {
|
|
229
|
+
this.pendingCount = 0;
|
|
230
|
+
this.lastBatchTime = Date.now();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Force-trigger evaluation (for manual override).
|
|
235
|
+
*/
|
|
236
|
+
forceEvaluate(): EnergyEvaluation {
|
|
237
|
+
return {
|
|
238
|
+
energy: 1.0,
|
|
239
|
+
shouldTriggerBatch: true,
|
|
240
|
+
reasons: ['manual_override'],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Seed known domains (e.g., from existing playbooks on init).
|
|
246
|
+
*/
|
|
247
|
+
seedKnownDomains(domains: string[]): void {
|
|
248
|
+
for (const d of domains) {
|
|
249
|
+
this.knownDomains.add(d);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Get the current pending count.
|
|
255
|
+
*/
|
|
256
|
+
getPendingCount(): number {
|
|
257
|
+
return this.pendingCount;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Get the transition log for audit/debugging.
|
|
262
|
+
*/
|
|
263
|
+
getTransitionLog(): readonly LaneTransition[] {
|
|
264
|
+
return this.transitionLog;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Get current configuration.
|
|
269
|
+
*/
|
|
270
|
+
getConfig(): Readonly<EnergyEvaluatorConfig> {
|
|
271
|
+
return this.config;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Create an EnergyEvaluator.
|
|
277
|
+
*/
|
|
278
|
+
export function createEnergyEvaluator(
|
|
279
|
+
config?: Partial<EnergyEvaluatorConfig>,
|
|
280
|
+
): EnergyEvaluator {
|
|
281
|
+
return new EnergyEvaluator(config);
|
|
282
|
+
}
|