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,563 @@
1
+ ---
2
+ name: native-os-integration
3
+ description: Native OS integration patterns for desktop applications covering system tray, native menus, file associations, drag-and-drop, clipboard, global shortcuts, and multi-window management. Use when building desktop apps that need to feel like first-class citizens on macOS, Windows, and Linux.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Native OS Integration
8
+
9
+ Build desktop applications that integrate deeply with the operating system and feel like native first-class citizens.
10
+
11
+ ## System Tray / Menu Bar Apps
12
+
13
+ System tray (Windows/Linux) and menu bar (macOS) provide persistent, low-profile app presence.
14
+
15
+ ```typescript
16
+ // Electron - System tray with context menu
17
+ import { app, Tray, Menu, nativeImage, BrowserWindow } from 'electron';
18
+ import path from 'path';
19
+
20
+ let tray: Tray | null = null;
21
+
22
+ function createTray(mainWindow: BrowserWindow) {
23
+ const iconPath = path.join(__dirname, 'assets',
24
+ process.platform === 'darwin' ? 'tray-icon-Template.png' : 'tray-icon.png'
25
+ );
26
+ // macOS: use "Template" suffix for automatic dark/light adaptation
27
+ const icon = nativeImage.createFromPath(iconPath);
28
+
29
+ tray = new Tray(icon);
30
+ tray.setToolTip('MyApp - Running');
31
+
32
+ const contextMenu = Menu.buildFromTemplate([
33
+ {
34
+ label: 'Open MyApp',
35
+ click: () => {
36
+ mainWindow.show();
37
+ mainWindow.focus();
38
+ },
39
+ },
40
+ { type: 'separator' },
41
+ {
42
+ label: 'Status: Connected',
43
+ enabled: false, // Informational, not clickable
44
+ },
45
+ {
46
+ label: 'Pause Sync',
47
+ type: 'checkbox',
48
+ checked: false,
49
+ click: (menuItem) => {
50
+ toggleSync(!menuItem.checked);
51
+ },
52
+ },
53
+ { type: 'separator' },
54
+ {
55
+ label: 'Quit',
56
+ accelerator: process.platform === 'darwin' ? 'Cmd+Q' : 'Alt+F4',
57
+ click: () => app.quit(),
58
+ },
59
+ ]);
60
+
61
+ tray.setContextMenu(contextMenu);
62
+
63
+ // Windows/Linux: click opens app. macOS: click opens menu (convention).
64
+ if (process.platform !== 'darwin') {
65
+ tray.on('click', () => {
66
+ mainWindow.show();
67
+ mainWindow.focus();
68
+ });
69
+ }
70
+ }
71
+ ```
72
+
73
+ **Rule**: macOS tray icons must use the `Template` suffix (e.g., `iconTemplate.png`) for automatic light/dark mode adaptation. Use 16x16 or 18x18 @1x images.
74
+ **Rule**: Do not create a tray icon unless the app has a reason to run in the background. Not every app needs a tray icon.
75
+
76
+ ## Native Menus
77
+
78
+ ### Application Menu (macOS Menu Bar / Windows Alt Menu)
79
+
80
+ ```typescript
81
+ // Electron - Platform-adaptive application menu
82
+ import { Menu, app, shell } from 'electron';
83
+
84
+ function createApplicationMenu() {
85
+ const isMac = process.platform === 'darwin';
86
+
87
+ const template: Electron.MenuItemConstructorOptions[] = [
88
+ // macOS requires an app-named first menu
89
+ ...(isMac ? [{
90
+ label: app.name,
91
+ submenu: [
92
+ { role: 'about' as const },
93
+ { type: 'separator' as const },
94
+ {
95
+ label: 'Preferences...',
96
+ accelerator: 'Cmd+,',
97
+ click: () => openPreferences(),
98
+ },
99
+ { type: 'separator' as const },
100
+ { role: 'hide' as const },
101
+ { role: 'hideOthers' as const },
102
+ { role: 'unhide' as const },
103
+ { type: 'separator' as const },
104
+ { role: 'quit' as const },
105
+ ],
106
+ }] : []),
107
+
108
+ // File menu
109
+ {
110
+ label: 'File',
111
+ submenu: [
112
+ {
113
+ label: 'New File',
114
+ accelerator: isMac ? 'Cmd+N' : 'Ctrl+N',
115
+ click: () => createNewFile(),
116
+ },
117
+ {
118
+ label: 'Open...',
119
+ accelerator: isMac ? 'Cmd+O' : 'Ctrl+O',
120
+ click: () => openFile(),
121
+ },
122
+ {
123
+ label: 'Save',
124
+ accelerator: isMac ? 'Cmd+S' : 'Ctrl+S',
125
+ click: () => saveFile(),
126
+ },
127
+ { type: 'separator' },
128
+ isMac ? { role: 'close' } : { role: 'quit' },
129
+ ],
130
+ },
131
+
132
+ // Edit menu with standard system operations
133
+ {
134
+ label: 'Edit',
135
+ submenu: [
136
+ { role: 'undo' },
137
+ { role: 'redo' },
138
+ { type: 'separator' },
139
+ { role: 'cut' },
140
+ { role: 'copy' },
141
+ { role: 'paste' },
142
+ { role: 'selectAll' },
143
+ ],
144
+ },
145
+
146
+ // Help menu
147
+ {
148
+ label: 'Help',
149
+ submenu: [
150
+ {
151
+ label: 'Documentation',
152
+ click: () => shell.openExternal('https://docs.example.com'),
153
+ },
154
+ {
155
+ label: 'Report Issue',
156
+ click: () => shell.openExternal('https://github.com/example/issues'),
157
+ },
158
+ ],
159
+ },
160
+ ];
161
+
162
+ const menu = Menu.buildFromTemplate(template);
163
+ Menu.setApplicationMenu(menu);
164
+ }
165
+ ```
166
+
167
+ ### Context Menus (Right-Click)
168
+
169
+ ```typescript
170
+ // Electron - Dynamic context menu
171
+ import { Menu, ipcMain, BrowserWindow } from 'electron';
172
+
173
+ ipcMain.handle('show-context-menu', (event, params: ContextMenuParams) => {
174
+ const window = BrowserWindow.fromWebContents(event.sender);
175
+ if (!window) return;
176
+
177
+ const template: Electron.MenuItemConstructorOptions[] = [];
178
+
179
+ if (params.type === 'file') {
180
+ template.push(
181
+ { label: 'Open', click: () => openFile(params.path) },
182
+ { label: 'Rename', click: () => renameFile(params.path) },
183
+ { type: 'separator' },
184
+ { label: 'Delete', click: () => deleteFile(params.path) },
185
+ );
186
+ } else if (params.type === 'text-selection') {
187
+ template.push(
188
+ { role: 'copy' },
189
+ { role: 'cut' },
190
+ { role: 'paste' },
191
+ { type: 'separator' },
192
+ {
193
+ label: `Search for "${params.selection?.slice(0, 30)}..."`,
194
+ click: () => searchFor(params.selection!),
195
+ },
196
+ );
197
+ }
198
+
199
+ const menu = Menu.buildFromTemplate(template);
200
+ menu.popup({ window });
201
+ });
202
+ ```
203
+
204
+ ## File Associations and Protocol Handlers
205
+
206
+ Register your app to open specific file types or handle custom URL schemes.
207
+
208
+ ```typescript
209
+ // Electron - Register file associations (in package.json / electron-builder)
210
+ // electron-builder.yml
211
+ fileAssociations:
212
+ - ext: myproj
213
+ name: MyApp Project
214
+ description: MyApp project file
215
+ mimeType: application/x-myapp-project
216
+ role: Editor # macOS
217
+ icon: build/file-icon # Platform-specific icon
218
+
219
+ protocols:
220
+ - name: MyApp Protocol
221
+ schemes: [myapp]
222
+ role: Viewer
223
+
224
+ // Handle file open (macOS: open-file event, Windows/Linux: process.argv)
225
+ app.on('open-file', (event, filePath) => {
226
+ event.preventDefault();
227
+ handleFileOpen(filePath);
228
+ });
229
+
230
+ // Handle protocol URL
231
+ app.on('open-url', (event, url) => {
232
+ event.preventDefault();
233
+ handleProtocolUrl(url); // myapp://action/param
234
+ });
235
+
236
+ // Windows/Linux: file path comes as command line argument
237
+ const filePath = process.argv.find((arg) => arg.endsWith('.myproj'));
238
+ if (filePath) handleFileOpen(filePath);
239
+ ```
240
+
241
+ **Rule**: On macOS, `open-file` fires before `ready` if the app is launched by double-clicking a file. Queue the path and process it after `ready`.
242
+
243
+ ## Drag-and-Drop from OS
244
+
245
+ ```typescript
246
+ // Renderer process - Handle file drops from Finder/Explorer
247
+ function FileDropZone({ onFilesDropped }: FileDropZoneProps) {
248
+ const [isDragOver, setIsDragOver] = useState(false);
249
+
250
+ const handleDragOver = (e: React.DragEvent) => {
251
+ e.preventDefault();
252
+ e.stopPropagation();
253
+ setIsDragOver(true);
254
+ };
255
+
256
+ const handleDragLeave = (e: React.DragEvent) => {
257
+ e.preventDefault();
258
+ setIsDragOver(false);
259
+ };
260
+
261
+ const handleDrop = (e: React.DragEvent) => {
262
+ e.preventDefault();
263
+ setIsDragOver(false);
264
+
265
+ const files = Array.from(e.dataTransfer.files).map((file) => ({
266
+ name: file.name,
267
+ path: (file as any).path, // Electron exposes file.path
268
+ size: file.size,
269
+ type: file.type,
270
+ }));
271
+
272
+ if (files.length > 0) {
273
+ onFilesDropped(files);
274
+ }
275
+ };
276
+
277
+ return (
278
+ <div
279
+ onDragOver={handleDragOver}
280
+ onDragLeave={handleDragLeave}
281
+ onDrop={handleDrop}
282
+ className={`drop-zone ${isDragOver ? 'drop-zone--active' : ''}`}
283
+ >
284
+ {isDragOver ? 'Drop files here' : 'Drag files to import'}
285
+ </div>
286
+ );
287
+ }
288
+ ```
289
+
290
+ ```typescript
291
+ // Electron - Drag OUT of app to OS
292
+ // Main process: handle drag start from renderer
293
+ ipcMain.handle('start-drag', (event, filePath: string) => {
294
+ event.sender.startDrag({
295
+ file: filePath,
296
+ icon: nativeImage.createFromPath(path.join(__dirname, 'drag-icon.png')),
297
+ });
298
+ });
299
+ ```
300
+
301
+ ## Clipboard Integration
302
+
303
+ ```typescript
304
+ // Electron - Advanced clipboard operations
305
+ import { clipboard, nativeImage } from 'electron';
306
+
307
+ // Read/write text
308
+ clipboard.writeText('Hello from MyApp');
309
+ const text = clipboard.readText();
310
+
311
+ // Read/write HTML
312
+ clipboard.writeHTML('<b>Bold text</b>');
313
+ const html = clipboard.readHTML();
314
+
315
+ // Read/write images
316
+ const image = nativeImage.createFromPath('/path/to/image.png');
317
+ clipboard.writeImage(image);
318
+ const clipboardImage = clipboard.readImage();
319
+
320
+ // Write multiple formats simultaneously (paste target picks preferred format)
321
+ clipboard.write({
322
+ text: 'Fallback plain text',
323
+ html: '<b>Rich text</b>',
324
+ rtf: '{\\rtf1 Rich text}',
325
+ });
326
+
327
+ // Clipboard monitoring for clipboard manager features
328
+ let lastClipboard = '';
329
+ setInterval(() => {
330
+ const current = clipboard.readText();
331
+ if (current !== lastClipboard) {
332
+ lastClipboard = current;
333
+ handleClipboardChange(current);
334
+ }
335
+ }, 500);
336
+ ```
337
+
338
+ ## Native Notifications
339
+
340
+ ```typescript
341
+ // Electron - Native OS notifications
342
+ import { Notification } from 'electron';
343
+
344
+ function showNotification(options: {
345
+ title: string;
346
+ body: string;
347
+ icon?: string;
348
+ urgency?: 'low' | 'normal' | 'critical'; // Linux only
349
+ silent?: boolean;
350
+ actions?: Array<{ type: 'button'; text: string }>;
351
+ }) {
352
+ if (!Notification.isSupported()) return;
353
+
354
+ const notification = new Notification({
355
+ title: options.title,
356
+ body: options.body,
357
+ icon: options.icon || path.join(__dirname, 'icon.png'),
358
+ urgency: options.urgency,
359
+ silent: options.silent,
360
+ actions: options.actions,
361
+ });
362
+
363
+ notification.on('click', () => {
364
+ // Bring app to foreground
365
+ mainWindow?.show();
366
+ mainWindow?.focus();
367
+ });
368
+
369
+ notification.on('action', (event, index) => {
370
+ handleNotificationAction(index);
371
+ });
372
+
373
+ notification.show();
374
+ }
375
+ ```
376
+
377
+ ## Global Keyboard Shortcuts
378
+
379
+ ```typescript
380
+ // Electron - Register global shortcuts (work even when app is not focused)
381
+ import { globalShortcut, app } from 'electron';
382
+
383
+ app.whenReady().then(() => {
384
+ // Toggle app visibility
385
+ const registered = globalShortcut.register('CommandOrControl+Shift+Space', () => {
386
+ if (mainWindow?.isVisible()) {
387
+ mainWindow.hide();
388
+ } else {
389
+ mainWindow?.show();
390
+ mainWindow?.focus();
391
+ }
392
+ });
393
+
394
+ if (!registered) {
395
+ console.warn('Global shortcut registration failed (may be in use by another app)');
396
+ }
397
+ });
398
+
399
+ // Unregister on quit to avoid OS shortcut conflicts
400
+ app.on('will-quit', () => {
401
+ globalShortcut.unregisterAll();
402
+ });
403
+ ```
404
+
405
+ **Rule**: Always handle registration failure gracefully. Another app may have claimed the shortcut.
406
+ **Rule**: Document global shortcuts in preferences so users can change them. Hardcoded shortcuts conflict with accessibility tools.
407
+
408
+ ## Startup Launch Registration
409
+
410
+ ```typescript
411
+ // Electron - Launch at system login
412
+ import { app } from 'electron';
413
+
414
+ function setAutoLaunch(enabled: boolean) {
415
+ app.setLoginItemSettings({
416
+ openAtLogin: enabled,
417
+ openAsHidden: true, // macOS: open in background
418
+ path: process.execPath,
419
+ args: ['--hidden'], // Custom arg to start minimized
420
+ });
421
+ }
422
+
423
+ function getAutoLaunchEnabled(): boolean {
424
+ return app.getLoginItemSettings().openAtLogin;
425
+ }
426
+ ```
427
+
428
+ **Rule**: Never enable auto-launch by default. It is a user preference, controlled via settings.
429
+
430
+ ## Dock / Taskbar Badges
431
+
432
+ ```typescript
433
+ // Electron - Badge indicators
434
+ import { app } from 'electron';
435
+
436
+ function setBadgeCount(count: number) {
437
+ if (process.platform === 'darwin') {
438
+ // macOS: red badge on dock icon
439
+ app.dock.setBadge(count > 0 ? String(count) : '');
440
+ } else if (process.platform === 'win32') {
441
+ // Windows: overlay icon on taskbar
442
+ if (count > 0) {
443
+ const badge = createBadgeImage(count); // Generate small number image
444
+ mainWindow?.setOverlayIcon(badge, `${count} notifications`);
445
+ } else {
446
+ mainWindow?.setOverlayIcon(null, '');
447
+ }
448
+ }
449
+ // Linux: uses Unity launcher API (Ubuntu) -- limited support
450
+ }
451
+
452
+ // macOS: bounce dock icon for attention
453
+ function requestAttention() {
454
+ if (process.platform === 'darwin') {
455
+ app.dock.bounce('informational'); // Bounces once
456
+ // 'critical' bounces until user focuses the app
457
+ }
458
+ }
459
+ ```
460
+
461
+ ## Multi-Window Management
462
+
463
+ ```typescript
464
+ // Electron - Multi-window with state persistence
465
+ import Store from 'electron-store';
466
+
467
+ const windowStateStore = new Store({ name: 'window-state' });
468
+
469
+ function createWindow(windowId: string, options: WindowOptions): BrowserWindow {
470
+ const savedState = windowStateStore.get(windowId) as WindowState | undefined;
471
+
472
+ const window = new BrowserWindow({
473
+ x: savedState?.x,
474
+ y: savedState?.y,
475
+ width: savedState?.width ?? options.defaultWidth,
476
+ height: savedState?.height ?? options.defaultHeight,
477
+ minWidth: options.minWidth ?? 400,
478
+ minHeight: options.minHeight ?? 300,
479
+ webPreferences: {
480
+ preload: path.join(__dirname, 'preload.js'),
481
+ contextIsolation: true,
482
+ nodeIntegration: false,
483
+ },
484
+ });
485
+
486
+ // Restore maximized state
487
+ if (savedState?.isMaximized) {
488
+ window.maximize();
489
+ }
490
+
491
+ // Save window state on changes
492
+ const saveState = () => {
493
+ if (window.isDestroyed()) return;
494
+ const bounds = window.getBounds();
495
+ windowStateStore.set(windowId, {
496
+ x: bounds.x,
497
+ y: bounds.y,
498
+ width: bounds.width,
499
+ height: bounds.height,
500
+ isMaximized: window.isMaximized(),
501
+ });
502
+ };
503
+
504
+ window.on('resize', saveState);
505
+ window.on('move', saveState);
506
+ window.on('maximize', saveState);
507
+ window.on('unmaximize', saveState);
508
+
509
+ return window;
510
+ }
511
+ ```
512
+
513
+ ## File System Access Patterns
514
+
515
+ ```typescript
516
+ // Electron - File dialog with filters
517
+ import { dialog } from 'electron';
518
+
519
+ async function openFileDialog(): Promise<string | null> {
520
+ const result = await dialog.showOpenDialog(mainWindow!, {
521
+ title: 'Open Project',
522
+ properties: ['openFile'],
523
+ filters: [
524
+ { name: 'Project Files', extensions: ['myproj', 'json'] },
525
+ { name: 'All Files', extensions: ['*'] },
526
+ ],
527
+ });
528
+
529
+ if (result.canceled || result.filePaths.length === 0) return null;
530
+ return result.filePaths[0];
531
+ }
532
+
533
+ async function saveFileDialog(defaultName: string): Promise<string | null> {
534
+ const result = await dialog.showSaveDialog(mainWindow!, {
535
+ title: 'Save As',
536
+ defaultPath: defaultName,
537
+ filters: [
538
+ { name: 'Project Files', extensions: ['myproj'] },
539
+ ],
540
+ });
541
+
542
+ if (result.canceled || !result.filePath) return null;
543
+ return result.filePath;
544
+ }
545
+ ```
546
+
547
+ **Anti-pattern**: Using `fs.readFileSync` in the renderer process. File I/O belongs in the main process, exposed via IPC.
548
+ **Anti-pattern**: Hardcoding path separators. Use `path.join()` for cross-platform compatibility.
549
+
550
+ ## Output Checklist
551
+
552
+ - [ ] System tray icon adapts to OS theme (Template images on macOS)
553
+ - [ ] Application menu follows platform conventions (app menu on macOS, File menu on Windows)
554
+ - [ ] Context menus use native OS menu rendering
555
+ - [ ] File associations registered for supported file types
556
+ - [ ] Protocol handler registered for custom URL scheme
557
+ - [ ] Drag-and-drop works both into and out of the application
558
+ - [ ] Clipboard supports multiple formats (text, HTML, images)
559
+ - [ ] Native notifications used instead of in-app toasts for background events
560
+ - [ ] Global shortcuts registered with failure handling
561
+ - [ ] Auto-launch is opt-in, not default
562
+ - [ ] Window position and size persisted across sessions
563
+ - [ ] File dialogs use native OS dialogs with appropriate filters