cognitive-core 0.2.0 → 0.2.2
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/dist/atlas.d.ts +10 -0
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +65 -0
- package/dist/atlas.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/learning/index.d.ts +1 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/pipeline.d.ts +4 -31
- package/dist/learning/pipeline.d.ts.map +1 -1
- package/dist/learning/pipeline.js +12 -64
- package/dist/learning/pipeline.js.map +1 -1
- package/dist/learning/unified-pipeline.d.ts +30 -0
- package/dist/learning/unified-pipeline.d.ts.map +1 -1
- package/dist/learning/unified-pipeline.js +207 -0
- package/dist/learning/unified-pipeline.js.map +1 -1
- package/dist/memory/candidate-retrieval.d.ts.map +1 -1
- package/dist/memory/candidate-retrieval.js +3 -1
- package/dist/memory/candidate-retrieval.js.map +1 -1
- package/dist/memory/curated-loader.d.ts +21 -4
- package/dist/memory/curated-loader.d.ts.map +1 -1
- package/dist/memory/curated-loader.js +53 -16
- package/dist/memory/curated-loader.js.map +1 -1
- package/dist/memory/index.d.ts +2 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +3 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/playbook.d.ts +6 -0
- package/dist/memory/playbook.d.ts.map +1 -1
- package/dist/memory/playbook.js +15 -0
- package/dist/memory/playbook.js.map +1 -1
- package/dist/memory/source-resolver.d.ts +120 -0
- package/dist/memory/source-resolver.d.ts.map +1 -0
- package/dist/memory/source-resolver.js +300 -0
- package/dist/memory/source-resolver.js.map +1 -0
- package/dist/types/config.d.ts +141 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +40 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- 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/utils/error-classifier.js +8 -8
- package/dist/utils/error-classifier.js.map +1 -1
- 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/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 +12 -54
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/types.js.map +1 -1
- package/package.json +8 -2
- package/playbooks/compound-engineering/adversarial-review.json +51 -0
- package/playbooks/compound-engineering/agent-native-architecture.json +59 -0
- package/playbooks/compound-engineering/agent-native-review.json +54 -0
- package/playbooks/compound-engineering/api-contract-review.json +52 -0
- package/playbooks/compound-engineering/brainstorm-requirements.json +55 -0
- package/playbooks/compound-engineering/bug-reproduction.json +62 -0
- package/playbooks/compound-engineering/confidence-calibration.json +49 -0
- package/playbooks/compound-engineering/correctness-review.json +49 -0
- package/playbooks/compound-engineering/data-migration-safety.json +59 -0
- package/playbooks/compound-engineering/deployment-verification.json +63 -0
- package/playbooks/compound-engineering/error-recovery-patterns.json +53 -0
- package/playbooks/compound-engineering/implementation-planning.json +64 -0
- package/playbooks/compound-engineering/issue-pattern-analysis.json +53 -0
- package/playbooks/compound-engineering/knowledge-compounding.json +63 -0
- package/playbooks/compound-engineering/learnings-research.json +54 -0
- package/playbooks/compound-engineering/maintainability-review.json +49 -0
- package/playbooks/compound-engineering/performance-review.json +54 -0
- package/playbooks/compound-engineering/plan-adversarial-review.json +56 -0
- package/playbooks/compound-engineering/plan-feasibility-review.json +56 -0
- package/playbooks/compound-engineering/project-standards-review.json +52 -0
- package/playbooks/compound-engineering/reliability-review.json +53 -0
- package/playbooks/compound-engineering/review-orchestration.json +64 -0
- package/playbooks/compound-engineering/security-review.json +54 -0
- package/playbooks/compound-engineering/systematic-execution.json +64 -0
- package/playbooks/compound-engineering/testing-review.json +50 -0
- package/src/atlas.ts +96 -0
- package/src/index.ts +27 -0
- package/src/learning/index.ts +1 -0
- package/src/learning/unified-pipeline.ts +271 -1
- package/src/memory/candidate-retrieval.ts +2 -1
- package/src/memory/curated-loader.ts +69 -16
- package/src/memory/index.ts +16 -0
- package/src/memory/playbook.ts +19 -0
- package/src/memory/source-resolver.ts +422 -0
- package/src/types/config.ts +46 -0
- package/src/types/index.ts +4 -0
- package/src/utils/error-classifier.ts +8 -8
- package/src/workspace/efficacy-toolkit.ts +496 -0
- package/src/workspace/index.ts +29 -0
- 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 +22 -78
- package/tests/fixtures/behavioral-trajectories.ts +210 -0
- package/tests/integration/curated-sources-e2e.test.ts +502 -0
- package/tests/integration/pipeline-data-correctness.test.ts +794 -0
- package/tests/learning/meta-learner.test.ts +418 -0
- package/tests/learning/pipeline-memory-updates.test.ts +721 -0
- package/tests/learning/unified-pipeline-efficacy.test.ts +232 -0
- package/tests/memory/candidate-retrieval.test.ts +167 -0
- package/tests/memory/compound-engineering-seed.test.ts +338 -0
- package/tests/memory/curated-loader-extended.test.ts +225 -0
- package/tests/memory/meta.test.ts +399 -0
- package/tests/memory/playbook-quality-validation.test.ts +430 -0
- package/tests/memory/source-resolver.test.ts +700 -0
- package/tests/search/evaluator.test.ts +257 -0
- package/tests/search/verification-runner.test.ts +357 -0
- package/tests/utils/error-classifier.test.ts +149 -0
- package/tests/utils/trajectory-helpers.test.ts +163 -0
- package/tests/workspace/efficacy-toolkit.test.ts +404 -0
- package/tests/workspace/templates/playbook-efficacy.test.ts +377 -0
- package/.claude/settings.local.json +0 -11
- package/dist/learning/llm-extractor.d.ts +0 -88
- package/dist/learning/llm-extractor.d.ts.map +0 -1
- package/dist/learning/llm-extractor.js +0 -372
- package/dist/learning/llm-extractor.js.map +0 -1
- package/dist/learning/loop-coordinator.d.ts +0 -61
- package/dist/learning/loop-coordinator.d.ts.map +0 -1
- package/dist/learning/loop-coordinator.js +0 -96
- package/dist/learning/loop-coordinator.js.map +0 -1
- package/references/agent-workspace/CLAUDE.md +0 -74
- package/references/agent-workspace/README.md +0 -587
- package/references/agent-workspace/media/banner.png +0 -0
- package/references/agent-workspace/package-lock.json +0 -2061
- package/references/agent-workspace/package.json +0 -54
- package/references/agent-workspace/src/handle.ts +0 -122
- package/references/agent-workspace/src/index.ts +0 -32
- package/references/agent-workspace/src/manager.ts +0 -102
- package/references/agent-workspace/src/readers/json.ts +0 -71
- package/references/agent-workspace/src/readers/markdown.ts +0 -37
- package/references/agent-workspace/src/readers/raw.ts +0 -27
- package/references/agent-workspace/src/types.ts +0 -68
- package/references/agent-workspace/src/validation.ts +0 -93
- package/references/agent-workspace/src/writers/json.ts +0 -17
- package/references/agent-workspace/src/writers/markdown.ts +0 -27
- package/references/agent-workspace/src/writers/raw.ts +0 -22
- package/references/agent-workspace/tests/errors.test.ts +0 -652
- package/references/agent-workspace/tests/handle.test.ts +0 -144
- package/references/agent-workspace/tests/manager.test.ts +0 -124
- package/references/agent-workspace/tests/readers.test.ts +0 -205
- package/references/agent-workspace/tests/validation.test.ts +0 -196
- package/references/agent-workspace/tests/writers.test.ts +0 -108
- package/references/agent-workspace/tsconfig.json +0 -20
- package/references/agent-workspace/tsup.config.ts +0 -9
- package/references/minimem/.claude/settings.json +0 -7
- package/references/minimem/.sudocode/issues.jsonl +0 -18
- package/references/minimem/.sudocode/specs.jsonl +0 -1
- package/references/minimem/CLAUDE.md +0 -310
- package/references/minimem/README.md +0 -556
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +0 -10
- package/references/minimem/claude-plugin/.mcp.json +0 -7
- package/references/minimem/claude-plugin/README.md +0 -158
- package/references/minimem/claude-plugin/commands/recall.md +0 -47
- package/references/minimem/claude-plugin/commands/remember.md +0 -41
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +0 -272
- package/references/minimem/claude-plugin/hooks/hooks.json +0 -27
- package/references/minimem/claude-plugin/hooks/session-end.sh +0 -86
- package/references/minimem/claude-plugin/hooks/session-start.sh +0 -85
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +0 -108
- package/references/minimem/package-lock.json +0 -5373
- package/references/minimem/package.json +0 -60
- package/references/minimem/scripts/postbuild.js +0 -35
- package/references/minimem/src/__tests__/edge-cases.test.ts +0 -371
- package/references/minimem/src/__tests__/errors.test.ts +0 -265
- package/references/minimem/src/__tests__/helpers.ts +0 -199
- package/references/minimem/src/__tests__/internal.test.ts +0 -407
- package/references/minimem/src/__tests__/knowledge.test.ts +0 -287
- package/references/minimem/src/__tests__/minimem.integration.test.ts +0 -1127
- package/references/minimem/src/__tests__/session.test.ts +0 -190
- package/references/minimem/src/cli/__tests__/commands.test.ts +0 -759
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +0 -141
- package/references/minimem/src/cli/commands/append.ts +0 -76
- package/references/minimem/src/cli/commands/config.ts +0 -262
- package/references/minimem/src/cli/commands/conflicts.ts +0 -413
- package/references/minimem/src/cli/commands/daemon.ts +0 -169
- package/references/minimem/src/cli/commands/index.ts +0 -12
- package/references/minimem/src/cli/commands/init.ts +0 -88
- package/references/minimem/src/cli/commands/mcp.ts +0 -177
- package/references/minimem/src/cli/commands/push-pull.ts +0 -213
- package/references/minimem/src/cli/commands/search.ts +0 -158
- package/references/minimem/src/cli/commands/status.ts +0 -84
- package/references/minimem/src/cli/commands/sync-init.ts +0 -290
- package/references/minimem/src/cli/commands/sync.ts +0 -70
- package/references/minimem/src/cli/commands/upsert.ts +0 -197
- package/references/minimem/src/cli/config.ts +0 -584
- package/references/minimem/src/cli/index.ts +0 -264
- package/references/minimem/src/cli/shared.ts +0 -161
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +0 -152
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +0 -209
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +0 -118
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +0 -207
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +0 -476
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +0 -363
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +0 -255
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +0 -193
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +0 -178
- package/references/minimem/src/cli/sync/central.ts +0 -292
- package/references/minimem/src/cli/sync/conflicts.ts +0 -204
- package/references/minimem/src/cli/sync/daemon.ts +0 -407
- package/references/minimem/src/cli/sync/detection.ts +0 -138
- package/references/minimem/src/cli/sync/index.ts +0 -107
- package/references/minimem/src/cli/sync/operations.ts +0 -373
- package/references/minimem/src/cli/sync/registry.ts +0 -279
- package/references/minimem/src/cli/sync/state.ts +0 -355
- package/references/minimem/src/cli/sync/validation.ts +0 -206
- package/references/minimem/src/cli/sync/watcher.ts +0 -234
- package/references/minimem/src/cli/version.ts +0 -34
- package/references/minimem/src/core/index.ts +0 -9
- package/references/minimem/src/core/indexer.ts +0 -628
- package/references/minimem/src/core/searcher.ts +0 -221
- package/references/minimem/src/db/schema.ts +0 -183
- package/references/minimem/src/db/sqlite-vec.ts +0 -24
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +0 -431
- package/references/minimem/src/embeddings/batch-gemini.ts +0 -392
- package/references/minimem/src/embeddings/batch-openai.ts +0 -409
- package/references/minimem/src/embeddings/embeddings.ts +0 -434
- package/references/minimem/src/index.ts +0 -109
- package/references/minimem/src/internal.ts +0 -299
- package/references/minimem/src/minimem.ts +0 -1276
- package/references/minimem/src/search/__tests__/hybrid.test.ts +0 -247
- package/references/minimem/src/search/graph.ts +0 -234
- package/references/minimem/src/search/hybrid.ts +0 -151
- package/references/minimem/src/search/search.ts +0 -256
- package/references/minimem/src/server/__tests__/mcp.test.ts +0 -341
- package/references/minimem/src/server/__tests__/tools.test.ts +0 -364
- package/references/minimem/src/server/mcp.ts +0 -326
- package/references/minimem/src/server/tools.ts +0 -720
- package/references/minimem/src/session.ts +0 -460
- package/references/minimem/tsconfig.json +0 -19
- package/references/minimem/tsup.config.ts +0 -26
- package/references/minimem/vitest.config.ts +0 -24
- package/references/sessionlog/.husky/pre-commit +0 -1
- package/references/sessionlog/.lintstagedrc.json +0 -4
- package/references/sessionlog/.prettierignore +0 -4
- package/references/sessionlog/.prettierrc.json +0 -11
- package/references/sessionlog/LICENSE +0 -21
- package/references/sessionlog/README.md +0 -453
- package/references/sessionlog/eslint.config.js +0 -58
- package/references/sessionlog/package-lock.json +0 -3672
- package/references/sessionlog/package.json +0 -65
- package/references/sessionlog/src/__tests__/agent-hooks.test.ts +0 -570
- package/references/sessionlog/src/__tests__/agent-registry.test.ts +0 -127
- package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +0 -225
- package/references/sessionlog/src/__tests__/claude-generator.test.ts +0 -46
- package/references/sessionlog/src/__tests__/commit-msg.test.ts +0 -86
- package/references/sessionlog/src/__tests__/cursor-agent.test.ts +0 -224
- package/references/sessionlog/src/__tests__/e2e-live.test.ts +0 -890
- package/references/sessionlog/src/__tests__/event-log.test.ts +0 -183
- package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +0 -105
- package/references/sessionlog/src/__tests__/gemini-agent.test.ts +0 -375
- package/references/sessionlog/src/__tests__/git-hooks.test.ts +0 -78
- package/references/sessionlog/src/__tests__/hook-managers.test.ts +0 -121
- package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +0 -759
- package/references/sessionlog/src/__tests__/opencode-agent.test.ts +0 -338
- package/references/sessionlog/src/__tests__/redaction.test.ts +0 -136
- package/references/sessionlog/src/__tests__/session-repo.test.ts +0 -353
- package/references/sessionlog/src/__tests__/session-store.test.ts +0 -166
- package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +0 -466
- package/references/sessionlog/src/__tests__/skill-live.test.ts +0 -461
- package/references/sessionlog/src/__tests__/summarize.test.ts +0 -348
- package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +0 -610
- package/references/sessionlog/src/__tests__/task-plan-live.test.ts +0 -632
- package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +0 -121
- package/references/sessionlog/src/__tests__/types.test.ts +0 -166
- package/references/sessionlog/src/__tests__/utils.test.ts +0 -333
- package/references/sessionlog/src/__tests__/validation.test.ts +0 -103
- package/references/sessionlog/src/__tests__/worktree.test.ts +0 -57
- package/references/sessionlog/src/agent/agents/claude-code.ts +0 -1089
- package/references/sessionlog/src/agent/agents/cursor.ts +0 -361
- package/references/sessionlog/src/agent/agents/gemini-cli.ts +0 -632
- package/references/sessionlog/src/agent/agents/opencode.ts +0 -540
- package/references/sessionlog/src/agent/registry.ts +0 -143
- package/references/sessionlog/src/agent/session-types.ts +0 -113
- package/references/sessionlog/src/agent/types.ts +0 -220
- package/references/sessionlog/src/cli.ts +0 -597
- package/references/sessionlog/src/commands/clean.ts +0 -133
- package/references/sessionlog/src/commands/disable.ts +0 -84
- package/references/sessionlog/src/commands/doctor.ts +0 -145
- package/references/sessionlog/src/commands/enable.ts +0 -202
- package/references/sessionlog/src/commands/explain.ts +0 -261
- package/references/sessionlog/src/commands/reset.ts +0 -105
- package/references/sessionlog/src/commands/resume.ts +0 -180
- package/references/sessionlog/src/commands/rewind.ts +0 -195
- package/references/sessionlog/src/commands/setup-ccweb.ts +0 -275
- package/references/sessionlog/src/commands/status.ts +0 -172
- package/references/sessionlog/src/config.ts +0 -165
- package/references/sessionlog/src/events/event-log.ts +0 -126
- package/references/sessionlog/src/git-operations.ts +0 -558
- package/references/sessionlog/src/hooks/git-hooks.ts +0 -165
- package/references/sessionlog/src/hooks/lifecycle.ts +0 -391
- package/references/sessionlog/src/index.ts +0 -650
- package/references/sessionlog/src/security/redaction.ts +0 -283
- package/references/sessionlog/src/session/state-machine.ts +0 -452
- package/references/sessionlog/src/store/checkpoint-store.ts +0 -509
- package/references/sessionlog/src/store/native-store.ts +0 -173
- package/references/sessionlog/src/store/provider-types.ts +0 -99
- package/references/sessionlog/src/store/session-store.ts +0 -266
- package/references/sessionlog/src/strategy/attribution.ts +0 -296
- package/references/sessionlog/src/strategy/common.ts +0 -207
- package/references/sessionlog/src/strategy/content-overlap.ts +0 -228
- package/references/sessionlog/src/strategy/manual-commit.ts +0 -988
- package/references/sessionlog/src/strategy/types.ts +0 -279
- package/references/sessionlog/src/summarize/claude-generator.ts +0 -115
- package/references/sessionlog/src/summarize/summarize.ts +0 -432
- package/references/sessionlog/src/types.ts +0 -508
- package/references/sessionlog/src/utils/chunk-files.ts +0 -49
- package/references/sessionlog/src/utils/commit-message.ts +0 -65
- package/references/sessionlog/src/utils/detect-agent.ts +0 -36
- package/references/sessionlog/src/utils/hook-managers.ts +0 -125
- package/references/sessionlog/src/utils/ide-tags.ts +0 -32
- package/references/sessionlog/src/utils/paths.ts +0 -79
- package/references/sessionlog/src/utils/preview-rewind.ts +0 -80
- package/references/sessionlog/src/utils/rewind-conflict.ts +0 -121
- package/references/sessionlog/src/utils/shadow-branch.ts +0 -109
- package/references/sessionlog/src/utils/string-utils.ts +0 -46
- package/references/sessionlog/src/utils/todo-extract.ts +0 -188
- package/references/sessionlog/src/utils/trailers.ts +0 -187
- package/references/sessionlog/src/utils/transcript-parse.ts +0 -177
- package/references/sessionlog/src/utils/transcript-timestamp.ts +0 -59
- package/references/sessionlog/src/utils/tree-ops.ts +0 -219
- package/references/sessionlog/src/utils/tty.ts +0 -72
- package/references/sessionlog/src/utils/validation.ts +0 -65
- package/references/sessionlog/src/utils/worktree.ts +0 -58
- package/references/sessionlog/src/wire-types.ts +0 -59
- package/references/sessionlog/templates/setup-env.sh +0 -153
- package/references/sessionlog/tsconfig.json +0 -18
- package/references/sessionlog/vitest.config.ts +0 -12
- package/references/skill-tree/.claude/settings.json +0 -6
- package/references/skill-tree/.sudocode/issues.jsonl +0 -19
- package/references/skill-tree/.sudocode/specs.jsonl +0 -3
- package/references/skill-tree/CLAUDE.md +0 -126
- package/references/skill-tree/README.md +0 -372
- package/references/skill-tree/docs/GAPS_v1.md +0 -221
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +0 -467
- package/references/skill-tree/docs/TODOS.md +0 -91
- package/references/skill-tree/docs/anthropic_skill_guide.md +0 -1364
- package/references/skill-tree/docs/design/federated-skill-trees.md +0 -524
- package/references/skill-tree/docs/design/multi-agent-sync.md +0 -759
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +0 -583
- package/references/skill-tree/docs/scraper/POC_PLAN.md +0 -420
- package/references/skill-tree/docs/scraper/README.md +0 -170
- package/references/skill-tree/examples/basic-usage.ts +0 -164
- package/references/skill-tree/package-lock.json +0 -1852
- package/references/skill-tree/package.json +0 -66
- package/references/skill-tree/scraper/README.md +0 -123
- package/references/skill-tree/scraper/docs/DESIGN.md +0 -683
- package/references/skill-tree/scraper/docs/PLAN.md +0 -336
- package/references/skill-tree/scraper/drizzle.config.ts +0 -10
- package/references/skill-tree/scraper/package-lock.json +0 -6329
- package/references/skill-tree/scraper/package.json +0 -68
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +0 -7
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +0 -7
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +0 -27
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +0 -21
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +0 -54
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +0 -24
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +0 -93
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +0 -22
- package/references/skill-tree/scraper/tsup.config.ts +0 -14
- package/references/skill-tree/scraper/vitest.config.ts +0 -17
- package/references/skill-tree/scripts/convert-to-vitest.ts +0 -166
- package/references/skill-tree/skills/skill-writer/SKILL.md +0 -339
- package/references/skill-tree/skills/skill-writer/references/examples.md +0 -326
- package/references/skill-tree/skills/skill-writer/references/patterns.md +0 -210
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +0 -123
- package/references/skill-tree/test/run-all.ts +0 -106
- package/references/skill-tree/test/utils.ts +0 -128
- package/references/skill-tree/vitest.config.ts +0 -16
package/src/atlas.ts
CHANGED
|
@@ -9,6 +9,15 @@ import type {
|
|
|
9
9
|
import type { KnowledgeMatch } from './types/knowledge.js';
|
|
10
10
|
import { createDefaultConfig } from './types/index.js';
|
|
11
11
|
import { MemorySystem, createMemorySystem, type TeamExperience } from './memory/index.js';
|
|
12
|
+
import {
|
|
13
|
+
loadCuratedPlaybooks as loadCuratedPlaybooksFn,
|
|
14
|
+
BUNDLED_SEED_PACK_DIR,
|
|
15
|
+
} from './memory/curated-loader.js';
|
|
16
|
+
import {
|
|
17
|
+
resolvePlaybookSource,
|
|
18
|
+
sourceStateKey,
|
|
19
|
+
type SourceState,
|
|
20
|
+
} from './memory/source-resolver.js';
|
|
12
21
|
import {
|
|
13
22
|
UnifiedLearningPipeline,
|
|
14
23
|
createUnifiedPipeline,
|
|
@@ -271,6 +280,9 @@ export class Atlas {
|
|
|
271
280
|
|
|
272
281
|
// Initialize playbook-based components if playbooks are available
|
|
273
282
|
if (this.memory.playbooks) {
|
|
283
|
+
// Load curated playbooks (bundled seed pack + additional dirs)
|
|
284
|
+
await this.loadCuratedPlaybooks();
|
|
285
|
+
|
|
274
286
|
this.skillLibrary = createSkillLibrary(
|
|
275
287
|
this.memory.playbooks,
|
|
276
288
|
this.config.skillLibrary
|
|
@@ -290,6 +302,90 @@ export class Atlas {
|
|
|
290
302
|
}
|
|
291
303
|
}
|
|
292
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Load curated playbooks from bundled seed pack, additional directories,
|
|
307
|
+
* and resolved sources (local paths or git repos).
|
|
308
|
+
* Called during init() when curatedPlaybooks config is enabled.
|
|
309
|
+
*/
|
|
310
|
+
private async loadCuratedPlaybooks(): Promise<void> {
|
|
311
|
+
const cfg = this.config.curatedPlaybooks;
|
|
312
|
+
const recreate = cfg.recreateOnInit;
|
|
313
|
+
|
|
314
|
+
// Load bundled seed pack (shipped with cognitive-core)
|
|
315
|
+
if (cfg.loadBundledSeedPack) {
|
|
316
|
+
const loadOpts = recreate
|
|
317
|
+
? { recreate: true, sourceId: 'bundled' }
|
|
318
|
+
: { sourceId: 'bundled' };
|
|
319
|
+
await loadCuratedPlaybooksFn(
|
|
320
|
+
BUNDLED_SEED_PACK_DIR,
|
|
321
|
+
this.memory.playbooks,
|
|
322
|
+
loadOpts,
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Load from additional directories (backward compat)
|
|
327
|
+
for (const dir of cfg.additionalDirs) {
|
|
328
|
+
const loadOpts = recreate
|
|
329
|
+
? { recreate: true, sourceId: dir }
|
|
330
|
+
: { sourceId: dir };
|
|
331
|
+
await loadCuratedPlaybooksFn(dir, this.memory.playbooks, loadOpts);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Resolve and load from sources (local paths + git repos)
|
|
335
|
+
if (cfg.sources.length > 0) {
|
|
336
|
+
const cacheDir = join(this.config.storage.baseDir, cfg.cache.dir);
|
|
337
|
+
for (const source of cfg.sources) {
|
|
338
|
+
await this.loadFromSource(source, cacheDir, recreate);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Resolve a single source (local or git) and load its playbooks.
|
|
345
|
+
*/
|
|
346
|
+
private async loadFromSource(
|
|
347
|
+
source: string,
|
|
348
|
+
cacheDir: string,
|
|
349
|
+
recreate: boolean,
|
|
350
|
+
): Promise<void> {
|
|
351
|
+
const cfg = this.config.curatedPlaybooks;
|
|
352
|
+
|
|
353
|
+
const resolved = await resolvePlaybookSource(source, {
|
|
354
|
+
cacheDir,
|
|
355
|
+
maxAgeMs: cfg.cache.maxAgeMs,
|
|
356
|
+
forceUpdate: recreate,
|
|
357
|
+
getSourceState: (s) =>
|
|
358
|
+
this.persistence.getSystemState<SourceState>(sourceStateKey(s)),
|
|
359
|
+
setSourceState: (s, state) =>
|
|
360
|
+
this.persistence.setSystemState(sourceStateKey(s), state),
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
if (!resolved) return;
|
|
364
|
+
|
|
365
|
+
// For git sources: skip loading if SHA hasn't changed and we're not recreating
|
|
366
|
+
// (playbooks are already in the library from a previous init).
|
|
367
|
+
// For local paths: always load (the loader handles dedup via getByName).
|
|
368
|
+
if (resolved.isGit && !resolved.updated && !recreate) return;
|
|
369
|
+
|
|
370
|
+
const loadOpts = recreate
|
|
371
|
+
? { recreate: true, sourceId: resolved.sourceId }
|
|
372
|
+
: { sourceId: resolved.sourceId };
|
|
373
|
+
|
|
374
|
+
const result = await loadCuratedPlaybooksFn(
|
|
375
|
+
resolved.playbookDir,
|
|
376
|
+
this.memory.playbooks,
|
|
377
|
+
loadOpts,
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
// Update source state with playbook count
|
|
381
|
+
const stateKey = sourceStateKey(source);
|
|
382
|
+
const prevState = this.persistence.getSystemState<SourceState>(stateKey);
|
|
383
|
+
if (prevState) {
|
|
384
|
+
prevState.playbookCount = result.loaded;
|
|
385
|
+
this.persistence.setSystemState(stateKey, prevState);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
293
389
|
/**
|
|
294
390
|
* Set the LLM provider for solving (deprecated)
|
|
295
391
|
* @deprecated Use setAgentManager() with backends for real execution
|
package/src/index.ts
CHANGED
|
@@ -435,6 +435,33 @@ export {
|
|
|
435
435
|
type AgenticTaskResult,
|
|
436
436
|
type AgenticTaskMetrics,
|
|
437
437
|
AgenticTaskOutputError,
|
|
438
|
+
// Efficacy toolkit
|
|
439
|
+
computeNormalizedGain,
|
|
440
|
+
computeTemporalTrend,
|
|
441
|
+
computeDomainBreakdown,
|
|
442
|
+
buildEfficacyProfile,
|
|
443
|
+
buildPortfolioSnapshot,
|
|
444
|
+
type PlaybookEfficacyProfile,
|
|
445
|
+
type DomainBreakdown,
|
|
446
|
+
type TemporalTrend,
|
|
447
|
+
type UsageProfile,
|
|
448
|
+
type EvolutionSummary,
|
|
449
|
+
type PortfolioSnapshot,
|
|
450
|
+
type PlaybookHealthFlag,
|
|
451
|
+
type RedundancyPair,
|
|
452
|
+
// Efficacy templates
|
|
453
|
+
playbookEfficacyAuditTemplate,
|
|
454
|
+
type PlaybookEfficacyAuditInput,
|
|
455
|
+
type PlaybookEfficacyAuditOutput,
|
|
456
|
+
type PlaybookRecommendation,
|
|
457
|
+
playbookDecayDetectionTemplate,
|
|
458
|
+
type PlaybookDecayDetectionInput,
|
|
459
|
+
type PlaybookDecayDetectionOutput,
|
|
460
|
+
type DecaySignal,
|
|
461
|
+
playbookLifecycleReviewTemplate,
|
|
462
|
+
type PlaybookLifecycleReviewInput,
|
|
463
|
+
type PlaybookLifecycleReviewOutput,
|
|
464
|
+
type LifecycleRecommendation,
|
|
438
465
|
} from './workspace/index.js';
|
|
439
466
|
|
|
440
467
|
// Persistence - Unified SQLite database for system-internal state
|
package/src/learning/index.ts
CHANGED
|
@@ -54,7 +54,12 @@ import { playbookExtractionTemplate } from '../workspace/templates/playbook-extr
|
|
|
54
54
|
|
|
55
55
|
// Meta-learning and effectiveness
|
|
56
56
|
import { MetaLearner, type MetaLearnerConfig } from './meta-learner.js';
|
|
57
|
-
import { LearningEffectivenessTracker } from './effectiveness.js';
|
|
57
|
+
import { LearningEffectivenessTracker, type TaskAnnotation, type PlaybookEffectivenessEntry } from './effectiveness.js';
|
|
58
|
+
|
|
59
|
+
// Efficacy templates (used in maintenance tasks)
|
|
60
|
+
import { playbookDecayDetectionTemplate, type PlaybookDecayDetectionOutput } from '../workspace/templates/playbook-decay-detection.js';
|
|
61
|
+
import { playbookEfficacyAuditTemplate } from '../workspace/templates/playbook-efficacy-audit.js';
|
|
62
|
+
import { playbookLifecycleReviewTemplate } from '../workspace/templates/playbook-lifecycle-review.js';
|
|
58
63
|
|
|
59
64
|
// Energy evaluator (batch trigger)
|
|
60
65
|
import {
|
|
@@ -121,6 +126,8 @@ export interface UnifiedPipelineFeatures {
|
|
|
121
126
|
effectivenessTracking?: boolean;
|
|
122
127
|
/** Enable healing orchestrator with built-in detectors (default: true) */
|
|
123
128
|
healing?: boolean;
|
|
129
|
+
/** Enable efficacy maintenance tasks (decay detection, audit, lifecycle review) (default: true) */
|
|
130
|
+
efficacy?: boolean;
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
/**
|
|
@@ -140,10 +147,30 @@ export interface UnifiedPipelineConfig {
|
|
|
140
147
|
metaLearner: Partial<MetaLearnerConfig>;
|
|
141
148
|
/** Feature flags */
|
|
142
149
|
features: UnifiedPipelineFeatures;
|
|
150
|
+
/** Efficacy maintenance config */
|
|
151
|
+
efficacy: EfficacyMaintenanceConfig;
|
|
143
152
|
/** Max latency warning threshold for instant loop in ms (default: 200) */
|
|
144
153
|
maxInstantLatencyMs: number;
|
|
145
154
|
}
|
|
146
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Configuration for efficacy maintenance tasks.
|
|
158
|
+
*/
|
|
159
|
+
export interface EfficacyMaintenanceConfig {
|
|
160
|
+
/** Run lifecycle review every Nth maintenance cycle (default: 3) */
|
|
161
|
+
lifecycleReviewFrequency: number;
|
|
162
|
+
/** Minimum playbooks required before running efficacy tasks (default: 1) */
|
|
163
|
+
minPlaybooks: number;
|
|
164
|
+
/** Minimum annotations required before running efficacy tasks (default: 3) */
|
|
165
|
+
minAnnotations: number;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const DEFAULT_EFFICACY_CONFIG: EfficacyMaintenanceConfig = {
|
|
169
|
+
lifecycleReviewFrequency: 3,
|
|
170
|
+
minPlaybooks: 1,
|
|
171
|
+
minAnnotations: 3,
|
|
172
|
+
};
|
|
173
|
+
|
|
147
174
|
const DEFAULT_UNIFIED_CONFIG: UnifiedPipelineConfig = {
|
|
148
175
|
instant: {},
|
|
149
176
|
batch: {
|
|
@@ -153,6 +180,7 @@ const DEFAULT_UNIFIED_CONFIG: UnifiedPipelineConfig = {
|
|
|
153
180
|
maintenance: {},
|
|
154
181
|
metaLearner: {},
|
|
155
182
|
features: {},
|
|
183
|
+
efficacy: DEFAULT_EFFICACY_CONFIG,
|
|
156
184
|
maxInstantLatencyMs: 200,
|
|
157
185
|
};
|
|
158
186
|
|
|
@@ -267,6 +295,7 @@ export class UnifiedLearningPipeline {
|
|
|
267
295
|
private batchCyclesRun = 0;
|
|
268
296
|
private maintenanceCyclesRun = 0;
|
|
269
297
|
private _onLatencyWarning: ((durationMs: number) => void) | null = null;
|
|
298
|
+
private lastDecayResult: PlaybookDecayDetectionOutput | null = null;
|
|
270
299
|
|
|
271
300
|
constructor(
|
|
272
301
|
memory: MemorySystem,
|
|
@@ -284,6 +313,7 @@ export class UnifiedLearningPipeline {
|
|
|
284
313
|
maintenance: { ...DEFAULT_UNIFIED_CONFIG.maintenance, ...config?.maintenance },
|
|
285
314
|
metaLearner: { ...DEFAULT_UNIFIED_CONFIG.metaLearner, ...config?.metaLearner },
|
|
286
315
|
features: { ...DEFAULT_UNIFIED_CONFIG.features, ...config?.features },
|
|
316
|
+
efficacy: { ...DEFAULT_EFFICACY_CONFIG, ...config?.efficacy },
|
|
287
317
|
};
|
|
288
318
|
|
|
289
319
|
this.memory = memory;
|
|
@@ -822,6 +852,246 @@ export class UnifiedLearningPipeline {
|
|
|
822
852
|
},
|
|
823
853
|
});
|
|
824
854
|
}
|
|
855
|
+
|
|
856
|
+
// Efficacy maintenance tasks
|
|
857
|
+
this.registerEfficacyMaintenanceTasks();
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* Register efficacy maintenance tasks (decay detection, audit, lifecycle review).
|
|
862
|
+
* All tasks are log-only — results are returned in details but no automatic mutations.
|
|
863
|
+
*/
|
|
864
|
+
private registerEfficacyMaintenanceTasks(): void {
|
|
865
|
+
if (!(this.config.features.efficacy ?? true)) return;
|
|
866
|
+
|
|
867
|
+
const efficacyCfg = this.config.efficacy;
|
|
868
|
+
|
|
869
|
+
// 1. Playbook Decay Detection (priority 70) — runs every maintenance cycle
|
|
870
|
+
this.maintenanceScheduler.registerTask({
|
|
871
|
+
name: 'playbook-decay-detection',
|
|
872
|
+
priority: 70,
|
|
873
|
+
execute: async () => {
|
|
874
|
+
const start = Date.now();
|
|
875
|
+
this.lastDecayResult = null;
|
|
876
|
+
|
|
877
|
+
const { annotations, playbooks, playbookEffectiveness, unguidedSuccessRate } =
|
|
878
|
+
await this.getEfficacyData();
|
|
879
|
+
|
|
880
|
+
if (playbooks.length < efficacyCfg.minPlaybooks || annotations.length < efficacyCfg.minAnnotations) {
|
|
881
|
+
return {
|
|
882
|
+
taskName: 'playbook-decay-detection',
|
|
883
|
+
success: true,
|
|
884
|
+
durationMs: Date.now() - start,
|
|
885
|
+
details: { skipped: true, reason: 'insufficient data' },
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const result = await playbookDecayDetectionTemplate.heuristicFallback!({
|
|
890
|
+
playbooks,
|
|
891
|
+
annotations,
|
|
892
|
+
playbookEffectiveness,
|
|
893
|
+
unguidedSuccessRate,
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
this.lastDecayResult = result;
|
|
897
|
+
|
|
898
|
+
return {
|
|
899
|
+
taskName: 'playbook-decay-detection',
|
|
900
|
+
success: true,
|
|
901
|
+
durationMs: Date.now() - start,
|
|
902
|
+
details: {
|
|
903
|
+
decayingCount: result.decaying.length,
|
|
904
|
+
atRiskCount: result.atRisk.length,
|
|
905
|
+
healthyCount: result.healthy.length,
|
|
906
|
+
decaying: result.decaying,
|
|
907
|
+
atRisk: result.atRisk,
|
|
908
|
+
portfolioAssessment: result.portfolioAssessment,
|
|
909
|
+
},
|
|
910
|
+
};
|
|
911
|
+
},
|
|
912
|
+
});
|
|
913
|
+
|
|
914
|
+
// 2. Playbook Efficacy Audit (priority 65) — audits flagged playbooks from decay detection
|
|
915
|
+
this.maintenanceScheduler.registerTask({
|
|
916
|
+
name: 'playbook-efficacy-audit',
|
|
917
|
+
priority: 65,
|
|
918
|
+
execute: async () => {
|
|
919
|
+
const start = Date.now();
|
|
920
|
+
|
|
921
|
+
if (!this.lastDecayResult) {
|
|
922
|
+
return {
|
|
923
|
+
taskName: 'playbook-efficacy-audit',
|
|
924
|
+
success: true,
|
|
925
|
+
durationMs: Date.now() - start,
|
|
926
|
+
details: { skipped: true, reason: 'no decay detection results' },
|
|
927
|
+
};
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
const flagged = [
|
|
931
|
+
...this.lastDecayResult.decaying,
|
|
932
|
+
...this.lastDecayResult.atRisk,
|
|
933
|
+
];
|
|
934
|
+
|
|
935
|
+
if (flagged.length === 0) {
|
|
936
|
+
return {
|
|
937
|
+
taskName: 'playbook-efficacy-audit',
|
|
938
|
+
success: true,
|
|
939
|
+
durationMs: Date.now() - start,
|
|
940
|
+
details: { skipped: true, reason: 'no flagged playbooks' },
|
|
941
|
+
};
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
const { annotations, playbooks, playbookEffectiveness, unguidedSuccessRate } =
|
|
945
|
+
await this.getEfficacyData();
|
|
946
|
+
|
|
947
|
+
const playbookMap = new Map(playbooks.map(p => [p.id, p]));
|
|
948
|
+
const effectivenessMap = new Map(playbookEffectiveness.map(e => [e.playbookId, e]));
|
|
949
|
+
const trajectoryDomainMap = this.buildTrajectoryDomainMap(annotations);
|
|
950
|
+
|
|
951
|
+
const audits: Array<{
|
|
952
|
+
playbookId: string;
|
|
953
|
+
health: string;
|
|
954
|
+
recommendations: unknown[];
|
|
955
|
+
summary: string;
|
|
956
|
+
}> = [];
|
|
957
|
+
|
|
958
|
+
for (const signal of flagged) {
|
|
959
|
+
const playbook = playbookMap.get(signal.playbookId);
|
|
960
|
+
if (!playbook) continue;
|
|
961
|
+
|
|
962
|
+
const auditResult = await playbookEfficacyAuditTemplate.heuristicFallback!({
|
|
963
|
+
playbook,
|
|
964
|
+
annotations,
|
|
965
|
+
playbookEffectiveness: effectivenessMap.get(signal.playbookId),
|
|
966
|
+
unguidedSuccessRate,
|
|
967
|
+
trajectoryDomainMap,
|
|
968
|
+
});
|
|
969
|
+
|
|
970
|
+
audits.push({
|
|
971
|
+
playbookId: signal.playbookId,
|
|
972
|
+
health: auditResult.assessment.health,
|
|
973
|
+
recommendations: auditResult.assessment.recommendations,
|
|
974
|
+
summary: auditResult.assessment.summary,
|
|
975
|
+
});
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
return {
|
|
979
|
+
taskName: 'playbook-efficacy-audit',
|
|
980
|
+
success: true,
|
|
981
|
+
durationMs: Date.now() - start,
|
|
982
|
+
details: {
|
|
983
|
+
auditsPerformed: audits.length,
|
|
984
|
+
audits,
|
|
985
|
+
},
|
|
986
|
+
};
|
|
987
|
+
},
|
|
988
|
+
});
|
|
989
|
+
|
|
990
|
+
// 3. Playbook Lifecycle Review (priority 50) — runs every Nth maintenance cycle
|
|
991
|
+
this.maintenanceScheduler.registerTask({
|
|
992
|
+
name: 'playbook-lifecycle-review',
|
|
993
|
+
priority: 50,
|
|
994
|
+
execute: async () => {
|
|
995
|
+
const start = Date.now();
|
|
996
|
+
|
|
997
|
+
// Only run every Nth maintenance cycle
|
|
998
|
+
if (this.maintenanceCyclesRun % efficacyCfg.lifecycleReviewFrequency !== 0) {
|
|
999
|
+
return {
|
|
1000
|
+
taskName: 'playbook-lifecycle-review',
|
|
1001
|
+
success: true,
|
|
1002
|
+
durationMs: Date.now() - start,
|
|
1003
|
+
details: {
|
|
1004
|
+
skipped: true,
|
|
1005
|
+
reason: `runs every ${efficacyCfg.lifecycleReviewFrequency} maintenance cycles`,
|
|
1006
|
+
},
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
const { annotations, playbooks, playbookEffectiveness, unguidedSuccessRate } =
|
|
1011
|
+
await this.getEfficacyData();
|
|
1012
|
+
|
|
1013
|
+
if (playbooks.length < efficacyCfg.minPlaybooks || annotations.length < efficacyCfg.minAnnotations) {
|
|
1014
|
+
return {
|
|
1015
|
+
taskName: 'playbook-lifecycle-review',
|
|
1016
|
+
success: true,
|
|
1017
|
+
durationMs: Date.now() - start,
|
|
1018
|
+
details: { skipped: true, reason: 'insufficient data' },
|
|
1019
|
+
};
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
const trajectoryDomainMap = this.buildTrajectoryDomainMap(annotations);
|
|
1023
|
+
|
|
1024
|
+
const result = await playbookLifecycleReviewTemplate.heuristicFallback!({
|
|
1025
|
+
playbooks,
|
|
1026
|
+
annotations,
|
|
1027
|
+
playbookEffectiveness,
|
|
1028
|
+
unguidedSuccessRate,
|
|
1029
|
+
trajectoryDomainMap,
|
|
1030
|
+
});
|
|
1031
|
+
|
|
1032
|
+
return {
|
|
1033
|
+
taskName: 'playbook-lifecycle-review',
|
|
1034
|
+
success: true,
|
|
1035
|
+
durationMs: Date.now() - start,
|
|
1036
|
+
details: {
|
|
1037
|
+
totalPlaybooks: result.snapshot.totalPlaybooks,
|
|
1038
|
+
recommendationsCount: result.recommendations.length,
|
|
1039
|
+
recommendations: result.recommendations,
|
|
1040
|
+
insights: result.insights,
|
|
1041
|
+
actionPlan: result.actionPlan,
|
|
1042
|
+
snapshot: {
|
|
1043
|
+
avgConfidence: result.snapshot.avgConfidence,
|
|
1044
|
+
avgSuccessRate: result.snapshot.avgSuccessRate,
|
|
1045
|
+
confidenceBands: result.snapshot.confidenceBands,
|
|
1046
|
+
decayingCount: result.snapshot.decaying.length,
|
|
1047
|
+
staleCount: result.snapshot.stale.length,
|
|
1048
|
+
},
|
|
1049
|
+
},
|
|
1050
|
+
};
|
|
1051
|
+
},
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
* Fetch shared efficacy data used by all three efficacy maintenance tasks.
|
|
1057
|
+
*/
|
|
1058
|
+
private async getEfficacyData(): Promise<{
|
|
1059
|
+
annotations: TaskAnnotation[];
|
|
1060
|
+
playbooks: Playbook[];
|
|
1061
|
+
playbookEffectiveness: PlaybookEffectivenessEntry[];
|
|
1062
|
+
unguidedSuccessRate: number;
|
|
1063
|
+
}> {
|
|
1064
|
+
const playbooks = await this.memory.playbooks.getAll();
|
|
1065
|
+
|
|
1066
|
+
let annotations: TaskAnnotation[] = [];
|
|
1067
|
+
let playbookEffectiveness: PlaybookEffectivenessEntry[] = [];
|
|
1068
|
+
let unguidedSuccessRate = 0;
|
|
1069
|
+
|
|
1070
|
+
if (this.effectivenessTracker) {
|
|
1071
|
+
annotations = await this.effectivenessTracker.getAll();
|
|
1072
|
+
const metrics = await this.effectivenessTracker.computeMetrics();
|
|
1073
|
+
playbookEffectiveness = metrics.playbookEffectiveness;
|
|
1074
|
+
unguidedSuccessRate = metrics.unguidedSuccessRate;
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
return { annotations, playbooks, playbookEffectiveness, unguidedSuccessRate };
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
/**
|
|
1081
|
+
* Build a trajectoryId→domain map from annotations.
|
|
1082
|
+
* Uses accumulated trajectories when available, otherwise infers from task annotations.
|
|
1083
|
+
*/
|
|
1084
|
+
private buildTrajectoryDomainMap(_annotations: TaskAnnotation[]): Map<string, string> {
|
|
1085
|
+
const domainMap = new Map<string, string>();
|
|
1086
|
+
|
|
1087
|
+
// Map from accumulated trajectories (has task.domain directly).
|
|
1088
|
+
// Annotations don't carry domain, so historical trajectories will
|
|
1089
|
+
// fall through to the toolkit's 'unknown' default — acceptable for log-only mode.
|
|
1090
|
+
for (const t of this.accumulated) {
|
|
1091
|
+
domainMap.set(t.id, t.task.domain);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
return domainMap;
|
|
825
1095
|
}
|
|
826
1096
|
|
|
827
1097
|
/**
|
|
@@ -63,7 +63,8 @@ export function getCandidates<T>(
|
|
|
63
63
|
const item = resolver.get(id);
|
|
64
64
|
if (item) items.push(item);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
// If all IDs were stale/unresolvable, fall back to full scan
|
|
67
|
+
if (items.length > 0) return items;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
// Too few candidates — fall back
|
|
@@ -6,17 +6,30 @@
|
|
|
6
6
|
* drop all curated playbooks and reload from source files without
|
|
7
7
|
* losing extracted or imported playbooks.
|
|
8
8
|
*
|
|
9
|
+
* Supports recursive directory scanning and source-prefix-based
|
|
10
|
+
* deletion for per-source recreate (multiple sources don't clobber
|
|
11
|
+
* each other).
|
|
12
|
+
*
|
|
9
13
|
* Inspired by Dash's separation of curated knowledge (file-loaded)
|
|
10
14
|
* vs learnings (runtime-discovered).
|
|
11
15
|
*/
|
|
12
16
|
|
|
13
|
-
import { readFile, readdir
|
|
14
|
-
import { join, relative } from 'node:path';
|
|
17
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
18
|
+
import { join, relative, dirname } from 'node:path';
|
|
15
19
|
import { existsSync } from 'node:fs';
|
|
20
|
+
import { fileURLToPath } from 'node:url';
|
|
16
21
|
import type { PlaybookProvenance } from '../types/index.js';
|
|
17
22
|
import { createPlaybook } from '../types/index.js';
|
|
18
23
|
import type { PlaybookLibrary } from './playbook.js';
|
|
19
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Path to the bundled compound-engineering seed pack shipped with cognitive-core.
|
|
27
|
+
* Resolves relative to this file's location in the package.
|
|
28
|
+
*/
|
|
29
|
+
const __filename_curated = fileURLToPath(import.meta.url);
|
|
30
|
+
const __dirname_curated = dirname(__filename_curated);
|
|
31
|
+
export const BUNDLED_SEED_PACK_DIR = join(__dirname_curated, '../../playbooks/compound-engineering');
|
|
32
|
+
|
|
20
33
|
/**
|
|
21
34
|
* Schema for a curated playbook JSON file
|
|
22
35
|
*/
|
|
@@ -55,17 +68,49 @@ export interface CuratedLoadResult {
|
|
|
55
68
|
recreated: boolean;
|
|
56
69
|
}
|
|
57
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Options for loadCuratedPlaybooks
|
|
73
|
+
*/
|
|
74
|
+
export interface CuratedLoadOptions {
|
|
75
|
+
/** If true, delete existing curated playbooks before loading */
|
|
76
|
+
recreate?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Source identifier for provenance tracking.
|
|
79
|
+
* Used as prefix in provenance.sourceFile for per-source recreate.
|
|
80
|
+
* If provided and recreate is true, only playbooks from this source are deleted.
|
|
81
|
+
*/
|
|
82
|
+
sourceId?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Recursively find all JSON files in a directory tree.
|
|
87
|
+
*/
|
|
88
|
+
async function findJsonFiles(dir: string): Promise<string[]> {
|
|
89
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
90
|
+
const files: string[] = [];
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
const fullPath = join(dir, entry.name);
|
|
93
|
+
if (entry.isDirectory()) {
|
|
94
|
+
files.push(...await findJsonFiles(fullPath));
|
|
95
|
+
} else if (entry.name.endsWith('.json')) {
|
|
96
|
+
files.push(fullPath);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return files;
|
|
100
|
+
}
|
|
101
|
+
|
|
58
102
|
/**
|
|
59
103
|
* Load curated playbooks from a directory of JSON files into the library.
|
|
104
|
+
* Supports recursive directory scanning.
|
|
60
105
|
*
|
|
61
106
|
* @param curatedDir - Directory containing curated playbook JSON files
|
|
62
107
|
* @param library - PlaybookLibrary to load into
|
|
63
|
-
* @param options
|
|
108
|
+
* @param options - Load options (recreate, sourceId)
|
|
64
109
|
*/
|
|
65
110
|
export async function loadCuratedPlaybooks(
|
|
66
111
|
curatedDir: string,
|
|
67
112
|
library: PlaybookLibrary,
|
|
68
|
-
options?:
|
|
113
|
+
options?: CuratedLoadOptions
|
|
69
114
|
): Promise<CuratedLoadResult> {
|
|
70
115
|
const result: CuratedLoadResult = {
|
|
71
116
|
loaded: 0,
|
|
@@ -78,20 +123,23 @@ export async function loadCuratedPlaybooks(
|
|
|
78
123
|
return result;
|
|
79
124
|
}
|
|
80
125
|
|
|
81
|
-
// Recreate: drop
|
|
126
|
+
// Recreate: drop curated playbooks before loading
|
|
82
127
|
if (options?.recreate) {
|
|
83
|
-
|
|
128
|
+
if (options.sourceId) {
|
|
129
|
+
// Per-source recreate: only delete playbooks from this source
|
|
130
|
+
await library.deleteByCuratedSource(options.sourceId);
|
|
131
|
+
} else {
|
|
132
|
+
// Global recreate: delete all curated playbooks
|
|
133
|
+
await library.deleteByOrigin('curated');
|
|
134
|
+
}
|
|
84
135
|
result.recreated = true;
|
|
85
136
|
}
|
|
86
137
|
|
|
87
|
-
// Find all JSON files
|
|
88
|
-
const
|
|
89
|
-
const jsonFiles = files.filter((f) => f.endsWith('.json'));
|
|
138
|
+
// Find all JSON files recursively
|
|
139
|
+
const jsonFiles = await findJsonFiles(curatedDir);
|
|
90
140
|
|
|
91
|
-
for (const
|
|
92
|
-
const
|
|
93
|
-
const fileStat = await stat(filePath);
|
|
94
|
-
if (!fileStat.isFile()) continue;
|
|
141
|
+
for (const filePath of jsonFiles) {
|
|
142
|
+
const relativeToDir = relative(curatedDir, filePath);
|
|
95
143
|
|
|
96
144
|
try {
|
|
97
145
|
const content = await readFile(filePath, 'utf-8');
|
|
@@ -100,7 +148,7 @@ export async function loadCuratedPlaybooks(
|
|
|
100
148
|
// Validate required fields
|
|
101
149
|
if (!parsed.name || !parsed.applicability || !parsed.guidance) {
|
|
102
150
|
result.errors.push({
|
|
103
|
-
file,
|
|
151
|
+
file: relativeToDir,
|
|
104
152
|
error: 'Missing required fields: name, applicability, guidance',
|
|
105
153
|
});
|
|
106
154
|
continue;
|
|
@@ -113,10 +161,15 @@ export async function loadCuratedPlaybooks(
|
|
|
113
161
|
continue;
|
|
114
162
|
}
|
|
115
163
|
|
|
164
|
+
// Build sourceFile with optional source prefix
|
|
116
165
|
const relativePath = relative(process.cwd(), filePath);
|
|
166
|
+
const sourceFile = options?.sourceId
|
|
167
|
+
? `${options.sourceId}:${relativeToDir}`
|
|
168
|
+
: relativePath;
|
|
169
|
+
|
|
117
170
|
const provenance: PlaybookProvenance = {
|
|
118
171
|
origin: 'curated',
|
|
119
|
-
sourceFile
|
|
172
|
+
sourceFile,
|
|
120
173
|
curatedBy: parsed.curatedBy,
|
|
121
174
|
recordedAt: new Date(),
|
|
122
175
|
};
|
|
@@ -150,7 +203,7 @@ export async function loadCuratedPlaybooks(
|
|
|
150
203
|
result.loaded++;
|
|
151
204
|
} catch (error) {
|
|
152
205
|
result.errors.push({
|
|
153
|
-
file,
|
|
206
|
+
file: relativeToDir,
|
|
154
207
|
error: error instanceof Error ? error.message : String(error),
|
|
155
208
|
});
|
|
156
209
|
}
|
package/src/memory/index.ts
CHANGED
|
@@ -99,10 +99,26 @@ export type { SqlitePersistenceConfig } from '../persistence/index.js';
|
|
|
99
99
|
// Curated playbook loading
|
|
100
100
|
export {
|
|
101
101
|
loadCuratedPlaybooks,
|
|
102
|
+
BUNDLED_SEED_PACK_DIR,
|
|
102
103
|
type CuratedPlaybookFile,
|
|
103
104
|
type CuratedLoadResult,
|
|
105
|
+
type CuratedLoadOptions,
|
|
104
106
|
} from './curated-loader.js';
|
|
105
107
|
|
|
108
|
+
// Source resolver (git + local path resolution for curated sources)
|
|
109
|
+
export {
|
|
110
|
+
resolvePlaybookSource,
|
|
111
|
+
isGitSource,
|
|
112
|
+
parseGitSource,
|
|
113
|
+
discoverPlaybookDir,
|
|
114
|
+
sourceStateKey,
|
|
115
|
+
type ParsedGitSource,
|
|
116
|
+
type PlaybookManifest,
|
|
117
|
+
type SourceState,
|
|
118
|
+
type ResolveResult,
|
|
119
|
+
type ResolveOptions,
|
|
120
|
+
} from './source-resolver.js';
|
|
121
|
+
|
|
106
122
|
// Skill export (compile playbooks → Open Agent Skills format)
|
|
107
123
|
export {
|
|
108
124
|
compilePlaybookToSkill,
|
package/src/memory/playbook.ts
CHANGED
|
@@ -616,6 +616,25 @@ export class PlaybookLibrary {
|
|
|
616
616
|
return toDelete.length;
|
|
617
617
|
}
|
|
618
618
|
|
|
619
|
+
/**
|
|
620
|
+
* Delete curated playbooks whose provenance.sourceFile starts with the given prefix.
|
|
621
|
+
* Used by the source resolver to recreate playbooks from a specific source
|
|
622
|
+
* without affecting other curated sources.
|
|
623
|
+
*/
|
|
624
|
+
async deleteByCuratedSource(sourcePrefix: string): Promise<number> {
|
|
625
|
+
await this.init();
|
|
626
|
+
const toDelete = this.getAllSync().filter(
|
|
627
|
+
(p) =>
|
|
628
|
+
p.provenance?.origin === 'curated' &&
|
|
629
|
+
p.provenance.sourceFile?.startsWith(sourcePrefix),
|
|
630
|
+
);
|
|
631
|
+
for (const playbook of toDelete) {
|
|
632
|
+
this.persistence.deletePlaybook(playbook.id);
|
|
633
|
+
this._index.remove(playbook.id);
|
|
634
|
+
}
|
|
635
|
+
return toDelete.length;
|
|
636
|
+
}
|
|
637
|
+
|
|
619
638
|
/**
|
|
620
639
|
* Get provenance summary across all playbooks
|
|
621
640
|
*/
|