aw-ecc 1.4.21
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/.agents/skills/api-design/SKILL.md +523 -0
- package/.agents/skills/api-design/agents/openai.yaml +7 -0
- package/.agents/skills/article-writing/SKILL.md +85 -0
- package/.agents/skills/article-writing/agents/openai.yaml +7 -0
- package/.agents/skills/backend-patterns/SKILL.md +598 -0
- package/.agents/skills/backend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/bun-runtime/SKILL.md +84 -0
- package/.agents/skills/bun-runtime/agents/openai.yaml +7 -0
- package/.agents/skills/claude-api/SKILL.md +337 -0
- package/.agents/skills/claude-api/agents/openai.yaml +7 -0
- package/.agents/skills/coding-standards/SKILL.md +530 -0
- package/.agents/skills/coding-standards/agents/openai.yaml +7 -0
- package/.agents/skills/content-engine/SKILL.md +88 -0
- package/.agents/skills/content-engine/agents/openai.yaml +7 -0
- package/.agents/skills/crosspost/SKILL.md +188 -0
- package/.agents/skills/crosspost/agents/openai.yaml +7 -0
- package/.agents/skills/deep-research/SKILL.md +155 -0
- package/.agents/skills/deep-research/agents/openai.yaml +7 -0
- package/.agents/skills/dmux-workflows/SKILL.md +144 -0
- package/.agents/skills/dmux-workflows/agents/openai.yaml +7 -0
- package/.agents/skills/documentation-lookup/SKILL.md +90 -0
- package/.agents/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/.agents/skills/e2e-testing/SKILL.md +326 -0
- package/.agents/skills/e2e-testing/agents/openai.yaml +7 -0
- package/.agents/skills/eval-harness/SKILL.md +236 -0
- package/.agents/skills/eval-harness/agents/openai.yaml +7 -0
- package/.agents/skills/everything-claude-code/SKILL.md +442 -0
- package/.agents/skills/everything-claude-code/agents/openai.yaml +6 -0
- package/.agents/skills/exa-search/SKILL.md +170 -0
- package/.agents/skills/exa-search/agents/openai.yaml +7 -0
- package/.agents/skills/fal-ai-media/SKILL.md +277 -0
- package/.agents/skills/fal-ai-media/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-patterns/SKILL.md +642 -0
- package/.agents/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-slides/SKILL.md +184 -0
- package/.agents/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.agents/skills/frontend-slides/agents/openai.yaml +7 -0
- package/.agents/skills/investor-materials/SKILL.md +96 -0
- package/.agents/skills/investor-materials/agents/openai.yaml +7 -0
- package/.agents/skills/investor-outreach/SKILL.md +76 -0
- package/.agents/skills/investor-outreach/agents/openai.yaml +7 -0
- package/.agents/skills/market-research/SKILL.md +75 -0
- package/.agents/skills/market-research/agents/openai.yaml +7 -0
- package/.agents/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.agents/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.agents/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/.agents/skills/security-review/SKILL.md +495 -0
- package/.agents/skills/security-review/agents/openai.yaml +7 -0
- package/.agents/skills/strategic-compact/SKILL.md +103 -0
- package/.agents/skills/strategic-compact/agents/openai.yaml +7 -0
- package/.agents/skills/tdd-workflow/SKILL.md +410 -0
- package/.agents/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/.agents/skills/verification-loop/SKILL.md +126 -0
- package/.agents/skills/verification-loop/agents/openai.yaml +7 -0
- package/.agents/skills/video-editing/SKILL.md +308 -0
- package/.agents/skills/video-editing/agents/openai.yaml +7 -0
- package/.agents/skills/x-api/SKILL.md +214 -0
- package/.agents/skills/x-api/agents/openai.yaml +7 -0
- package/.claude-plugin/README.md +17 -0
- package/.claude-plugin/plugin.json +24 -0
- package/.codex/AGENTS.md +93 -0
- package/.codex/INSTALL.md +64 -0
- package/.codex/agents/docs-researcher.toml +9 -0
- package/.codex/agents/explorer.toml +9 -0
- package/.codex/agents/reviewer.toml +9 -0
- package/.codex/config.toml +108 -0
- package/.codex/hooks/aw-post-tool-use.sh +5 -0
- package/.codex/hooks/aw-pre-tool-use.sh +5 -0
- package/.codex/hooks/aw-session-start.sh +21 -0
- package/.codex/hooks/aw-stop.sh +5 -0
- package/.codex/hooks/aw-user-prompt-submit.sh +9 -0
- package/.codex/hooks.json +62 -0
- package/.cursor/INSTALL.md +40 -0
- package/.cursor/hooks/adapter.js +120 -0
- package/.cursor/hooks/after-file-edit.js +11 -0
- package/.cursor/hooks/after-mcp-execution.js +11 -0
- package/.cursor/hooks/after-shell-execution.js +11 -0
- package/.cursor/hooks/after-tab-file-edit.js +12 -0
- package/.cursor/hooks/aw-phase-adapter.js +43 -0
- package/.cursor/hooks/before-mcp-execution.js +11 -0
- package/.cursor/hooks/before-read-file.js +13 -0
- package/.cursor/hooks/before-shell-execution.js +11 -0
- package/.cursor/hooks/before-submit-prompt.js +41 -0
- package/.cursor/hooks/before-tab-file-read.js +13 -0
- package/.cursor/hooks/pre-compact.js +11 -0
- package/.cursor/hooks/session-end.js +11 -0
- package/.cursor/hooks/session-start.js +11 -0
- package/.cursor/hooks/shared/aw-phase-definitions.js +190 -0
- package/.cursor/hooks/shared/aw-phase-runner.js +61 -0
- package/.cursor/hooks/shared/session-start.sh +20 -0
- package/.cursor/hooks/shared/user-prompt-submit.sh +155 -0
- package/.cursor/hooks/stop.js +11 -0
- package/.cursor/hooks/subagent-start.js +10 -0
- package/.cursor/hooks/subagent-stop.js +10 -0
- package/.cursor/hooks.json +115 -0
- package/.cursor/rules/common-agents.md +53 -0
- package/.cursor/rules/common-coding-style.md +52 -0
- package/.cursor/rules/common-development-workflow.md +33 -0
- package/.cursor/rules/common-git-workflow.md +28 -0
- package/.cursor/rules/common-hooks.md +34 -0
- package/.cursor/rules/common-patterns.md +35 -0
- package/.cursor/rules/common-performance.md +59 -0
- package/.cursor/rules/common-security.md +33 -0
- package/.cursor/rules/common-testing.md +33 -0
- package/.cursor/rules/golang-coding-style.md +31 -0
- package/.cursor/rules/golang-hooks.md +16 -0
- package/.cursor/rules/golang-patterns.md +44 -0
- package/.cursor/rules/golang-security.md +33 -0
- package/.cursor/rules/golang-testing.md +30 -0
- package/.cursor/rules/kotlin-coding-style.md +39 -0
- package/.cursor/rules/kotlin-hooks.md +16 -0
- package/.cursor/rules/kotlin-patterns.md +50 -0
- package/.cursor/rules/kotlin-security.md +58 -0
- package/.cursor/rules/kotlin-testing.md +38 -0
- package/.cursor/rules/php-coding-style.md +25 -0
- package/.cursor/rules/php-hooks.md +21 -0
- package/.cursor/rules/php-patterns.md +23 -0
- package/.cursor/rules/php-security.md +24 -0
- package/.cursor/rules/php-testing.md +26 -0
- package/.cursor/rules/python-coding-style.md +42 -0
- package/.cursor/rules/python-hooks.md +19 -0
- package/.cursor/rules/python-patterns.md +39 -0
- package/.cursor/rules/python-security.md +30 -0
- package/.cursor/rules/python-testing.md +38 -0
- package/.cursor/rules/swift-coding-style.md +47 -0
- package/.cursor/rules/swift-hooks.md +20 -0
- package/.cursor/rules/swift-patterns.md +66 -0
- package/.cursor/rules/swift-security.md +33 -0
- package/.cursor/rules/swift-testing.md +45 -0
- package/.cursor/rules/typescript-coding-style.md +63 -0
- package/.cursor/rules/typescript-hooks.md +20 -0
- package/.cursor/rules/typescript-patterns.md +50 -0
- package/.cursor/rules/typescript-security.md +26 -0
- package/.cursor/rules/typescript-testing.md +16 -0
- package/.cursor/skills/article-writing/SKILL.md +85 -0
- package/.cursor/skills/bun-runtime/SKILL.md +84 -0
- package/.cursor/skills/content-engine/SKILL.md +88 -0
- package/.cursor/skills/documentation-lookup/SKILL.md +90 -0
- package/.cursor/skills/frontend-slides/SKILL.md +184 -0
- package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.cursor/skills/investor-materials/SKILL.md +96 -0
- package/.cursor/skills/investor-outreach/SKILL.md +76 -0
- package/.cursor/skills/market-research/SKILL.md +75 -0
- package/.cursor/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.cursor/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.opencode/MIGRATION.md +368 -0
- package/.opencode/README.md +204 -0
- package/.opencode/commands/build-fix.md +56 -0
- package/.opencode/commands/checkpoint.md +67 -0
- package/.opencode/commands/code-review.md +68 -0
- package/.opencode/commands/e2e.md +105 -0
- package/.opencode/commands/eval.md +88 -0
- package/.opencode/commands/evolve.md +36 -0
- package/.opencode/commands/go-build.md +87 -0
- package/.opencode/commands/go-review.md +71 -0
- package/.opencode/commands/go-test.md +131 -0
- package/.opencode/commands/harness-audit.md +71 -0
- package/.opencode/commands/instinct-export.md +93 -0
- package/.opencode/commands/instinct-import.md +88 -0
- package/.opencode/commands/instinct-status.md +29 -0
- package/.opencode/commands/learn.md +61 -0
- package/.opencode/commands/loop-start.md +32 -0
- package/.opencode/commands/loop-status.md +24 -0
- package/.opencode/commands/model-route.md +26 -0
- package/.opencode/commands/orchestrate.md +88 -0
- package/.opencode/commands/plan.md +49 -0
- package/.opencode/commands/projects.md +23 -0
- package/.opencode/commands/promote.md +23 -0
- package/.opencode/commands/quality-gate.md +29 -0
- package/.opencode/commands/refactor-clean.md +102 -0
- package/.opencode/commands/rust-build.md +78 -0
- package/.opencode/commands/rust-review.md +65 -0
- package/.opencode/commands/rust-test.md +104 -0
- package/.opencode/commands/security.md +89 -0
- package/.opencode/commands/setup-pm.md +67 -0
- package/.opencode/commands/skill-create.md +117 -0
- package/.opencode/commands/tdd.md +66 -0
- package/.opencode/commands/test-coverage.md +80 -0
- package/.opencode/commands/update-codemaps.md +81 -0
- package/.opencode/commands/update-docs.md +67 -0
- package/.opencode/commands/verify.md +67 -0
- package/.opencode/index.ts +79 -0
- package/.opencode/instructions/INSTRUCTIONS.md +337 -0
- package/.opencode/opencode.json +319 -0
- package/.opencode/package.json +70 -0
- package/.opencode/plugins/ecc-hooks.ts +455 -0
- package/.opencode/plugins/index.ts +12 -0
- package/.opencode/prompts/agents/architect.txt +175 -0
- package/.opencode/prompts/agents/build-error-resolver.txt +233 -0
- package/.opencode/prompts/agents/code-reviewer.txt +103 -0
- package/.opencode/prompts/agents/database-reviewer.txt +247 -0
- package/.opencode/prompts/agents/doc-updater.txt +192 -0
- package/.opencode/prompts/agents/e2e-runner.txt +305 -0
- package/.opencode/prompts/agents/go-build-resolver.txt +325 -0
- package/.opencode/prompts/agents/go-reviewer.txt +241 -0
- package/.opencode/prompts/agents/planner.txt +112 -0
- package/.opencode/prompts/agents/refactor-cleaner.txt +241 -0
- package/.opencode/prompts/agents/rust-build-resolver.txt +93 -0
- package/.opencode/prompts/agents/rust-reviewer.txt +61 -0
- package/.opencode/prompts/agents/security-reviewer.txt +207 -0
- package/.opencode/prompts/agents/tdd-guide.txt +211 -0
- package/.opencode/tools/check-coverage.ts +170 -0
- package/.opencode/tools/format-code.ts +68 -0
- package/.opencode/tools/git-summary.ts +54 -0
- package/.opencode/tools/index.ts +13 -0
- package/.opencode/tools/lint-check.ts +85 -0
- package/.opencode/tools/run-tests.ts +139 -0
- package/.opencode/tools/security-audit.ts +277 -0
- package/.opencode/tsconfig.json +29 -0
- package/AGENTS.md +124 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/README.zh-CN.md +552 -0
- package/agents/architect.md +211 -0
- package/agents/build-error-resolver.md +114 -0
- package/agents/chief-of-staff.md +151 -0
- package/agents/code-reviewer.md +237 -0
- package/agents/cpp-build-resolver.md +90 -0
- package/agents/cpp-reviewer.md +72 -0
- package/agents/database-reviewer.md +91 -0
- package/agents/doc-updater.md +107 -0
- package/agents/docs-lookup.md +68 -0
- package/agents/e2e-runner.md +107 -0
- package/agents/evals/code-reviewer-scenarios.json +23 -0
- package/agents/flutter-reviewer.md +243 -0
- package/agents/go-build-resolver.md +94 -0
- package/agents/go-reviewer.md +76 -0
- package/agents/harness-optimizer.md +35 -0
- package/agents/java-build-resolver.md +153 -0
- package/agents/java-reviewer.md +92 -0
- package/agents/kotlin-build-resolver.md +118 -0
- package/agents/kotlin-reviewer.md +159 -0
- package/agents/loop-operator.md +36 -0
- package/agents/planner.md +212 -0
- package/agents/python-reviewer.md +98 -0
- package/agents/pytorch-build-resolver.md +120 -0
- package/agents/refactor-cleaner.md +85 -0
- package/agents/rust-build-resolver.md +148 -0
- package/agents/rust-reviewer.md +94 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/tdd-guide.md +91 -0
- package/agents/typescript-reviewer.md +112 -0
- package/commands/aside.md +164 -0
- package/commands/brainstorm.md +16 -0
- package/commands/build-fix.md +70 -0
- package/commands/build.md +91 -0
- package/commands/checkpoint.md +74 -0
- package/commands/claw.md +51 -0
- package/commands/code-review.md +24 -0
- package/commands/context-budget.md +29 -0
- package/commands/cpp-build.md +174 -0
- package/commands/cpp-review.md +132 -0
- package/commands/cpp-test.md +252 -0
- package/commands/deploy.md +75 -0
- package/commands/devfleet.md +92 -0
- package/commands/docs.md +31 -0
- package/commands/e2e.md +373 -0
- package/commands/eval.md +120 -0
- package/commands/evolve.md +178 -0
- package/commands/execute.md +51 -0
- package/commands/finish.md +22 -0
- package/commands/go-build.md +184 -0
- package/commands/go-review.md +148 -0
- package/commands/go-test.md +269 -0
- package/commands/gradle-build.md +70 -0
- package/commands/harness-audit.md +71 -0
- package/commands/instinct-export.md +66 -0
- package/commands/instinct-import.md +114 -0
- package/commands/instinct-status.md +59 -0
- package/commands/investigate.md +63 -0
- package/commands/kotlin-build.md +175 -0
- package/commands/kotlin-review.md +140 -0
- package/commands/kotlin-test.md +313 -0
- package/commands/learn-eval.md +116 -0
- package/commands/learn.md +70 -0
- package/commands/loop-start.md +32 -0
- package/commands/loop-status.md +24 -0
- package/commands/model-route.md +26 -0
- package/commands/multi-backend.md +166 -0
- package/commands/multi-execute.md +324 -0
- package/commands/multi-frontend.md +165 -0
- package/commands/multi-plan.md +277 -0
- package/commands/multi-workflow.md +200 -0
- package/commands/orchestrate.md +240 -0
- package/commands/plan.md +130 -0
- package/commands/pm2.md +272 -0
- package/commands/projects.md +39 -0
- package/commands/promote.md +41 -0
- package/commands/prompt-optimize.md +38 -0
- package/commands/prune.md +31 -0
- package/commands/python-review.md +297 -0
- package/commands/quality-gate.md +29 -0
- package/commands/refactor-clean.md +89 -0
- package/commands/resume-session.md +155 -0
- package/commands/review.md +64 -0
- package/commands/rules-distill.md +11 -0
- package/commands/rust-build.md +188 -0
- package/commands/rust-review.md +142 -0
- package/commands/rust-test.md +309 -0
- package/commands/save-session.md +275 -0
- package/commands/sessions.md +333 -0
- package/commands/setup-pm.md +80 -0
- package/commands/ship.md +77 -0
- package/commands/skill-create.md +174 -0
- package/commands/skill-health.md +54 -0
- package/commands/tdd.md +20 -0
- package/commands/test-coverage.md +77 -0
- package/commands/test.md +64 -0
- package/commands/update-codemaps.md +72 -0
- package/commands/update-docs.md +84 -0
- package/commands/verify.md +55 -0
- package/contexts/dev.md +20 -0
- package/contexts/research.md +26 -0
- package/contexts/review.md +22 -0
- package/examples/CLAUDE.md +100 -0
- package/examples/statusline.json +19 -0
- package/examples/user-CLAUDE.md +109 -0
- package/hooks/README.md +219 -0
- package/hooks/hooks.json +320 -0
- package/hooks/run-hook.cmd +31 -0
- package/hooks/session-start +6 -0
- package/install.ps1 +38 -0
- package/install.sh +17 -0
- package/manifests/install-components.json +415 -0
- package/manifests/install-modules.json +500 -0
- package/manifests/install-profiles.json +80 -0
- package/mcp-configs/mcp-servers.json +153 -0
- package/package.json +131 -0
- package/plugins/README.md +85 -0
- package/rules/README.md +106 -0
- package/rules/common/agents.md +50 -0
- package/rules/common/coding-style.md +48 -0
- package/rules/common/development-workflow.md +38 -0
- package/rules/common/git-workflow.md +24 -0
- package/rules/common/hooks.md +30 -0
- package/rules/common/patterns.md +31 -0
- package/rules/common/performance.md +55 -0
- package/rules/common/security.md +29 -0
- package/rules/common/testing.md +29 -0
- package/rules/cpp/coding-style.md +44 -0
- package/rules/cpp/hooks.md +39 -0
- package/rules/cpp/patterns.md +51 -0
- package/rules/cpp/security.md +51 -0
- package/rules/cpp/testing.md +44 -0
- package/rules/csharp/coding-style.md +72 -0
- package/rules/csharp/hooks.md +25 -0
- package/rules/csharp/patterns.md +50 -0
- package/rules/csharp/security.md +58 -0
- package/rules/csharp/testing.md +46 -0
- package/rules/golang/coding-style.md +32 -0
- package/rules/golang/hooks.md +17 -0
- package/rules/golang/patterns.md +45 -0
- package/rules/golang/security.md +34 -0
- package/rules/golang/testing.md +31 -0
- package/rules/java/coding-style.md +114 -0
- package/rules/java/hooks.md +18 -0
- package/rules/java/patterns.md +146 -0
- package/rules/java/security.md +100 -0
- package/rules/java/testing.md +131 -0
- package/rules/kotlin/coding-style.md +86 -0
- package/rules/kotlin/hooks.md +17 -0
- package/rules/kotlin/patterns.md +146 -0
- package/rules/kotlin/security.md +82 -0
- package/rules/kotlin/testing.md +128 -0
- package/rules/perl/coding-style.md +46 -0
- package/rules/perl/hooks.md +22 -0
- package/rules/perl/patterns.md +76 -0
- package/rules/perl/security.md +69 -0
- package/rules/perl/testing.md +54 -0
- package/rules/php/coding-style.md +40 -0
- package/rules/php/hooks.md +24 -0
- package/rules/php/patterns.md +33 -0
- package/rules/php/security.md +37 -0
- package/rules/php/testing.md +39 -0
- package/rules/python/coding-style.md +42 -0
- package/rules/python/hooks.md +19 -0
- package/rules/python/patterns.md +39 -0
- package/rules/python/security.md +30 -0
- package/rules/python/testing.md +38 -0
- package/rules/rust/coding-style.md +151 -0
- package/rules/rust/hooks.md +16 -0
- package/rules/rust/patterns.md +168 -0
- package/rules/rust/security.md +141 -0
- package/rules/rust/testing.md +154 -0
- package/rules/swift/coding-style.md +47 -0
- package/rules/swift/hooks.md +20 -0
- package/rules/swift/patterns.md +66 -0
- package/rules/swift/security.md +33 -0
- package/rules/swift/testing.md +45 -0
- package/rules/typescript/coding-style.md +199 -0
- package/rules/typescript/hooks.md +22 -0
- package/rules/typescript/patterns.md +52 -0
- package/rules/typescript/security.md +28 -0
- package/rules/typescript/testing.md +18 -0
- package/schemas/ecc-install-config.schema.json +58 -0
- package/schemas/hooks.schema.json +197 -0
- package/schemas/install-components.schema.json +58 -0
- package/schemas/install-modules.schema.json +105 -0
- package/schemas/install-profiles.schema.json +45 -0
- package/schemas/install-state.schema.json +210 -0
- package/schemas/package-manager.schema.json +23 -0
- package/schemas/plugin.schema.json +58 -0
- package/schemas/provenance.schema.json +31 -0
- package/schemas/state-store.schema.json +316 -0
- package/scripts/ci/catalog.js +245 -0
- package/scripts/ci/validate-agents.js +81 -0
- package/scripts/ci/validate-commands.js +136 -0
- package/scripts/ci/validate-hooks.js +239 -0
- package/scripts/ci/validate-install-manifests.js +214 -0
- package/scripts/ci/validate-no-personal-paths.js +63 -0
- package/scripts/ci/validate-rules.js +81 -0
- package/scripts/ci/validate-skills.js +56 -0
- package/scripts/claw.js +473 -0
- package/scripts/codex/merge-mcp-config.js +304 -0
- package/scripts/cursor-aw-home/hooks.json +115 -0
- package/scripts/cursor-aw-hooks/adapter.js +120 -0
- package/scripts/cursor-aw-hooks/after-file-edit.js +11 -0
- package/scripts/cursor-aw-hooks/after-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/after-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/aw-phase-adapter.js +43 -0
- package/scripts/cursor-aw-hooks/before-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-submit-prompt.js +41 -0
- package/scripts/cursor-aw-hooks/pre-compact.js +11 -0
- package/scripts/cursor-aw-hooks/session-end.js +11 -0
- package/scripts/cursor-aw-hooks/session-start.js +11 -0
- package/scripts/cursor-aw-hooks/stop.js +11 -0
- package/scripts/doctor.js +110 -0
- package/scripts/ecc.js +208 -0
- package/scripts/generate-aw-hooks.js +110 -0
- package/scripts/harness-audit.js +512 -0
- package/scripts/hooks/auto-tmux-dev.js +88 -0
- package/scripts/hooks/check-console-log.js +71 -0
- package/scripts/hooks/check-hook-enabled.js +12 -0
- package/scripts/hooks/config-protection.js +125 -0
- package/scripts/hooks/cost-tracker.js +78 -0
- package/scripts/hooks/doc-file-warning.js +63 -0
- package/scripts/hooks/evaluate-session.js +100 -0
- package/scripts/hooks/governance-capture.js +280 -0
- package/scripts/hooks/insaits-security-monitor.py +269 -0
- package/scripts/hooks/insaits-security-wrapper.js +88 -0
- package/scripts/hooks/mcp-health-check.js +588 -0
- package/scripts/hooks/post-bash-build-complete.js +27 -0
- package/scripts/hooks/post-bash-pr-created.js +37 -0
- package/scripts/hooks/post-edit-console-warn.js +54 -0
- package/scripts/hooks/post-edit-format.js +109 -0
- package/scripts/hooks/post-edit-typecheck.js +96 -0
- package/scripts/hooks/post-mcp-log.js +27 -0
- package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
- package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
- package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
- package/scripts/hooks/pre-compact.js +48 -0
- package/scripts/hooks/pre-mcp-log.js +26 -0
- package/scripts/hooks/pre-write-doc-warn.js +9 -0
- package/scripts/hooks/quality-gate.js +168 -0
- package/scripts/hooks/run-with-flags-shell.sh +32 -0
- package/scripts/hooks/run-with-flags.js +120 -0
- package/scripts/hooks/session-end-marker.js +29 -0
- package/scripts/hooks/session-end.js +301 -0
- package/scripts/hooks/session-start-rules-context.sh +5 -0
- package/scripts/hooks/session-start.js +98 -0
- package/scripts/hooks/shared/aw-phase-definitions.js +190 -0
- package/scripts/hooks/shared/aw-phase-runner.js +61 -0
- package/scripts/hooks/shared/session-start.sh +20 -0
- package/scripts/hooks/shared/user-prompt-submit.sh +155 -0
- package/scripts/hooks/suggest-compact.js +80 -0
- package/scripts/install-apply.js +140 -0
- package/scripts/install-plan.js +254 -0
- package/scripts/lib/agent-compress.js +244 -0
- package/scripts/lib/aw-harness-registry.js +122 -0
- package/scripts/lib/aw-hook-contract.js +86 -0
- package/scripts/lib/claude-aw-hook-files.js +28 -0
- package/scripts/lib/claude-hook-config.js +76 -0
- package/scripts/lib/codex-aw-hook-files.js +38 -0
- package/scripts/lib/codex-hook-config.js +88 -0
- package/scripts/lib/cursor-aw-hook-files.js +62 -0
- package/scripts/lib/cursor-hook-config.js +148 -0
- package/scripts/lib/hook-flags.js +74 -0
- package/scripts/lib/inspection.js +212 -0
- package/scripts/lib/install/apply.js +23 -0
- package/scripts/lib/install/config.js +82 -0
- package/scripts/lib/install/request.js +120 -0
- package/scripts/lib/install/runtime.js +54 -0
- package/scripts/lib/install-executor.js +778 -0
- package/scripts/lib/install-lifecycle.js +1311 -0
- package/scripts/lib/install-manifests.js +448 -0
- package/scripts/lib/install-state.js +313 -0
- package/scripts/lib/install-targets/antigravity-project.js +69 -0
- package/scripts/lib/install-targets/claude-home.js +54 -0
- package/scripts/lib/install-targets/codex-home.js +62 -0
- package/scripts/lib/install-targets/cursor-project.js +80 -0
- package/scripts/lib/install-targets/helpers.js +307 -0
- package/scripts/lib/install-targets/opencode-home.js +10 -0
- package/scripts/lib/install-targets/registry.js +66 -0
- package/scripts/lib/orchestration-session.js +299 -0
- package/scripts/lib/package-manager.d.ts +119 -0
- package/scripts/lib/package-manager.js +431 -0
- package/scripts/lib/project-detect.js +428 -0
- package/scripts/lib/resolve-ecc-root.js +89 -0
- package/scripts/lib/resolve-formatter.js +185 -0
- package/scripts/lib/session-adapters/canonical-session.js +531 -0
- package/scripts/lib/session-adapters/claude-history.js +160 -0
- package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
- package/scripts/lib/session-adapters/registry.js +127 -0
- package/scripts/lib/session-aliases.d.ts +136 -0
- package/scripts/lib/session-aliases.js +481 -0
- package/scripts/lib/session-manager.d.ts +131 -0
- package/scripts/lib/session-manager.js +464 -0
- package/scripts/lib/shell-split.js +86 -0
- package/scripts/lib/skill-evolution/dashboard.js +401 -0
- package/scripts/lib/skill-evolution/health.js +263 -0
- package/scripts/lib/skill-evolution/index.js +20 -0
- package/scripts/lib/skill-evolution/provenance.js +187 -0
- package/scripts/lib/skill-evolution/tracker.js +146 -0
- package/scripts/lib/skill-evolution/versioning.js +237 -0
- package/scripts/lib/skill-improvement/amendify.js +89 -0
- package/scripts/lib/skill-improvement/evaluate.js +59 -0
- package/scripts/lib/skill-improvement/health.js +118 -0
- package/scripts/lib/skill-improvement/observations.js +108 -0
- package/scripts/lib/state-store/index.js +191 -0
- package/scripts/lib/state-store/migrations.js +178 -0
- package/scripts/lib/state-store/queries.js +697 -0
- package/scripts/lib/state-store/schema.js +92 -0
- package/scripts/lib/tmux-worktree-orchestrator.js +475 -0
- package/scripts/lib/utils.d.ts +183 -0
- package/scripts/lib/utils.js +564 -0
- package/scripts/list-installed.js +90 -0
- package/scripts/orchestrate-codex-worker.sh +107 -0
- package/scripts/orchestrate-worktrees.js +40 -0
- package/scripts/orchestration-status.js +82 -0
- package/scripts/repair.js +97 -0
- package/scripts/session-inspect.js +150 -0
- package/scripts/sessions-cli.js +177 -0
- package/scripts/setup-package-manager.js +204 -0
- package/scripts/skill-create-output.js +244 -0
- package/scripts/status.js +176 -0
- package/scripts/uninstall.js +96 -0
- package/skills/agent-eval/SKILL.md +145 -0
- package/skills/agent-harness-construction/SKILL.md +73 -0
- package/skills/agentic-engineering/SKILL.md +63 -0
- package/skills/ai-first-engineering/SKILL.md +51 -0
- package/skills/ai-regression-testing/SKILL.md +385 -0
- package/skills/android-clean-architecture/SKILL.md +339 -0
- package/skills/api-and-interface-design/SKILL.md +75 -0
- package/skills/api-design/SKILL.md +523 -0
- package/skills/architecture-decision-records/SKILL.md +179 -0
- package/skills/article-writing/SKILL.md +85 -0
- package/skills/autonomous-loops/SKILL.md +610 -0
- package/skills/aw-brainstorm/SKILL.md +115 -0
- package/skills/aw-build/SKILL.md +189 -0
- package/skills/aw-build/evals/build-stage-cases.json +28 -0
- package/skills/aw-debug/SKILL.md +49 -0
- package/skills/aw-deploy/SKILL.md +101 -0
- package/skills/aw-deploy/evals/deploy-stage-cases.json +32 -0
- package/skills/aw-execute/SKILL.md +47 -0
- package/skills/aw-execute/references/mode-code.md +47 -0
- package/skills/aw-execute/references/mode-docs.md +28 -0
- package/skills/aw-execute/references/mode-infra.md +44 -0
- package/skills/aw-execute/references/mode-migration.md +58 -0
- package/skills/aw-execute/references/worker-implementer.md +26 -0
- package/skills/aw-execute/references/worker-parallel-worker.md +23 -0
- package/skills/aw-execute/references/worker-quality-reviewer.md +23 -0
- package/skills/aw-execute/references/worker-spec-reviewer.md +23 -0
- package/skills/aw-execute/scripts/build-worker-bundle.js +229 -0
- package/skills/aw-finish/SKILL.md +111 -0
- package/skills/aw-investigate/SKILL.md +109 -0
- package/skills/aw-plan/SKILL.md +399 -0
- package/skills/aw-prepare/SKILL.md +118 -0
- package/skills/aw-review/SKILL.md +123 -0
- package/skills/aw-rules/SKILL.md +129 -0
- package/skills/aw-rules/references/known-hallucinations.md +43 -0
- package/skills/aw-rules/references/verification-sources.md +50 -0
- package/skills/aw-ship/SKILL.md +115 -0
- package/skills/aw-spec/SKILL.md +128 -0
- package/skills/aw-tasks/SKILL.md +155 -0
- package/skills/aw-test/SKILL.md +118 -0
- package/skills/aw-verify/SKILL.md +51 -0
- package/skills/aw-yolo/SKILL.md +111 -0
- package/skills/backend-patterns/SKILL.md +598 -0
- package/skills/benchmark/SKILL.md +87 -0
- package/skills/blueprint/SKILL.md +105 -0
- package/skills/browser-qa/SKILL.md +81 -0
- package/skills/browser-testing-with-devtools/SKILL.md +81 -0
- package/skills/bun-runtime/SKILL.md +84 -0
- package/skills/canary-watch/SKILL.md +93 -0
- package/skills/carrier-relationship-management/SKILL.md +212 -0
- package/skills/ci-cd-and-automation/SKILL.md +71 -0
- package/skills/claude-api/SKILL.md +337 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +439 -0
- package/skills/code-simplification/SKILL.md +74 -0
- package/skills/codebase-onboarding/SKILL.md +233 -0
- package/skills/coding-standards/SKILL.md +530 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/skills/configure-ecc/SKILL.md +367 -0
- package/skills/content-engine/SKILL.md +88 -0
- package/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/skills/context-budget/SKILL.md +135 -0
- package/skills/context-engineering/SKILL.md +74 -0
- package/skills/continuous-agent-loop/SKILL.md +45 -0
- package/skills/continuous-learning/SKILL.md +119 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +365 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +191 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +240 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +412 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/cpp-coding-standards/SKILL.md +723 -0
- package/skills/cpp-testing/SKILL.md +324 -0
- package/skills/crosspost/SKILL.md +190 -0
- package/skills/customs-trade-compliance/SKILL.md +263 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +429 -0
- package/skills/deep-research/SKILL.md +155 -0
- package/skills/deployment-patterns/SKILL.md +427 -0
- package/skills/deprecation-and-migration/SKILL.md +75 -0
- package/skills/design-system/SKILL.md +76 -0
- package/skills/django-patterns/SKILL.md +734 -0
- package/skills/django-security/SKILL.md +593 -0
- package/skills/django-tdd/SKILL.md +729 -0
- package/skills/django-verification/SKILL.md +469 -0
- package/skills/dmux-workflows/SKILL.md +191 -0
- package/skills/docker-patterns/SKILL.md +364 -0
- package/skills/documentation-and-adrs/SKILL.md +75 -0
- package/skills/documentation-lookup/SKILL.md +90 -0
- package/skills/e2e-testing/SKILL.md +326 -0
- package/skills/energy-procurement/SKILL.md +228 -0
- package/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/skills/eval-harness/SKILL.md +270 -0
- package/skills/exa-search/SKILL.md +103 -0
- package/skills/fal-ai-media/SKILL.md +284 -0
- package/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-patterns/SKILL.md +642 -0
- package/skills/frontend-slides/SKILL.md +184 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-ui-engineering/SKILL.md +68 -0
- package/skills/git-workflow-and-versioning/SKILL.md +75 -0
- package/skills/golang-patterns/SKILL.md +674 -0
- package/skills/golang-testing/SKILL.md +720 -0
- package/skills/idea-refine/SKILL.md +84 -0
- package/skills/incremental-implementation/SKILL.md +86 -0
- package/skills/inventory-demand-planning/SKILL.md +247 -0
- package/skills/investor-materials/SKILL.md +96 -0
- package/skills/investor-outreach/SKILL.md +76 -0
- package/skills/iterative-retrieval/SKILL.md +211 -0
- package/skills/java-coding-standards/SKILL.md +147 -0
- package/skills/jpa-patterns/SKILL.md +151 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/skills/kotlin-patterns/SKILL.md +711 -0
- package/skills/kotlin-testing/SKILL.md +824 -0
- package/skills/laravel-patterns/SKILL.md +415 -0
- package/skills/laravel-security/SKILL.md +285 -0
- package/skills/laravel-tdd/SKILL.md +283 -0
- package/skills/laravel-verification/SKILL.md +179 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/logistics-exception-management/SKILL.md +222 -0
- package/skills/market-research/SKILL.md +75 -0
- package/skills/mcp-server-patterns/SKILL.md +67 -0
- package/skills/nanoclaw-repl/SKILL.md +33 -0
- package/skills/nextjs-turbopack/SKILL.md +44 -0
- package/skills/nutrient-document-processing/SKILL.md +167 -0
- package/skills/nuxt4-patterns/SKILL.md +100 -0
- package/skills/performance-optimization/SKILL.md +77 -0
- package/skills/perl-patterns/SKILL.md +504 -0
- package/skills/perl-security/SKILL.md +503 -0
- package/skills/perl-testing/SKILL.md +475 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +147 -0
- package/skills/product-lens/SKILL.md +79 -0
- package/skills/production-scheduling/SKILL.md +238 -0
- package/skills/project-guidelines-example/SKILL.md +349 -0
- package/skills/prompt-optimizer/SKILL.md +397 -0
- package/skills/python-patterns/SKILL.md +750 -0
- package/skills/python-testing/SKILL.md +816 -0
- package/skills/pytorch-patterns/SKILL.md +396 -0
- package/skills/quality-nonconformance/SKILL.md +260 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/skills/rules-distill/SKILL.md +264 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +499 -0
- package/skills/rust-testing/SKILL.md +500 -0
- package/skills/safety-guard/SKILL.md +69 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/search-first/SKILL.md +161 -0
- package/skills/security-and-hardening/SKILL.md +70 -0
- package/skills/security-review/SKILL.md +495 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/security-scan/SKILL.md +165 -0
- package/skills/skill-comply/SKILL.md +58 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +122 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +161 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +137 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-quality-review/SKILL.md +102 -0
- package/skills/skill-quality-review/references/review-rubric.md +112 -0
- package/skills/skill-stocktake/SKILL.md +197 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/springboot-patterns/SKILL.md +314 -0
- package/skills/springboot-security/SKILL.md +272 -0
- package/skills/springboot-tdd/SKILL.md +158 -0
- package/skills/springboot-verification/SKILL.md +231 -0
- package/skills/strategic-compact/SKILL.md +131 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +143 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +145 -0
- package/skills/team-builder/SKILL.md +161 -0
- package/skills/using-aw-skills/SKILL.md +290 -0
- package/skills/using-aw-skills/evals/skill-trigger-cases.tsv +25 -0
- package/skills/using-aw-skills/evals/test-skill-triggers.sh +171 -0
- package/skills/using-aw-skills/hooks/hooks.json +9 -0
- package/skills/using-aw-skills/hooks/session-start.sh +188 -0
- package/skills/using-platform-skills/SKILL.md +163 -0
- package/skills/using-platform-skills/evals/platform-selection-cases.json +52 -0
- package/skills/verification-loop/SKILL.md +126 -0
- package/skills/video-editing/SKILL.md +310 -0
- package/skills/videodb/SKILL.md +374 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/x-api/SKILL.md +208 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "ECC coding style: immutability, file organization, error handling, validation"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Coding Style
|
|
6
|
+
|
|
7
|
+
## Immutability (CRITICAL)
|
|
8
|
+
|
|
9
|
+
ALWAYS create new objects, NEVER mutate existing ones:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
// Pseudocode
|
|
13
|
+
WRONG: modify(original, field, value) → changes original in-place
|
|
14
|
+
CORRECT: update(original, field, value) → returns new copy with change
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Rationale: Immutable data prevents hidden side effects, makes debugging easier, and enables safe concurrency.
|
|
18
|
+
|
|
19
|
+
## File Organization
|
|
20
|
+
|
|
21
|
+
MANY SMALL FILES > FEW LARGE FILES:
|
|
22
|
+
- High cohesion, low coupling
|
|
23
|
+
- 200-400 lines typical, 800 max
|
|
24
|
+
- Extract utilities from large modules
|
|
25
|
+
- Organize by feature/domain, not by type
|
|
26
|
+
|
|
27
|
+
## Error Handling
|
|
28
|
+
|
|
29
|
+
ALWAYS handle errors comprehensively:
|
|
30
|
+
- Handle errors explicitly at every level
|
|
31
|
+
- Provide user-friendly error messages in UI-facing code
|
|
32
|
+
- Log detailed error context on the server side
|
|
33
|
+
- Never silently swallow errors
|
|
34
|
+
|
|
35
|
+
## Input Validation
|
|
36
|
+
|
|
37
|
+
ALWAYS validate at system boundaries:
|
|
38
|
+
- Validate all user input before processing
|
|
39
|
+
- Use schema-based validation where available
|
|
40
|
+
- Fail fast with clear error messages
|
|
41
|
+
- Never trust external data (API responses, user input, file content)
|
|
42
|
+
|
|
43
|
+
## Code Quality Checklist
|
|
44
|
+
|
|
45
|
+
Before marking work complete:
|
|
46
|
+
- [ ] Code is readable and well-named
|
|
47
|
+
- [ ] Functions are small (<50 lines)
|
|
48
|
+
- [ ] Files are focused (<800 lines)
|
|
49
|
+
- [ ] No deep nesting (>4 levels)
|
|
50
|
+
- [ ] Proper error handling
|
|
51
|
+
- [ ] No hardcoded values (use constants or config)
|
|
52
|
+
- [ ] No mutation (immutable patterns used)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Development workflow: plan, TDD, review, commit pipeline"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Development Workflow
|
|
6
|
+
|
|
7
|
+
> This rule extends the git workflow rule with the full feature development process that happens before git operations.
|
|
8
|
+
|
|
9
|
+
The Feature Implementation Workflow describes the development pipeline: planning, TDD, code review, and then committing to git.
|
|
10
|
+
|
|
11
|
+
## Feature Implementation Workflow
|
|
12
|
+
|
|
13
|
+
1. **Plan First**
|
|
14
|
+
- Use **planner** agent to create implementation plan
|
|
15
|
+
- Identify dependencies and risks
|
|
16
|
+
- Break down into phases
|
|
17
|
+
|
|
18
|
+
2. **TDD Approach**
|
|
19
|
+
- Use **tdd-guide** agent
|
|
20
|
+
- Write tests first (RED)
|
|
21
|
+
- Implement to pass tests (GREEN)
|
|
22
|
+
- Refactor (IMPROVE)
|
|
23
|
+
- Verify 80%+ coverage
|
|
24
|
+
|
|
25
|
+
3. **Code Review**
|
|
26
|
+
- Use **code-reviewer** agent immediately after writing code
|
|
27
|
+
- Address CRITICAL and HIGH issues
|
|
28
|
+
- Fix MEDIUM issues when possible
|
|
29
|
+
|
|
30
|
+
4. **Commit & Push**
|
|
31
|
+
- Detailed commit messages
|
|
32
|
+
- Follow conventional commits format
|
|
33
|
+
- See the git workflow rule for commit message format and PR process
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Git workflow: conventional commits, PR process"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Git Workflow
|
|
6
|
+
|
|
7
|
+
## Commit Message Format
|
|
8
|
+
```
|
|
9
|
+
<type>: <description>
|
|
10
|
+
|
|
11
|
+
<optional body>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Types: feat, fix, refactor, docs, test, chore, perf, ci
|
|
15
|
+
|
|
16
|
+
Note: Attribution disabled globally via ~/.claude/settings.json.
|
|
17
|
+
|
|
18
|
+
## Pull Request Workflow
|
|
19
|
+
|
|
20
|
+
When creating PRs:
|
|
21
|
+
1. Analyze full commit history (not just latest commit)
|
|
22
|
+
2. Use `git diff [base-branch]...HEAD` to see all changes
|
|
23
|
+
3. Draft comprehensive PR summary
|
|
24
|
+
4. Include test plan with TODOs
|
|
25
|
+
5. Push with `-u` flag if new branch
|
|
26
|
+
|
|
27
|
+
> For the full development process (planning, TDD, code review) before git operations,
|
|
28
|
+
> see the development workflow rule.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Hooks system: types, auto-accept permissions, TodoWrite best practices"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Hooks System
|
|
6
|
+
|
|
7
|
+
## Hook Types
|
|
8
|
+
|
|
9
|
+
- **PreToolUse**: Before tool execution (validation, parameter modification)
|
|
10
|
+
- **PostToolUse**: After tool execution (auto-format, checks)
|
|
11
|
+
- **Stop**: When session ends (final verification)
|
|
12
|
+
|
|
13
|
+
## Auto-Accept Permissions
|
|
14
|
+
|
|
15
|
+
Use with caution:
|
|
16
|
+
- Enable for trusted, well-defined plans
|
|
17
|
+
- Disable for exploratory work
|
|
18
|
+
- Never use dangerously-skip-permissions flag
|
|
19
|
+
- Configure `allowedTools` in `~/.claude.json` instead
|
|
20
|
+
|
|
21
|
+
## TodoWrite Best Practices
|
|
22
|
+
|
|
23
|
+
Use TodoWrite tool to:
|
|
24
|
+
- Track progress on multi-step tasks
|
|
25
|
+
- Verify understanding of instructions
|
|
26
|
+
- Enable real-time steering
|
|
27
|
+
- Show granular implementation steps
|
|
28
|
+
|
|
29
|
+
Todo list reveals:
|
|
30
|
+
- Out of order steps
|
|
31
|
+
- Missing items
|
|
32
|
+
- Extra unnecessary items
|
|
33
|
+
- Wrong granularity
|
|
34
|
+
- Misinterpreted requirements
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Common patterns: repository, API response, skeleton projects"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Common Patterns
|
|
6
|
+
|
|
7
|
+
## Skeleton Projects
|
|
8
|
+
|
|
9
|
+
When implementing new functionality:
|
|
10
|
+
1. Search for battle-tested skeleton projects
|
|
11
|
+
2. Use parallel agents to evaluate options:
|
|
12
|
+
- Security assessment
|
|
13
|
+
- Extensibility analysis
|
|
14
|
+
- Relevance scoring
|
|
15
|
+
- Implementation planning
|
|
16
|
+
3. Clone best match as foundation
|
|
17
|
+
4. Iterate within proven structure
|
|
18
|
+
|
|
19
|
+
## Design Patterns
|
|
20
|
+
|
|
21
|
+
### Repository Pattern
|
|
22
|
+
|
|
23
|
+
Encapsulate data access behind a consistent interface:
|
|
24
|
+
- Define standard operations: findAll, findById, create, update, delete
|
|
25
|
+
- Concrete implementations handle storage details (database, API, file, etc.)
|
|
26
|
+
- Business logic depends on the abstract interface, not the storage mechanism
|
|
27
|
+
- Enables easy swapping of data sources and simplifies testing with mocks
|
|
28
|
+
|
|
29
|
+
### API Response Format
|
|
30
|
+
|
|
31
|
+
Use a consistent envelope for all API responses:
|
|
32
|
+
- Include a success/status indicator
|
|
33
|
+
- Include the data payload (nullable on error)
|
|
34
|
+
- Include an error message field (nullable on success)
|
|
35
|
+
- Include metadata for paginated responses (total, page, limit)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Performance: model selection, context management, build troubleshooting"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Performance Optimization
|
|
6
|
+
|
|
7
|
+
## Model Selection Strategy
|
|
8
|
+
|
|
9
|
+
**Haiku 4.5** (90% of Sonnet capability, 3x cost savings):
|
|
10
|
+
- Lightweight agents with frequent invocation
|
|
11
|
+
- Pair programming and code generation
|
|
12
|
+
- Worker agents in multi-agent systems
|
|
13
|
+
|
|
14
|
+
**Sonnet 4.6** (Best coding model):
|
|
15
|
+
- Main development work
|
|
16
|
+
- Orchestrating multi-agent workflows
|
|
17
|
+
- Complex coding tasks
|
|
18
|
+
|
|
19
|
+
**Opus 4.5** (Deepest reasoning):
|
|
20
|
+
- Complex architectural decisions
|
|
21
|
+
- Maximum reasoning requirements
|
|
22
|
+
- Research and analysis tasks
|
|
23
|
+
|
|
24
|
+
## Context Window Management
|
|
25
|
+
|
|
26
|
+
Avoid last 20% of context window for:
|
|
27
|
+
- Large-scale refactoring
|
|
28
|
+
- Feature implementation spanning multiple files
|
|
29
|
+
- Debugging complex interactions
|
|
30
|
+
|
|
31
|
+
Lower context sensitivity tasks:
|
|
32
|
+
- Single-file edits
|
|
33
|
+
- Independent utility creation
|
|
34
|
+
- Documentation updates
|
|
35
|
+
- Simple bug fixes
|
|
36
|
+
|
|
37
|
+
## Extended Thinking + Plan Mode
|
|
38
|
+
|
|
39
|
+
Extended thinking is enabled by default, reserving up to 31,999 tokens for internal reasoning.
|
|
40
|
+
|
|
41
|
+
Control extended thinking via:
|
|
42
|
+
- **Toggle**: Option+T (macOS) / Alt+T (Windows/Linux)
|
|
43
|
+
- **Config**: Set `alwaysThinkingEnabled` in `~/.claude/settings.json`
|
|
44
|
+
- **Budget cap**: `export MAX_THINKING_TOKENS=10000`
|
|
45
|
+
- **Verbose mode**: Ctrl+O to see thinking output
|
|
46
|
+
|
|
47
|
+
For complex tasks requiring deep reasoning:
|
|
48
|
+
1. Ensure extended thinking is enabled (on by default)
|
|
49
|
+
2. Enable **Plan Mode** for structured approach
|
|
50
|
+
3. Use multiple critique rounds for thorough analysis
|
|
51
|
+
4. Use split role sub-agents for diverse perspectives
|
|
52
|
+
|
|
53
|
+
## Build Troubleshooting
|
|
54
|
+
|
|
55
|
+
If build fails:
|
|
56
|
+
1. Use **build-error-resolver** agent
|
|
57
|
+
2. Analyze error messages
|
|
58
|
+
3. Fix incrementally
|
|
59
|
+
4. Verify after each fix
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Security: mandatory checks, secret management, response protocol"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Security Guidelines
|
|
6
|
+
|
|
7
|
+
## Mandatory Security Checks
|
|
8
|
+
|
|
9
|
+
Before ANY commit:
|
|
10
|
+
- [ ] No hardcoded secrets (API keys, passwords, tokens)
|
|
11
|
+
- [ ] All user inputs validated
|
|
12
|
+
- [ ] SQL injection prevention (parameterized queries)
|
|
13
|
+
- [ ] XSS prevention (sanitized HTML)
|
|
14
|
+
- [ ] CSRF protection enabled
|
|
15
|
+
- [ ] Authentication/authorization verified
|
|
16
|
+
- [ ] Rate limiting on all endpoints
|
|
17
|
+
- [ ] Error messages don't leak sensitive data
|
|
18
|
+
|
|
19
|
+
## Secret Management
|
|
20
|
+
|
|
21
|
+
- NEVER hardcode secrets in source code
|
|
22
|
+
- ALWAYS use environment variables or a secret manager
|
|
23
|
+
- Validate that required secrets are present at startup
|
|
24
|
+
- Rotate any secrets that may have been exposed
|
|
25
|
+
|
|
26
|
+
## Security Response Protocol
|
|
27
|
+
|
|
28
|
+
If security issue found:
|
|
29
|
+
1. STOP immediately
|
|
30
|
+
2. Use **security-reviewer** agent
|
|
31
|
+
3. Fix CRITICAL issues before continuing
|
|
32
|
+
4. Rotate any exposed secrets
|
|
33
|
+
5. Review entire codebase for similar issues
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Testing requirements: 80% coverage, TDD workflow, test types"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Testing Requirements
|
|
6
|
+
|
|
7
|
+
## Minimum Test Coverage: 80%
|
|
8
|
+
|
|
9
|
+
Test Types (ALL required):
|
|
10
|
+
1. **Unit Tests** - Individual functions, utilities, components
|
|
11
|
+
2. **Integration Tests** - API endpoints, database operations
|
|
12
|
+
3. **E2E Tests** - Critical user flows (framework chosen per language)
|
|
13
|
+
|
|
14
|
+
## Test-Driven Development
|
|
15
|
+
|
|
16
|
+
MANDATORY workflow:
|
|
17
|
+
1. Write test first (RED)
|
|
18
|
+
2. Run test - it should FAIL
|
|
19
|
+
3. Write minimal implementation (GREEN)
|
|
20
|
+
4. Run test - it should PASS
|
|
21
|
+
5. Refactor (IMPROVE)
|
|
22
|
+
6. Verify coverage (80%+)
|
|
23
|
+
|
|
24
|
+
## Troubleshooting Test Failures
|
|
25
|
+
|
|
26
|
+
1. Use **tdd-guide** agent
|
|
27
|
+
2. Check test isolation
|
|
28
|
+
3. Verify mocks are correct
|
|
29
|
+
4. Fix implementation, not tests (unless tests are wrong)
|
|
30
|
+
|
|
31
|
+
## Agent Support
|
|
32
|
+
|
|
33
|
+
- **tdd-guide** - Use PROACTIVELY for new features, enforces write-tests-first
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Go coding style extending common rules"
|
|
3
|
+
globs: ["**/*.go", "**/go.mod", "**/go.sum"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Go Coding Style
|
|
7
|
+
|
|
8
|
+
> This file extends the common coding style rule with Go specific content.
|
|
9
|
+
|
|
10
|
+
## Formatting
|
|
11
|
+
|
|
12
|
+
- **gofmt** and **goimports** are mandatory -- no style debates
|
|
13
|
+
|
|
14
|
+
## Design Principles
|
|
15
|
+
|
|
16
|
+
- Accept interfaces, return structs
|
|
17
|
+
- Keep interfaces small (1-3 methods)
|
|
18
|
+
|
|
19
|
+
## Error Handling
|
|
20
|
+
|
|
21
|
+
Always wrap errors with context:
|
|
22
|
+
|
|
23
|
+
```go
|
|
24
|
+
if err != nil {
|
|
25
|
+
return fmt.Errorf("failed to create user: %w", err)
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Reference
|
|
30
|
+
|
|
31
|
+
See skill: `golang-patterns` for comprehensive Go idioms and patterns.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Go hooks extending common rules"
|
|
3
|
+
globs: ["**/*.go", "**/go.mod", "**/go.sum"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Go Hooks
|
|
7
|
+
|
|
8
|
+
> This file extends the common hooks rule with Go specific content.
|
|
9
|
+
|
|
10
|
+
## PostToolUse Hooks
|
|
11
|
+
|
|
12
|
+
Configure in `~/.claude/settings.json`:
|
|
13
|
+
|
|
14
|
+
- **gofmt/goimports**: Auto-format `.go` files after edit
|
|
15
|
+
- **go vet**: Run static analysis after editing `.go` files
|
|
16
|
+
- **staticcheck**: Run extended static checks on modified packages
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Go patterns extending common rules"
|
|
3
|
+
globs: ["**/*.go", "**/go.mod", "**/go.sum"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Go Patterns
|
|
7
|
+
|
|
8
|
+
> This file extends the common patterns rule with Go specific content.
|
|
9
|
+
|
|
10
|
+
## Functional Options
|
|
11
|
+
|
|
12
|
+
```go
|
|
13
|
+
type Option func(*Server)
|
|
14
|
+
|
|
15
|
+
func WithPort(port int) Option {
|
|
16
|
+
return func(s *Server) { s.port = port }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
func NewServer(opts ...Option) *Server {
|
|
20
|
+
s := &Server{port: 8080}
|
|
21
|
+
for _, opt := range opts {
|
|
22
|
+
opt(s)
|
|
23
|
+
}
|
|
24
|
+
return s
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Small Interfaces
|
|
29
|
+
|
|
30
|
+
Define interfaces where they are used, not where they are implemented.
|
|
31
|
+
|
|
32
|
+
## Dependency Injection
|
|
33
|
+
|
|
34
|
+
Use constructor functions to inject dependencies:
|
|
35
|
+
|
|
36
|
+
```go
|
|
37
|
+
func NewUserService(repo UserRepository, logger Logger) *UserService {
|
|
38
|
+
return &UserService{repo: repo, logger: logger}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Reference
|
|
43
|
+
|
|
44
|
+
See skill: `golang-patterns` for comprehensive Go patterns including concurrency, error handling, and package organization.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Go security extending common rules"
|
|
3
|
+
globs: ["**/*.go", "**/go.mod", "**/go.sum"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Go Security
|
|
7
|
+
|
|
8
|
+
> This file extends the common security rule with Go specific content.
|
|
9
|
+
|
|
10
|
+
## Secret Management
|
|
11
|
+
|
|
12
|
+
```go
|
|
13
|
+
apiKey := os.Getenv("OPENAI_API_KEY")
|
|
14
|
+
if apiKey == "" {
|
|
15
|
+
log.Fatal("OPENAI_API_KEY not configured")
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Security Scanning
|
|
20
|
+
|
|
21
|
+
- Use **gosec** for static security analysis:
|
|
22
|
+
```bash
|
|
23
|
+
gosec ./...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Context & Timeouts
|
|
27
|
+
|
|
28
|
+
Always use `context.Context` for timeout control:
|
|
29
|
+
|
|
30
|
+
```go
|
|
31
|
+
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
|
32
|
+
defer cancel()
|
|
33
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Go testing extending common rules"
|
|
3
|
+
globs: ["**/*.go", "**/go.mod", "**/go.sum"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Go Testing
|
|
7
|
+
|
|
8
|
+
> This file extends the common testing rule with Go specific content.
|
|
9
|
+
|
|
10
|
+
## Framework
|
|
11
|
+
|
|
12
|
+
Use the standard `go test` with **table-driven tests**.
|
|
13
|
+
|
|
14
|
+
## Race Detection
|
|
15
|
+
|
|
16
|
+
Always run with the `-race` flag:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
go test -race ./...
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Coverage
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
go test -cover ./...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Reference
|
|
29
|
+
|
|
30
|
+
See skill: `golang-testing` for detailed Go testing patterns and helpers.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Kotlin coding style extending common rules"
|
|
3
|
+
globs: ["**/*.kt", "**/*.kts", "**/build.gradle.kts"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Kotlin Coding Style
|
|
7
|
+
|
|
8
|
+
> This file extends the common coding style rule with Kotlin-specific content.
|
|
9
|
+
|
|
10
|
+
## Formatting
|
|
11
|
+
|
|
12
|
+
- Auto-formatting via **ktfmt** or **ktlint** (configured in `kotlin-hooks.md`)
|
|
13
|
+
- Use trailing commas in multiline declarations
|
|
14
|
+
|
|
15
|
+
## Immutability
|
|
16
|
+
|
|
17
|
+
The global immutability requirement is enforced in the common coding style rule.
|
|
18
|
+
For Kotlin specifically:
|
|
19
|
+
|
|
20
|
+
- Prefer `val` over `var`
|
|
21
|
+
- Use immutable collection types (`List`, `Map`, `Set`)
|
|
22
|
+
- Use `data class` with `copy()` for immutable updates
|
|
23
|
+
|
|
24
|
+
## Null Safety
|
|
25
|
+
|
|
26
|
+
- Avoid `!!` -- use `?.`, `?:`, `require`, or `checkNotNull`
|
|
27
|
+
- Handle platform types explicitly at Java interop boundaries
|
|
28
|
+
|
|
29
|
+
## Expression Bodies
|
|
30
|
+
|
|
31
|
+
Prefer expression bodies for single-expression functions:
|
|
32
|
+
|
|
33
|
+
```kotlin
|
|
34
|
+
fun isAdult(age: Int): Boolean = age >= 18
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Reference
|
|
38
|
+
|
|
39
|
+
See skill: `kotlin-patterns` for comprehensive Kotlin idioms and patterns.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Kotlin hooks extending common rules"
|
|
3
|
+
globs: ["**/*.kt", "**/*.kts", "**/build.gradle.kts"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Kotlin Hooks
|
|
7
|
+
|
|
8
|
+
> This file extends the common hooks rule with Kotlin-specific content.
|
|
9
|
+
|
|
10
|
+
## PostToolUse Hooks
|
|
11
|
+
|
|
12
|
+
Configure in `~/.claude/settings.json`:
|
|
13
|
+
|
|
14
|
+
- **ktfmt/ktlint**: Auto-format `.kt` and `.kts` files after edit
|
|
15
|
+
- **detekt**: Run static analysis after editing Kotlin files
|
|
16
|
+
- **./gradlew build**: Verify compilation after changes
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Kotlin patterns extending common rules"
|
|
3
|
+
globs: ["**/*.kt", "**/*.kts", "**/build.gradle.kts"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Kotlin Patterns
|
|
7
|
+
|
|
8
|
+
> This file extends the common patterns rule with Kotlin-specific content.
|
|
9
|
+
|
|
10
|
+
## Sealed Classes
|
|
11
|
+
|
|
12
|
+
Use sealed classes/interfaces for exhaustive type hierarchies:
|
|
13
|
+
|
|
14
|
+
```kotlin
|
|
15
|
+
sealed class Result<out T> {
|
|
16
|
+
data class Success<T>(val data: T) : Result<T>()
|
|
17
|
+
data class Failure(val error: AppError) : Result<Nothing>()
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Extension Functions
|
|
22
|
+
|
|
23
|
+
Add behavior without inheritance, scoped to where they're used:
|
|
24
|
+
|
|
25
|
+
```kotlin
|
|
26
|
+
fun String.toSlug(): String =
|
|
27
|
+
lowercase().replace(Regex("[^a-z0-9\\s-]"), "").replace(Regex("\\s+"), "-")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Scope Functions
|
|
31
|
+
|
|
32
|
+
- `let`: Transform nullable or scoped result
|
|
33
|
+
- `apply`: Configure an object
|
|
34
|
+
- `also`: Side effects
|
|
35
|
+
- Avoid nesting scope functions
|
|
36
|
+
|
|
37
|
+
## Dependency Injection
|
|
38
|
+
|
|
39
|
+
Use Koin for DI in Ktor projects:
|
|
40
|
+
|
|
41
|
+
```kotlin
|
|
42
|
+
val appModule = module {
|
|
43
|
+
single<UserRepository> { ExposedUserRepository(get()) }
|
|
44
|
+
single { UserService(get()) }
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Reference
|
|
49
|
+
|
|
50
|
+
See skill: `kotlin-patterns` for comprehensive Kotlin patterns including coroutines, DSL builders, and delegation.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Kotlin security extending common rules"
|
|
3
|
+
globs: ["**/*.kt", "**/*.kts", "**/build.gradle.kts"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Kotlin Security
|
|
7
|
+
|
|
8
|
+
> This file extends the common security rule with Kotlin-specific content.
|
|
9
|
+
|
|
10
|
+
## Secret Management
|
|
11
|
+
|
|
12
|
+
```kotlin
|
|
13
|
+
val apiKey = System.getenv("API_KEY")
|
|
14
|
+
?: throw IllegalStateException("API_KEY not configured")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## SQL Injection Prevention
|
|
18
|
+
|
|
19
|
+
Always use Exposed's parameterized queries:
|
|
20
|
+
|
|
21
|
+
```kotlin
|
|
22
|
+
// Good: Parameterized via Exposed DSL
|
|
23
|
+
UsersTable.selectAll().where { UsersTable.email eq email }
|
|
24
|
+
|
|
25
|
+
// Bad: String interpolation in raw SQL
|
|
26
|
+
exec("SELECT * FROM users WHERE email = '$email'")
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Authentication
|
|
30
|
+
|
|
31
|
+
Use Ktor's Auth plugin with JWT:
|
|
32
|
+
|
|
33
|
+
```kotlin
|
|
34
|
+
install(Authentication) {
|
|
35
|
+
jwt("jwt") {
|
|
36
|
+
verifier(
|
|
37
|
+
JWT.require(Algorithm.HMAC256(secret))
|
|
38
|
+
.withAudience(audience)
|
|
39
|
+
.withIssuer(issuer)
|
|
40
|
+
.build()
|
|
41
|
+
)
|
|
42
|
+
validate { credential ->
|
|
43
|
+
val payload = credential.payload
|
|
44
|
+
if (payload.audience.contains(audience) &&
|
|
45
|
+
payload.issuer == issuer &&
|
|
46
|
+
payload.subject != null) {
|
|
47
|
+
JWTPrincipal(payload)
|
|
48
|
+
} else {
|
|
49
|
+
null
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Null Safety as Security
|
|
57
|
+
|
|
58
|
+
Kotlin's type system prevents null-related vulnerabilities -- avoid `!!` to maintain this guarantee.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Kotlin testing extending common rules"
|
|
3
|
+
globs: ["**/*.kt", "**/*.kts", "**/build.gradle.kts"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Kotlin Testing
|
|
7
|
+
|
|
8
|
+
> This file extends the common testing rule with Kotlin-specific content.
|
|
9
|
+
|
|
10
|
+
## Framework
|
|
11
|
+
|
|
12
|
+
Use **Kotest** with spec styles (StringSpec, FunSpec, BehaviorSpec) and **MockK** for mocking.
|
|
13
|
+
|
|
14
|
+
## Coroutine Testing
|
|
15
|
+
|
|
16
|
+
Use `runTest` from `kotlinx-coroutines-test`:
|
|
17
|
+
|
|
18
|
+
```kotlin
|
|
19
|
+
test("async operation completes") {
|
|
20
|
+
runTest {
|
|
21
|
+
val result = service.fetchData()
|
|
22
|
+
result.shouldNotBeEmpty()
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Coverage
|
|
28
|
+
|
|
29
|
+
Use **Kover** for coverage reporting:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
./gradlew koverHtmlReport
|
|
33
|
+
./gradlew koverVerify
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Reference
|
|
37
|
+
|
|
38
|
+
See skill: `kotlin-testing` for detailed Kotest patterns, MockK usage, and property-based testing.
|