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,453 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vscode-extension
|
|
3
|
+
description: "Expert VS Code extension development guide covering Extension Host architecture, activation events, commands, contribution points (menus, keybindings, settings, views), Webview API, Language Server Protocol (LSP), TreeView/TreeDataProvider, Testing (vscode-test), packaging (vsce/ovsx), and publishing. Use when building VS Code extensions, language servers, or editor tooling."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# VS Code Extension Development Guide
|
|
8
|
+
|
|
9
|
+
> Use this skill when building Visual Studio Code extensions. Covers the Extension API, contribution points, Webviews, Language Server Protocol, and publishing.
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
- Building VS Code extensions (commands, UI, language features)
|
|
14
|
+
- Implementing language support (syntax, intellisense, diagnostics)
|
|
15
|
+
- Creating custom views (TreeView, Webview, sidebar panels)
|
|
16
|
+
- Building editor integrations (formatters, linters, debuggers)
|
|
17
|
+
- Publishing to VS Code Marketplace or Open VSX
|
|
18
|
+
|
|
19
|
+
## When NOT to Use This Skill
|
|
20
|
+
|
|
21
|
+
- Browser extensions → use Browser Extension skill
|
|
22
|
+
- JetBrains plugins → different architecture entirely
|
|
23
|
+
- Standalone desktop apps → use Tauri or Electron
|
|
24
|
+
- VS Code themes only → simpler `contributes.themes` in package.json
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Architecture Overview (CRITICAL)
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
VS Code
|
|
32
|
+
├── Main Process (Electron)
|
|
33
|
+
│ └── Extension Host (separate process per window)
|
|
34
|
+
│ ├── Your Extension (activate/deactivate)
|
|
35
|
+
│ ├── Other Extensions
|
|
36
|
+
│ └── Language Server (optional, separate process)
|
|
37
|
+
└── Renderer Process
|
|
38
|
+
├── Editor UI
|
|
39
|
+
├── Sidebar Views (TreeView, WebviewView)
|
|
40
|
+
└── Webview Panels (custom HTML/CSS/JS)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
| Component | Runs In | Access | Use For |
|
|
44
|
+
|-----------|---------|--------|---------|
|
|
45
|
+
| Extension code | Extension Host | Full VS Code API | Commands, providers, logic |
|
|
46
|
+
| Webview | Renderer (iframe) | Message passing only | Rich custom UI |
|
|
47
|
+
| Language Server | Separate process | LSP protocol | Heavy language analysis |
|
|
48
|
+
| TreeView | Extension Host | TreeDataProvider API | List/tree sidebar panels |
|
|
49
|
+
|
|
50
|
+
### Extension Lifecycle
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
// extension.ts — entry point
|
|
54
|
+
import * as vscode from 'vscode';
|
|
55
|
+
|
|
56
|
+
export function activate(context: vscode.ExtensionContext) {
|
|
57
|
+
// Called when activation event fires
|
|
58
|
+
// Register commands, providers, listeners HERE
|
|
59
|
+
console.log('Extension activated');
|
|
60
|
+
|
|
61
|
+
const disposable = vscode.commands.registerCommand('myExt.helloWorld', () => {
|
|
62
|
+
vscode.window.showInformationMessage('Hello World!');
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
context.subscriptions.push(disposable); // Auto-cleanup on deactivate
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function deactivate() {
|
|
69
|
+
// Optional cleanup
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> **Rule**: Push ALL disposables to `context.subscriptions`. Never register listeners without cleanup.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 2. package.json (CRITICAL)
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"name": "my-extension",
|
|
82
|
+
"displayName": "My Extension",
|
|
83
|
+
"version": "0.1.0",
|
|
84
|
+
"engines": { "vscode": "^1.85.0" },
|
|
85
|
+
"categories": ["Other"],
|
|
86
|
+
"activationEvents": [],
|
|
87
|
+
"main": "./out/extension.js",
|
|
88
|
+
"contributes": {
|
|
89
|
+
"commands": [
|
|
90
|
+
{
|
|
91
|
+
"command": "myExt.helloWorld",
|
|
92
|
+
"title": "Hello World",
|
|
93
|
+
"category": "My Extension",
|
|
94
|
+
"icon": "$(sparkle)"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"menus": {
|
|
98
|
+
"editor/context": [
|
|
99
|
+
{ "command": "myExt.helloWorld", "when": "editorTextFocus" }
|
|
100
|
+
],
|
|
101
|
+
"commandPalette": [
|
|
102
|
+
{ "command": "myExt.helloWorld", "when": "editorLangId == typescript" }
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
"keybindings": [
|
|
106
|
+
{
|
|
107
|
+
"command": "myExt.helloWorld",
|
|
108
|
+
"key": "ctrl+shift+h",
|
|
109
|
+
"mac": "cmd+shift+h",
|
|
110
|
+
"when": "editorTextFocus"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"configuration": {
|
|
114
|
+
"title": "My Extension",
|
|
115
|
+
"properties": {
|
|
116
|
+
"myExt.enableFeature": {
|
|
117
|
+
"type": "boolean",
|
|
118
|
+
"default": true,
|
|
119
|
+
"description": "Enable the main feature"
|
|
120
|
+
},
|
|
121
|
+
"myExt.maxResults": {
|
|
122
|
+
"type": "number",
|
|
123
|
+
"default": 10,
|
|
124
|
+
"description": "Maximum number of results"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"viewsContainers": {
|
|
129
|
+
"activitybar": [
|
|
130
|
+
{ "id": "myExtView", "title": "My Extension", "icon": "resources/icon.svg" }
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"views": {
|
|
134
|
+
"myExtView": [
|
|
135
|
+
{ "id": "myExt.treeView", "name": "Explorer" }
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Activation Events
|
|
143
|
+
|
|
144
|
+
| Event | When | Example |
|
|
145
|
+
|-------|------|---------|
|
|
146
|
+
| `onCommand:myExt.cmd` | Command executed | Always use for commands |
|
|
147
|
+
| `onLanguage:typescript` | File of language opened | Language features |
|
|
148
|
+
| `workspaceContains:**/tsconfig.json` | Workspace has file | Project-specific tools |
|
|
149
|
+
| `onView:myExt.treeView` | View becomes visible | Sidebar panels |
|
|
150
|
+
| `onUri` | Extension URI handler invoked | Deep linking |
|
|
151
|
+
| `*` | Always (startup) | 🔴 Avoid — slows VS Code startup |
|
|
152
|
+
|
|
153
|
+
> **Rule**: Use the most specific activation event possible. `*` is banned for production extensions.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 3. Commands & Configuration
|
|
158
|
+
|
|
159
|
+
### Commands
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// Register with arguments
|
|
163
|
+
context.subscriptions.push(
|
|
164
|
+
vscode.commands.registerCommand('myExt.openFile', async (uri: vscode.Uri) => {
|
|
165
|
+
const doc = await vscode.workspace.openTextDocument(uri);
|
|
166
|
+
await vscode.window.showTextDocument(doc);
|
|
167
|
+
})
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
// Register text editor command (has activeTextEditor guaranteed)
|
|
171
|
+
context.subscriptions.push(
|
|
172
|
+
vscode.commands.registerTextEditorCommand('myExt.insertSnippet', (editor, edit) => {
|
|
173
|
+
edit.insert(editor.selection.active, 'inserted text');
|
|
174
|
+
})
|
|
175
|
+
);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Reading Configuration
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
const config = vscode.workspace.getConfiguration('myExt');
|
|
182
|
+
const enabled = config.get<boolean>('enableFeature', true);
|
|
183
|
+
const maxResults = config.get<number>('maxResults', 10);
|
|
184
|
+
|
|
185
|
+
// Watch for config changes
|
|
186
|
+
context.subscriptions.push(
|
|
187
|
+
vscode.workspace.onDidChangeConfiguration((e) => {
|
|
188
|
+
if (e.affectsConfiguration('myExt.enableFeature')) {
|
|
189
|
+
// Re-initialize feature
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 4. TreeView (Sidebar Panel)
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
class MyTreeProvider implements vscode.TreeDataProvider<TreeItem> {
|
|
201
|
+
private _onDidChangeTreeData = new vscode.EventEmitter<TreeItem | undefined>();
|
|
202
|
+
readonly onDidChangeTreeData = this._onDidChangeTreeData.event;
|
|
203
|
+
|
|
204
|
+
refresh(): void {
|
|
205
|
+
this._onDidChangeTreeData.fire(undefined);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
getTreeItem(element: TreeItem): vscode.TreeItem {
|
|
209
|
+
return element;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
async getChildren(element?: TreeItem): Promise<TreeItem[]> {
|
|
213
|
+
if (!element) {
|
|
214
|
+
// Root items
|
|
215
|
+
return this.getRootItems();
|
|
216
|
+
}
|
|
217
|
+
// Child items
|
|
218
|
+
return element.children ?? [];
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
private getRootItems(): TreeItem[] {
|
|
222
|
+
return [
|
|
223
|
+
new TreeItem('Item 1', vscode.TreeItemCollapsibleState.Collapsed),
|
|
224
|
+
new TreeItem('Item 2', vscode.TreeItemCollapsibleState.None),
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
class TreeItem extends vscode.TreeItem {
|
|
230
|
+
children?: TreeItem[];
|
|
231
|
+
|
|
232
|
+
constructor(
|
|
233
|
+
label: string,
|
|
234
|
+
collapsibleState: vscode.TreeItemCollapsibleState,
|
|
235
|
+
) {
|
|
236
|
+
super(label, collapsibleState);
|
|
237
|
+
this.tooltip = `Click to interact with ${label}`;
|
|
238
|
+
this.iconPath = new vscode.ThemeIcon('file');
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Register in activate()
|
|
243
|
+
const treeProvider = new MyTreeProvider();
|
|
244
|
+
const treeView = vscode.window.createTreeView('myExt.treeView', {
|
|
245
|
+
treeDataProvider: treeProvider,
|
|
246
|
+
showCollapseAll: true,
|
|
247
|
+
});
|
|
248
|
+
context.subscriptions.push(treeView);
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 5. Webview Panel (Custom UI)
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
function createWebviewPanel(context: vscode.ExtensionContext) {
|
|
257
|
+
const panel = vscode.window.createWebviewPanel(
|
|
258
|
+
'myExtWebview',
|
|
259
|
+
'My Webview',
|
|
260
|
+
vscode.ViewColumn.One,
|
|
261
|
+
{
|
|
262
|
+
enableScripts: true,
|
|
263
|
+
retainContextWhenHidden: true, // Keep state when panel hidden
|
|
264
|
+
localResourceRoots: [
|
|
265
|
+
vscode.Uri.joinPath(context.extensionUri, 'media'),
|
|
266
|
+
],
|
|
267
|
+
}
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
// Get URI for bundled resources
|
|
271
|
+
const scriptUri = panel.webview.asWebviewUri(
|
|
272
|
+
vscode.Uri.joinPath(context.extensionUri, 'media', 'main.js')
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
panel.webview.html = `
|
|
276
|
+
<!DOCTYPE html>
|
|
277
|
+
<html>
|
|
278
|
+
<head>
|
|
279
|
+
<meta http-equiv="Content-Security-Policy"
|
|
280
|
+
content="default-src 'none'; script-src ${panel.webview.cspSource}; style-src ${panel.webview.cspSource};">
|
|
281
|
+
</head>
|
|
282
|
+
<body>
|
|
283
|
+
<h1>Hello from Webview</h1>
|
|
284
|
+
<script src="${scriptUri}"></script>
|
|
285
|
+
</body>
|
|
286
|
+
</html>
|
|
287
|
+
`;
|
|
288
|
+
|
|
289
|
+
// Extension → Webview messaging
|
|
290
|
+
panel.webview.postMessage({ type: 'update', data: { count: 42 } });
|
|
291
|
+
|
|
292
|
+
// Webview → Extension messaging
|
|
293
|
+
panel.webview.onDidReceiveMessage((message) => {
|
|
294
|
+
switch (message.type) {
|
|
295
|
+
case 'save':
|
|
296
|
+
saveData(message.payload);
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
}, undefined, context.subscriptions);
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
> **Rule**: Always set Content-Security-Policy in Webviews. Never use inline scripts — load from bundled files via `asWebviewUri`.
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 6. Language Features
|
|
308
|
+
|
|
309
|
+
### Diagnostics (Linting/Errors)
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
const diagnosticCollection = vscode.languages.createDiagnosticCollection('myExt');
|
|
313
|
+
context.subscriptions.push(diagnosticCollection);
|
|
314
|
+
|
|
315
|
+
function updateDiagnostics(document: vscode.TextDocument) {
|
|
316
|
+
const diagnostics: vscode.Diagnostic[] = [];
|
|
317
|
+
|
|
318
|
+
for (let i = 0; i < document.lineCount; i++) {
|
|
319
|
+
const line = document.lineAt(i);
|
|
320
|
+
if (line.text.includes('TODO')) {
|
|
321
|
+
diagnostics.push(new vscode.Diagnostic(
|
|
322
|
+
line.range,
|
|
323
|
+
'TODO found',
|
|
324
|
+
vscode.DiagnosticSeverity.Warning,
|
|
325
|
+
));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
diagnosticCollection.set(document.uri, diagnostics);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
context.subscriptions.push(
|
|
333
|
+
vscode.workspace.onDidChangeTextDocument((e) => updateDiagnostics(e.document)),
|
|
334
|
+
vscode.workspace.onDidOpenTextDocument(updateDiagnostics),
|
|
335
|
+
);
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Completion Provider
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
context.subscriptions.push(
|
|
342
|
+
vscode.languages.registerCompletionItemProvider('typescript', {
|
|
343
|
+
provideCompletionItems(document, position) {
|
|
344
|
+
const item = new vscode.CompletionItem('mySnippet', vscode.CompletionItemKind.Snippet);
|
|
345
|
+
item.insertText = new vscode.SnippetString('console.log(${1:message});');
|
|
346
|
+
item.documentation = 'Inserts a console.log statement';
|
|
347
|
+
return [item];
|
|
348
|
+
}
|
|
349
|
+
}, '.') // Trigger on '.'
|
|
350
|
+
);
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Language Server Protocol (LSP)
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
// For complex language features, use a separate Language Server process
|
|
357
|
+
import { LanguageClient, TransportKind } from 'vscode-languageclient/node';
|
|
358
|
+
|
|
359
|
+
const serverModule = context.asAbsolutePath('out/server.js');
|
|
360
|
+
const client = new LanguageClient(
|
|
361
|
+
'myLanguageServer',
|
|
362
|
+
'My Language Server',
|
|
363
|
+
{
|
|
364
|
+
run: { module: serverModule, transport: TransportKind.ipc },
|
|
365
|
+
debug: { module: serverModule, transport: TransportKind.ipc },
|
|
366
|
+
},
|
|
367
|
+
{ documentSelector: [{ scheme: 'file', language: 'mylang' }] }
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
client.start();
|
|
371
|
+
context.subscriptions.push(client);
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
> **Rule**: Use LSP for heavy language analysis (type checking, multi-file analysis). Use inline providers for lightweight features (simple completions, snippets).
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## 7. Testing
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
// src/test/suite/extension.test.ts
|
|
382
|
+
import * as assert from 'assert';
|
|
383
|
+
import * as vscode from 'vscode';
|
|
384
|
+
|
|
385
|
+
suite('Extension Test Suite', () => {
|
|
386
|
+
test('Command registered', async () => {
|
|
387
|
+
const commands = await vscode.commands.getCommands(true);
|
|
388
|
+
assert.ok(commands.includes('myExt.helloWorld'));
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
test('Opens document', async () => {
|
|
392
|
+
const uri = vscode.Uri.file('/tmp/test.ts');
|
|
393
|
+
const doc = await vscode.workspace.openTextDocument(uri);
|
|
394
|
+
assert.strictEqual(doc.languageId, 'typescript');
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
# Run tests with VS Code test runner
|
|
401
|
+
npx vscode-test # Downloads VS Code, runs tests in Extension Host
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 8. Packaging & Publishing
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Install vsce
|
|
410
|
+
npm install -g @vscode/vsce
|
|
411
|
+
|
|
412
|
+
# Package as .vsix
|
|
413
|
+
vsce package
|
|
414
|
+
|
|
415
|
+
# Publish to VS Code Marketplace
|
|
416
|
+
vsce publish
|
|
417
|
+
|
|
418
|
+
# Publish to Open VSX (Eclipse foundation)
|
|
419
|
+
npx ovsx publish -p <token>
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### Pre-publish Checklist
|
|
423
|
+
|
|
424
|
+
- [ ] `engines.vscode` set to minimum supported version
|
|
425
|
+
- [ ] `activationEvents` are specific (no `*`)
|
|
426
|
+
- [ ] Extension bundle is small (use esbuild/webpack)
|
|
427
|
+
- [ ] README has screenshots and feature descriptions
|
|
428
|
+
- [ ] CHANGELOG.md is up to date
|
|
429
|
+
- [ ] Icon is 128×128px
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## 9. Common Anti-Patterns
|
|
434
|
+
|
|
435
|
+
1. **`activationEvents: ["*"]`** — activates on every VS Code start; use specific triggers
|
|
436
|
+
2. **Not disposing listeners** — memory leaks; always push to `context.subscriptions`
|
|
437
|
+
3. **Synchronous file I/O** — blocks Extension Host; use `vscode.workspace.fs` async APIs
|
|
438
|
+
4. **Inline scripts in Webview** — CSP violation; load from bundled files via `asWebviewUri`
|
|
439
|
+
5. **Heavy computation in Extension Host** — blocks ALL extensions; offload to Language Server or Worker
|
|
440
|
+
6. **Not bundling** — shipping `node_modules` → massive extension; use esbuild to bundle
|
|
441
|
+
7. **Hardcoded file paths** — use `context.extensionUri` and `vscode.Uri.joinPath` for portability
|
|
442
|
+
8. **Ignoring `when` clauses** — commands appear everywhere; scope with `when` in menus/keybindings
|
|
443
|
+
9. **No error handling in providers** — unhandled errors crash the provider silently
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## References
|
|
448
|
+
|
|
449
|
+
- [VS Code Extension API](https://code.visualstudio.com/api)
|
|
450
|
+
- [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines)
|
|
451
|
+
- [Extension Samples](https://github.com/microsoft/vscode-extension-samples)
|
|
452
|
+
- [Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
|
|
453
|
+
- [Publishing Extensions](https://code.visualstudio.com/api/working-with-extensions/publishing-extension)
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: astro-framework
|
|
3
|
+
description: Comprehensive Astro framework development guide for building fast, content-driven websites using islands architecture. Use this skill when creating Astro components, implementing islands with selective hydration, working with content collections, configuring SSR adapters, building API endpoints, implementing view transitions, or integrating UI frameworks (React, Vue, Svelte, Solid). Triggers on Astro, islands architecture, content collections, client directives, view transitions, Astro SSR, hybrid rendering, static site generation, astro.config.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: delineas
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
category: framework
|
|
9
|
+
tags: astro, islands, ssr, ssg, content-collections, view-transitions
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Astro Framework Specialist
|
|
13
|
+
|
|
14
|
+
Senior Astro specialist with deep expertise in islands architecture, content-driven websites, and hybrid rendering strategies.
|
|
15
|
+
|
|
16
|
+
## Role Definition
|
|
17
|
+
|
|
18
|
+
You are a senior frontend engineer with extensive Astro experience. You specialize in building fast, content-focused websites using Astro's islands architecture, content collections, and hybrid rendering. You understand when to ship JavaScript and when to keep things static.
|
|
19
|
+
|
|
20
|
+
## When to Use This Skill
|
|
21
|
+
|
|
22
|
+
Activate this skill when:
|
|
23
|
+
- Building content-driven websites (blogs, docs, marketing sites)
|
|
24
|
+
- Implementing islands architecture with selective hydration
|
|
25
|
+
- Creating content collections with type-safe schemas
|
|
26
|
+
- Setting up SSR with adapters (Node, Vercel, Netlify, Cloudflare)
|
|
27
|
+
- Building API endpoints and server actions
|
|
28
|
+
- Implementing view transitions for SPA-like navigation
|
|
29
|
+
- Integrating UI frameworks (React, Vue, Svelte, Solid)
|
|
30
|
+
- Optimizing images and performance
|
|
31
|
+
- Configuring `astro.config.mjs`
|
|
32
|
+
|
|
33
|
+
## Core Workflow
|
|
34
|
+
|
|
35
|
+
1. **Analyze requirements** → Identify static vs dynamic content, hydration needs, data sources
|
|
36
|
+
2. **Design structure** → Plan pages, layouts, components, content collections
|
|
37
|
+
3. **Implement components** → Create Astro components with proper client directives
|
|
38
|
+
4. **Configure routing** → Set up file-based routing, dynamic routes, endpoints
|
|
39
|
+
5. **Optimize delivery** → Configure adapters, image optimization, view transitions
|
|
40
|
+
|
|
41
|
+
## Reference Documentation
|
|
42
|
+
|
|
43
|
+
Load detailed guidance based on your current task:
|
|
44
|
+
|
|
45
|
+
| Topic | Reference | When to Load |
|
|
46
|
+
|-------|-----------|--------------|
|
|
47
|
+
| Components | [references/components.md](references/components.md) | Writing Astro components, Props, slots, expressions |
|
|
48
|
+
| Client Directives | [references/client-directives.md](references/client-directives.md) | Hydration strategies, `client:load`, `client:visible`, `client:idle` |
|
|
49
|
+
| Content Collections | [references/content-collections.md](references/content-collections.md) | Schemas, loaders, `getCollection`, `getEntry` |
|
|
50
|
+
| Routing | [references/routing.md](references/routing.md) | Pages, dynamic routes, endpoints, redirects |
|
|
51
|
+
| SSR & Adapters | [references/ssr-adapters.md](references/ssr-adapters.md) | On-demand rendering, adapters, server islands |
|
|
52
|
+
| View Transitions | [references/view-transitions.md](references/view-transitions.md) | ClientRouter, animations, transition directives |
|
|
53
|
+
| Actions | [references/actions.md](references/actions.md) | Form handling, `defineAction`, validation |
|
|
54
|
+
| Middleware | [references/middleware.md](references/middleware.md) | `onRequest`, sequence, `context.locals` |
|
|
55
|
+
| Styling | [references/styling.md](references/styling.md) | Scoped CSS, global styles, `class:list` |
|
|
56
|
+
| Images | [references/images.md](references/images.md) | `<Image />`, `<Picture />`, optimization |
|
|
57
|
+
| Configuration | [references/configuration.md](references/configuration.md) | `astro.config.mjs`, TypeScript, env variables |
|
|
58
|
+
|
|
59
|
+
## Guidelines by Context
|
|
60
|
+
|
|
61
|
+
Context-specific rules are available in the `rules/` directory:
|
|
62
|
+
|
|
63
|
+
- `rules/astro-components.rule.md` → Component structure patterns
|
|
64
|
+
- `rules/client-hydration.rule.md` → Hydration strategy decisions
|
|
65
|
+
- `rules/content-collections.rule.md` → Collection schema best practices
|
|
66
|
+
- `rules/astro-routing.rule.md` → Routing patterns and dynamic routes
|
|
67
|
+
- `rules/astro-ssr.rule.md` → SSR configuration and adapters
|
|
68
|
+
- `rules/astro-images.rule.md` → Image optimization patterns
|
|
69
|
+
- `rules/astro-typescript.rule.md` → TypeScript configuration
|
|
70
|
+
|
|
71
|
+
## Critical Rules
|
|
72
|
+
|
|
73
|
+
### MUST DO
|
|
74
|
+
|
|
75
|
+
- Use islands architecture—only hydrate interactive components
|
|
76
|
+
- Choose appropriate client directives based on interaction needs
|
|
77
|
+
- Define content collection schemas with Zod for type safety
|
|
78
|
+
- Use `<Image />` and `<Picture />` for optimized images
|
|
79
|
+
- Implement proper error boundaries for client components
|
|
80
|
+
- Use TypeScript with strict mode for type safety
|
|
81
|
+
- Configure appropriate adapter for deployment target
|
|
82
|
+
- Use `Astro.props` for component data passing
|
|
83
|
+
|
|
84
|
+
### MUST NOT DO
|
|
85
|
+
|
|
86
|
+
- Hydrate components that don't need interactivity (use `client:` only when necessary)
|
|
87
|
+
- Use `client:only` without specifying the framework
|
|
88
|
+
- Import images with string paths (use import statements)
|
|
89
|
+
- Skip schema validation in content collections
|
|
90
|
+
- Mix `server` and `hybrid` output modes incorrectly
|
|
91
|
+
- Access `Astro.request` in prerendered pages
|
|
92
|
+
- Use browser APIs in component frontmatter (server-side code)
|
|
93
|
+
- Forget to install adapters for SSR deployment
|
|
94
|
+
|
|
95
|
+
## Quick Reference
|
|
96
|
+
|
|
97
|
+
### Component Structure
|
|
98
|
+
|
|
99
|
+
```astro
|
|
100
|
+
---
|
|
101
|
+
// Component Script (runs on server)
|
|
102
|
+
interface Props {
|
|
103
|
+
title: string;
|
|
104
|
+
count?: number;
|
|
105
|
+
}
|
|
106
|
+
const { title, count = 0 } = Astro.props;
|
|
107
|
+
const data = await fetch('https://api.example.com/data');
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
<!-- Component Template -->
|
|
111
|
+
<div>
|
|
112
|
+
<h1>{title}</h1>
|
|
113
|
+
<p>Count: {count}</p>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<style>
|
|
117
|
+
/* Scoped by default */
|
|
118
|
+
h1 { color: navy; }
|
|
119
|
+
</style>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Client Directive Priority
|
|
123
|
+
|
|
124
|
+
1. **No directive** → Static HTML, zero JavaScript
|
|
125
|
+
2. **`client:load`** → Hydrate immediately on page load
|
|
126
|
+
3. **`client:idle`** → Hydrate when browser is idle
|
|
127
|
+
4. **`client:visible`** → Hydrate when component enters viewport
|
|
128
|
+
5. **`client:media`** → Hydrate when media query matches
|
|
129
|
+
6. **`client:only`** → Skip SSR, render only on client
|
|
130
|
+
|
|
131
|
+
### Content Collection Schema
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
// src/content/config.ts
|
|
135
|
+
import { defineCollection, z } from 'astro:content';
|
|
136
|
+
|
|
137
|
+
const blog = defineCollection({
|
|
138
|
+
type: 'content',
|
|
139
|
+
schema: z.object({
|
|
140
|
+
title: z.string(),
|
|
141
|
+
date: z.date(),
|
|
142
|
+
draft: z.boolean().default(false),
|
|
143
|
+
tags: z.array(z.string()).optional(),
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
export const collections = { blog };
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Output Format
|
|
151
|
+
|
|
152
|
+
When implementing Astro features, provide:
|
|
153
|
+
|
|
154
|
+
1. Component file (`.astro` with frontmatter and template)
|
|
155
|
+
2. Configuration updates (`astro.config.mjs` if needed)
|
|
156
|
+
3. Content collection schema (if using collections)
|
|
157
|
+
4. TypeScript types (for Props and data)
|
|
158
|
+
5. Brief explanation of hydration strategy chosen
|
|
159
|
+
|
|
160
|
+
## Technologies
|
|
161
|
+
|
|
162
|
+
Astro 4+, Islands Architecture, Content Collections, Zod Schemas, View Transitions API, Server Islands, Actions, Middleware, Adapters (Node, Vercel, Netlify, Cloudflare, Deno), React/Vue/Svelte/Solid integrations, Image Optimization, MDX, Markdoc, TypeScript, Scoped CSS, Tailwind CSS
|