claudecode-omc 5.11.0 → 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/bundled/manifest.json +3 -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 +2 -2
- package/bundled/upstream/impeccable/.omc-source/provenance.json +30 -25
- package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +2 -2
- package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +10 -8
- package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +1 -1
- package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +707 -26
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +202 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +57 -11
- 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 +231 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +7 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +29 -4
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +20 -4
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +2 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +27 -1
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +29 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +135 -48
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +5 -2
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +375 -29
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +8 -1
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +37 -35
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +159 -72
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +16 -11
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +9 -8
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-target.mjs +30 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +1 -1
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +72 -21
- 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/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
package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs
CHANGED
|
@@ -1224,6 +1224,7 @@ if (IS_BROWSER) {
|
|
|
1224
1224
|
category: ap ? ap.category : 'quality',
|
|
1225
1225
|
severity: ap?.severity || 'warning',
|
|
1226
1226
|
detail: f.detail || f.snippet,
|
|
1227
|
+
ignoreValue: f.ignoreValue || f.value || '',
|
|
1227
1228
|
name: ap ? ap.name : (f.type || f.id),
|
|
1228
1229
|
description: ap ? ap.description : '',
|
|
1229
1230
|
};
|
|
@@ -1260,10 +1261,203 @@ if (IS_BROWSER) {
|
|
|
1260
1261
|
return [...groupMap.entries()].map(([el, findings]) => ({ el, findings }));
|
|
1261
1262
|
}
|
|
1262
1263
|
|
|
1264
|
+
const DESIGN_COLOR_TOLERANCE = 6;
|
|
1265
|
+
const DESIGN_RADIUS_TOLERANCE_PX = 0.5;
|
|
1266
|
+
const DESIGN_SKIP_TAGS = new Set(['head', 'title', 'meta', 'link', 'style', 'script', 'noscript', 'template', 'source']);
|
|
1267
|
+
|
|
1268
|
+
function normalizeBrowserFontName(value) {
|
|
1269
|
+
return String(value || '')
|
|
1270
|
+
.trim()
|
|
1271
|
+
.replace(/^["']|["']$/g, '')
|
|
1272
|
+
.replace(/\+/g, ' ')
|
|
1273
|
+
.replace(/\s+/g, ' ')
|
|
1274
|
+
.toLowerCase();
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
function browserPrimaryFont(stack) {
|
|
1278
|
+
if (!stack || /var\(/i.test(stack)) return '';
|
|
1279
|
+
return String(stack || '')
|
|
1280
|
+
.split(',')
|
|
1281
|
+
.map(normalizeBrowserFontName)
|
|
1282
|
+
.find(font => font && !GENERIC_FONTS.has(font)) || '';
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
function browserDesignSystemConfig() {
|
|
1286
|
+
const raw = window.__IMPECCABLE_CONFIG__?.designSystem;
|
|
1287
|
+
if (!raw?.present) return null;
|
|
1288
|
+
const allowedFonts = new Set((raw.allowedFonts || []).map(normalizeBrowserFontName).filter(Boolean));
|
|
1289
|
+
const allowedColors = (raw.allowedColors || [])
|
|
1290
|
+
.filter(color => color && Number.isFinite(color.r) && Number.isFinite(color.g) && Number.isFinite(color.b))
|
|
1291
|
+
.map(color => ({ r: color.r, g: color.g, b: color.b }));
|
|
1292
|
+
const allowedRadii = (raw.allowedRadii || [])
|
|
1293
|
+
.map(Number)
|
|
1294
|
+
.filter(px => Number.isFinite(px));
|
|
1295
|
+
return {
|
|
1296
|
+
present: true,
|
|
1297
|
+
hasFonts: raw.hasFonts === true && allowedFonts.size > 0,
|
|
1298
|
+
allowedFonts,
|
|
1299
|
+
hasColors: raw.hasColors === true && allowedColors.length > 0,
|
|
1300
|
+
allowedColors,
|
|
1301
|
+
hasRadii: raw.hasRadii === true && allowedRadii.length > 0,
|
|
1302
|
+
allowedRadii,
|
|
1303
|
+
hasPillRadius: raw.hasPillRadius === true,
|
|
1304
|
+
};
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
function browserColorsClose(a, b) {
|
|
1308
|
+
if (!a || !b) return false;
|
|
1309
|
+
return Math.max(
|
|
1310
|
+
Math.abs(a.r - b.r),
|
|
1311
|
+
Math.abs(a.g - b.g),
|
|
1312
|
+
Math.abs(a.b - b.b),
|
|
1313
|
+
) <= DESIGN_COLOR_TOLERANCE;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
function isBrowserDesignColorAllowed(raw, designSystem) {
|
|
1317
|
+
if (!designSystem?.hasColors) return true;
|
|
1318
|
+
const text = String(raw || '').trim().toLowerCase();
|
|
1319
|
+
if (!text || text === 'transparent' || text === 'currentcolor' || text === 'inherit' || text === 'initial') return true;
|
|
1320
|
+
if (text.includes('var(')) return true;
|
|
1321
|
+
const parsed = parseAnyColor(text);
|
|
1322
|
+
if (!parsed) return true;
|
|
1323
|
+
if ((parsed.a ?? 1) <= 0.05) return true;
|
|
1324
|
+
return designSystem.allowedColors.some(color => browserColorsClose(parsed, color));
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
function isBrowserTransparentCss(value) {
|
|
1328
|
+
const text = String(value || '').trim().toLowerCase();
|
|
1329
|
+
if (!text || text === 'transparent') return true;
|
|
1330
|
+
const parsed = parseAnyColor(text);
|
|
1331
|
+
return parsed ? (parsed.a ?? 1) <= 0.05 : false;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
function isBrowserDesignRadiusAllowed(raw, designSystem) {
|
|
1335
|
+
if (!designSystem?.hasRadii) return true;
|
|
1336
|
+
const text = String(raw || '').trim().toLowerCase();
|
|
1337
|
+
if (!text || text === '0' || text === 'none' || text === 'initial' || text === 'inherit') return true;
|
|
1338
|
+
if (text.includes('var(') || text.includes('%')) return true;
|
|
1339
|
+
const px = resolveLengthPx(text, 16);
|
|
1340
|
+
if (px == null || !Number.isFinite(px) || px <= DESIGN_RADIUS_TOLERANCE_PX) return true;
|
|
1341
|
+
if (designSystem.hasPillRadius && px >= 99) return true;
|
|
1342
|
+
return designSystem.allowedRadii.some(allowed => Math.abs(allowed - px) <= DESIGN_RADIUS_TOLERANCE_PX);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
function browserRadiusTokens(value) {
|
|
1346
|
+
return String(value || '')
|
|
1347
|
+
.replace(/\s*\/\s*/g, ' ')
|
|
1348
|
+
.split(/\s+/)
|
|
1349
|
+
.map(token => token.trim())
|
|
1350
|
+
.filter(Boolean);
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
function browserHasDirectText(el) {
|
|
1354
|
+
return [...(el.childNodes || [])].some(node => node.nodeType === 3 && node.textContent.trim().length > 0);
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
function browserSampleText(el) {
|
|
1358
|
+
const text = String(el.textContent || '').replace(/\s+/g, ' ').trim();
|
|
1359
|
+
return text ? ` "${text.slice(0, 40)}"` : '';
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
function shouldSkipDesignElement(el) {
|
|
1363
|
+
const tag = el.tagName?.toLowerCase?.() || '';
|
|
1364
|
+
return DESIGN_SKIP_TAGS.has(tag) || isElementHidden(el);
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
function checkElementDesignSystemDOM(el, designSystem, seen) {
|
|
1368
|
+
if (!designSystem?.present || shouldSkipDesignElement(el)) return [];
|
|
1369
|
+
const findings = [];
|
|
1370
|
+
const tag = el.tagName?.toLowerCase?.() || 'unknown';
|
|
1371
|
+
const style = getComputedStyle(el);
|
|
1372
|
+
|
|
1373
|
+
if (designSystem.hasFonts && browserHasDirectText(el)) {
|
|
1374
|
+
const font = browserPrimaryFont(style.fontFamily || '');
|
|
1375
|
+
if (font && !designSystem.allowedFonts.has(font) && !seen.fonts.has(font)) {
|
|
1376
|
+
seen.fonts.add(font);
|
|
1377
|
+
findings.push({
|
|
1378
|
+
type: 'design-system-font',
|
|
1379
|
+
detail: `${tag}${browserSampleText(el)} uses ${font}; not declared in DESIGN.md typography`,
|
|
1380
|
+
ignoreValue: font,
|
|
1381
|
+
});
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
if (designSystem.hasColors) {
|
|
1386
|
+
const colorChecks = [];
|
|
1387
|
+
if (browserHasDirectText(el)) colorChecks.push(['text color', style.color]);
|
|
1388
|
+
if (!isBrowserTransparentCss(style.backgroundColor)) colorChecks.push(['background', style.backgroundColor]);
|
|
1389
|
+
for (const side of ['Top', 'Right', 'Bottom', 'Left']) {
|
|
1390
|
+
if ((parseFloat(style[`border${side}Width`]) || 0) > 0) {
|
|
1391
|
+
colorChecks.push([`border-${side.toLowerCase()}`, style[`border${side}Color`]]);
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
if ((parseFloat(style.outlineWidth) || 0) > 0) colorChecks.push(['outline', style.outlineColor]);
|
|
1395
|
+
|
|
1396
|
+
for (const [kind, raw] of colorChecks) {
|
|
1397
|
+
const label = String(raw || '').trim().replace(/\s+/g, ' ');
|
|
1398
|
+
if (isBrowserDesignColorAllowed(label, designSystem)) continue;
|
|
1399
|
+
const key = `${kind}:${label}`;
|
|
1400
|
+
if (seen.colors.has(key)) continue;
|
|
1401
|
+
seen.colors.add(key);
|
|
1402
|
+
findings.push({
|
|
1403
|
+
type: 'design-system-color',
|
|
1404
|
+
detail: `${kind} ${label} on ${tag}${browserSampleText(el)} is outside DESIGN.md colors`,
|
|
1405
|
+
ignoreValue: label,
|
|
1406
|
+
});
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
if (designSystem.hasRadii) {
|
|
1411
|
+
for (const token of browserRadiusTokens(style.borderRadius || '')) {
|
|
1412
|
+
if (isBrowserDesignRadiusAllowed(token, designSystem)) continue;
|
|
1413
|
+
if (seen.radii.has(token)) continue;
|
|
1414
|
+
seen.radii.add(token);
|
|
1415
|
+
findings.push({
|
|
1416
|
+
type: 'design-system-radius',
|
|
1417
|
+
detail: `border-radius ${token} on ${tag}${browserSampleText(el)} is outside the DESIGN.md rounded scale`,
|
|
1418
|
+
ignoreValue: token,
|
|
1419
|
+
});
|
|
1420
|
+
}
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
return findings;
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
function decodeBrowserGoogleFamily(value) {
|
|
1427
|
+
const family = String(value || '').split(':')[0].replace(/\+/g, ' ');
|
|
1428
|
+
try {
|
|
1429
|
+
return decodeURIComponent(family);
|
|
1430
|
+
} catch {
|
|
1431
|
+
return family;
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
function checkBrowserDesignSystemSources(designSystem, seen) {
|
|
1436
|
+
if (!designSystem?.hasFonts) return [];
|
|
1437
|
+
const findings = [];
|
|
1438
|
+
for (const link of document.querySelectorAll('link[href*="fonts.googleapis.com/css"]')) {
|
|
1439
|
+
const href = link.getAttribute('href') || '';
|
|
1440
|
+
for (const match of href.matchAll(/[?&]family=([^&]+)/g)) {
|
|
1441
|
+
const display = decodeBrowserGoogleFamily(match[1]);
|
|
1442
|
+
const font = normalizeBrowserFontName(display);
|
|
1443
|
+
if (!font || designSystem.allowedFonts.has(font) || seen.fonts.has(font)) continue;
|
|
1444
|
+
seen.fonts.add(font);
|
|
1445
|
+
findings.push({
|
|
1446
|
+
type: 'design-system-font',
|
|
1447
|
+
detail: `Google Fonts: ${display} is not declared in DESIGN.md typography`,
|
|
1448
|
+
ignoreValue: display,
|
|
1449
|
+
});
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
return findings;
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1263
1455
|
function collectBrowserFindings() {
|
|
1264
1456
|
const groupMap = new Map();
|
|
1265
1457
|
const _disabled = EXTENSION_MODE ? (window.__IMPECCABLE_CONFIG__?.disabledRules || []) : [];
|
|
1266
1458
|
const _ruleOk = (id) => !_disabled.length || !_disabled.includes(id);
|
|
1459
|
+
const designSystem = browserDesignSystemConfig();
|
|
1460
|
+
const designSeen = { fonts: new Set(), colors: new Set(), radii: new Set() };
|
|
1267
1461
|
// Note: provider-gated rules (--gpt / --gemini) are NOT filtered here. In a
|
|
1268
1462
|
// real browser env (detector page, live overlay, extension) running every
|
|
1269
1463
|
// check is free, so we always surface them; the gating is purely a CLI
|
|
@@ -1294,6 +1488,7 @@ if (IS_BROWSER) {
|
|
|
1294
1488
|
...checkElementClippedOverflowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
|
|
1295
1489
|
...checkElementGptBorderShadowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
|
|
1296
1490
|
...checkElementTextOverflowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
|
|
1491
|
+
...checkElementDesignSystemDOM(el, designSystem, designSeen),
|
|
1297
1492
|
].filter(f => _ruleOk(f.type));
|
|
1298
1493
|
|
|
1299
1494
|
addBrowserFindings(groupMap, el, findings);
|
|
@@ -1310,6 +1505,13 @@ if (IS_BROWSER) {
|
|
|
1310
1505
|
|
|
1311
1506
|
const pageLevelFindings = [];
|
|
1312
1507
|
|
|
1508
|
+
const designSourceFindings = checkBrowserDesignSystemSources(designSystem, designSeen)
|
|
1509
|
+
.filter(f => _ruleOk(f.type));
|
|
1510
|
+
if (designSourceFindings.length > 0) {
|
|
1511
|
+
pageLevelFindings.push(...designSourceFindings);
|
|
1512
|
+
addBrowserFindings(groupMap, document.body, designSourceFindings);
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1313
1515
|
const typoFindings = checkTypography().filter(f => _ruleOk(f.type));
|
|
1314
1516
|
if (typoFindings.length > 0) {
|
|
1315
1517
|
pageLevelFindings.push(...typoFindings);
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
|
|
4
|
+
import { loadDesignSystemForCwd } from '../design-system.mjs';
|
|
4
5
|
import { createBrowserDetector, detectUrl } from '../engines/browser/detect-url.mjs';
|
|
5
6
|
import { detectHtml } from '../engines/static-html/detect-html.mjs';
|
|
6
7
|
import { detectText } from '../engines/regex/detect-text.mjs';
|
|
8
|
+
import {
|
|
9
|
+
filterDetectionFindings,
|
|
10
|
+
readDetectionConfig,
|
|
11
|
+
shouldIgnoreDetectionFile,
|
|
12
|
+
} from '../../lib/impeccable-config.mjs';
|
|
7
13
|
import {
|
|
8
14
|
HTML_EXTENSIONS,
|
|
9
15
|
buildImportGraph,
|
|
@@ -16,6 +22,10 @@ import {
|
|
|
16
22
|
// Output formatting
|
|
17
23
|
// ---------------------------------------------------------------------------
|
|
18
24
|
|
|
25
|
+
function formatFindingSummary(count) {
|
|
26
|
+
return `${count} anti-pattern${count === 1 ? '' : 's'} found.`;
|
|
27
|
+
}
|
|
28
|
+
|
|
19
29
|
function formatFindings(findings, jsonMode) {
|
|
20
30
|
if (jsonMode) return JSON.stringify(findings, null, 2);
|
|
21
31
|
|
|
@@ -33,7 +43,7 @@ function formatFindings(findings, jsonMode) {
|
|
|
33
43
|
out.push(` → ${item.description}`);
|
|
34
44
|
}
|
|
35
45
|
}
|
|
36
|
-
out.push(`\n${findings.length}
|
|
46
|
+
out.push(`\n${formatFindingSummary(findings.length)}`);
|
|
37
47
|
return out.join('\n');
|
|
38
48
|
}
|
|
39
49
|
|
|
@@ -79,10 +89,28 @@ function printUsage() {
|
|
|
79
89
|
Scan files or URLs for UI anti-patterns and design quality issues.
|
|
80
90
|
|
|
81
91
|
Options:
|
|
82
|
-
--json
|
|
83
|
-
--
|
|
84
|
-
--
|
|
85
|
-
--
|
|
92
|
+
--json Output results as JSON
|
|
93
|
+
--quiet In text mode, only print the final findings count
|
|
94
|
+
--gpt Also report GPT-specific provider tells (off by default)
|
|
95
|
+
--gemini Also report Gemini-specific provider tells (off by default)
|
|
96
|
+
--no-config Do not apply project config, detector ignores, inline
|
|
97
|
+
ignore comments, or DESIGN.md
|
|
98
|
+
--no-inline-ignores Do not honor in-file impeccable-disable* ignore comments
|
|
99
|
+
--no-design-system Do not load local DESIGN.md / .impeccable/design.json context
|
|
100
|
+
--help Show this help message
|
|
101
|
+
|
|
102
|
+
Project config:
|
|
103
|
+
Respects .impeccable/config.json and .impeccable/config.local.json detector
|
|
104
|
+
settings: detector.ignoreRules, detector.ignoreFiles, detector.ignoreValues,
|
|
105
|
+
and detector.designSystem.enabled.
|
|
106
|
+
|
|
107
|
+
Inline ignores:
|
|
108
|
+
In-file comments waive a finding where it lives and travel with the file:
|
|
109
|
+
<!-- impeccable-disable overused-font -- exported brand doc -->
|
|
110
|
+
.brand { font-family: Inter } /* impeccable-disable-line overused-font */
|
|
111
|
+
// impeccable-disable-next-line bounce-easing: intentional bounce
|
|
112
|
+
impeccable-disable applies to the whole file; -line / -next-line are scoped.
|
|
113
|
+
List one or more rule ids (comma-separated), or omit them / use * for all.
|
|
86
114
|
|
|
87
115
|
Detection modes:
|
|
88
116
|
HTML files Static HTML/CSS analysis (default, catches linked CSS)
|
|
@@ -93,7 +121,8 @@ Examples:
|
|
|
93
121
|
impeccable detect src/
|
|
94
122
|
impeccable detect index.html
|
|
95
123
|
impeccable detect https://example.com
|
|
96
|
-
impeccable detect --json
|
|
124
|
+
impeccable detect --json .
|
|
125
|
+
impeccable detect --no-config src/`);
|
|
97
126
|
}
|
|
98
127
|
|
|
99
128
|
async function detectCli() {
|
|
@@ -104,6 +133,7 @@ async function detectCli() {
|
|
|
104
133
|
});
|
|
105
134
|
if (args[0] === 'detect') args = args.slice(1);
|
|
106
135
|
const jsonMode = args.includes('--json');
|
|
136
|
+
const quietMode = args.includes('--quiet');
|
|
107
137
|
const helpMode = args.includes('--help');
|
|
108
138
|
// --fast (regex-only) is deprecated: since the jsdom removal, the static
|
|
109
139
|
// HTML/CSS analysis is fast and covers every rule, so the regex-only path
|
|
@@ -114,10 +144,21 @@ async function detectCli() {
|
|
|
114
144
|
'Note: --fast is deprecated and ignored. The full scan is fast now and runs every rule.\n',
|
|
115
145
|
);
|
|
116
146
|
}
|
|
147
|
+
const configEnabled = !args.includes('--no-config');
|
|
148
|
+
const detectionConfig = configEnabled
|
|
149
|
+
? readDetectionConfig(process.cwd())
|
|
150
|
+
: { ignoreRules: [], ignoreFiles: [], ignoreValues: [] };
|
|
117
151
|
const providers = [];
|
|
118
152
|
if (args.includes('--gpt')) providers.push('gpt');
|
|
119
153
|
if (args.includes('--gemini')) providers.push('gemini');
|
|
120
|
-
const
|
|
154
|
+
const designSystemEnabled = configEnabled && !args.includes('--no-design-system') && detectionConfig.designSystem?.enabled !== false;
|
|
155
|
+
const designSystem = designSystemEnabled ? loadDesignSystemForCwd(process.cwd()) : null;
|
|
156
|
+
// Inline `impeccable-disable*` waivers are part of the scanned file, so they
|
|
157
|
+
// apply by default. `--no-config` (raw scan) and the dedicated
|
|
158
|
+
// `--no-inline-ignores` both turn them off.
|
|
159
|
+
const inlineIgnoresEnabled = configEnabled && !args.includes('--no-inline-ignores');
|
|
160
|
+
const scanOptions = { providers, inlineIgnores: inlineIgnoresEnabled };
|
|
161
|
+
if (designSystem) scanOptions.designSystem = designSystem;
|
|
121
162
|
const targets = args.filter(a => !a.startsWith('--'));
|
|
122
163
|
|
|
123
164
|
if (helpMode) { printUsage(); process.exit(0); }
|
|
@@ -149,8 +190,8 @@ async function detectCli() {
|
|
|
149
190
|
catch { process.stderr.write(`Warning: cannot access ${target}\n`); continue; }
|
|
150
191
|
|
|
151
192
|
if (stat.isDirectory()) {
|
|
152
|
-
// Check for framework dev server config (skip in JSON
|
|
153
|
-
if (!jsonMode) {
|
|
193
|
+
// Check for framework dev server config (skip in JSON/quiet modes to avoid polluting output)
|
|
194
|
+
if (!jsonMode && !quietMode) {
|
|
154
195
|
const fwConfig = detectFrameworkConfig(resolved);
|
|
155
196
|
if (fwConfig) {
|
|
156
197
|
const probe = await isPortListening(fwConfig.port, fwConfig.fingerprint);
|
|
@@ -175,11 +216,12 @@ async function detectCli() {
|
|
|
175
216
|
}
|
|
176
217
|
}
|
|
177
218
|
|
|
178
|
-
const files = walkDir(resolved)
|
|
219
|
+
const files = walkDir(resolved)
|
|
220
|
+
.filter(file => !shouldIgnoreDetectionFile(file, process.cwd(), detectionConfig));
|
|
179
221
|
const htmlCount = files.filter(f => HTML_EXTENSIONS.has(path.extname(f).toLowerCase())).length;
|
|
180
222
|
|
|
181
223
|
// Warn and confirm if scanning many files (static HTML/CSS processes each HTML file)
|
|
182
|
-
if (files.length > 50 && process.stdin.isTTY && !jsonMode) {
|
|
224
|
+
if (files.length > 50 && process.stdin.isTTY && !jsonMode && !quietMode) {
|
|
183
225
|
process.stderr.write(
|
|
184
226
|
`\nFound ${files.length} files (${htmlCount} HTML) in ${target}.\n` +
|
|
185
227
|
`Scanning may take a while${htmlCount > 10 ? ' (static HTML/CSS processes each HTML file individually)' : ''}.\n` +
|
|
@@ -219,6 +261,7 @@ async function detectCli() {
|
|
|
219
261
|
allFindings.push(...fileFindings);
|
|
220
262
|
}
|
|
221
263
|
} else if (stat.isFile()) {
|
|
264
|
+
if (shouldIgnoreDetectionFile(resolved, process.cwd(), detectionConfig)) continue;
|
|
222
265
|
const ext = path.extname(resolved).toLowerCase();
|
|
223
266
|
if (HTML_EXTENSIONS.has(ext)) {
|
|
224
267
|
allFindings.push(...await detectHtml(resolved, scanOptions));
|
|
@@ -232,8 +275,11 @@ async function detectCli() {
|
|
|
232
275
|
}
|
|
233
276
|
}
|
|
234
277
|
|
|
278
|
+
allFindings = filterDetectionFindings(allFindings, detectionConfig);
|
|
279
|
+
|
|
235
280
|
if (allFindings.length > 0) {
|
|
236
281
|
if (jsonMode) process.stdout.write(formatFindings(allFindings, true) + '\n');
|
|
282
|
+
else if (quietMode) process.stderr.write(formatFindingSummary(allFindings.length) + '\n');
|
|
237
283
|
else process.stderr.write(formatFindings(allFindings, false) + '\n');
|
|
238
284
|
process.exit(2);
|
|
239
285
|
}
|