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
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playbook Decay Detection Template
|
|
3
|
+
*
|
|
4
|
+
* Portfolio-wide scan for playbooks showing declining efficacy.
|
|
5
|
+
* Uses temporal trend analysis to identify decay early, before
|
|
6
|
+
* playbooks accumulate enough failures to trigger confidence drops.
|
|
7
|
+
*
|
|
8
|
+
* The agent reviews pre-computed trends and cross-references with
|
|
9
|
+
* failure patterns to determine whether decay is real (environment
|
|
10
|
+
* changed) or noise (small sample size).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { WorkspaceHandle } from 'agent-workspace';
|
|
14
|
+
import type { Playbook } from '../../types/index.js';
|
|
15
|
+
import type { TaskAnnotation, PlaybookEffectivenessEntry } from '../../learning/effectiveness.js';
|
|
16
|
+
import type {
|
|
17
|
+
AgenticTaskTemplate,
|
|
18
|
+
AnalysisComplexity,
|
|
19
|
+
} from '../types.js';
|
|
20
|
+
import {
|
|
21
|
+
computeTemporalTrend,
|
|
22
|
+
computeNormalizedGain,
|
|
23
|
+
type TemporalTrend,
|
|
24
|
+
} from '../efficacy-toolkit.js';
|
|
25
|
+
import { getPlaybookSuccessRate } from '../../types/index.js';
|
|
26
|
+
|
|
27
|
+
// ============================================================
|
|
28
|
+
// Input / Output Types
|
|
29
|
+
// ============================================================
|
|
30
|
+
|
|
31
|
+
export interface PlaybookDecayDetectionInput {
|
|
32
|
+
playbooks: Playbook[];
|
|
33
|
+
annotations: TaskAnnotation[];
|
|
34
|
+
playbookEffectiveness: PlaybookEffectivenessEntry[];
|
|
35
|
+
unguidedSuccessRate: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface PlaybookDecayDetectionOutput {
|
|
39
|
+
/** Playbooks with detected decay signals */
|
|
40
|
+
decaying: DecaySignal[];
|
|
41
|
+
/** Playbooks at risk of decay (early warning) */
|
|
42
|
+
atRisk: DecaySignal[];
|
|
43
|
+
/** Playbooks confirmed stable or improving */
|
|
44
|
+
healthy: string[];
|
|
45
|
+
/** Agent's overall assessment */
|
|
46
|
+
portfolioAssessment: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface DecaySignal {
|
|
50
|
+
playbookId: string;
|
|
51
|
+
playbookName: string;
|
|
52
|
+
trend: TemporalTrend;
|
|
53
|
+
/** Agent's explanation of why this playbook is decaying */
|
|
54
|
+
diagnosis: string;
|
|
55
|
+
/** Recommended action */
|
|
56
|
+
recommendation: 'investigate' | 'refine' | 'deprecate' | 'monitor';
|
|
57
|
+
/** Severity: how urgently this needs attention */
|
|
58
|
+
severity: 'critical' | 'warning' | 'info';
|
|
59
|
+
/** Supporting evidence */
|
|
60
|
+
evidence: string[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ============================================================
|
|
64
|
+
// Template Implementation
|
|
65
|
+
// ============================================================
|
|
66
|
+
|
|
67
|
+
export const playbookDecayDetectionTemplate: AgenticTaskTemplate<
|
|
68
|
+
PlaybookDecayDetectionInput,
|
|
69
|
+
PlaybookDecayDetectionOutput
|
|
70
|
+
> = {
|
|
71
|
+
taskType: 'playbook-decay-detection',
|
|
72
|
+
domain: 'meta-learning',
|
|
73
|
+
description: 'Detect declining efficacy across the playbook portfolio',
|
|
74
|
+
|
|
75
|
+
assessComplexity(input: PlaybookDecayDetectionInput): AnalysisComplexity {
|
|
76
|
+
if (input.playbooks.length === 0) return 'heuristic';
|
|
77
|
+
if (input.annotations.length < 10) return 'heuristic';
|
|
78
|
+
if (input.playbooks.length > 20) return 'standard';
|
|
79
|
+
return 'lightweight';
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
async heuristicFallback(input: PlaybookDecayDetectionInput): Promise<PlaybookDecayDetectionOutput> {
|
|
83
|
+
const decaying: DecaySignal[] = [];
|
|
84
|
+
const atRisk: DecaySignal[] = [];
|
|
85
|
+
const healthy: string[] = [];
|
|
86
|
+
|
|
87
|
+
for (const pb of input.playbooks) {
|
|
88
|
+
const trend = computeTemporalTrend(input.annotations, pb.id);
|
|
89
|
+
|
|
90
|
+
if (trend.dataPoints < 4) {
|
|
91
|
+
healthy.push(pb.id);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (trend.direction === 'decaying') {
|
|
96
|
+
decaying.push({
|
|
97
|
+
playbookId: pb.id,
|
|
98
|
+
playbookName: pb.name,
|
|
99
|
+
trend,
|
|
100
|
+
diagnosis: `Success rate declining from ${(trend.oldestSuccessRate * 100).toFixed(0)}% to ${(trend.recentSuccessRate * 100).toFixed(0)}%`,
|
|
101
|
+
recommendation: trend.slope < -0.15 ? 'refine' : 'monitor',
|
|
102
|
+
severity: trend.slope < -0.15 ? 'warning' : 'info',
|
|
103
|
+
evidence: [`Trend slope: ${trend.slope.toFixed(3)}`],
|
|
104
|
+
});
|
|
105
|
+
} else if (trend.daysSinceLastUse !== null && trend.daysSinceLastUse > 30) {
|
|
106
|
+
atRisk.push({
|
|
107
|
+
playbookId: pb.id,
|
|
108
|
+
playbookName: pb.name,
|
|
109
|
+
trend,
|
|
110
|
+
diagnosis: `No usage in ${Math.round(trend.daysSinceLastUse)} days — may be going stale`,
|
|
111
|
+
recommendation: 'investigate',
|
|
112
|
+
severity: 'info',
|
|
113
|
+
evidence: [`Last used ${Math.round(trend.daysSinceLastUse)} days ago`],
|
|
114
|
+
});
|
|
115
|
+
} else {
|
|
116
|
+
healthy.push(pb.id);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
decaying,
|
|
122
|
+
atRisk,
|
|
123
|
+
healthy,
|
|
124
|
+
portfolioAssessment: `${decaying.length} decaying, ${atRisk.length} at risk, ${healthy.length} healthy.`,
|
|
125
|
+
};
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
async prepareWorkspace(
|
|
129
|
+
input: PlaybookDecayDetectionInput,
|
|
130
|
+
handle: WorkspaceHandle
|
|
131
|
+
): Promise<void> {
|
|
132
|
+
const effectivenessMap = new Map(
|
|
133
|
+
input.playbookEffectiveness.map(e => [e.playbookId, e])
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
// Pre-compute trends for all playbooks
|
|
137
|
+
const trendData = input.playbooks.map(pb => {
|
|
138
|
+
const trend = computeTemporalTrend(input.annotations, pb.id);
|
|
139
|
+
const eff = effectivenessMap.get(pb.id);
|
|
140
|
+
const successRate = getPlaybookSuccessRate(pb);
|
|
141
|
+
const appliedRate = eff?.appliedSuccessRate ?? successRate;
|
|
142
|
+
const normalizedGain = computeNormalizedGain(appliedRate, input.unguidedSuccessRate);
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
playbookId: pb.id,
|
|
146
|
+
playbookName: pb.name,
|
|
147
|
+
confidence: pb.confidence,
|
|
148
|
+
successRate,
|
|
149
|
+
normalizedGain,
|
|
150
|
+
totalUses: pb.evolution.successCount + pb.evolution.failureCount,
|
|
151
|
+
domains: pb.applicability.domains,
|
|
152
|
+
trend,
|
|
153
|
+
recentFailureModes: pb.evolution.failures.slice(-3).map(f => f.failureMode),
|
|
154
|
+
adoptionRate: eff && eff.surfacedCount > 0
|
|
155
|
+
? eff.appliedCount / eff.surfacedCount
|
|
156
|
+
: null,
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
await handle.writeJson('input', 'playbook-trends.json', trendData);
|
|
161
|
+
|
|
162
|
+
// Summary stats
|
|
163
|
+
await handle.writeJson('input', 'summary.json', {
|
|
164
|
+
totalPlaybooks: input.playbooks.length,
|
|
165
|
+
totalAnnotations: input.annotations.length,
|
|
166
|
+
unguidedSuccessRate: input.unguidedSuccessRate,
|
|
167
|
+
decayingCount: trendData.filter(t => t.trend.direction === 'decaying').length,
|
|
168
|
+
improvingCount: trendData.filter(t => t.trend.direction === 'improving').length,
|
|
169
|
+
stableCount: trendData.filter(t => t.trend.direction === 'stable').length,
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
buildTaskPrompt(input: PlaybookDecayDetectionInput): string {
|
|
174
|
+
return [
|
|
175
|
+
`Analyze ${input.playbooks.length} playbooks for signs of declining efficacy.`,
|
|
176
|
+
'',
|
|
177
|
+
'Read:',
|
|
178
|
+
'- input/playbook-trends.json — Pre-computed temporal trends, normalized gains, and failure modes for each playbook',
|
|
179
|
+
'- input/summary.json — Portfolio summary statistics',
|
|
180
|
+
'',
|
|
181
|
+
'For each playbook showing negative trends or staleness:',
|
|
182
|
+
'1. Is the decay real or just noise from small sample size?',
|
|
183
|
+
'2. What might be causing the decline? (environment changes, scope mismatch, guidance outdated)',
|
|
184
|
+
'3. What action should be taken?',
|
|
185
|
+
'',
|
|
186
|
+
'Also flag playbooks that aren\'t decaying yet but show early warning signs:',
|
|
187
|
+
'- Declining adoption rate (agents stop choosing to use it)',
|
|
188
|
+
'- Increasing failure modes diversity (suggests scope drift)',
|
|
189
|
+
'- High normalized gain but low confidence (fragile effectiveness)',
|
|
190
|
+
'',
|
|
191
|
+
'Write results to output/decay-report.json:',
|
|
192
|
+
'```json',
|
|
193
|
+
'{',
|
|
194
|
+
' "decaying": [',
|
|
195
|
+
' {',
|
|
196
|
+
' "playbookId": "id",',
|
|
197
|
+
' "playbookName": "name",',
|
|
198
|
+
' "diagnosis": "why this is decaying",',
|
|
199
|
+
' "recommendation": "investigate" | "refine" | "deprecate" | "monitor",',
|
|
200
|
+
' "severity": "critical" | "warning" | "info",',
|
|
201
|
+
' "evidence": ["supporting facts"]',
|
|
202
|
+
' }',
|
|
203
|
+
' ],',
|
|
204
|
+
' "atRisk": [same structure],',
|
|
205
|
+
' "healthy": ["playbookId1", "playbookId2"],',
|
|
206
|
+
' "portfolioAssessment": "2-3 sentence overall assessment"',
|
|
207
|
+
'}',
|
|
208
|
+
'```',
|
|
209
|
+
].join('\n');
|
|
210
|
+
},
|
|
211
|
+
|
|
212
|
+
getSkills() { return []; },
|
|
213
|
+
getResources() { return []; },
|
|
214
|
+
|
|
215
|
+
outputConfig: {
|
|
216
|
+
files: [
|
|
217
|
+
{
|
|
218
|
+
path: 'decay-report.json',
|
|
219
|
+
format: 'json' as const,
|
|
220
|
+
required: true,
|
|
221
|
+
description: 'Playbook decay detection results',
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
|
|
226
|
+
async collectOutput(handle: WorkspaceHandle): Promise<PlaybookDecayDetectionOutput> {
|
|
227
|
+
const raw = await handle.readJson('output', 'decay-report.json') as Record<string, unknown>;
|
|
228
|
+
|
|
229
|
+
// Also read back trend data for full DecaySignal objects
|
|
230
|
+
const trendData = await handle.readJson('input', 'playbook-trends.json') as Array<{
|
|
231
|
+
playbookId: string;
|
|
232
|
+
trend: TemporalTrend;
|
|
233
|
+
}>;
|
|
234
|
+
const trendMap = new Map(trendData.map(t => [t.playbookId, t.trend]));
|
|
235
|
+
|
|
236
|
+
const parseSignals = (items: unknown): DecaySignal[] => {
|
|
237
|
+
if (!Array.isArray(items)) return [];
|
|
238
|
+
return (items as Record<string, unknown>[]).map(item => ({
|
|
239
|
+
playbookId: String(item.playbookId ?? ''),
|
|
240
|
+
playbookName: String(item.playbookName ?? ''),
|
|
241
|
+
trend: trendMap.get(String(item.playbookId ?? '')) ?? {
|
|
242
|
+
slope: 0, direction: 'stable' as const, dataPoints: 0,
|
|
243
|
+
recentSuccessRate: 0, oldestSuccessRate: 0, daysSinceLastUse: null,
|
|
244
|
+
},
|
|
245
|
+
diagnosis: String(item.diagnosis ?? ''),
|
|
246
|
+
recommendation: String(item.recommendation ?? 'monitor') as DecaySignal['recommendation'],
|
|
247
|
+
severity: String(item.severity ?? 'info') as DecaySignal['severity'],
|
|
248
|
+
evidence: Array.isArray(item.evidence) ? item.evidence.map(String) : [],
|
|
249
|
+
}));
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
return {
|
|
253
|
+
decaying: parseSignals(raw.decaying),
|
|
254
|
+
atRisk: parseSignals(raw.atRisk),
|
|
255
|
+
healthy: Array.isArray(raw.healthy) ? raw.healthy.map(String) : [],
|
|
256
|
+
portfolioAssessment: String(raw.portfolioAssessment ?? ''),
|
|
257
|
+
};
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
async processOutput(): Promise<void> {
|
|
261
|
+
// Caller decides how to act on decay signals
|
|
262
|
+
},
|
|
263
|
+
|
|
264
|
+
computeRequirements: {
|
|
265
|
+
mode: 'local',
|
|
266
|
+
complexity: 'lightweight',
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
agentType: 'claude-code',
|
|
270
|
+
timeout: 120_000,
|
|
271
|
+
captureToolCalls: true,
|
|
272
|
+
};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playbook Efficacy Audit Template
|
|
3
|
+
*
|
|
4
|
+
* Deep-dive analysis of a single playbook's effectiveness.
|
|
5
|
+
* Uses the efficacy toolkit to pre-compute metrics, then asks an agent
|
|
6
|
+
* to synthesize findings, identify root causes, and recommend actions.
|
|
7
|
+
*
|
|
8
|
+
* Heuristic fallback: for playbooks with very few data points, return
|
|
9
|
+
* a summary without agent analysis.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { WorkspaceHandle } from 'agent-workspace';
|
|
13
|
+
import type { Playbook } from '../../types/index.js';
|
|
14
|
+
import type { TaskAnnotation, PlaybookEffectivenessEntry } from '../../learning/effectiveness.js';
|
|
15
|
+
import type {
|
|
16
|
+
AgenticTaskTemplate,
|
|
17
|
+
AnalysisComplexity,
|
|
18
|
+
} from '../types.js';
|
|
19
|
+
import {
|
|
20
|
+
buildEfficacyProfile,
|
|
21
|
+
type PlaybookEfficacyProfile,
|
|
22
|
+
} from '../efficacy-toolkit.js';
|
|
23
|
+
|
|
24
|
+
// ============================================================
|
|
25
|
+
// Input / Output Types
|
|
26
|
+
// ============================================================
|
|
27
|
+
|
|
28
|
+
export interface PlaybookEfficacyAuditInput {
|
|
29
|
+
playbook: Playbook;
|
|
30
|
+
annotations: TaskAnnotation[];
|
|
31
|
+
playbookEffectiveness: PlaybookEffectivenessEntry | undefined;
|
|
32
|
+
unguidedSuccessRate: number;
|
|
33
|
+
/** Map of trajectoryId → domain for per-domain breakdown */
|
|
34
|
+
trajectoryDomainMap: Map<string, string>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface PlaybookEfficacyAuditOutput {
|
|
38
|
+
/** Pre-computed profile (from toolkit) */
|
|
39
|
+
profile: PlaybookEfficacyProfile;
|
|
40
|
+
/** Agent's synthesis and recommendations */
|
|
41
|
+
assessment: {
|
|
42
|
+
/** Overall health rating */
|
|
43
|
+
health: 'healthy' | 'at-risk' | 'underperforming' | 'insufficient-data';
|
|
44
|
+
/** Root cause analysis for any issues */
|
|
45
|
+
rootCauses: string[];
|
|
46
|
+
/** Specific actionable recommendations */
|
|
47
|
+
recommendations: PlaybookRecommendation[];
|
|
48
|
+
/** Brief narrative summary */
|
|
49
|
+
summary: string;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface PlaybookRecommendation {
|
|
54
|
+
action: 'refine-guidance' | 'add-anti-pattern' | 'narrow-scope' | 'broaden-scope'
|
|
55
|
+
| 'deprecate' | 'merge-with' | 'split' | 'no-change';
|
|
56
|
+
description: string;
|
|
57
|
+
priority: 'high' | 'medium' | 'low';
|
|
58
|
+
/** For merge-with: target playbook name */
|
|
59
|
+
targetPlaybook?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ============================================================
|
|
63
|
+
// Template Implementation
|
|
64
|
+
// ============================================================
|
|
65
|
+
|
|
66
|
+
export const playbookEfficacyAuditTemplate: AgenticTaskTemplate<
|
|
67
|
+
PlaybookEfficacyAuditInput,
|
|
68
|
+
PlaybookEfficacyAuditOutput
|
|
69
|
+
> = {
|
|
70
|
+
taskType: 'playbook-efficacy-audit',
|
|
71
|
+
domain: 'meta-learning',
|
|
72
|
+
description: 'Deep-dive efficacy analysis of a single playbook with recommendations',
|
|
73
|
+
|
|
74
|
+
assessComplexity(input: PlaybookEfficacyAuditInput): AnalysisComplexity {
|
|
75
|
+
const totalUses = input.playbook.evolution.successCount + input.playbook.evolution.failureCount;
|
|
76
|
+
if (totalUses < 3) return 'heuristic';
|
|
77
|
+
if (totalUses < 10 && input.playbook.evolution.failures.length === 0) return 'heuristic';
|
|
78
|
+
if (totalUses > 20 || input.playbook.evolution.failures.length > 3) return 'standard';
|
|
79
|
+
return 'lightweight';
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
async heuristicFallback(input: PlaybookEfficacyAuditInput): Promise<PlaybookEfficacyAuditOutput> {
|
|
83
|
+
const profile = buildEfficacyProfile(
|
|
84
|
+
input.playbook,
|
|
85
|
+
input.annotations,
|
|
86
|
+
input.playbookEffectiveness,
|
|
87
|
+
input.unguidedSuccessRate,
|
|
88
|
+
input.trajectoryDomainMap,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
profile,
|
|
93
|
+
assessment: {
|
|
94
|
+
health: profile.totalUses < 3 ? 'insufficient-data' : (
|
|
95
|
+
profile.successRate >= 0.7 ? 'healthy' :
|
|
96
|
+
profile.successRate >= 0.4 ? 'at-risk' : 'underperforming'
|
|
97
|
+
),
|
|
98
|
+
rootCauses: [],
|
|
99
|
+
recommendations: profile.totalUses < 3
|
|
100
|
+
? [{ action: 'no-change', description: 'Insufficient data for assessment', priority: 'low' }]
|
|
101
|
+
: [],
|
|
102
|
+
summary: profile.totalUses < 3
|
|
103
|
+
? `${profile.playbookName} has only ${profile.totalUses} uses — not enough for reliable assessment.`
|
|
104
|
+
: `${profile.playbookName}: ${(profile.successRate * 100).toFixed(0)}% success rate, normalized gain ${profile.normalizedGain.toFixed(2)}.`,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
async prepareWorkspace(
|
|
110
|
+
input: PlaybookEfficacyAuditInput,
|
|
111
|
+
handle: WorkspaceHandle
|
|
112
|
+
): Promise<void> {
|
|
113
|
+
const profile = buildEfficacyProfile(
|
|
114
|
+
input.playbook,
|
|
115
|
+
input.annotations,
|
|
116
|
+
input.playbookEffectiveness,
|
|
117
|
+
input.unguidedSuccessRate,
|
|
118
|
+
input.trajectoryDomainMap,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
// Pre-computed efficacy profile — the core data the agent analyzes
|
|
122
|
+
await handle.writeJson('input', 'efficacy-profile.json', profile);
|
|
123
|
+
|
|
124
|
+
// Full playbook definition for context
|
|
125
|
+
await handle.writeJson('input', 'playbook.json', {
|
|
126
|
+
id: input.playbook.id,
|
|
127
|
+
name: input.playbook.name,
|
|
128
|
+
applicability: input.playbook.applicability,
|
|
129
|
+
guidance: input.playbook.guidance,
|
|
130
|
+
verification: input.playbook.verification,
|
|
131
|
+
evolution: {
|
|
132
|
+
version: input.playbook.evolution.version,
|
|
133
|
+
failures: input.playbook.evolution.failures.slice(-5),
|
|
134
|
+
refinements: input.playbook.evolution.refinements,
|
|
135
|
+
successCount: input.playbook.evolution.successCount,
|
|
136
|
+
failureCount: input.playbook.evolution.failureCount,
|
|
137
|
+
},
|
|
138
|
+
confidence: input.playbook.confidence,
|
|
139
|
+
complexity: input.playbook.complexity,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Recent trajectory annotations for this playbook
|
|
143
|
+
const relevantAnnotations = input.annotations
|
|
144
|
+
.filter(a =>
|
|
145
|
+
a.knowledgeSurfaced.playbookIds.includes(input.playbook.id)
|
|
146
|
+
)
|
|
147
|
+
.slice(-20)
|
|
148
|
+
.map(a => ({
|
|
149
|
+
trajectoryId: a.trajectoryId,
|
|
150
|
+
success: a.outcome.success,
|
|
151
|
+
stepCount: a.outcome.stepCount,
|
|
152
|
+
errorRecoveries: a.outcome.errorRecoveries,
|
|
153
|
+
wasApplied: a.knowledgeApplied.playbookIdsUsed.includes(input.playbook.id),
|
|
154
|
+
reflection: a.reflection,
|
|
155
|
+
timestamp: a.timestamp,
|
|
156
|
+
}));
|
|
157
|
+
|
|
158
|
+
await handle.writeJson('input', 'recent-annotations.json', relevantAnnotations);
|
|
159
|
+
},
|
|
160
|
+
|
|
161
|
+
buildTaskPrompt(input: PlaybookEfficacyAuditInput): string {
|
|
162
|
+
return [
|
|
163
|
+
`Evaluate the efficacy of playbook "${input.playbook.name}".`,
|
|
164
|
+
'',
|
|
165
|
+
'Read the following input files:',
|
|
166
|
+
'- input/efficacy-profile.json — Pre-computed metrics (normalized gain, temporal trend, domain breakdown, usage profile)',
|
|
167
|
+
'- input/playbook.json — The playbook definition (guidance, verification, evolution history)',
|
|
168
|
+
'- input/recent-annotations.json — Recent trajectory outcomes when this playbook was surfaced',
|
|
169
|
+
'',
|
|
170
|
+
'Analyze:',
|
|
171
|
+
'1. Is this playbook providing marginal value above the unguided baseline? (check normalizedGain)',
|
|
172
|
+
'2. Is efficacy trending up, stable, or decaying? (check temporalTrend)',
|
|
173
|
+
'3. Does it work equally well across all domains, or is it domain-specific?',
|
|
174
|
+
'4. Are agents actually adopting it when surfaced? (check usage.adoptionRate)',
|
|
175
|
+
'5. Are there recurring failure modes that suggest guidance needs updating?',
|
|
176
|
+
'',
|
|
177
|
+
'Write your assessment to output/audit.json:',
|
|
178
|
+
'```json',
|
|
179
|
+
'{',
|
|
180
|
+
' "health": "healthy" | "at-risk" | "underperforming" | "insufficient-data",',
|
|
181
|
+
' "rootCauses": ["reason1", "reason2"],',
|
|
182
|
+
' "recommendations": [',
|
|
183
|
+
' {',
|
|
184
|
+
' "action": "refine-guidance" | "add-anti-pattern" | "narrow-scope" | "broaden-scope" | "deprecate" | "merge-with" | "split" | "no-change",',
|
|
185
|
+
' "description": "specific actionable recommendation",',
|
|
186
|
+
' "priority": "high" | "medium" | "low",',
|
|
187
|
+
' "targetPlaybook": "optional: for merge-with actions"',
|
|
188
|
+
' }',
|
|
189
|
+
' ],',
|
|
190
|
+
' "summary": "2-3 sentence narrative summary"',
|
|
191
|
+
'}',
|
|
192
|
+
'```',
|
|
193
|
+
].join('\n');
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
getSkills() { return []; },
|
|
197
|
+
getResources() { return []; },
|
|
198
|
+
|
|
199
|
+
outputConfig: {
|
|
200
|
+
files: [
|
|
201
|
+
{
|
|
202
|
+
path: 'audit.json',
|
|
203
|
+
format: 'json' as const,
|
|
204
|
+
required: true,
|
|
205
|
+
description: 'Playbook efficacy audit results',
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
async collectOutput(handle: WorkspaceHandle): Promise<PlaybookEfficacyAuditOutput> {
|
|
211
|
+
const raw = await handle.readJson('output', 'audit.json') as Record<string, unknown>;
|
|
212
|
+
const profile = await handle.readJson('input', 'efficacy-profile.json') as PlaybookEfficacyProfile;
|
|
213
|
+
|
|
214
|
+
const recommendations: PlaybookRecommendation[] = Array.isArray(raw.recommendations)
|
|
215
|
+
? (raw.recommendations as Record<string, unknown>[]).map(r => ({
|
|
216
|
+
action: String(r.action ?? 'no-change') as PlaybookRecommendation['action'],
|
|
217
|
+
description: String(r.description ?? ''),
|
|
218
|
+
priority: String(r.priority ?? 'medium') as PlaybookRecommendation['priority'],
|
|
219
|
+
targetPlaybook: r.targetPlaybook ? String(r.targetPlaybook) : undefined,
|
|
220
|
+
}))
|
|
221
|
+
: [];
|
|
222
|
+
|
|
223
|
+
return {
|
|
224
|
+
profile,
|
|
225
|
+
assessment: {
|
|
226
|
+
health: String(raw.health ?? 'insufficient-data') as PlaybookEfficacyAuditOutput['assessment']['health'],
|
|
227
|
+
rootCauses: Array.isArray(raw.rootCauses) ? raw.rootCauses.map(String) : [],
|
|
228
|
+
recommendations,
|
|
229
|
+
summary: String(raw.summary ?? ''),
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
async processOutput(): Promise<void> {
|
|
235
|
+
// Caller decides how to act on recommendations
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
computeRequirements: {
|
|
239
|
+
mode: 'local',
|
|
240
|
+
complexity: 'lightweight',
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
agentType: 'claude-code',
|
|
244
|
+
timeout: 120_000,
|
|
245
|
+
captureToolCalls: true,
|
|
246
|
+
};
|