@ketecode/loom 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +616 -2
- package/agents/accessibility-reviewer/AGENT.md +70 -0
- package/agents/accessibility-reviewer/evals/triggers.json +15 -0
- package/agents/agent-evaluator/AGENT.md +74 -0
- package/agents/agent-evaluator/evals/triggers.json +15 -0
- package/agents/architect/AGENT.md +82 -0
- package/agents/architect/evals/triggers.json +17 -0
- package/agents/billing-reviewer/AGENT.md +68 -0
- package/agents/billing-reviewer/evals/triggers.json +16 -0
- package/agents/code-reviewer/AGENT.md +51 -0
- package/agents/code-reviewer/evals/behavior.json +60 -0
- package/agents/code-reviewer/evals/triggers.json +14 -0
- package/agents/code-simplifier/AGENT.md +74 -0
- package/agents/code-simplifier/evals/triggers.json +15 -0
- package/agents/cpp-build-resolver/AGENT.md +73 -0
- package/agents/cpp-build-resolver/evals/triggers.json +16 -0
- package/agents/cpp-reviewer/AGENT.md +59 -0
- package/agents/cpp-reviewer/evals/triggers.json +16 -0
- package/agents/csharp-build-resolver/AGENT.md +84 -0
- package/agents/csharp-build-resolver/evals/triggers.json +17 -0
- package/agents/csharp-reviewer/AGENT.md +88 -0
- package/agents/csharp-reviewer/evals/triggers.json +17 -0
- package/agents/dart-build-resolver/AGENT.md +80 -0
- package/agents/dart-build-resolver/evals/triggers.json +17 -0
- package/agents/dart-reviewer/AGENT.md +66 -0
- package/agents/dart-reviewer/evals/triggers.json +17 -0
- package/agents/database-reviewer/AGENT.md +72 -0
- package/agents/database-reviewer/evals/triggers.json +16 -0
- package/agents/django-reviewer/AGENT.md +61 -0
- package/agents/django-reviewer/evals/triggers.json +15 -0
- package/agents/doc-updater/AGENT.md +92 -0
- package/agents/doc-updater/evals/triggers.json +14 -0
- package/agents/e2e-runner/AGENT.md +88 -0
- package/agents/e2e-runner/evals/triggers.json +16 -0
- package/agents/fastapi-reviewer/AGENT.md +63 -0
- package/agents/fastapi-reviewer/evals/triggers.json +15 -0
- package/agents/flutter-reviewer/AGENT.md +70 -0
- package/agents/flutter-reviewer/evals/triggers.json +15 -0
- package/agents/fsharp-build-resolver/AGENT.md +81 -0
- package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
- package/agents/fsharp-reviewer/AGENT.md +77 -0
- package/agents/fsharp-reviewer/evals/triggers.json +15 -0
- package/agents/go-build-resolver/AGENT.md +85 -0
- package/agents/go-build-resolver/evals/triggers.json +16 -0
- package/agents/go-reviewer/AGENT.md +66 -0
- package/agents/go-reviewer/evals/triggers.json +16 -0
- package/agents/healthcare-reviewer/AGENT.md +65 -0
- package/agents/healthcare-reviewer/evals/triggers.json +16 -0
- package/agents/i18n-reviewer/AGENT.md +64 -0
- package/agents/i18n-reviewer/evals/triggers.json +16 -0
- package/agents/inbox-triager/AGENT.md +98 -0
- package/agents/inbox-triager/evals/triggers.json +16 -0
- package/agents/infra-reviewer/AGENT.md +93 -0
- package/agents/infra-reviewer/evals/triggers.json +15 -0
- package/agents/java-build-resolver/AGENT.md +82 -0
- package/agents/java-build-resolver/evals/triggers.json +16 -0
- package/agents/java-reviewer/AGENT.md +64 -0
- package/agents/java-reviewer/evals/triggers.json +16 -0
- package/agents/kotlin-build-resolver/AGENT.md +89 -0
- package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
- package/agents/kotlin-reviewer/AGENT.md +75 -0
- package/agents/kotlin-reviewer/evals/triggers.json +16 -0
- package/agents/mle-reviewer/AGENT.md +68 -0
- package/agents/mle-reviewer/evals/triggers.json +16 -0
- package/agents/network-config-reviewer/AGENT.md +68 -0
- package/agents/network-config-reviewer/evals/triggers.json +17 -0
- package/agents/payments-reviewer/AGENT.md +64 -0
- package/agents/payments-reviewer/evals/triggers.json +16 -0
- package/agents/performance-optimizer/AGENT.md +86 -0
- package/agents/performance-optimizer/evals/triggers.json +16 -0
- package/agents/perl-build-resolver/AGENT.md +84 -0
- package/agents/perl-build-resolver/evals/triggers.json +15 -0
- package/agents/perl-reviewer/AGENT.md +77 -0
- package/agents/perl-reviewer/evals/triggers.json +15 -0
- package/agents/php-build-resolver/AGENT.md +88 -0
- package/agents/php-build-resolver/evals/triggers.json +16 -0
- package/agents/php-reviewer/AGENT.md +61 -0
- package/agents/php-reviewer/evals/triggers.json +15 -0
- package/agents/planner/AGENT.md +75 -0
- package/agents/planner/evals/triggers.json +17 -0
- package/agents/pr-test-analyzer/AGENT.md +82 -0
- package/agents/pr-test-analyzer/evals/triggers.json +16 -0
- package/agents/python-build-resolver/AGENT.md +87 -0
- package/agents/python-build-resolver/evals/triggers.json +16 -0
- package/agents/python-reviewer/AGENT.md +63 -0
- package/agents/python-reviewer/evals/triggers.json +15 -0
- package/agents/rag-reviewer/AGENT.md +71 -0
- package/agents/rag-reviewer/evals/triggers.json +16 -0
- package/agents/react-reviewer/AGENT.md +70 -0
- package/agents/react-reviewer/evals/triggers.json +16 -0
- package/agents/refactor-cleaner/AGENT.md +82 -0
- package/agents/refactor-cleaner/evals/triggers.json +16 -0
- package/agents/ruby-build-resolver/AGENT.md +93 -0
- package/agents/ruby-build-resolver/evals/triggers.json +16 -0
- package/agents/ruby-reviewer/AGENT.md +62 -0
- package/agents/ruby-reviewer/evals/triggers.json +16 -0
- package/agents/rust-build-resolver/AGENT.md +98 -0
- package/agents/rust-build-resolver/evals/triggers.json +16 -0
- package/agents/rust-reviewer/AGENT.md +78 -0
- package/agents/rust-reviewer/evals/triggers.json +15 -0
- package/agents/security-reviewer/AGENT.md +84 -0
- package/agents/security-reviewer/evals/triggers.json +16 -0
- package/agents/silent-failure-hunter/AGENT.md +66 -0
- package/agents/silent-failure-hunter/evals/triggers.json +16 -0
- package/agents/solidity-reviewer/AGENT.md +70 -0
- package/agents/solidity-reviewer/evals/triggers.json +16 -0
- package/agents/spec-reviewer/AGENT.md +95 -0
- package/agents/spec-reviewer/evals/behavior.json +57 -0
- package/agents/spec-reviewer/evals/triggers.json +16 -0
- package/agents/swift-build-resolver/AGENT.md +85 -0
- package/agents/swift-build-resolver/evals/triggers.json +15 -0
- package/agents/swift-reviewer/AGENT.md +75 -0
- package/agents/swift-reviewer/evals/triggers.json +15 -0
- package/agents/task-implementer/AGENT.md +89 -0
- package/agents/task-implementer/evals/behavior.json +47 -0
- package/agents/task-implementer/evals/triggers.json +16 -0
- package/agents/typescript-build-resolver/AGENT.md +76 -0
- package/agents/typescript-build-resolver/evals/triggers.json +15 -0
- package/agents/typescript-reviewer/AGENT.md +76 -0
- package/agents/typescript-reviewer/evals/triggers.json +15 -0
- package/agents/vue-reviewer/AGENT.md +75 -0
- package/agents/vue-reviewer/evals/triggers.json +15 -0
- package/bin/kete-loom.js +723 -0
- package/commands/aside.md +19 -0
- package/commands/brainstorm.md +25 -0
- package/commands/build-fix.md +26 -0
- package/commands/campaign.md +19 -0
- package/commands/changelog.md +36 -0
- package/commands/checkpoint.md +26 -0
- package/commands/codemap.md +25 -0
- package/commands/commit.md +26 -0
- package/commands/debug.md +27 -0
- package/commands/deps-audit.md +32 -0
- package/commands/dual-review.md +34 -0
- package/commands/epic-decompose.md +21 -0
- package/commands/explain.md +37 -0
- package/commands/feature-dev.md +23 -0
- package/commands/finish-branch.md +26 -0
- package/commands/fix-bug.md +38 -0
- package/commands/hookify.md +23 -0
- package/commands/i18n-check.md +39 -0
- package/commands/issue-sync.md +22 -0
- package/commands/jira.md +19 -0
- package/commands/learn.md +23 -0
- package/commands/loom.md +21 -0
- package/commands/loop.md +20 -0
- package/commands/model-route.md +27 -0
- package/commands/onboard.md +35 -0
- package/commands/orchestrate.md +21 -0
- package/commands/plan-feature.md +36 -0
- package/commands/postmortem.md +42 -0
- package/commands/pr-describe.md +39 -0
- package/commands/pr.md +22 -0
- package/commands/prd.md +41 -0
- package/commands/production-readiness.md +45 -0
- package/commands/project-init.md +21 -0
- package/commands/refactor-clean.md +24 -0
- package/commands/resume-session.md +22 -0
- package/commands/review.md +35 -0
- package/commands/save-session.md +37 -0
- package/commands/security-scan.md +32 -0
- package/commands/sessions.md +21 -0
- package/commands/skill-create.md +21 -0
- package/commands/tdd.md +36 -0
- package/commands/test-coverage.md +24 -0
- package/commands/threat-model.md +36 -0
- package/commands/update-docs.md +25 -0
- package/commands/usage-report.md +43 -0
- package/commands/verify.md +21 -0
- package/hooks/block-dangerous-commands/HOOK.md +30 -0
- package/hooks/block-dangerous-commands/cases.json +50 -0
- package/hooks/block-dangerous-commands/hook.js +75 -0
- package/hooks/block-foreground-servers/HOOK.md +34 -0
- package/hooks/block-foreground-servers/cases.json +31 -0
- package/hooks/block-foreground-servers/hook.js +41 -0
- package/hooks/block-no-verify/HOOK.md +25 -0
- package/hooks/block-no-verify/cases.json +30 -0
- package/hooks/block-no-verify/hook.js +43 -0
- package/hooks/capture-lessons/HOOK.md +24 -0
- package/hooks/capture-lessons/hook.js +48 -0
- package/hooks/format-on-edit/HOOK.md +24 -0
- package/hooks/format-on-edit/hook.js +89 -0
- package/hooks/guard-secrets/HOOK.md +19 -0
- package/hooks/guard-secrets/cases.json +110 -0
- package/hooks/guard-secrets/hook.js +44 -0
- package/hooks/load-session-context/HOOK.md +20 -0
- package/hooks/load-session-context/hook.js +56 -0
- package/hooks/notify-on-stop/HOOK.md +25 -0
- package/hooks/notify-on-stop/hook.js +27 -0
- package/hooks/protect-files/HOOK.md +24 -0
- package/hooks/protect-files/cases.json +27 -0
- package/hooks/protect-files/hook.js +39 -0
- package/hooks/protect-lint-config/HOOK.md +29 -0
- package/hooks/protect-lint-config/cases.json +18 -0
- package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
- package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
- package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
- package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
- package/hooks/protect-lint-config/fixtures/biome.json +1 -0
- package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
- package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
- package/hooks/protect-lint-config/hook.js +25 -0
- package/hooks/read-before-edit/HOOK.md +26 -0
- package/hooks/read-before-edit/cases.json +15 -0
- package/hooks/read-before-edit/hook.js +50 -0
- package/hooks/run.js +148 -0
- package/hooks/verify-before-stop/HOOK.md +32 -0
- package/hooks/verify-before-stop/hook.js +70 -0
- package/mcp/atlassian.json +11 -0
- package/mcp/chrome-devtools.json +18 -0
- package/mcp/clickhouse.json +11 -0
- package/mcp/cloudflare.json +11 -0
- package/mcp/context7.json +11 -0
- package/mcp/exa.json +11 -0
- package/mcp/fetch.json +17 -0
- package/mcp/figma.json +11 -0
- package/mcp/firecrawl.json +11 -0
- package/mcp/git.json +17 -0
- package/mcp/github.json +11 -0
- package/mcp/linear.json +11 -0
- package/mcp/memory.json +18 -0
- package/mcp/notion.json +11 -0
- package/mcp/playwright.json +18 -0
- package/mcp/sentry.json +11 -0
- package/mcp/stripe.json +11 -0
- package/mcp/supabase.json +11 -0
- package/mcp/time.json +17 -0
- package/mcp/vercel.json +11 -0
- package/package.json +61 -4
- package/profiles.json +214 -0
- package/rules/common.md +21 -0
- package/rules/cpp.md +29 -0
- package/rules/csharp.md +25 -0
- package/rules/dart.md +29 -0
- package/rules/fsharp.md +28 -0
- package/rules/git.md +26 -0
- package/rules/go.md +29 -0
- package/rules/java.md +29 -0
- package/rules/kotlin.md +27 -0
- package/rules/perl.md +26 -0
- package/rules/php.md +28 -0
- package/rules/python.md +30 -0
- package/rules/ruby.md +27 -0
- package/rules/rust.md +26 -0
- package/rules/security.md +29 -0
- package/rules/swift.md +28 -0
- package/rules/testing.md +25 -0
- package/rules/typescript.md +29 -0
- package/rules/use-skills.md +23 -0
- package/schemas/skill-frontmatter.schema.json +52 -0
- package/scripts/lib/audit.js +96 -0
- package/scripts/lib/behavior.js +52 -0
- package/scripts/lib/frontmatter.js +65 -0
- package/scripts/lib/hooks-install.js +294 -0
- package/scripts/lib/i18n.js +51 -0
- package/scripts/lib/inventory.js +85 -0
- package/scripts/lib/lint.js +180 -0
- package/scripts/lib/mcp-install.js +288 -0
- package/scripts/lib/profiles.js +128 -0
- package/scripts/lib/render.js +92 -0
- package/scripts/lib/rules-install.js +118 -0
- package/scripts/lib/skills.js +87 -0
- package/scripts/lib/targets.js +123 -0
- package/skills/accounting-api-integration/SKILL.md +81 -0
- package/skills/accounting-api-integration/evals/triggers.json +17 -0
- package/skills/accounting-api-integration/references/quickbooks.md +48 -0
- package/skills/accounting-api-integration/references/xero.md +45 -0
- package/skills/agent-failure-debugging/SKILL.md +92 -0
- package/skills/agent-failure-debugging/evals/triggers.json +16 -0
- package/skills/agent-harness-design/SKILL.md +125 -0
- package/skills/agent-harness-design/evals/triggers.json +21 -0
- package/skills/agent-outbound-messaging/SKILL.md +92 -0
- package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
- package/skills/agent-security/SKILL.md +117 -0
- package/skills/agent-security/evals/triggers.json +16 -0
- package/skills/agent-security/references/host-configs.md +37 -0
- package/skills/ai-media-generation/SKILL.md +89 -0
- package/skills/ai-media-generation/evals/triggers.json +16 -0
- package/skills/ai-media-generation/references/job-pipeline.md +76 -0
- package/skills/angular-patterns/SKILL.md +122 -0
- package/skills/angular-patterns/evals/triggers.json +16 -0
- package/skills/api-client-integration/SKILL.md +86 -0
- package/skills/api-client-integration/evals/triggers.json +16 -0
- package/skills/api-client-integration/references/resilience.md +57 -0
- package/skills/api-design/SKILL.md +96 -0
- package/skills/api-design/evals/triggers.json +18 -0
- package/skills/api-design/references/conventions.md +133 -0
- package/skills/architecture-decision-records/SKILL.md +98 -0
- package/skills/architecture-decision-records/evals/triggers.json +17 -0
- package/skills/article-writing/SKILL.md +108 -0
- package/skills/article-writing/evals/triggers.json +16 -0
- package/skills/aspnet-core-patterns/SKILL.md +149 -0
- package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
- package/skills/auth-patterns/SKILL.md +104 -0
- package/skills/auth-patterns/evals/triggers.json +17 -0
- package/skills/auth-patterns/references/oauth-oidc.md +64 -0
- package/skills/autonomous-loops/SKILL.md +99 -0
- package/skills/autonomous-loops/evals/triggers.json +14 -0
- package/skills/aws-patterns/SKILL.md +91 -0
- package/skills/aws-patterns/evals/triggers.json +16 -0
- package/skills/azure-patterns/SKILL.md +86 -0
- package/skills/azure-patterns/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/SKILL.md +88 -0
- package/skills/benchmark-methodology/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
- package/skills/bgp-diagnostics/SKILL.md +84 -0
- package/skills/bgp-diagnostics/evals/triggers.json +18 -0
- package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
- package/skills/bioinformatics-workflows/SKILL.md +108 -0
- package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
- package/skills/bioinformatics-workflows/references/commands.md +71 -0
- package/skills/bioinformatics-workflows/references/formats.md +24 -0
- package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
- package/skills/blender-automation/SKILL.md +100 -0
- package/skills/blender-automation/evals/triggers.json +16 -0
- package/skills/blender-automation/references/batch-and-render.md +77 -0
- package/skills/blender-automation/references/bpy-inspection.md +91 -0
- package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
- package/skills/brand-strategy/SKILL.md +83 -0
- package/skills/brand-strategy/evals/triggers.json +16 -0
- package/skills/brand-voice/SKILL.md +112 -0
- package/skills/brand-voice/evals/triggers.json +16 -0
- package/skills/browser-qa/SKILL.md +99 -0
- package/skills/browser-qa/evals/triggers.json +16 -0
- package/skills/bun-runtime/SKILL.md +93 -0
- package/skills/bun-runtime/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/SKILL.md +89 -0
- package/skills/change-impact-analysis/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/references/graph-commands.md +28 -0
- package/skills/cisco-ios-config/SKILL.md +101 -0
- package/skills/cisco-ios-config/evals/triggers.json +18 -0
- package/skills/cisco-ios-config/references/verification.md +63 -0
- package/skills/clickhouse-patterns/SKILL.md +101 -0
- package/skills/clickhouse-patterns/evals/triggers.json +18 -0
- package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
- package/skills/clinical-decision-support/SKILL.md +90 -0
- package/skills/clinical-decision-support/evals/triggers.json +16 -0
- package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
- package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
- package/skills/code-tour/SKILL.md +97 -0
- package/skills/code-tour/evals/triggers.json +14 -0
- package/skills/codebase-onboarding/SKILL.md +112 -0
- package/skills/codebase-onboarding/evals/triggers.json +14 -0
- package/skills/cold-outreach-sequences/SKILL.md +90 -0
- package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
- package/skills/content-repurposing/SKILL.md +82 -0
- package/skills/content-repurposing/evals/triggers.json +16 -0
- package/skills/context-budget/SKILL.md +84 -0
- package/skills/context-budget/evals/triggers.json +14 -0
- package/skills/contract-drafting/SKILL.md +96 -0
- package/skills/contract-drafting/evals/triggers.json +16 -0
- package/skills/contract-drafting/references/term-sheets.md +68 -0
- package/skills/contract-first-development/SKILL.md +86 -0
- package/skills/contract-first-development/evals/triggers.json +16 -0
- package/skills/contract-first-development/references/tooling.md +46 -0
- package/skills/conventional-commits/SKILL.md +144 -0
- package/skills/conventional-commits/evals/triggers.json +16 -0
- package/skills/cpp-patterns/SKILL.md +129 -0
- package/skills/cpp-patterns/evals/triggers.json +16 -0
- package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
- package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
- package/skills/cpp-testing/SKILL.md +131 -0
- package/skills/cpp-testing/evals/triggers.json +16 -0
- package/skills/csharp-patterns/SKILL.md +110 -0
- package/skills/csharp-patterns/evals/triggers.json +17 -0
- package/skills/csharp-patterns/references/analyzers.md +59 -0
- package/skills/csharp-testing/SKILL.md +85 -0
- package/skills/csharp-testing/evals/triggers.json +17 -0
- package/skills/csharp-testing/references/integration-tests.md +77 -0
- package/skills/css-architecture/SKILL.md +143 -0
- package/skills/css-architecture/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/SKILL.md +95 -0
- package/skills/customs-trade-compliance/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
- package/skills/dart-patterns/SKILL.md +157 -0
- package/skills/dart-patterns/evals/triggers.json +18 -0
- package/skills/dart-testing/SKILL.md +164 -0
- package/skills/dart-testing/evals/triggers.json +18 -0
- package/skills/data-analysis-notebooks/SKILL.md +113 -0
- package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
- package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
- package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
- package/skills/data-pipelines/SKILL.md +90 -0
- package/skills/data-pipelines/evals/triggers.json +16 -0
- package/skills/data-pipelines/references/orchestrators.md +64 -0
- package/skills/database-migrations/SKILL.md +102 -0
- package/skills/database-migrations/evals/triggers.json +16 -0
- package/skills/database-migrations/references/recipes.md +98 -0
- package/skills/database-migrations/references/tools.md +21 -0
- package/skills/dbt-patterns/SKILL.md +96 -0
- package/skills/dbt-patterns/evals/triggers.json +16 -0
- package/skills/dbt-patterns/references/yaml-examples.md +114 -0
- package/skills/decision-council/SKILL.md +98 -0
- package/skills/decision-council/evals/triggers.json +16 -0
- package/skills/deep-research/SKILL.md +107 -0
- package/skills/deep-research/evals/triggers.json +14 -0
- package/skills/dependency-audit/SKILL.md +103 -0
- package/skills/dependency-audit/evals/triggers.json +16 -0
- package/skills/dependency-audit/references/tools.md +124 -0
- package/skills/deployment-strategies/SKILL.md +108 -0
- package/skills/deployment-strategies/evals/triggers.json +16 -0
- package/skills/design-brainstorming/SKILL.md +132 -0
- package/skills/design-brainstorming/evals/behavior.json +55 -0
- package/skills/design-brainstorming/evals/triggers.json +16 -0
- package/skills/design-brainstorming/references/visual-mockups.md +34 -0
- package/skills/desktop-app-testing/SKILL.md +104 -0
- package/skills/desktop-app-testing/evals/triggers.json +16 -0
- package/skills/desktop-app-testing/references/drivers.md +81 -0
- package/skills/django-patterns/SKILL.md +123 -0
- package/skills/django-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/SKILL.md +132 -0
- package/skills/docker-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/references/dockerfiles.md +105 -0
- package/skills/document-processing/SKILL.md +100 -0
- package/skills/document-processing/evals/triggers.json +17 -0
- package/skills/document-processing/references/extraction-and-ocr.md +71 -0
- package/skills/document-processing/references/forms-and-conversion.md +69 -0
- package/skills/document-processing/references/redaction.md +61 -0
- package/skills/e2e-testing-playwright/SKILL.md +94 -0
- package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
- package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
- package/skills/ef-core-patterns/SKILL.md +117 -0
- package/skills/ef-core-patterns/evals/triggers.json +16 -0
- package/skills/email-deliverability/SKILL.md +99 -0
- package/skills/email-deliverability/evals/triggers.json +17 -0
- package/skills/email-deliverability/references/dns-records.md +85 -0
- package/skills/energy-procurement/SKILL.md +106 -0
- package/skills/energy-procurement/evals/triggers.json +16 -0
- package/skills/error-handling-patterns/SKILL.md +112 -0
- package/skills/error-handling-patterns/evals/triggers.json +18 -0
- package/skills/error-handling-patterns/references/language-idioms.md +49 -0
- package/skills/estimation-and-scoping/SKILL.md +97 -0
- package/skills/estimation-and-scoping/evals/triggers.json +14 -0
- package/skills/evm-dapp-integration/SKILL.md +73 -0
- package/skills/evm-dapp-integration/evals/triggers.json +16 -0
- package/skills/fastapi-patterns/SKILL.md +127 -0
- package/skills/fastapi-patterns/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/SKILL.md +94 -0
- package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
- package/skills/fhir-integration/SKILL.md +81 -0
- package/skills/fhir-integration/evals/triggers.json +16 -0
- package/skills/fhir-integration/references/search-and-bundles.md +73 -0
- package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
- package/skills/finishing-a-branch/SKILL.md +127 -0
- package/skills/finishing-a-branch/evals/behavior.json +49 -0
- package/skills/finishing-a-branch/evals/triggers.json +16 -0
- package/skills/flask-patterns/SKILL.md +132 -0
- package/skills/flask-patterns/evals/triggers.json +16 -0
- package/skills/flutter-patterns/SKILL.md +99 -0
- package/skills/flutter-patterns/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/SKILL.md +75 -0
- package/skills/flutterwave-integration/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/references/api.md +73 -0
- package/skills/flutterwave-integration/references/webhooks.md +49 -0
- package/skills/freight-carrier-management/SKILL.md +107 -0
- package/skills/freight-carrier-management/evals/triggers.json +16 -0
- package/skills/fsharp-patterns/SKILL.md +133 -0
- package/skills/fsharp-patterns/evals/triggers.json +16 -0
- package/skills/fsharp-testing/SKILL.md +136 -0
- package/skills/fsharp-testing/evals/triggers.json +16 -0
- package/skills/gcp-patterns/SKILL.md +86 -0
- package/skills/gcp-patterns/evals/triggers.json +16 -0
- package/skills/git-workflow/SKILL.md +114 -0
- package/skills/git-workflow/evals/triggers.json +16 -0
- package/skills/git-worktrees/SKILL.md +130 -0
- package/skills/git-worktrees/evals/behavior.json +56 -0
- package/skills/git-worktrees/evals/triggers.json +16 -0
- package/skills/github-actions-ci/SKILL.md +117 -0
- package/skills/github-actions-ci/evals/triggers.json +16 -0
- package/skills/github-api-automation/SKILL.md +101 -0
- package/skills/github-api-automation/evals/triggers.json +17 -0
- package/skills/go-patterns/SKILL.md +118 -0
- package/skills/go-patterns/evals/triggers.json +17 -0
- package/skills/go-patterns/references/concurrency.md +162 -0
- package/skills/go-testing/SKILL.md +154 -0
- package/skills/go-testing/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/SKILL.md +65 -0
- package/skills/google-workspace-integration/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/references/api.md +121 -0
- package/skills/harmonyos-arkts/SKILL.md +117 -0
- package/skills/harmonyos-arkts/evals/triggers.json +16 -0
- package/skills/harmonyos-arkts/references/build-errors.md +42 -0
- package/skills/hexagonal-architecture/SKILL.md +89 -0
- package/skills/hexagonal-architecture/evals/triggers.json +17 -0
- package/skills/hipaa-compliance/SKILL.md +91 -0
- package/skills/hipaa-compliance/evals/triggers.json +18 -0
- package/skills/hipaa-compliance/references/safeguards.md +68 -0
- package/skills/hl7v2-integration/SKILL.md +69 -0
- package/skills/hl7v2-integration/evals/triggers.json +16 -0
- package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
- package/skills/homelab-network-setup/SKILL.md +125 -0
- package/skills/homelab-network-setup/evals/triggers.json +18 -0
- package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
- package/skills/homelab-network-setup/references/wireguard.md +72 -0
- package/skills/hubtel-integration/SKILL.md +77 -0
- package/skills/hubtel-integration/evals/triggers.json +16 -0
- package/skills/hubtel-integration/references/api.md +92 -0
- package/skills/i18n-localization/SKILL.md +114 -0
- package/skills/i18n-localization/evals/triggers.json +16 -0
- package/skills/i18n-localization/references/libraries.md +52 -0
- package/skills/implementation-plans/SKILL.md +117 -0
- package/skills/implementation-plans/evals/behavior.json +54 -0
- package/skills/implementation-plans/evals/triggers.json +16 -0
- package/skills/incident-postmortem/SKILL.md +118 -0
- package/skills/incident-postmortem/evals/triggers.json +14 -0
- package/skills/inventory-demand-planning/SKILL.md +89 -0
- package/skills/inventory-demand-planning/evals/triggers.json +16 -0
- package/skills/inventory-demand-planning/references/formulas.md +62 -0
- package/skills/investor-materials/SKILL.md +127 -0
- package/skills/investor-materials/evals/triggers.json +16 -0
- package/skills/investor-materials/references/templates.md +74 -0
- package/skills/invoicing-and-tax/SKILL.md +84 -0
- package/skills/invoicing-and-tax/evals/triggers.json +17 -0
- package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
- package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
- package/skills/invoicing-and-tax/references/rounding.md +26 -0
- package/skills/ios-platform-features/SKILL.md +99 -0
- package/skills/ios-platform-features/evals/triggers.json +16 -0
- package/skills/ios-platform-features/references/foundation-models.md +90 -0
- package/skills/java-patterns/SKILL.md +141 -0
- package/skills/java-patterns/evals/triggers.json +17 -0
- package/skills/java-testing/SKILL.md +142 -0
- package/skills/java-testing/evals/triggers.json +16 -0
- package/skills/jetpack-compose-patterns/SKILL.md +88 -0
- package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
- package/skills/jira-integration/SKILL.md +92 -0
- package/skills/jira-integration/evals/triggers.json +17 -0
- package/skills/jpa-hibernate/SKILL.md +92 -0
- package/skills/jpa-hibernate/evals/triggers.json +18 -0
- package/skills/jpa-hibernate/references/mapping.md +99 -0
- package/skills/jvm-sql-mappers/SKILL.md +98 -0
- package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
- package/skills/jvm-sql-mappers/references/examples.md +129 -0
- package/skills/kotlin-multiplatform/SKILL.md +97 -0
- package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
- package/skills/kotlin-patterns/SKILL.md +128 -0
- package/skills/kotlin-patterns/evals/triggers.json +16 -0
- package/skills/kotlin-testing/SKILL.md +117 -0
- package/skills/kotlin-testing/evals/triggers.json +16 -0
- package/skills/ktor-patterns/SKILL.md +135 -0
- package/skills/ktor-patterns/evals/triggers.json +18 -0
- package/skills/kubernetes-patterns/SKILL.md +106 -0
- package/skills/kubernetes-patterns/evals/triggers.json +16 -0
- package/skills/kubernetes-patterns/references/manifests.md +115 -0
- package/skills/laravel-patterns/SKILL.md +136 -0
- package/skills/laravel-patterns/evals/triggers.json +16 -0
- package/skills/linear-integration/SKILL.md +98 -0
- package/skills/linear-integration/evals/triggers.json +17 -0
- package/skills/literature-review/SKILL.md +109 -0
- package/skills/literature-review/evals/triggers.json +16 -0
- package/skills/literature-review/references/appraisal.md +41 -0
- package/skills/literature-review/references/search-sources.md +39 -0
- package/skills/llm-app-patterns/SKILL.md +97 -0
- package/skills/llm-app-patterns/evals/triggers.json +17 -0
- package/skills/llm-evals/SKILL.md +98 -0
- package/skills/llm-evals/evals/triggers.json +16 -0
- package/skills/llm-evals/references/graders.md +66 -0
- package/skills/logistics-exception-management/SKILL.md +90 -0
- package/skills/logistics-exception-management/evals/triggers.json +16 -0
- package/skills/manim-animations/SKILL.md +106 -0
- package/skills/manim-animations/evals/triggers.json +16 -0
- package/skills/market-research/SKILL.md +117 -0
- package/skills/market-research/evals/triggers.json +16 -0
- package/skills/marketing-campaign/SKILL.md +111 -0
- package/skills/marketing-campaign/evals/triggers.json +16 -0
- package/skills/mcp-server-patterns/SKILL.md +127 -0
- package/skills/mcp-server-patterns/evals/triggers.json +18 -0
- package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
- package/skills/metrics-dashboards/SKILL.md +113 -0
- package/skills/metrics-dashboards/evals/triggers.json +16 -0
- package/skills/ml-experiment-workflow/SKILL.md +125 -0
- package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
- package/skills/mobile-accessibility/SKILL.md +94 -0
- package/skills/mobile-accessibility/evals/triggers.json +16 -0
- package/skills/mongodb-patterns/SKILL.md +115 -0
- package/skills/mongodb-patterns/evals/triggers.json +18 -0
- package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
- package/skills/mpesa-daraja-integration/SKILL.md +70 -0
- package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
- package/skills/mpesa-daraja-integration/references/api.md +103 -0
- package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
- package/skills/mtn-momo-integration/SKILL.md +66 -0
- package/skills/mtn-momo-integration/evals/triggers.json +16 -0
- package/skills/mtn-momo-integration/references/api.md +153 -0
- package/skills/mtn-momo-integration/references/callbacks.md +92 -0
- package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
- package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
- package/skills/mysql-patterns/SKILL.md +96 -0
- package/skills/mysql-patterns/evals/triggers.json +16 -0
- package/skills/mysql-patterns/references/explain.md +34 -0
- package/skills/mysql-patterns/references/online-ddl.md +41 -0
- package/skills/nestjs-patterns/SKILL.md +114 -0
- package/skills/nestjs-patterns/evals/triggers.json +16 -0
- package/skills/nestjs-patterns/references/testing.md +68 -0
- package/skills/network-automation/SKILL.md +107 -0
- package/skills/network-automation/evals/triggers.json +18 -0
- package/skills/network-automation/references/tool-snippets.md +153 -0
- package/skills/network-design/SKILL.md +98 -0
- package/skills/network-design/evals/triggers.json +16 -0
- package/skills/network-troubleshooting/SKILL.md +152 -0
- package/skills/network-troubleshooting/evals/triggers.json +18 -0
- package/skills/network-troubleshooting/references/commands.md +33 -0
- package/skills/nextjs-patterns/SKILL.md +150 -0
- package/skills/nextjs-patterns/evals/triggers.json +18 -0
- package/skills/nextjs-patterns/references/caching.md +87 -0
- package/skills/node-backend-patterns/SKILL.md +103 -0
- package/skills/node-backend-patterns/evals/triggers.json +16 -0
- package/skills/node-backend-patterns/references/templates.md +122 -0
- package/skills/nuxt-patterns/SKILL.md +103 -0
- package/skills/nuxt-patterns/evals/triggers.json +16 -0
- package/skills/observability/SKILL.md +125 -0
- package/skills/observability/evals/triggers.json +17 -0
- package/skills/observability/references/otel-setup.md +87 -0
- package/skills/observability/references/slo-alerts.md +70 -0
- package/skills/open-source-release/SKILL.md +107 -0
- package/skills/open-source-release/evals/triggers.json +15 -0
- package/skills/open-source-release/references/history-scrub.md +65 -0
- package/skills/parallel-agent-orchestration/SKILL.md +106 -0
- package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
- package/skills/patent-research/SKILL.md +94 -0
- package/skills/patent-research/evals/triggers.json +16 -0
- package/skills/patent-research/references/databases-and-queries.md +52 -0
- package/skills/paystack-integration/SKILL.md +59 -0
- package/skills/paystack-integration/evals/triggers.json +14 -0
- package/skills/paystack-integration/references/api.md +73 -0
- package/skills/paystack-integration/references/mobile-money.md +50 -0
- package/skills/paystack-integration/references/webhooks.md +80 -0
- package/skills/pci-dss-scope/SKILL.md +103 -0
- package/skills/pci-dss-scope/evals/triggers.json +18 -0
- package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
- package/skills/perl-patterns/SKILL.md +135 -0
- package/skills/perl-patterns/evals/triggers.json +18 -0
- package/skills/perl-testing/SKILL.md +126 -0
- package/skills/perl-testing/evals/triggers.json +17 -0
- package/skills/php-patterns/SKILL.md +116 -0
- package/skills/php-patterns/evals/triggers.json +16 -0
- package/skills/php-testing/SKILL.md +123 -0
- package/skills/php-testing/evals/triggers.json +16 -0
- package/skills/postgres-patterns/SKILL.md +103 -0
- package/skills/postgres-patterns/evals/triggers.json +17 -0
- package/skills/postgres-patterns/references/explain.md +59 -0
- package/skills/postgres-patterns/references/locks.md +53 -0
- package/skills/prd-writing/SKILL.md +124 -0
- package/skills/prd-writing/evals/triggers.json +15 -0
- package/skills/prisma-patterns/SKILL.md +83 -0
- package/skills/prisma-patterns/evals/triggers.json +18 -0
- package/skills/prisma-patterns/references/prisma-8.md +46 -0
- package/skills/prisma-patterns/references/workflow.md +50 -0
- package/skills/privacy-compliance/SKILL.md +121 -0
- package/skills/privacy-compliance/evals/triggers.json +18 -0
- package/skills/privacy-compliance/references/jurisdictions.md +51 -0
- package/skills/production-scheduling/SKILL.md +98 -0
- package/skills/production-scheduling/evals/triggers.json +16 -0
- package/skills/prompt-engineering/SKILL.md +92 -0
- package/skills/prompt-engineering/evals/triggers.json +16 -0
- package/skills/prospect-research/SKILL.md +87 -0
- package/skills/prospect-research/evals/triggers.json +16 -0
- package/skills/python-app-distribution/SKILL.md +107 -0
- package/skills/python-app-distribution/evals/triggers.json +16 -0
- package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
- package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
- package/skills/python-patterns/SKILL.md +107 -0
- package/skills/python-patterns/evals/triggers.json +16 -0
- package/skills/python-patterns/references/tooling.md +101 -0
- package/skills/python-testing/SKILL.md +126 -0
- package/skills/python-testing/evals/triggers.json +16 -0
- package/skills/python-testing/references/mocking.md +71 -0
- package/skills/pytorch-patterns/SKILL.md +139 -0
- package/skills/pytorch-patterns/evals/triggers.json +16 -0
- package/skills/pytorch-patterns/references/debugging.md +39 -0
- package/skills/quality-nonconformance/SKILL.md +107 -0
- package/skills/quality-nonconformance/evals/triggers.json +16 -0
- package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
- package/skills/quarkus-patterns/SKILL.md +93 -0
- package/skills/quarkus-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/SKILL.md +117 -0
- package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
- package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
- package/skills/rails-patterns/SKILL.md +132 -0
- package/skills/rails-patterns/evals/triggers.json +16 -0
- package/skills/react-native-patterns/SKILL.md +101 -0
- package/skills/react-native-patterns/evals/triggers.json +16 -0
- package/skills/react-patterns/SKILL.md +140 -0
- package/skills/react-patterns/evals/triggers.json +18 -0
- package/skills/react-performance/SKILL.md +107 -0
- package/skills/react-performance/evals/triggers.json +18 -0
- package/skills/react-testing/SKILL.md +121 -0
- package/skills/react-testing/evals/triggers.json +18 -0
- package/skills/react-testing/references/msw.md +64 -0
- package/skills/react-testing/references/queries.md +41 -0
- package/skills/react-testing/references/setup.md +74 -0
- package/skills/recommender-systems/SKILL.md +119 -0
- package/skills/recommender-systems/evals/triggers.json +16 -0
- package/skills/recommender-systems/references/evaluation.md +39 -0
- package/skills/redis-patterns/SKILL.md +109 -0
- package/skills/redis-patterns/evals/triggers.json +18 -0
- package/skills/redis-patterns/references/operations.md +61 -0
- package/skills/refactoring-safely/SKILL.md +107 -0
- package/skills/refactoring-safely/evals/behavior.json +57 -0
- package/skills/refactoring-safely/evals/triggers.json +17 -0
- package/skills/release-management/SKILL.md +141 -0
- package/skills/release-management/evals/triggers.json +16 -0
- package/skills/remotion-video/SKILL.md +91 -0
- package/skills/remotion-video/evals/triggers.json +16 -0
- package/skills/remotion-video/references/lambda.md +66 -0
- package/skills/reproducible-dev-environments/SKILL.md +132 -0
- package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
- package/skills/responding-to-code-review/SKILL.md +124 -0
- package/skills/responding-to-code-review/evals/behavior.json +54 -0
- package/skills/responding-to-code-review/evals/triggers.json +16 -0
- package/skills/returns-reverse-logistics/SKILL.md +97 -0
- package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
- package/skills/ruby-patterns/SKILL.md +127 -0
- package/skills/ruby-patterns/evals/triggers.json +18 -0
- package/skills/ruby-testing/SKILL.md +113 -0
- package/skills/ruby-testing/evals/triggers.json +18 -0
- package/skills/runbook-writing/SKILL.md +101 -0
- package/skills/runbook-writing/evals/triggers.json +14 -0
- package/skills/rust-patterns/SKILL.md +118 -0
- package/skills/rust-patterns/evals/triggers.json +16 -0
- package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
- package/skills/rust-patterns/references/errors-and-traits.md +97 -0
- package/skills/rust-testing/SKILL.md +148 -0
- package/skills/rust-testing/evals/triggers.json +16 -0
- package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
- package/skills/search-first/SKILL.md +73 -0
- package/skills/search-first/evals/triggers.json +14 -0
- package/skills/security-review/SKILL.md +58 -0
- package/skills/security-review/evals/behavior.json +56 -0
- package/skills/security-review/evals/triggers.json +14 -0
- package/skills/security-review/references/checklist.md +54 -0
- package/skills/security-review/scripts/scan-secrets.js +79 -0
- package/skills/seo-audit/SKILL.md +111 -0
- package/skills/seo-audit/evals/triggers.json +16 -0
- package/skills/seo-audit/references/checks.md +65 -0
- package/skills/session-handoff/SKILL.md +101 -0
- package/skills/session-handoff/evals/behavior.json +55 -0
- package/skills/session-handoff/evals/triggers.json +14 -0
- package/skills/skill-authoring/SKILL.md +98 -0
- package/skills/skill-authoring/evals/triggers.json +15 -0
- package/skills/skill-authoring/references/frontmatter.md +40 -0
- package/skills/skill-authoring/references/pressure-testing.md +87 -0
- package/skills/slack-app-integration/SKILL.md +108 -0
- package/skills/slack-app-integration/evals/triggers.json +17 -0
- package/skills/slide-decks/SKILL.md +107 -0
- package/skills/slide-decks/evals/triggers.json +18 -0
- package/skills/slide-decks/references/html-decks.md +86 -0
- package/skills/slide-decks/references/layouts.md +45 -0
- package/skills/slide-decks/references/pptx.md +87 -0
- package/skills/smart-contract-security/SKILL.md +110 -0
- package/skills/smart-contract-security/evals/triggers.json +16 -0
- package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
- package/skills/social-media-publishing/SKILL.md +84 -0
- package/skills/social-media-publishing/evals/triggers.json +17 -0
- package/skills/social-media-publishing/references/platform-apis.md +116 -0
- package/skills/solidity-patterns/SKILL.md +95 -0
- package/skills/solidity-patterns/evals/triggers.json +16 -0
- package/skills/spring-boot-patterns/SKILL.md +128 -0
- package/skills/spring-boot-patterns/evals/triggers.json +18 -0
- package/skills/spring-boot-patterns/references/testing.md +72 -0
- package/skills/stripe-integration/SKILL.md +69 -0
- package/skills/stripe-integration/evals/triggers.json +16 -0
- package/skills/stripe-integration/references/api.md +71 -0
- package/skills/stripe-integration/references/billing.md +58 -0
- package/skills/stripe-integration/references/webhooks.md +76 -0
- package/skills/subagent-driven-development/SKILL.md +109 -0
- package/skills/subagent-driven-development/evals/behavior.json +53 -0
- package/skills/subagent-driven-development/evals/triggers.json +15 -0
- package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
- package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
- package/skills/subscription-billing-ops/SKILL.md +118 -0
- package/skills/subscription-billing-ops/evals/triggers.json +17 -0
- package/skills/subscription-billing-ops/references/proration.md +47 -0
- package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
- package/skills/svelte-patterns/SKILL.md +122 -0
- package/skills/svelte-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/SKILL.md +113 -0
- package/skills/swift-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/references/concurrency-migration.md +40 -0
- package/skills/swift-testing/SKILL.md +121 -0
- package/skills/swift-testing/evals/triggers.json +16 -0
- package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
- package/skills/swiftui-patterns/SKILL.md +102 -0
- package/skills/swiftui-patterns/evals/triggers.json +16 -0
- package/skills/systematic-debugging/SKILL.md +92 -0
- package/skills/systematic-debugging/evals/behavior.json +59 -0
- package/skills/systematic-debugging/evals/triggers.json +16 -0
- package/skills/systematic-debugging/references/condition-waiting.md +52 -0
- package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
- package/skills/systematic-debugging/references/test-pollution.md +46 -0
- package/skills/tdd-workflow/SKILL.md +69 -0
- package/skills/tdd-workflow/evals/behavior.json +55 -0
- package/skills/tdd-workflow/evals/triggers.json +15 -0
- package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
- package/skills/technical-writing/SKILL.md +95 -0
- package/skills/technical-writing/evals/triggers.json +14 -0
- package/skills/terraform-patterns/SKILL.md +122 -0
- package/skills/terraform-patterns/evals/triggers.json +16 -0
- package/skills/terraform-patterns/references/backends.md +67 -0
- package/skills/test-coverage-improvement/SKILL.md +107 -0
- package/skills/test-coverage-improvement/evals/triggers.json +16 -0
- package/skills/threat-modeling/SKILL.md +113 -0
- package/skills/threat-modeling/evals/triggers.json +16 -0
- package/skills/transactional-email/SKILL.md +68 -0
- package/skills/transactional-email/evals/triggers.json +17 -0
- package/skills/transactional-email/references/providers.md +63 -0
- package/skills/typescript-patterns/SKILL.md +122 -0
- package/skills/typescript-patterns/evals/triggers.json +16 -0
- package/skills/typescript-testing/SKILL.md +101 -0
- package/skills/typescript-testing/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/SKILL.md +93 -0
- package/skills/ui-demo-recording/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
- package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
- package/skills/ui-demo-recording/references/post-processing.md +57 -0
- package/skills/ui-design-polish/SKILL.md +113 -0
- package/skills/ui-design-polish/evals/triggers.json +18 -0
- package/skills/ui-design-polish/references/detail-checklist.md +45 -0
- package/skills/ui-design-polish/references/tokens.md +68 -0
- package/skills/ui-flow-audit/SKILL.md +112 -0
- package/skills/ui-flow-audit/evals/triggers.json +17 -0
- package/skills/ui-motion/SKILL.md +103 -0
- package/skills/ui-motion/evals/triggers.json +18 -0
- package/skills/ui-motion/references/patterns.md +138 -0
- package/skills/ui-motion/references/tokens.md +52 -0
- package/skills/unicode-text-processing/SKILL.md +103 -0
- package/skills/unicode-text-processing/evals/triggers.json +17 -0
- package/skills/unicode-text-processing/references/apis.md +89 -0
- package/skills/unicode-text-processing/references/script-notes.md +50 -0
- package/skills/verification-loop/SKILL.md +70 -0
- package/skills/verification-loop/evals/behavior.json +52 -0
- package/skills/verification-loop/evals/triggers.json +14 -0
- package/skills/verification-loop/scripts/detect-checks.js +102 -0
- package/skills/video-editing/SKILL.md +111 -0
- package/skills/video-editing/evals/triggers.json +16 -0
- package/skills/video-editing/references/edl-and-logging.md +44 -0
- package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
- package/skills/video-editing/references/resolve-scripting.md +53 -0
- package/skills/vite-patterns/SKILL.md +117 -0
- package/skills/vite-patterns/evals/triggers.json +16 -0
- package/skills/vue-patterns/SKILL.md +104 -0
- package/skills/vue-patterns/evals/triggers.json +16 -0
- package/skills/web-accessibility/SKILL.md +119 -0
- package/skills/web-accessibility/evals/triggers.json +16 -0
- package/skills/web-performance/SKILL.md +107 -0
- package/skills/web-performance/evals/triggers.json +16 -0
- package/skills/web-scraping/SKILL.md +80 -0
- package/skills/web-scraping/evals/triggers.json +16 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
// Detects a project's verification commands and prints them as JSON.
|
|
5
|
+
// Usage: node detect-checks.js [project-dir]
|
|
6
|
+
// Read-only: it never runs the commands it finds.
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
|
|
11
|
+
const root = path.resolve(process.argv[2] || '.');
|
|
12
|
+
const has = (f) => fs.existsSync(path.join(root, f));
|
|
13
|
+
const read = (f) => {
|
|
14
|
+
try {
|
|
15
|
+
return fs.readFileSync(path.join(root, f), 'utf8');
|
|
16
|
+
} catch {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const checks = [];
|
|
21
|
+
const add = (kind, command, source) => {
|
|
22
|
+
if (!checks.some((c) => c.command === command)) checks.push({ kind, command, source });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// JavaScript / TypeScript
|
|
26
|
+
if (has('package.json')) {
|
|
27
|
+
let pkg = {};
|
|
28
|
+
try {
|
|
29
|
+
pkg = JSON.parse(read('package.json'));
|
|
30
|
+
} catch {}
|
|
31
|
+
const pm = has('pnpm-lock.yaml') ? 'pnpm' : has('yarn.lock') ? 'yarn' : has('bun.lockb') || has('bun.lock') ? 'bun' : 'npm';
|
|
32
|
+
// bun needs `run`: `bun test` / `bun build` are its own runner and bundler, not the scripts.
|
|
33
|
+
const run = (s) => (pm === 'npm' || pm === 'bun' ? `${pm} run ${s}` : `${pm} ${s}`);
|
|
34
|
+
const scripts = pkg.scripts || {};
|
|
35
|
+
const map = [
|
|
36
|
+
['build', /^build$/],
|
|
37
|
+
['format', /^(format:check|fmt:check|prettier:check|check:format)$/],
|
|
38
|
+
['lint', /^(lint|eslint|biome)$/],
|
|
39
|
+
['typecheck', /^(typecheck|type-check|tsc|check:types|types)$/],
|
|
40
|
+
['test', /^(test|test:unit|vitest|jest)$/],
|
|
41
|
+
['test-integration', /^test:(integration|int)$/],
|
|
42
|
+
];
|
|
43
|
+
for (const [kind, re] of map) for (const s of Object.keys(scripts)) if (re.test(s)) add(kind, s === 'test' && pm === 'npm' ? 'npm test' : run(s), 'package.json');
|
|
44
|
+
if (!Object.keys(scripts).some((s) => /type/.test(s)) && has('tsconfig.json')) add('typecheck', `${pm === 'npm' ? 'npx' : pm + ' exec'} tsc --noEmit`, 'tsconfig.json');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Python
|
|
48
|
+
if (has('pyproject.toml') || has('setup.cfg') || has('requirements.txt')) {
|
|
49
|
+
const py = read('pyproject.toml') + read('setup.cfg');
|
|
50
|
+
const runner = has('uv.lock') ? 'uv run ' : has('poetry.lock') ? 'poetry run ' : '';
|
|
51
|
+
if (/\[tool\.ruff/.test(py) || has('ruff.toml')) {
|
|
52
|
+
add('format', `${runner}ruff format --check .`, 'ruff');
|
|
53
|
+
add('lint', `${runner}ruff check .`, 'ruff');
|
|
54
|
+
} else if (/flake8/.test(py) || has('.flake8')) add('lint', `${runner}flake8`, 'flake8');
|
|
55
|
+
if (/\[tool\.black/.test(py)) add('format', `${runner}black --check .`, 'black');
|
|
56
|
+
if (/\[tool\.mypy/.test(py) || has('mypy.ini')) add('typecheck', `${runner}mypy .`, 'mypy');
|
|
57
|
+
if (/\[tool\.pyright/.test(py) || has('pyrightconfig.json')) add('typecheck', `${runner}pyright`, 'pyright');
|
|
58
|
+
if (/pytest/.test(py) || has('pytest.ini') || has('tests') || has('conftest.py')) add('test', `${runner}pytest`, 'pytest');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Go
|
|
62
|
+
if (has('go.mod')) {
|
|
63
|
+
add('build', 'go build ./...', 'go.mod');
|
|
64
|
+
add('lint', 'go vet ./...', 'go.mod');
|
|
65
|
+
if (has('.golangci.yml') || has('.golangci.yaml')) add('lint', 'golangci-lint run', '.golangci.yml');
|
|
66
|
+
add('test', 'go test ./...', 'go.mod');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Rust
|
|
70
|
+
if (has('Cargo.toml')) {
|
|
71
|
+
add('format', 'cargo fmt --check', 'Cargo.toml');
|
|
72
|
+
add('lint', 'cargo clippy --all-targets -- -D warnings', 'Cargo.toml');
|
|
73
|
+
add('test', 'cargo test', 'Cargo.toml');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// JVM
|
|
77
|
+
if (has('gradlew')) {
|
|
78
|
+
add('build', './gradlew build -x test', 'gradlew');
|
|
79
|
+
add('test', './gradlew test', 'gradlew');
|
|
80
|
+
} else if (has('pom.xml')) {
|
|
81
|
+
add('build', 'mvn -q -DskipTests package', 'pom.xml');
|
|
82
|
+
add('test', 'mvn -q test', 'pom.xml');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// .NET
|
|
86
|
+
if (fs.readdirSync(root).some((f) => /\.(sln|csproj|fsproj)$/.test(f))) {
|
|
87
|
+
add('build', 'dotnet build', '.NET');
|
|
88
|
+
add('test', 'dotnet test', '.NET');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Makefile targets
|
|
92
|
+
const make = read('Makefile');
|
|
93
|
+
for (const [kind, target] of [['build', 'build'], ['lint', 'lint'], ['typecheck', 'typecheck'], ['test', 'test']]) {
|
|
94
|
+
if (new RegExp(`^${target}:`, 'm').test(make)) add(kind, `make ${target}`, 'Makefile');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const order = ['build', 'format', 'lint', 'typecheck', 'test', 'test-integration'];
|
|
98
|
+
checks.sort((a, b) => order.indexOf(a.kind) - order.indexOf(b.kind));
|
|
99
|
+
|
|
100
|
+
const ci = has('.github/workflows') ? fs.readdirSync(path.join(root, '.github/workflows')).map((f) => `.github/workflows/${f}`) : [];
|
|
101
|
+
console.log(JSON.stringify({ root, checks, ciFilesToReview: ci }, null, 2));
|
|
102
|
+
if (!checks.length) process.exitCode = 3;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: video-editing
|
|
3
|
+
description: Editorial workflow for turning raw footage into a finished cut - logging clips and pulling selects, building a paper edit, rough cut then fine cut, pacing and J/L cuts, matching the rhythm of a reference edit, subtitles and captions in SRT or WebVTT, loudness to a delivery target, basic colour correction, and conforming from an edit decision list with FFmpeg or DaVinci Resolve's Python scripting API. Use when someone hands you interviews, B-roll or screen footage and wants a finished video, asks to tighten a rough cut, wants subtitles and levels fixed before delivery, or needs a timeline assembled or rendered from a script.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs ffmpeg and ffprobe; Resolve scripting needs DaVinci Resolve running with scripting enabled and its API on PYTHONPATH. Transcription needs a speech-to-text tool the user approves.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "ffmpeg, ffprobe"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Video editing
|
|
15
|
+
|
|
16
|
+
Edit like an editor, not like a transcoder: decide what the piece says, choose the moments that say it, then make the cuts invisible. Keep every decision in an edit decision list (EDL) so the cut can be re-rendered, reviewed and changed. Single FFmpeg command recipes live in the `ffmpeg-media-processing` skill; this skill is about the edit.
|
|
17
|
+
|
|
18
|
+
## 0. Brief first
|
|
19
|
+
|
|
20
|
+
Before touching footage, get answers (ask the user for any that are missing):
|
|
21
|
+
|
|
22
|
+
1. **Purpose and audience**: what should a viewer know or feel at the end?
|
|
23
|
+
2. **Target length** and **delivery**: platform, aspect ratio (16:9, 9:16, 1:1), resolution, frame rate, captions burned in or as a sidecar file.
|
|
24
|
+
3. **Reference**: a link or file whose pacing or look the user wants matched.
|
|
25
|
+
4. **Must-haves and no-gos**: quotes that must stay, people or logos that must not appear, music licence.
|
|
26
|
+
|
|
27
|
+
Never use music, footage or fonts the user has not confirmed they have rights to.
|
|
28
|
+
|
|
29
|
+
## 1. Ingest and log
|
|
30
|
+
|
|
31
|
+
1. Copy the camera originals to a read-only `source/` folder. Never edit or re-encode originals in place.
|
|
32
|
+
2. Probe every clip: `ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,sample_rate,channels -show_entries format=duration -of json <clip>`. Flag mixed frame rates (for example 23.976 and 29.97) and variable frame rate phone footage now; they cause drift later.
|
|
33
|
+
3. For VFR or long-GOP clips that will be cut a lot, make constant-frame-rate intermediates (`references/ffmpeg-edit-recipes.md`, "Proxies and intermediates").
|
|
34
|
+
4. Transcribe speech (with the user's approval of the tool) to timestamped text. Spoken footage is edited from the transcript.
|
|
35
|
+
5. Write a log, one row per clip: file, duration, content, usable ranges, quality notes (focus, noise, wind), best moments. Format in `references/edl-and-logging.md`.
|
|
36
|
+
|
|
37
|
+
## 2. Selects and paper edit
|
|
38
|
+
|
|
39
|
+
1. Mark selects: in and out timecodes of every moment worth keeping, with a one-line reason.
|
|
40
|
+
2. Build a **paper edit**: the story order as a list of selects, before any rendering. Structure: hook (first 3 to 5 seconds), context, body in clear beats, payoff, call to action if any.
|
|
41
|
+
3. Estimate running time from the list. If it is more than about 20% over target, cut whole beats now rather than trimming everything.
|
|
42
|
+
4. **Stop and show the user the paper edit** for anything longer than a minute or with interview content. Changing a list is cheap; re-cutting is not.
|
|
43
|
+
|
|
44
|
+
## 3. Rough cut
|
|
45
|
+
|
|
46
|
+
Assemble the selects in order from the EDL with straight cuts and no polish. Render a low-resolution review copy with burned-in timecode (recipe in `references/ffmpeg-edit-recipes.md`) so feedback can cite exact times.
|
|
47
|
+
|
|
48
|
+
Check: does it make sense with no music, titles or effects? If not, fix structure before moving on.
|
|
49
|
+
|
|
50
|
+
## 4. Fine cut
|
|
51
|
+
|
|
52
|
+
Work through these in order:
|
|
53
|
+
|
|
54
|
+
1. **Trim**: remove ums, false starts, repeated points and dead air at clip heads and tails. Cut on the breath, not mid-word; leave 2 to 6 frames of room after the last syllable.
|
|
55
|
+
2. **Pacing**: vary shot length; hold on what matters, move fast through what does not. Cut on action or a look; avoid jump cuts in an interview unless the style calls for them, otherwise cover them with B-roll.
|
|
56
|
+
3. **J and L cuts**: let audio lead (J) or trail (L) the picture across a cut so speech flows.
|
|
57
|
+
4. **B-roll**: cover edits and illustrate what is being said; never let B-roll contradict the words.
|
|
58
|
+
5. **Match a reference**: measure the reference before imitating it (`references/ffmpeg-edit-recipes.md`, "Measure a reference"): average shot length, cuts per minute, text style, music level. Report the numbers next to yours.
|
|
59
|
+
|
|
60
|
+
## 5. Sound
|
|
61
|
+
|
|
62
|
+
1. Dialogue is king. Clean it first (noise reduction, high-pass around 80 Hz for voice), then set music under it.
|
|
63
|
+
2. Duck music under speech by roughly 10 to 20 dB.
|
|
64
|
+
3. Normalise the final mix to the delivery spec with a two-pass loudness measurement (`references/ffmpeg-edit-recipes.md`, "Loudness"). Common targets: EBU R128 broadcast -23 LUFS integrated; many streaming and social platforms normalise near -14 LUFS; keep true peak at or below -1 dBTP. Confirm the user's platform spec rather than assuming.
|
|
65
|
+
4. Listen to every cut for pops; add short audio crossfades (a few frames) at each edit.
|
|
66
|
+
|
|
67
|
+
## 6. Colour
|
|
68
|
+
|
|
69
|
+
1. Correct before you grade: white balance, exposure, contrast, so shots of the same scene match.
|
|
70
|
+
2. Then apply one look consistently. A LUT designed for a camera log profile goes on log footage only.
|
|
71
|
+
3. Check skin tones and that nothing is clipped. Do not grade on an uncalibrated laptop screen and call it final; tell the user.
|
|
72
|
+
|
|
73
|
+
## 7. Captions and subtitles
|
|
74
|
+
|
|
75
|
+
1. Start from the transcript, corrected by hand against the final cut, not the raw footage.
|
|
76
|
+
2. Write SRT or WebVTT timed to the final timeline. Rules of thumb (check the platform's style guide): at most 2 lines, about 42 characters per line, reading speed around 17 to 20 characters per second, minimum about 1 second on screen, break lines at phrase boundaries.
|
|
77
|
+
3. Sidecar files keep captions accessible and editable; burn in only when the platform needs it (many social feeds autoplay muted). See `references/ffmpeg-edit-recipes.md`, "Subtitles".
|
|
78
|
+
4. Re-time captions after every picture change.
|
|
79
|
+
|
|
80
|
+
## 8. Conform and render
|
|
81
|
+
|
|
82
|
+
- **FFmpeg path**: generate the render from the EDL (trim and concat, then the audio chain, then subtitles). Recipes in `references/ffmpeg-edit-recipes.md`.
|
|
83
|
+
- **DaVinci Resolve path**: build the timeline, import an EDL, FCPXML or AAF, set render settings and queue the job from Python. API calls in `references/resolve-scripting.md`.
|
|
84
|
+
- Render a master (high bitrate or mezzanine codec) and derive delivery files from it; never re-encode a delivery file to make another.
|
|
85
|
+
|
|
86
|
+
## 9. QC before delivery
|
|
87
|
+
|
|
88
|
+
Watch the whole render once, start to finish, then check:
|
|
89
|
+
|
|
90
|
+
- [ ] Duration, resolution, frame rate and aspect ratio match the brief (probe the file).
|
|
91
|
+
- [ ] No black frames, flash frames or frozen frames at cut points (`blackdetect`, `freezedetect` in the recipes).
|
|
92
|
+
- [ ] Audio in sync at the start, middle and end; loudness measured on the final file.
|
|
93
|
+
- [ ] Captions match the words and timing; names spelled correctly.
|
|
94
|
+
- [ ] Nothing from the no-go list appears.
|
|
95
|
+
|
|
96
|
+
## Never
|
|
97
|
+
|
|
98
|
+
- Never alter source files or delete footage the user has not approved deleting.
|
|
99
|
+
- Never invent quotes or re-order an interviewee's words so the meaning changes. Flag any edit that compresses what someone said.
|
|
100
|
+
- Never deliver without watching the final render.
|
|
101
|
+
|
|
102
|
+
## Report back
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Cut: <title> v<n> Length: mm:ss (target mm:ss) Format: WxH @ fps, codec
|
|
106
|
+
EDL: <path> Master: <path> Deliverables: <paths>
|
|
107
|
+
Structure: hook / beats / payoff (one line each)
|
|
108
|
+
Audio: integrated LUFS, true peak Captions: <file or burned in>
|
|
109
|
+
Changes since last version: ...
|
|
110
|
+
Open questions / needs a human: grading on a calibrated display, legal clearance, ...
|
|
111
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"I have three hours of interview footage and B-roll, cut it into a 4-minute documentary short",
|
|
4
|
+
"Tighten this rough cut: remove the ums, fix the pacing and add J and L cuts between speakers",
|
|
5
|
+
"Make my edit feel like this reference video, same rhythm of cuts and same music level",
|
|
6
|
+
"Build a DaVinci Resolve timeline from my selects list with a Python script and queue the render",
|
|
7
|
+
"Before we deliver, fix the audio levels to -14 LUFS, colour match the two cameras and add subtitles to the final cut"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Convert this MKV to an MP4 that plays on an iPhone",
|
|
11
|
+
"Record a walkthrough video of our web app's onboarding flow using Playwright",
|
|
12
|
+
"Animate a title card sequence in React and render it to MP4",
|
|
13
|
+
"Generate a 10-second product clip from a text prompt with a video model",
|
|
14
|
+
"Repurpose our webinar recording into a LinkedIn post and a thread"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Logs, selects and EDLs
|
|
2
|
+
|
|
3
|
+
## Clip log (CSV)
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
file,duration,content,usable_in,usable_out,quality,best_moment,notes
|
|
7
|
+
A001_C003.mov,00:04:12,Interview Ana wide,00:00:08,00:04:02,good,"00:01:15 'we almost quit'",slight wind at 3:40
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Working EDL (JSON, the source of truth for the FFmpeg path)
|
|
11
|
+
|
|
12
|
+
Keep times as seconds with three decimals, or as frames at the project rate. One entry per event, in timeline order.
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"fps": 25,
|
|
17
|
+
"width": 1920, "height": 1080,
|
|
18
|
+
"events": [
|
|
19
|
+
{ "id": 1, "src": "source/A001_C003.mov", "in": 75.20, "out": 82.04, "track": "V1+A1", "note": "hook quote" },
|
|
20
|
+
{ "id": 2, "src": "source/B012.mov", "in": 3.00, "out": 6.50, "track": "V1", "audio_from": 1, "note": "B-roll over quote" }
|
|
21
|
+
],
|
|
22
|
+
"music": [{ "src": "music/bed.wav", "start": 0.0, "gain_db": -18 }],
|
|
23
|
+
"captions": "captions/final.srt"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Rules:
|
|
28
|
+
- `in`/`out` refer to the source clip; the timeline position is the running sum of durations.
|
|
29
|
+
- Snap cut points to frame boundaries at the project frame rate (`round(t * fps) / fps`).
|
|
30
|
+
- Bump a version number on every change and keep old EDLs.
|
|
31
|
+
|
|
32
|
+
## CMX 3600 EDL (for handing to an NLE)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
TITLE: MY_CUT_V3
|
|
36
|
+
FCM: NON-DROP FRAME
|
|
37
|
+
|
|
38
|
+
001 A001C003 V C 00:01:15:05 00:01:22:01 01:00:00:00 01:00:06:21
|
|
39
|
+
002 A001C003 A C 00:01:15:05 00:01:22:01 01:00:00:00 01:00:06:21
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Fields: event number, reel name (max 8 characters in strict CMX 3600), track (V, A, A2, B for both), transition (C = cut, D = dissolve with duration), source in, source out, record in, record out. CMX 3600 carries one video track; use FCPXML or AAF for multitrack timelines, titles and effects.
|
|
43
|
+
|
|
44
|
+
Timecode: `HH:MM:SS:FF`. Use drop-frame (`;` before frames, `FCM: DROP FRAME`) only for 29.97 or 59.94 material that is delivered drop-frame.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# FFmpeg recipes for editing
|
|
2
|
+
|
|
3
|
+
Pass arguments as arrays from code, never via shell strings built from user input.
|
|
4
|
+
|
|
5
|
+
## Proxies and intermediates
|
|
6
|
+
|
|
7
|
+
Constant frame rate, all-intra, easy to cut:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ffmpeg -i in.mp4 -vf "fps=25,scale=-2:1080" -c:v prores_ks -profile:v 1 -c:a pcm_s16le -ar 48000 inter.mov
|
|
11
|
+
# smaller review proxy
|
|
12
|
+
ffmpeg -i in.mp4 -vf "fps=25,scale=-2:540" -c:v libx264 -g 1 -crf 23 -c:a aac proxy.mp4
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Trim one event frame-accurately
|
|
16
|
+
|
|
17
|
+
Re-encode when cutting long-GOP sources; `-c copy` cuts on keyframes only.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
ffmpeg -ss 75.20 -i source/A001_C003.mov -t 6.84 -c:v libx264 -crf 16 -preset slow -c:a pcm_s16le -ar 48000 seg001.mov
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Join events
|
|
24
|
+
|
|
25
|
+
After all segments share codec, resolution, frame rate and audio layout:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
printf "file '%s'\n" seg001.mov seg002.mov > list.txt
|
|
29
|
+
ffmpeg -f concat -safe 0 -i list.txt -c copy assembled.mov
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For short cross-dissolves, use `xfade` (video) and `acrossfade` (audio) in a filter graph instead of the concat demuxer.
|
|
33
|
+
|
|
34
|
+
## Burned-in timecode for review copies
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
ffmpeg -i assembled.mov -vf "drawtext=timecode='00\:00\:00\:00':rate=25:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.5:x=20:y=h-th-20" -c:v libx264 -crf 26 -c:a aac review.mp4
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Some builds need `fontfile=/path/to/font.ttf` in `drawtext`.
|
|
41
|
+
|
|
42
|
+
## Measure a reference
|
|
43
|
+
|
|
44
|
+
Shot boundaries (scene score above 0.3 is a common starting threshold; tune per footage):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
ffmpeg -i reference.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep -o "pts_time:[0-9.]*"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Cuts per minute = number of boundaries / duration in minutes. Average shot length = duration / (boundaries + 1). Measure loudness of the reference the same way as your mix (below).
|
|
51
|
+
|
|
52
|
+
## Loudness (two-pass loudnorm)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# pass 1: measure
|
|
56
|
+
ffmpeg -i mix.wav -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null -
|
|
57
|
+
# pass 2: apply with the measured values
|
|
58
|
+
ffmpeg -i mix.wav -af "loudnorm=I=-14:TP=-1:LRA=11:measured_I=<i>:measured_TP=<tp>:measured_LRA=<lra>:measured_thresh=<thr>:offset=<off>:linear=true" -ar 48000 mix_norm.wav
|
|
59
|
+
# verify on the final file
|
|
60
|
+
ffmpeg -i final.mp4 -af ebur128=peak=true -f null -
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Change `I` to the delivery target (for example -23 for EBU R128).
|
|
64
|
+
|
|
65
|
+
## Ducking music under dialogue
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
ffmpeg -i dialogue.wav -i music.wav -filter_complex "[1:a][0:a]sidechaincompress=threshold=0.05:ratio=8:attack=20:release=400[duck];[0:a][duck]amix=inputs=2:duration=first:normalize=0[out]" -map "[out]" mix.wav
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Subtitles
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# soft subtitles in MP4 (mov_text) or MKV (srt)
|
|
75
|
+
ffmpeg -i final.mp4 -i captions.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 language=eng final_subs.mp4
|
|
76
|
+
# burn in
|
|
77
|
+
ffmpeg -i final.mp4 -vf "subtitles=captions.srt:force_style='FontSize=24,Outline=2'" -c:a copy final_burned.mp4
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## QC detectors
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
ffmpeg -i final.mp4 -vf "blackdetect=d=0.1:pix_th=0.10" -an -f null - 2>&1 | grep blackdetect
|
|
84
|
+
ffmpeg -i final.mp4 -vf "freezedetect=n=0.003:d=0.5" -an -f null - 2>&1 | grep freeze
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Basic colour correction
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
ffmpeg -i in.mov -vf "eq=contrast=1.05:brightness=0.02:saturation=1.1,colortemperature=temperature=5600" out.mov
|
|
91
|
+
ffmpeg -i log.mov -vf "lut3d=camera_log_to_rec709.cube" graded.mov
|
|
92
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# DaVinci Resolve scripting (Python)
|
|
2
|
+
|
|
3
|
+
The authoritative reference is the README shipped with Resolve (Help > Documentation > Developer, `Scripting/README.txt`). Method names and supported export formats change between versions; check that file for the installed version before relying on a call below.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
- Resolve must be running. Scripting access (local or network) is set in Preferences > System > General > External scripting using.
|
|
8
|
+
- External scripts need the environment the README describes, typically `RESOLVE_SCRIPT_API`, `RESOLVE_SCRIPT_LIB` and `PYTHONPATH` pointing at the bundled `Modules` folder.
|
|
9
|
+
- Which features need the paid Studio edition varies by version; check the README and tell the user if a call fails for that reason.
|
|
10
|
+
|
|
11
|
+
## Common calls
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
import time
|
|
15
|
+
import DaVinciResolveScript as dvr
|
|
16
|
+
|
|
17
|
+
resolve = dvr.scriptapp("Resolve")
|
|
18
|
+
pm = resolve.GetProjectManager()
|
|
19
|
+
project = pm.GetCurrentProject() or pm.CreateProject("my_cut")
|
|
20
|
+
media_pool = project.GetMediaPool()
|
|
21
|
+
|
|
22
|
+
clips = media_pool.ImportMedia(["/abs/source/A001_C003.mov", "/abs/source/B012.mov"])
|
|
23
|
+
timeline = media_pool.CreateEmptyTimeline("my_cut_v1")
|
|
24
|
+
project.SetCurrentTimeline(timeline)
|
|
25
|
+
|
|
26
|
+
# Append sub-clips by source frame range
|
|
27
|
+
media_pool.AppendToTimeline([
|
|
28
|
+
{"mediaPoolItem": clips[0], "startFrame": 1880, "endFrame": 2051},
|
|
29
|
+
{"mediaPoolItem": clips[1], "startFrame": 75, "endFrame": 162},
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
# Or import a whole timeline from an EDL / FCPXML / AAF
|
|
33
|
+
media_pool.ImportTimelineFromFile("/abs/edl/my_cut_v3.fcpxml")
|
|
34
|
+
|
|
35
|
+
# Export the timeline for review or hand-off
|
|
36
|
+
timeline.Export("/abs/out/my_cut_v3.edl", resolve.EXPORT_EDL, resolve.EXPORT_NONE)
|
|
37
|
+
|
|
38
|
+
# Render
|
|
39
|
+
resolve.OpenPage("deliver")
|
|
40
|
+
project.LoadRenderPreset("H.264 Master") # a preset that exists on this machine
|
|
41
|
+
project.SetRenderSettings({"TargetDir": "/abs/out", "CustomName": "my_cut_v3"})
|
|
42
|
+
job_id = project.AddRenderJob()
|
|
43
|
+
project.StartRendering(job_id)
|
|
44
|
+
while project.IsRenderingInProgress():
|
|
45
|
+
time.sleep(2)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Rules
|
|
49
|
+
|
|
50
|
+
- Check every return value: most calls return `None` or `False` on failure without raising.
|
|
51
|
+
- Use absolute paths.
|
|
52
|
+
- Never delete media pool items, timelines or projects the script did not create.
|
|
53
|
+
- Save the project (`pm.SaveProject()`) before and after a scripted change.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vite-patterns
|
|
3
|
+
description: Configuring and debugging Vite builds and dev servers, covering vite.config with defineConfig and loadEnv, VITE_ env variables and modes, path aliases, plugin ordering and writing small plugins, library mode with package exports, SSR entry builds, base path and build output, and fixing breakage when moving from webpack or Create React App or across Vite majors (Rollup to Rolldown). Use when editing vite.config, env variables are undefined in the browser, an alias or import fails only in build, publishing a library with Vite, or upgrading Vite.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs Node.js and the project's package manager. Option names changed between Vite majors; check the installed version (npx vite --version) and vite.dev/guide/migration.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: writes-files
|
|
10
|
+
kete-loom/requires: "node"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Vite patterns
|
|
15
|
+
|
|
16
|
+
Vite serves source over native ESM in dev and bundles for production. Most bugs come from the gap between those two modes, from env variables, or from options renamed between majors.
|
|
17
|
+
|
|
18
|
+
## First, look at the project
|
|
19
|
+
|
|
20
|
+
1. Read `package.json` for the `vite` major and framework plugin (`@vitejs/plugin-react`, `@vitejs/plugin-vue`, `@sveltejs/vite-plugin-svelte`), and whether a meta-framework (Nuxt, SvelteKit, Astro, Remix/React Router) owns the config.
|
|
21
|
+
2. Read `vite.config.*` and `tsconfig.json`.
|
|
22
|
+
3. If a meta-framework wraps Vite, change Vite settings through that framework's config key (for example `vite:` in `nuxt.config`), not a separate `vite.config`.
|
|
23
|
+
|
|
24
|
+
**Version matters.** Vite 8 builds with Rolldown and transforms with Oxc: `build.rollupOptions` became `build.rolldownOptions`, top-level `esbuild` options became `oxc`, and `optimizeDeps.esbuildOptions` became `optimizeDeps.rolldownOptions`. The old names are deprecated but still accepted. Use the names that match the installed major.
|
|
25
|
+
|
|
26
|
+
## Config
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { defineConfig, loadEnv } from 'vite';
|
|
30
|
+
import react from '@vitejs/plugin-react';
|
|
31
|
+
|
|
32
|
+
export default defineConfig(({ command, mode }) => {
|
|
33
|
+
const env = loadEnv(mode, process.cwd(), ''); // '' = load all vars, for config use only
|
|
34
|
+
return {
|
|
35
|
+
plugins: [react()],
|
|
36
|
+
server: { port: 5173, proxy: { '/api': { target: env.API_URL, changeOrigin: true } } },
|
|
37
|
+
build: { sourcemap: mode !== 'production' ? true : 'hidden' },
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `import.meta.env` is **not** available inside `vite.config`; env files load after the config runs. Use `loadEnv(mode, root, prefixes)` there.
|
|
43
|
+
- Use `server.proxy` in dev to avoid CORS instead of adding CORS headers to the backend for localhost.
|
|
44
|
+
|
|
45
|
+
## Env variables and modes
|
|
46
|
+
|
|
47
|
+
- Only variables starting with `VITE_` (or a custom `envPrefix`) reach client code, through `import.meta.env.VITE_*`. All values are strings.
|
|
48
|
+
- Files: `.env`, `.env.local`, `.env.[mode]`, `.env.[mode].local`; mode-specific files win, and variables already set in the shell win over all files. Restart the dev server after editing them.
|
|
49
|
+
- Built-ins: `import.meta.env.MODE`, `BASE_URL`, `PROD`, `DEV`, `SSR`.
|
|
50
|
+
- `mode` and `NODE_ENV` are different: `vite build --mode staging` still builds with `NODE_ENV=production` and loads `.env.staging`.
|
|
51
|
+
- **Everything with the client prefix is embedded in the shipped JS.** Never put secrets in `VITE_*`. Keep `*.local` in `.gitignore`.
|
|
52
|
+
- Type them in `src/vite-env.d.ts` with an `interface ImportMetaEnv { readonly VITE_API_URL: string }`.
|
|
53
|
+
- `process.env.X` in client code is not replaced; use `import.meta.env` or `define`.
|
|
54
|
+
- Bun auto-loads `.env` into `process.env`, which can mask Vite's own loading; run Vite under Node or disable Bun's env loading.
|
|
55
|
+
|
|
56
|
+
## Aliases
|
|
57
|
+
|
|
58
|
+
- Declare once and keep TypeScript in sync. Either set `resolve.alias` (`{ '@': fileURLToPath(new URL('./src', import.meta.url)) }`) and mirror it in `tsconfig` `paths`, or on Vite 8 enable `resolve.tsconfigPaths` to read `paths` from `tsconfig` directly (the `vite-tsconfig-paths` plugin on older majors).
|
|
59
|
+
- Tests (Vitest) reuse `vite.config`, so aliases defined there work in tests too.
|
|
60
|
+
|
|
61
|
+
## Plugins
|
|
62
|
+
|
|
63
|
+
- Order: framework plugin first, then others. A plugin can set `enforce: 'pre' | 'post'` and `apply: 'serve' | 'build'`.
|
|
64
|
+
- A small project plugin is an object with `name` plus hooks (`config`, `configResolved`, `resolveId`, `load`, `transform`, `configureServer`, `transformIndexHtml`). Return `null` from `resolveId`/`load`/`transform` for ids you do not handle.
|
|
65
|
+
- Prefer an existing official or widely used plugin over a custom one. Check that a plugin supports the installed Vite major before adding it.
|
|
66
|
+
|
|
67
|
+
## Library mode
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
build: {
|
|
71
|
+
lib: { entry: 'src/index.ts', name: 'MyLib', fileName: 'my-lib', formats: ['es', 'cjs'] },
|
|
72
|
+
rolldownOptions: { external: ['react', 'react-dom', 'react/jsx-runtime'] }, // rollupOptions before Vite 8
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- Externalise every `peerDependency` and usually every `dependency`; bundling React into a component library breaks hooks.
|
|
77
|
+
- `package.json`: `"type": "module"`, `"files": ["dist"]`, and an `exports` map with `types`, `import` and `require` conditions pointing at real files. Add `"./style.css"` if CSS is emitted.
|
|
78
|
+
- Vite does not emit `.d.ts`: run `tsc --emitDeclarationOnly` or a declarations plugin.
|
|
79
|
+
- Verify with `npm pack --dry-run` and by importing the packed tarball in a scratch project.
|
|
80
|
+
|
|
81
|
+
## SSR
|
|
82
|
+
|
|
83
|
+
- Prefer a framework (Nuxt, SvelteKit, Astro, React Router) over hand-rolled SSR. For a custom server: create Vite in middleware mode (`createServer({ server: { middlewareMode: true }, appType: 'custom' })`), mount `vite.middlewares`, and load the entry with `vite.ssrLoadModule('/src/entry-server.ts')` in dev.
|
|
84
|
+
- Production: build twice, the client (`vite build --outDir dist/client`) and the server entry (`vite build --ssr src/entry-server.ts --outDir dist/server`).
|
|
85
|
+
- Dependencies that ship untranspiled code or CSS imports may need `ssr.noExternal: ['pkg']`.
|
|
86
|
+
- Guard browser globals (`window`, `document`) behind `import.meta.env.SSR` or lifecycle hooks.
|
|
87
|
+
|
|
88
|
+
## Build output
|
|
89
|
+
|
|
90
|
+
- `base`: set it when the app is served from a sub-path (`base: '/app/'`), and use `import.meta.env.BASE_URL` when building URLs at runtime.
|
|
91
|
+
- Files in `public/` are copied as-is and referenced by absolute path; imported assets get hashed names. Do not import from `public/`.
|
|
92
|
+
- `build.target` defaults to a Baseline-widely-available browser set; Vite adds no polyfills. Use `@vitejs/plugin-legacy` only if old browsers are a real requirement.
|
|
93
|
+
- Check bundle size with `vite build` output, and split heavy routes with dynamic `import()`. On Vite 8 the object form of `manualChunks` is no longer supported and the function form is deprecated; use Rolldown's `codeSplitting` option instead.
|
|
94
|
+
- `vite preview` serves `dist` locally to test the production build; it is not a production server.
|
|
95
|
+
|
|
96
|
+
## Common migration issues
|
|
97
|
+
|
|
98
|
+
| Symptom | Fix |
|
|
99
|
+
|---|---|
|
|
100
|
+
| `process is not defined` after leaving webpack/CRA | Replace `process.env.REACT_APP_*` with `import.meta.env.VITE_*`; `define` only for third-party code |
|
|
101
|
+
| `require is not defined` | Convert to `import`; Vite source is ESM |
|
|
102
|
+
| `index.html` not found / blank page | `index.html` lives at the project root with `<script type="module" src="/src/main.tsx">` |
|
|
103
|
+
| JSX in `.js` files fails | Rename to `.jsx`/`.tsx` |
|
|
104
|
+
| Works in dev, broken in build | Case-sensitive import paths, CJS default-import interop, or a dynamic import with a variable path; run `vite build && vite preview` to reproduce |
|
|
105
|
+
| Default import from a CJS package changed after a Vite major | Fix the import; `legacy.inconsistentCjsInterop` only as a temporary bridge |
|
|
106
|
+
| Dependency pre-bundling stale | Delete `node_modules/.vite` or run with `--force` |
|
|
107
|
+
|
|
108
|
+
## Never
|
|
109
|
+
|
|
110
|
+
- Put secrets in `VITE_*` variables or `define`.
|
|
111
|
+
- Bundle peer dependencies into a library build.
|
|
112
|
+
- Copy a config snippet written for a different Vite major without checking option names.
|
|
113
|
+
- Serve production traffic with `vite` or `vite preview`.
|
|
114
|
+
|
|
115
|
+
## Before you finish
|
|
116
|
+
|
|
117
|
+
Run `vite build` (and `vite preview` for app changes) plus the project's type-check and tests. Report the config keys changed, any new plugin, env variables the user must set, and the build result.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"import.meta.env.API_URL is undefined in the browser in my Vite app",
|
|
4
|
+
"Set up Vite library mode so our component package ships ESM and CJS without bundling React",
|
|
5
|
+
"We're moving off Create React App to Vite and get 'process is not defined'",
|
|
6
|
+
"The @ alias resolves in dev but the vite build fails to find the module",
|
|
7
|
+
"Upgrade our vite.config from rollupOptions to the new Vite 8 options"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Our React components re-render too often, how do I memoize them properly",
|
|
11
|
+
"Configure nuxt.config route rules for prerendering the marketing pages",
|
|
12
|
+
"Migrate our Jest tests to bun test",
|
|
13
|
+
"Reduce our Largest Contentful Paint on the landing page",
|
|
14
|
+
"Add helmet and CORS to the Fastify API server"
|
|
15
|
+
]
|
|
16
|
+
}
|