@caddis/cli 0.2.6 → 0.4.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 (265) hide show
  1. package/bundles/antigravity-plugin/agents/claude-md-curator.md +1 -1
  2. package/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
  3. package/bundles/antigravity-plugin/caddis_statusline.py +825 -0
  4. package/bundles/antigravity-plugin/claude-md/folder-agents.md.tmpl +21 -0
  5. package/bundles/antigravity-plugin/guard_agy.py +60 -9
  6. package/bundles/antigravity-plugin/plugin.json +1 -1
  7. package/bundles/antigravity-plugin/scripts/caddis_gate.py +524 -0
  8. package/bundles/antigravity-plugin/scripts/caddis_inventory.py +439 -0
  9. package/bundles/antigravity-plugin/scripts/caddis_migrate_dir.py +270 -0
  10. package/bundles/antigravity-plugin/scripts/caddis_spawn.py +300 -0
  11. package/bundles/antigravity-plugin/scripts/caddis_statusline.py +825 -0
  12. package/bundles/antigravity-plugin/scripts/caddis_tidy.py +366 -0
  13. package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +924 -0
  14. package/bundles/antigravity-plugin/scripts/claude-deepseek.ps1 +4 -0
  15. package/bundles/antigravity-plugin/scripts/claude-deepseek.sh +3 -0
  16. package/bundles/antigravity-plugin/scripts/claude-glm.ps1 +4 -0
  17. package/bundles/antigravity-plugin/scripts/claude-glm.sh +3 -0
  18. package/bundles/antigravity-plugin/scripts/claude-oss.ps1 +64 -0
  19. package/bundles/antigravity-plugin/scripts/claude-oss.sh +60 -0
  20. package/bundles/antigravity-plugin/scripts/claudster_config.py +121 -0
  21. package/bundles/antigravity-plugin/scripts/claudster_doctor.py +356 -0
  22. package/bundles/antigravity-plugin/scripts/claudster_init.py +400 -0
  23. package/bundles/antigravity-plugin/scripts/claudster_migrate_rules.py +300 -0
  24. package/bundles/antigravity-plugin/scripts/enforcement_inventory.py +261 -0
  25. package/bundles/antigravity-plugin/scripts/hook_log.py +156 -0
  26. package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
  27. package/bundles/antigravity-plugin/scripts/oss_ask.py +98 -0
  28. package/bundles/antigravity-plugin/scripts/oss_model.py +174 -0
  29. package/bundles/antigravity-plugin/scripts/oss_review.py +718 -0
  30. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +1432 -0
  31. package/bundles/antigravity-plugin/scripts/usage_review.py +1323 -0
  32. package/bundles/antigravity-plugin/session_end_agy.py +52 -8
  33. package/bundles/antigravity-plugin/skills/_registry.md +1 -0
  34. package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
  35. package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
  36. package/bundles/antigravity-plugin/skills/fastapi-dev/SKILL.md +1 -1
  37. package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
  38. package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
  39. package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
  40. package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
  41. package/bundles/antigravity-plugin/skills/ship/SKILL.md +1 -1
  42. package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +1 -1
  43. package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +1 -1
  44. package/bundles/antigravity-plugin/skills/statusline/SKILL.md +105 -0
  45. package/bundles/antigravity-plugin/skills/use-model/SKILL.md +15 -3
  46. package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
  47. package/bundles/antigravity-plugin/warm_start_agy.py +117 -11
  48. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  49. package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +1 -1
  50. package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +1 -1
  51. package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +1 -1
  52. package/bundles/codex/.codex/config.toml.example +36 -0
  53. package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
  54. package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
  55. package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
  56. package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
  57. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
  58. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
  59. package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
  60. package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
  61. package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
  62. package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
  63. package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
  64. package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
  65. package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
  66. package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
  67. package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
  68. package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
  69. package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
  70. package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
  71. package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
  72. package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
  73. package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
  74. package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
  75. package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
  76. package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
  77. package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
  78. package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
  79. package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
  80. package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
  81. package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
  82. package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
  83. package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
  84. package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
  85. package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
  86. package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
  87. package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
  88. package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
  89. package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
  90. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
  91. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
  92. package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
  93. package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
  94. package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
  95. package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
  96. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
  97. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
  98. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
  99. package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
  100. package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
  101. package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
  102. package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
  103. package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
  104. package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
  105. package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
  106. package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
  107. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
  108. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
  109. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
  110. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
  111. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
  112. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
  113. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
  114. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
  115. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
  116. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
  117. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
  118. package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
  119. package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
  120. package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
  121. package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
  122. package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
  123. package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
  124. package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
  125. package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
  126. package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
  127. package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
  128. package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
  129. package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
  130. package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
  131. package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
  132. package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
  133. package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
  134. package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
  135. package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
  136. package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
  137. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
  138. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
  139. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
  140. package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
  141. package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
  142. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
  143. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
  144. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
  145. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
  146. package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
  147. package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
  148. package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
  149. package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
  150. package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
  151. package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
  152. package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
  153. package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
  154. package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
  155. package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
  156. package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
  157. package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
  158. package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
  159. package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
  160. package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
  161. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
  162. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
  163. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
  164. package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
  165. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
  166. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
  167. package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
  168. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
  169. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
  170. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
  171. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
  172. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
  173. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
  174. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
  175. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
  176. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
  177. package/bundles/codex/AGENTS.md +146 -0
  178. package/bundles/manifest.json +4 -3
  179. package/dist/claude-deepseek.js +544 -0
  180. package/dist/claude-glm.js +544 -0
  181. package/dist/claude-oss.js +544 -0
  182. package/dist/cli.js +542 -90
  183. package/package.json +5 -2
  184. package/bundles/antigravity-plugin/statusline-command-agy.sh +0 -91
  185. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  186. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  187. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  188. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  189. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  190. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  191. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  192. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  193. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  194. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  195. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  196. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  197. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  198. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  199. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  200. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  201. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  202. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  203. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  204. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  205. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  206. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  207. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  208. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  209. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  210. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  211. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  212. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  213. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  214. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  215. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  216. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  217. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  218. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  219. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  220. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  221. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  222. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  223. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  224. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  225. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  226. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  227. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  228. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  229. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  230. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  231. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  232. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  233. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  234. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  235. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  236. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  237. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  238. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  239. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  240. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  241. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  242. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  243. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  244. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  245. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  246. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  247. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  248. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  249. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  250. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  251. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  252. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  253. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  254. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  255. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  256. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  257. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  258. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  259. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  260. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  261. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  262. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  263. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  264. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  265. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: frontend-design
3
+ description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics while strictly adhering to the user's technical standards.
4
+ ---
5
+
6
+ # Frontend Design Skill
7
+
8
+ This skill guides the creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
9
+
10
+ ## 1. Core Principle: Avoid "AI Slop"
11
+ - **Typography:** Avoid system fonts (Inter, Arial, Roboto). Pair a distinctive display font (e.g., *Cormorant Garamond*, *Playfair Display*, *Space Mono*) with a refined, readable body font. Use dramatic scale jumps ($h1 > 5rem$ vs metadata $< 0.75rem$).
12
+ - **Color & Theme:** Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
13
+ - **Visuals:** Create atmosphere and depth using textures (grain, noise), glassmorphism, or complex gradients rather than defaulting to solid flat colors.
14
+
15
+ ## 2. Technical Implementation Standards
16
+ **CRITICAL:** You must ignore generic React patterns. Instead, you represent the specific technical architecture defined in the user's stack.
17
+
18
+ **Mandatory Reference:**
19
+ Before writing any component logic, state management, or hooks, you must cross-reference and apply the patterns found in:
20
+ `./references/my-tech-stack.md`
21
+
22
+ Specifically, you must:
23
+ 1. **Use Composition:** Build flexible UIs using the *Composition Over Inheritance* and *Compound Component* patterns defined in the reference file.
24
+ 2. **Use Custom Hooks:** Do not write ad-hoc logic for debouncing or toggling; use `useDebounce` and `useToggle` from the reference.
25
+ 3. **Optimize Performance:** Apply `useMemo` and `useCallback` strictly according to the "Memoization Rules" in the reference.
26
+ 4. **Ensure Stability:** Wrap complex or risky components in the `ErrorBoundary` pattern provided.
27
+ 5. **Enforce Accessibility:** Follow the keyboard navigation and focus management patterns exactly as specified.
28
+
29
+ ## 3. Design Thinking Process
30
+ Before coding, understand the context and commit to a BOLD aesthetic direction:
31
+ - **Tone:** Pick an extreme (Brutalist, Luxury, Retro-futuristic, Editorial, Industrial).
32
+ - **Motion:** Use animations for effects and micro-interactions. Focus on high-impact moments (staggered page loads) rather than scattered micro-interactions.
33
+ - **Differentiation:** What makes this UNFORGETTABLE? What's the one thing someone will remember?
34
+
35
+ ## 4. Output Requirements
36
+ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
37
+ - **Production-grade:** Functional, responsive, and accessible.
38
+ - **Visually striking:** Memorable and cohesive with a clear point-of-view.
39
+ - **Technically compliant:** Strictly follows the architecture in `my-tech-stack.md`.
40
+
41
+ ## 5. Transition Integrity (No Stale UI)
42
+
43
+ For data-heavy views that switch entities (profile A → profile B), enforce deterministic transitions:
44
+
45
+ - Use a **single render region** (e.g., Streamlit's `st.empty()`) that replaces its entire content on each render pass.
46
+ - **NEVER use dynamic keys** (nonce, entity ID) on containers inside `st.empty()` — dynamic keys cause the framework to create *new* DOM nodes instead of replacing existing ones, leaving ghost/shadow copies visible for 1-2 seconds until frontend reconciliation catches up.
47
+ - Use **stable keys** on inner containers. The render region handles content replacement; inner containers just need stable identity for in-place DOM updates.
48
+ - Temporarily hide high-salience identity panels/tabs during loading to avoid ghosted prior-state flashes.
49
+ - Execute state transitions outside container context managers to avoid interrupted cleanup.
50
+
51
+ Acceptance rule: users must only perceive `old state → loader → new state`, with no stale intermediate artifacts.
52
+
53
+ ## 6. Dial System — Design Variance Controls
54
+
55
+ Calibrate these three dials per project before writing any component. Declare them in a comment at the top of the main design file.
56
+
57
+ ```ts
58
+ // DESIGN_VARIANCE: 7 // 1 (safe/corporate) → 10 (experimental/editorial)
59
+ // MOTION_INTENSITY: 5 // 1 (static) → 10 (cinematic)
60
+ // VISUAL_DENSITY: 4 // 1 (minimal/lots of space) → 10 (data-dense/information-heavy)
61
+ ```
62
+
63
+ | Dial | 1–3 | 4–6 | 7–10 |
64
+ |---|---|---|---|
65
+ | `DESIGN_VARIANCE` | Standard grid, safe palette | Distinctive but accessible | Experimental layout, bold choices |
66
+ | `MOTION_INTENSITY` | Opacity fade only | Entrance animations, hover states | Parallax, stagger, spring physics |
67
+ | `VISUAL_DENSITY` | Hero + CTA, generous whitespace | Cards with secondary info | Dashboard-style, compact rows |
68
+
69
+ **Rule**: Do not override the user's declared dials. If undeclared, infer from context and state your assumption.
70
+
71
+ ## 7. AI Tells — Forbidden Patterns
72
+
73
+ These are signals of generic AI output. Every instance must be eliminated:
74
+
75
+ ### Generic Names
76
+ - ❌ `Company Name`, `Your Brand`, `Hello, World!`, `Example Corp`
77
+ - ✅ Invent plausible, domain-specific content: `Meridian Analytics`, `Kaspar & Voss`, `Orin Health`
78
+
79
+ ### Fake Placeholder Numbers
80
+ - ❌ `$1,234.56`, `1,234 users`, `99.9% uptime`, `42 orders`
81
+ - ✅ Domain-plausible numbers with realistic variance: `$14,820`, `3,241 customers`, `99.4% uptime`, `127 orders`
82
+
83
+ ### AI Copywriting Clichés
84
+ - ❌ "Empowering your workflow", "Seamlessly integrated", "Next-generation solution", "Unlock the power of..."
85
+ - ✅ Specific, functional copy: "Track invoice aging in real time", "Filter by region, team, or date"
86
+
87
+ ### Oversaturated Accents
88
+ - ❌ `#FF6B6B` coral-pink, `#6C63FF` purple-blue gradient (the two default AI accent colors)
89
+ - ✅ Chosen from the brief or brand guide; if absent, pick something unexpected: amber, forest green, slate
90
+
91
+ ### Generic Iconography
92
+ - ❌ Rocket ship for launching, lightbulb for ideas, three horizontal bars for "menu" on desktop nav
93
+ - ✅ Icons that match the actual function; text labels as fallback if icon meaning is ambiguous
94
+
95
+ ## 8. Typography Discipline
96
+
97
+ - **Maximum 2 font families** — one display (headings), one text (body + UI). Loading 3+ is a performance and taste failure.
98
+ - **Optical sizing**: Headings at `6rem+` need `letter-spacing: -0.03em`. Text under `0.875rem` needs `letter-spacing: 0.01em`.
99
+ - **Vertical rhythm**: `line-height: 1.6` for body, `1.1–1.2` for large headings, `1.4` for UI labels.
100
+ - **Scale**: Use a modular scale (1.25× or 1.333×), not arbitrary sizes. Common scale: `0.75 / 0.875 / 1 / 1.125 / 1.5 / 2 / 3 / 4.5rem`.
101
+ - **Weight contrast**: Body at 400, labels at 500, headings at 700–800. Avoid using 4 or more weights.
102
+
103
+ ```css
104
+ /* Correct optical sizing */
105
+ .hero-heading {
106
+ font-size: clamp(3rem, 6vw + 1rem, 6rem);
107
+ line-height: 1.05;
108
+ letter-spacing: -0.04em;
109
+ }
110
+ .body-text {
111
+ font-size: 1rem;
112
+ line-height: 1.625;
113
+ letter-spacing: 0;
114
+ }
115
+ ```
116
+
117
+ ## 9. Color Calibration
118
+
119
+ - **Maximum 1 accent color** — two accents compete; zero creates bland work.
120
+ - **Palette minimum**: Background, Surface (+1 level of elevation), Text, Muted text, Border, Accent, Destructive.
121
+ - **Forbidden**: Purple/blue AI gradient cliché (`from-purple-500 to-blue-600` or equivalent). Use if and only if the brand explicitly requires it.
122
+ - **Dark mode**: Shift background to `hsl(220 15% 8%)` range, not pure black (`#000`). Pure black with white text fails contrast for long reading.
123
+ - **Accent contrast**: Accent on background must pass WCAG AA (4.5:1 for normal text, 3:1 for large text / UI components).
124
+
125
+ ```css
126
+ /* ✅ Correct token setup */
127
+ :root {
128
+ --bg: hsl(220 15% 97%);
129
+ --surface: hsl(220 15% 100%);
130
+ --text: hsl(220 25% 12%);
131
+ --muted: hsl(220 10% 50%);
132
+ --border: hsl(220 15% 88%);
133
+ --accent: hsl(38 92% 50%); /* Amber — unexpected, not AI-default */
134
+ --destructive: hsl(0 72% 51%);
135
+ }
136
+ ```
137
+
138
+ ## 10. Layout Diversification
139
+
140
+ When `DESIGN_VARIANCE` > 4, **ban the centered-hero-with-CTA default** layout. Use instead:
141
+
142
+ | Layout Pattern | When to Use |
143
+ |---|---|
144
+ | **Editorial split** — large text left, visual right (or reversed) | Brand/marketing pages |
145
+ | **Bento grid** — asymmetric tiles of varying sizes | Dashboards, feature showcases |
146
+ | **Fullbleed scroll narrative** — content revealed on scroll sections | Storytelling, case studies |
147
+ | **Sidebar dock + content** — persistent nav or filter rail | Application interfaces |
148
+ | **Masonry** — uneven column heights | Media, portfolio grids |
149
+ | **Timeline / sequence** — vertical progression with connectors | Onboarding, process flows |
150
+
151
+ **Never** stack all sections centered on a 1200px `max-width` container unless `DESIGN_VARIANCE` ≤ 3.
152
+
153
+ ## 11. Interactive State Completeness
154
+
155
+ Every interactive element must implement all four states before the component is done:
156
+
157
+ | State | What to Implement |
158
+ |---|---|
159
+ | **Loading** | Skeleton, spinner, or disabled appearance while data fetches |
160
+ | **Empty** | Non-generic empty state with context-specific message + action |
161
+ | **Error** | Specific error message, retry action, not just "Something went wrong" |
162
+ | **Tactile** | Hover + active (pressed) visual feedback — scale, shadow, or color shift |
163
+
164
+ ```tsx
165
+ // ✅ Complete interactive state example
166
+ function DataCard({ id }: { id: string }) {
167
+ const { data, error, status } = useQuery(...)
168
+
169
+ if (status === 'pending') return <CardSkeleton />
170
+ if (status === 'error') return <ErrorCard message={error.message} onRetry={refetch} />
171
+ if (!data.items.length) return <EmptyCard title="No records yet" action={<CreateButton />} />
172
+
173
+ return (
174
+ <div className="group transition-all hover:shadow-md hover:-translate-y-0.5 active:scale-[0.99]">
175
+ {/* content */}
176
+ </div>
177
+ )
178
+ }
179
+ ```
180
+
181
+ ## 12. Data Realism
182
+
183
+ Never use placeholder data that signals the interface is unfinished:
184
+
185
+ | ❌ Avoid | ✅ Use Instead |
186
+ |---|---|
187
+ | "Lorem ipsum dolor sit amet" | Domain-appropriate text: "Q3 revenue shows 14% growth vs prior quarter" |
188
+ | User: "John Doe" | Plausible name + avatar initial: "Margot Belleview" |
189
+ | Date: "January 1, 2024" | Recent plausible date: "Feb 12, 2026" |
190
+ | Metric: "1,234" | Realistic variance: "3,817" (not round numbers with too many digits) |
191
+ | Chart data: constant line | Realistic noise with trend: slight growth with variance |
192
+
193
+ **Rule**: Each piece of sample data should make a reviewer believe it could be real production data, not a template. If the user provides real data patterns, use them precisely.
@@ -0,0 +1,127 @@
1
+ # My Technical Standards & Architecture Patterns
2
+
3
+ This document serves as the technical reference for all frontend implementation. When building components or pages, follow these structural patterns to ensure performance, stability, and clean code.
4
+
5
+ ## 1. Component Patterns
6
+
7
+ ### Composition Over Inheritance
8
+ Build flexible UIs by composing small, focused components rather than deep inheritance chains.
9
+
10
+ ```
11
+ export function Card({ children, variant = 'default' }) {
12
+ return <div className={`card card-${variant}`}>{children}</div>
13
+ }
14
+
15
+ export function CardHeader({ children }) {
16
+ return <div className="card-header">{children}</div>
17
+ }
18
+
19
+ // Usage: <Card><CardHeader>Title</CardHeader></Card>
20
+ ```
21
+
22
+ ### Compound Components
23
+ Share implicit state between related components via context to keep logic encapsulated.
24
+
25
+ ```
26
+ const TabsContext = createContext(undefined)
27
+
28
+ export function Tabs({ children, defaultTab }) {
29
+ const [activeTab, setActiveTab] = useState(defaultTab)
30
+ return (
31
+ <TabsContext.Provider value={{ activeTab, setActiveTab }}>
32
+ {children}
33
+ </TabsContext.Provider>
34
+ )
35
+ }
36
+
37
+ export function Tab({ id, children }) {
38
+ const ctx = useContext(TabsContext)
39
+ if (!ctx) throw new Error('Tab must be used within Tabs')
40
+ return (
41
+ <button
42
+ className={ctx.activeTab === id ? 'active' : ''}
43
+ onClick={() => ctx.setActiveTab(id)}
44
+ >
45
+ {children}
46
+ </button>
47
+ )
48
+ }
49
+ ```
50
+
51
+ ## 2. Custom Utility Hooks
52
+
53
+ ```
54
+ // Debounce hook for search/expensive inputs
55
+ export function useDebounce(value, delay) {
56
+ const [debounced, setDebounced] = useState(value)
57
+ useEffect(() => {
58
+ const handler = setTimeout(() => setDebounced(value), delay)
59
+ return () => clearTimeout(handler)
60
+ }, [value, delay])
61
+ return debounced
62
+ }
63
+
64
+ // Simplified toggle hook
65
+ export function useToggle(initial = false) {
66
+ const [value, setValue] = useState(initial)
67
+ const toggle = useCallback(() => setValue(v => !v), [])
68
+ return [value, toggle]
69
+ }
70
+ ```
71
+
72
+ ## 3. Performance Optimization
73
+
74
+ ### Memoization Rules
75
+ - Use `useMemo` for any data transformation or sorting of lists.
76
+ - Use `useCallback` for event handlers passed to components wrapped in `React.memo`.
77
+
78
+ ```
79
+ // useMemo for expensive computations
80
+ const sorted = useMemo(() => items.sort((a, b) => b.score - a.score), [items])
81
+
82
+ // React.memo for pure leaf components
83
+ export const ItemCard = React.memo(({ item }) => (
84
+ <div className="item-card"><h3>{item.name}</h3></div>
85
+ ))
86
+ ```
87
+
88
+ ## 4. Accessibility Patterns
89
+
90
+ ### Keyboard Navigation
91
+ Always handle key events for custom interactive widgets to ensure screen-reader and keyboard compatibility.
92
+
93
+ ```
94
+ const handleKeyDown = (e) => {
95
+ switch (e.key) {
96
+ case 'ArrowDown': e.preventDefault(); setIndex(i => Math.min(i + 1, max)); break
97
+ case 'ArrowUp': e.preventDefault(); setIndex(i => Math.max(i - 1, 0)); break
98
+ case 'Enter': e.preventDefault(); onSelect(options[index]); break
99
+ case 'Escape': onClose(); break
100
+ }
101
+ }
102
+ ```
103
+
104
+ ## 5. Error Boundary Pattern
105
+ Wrap complex sections (like third-party widgets) in a safety net to prevent app crashes.
106
+
107
+ ```
108
+ export class ErrorBoundary extends React.Component {
109
+ state = { hasError: false, error: null }
110
+
111
+ static getDerivedStateFromError(error) {
112
+ return { hasError: true, error }
113
+ }
114
+
115
+ render() {
116
+ if (this.state.hasError) {
117
+ return (
118
+ <div className="error-fallback">
119
+ <h2>Something went wrong</h2>
120
+ <button onClick={() => this.setState({ hasError: false })}>Try again</button>
121
+ </div>
122
+ )
123
+ }
124
+ return this.props.children
125
+ }
126
+ }
127
+ ```
@@ -0,0 +1,242 @@
1
+ ---
2
+ name: mockup
3
+ description: Create framework-aware UI mockups with feasibility checks. Prevents wasted effort by validating that proposed designs work within the target framework's constraints.
4
+ ---
5
+
6
+ # Mockup Skill
7
+
8
+ ## Purpose
9
+
10
+ Create visual mockups (HTML/SVG) for UI features with **mandatory framework feasibility validation**. This skill exists because of a real incident: a beautiful HTML mockup was created for a Streamlit app using `position: fixed` — which doesn't work in Streamlit's DOM. 24 hours were wasted discovering this.
11
+
12
+ **This skill prevents that class of failure for ANY framework.**
13
+
14
+ ---
15
+
16
+ ## When to Use
17
+
18
+ - Creating a UI mockup for a proposed feature
19
+ - Visualizing a design before implementation
20
+ - Producing a reference artifact for implementing agents
21
+ - When `@ux-designer` routes mockup creation here
22
+
23
+ ---
24
+
25
+ ## Steps
26
+
27
+ ### Step 1: Read Project Context
28
+
29
+ 1. Read `project-config.md` → identify:
30
+ - **Frontend framework** (Streamlit, React, Vue, Angular, Next.js, etc.)
31
+ - **Brand colors** (from profile or placeholder values)
32
+ - **CSS conventions** (scoping method, custom properties, etc.)
33
+ 2. Read `copilot-instructions.md` → identify:
34
+ - Existing component patterns
35
+ - Framework-specific conventions already documented
36
+ 3. If a `chain_id` is provided, read the Intent Document from `agent-docs/intents/`
37
+
38
+ ### Step 2: Framework Feasibility Check (MANDATORY)
39
+
40
+ **Before creating ANY mockup, validate that the proposed design is feasible in the target framework.**
41
+
42
+ Run through this checklist:
43
+
44
+ | Check | Question | If NO |
45
+ |-------|----------|-------|
46
+ | **DOM Control** | Does the framework give you full control over the DOM? | Identify which HTML/CSS features are restricted |
47
+ | **Positioning** | Does `position: fixed/absolute` work as expected? | Document the limitation and alternative approach |
48
+ | **Custom HTML** | Can you inject arbitrary HTML/JS? | Identify the framework's component/extension API |
49
+ | **Event Handling** | Can you attach custom JS event listeners? | Document how events work in this framework |
50
+ | **Styling** | Can you use global CSS freely? | Document CSS scoping constraints |
51
+ | **Third-party Libraries** | Can you load external JS/CSS? | Check if air-gapped deployment restricts this |
52
+
53
+ #### Known Framework Constraints
54
+
55
+ | Framework | Key Constraints |
56
+ |-----------|----------------|
57
+ | **Streamlit** | No `position: fixed/absolute` (DOM wrapping breaks it). No arbitrary HTML injection without `components.html()` or `declare_component()`. CSS is scoped — use `st.container(key=)` + `.st-key-` selectors. No external CDN in air-gapped environments. |
58
+ | **React** | JSX required. CSS-in-JS or CSS Modules typical. Virtual DOM diffing may interfere with manual DOM manipulation. |
59
+ | **Vue** | Template syntax. Scoped styles by default. `v-html` for raw HTML but XSS risk. |
60
+ | **Gradio** | Similar DOM constraints to Streamlit. Limited CSS control. Use `gr.HTML()` for custom elements. |
61
+ | **Next.js** | SSR considerations. `useEffect` needed for client-only code. CSS Modules or Tailwind typical. |
62
+
63
+ > **If ANY constraint would prevent the proposed design from working:**
64
+ > 1. **STOP** — do not create a mockup that can't be implemented
65
+ > 2. **WARN** the user with specific details about what won't work and why
66
+ > 3. **PROPOSE ALTERNATIVES** that work within the framework's constraints
67
+ > 4. **Get confirmation** before proceeding with an alternative approach
68
+
69
+ ### Step 3: Create the Mockup
70
+
71
+ **Output format**: HTML file (preferred for interactive mockups) or SVG (for static layouts)
72
+
73
+ **Requirements:**
74
+ - Use brand colors from `project-config.md` (never hardcode colors — use CSS custom properties)
75
+ - Include responsive behavior if applicable
76
+ - Add comments explaining key layout decisions
77
+ - If the mockup uses workarounds for framework constraints, document them clearly in comments
78
+
79
+ **HTML mockup template:**
80
+ ```html
81
+ <!DOCTYPE html>
82
+ <html lang="en">
83
+ <head>
84
+ <meta charset="UTF-8">
85
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
86
+ <title>{Feature Name} — Mockup</title>
87
+ <style>
88
+ /* Brand colors from project-config.md */
89
+ :root {
90
+ --brand-primary: {<BRAND_PRIMARY>};
91
+ --brand-dark: {<BRAND_DARK>};
92
+ --brand-light: {<BRAND_LIGHT>};
93
+ /* Additional colors from profile */
94
+ }
95
+
96
+ /* Mockup styles */
97
+ /* ... */
98
+ </style>
99
+ </head>
100
+ <body>
101
+ <!-- MOCKUP: {Feature description} -->
102
+ <!-- FRAMEWORK: {Target framework} -->
103
+ <!-- CONSTRAINTS: {Any framework constraints that shaped this design} -->
104
+ <!-- ALTERNATIVES: {If using a workaround, what was the original approach and why it wouldn't work} -->
105
+
106
+ <!-- Mockup content -->
107
+ </body>
108
+ </html>
109
+ ```
110
+
111
+ ### Step 3b: Implementation-Annotated Mockup (MANDATORY for handoff to implementing agents)
112
+
113
+ When the mockup will be handed off to `@implement`, `@frontend-developer`, or `@streamlit-developer`, embed **implementation annotations** throughout the HTML so the implementing agent knows exactly what to build without guessing.
114
+
115
+ #### Annotation Types
116
+
117
+ Use these four comment patterns consistently:
118
+
119
+ **1. Component annotations** — Which framework component implements this visual element:
120
+ ```html
121
+ <!-- React: <KpiFlipCard product="broadband" data={surveys.broadband}
122
+ trendData={trend.historicalNPS.byProduct.broadband} /> -->
123
+ <!-- React: <ResponsiveContainer width="100%" height={260}>
124
+ <AreaChart data={trendData}><Area type="monotone" dataKey="nps" ... /></AreaChart>
125
+ </ResponsiveContainer> -->
126
+ <!-- React: import { ScoreChip, DeltaBadge, SparkBar, TrendDot } from '@/components/table-cells' -->
127
+ ```
128
+
129
+ **2. Data source annotations** — Which JSON key / API response field provides the data:
130
+ ```html
131
+ <!-- DATA-SOURCE: surveys.broadband.nps, surveys.broadband.responses -->
132
+ <!-- DATA-SOURCE: trend.historicalNPS.byProduct.broadband (array of monthly values) -->
133
+ <!-- DATA-SOURCE: ceoInsight.headline, ceoInsight.keyFindings[] (objects with title, detail) -->
134
+ ```
135
+
136
+ **3. Implementation notes** — Broader guidance for the implementing agent:
137
+ ```html
138
+ <!-- IMPLEMENTATION NOTE [DATA-SOURCE]: This section uses hardcoded mock values for
139
+ layout reference. React implementation must fetch period-filtered data from the
140
+ /api/nps/overview endpoint and compute all KPIs dynamically. -->
141
+ <!-- IMPLEMENTATION NOTE [CHART]: Use Recharts AreaChart with gradient fill.
142
+ Spread CHART_DEFAULTS from chartTheme.ts. No axes/grid for sparkline variant. -->
143
+ <!-- IMPLEMENTATION NOTE [ANIMATION]: Use framer-motion rotateY for card flip.
144
+ duration: 0.52, ease: [0.4, 0.2, 0.2, 1]. backfaceVisibility: "hidden". -->
145
+ ```
146
+
147
+ **4. Styling annotations** — Which design tokens, CSS vars, or Tailwind classes to use:
148
+ ```html
149
+ <!-- STYLE: bg-surface-card (var(--surface-card)), shadow-card, rounded-lg (var(--r-lg)) -->
150
+ <!-- STYLE: Fill color uses var(--status-red) for detractor, var(--status-green) for promoter -->
151
+ <!-- STYLE: Tailwind: text-ink-primary font-heading text-2xl font-bold -->
152
+ ```
153
+
154
+ #### Annotation Placement Rules
155
+
156
+ 1. Place **component annotations** directly above or inside the HTML element that the component replaces
157
+ 2. Place **data source annotations** on the element that displays the data value
158
+ 3. Place **implementation notes** at the top of each major section (tab, panel, card group)
159
+ 4. Place **styling annotations** on elements where the visual appearance matters and the token name isn't obvious from the CSS
160
+ 5. Every hardcoded value in the mockup (numbers, text, colors) that will be dynamic in production MUST have a data source annotation
161
+
162
+ #### Example: Annotated KPI Card
163
+
164
+ ```html
165
+ <!-- React: <KpiFlipCard product="broadband" data={surveys.broadband}
166
+ trendData={trend.historicalNPS.byProduct.broadband} color={COLORS.broadband} /> -->
167
+ <!-- DATA-SOURCE: surveys.broadband.nps (current score), surveys.broadband.responses (count) -->
168
+ <!-- STYLE: var(--surface-card) bg, var(--shadow-card) shadow, 3px left border using COLORS.broadband -->
169
+ <div class="kpi-card">
170
+ <div class="kpi-score">+32</div> <!-- DATA-SOURCE: surveys.broadband.nps -->
171
+ <div class="kpi-delta">▲ 2.1</div> <!-- DATA-SOURCE: deriveMom(trend.historicalNPS.byProduct.broadband) -->
172
+ <div class="kpi-responses">1,247 responses</div> <!-- DATA-SOURCE: surveys.broadband.responses -->
173
+ <div class="sparkline">
174
+ <!-- React: <Sparkline data={trend.historicalNPS.byProduct.broadband}
175
+ color={COLORS.broadband} height={72} /> -->
176
+ <!-- IMPLEMENTATION NOTE [CHART]: Recharts AreaChart, no axes/grid/tooltip,
177
+ gradient fill from color at opacity 0.3 to opacity 0. -->
178
+ </div>
179
+ </div>
180
+ ```
181
+
182
+ #### Completeness Check
183
+
184
+ Before saving the mockup, verify:
185
+ - [ ] Every visual section has at least one **component annotation**
186
+ - [ ] Every dynamic value has a **data source annotation** with the exact JSON path
187
+ - [ ] Every chart/graph has an **implementation note** specifying the chart library and config
188
+ - [ ] The implementing agent can build the feature using ONLY the mockup + annotations (no guessing)
189
+
190
+ ### Step 4: Write Artifact
191
+
192
+ 1. Save the mockup file to `agent-docs/ux/mockups/{feature-slug}.html` (or `.svg`)
193
+ 2. Add YAML header to a companion markdown file or embed as HTML comment:
194
+ ```yaml
195
+ agent: ux-designer
196
+ created: {date}
197
+ status: current
198
+ chain_id: {chain_id if provided}
199
+ approval: pending
200
+ framework: {target framework}
201
+ feasibility_warnings: {list any constraints encountered}
202
+ ```
203
+ 3. Update `agent-docs/ARTIFACTS.md` manifest with the new entry
204
+
205
+ ### Step 5: Report
206
+
207
+ Provide:
208
+ - Path to the mockup file
209
+ - Framework feasibility summary (what was checked, any warnings)
210
+ - Implementation notes for the agent that will build this (which API/component to use, what CSS approach works)
211
+ - If alternatives were chosen, explain why the original approach wouldn't work
212
+
213
+ ---
214
+
215
+ ## Framework Feasibility Quick Reference
216
+
217
+ ### Streamlit-Specific
218
+
219
+ | Want to do | Don't use | Instead use |
220
+ |-----------|-----------|-------------|
221
+ | Floating element (chat widget, FAB) | `position: fixed/absolute` | `declare_component()` with custom HTML/JS |
222
+ | Custom styled container | Global CSS | `st.container(key="name")` + `.st-key-name` selector |
223
+ | Modal/overlay | `z-index` + absolute positioning | `st.dialog()` (Streamlit 1.33+) or `st.modal()` |
224
+ | Sidebar content | Custom sidebar HTML | `st.sidebar` API |
225
+ | Custom header | Fixed position header | `st.container()` at top + CSS with `st.container(key=)` |
226
+ | External JavaScript | `<script src="cdn...">` | Bundle locally for air-gapped; use `components.html()` |
227
+
228
+ ### React-Specific
229
+
230
+ | Want to do | Watch out for | Recommended approach |
231
+ |-----------|---------------|---------------------|
232
+ | Direct DOM manipulation | React re-renders will overwrite | Use refs (`useRef`) or state-driven rendering |
233
+ | Global styles | May conflict with component styles | CSS Modules, styled-components, or Tailwind |
234
+ | Third-party widgets | jQuery plugins fight React | Find React-native alternatives or wrap in `useEffect` |
235
+
236
+ ---
237
+
238
+ ## Important Notes
239
+
240
+ - This skill is designed to be loaded by `@ux-designer` or `@frontend-developer` agents
241
+ - The framework constraint tables should be extended as new frameworks and gotchas are discovered
242
+ - Always check `project-config.md` for the deployment environment — air-gapped deployments restrict external dependencies