cfsa-antigravity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chrome-extension
|
|
3
|
+
description: "Expert browser extension guide covering Manifest V3 architecture (service workers, content scripts, popup, sidepanel, options), Chrome APIs (storage, tabs, messaging, alarms, permissions), WXT framework (file-based entrypoints, HMR, multi-browser builds), content script isolation (Shadow DOM, ISOLATED/MAIN worlds), cross-browser compatibility, and Chrome Web Store submission. Use when building browser extensions for Chrome, Firefox, Edge, or Safari."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Browser Extension Expert Guide
|
|
8
|
+
|
|
9
|
+
> Use this skill when building browser extensions targeting Chrome (Manifest V3), Firefox, Edge, or Safari. Covers both raw MV3 APIs and the WXT framework.
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
- Building Chrome/Firefox/Edge/Safari extensions
|
|
14
|
+
- Designing extension architecture (background, content scripts, popup)
|
|
15
|
+
- Implementing content script ↔ background messaging
|
|
16
|
+
- Injecting UI into third-party web pages
|
|
17
|
+
- Working with Chrome APIs (storage, tabs, alarms)
|
|
18
|
+
- Setting up WXT or Plasmo for modern DX
|
|
19
|
+
|
|
20
|
+
## When NOT to Use This Skill
|
|
21
|
+
|
|
22
|
+
- Web applications → use frontend framework skills
|
|
23
|
+
- Mobile apps → use React Native or Flutter
|
|
24
|
+
- Desktop apps → use Tauri or Electron
|
|
25
|
+
- Userscripts → use Tampermonkey (no extension needed)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Architecture Overview (CRITICAL)
|
|
30
|
+
|
|
31
|
+
### Manifest V3 Components
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Extension
|
|
35
|
+
├── Service Worker (background.ts) — Event-driven, no DOM access
|
|
36
|
+
├── Content Scripts (content.ts) — Injected into web pages, DOM access
|
|
37
|
+
├── Popup (popup.html/tsx) — Toolbar icon click UI
|
|
38
|
+
├── Options Page (options.html/tsx) — Extension settings UI
|
|
39
|
+
├── Side Panel (sidepanel.html/tsx) — Chrome 114+ sidebar UI
|
|
40
|
+
├── DevTools Panel (devtools.html/tsx) — Developer tools panel
|
|
41
|
+
└── manifest.json — Permissions, entrypoints, metadata
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| Component | DOM Access | Web APIs | Extension APIs | Lifecycle |
|
|
45
|
+
|-----------|-----------|----------|---------------|-----------|
|
|
46
|
+
| Service Worker | ❌ | Fetch, WebSocket | Full | Event-driven, terminates idle |
|
|
47
|
+
| Content Script | ✅ (host page) | Limited | `runtime`, `storage` | Per-page injection |
|
|
48
|
+
| Popup | ✅ (own DOM) | Full | Full | Opens/closes with click |
|
|
49
|
+
| Options | ✅ (own DOM) | Full | Full | Persistent tab |
|
|
50
|
+
| Side Panel | ✅ (own DOM) | Full | Full | Persistent sidebar |
|
|
51
|
+
|
|
52
|
+
### WXT Project Structure (Recommended)
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
entrypoints/
|
|
56
|
+
├── background.ts — Service worker
|
|
57
|
+
├── content.ts — Content script (main world: ISOLATED)
|
|
58
|
+
├── content/ — Content script with UI
|
|
59
|
+
│ ├── index.ts
|
|
60
|
+
│ └── App.tsx — React/Vue/Svelte component
|
|
61
|
+
├── popup/ — Popup page
|
|
62
|
+
│ ├── index.html
|
|
63
|
+
│ └── main.tsx
|
|
64
|
+
├── options/ — Options page
|
|
65
|
+
│ ├── index.html
|
|
66
|
+
│ └── main.tsx
|
|
67
|
+
└── sidepanel/ — Side panel (Chrome only)
|
|
68
|
+
├── index.html
|
|
69
|
+
└── main.tsx
|
|
70
|
+
components/ — Shared UI components
|
|
71
|
+
utils/ — Shared utilities
|
|
72
|
+
assets/ — Icons, images
|
|
73
|
+
wxt.config.ts — WXT configuration
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 2. WXT Framework Patterns
|
|
79
|
+
|
|
80
|
+
### Background (Service Worker)
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// entrypoints/background.ts
|
|
84
|
+
export default defineBackground(() => {
|
|
85
|
+
console.log('Extension installed!', { id: browser.runtime.id });
|
|
86
|
+
|
|
87
|
+
// Message handler
|
|
88
|
+
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
89
|
+
if (message.type === 'GET_DATA') {
|
|
90
|
+
fetchData().then(sendResponse);
|
|
91
|
+
return true; // Keep channel open for async response
|
|
92
|
+
}
|
|
93
|
+
sendResponse({ success: true });
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Periodic tasks via alarms (NOT setInterval — service workers terminate)
|
|
97
|
+
browser.alarms.create('sync-data', { periodInMinutes: 30 });
|
|
98
|
+
browser.alarms.onAlarm.addListener((alarm) => {
|
|
99
|
+
if (alarm.name === 'sync-data') {
|
|
100
|
+
syncData();
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// First install / update handler
|
|
105
|
+
browser.runtime.onInstalled.addListener(({ reason }) => {
|
|
106
|
+
if (reason === 'install') {
|
|
107
|
+
browser.tabs.create({ url: browser.runtime.getURL('/options.html') });
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> **Critical**: Service workers terminate after ~30s idle. Use `browser.alarms` instead of `setInterval`. No persistent state — use `chrome.storage`.
|
|
114
|
+
|
|
115
|
+
### Content Script
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
// entrypoints/content.ts
|
|
119
|
+
export default defineContentScript({
|
|
120
|
+
matches: ['*://*.example.com/*'],
|
|
121
|
+
runAt: 'document_idle',
|
|
122
|
+
world: 'ISOLATED', // Default — can't access page JS variables
|
|
123
|
+
|
|
124
|
+
main(ctx) {
|
|
125
|
+
console.log('Content script loaded on:', window.location.href);
|
|
126
|
+
|
|
127
|
+
// Send message to background
|
|
128
|
+
const response = await browser.runtime.sendMessage({ type: 'GET_DATA' });
|
|
129
|
+
|
|
130
|
+
// Watch for page changes (SPA support)
|
|
131
|
+
const observer = new MutationObserver((mutations) => {
|
|
132
|
+
// React to DOM changes
|
|
133
|
+
});
|
|
134
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
135
|
+
|
|
136
|
+
// Cleanup when extension context invalidated (HMR, update)
|
|
137
|
+
ctx.onInvalidated(() => {
|
|
138
|
+
observer.disconnect();
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Content Script with UI (Shadow DOM)
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// entrypoints/content/index.ts
|
|
148
|
+
import './style.css';
|
|
149
|
+
|
|
150
|
+
export default defineContentScript({
|
|
151
|
+
matches: ['*://*.example.com/*'],
|
|
152
|
+
cssInjectionMode: 'ui',
|
|
153
|
+
|
|
154
|
+
async main(ctx) {
|
|
155
|
+
const ui = await createShadowRootUi(ctx, {
|
|
156
|
+
name: 'my-extension-ui',
|
|
157
|
+
position: 'inline',
|
|
158
|
+
anchor: 'body',
|
|
159
|
+
onMount: (container) => {
|
|
160
|
+
const app = document.createElement('div');
|
|
161
|
+
app.textContent = 'Hello from extension!';
|
|
162
|
+
container.append(app);
|
|
163
|
+
return app;
|
|
164
|
+
},
|
|
165
|
+
onRemove: (app) => {
|
|
166
|
+
app?.remove();
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
ui.mount();
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
> **Rule**: Always use Shadow DOM for content script UI. Prevents CSS conflicts with the host page.
|
|
176
|
+
|
|
177
|
+
### Popup
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
// entrypoints/popup/main.tsx
|
|
181
|
+
import React from 'react';
|
|
182
|
+
import ReactDOM from 'react-dom/client';
|
|
183
|
+
|
|
184
|
+
function Popup() {
|
|
185
|
+
const [data, setData] = React.useState(null);
|
|
186
|
+
|
|
187
|
+
React.useEffect(() => {
|
|
188
|
+
// Read from extension storage
|
|
189
|
+
browser.storage.local.get('savedData').then((result) => {
|
|
190
|
+
setData(result.savedData);
|
|
191
|
+
});
|
|
192
|
+
}, []);
|
|
193
|
+
|
|
194
|
+
const handleAction = async () => {
|
|
195
|
+
// Send message to background
|
|
196
|
+
const response = await browser.runtime.sendMessage({ type: 'DO_ACTION' });
|
|
197
|
+
console.log('Response:', response);
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<div style={{ width: 350, padding: 16 }}>
|
|
202
|
+
<h1>My Extension</h1>
|
|
203
|
+
<button onClick={handleAction}>Do Action</button>
|
|
204
|
+
</div>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(<Popup />);
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 3. Chrome APIs (CRITICAL)
|
|
214
|
+
|
|
215
|
+
### Storage
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
// ✅ Use chrome.storage, NOT localStorage (not available in service worker)
|
|
219
|
+
|
|
220
|
+
// chrome.storage.local — extension-only, no size limit (with permission)
|
|
221
|
+
await browser.storage.local.set({ key: 'value', settings: { theme: 'dark' } });
|
|
222
|
+
const result = await browser.storage.local.get(['key', 'settings']);
|
|
223
|
+
|
|
224
|
+
// chrome.storage.sync — synced across user's Chrome instances (100KB limit)
|
|
225
|
+
await browser.storage.sync.set({ preferences: { notifications: true } });
|
|
226
|
+
|
|
227
|
+
// Watch for changes (works in ALL contexts)
|
|
228
|
+
browser.storage.onChanged.addListener((changes, area) => {
|
|
229
|
+
if (area === 'local' && changes.key) {
|
|
230
|
+
console.log('key changed:', changes.key.oldValue, '→', changes.key.newValue);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Tabs
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
// Query tabs
|
|
239
|
+
const [activeTab] = await browser.tabs.query({ active: true, currentWindow: true });
|
|
240
|
+
|
|
241
|
+
// Execute script in tab
|
|
242
|
+
await browser.scripting.executeScript({
|
|
243
|
+
target: { tabId: activeTab.id! },
|
|
244
|
+
func: () => document.title,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// Listen for tab events
|
|
248
|
+
browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
|
249
|
+
if (changeInfo.status === 'complete') {
|
|
250
|
+
// Tab finished loading
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Message Passing
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
// Content Script → Background
|
|
259
|
+
const response = await browser.runtime.sendMessage({
|
|
260
|
+
type: 'FETCH_DATA',
|
|
261
|
+
payload: { url: window.location.href },
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// Background → Content Script (specific tab)
|
|
265
|
+
await browser.tabs.sendMessage(tabId, {
|
|
266
|
+
type: 'UPDATE_UI',
|
|
267
|
+
payload: { highlight: true },
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// Long-lived connection
|
|
271
|
+
const port = browser.runtime.connect({ name: 'sidebar' });
|
|
272
|
+
port.onMessage.addListener((msg) => { /* handle */ });
|
|
273
|
+
port.postMessage({ type: 'SUBSCRIBE' });
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Permissions
|
|
277
|
+
|
|
278
|
+
```json
|
|
279
|
+
{
|
|
280
|
+
"permissions": ["storage", "alarms", "activeTab"],
|
|
281
|
+
"optional_permissions": ["tabs", "history"],
|
|
282
|
+
"host_permissions": ["*://*.example.com/*"]
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
| Permission | Use | Principle |
|
|
287
|
+
|-----------|-----|-----------|
|
|
288
|
+
| `activeTab` | Access current tab on click | ✅ Minimal — no warning |
|
|
289
|
+
| `tabs` | Query all tabs (titles, URLs) | ⚠️ Shows "read browsing history" |
|
|
290
|
+
| `host_permissions` | Inject into specific sites | ⚠️ "Read/change data on sites" |
|
|
291
|
+
| `<all_urls>` | Inject into all sites | 🔴 Max warning — avoid if possible |
|
|
292
|
+
| `storage` | Extension storage | ✅ No warning |
|
|
293
|
+
|
|
294
|
+
> **Rule**: Request `optional_permissions` at runtime when needed. Fewer install-time permissions = higher install rate.
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## 4. WXT Configuration
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
// wxt.config.ts
|
|
302
|
+
import { defineConfig } from 'wxt';
|
|
303
|
+
|
|
304
|
+
export default defineConfig({
|
|
305
|
+
modules: ['@wxt-dev/module-react'], // or vue, svelte, solid
|
|
306
|
+
manifest: {
|
|
307
|
+
name: 'My Extension',
|
|
308
|
+
description: 'A useful browser extension',
|
|
309
|
+
permissions: ['storage', 'activeTab', 'alarms'],
|
|
310
|
+
host_permissions: ['*://*.example.com/*'],
|
|
311
|
+
action: {
|
|
312
|
+
default_title: 'Click to open',
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
// Multi-browser support
|
|
316
|
+
runner: {
|
|
317
|
+
startUrls: ['https://example.com'],
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Build Commands
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Development with HMR
|
|
326
|
+
wxt dev # Chrome
|
|
327
|
+
wxt dev -b firefox # Firefox
|
|
328
|
+
|
|
329
|
+
# Production build
|
|
330
|
+
wxt build # Chrome MV3
|
|
331
|
+
wxt build -b firefox # Firefox MV2/MV3
|
|
332
|
+
wxt build -b safari # Safari
|
|
333
|
+
|
|
334
|
+
# Create distributable zip
|
|
335
|
+
wxt zip # For Chrome Web Store
|
|
336
|
+
wxt zip -b firefox # For Firefox Add-ons
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## 5. Cross-Browser Compatibility
|
|
342
|
+
|
|
343
|
+
| Feature | Chrome | Firefox | Safari | Edge |
|
|
344
|
+
|---------|--------|---------|--------|------|
|
|
345
|
+
| Manifest V3 | ✅ Required | ✅ Supported | ✅ Required | ✅ Required |
|
|
346
|
+
| Service Worker | ✅ | ✅ | ✅ | ✅ |
|
|
347
|
+
| Side Panel | ✅ (114+) | ❌ | ❌ | ✅ |
|
|
348
|
+
| `browser.*` API | ✅ (via polyfill) | ✅ Native | ✅ | ✅ (via polyfill) |
|
|
349
|
+
| Promise-based APIs | ✅ (MV3) | ✅ Native | ✅ | ✅ |
|
|
350
|
+
|
|
351
|
+
> WXT handles browser polyfills automatically. Use `browser.*` namespace (not `chrome.*`).
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 6. Common Anti-Patterns
|
|
356
|
+
|
|
357
|
+
1. **Using `setInterval` in service worker** — service workers terminate; use `browser.alarms`
|
|
358
|
+
2. **`localStorage` in background** — not available; use `browser.storage.local`
|
|
359
|
+
3. **Injecting CSS without Shadow DOM** — conflicts with host page styles
|
|
360
|
+
4. **Requesting `<all_urls>` by default** — scary permission dialog; use `activeTab` + optional permissions
|
|
361
|
+
5. **Not handling `context invalidated`** — content scripts break on extension update; use `ctx.onInvalidated()`
|
|
362
|
+
6. **Storing sensitive data in `chrome.storage`** — it's unencrypted; never store raw API keys
|
|
363
|
+
7. **Blocking popup render on async calls** — show loading state, fetch async
|
|
364
|
+
8. **Not testing in Firefox** — MV3 differences exist; test in both browsers
|
|
365
|
+
9. **Ignoring Content Security Policy** — MV3 forbids remote code; all JS must be bundled
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## References
|
|
370
|
+
|
|
371
|
+
- [Chrome Extensions Documentation](https://developer.chrome.com/docs/extensions/)
|
|
372
|
+
- [Manifest V3 Migration Guide](https://developer.chrome.com/docs/extensions/develop/migrate)
|
|
373
|
+
- [WXT Framework](https://wxt.dev/)
|
|
374
|
+
- [Firefox Extension Docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions)
|
|
375
|
+
- [Chrome Web Store Publishing](https://developer.chrome.com/docs/webstore/publish/)
|