@caddis/cli 0.1.0 → 0.2.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 (364) hide show
  1. package/README.md +29 -16
  2. package/bundles/antigravity-plugin-extras/plugin.json +5 -0
  3. package/bundles/antigravity-plugin-extras/skills/_registry.md +154 -0
  4. package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +356 -0
  5. package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +517 -0
  6. package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +293 -0
  7. package/bundles/antigravity-plugin-extras/skills/anchor-review/SKILL.md +135 -0
  8. package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +367 -0
  9. package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +244 -0
  10. package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +156 -0
  11. package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +321 -0
  12. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/LICENSE.txt +202 -0
  13. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +74 -0
  14. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  15. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  16. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  17. package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +144 -0
  18. package/bundles/antigravity-plugin-extras/skills/asking-questions/SKILL.md +81 -0
  19. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +118 -0
  20. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/cross-service/credential-management.md +450 -0
  21. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/browser/README.md +363 -0
  22. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/code-interpreter/README.md +232 -0
  23. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/README.md +100 -0
  24. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deploy-template.sh +117 -0
  25. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deployment-strategies.md +416 -0
  26. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/troubleshooting-guide.md +384 -0
  27. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/validate-deployment.sh +186 -0
  28. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/identity/README.md +186 -0
  29. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/memory/README.md +253 -0
  30. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/observability/README.md +517 -0
  31. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/runtime/README.md +215 -0
  32. package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +279 -0
  33. package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/references/cdk-patterns.md +431 -0
  34. package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/scripts/validate-stack.sh +240 -0
  35. package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +318 -0
  36. package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/cloudwatch-alarms.md +567 -0
  37. package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/operations-patterns.md +394 -0
  38. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +758 -0
  39. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/deployment-best-practices.md +830 -0
  40. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/eda-patterns.md +1002 -0
  41. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/observability-best-practices.md +770 -0
  42. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/performance-optimization.md +671 -0
  43. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/security-best-practices.md +625 -0
  44. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/serverless-patterns.md +838 -0
  45. package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +139 -0
  46. package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +188 -0
  47. package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +298 -0
  48. package/bundles/antigravity-plugin-extras/skills/brand-guidelines/LICENSE.txt +202 -0
  49. package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +118 -0
  50. package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +93 -0
  51. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +392 -0
  52. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/agent-patterns.md +461 -0
  53. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/examples.md +188 -0
  54. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/state-patterns.md +360 -0
  55. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/troubleshooting.md +362 -0
  56. package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +266 -0
  57. package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/examples.md +115 -0
  58. package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +338 -0
  59. package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +317 -0
  60. package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +385 -0
  61. package/bundles/antigravity-plugin-extras/skills/canvas-design/LICENSE.txt +202 -0
  62. package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +91 -0
  63. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  64. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  65. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  66. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  67. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  68. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  69. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  70. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  71. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  72. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  73. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  74. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  75. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  76. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  77. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  78. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  79. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  80. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  81. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  82. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  83. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  84. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  85. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  86. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  87. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  88. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  89. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  90. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  91. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  92. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  93. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  94. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  95. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  96. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  97. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  98. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  99. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  100. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  101. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  102. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  103. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  104. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  105. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  106. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  107. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  108. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  109. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  110. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  111. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  112. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  113. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  114. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  115. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  116. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  117. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  118. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  119. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  120. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  121. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  122. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  123. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  124. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  125. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  126. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  127. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  128. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  129. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  130. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  131. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  132. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  133. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  134. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  135. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  136. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  137. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  138. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  139. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  140. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  141. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  142. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  143. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  144. package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +105 -0
  145. package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +91 -0
  146. package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +294 -0
  147. package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +310 -0
  148. package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +539 -0
  149. package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +51 -0
  150. package/bundles/antigravity-plugin-extras/skills/data-analysis/SKILL.md +111 -0
  151. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/README.md +248 -0
  152. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +203 -0
  153. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/adapter.py.template +44 -0
  154. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/api-router.py.template +43 -0
  155. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/contract-test.py.template +384 -0
  156. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/display-dto.py.template +39 -0
  157. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-service.ts.template +46 -0
  158. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-types.ts.template +38 -0
  159. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/ingestion-model.py.template +42 -0
  160. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/mapping-doc.md.template +46 -0
  161. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/normalizer.py.template +48 -0
  162. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_requirements.md +36 -0
  163. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_ui_demand.md +35 -0
  164. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/reconcile_mapping.md +66 -0
  165. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/query-catalog.md.template +62 -0
  166. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/consumer-driven-contracts.md +131 -0
  167. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/drift-check-catalog.md +305 -0
  168. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/layer-responsibilities.md +333 -0
  169. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_connections.py +170 -0
  170. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_sources.py +161 -0
  171. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/drift_check.py +171 -0
  172. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/extract_schema.py +1363 -0
  173. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_gap_report.py +81 -0
  174. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_mapping_doc.py +294 -0
  175. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/ts_dto_compare.py +214 -0
  176. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/validate_lineage.py +51 -0
  177. package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +753 -0
  178. package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +220 -0
  179. package/bundles/antigravity-plugin-extras/skills/db-testing/SKILL.md +117 -0
  180. package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +259 -0
  181. package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +167 -0
  182. package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +240 -0
  183. package/bundles/antigravity-plugin-extras/skills/design-system-tokens/references/DESIGN-SYSTEM-TEMPLATE.md +577 -0
  184. package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +323 -0
  185. package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +378 -0
  186. package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +78 -0
  187. package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +213 -0
  188. package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +120 -0
  189. package/bundles/antigravity-plugin-extras/skills/excalidraw/SKILL.md +193 -0
  190. package/bundles/antigravity-plugin-extras/skills/excalidraw/references/element-types.md +497 -0
  191. package/bundles/antigravity-plugin-extras/skills/excalidraw/references/excalidraw-schema.md +356 -0
  192. package/bundles/antigravity-plugin-extras/skills/excalidraw/references/reliable-diagrams.md +115 -0
  193. package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/README.md +60 -0
  194. package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-arrow.py +354 -0
  195. package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-icon-to-diagram.py +412 -0
  196. package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/split-excalidraw-library.py +183 -0
  197. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/business-flow-swimlane-template.excalidraw +334 -0
  198. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/class-diagram-template.excalidraw +558 -0
  199. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/data-flow-diagram-template.excalidraw +279 -0
  200. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/er-diagram-template.excalidraw +662 -0
  201. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/flowchart-template.excalidraw +179 -0
  202. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/mindmap-template.excalidraw +244 -0
  203. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/relationship-template.excalidraw +145 -0
  204. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/reliable-flowchart.excalidraw +1 -0
  205. package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/sequence-diagram-template.excalidraw +509 -0
  206. package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +434 -0
  207. package/bundles/antigravity-plugin-extras/skills/game-changing-features/README.md +221 -0
  208. package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +265 -0
  209. package/bundles/antigravity-plugin-extras/skills/github-issues/SKILL.md +359 -0
  210. package/bundles/antigravity-plugin-extras/skills/github-issues/references/templates.md +90 -0
  211. package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +192 -0
  212. package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +194 -0
  213. package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +100 -0
  214. package/bundles/antigravity-plugin-extras/skills/intent-writer/SKILL.md +201 -0
  215. package/bundles/antigravity-plugin-extras/skills/internal-comms/LICENSE.txt +202 -0
  216. package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +124 -0
  217. package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/3p-updates.md +47 -0
  218. package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/company-newsletter.md +65 -0
  219. package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/faq-answers.md +30 -0
  220. package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/general-comms.md +16 -0
  221. package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +447 -0
  222. package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +182 -0
  223. package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +188 -0
  224. package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +200 -0
  225. package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +217 -0
  226. package/bundles/antigravity-plugin-extras/skills/mcp-builder/LICENSE.txt +202 -0
  227. package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +100 -0
  228. package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/evaluation.md +602 -0
  229. package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/mcp_best_practices.md +915 -0
  230. package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/node_mcp_server.md +916 -0
  231. package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/python_mcp_server.md +752 -0
  232. package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/connections.py +151 -0
  233. package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/evaluation.py +373 -0
  234. package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  235. package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/requirements.txt +2 -0
  236. package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +328 -0
  237. package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +267 -0
  238. package/bundles/antigravity-plugin-extras/skills/naming-analyzer/SKILL.md +376 -0
  239. package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +271 -0
  240. package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +154 -0
  241. package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +270 -0
  242. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +309 -0
  243. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +376 -0
  244. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +338 -0
  245. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +81 -0
  246. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +256 -0
  247. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +358 -0
  248. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +255 -0
  249. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +107 -0
  250. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +302 -0
  251. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +44 -0
  252. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +410 -0
  253. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +102 -0
  254. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +204 -0
  255. package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +371 -0
  256. package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +192 -0
  257. package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +226 -0
  258. package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +208 -0
  259. package/bundles/antigravity-plugin-extras/skills/plantuml/SKILL.md +228 -0
  260. package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +142 -0
  261. package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/linear.app.md +196 -0
  262. package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/stripe.md +214 -0
  263. package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/vercel.md +218 -0
  264. package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +127 -0
  265. package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +159 -0
  266. package/bundles/antigravity-plugin-extras/skills/react-useeffect/README.md +320 -0
  267. package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +53 -0
  268. package/bundles/antigravity-plugin-extras/skills/react-useeffect/alternatives.md +258 -0
  269. package/bundles/antigravity-plugin-extras/skills/react-useeffect/anti-patterns.md +290 -0
  270. package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +213 -0
  271. package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +246 -0
  272. package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +105 -0
  273. package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +146 -0
  274. package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +350 -0
  275. package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/pwa-checklist.md +226 -0
  276. package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/touch-and-interaction.md +265 -0
  277. package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/transformation-catalogue.md +326 -0
  278. package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +275 -0
  279. package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +120 -0
  280. package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +330 -0
  281. package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +104 -0
  282. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +202 -0
  283. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +646 -0
  284. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +302 -0
  285. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +230 -0
  286. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +469 -0
  287. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +246 -0
  288. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +357 -0
  289. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +264 -0
  290. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +494 -0
  291. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +4 -0
  292. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +106 -0
  293. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +331 -0
  294. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +329 -0
  295. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +291 -0
  296. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  297. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +329 -0
  298. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +293 -0
  299. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +268 -0
  300. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +127 -0
  301. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +291 -0
  302. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +269 -0
  303. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +300 -0
  304. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +312 -0
  305. package/bundles/antigravity-plugin-extras/skills/slides/SKILL.md +38 -0
  306. package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +131 -0
  307. package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +268 -0
  308. package/bundles/antigravity-plugin-extras/skills/svg-create/SKILL.md +251 -0
  309. package/bundles/antigravity-plugin-extras/skills/theme-factory/LICENSE.txt +202 -0
  310. package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +59 -0
  311. package/bundles/antigravity-plugin-extras/skills/theme-factory/theme-showcase.pdf +0 -0
  312. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/arctic-frost.md +19 -0
  313. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/botanical-garden.md +19 -0
  314. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/desert-rose.md +19 -0
  315. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/forest-canopy.md +19 -0
  316. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/golden-hour.md +19 -0
  317. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  318. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/modern-minimalist.md +19 -0
  319. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/ocean-depths.md +19 -0
  320. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  321. package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/tech-innovation.md +19 -0
  322. package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/LICENSE.txt +202 -0
  323. package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +320 -0
  324. package/bundles/antigravity-plugin-extras/skills/ui-testing/SKILL.md +660 -0
  325. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +660 -0
  326. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/_sync_all.py +414 -0
  327. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/app-interface.csv +31 -0
  328. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/charts.csv +26 -0
  329. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/colors.csv +162 -0
  330. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/design.csv +1776 -0
  331. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/draft.csv +1779 -0
  332. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/google-fonts.csv +1924 -0
  333. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/icons.csv +106 -0
  334. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/landing.csv +35 -0
  335. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/products.csv +162 -0
  336. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/react-performance.csv +45 -0
  337. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/styles.csv +85 -0
  338. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/typography.csv +74 -0
  339. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ui-reasoning.csv +162 -0
  340. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ux-guidelines.csv +100 -0
  341. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/core.py +247 -0
  342. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/design_system.py +1067 -0
  343. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/search.py +114 -0
  344. package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +140 -0
  345. package/bundles/antigravity-plugin-extras/skills/understand-anything/references/commands.md +252 -0
  346. package/bundles/antigravity-plugin-extras/skills/understand-anything/references/graph-schema.md +116 -0
  347. package/bundles/antigravity-plugin-extras/skills/understand-anything/references/pipeline.md +331 -0
  348. package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +74 -0
  349. package/bundles/antigravity-plugin-extras/skills/verification-loop/SKILL.md +209 -0
  350. package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +107 -0
  351. package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +288 -0
  352. package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +339 -0
  353. package/bundles/antigravity-plugin-extras/skills/word-cloud/agents/agent-interface.md +175 -0
  354. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/html.md +384 -0
  355. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/nlp-keywords.md +127 -0
  356. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/palettes.md +149 -0
  357. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/python.md +249 -0
  358. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/react.md +427 -0
  359. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/shapes.md +135 -0
  360. package/bundles/antigravity-plugin-extras/skills/word-cloud/references/stopwords.md +115 -0
  361. package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +416 -0
  362. package/bundles/manifest.json +2 -1
  363. package/dist/cli.js +166 -37
  364. package/package.json +1 -1
@@ -0,0 +1,367 @@
1
+ ---
2
+ name: api-client-patterns
3
+ description: Typed API client patterns for consuming REST APIs and tRPC. Use for typed fetch wrappers, zod response validation, API client factory, auth injection, TanStack Query (useQuery, useMutation, infinite queries, optimistic updates), tRPC end-to-end types, error handling with discriminated unions, OpenAPI client codegen, or pagination envelopes. Complements backend-development (server side) with client-side consumption patterns.
4
+ ---
5
+
6
+ # API Client Patterns Skill
7
+
8
+ Typed, maintainable API clients — from simple fetch wrappers to full TanStack Query integration and tRPC.
9
+
10
+ ## 1. Typed Fetch Wrapper with Zod Validation
11
+
12
+ ```ts
13
+ // lib/api/fetcher.ts
14
+ import { z } from 'zod'
15
+
16
+ export type ApiError = { type: 'network'; message: string }
17
+ | { type: 'validation'; issues: z.ZodIssue[] }
18
+ | { type: 'http'; status: number; body: unknown }
19
+
20
+ export type ApiResult<T> = { ok: true; data: T } | { ok: false; error: ApiError }
21
+
22
+ async function fetchJson<T>(
23
+ url: string,
24
+ schema: z.ZodSchema<T>,
25
+ init?: RequestInit,
26
+ ): Promise<ApiResult<T>> {
27
+ let response: Response
28
+
29
+ try {
30
+ response = await fetch(url, { ...init, headers: { 'Content-Type': 'application/json', ...init?.headers } })
31
+ } catch (e) {
32
+ return { ok: false, error: { type: 'network', message: String(e) } }
33
+ }
34
+
35
+ if (!response.ok) {
36
+ return { ok: false, error: { type: 'http', status: response.status, body: await response.json().catch(() => null) } }
37
+ }
38
+
39
+ const raw = await response.json()
40
+ const parsed = schema.safeParse(raw)
41
+
42
+ if (!parsed.success) {
43
+ return { ok: false, error: { type: 'validation', issues: parsed.error.issues } }
44
+ }
45
+
46
+ return { ok: true, data: parsed.data }
47
+ }
48
+ ```
49
+
50
+ ## 2. API Client Factory Pattern
51
+
52
+ ```ts
53
+ // lib/api/client.ts
54
+ import { z } from 'zod'
55
+
56
+ function createApiClient(baseUrl: string, getAuth: () => string | null) {
57
+ async function request<T>(
58
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',
59
+ path: string,
60
+ schema: z.ZodSchema<T>,
61
+ body?: unknown,
62
+ ) {
63
+ const token = getAuth()
64
+ return fetchJson(`${baseUrl}${path}`, schema, {
65
+ method,
66
+ headers: { ...(token ? { Authorization: `Bearer ${token}` } : {}) },
67
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
68
+ })
69
+ }
70
+
71
+ return {
72
+ get: <T>(path: string, schema: z.ZodSchema<T>) => request('GET', path, schema),
73
+ post: <T>(path: string, schema: z.ZodSchema<T>, body: unknown) => request('POST', path, schema, body),
74
+ put: <T>(path: string, schema: z.ZodSchema<T>, body: unknown) => request('PUT', path, schema, body),
75
+ patch: <T>(path: string, schema: z.ZodSchema<T>, body: unknown) => request('PATCH', path, schema, body),
76
+ delete: <T>(path: string, schema: z.ZodSchema<T>) => request('DELETE', path, schema),
77
+ }
78
+ }
79
+
80
+ // Usage
81
+ import { getAccessToken } from '@/lib/auth'
82
+ export const api = createApiClient(process.env.NEXT_PUBLIC_API_URL!, getAccessToken)
83
+ ```
84
+
85
+ ## 3. Response Contracts — Pagination and Error Envelopes
86
+
87
+ ```ts
88
+ // lib/api/schemas.ts — reusable response shapes
89
+ import { z } from 'zod'
90
+
91
+ export const paginatedSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>
92
+ z.object({
93
+ data: z.array(itemSchema),
94
+ total: z.number(),
95
+ page: z.number(),
96
+ per_page: z.number(),
97
+ has_next: z.boolean(),
98
+ })
99
+
100
+ export const apiErrorSchema = z.object({
101
+ code: z.string(),
102
+ message: z.string(),
103
+ details: z.record(z.string()).optional(),
104
+ })
105
+
106
+ // Domain schemas
107
+ export const userSchema = z.object({
108
+ id: z.string().uuid(),
109
+ name: z.string(),
110
+ email: z.string().email(),
111
+ role: z.enum(['admin', 'user', 'viewer']),
112
+ createdAt: z.coerce.date(),
113
+ })
114
+
115
+ export type User = z.infer<typeof userSchema>
116
+ export const paginatedUsersSchema = paginatedSchema(userSchema)
117
+ ```
118
+
119
+ ## 4. TanStack Query Integration
120
+
121
+ ### Setup (`QueryClientProvider`)
122
+ ```tsx
123
+ // app/providers.tsx
124
+ 'use client'
125
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
126
+ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
127
+ import { useState } from 'react'
128
+
129
+ export function Providers({ children }: { children: React.ReactNode }) {
130
+ const [queryClient] = useState(() => new QueryClient({
131
+ defaultOptions: {
132
+ queries: { staleTime: 60_000, retry: 1 },
133
+ },
134
+ }))
135
+
136
+ return (
137
+ <QueryClientProvider client={queryClient}>
138
+ {children}
139
+ <ReactQueryDevtools initialIsOpen={false} />
140
+ </QueryClientProvider>
141
+ )
142
+ }
143
+ ```
144
+
145
+ ### `useQuery` — Fetching
146
+ ```tsx
147
+ import { useQuery } from '@tanstack/react-query'
148
+ import { api } from '@/lib/api/client'
149
+ import { paginatedUsersSchema } from '@/lib/api/schemas'
150
+
151
+ // Query key factory — centralized, type-safe
152
+ export const userKeys = {
153
+ all: ['users'] as const,
154
+ lists: () => [...userKeys.all, 'list'] as const,
155
+ list: (filters: UserFilters) => [...userKeys.lists(), filters] as const,
156
+ detail: (id: string) => [...userKeys.all, 'detail', id] as const,
157
+ }
158
+
159
+ export function useUsers(filters: UserFilters) {
160
+ return useQuery({
161
+ queryKey: userKeys.list(filters),
162
+ queryFn: async () => {
163
+ const params = new URLSearchParams(filters as Record<string, string>)
164
+ const result = await api.get(`/users?${params}`, paginatedUsersSchema)
165
+ if (!result.ok) throw new Error(result.error.message ?? 'Failed to fetch users')
166
+ return result.data
167
+ },
168
+ })
169
+ }
170
+ ```
171
+
172
+ ### `useMutation` — Creating/Updating
173
+ ```tsx
174
+ import { useMutation, useQueryClient } from '@tanstack/react-query'
175
+ import { toast } from 'sonner'
176
+
177
+ export function useCreateUser() {
178
+ const queryClient = useQueryClient()
179
+
180
+ return useMutation({
181
+ mutationFn: async (body: CreateUserInput) => {
182
+ const result = await api.post('/users', userSchema, body)
183
+ if (!result.ok) throw new Error('Failed to create user')
184
+ return result.data
185
+ },
186
+ onSuccess: () => {
187
+ // Invalidate all user list queries
188
+ queryClient.invalidateQueries({ queryKey: userKeys.lists() })
189
+ toast.success('User created successfully')
190
+ },
191
+ onError: (error) => {
192
+ toast.error(error.message)
193
+ },
194
+ })
195
+ }
196
+ ```
197
+
198
+ ### Optimistic Updates
199
+ ```tsx
200
+ export function useUpdateUser(id: string) {
201
+ const queryClient = useQueryClient()
202
+
203
+ return useMutation({
204
+ mutationFn: (patch: Partial<User>) => api.patch(`/users/${id}`, userSchema, patch),
205
+
206
+ onMutate: async (patch) => {
207
+ await queryClient.cancelQueries({ queryKey: userKeys.detail(id) })
208
+ const previous = queryClient.getQueryData(userKeys.detail(id))
209
+ queryClient.setQueryData(userKeys.detail(id), (old: User) => ({ ...old, ...patch }))
210
+ return { previous } // Return context for rollback
211
+ },
212
+
213
+ onError: (_err, _vars, context) => {
214
+ // Rollback to previous value
215
+ queryClient.setQueryData(userKeys.detail(id), context?.previous)
216
+ },
217
+
218
+ onSettled: () => {
219
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(id) })
220
+ },
221
+ })
222
+ }
223
+ ```
224
+
225
+ ### Infinite Queries — Pagination
226
+ ```tsx
227
+ import { useInfiniteQuery } from '@tanstack/react-query'
228
+
229
+ export function useInfiniteUsers() {
230
+ return useInfiniteQuery({
231
+ queryKey: userKeys.lists(),
232
+ queryFn: ({ pageParam = 1 }) =>
233
+ api.get(`/users?page=${pageParam}&per_page=20`, paginatedUsersSchema)
234
+ .then(r => { if (!r.ok) throw new Error('Fetch failed'); return r.data }),
235
+ initialPageParam: 1,
236
+ getNextPageParam: (lastPage) =>
237
+ lastPage.has_next ? lastPage.page + 1 : undefined,
238
+ })
239
+ }
240
+
241
+ // Usage
242
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useInfiniteUsers()
243
+ const users = data?.pages.flatMap(p => p.data) ?? []
244
+ ```
245
+
246
+ ## 5. tRPC — End-to-End Type Safety
247
+
248
+ ```ts
249
+ // server/router.ts (Next.js App Router example)
250
+ import { initTRPC } from '@trpc/server'
251
+ import { z } from 'zod'
252
+
253
+ const t = initTRPC.create()
254
+ const router = t.router
255
+ const publicProcedure = t.procedure
256
+
257
+ export const appRouter = router({
258
+ users: router({
259
+ list: publicProcedure
260
+ .input(z.object({ page: z.number().default(1) }))
261
+ .query(({ input }) => getUsersPaginated(input.page)),
262
+
263
+ create: publicProcedure
264
+ .input(z.object({ name: z.string(), email: z.string().email() }))
265
+ .mutation(({ input }) => createUser(input)),
266
+ }),
267
+ })
268
+
269
+ export type AppRouter = typeof appRouter
270
+ ```
271
+
272
+ ```tsx
273
+ // Client usage — fully typed, no schemas needed client-side
274
+ const { data } = api.users.list.useQuery({ page: 1 })
275
+ const createUser = api.users.create.useMutation({
276
+ onSuccess: () => utils.users.list.invalidate(),
277
+ })
278
+ ```
279
+
280
+ ## 6. Error Handling — Discriminated Unions
281
+
282
+ ```tsx
283
+ // Typed error display in components
284
+ function UserListView() {
285
+ const { data, error, status } = useUsers({})
286
+
287
+ if (status === 'pending') return <Skeleton />
288
+
289
+ if (status === 'error') {
290
+ // error is typed as Error from React Query
291
+ return <ErrorAlert message={error.message} />
292
+ }
293
+
294
+ return <UserTable data={data.data} />
295
+ }
296
+ ```
297
+
298
+ ```ts
299
+ // Custom error classes for better discrimination
300
+ export class ApiValidationError extends Error {
301
+ constructor(public issues: z.ZodIssue[]) {
302
+ super('Validation failed')
303
+ this.name = 'ApiValidationError'
304
+ }
305
+ }
306
+
307
+ export class ApiHttpError extends Error {
308
+ constructor(public status: number, public body: unknown) {
309
+ super(`HTTP ${status}`)
310
+ this.name = 'ApiHttpError'
311
+ }
312
+ }
313
+ ```
314
+
315
+ ## 7. OpenAPI Client Codegen
316
+
317
+ ```bash
318
+ # Install openapi-typescript-codegen
319
+ pnpm add -D openapi-typescript-codegen
320
+
321
+ # Generate client from OpenAPI spec
322
+ npx openapi-typescript-codegen \
323
+ --input https://api.example.com/openapi.json \
324
+ --output src/lib/api/generated \
325
+ --client axios # or fetch
326
+ ```
327
+
328
+ Or use `@hey-api/openapi-ts` for modern output:
329
+ ```bash
330
+ pnpm add -D @hey-api/openapi-ts
331
+ npx @hey-api/openapi-ts -i openapi.json -o src/lib/api/generated -c fetch
332
+ ```
333
+
334
+ **When to use codegen**: When an OpenAPI spec exists and is maintained. When building typed wrappers over a third-party API. Wrap generated clients in your factory pattern — don't expose them directly.
335
+
336
+ ## 8. Retry Logic
337
+
338
+ ```ts
339
+ async function fetchWithRetry<T>(
340
+ fn: () => Promise<ApiResult<T>>,
341
+ maxRetries = 3,
342
+ backoffMs = 300,
343
+ ): Promise<ApiResult<T>> {
344
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
345
+ const result = await fn()
346
+ if (result.ok) return result
347
+ if (result.error.type === 'http' && result.error.status < 500) return result // Don't retry 4xx
348
+ if (attempt < maxRetries - 1) await new Promise(r => setTimeout(r, backoffMs * 2 ** attempt))
349
+ }
350
+ return fn()
351
+ }
352
+ ```
353
+
354
+ TanStack Query handles retries with `retry` option — use that for query/mutation retries instead of manual loops.
355
+
356
+ ## 9. Checklist
357
+
358
+ - [ ] All API responses validated with Zod schemas
359
+ - [ ] Typed `ApiResult<T>` discriminated union for every fetch
360
+ - [ ] API client factory with auth injection, not per-call token access
361
+ - [ ] Query keys use factory pattern (`userKeys.list(filters)`)
362
+ - [ ] `useMutation` invalidates related queries `onSuccess`
363
+ - [ ] Optimistic updates roll back on error via `onError` context
364
+ - [ ] Infinite queries use `getNextPageParam` from server response
365
+ - [ ] tRPC used when full-stack TypeScript with no codegen needed
366
+ - [ ] Retry limited to 5xx errors, not 4xx
367
+ - [ ] Error states displayed to user — not silently swallowed
@@ -0,0 +1,244 @@
1
+ ---
2
+ name: architecture-design
3
+ context: fork
4
+ description: Design application architecture and system diagrams with layered patterns, Mermaid C4 diagrams, SQL Server data platform, and on-premise deployment considerations.
5
+ ---
6
+
7
+ # Architecture Design
8
+
9
+ > **Project Context** — Read `project-config.md` in the repo root for brand tokens, shared-library paths, and deployment targets.
10
+
11
+ ## When to Use
12
+
13
+ Invoke this skill when:
14
+ - Designing a new application or feature
15
+ - Creating architecture documentation for stakeholders
16
+ - Planning system integrations (Streamlit + FastAPI + SQL Server)
17
+ - Evaluating architectural trade-offs
18
+ - Creating C4 diagrams for project systems
19
+ - Reviewing NFRs (scalability, performance, security)
20
+ - Planning on-premise or air-gapped deployments
21
+
22
+ ---
23
+
24
+ ## Steps
25
+
26
+ ### Step 1: Clarify Scope
27
+
28
+ Before designing, answer:
29
+ 1. What system or feature is being designed?
30
+ 2. Who are the users? (internal dashboards, external APIs, batch jobs)
31
+ 3. What are the data sources? (SQL Server tables, APIs, files)
32
+ 4. What are the deployment constraints? (on-premise, air-gapped, VPN)
33
+ 5. What NFRs matter most? (latency, throughput, availability)
34
+
35
+ ### Step 2: Define Layered Architecture
36
+
37
+ Applications follow a consistent layered pattern:
38
+
39
+ ```
40
+ Pages → Components → Services → Repository → Adapter → Database
41
+ ```
42
+
43
+ ```mermaid
44
+ graph TB
45
+ subgraph "Presentation Layer"
46
+ UI[Streamlit Pages]
47
+ Components[UI Components]
48
+ end
49
+
50
+ subgraph "Business Logic"
51
+ Services[Service Layer]
52
+ Models[Pydantic Models]
53
+ end
54
+
55
+ subgraph "Data Access"
56
+ Repo[Repository]
57
+ Adapter[Database Adapter]
58
+ end
59
+
60
+ subgraph "Infrastructure"
61
+ DB[(SQL Server)]
62
+ LLM[Ollama LLM]
63
+ Cache[Cache Layer]
64
+ end
65
+
66
+ UI --> Components
67
+ Components --> Services
68
+ Services --> Models
69
+ Services --> Repo
70
+ Repo --> Adapter
71
+ Adapter --> DB
72
+ Services --> LLM
73
+ Services --> Cache
74
+ ```
75
+
76
+ #### Component Responsibilities
77
+
78
+ | Component | Responsibility | Key Patterns |
79
+ |-----------|---------------|--------------|
80
+ | Pages | User interface, routing | `apply_page_config`, `render_header` |
81
+ | Components | Reusable UI elements | Streamlit widgets, Plotly charts |
82
+ | Services | Business logic, orchestration | Caching, validation, transformations |
83
+ | Repository | Data access facade | Query abstraction, `queries.yaml` |
84
+ | Adapter | Database communication | Parameterized queries, connection pooling |
85
+
86
+ ### Step 3: Design File Structure
87
+
88
+ ```
89
+ src/
90
+ ├── pages/
91
+ │ └── {page}.py # Streamlit page
92
+ ├── components/
93
+ │ ├── shared_header.py # Fixed header navigation
94
+ │ ├── kpi_cards.py # KPI card components
95
+ │ └── {component}.py # Feature-specific components
96
+ ├── services/
97
+ │ ├── cached_repository.py # Multi-user cached data
98
+ │ └── {service}.py # Business logic
99
+ ├── models/
100
+ │ └── {model}.py # Pydantic models
101
+ ├── ingestion_config/
102
+ │ ├── data_sources.py # DB configuration
103
+ │ └── queries.yaml # Externalized SQL queries
104
+ ├── styles/
105
+ │ └── theme.css # Brand theming CSS
106
+ └── utils/
107
+ ├── dev_mode.py # Query transparency
108
+ └── paths.py # Path management
109
+ ```
110
+
111
+ ### Step 4: Create C4 Diagrams
112
+
113
+ #### System Context Diagram
114
+
115
+ ```mermaid
116
+ C4Context
117
+ title System Context - Application
118
+
119
+ Person(user, "User", "Internal staff member")
120
+ System(app, "Application", "Streamlit dashboard + FastAPI backend")
121
+ System_Ext(sqlserver, "SQL Server", "Enterprise database")
122
+ System_Ext(ollama, "Ollama", "Local LLM inference")
123
+
124
+ Rel(user, app, "Uses", "HTTPS")
125
+ Rel(app, sqlserver, "Queries", "pyodbc/ODBC")
126
+ Rel(app, ollama, "Infers", "HTTP/REST")
127
+ ```
128
+
129
+ #### Container Diagram
130
+
131
+ ```mermaid
132
+ C4Container
133
+ title Container Diagram - Application
134
+
135
+ Container(streamlit, "Streamlit Frontend", "Python/Streamlit", "Dashboard UI with brand theming")
136
+ Container(fastapi, "FastAPI Backend", "Python/FastAPI", "REST API layer")
137
+ ContainerDb(sqlserver, "SQL Server", "MSSQL", "Application tables")
138
+ Container(ollama, "Ollama", "Go", "Local LLM models")
139
+ Container(cache, "Cache Layer", "st.cache / Redis", "Data and resource caching")
140
+
141
+ Rel(streamlit, fastapi, "API calls", "HTTP/JSON")
142
+ Rel(fastapi, sqlserver, "Queries", "pyodbc")
143
+ Rel(fastapi, ollama, "LLM requests", "HTTP")
144
+ Rel(streamlit, cache, "Cached reads")
145
+ ```
146
+
147
+ ### Step 5: Define NFRs
148
+
149
+ | Aspect | Approach | Project Specifics |
150
+ |--------|----------|-------------------|
151
+ | **Scalability** | Pagination, lazy loading | Application tables |
152
+ | **Performance** | Caching with TTL, query optimization | 15-min TTL for dashboards |
153
+ | **Security** | Parameterized queries, input validation | Windows Auth, regulatory compliance |
154
+ | **Maintainability** | Clear separation, type hints | Shared UI / data libraries |
155
+ | **Availability** | Error handling, graceful degradation | Air-gapped: no external dependencies |
156
+ | **Observability** | Loguru structured logging | On-premise log aggregation |
157
+
158
+ ### Step 6: Document Design Decisions
159
+
160
+ | Decision | Options Considered | Choice | Rationale |
161
+ |----------|-------------------|--------|-----------|
162
+ | Frontend framework | React, Streamlit, Dash | Streamlit | Rapid development, Python-native, team expertise |
163
+ | Database access | ORM, raw SQL, repository | Repository + raw SQL | Performance control, query externalization |
164
+ | Caching | Redis, Memcached, st.cache | st.cache + optional Redis | Simple for Streamlit, Redis for FastAPI |
165
+ | LLM provider | OpenAI, Azure, Ollama | Ollama | Air-gapped requirement, data sovereignty |
166
+ | Deployment | Cloud, hybrid, on-premise | On-premise | Security requirements, existing infrastructure |
167
+
168
+ ### Step 7: Identify Risks
169
+
170
+ | Risk | Impact | Likelihood | Mitigation |
171
+ |------|--------|------------|------------|
172
+ | SQL Server performance degradation | High | Medium | Query optimization, caching, pagination |
173
+ | Air-gapped dependency issues | Medium | Low | Vendor packages, local mirrors |
174
+ | Single point of failure (no HA) | High | Low | Graceful degradation, health checks |
175
+ | Data freshness vs cache staleness | Medium | Medium | Configurable TTL, cache invalidation |
176
+
177
+ ---
178
+
179
+ ## Patterns and Examples
180
+
181
+ ### Architecture Decision Record (ADR) Template
182
+
183
+ ```markdown
184
+ # ADR-001: [Decision Title]
185
+
186
+ ## Status: Accepted
187
+
188
+ ## Context
189
+ [What is the problem or situation requiring a decision?]
190
+
191
+ ## Decision
192
+ [What was decided and why]
193
+
194
+ ## Consequences
195
+ ### Positive
196
+ - [Benefit 1]
197
+
198
+ ### Negative
199
+ - [Trade-off 1]
200
+
201
+ ### Neutral
202
+ - [Observation]
203
+ ```
204
+
205
+ ### Integration Pattern: Streamlit + FastAPI
206
+
207
+ ```python
208
+ # Streamlit page calling FastAPI backend
209
+ import requests
210
+
211
+ BACKEND_URL = "http://localhost:8000"
212
+
213
+ def fetch_records(status: str = None, page: int = 1):
214
+ params = {"page": page}
215
+ if status:
216
+ params["status"] = status
217
+ response = requests.get(f"{BACKEND_URL}/records", params=params)
218
+ response.raise_for_status()
219
+ return response.json()
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Checklist
225
+
226
+ - [ ] System context diagram created (C4 Level 1)
227
+ - [ ] Container diagram created (C4 Level 2)
228
+ - [ ] Component responsibilities defined
229
+ - [ ] File structure planned
230
+ - [ ] NFRs documented with project-specific values
231
+ - [ ] Design decisions recorded with rationale
232
+ - [ ] Risks identified and mitigations planned
233
+ - [ ] Deployment strategy defined (on-premise/air-gapped)
234
+ - [ ] Integration patterns documented (Streamlit ↔ FastAPI ↔ SQL Server)
235
+ - [ ] Handoff ready: can create implementation plan from this design
236
+
237
+ ## Related Resources
238
+
239
+ | Resource | Path |
240
+ |----------|------|
241
+ | Architect agent | `agents/architect.agent.md` |
242
+ | FastAPI dev skill | `skills/coding/fastapi-dev/SKILL.md` |
243
+ | Streamlit dev skill | `skills/frontend/streamlit-dev/SKILL.md` |
244
+ | SQL expert skill | `skills/coding/sql/SKILL.md` |