cognitive-core 0.1.2 → 0.2.1
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/settings.json +111 -2
- package/.sessionlog/settings.json +4 -0
- 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 +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -6
- 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 +311 -0
- package/dist/learning/unified-pipeline.d.ts.map +1 -0
- package/dist/learning/unified-pipeline.js +844 -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 +43 -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/efficacy-toolkit.d.ts +164 -0
- package/dist/workspace/efficacy-toolkit.d.ts.map +1 -0
- package/dist/workspace/efficacy-toolkit.js +281 -0
- package/dist/workspace/efficacy-toolkit.js.map +1 -0
- package/dist/workspace/index.d.ts +2 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +3 -1
- package/dist/workspace/index.js.map +1 -1
- 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/templates/index.d.ts +3 -0
- package/dist/workspace/templates/index.d.ts.map +1 -1
- package/dist/workspace/templates/index.js +6 -0
- package/dist/workspace/templates/index.js.map +1 -1
- package/dist/workspace/templates/playbook-decay-detection.d.ts +46 -0
- package/dist/workspace/templates/playbook-decay-detection.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-decay-detection.js +197 -0
- package/dist/workspace/templates/playbook-decay-detection.js.map +1 -0
- package/dist/workspace/templates/playbook-efficacy-audit.d.ts +46 -0
- package/dist/workspace/templates/playbook-efficacy-audit.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-efficacy-audit.js +160 -0
- package/dist/workspace/templates/playbook-efficacy-audit.js.map +1 -0
- package/dist/workspace/templates/playbook-lifecycle-review.d.ts +51 -0
- package/dist/workspace/templates/playbook-lifecycle-review.d.ts.map +1 -0
- package/dist/workspace/templates/playbook-lifecycle-review.js +187 -0
- package/dist/workspace/templates/playbook-lifecycle-review.js.map +1 -0
- 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 +12 -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 +136 -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 +66 -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 +1191 -0
- package/src/memory/candidate-retrieval.ts +72 -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/efficacy-toolkit.ts +496 -0
- package/src/workspace/index.ts +29 -0
- package/src/workspace/runner.ts +3 -3
- package/src/workspace/templates/index.ts +24 -0
- package/src/workspace/templates/playbook-decay-detection.ts +272 -0
- package/src/workspace/templates/playbook-efficacy-audit.ts +246 -0
- package/src/workspace/templates/playbook-lifecycle-review.ts +274 -0
- 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/fixtures/behavioral-trajectories.ts +210 -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/pipeline-data-correctness.test.ts +794 -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/meta-learner.test.ts +418 -0
- package/tests/learning/pipeline-memory-updates.test.ts +721 -0
- package/tests/learning/reflexion-generator.test.ts +411 -0
- package/tests/learning/trajectory-sources.test.ts +12 -4
- package/tests/learning/unified-pipeline-efficacy.test.ts +232 -0
- package/tests/learning/unified-pipeline.test.ts +322 -0
- package/tests/mcp/playbook-server.test.ts +6 -1
- package/tests/memory/candidate-retrieval.test.ts +167 -0
- 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/meta.test.ts +399 -0
- 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/evaluator.test.ts +257 -0
- 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/search/verification-runner.test.ts +357 -0
- 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/error-classifier.test.ts +149 -0
- package/tests/utils/partitioned-store.test.ts +230 -0
- package/tests/utils/trajectory-helpers.test.ts +163 -0
- package/tests/workspace/efficacy-toolkit.test.ts +404 -0
- package/tests/workspace/full-flow.test.ts +10 -4
- package/tests/workspace/runner.test.ts +10 -4
- package/tests/workspace/templates/playbook-efficacy.test.ts +377 -0
- 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
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests that ruvector-inspired features are individually toggleable
|
|
3
|
+
* via config.features without breaking the system.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
import { Atlas, createAtlas } from '../src/atlas.js';
|
|
7
|
+
import { createDefaultConfig, type AtlasConfig } from '../src/types/config.js';
|
|
8
|
+
import { InstantLoop } from '../src/learning/instant-loop.js';
|
|
9
|
+
import { MemorySystem } from '../src/memory/system.js';
|
|
10
|
+
import { UnifiedLearningPipeline } from '../src/learning/unified-pipeline.js';
|
|
11
|
+
import {
|
|
12
|
+
createTrajectory,
|
|
13
|
+
type Trajectory,
|
|
14
|
+
} from '../src/types/trajectory.js';
|
|
15
|
+
import { createTask } from '../src/types/task.js';
|
|
16
|
+
import { createStep } from '../src/types/step.js';
|
|
17
|
+
import { successOutcome, failureOutcome } from '../src/types/outcome.js';
|
|
18
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
19
|
+
import { join } from 'node:path';
|
|
20
|
+
import { tmpdir } from 'node:os';
|
|
21
|
+
import { createSqlitePersistence } from '../src/persistence/index.js';
|
|
22
|
+
|
|
23
|
+
function makeTrajectory(overrides?: {
|
|
24
|
+
success?: boolean;
|
|
25
|
+
domain?: string;
|
|
26
|
+
errorInfo?: string;
|
|
27
|
+
}): Trajectory {
|
|
28
|
+
const success = overrides?.success ?? true;
|
|
29
|
+
return createTrajectory({
|
|
30
|
+
task: createTask({
|
|
31
|
+
description: 'Fix the typescript import error',
|
|
32
|
+
domain: overrides?.domain ?? 'typescript',
|
|
33
|
+
}),
|
|
34
|
+
steps: [
|
|
35
|
+
createStep({
|
|
36
|
+
thought: 'Let me check the imports',
|
|
37
|
+
action: 'ReadFile src/index.ts',
|
|
38
|
+
observation: 'File content: import { foo } from "./bar"',
|
|
39
|
+
}),
|
|
40
|
+
],
|
|
41
|
+
outcome: success
|
|
42
|
+
? successOutcome('Fixed import path')
|
|
43
|
+
: failureOutcome(overrides?.errorInfo ?? 'Could not resolve import'),
|
|
44
|
+
agentId: 'test-agent',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe('Feature Toggles', () => {
|
|
49
|
+
describe('config defaults', () => {
|
|
50
|
+
it('should default all feature toggles to true', () => {
|
|
51
|
+
const config = createDefaultConfig();
|
|
52
|
+
expect(config.features.instantLoop).toBe(true);
|
|
53
|
+
expect(config.features.reflexion).toBe(true);
|
|
54
|
+
expect(config.features.coherenceChecking).toBe(true);
|
|
55
|
+
expect(config.features.reasoningBank).toBe(true);
|
|
56
|
+
expect(config.features.causalExtraction).toBe(true);
|
|
57
|
+
expect(config.features.temporalCompression).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should allow disabling individual features', () => {
|
|
61
|
+
const config = createDefaultConfig({
|
|
62
|
+
features: {
|
|
63
|
+
instantLoop: false,
|
|
64
|
+
reflexion: false,
|
|
65
|
+
coherenceChecking: false,
|
|
66
|
+
reasoningBank: false,
|
|
67
|
+
causalExtraction: false,
|
|
68
|
+
temporalCompression: false,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
expect(config.features.instantLoop).toBe(false);
|
|
72
|
+
expect(config.features.reflexion).toBe(false);
|
|
73
|
+
expect(config.features.coherenceChecking).toBe(false);
|
|
74
|
+
expect(config.features.reasoningBank).toBe(false);
|
|
75
|
+
expect(config.features.causalExtraction).toBe(false);
|
|
76
|
+
expect(config.features.temporalCompression).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('should allow partial feature overrides', () => {
|
|
80
|
+
const config = createDefaultConfig({
|
|
81
|
+
features: { instantLoop: false },
|
|
82
|
+
});
|
|
83
|
+
expect(config.features.instantLoop).toBe(false);
|
|
84
|
+
// Others remain true
|
|
85
|
+
expect(config.features.reflexion).toBe(true);
|
|
86
|
+
expect(config.features.causalExtraction).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('Atlas with features disabled', () => {
|
|
91
|
+
let tempDir: string;
|
|
92
|
+
|
|
93
|
+
beforeEach(async () => {
|
|
94
|
+
tempDir = await mkdtemp(join(tmpdir(), 'atlas-feature-toggle-test-'));
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
afterEach(async () => {
|
|
98
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should expose unified learning pipeline', async () => {
|
|
102
|
+
const atlas = createAtlas({
|
|
103
|
+
storage: { baseDir: tempDir },
|
|
104
|
+
});
|
|
105
|
+
await atlas.init();
|
|
106
|
+
|
|
107
|
+
expect(atlas.getLearning()).toBeDefined();
|
|
108
|
+
expect(atlas.getLearning().getAccumulatedCount()).toBe(0);
|
|
109
|
+
await atlas.close();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('should processTrajectory and return ImmediateResult', async () => {
|
|
113
|
+
const atlas = createAtlas({
|
|
114
|
+
storage: { baseDir: tempDir },
|
|
115
|
+
features: { reflexion: false, causalExtraction: false },
|
|
116
|
+
});
|
|
117
|
+
await atlas.init();
|
|
118
|
+
|
|
119
|
+
const trajectory = makeTrajectory();
|
|
120
|
+
const result = await atlas.processTrajectory(trajectory);
|
|
121
|
+
expect(result.instantLoop).toBeDefined();
|
|
122
|
+
expect(result.instantLoop.experienceId).toBeDefined();
|
|
123
|
+
expect(result.batchTriggered).toBe(false);
|
|
124
|
+
|
|
125
|
+
await atlas.close();
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('should work with all features disabled', async () => {
|
|
129
|
+
const atlas = createAtlas({
|
|
130
|
+
storage: { baseDir: tempDir },
|
|
131
|
+
features: {
|
|
132
|
+
instantLoop: false,
|
|
133
|
+
reflexion: false,
|
|
134
|
+
coherenceChecking: false,
|
|
135
|
+
reasoningBank: false,
|
|
136
|
+
causalExtraction: false,
|
|
137
|
+
temporalCompression: false,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
await atlas.init();
|
|
141
|
+
|
|
142
|
+
const trajectory = makeTrajectory();
|
|
143
|
+
const result = await atlas.processTrajectory(trajectory);
|
|
144
|
+
expect(result.instantLoop).toBeDefined();
|
|
145
|
+
expect(result.instantLoop.experienceId).toBeDefined();
|
|
146
|
+
|
|
147
|
+
await atlas.close();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe('InstantLoop toggles', () => {
|
|
152
|
+
let tempDir: string;
|
|
153
|
+
let memory: MemorySystem;
|
|
154
|
+
let persistence: any;
|
|
155
|
+
|
|
156
|
+
beforeEach(async () => {
|
|
157
|
+
tempDir = await mkdtemp(join(tmpdir(), 'atlas-il-toggle-test-'));
|
|
158
|
+
persistence = createSqlitePersistence({ baseDir: tempDir });
|
|
159
|
+
await persistence.init();
|
|
160
|
+
memory = new MemorySystem(persistence, tempDir);
|
|
161
|
+
await memory.init();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
afterEach(async () => {
|
|
165
|
+
await memory.close();
|
|
166
|
+
persistence.close();
|
|
167
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('should skip reflexion when enableReflexion is false', async () => {
|
|
171
|
+
const loop = new InstantLoop(memory, { enableReflexion: false });
|
|
172
|
+
const trajectory = makeTrajectory();
|
|
173
|
+
const result = await loop.process(trajectory);
|
|
174
|
+
|
|
175
|
+
expect(result.reflexionEpisodeId).toBeUndefined();
|
|
176
|
+
expect(result.experienceId).toBeDefined();
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('should generate reflexion by default', async () => {
|
|
180
|
+
const loop = new InstantLoop(memory);
|
|
181
|
+
const trajectory = makeTrajectory();
|
|
182
|
+
const result = await loop.process(trajectory);
|
|
183
|
+
|
|
184
|
+
expect(result.reflexionEpisodeId).toBeDefined();
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('should skip causal extraction when enableCausalExtraction is false', async () => {
|
|
188
|
+
const loop = new InstantLoop(memory, { enableCausalExtraction: false });
|
|
189
|
+
const trajectory = makeTrajectory();
|
|
190
|
+
const result = await loop.process(trajectory);
|
|
191
|
+
|
|
192
|
+
expect(result.causalEdgesExtracted).toBe(0);
|
|
193
|
+
expect(result.experienceId).toBeDefined();
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('should extract causal edges by default', async () => {
|
|
197
|
+
const loop = new InstantLoop(memory);
|
|
198
|
+
const trajectory = makeTrajectory();
|
|
199
|
+
const result = await loop.process(trajectory);
|
|
200
|
+
|
|
201
|
+
expect(result.causalEdgesExtracted).toBeGreaterThan(0);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe('UnifiedLearningPipeline toggles', () => {
|
|
206
|
+
let tempDir: string;
|
|
207
|
+
let memory: MemorySystem;
|
|
208
|
+
let persistence: any;
|
|
209
|
+
|
|
210
|
+
beforeEach(async () => {
|
|
211
|
+
tempDir = await mkdtemp(join(tmpdir(), 'atlas-lp-toggle-test-'));
|
|
212
|
+
persistence = createSqlitePersistence({ baseDir: tempDir });
|
|
213
|
+
await persistence.init();
|
|
214
|
+
memory = new MemorySystem(persistence, tempDir);
|
|
215
|
+
await memory.init();
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
afterEach(async () => {
|
|
219
|
+
await memory.close();
|
|
220
|
+
persistence.close();
|
|
221
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('should skip temporal compression when disabled', async () => {
|
|
225
|
+
const pipeline = new UnifiedLearningPipeline(memory, {
|
|
226
|
+
features: { temporalCompression: false, reasoningBank: true },
|
|
227
|
+
batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
|
|
228
|
+
}, persistence);
|
|
229
|
+
await pipeline.init();
|
|
230
|
+
|
|
231
|
+
// Process enough trajectories, then force batch
|
|
232
|
+
for (let i = 0; i < 10; i++) {
|
|
233
|
+
await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const result = await pipeline.runBatch();
|
|
237
|
+
// Compression fields should be zero when disabled
|
|
238
|
+
expect(result.experiencesCompressed.promoted).toBe(0);
|
|
239
|
+
expect(result.experiencesCompressed.demoted).toBe(0);
|
|
240
|
+
expect(result.experiencesCompressed.evicted).toBe(0);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it('should skip reasoning bank clustering when disabled', async () => {
|
|
244
|
+
const pipeline = new UnifiedLearningPipeline(memory, {
|
|
245
|
+
features: { temporalCompression: true, reasoningBank: false },
|
|
246
|
+
batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
|
|
247
|
+
}, persistence);
|
|
248
|
+
await pipeline.init();
|
|
249
|
+
|
|
250
|
+
for (let i = 0; i < 10; i++) {
|
|
251
|
+
await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Should not throw even without reasoning bank
|
|
255
|
+
const result = await pipeline.runBatch();
|
|
256
|
+
expect(result.trajectoriesProcessed).toBe(10);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it('should work with both disabled', async () => {
|
|
260
|
+
const pipeline = new UnifiedLearningPipeline(memory, {
|
|
261
|
+
features: { temporalCompression: false, reasoningBank: false },
|
|
262
|
+
batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
|
|
263
|
+
}, persistence);
|
|
264
|
+
await pipeline.init();
|
|
265
|
+
|
|
266
|
+
for (let i = 0; i < 10; i++) {
|
|
267
|
+
await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const result = await pipeline.runBatch();
|
|
271
|
+
expect(result.trajectoriesProcessed).toBe(10);
|
|
272
|
+
expect(result.experiencesCompressed.evicted).toBe(0);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story-based trajectory fixtures for behavioral tests.
|
|
3
|
+
*
|
|
4
|
+
* Each factory produces a realistic trajectory with semantically meaningful
|
|
5
|
+
* steps — the kind of thing an agent actually does when solving a task.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createTrajectory, type Trajectory } from '../../src/types/trajectory.js';
|
|
9
|
+
import { createTask } from '../../src/types/task.js';
|
|
10
|
+
import { createStep } from '../../src/types/step.js';
|
|
11
|
+
import { successOutcome, failureOutcome } from '../../src/types/outcome.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Successful "fix broken TypeScript import" trajectory.
|
|
15
|
+
* Steps: read file → identify wrong path → edit import → run tsc → pass.
|
|
16
|
+
*/
|
|
17
|
+
export function makeTypescriptImportFix(variant: number): Trajectory {
|
|
18
|
+
const files = ['routes.ts', 'utils.ts', 'handler.ts', 'service.ts', 'controller.ts', 'middleware.ts'];
|
|
19
|
+
const file = files[variant % files.length];
|
|
20
|
+
return createTrajectory({
|
|
21
|
+
task: createTask({
|
|
22
|
+
domain: 'typescript',
|
|
23
|
+
description: `Fix broken TypeScript import in src/${file}`,
|
|
24
|
+
}),
|
|
25
|
+
steps: [
|
|
26
|
+
createStep({
|
|
27
|
+
thought: `Check the import statements in ${file}`,
|
|
28
|
+
action: `ReadFile src/${file}`,
|
|
29
|
+
observation: `import { UserService } from "./services/user"\n// TS2307: Cannot find module './services/user'`,
|
|
30
|
+
}),
|
|
31
|
+
createStep({
|
|
32
|
+
thought: 'The import path is missing the .js extension required by ESM',
|
|
33
|
+
action: `EditFile src/${file}`,
|
|
34
|
+
observation: `Updated: import { UserService } from "./services/user.js"`,
|
|
35
|
+
}),
|
|
36
|
+
createStep({
|
|
37
|
+
thought: 'Verify the fix compiles',
|
|
38
|
+
action: 'Bash tsc --noEmit',
|
|
39
|
+
observation: 'Compilation successful. No errors found.',
|
|
40
|
+
}),
|
|
41
|
+
],
|
|
42
|
+
outcome: successOutcome(`Fixed ESM import extension in src/${file}`),
|
|
43
|
+
agentId: 'test-agent',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Successful "fix Python type error" trajectory.
|
|
49
|
+
* Steps: read traceback → identify wrong type → edit function → run pytest → pass.
|
|
50
|
+
*/
|
|
51
|
+
export function makePythonTypeFix(variant: number): Trajectory {
|
|
52
|
+
const files = ['api.py', 'models.py', 'views.py', 'serializers.py', 'utils.py'];
|
|
53
|
+
const file = files[variant % files.length];
|
|
54
|
+
return createTrajectory({
|
|
55
|
+
task: createTask({
|
|
56
|
+
domain: 'python',
|
|
57
|
+
description: `Fix Python type error in ${file}`,
|
|
58
|
+
}),
|
|
59
|
+
steps: [
|
|
60
|
+
createStep({
|
|
61
|
+
thought: `Read the failing file ${file}`,
|
|
62
|
+
action: `ReadFile ${file}`,
|
|
63
|
+
observation: `def process_items(items: list[str]) -> int:\n return items.count`,
|
|
64
|
+
}),
|
|
65
|
+
createStep({
|
|
66
|
+
thought: 'The function returns the method reference instead of calling it',
|
|
67
|
+
action: `EditFile ${file}`,
|
|
68
|
+
observation: `Updated: return items.count() # was missing parentheses`,
|
|
69
|
+
}),
|
|
70
|
+
createStep({
|
|
71
|
+
thought: 'Run the tests to verify',
|
|
72
|
+
action: 'Bash pytest -x',
|
|
73
|
+
observation: '5 passed in 0.3s',
|
|
74
|
+
}),
|
|
75
|
+
],
|
|
76
|
+
outcome: successOutcome(`Fixed missing parentheses in ${file}`),
|
|
77
|
+
agentId: 'test-agent',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Failed "fix authentication bypass" trajectory.
|
|
83
|
+
* Steps: read auth code → attempt fix → tests still fail.
|
|
84
|
+
*/
|
|
85
|
+
export function makeFailedAuthFix(errorDetail: string): Trajectory {
|
|
86
|
+
return createTrajectory({
|
|
87
|
+
task: createTask({
|
|
88
|
+
domain: 'security',
|
|
89
|
+
description: 'Fix authentication bypass vulnerability in auth middleware',
|
|
90
|
+
}),
|
|
91
|
+
steps: [
|
|
92
|
+
createStep({
|
|
93
|
+
thought: 'Read the auth middleware to understand the vulnerability',
|
|
94
|
+
action: 'ReadFile src/middleware/auth.ts',
|
|
95
|
+
observation: 'JWT token validation skips expiry check when token has admin role',
|
|
96
|
+
}),
|
|
97
|
+
createStep({
|
|
98
|
+
thought: 'Add expiry validation for all tokens regardless of role',
|
|
99
|
+
action: 'EditFile src/middleware/auth.ts',
|
|
100
|
+
observation: 'Added: if (isTokenExpired(token)) throw new AuthError("expired")',
|
|
101
|
+
}),
|
|
102
|
+
createStep({
|
|
103
|
+
thought: 'Run the security test suite',
|
|
104
|
+
action: 'Bash npm run test:security',
|
|
105
|
+
observation: `FAIL: ${errorDetail}`,
|
|
106
|
+
}),
|
|
107
|
+
],
|
|
108
|
+
outcome: failureOutcome(errorDetail),
|
|
109
|
+
agentId: 'test-agent',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Successful Kubernetes deployment — completely different domain.
|
|
115
|
+
*/
|
|
116
|
+
export function makeKubernetesDeploy(): Trajectory {
|
|
117
|
+
return createTrajectory({
|
|
118
|
+
task: createTask({
|
|
119
|
+
domain: 'devops',
|
|
120
|
+
description: 'Deploy updated API service to Kubernetes staging cluster',
|
|
121
|
+
}),
|
|
122
|
+
steps: [
|
|
123
|
+
createStep({
|
|
124
|
+
thought: 'Check current deployment status',
|
|
125
|
+
action: 'Bash kubectl get pods -n staging',
|
|
126
|
+
observation: 'api-service-7f8d9c 1/1 Running 0 12h',
|
|
127
|
+
}),
|
|
128
|
+
createStep({
|
|
129
|
+
thought: 'Apply the new deployment manifest',
|
|
130
|
+
action: 'Bash kubectl apply -f k8s/api-service.yaml',
|
|
131
|
+
observation: 'deployment.apps/api-service configured',
|
|
132
|
+
}),
|
|
133
|
+
createStep({
|
|
134
|
+
thought: 'Wait for rollout to complete',
|
|
135
|
+
action: 'Bash kubectl rollout status deployment/api-service -n staging',
|
|
136
|
+
observation: 'deployment "api-service" successfully rolled out',
|
|
137
|
+
}),
|
|
138
|
+
],
|
|
139
|
+
outcome: successOutcome('Deployed api-service v2.3.1 to staging'),
|
|
140
|
+
agentId: 'test-agent',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Inefficient trajectory with many repeated read actions.
|
|
146
|
+
* Useful for testing reflexion critique of wasted steps.
|
|
147
|
+
*/
|
|
148
|
+
export function makeInefficient(stepCount: number): Trajectory {
|
|
149
|
+
const steps = [];
|
|
150
|
+
for (let i = 0; i < stepCount; i++) {
|
|
151
|
+
steps.push(
|
|
152
|
+
createStep({
|
|
153
|
+
thought: `Check config again (attempt ${i + 1})`,
|
|
154
|
+
action: 'ReadFile src/config.ts',
|
|
155
|
+
observation: 'export const config = { debug: false, port: 3000 }',
|
|
156
|
+
}),
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
// Finally do the actual fix
|
|
160
|
+
steps.push(
|
|
161
|
+
createStep({
|
|
162
|
+
thought: 'After re-reading many times, change the debug flag',
|
|
163
|
+
action: 'EditFile src/config.ts',
|
|
164
|
+
observation: 'Updated: debug: true',
|
|
165
|
+
}),
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
return createTrajectory({
|
|
169
|
+
task: createTask({
|
|
170
|
+
domain: 'typescript',
|
|
171
|
+
description: 'Enable debug mode in application config',
|
|
172
|
+
}),
|
|
173
|
+
steps,
|
|
174
|
+
outcome: failureOutcome('Timed out after too many read operations'),
|
|
175
|
+
agentId: 'test-agent',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Successful trajectory with a specific solution description,
|
|
181
|
+
* useful for verifying causal edge extraction.
|
|
182
|
+
*/
|
|
183
|
+
export function makeSuccessfulWithSolution(
|
|
184
|
+
domain: string,
|
|
185
|
+
description: string,
|
|
186
|
+
solution: string,
|
|
187
|
+
): Trajectory {
|
|
188
|
+
return createTrajectory({
|
|
189
|
+
task: createTask({ domain, description }),
|
|
190
|
+
steps: [
|
|
191
|
+
createStep({
|
|
192
|
+
thought: 'Analyze the problem',
|
|
193
|
+
action: 'ReadFile src/main.ts',
|
|
194
|
+
observation: 'Found the issue',
|
|
195
|
+
}),
|
|
196
|
+
createStep({
|
|
197
|
+
thought: 'Apply the fix',
|
|
198
|
+
action: 'EditFile src/main.ts',
|
|
199
|
+
observation: 'File updated',
|
|
200
|
+
}),
|
|
201
|
+
createStep({
|
|
202
|
+
thought: 'Verify',
|
|
203
|
+
action: 'Bash npm test',
|
|
204
|
+
observation: 'All tests passed',
|
|
205
|
+
}),
|
|
206
|
+
],
|
|
207
|
+
outcome: successOutcome(solution),
|
|
208
|
+
agentId: 'test-agent',
|
|
209
|
+
});
|
|
210
|
+
}
|
package/tests/gap-fixes.test.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type { Playbook } from '../src/types/index.js';
|
|
|
24
24
|
// Memory
|
|
25
25
|
import { createMemorySystem, type MemorySystem } from '../src/memory/system.js';
|
|
26
26
|
import { MetaMemory } from '../src/memory/meta.js';
|
|
27
|
+
import { createSqlitePersistence } from '../src/persistence/index.js';
|
|
27
28
|
|
|
28
29
|
// Learning
|
|
29
30
|
import { MetaLearner, createMetaLearner } from '../src/learning/meta-learner.js';
|
|
@@ -209,7 +210,7 @@ describe('Gap 1: LLMPlaybookExtractor deletion', () => {
|
|
|
209
210
|
expect('PlaybookExtractor' in learningExports).toBe(true);
|
|
210
211
|
expect('MetaLearner' in learningExports).toBe(true);
|
|
211
212
|
expect('PlaybookUsageInference' in learningExports).toBe(true);
|
|
212
|
-
expect('
|
|
213
|
+
expect('UnifiedLearningPipeline' in learningExports).toBe(true);
|
|
213
214
|
expect('LearningEffectivenessTracker' in learningExports).toBe(true);
|
|
214
215
|
});
|
|
215
216
|
});
|
|
@@ -283,15 +284,19 @@ describe('Gap 4: MetaLearner.recordFromReflection', () => {
|
|
|
283
284
|
let tempDir: string;
|
|
284
285
|
let metaMemory: MetaMemory;
|
|
285
286
|
let metaLearner: MetaLearner;
|
|
287
|
+
let persistence: any;
|
|
286
288
|
|
|
287
289
|
beforeEach(async () => {
|
|
288
290
|
tempDir = await mkdtemp(join(tmpdir(), 'meta-learner-test-'));
|
|
289
|
-
|
|
291
|
+
persistence = createSqlitePersistence({ baseDir: tempDir });
|
|
292
|
+
await persistence.init();
|
|
293
|
+
metaMemory = new MetaMemory(persistence);
|
|
290
294
|
await metaMemory.init();
|
|
291
295
|
metaLearner = createMetaLearner(metaMemory);
|
|
292
296
|
});
|
|
293
297
|
|
|
294
298
|
afterEach(async () => {
|
|
299
|
+
persistence.close();
|
|
295
300
|
await rm(tempDir, { recursive: true, force: true });
|
|
296
301
|
});
|
|
297
302
|
|
|
@@ -538,10 +543,13 @@ describe('Gap 5a: SolutionEvaluator.setTaskRunner', () => {
|
|
|
538
543
|
let tempDir: string;
|
|
539
544
|
let memory: MemorySystem;
|
|
540
545
|
let agentManager: AgentManager;
|
|
546
|
+
let persistence: any;
|
|
541
547
|
|
|
542
548
|
beforeEach(async () => {
|
|
543
549
|
tempDir = await mkdtemp(join(tmpdir(), 'evaluator-test-'));
|
|
544
|
-
|
|
550
|
+
persistence = createSqlitePersistence({ baseDir: tempDir });
|
|
551
|
+
await persistence.init();
|
|
552
|
+
memory = createMemorySystem(persistence, tempDir);
|
|
545
553
|
await memory.init();
|
|
546
554
|
agentManager = createAgentManager(memory);
|
|
547
555
|
const mockBackend = createMockBackend({ success: true, result: 'ok', durationMs: 10 });
|
|
@@ -550,6 +558,7 @@ describe('Gap 5a: SolutionEvaluator.setTaskRunner', () => {
|
|
|
550
558
|
|
|
551
559
|
afterEach(async () => {
|
|
552
560
|
await memory.close();
|
|
561
|
+
persistence.close();
|
|
553
562
|
await rm(tempDir, { recursive: true, force: true });
|
|
554
563
|
});
|
|
555
564
|
|
|
@@ -686,10 +695,13 @@ describe('Gap 5b: RefinementLoop.setTaskRunner', () => {
|
|
|
686
695
|
let memory: MemorySystem;
|
|
687
696
|
let agentManager: AgentManager;
|
|
688
697
|
let mockBackend: MockBackend;
|
|
698
|
+
let persistence: any;
|
|
689
699
|
|
|
690
700
|
beforeEach(async () => {
|
|
691
701
|
tempDir = await mkdtemp(join(tmpdir(), 'refine-runner-test-'));
|
|
692
|
-
|
|
702
|
+
persistence = createSqlitePersistence({ baseDir: tempDir });
|
|
703
|
+
await persistence.init();
|
|
704
|
+
memory = createMemorySystem(persistence, tempDir);
|
|
693
705
|
await memory.init();
|
|
694
706
|
agentManager = createAgentManager(memory);
|
|
695
707
|
mockBackend = createMockBackend({
|
|
@@ -702,6 +714,7 @@ describe('Gap 5b: RefinementLoop.setTaskRunner', () => {
|
|
|
702
714
|
|
|
703
715
|
afterEach(async () => {
|
|
704
716
|
await memory.close();
|
|
717
|
+
persistence.close();
|
|
705
718
|
await rm(tempDir, { recursive: true, force: true });
|
|
706
719
|
});
|
|
707
720
|
|