cognitive-core 0.2.1 → 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/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/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/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/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 +2 -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/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/workspace/types.ts +22 -78
- package/tests/integration/curated-sources-e2e.test.ts +502 -0
- package/tests/memory/compound-engineering-seed.test.ts +338 -0
- package/tests/memory/curated-loader-extended.test.ts +225 -0
- package/tests/memory/playbook-quality-validation.test.ts +430 -0
- package/tests/memory/source-resolver.test.ts +700 -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
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
# Skill Implementation Patterns
|
|
2
|
-
|
|
3
|
-
These patterns emerged from skills created by early adopters and Anthropic's internal teams. Choose the approach that fits the skill's workflow.
|
|
4
|
-
|
|
5
|
-
## Choosing an Approach: Problem-First vs. Tool-First
|
|
6
|
-
|
|
7
|
-
- **Problem-first**: "I need to set up a project workspace" - The skill orchestrates the right tool calls in the right sequence. Users describe outcomes; the skill handles the tools.
|
|
8
|
-
- **Tool-first**: "I have Notion MCP connected" - The skill teaches Claude optimal workflows and best practices. Users have access; the skill provides expertise.
|
|
9
|
-
|
|
10
|
-
Most skills lean one direction. Knowing which framing fits helps choose the right pattern.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Pattern 1: Sequential Workflow Orchestration
|
|
15
|
-
|
|
16
|
-
**Use when:** Multi-step processes must happen in a specific order.
|
|
17
|
-
|
|
18
|
-
```markdown
|
|
19
|
-
## Workflow: Onboard New Customer
|
|
20
|
-
|
|
21
|
-
### Step 1: Create Account
|
|
22
|
-
Call MCP tool: `create_customer`
|
|
23
|
-
Parameters: name, email, company
|
|
24
|
-
|
|
25
|
-
### Step 2: Setup Payment
|
|
26
|
-
Call MCP tool: `setup_payment_method`
|
|
27
|
-
Wait for: payment method verification
|
|
28
|
-
|
|
29
|
-
### Step 3: Create Subscription
|
|
30
|
-
Call MCP tool: `create_subscription`
|
|
31
|
-
Parameters: plan_id, customer_id (from Step 1)
|
|
32
|
-
|
|
33
|
-
### Step 4: Send Welcome Email
|
|
34
|
-
Call MCP tool: `send_email`
|
|
35
|
-
Template: welcome_email_template
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**Key techniques:**
|
|
39
|
-
- Explicit step ordering with numbered steps
|
|
40
|
-
- Dependencies between steps clearly noted
|
|
41
|
-
- Validation at each stage
|
|
42
|
-
- Rollback instructions for failures
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Pattern 2: Multi-MCP Coordination
|
|
47
|
-
|
|
48
|
-
**Use when:** Workflows span multiple services.
|
|
49
|
-
|
|
50
|
-
```markdown
|
|
51
|
-
### Phase 1: Design Export (Figma MCP)
|
|
52
|
-
1. Export design assets from Figma
|
|
53
|
-
2. Generate design specifications
|
|
54
|
-
3. Create asset manifest
|
|
55
|
-
|
|
56
|
-
### Phase 2: Asset Storage (Drive MCP)
|
|
57
|
-
1. Create project folder in Drive
|
|
58
|
-
2. Upload all assets
|
|
59
|
-
3. Generate shareable links
|
|
60
|
-
|
|
61
|
-
### Phase 3: Task Creation (Linear MCP)
|
|
62
|
-
1. Create development tasks
|
|
63
|
-
2. Attach asset links to tasks
|
|
64
|
-
3. Assign to engineering team
|
|
65
|
-
|
|
66
|
-
### Phase 4: Notification (Slack MCP)
|
|
67
|
-
1. Post handoff summary to #engineering
|
|
68
|
-
2. Include asset links and task references
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Key techniques:**
|
|
72
|
-
- Clear phase separation with service labels
|
|
73
|
-
- Data passing between MCPs (outputs from Phase 1 feed Phase 2)
|
|
74
|
-
- Validation before moving to next phase
|
|
75
|
-
- Centralized error handling
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Pattern 3: Iterative Refinement
|
|
80
|
-
|
|
81
|
-
**Use when:** Output quality improves with iteration.
|
|
82
|
-
|
|
83
|
-
```markdown
|
|
84
|
-
## Iterative Report Creation
|
|
85
|
-
|
|
86
|
-
### Initial Draft
|
|
87
|
-
1. Fetch data via MCP
|
|
88
|
-
2. Generate first draft report
|
|
89
|
-
3. Save to temporary file
|
|
90
|
-
|
|
91
|
-
### Quality Check
|
|
92
|
-
1. Run validation script: `scripts/check_report.py`
|
|
93
|
-
2. Identify issues:
|
|
94
|
-
- Missing sections
|
|
95
|
-
- Inconsistent formatting
|
|
96
|
-
- Data validation errors
|
|
97
|
-
|
|
98
|
-
### Refinement Loop
|
|
99
|
-
1. Address each identified issue
|
|
100
|
-
2. Regenerate affected sections
|
|
101
|
-
3. Re-validate
|
|
102
|
-
4. Repeat until quality threshold met
|
|
103
|
-
|
|
104
|
-
### Finalization
|
|
105
|
-
1. Apply final formatting
|
|
106
|
-
2. Generate summary
|
|
107
|
-
3. Save final version
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**Key techniques:**
|
|
111
|
-
- Explicit quality criteria defining "done"
|
|
112
|
-
- Validation scripts for deterministic checks
|
|
113
|
-
- Clear stopping conditions to prevent infinite loops
|
|
114
|
-
- Separation between draft and final stages
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Pattern 4: Context-Aware Tool Selection
|
|
119
|
-
|
|
120
|
-
**Use when:** Same outcome can be achieved with different tools depending on context.
|
|
121
|
-
|
|
122
|
-
```markdown
|
|
123
|
-
## Smart File Storage
|
|
124
|
-
|
|
125
|
-
### Decision Tree
|
|
126
|
-
1. Check file type and size
|
|
127
|
-
2. Determine best storage location:
|
|
128
|
-
- Large files (>10MB): Use cloud storage MCP
|
|
129
|
-
- Collaborative docs: Use Notion/Docs MCP
|
|
130
|
-
- Code files: Use GitHub MCP
|
|
131
|
-
- Temporary files: Use local storage
|
|
132
|
-
|
|
133
|
-
### Execute Storage
|
|
134
|
-
Based on decision:
|
|
135
|
-
- Call appropriate MCP tool
|
|
136
|
-
- Apply service-specific metadata
|
|
137
|
-
- Generate access link
|
|
138
|
-
|
|
139
|
-
### Provide Context to User
|
|
140
|
-
Explain why that storage location was chosen
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**Key techniques:**
|
|
144
|
-
- Clear decision criteria with thresholds
|
|
145
|
-
- Fallback options when primary choice unavailable
|
|
146
|
-
- Transparency about choices made
|
|
147
|
-
- Each branch has complete instructions
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Pattern 5: Domain-Specific Intelligence
|
|
152
|
-
|
|
153
|
-
**Use when:** The skill adds specialized knowledge beyond tool access.
|
|
154
|
-
|
|
155
|
-
```markdown
|
|
156
|
-
## Payment Processing with Compliance
|
|
157
|
-
|
|
158
|
-
### Before Processing (Compliance Check)
|
|
159
|
-
1. Fetch transaction details via MCP
|
|
160
|
-
2. Apply compliance rules:
|
|
161
|
-
- Check sanctions lists
|
|
162
|
-
- Verify jurisdiction allowances
|
|
163
|
-
- Assess risk level
|
|
164
|
-
3. Document compliance decision
|
|
165
|
-
|
|
166
|
-
### Processing
|
|
167
|
-
IF compliance passed:
|
|
168
|
-
- Call payment processing MCP tool
|
|
169
|
-
- Apply appropriate fraud checks
|
|
170
|
-
- Process transaction
|
|
171
|
-
ELSE:
|
|
172
|
-
- Flag for review
|
|
173
|
-
- Create compliance case
|
|
174
|
-
|
|
175
|
-
### Audit Trail
|
|
176
|
-
- Log all compliance checks
|
|
177
|
-
- Record processing decisions
|
|
178
|
-
- Generate audit report
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Key techniques:**
|
|
182
|
-
- Domain expertise embedded directly in logic
|
|
183
|
-
- Compliance/validation before action (gate pattern)
|
|
184
|
-
- Comprehensive audit documentation
|
|
185
|
-
- Clear governance and conditional branching
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Anti-Patterns to Avoid
|
|
190
|
-
|
|
191
|
-
### Vague Instructions
|
|
192
|
-
```markdown
|
|
193
|
-
# Bad
|
|
194
|
-
Validate the data before proceeding.
|
|
195
|
-
|
|
196
|
-
# Good
|
|
197
|
-
Run `python scripts/validate.py --input {filename}` to check data format.
|
|
198
|
-
If validation fails, common issues include:
|
|
199
|
-
- Missing required fields (add them to the CSV)
|
|
200
|
-
- Invalid date formats (use YYYY-MM-DD)
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Missing Error Handling
|
|
204
|
-
Every skill should handle the most common failure modes. If a tool call can fail, include what to do when it does.
|
|
205
|
-
|
|
206
|
-
### Overloaded SKILL.md
|
|
207
|
-
If SKILL.md exceeds 5,000 words, move detailed content to `references/`. A bloated SKILL.md degrades response quality when loaded alongside other skills.
|
|
208
|
-
|
|
209
|
-
### Assumed Exclusivity
|
|
210
|
-
Never write instructions that assume the skill is the only one loaded. Other skills may be active simultaneously.
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Skill Quality Checklist
|
|
2
|
-
|
|
3
|
-
Use this checklist to validate a skill before and after deployment.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Before Starting
|
|
8
|
-
|
|
9
|
-
- [ ] Identified 2-3 concrete use cases with triggers, steps, and expected results
|
|
10
|
-
- [ ] Determined skill category (Document/Asset Creation, Workflow Automation, MCP Enhancement)
|
|
11
|
-
- [ ] Identified required tools (built-in capabilities or MCP servers)
|
|
12
|
-
- [ ] Planned folder structure (references/, scripts/, assets/ as needed)
|
|
13
|
-
- [ ] Reviewed example skills for inspiration
|
|
14
|
-
|
|
15
|
-
## File Structure
|
|
16
|
-
|
|
17
|
-
- [ ] Folder named in kebab-case (no spaces, underscores, or capitals)
|
|
18
|
-
- [ ] `SKILL.md` file exists with exact spelling (case-sensitive)
|
|
19
|
-
- [ ] No `README.md` inside the skill folder
|
|
20
|
-
- [ ] Scripts are executable and tested independently
|
|
21
|
-
- [ ] References are markdown, well-organized
|
|
22
|
-
|
|
23
|
-
## YAML Frontmatter
|
|
24
|
-
|
|
25
|
-
- [ ] Wrapped in `---` delimiters (both opening and closing)
|
|
26
|
-
- [ ] `name` field: kebab-case, matches folder name
|
|
27
|
-
- [ ] `name` does not use "claude" or "anthropic" prefix
|
|
28
|
-
- [ ] `description` field present and under 1024 characters
|
|
29
|
-
- [ ] Description includes WHAT the skill does
|
|
30
|
-
- [ ] Description includes WHEN to use it (trigger phrases)
|
|
31
|
-
- [ ] Description mentions relevant file types (if applicable)
|
|
32
|
-
- [ ] No XML angle brackets (`<` or `>`) anywhere in frontmatter
|
|
33
|
-
- [ ] No unclosed quotes in YAML values
|
|
34
|
-
- [ ] Optional fields (license, compatibility, metadata) properly formatted
|
|
35
|
-
|
|
36
|
-
## Instructions Body
|
|
37
|
-
|
|
38
|
-
- [ ] Written in imperative/infinitive form (not second person)
|
|
39
|
-
- [ ] Instructions are specific and actionable (not vague)
|
|
40
|
-
- [ ] Exact commands, parameters, and expected outputs included
|
|
41
|
-
- [ ] Critical instructions appear at the top
|
|
42
|
-
- [ ] Uses headings, bullet points, and numbered lists for scanability
|
|
43
|
-
- [ ] Error handling included for common failure modes
|
|
44
|
-
- [ ] Examples provided for primary use cases
|
|
45
|
-
- [ ] References to bundled files use correct relative paths
|
|
46
|
-
- [ ] SKILL.md is under 5,000 words
|
|
47
|
-
- [ ] Detailed documentation moved to `references/`
|
|
48
|
-
|
|
49
|
-
## Triggering
|
|
50
|
-
|
|
51
|
-
- [ ] Triggers on obvious task descriptions
|
|
52
|
-
- [ ] Triggers on paraphrased requests
|
|
53
|
-
- [ ] Triggers on domain-specific terminology
|
|
54
|
-
- [ ] Does NOT trigger on unrelated topics
|
|
55
|
-
- [ ] Does NOT conflict with other skills' trigger domains
|
|
56
|
-
- [ ] Negative triggers included if overtriggering is a risk
|
|
57
|
-
|
|
58
|
-
## Functional Quality
|
|
59
|
-
|
|
60
|
-
- [ ] Primary use cases produce correct outputs
|
|
61
|
-
- [ ] API/MCP calls succeed without errors
|
|
62
|
-
- [ ] Error handling produces helpful guidance
|
|
63
|
-
- [ ] Edge cases are addressed or documented
|
|
64
|
-
- [ ] Consistent results across multiple runs of the same request
|
|
65
|
-
- [ ] Works without user needing to redirect or clarify
|
|
66
|
-
|
|
67
|
-
## Performance
|
|
68
|
-
|
|
69
|
-
- [ ] Completes workflows in a reasonable number of tool calls
|
|
70
|
-
- [ ] No unnecessary back-and-forth with the user
|
|
71
|
-
- [ ] Token usage is reasonable (compare with vs. without skill)
|
|
72
|
-
- [ ] Response quality is not degraded by large context
|
|
73
|
-
|
|
74
|
-
## Distribution (if sharing)
|
|
75
|
-
|
|
76
|
-
- [ ] Skill folder compresses cleanly as .zip
|
|
77
|
-
- [ ] Installation instructions are clear
|
|
78
|
-
- [ ] Dependencies documented in `compatibility` field
|
|
79
|
-
- [ ] License specified if open-source
|
|
80
|
-
- [ ] Version tracked in `metadata.version`
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Common Issues and Fixes
|
|
85
|
-
|
|
86
|
-
| Symptom | Likely Cause | Fix |
|
|
87
|
-
|---------|-------------|-----|
|
|
88
|
-
| Skill never triggers | Description too vague or missing trigger phrases | Add specific user phrases and keywords |
|
|
89
|
-
| Skill triggers too often | Description too broad | Add negative triggers, narrow scope |
|
|
90
|
-
| Claude ignores instructions | Instructions too verbose or buried | Move critical instructions to top, use headers |
|
|
91
|
-
| Inconsistent results | Ambiguous language | Replace vague prose with specific commands |
|
|
92
|
-
| Slow responses | SKILL.md too large | Move content to references/, stay under 5K words |
|
|
93
|
-
| Upload fails | Naming or formatting error | Check SKILL.md spelling, YAML delimiters, kebab-case |
|
|
94
|
-
|
|
95
|
-
## Debugging Trigger Issues
|
|
96
|
-
|
|
97
|
-
Ask Claude: "When would you use the [skill-name] skill?"
|
|
98
|
-
|
|
99
|
-
Claude will quote the description back. Compare against expected triggers and adjust the description accordingly.
|
|
100
|
-
|
|
101
|
-
For skills that should NOT trigger on certain queries, add explicit exclusions:
|
|
102
|
-
|
|
103
|
-
```yaml
|
|
104
|
-
description: Advanced data analysis for CSV files. Use for
|
|
105
|
-
statistical modeling, regression, clustering. Do NOT use for
|
|
106
|
-
simple data exploration (use data-viz skill instead).
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Iteration Signals
|
|
110
|
-
|
|
111
|
-
**Undertriggering** (skill doesn't load when it should):
|
|
112
|
-
- Add more trigger phrases, synonyms, and technical terms
|
|
113
|
-
- Include common misspellings or alternative phrasings
|
|
114
|
-
|
|
115
|
-
**Overtriggering** (skill loads for irrelevant queries):
|
|
116
|
-
- Add "Do NOT use for..." clauses
|
|
117
|
-
- Narrow the domain with more specific language
|
|
118
|
-
- Differentiate from adjacent skills explicitly
|
|
119
|
-
|
|
120
|
-
**Execution failures** (skill loads but produces poor results):
|
|
121
|
-
- Add validation gates before critical operations
|
|
122
|
-
- Include rollback instructions
|
|
123
|
-
- Bundle validation scripts for deterministic checks
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Run all tests
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { spawn } from "child_process";
|
|
6
|
-
import * as path from "path";
|
|
7
|
-
|
|
8
|
-
const testFiles = [
|
|
9
|
-
"semver.test.ts",
|
|
10
|
-
"adapters.test.ts",
|
|
11
|
-
"extraction.test.ts",
|
|
12
|
-
"storage.test.ts",
|
|
13
|
-
"lineage.test.ts",
|
|
14
|
-
"skill-bank.test.ts",
|
|
15
|
-
"matching.test.ts",
|
|
16
|
-
"batch.test.ts",
|
|
17
|
-
"composer.test.ts",
|
|
18
|
-
"merge.test.ts",
|
|
19
|
-
"hooks.test.ts",
|
|
20
|
-
"sqlite.test.ts",
|
|
21
|
-
"metrics.test.ts",
|
|
22
|
-
"agents.test.ts",
|
|
23
|
-
"validation.test.ts",
|
|
24
|
-
"import.test.ts",
|
|
25
|
-
"sqlite-indexer.test.ts",
|
|
26
|
-
// New integration tests
|
|
27
|
-
"config.test.ts",
|
|
28
|
-
"services-indexer.test.ts",
|
|
29
|
-
"services-sync.test.ts",
|
|
30
|
-
"skillbank-events.test.ts",
|
|
31
|
-
"integration.test.ts",
|
|
32
|
-
// Serving layer
|
|
33
|
-
"serving.test.ts",
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
async function runTest(
|
|
37
|
-
file: string,
|
|
38
|
-
): Promise<{ file: string; passed: boolean; output: string }> {
|
|
39
|
-
return new Promise((resolve) => {
|
|
40
|
-
const testPath = path.join(process.cwd(), "test", file);
|
|
41
|
-
const proc = spawn("npx", ["tsx", testPath], {
|
|
42
|
-
stdio: ["inherit", "pipe", "pipe"],
|
|
43
|
-
shell: true,
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
let output = "";
|
|
47
|
-
|
|
48
|
-
proc.stdout?.on("data", (data) => {
|
|
49
|
-
output += data.toString();
|
|
50
|
-
process.stdout.write(data);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
proc.stderr?.on("data", (data) => {
|
|
54
|
-
output += data.toString();
|
|
55
|
-
process.stderr.write(data);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
proc.on("close", (code) => {
|
|
59
|
-
resolve({
|
|
60
|
-
file,
|
|
61
|
-
passed: code === 0,
|
|
62
|
-
output,
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async function main() {
|
|
69
|
-
console.log("=".repeat(60));
|
|
70
|
-
console.log("Running all tests");
|
|
71
|
-
console.log("=".repeat(60));
|
|
72
|
-
|
|
73
|
-
const results: { file: string; passed: boolean }[] = [];
|
|
74
|
-
|
|
75
|
-
for (const file of testFiles) {
|
|
76
|
-
console.log(`\n${"─".repeat(60)}`);
|
|
77
|
-
console.log(`Running: ${file}`);
|
|
78
|
-
console.log("─".repeat(60));
|
|
79
|
-
|
|
80
|
-
const result = await runTest(file);
|
|
81
|
-
results.push({ file: result.file, passed: result.passed });
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Summary
|
|
85
|
-
console.log("\n" + "=".repeat(60));
|
|
86
|
-
console.log("TEST SUMMARY");
|
|
87
|
-
console.log("=".repeat(60));
|
|
88
|
-
|
|
89
|
-
const passed = results.filter((r) => r.passed);
|
|
90
|
-
const failed = results.filter((r) => !r.passed);
|
|
91
|
-
|
|
92
|
-
for (const result of results) {
|
|
93
|
-
const status = result.passed ? "✓" : "✗";
|
|
94
|
-
console.log(` ${status} ${result.file}`);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
console.log("─".repeat(60));
|
|
98
|
-
console.log(`Total: ${results.length} test files`);
|
|
99
|
-
console.log(`Passed: ${passed.length}`);
|
|
100
|
-
console.log(`Failed: ${failed.length}`);
|
|
101
|
-
console.log("=".repeat(60));
|
|
102
|
-
|
|
103
|
-
process.exit(failed.length > 0 ? 1 : 0);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
main();
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test utilities and helpers
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// Simple test runner
|
|
6
|
-
let passed = 0;
|
|
7
|
-
let failed = 0;
|
|
8
|
-
let currentSuite = '';
|
|
9
|
-
|
|
10
|
-
export function suite(name: string) {
|
|
11
|
-
currentSuite = name;
|
|
12
|
-
console.log(`\n${name}`);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function test(name: string, fn: () => void | Promise<void>) {
|
|
16
|
-
const run = async () => {
|
|
17
|
-
try {
|
|
18
|
-
await fn();
|
|
19
|
-
passed++;
|
|
20
|
-
console.log(` ✓ ${name}`);
|
|
21
|
-
} catch (error) {
|
|
22
|
-
failed++;
|
|
23
|
-
console.log(` ✗ ${name}`);
|
|
24
|
-
console.log(` ${error instanceof Error ? error.message : error}`);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
return run();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function assertEqual<T>(actual: T, expected: T, message?: string) {
|
|
31
|
-
const actualStr = JSON.stringify(actual);
|
|
32
|
-
const expectedStr = JSON.stringify(expected);
|
|
33
|
-
if (actualStr !== expectedStr) {
|
|
34
|
-
throw new Error(message || `Expected ${expectedStr}, got ${actualStr}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function assertDeepEqual<T>(actual: T, expected: T, message?: string) {
|
|
39
|
-
assertEqual(actual, expected, message);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function assertTrue(condition: boolean, message?: string) {
|
|
43
|
-
if (!condition) {
|
|
44
|
-
throw new Error(message || 'Expected true, got false');
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function assertFalse(condition: boolean, message?: string) {
|
|
49
|
-
if (condition) {
|
|
50
|
-
throw new Error(message || 'Expected false, got true');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function assertNull(value: unknown, message?: string) {
|
|
55
|
-
if (value !== null) {
|
|
56
|
-
throw new Error(message || `Expected null, got ${JSON.stringify(value)}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function assertNotNull<T>(value: T | null | undefined, message?: string): asserts value is T {
|
|
61
|
-
if (value === null || value === undefined) {
|
|
62
|
-
throw new Error(message || 'Expected non-null value');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function assertThrows(fn: () => void, message?: string) {
|
|
67
|
-
let threw = false;
|
|
68
|
-
try {
|
|
69
|
-
fn();
|
|
70
|
-
} catch {
|
|
71
|
-
threw = true;
|
|
72
|
-
}
|
|
73
|
-
if (!threw) {
|
|
74
|
-
throw new Error(message || 'Expected function to throw');
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export async function assertThrowsAsync(fn: () => Promise<void>, message?: string) {
|
|
79
|
-
let threw = false;
|
|
80
|
-
try {
|
|
81
|
-
await fn();
|
|
82
|
-
} catch {
|
|
83
|
-
threw = true;
|
|
84
|
-
}
|
|
85
|
-
if (!threw) {
|
|
86
|
-
throw new Error(message || 'Expected async function to throw');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export function assertContains(str: string, substr: string, message?: string) {
|
|
91
|
-
if (!str.includes(substr)) {
|
|
92
|
-
throw new Error(message || `Expected "${str}" to contain "${substr}"`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export function assertArrayLength<T>(arr: T[], length: number, message?: string) {
|
|
97
|
-
if (arr.length !== length) {
|
|
98
|
-
throw new Error(message || `Expected array length ${length}, got ${arr.length}`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export function assertGreaterThan(actual: number, expected: number, message?: string) {
|
|
103
|
-
if (actual <= expected) {
|
|
104
|
-
throw new Error(message || `Expected ${actual} > ${expected}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function assertLessThan(actual: number, expected: number, message?: string) {
|
|
109
|
-
if (actual >= expected) {
|
|
110
|
-
throw new Error(message || `Expected ${actual} < ${expected}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export function getResults() {
|
|
115
|
-
return { passed, failed };
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export function printSummary() {
|
|
119
|
-
console.log(`\n${'='.repeat(40)}`);
|
|
120
|
-
console.log(`${passed} passed, ${failed} failed`);
|
|
121
|
-
console.log(`${'='.repeat(40)}\n`);
|
|
122
|
-
return failed;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export function resetCounters() {
|
|
126
|
-
passed = 0;
|
|
127
|
-
failed = 0;
|
|
128
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "vitest/config";
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
test: {
|
|
5
|
-
watch: false,
|
|
6
|
-
globals: true,
|
|
7
|
-
include: ["test/**/*.test.ts"],
|
|
8
|
-
exclude: ["**/node_modules/**", "**/references/**", "**/scraper/**", "test/all.test.ts"],
|
|
9
|
-
testTimeout: 60000,
|
|
10
|
-
hookTimeout: 30000,
|
|
11
|
-
reporters: ["verbose"],
|
|
12
|
-
passWithNoTests: false,
|
|
13
|
-
// Run tests sequentially to avoid state conflicts between test files
|
|
14
|
-
fileParallelism: false,
|
|
15
|
-
},
|
|
16
|
-
});
|