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.
Files changed (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,728 @@
1
+ ---
2
+ name: vscode-extension-development
3
+ description: VS Code extension development covering the Extension API, activation events, TreeViews, Webviews, Language Server Protocol, debugging, publishing, and testing. Use when building VS Code extensions that add commands, views, language support, or custom editors.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # VS Code Extension Development
8
+
9
+ Build VS Code extensions that integrate deeply with the editor through commands, views, language features, and custom UI.
10
+
11
+ ## Extension API Overview
12
+
13
+ | API Surface | What It Provides |
14
+ |------------|-----------------|
15
+ | `vscode.commands` | Register and execute commands |
16
+ | `vscode.window` | Editors, terminals, notifications, quick picks, webviews |
17
+ | `vscode.workspace` | Files, folders, configuration, file system watcher |
18
+ | `vscode.languages` | Language features (completion, hover, diagnostics) |
19
+ | `vscode.debug` | Debug adapters and debug sessions |
20
+ | `vscode.extensions` | Access other extensions, extension context |
21
+ | `vscode.env` | Environment info (machine ID, app name, clipboard) |
22
+ | `vscode.authentication` | OAuth-based authentication |
23
+
24
+ ```typescript
25
+ // extension.ts - Entry point
26
+ import * as vscode from 'vscode';
27
+
28
+ export function activate(context: vscode.ExtensionContext) {
29
+ // Register a simple command
30
+ const disposable = vscode.commands.registerCommand(
31
+ 'myext.helloWorld',
32
+ () => {
33
+ vscode.window.showInformationMessage('Hello from My Extension!');
34
+ }
35
+ );
36
+ context.subscriptions.push(disposable);
37
+
38
+ // Register a text editor command (only active when editor is focused)
39
+ context.subscriptions.push(
40
+ vscode.commands.registerTextEditorCommand(
41
+ 'myext.insertTimestamp',
42
+ (textEditor, edit) => {
43
+ const timestamp = new Date().toISOString();
44
+ edit.insert(textEditor.selection.active, timestamp);
45
+ }
46
+ )
47
+ );
48
+
49
+ // Status bar item
50
+ const statusBar = vscode.window.createStatusBarItem(
51
+ vscode.StatusBarAlignment.Right,
52
+ 100
53
+ );
54
+ statusBar.text = '$(sync~spin) My Extension';
55
+ statusBar.command = 'myext.showStatus';
56
+ statusBar.tooltip = 'Click to show extension status';
57
+ statusBar.show();
58
+ context.subscriptions.push(statusBar);
59
+ }
60
+
61
+ export function deactivate() {
62
+ // Clean up resources
63
+ }
64
+ ```
65
+
66
+ **Rule**: Every disposable must be added to `context.subscriptions` for automatic cleanup when the extension is deactivated.
67
+
68
+ ## Activation Events
69
+
70
+ Extensions are loaded lazily. Declare activation events to tell VS Code when to load your extension.
71
+
72
+ ```json
73
+ {
74
+ "activationEvents": [
75
+ "onCommand:myext.helloWorld",
76
+ "onLanguage:python",
77
+ "onView:myext.sidebar",
78
+ "workspaceContains:.myextrc",
79
+ "onFileSystem:myext-fs",
80
+ "onUri",
81
+ "onStartupFinished",
82
+ "*"
83
+ ]
84
+ }
85
+ ```
86
+
87
+ | Event | When It Fires |
88
+ |-------|--------------|
89
+ | `onCommand:id` | When the command is invoked |
90
+ | `onLanguage:lang` | When a file of that language is opened |
91
+ | `onView:viewId` | When the view is visible |
92
+ | `workspaceContains:glob` | When workspace has matching files |
93
+ | `onFileSystem:scheme` | When a file with that URI scheme is accessed |
94
+ | `onUri` | When a `vscode://` URI is opened for this extension |
95
+ | `onStartupFinished` | After VS Code startup completes |
96
+ | `*` | On startup (avoid -- slows VS Code launch) |
97
+
98
+ **Rule**: Never use `*` activation unless absolutely necessary. It forces your extension to load at startup, impacting VS Code performance.
99
+ **Rule**: For commands, VS Code automatically adds `onCommand:` activation events from `contributes.commands`. You only need to declare activation events for non-command triggers.
100
+
101
+ ## package.json `contributes` Schema
102
+
103
+ ```json
104
+ {
105
+ "contributes": {
106
+ "commands": [
107
+ {
108
+ "command": "myext.helloWorld",
109
+ "title": "Hello World",
110
+ "category": "My Extension",
111
+ "icon": "$(megaphone)"
112
+ },
113
+ {
114
+ "command": "myext.analyze",
115
+ "title": "Analyze File",
116
+ "category": "My Extension",
117
+ "enablement": "editorLangId == typescript"
118
+ }
119
+ ],
120
+
121
+ "keybindings": [
122
+ {
123
+ "command": "myext.analyze",
124
+ "key": "ctrl+shift+a",
125
+ "mac": "cmd+shift+a",
126
+ "when": "editorTextFocus && editorLangId == typescript"
127
+ }
128
+ ],
129
+
130
+ "menus": {
131
+ "editor/context": [
132
+ {
133
+ "command": "myext.analyze",
134
+ "group": "myext",
135
+ "when": "editorLangId == typescript"
136
+ }
137
+ ],
138
+ "view/title": [
139
+ {
140
+ "command": "myext.refresh",
141
+ "group": "navigation",
142
+ "when": "view == myext.sidebar"
143
+ }
144
+ ]
145
+ },
146
+
147
+ "viewsContainers": {
148
+ "activitybar": [
149
+ {
150
+ "id": "myext-sidebar",
151
+ "title": "My Extension",
152
+ "icon": "resources/icon.svg"
153
+ }
154
+ ]
155
+ },
156
+
157
+ "views": {
158
+ "myext-sidebar": [
159
+ {
160
+ "id": "myext.itemsList",
161
+ "name": "Items",
162
+ "contextualTitle": "My Extension Items"
163
+ },
164
+ {
165
+ "id": "myext.details",
166
+ "name": "Details",
167
+ "type": "webview"
168
+ }
169
+ ]
170
+ },
171
+
172
+ "configuration": {
173
+ "title": "My Extension",
174
+ "properties": {
175
+ "myext.apiUrl": {
176
+ "type": "string",
177
+ "default": "https://api.example.com",
178
+ "description": "API endpoint URL",
179
+ "scope": "resource"
180
+ },
181
+ "myext.maxResults": {
182
+ "type": "number",
183
+ "default": 50,
184
+ "minimum": 10,
185
+ "maximum": 200,
186
+ "description": "Maximum number of results to display"
187
+ },
188
+ "myext.autoAnalyze": {
189
+ "type": "boolean",
190
+ "default": true,
191
+ "description": "Automatically analyze files on save"
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ ```
198
+
199
+ ## TreeView and Data Provider
200
+
201
+ ```typescript
202
+ // TreeView with async data loading
203
+ interface TreeItem {
204
+ id: string;
205
+ label: string;
206
+ description?: string;
207
+ iconPath?: vscode.ThemeIcon;
208
+ children?: TreeItem[];
209
+ contextValue?: string; // For context menu filtering
210
+ command?: vscode.Command; // Action on click
211
+ }
212
+
213
+ class ItemsProvider implements vscode.TreeDataProvider<TreeItem> {
214
+ private _onDidChangeTreeData = new vscode.EventEmitter<TreeItem | undefined>();
215
+ readonly onDidChangeTreeData = this._onDidChangeTreeData.event;
216
+
217
+ private items: TreeItem[] = [];
218
+
219
+ refresh(): void {
220
+ this._onDidChangeTreeData.fire(undefined);
221
+ }
222
+
223
+ getTreeItem(element: TreeItem): vscode.TreeItem {
224
+ const treeItem = new vscode.TreeItem(
225
+ element.label,
226
+ element.children
227
+ ? vscode.TreeItemCollapsibleState.Collapsed
228
+ : vscode.TreeItemCollapsibleState.None
229
+ );
230
+
231
+ treeItem.id = element.id;
232
+ treeItem.description = element.description;
233
+ treeItem.iconPath = element.iconPath;
234
+ treeItem.contextValue = element.contextValue;
235
+ treeItem.command = element.command;
236
+ treeItem.tooltip = new vscode.MarkdownString(`**${element.label}**\n\n${element.description || ''}`);
237
+
238
+ return treeItem;
239
+ }
240
+
241
+ async getChildren(element?: TreeItem): Promise<TreeItem[]> {
242
+ if (!element) {
243
+ // Root level -- fetch from API or workspace
244
+ this.items = await this.fetchItems();
245
+ return this.items;
246
+ }
247
+ return element.children || [];
248
+ }
249
+
250
+ private async fetchItems(): Promise<TreeItem[]> {
251
+ // Fetch data from your service
252
+ const data = await fetchFromApi();
253
+ return data.map((item) => ({
254
+ id: item.id,
255
+ label: item.name,
256
+ description: item.status,
257
+ iconPath: new vscode.ThemeIcon(
258
+ item.status === 'pass' ? 'check' : 'error',
259
+ item.status === 'pass'
260
+ ? new vscode.ThemeColor('testing.iconPassed')
261
+ : new vscode.ThemeColor('testing.iconFailed')
262
+ ),
263
+ contextValue: 'item',
264
+ command: {
265
+ command: 'myext.openItem',
266
+ title: 'Open Item',
267
+ arguments: [item.id],
268
+ },
269
+ }));
270
+ }
271
+ }
272
+
273
+ // Register in activate()
274
+ export function activate(context: vscode.ExtensionContext) {
275
+ const provider = new ItemsProvider();
276
+ const treeView = vscode.window.createTreeView('myext.itemsList', {
277
+ treeDataProvider: provider,
278
+ showCollapseAll: true,
279
+ });
280
+
281
+ context.subscriptions.push(
282
+ treeView,
283
+ vscode.commands.registerCommand('myext.refresh', () => provider.refresh()),
284
+ vscode.commands.registerCommand('myext.openItem', (id: string) => openItem(id)),
285
+ );
286
+ }
287
+ ```
288
+
289
+ ## Webview Communication
290
+
291
+ ```typescript
292
+ // Create a Webview panel with bidirectional communication
293
+ function createDetailPanel(
294
+ context: vscode.ExtensionContext,
295
+ data: ItemDetail
296
+ ): vscode.WebviewPanel {
297
+ const panel = vscode.window.createWebviewPanel(
298
+ 'myext.detail',
299
+ `Detail: ${data.name}`,
300
+ vscode.ViewColumn.Beside,
301
+ {
302
+ enableScripts: true,
303
+ retainContextWhenHidden: true,
304
+ localResourceRoots: [
305
+ vscode.Uri.joinPath(context.extensionUri, 'media'),
306
+ ],
307
+ }
308
+ );
309
+
310
+ // Get URI for bundled resources
311
+ const scriptUri = panel.webview.asWebviewUri(
312
+ vscode.Uri.joinPath(context.extensionUri, 'media', 'webview.js')
313
+ );
314
+ const styleUri = panel.webview.asWebviewUri(
315
+ vscode.Uri.joinPath(context.extensionUri, 'media', 'webview.css')
316
+ );
317
+
318
+ // Set HTML content with CSP
319
+ panel.webview.html = `
320
+ <!DOCTYPE html>
321
+ <html lang="en">
322
+ <head>
323
+ <meta charset="UTF-8">
324
+ <meta http-equiv="Content-Security-Policy"
325
+ content="default-src 'none';
326
+ style-src ${panel.webview.cspSource};
327
+ script-src 'nonce-${getNonce()}';
328
+ img-src ${panel.webview.cspSource} https:;">
329
+ <link href="${styleUri}" rel="stylesheet">
330
+ </head>
331
+ <body>
332
+ <div id="app"></div>
333
+ <script nonce="${getNonce()}" src="${scriptUri}"></script>
334
+ </body>
335
+ </html>
336
+ `;
337
+
338
+ // Send data to webview
339
+ panel.webview.postMessage({ type: 'setData', data });
340
+
341
+ // Receive messages from webview
342
+ panel.webview.onDidReceiveMessage(
343
+ async (message) => {
344
+ switch (message.type) {
345
+ case 'save':
346
+ await saveItem(message.data);
347
+ vscode.window.showInformationMessage('Saved!');
348
+ break;
349
+ case 'openExternal':
350
+ vscode.env.openExternal(vscode.Uri.parse(message.url));
351
+ break;
352
+ }
353
+ },
354
+ undefined,
355
+ context.subscriptions
356
+ );
357
+
358
+ return panel;
359
+ }
360
+
361
+ function getNonce(): string {
362
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
363
+ let nonce = '';
364
+ for (let i = 0; i < 32; i++) {
365
+ nonce += chars.charAt(Math.floor(Math.random() * chars.length));
366
+ }
367
+ return nonce;
368
+ }
369
+ ```
370
+
371
+ ```typescript
372
+ // webview.js - Runs inside the Webview (sandboxed browser context)
373
+ const vscode = acquireVsCodeApi();
374
+
375
+ // Receive messages from extension
376
+ window.addEventListener('message', (event) => {
377
+ const message = event.data;
378
+ switch (message.type) {
379
+ case 'setData':
380
+ renderData(message.data);
381
+ break;
382
+ }
383
+ });
384
+
385
+ // Send messages to extension
386
+ function handleSave(data) {
387
+ vscode.postMessage({ type: 'save', data });
388
+ }
389
+
390
+ // Persist webview state across visibility changes
391
+ const previousState = vscode.getState();
392
+ if (previousState) {
393
+ restoreState(previousState);
394
+ }
395
+
396
+ function updateState(newState) {
397
+ vscode.setState(newState);
398
+ }
399
+ ```
400
+
401
+ **Rule**: Always set a Content Security Policy on webviews. Use nonces for scripts.
402
+ **Rule**: Use `webview.asWebviewUri()` for all resource URIs. Never construct `vscode-webview-resource://` URIs manually.
403
+
404
+ ## Language Server Protocol Integration
405
+
406
+ ```typescript
407
+ // client/extension.ts - LSP client
408
+ import {
409
+ LanguageClient,
410
+ LanguageClientOptions,
411
+ ServerOptions,
412
+ TransportKind,
413
+ } from 'vscode-languageclient/node';
414
+
415
+ let client: LanguageClient;
416
+
417
+ export function activate(context: vscode.ExtensionContext) {
418
+ const serverModule = context.asAbsolutePath(
419
+ path.join('server', 'out', 'server.js')
420
+ );
421
+
422
+ const serverOptions: ServerOptions = {
423
+ run: { module: serverModule, transport: TransportKind.ipc },
424
+ debug: {
425
+ module: serverModule,
426
+ transport: TransportKind.ipc,
427
+ options: { execArgv: ['--nolazy', '--inspect=6009'] },
428
+ },
429
+ };
430
+
431
+ const clientOptions: LanguageClientOptions = {
432
+ documentSelector: [
433
+ { scheme: 'file', language: 'myLanguage' },
434
+ ],
435
+ synchronize: {
436
+ fileEvents: vscode.workspace.createFileSystemWatcher('**/.myextrc'),
437
+ },
438
+ };
439
+
440
+ client = new LanguageClient(
441
+ 'myext-language-server',
442
+ 'My Language Server',
443
+ serverOptions,
444
+ clientOptions
445
+ );
446
+
447
+ client.start();
448
+ context.subscriptions.push(client);
449
+ }
450
+
451
+ export function deactivate(): Thenable<void> | undefined {
452
+ return client?.stop();
453
+ }
454
+ ```
455
+
456
+ ```typescript
457
+ // server/server.ts - LSP server
458
+ import {
459
+ createConnection,
460
+ TextDocuments,
461
+ ProposedFeatures,
462
+ InitializeParams,
463
+ TextDocumentSyncKind,
464
+ CompletionItem,
465
+ CompletionItemKind,
466
+ Diagnostic,
467
+ DiagnosticSeverity,
468
+ } from 'vscode-languageserver/node';
469
+ import { TextDocument } from 'vscode-languageserver-textdocument';
470
+
471
+ const connection = createConnection(ProposedFeatures.all);
472
+ const documents = new TextDocuments(TextDocument);
473
+
474
+ connection.onInitialize((params: InitializeParams) => {
475
+ return {
476
+ capabilities: {
477
+ textDocumentSync: TextDocumentSyncKind.Incremental,
478
+ completionProvider: {
479
+ resolveProvider: true,
480
+ triggerCharacters: ['.', ':'],
481
+ },
482
+ hoverProvider: true,
483
+ definitionProvider: true,
484
+ diagnosticProvider: {
485
+ interFileDependencies: false,
486
+ workspaceDiagnostics: false,
487
+ },
488
+ },
489
+ };
490
+ });
491
+
492
+ // Completion
493
+ connection.onCompletion((_textDocumentPosition) => {
494
+ return [
495
+ {
496
+ label: 'myFunction',
497
+ kind: CompletionItemKind.Function,
498
+ detail: 'A useful function',
499
+ documentation: 'Does something useful with the given parameters.',
500
+ },
501
+ ];
502
+ });
503
+
504
+ // Diagnostics on document change
505
+ documents.onDidChangeContent((change) => {
506
+ validateDocument(change.document);
507
+ });
508
+
509
+ async function validateDocument(textDocument: TextDocument): Promise<void> {
510
+ const diagnostics: Diagnostic[] = [];
511
+ const text = textDocument.getText();
512
+
513
+ // Example: flag lines with TODO
514
+ const lines = text.split('\n');
515
+ for (let i = 0; i < lines.length; i++) {
516
+ const todoIndex = lines[i].indexOf('TODO');
517
+ if (todoIndex !== -1) {
518
+ diagnostics.push({
519
+ severity: DiagnosticSeverity.Warning,
520
+ range: {
521
+ start: { line: i, character: todoIndex },
522
+ end: { line: i, character: todoIndex + 4 },
523
+ },
524
+ message: 'TODO found - consider addressing this.',
525
+ source: 'myext',
526
+ });
527
+ }
528
+ }
529
+
530
+ connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
531
+ }
532
+
533
+ documents.listen(connection);
534
+ connection.listen();
535
+ ```
536
+
537
+ ## Debugging Extensions
538
+
539
+ ```json
540
+ // .vscode/launch.json - Debug configuration
541
+ {
542
+ "version": "0.2.0",
543
+ "configurations": [
544
+ {
545
+ "name": "Run Extension",
546
+ "type": "extensionHost",
547
+ "request": "launch",
548
+ "args": [
549
+ "--extensionDevelopmentPath=${workspaceFolder}"
550
+ ],
551
+ "outFiles": [
552
+ "${workspaceFolder}/out/**/*.js"
553
+ ],
554
+ "preLaunchTask": "npm: watch"
555
+ },
556
+ {
557
+ "name": "Extension Tests",
558
+ "type": "extensionHost",
559
+ "request": "launch",
560
+ "args": [
561
+ "--extensionDevelopmentPath=${workspaceFolder}",
562
+ "--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
563
+ ],
564
+ "outFiles": [
565
+ "${workspaceFolder}/out/test/**/*.js"
566
+ ],
567
+ "preLaunchTask": "npm: watch"
568
+ }
569
+ ]
570
+ }
571
+ ```
572
+
573
+ ## Publishing to Marketplace
574
+
575
+ ```bash
576
+ # Install vsce (Visual Studio Code Extension CLI)
577
+ npm install -g @vscode/vsce
578
+
579
+ # Package extension
580
+ vsce package
581
+ # Creates myext-1.0.0.vsix
582
+
583
+ # Publish to Visual Studio Marketplace
584
+ vsce publish
585
+ # Requires Personal Access Token from Azure DevOps
586
+
587
+ # Publish specific version
588
+ vsce publish 1.0.1
589
+ # Automatically updates package.json version
590
+
591
+ # Publish to Open VSX (alternative marketplace for VS Codium)
592
+ npx ovsx publish myext-1.0.0.vsix -p <token>
593
+ ```
594
+
595
+ ```json
596
+ // package.json - Required publisher field
597
+ {
598
+ "publisher": "your-publisher-id",
599
+ "repository": {
600
+ "type": "git",
601
+ "url": "https://github.com/you/myext"
602
+ },
603
+ "categories": ["Programming Languages", "Linters", "Other"],
604
+ "keywords": ["keyword1", "keyword2"],
605
+ "preview": false,
606
+ "icon": "icon.png",
607
+ "galleryBanner": {
608
+ "color": "#1e1e1e",
609
+ "theme": "dark"
610
+ }
611
+ }
612
+ ```
613
+
614
+ ## Telemetry and Settings
615
+
616
+ ```typescript
617
+ // Respect VS Code telemetry settings
618
+ import TelemetryReporter from '@vscode/extension-telemetry';
619
+
620
+ const INSTRUMENTATION_KEY = 'your-app-insights-key';
621
+ let telemetry: TelemetryReporter;
622
+
623
+ export function activate(context: vscode.ExtensionContext) {
624
+ telemetry = new TelemetryReporter(INSTRUMENTATION_KEY);
625
+ context.subscriptions.push(telemetry);
626
+
627
+ // TelemetryReporter automatically respects telemetry.telemetryLevel setting
628
+ telemetry.sendTelemetryEvent('extensionActivated', {
629
+ vscodeVersion: vscode.version,
630
+ });
631
+ }
632
+
633
+ // Read extension settings
634
+ function getConfig(): ExtensionConfig {
635
+ const config = vscode.workspace.getConfiguration('myext');
636
+ return {
637
+ apiUrl: config.get<string>('apiUrl', 'https://api.example.com'),
638
+ maxResults: config.get<number>('maxResults', 50),
639
+ autoAnalyze: config.get<boolean>('autoAnalyze', true),
640
+ };
641
+ }
642
+
643
+ // Watch for configuration changes
644
+ vscode.workspace.onDidChangeConfiguration((e) => {
645
+ if (e.affectsConfiguration('myext')) {
646
+ const newConfig = getConfig();
647
+ applyConfig(newConfig);
648
+ }
649
+ });
650
+ ```
651
+
652
+ ## Testing Extensions
653
+
654
+ ```typescript
655
+ // test/suite/extension.test.ts
656
+ import * as assert from 'assert';
657
+ import * as vscode from 'vscode';
658
+
659
+ suite('Extension Test Suite', () => {
660
+ vscode.window.showInformationMessage('Start all tests.');
661
+
662
+ test('Extension should be present', () => {
663
+ assert.ok(vscode.extensions.getExtension('publisher.myext'));
664
+ });
665
+
666
+ test('Extension should activate', async () => {
667
+ const ext = vscode.extensions.getExtension('publisher.myext')!;
668
+ await ext.activate();
669
+ assert.ok(ext.isActive);
670
+ });
671
+
672
+ test('Command should be registered', async () => {
673
+ const commands = await vscode.commands.getCommands(true);
674
+ assert.ok(commands.includes('myext.helloWorld'));
675
+ });
676
+
677
+ test('Should insert timestamp', async () => {
678
+ const doc = await vscode.workspace.openTextDocument({ content: '' });
679
+ const editor = await vscode.window.showTextDocument(doc);
680
+
681
+ await vscode.commands.executeCommand('myext.insertTimestamp');
682
+
683
+ const text = editor.document.getText();
684
+ assert.match(text, /\d{4}-\d{2}-\d{2}T/);
685
+ });
686
+ });
687
+ ```
688
+
689
+ ```typescript
690
+ // test/suite/index.ts - Test runner
691
+ import path from 'path';
692
+ import Mocha from 'mocha';
693
+ import { glob } from 'glob';
694
+
695
+ export async function run(): Promise<void> {
696
+ const mocha = new Mocha({ ui: 'tdd', color: true, timeout: 10000 });
697
+ const testsRoot = path.resolve(__dirname);
698
+
699
+ const files = await glob('**/**.test.js', { cwd: testsRoot });
700
+ files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f)));
701
+
702
+ return new Promise((resolve, reject) => {
703
+ mocha.run((failures) => {
704
+ if (failures > 0) {
705
+ reject(new Error(`${failures} tests failed.`));
706
+ } else {
707
+ resolve();
708
+ }
709
+ });
710
+ });
711
+ }
712
+ ```
713
+
714
+ ## Output Checklist
715
+
716
+ - [ ] Activation events are specific (no `*` unless necessary)
717
+ - [ ] All disposables added to `context.subscriptions`
718
+ - [ ] Commands registered in `contributes.commands` with titles and categories
719
+ - [ ] Keybindings use `when` clauses for context-appropriate activation
720
+ - [ ] TreeView uses `onDidChangeTreeData` for reactive updates
721
+ - [ ] Webviews have Content Security Policy with nonces
722
+ - [ ] Webview resources loaded via `asWebviewUri()`
723
+ - [ ] LSP client and server properly configured with capabilities
724
+ - [ ] Extension tested with VS Code extension test framework
725
+ - [ ] `package.json` includes publisher, repository, categories, and icon
726
+ - [ ] Telemetry respects `telemetry.telemetryLevel` setting
727
+ - [ ] Configuration properties have types, defaults, and descriptions
728
+ - [ ] Published to Visual Studio Marketplace and/or Open VSX