claudecode-omc 5.11.0 → 5.13.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/skills/prompt-pilot/SKILL.md +258 -0
- 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
|
@@ -1,50 +1,52 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { resolveProjectRoot } from '../context.mjs';
|
|
3
4
|
|
|
4
5
|
export const IMPECCABLE_DIR = '.impeccable';
|
|
5
6
|
export const LIVE_DIR = 'live';
|
|
6
7
|
export const CRITIQUE_DIR = 'critique';
|
|
7
8
|
|
|
8
|
-
export function getImpeccableDir(cwd = process.cwd()) {
|
|
9
|
-
return path.join(cwd, IMPECCABLE_DIR);
|
|
9
|
+
export function getImpeccableDir(cwd = process.cwd(), options = {}) {
|
|
10
|
+
return path.join(resolveProjectRoot(cwd, options), IMPECCABLE_DIR);
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
export function getDesignSidecarPath(cwd = process.cwd()) {
|
|
13
|
-
return path.join(getImpeccableDir(cwd), 'design.json');
|
|
13
|
+
export function getDesignSidecarPath(cwd = process.cwd(), options = {}) {
|
|
14
|
+
return path.join(getImpeccableDir(cwd, options), 'design.json');
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export function getDesignSidecarCandidates(cwd = process.cwd(), contextDir = cwd) {
|
|
17
|
+
export function getDesignSidecarCandidates(cwd = process.cwd(), contextDir = cwd, options = {}) {
|
|
18
|
+
const projectRoot = resolveProjectRoot(cwd, options);
|
|
17
19
|
const candidates = [
|
|
18
|
-
getDesignSidecarPath(cwd),
|
|
19
|
-
path.join(
|
|
20
|
+
getDesignSidecarPath(cwd, options),
|
|
21
|
+
path.join(projectRoot, 'DESIGN.json'),
|
|
20
22
|
];
|
|
21
23
|
const contextLegacy = path.join(contextDir, 'DESIGN.json');
|
|
22
24
|
if (!candidates.includes(contextLegacy)) candidates.push(contextLegacy);
|
|
23
25
|
return candidates;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
export function resolveDesignSidecarPath(cwd = process.cwd(), contextDir = cwd) {
|
|
27
|
-
return firstExisting(getDesignSidecarCandidates(cwd, contextDir));
|
|
28
|
+
export function resolveDesignSidecarPath(cwd = process.cwd(), contextDir = cwd, options = {}) {
|
|
29
|
+
return firstExisting(getDesignSidecarCandidates(cwd, contextDir, options));
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
export function getLiveDir(cwd = process.cwd()) {
|
|
31
|
-
return path.join(getImpeccableDir(cwd), LIVE_DIR);
|
|
32
|
+
export function getLiveDir(cwd = process.cwd(), options = {}) {
|
|
33
|
+
return path.join(getImpeccableDir(cwd, options), LIVE_DIR);
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
export function getLiveConfigPath(cwd = process.cwd()) {
|
|
35
|
-
return path.join(getLiveDir(cwd), 'config.json');
|
|
36
|
+
export function getLiveConfigPath(cwd = process.cwd(), options = {}) {
|
|
37
|
+
return path.join(getLiveDir(cwd, options), 'config.json');
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
export function getLegacyLiveConfigPath(scriptsDir) {
|
|
39
41
|
return path.join(scriptsDir, 'config.json');
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
export function resolveLiveConfigPath({ cwd = process.cwd(), scriptsDir, env = process.env } = {}) {
|
|
44
|
+
export function resolveLiveConfigPath({ cwd = process.cwd(), scriptsDir, env = process.env, targetPath } = {}) {
|
|
43
45
|
if (env.IMPECCABLE_LIVE_CONFIG && env.IMPECCABLE_LIVE_CONFIG.trim()) {
|
|
44
46
|
const configured = env.IMPECCABLE_LIVE_CONFIG.trim();
|
|
45
47
|
return path.isAbsolute(configured) ? configured : path.resolve(cwd, configured);
|
|
46
48
|
}
|
|
47
|
-
const primary = getLiveConfigPath(cwd);
|
|
49
|
+
const primary = getLiveConfigPath(cwd, { targetPath });
|
|
48
50
|
if (fs.existsSync(primary)) return primary;
|
|
49
51
|
if (scriptsDir) {
|
|
50
52
|
const legacy = getLegacyLiveConfigPath(scriptsDir);
|
|
@@ -53,16 +55,16 @@ export function resolveLiveConfigPath({ cwd = process.cwd(), scriptsDir, env = p
|
|
|
53
55
|
return primary;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
|
-
export function getLiveServerPath(cwd = process.cwd()) {
|
|
57
|
-
return path.join(getLiveDir(cwd), 'server.json');
|
|
58
|
+
export function getLiveServerPath(cwd = process.cwd(), options = {}) {
|
|
59
|
+
return path.join(getLiveDir(cwd, options), 'server.json');
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
export function getLegacyLiveServerPath(cwd = process.cwd()) {
|
|
61
|
-
return path.join(cwd, '.impeccable-live.json');
|
|
62
|
+
export function getLegacyLiveServerPath(cwd = process.cwd(), options = {}) {
|
|
63
|
+
return path.join(resolveProjectRoot(cwd, options), '.impeccable-live.json');
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
export function readLiveServerInfo(cwd = process.cwd()) {
|
|
65
|
-
for (const filePath of [getLiveServerPath(cwd), getLegacyLiveServerPath(cwd)]) {
|
|
66
|
+
export function readLiveServerInfo(cwd = process.cwd(), options = {}) {
|
|
67
|
+
for (const filePath of [getLiveServerPath(cwd, options), getLegacyLiveServerPath(cwd, options)]) {
|
|
66
68
|
try {
|
|
67
69
|
const info = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
68
70
|
if (info && typeof info.pid === 'number' && !isLiveServerPidReachable(info.pid)) {
|
|
@@ -88,37 +90,37 @@ export function isLiveServerPidReachable(pid) {
|
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
export function writeLiveServerInfo(cwd = process.cwd(), info) {
|
|
92
|
-
const filePath = getLiveServerPath(cwd);
|
|
93
|
+
export function writeLiveServerInfo(cwd = process.cwd(), info, options = {}) {
|
|
94
|
+
const filePath = getLiveServerPath(cwd, options);
|
|
93
95
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
94
96
|
fs.writeFileSync(filePath, JSON.stringify(info));
|
|
95
97
|
return filePath;
|
|
96
98
|
}
|
|
97
99
|
|
|
98
|
-
export function removeLiveServerInfo(cwd = process.cwd()) {
|
|
99
|
-
for (const filePath of [getLiveServerPath(cwd), getLegacyLiveServerPath(cwd)]) {
|
|
100
|
+
export function removeLiveServerInfo(cwd = process.cwd(), options = {}) {
|
|
101
|
+
for (const filePath of [getLiveServerPath(cwd, options), getLegacyLiveServerPath(cwd, options)]) {
|
|
100
102
|
try { fs.unlinkSync(filePath); } catch {}
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
|
|
104
|
-
export function getLiveSessionsDir(cwd = process.cwd()) {
|
|
105
|
-
return path.join(getLiveDir(cwd), 'sessions');
|
|
106
|
+
export function getLiveSessionsDir(cwd = process.cwd(), options = {}) {
|
|
107
|
+
return path.join(getLiveDir(cwd, options), 'sessions');
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
export function getLegacyLiveSessionsDir(cwd = process.cwd()) {
|
|
109
|
-
return path.join(cwd, '.impeccable-live', 'sessions');
|
|
110
|
+
export function getLegacyLiveSessionsDir(cwd = process.cwd(), options = {}) {
|
|
111
|
+
return path.join(resolveProjectRoot(cwd, options), '.impeccable-live', 'sessions');
|
|
110
112
|
}
|
|
111
113
|
|
|
112
|
-
export function getLiveAnnotationsDir(cwd = process.cwd()) {
|
|
113
|
-
return path.join(getLiveDir(cwd), 'annotations');
|
|
114
|
+
export function getLiveAnnotationsDir(cwd = process.cwd(), options = {}) {
|
|
115
|
+
return path.join(getLiveDir(cwd, options), 'annotations');
|
|
114
116
|
}
|
|
115
117
|
|
|
116
|
-
export function getCritiqueDir(cwd = process.cwd()) {
|
|
117
|
-
return path.join(getImpeccableDir(cwd), CRITIQUE_DIR);
|
|
118
|
+
export function getCritiqueDir(cwd = process.cwd(), options = {}) {
|
|
119
|
+
return path.join(getImpeccableDir(cwd, options), CRITIQUE_DIR);
|
|
118
120
|
}
|
|
119
121
|
|
|
120
|
-
export function getLegacyLiveAnnotationsDir(cwd = process.cwd()) {
|
|
121
|
-
return path.join(cwd, '.impeccable-live', 'annotations');
|
|
122
|
+
export function getLegacyLiveAnnotationsDir(cwd = process.cwd(), options = {}) {
|
|
123
|
+
return path.join(resolveProjectRoot(cwd, options), '.impeccable-live', 'annotations');
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
function firstExisting(paths) {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class TargetArgError extends Error {
|
|
2
|
+
constructor(message, code) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'TargetArgError';
|
|
5
|
+
this.code = code;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function parseTargetPath(args = [], { strict = false } = {}) {
|
|
10
|
+
let targetPath = null;
|
|
11
|
+
for (let i = 0; i < args.length; i++) {
|
|
12
|
+
const arg = String(args[i]);
|
|
13
|
+
if (arg === '--target' || arg === '-t') {
|
|
14
|
+
const next = args[i + 1];
|
|
15
|
+
if (next && !String(next).startsWith('-')) {
|
|
16
|
+
targetPath = String(next);
|
|
17
|
+
i++;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (strict) {
|
|
21
|
+
throw new TargetArgError('--target requires a path value.', 'TARGET_VALUE_MISSING');
|
|
22
|
+
}
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (arg.startsWith('--target=')) {
|
|
26
|
+
const value = arg.slice('--target='.length);
|
|
27
|
+
if (value) {
|
|
28
|
+
targetPath = value;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (strict) {
|
|
32
|
+
throw new TargetArgError('--target requires a path value.', 'TARGET_VALUE_MISSING');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return targetPath;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function parseTargetOptions(args = [], options = {}) {
|
|
40
|
+
const targetPath = parseTargetPath(args, options);
|
|
41
|
+
return targetPath ? { targetPath } : {};
|
|
42
|
+
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
const Z = { highlight: 100001, bar: 100005, picker: 100007, toast: 100010 };
|
|
58
58
|
const EASE = 'cubic-bezier(0.22, 1, 0.36, 1)'; // ease-out-quint
|
|
59
59
|
const PREFIX = 'impeccable-live';
|
|
60
|
-
const
|
|
60
|
+
const PICK_CURSOR_STYLE_ID = PREFIX + '-pick-cursor-style';
|
|
61
61
|
const MANUAL_APPLY_STATE_TTL_MS = 15 * 60 * 1000;
|
|
62
62
|
const sessionState = window.__IMPECCABLE_LIVE_SESSION__?.createLiveBrowserSessionState({
|
|
63
63
|
prefix: PREFIX,
|
|
@@ -152,6 +152,7 @@
|
|
|
152
152
|
let scrollLockTargetY = null;
|
|
153
153
|
let scrollLockRaf = null;
|
|
154
154
|
let scrollLockAbort = null;
|
|
155
|
+
const SCROLL_ANCHOR_LOCK_ID = 'impeccable-scroll-anchor-lock';
|
|
155
156
|
|
|
156
157
|
// Dedicated key for scroll position - SEPARATE from LS_KEY so that
|
|
157
158
|
// saveSession's state updates don't clobber a carefully-captured scrollY.
|
|
@@ -1915,45 +1916,45 @@
|
|
|
1915
1916
|
syncPageInteractionCursor();
|
|
1916
1917
|
}
|
|
1917
1918
|
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1919
|
+
/**
|
|
1920
|
+
* Drive the page-level pick / insert cursor through the textContent of one
|
|
1921
|
+
* injected <style>, never by mutating <html> (className or inline style).
|
|
1922
|
+
* Frameworks that server-render the <html>/<body> roots (Next.js App Router)
|
|
1923
|
+
* report a React 19 hydration mismatch when the client adds an attribute the
|
|
1924
|
+
* server HTML never emitted, so a `class`/inline `style` toggled on
|
|
1925
|
+
* `document.documentElement` trips "a tree hydrated but some attributes ...
|
|
1926
|
+
* didn't match" on the next Fast-Refresh re-render. Keying the cursor off a
|
|
1927
|
+
* stable-id <style> keeps the effect off the hydrated host elements (same
|
|
1928
|
+
* shape as the scroll-anchor lock). A falsy cursor clears the rule.
|
|
1929
|
+
*/
|
|
1930
|
+
function setPageInteractionCursor(cursor) {
|
|
1931
|
+
let style = document.getElementById(PICK_CURSOR_STYLE_ID);
|
|
1932
|
+
if (!cursor) {
|
|
1933
|
+
if (style) style.textContent = '';
|
|
1934
|
+
return;
|
|
1935
|
+
}
|
|
1936
|
+
if (!style) {
|
|
1937
|
+
style = document.createElement('style');
|
|
1938
|
+
style.id = PICK_CURSOR_STYLE_ID;
|
|
1939
|
+
// Styles the host page, not the chrome - inside the adapter's shadow UI
|
|
1940
|
+
// root (uiAppendStyle's target) these selectors would match nothing.
|
|
1941
|
+
(document.head || document.documentElement).appendChild(style);
|
|
1942
|
+
}
|
|
1924
1943
|
style.textContent =
|
|
1925
|
-
'
|
|
1926
|
-
+ '
|
|
1927
|
-
+ '
|
|
1928
|
-
// Styles the host page, not the chrome - inside the adapter's shadow UI
|
|
1929
|
-
// root (uiAppendStyle's target) these selectors would match nothing.
|
|
1930
|
-
document.head.appendChild(style);
|
|
1944
|
+
'* { cursor: ' + cursor + ' !important; }\n'
|
|
1945
|
+
+ '[id^="' + PREFIX + '"],\n'
|
|
1946
|
+
+ '[id^="' + PREFIX + '"] * { cursor: revert !important; }';
|
|
1931
1947
|
}
|
|
1932
1948
|
|
|
1933
1949
|
/** Page-level cursor while pick or insert mode is targeting page elements. */
|
|
1934
1950
|
function syncPageInteractionCursor() {
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
if (pickCursor) {
|
|
1942
|
-
ensurePickCursorStyle();
|
|
1943
|
-
document.documentElement.classList.add(PICK_CURSOR_CLASS);
|
|
1944
|
-
document.documentElement.style.cursor = '';
|
|
1945
|
-
pageInteractionCursorActive = true;
|
|
1946
|
-
return;
|
|
1947
|
-
}
|
|
1948
|
-
|
|
1949
|
-
document.documentElement.classList.remove(PICK_CURSOR_CLASS);
|
|
1950
|
-
if (axisCursor) {
|
|
1951
|
-
document.documentElement.style.cursor = axisCursor;
|
|
1952
|
-
pageInteractionCursorActive = true;
|
|
1953
|
-
} else if (pageInteractionCursorActive) {
|
|
1954
|
-
document.documentElement.style.cursor = '';
|
|
1955
|
-
pageInteractionCursorActive = false;
|
|
1951
|
+
let cursor = '';
|
|
1952
|
+
if (state === 'PICKING' && pickActive && !insertActive) {
|
|
1953
|
+
cursor = 'crosshair';
|
|
1954
|
+
} else if (state === 'PICKING' && insertActive && insertHoverAnchor) {
|
|
1955
|
+
cursor = cursorForInsertAxis(insertHoverAxis || 'column');
|
|
1956
1956
|
}
|
|
1957
|
+
setPageInteractionCursor(cursor);
|
|
1957
1958
|
}
|
|
1958
1959
|
|
|
1959
1960
|
/**
|
|
@@ -2681,12 +2682,12 @@
|
|
|
2681
2682
|
});
|
|
2682
2683
|
const check = el('span', {
|
|
2683
2684
|
fontSize: '15px', lineHeight: '1', flexShrink: '0',
|
|
2684
|
-
color: 'oklch(45% 0.
|
|
2685
|
+
color: 'oklch(45% 0.18 145)',
|
|
2685
2686
|
});
|
|
2686
2687
|
check.textContent = '\u2713';
|
|
2687
2688
|
row.appendChild(check);
|
|
2688
2689
|
const label = el('span', {
|
|
2689
|
-
fontSize: '12px', color: 'oklch(
|
|
2690
|
+
fontSize: '12px', color: 'oklch(49% 0.08 188)', fontWeight: '600',
|
|
2690
2691
|
});
|
|
2691
2692
|
label.textContent = 'Variant applied';
|
|
2692
2693
|
row.appendChild(label);
|
|
@@ -5815,10 +5816,22 @@
|
|
|
5815
5816
|
|
|
5816
5817
|
try { history.scrollRestoration = 'manual'; } catch {}
|
|
5817
5818
|
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5819
|
+
// Suppress the browser's scroll-anchoring on the scroll root so it can't
|
|
5820
|
+
// fight our manual scroll correction. Apply this as a stylesheet rule, not
|
|
5821
|
+
// as inline `style` on <html>/<body>: those elements are server-rendered by
|
|
5822
|
+
// frameworks like Next.js App Router, and mutating their inline style makes
|
|
5823
|
+
// React 19 report a hydration mismatch on the next Fast-Refresh re-render.
|
|
5824
|
+
// A <style> rule has the same computed effect without touching any hydrated
|
|
5825
|
+
// element's attributes. Like the inline version, it is recreated on every
|
|
5826
|
+
// startScrollLock call, so reload survival (driven by the persisted scroll
|
|
5827
|
+
// key) is unaffected.
|
|
5828
|
+
let anchorLockStyle = document.getElementById(SCROLL_ANCHOR_LOCK_ID);
|
|
5829
|
+
if (!anchorLockStyle) {
|
|
5830
|
+
anchorLockStyle = document.createElement('style');
|
|
5831
|
+
anchorLockStyle.id = SCROLL_ANCHOR_LOCK_ID;
|
|
5832
|
+
anchorLockStyle.textContent = 'html,body{overflow-anchor:none !important;}';
|
|
5833
|
+
(document.head || document.documentElement).appendChild(anchorLockStyle);
|
|
5834
|
+
}
|
|
5822
5835
|
|
|
5823
5836
|
const correct = (why) => {
|
|
5824
5837
|
scrollLockRaf = null;
|
|
@@ -5853,8 +5866,7 @@
|
|
|
5853
5866
|
|
|
5854
5867
|
scrollLockAbort = new AbortController();
|
|
5855
5868
|
scrollLockAbort.signal.addEventListener('abort', () => {
|
|
5856
|
-
document.
|
|
5857
|
-
document.body.style.overflowAnchor = prevBodyAnchor;
|
|
5869
|
+
document.getElementById(SCROLL_ANCHOR_LOCK_ID)?.remove();
|
|
5858
5870
|
}, { once: true });
|
|
5859
5871
|
const sig = { signal: scrollLockAbort.signal };
|
|
5860
5872
|
// Track whether the most recent scroll came from a user gesture. We
|
|
@@ -6489,10 +6501,13 @@
|
|
|
6489
6501
|
) {
|
|
6490
6502
|
return;
|
|
6491
6503
|
}
|
|
6504
|
+
if (isPageEditableElement(deepActive) && !isInlineEditActive(deepActive)) {
|
|
6505
|
+
return;
|
|
6506
|
+
}
|
|
6492
6507
|
// While a contenteditable text-leaf is focused, let the browser handle
|
|
6493
6508
|
// all keys except Escape. Escape cancels the current edit (restores
|
|
6494
6509
|
// original text) and blurs without saving, staying in CONFIGURING.
|
|
6495
|
-
if (e.target.isContentEditable &&
|
|
6510
|
+
if (e.target.isContentEditable && isInlineEditActive(e.target)) {
|
|
6496
6511
|
if (e.key !== 'Escape') return;
|
|
6497
6512
|
e.preventDefault();
|
|
6498
6513
|
e.stopPropagation();
|
|
@@ -8186,18 +8201,18 @@ void main() {
|
|
|
8186
8201
|
let voiceInterimBase = '';
|
|
8187
8202
|
/** @type {{ mode: 'steer'|'configure', input: HTMLInputElement, submit: () => void, beforeStart?: () => void } | null} */
|
|
8188
8203
|
let voiceCtx = null;
|
|
8189
|
-
const PAGE_CHAT_COLLAPSED_W = '
|
|
8204
|
+
const PAGE_CHAT_COLLAPSED_W = '104px';
|
|
8190
8205
|
const PAGE_CHAT_PROCESSING_W = '76px';
|
|
8191
8206
|
const PAGE_CHAT_PLACEHOLDER_COLLAPSED = 'Steer…';
|
|
8192
8207
|
const PAGE_CHAT_PLACEHOLDER_EXPANDED = 'Steer the page…';
|
|
8193
8208
|
const STEER_AWAIT_TIMEOUT_MS = 120000;
|
|
8194
8209
|
const AGENT_STATUS_POLL_MS = 5000;
|
|
8195
|
-
const AGENT_DISCONNECTED_MARK = 'oklch(
|
|
8210
|
+
const AGENT_DISCONNECTED_MARK = 'oklch(62% 0 0 / 0.78)';
|
|
8196
8211
|
const AGENT_DISCONNECTED_TIP = 'Agent disconnected - run live-poll.mjs to connect';
|
|
8197
8212
|
const GLOBAL_BAR_SECTION_GAP = 8;
|
|
8198
8213
|
const GLOBAL_BAR_INNER_GAP = 2;
|
|
8199
8214
|
const GLOBAL_BAR_INNER_PAD_LEFT = 2;
|
|
8200
|
-
const
|
|
8215
|
+
const PAGE_CHAT_EXPANDED_MAX_W = 280;
|
|
8201
8216
|
const ICON_PAGE_CHAT =
|
|
8202
8217
|
'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>';
|
|
8203
8218
|
const ICON_PAGE_VOICE =
|
|
@@ -8259,8 +8274,8 @@ void main() {
|
|
|
8259
8274
|
// Neutral hairline for internal control borders / dividers (was a warm
|
|
8260
8275
|
// gold rule that read as muddy champagne edges on the pill / input / count).
|
|
8261
8276
|
hairline: 'oklch(92% 0 0 / 0.12)',
|
|
8262
|
-
text: 'oklch(
|
|
8263
|
-
textDim: 'oklch(
|
|
8277
|
+
text: 'oklch(91% 0 0)',
|
|
8278
|
+
textDim: 'oklch(72% 0 0)',
|
|
8264
8279
|
accent: C.brand,
|
|
8265
8280
|
accentSoft: C.brandSoft,
|
|
8266
8281
|
exitHover: 'oklch(58% 0.15 35 / 0.18)',
|
|
@@ -8277,6 +8292,52 @@ void main() {
|
|
|
8277
8292
|
return barPaletteForTheme(globalBarEl?.dataset.theme || detectPageTheme());
|
|
8278
8293
|
}
|
|
8279
8294
|
|
|
8295
|
+
function globalBarModeToggles() {
|
|
8296
|
+
return [
|
|
8297
|
+
uiGetById(PREFIX + '-pick-toggle'),
|
|
8298
|
+
uiGetById(PREFIX + '-insert-toggle'),
|
|
8299
|
+
uiGetById(PREFIX + '-detect-toggle'),
|
|
8300
|
+
uiGetById(PREFIX + '-design-toggle'),
|
|
8301
|
+
].filter(Boolean);
|
|
8302
|
+
}
|
|
8303
|
+
|
|
8304
|
+
function applyGlobalBarLabelState(expandInactive, forceCollapse = false) {
|
|
8305
|
+
globalBarModeToggles().forEach((toggle) => {
|
|
8306
|
+
if (forceCollapse) toggle._collapseLabel?.(true);
|
|
8307
|
+
else if (expandInactive || toggle.dataset.active === 'true') toggle._expandLabel?.();
|
|
8308
|
+
else toggle._collapseLabel?.();
|
|
8309
|
+
});
|
|
8310
|
+
}
|
|
8311
|
+
|
|
8312
|
+
function syncGlobalBarExpandedLabels(expanded = globalBarEl?.matches(':hover')) {
|
|
8313
|
+
const expandInactive = !!(expanded && !pageChatExpanded);
|
|
8314
|
+
applyGlobalBarLabelState(expandInactive, pageChatExpanded);
|
|
8315
|
+
|
|
8316
|
+
if (expandInactive && globalBarEl && globalBarEl.scrollWidth > window.innerWidth - 16) {
|
|
8317
|
+
applyGlobalBarLabelState(false);
|
|
8318
|
+
}
|
|
8319
|
+
}
|
|
8320
|
+
|
|
8321
|
+
function pageChatCollapsedWidthPx() {
|
|
8322
|
+
const parsed = parseFloat(PAGE_CHAT_COLLAPSED_W);
|
|
8323
|
+
return Number.isFinite(parsed) ? parsed : 104;
|
|
8324
|
+
}
|
|
8325
|
+
|
|
8326
|
+
function pageChatExpandedWidth() {
|
|
8327
|
+
if (!pageChatEl || !globalBarEl) return PAGE_CHAT_EXPANDED_MAX_W + 'px';
|
|
8328
|
+
const currentChatWidth = pageChatEl.getBoundingClientRect().width || pageChatCollapsedWidthPx();
|
|
8329
|
+
const barWidth = Math.max(globalBarEl.getBoundingClientRect().width || 0, globalBarEl.scrollWidth || 0);
|
|
8330
|
+
const nonChatWidth = Math.max(0, barWidth - currentChatWidth);
|
|
8331
|
+
const available = window.innerWidth - 16 - nonChatWidth;
|
|
8332
|
+
const next = Math.max(pageChatCollapsedWidthPx(), Math.min(PAGE_CHAT_EXPANDED_MAX_W, available));
|
|
8333
|
+
return Math.round(next) + 'px';
|
|
8334
|
+
}
|
|
8335
|
+
|
|
8336
|
+
function syncPageChatExpandedWidth() {
|
|
8337
|
+
if (!pageChatEl || !pageChatExpanded) return;
|
|
8338
|
+
pageChatEl.style.width = pageChatExpandedWidth();
|
|
8339
|
+
}
|
|
8340
|
+
|
|
8280
8341
|
function syncPageChatChrome() {
|
|
8281
8342
|
if (!pageChatEl) return;
|
|
8282
8343
|
const P = pageChatPalette();
|
|
@@ -8312,6 +8373,21 @@ void main() {
|
|
|
8312
8373
|
&& !steerLocked;
|
|
8313
8374
|
}
|
|
8314
8375
|
|
|
8376
|
+
function isPageEditableElement(el) {
|
|
8377
|
+
if (!el || own(el)) return false;
|
|
8378
|
+
if (/^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName || '')) return true;
|
|
8379
|
+
return !!el.isContentEditable;
|
|
8380
|
+
}
|
|
8381
|
+
|
|
8382
|
+
function isInlineEditActive(el) {
|
|
8383
|
+
return !!el && inlineEditRows.some((r) => r.el === el);
|
|
8384
|
+
}
|
|
8385
|
+
|
|
8386
|
+
function isPageEditableActive() {
|
|
8387
|
+
const active = activeElementDeep();
|
|
8388
|
+
return isPageEditableElement(active) && !isInlineEditActive(active);
|
|
8389
|
+
}
|
|
8390
|
+
|
|
8315
8391
|
function pageHasHostTextSelection() {
|
|
8316
8392
|
const sel = window.getSelection?.();
|
|
8317
8393
|
if (!sel || sel.isCollapsed) return false;
|
|
@@ -8325,6 +8401,7 @@ void main() {
|
|
|
8325
8401
|
function shouldSteerAutoFocus() {
|
|
8326
8402
|
return shouldFocusSteerChat()
|
|
8327
8403
|
&& !steerFocusSuspended
|
|
8404
|
+
&& !isPageEditableActive()
|
|
8328
8405
|
&& performance.now() >= steerFocusPauseUntil;
|
|
8329
8406
|
}
|
|
8330
8407
|
|
|
@@ -8562,7 +8639,8 @@ void main() {
|
|
|
8562
8639
|
if (!pageChatEl || !pageChatInput) return false;
|
|
8563
8640
|
pageChatExpanded = true;
|
|
8564
8641
|
pageChatEl.dataset.expanded = 'true';
|
|
8565
|
-
|
|
8642
|
+
syncGlobalBarExpandedLabels(false);
|
|
8643
|
+
pageChatEl.style.width = pageChatExpandedWidth();
|
|
8566
8644
|
pageChatEl.style.cursor = steerLocked ? 'default' : 'text';
|
|
8567
8645
|
pageChatInput.placeholder = PAGE_CHAT_PLACEHOLDER_EXPANDED;
|
|
8568
8646
|
if (pageChatHint) {
|
|
@@ -8657,7 +8735,7 @@ void main() {
|
|
|
8657
8735
|
pageChatEl.setAttribute('aria-label', 'Steer the page');
|
|
8658
8736
|
pageChatExpanded = keepExpanded;
|
|
8659
8737
|
pageChatEl.dataset.expanded = keepExpanded ? 'true' : 'false';
|
|
8660
|
-
pageChatEl.style.width = keepExpanded ?
|
|
8738
|
+
pageChatEl.style.width = keepExpanded ? pageChatExpandedWidth() : PAGE_CHAT_COLLAPSED_W;
|
|
8661
8739
|
pageChatEl.style.cursor = 'pointer';
|
|
8662
8740
|
if (pageChatInput) {
|
|
8663
8741
|
pageChatInput.disabled = false;
|
|
@@ -8971,6 +9049,7 @@ void main() {
|
|
|
8971
9049
|
pageChatEl.dataset.expanded = 'false';
|
|
8972
9050
|
pageChatEl.style.width = PAGE_CHAT_COLLAPSED_W;
|
|
8973
9051
|
pageChatEl.style.cursor = 'pointer';
|
|
9052
|
+
syncGlobalBarExpandedLabels(globalBarEl?.matches(':hover'));
|
|
8974
9053
|
if (blur) {
|
|
8975
9054
|
pageChatInput.blur();
|
|
8976
9055
|
pageChatInput.style.pointerEvents = 'none';
|
|
@@ -9064,9 +9143,9 @@ void main() {
|
|
|
9064
9143
|
'#' + PREFIX + '-page-chat[data-voice-listening="true"] { border-color: oklch(70% 0.12 188 / 0.45); }' +
|
|
9065
9144
|
'#' + PREFIX + '-page-chat-voice[data-listening="true"] svg { animation: impeccable-voice-pulse 1.1s ease-in-out infinite; }' +
|
|
9066
9145
|
'@media (prefers-reduced-motion: reduce) { #' + PREFIX + '-page-chat-voice[data-listening="true"] svg { animation: none; opacity: 1; } }' +
|
|
9067
|
-
'#' + PREFIX + '-page-chat-input::placeholder { color: oklch(
|
|
9146
|
+
'#' + PREFIX + '-page-chat-input::placeholder { color: oklch(72% 0 0); opacity: 1; }' +
|
|
9068
9147
|
'#' + PREFIX + '-page-chat-input { caret-color: oklch(84% 0.19 80.46); }' +
|
|
9069
|
-
'#' + PREFIX + '-page-chat[data-input-focused="true"]:not([data-expanded="true"]) #' + PREFIX + '-page-chat-input::placeholder { color: oklch(72% 0
|
|
9148
|
+
'#' + PREFIX + '-page-chat[data-input-focused="true"]:not([data-expanded="true"]) #' + PREFIX + '-page-chat-input::placeholder { color: oklch(72% 0 0); }' +
|
|
9070
9149
|
'#' + PREFIX + '-page-chat-voice:hover { background: oklch(78% 0.12 82 / 0.12); }';
|
|
9071
9150
|
uiAppendStyle(s);
|
|
9072
9151
|
}
|
|
@@ -9270,6 +9349,7 @@ void main() {
|
|
|
9270
9349
|
zIndex: Z.bar + 5,
|
|
9271
9350
|
display: 'flex', alignItems: 'stretch',
|
|
9272
9351
|
gap: '0',
|
|
9352
|
+
width: 'max-content',
|
|
9273
9353
|
background: P.surface,
|
|
9274
9354
|
border: '1px solid ' + P.border,
|
|
9275
9355
|
borderRadius: '8px',
|
|
@@ -9277,6 +9357,8 @@ void main() {
|
|
|
9277
9357
|
fontFamily: FONT, fontSize: '12px', lineHeight: '1',
|
|
9278
9358
|
opacity: '0',
|
|
9279
9359
|
overflow: 'hidden', // clip the full-bleed brand mark to the bar radius
|
|
9360
|
+
maxWidth: 'calc(100vw - 16px)',
|
|
9361
|
+
boxSizing: 'border-box',
|
|
9280
9362
|
transition: 'opacity 0.3s ' + EASE + ', transform 0.3s ' + EASE,
|
|
9281
9363
|
});
|
|
9282
9364
|
globalBarEl.id = PREFIX + '-global-bar';
|
|
@@ -9306,7 +9388,7 @@ void main() {
|
|
|
9306
9388
|
const agentDot = el('span', {
|
|
9307
9389
|
position: 'absolute', right: '-1px', bottom: '7px',
|
|
9308
9390
|
width: '6px', height: '6px', borderRadius: '50%',
|
|
9309
|
-
background: 'oklch(
|
|
9391
|
+
background: 'oklch(77% 0.13 82)',
|
|
9310
9392
|
boxShadow: '0 0 0 2px ' + P.surface,
|
|
9311
9393
|
display: 'none', pointerEvents: 'none',
|
|
9312
9394
|
});
|
|
@@ -9325,6 +9407,7 @@ void main() {
|
|
|
9325
9407
|
const inner = el('div', {
|
|
9326
9408
|
display: 'flex', alignItems: 'center',
|
|
9327
9409
|
padding: '4px 5px 4px ' + GLOBAL_BAR_INNER_PAD_LEFT + 'px', gap: GLOBAL_BAR_INNER_GAP + 'px',
|
|
9410
|
+
flex: '0 0 auto',
|
|
9328
9411
|
});
|
|
9329
9412
|
inner.id = PREFIX + '-global-bar-inner';
|
|
9330
9413
|
globalBarEl.appendChild(inner);
|
|
@@ -9333,7 +9416,10 @@ void main() {
|
|
|
9333
9416
|
function makeIconBtn({ id, svg, label, ariaLabel, labelFont, onClick }) {
|
|
9334
9417
|
const b = el('button', {
|
|
9335
9418
|
position: 'relative',
|
|
9336
|
-
display: 'inline-flex', alignItems: 'center',
|
|
9419
|
+
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
9420
|
+
boxSizing: 'border-box',
|
|
9421
|
+
flex: '0 0 auto',
|
|
9422
|
+
minWidth: '30px',
|
|
9337
9423
|
padding: '6px 8px', borderRadius: '7px',
|
|
9338
9424
|
border: 'none', background: 'transparent',
|
|
9339
9425
|
color: P.textDim, fontFamily: FONT, fontSize: '11.5px', fontWeight: '500',
|
|
@@ -9352,8 +9438,8 @@ void main() {
|
|
|
9352
9438
|
if (!labelEl) return;
|
|
9353
9439
|
labelEl.style.maxWidth = '120px'; labelEl.style.opacity = '1'; labelEl.style.marginLeft = '6px'; labelEl.style.transform = 'translateX(0)';
|
|
9354
9440
|
};
|
|
9355
|
-
const collapse = () => {
|
|
9356
|
-
if (!labelEl || b.dataset.active === 'true') return;
|
|
9441
|
+
const collapse = (force = false) => {
|
|
9442
|
+
if (!labelEl || (!force && b.dataset.active === 'true')) return;
|
|
9357
9443
|
labelEl.style.maxWidth = '0'; labelEl.style.opacity = '0'; labelEl.style.marginLeft = '0'; labelEl.style.transform = 'translateX(-4px)';
|
|
9358
9444
|
};
|
|
9359
9445
|
// Per-button hover only changes color (no layout). The label expand/
|
|
@@ -9408,11 +9494,11 @@ void main() {
|
|
|
9408
9494
|
// DESIGN.md panel toggle - quartet of color squares as the mark.
|
|
9409
9495
|
const designBtn = makeIconBtn({
|
|
9410
9496
|
id: PREFIX + '-design-toggle',
|
|
9411
|
-
svg: `<span style="display:inline-grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;width:14px;height:14px;border-radius:3px;overflow:hidden;box-shadow:inset 0 0 0 1px oklch(
|
|
9497
|
+
svg: `<span style="display:inline-grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;width:14px;height:14px;border-radius:3px;overflow:hidden;box-shadow:inset 0 0 0 1px oklch(92% 0 0 / 0.13);flex-shrink:0">
|
|
9412
9498
|
<span style="background:oklch(84% 0.19 80.46)"></span>
|
|
9413
9499
|
<span style="background:oklch(70% 0.12 188)"></span>
|
|
9414
|
-
<span style="background:oklch(
|
|
9415
|
-
<span style="background:oklch(34% 0
|
|
9500
|
+
<span style="background:oklch(91% 0 0)"></span>
|
|
9501
|
+
<span style="background:oklch(34% 0 0)"></span>
|
|
9416
9502
|
</span>`,
|
|
9417
9503
|
label: 'DESIGN.md',
|
|
9418
9504
|
ariaLabel: 'Toggle DESIGN.md panel',
|
|
@@ -9604,6 +9690,7 @@ void main() {
|
|
|
9604
9690
|
width: '1px', height: '18px',
|
|
9605
9691
|
background: P.hairline,
|
|
9606
9692
|
margin: '0 4px 0 2px',
|
|
9693
|
+
flexShrink: '0',
|
|
9607
9694
|
});
|
|
9608
9695
|
inner.appendChild(divider);
|
|
9609
9696
|
|
|
@@ -9620,6 +9707,7 @@ void main() {
|
|
|
9620
9707
|
display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
|
|
9621
9708
|
padding: '0', boxSizing: 'border-box',
|
|
9622
9709
|
width: '24px', height: '24px', borderRadius: '6px',
|
|
9710
|
+
flexShrink: '0',
|
|
9623
9711
|
border: 'none', background: 'transparent',
|
|
9624
9712
|
color: P.textDim, fontFamily: FONT, fontSize: '0', lineHeight: '0',
|
|
9625
9713
|
cursor: 'pointer', transition: 'color 0.12s ease, background 0.12s ease',
|
|
@@ -9632,16 +9720,16 @@ void main() {
|
|
|
9632
9720
|
exitBtn.addEventListener('click', () => { sendEvent({ type: 'exit' }); teardown(); });
|
|
9633
9721
|
inner.appendChild(exitBtn);
|
|
9634
9722
|
|
|
9635
|
-
// Bar-level hover: expand
|
|
9723
|
+
// Bar-level hover: expand mode labels unless Steer is using the space.
|
|
9636
9724
|
// Buttons with dataset.active="true" ignore collapse (their label stays).
|
|
9637
|
-
const toggles = [pickBtn, insertBtn, detectBtn, designBtn];
|
|
9638
9725
|
globalBarEl.addEventListener('mouseenter', () => {
|
|
9639
|
-
|
|
9726
|
+
syncGlobalBarExpandedLabels(true);
|
|
9727
|
+
syncPageChatExpandedWidth();
|
|
9640
9728
|
schedulePendingDockPosition();
|
|
9641
9729
|
setTimeout(schedulePendingDockPosition, 260);
|
|
9642
9730
|
});
|
|
9643
9731
|
globalBarEl.addEventListener('mouseleave', () => {
|
|
9644
|
-
|
|
9732
|
+
syncGlobalBarExpandedLabels(false);
|
|
9645
9733
|
schedulePendingDockPosition();
|
|
9646
9734
|
setTimeout(schedulePendingDockPosition, 260);
|
|
9647
9735
|
});
|
|
@@ -9659,6 +9747,7 @@ void main() {
|
|
|
9659
9747
|
pendingDockResizeObserver.observe(globalBarEl);
|
|
9660
9748
|
}
|
|
9661
9749
|
window.addEventListener('resize', positionPendingDock);
|
|
9750
|
+
window.addEventListener('resize', syncPageChatExpandedWidth);
|
|
9662
9751
|
|
|
9663
9752
|
requestAnimationFrame(() => {
|
|
9664
9753
|
globalBarEl.style.opacity = '1';
|
|
@@ -9705,9 +9794,7 @@ void main() {
|
|
|
9705
9794
|
// If the bar is currently under the cursor, keep all labels expanded -
|
|
9706
9795
|
// otherwise clicking a toggle that deactivates (e.g. closing DESIGN.md)
|
|
9707
9796
|
// would collapse its label while the user's mouse is still on the bar.
|
|
9708
|
-
|
|
9709
|
-
[pickToggle, insertToggle, detectToggle, designToggle].forEach((t) => t?._expandLabel?.());
|
|
9710
|
-
}
|
|
9797
|
+
syncGlobalBarExpandedLabels(globalBarEl && globalBarEl.matches(':hover'));
|
|
9711
9798
|
|
|
9712
9799
|
if (detectBadge) {
|
|
9713
9800
|
detectBadge.style.display = (detectActive && detectCount > 0) ? 'inline' : 'none';
|
|
@@ -9896,7 +9983,7 @@ void main() {
|
|
|
9896
9983
|
// Remove detection overlays
|
|
9897
9984
|
window.postMessage({ source: 'impeccable-command', action: 'remove' }, '*');
|
|
9898
9985
|
setLiveState('IDLE');
|
|
9899
|
-
document.getElementById(
|
|
9986
|
+
document.getElementById(PICK_CURSOR_STYLE_ID)?.remove();
|
|
9900
9987
|
window.__IMPECCABLE_LIVE_INIT__ = false;
|
|
9901
9988
|
console.log('[impeccable] Live mode exited.');
|
|
9902
9989
|
}
|
|
@@ -9996,8 +10083,8 @@ void main() {
|
|
|
9996
10083
|
meta: 'oklch(55% 0 0)',
|
|
9997
10084
|
hairline: 'oklch(88% 0 0)',
|
|
9998
10085
|
hairlineSoft: 'oklch(92% 0 0)',
|
|
9999
|
-
amber: 'oklch(
|
|
10000
|
-
amberBg: 'oklch(
|
|
10086
|
+
amber: 'oklch(77% 0.13 82)', // stale-hint accent
|
|
10087
|
+
amberBg: 'oklch(89% 0.055 84)',
|
|
10001
10088
|
};
|
|
10002
10089
|
|
|
10003
10090
|
function designPanelCss(BP) {
|
|
@@ -10088,7 +10175,7 @@ void main() {
|
|
|
10088
10175
|
}
|
|
10089
10176
|
.empty strong { color: ${DP.ink}; display: block; margin-bottom: 6px; font-size: 14px; }
|
|
10090
10177
|
.empty code { font-family: ${MONO}; background: ${DP.canvas}; padding: 1px 6px; border-radius: 4px; font-size: 12px; color: ${DP.ink}; }
|
|
10091
|
-
.error { color: oklch(
|
|
10178
|
+
.error { color: oklch(58% 0.15 35); }
|
|
10092
10179
|
|
|
10093
10180
|
/* Stale hint */
|
|
10094
10181
|
.stale {
|
|
@@ -10240,8 +10327,8 @@ void main() {
|
|
|
10240
10327
|
content: ''; position: absolute; left: 4px; top: 13px;
|
|
10241
10328
|
width: 8px; height: 8px; border-radius: 50%;
|
|
10242
10329
|
}
|
|
10243
|
-
.coll .do::before { background: oklch(
|
|
10244
|
-
.coll .dont::before { background: oklch(58% 0.
|
|
10330
|
+
.coll .do::before { background: oklch(45% 0.18 145); }
|
|
10331
|
+
.coll .dont::before { background: oklch(58% 0.15 35); }
|
|
10245
10332
|
|
|
10246
10333
|
.coll .overview-body {
|
|
10247
10334
|
font-size: 12px; line-height: 1.55; color: ${DP.ink2};
|