compact-agent 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/ecc-hooks.cjs +110 -0
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/ecc.d.ts +11 -0
- package/dist/ecc.js +142 -27
- package/dist/ecc.js.map +1 -1
- package/dist/index.js +90 -9
- package/dist/index.js.map +1 -1
- package/dist/mempalace/index.d.ts +11 -0
- package/dist/mempalace/index.js +26 -1
- package/dist/mempalace/index.js.map +1 -1
- package/dist/system-prompt.js +2 -2
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/index.js +8 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/resources/ecc/agents/a11y-architect.md +149 -0
- package/resources/ecc/agents/architect.md +11 -3
- package/resources/ecc/agents/build-error-resolver.md +11 -4
- package/resources/ecc/agents/chief-of-staff.md +11 -4
- package/resources/ecc/agents/code-architect.md +80 -0
- package/resources/ecc/agents/code-explorer.md +78 -0
- package/resources/ecc/agents/code-reviewer.md +89 -4
- package/resources/ecc/agents/code-simplifier.md +56 -0
- package/resources/ecc/agents/comment-analyzer.md +54 -0
- package/resources/ecc/agents/conversation-analyzer.md +61 -0
- package/resources/ecc/agents/cpp-build-resolver.md +99 -0
- package/resources/ecc/agents/cpp-reviewer.md +81 -0
- package/resources/ecc/agents/csharp-reviewer.md +110 -0
- package/resources/ecc/agents/dart-build-resolver.md +210 -0
- package/resources/ecc/agents/database-reviewer.md +11 -3
- package/resources/ecc/agents/django-build-resolver.md +252 -0
- package/resources/ecc/agents/django-reviewer.md +169 -0
- package/resources/ecc/agents/doc-updater.md +11 -3
- package/resources/ecc/agents/docs-lookup.md +77 -0
- package/resources/ecc/agents/e2e-runner.md +11 -4
- package/resources/ecc/agents/fastapi-reviewer.md +79 -0
- package/resources/ecc/agents/flutter-reviewer.md +252 -0
- package/resources/ecc/agents/fsharp-reviewer.md +109 -0
- package/resources/ecc/agents/gan-evaluator.md +218 -0
- package/resources/ecc/agents/gan-generator.md +140 -0
- package/resources/ecc/agents/gan-planner.md +108 -0
- package/resources/ecc/agents/go-build-resolver.md +11 -4
- package/resources/ecc/agents/go-reviewer.md +11 -3
- package/resources/ecc/agents/harmonyos-app-resolver.md +182 -0
- package/resources/ecc/agents/harness-optimizer.md +12 -2
- package/resources/ecc/agents/healthcare-reviewer.md +92 -0
- package/resources/ecc/agents/homelab-architect.md +107 -0
- package/resources/ecc/agents/java-build-resolver.md +275 -0
- package/resources/ecc/agents/java-reviewer.md +190 -0
- package/resources/ecc/agents/kotlin-build-resolver.md +127 -0
- package/resources/ecc/agents/kotlin-reviewer.md +168 -0
- package/resources/ecc/agents/loop-operator.md +12 -3
- package/resources/ecc/agents/mle-reviewer.md +162 -0
- package/resources/ecc/agents/network-architect.md +106 -0
- package/resources/ecc/agents/network-config-reviewer.md +106 -0
- package/resources/ecc/agents/network-troubleshooter.md +128 -0
- package/resources/ecc/agents/opensource-forker.md +207 -0
- package/resources/ecc/agents/opensource-packager.md +258 -0
- package/resources/ecc/agents/opensource-sanitizer.md +197 -0
- package/resources/ecc/agents/performance-optimizer.md +455 -0
- package/resources/ecc/agents/planner.md +11 -2
- package/resources/ecc/agents/pr-test-analyzer.md +54 -0
- package/resources/ecc/agents/python-reviewer.md +11 -3
- package/resources/ecc/agents/pytorch-build-resolver.md +129 -0
- package/resources/ecc/agents/refactor-cleaner.md +11 -4
- package/resources/ecc/agents/rust-build-resolver.md +157 -0
- package/resources/ecc/agents/rust-reviewer.md +103 -0
- package/resources/ecc/agents/security-reviewer.md +11 -3
- package/resources/ecc/agents/seo-specialist.md +71 -0
- package/resources/ecc/agents/silent-failure-hunter.md +59 -0
- package/resources/ecc/agents/swift-build-resolver.md +170 -0
- package/resources/ecc/agents/swift-reviewer.md +116 -0
- package/resources/ecc/agents/tdd-guide.md +11 -4
- package/resources/ecc/agents/type-design-analyzer.md +50 -0
- package/resources/ecc/agents/typescript-reviewer.md +121 -0
- package/resources/ecc/commands/aside.md +164 -0
- package/resources/ecc/commands/auto-update.md +28 -0
- package/resources/ecc/commands/build-fix.md +66 -0
- package/resources/ecc/commands/checkpoint.md +78 -0
- package/resources/ecc/commands/code-review.md +289 -0
- package/resources/ecc/commands/cost-report.md +107 -0
- package/resources/ecc/commands/cpp-build.md +173 -0
- package/resources/ecc/commands/cpp-review.md +132 -0
- package/resources/ecc/commands/cpp-test.md +251 -0
- package/resources/ecc/commands/ecc-guide.md +93 -0
- package/resources/ecc/commands/evolve.md +178 -0
- package/resources/ecc/commands/fastapi-review.md +39 -0
- package/resources/ecc/commands/feature-dev.md +49 -0
- package/resources/ecc/commands/flutter-build.md +164 -0
- package/resources/ecc/commands/flutter-review.md +116 -0
- package/resources/ecc/commands/flutter-test.md +144 -0
- package/resources/ecc/commands/gan-build.md +103 -0
- package/resources/ecc/commands/gan-design.md +39 -0
- package/resources/ecc/commands/go-build.md +183 -0
- package/resources/ecc/commands/go-review.md +148 -0
- package/resources/ecc/commands/go-test.md +268 -0
- package/resources/ecc/commands/gradle-build.md +70 -0
- package/resources/ecc/commands/harness-audit.md +77 -0
- package/resources/ecc/commands/hookify-configure.md +14 -0
- package/resources/ecc/commands/hookify-help.md +46 -0
- package/resources/ecc/commands/hookify-list.md +21 -0
- package/resources/ecc/commands/hookify.md +50 -0
- package/resources/ecc/commands/instinct-export.md +66 -0
- package/resources/ecc/commands/instinct-import.md +114 -0
- package/resources/ecc/commands/instinct-status.md +59 -0
- package/resources/ecc/commands/jira.md +106 -0
- package/resources/ecc/commands/kotlin-build.md +174 -0
- package/resources/ecc/commands/kotlin-review.md +140 -0
- package/resources/ecc/commands/kotlin-test.md +312 -0
- package/resources/ecc/commands/learn-eval.md +116 -0
- package/resources/ecc/commands/learn.md +74 -0
- package/resources/ecc/commands/loop-start.md +36 -0
- package/resources/ecc/commands/loop-status.md +77 -0
- package/resources/ecc/commands/model-route.md +30 -0
- package/resources/ecc/commands/multi-backend.md +162 -0
- package/resources/ecc/commands/multi-execute.md +319 -0
- package/resources/ecc/commands/multi-frontend.md +162 -0
- package/resources/ecc/commands/multi-plan.md +272 -0
- package/resources/ecc/commands/multi-workflow.md +195 -0
- package/resources/ecc/commands/plan-prd.md +160 -0
- package/resources/ecc/commands/plan.md +200 -0
- package/resources/ecc/commands/pm2.md +276 -0
- package/resources/ecc/commands/pr.md +184 -0
- package/resources/ecc/commands/project-init.md +86 -0
- package/resources/ecc/commands/projects.md +39 -0
- package/resources/ecc/commands/promote.md +41 -0
- package/resources/ecc/commands/prp-commit.md +112 -0
- package/resources/ecc/commands/prp-implement.md +385 -0
- package/resources/ecc/commands/prp-plan.md +502 -0
- package/resources/ecc/commands/prp-pr.md +184 -0
- package/resources/ecc/commands/prp-prd.md +447 -0
- package/resources/ecc/commands/prune.md +31 -0
- package/resources/ecc/commands/python-review.md +297 -0
- package/resources/ecc/commands/quality-gate.md +33 -0
- package/resources/ecc/commands/refactor-clean.md +84 -0
- package/resources/ecc/commands/resume-session.md +156 -0
- package/resources/ecc/commands/review-pr.md +37 -0
- package/resources/ecc/commands/rust-build.md +187 -0
- package/resources/ecc/commands/rust-review.md +142 -0
- package/resources/ecc/commands/rust-test.md +308 -0
- package/resources/ecc/commands/santa-loop.md +175 -0
- package/resources/ecc/commands/save-session.md +275 -0
- package/resources/ecc/commands/security-scan.md +92 -0
- package/resources/ecc/commands/sessions.md +339 -0
- package/resources/ecc/commands/setup-pm.md +80 -0
- package/resources/ecc/commands/skill-create.md +174 -0
- package/resources/ecc/commands/skill-health.md +54 -0
- package/resources/ecc/commands/test-coverage.md +73 -0
- package/resources/ecc/commands/update-codemaps.md +76 -0
- package/resources/ecc/commands/update-docs.md +88 -0
- package/resources/ecc/rules/README.md +120 -0
- package/resources/ecc/rules/angular/coding-style.md +182 -0
- package/resources/ecc/rules/angular/hooks.md +25 -0
- package/resources/ecc/rules/angular/patterns.md +249 -0
- package/resources/ecc/rules/angular/security.md +87 -0
- package/resources/ecc/rules/angular/testing.md +164 -0
- package/resources/ecc/rules/arkts/coding-style.md +153 -0
- package/resources/ecc/rules/arkts/hooks.md +135 -0
- package/resources/ecc/rules/arkts/patterns.md +236 -0
- package/resources/ecc/rules/arkts/security.md +141 -0
- package/resources/ecc/rules/arkts/testing.md +126 -0
- package/resources/ecc/rules/{common-agents.md → common/agents.md} +2 -4
- package/resources/ecc/rules/common/code-review.md +124 -0
- package/resources/ecc/rules/{common-coding-style.md → common/coding-style.md} +42 -4
- package/resources/ecc/rules/common/development-workflow.md +44 -0
- package/resources/ecc/rules/{common-git-workflow.md → common/git-workflow.md} +1 -5
- package/resources/ecc/rules/{common-hooks.md → common/hooks.md} +0 -4
- package/resources/ecc/rules/{common-patterns.md → common/patterns.md} +0 -4
- package/resources/ecc/rules/{common-performance.md → common/performance.md} +0 -4
- package/resources/ecc/rules/{common-security.md → common/security.md} +0 -4
- package/resources/ecc/rules/{common-testing.md → common/testing.md} +28 -4
- package/resources/ecc/rules/cpp/coding-style.md +44 -0
- package/resources/ecc/rules/cpp/hooks.md +39 -0
- package/resources/ecc/rules/cpp/patterns.md +51 -0
- package/resources/ecc/rules/cpp/security.md +51 -0
- package/resources/ecc/rules/cpp/testing.md +44 -0
- package/resources/ecc/rules/csharp/coding-style.md +72 -0
- package/resources/ecc/rules/csharp/hooks.md +25 -0
- package/resources/ecc/rules/csharp/patterns.md +50 -0
- package/resources/ecc/rules/csharp/security.md +58 -0
- package/resources/ecc/rules/csharp/testing.md +46 -0
- package/resources/ecc/rules/dart/coding-style.md +159 -0
- package/resources/ecc/rules/dart/hooks.md +66 -0
- package/resources/ecc/rules/dart/patterns.md +261 -0
- package/resources/ecc/rules/dart/security.md +135 -0
- package/resources/ecc/rules/dart/testing.md +215 -0
- package/resources/ecc/rules/fsharp/coding-style.md +112 -0
- package/resources/ecc/rules/fsharp/hooks.md +26 -0
- package/resources/ecc/rules/fsharp/patterns.md +111 -0
- package/resources/ecc/rules/fsharp/security.md +76 -0
- package/resources/ecc/rules/fsharp/testing.md +62 -0
- package/resources/ecc/rules/{golang-coding-style.md → golang/coding-style.md} +6 -5
- package/resources/ecc/rules/{golang-hooks.md → golang/hooks.md} +5 -4
- package/resources/ecc/rules/{golang-patterns.md → golang/patterns.md} +5 -4
- package/resources/ecc/rules/{golang-security.md → golang/security.md} +5 -4
- package/resources/ecc/rules/{golang-testing.md → golang/testing.md} +5 -4
- package/resources/ecc/rules/java/coding-style.md +114 -0
- package/resources/ecc/rules/java/hooks.md +18 -0
- package/resources/ecc/rules/java/patterns.md +147 -0
- package/resources/ecc/rules/java/security.md +101 -0
- package/resources/ecc/rules/java/testing.md +133 -0
- package/resources/ecc/rules/kotlin/coding-style.md +86 -0
- package/resources/ecc/rules/{kotlin-hooks.md → kotlin/hooks.md} +5 -4
- package/resources/ecc/rules/kotlin/patterns.md +146 -0
- package/resources/ecc/rules/kotlin/security.md +82 -0
- package/resources/ecc/rules/kotlin/testing.md +128 -0
- package/resources/ecc/rules/perl/coding-style.md +46 -0
- package/resources/ecc/rules/perl/hooks.md +22 -0
- package/resources/ecc/rules/perl/patterns.md +76 -0
- package/resources/ecc/rules/perl/security.md +69 -0
- package/resources/ecc/rules/perl/testing.md +54 -0
- package/resources/ecc/rules/php/coding-style.md +40 -0
- package/resources/ecc/rules/{php-hooks.md → php/hooks.md} +7 -4
- package/resources/ecc/rules/php/patterns.md +33 -0
- package/resources/ecc/rules/php/security.md +37 -0
- package/resources/ecc/rules/php/testing.md +39 -0
- package/resources/ecc/rules/{python-coding-style.md → python/coding-style.md} +4 -4
- package/resources/ecc/rules/python/fastapi.md +58 -0
- package/resources/ecc/rules/{python-hooks.md → python/hooks.md} +4 -4
- package/resources/ecc/rules/{python-patterns.md → python/patterns.md} +4 -4
- package/resources/ecc/rules/{python-security.md → python/security.md} +4 -4
- package/resources/ecc/rules/{python-testing.md → python/testing.md} +4 -4
- package/resources/ecc/rules/ruby/coding-style.md +46 -0
- package/resources/ecc/rules/ruby/hooks.md +37 -0
- package/resources/ecc/rules/ruby/patterns.md +44 -0
- package/resources/ecc/rules/ruby/security.md +51 -0
- package/resources/ecc/rules/ruby/testing.md +51 -0
- package/resources/ecc/rules/rust/coding-style.md +151 -0
- package/resources/ecc/rules/rust/hooks.md +16 -0
- package/resources/ecc/rules/rust/patterns.md +168 -0
- package/resources/ecc/rules/rust/security.md +141 -0
- package/resources/ecc/rules/rust/testing.md +154 -0
- package/resources/ecc/rules/{swift-coding-style.md → swift/coding-style.md} +6 -6
- package/resources/ecc/rules/swift/hooks.md +20 -0
- package/resources/ecc/rules/{swift-patterns.md → swift/patterns.md} +5 -5
- package/resources/ecc/rules/{swift-security.md → swift/security.md} +7 -7
- package/resources/ecc/rules/{swift-testing.md → swift/testing.md} +5 -5
- package/resources/ecc/rules/typescript/coding-style.md +199 -0
- package/resources/ecc/rules/{typescript-hooks.md → typescript/hooks.md} +6 -4
- package/resources/ecc/rules/{typescript-patterns.md → typescript/patterns.md} +6 -4
- package/resources/ecc/rules/{typescript-security.md → typescript/security.md} +6 -4
- package/resources/ecc/rules/typescript/testing.md +18 -0
- package/resources/ecc/rules/web/coding-style.md +96 -0
- package/resources/ecc/rules/web/design-quality.md +63 -0
- package/resources/ecc/rules/web/hooks.md +129 -0
- package/resources/ecc/rules/web/patterns.md +79 -0
- package/resources/ecc/rules/web/performance.md +64 -0
- package/resources/ecc/rules/web/security.md +57 -0
- package/resources/ecc/rules/web/testing.md +55 -0
- package/resources/ecc/rules/zh/README.md +108 -0
- package/resources/ecc/rules/zh/agents.md +50 -0
- package/resources/ecc/rules/zh/code-review.md +124 -0
- package/resources/ecc/rules/zh/coding-style.md +48 -0
- package/resources/ecc/rules/zh/development-workflow.md +44 -0
- package/resources/ecc/rules/zh/git-workflow.md +24 -0
- package/resources/ecc/rules/zh/hooks.md +30 -0
- package/resources/ecc/rules/zh/patterns.md +31 -0
- package/resources/ecc/rules/zh/performance.md +55 -0
- package/resources/ecc/rules/zh/security.md +29 -0
- package/resources/ecc/rules/zh/testing.md +29 -0
- package/resources/ecc/skills/accessibility/SKILL.md +146 -0
- package/resources/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
- package/resources/ecc/skills/agent-eval/SKILL.md +145 -0
- package/resources/ecc/skills/agent-harness-construction/SKILL.md +73 -0
- package/resources/ecc/skills/agent-introspection-debugging/SKILL.md +1 -0
- package/resources/ecc/skills/agent-payment-x402/SKILL.md +224 -0
- package/resources/ecc/skills/agent-sort/SKILL.md +1 -0
- package/resources/ecc/skills/agentic-engineering/SKILL.md +63 -0
- package/resources/ecc/skills/agentic-os/SKILL.md +387 -0
- package/resources/ecc/skills/ai-first-engineering/SKILL.md +51 -0
- package/resources/ecc/skills/ai-regression-testing/SKILL.md +385 -0
- package/resources/ecc/skills/android-clean-architecture/SKILL.md +339 -0
- package/resources/ecc/skills/angular-developer/SKILL.md +154 -0
- package/resources/ecc/skills/angular-developer/references/angular-animations.md +160 -0
- package/resources/ecc/skills/angular-developer/references/angular-aria.md +410 -0
- package/resources/ecc/skills/angular-developer/references/cli.md +86 -0
- package/resources/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
- package/resources/ecc/skills/angular-developer/references/component-styling.md +91 -0
- package/resources/ecc/skills/angular-developer/references/components.md +117 -0
- package/resources/ecc/skills/angular-developer/references/creating-services.md +97 -0
- package/resources/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
- package/resources/ecc/skills/angular-developer/references/define-routes.md +67 -0
- package/resources/ecc/skills/angular-developer/references/defining-providers.md +72 -0
- package/resources/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/resources/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
- package/resources/ecc/skills/angular-developer/references/effects.md +83 -0
- package/resources/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/resources/ecc/skills/angular-developer/references/host-elements.md +80 -0
- package/resources/ecc/skills/angular-developer/references/injection-context.md +63 -0
- package/resources/ecc/skills/angular-developer/references/inputs.md +101 -0
- package/resources/ecc/skills/angular-developer/references/linked-signal.md +59 -0
- package/resources/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
- package/resources/ecc/skills/angular-developer/references/mcp.md +108 -0
- package/resources/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/resources/ecc/skills/angular-developer/references/outputs.md +86 -0
- package/resources/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
- package/resources/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/resources/ecc/skills/angular-developer/references/resource.md +77 -0
- package/resources/ecc/skills/angular-developer/references/route-animations.md +56 -0
- package/resources/ecc/skills/angular-developer/references/route-guards.md +52 -0
- package/resources/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/resources/ecc/skills/angular-developer/references/router-testing.md +87 -0
- package/resources/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/resources/ecc/skills/angular-developer/references/signal-forms.md +795 -0
- package/resources/ecc/skills/angular-developer/references/signals-overview.md +94 -0
- package/resources/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
- package/resources/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/resources/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/resources/ecc/skills/api-connector-builder/SKILL.md +120 -0
- package/resources/ecc/skills/api-design/SKILL.md +1 -0
- package/resources/ecc/skills/architecture-decision-records/SKILL.md +179 -0
- package/resources/ecc/skills/article-writing/SKILL.md +1 -0
- package/resources/ecc/skills/automation-audit-ops/SKILL.md +142 -0
- package/resources/ecc/skills/autonomous-agent-harness/SKILL.md +273 -0
- package/resources/ecc/skills/autonomous-loops/SKILL.md +610 -0
- package/resources/ecc/skills/backend-patterns/SKILL.md +8 -44
- package/resources/ecc/skills/benchmark/SKILL.md +93 -0
- package/resources/ecc/skills/blueprint/SKILL.md +105 -0
- package/resources/ecc/skills/brand-voice/SKILL.md +1 -0
- package/resources/ecc/skills/browser-qa/SKILL.md +87 -0
- package/resources/ecc/skills/bun-runtime/SKILL.md +1 -0
- package/resources/ecc/skills/canary-watch/SKILL.md +99 -0
- package/resources/ecc/skills/carrier-relationship-management/SKILL.md +212 -0
- package/resources/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/resources/ecc/skills/ck/SKILL.md +147 -0
- package/resources/ecc/skills/ck/commands/forget.mjs +44 -0
- package/resources/ecc/skills/ck/commands/info.mjs +24 -0
- package/resources/ecc/skills/ck/commands/init.mjs +143 -0
- package/resources/ecc/skills/ck/commands/list.mjs +40 -0
- package/resources/ecc/skills/ck/commands/migrate.mjs +202 -0
- package/resources/ecc/skills/ck/commands/resume.mjs +36 -0
- package/resources/ecc/skills/ck/commands/save.mjs +210 -0
- package/resources/ecc/skills/ck/commands/shared.mjs +387 -0
- package/resources/ecc/skills/ck/hooks/session-start.mjs +224 -0
- package/resources/ecc/skills/claude-devfleet/SKILL.md +103 -0
- package/resources/ecc/skills/click-path-audit/SKILL.md +244 -0
- package/resources/ecc/skills/clickhouse-io/SKILL.md +439 -0
- package/resources/ecc/skills/code-tour/SKILL.md +236 -0
- package/resources/ecc/skills/codebase-onboarding/SKILL.md +233 -0
- package/resources/ecc/skills/coding-standards/SKILL.md +1 -0
- package/resources/ecc/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/resources/ecc/skills/configure-ecc/SKILL.md +384 -0
- package/resources/ecc/skills/connections-optimizer/SKILL.md +189 -0
- package/resources/ecc/skills/content-engine/SKILL.md +1 -0
- package/resources/ecc/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/resources/ecc/skills/context-budget/SKILL.md +135 -0
- package/resources/ecc/skills/continuous-agent-loop/SKILL.md +45 -0
- package/resources/ecc/skills/continuous-learning/SKILL.md +131 -0
- package/resources/ecc/skills/continuous-learning/config.json +18 -0
- package/resources/ecc/skills/continuous-learning/evaluate-session.sh +69 -0
- package/resources/ecc/skills/continuous-learning-v2/SKILL.md +360 -0
- package/resources/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/resources/ecc/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/resources/ecc/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/resources/ecc/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/resources/ecc/skills/continuous-learning-v2/config.json +8 -0
- package/resources/ecc/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/resources/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/resources/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/resources/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/resources/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/resources/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/resources/ecc/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/resources/ecc/skills/cost-tracking/SKILL.md +147 -0
- package/resources/ecc/skills/council/SKILL.md +203 -0
- package/resources/ecc/skills/cpp-coding-standards/SKILL.md +723 -0
- package/resources/ecc/skills/cpp-testing/SKILL.md +324 -0
- package/resources/ecc/skills/crosspost/SKILL.md +1 -0
- package/resources/ecc/skills/csharp-testing/SKILL.md +321 -0
- package/resources/ecc/skills/customer-billing-ops/SKILL.md +140 -0
- package/resources/ecc/skills/customs-trade-compliance/SKILL.md +263 -0
- package/resources/ecc/skills/dart-flutter-patterns/SKILL.md +563 -0
- package/resources/ecc/skills/dashboard-builder/SKILL.md +108 -0
- package/resources/ecc/skills/data-scraper-agent/SKILL.md +764 -0
- package/resources/ecc/skills/database-migrations/SKILL.md +429 -0
- package/resources/ecc/skills/deep-research/SKILL.md +5 -0
- package/resources/ecc/skills/defi-amm-security/SKILL.md +166 -0
- package/resources/ecc/skills/deployment-patterns/SKILL.md +427 -0
- package/resources/ecc/skills/design-system/SKILL.md +82 -0
- package/resources/ecc/skills/django-celery/SKILL.md +457 -0
- package/resources/ecc/skills/django-patterns/SKILL.md +734 -0
- package/resources/ecc/skills/django-security/SKILL.md +593 -0
- package/resources/ecc/skills/django-tdd/SKILL.md +729 -0
- package/resources/ecc/skills/django-verification/SKILL.md +469 -0
- package/resources/ecc/skills/dmux-workflows/SKILL.md +52 -4
- package/resources/ecc/skills/docker-patterns/SKILL.md +364 -0
- package/resources/ecc/skills/documentation-lookup/SKILL.md +1 -0
- package/resources/ecc/skills/dotnet-patterns/SKILL.md +321 -0
- package/resources/ecc/skills/e2e-testing/SKILL.md +1 -0
- package/resources/ecc/skills/ecc-guide/SKILL.md +189 -0
- package/resources/ecc/skills/ecc-tools-cost-audit/SKILL.md +160 -0
- package/resources/ecc/skills/email-ops/SKILL.md +121 -0
- package/resources/ecc/skills/energy-procurement/SKILL.md +228 -0
- package/resources/ecc/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/resources/ecc/skills/error-handling/SKILL.md +376 -0
- package/resources/ecc/skills/eval-harness/SKILL.md +36 -1
- package/resources/ecc/skills/evm-token-decimals/SKILL.md +130 -0
- package/resources/ecc/skills/exa-search/SKILL.md +18 -80
- package/resources/ecc/skills/fal-ai-media/SKILL.md +32 -20
- package/resources/ecc/skills/fastapi-patterns/SKILL.md +327 -0
- package/resources/ecc/skills/finance-billing-ops/SKILL.md +127 -0
- package/resources/ecc/skills/flox-environments/SKILL.md +496 -0
- package/resources/ecc/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/resources/ecc/skills/foundation-models-on-device/SKILL.md +243 -0
- package/resources/ecc/skills/frontend-design-direction/SKILL.md +92 -0
- package/resources/ecc/skills/frontend-patterns/SKILL.md +1 -6
- package/resources/ecc/skills/frontend-slides/SKILL.md +2 -1
- package/resources/ecc/skills/frontend-slides/animation-patterns.md +122 -0
- package/resources/ecc/skills/frontend-slides/html-template.md +419 -0
- package/resources/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/resources/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/resources/ecc/skills/frontend-slides/viewport-base.css +153 -0
- package/resources/ecc/skills/fsharp-testing/SKILL.md +280 -0
- package/resources/ecc/skills/gan-style-harness/SKILL.md +278 -0
- package/resources/ecc/skills/gateguard/SKILL.md +125 -0
- package/resources/ecc/skills/git-workflow/SKILL.md +715 -0
- package/resources/ecc/skills/github-ops/SKILL.md +144 -0
- package/resources/ecc/skills/golang-patterns/SKILL.md +674 -0
- package/resources/ecc/skills/golang-testing/SKILL.md +720 -0
- package/resources/ecc/skills/google-workspace-ops/SKILL.md +95 -0
- package/resources/ecc/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/resources/ecc/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/resources/ecc/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/resources/ecc/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/resources/ecc/skills/hermes-imports/SKILL.md +88 -0
- package/resources/ecc/skills/hexagonal-architecture/SKILL.md +276 -0
- package/resources/ecc/skills/hipaa-compliance/SKILL.md +78 -0
- package/resources/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
- package/resources/ecc/skills/homelab-network-setup/SKILL.md +129 -0
- package/resources/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/resources/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/resources/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/resources/ecc/skills/hookify-rules/SKILL.md +128 -0
- package/resources/ecc/skills/inventory-demand-planning/SKILL.md +247 -0
- package/resources/ecc/skills/investor-materials/SKILL.md +1 -0
- package/resources/ecc/skills/investor-outreach/SKILL.md +1 -0
- package/resources/ecc/skills/ios-icon-gen/SKILL.md +157 -0
- package/resources/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/resources/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/resources/ecc/skills/iterative-retrieval/SKILL.md +211 -0
- package/resources/ecc/skills/java-coding-standards/SKILL.md +383 -0
- package/resources/ecc/skills/jira-integration/SKILL.md +293 -0
- package/resources/ecc/skills/jpa-patterns/SKILL.md +151 -0
- package/resources/ecc/skills/knowledge-ops/SKILL.md +154 -0
- package/resources/ecc/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/resources/ecc/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/resources/ecc/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/resources/ecc/skills/kotlin-patterns/SKILL.md +711 -0
- package/resources/ecc/skills/kotlin-testing/SKILL.md +824 -0
- package/resources/ecc/skills/laravel-patterns/SKILL.md +415 -0
- package/resources/ecc/skills/laravel-plugin-discovery/SKILL.md +229 -0
- package/resources/ecc/skills/laravel-security/SKILL.md +285 -0
- package/resources/ecc/skills/laravel-tdd/SKILL.md +283 -0
- package/resources/ecc/skills/laravel-verification/SKILL.md +179 -0
- package/resources/ecc/skills/lead-intelligence/SKILL.md +321 -0
- package/resources/ecc/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/resources/ecc/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/resources/ecc/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/resources/ecc/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/resources/ecc/skills/liquid-glass-design/SKILL.md +279 -0
- package/resources/ecc/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/resources/ecc/skills/logistics-exception-management/SKILL.md +222 -0
- package/resources/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/resources/ecc/skills/manim-video/SKILL.md +89 -0
- package/resources/ecc/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/resources/ecc/skills/market-research/SKILL.md +1 -0
- package/resources/ecc/skills/mcp-server-patterns/SKILL.md +3 -0
- package/resources/ecc/skills/messages-ops/SKILL.md +104 -0
- package/resources/ecc/skills/mle-workflow/SKILL.md +1 -1
- package/resources/ecc/skills/motion-advanced/SKILL.md +596 -0
- package/resources/ecc/skills/motion-foundations/SKILL.md +299 -0
- package/resources/ecc/skills/motion-patterns/SKILL.md +435 -0
- package/resources/ecc/skills/motion-ui/SKILL.md +575 -0
- package/resources/ecc/skills/mysql-patterns/SKILL.md +412 -0
- package/resources/ecc/skills/nanoclaw-repl/SKILL.md +33 -0
- package/resources/ecc/skills/nestjs-patterns/SKILL.md +230 -0
- package/resources/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/resources/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/resources/ecc/skills/network-config-validation/SKILL.md +210 -0
- package/resources/ecc/skills/network-interface-health/SKILL.md +152 -0
- package/resources/ecc/skills/nextjs-turbopack/SKILL.md +1 -0
- package/resources/ecc/skills/nodejs-keccak256/SKILL.md +102 -0
- package/resources/ecc/skills/nutrient-document-processing/SKILL.md +167 -0
- package/resources/ecc/skills/nuxt4-patterns/SKILL.md +100 -0
- package/resources/ecc/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/resources/ecc/skills/openclaw-persona-forge/gacha.py +224 -0
- package/resources/ecc/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/resources/ecc/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/resources/ecc/skills/opensource-pipeline/SKILL.md +255 -0
- package/resources/ecc/skills/perl-patterns/SKILL.md +504 -0
- package/resources/ecc/skills/perl-security/SKILL.md +503 -0
- package/resources/ecc/skills/perl-testing/SKILL.md +475 -0
- package/resources/ecc/skills/plan-orchestrate/SKILL.md +262 -0
- package/resources/ecc/skills/plankton-code-quality/SKILL.md +236 -0
- package/resources/ecc/skills/postgres-patterns/SKILL.md +147 -0
- package/resources/ecc/skills/product-capability/SKILL.md +1 -0
- package/resources/ecc/skills/product-lens/SKILL.md +92 -0
- package/resources/ecc/skills/production-audit/SKILL.md +206 -0
- package/resources/ecc/skills/production-scheduling/SKILL.md +238 -0
- package/resources/ecc/skills/project-flow-ops/SKILL.md +111 -0
- package/resources/ecc/skills/prompt-optimizer/SKILL.md +398 -0
- package/resources/ecc/skills/python-patterns/SKILL.md +750 -0
- package/resources/ecc/skills/python-testing/SKILL.md +816 -0
- package/resources/ecc/skills/pytorch-patterns/SKILL.md +396 -0
- package/resources/ecc/skills/quality-nonconformance/SKILL.md +260 -0
- package/resources/ecc/skills/quarkus-patterns/SKILL.md +722 -0
- package/resources/ecc/skills/quarkus-security/SKILL.md +467 -0
- package/resources/ecc/skills/quarkus-tdd/SKILL.md +811 -0
- package/resources/ecc/skills/quarkus-verification/SKILL.md +479 -0
- package/resources/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/resources/ecc/skills/redis-patterns/SKILL.md +403 -0
- package/resources/ecc/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/resources/ecc/skills/remotion-video-creation/SKILL.md +43 -0
- package/resources/ecc/skills/remotion-video-creation/rules/3d.md +86 -0
- package/resources/ecc/skills/remotion-video-creation/rules/animations.md +29 -0
- package/resources/ecc/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/resources/ecc/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/resources/ecc/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/resources/ecc/skills/remotion-video-creation/rules/assets.md +78 -0
- package/resources/ecc/skills/remotion-video-creation/rules/audio.md +172 -0
- package/resources/ecc/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/resources/ecc/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/resources/ecc/skills/remotion-video-creation/rules/charts.md +58 -0
- package/resources/ecc/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/resources/ecc/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/resources/ecc/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/resources/ecc/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/resources/ecc/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/resources/ecc/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/resources/ecc/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/resources/ecc/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/resources/ecc/skills/remotion-video-creation/rules/images.md +130 -0
- package/resources/ecc/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/resources/ecc/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/resources/ecc/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/resources/ecc/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/resources/ecc/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/resources/ecc/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/resources/ecc/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/resources/ecc/skills/remotion-video-creation/rules/timing.md +179 -0
- package/resources/ecc/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/resources/ecc/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/resources/ecc/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/resources/ecc/skills/remotion-video-creation/rules/videos.md +171 -0
- package/resources/ecc/skills/repo-scan/SKILL.md +78 -0
- package/resources/ecc/skills/research-ops/SKILL.md +112 -0
- package/resources/ecc/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/resources/ecc/skills/rules-distill/SKILL.md +264 -0
- package/resources/ecc/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/resources/ecc/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/resources/ecc/skills/rust-patterns/SKILL.md +499 -0
- package/resources/ecc/skills/rust-testing/SKILL.md +500 -0
- package/resources/ecc/skills/safety-guard/SKILL.md +75 -0
- package/resources/ecc/skills/santa-method/SKILL.md +306 -0
- package/resources/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/resources/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/resources/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/resources/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/resources/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/resources/ecc/skills/search-first/SKILL.md +182 -0
- package/resources/ecc/skills/security-bounty-hunter/SKILL.md +99 -0
- package/resources/ecc/skills/security-review/SKILL.md +11 -2
- package/resources/ecc/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/resources/ecc/skills/security-scan/SKILL.md +165 -0
- package/resources/ecc/skills/seo/SKILL.md +154 -0
- package/resources/ecc/skills/skill-comply/SKILL.md +58 -0
- package/resources/ecc/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/resources/ecc/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/resources/ecc/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/resources/ecc/skills/skill-comply/prompts/classifier.md +24 -0
- package/resources/ecc/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/resources/ecc/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/resources/ecc/skills/skill-comply/pyproject.toml +15 -0
- package/resources/ecc/skills/skill-comply/scripts/__init__.py +0 -0
- package/resources/ecc/skills/skill-comply/scripts/classifier.py +85 -0
- package/resources/ecc/skills/skill-comply/scripts/grader.py +124 -0
- package/resources/ecc/skills/skill-comply/scripts/parser.py +107 -0
- package/resources/ecc/skills/skill-comply/scripts/report.py +170 -0
- package/resources/ecc/skills/skill-comply/scripts/run.py +127 -0
- package/resources/ecc/skills/skill-comply/scripts/runner.py +186 -0
- package/resources/ecc/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/resources/ecc/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/resources/ecc/skills/skill-comply/scripts/utils.py +13 -0
- package/resources/ecc/skills/skill-comply/tests/test_grader.py +197 -0
- package/resources/ecc/skills/skill-comply/tests/test_parser.py +90 -0
- package/resources/ecc/skills/skill-comply/tests/test_runner.py +172 -0
- package/resources/ecc/skills/skill-scout/SKILL.md +140 -0
- package/resources/ecc/skills/skill-stocktake/SKILL.md +194 -0
- package/resources/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/resources/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/resources/ecc/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/resources/ecc/skills/social-graph-ranker/SKILL.md +154 -0
- package/resources/ecc/skills/springboot-patterns/SKILL.md +314 -0
- package/resources/ecc/skills/springboot-security/SKILL.md +272 -0
- package/resources/ecc/skills/springboot-tdd/SKILL.md +158 -0
- package/resources/ecc/skills/springboot-verification/SKILL.md +231 -0
- package/resources/ecc/skills/strategic-compact/SKILL.md +31 -2
- package/resources/ecc/skills/strategic-compact/suggest-compact.sh +54 -0
- package/resources/ecc/skills/swift-actor-persistence/SKILL.md +143 -0
- package/resources/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/resources/ecc/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/resources/ecc/skills/swiftui-patterns/SKILL.md +259 -0
- package/resources/ecc/skills/tdd-workflow/SKILL.md +54 -0
- package/resources/ecc/skills/team-builder/SKILL.md +168 -0
- package/resources/ecc/skills/terminal-ops/SKILL.md +109 -0
- package/resources/ecc/skills/tinystruct-patterns/SKILL.md +131 -0
- package/resources/ecc/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/resources/ecc/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/resources/ecc/skills/tinystruct-patterns/references/routing.md +57 -0
- package/resources/ecc/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/resources/ecc/skills/tinystruct-patterns/references/testing.md +59 -0
- package/resources/ecc/skills/token-budget-advisor/SKILL.md +133 -0
- package/resources/ecc/skills/ui-demo/SKILL.md +465 -0
- package/resources/ecc/skills/ui-to-vue/SKILL.md +134 -0
- package/resources/ecc/skills/unified-notifications-ops/SKILL.md +187 -0
- package/resources/ecc/skills/verification-loop/SKILL.md +1 -0
- package/resources/ecc/skills/video-editing/SKILL.md +4 -1
- package/resources/ecc/skills/videodb/SKILL.md +374 -0
- package/resources/ecc/skills/videodb/reference/api-reference.md +550 -0
- package/resources/ecc/skills/videodb/reference/capture-reference.md +407 -0
- package/resources/ecc/skills/videodb/reference/capture.md +101 -0
- package/resources/ecc/skills/videodb/reference/editor.md +443 -0
- package/resources/ecc/skills/videodb/reference/generative.md +331 -0
- package/resources/ecc/skills/videodb/reference/rtstream-reference.md +564 -0
- package/resources/ecc/skills/videodb/reference/rtstream.md +65 -0
- package/resources/ecc/skills/videodb/reference/search.md +230 -0
- package/resources/ecc/skills/videodb/reference/streaming.md +406 -0
- package/resources/ecc/skills/videodb/reference/use-cases.md +118 -0
- package/resources/ecc/skills/videodb/scripts/ws_listener.py +282 -0
- package/resources/ecc/skills/visa-doc-translate/README.md +86 -0
- package/resources/ecc/skills/visa-doc-translate/SKILL.md +117 -0
- package/resources/ecc/skills/vite-patterns/SKILL.md +449 -0
- package/resources/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
- package/resources/ecc/skills/workspace-surface-audit/SKILL.md +125 -0
- package/resources/ecc/skills/x-api/SKILL.md +5 -0
- package/resources/ecc/agents/architect.json +0 -16
- package/resources/ecc/agents/build-error-resolver.json +0 -17
- package/resources/ecc/agents/chief-of-staff.json +0 -17
- package/resources/ecc/agents/code-reviewer.json +0 -16
- package/resources/ecc/agents/database-reviewer.json +0 -16
- package/resources/ecc/agents/doc-updater.json +0 -16
- package/resources/ecc/agents/e2e-runner.json +0 -17
- package/resources/ecc/agents/go-build-resolver.json +0 -17
- package/resources/ecc/agents/go-reviewer.json +0 -16
- package/resources/ecc/agents/harness-optimizer.json +0 -15
- package/resources/ecc/agents/loop-operator.json +0 -16
- package/resources/ecc/agents/planner.json +0 -15
- package/resources/ecc/agents/python-reviewer.json +0 -16
- package/resources/ecc/agents/refactor-cleaner.json +0 -17
- package/resources/ecc/agents/security-reviewer.json +0 -16
- package/resources/ecc/agents/tdd-guide.json +0 -17
- package/resources/ecc/commands/add-language-rules.md +0 -39
- package/resources/ecc/commands/database-migration.md +0 -36
- package/resources/ecc/commands/feature-development.md +0 -38
- package/resources/ecc/rules/common-development-workflow.md +0 -33
- package/resources/ecc/rules/kotlin-coding-style.md +0 -39
- package/resources/ecc/rules/kotlin-patterns.md +0 -50
- package/resources/ecc/rules/kotlin-security.md +0 -58
- package/resources/ecc/rules/kotlin-testing.md +0 -38
- package/resources/ecc/rules/php-coding-style.md +0 -25
- package/resources/ecc/rules/php-patterns.md +0 -23
- package/resources/ecc/rules/php-security.md +0 -24
- package/resources/ecc/rules/php-testing.md +0 -26
- package/resources/ecc/rules/swift-hooks.md +0 -20
- package/resources/ecc/rules/typescript-coding-style.md +0 -63
- package/resources/ecc/rules/typescript-testing.md +0 -16
- package/resources/ecc/skills/agent-introspection-debugging/agents/openai.yaml +0 -7
- package/resources/ecc/skills/agent-sort/agents/openai.yaml +0 -7
- package/resources/ecc/skills/api-design/agents/openai.yaml +0 -7
- package/resources/ecc/skills/article-writing/agents/openai.yaml +0 -7
- package/resources/ecc/skills/backend-patterns/agents/openai.yaml +0 -7
- package/resources/ecc/skills/brand-voice/agents/openai.yaml +0 -7
- package/resources/ecc/skills/bun-runtime/agents/openai.yaml +0 -7
- package/resources/ecc/skills/coding-standards/agents/openai.yaml +0 -7
- package/resources/ecc/skills/content-engine/agents/openai.yaml +0 -7
- package/resources/ecc/skills/crosspost/agents/openai.yaml +0 -7
- package/resources/ecc/skills/deep-research/agents/openai.yaml +0 -7
- package/resources/ecc/skills/dmux-workflows/agents/openai.yaml +0 -7
- package/resources/ecc/skills/documentation-lookup/agents/openai.yaml +0 -7
- package/resources/ecc/skills/e2e-testing/agents/openai.yaml +0 -7
- package/resources/ecc/skills/eval-harness/agents/openai.yaml +0 -7
- package/resources/ecc/skills/everything-claude-code/SKILL.md +0 -442
- package/resources/ecc/skills/everything-claude-code/agents/openai.yaml +0 -7
- package/resources/ecc/skills/exa-search/agents/openai.yaml +0 -7
- package/resources/ecc/skills/fal-ai-media/agents/openai.yaml +0 -7
- package/resources/ecc/skills/frontend-patterns/agents/openai.yaml +0 -7
- package/resources/ecc/skills/frontend-slides/agents/openai.yaml +0 -7
- package/resources/ecc/skills/investor-materials/agents/openai.yaml +0 -7
- package/resources/ecc/skills/investor-outreach/agents/openai.yaml +0 -7
- package/resources/ecc/skills/market-research/agents/openai.yaml +0 -7
- package/resources/ecc/skills/mcp-server-patterns/agents/openai.yaml +0 -7
- package/resources/ecc/skills/mle-workflow/agents/openai.yaml +0 -7
- package/resources/ecc/skills/nextjs-turbopack/agents/openai.yaml +0 -7
- package/resources/ecc/skills/product-capability/agents/openai.yaml +0 -7
- package/resources/ecc/skills/security-review/agents/openai.yaml +0 -7
- package/resources/ecc/skills/strategic-compact/agents/openai.yaml +0 -7
- package/resources/ecc/skills/tdd-workflow/agents/openai.yaml +0 -7
- package/resources/ecc/skills/verification-loop/agents/openai.yaml +0 -7
- package/resources/ecc/skills/video-editing/agents/openai.yaml +0 -7
- package/resources/ecc/skills/x-api/agents/openai.yaml +0 -7
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
- "**/*.fsproj"
|
|
6
|
+
---
|
|
7
|
+
# F# Testing
|
|
8
|
+
|
|
9
|
+
> This file extends [common/testing.md](../common/testing.md) with F#-specific content.
|
|
10
|
+
|
|
11
|
+
## Test Framework
|
|
12
|
+
|
|
13
|
+
- Prefer **xUnit** with **FsUnit.xUnit** for F#-friendly assertions
|
|
14
|
+
- Use **Unquote** for quotation-based assertions with clear failure messages
|
|
15
|
+
- Use **FsCheck.xUnit** for property-based testing
|
|
16
|
+
- Use **NSubstitute** or function stubs for mocking dependencies
|
|
17
|
+
- Use **Testcontainers** when integration tests need real infrastructure
|
|
18
|
+
|
|
19
|
+
## Test Organization
|
|
20
|
+
|
|
21
|
+
- Mirror `src/` structure under `tests/`
|
|
22
|
+
- Separate unit, integration, and end-to-end coverage clearly
|
|
23
|
+
- Name tests by behavior, not implementation details
|
|
24
|
+
|
|
25
|
+
```fsharp
|
|
26
|
+
open Xunit
|
|
27
|
+
open Swensen.Unquote
|
|
28
|
+
|
|
29
|
+
[<Fact>]
|
|
30
|
+
let ``PlaceOrder returns success when request is valid`` () =
|
|
31
|
+
let request = { CustomerId = "cust-123"; Items = [ validItem ] }
|
|
32
|
+
let result = OrderService.placeOrder request
|
|
33
|
+
test <@ Result.isOk result @>
|
|
34
|
+
|
|
35
|
+
[<Fact>]
|
|
36
|
+
let ``PlaceOrder returns error when items are empty`` () =
|
|
37
|
+
let request = { CustomerId = "cust-123"; Items = [] }
|
|
38
|
+
let result = OrderService.placeOrder request
|
|
39
|
+
test <@ Result.isError result @>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Property-Based Testing with FsCheck
|
|
43
|
+
|
|
44
|
+
```fsharp
|
|
45
|
+
open FsCheck.Xunit
|
|
46
|
+
|
|
47
|
+
[<Property>]
|
|
48
|
+
let ``order total is never negative`` (items: OrderItem list) =
|
|
49
|
+
let total = Order.calculateTotal items
|
|
50
|
+
total >= 0m
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## ASP.NET Core Integration Tests
|
|
54
|
+
|
|
55
|
+
- Use `WebApplicationFactory<TEntryPoint>` for API integration coverage
|
|
56
|
+
- Test auth, validation, and serialization through HTTP, not by bypassing middleware
|
|
57
|
+
|
|
58
|
+
## Coverage
|
|
59
|
+
|
|
60
|
+
- Target 80%+ line coverage
|
|
61
|
+
- Focus coverage on domain logic, validation, auth, and failure paths
|
|
62
|
+
- Run `dotnet test` in CI with coverage collection enabled where available
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
5
6
|
---
|
|
6
7
|
# Go Coding Style
|
|
7
8
|
|
|
8
|
-
> This file extends
|
|
9
|
+
> This file extends [common/coding-style.md](../common/coding-style.md) with Go specific content.
|
|
9
10
|
|
|
10
11
|
## Formatting
|
|
11
12
|
|
|
12
|
-
- **gofmt** and **goimports** are mandatory
|
|
13
|
+
- **gofmt** and **goimports** are mandatory — no style debates
|
|
13
14
|
|
|
14
15
|
## Design Principles
|
|
15
16
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
5
6
|
---
|
|
6
7
|
# Go Hooks
|
|
7
8
|
|
|
8
|
-
> This file extends
|
|
9
|
+
> This file extends [common/hooks.md](../common/hooks.md) with Go specific content.
|
|
9
10
|
|
|
10
11
|
## PostToolUse Hooks
|
|
11
12
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
5
6
|
---
|
|
6
7
|
# Go Patterns
|
|
7
8
|
|
|
8
|
-
> This file extends
|
|
9
|
+
> This file extends [common/patterns.md](../common/patterns.md) with Go specific content.
|
|
9
10
|
|
|
10
11
|
## Functional Options
|
|
11
12
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
5
6
|
---
|
|
6
7
|
# Go Security
|
|
7
8
|
|
|
8
|
-
> This file extends
|
|
9
|
+
> This file extends [common/security.md](../common/security.md) with Go specific content.
|
|
9
10
|
|
|
10
11
|
## Secret Management
|
|
11
12
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
5
6
|
---
|
|
6
7
|
# Go Testing
|
|
7
8
|
|
|
8
|
-
> This file extends
|
|
9
|
+
> This file extends [common/testing.md](../common/testing.md) with Go specific content.
|
|
9
10
|
|
|
10
11
|
## Framework
|
|
11
12
|
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Coding Style
|
|
6
|
+
|
|
7
|
+
> This file extends [common/coding-style.md](../common/coding-style.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Formatting
|
|
10
|
+
|
|
11
|
+
- **google-java-format** or **Checkstyle** (Google or Sun style) for enforcement
|
|
12
|
+
- One public top-level type per file
|
|
13
|
+
- Consistent indent: 2 or 4 spaces (match project standard)
|
|
14
|
+
- Member order: constants, fields, constructors, public methods, protected, private
|
|
15
|
+
|
|
16
|
+
## Immutability
|
|
17
|
+
|
|
18
|
+
- Prefer `record` for value types (Java 16+)
|
|
19
|
+
- Mark fields `final` by default — use mutable state only when required
|
|
20
|
+
- Return defensive copies from public APIs: `List.copyOf()`, `Map.copyOf()`, `Set.copyOf()`
|
|
21
|
+
- Copy-on-write: return new instances rather than mutating existing ones
|
|
22
|
+
|
|
23
|
+
```java
|
|
24
|
+
// GOOD — immutable value type
|
|
25
|
+
public record OrderSummary(Long id, String customerName, BigDecimal total) {}
|
|
26
|
+
|
|
27
|
+
// GOOD — final fields, no setters
|
|
28
|
+
public class Order {
|
|
29
|
+
private final Long id;
|
|
30
|
+
private final List<LineItem> items;
|
|
31
|
+
|
|
32
|
+
public List<LineItem> getItems() {
|
|
33
|
+
return List.copyOf(items);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Naming
|
|
39
|
+
|
|
40
|
+
Follow standard Java conventions:
|
|
41
|
+
- `PascalCase` for classes, interfaces, records, enums
|
|
42
|
+
- `camelCase` for methods, fields, parameters, local variables
|
|
43
|
+
- `SCREAMING_SNAKE_CASE` for `static final` constants
|
|
44
|
+
- Packages: all lowercase, reverse domain (`com.example.app.service`)
|
|
45
|
+
|
|
46
|
+
## Modern Java Features
|
|
47
|
+
|
|
48
|
+
Use modern language features where they improve clarity:
|
|
49
|
+
- **Records** for DTOs and value types (Java 16+)
|
|
50
|
+
- **Sealed classes** for closed type hierarchies (Java 17+)
|
|
51
|
+
- **Pattern matching** with `instanceof` — no explicit cast (Java 16+)
|
|
52
|
+
- **Text blocks** for multi-line strings — SQL, JSON templates (Java 15+)
|
|
53
|
+
- **Switch expressions** with arrow syntax (Java 14+)
|
|
54
|
+
- **Pattern matching in switch** — exhaustive sealed type handling (Java 21+)
|
|
55
|
+
|
|
56
|
+
```java
|
|
57
|
+
// Pattern matching instanceof
|
|
58
|
+
if (shape instanceof Circle c) {
|
|
59
|
+
return Math.PI * c.radius() * c.radius();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Sealed type hierarchy
|
|
63
|
+
public sealed interface PaymentMethod permits CreditCard, BankTransfer, Wallet {}
|
|
64
|
+
|
|
65
|
+
// Switch expression
|
|
66
|
+
String label = switch (status) {
|
|
67
|
+
case ACTIVE -> "Active";
|
|
68
|
+
case SUSPENDED -> "Suspended";
|
|
69
|
+
case CLOSED -> "Closed";
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Optional Usage
|
|
74
|
+
|
|
75
|
+
- Return `Optional<T>` from finder methods that may have no result
|
|
76
|
+
- Use `map()`, `flatMap()`, `orElseThrow()` — never call `get()` without `isPresent()`
|
|
77
|
+
- Never use `Optional` as a field type or method parameter
|
|
78
|
+
|
|
79
|
+
```java
|
|
80
|
+
// GOOD
|
|
81
|
+
return repository.findById(id)
|
|
82
|
+
.map(ResponseDto::from)
|
|
83
|
+
.orElseThrow(() -> new OrderNotFoundException(id));
|
|
84
|
+
|
|
85
|
+
// BAD — Optional as parameter
|
|
86
|
+
public void process(Optional<String> name) {}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Error Handling
|
|
90
|
+
|
|
91
|
+
- Prefer unchecked exceptions for domain errors
|
|
92
|
+
- Create domain-specific exceptions extending `RuntimeException`
|
|
93
|
+
- Avoid broad `catch (Exception e)` unless at top-level handlers
|
|
94
|
+
- Include context in exception messages
|
|
95
|
+
|
|
96
|
+
```java
|
|
97
|
+
public class OrderNotFoundException extends RuntimeException {
|
|
98
|
+
public OrderNotFoundException(Long id) {
|
|
99
|
+
super("Order not found: id=" + id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Streams
|
|
105
|
+
|
|
106
|
+
- Use streams for transformations; keep pipelines short (3-4 operations max)
|
|
107
|
+
- Prefer method references when readable: `.map(Order::getTotal)`
|
|
108
|
+
- Avoid side effects in stream operations
|
|
109
|
+
- For complex logic, prefer a loop over a convoluted stream pipeline
|
|
110
|
+
|
|
111
|
+
## References
|
|
112
|
+
|
|
113
|
+
See skill: `java-coding-standards` for full coding standards with examples.
|
|
114
|
+
See skill: `jpa-patterns` for JPA/Hibernate entity design patterns.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
- "**/pom.xml"
|
|
5
|
+
- "**/build.gradle"
|
|
6
|
+
- "**/build.gradle.kts"
|
|
7
|
+
---
|
|
8
|
+
# Java Hooks
|
|
9
|
+
|
|
10
|
+
> This file extends [common/hooks.md](../common/hooks.md) with Java-specific content.
|
|
11
|
+
|
|
12
|
+
## PostToolUse Hooks
|
|
13
|
+
|
|
14
|
+
Configure in `~/.claude/settings.json`:
|
|
15
|
+
|
|
16
|
+
- **google-java-format**: Auto-format `.java` files after edit
|
|
17
|
+
- **checkstyle**: Run style checks after editing Java files
|
|
18
|
+
- **./mvnw compile** or **./gradlew compileJava**: Verify compilation after changes
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Patterns
|
|
6
|
+
|
|
7
|
+
> This file extends [common/patterns.md](../common/patterns.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Repository Pattern
|
|
10
|
+
|
|
11
|
+
Encapsulate data access behind an interface:
|
|
12
|
+
|
|
13
|
+
```java
|
|
14
|
+
public interface OrderRepository {
|
|
15
|
+
Optional<Order> findById(Long id);
|
|
16
|
+
List<Order> findAll();
|
|
17
|
+
Order save(Order order);
|
|
18
|
+
void deleteById(Long id);
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Concrete implementations handle storage details (JPA, JDBC, in-memory for tests).
|
|
23
|
+
|
|
24
|
+
## Service Layer
|
|
25
|
+
|
|
26
|
+
Business logic in service classes; keep controllers and repositories thin:
|
|
27
|
+
|
|
28
|
+
```java
|
|
29
|
+
public class OrderService {
|
|
30
|
+
private final OrderRepository orderRepository;
|
|
31
|
+
private final PaymentGateway paymentGateway;
|
|
32
|
+
|
|
33
|
+
public OrderService(OrderRepository orderRepository, PaymentGateway paymentGateway) {
|
|
34
|
+
this.orderRepository = orderRepository;
|
|
35
|
+
this.paymentGateway = paymentGateway;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public OrderSummary placeOrder(CreateOrderRequest request) {
|
|
39
|
+
var order = Order.from(request);
|
|
40
|
+
paymentGateway.charge(order.total());
|
|
41
|
+
var saved = orderRepository.save(order);
|
|
42
|
+
return OrderSummary.from(saved);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Constructor Injection
|
|
48
|
+
|
|
49
|
+
Always use constructor injection — never field injection:
|
|
50
|
+
|
|
51
|
+
```java
|
|
52
|
+
// GOOD — constructor injection (testable, immutable)
|
|
53
|
+
public class NotificationService {
|
|
54
|
+
private final EmailSender emailSender;
|
|
55
|
+
|
|
56
|
+
public NotificationService(EmailSender emailSender) {
|
|
57
|
+
this.emailSender = emailSender;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// BAD — field injection (untestable without reflection, requires framework magic)
|
|
62
|
+
public class NotificationService {
|
|
63
|
+
@Inject // or @Autowired
|
|
64
|
+
private EmailSender emailSender;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## DTO Mapping
|
|
69
|
+
|
|
70
|
+
Use records for DTOs. Map at service/controller boundaries:
|
|
71
|
+
|
|
72
|
+
```java
|
|
73
|
+
public record OrderResponse(Long id, String customer, BigDecimal total) {
|
|
74
|
+
public static OrderResponse from(Order order) {
|
|
75
|
+
return new OrderResponse(order.getId(), order.getCustomerName(), order.getTotal());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Builder Pattern
|
|
81
|
+
|
|
82
|
+
Use for objects with many optional parameters:
|
|
83
|
+
|
|
84
|
+
```java
|
|
85
|
+
public class SearchCriteria {
|
|
86
|
+
private final String query;
|
|
87
|
+
private final int page;
|
|
88
|
+
private final int size;
|
|
89
|
+
private final String sortBy;
|
|
90
|
+
|
|
91
|
+
private SearchCriteria(Builder builder) {
|
|
92
|
+
this.query = builder.query;
|
|
93
|
+
this.page = builder.page;
|
|
94
|
+
this.size = builder.size;
|
|
95
|
+
this.sortBy = builder.sortBy;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public static class Builder {
|
|
99
|
+
private String query = "";
|
|
100
|
+
private int page = 0;
|
|
101
|
+
private int size = 20;
|
|
102
|
+
private String sortBy = "id";
|
|
103
|
+
|
|
104
|
+
public Builder query(String query) { this.query = query; return this; }
|
|
105
|
+
public Builder page(int page) { this.page = page; return this; }
|
|
106
|
+
public Builder size(int size) { this.size = size; return this; }
|
|
107
|
+
public Builder sortBy(String sortBy) { this.sortBy = sortBy; return this; }
|
|
108
|
+
public SearchCriteria build() { return new SearchCriteria(this); }
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Sealed Types for Domain Models
|
|
114
|
+
|
|
115
|
+
```java
|
|
116
|
+
public sealed interface PaymentResult permits PaymentSuccess, PaymentFailure {
|
|
117
|
+
record PaymentSuccess(String transactionId, BigDecimal amount) implements PaymentResult {}
|
|
118
|
+
record PaymentFailure(String errorCode, String message) implements PaymentResult {}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Exhaustive handling (Java 21+)
|
|
122
|
+
String message = switch (result) {
|
|
123
|
+
case PaymentSuccess s -> "Paid: " + s.transactionId();
|
|
124
|
+
case PaymentFailure f -> "Failed: " + f.errorCode();
|
|
125
|
+
};
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## API Response Envelope
|
|
129
|
+
|
|
130
|
+
Consistent API responses:
|
|
131
|
+
|
|
132
|
+
```java
|
|
133
|
+
public record ApiResponse<T>(boolean success, T data, String error) {
|
|
134
|
+
public static <T> ApiResponse<T> ok(T data) {
|
|
135
|
+
return new ApiResponse<>(true, data, null);
|
|
136
|
+
}
|
|
137
|
+
public static <T> ApiResponse<T> error(String message) {
|
|
138
|
+
return new ApiResponse<>(false, null, message);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## References
|
|
144
|
+
|
|
145
|
+
See skill: `springboot-patterns` for Spring Boot architecture patterns.
|
|
146
|
+
See skill: `quarkus-patterns` for Quarkus architecture patterns with REST, Panache, and messaging.
|
|
147
|
+
See skill: `jpa-patterns` for entity design and query optimization.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Security
|
|
6
|
+
|
|
7
|
+
> This file extends [common/security.md](../common/security.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Secrets Management
|
|
10
|
+
|
|
11
|
+
- Never hardcode API keys, tokens, or credentials in source code
|
|
12
|
+
- Use environment variables: `System.getenv("API_KEY")`
|
|
13
|
+
- Use a secret manager (Vault, AWS Secrets Manager) for production secrets
|
|
14
|
+
- Keep local config files with secrets in `.gitignore`
|
|
15
|
+
|
|
16
|
+
```java
|
|
17
|
+
// BAD
|
|
18
|
+
private static final String API_KEY = "sk-abc123...";
|
|
19
|
+
|
|
20
|
+
// GOOD — environment variable
|
|
21
|
+
String apiKey = System.getenv("PAYMENT_API_KEY");
|
|
22
|
+
Objects.requireNonNull(apiKey, "PAYMENT_API_KEY must be set");
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## SQL Injection Prevention
|
|
26
|
+
|
|
27
|
+
- Always use parameterized queries — never concatenate user input into SQL
|
|
28
|
+
- Use `PreparedStatement` or your framework's parameterized query API
|
|
29
|
+
- Validate and sanitize any input used in native queries
|
|
30
|
+
|
|
31
|
+
```java
|
|
32
|
+
// BAD — SQL injection via string concatenation
|
|
33
|
+
Statement stmt = conn.createStatement();
|
|
34
|
+
String sql = "SELECT * FROM orders WHERE name = '" + name + "'";
|
|
35
|
+
stmt.executeQuery(sql);
|
|
36
|
+
|
|
37
|
+
// GOOD — PreparedStatement with parameterized query
|
|
38
|
+
PreparedStatement ps = conn.prepareStatement("SELECT * FROM orders WHERE name = ?");
|
|
39
|
+
ps.setString(1, name);
|
|
40
|
+
|
|
41
|
+
// GOOD — JDBC template
|
|
42
|
+
jdbcTemplate.query("SELECT * FROM orders WHERE name = ?", mapper, name);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Input Validation
|
|
46
|
+
|
|
47
|
+
- Validate all user input at system boundaries before processing
|
|
48
|
+
- Use Bean Validation (`@NotNull`, `@NotBlank`, `@Size`) on DTOs when using a validation framework
|
|
49
|
+
- Sanitize file paths and user-provided strings before use
|
|
50
|
+
- Reject input that fails validation with clear error messages
|
|
51
|
+
|
|
52
|
+
```java
|
|
53
|
+
// Validate manually in plain Java
|
|
54
|
+
public Order createOrder(String customerName, BigDecimal amount) {
|
|
55
|
+
if (customerName == null || customerName.isBlank()) {
|
|
56
|
+
throw new IllegalArgumentException("Customer name is required");
|
|
57
|
+
}
|
|
58
|
+
if (amount == null || amount.compareTo(BigDecimal.ZERO) <= 0) {
|
|
59
|
+
throw new IllegalArgumentException("Amount must be positive");
|
|
60
|
+
}
|
|
61
|
+
return new Order(customerName, amount);
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Authentication and Authorization
|
|
66
|
+
|
|
67
|
+
- Never implement custom auth crypto — use established libraries
|
|
68
|
+
- Store passwords with bcrypt or Argon2, never MD5/SHA1
|
|
69
|
+
- Enforce authorization checks at service boundaries
|
|
70
|
+
- Clear sensitive data from logs — never log passwords, tokens, or PII
|
|
71
|
+
|
|
72
|
+
## Dependency Security
|
|
73
|
+
|
|
74
|
+
- Run `mvn dependency:tree` or `./gradlew dependencies` to audit transitive dependencies
|
|
75
|
+
- Use OWASP Dependency-Check or Snyk to scan for known CVEs
|
|
76
|
+
- Keep dependencies updated — set up Dependabot or Renovate
|
|
77
|
+
|
|
78
|
+
## Error Messages
|
|
79
|
+
|
|
80
|
+
- Never expose stack traces, internal paths, or SQL errors in API responses
|
|
81
|
+
- Map exceptions to safe, generic client messages at handler boundaries
|
|
82
|
+
- Log detailed errors server-side; return generic messages to clients
|
|
83
|
+
|
|
84
|
+
```java
|
|
85
|
+
// Log the detail, return a generic message
|
|
86
|
+
try {
|
|
87
|
+
return orderService.findById(id);
|
|
88
|
+
} catch (OrderNotFoundException ex) {
|
|
89
|
+
log.warn("Order not found: id={}", id);
|
|
90
|
+
return ApiResponse.error("Resource not found"); // generic, no internals
|
|
91
|
+
} catch (Exception ex) {
|
|
92
|
+
log.error("Unexpected error processing order id={}", id, ex);
|
|
93
|
+
return ApiResponse.error("Internal server error"); // never expose ex.getMessage()
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## References
|
|
98
|
+
|
|
99
|
+
See skill: `springboot-security` for Spring Security authentication and authorization patterns.
|
|
100
|
+
See skill: `quarkus-security` for Quarkus security with JWT/OIDC, RBAC, and CDI.
|
|
101
|
+
See skill: `security-review` for general security checklists.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Testing
|
|
6
|
+
|
|
7
|
+
> This file extends [common/testing.md](../common/testing.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Test Framework
|
|
10
|
+
|
|
11
|
+
- **JUnit 5** (`@Test`, `@ParameterizedTest`, `@Nested`, `@DisplayName`)
|
|
12
|
+
- **AssertJ** for fluent assertions (`assertThat(result).isEqualTo(expected)`)
|
|
13
|
+
- **Mockito** for mocking dependencies
|
|
14
|
+
- **Testcontainers** for integration tests requiring databases or services
|
|
15
|
+
|
|
16
|
+
## Test Organization
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/test/java/com/example/app/
|
|
20
|
+
service/ # Unit tests for service layer
|
|
21
|
+
controller/ # Web layer / API tests
|
|
22
|
+
repository/ # Data access tests
|
|
23
|
+
integration/ # Cross-layer integration tests
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Mirror the `src/main/java` package structure in `src/test/java`.
|
|
27
|
+
|
|
28
|
+
## Unit Test Pattern
|
|
29
|
+
|
|
30
|
+
```java
|
|
31
|
+
@ExtendWith(MockitoExtension.class)
|
|
32
|
+
class OrderServiceTest {
|
|
33
|
+
|
|
34
|
+
@Mock
|
|
35
|
+
private OrderRepository orderRepository;
|
|
36
|
+
|
|
37
|
+
private OrderService orderService;
|
|
38
|
+
|
|
39
|
+
@BeforeEach
|
|
40
|
+
void setUp() {
|
|
41
|
+
orderService = new OrderService(orderRepository);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Test
|
|
45
|
+
@DisplayName("findById returns order when exists")
|
|
46
|
+
void findById_existingOrder_returnsOrder() {
|
|
47
|
+
var order = new Order(1L, "Alice", BigDecimal.TEN);
|
|
48
|
+
when(orderRepository.findById(1L)).thenReturn(Optional.of(order));
|
|
49
|
+
|
|
50
|
+
var result = orderService.findById(1L);
|
|
51
|
+
|
|
52
|
+
assertThat(result.customerName()).isEqualTo("Alice");
|
|
53
|
+
verify(orderRepository).findById(1L);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Test
|
|
57
|
+
@DisplayName("findById throws when order not found")
|
|
58
|
+
void findById_missingOrder_throws() {
|
|
59
|
+
when(orderRepository.findById(99L)).thenReturn(Optional.empty());
|
|
60
|
+
|
|
61
|
+
assertThatThrownBy(() -> orderService.findById(99L))
|
|
62
|
+
.isInstanceOf(OrderNotFoundException.class)
|
|
63
|
+
.hasMessageContaining("99");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Parameterized Tests
|
|
69
|
+
|
|
70
|
+
```java
|
|
71
|
+
@ParameterizedTest
|
|
72
|
+
@CsvSource({
|
|
73
|
+
"100.00, 10, 90.00",
|
|
74
|
+
"50.00, 0, 50.00",
|
|
75
|
+
"200.00, 25, 150.00"
|
|
76
|
+
})
|
|
77
|
+
@DisplayName("discount applied correctly")
|
|
78
|
+
void applyDiscount(BigDecimal price, int pct, BigDecimal expected) {
|
|
79
|
+
assertThat(PricingUtils.discount(price, pct)).isEqualByComparingTo(expected);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Integration Tests
|
|
84
|
+
|
|
85
|
+
Use Testcontainers for real database integration:
|
|
86
|
+
|
|
87
|
+
```java
|
|
88
|
+
@Testcontainers
|
|
89
|
+
class OrderRepositoryIT {
|
|
90
|
+
|
|
91
|
+
@Container
|
|
92
|
+
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16");
|
|
93
|
+
|
|
94
|
+
private OrderRepository repository;
|
|
95
|
+
|
|
96
|
+
@BeforeEach
|
|
97
|
+
void setUp() {
|
|
98
|
+
var dataSource = new PGSimpleDataSource();
|
|
99
|
+
dataSource.setUrl(postgres.getJdbcUrl());
|
|
100
|
+
dataSource.setUser(postgres.getUsername());
|
|
101
|
+
dataSource.setPassword(postgres.getPassword());
|
|
102
|
+
repository = new JdbcOrderRepository(dataSource);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@Test
|
|
106
|
+
void save_and_findById() {
|
|
107
|
+
var saved = repository.save(new Order(null, "Bob", BigDecimal.ONE));
|
|
108
|
+
var found = repository.findById(saved.getId());
|
|
109
|
+
assertThat(found).isPresent();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
For Spring Boot integration tests, see skill: `springboot-tdd`.
|
|
115
|
+
For Quarkus integration tests, see skill: `quarkus-tdd`.
|
|
116
|
+
|
|
117
|
+
## Test Naming
|
|
118
|
+
|
|
119
|
+
Use descriptive names with `@DisplayName`:
|
|
120
|
+
- `methodName_scenario_expectedBehavior()` for method names
|
|
121
|
+
- `@DisplayName("human-readable description")` for reports
|
|
122
|
+
|
|
123
|
+
## Coverage
|
|
124
|
+
|
|
125
|
+
- Target 80%+ line coverage
|
|
126
|
+
- Use JaCoCo for coverage reporting
|
|
127
|
+
- Focus on service and domain logic — skip trivial getters/config classes
|
|
128
|
+
|
|
129
|
+
## References
|
|
130
|
+
|
|
131
|
+
See skill: `springboot-tdd` for Spring Boot TDD patterns with MockMvc and Testcontainers.
|
|
132
|
+
See skill: `quarkus-tdd` for Quarkus TDD patterns with REST Assured and Dev Services.
|
|
133
|
+
See skill: `java-coding-standards` for testing expectations.
|