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,364 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docker-patterns
|
|
3
|
+
description: Docker and Docker Compose patterns for local development, container security, networking, volume strategies, and multi-service orchestration.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Docker Patterns
|
|
8
|
+
|
|
9
|
+
Docker and Docker Compose best practices for containerized development.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- Setting up Docker Compose for local development
|
|
14
|
+
- Designing multi-container architectures
|
|
15
|
+
- Troubleshooting container networking or volume issues
|
|
16
|
+
- Reviewing Dockerfiles for security and size
|
|
17
|
+
- Migrating from local dev to containerized workflow
|
|
18
|
+
|
|
19
|
+
## Docker Compose for Local Development
|
|
20
|
+
|
|
21
|
+
### Standard Web App Stack
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
# docker-compose.yml
|
|
25
|
+
services:
|
|
26
|
+
app:
|
|
27
|
+
build:
|
|
28
|
+
context: .
|
|
29
|
+
target: dev # Use dev stage of multi-stage Dockerfile
|
|
30
|
+
ports:
|
|
31
|
+
- "3000:3000"
|
|
32
|
+
volumes:
|
|
33
|
+
- .:/app # Bind mount for hot reload
|
|
34
|
+
- /app/node_modules # Anonymous volume -- preserves container deps
|
|
35
|
+
environment:
|
|
36
|
+
- DATABASE_URL=postgres://postgres:postgres@db:5432/app_dev
|
|
37
|
+
- REDIS_URL=redis://redis:6379/0
|
|
38
|
+
- NODE_ENV=development
|
|
39
|
+
depends_on:
|
|
40
|
+
db:
|
|
41
|
+
condition: service_healthy
|
|
42
|
+
redis:
|
|
43
|
+
condition: service_started
|
|
44
|
+
command: npm run dev
|
|
45
|
+
|
|
46
|
+
db:
|
|
47
|
+
image: postgres:16-alpine
|
|
48
|
+
ports:
|
|
49
|
+
- "5432:5432"
|
|
50
|
+
environment:
|
|
51
|
+
POSTGRES_USER: postgres
|
|
52
|
+
POSTGRES_PASSWORD: postgres
|
|
53
|
+
POSTGRES_DB: app_dev
|
|
54
|
+
volumes:
|
|
55
|
+
- pgdata:/var/lib/postgresql/data
|
|
56
|
+
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql
|
|
57
|
+
healthcheck:
|
|
58
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
59
|
+
interval: 5s
|
|
60
|
+
timeout: 3s
|
|
61
|
+
retries: 5
|
|
62
|
+
|
|
63
|
+
redis:
|
|
64
|
+
image: redis:7-alpine
|
|
65
|
+
ports:
|
|
66
|
+
- "6379:6379"
|
|
67
|
+
volumes:
|
|
68
|
+
- redisdata:/data
|
|
69
|
+
|
|
70
|
+
mailpit: # Local email testing
|
|
71
|
+
image: axllent/mailpit
|
|
72
|
+
ports:
|
|
73
|
+
- "8025:8025" # Web UI
|
|
74
|
+
- "1025:1025" # SMTP
|
|
75
|
+
|
|
76
|
+
volumes:
|
|
77
|
+
pgdata:
|
|
78
|
+
redisdata:
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Development vs Production Dockerfile
|
|
82
|
+
|
|
83
|
+
```dockerfile
|
|
84
|
+
# Stage: dependencies
|
|
85
|
+
FROM node:22-alpine AS deps
|
|
86
|
+
WORKDIR /app
|
|
87
|
+
COPY package.json package-lock.json ./
|
|
88
|
+
RUN npm ci
|
|
89
|
+
|
|
90
|
+
# Stage: dev (hot reload, debug tools)
|
|
91
|
+
FROM node:22-alpine AS dev
|
|
92
|
+
WORKDIR /app
|
|
93
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
94
|
+
COPY . .
|
|
95
|
+
EXPOSE 3000
|
|
96
|
+
CMD ["npm", "run", "dev"]
|
|
97
|
+
|
|
98
|
+
# Stage: build
|
|
99
|
+
FROM node:22-alpine AS build
|
|
100
|
+
WORKDIR /app
|
|
101
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
102
|
+
COPY . .
|
|
103
|
+
RUN npm run build && npm prune --production
|
|
104
|
+
|
|
105
|
+
# Stage: production (minimal image)
|
|
106
|
+
FROM node:22-alpine AS production
|
|
107
|
+
WORKDIR /app
|
|
108
|
+
RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001
|
|
109
|
+
USER appuser
|
|
110
|
+
COPY --from=build --chown=appuser:appgroup /app/dist ./dist
|
|
111
|
+
COPY --from=build --chown=appuser:appgroup /app/node_modules ./node_modules
|
|
112
|
+
COPY --from=build --chown=appuser:appgroup /app/package.json ./
|
|
113
|
+
ENV NODE_ENV=production
|
|
114
|
+
EXPOSE 3000
|
|
115
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/health || exit 1
|
|
116
|
+
CMD ["node", "dist/server.js"]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Override Files
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
# docker-compose.override.yml (auto-loaded, dev-only settings)
|
|
123
|
+
services:
|
|
124
|
+
app:
|
|
125
|
+
environment:
|
|
126
|
+
- DEBUG=app:*
|
|
127
|
+
- LOG_LEVEL=debug
|
|
128
|
+
ports:
|
|
129
|
+
- "9229:9229" # Node.js debugger
|
|
130
|
+
|
|
131
|
+
# docker-compose.prod.yml (explicit for production)
|
|
132
|
+
services:
|
|
133
|
+
app:
|
|
134
|
+
build:
|
|
135
|
+
target: production
|
|
136
|
+
restart: always
|
|
137
|
+
deploy:
|
|
138
|
+
resources:
|
|
139
|
+
limits:
|
|
140
|
+
cpus: "1.0"
|
|
141
|
+
memory: 512M
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# Development (auto-loads override)
|
|
146
|
+
docker compose up
|
|
147
|
+
|
|
148
|
+
# Production
|
|
149
|
+
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Networking
|
|
153
|
+
|
|
154
|
+
### Service Discovery
|
|
155
|
+
|
|
156
|
+
Services in the same Compose network resolve by service name:
|
|
157
|
+
```
|
|
158
|
+
# From "app" container:
|
|
159
|
+
postgres://postgres:postgres@db:5432/app_dev # "db" resolves to the db container
|
|
160
|
+
redis://redis:6379/0 # "redis" resolves to the redis container
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Custom Networks
|
|
164
|
+
|
|
165
|
+
```yaml
|
|
166
|
+
services:
|
|
167
|
+
frontend:
|
|
168
|
+
networks:
|
|
169
|
+
- frontend-net
|
|
170
|
+
|
|
171
|
+
api:
|
|
172
|
+
networks:
|
|
173
|
+
- frontend-net
|
|
174
|
+
- backend-net
|
|
175
|
+
|
|
176
|
+
db:
|
|
177
|
+
networks:
|
|
178
|
+
- backend-net # Only reachable from api, not frontend
|
|
179
|
+
|
|
180
|
+
networks:
|
|
181
|
+
frontend-net:
|
|
182
|
+
backend-net:
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Exposing Only What's Needed
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
services:
|
|
189
|
+
db:
|
|
190
|
+
ports:
|
|
191
|
+
- "127.0.0.1:5432:5432" # Only accessible from host, not network
|
|
192
|
+
# Omit ports entirely in production -- accessible only within Docker network
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Volume Strategies
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
volumes:
|
|
199
|
+
# Named volume: persists across container restarts, managed by Docker
|
|
200
|
+
pgdata:
|
|
201
|
+
|
|
202
|
+
# Bind mount: maps host directory into container (for development)
|
|
203
|
+
# - ./src:/app/src
|
|
204
|
+
|
|
205
|
+
# Anonymous volume: preserves container-generated content from bind mount override
|
|
206
|
+
# - /app/node_modules
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Common Patterns
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
services:
|
|
213
|
+
app:
|
|
214
|
+
volumes:
|
|
215
|
+
- .:/app # Source code (bind mount for hot reload)
|
|
216
|
+
- /app/node_modules # Protect container's node_modules from host
|
|
217
|
+
- /app/.next # Protect build cache
|
|
218
|
+
|
|
219
|
+
db:
|
|
220
|
+
volumes:
|
|
221
|
+
- pgdata:/var/lib/postgresql/data # Persistent data
|
|
222
|
+
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql # Init scripts
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Container Security
|
|
226
|
+
|
|
227
|
+
### Dockerfile Hardening
|
|
228
|
+
|
|
229
|
+
```dockerfile
|
|
230
|
+
# 1. Use specific tags (never :latest)
|
|
231
|
+
FROM node:22.12-alpine3.20
|
|
232
|
+
|
|
233
|
+
# 2. Run as non-root
|
|
234
|
+
RUN addgroup -g 1001 -S app && adduser -S app -u 1001
|
|
235
|
+
USER app
|
|
236
|
+
|
|
237
|
+
# 3. Drop capabilities (in compose)
|
|
238
|
+
# 4. Read-only root filesystem where possible
|
|
239
|
+
# 5. No secrets in image layers
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Compose Security
|
|
243
|
+
|
|
244
|
+
```yaml
|
|
245
|
+
services:
|
|
246
|
+
app:
|
|
247
|
+
security_opt:
|
|
248
|
+
- no-new-privileges:true
|
|
249
|
+
read_only: true
|
|
250
|
+
tmpfs:
|
|
251
|
+
- /tmp
|
|
252
|
+
- /app/.cache
|
|
253
|
+
cap_drop:
|
|
254
|
+
- ALL
|
|
255
|
+
cap_add:
|
|
256
|
+
- NET_BIND_SERVICE # Only if binding to ports < 1024
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Secret Management
|
|
260
|
+
|
|
261
|
+
```yaml
|
|
262
|
+
# GOOD: Use environment variables (injected at runtime)
|
|
263
|
+
services:
|
|
264
|
+
app:
|
|
265
|
+
env_file:
|
|
266
|
+
- .env # Never commit .env to git
|
|
267
|
+
environment:
|
|
268
|
+
- API_KEY # Inherits from host environment
|
|
269
|
+
|
|
270
|
+
# GOOD: Docker secrets (Swarm mode)
|
|
271
|
+
secrets:
|
|
272
|
+
db_password:
|
|
273
|
+
file: ./secrets/db_password.txt
|
|
274
|
+
|
|
275
|
+
services:
|
|
276
|
+
db:
|
|
277
|
+
secrets:
|
|
278
|
+
- db_password
|
|
279
|
+
|
|
280
|
+
# BAD: Hardcoded in image
|
|
281
|
+
# ENV API_KEY=sk-proj-xxxxx # NEVER DO THIS
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## .dockerignore
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
node_modules
|
|
288
|
+
.git
|
|
289
|
+
.env
|
|
290
|
+
.env.*
|
|
291
|
+
dist
|
|
292
|
+
coverage
|
|
293
|
+
*.log
|
|
294
|
+
.next
|
|
295
|
+
.cache
|
|
296
|
+
docker-compose*.yml
|
|
297
|
+
Dockerfile*
|
|
298
|
+
README.md
|
|
299
|
+
tests/
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Debugging
|
|
303
|
+
|
|
304
|
+
### Common Commands
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# View logs
|
|
308
|
+
docker compose logs -f app # Follow app logs
|
|
309
|
+
docker compose logs --tail=50 db # Last 50 lines from db
|
|
310
|
+
|
|
311
|
+
# Execute commands in running container
|
|
312
|
+
docker compose exec app sh # Shell into app
|
|
313
|
+
docker compose exec db psql -U postgres # Connect to postgres
|
|
314
|
+
|
|
315
|
+
# Inspect
|
|
316
|
+
docker compose ps # Running services
|
|
317
|
+
docker compose top # Processes in each container
|
|
318
|
+
docker stats # Resource usage
|
|
319
|
+
|
|
320
|
+
# Rebuild
|
|
321
|
+
docker compose up --build # Rebuild images
|
|
322
|
+
docker compose build --no-cache app # Force full rebuild
|
|
323
|
+
|
|
324
|
+
# Clean up
|
|
325
|
+
docker compose down # Stop and remove containers
|
|
326
|
+
docker compose down -v # Also remove volumes (DESTRUCTIVE)
|
|
327
|
+
docker system prune # Remove unused images/containers
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Debugging Network Issues
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
# Check DNS resolution inside container
|
|
334
|
+
docker compose exec app nslookup db
|
|
335
|
+
|
|
336
|
+
# Check connectivity
|
|
337
|
+
docker compose exec app wget -qO- http://api:3000/health
|
|
338
|
+
|
|
339
|
+
# Inspect network
|
|
340
|
+
docker network ls
|
|
341
|
+
docker network inspect <project>_default
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Anti-Patterns
|
|
345
|
+
|
|
346
|
+
```
|
|
347
|
+
# BAD: Using docker compose in production without orchestration
|
|
348
|
+
# Use Kubernetes, ECS, or Docker Swarm for production multi-container workloads
|
|
349
|
+
|
|
350
|
+
# BAD: Storing data in containers without volumes
|
|
351
|
+
# Containers are ephemeral -- all data lost on restart without volumes
|
|
352
|
+
|
|
353
|
+
# BAD: Running as root
|
|
354
|
+
# Always create and use a non-root user
|
|
355
|
+
|
|
356
|
+
# BAD: Using :latest tag
|
|
357
|
+
# Pin to specific versions for reproducible builds
|
|
358
|
+
|
|
359
|
+
# BAD: One giant container with all services
|
|
360
|
+
# Separate concerns: one process per container
|
|
361
|
+
|
|
362
|
+
# BAD: Putting secrets in docker-compose.yml
|
|
363
|
+
# Use .env files (gitignored) or Docker secrets
|
|
364
|
+
```
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documentation-and-adrs
|
|
3
|
+
description: Captures the why behind code, interfaces, and decisions. Use when architectural choices, public behavior, release notes, or recurring explanations need durable documentation.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Documentation and ADRs
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Document the reason, not just the result.
|
|
12
|
+
Code tells future readers what exists. Documentation and ADRs tell them why it exists, what alternatives were rejected, and what constraints still matter.
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- making or revisiting an architectural decision
|
|
17
|
+
- changing a public API, contract, or user-facing behavior
|
|
18
|
+
- shipping a feature that needs release notes or onboarding context
|
|
19
|
+
- writing or refreshing README, runbooks, rules, or design notes
|
|
20
|
+
- when the same explanation keeps getting repeated in reviews or planning
|
|
21
|
+
|
|
22
|
+
**When NOT to use**
|
|
23
|
+
|
|
24
|
+
- the documentation would only restate obvious code
|
|
25
|
+
- the work is a throwaway experiment that will not be kept
|
|
26
|
+
|
|
27
|
+
## Workflow
|
|
28
|
+
|
|
29
|
+
1. Decide what documentation artifact is needed.
|
|
30
|
+
Choose the smallest durable form:
|
|
31
|
+
- README or quick-start note
|
|
32
|
+
- API or contract docs
|
|
33
|
+
- ADR
|
|
34
|
+
- runbook or release note
|
|
35
|
+
- inline gotcha or architectural comment
|
|
36
|
+
2. Capture the why before it evaporates.
|
|
37
|
+
Write the context, constraints, alternatives, and consequences while the decision is fresh.
|
|
38
|
+
Use `../../references/adr-and-docs.md`.
|
|
39
|
+
3. Keep docs close to the surface they explain.
|
|
40
|
+
Public contracts should document behavior near the contract.
|
|
41
|
+
Architecture decisions should link to the affected subsystem.
|
|
42
|
+
4. Use ADRs for decisions that are expensive to re-decide.
|
|
43
|
+
For significant architectural or interface choices, coordinate with `architecture-decision-records`.
|
|
44
|
+
Do not hide important rationale in ephemeral chat or PR comments only.
|
|
45
|
+
5. Update the surrounding system, not just one file.
|
|
46
|
+
When behavior changes, refresh README notes, rules, specs, release notes, or runbooks that now teach the wrong thing.
|
|
47
|
+
6. Treat docs as part of readiness.
|
|
48
|
+
In AW flows, make sure review, deploy, and ship can point to the updated documentation when it matters for operators, reviewers, or future agents.
|
|
49
|
+
|
|
50
|
+
## Common Rationalizations
|
|
51
|
+
|
|
52
|
+
| Rationalization | Reality |
|
|
53
|
+
|---|---|
|
|
54
|
+
| "The code is self-documenting." | Code shows what, not the tradeoffs or rejected alternatives. |
|
|
55
|
+
| "We'll write docs once things settle." | The rationale is easiest to capture while the decision is current. |
|
|
56
|
+
| "Nobody reads ADRs." | Future engineers and agents read them when the original context is gone. |
|
|
57
|
+
| "A PR comment is enough documentation." | PR comments are not a reliable long-term knowledge system. |
|
|
58
|
+
|
|
59
|
+
## Red Flags
|
|
60
|
+
|
|
61
|
+
- important architectural decisions have no written rationale
|
|
62
|
+
- README or runbook still reflects old behavior after a release
|
|
63
|
+
- docs repeat obvious code but omit the real gotchas
|
|
64
|
+
- the team explains the same tradeoff repeatedly because nothing durable exists
|
|
65
|
+
- commented-out code is kept instead of proper history or docs
|
|
66
|
+
|
|
67
|
+
## Verification
|
|
68
|
+
|
|
69
|
+
After documentation work, confirm:
|
|
70
|
+
|
|
71
|
+
- [ ] the correct artifact type was chosen
|
|
72
|
+
- [ ] the why, constraints, and alternatives are captured
|
|
73
|
+
- [ ] docs live near the behavior or decision they explain
|
|
74
|
+
- [ ] ADR-worthy decisions are recorded durably
|
|
75
|
+
- [ ] surrounding docs, rules, or release notes are updated when behavior changes
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documentation-lookup
|
|
3
|
+
description: Use up-to-date library and framework docs via Context7 MCP instead of training data. Activates for setup questions, API references, code examples, or when the user names a framework (e.g. React, Next.js, Prisma).
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Documentation Lookup (Context7)
|
|
8
|
+
|
|
9
|
+
When the user asks about libraries, frameworks, or APIs, fetch current documentation via the Context7 MCP (tools `resolve-library-id` and `query-docs`) instead of relying on training data.
|
|
10
|
+
|
|
11
|
+
## Core Concepts
|
|
12
|
+
|
|
13
|
+
- **Context7**: MCP server that exposes live documentation; use it instead of training data for libraries and APIs.
|
|
14
|
+
- **resolve-library-id**: Returns Context7-compatible library IDs (e.g. `/vercel/next.js`) from a library name and query.
|
|
15
|
+
- **query-docs**: Fetches documentation and code snippets for a given library ID and question. Always call resolve-library-id first to get a valid library ID.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Activate when the user:
|
|
20
|
+
|
|
21
|
+
- Asks setup or configuration questions (e.g. "How do I configure Next.js middleware?")
|
|
22
|
+
- Requests code that depends on a library ("Write a Prisma query for...")
|
|
23
|
+
- Needs API or reference information ("What are the Supabase auth methods?")
|
|
24
|
+
- Mentions specific frameworks or libraries (React, Vue, Svelte, Express, Tailwind, Prisma, Supabase, etc.)
|
|
25
|
+
|
|
26
|
+
Use this skill whenever the request depends on accurate, up-to-date behavior of a library, framework, or API. Applies across harnesses that have the Context7 MCP configured (e.g. Claude Code, Cursor, Codex).
|
|
27
|
+
|
|
28
|
+
## How it works
|
|
29
|
+
|
|
30
|
+
### Step 1: Resolve the Library ID
|
|
31
|
+
|
|
32
|
+
Call the **resolve-library-id** MCP tool with:
|
|
33
|
+
|
|
34
|
+
- **libraryName**: The library or product name taken from the user's question (e.g. `Next.js`, `Prisma`, `Supabase`).
|
|
35
|
+
- **query**: The user's full question. This improves relevance ranking of results.
|
|
36
|
+
|
|
37
|
+
You must obtain a Context7-compatible library ID (format `/org/project` or `/org/project/version`) before querying docs. Do not call query-docs without a valid library ID from this step.
|
|
38
|
+
|
|
39
|
+
### Step 2: Select the Best Match
|
|
40
|
+
|
|
41
|
+
From the resolution results, choose one result using:
|
|
42
|
+
|
|
43
|
+
- **Name match**: Prefer exact or closest match to what the user asked for.
|
|
44
|
+
- **Benchmark score**: Higher scores indicate better documentation quality (100 is highest).
|
|
45
|
+
- **Source reputation**: Prefer High or Medium reputation when available.
|
|
46
|
+
- **Version**: If the user specified a version (e.g. "React 19", "Next.js 15"), prefer a version-specific library ID if listed (e.g. `/org/project/v1.2.0`).
|
|
47
|
+
|
|
48
|
+
### Step 3: Fetch the Documentation
|
|
49
|
+
|
|
50
|
+
Call the **query-docs** MCP tool with:
|
|
51
|
+
|
|
52
|
+
- **libraryId**: The selected Context7 library ID from Step 2 (e.g. `/vercel/next.js`).
|
|
53
|
+
- **query**: The user's specific question or task. Be specific to get relevant snippets.
|
|
54
|
+
|
|
55
|
+
Limit: do not call query-docs (or resolve-library-id) more than 3 times per question. If the answer is unclear after 3 calls, state the uncertainty and use the best information you have rather than guessing.
|
|
56
|
+
|
|
57
|
+
### Step 4: Use the Documentation
|
|
58
|
+
|
|
59
|
+
- Answer the user's question using the fetched, current information.
|
|
60
|
+
- Include relevant code examples from the docs when helpful.
|
|
61
|
+
- Cite the library or version when it matters (e.g. "In Next.js 15...").
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
### Example: Next.js middleware
|
|
66
|
+
|
|
67
|
+
1. Call **resolve-library-id** with `libraryName: "Next.js"`, `query: "How do I set up Next.js middleware?"`.
|
|
68
|
+
2. From results, pick the best match (e.g. `/vercel/next.js`) by name and benchmark score.
|
|
69
|
+
3. Call **query-docs** with `libraryId: "/vercel/next.js"`, `query: "How do I set up Next.js middleware?"`.
|
|
70
|
+
4. Use the returned snippets and text to answer; include a minimal `middleware.ts` example from the docs if relevant.
|
|
71
|
+
|
|
72
|
+
### Example: Prisma query
|
|
73
|
+
|
|
74
|
+
1. Call **resolve-library-id** with `libraryName: "Prisma"`, `query: "How do I query with relations?"`.
|
|
75
|
+
2. Select the official Prisma library ID (e.g. `/prisma/prisma`).
|
|
76
|
+
3. Call **query-docs** with that `libraryId` and the query.
|
|
77
|
+
4. Return the Prisma Client pattern (e.g. `include` or `select`) with a short code snippet from the docs.
|
|
78
|
+
|
|
79
|
+
### Example: Supabase auth methods
|
|
80
|
+
|
|
81
|
+
1. Call **resolve-library-id** with `libraryName: "Supabase"`, `query: "What are the auth methods?"`.
|
|
82
|
+
2. Pick the Supabase docs library ID.
|
|
83
|
+
3. Call **query-docs**; summarize the auth methods and show minimal examples from the fetched docs.
|
|
84
|
+
|
|
85
|
+
## Best Practices
|
|
86
|
+
|
|
87
|
+
- **Be specific**: Use the user's full question as the query where possible for better relevance.
|
|
88
|
+
- **Version awareness**: When users mention versions, use version-specific library IDs from the resolve step when available.
|
|
89
|
+
- **Prefer official sources**: When multiple matches exist, prefer official or primary packages over community forks.
|
|
90
|
+
- **No sensitive data**: Redact API keys, passwords, tokens, and other secrets from any query sent to Context7. Treat the user's question as potentially containing secrets before passing it to resolve-library-id or query-docs.
|