claudecode-omc 5.9.1 → 5.12.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/.local/settings/settings.json +8 -0
- package/.omc-curation/governance.json +3 -0
- package/.omc-curation/sources.lock.json +5 -0
- package/README.md +10 -1
- package/bundled/manifest.json +4 -3
- package/bundled/upstream/anthropic-skills/.omc-source/bundle.json +2 -2
- package/bundled/upstream/anthropic-skills/.omc-source/provenance.json +394 -390
- package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +60 -29
- package/bundled/upstream/anthropic-skills/skills/claude-api/csharp/claude-api.md +46 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +3 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/go/claude-api.md +23 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +32 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +27 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +123 -7
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +13 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +7 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +18 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +9 -7
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +27 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/anthropic-cli.md +246 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +24 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +8 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +48 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +3 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +15 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +10 -6
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +25 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +48 -18
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +8 -5
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-scheduled-deployments.md +144 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +2 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +46 -9
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +259 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +17 -9
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +55 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/token-counting.md +56 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +22 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +45 -6
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +10 -12
- package/bundled/upstream/anthropic-skills/skills/frontend-design/SKILL.md +39 -26
- package/bundled/upstream/ecc/.omc-source/bundle.json +2 -2
- package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +2 -2
- package/bundled/upstream/ecc/.omc-source/provenance.json +602 -550
- package/bundled/upstream/ecc/agents/agent-evaluator.md +206 -0
- package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -9
- package/bundled/upstream/ecc/agents/php-reviewer.md +109 -0
- package/bundled/upstream/ecc/agents/spec-miner.md +217 -0
- package/bundled/upstream/ecc/agents/vue-reviewer.md +206 -0
- package/bundled/upstream/ecc/commands/cost-report.md +58 -84
- package/bundled/upstream/ecc/commands/epic-claim.md +26 -0
- package/bundled/upstream/ecc/commands/epic-decompose.md +23 -0
- package/bundled/upstream/ecc/commands/epic-publish.md +23 -0
- package/bundled/upstream/ecc/commands/epic-review.md +23 -0
- package/bundled/upstream/ecc/commands/epic-sync.md +23 -0
- package/bundled/upstream/ecc/commands/epic-unblock.md +22 -0
- package/bundled/upstream/ecc/commands/epic-validate.md +22 -0
- package/bundled/upstream/ecc/commands/instinct-status.md +8 -8
- package/bundled/upstream/ecc/commands/multi-backend.md +2 -0
- package/bundled/upstream/ecc/commands/multi-execute.md +2 -0
- package/bundled/upstream/ecc/commands/multi-frontend.md +2 -0
- package/bundled/upstream/ecc/commands/multi-plan.md +2 -0
- package/bundled/upstream/ecc/commands/multi-workflow.md +2 -0
- package/bundled/upstream/ecc/commands/orch-add-feature.md +36 -0
- package/bundled/upstream/ecc/commands/orch-build-mvp.md +36 -0
- package/bundled/upstream/ecc/commands/orch-change-feature.md +38 -0
- package/bundled/upstream/ecc/commands/orch-fix-defect.md +38 -0
- package/bundled/upstream/ecc/commands/orch-refine-code.md +39 -0
- package/bundled/upstream/ecc/commands/quality-gate.md +34 -16
- package/bundled/upstream/ecc/commands/vue-review.md +174 -0
- package/bundled/upstream/ecc/skills/accessibility/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-eval/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-harness-construction/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-introspection-debugging/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agent-self-evaluation/SKILL.md +182 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/references/hook-integration.md +64 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
- package/bundled/upstream/ecc/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
- package/bundled/upstream/ecc/skills/agent-sort/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agentic-engineering/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ai-first-engineering/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ai-regression-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/android-clean-architecture/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/api-connector-builder/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/api-design/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/architecture-decision-records/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/article-writing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/automation-audit-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/autonomous-loops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/benchmark/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/benchmark-methodology/SKILL.md +190 -0
- package/bundled/upstream/ecc/skills/benchmark-optimization-loop/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/blender-motion-state-inspection/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/blueprint/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/brand-discovery/SKILL.md +145 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/10_purpose-why.md +40 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/20_positioning.md +44 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/30_audience-niche.md +52 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/40_personality-archetype.md +57 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/50_voice-tone.md +59 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/60_narrative-story.md +50 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/70_founder-tension.md +49 -0
- package/bundled/upstream/ecc/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
- package/bundled/upstream/ecc/skills/brand-voice/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/browser-qa/SKILL.md +22 -4
- package/bundled/upstream/ecc/skills/bun-runtime/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/carrier-relationship-management/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ck/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/claude-devfleet/SKILL.md +11 -2
- package/bundled/upstream/ecc/skills/click-path-audit/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/clickhouse-io/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/code-tour/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/codebase-onboarding/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/codehealth-mcp/SKILL.md +167 -0
- package/bundled/upstream/ecc/skills/coding-standards/SKILL.md +4 -2
- package/bundled/upstream/ecc/skills/competitive-platform-analysis/SKILL.md +214 -0
- package/bundled/upstream/ecc/skills/competitive-report-structure/SKILL.md +162 -0
- package/bundled/upstream/ecc/skills/compose-multiplatform-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/config-gc/SKILL.md +120 -0
- package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/connections-optimizer/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/content-engine/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/content-hash-cache-pattern/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/context-budget/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/continuous-agent-loop/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +14 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +31 -7
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +90 -2
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +27 -0
- package/bundled/upstream/ecc/skills/cost-aware-llm-pipeline/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +58 -108
- package/bundled/upstream/ecc/skills/council/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/cpp-coding-standards/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/cpp-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/crosspost/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/csharp-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/customer-billing-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/customs-trade-compliance/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/dart-flutter-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/dashboard-builder/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/data-scraper-agent/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/data-throughput-accelerator/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/database-migrations/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/deep-research/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/deployment-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/design-system/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/django-celery/SKILL.md +3 -2
- package/bundled/upstream/ecc/skills/django-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/django-security/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/django-tdd/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/django-verification/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/dmux-workflows/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/docker-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/documentation-lookup/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/dotnet-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/dynamic-workflow-mode/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/e2e-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ecc-tools-cost-audit/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/email-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/energy-procurement/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/enterprise-agent-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/error-handling/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/eval-harness/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/evm-token-decimals/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/exa-search/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +375 -188
- package/bundled/upstream/ecc/skills/finance-billing-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +3 -2
- package/bundled/upstream/ecc/skills/flutter-dart-code-review/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/frontend-a11y/SKILL.md +3 -3
- package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/frontend-patterns/SKILL.md +23 -8
- package/bundled/upstream/ecc/skills/frontend-slides/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +1 -1
- package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/gan-style-harness/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/gateguard/SKILL.md +9 -1
- package/bundled/upstream/ecc/skills/generating-python-installer/SKILL.md +820 -0
- package/bundled/upstream/ecc/skills/git-workflow/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/github-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/golang-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/golang-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/google-workspace-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/healthcare-cdss-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/healthcare-emr-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/healthcare-eval-harness/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/healthcare-phi-compliance/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/hexagonal-architecture/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/hipaa-compliance/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +10 -9
- package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +4 -3
- package/bundled/upstream/ecc/skills/inherit-legacy-style/SKILL.md +157 -0
- package/bundled/upstream/ecc/skills/intent-driven-development/SKILL.md +360 -0
- package/bundled/upstream/ecc/skills/inventory-demand-planning/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/investor-materials/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/investor-outreach/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/iterative-retrieval/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ito-basket-compare/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ito-data-atlas-agent/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ito-market-intelligence/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ito-trade-planner/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/jira-integration/SKILL.md +17 -7
- package/bundled/upstream/ecc/skills/jpa-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/knowledge-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kotlin-coroutines-flows/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kotlin-exposed-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kotlin-ktor-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kotlin-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kotlin-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/kubernetes-patterns/SKILL.md +756 -0
- package/bundled/upstream/ecc/skills/laravel-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/laravel-plugin-discovery/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/laravel-security/SKILL.md +826 -163
- package/bundled/upstream/ecc/skills/laravel-tdd/SKILL.md +541 -149
- package/bundled/upstream/ecc/skills/laravel-verification/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/latency-critical-systems/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/lead-intelligence/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/llm-trading-agent-security/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/logistics-exception-management/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/manim-video/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/market-research/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/marketing-campaign/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/mcp-server-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/messages-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ml-adoption-playbook/SKILL.md +57 -0
- package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +1 -2
- package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nanoclaw-repl/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nestjs-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nodejs-keccak256/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nutrient-document-processing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/nuxt4-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/opensource-pipeline/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/orch-add-feature/SKILL.md +45 -0
- package/bundled/upstream/ecc/skills/orch-build-mvp/SKILL.md +49 -0
- package/bundled/upstream/ecc/skills/orch-change-feature/SKILL.md +43 -0
- package/bundled/upstream/ecc/skills/orch-fix-defect/SKILL.md +43 -0
- package/bundled/upstream/ecc/skills/orch-pipeline/SKILL.md +121 -0
- package/bundled/upstream/ecc/skills/orch-refine-code/SKILL.md +44 -0
- package/bundled/upstream/ecc/skills/parallel-execution-optimizer/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/perl-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/perl-security/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/perl-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/plankton-code-quality/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/postgres-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/prediction-market-oracle-research/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/prediction-market-risk-review/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/product-capability/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/product-lens/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/production-audit/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/production-scheduling/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/project-flow-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/python-patterns/SKILL.md +4 -3
- package/bundled/upstream/ecc/skills/python-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/pytorch-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/quality-nonconformance/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +51 -50
- package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +25 -24
- package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +73 -72
- package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +8 -7
- package/bundled/upstream/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/react-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/react-performance/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/react-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/recsys-pipeline-architect/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/recursive-decision-ledger/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/regex-vs-llm-structured-text/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/repo-scan/SKILL.md +64 -63
- package/bundled/upstream/ecc/skills/research-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/returns-reverse-logistics/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/rules-distill/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/rust-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/rust-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/safety-guard/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/santa-method/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/search-first/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/security-bounty-hunter/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/security-review/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/security-scan/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/seo/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/skill-comply/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +8 -0
- package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/social-graph-ranker/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/social-publisher/SKILL.md +17 -2
- package/bundled/upstream/ecc/skills/springboot-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/springboot-security/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/springboot-tdd/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/springboot-verification/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +10 -5
- package/bundled/upstream/ecc/skills/swift-actor-persistence/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/swift-protocol-di-testing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/taste/SKILL.md +264 -0
- package/bundled/upstream/ecc/skills/taste/references/genre-taxonomy.md +87 -0
- package/bundled/upstream/ecc/skills/tdd-workflow/SKILL.md +64 -1
- package/bundled/upstream/ecc/skills/team-agent-orchestration/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/team-builder/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/terminal-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +77 -1
- package/bundled/upstream/ecc/skills/token-budget-advisor/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ui-demo/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/uncloud/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/unified-notifications-ops/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/verification-loop/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/video-editing/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/videodb/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/vue-patterns/SKILL.md +471 -0
- package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +9 -8
- package/bundled/upstream/ecc/skills/workspace-surface-audit/SKILL.md +2 -1
- package/bundled/upstream/ecc/skills/x-api/SKILL.md +2 -1
- package/bundled/upstream/impeccable/.omc-source/bundle.json +20 -0
- package/bundled/upstream/impeccable/.omc-source/provenance.json +110 -0
- package/bundled/upstream/impeccable/agents/impeccable-manual-edit-applier.md +97 -0
- package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +168 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/adapt.md +311 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/animate.md +201 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/audit.md +133 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/bolder.md +113 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/brand.md +108 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/clarify.md +288 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/codex.md +105 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/colorize.md +257 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/craft.md +123 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/critique.md +767 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/delight.md +302 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/distill.md +111 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/document.md +429 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/extract.md +69 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/harden.md +347 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +90 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/init.md +172 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/interaction-design.md +189 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/layout.md +161 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +718 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/onboard.md +234 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/optimize.md +258 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/overdrive.md +130 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/polish.md +241 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/product.md +60 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/quieter.md +99 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/shape.md +165 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/typeset.md +279 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/command-metadata.json +94 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +961 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detect.mjs +21 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/design-system.mjs +750 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5138 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +448 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/rules/checks.mjs +2671 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +661 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +1632 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook.mjs +61 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/completion.mjs +19 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/event-validation.mjs +137 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/session-store.mjs +289 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +11173 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-inject.mjs +583 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +384 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +1135 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-status.mjs +61 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-target.mjs +30 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +297 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/palette.mjs +633 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/pin.mjs +214 -0
- package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +2 -2
- package/bundled/upstream/oh-my-claudecode/.omc-source/provenance.json +103 -103
- package/bundled/upstream/oh-my-claudecode/agents/analyst.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/architect.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/critic.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/debugger.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/tracer.md +6 -0
- package/bundled/upstream/oh-my-claudecode/agents/verifier.md +7 -0
- package/bundled/upstream/oh-my-claudecode/hooks/hooks.json +9 -2
- package/bundled/upstream/oh-my-claudecode/skills/ask/SKILL.md +15 -4
- package/bundled/upstream/oh-my-claudecode/skills/autopilot/SKILL.md +30 -1
- package/bundled/upstream/oh-my-claudecode/skills/cancel/SKILL.md +29 -35
- package/bundled/upstream/oh-my-claudecode/skills/ccg/SKILL.md +20 -9
- package/bundled/upstream/oh-my-claudecode/skills/configure-notifications/SKILL.md +2 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +6 -4
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +2 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/04-welcome.md +2 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-teams/SKILL.md +29 -18
- package/bundled/upstream/oh-my-claudecode/skills/team/SKILL.md +127 -165
- package/bundled/upstream/superpowers/.omc-source/bundle.json +2 -2
- package/bundled/upstream/superpowers/.omc-source/provenance.json +59 -52
- package/bundled/upstream/superpowers/hooks/hooks-codex.json +16 -0
- package/bundled/upstream/superpowers/hooks/session-start +4 -12
- package/bundled/upstream/superpowers/hooks/session-start-codex +26 -0
- package/bundled/upstream/superpowers/skills/brainstorming/SKILL.md +5 -10
- package/bundled/upstream/superpowers/skills/brainstorming/scripts/frame-template.html +25 -26
- package/bundled/upstream/superpowers/skills/brainstorming/scripts/helper.js +101 -22
- package/bundled/upstream/superpowers/skills/brainstorming/scripts/server.cjs +399 -30
- package/bundled/upstream/superpowers/skills/brainstorming/scripts/start-server.sh +70 -9
- package/bundled/upstream/superpowers/skills/brainstorming/scripts/stop-server.sh +66 -2
- package/bundled/upstream/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/bundled/upstream/superpowers/skills/brainstorming/visual-companion.md +33 -22
- package/bundled/upstream/superpowers/skills/dispatching-parallel-agents/SKILL.md +9 -6
- package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +2 -2
- package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +2 -12
- package/bundled/upstream/superpowers/skills/receiving-code-review/SKILL.md +2 -2
- package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +2 -2
- package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +15 -11
- package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +206 -67
- package/bundled/upstream/superpowers/skills/subagent-driven-development/implementer-prompt.md +30 -4
- package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/review-package +44 -0
- package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
- package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/task-brief +40 -0
- package/bundled/upstream/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
- package/bundled/upstream/superpowers/skills/systematic-debugging/SKILL.md +1 -1
- package/bundled/upstream/superpowers/skills/test-driven-development/SKILL.md +1 -1
- package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +9 -22
- package/bundled/upstream/superpowers/skills/using-superpowers/SKILL.md +19 -15
- package/bundled/upstream/superpowers/skills/using-superpowers/references/antigravity-tools.md +96 -0
- package/bundled/upstream/superpowers/skills/using-superpowers/references/claude-code-tools.md +50 -0
- package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +25 -12
- package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +27 -20
- package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +44 -32
- package/bundled/upstream/superpowers/skills/using-superpowers/references/pi-tools.md +28 -0
- package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +22 -0
- package/bundled/upstream/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +1 -1
- package/bundled/upstream/superpowers/skills/writing-skills/SKILL.md +52 -18
- package/bundled/upstream/superpowers/skills/writing-skills/anthropic-best-practices.md +88 -88
- package/bundled/upstream/superpowers/skills/writing-skills/persuasion-principles.md +3 -3
- package/package.json +1 -1
- package/src/cli/source.js +6 -0
- package/src/config/sources.js +15 -0
- package/src/merge/content-patch.js +4 -0
- package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -25
- package/bundled/upstream/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quarkus-patterns
|
|
3
3
|
description: Quarkus 3.x LTS architecture patterns with Camel for messaging, RESTful API design, CDI services, data access with Panache, and async processing. Use for Java Quarkus backend work with event-driven architectures.
|
|
4
|
-
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# Quarkus Development Patterns
|
|
@@ -70,7 +71,7 @@ public class OrderProcessingService {
|
|
|
70
71
|
```java
|
|
71
72
|
@ApplicationScoped
|
|
72
73
|
public class ProcessingService {
|
|
73
|
-
|
|
74
|
+
|
|
74
75
|
public void processDocument(Document doc) {
|
|
75
76
|
LogContext logContext = CustomLog.getCurrentContext();
|
|
76
77
|
try (SafeAutoCloseable ignored = CustomLog.startScope(logContext)) {
|
|
@@ -78,12 +79,12 @@ public class ProcessingService {
|
|
|
78
79
|
logContext.put("documentId", doc.getId().toString());
|
|
79
80
|
logContext.put("documentType", doc.getType());
|
|
80
81
|
logContext.put("userId", SecurityContext.getUserId());
|
|
81
|
-
|
|
82
|
+
|
|
82
83
|
log.info("Starting document processing");
|
|
83
|
-
|
|
84
|
+
|
|
84
85
|
// All logs within this scope inherit the context
|
|
85
86
|
processInternal(doc);
|
|
86
|
-
|
|
87
|
+
|
|
87
88
|
log.info("Document processing completed");
|
|
88
89
|
} catch (Exception e) {
|
|
89
90
|
log.error("Document processing failed", e);
|
|
@@ -103,7 +104,7 @@ public class ProcessingService {
|
|
|
103
104
|
<includeMdc>true</includeMdc>
|
|
104
105
|
</encoder>
|
|
105
106
|
</appender>
|
|
106
|
-
|
|
107
|
+
|
|
107
108
|
<logger name="com.example" level="INFO"/>
|
|
108
109
|
<root level="WARN">
|
|
109
110
|
<appender-ref ref="CONSOLE"/>
|
|
@@ -120,7 +121,7 @@ public class ProcessingService {
|
|
|
120
121
|
public class EventService {
|
|
121
122
|
private final EventRepository eventRepository;
|
|
122
123
|
private final ObjectMapper objectMapper;
|
|
123
|
-
|
|
124
|
+
|
|
124
125
|
public void createSuccessEvent(Object payload, String eventType) {
|
|
125
126
|
Objects.requireNonNull(payload, "Payload cannot be null");
|
|
126
127
|
Event event = new Event();
|
|
@@ -128,11 +129,11 @@ public class EventService {
|
|
|
128
129
|
event.setStatus(EventStatus.SUCCESS);
|
|
129
130
|
event.setPayload(serializePayload(payload));
|
|
130
131
|
event.setTimestamp(Instant.now());
|
|
131
|
-
|
|
132
|
+
|
|
132
133
|
eventRepository.persist(event);
|
|
133
134
|
log.info("Success event created: {}", eventType);
|
|
134
135
|
}
|
|
135
|
-
|
|
136
|
+
|
|
136
137
|
public void createErrorEvent(Object payload, String eventType, String errorMessage) {
|
|
137
138
|
Objects.requireNonNull(payload, "Payload cannot be null");
|
|
138
139
|
if (errorMessage == null || errorMessage.isBlank()) {
|
|
@@ -144,11 +145,11 @@ public class EventService {
|
|
|
144
145
|
event.setErrorMessage(errorMessage);
|
|
145
146
|
event.setPayload(serializePayload(payload));
|
|
146
147
|
event.setTimestamp(Instant.now());
|
|
147
|
-
|
|
148
|
+
|
|
148
149
|
eventRepository.persist(event);
|
|
149
150
|
log.error("Error event created: {} - {}", eventType, errorMessage);
|
|
150
151
|
}
|
|
151
|
-
|
|
152
|
+
|
|
152
153
|
private String serializePayload(Object payload) {
|
|
153
154
|
try {
|
|
154
155
|
return objectMapper.writeValueAsString(payload);
|
|
@@ -167,10 +168,10 @@ public class EventService {
|
|
|
167
168
|
@RequiredArgsConstructor
|
|
168
169
|
public class BusinessRulesPublisher {
|
|
169
170
|
private final ProducerTemplate producerTemplate;
|
|
170
|
-
|
|
171
|
+
|
|
171
172
|
public void publishSync(BusinessRulesPayload payload) {
|
|
172
173
|
producerTemplate.sendBody(
|
|
173
|
-
"direct:business-rules-publisher",
|
|
174
|
+
"direct:business-rules-publisher",
|
|
174
175
|
payload
|
|
175
176
|
);
|
|
176
177
|
}
|
|
@@ -182,23 +183,23 @@ public class BusinessRulesPublisher {
|
|
|
182
183
|
```java
|
|
183
184
|
@ApplicationScoped
|
|
184
185
|
public class BusinessRulesRoute extends RouteBuilder {
|
|
185
|
-
|
|
186
|
+
|
|
186
187
|
@ConfigProperty(name = "camel.rabbitmq.queue.business-rules")
|
|
187
188
|
String businessRulesQueue;
|
|
188
|
-
|
|
189
|
+
|
|
189
190
|
@ConfigProperty(name = "rabbitmq.host")
|
|
190
191
|
String rabbitHost;
|
|
191
|
-
|
|
192
|
+
|
|
192
193
|
@ConfigProperty(name = "rabbitmq.port")
|
|
193
194
|
Integer rabbitPort;
|
|
194
|
-
|
|
195
|
+
|
|
195
196
|
@Override
|
|
196
197
|
public void configure() {
|
|
197
198
|
from("direct:business-rules-publisher")
|
|
198
199
|
.routeId("business-rules-publisher")
|
|
199
200
|
.log("Publishing message to RabbitMQ: ${body}")
|
|
200
201
|
.marshal().json(JsonLibrary.Jackson)
|
|
201
|
-
.toF("spring-rabbitmq:%s?hostname=%s&portNumber=%d",
|
|
202
|
+
.toF("spring-rabbitmq:%s?hostname=%s&portNumber=%d",
|
|
202
203
|
businessRulesQueue, rabbitHost, rabbitPort);
|
|
203
204
|
}
|
|
204
205
|
}
|
|
@@ -209,7 +210,7 @@ public class BusinessRulesRoute extends RouteBuilder {
|
|
|
209
210
|
```java
|
|
210
211
|
@ApplicationScoped
|
|
211
212
|
public class DocumentProcessingRoute extends RouteBuilder {
|
|
212
|
-
|
|
213
|
+
|
|
213
214
|
@Override
|
|
214
215
|
public void configure() {
|
|
215
216
|
// Error handling
|
|
@@ -217,7 +218,7 @@ public class DocumentProcessingRoute extends RouteBuilder {
|
|
|
217
218
|
.handled(true)
|
|
218
219
|
.to("direct:validation-error-handler")
|
|
219
220
|
.log("Validation error: ${exception.message}");
|
|
220
|
-
|
|
221
|
+
|
|
221
222
|
// Main processing route
|
|
222
223
|
from("direct:process-document")
|
|
223
224
|
.routeId("document-processing")
|
|
@@ -232,7 +233,7 @@ public class DocumentProcessingRoute extends RouteBuilder {
|
|
|
232
233
|
.otherwise()
|
|
233
234
|
.to("direct:process-generic")
|
|
234
235
|
.end();
|
|
235
|
-
|
|
236
|
+
|
|
236
237
|
from("direct:validation-error-handler")
|
|
237
238
|
.bean(EventService.class, "createErrorEvent")
|
|
238
239
|
.log("Validation error handled");
|
|
@@ -245,24 +246,24 @@ public class DocumentProcessingRoute extends RouteBuilder {
|
|
|
245
246
|
```java
|
|
246
247
|
@ApplicationScoped
|
|
247
248
|
public class FileMonitoringRoute extends RouteBuilder {
|
|
248
|
-
|
|
249
|
+
|
|
249
250
|
@ConfigProperty(name = "file.input.directory")
|
|
250
251
|
String inputDirectory;
|
|
251
|
-
|
|
252
|
+
|
|
252
253
|
@ConfigProperty(name = "file.processed.directory")
|
|
253
254
|
String processedDirectory;
|
|
254
|
-
|
|
255
|
+
|
|
255
256
|
@ConfigProperty(name = "file.error.directory")
|
|
256
257
|
String errorDirectory;
|
|
257
|
-
|
|
258
|
+
|
|
258
259
|
@Override
|
|
259
260
|
public void configure() {
|
|
260
|
-
from("file:" + inputDirectory + "?move=" + processedDirectory +
|
|
261
|
+
from("file:" + inputDirectory + "?move=" + processedDirectory +
|
|
261
262
|
"&moveFailed=" + errorDirectory + "&delay=5000")
|
|
262
263
|
.routeId("file-monitor")
|
|
263
264
|
.log("Processing file: ${header.CamelFileName}")
|
|
264
265
|
.to("direct:process-file");
|
|
265
|
-
|
|
266
|
+
|
|
266
267
|
from("direct:process-file")
|
|
267
268
|
.bean(OrderProcessingService.class, "processFile")
|
|
268
269
|
.log("File processing completed");
|
|
@@ -275,13 +276,13 @@ public class FileMonitoringRoute extends RouteBuilder {
|
|
|
275
276
|
```java
|
|
276
277
|
@ApplicationScoped
|
|
277
278
|
public class InvoiceRoute extends RouteBuilder {
|
|
278
|
-
|
|
279
|
+
|
|
279
280
|
@Override
|
|
280
281
|
public void configure() {
|
|
281
282
|
from("direct:invoice-validation")
|
|
282
283
|
.bean(InvoiceFlowValidator.class, "validateFlowWithConfig")
|
|
283
284
|
.log("Validation result: ${body}");
|
|
284
|
-
|
|
285
|
+
|
|
285
286
|
from("direct:persist-and-publish")
|
|
286
287
|
.bean(DocumentJobService.class, "createDocumentAndJobEntities")
|
|
287
288
|
.bean(BusinessRulesPublisher.class, "publishAsync")
|
|
@@ -334,7 +335,7 @@ public class DocumentResource {
|
|
|
334
335
|
```java
|
|
335
336
|
@ApplicationScoped
|
|
336
337
|
public class DocumentRepository implements PanacheRepository<Document> {
|
|
337
|
-
|
|
338
|
+
|
|
338
339
|
public List<Document> findByStatus(DocumentStatus status, int page, int size) {
|
|
339
340
|
return find("status = ?1 order by createdAt desc", status)
|
|
340
341
|
.page(page, size)
|
|
@@ -344,7 +345,7 @@ public class DocumentRepository implements PanacheRepository<Document> {
|
|
|
344
345
|
public Optional<Document> findByReferenceNumber(String referenceNumber) {
|
|
345
346
|
return find("referenceNumber", referenceNumber).firstResultOptional();
|
|
346
347
|
}
|
|
347
|
-
|
|
348
|
+
|
|
348
349
|
public long countByStatusAndDate(DocumentStatus status, LocalDate date) {
|
|
349
350
|
return count("status = ?1 and createdAt >= ?2", status, date.atStartOfDay());
|
|
350
351
|
}
|
|
@@ -367,11 +368,11 @@ public class DocumentService {
|
|
|
367
368
|
document.setDescription(request.description());
|
|
368
369
|
document.setStatus(DocumentStatus.PENDING);
|
|
369
370
|
document.setCreatedAt(Instant.now());
|
|
370
|
-
|
|
371
|
+
|
|
371
372
|
repo.persist(document);
|
|
372
|
-
|
|
373
|
+
|
|
373
374
|
eventService.createSuccessEvent(document, "DOCUMENT_CREATED");
|
|
374
|
-
|
|
375
|
+
|
|
375
376
|
return document;
|
|
376
377
|
}
|
|
377
378
|
|
|
@@ -398,7 +399,7 @@ public record CreateDocumentRequest(
|
|
|
398
399
|
|
|
399
400
|
public record DocumentResponse(Long id, String referenceNumber, DocumentStatus status) {
|
|
400
401
|
public static DocumentResponse from(Document document) {
|
|
401
|
-
return new DocumentResponse(document.getId(), document.getReferenceNumber(),
|
|
402
|
+
return new DocumentResponse(document.getId(), document.getReferenceNumber(),
|
|
402
403
|
document.getStatus());
|
|
403
404
|
}
|
|
404
405
|
}
|
|
@@ -414,7 +415,7 @@ public class ValidationExceptionMapper implements ExceptionMapper<ConstraintViol
|
|
|
414
415
|
String message = exception.getConstraintViolations().stream()
|
|
415
416
|
.map(cv -> cv.getPropertyPath() + ": " + cv.getMessage())
|
|
416
417
|
.collect(Collectors.joining(", "));
|
|
417
|
-
|
|
418
|
+
|
|
418
419
|
return Response.status(Response.Status.BAD_REQUEST)
|
|
419
420
|
.entity(Map.of("error", "validation_error", "message", message))
|
|
420
421
|
.build();
|
|
@@ -444,30 +445,30 @@ public class GenericExceptionMapper implements ExceptionMapper<Exception> {
|
|
|
444
445
|
public class FileStorageService {
|
|
445
446
|
private final S3Client s3Client;
|
|
446
447
|
private final ExecutorService executorService;
|
|
447
|
-
|
|
448
|
+
|
|
448
449
|
@ConfigProperty(name = "storage.bucket-name")
|
|
449
450
|
String bucketName;
|
|
450
|
-
|
|
451
|
+
|
|
451
452
|
public CompletableFuture<StoredDocumentInfo> uploadOriginalFile(
|
|
452
|
-
InputStream inputStream,
|
|
453
|
-
long size,
|
|
453
|
+
InputStream inputStream,
|
|
454
|
+
long size,
|
|
454
455
|
LogContext logContext,
|
|
455
456
|
InvoiceFormat format) {
|
|
456
|
-
|
|
457
|
+
|
|
457
458
|
return CompletableFuture.supplyAsync(() -> {
|
|
458
459
|
try (SafeAutoCloseable ignored = CustomLog.startScope(logContext)) {
|
|
459
460
|
String path = generateStoragePath(format);
|
|
460
|
-
|
|
461
|
+
|
|
461
462
|
PutObjectRequest request = PutObjectRequest.builder()
|
|
462
463
|
.bucket(bucketName)
|
|
463
464
|
.key(path)
|
|
464
465
|
.contentLength(size)
|
|
465
466
|
.build();
|
|
466
|
-
|
|
467
|
+
|
|
467
468
|
s3Client.putObject(request, RequestBody.fromInputStream(inputStream, size));
|
|
468
|
-
|
|
469
|
+
|
|
469
470
|
log.info("File uploaded to S3: {}", path);
|
|
470
|
-
|
|
471
|
+
|
|
471
472
|
return new StoredDocumentInfo(path, size, Instant.now());
|
|
472
473
|
} catch (Exception e) {
|
|
473
474
|
log.error("Failed to upload file to S3", e);
|
|
@@ -513,7 +514,7 @@ public class DocumentCacheService {
|
|
|
513
514
|
hibernate-orm:
|
|
514
515
|
database:
|
|
515
516
|
generation: drop-and-create
|
|
516
|
-
|
|
517
|
+
|
|
517
518
|
rabbitmq:
|
|
518
519
|
host: localhost
|
|
519
520
|
port: 5672
|
|
@@ -539,7 +540,7 @@ public class DocumentCacheService {
|
|
|
539
540
|
hibernate-orm:
|
|
540
541
|
database:
|
|
541
542
|
generation: validate
|
|
542
|
-
|
|
543
|
+
|
|
543
544
|
rabbitmq:
|
|
544
545
|
host: ${RABBITMQ_HOST}
|
|
545
546
|
port: ${RABBITMQ_PORT}
|
|
@@ -632,7 +633,7 @@ public class CamelHealthCheck implements HealthCheck {
|
|
|
632
633
|
<groupId>io.quarkus</groupId>
|
|
633
634
|
<artifactId>quarkus-config-yaml</artifactId>
|
|
634
635
|
</dependency>
|
|
635
|
-
|
|
636
|
+
|
|
636
637
|
<!-- Camel Extensions -->
|
|
637
638
|
<dependency>
|
|
638
639
|
<groupId>org.apache.camel.quarkus</groupId>
|
|
@@ -646,7 +647,7 @@ public class CamelHealthCheck implements HealthCheck {
|
|
|
646
647
|
<groupId>org.apache.camel.quarkus</groupId>
|
|
647
648
|
<artifactId>camel-quarkus-bean</artifactId>
|
|
648
649
|
</dependency>
|
|
649
|
-
|
|
650
|
+
|
|
650
651
|
<!-- Lombok -->
|
|
651
652
|
<dependency>
|
|
652
653
|
<groupId>org.projectlombok</groupId>
|
|
@@ -654,7 +655,7 @@ public class CamelHealthCheck implements HealthCheck {
|
|
|
654
655
|
<version>${lombok.version}</version>
|
|
655
656
|
<scope>provided</scope>
|
|
656
657
|
</dependency>
|
|
657
|
-
|
|
658
|
+
|
|
658
659
|
<!-- Logging -->
|
|
659
660
|
<dependency>
|
|
660
661
|
<groupId>io.quarkiverse.logging.logback</groupId>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quarkus-security
|
|
3
3
|
description: Quarkus Security best practices for authentication, authorization, JWT/OIDC, RBAC, input validation, CSRF, secrets management, and dependency security.
|
|
4
|
-
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# Quarkus Security Review
|
|
@@ -28,7 +29,7 @@ Best practices for securing Quarkus applications with authentication, authorizat
|
|
|
28
29
|
@Path("/api/protected")
|
|
29
30
|
@Authenticated
|
|
30
31
|
public class ProtectedResource {
|
|
31
|
-
|
|
32
|
+
|
|
32
33
|
@Inject
|
|
33
34
|
JsonWebToken jwt;
|
|
34
35
|
|
|
@@ -65,20 +66,20 @@ quarkus.oidc.credentials.secret=${OIDC_SECRET}
|
|
|
65
66
|
@Provider
|
|
66
67
|
@Priority(Priorities.AUTHENTICATION)
|
|
67
68
|
public class CustomAuthFilter implements ContainerRequestFilter {
|
|
68
|
-
|
|
69
|
+
|
|
69
70
|
@Inject
|
|
70
71
|
SecurityIdentity identity;
|
|
71
72
|
|
|
72
73
|
@Override
|
|
73
74
|
public void filter(ContainerRequestContext requestContext) {
|
|
74
75
|
String authHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
|
|
75
|
-
|
|
76
|
+
|
|
76
77
|
// Reject immediately if header is absent or malformed
|
|
77
78
|
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
|
|
78
79
|
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
|
|
79
80
|
return;
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
+
|
|
82
83
|
String token = authHeader.substring(7);
|
|
83
84
|
if (!validateToken(token)) {
|
|
84
85
|
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
|
|
@@ -100,7 +101,7 @@ public class CustomAuthFilter implements ContainerRequestFilter {
|
|
|
100
101
|
@Path("/api/admin")
|
|
101
102
|
@RolesAllowed("ADMIN")
|
|
102
103
|
public class AdminResource {
|
|
103
|
-
|
|
104
|
+
|
|
104
105
|
@GET
|
|
105
106
|
@Path("/users")
|
|
106
107
|
public List<UserDto> listUsers() {
|
|
@@ -118,7 +119,7 @@ public class AdminResource {
|
|
|
118
119
|
|
|
119
120
|
@Path("/api/users")
|
|
120
121
|
public class UserResource {
|
|
121
|
-
|
|
122
|
+
|
|
122
123
|
@Inject
|
|
123
124
|
SecurityIdentity securityIdentity;
|
|
124
125
|
|
|
@@ -127,7 +128,7 @@ public class UserResource {
|
|
|
127
128
|
@RolesAllowed("USER")
|
|
128
129
|
public Response getUser(@PathParam("id") Long id) {
|
|
129
130
|
// Check ownership
|
|
130
|
-
if (!securityIdentity.hasRole("ADMIN") &&
|
|
131
|
+
if (!securityIdentity.hasRole("ADMIN") &&
|
|
131
132
|
!isOwner(id, securityIdentity.getPrincipal().getName())) {
|
|
132
133
|
return Response.status(Response.Status.FORBIDDEN).build();
|
|
133
134
|
}
|
|
@@ -145,7 +146,7 @@ public class UserResource {
|
|
|
145
146
|
```java
|
|
146
147
|
@ApplicationScoped
|
|
147
148
|
public class SecurityService {
|
|
148
|
-
|
|
149
|
+
|
|
149
150
|
@Inject
|
|
150
151
|
SecurityIdentity securityIdentity;
|
|
151
152
|
|
|
@@ -153,7 +154,7 @@ public class SecurityService {
|
|
|
153
154
|
if (securityIdentity.isAnonymous()) {
|
|
154
155
|
return false;
|
|
155
156
|
}
|
|
156
|
-
|
|
157
|
+
|
|
157
158
|
if (securityIdentity.hasRole("ADMIN")) {
|
|
158
159
|
return true;
|
|
159
160
|
}
|
|
@@ -229,7 +230,7 @@ List<User> users = User.list("email = ?1 and active = ?2", email, true);
|
|
|
229
230
|
Optional<User> user = User.find("username", username).firstResultOptional();
|
|
230
231
|
|
|
231
232
|
// GOOD: Named parameters
|
|
232
|
-
List<User> users = User.list("email = :email and age > :minAge",
|
|
233
|
+
List<User> users = User.list("email = :email and age > :minAge",
|
|
233
234
|
Parameters.with("email", email).and("minAge", 18));
|
|
234
235
|
```
|
|
235
236
|
|
|
@@ -256,7 +257,7 @@ public class User extends PanacheEntity {
|
|
|
256
257
|
```java
|
|
257
258
|
@ApplicationScoped
|
|
258
259
|
public class PasswordService {
|
|
259
|
-
|
|
260
|
+
|
|
260
261
|
public String hash(String plainPassword) {
|
|
261
262
|
return BcryptUtil.bcryptHash(plainPassword);
|
|
262
263
|
}
|
|
@@ -324,7 +325,7 @@ quarkus.vault.authentication.kubernetes.role=my-role
|
|
|
324
325
|
```java
|
|
325
326
|
@ApplicationScoped
|
|
326
327
|
public class SecretService {
|
|
327
|
-
|
|
328
|
+
|
|
328
329
|
@ConfigProperty(name = "api-key")
|
|
329
330
|
String apiKey; // Fetched from Vault
|
|
330
331
|
|
|
@@ -351,7 +352,7 @@ public class RateLimitFilter implements ContainerRequestFilter {
|
|
|
351
352
|
@Override
|
|
352
353
|
public void filter(ContainerRequestContext requestContext) {
|
|
353
354
|
String clientId = getClientIdentifier();
|
|
354
|
-
RateLimiter limiter = limiters.computeIfAbsent(clientId,
|
|
355
|
+
RateLimiter limiter = limiters.computeIfAbsent(clientId,
|
|
355
356
|
k -> RateLimiter.create(100.0)); // 100 requests per second
|
|
356
357
|
|
|
357
358
|
if (!limiter.tryAcquire()) {
|
|
@@ -377,25 +378,25 @@ public class RateLimitFilter implements ContainerRequestFilter {
|
|
|
377
378
|
```java
|
|
378
379
|
@Provider
|
|
379
380
|
public class SecurityHeadersFilter implements ContainerResponseFilter {
|
|
380
|
-
|
|
381
|
+
|
|
381
382
|
@Override
|
|
382
383
|
public void filter(ContainerRequestContext request, ContainerResponseContext response) {
|
|
383
384
|
MultivaluedMap<String, Object> headers = response.getHeaders();
|
|
384
|
-
|
|
385
|
+
|
|
385
386
|
// Prevent clickjacking
|
|
386
387
|
headers.putSingle("X-Frame-Options", "DENY");
|
|
387
|
-
|
|
388
|
+
|
|
388
389
|
// XSS protection
|
|
389
390
|
headers.putSingle("X-Content-Type-Options", "nosniff");
|
|
390
391
|
headers.putSingle("X-XSS-Protection", "1; mode=block");
|
|
391
|
-
|
|
392
|
+
|
|
392
393
|
// HSTS
|
|
393
394
|
headers.putSingle("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
|
|
394
|
-
|
|
395
|
+
|
|
395
396
|
// CSP — avoid 'unsafe-inline' for script-src as it negates XSS protection;
|
|
396
397
|
// use nonces or hashes instead. 'unsafe-inline' for style-src is acceptable
|
|
397
398
|
// when CSS frameworks require it, but prefer nonces where possible.
|
|
398
|
-
headers.putSingle("Content-Security-Policy",
|
|
399
|
+
headers.putSingle("Content-Security-Policy",
|
|
399
400
|
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'");
|
|
400
401
|
}
|
|
401
402
|
}
|
|
@@ -412,11 +413,11 @@ public class AuditService {
|
|
|
412
413
|
SecurityIdentity securityIdentity;
|
|
413
414
|
|
|
414
415
|
public void logAccess(String resource, String action) {
|
|
415
|
-
String user = securityIdentity.isAnonymous()
|
|
416
|
-
? "anonymous"
|
|
416
|
+
String user = securityIdentity.isAnonymous()
|
|
417
|
+
? "anonymous"
|
|
417
418
|
: securityIdentity.getPrincipal().getName();
|
|
418
|
-
|
|
419
|
-
LOG.infof("AUDIT: user=%s action=%s resource=%s timestamp=%s",
|
|
419
|
+
|
|
420
|
+
LOG.infof("AUDIT: user=%s action=%s resource=%s timestamp=%s",
|
|
420
421
|
user, action, resource, Instant.now());
|
|
421
422
|
}
|
|
422
423
|
}
|