@design-ai/cli 4.55.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 (529) hide show
  1. package/.claude-plugin/plugin.json +164 -0
  2. package/AGENTS.ko.md +126 -0
  3. package/AGENTS.md +182 -0
  4. package/CHANGELOG.md +6883 -0
  5. package/CLAUDE.md +39 -0
  6. package/LICENSE +21 -0
  7. package/README.ko.md +245 -0
  8. package/README.md +277 -0
  9. package/agents/README.md +14 -0
  10. package/agents/a11y-reviewer.md +121 -0
  11. package/agents/component-architect.md +57 -0
  12. package/agents/design-critic.md +46 -0
  13. package/agents/token-extractor.md +63 -0
  14. package/cli/bin/design-ai-mcp.mjs +6 -0
  15. package/cli/bin/design-ai.mjs +40 -0
  16. package/cli/commands/audit.mjs +111 -0
  17. package/cli/commands/check.mjs +226 -0
  18. package/cli/commands/doctor.mjs +141 -0
  19. package/cli/commands/examples.mjs +58 -0
  20. package/cli/commands/help.mjs +271 -0
  21. package/cli/commands/install.mjs +161 -0
  22. package/cli/commands/learn.mjs +1871 -0
  23. package/cli/commands/list.mjs +143 -0
  24. package/cli/commands/mcp.mjs +27 -0
  25. package/cli/commands/pack.mjs +211 -0
  26. package/cli/commands/prompt.mjs +199 -0
  27. package/cli/commands/route.mjs +247 -0
  28. package/cli/commands/search.mjs +60 -0
  29. package/cli/commands/show.mjs +52 -0
  30. package/cli/commands/site.mjs +558 -0
  31. package/cli/commands/status.mjs +161 -0
  32. package/cli/commands/uninstall.mjs +119 -0
  33. package/cli/commands/update.mjs +184 -0
  34. package/cli/commands/version.mjs +94 -0
  35. package/cli/commands/workspace.mjs +176 -0
  36. package/cli/lib/brief.mjs +52 -0
  37. package/cli/lib/check.mjs +642 -0
  38. package/cli/lib/dispatch.mjs +109 -0
  39. package/cli/lib/doctor.mjs +505 -0
  40. package/cli/lib/examples.mjs +258 -0
  41. package/cli/lib/exec.mjs +63 -0
  42. package/cli/lib/help-flags.mjs +5 -0
  43. package/cli/lib/learn.mjs +3694 -0
  44. package/cli/lib/log.mjs +47 -0
  45. package/cli/lib/mcp-server.mjs +426 -0
  46. package/cli/lib/output.mjs +101 -0
  47. package/cli/lib/pack.mjs +599 -0
  48. package/cli/lib/paths.mjs +63 -0
  49. package/cli/lib/prompt.mjs +603 -0
  50. package/cli/lib/route.mjs +740 -0
  51. package/cli/lib/search.mjs +158 -0
  52. package/cli/lib/show.mjs +161 -0
  53. package/cli/lib/signals.mjs +2337 -0
  54. package/cli/lib/site.mjs +6617 -0
  55. package/cli/lib/skill-proposals.mjs +2046 -0
  56. package/cli/lib/suggest.mjs +66 -0
  57. package/cli/lib/workspace.mjs +1056 -0
  58. package/commands/README.md +25 -0
  59. package/commands/component-spec.md +34 -0
  60. package/commands/conversational.md +44 -0
  61. package/commands/design-from-brief.md +141 -0
  62. package/commands/design-review.md +62 -0
  63. package/commands/document-from-brief.md +47 -0
  64. package/commands/extract-tokens.md +38 -0
  65. package/commands/game-ui.md +40 -0
  66. package/commands/illustration.md +37 -0
  67. package/commands/iterate.md +167 -0
  68. package/commands/motion-design.md +54 -0
  69. package/commands/palette-from-brand.md +50 -0
  70. package/commands/print.md +49 -0
  71. package/commands/slide-deck.md +46 -0
  72. package/commands/spatial.md +47 -0
  73. package/commands/stability-review.md +74 -0
  74. package/commands/video.md +42 -0
  75. package/commands/website-improvement.md +77 -0
  76. package/docs/AGENT-DEVELOPMENT.md +658 -0
  77. package/docs/AI-LEARNING.md +429 -0
  78. package/docs/AIDER-INTEGRATION.md +224 -0
  79. package/docs/ARCHITECTURE.ko.md +183 -0
  80. package/docs/ARCHITECTURE.md +105 -0
  81. package/docs/CODEX-INTEGRATION.md +311 -0
  82. package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
  83. package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
  84. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
  85. package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
  86. package/docs/CONTRIBUTING.ko.md +203 -0
  87. package/docs/CONTRIBUTING.md +242 -0
  88. package/docs/CURSOR-INTEGRATION.md +220 -0
  89. package/docs/DISTRIBUTION.ko.md +248 -0
  90. package/docs/DISTRIBUTION.md +253 -0
  91. package/docs/DOGFOOD-FINDINGS.md +180 -0
  92. package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
  93. package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
  94. package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
  95. package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
  96. package/docs/FIGMA-INTEGRATION.md +222 -0
  97. package/docs/MCP-INTEGRATION.md +243 -0
  98. package/docs/MIGRATION-v4.md +121 -0
  99. package/docs/PLUGIN-PACKAGING.md +240 -0
  100. package/docs/PRODUCT-READINESS.md +66 -0
  101. package/docs/QUICKSTART.ko.md +178 -0
  102. package/docs/QUICKSTART.md +179 -0
  103. package/docs/RELEASE-CHECKLIST.md +292 -0
  104. package/docs/ROADMAP.md +19495 -0
  105. package/docs/SESSION-LOG.md +940 -0
  106. package/docs/TOKEN-SYNC.md +237 -0
  107. package/docs/USING.ko.md +206 -0
  108. package/docs/USING.md +218 -0
  109. package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
  110. package/docs/WEBSITE-IMPROVEMENT.md +89 -0
  111. package/docs/announcements/README.md +56 -0
  112. package/docs/announcements/dev-to-korea.md +206 -0
  113. package/docs/announcements/hashnode-post.ko.md +232 -0
  114. package/docs/announcements/okky-post.ko.md +158 -0
  115. package/docs/announcements/press-kit.md +101 -0
  116. package/docs/announcements/reddit-r-korea.md +196 -0
  117. package/docs/announcements/show-hn.md +114 -0
  118. package/docs/announcements/twitter-thread.md +255 -0
  119. package/docs/external-status.md +34 -0
  120. package/docs/integrations/aider-walkthrough.ko.md +275 -0
  121. package/docs/integrations/aider-walkthrough.md +274 -0
  122. package/docs/integrations/codex-walkthrough.ko.md +297 -0
  123. package/docs/integrations/codex-walkthrough.md +297 -0
  124. package/docs/integrations/cursor-walkthrough.ko.md +281 -0
  125. package/docs/integrations/cursor-walkthrough.md +284 -0
  126. package/docs/integrations/design-ai-mcp-server.md +169 -0
  127. package/docs/integrations/figma-mcp.md +149 -0
  128. package/docs/integrations/github-mcp.md +178 -0
  129. package/docs/integrations/linear-mcp.md +215 -0
  130. package/docs/integrations/notion-mcp.md +174 -0
  131. package/docs/integrations/sdk-walkthrough.ko.md +375 -0
  132. package/docs/integrations/sdk-walkthrough.md +375 -0
  133. package/docs/integrations/slack-mcp.md +208 -0
  134. package/docs/integrations/vscode-walkthrough.ko.md +202 -0
  135. package/docs/integrations/vscode-walkthrough.md +205 -0
  136. package/docs/requirements.txt +16 -0
  137. package/docs/site-overrides/extra.css +83 -0
  138. package/docs/site-overrides/favicon.svg +4 -0
  139. package/docs/site-overrides/logo.svg +10 -0
  140. package/docs/site-overrides/main.html +18 -0
  141. package/docs/website-console/app.js +2540 -0
  142. package/docs/website-console/index.html +24 -0
  143. package/docs/website-console/styles.css +975 -0
  144. package/examples/README.md +252 -0
  145. package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
  146. package/examples/component-accordion-actions.md +153 -0
  147. package/examples/component-accordion-details.md +147 -0
  148. package/examples/component-accordion-summary.md +180 -0
  149. package/examples/component-accordion.md +229 -0
  150. package/examples/component-account-card.md +284 -0
  151. package/examples/component-address-input.md +260 -0
  152. package/examples/component-affix.md +190 -0
  153. package/examples/component-alert-dialog.md +210 -0
  154. package/examples/component-alert-title.md +77 -0
  155. package/examples/component-alert.md +192 -0
  156. package/examples/component-amount-input.md +278 -0
  157. package/examples/component-anchor.md +198 -0
  158. package/examples/component-app-bar.md +249 -0
  159. package/examples/component-aspect-ratio.md +156 -0
  160. package/examples/component-auto-complete.md +199 -0
  161. package/examples/component-avatar-group.md +170 -0
  162. package/examples/component-avatar.md +191 -0
  163. package/examples/component-back-top.md +123 -0
  164. package/examples/component-backdrop.md +148 -0
  165. package/examples/component-badge.md +181 -0
  166. package/examples/component-banner.md +237 -0
  167. package/examples/component-biometric-gate.md +281 -0
  168. package/examples/component-blockquote.md +153 -0
  169. package/examples/component-border-beam.md +207 -0
  170. package/examples/component-bottom-navigation.md +226 -0
  171. package/examples/component-box.md +112 -0
  172. package/examples/component-breadcrumb.md +222 -0
  173. package/examples/component-button-base.md +190 -0
  174. package/examples/component-button-group.md +117 -0
  175. package/examples/component-button.md +213 -0
  176. package/examples/component-calendar.md +280 -0
  177. package/examples/component-callout.md +131 -0
  178. package/examples/component-card-actions.md +101 -0
  179. package/examples/component-card-content.md +90 -0
  180. package/examples/component-card-header.md +122 -0
  181. package/examples/component-card-media.md +79 -0
  182. package/examples/component-card.md +233 -0
  183. package/examples/component-carousel.md +266 -0
  184. package/examples/component-cascader.md +135 -0
  185. package/examples/component-category-picker.md +271 -0
  186. package/examples/component-chart.md +237 -0
  187. package/examples/component-chat-interface.md +399 -0
  188. package/examples/component-checkbox.md +149 -0
  189. package/examples/component-click-away-listener.md +87 -0
  190. package/examples/component-code.md +213 -0
  191. package/examples/component-collapsible.md +219 -0
  192. package/examples/component-color-picker.md +110 -0
  193. package/examples/component-combobox.md +267 -0
  194. package/examples/component-command.md +299 -0
  195. package/examples/component-config-provider.md +190 -0
  196. package/examples/component-context-menu.md +179 -0
  197. package/examples/component-css-baseline.md +148 -0
  198. package/examples/component-date-picker.md +249 -0
  199. package/examples/component-descriptions.md +242 -0
  200. package/examples/component-dialog-actions.md +111 -0
  201. package/examples/component-dialog-content-text.md +76 -0
  202. package/examples/component-dialog-content.md +105 -0
  203. package/examples/component-dialog-title.md +104 -0
  204. package/examples/component-dialog.md +176 -0
  205. package/examples/component-divider.md +182 -0
  206. package/examples/component-doc-page.md +217 -0
  207. package/examples/component-drawer.md +257 -0
  208. package/examples/component-dropdown.md +220 -0
  209. package/examples/component-email-layout.md +253 -0
  210. package/examples/component-empty-state.md +269 -0
  211. package/examples/component-empty.md +172 -0
  212. package/examples/component-fade.md +87 -0
  213. package/examples/component-feature-grid.md +201 -0
  214. package/examples/component-field.md +266 -0
  215. package/examples/component-filled-input.md +114 -0
  216. package/examples/component-flex.md +117 -0
  217. package/examples/component-float-button.md +214 -0
  218. package/examples/component-form-control-label.md +134 -0
  219. package/examples/component-form-control.md +113 -0
  220. package/examples/component-form-controls.md +251 -0
  221. package/examples/component-form-group.md +86 -0
  222. package/examples/component-form-helper-text.md +95 -0
  223. package/examples/component-form-label.md +98 -0
  224. package/examples/component-form.md +291 -0
  225. package/examples/component-game-hud.md +362 -0
  226. package/examples/component-game-menu.md +327 -0
  227. package/examples/component-grid.md +140 -0
  228. package/examples/component-grow.md +79 -0
  229. package/examples/component-hero-block.md +252 -0
  230. package/examples/component-hover-card.md +211 -0
  231. package/examples/component-icon-button.md +142 -0
  232. package/examples/component-icon.md +102 -0
  233. package/examples/component-illustration.md +280 -0
  234. package/examples/component-image-list.md +107 -0
  235. package/examples/component-image.md +282 -0
  236. package/examples/component-input-adornment.md +101 -0
  237. package/examples/component-input-base.md +134 -0
  238. package/examples/component-input-number.md +141 -0
  239. package/examples/component-input-otp.md +271 -0
  240. package/examples/component-input.md +213 -0
  241. package/examples/component-item.md +243 -0
  242. package/examples/component-kbd.md +197 -0
  243. package/examples/component-krw-amount.md +219 -0
  244. package/examples/component-label.md +118 -0
  245. package/examples/component-layout.md +217 -0
  246. package/examples/component-link.md +223 -0
  247. package/examples/component-list-item-avatar.md +72 -0
  248. package/examples/component-list-item-button.md +139 -0
  249. package/examples/component-list-item-icon.md +82 -0
  250. package/examples/component-list-item-text.md +98 -0
  251. package/examples/component-list-item.md +116 -0
  252. package/examples/component-list-subheader.md +70 -0
  253. package/examples/component-list.md +198 -0
  254. package/examples/component-loading-button.md +125 -0
  255. package/examples/component-loading-sequence.md +254 -0
  256. package/examples/component-lottie-player.md +279 -0
  257. package/examples/component-masonry.md +191 -0
  258. package/examples/component-mentions.md +189 -0
  259. package/examples/component-menu-item.md +102 -0
  260. package/examples/component-menu-list.md +98 -0
  261. package/examples/component-menu.md +139 -0
  262. package/examples/component-menubar.md +259 -0
  263. package/examples/component-message.md +162 -0
  264. package/examples/component-mobile-stepper.md +155 -0
  265. package/examples/component-modal.md +220 -0
  266. package/examples/component-navigation-menu.md +295 -0
  267. package/examples/component-notification.md +166 -0
  268. package/examples/component-otp-countdown.md +245 -0
  269. package/examples/component-outlined-input.md +145 -0
  270. package/examples/component-page-transition.md +281 -0
  271. package/examples/component-pagination.md +226 -0
  272. package/examples/component-paper.md +199 -0
  273. package/examples/component-pass-auth.md +265 -0
  274. package/examples/component-payment-brand-button.md +253 -0
  275. package/examples/component-payment-method-selector.md +272 -0
  276. package/examples/component-payment-receipt.md +277 -0
  277. package/examples/component-popconfirm.md +144 -0
  278. package/examples/component-popover.md +239 -0
  279. package/examples/component-popper.md +129 -0
  280. package/examples/component-pricing-cards.md +247 -0
  281. package/examples/component-progress.md +195 -0
  282. package/examples/component-qr-code.md +201 -0
  283. package/examples/component-radio.md +167 -0
  284. package/examples/component-rate.md +202 -0
  285. package/examples/component-resizable.md +163 -0
  286. package/examples/component-result.md +270 -0
  287. package/examples/component-scroll-area.md +199 -0
  288. package/examples/component-scroll-reveal.md +320 -0
  289. package/examples/component-segmented.md +178 -0
  290. package/examples/component-select.md +258 -0
  291. package/examples/component-separator.md +177 -0
  292. package/examples/component-sheet.md +277 -0
  293. package/examples/component-sidebar.md +257 -0
  294. package/examples/component-skeleton.md +178 -0
  295. package/examples/component-slide.md +89 -0
  296. package/examples/component-slider.md +208 -0
  297. package/examples/component-snackbar-content.md +92 -0
  298. package/examples/component-snackbar.md +121 -0
  299. package/examples/component-sonner.md +165 -0
  300. package/examples/component-space.md +125 -0
  301. package/examples/component-spatial-locomotion.md +373 -0
  302. package/examples/component-spatial-panel.md +330 -0
  303. package/examples/component-speed-dial-action.md +78 -0
  304. package/examples/component-speed-dial.md +177 -0
  305. package/examples/component-spin.md +173 -0
  306. package/examples/component-spinner.md +204 -0
  307. package/examples/component-splitter.md +210 -0
  308. package/examples/component-stack.md +130 -0
  309. package/examples/component-statistic.md +282 -0
  310. package/examples/component-step-button.md +157 -0
  311. package/examples/component-step-connector.md +157 -0
  312. package/examples/component-step-content.md +121 -0
  313. package/examples/component-step-icon.md +115 -0
  314. package/examples/component-step-label.md +101 -0
  315. package/examples/component-step.md +84 -0
  316. package/examples/component-steps.md +264 -0
  317. package/examples/component-stock-chart.md +251 -0
  318. package/examples/component-swipeable-drawer.md +149 -0
  319. package/examples/component-switch.md +99 -0
  320. package/examples/component-tab-scroll-button.md +180 -0
  321. package/examples/component-tab.md +120 -0
  322. package/examples/component-table-body.md +82 -0
  323. package/examples/component-table-cell.md +118 -0
  324. package/examples/component-table-container.md +75 -0
  325. package/examples/component-table-footer.md +72 -0
  326. package/examples/component-table-head.md +78 -0
  327. package/examples/component-table-pagination.md +137 -0
  328. package/examples/component-table-row.md +113 -0
  329. package/examples/component-table-sort-label.md +109 -0
  330. package/examples/component-table.md +202 -0
  331. package/examples/component-tabs.md +184 -0
  332. package/examples/component-tag-badge.md +309 -0
  333. package/examples/component-tag.md +102 -0
  334. package/examples/component-testimonial-carousel.md +218 -0
  335. package/examples/component-textarea-autosize.md +114 -0
  336. package/examples/component-textarea.md +173 -0
  337. package/examples/component-time-picker.md +205 -0
  338. package/examples/component-timeline.md +170 -0
  339. package/examples/component-toast.md +224 -0
  340. package/examples/component-toggle-button.md +129 -0
  341. package/examples/component-toggle.md +220 -0
  342. package/examples/component-toolbar.md +104 -0
  343. package/examples/component-tooltip.md +178 -0
  344. package/examples/component-tour.md +176 -0
  345. package/examples/component-transaction-list-item.md +243 -0
  346. package/examples/component-transfer.md +156 -0
  347. package/examples/component-tree-select.md +202 -0
  348. package/examples/component-tree.md +297 -0
  349. package/examples/component-typography.md +215 -0
  350. package/examples/component-upload.md +295 -0
  351. package/examples/component-video-hero.md +409 -0
  352. package/examples/component-video-player.md +340 -0
  353. package/examples/component-voice-input.md +408 -0
  354. package/examples/component-watermark.md +217 -0
  355. package/examples/component-zoom.md +92 -0
  356. package/examples/doc-explanation-example.md +196 -0
  357. package/examples/doc-how-to-example.md +205 -0
  358. package/examples/doc-tutorial-example.md +162 -0
  359. package/examples/dogfood-korean-fintech-system.md +433 -0
  360. package/examples/email-transactional-example.md +259 -0
  361. package/examples/palette-saas-violet.md +235 -0
  362. package/examples/print-business-card-spec.md +205 -0
  363. package/examples/print-packaging-spec.md +285 -0
  364. package/examples/report-example.md +228 -0
  365. package/examples/slide-deck-example.md +237 -0
  366. package/examples/website-improvement-report.md +128 -0
  367. package/examples/website-improvement-workspace.json +126 -0
  368. package/install.sh +189 -0
  369. package/knowledge/COVERAGE.md +740 -0
  370. package/knowledge/PRINCIPLES.md +108 -0
  371. package/knowledge/a11y/contrast.md +70 -0
  372. package/knowledge/a11y/keyboard-and-focus.md +108 -0
  373. package/knowledge/colors/color-theory.md +90 -0
  374. package/knowledge/colors/mui-palette-structure.md +105 -0
  375. package/knowledge/colors/palettes-by-product-type.md +876 -0
  376. package/knowledge/components/INDEX.md +231 -0
  377. package/knowledge/components/index.json +1470 -0
  378. package/knowledge/components/shadcn-registry.md +159 -0
  379. package/knowledge/conversational/ai-chat-interfaces.md +323 -0
  380. package/knowledge/conversational/chatbot-design.md +312 -0
  381. package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
  382. package/knowledge/conversational/korean-voice-conventions.md +281 -0
  383. package/knowledge/conversational/voice-ui-patterns.md +297 -0
  384. package/knowledge/design-tokens/ant-design.md +124 -0
  385. package/knowledge/design-tokens/material-3.md +235 -0
  386. package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
  387. package/knowledge/design-tokens/tailwind-v4.md +284 -0
  388. package/knowledge/game-ui/game-accessibility.md +317 -0
  389. package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
  390. package/knowledge/game-ui/hud-design.md +324 -0
  391. package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
  392. package/knowledge/game-ui/menu-systems.md +388 -0
  393. package/knowledge/i18n/korean-app-store-visual.md +223 -0
  394. package/knowledge/i18n/korean-document-style.md +301 -0
  395. package/knowledge/i18n/korean-payments.md +211 -0
  396. package/knowledge/i18n/korean-product-conventions.md +96 -0
  397. package/knowledge/i18n/korean-publishing.md +139 -0
  398. package/knowledge/i18n/korean-typography.md +123 -0
  399. package/knowledge/icons/curated-sets.md +225 -0
  400. package/knowledge/illustration/hero-illustrations.md +234 -0
  401. package/knowledge/illustration/illustration-systems.md +221 -0
  402. package/knowledge/illustration/mascot-design.md +208 -0
  403. package/knowledge/illustration/spot-illustrations.md +246 -0
  404. package/knowledge/illustration/svg-optimization.md +308 -0
  405. package/knowledge/layout/spacing-and-grid.md +119 -0
  406. package/knowledge/motion/app-loading-sequences.md +277 -0
  407. package/knowledge/motion/choreography-depth.md +297 -0
  408. package/knowledge/motion/marketing-motion.md +223 -0
  409. package/knowledge/motion/micro-interactions.md +266 -0
  410. package/knowledge/motion/motion-tools.md +281 -0
  411. package/knowledge/motion/principles.md +126 -0
  412. package/knowledge/patterns/auth-flow-design.md +316 -0
  413. package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
  414. package/knowledge/patterns/brand-identity.md +238 -0
  415. package/knowledge/patterns/brand-references.md +97 -0
  416. package/knowledge/patterns/chart-color-encoding.md +269 -0
  417. package/knowledge/patterns/chart-types.md +344 -0
  418. package/knowledge/patterns/dashboard-composition.md +299 -0
  419. package/knowledge/patterns/design-system-qa.md +356 -0
  420. package/knowledge/patterns/document-typography.md +248 -0
  421. package/knowledge/patterns/email-design.md +338 -0
  422. package/knowledge/patterns/empty-states.md +263 -0
  423. package/knowledge/patterns/error-states.md +318 -0
  424. package/knowledge/patterns/form-design.md +237 -0
  425. package/knowledge/patterns/information-architecture.md +341 -0
  426. package/knowledge/patterns/landing-hero-design.md +283 -0
  427. package/knowledge/patterns/landing-page-patterns.md +681 -0
  428. package/knowledge/patterns/list-and-feed.md +371 -0
  429. package/knowledge/patterns/mobile-navigation.md +278 -0
  430. package/knowledge/patterns/money-and-amount.md +301 -0
  431. package/knowledge/patterns/onboarding.md +300 -0
  432. package/knowledge/patterns/pricing-page-design.md +261 -0
  433. package/knowledge/patterns/realtime-data.md +280 -0
  434. package/knowledge/patterns/report-design.md +330 -0
  435. package/knowledge/patterns/search-ux.md +373 -0
  436. package/knowledge/patterns/settings-page.md +325 -0
  437. package/knowledge/patterns/slide-deck-design.md +316 -0
  438. package/knowledge/patterns/styles-catalog.md +2599 -0
  439. package/knowledge/patterns/technical-writing.md +306 -0
  440. package/knowledge/patterns/ui-reasoning.md +1853 -0
  441. package/knowledge/patterns/ux-guidelines.md +1454 -0
  442. package/knowledge/platforms/react-native.md +395 -0
  443. package/knowledge/print/brochures-and-flyers.md +276 -0
  444. package/knowledge/print/korean-print-conventions.md +284 -0
  445. package/knowledge/print/packaging.md +321 -0
  446. package/knowledge/print/print-fundamentals.md +238 -0
  447. package/knowledge/print/signage-and-posters.md +235 -0
  448. package/knowledge/print/stationery.md +262 -0
  449. package/knowledge/spatial/ar-patterns.md +253 -0
  450. package/knowledge/spatial/comfort-and-accessibility.md +245 -0
  451. package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
  452. package/knowledge/spatial/spatial-ui-elements.md +343 -0
  453. package/knowledge/spatial/vr-patterns.md +302 -0
  454. package/knowledge/typography/font-pairings.md +332 -0
  455. package/knowledge/typography/mui-type-scale.md +57 -0
  456. package/knowledge/typography/type-scale-fundamentals.md +105 -0
  457. package/knowledge/video/in-product-video.md +277 -0
  458. package/knowledge/video/korean-video-conventions.md +247 -0
  459. package/knowledge/video/marketing-video.md +258 -0
  460. package/knowledge/video/social-and-short-form.md +257 -0
  461. package/knowledge/video/video-fundamentals.md +296 -0
  462. package/package.json +106 -0
  463. package/skills/README.md +39 -0
  464. package/skills/color-palette/PLAYBOOK.md +175 -0
  465. package/skills/color-palette/SKILL.md +6 -0
  466. package/skills/color-palette/TEMPLATE.md +103 -0
  467. package/skills/component-spec-writer/PLAYBOOK.md +169 -0
  468. package/skills/component-spec-writer/SKILL.md +6 -0
  469. package/skills/component-spec-writer/TEMPLATE.md +115 -0
  470. package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
  471. package/skills/conversational-ui-designer/SKILL.md +6 -0
  472. package/skills/design-broadcast/PLAYBOOK.md +146 -0
  473. package/skills/design-broadcast/SKILL.md +6 -0
  474. package/skills/design-critique/PLAYBOOK.md +137 -0
  475. package/skills/design-critique/SKILL.md +6 -0
  476. package/skills/design-pr-review/PLAYBOOK.md +171 -0
  477. package/skills/design-pr-review/SKILL.md +6 -0
  478. package/skills/design-system-builder/PLAYBOOK.md +218 -0
  479. package/skills/design-system-builder/SKILL.md +6 -0
  480. package/skills/design-system-qa/PLAYBOOK.md +163 -0
  481. package/skills/design-system-qa/SKILL.md +6 -0
  482. package/skills/document-author/PLAYBOOK.md +167 -0
  483. package/skills/document-author/SKILL.md +6 -0
  484. package/skills/figma-token-sync/PLAYBOOK.md +149 -0
  485. package/skills/figma-token-sync/SKILL.md +6 -0
  486. package/skills/game-ui-designer/PLAYBOOK.md +209 -0
  487. package/skills/game-ui-designer/SKILL.md +6 -0
  488. package/skills/handoff-spec/PLAYBOOK.md +170 -0
  489. package/skills/handoff-spec/SKILL.md +6 -0
  490. package/skills/illustration-designer/PLAYBOOK.md +166 -0
  491. package/skills/illustration-designer/SKILL.md +6 -0
  492. package/skills/motion-designer/PLAYBOOK.md +223 -0
  493. package/skills/motion-designer/SKILL.md +6 -0
  494. package/skills/print-designer/PLAYBOOK.md +209 -0
  495. package/skills/print-designer/SKILL.md +6 -0
  496. package/skills/slide-deck-author/PLAYBOOK.md +198 -0
  497. package/skills/slide-deck-author/SKILL.md +6 -0
  498. package/skills/spatial-designer/PLAYBOOK.md +238 -0
  499. package/skills/spatial-designer/SKILL.md +6 -0
  500. package/skills/ux-audit/PLAYBOOK.md +142 -0
  501. package/skills/ux-audit/SKILL.md +6 -0
  502. package/skills/video-designer/PLAYBOOK.md +240 -0
  503. package/skills/video-designer/SKILL.md +6 -0
  504. package/skills/website-improvement/PLAYBOOK.md +118 -0
  505. package/skills/website-improvement/SKILL.md +6 -0
  506. package/skills/website-improvement/TEMPLATE.md +103 -0
  507. package/tools/audit/changelog-generate.py +176 -0
  508. package/tools/audit/check-coverage.py +483 -0
  509. package/tools/audit/doctor_assertions.py +256 -0
  510. package/tools/audit/example-qa.py +108 -0
  511. package/tools/audit/frontmatter-check.py +199 -0
  512. package/tools/audit/integration-check.py +95 -0
  513. package/tools/audit/korean-copy-check.py +161 -0
  514. package/tools/audit/link-check.py +146 -0
  515. package/tools/audit/local-ci.py +558 -0
  516. package/tools/audit/package-contents.py +723 -0
  517. package/tools/audit/package-smoke.py +22443 -0
  518. package/tools/audit/raw-hex-check.py +252 -0
  519. package/tools/audit/registry-smoke.py +8188 -0
  520. package/tools/audit/release-metadata.py +9832 -0
  521. package/tools/audit/run-all.py +351 -0
  522. package/tools/audit/smoke_assertions.py +12742 -0
  523. package/tools/audit/stability-review.py +332 -0
  524. package/tools/audit/stale-check.py +156 -0
  525. package/tools/migrations/add-version-frontmatter.py +132 -0
  526. package/tools/migrations/bump-last-updated.py +131 -0
  527. package/tools/migrations/promote-stability.py +172 -0
  528. package/tools/preview/README.md +58 -0
  529. package/tools/preview/render-tokens.py +454 -0
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ // design-ai CLI — distribution entry point
3
+ //
4
+ // Commands:
5
+ // install Install design-ai into Claude Code (~/.claude)
6
+ // update [--dry-run] Update to latest design-ai (re-fetch + reinstall)
7
+ // uninstall Remove design-ai from Claude Code
8
+ // status Show what's installed
9
+ // list [domain] List skills / commands / knowledge (optionally filtered)
10
+ // search Search the local design-ai markdown corpus
11
+ // show Print a corpus file or line range
12
+ // route Recommend and explain commands, skills, and knowledge for a brief
13
+ // routes List available route ids
14
+ // prompt Generate a ready-to-use agent prompt from a brief
15
+ // pack Generate a prompt plus bounded context file contents
16
+ // audit Run repository quality checks
17
+ // check Check generated Markdown artifact quality
18
+ // doctor Diagnose source, runtime, and install state
19
+ // examples Find worked examples by query or route
20
+ // learn Manage local learning preferences for prompt personalization
21
+ // workspace Show read-only dogfood readiness: git, repository, learning usage/eval, release scripts
22
+ // Add --strict to fail on readiness warnings/failures
23
+ // site Validate Website Improvement Console exports and generate handoff artifacts
24
+ // version [--json] Show CLI + plugin versions
25
+ // help Show help
26
+
27
+ import { runCommand } from "../lib/dispatch.mjs";
28
+ import { red } from "../lib/log.mjs";
29
+
30
+ const args = process.argv.slice(2);
31
+ const command = args[0] || "help";
32
+ const restArgs = args.slice(1);
33
+
34
+ try {
35
+ await runCommand(command, restArgs);
36
+ } catch (err) {
37
+ console.error(`${red("✗")} ${err.message}`);
38
+ if (process.env.DEBUG) console.error(err.stack);
39
+ process.exit(1);
40
+ }
@@ -0,0 +1,111 @@
1
+ // `design-ai audit` — run the repository quality gate from the shipped CLI.
2
+
3
+ import path from "node:path";
4
+
5
+ import { run } from "../lib/exec.mjs";
6
+ import { REPOSITORY_AUDIT_SCRIPTS } from "../lib/doctor.mjs";
7
+ import { header, info } from "../lib/log.mjs";
8
+ import { DESIGN_AI_HOME, pathExists } from "../lib/paths.mjs";
9
+ import { unknownOptionMessage } from "../lib/suggest.mjs";
10
+
11
+ const AUDIT_RUNNER = path.join(DESIGN_AI_HOME, "tools", "audit", "run-all.py");
12
+ const AUDIT_OPTIONS = ["-h", "--help", "--strict", "--quiet", "--json"];
13
+ const AUDIT_USAGE = "Usage: design-ai audit [--strict] [--quiet] [--json]";
14
+ const AUDIT_HELP_LABEL_OVERRIDES = new Map([
15
+ ["korean-copy-check.py", "Korean copy"],
16
+ ["example-qa.py", "example QA"],
17
+ ]);
18
+
19
+ export function auditScriptLabel(script) {
20
+ if (AUDIT_HELP_LABEL_OVERRIDES.has(script)) {
21
+ return AUDIT_HELP_LABEL_OVERRIDES.get(script);
22
+ }
23
+
24
+ return script
25
+ .replace(/\.py$/, "")
26
+ .replace(/-check$/, "")
27
+ .replace(/^check-/, "")
28
+ .replaceAll("-", " ");
29
+ }
30
+
31
+ export function parseAuditArgs(args) {
32
+ const flags = {
33
+ help: false,
34
+ strict: false,
35
+ quiet: false,
36
+ json: false,
37
+ };
38
+
39
+ for (const arg of args) {
40
+ if (arg === "-h" || arg === "--help") {
41
+ flags.help = true;
42
+ continue;
43
+ }
44
+ if (arg === "--strict") {
45
+ flags.strict = true;
46
+ continue;
47
+ }
48
+ if (arg === "--quiet") {
49
+ flags.quiet = true;
50
+ continue;
51
+ }
52
+ if (arg === "--json") {
53
+ flags.json = true;
54
+ continue;
55
+ }
56
+ if (arg.startsWith("-")) {
57
+ throw new Error(
58
+ `${unknownOptionMessage("audit", arg, AUDIT_OPTIONS)}\n` +
59
+ AUDIT_USAGE
60
+ );
61
+ }
62
+ throw new Error(AUDIT_USAGE);
63
+ }
64
+
65
+ return {
66
+ ...flags,
67
+ runnerArgs: [
68
+ ...(flags.strict ? ["--strict"] : []),
69
+ ...(flags.quiet ? ["--quiet"] : []),
70
+ ...(flags.json ? ["--json"] : []),
71
+ ],
72
+ };
73
+ }
74
+
75
+ function printHelp() {
76
+ const auditLabels = REPOSITORY_AUDIT_SCRIPTS.map(auditScriptLabel).join(", ");
77
+
78
+ console.log("Usage: design-ai audit [--strict] [--quiet] [--json]\n");
79
+ console.log(`Runs the same ${REPOSITORY_AUDIT_SCRIPTS.length} repository audits used by CI:`);
80
+ console.log(` ${auditLabels}\n`);
81
+ console.log("Options:");
82
+ console.log(" --strict Exit non-zero when any supported audit fails");
83
+ console.log(" --quiet Print only failures and the final summary");
84
+ console.log(" --json Emit machine-readable audit results");
85
+ }
86
+
87
+ export async function runAudit(args) {
88
+ const parsed = parseAuditArgs(args);
89
+ if (parsed.help) {
90
+ printHelp();
91
+ return;
92
+ }
93
+
94
+ if (!pathExists(AUDIT_RUNNER)) {
95
+ throw new Error(
96
+ `Audit runner not found at ${AUDIT_RUNNER}.\n` +
97
+ "If installed via npm, this is a packaging bug. If running from a clone, ensure DESIGN_AI_HOME points at the repo root."
98
+ );
99
+ }
100
+
101
+ if (!parsed.json) {
102
+ header("design-ai audit", "Run repository quality checks");
103
+ info(`Source: ${DESIGN_AI_HOME}`);
104
+ info("Runner: tools/audit/run-all.py");
105
+ console.log();
106
+ }
107
+
108
+ await run("python3", [AUDIT_RUNNER, ...parsed.runnerArgs], {
109
+ cwd: DESIGN_AI_HOME,
110
+ });
111
+ }
@@ -0,0 +1,226 @@
1
+ // `design-ai check` — verify generated design artifacts against core output rules.
2
+
3
+ import { readFileSync } from "node:fs";
4
+ import path from "node:path";
5
+
6
+ import {
7
+ buildCheckLearningCapture,
8
+ checkAllExampleArtifacts,
9
+ checkArtifactContent,
10
+ checkExampleArtifacts,
11
+ formatCheckJson,
12
+ parseCheckArgs,
13
+ } from "../lib/check.mjs";
14
+ import { dim, error, header, info, red, success, warn } from "../lib/log.mjs";
15
+ import { DESIGN_AI_HOME } from "../lib/paths.mjs";
16
+
17
+ function printHelp() {
18
+ console.log("Usage: design-ai check <artifact.md> [--strict] [--json] [--route id] [--learn [--yes] [--learning-file path]]");
19
+ console.log(" cat artifact.md | design-ai check --stdin [--strict] [--route id] [--learn [--yes] [--learning-file path]]");
20
+ console.log(" design-ai check --examples --route id [--limit N] [--issues-only] [--strict] [--json]");
21
+ console.log(" design-ai check --examples --all-routes [--limit N] [--issues-only] [--strict] [--json]\n");
22
+ console.log("Checks generated design-ai Markdown artifacts for grounding, accessibility, responsive, unresolved-marker, and route-specific requirements.\n");
23
+ console.log("Options:");
24
+ console.log(" --stdin Read artifact Markdown from standard input");
25
+ console.log(" --examples Check worked examples for the selected route");
26
+ console.log(" --all-routes Check worked examples for every route");
27
+ console.log(" --route id Add route-specific checks such as component-spec, palette-from-brand, or slide-deck");
28
+ console.log(" --limit N Number of route examples to check, 1-25. Default: 3");
29
+ console.log(" --issues-only In human output, show only warnings and failures");
30
+ console.log(" --strict Treat warnings as a failing exit code");
31
+ console.log(" --learn Capture warning/failure checks as local learning entries");
32
+ console.log(" --yes Apply --learn entries instead of previewing them");
33
+ console.log(" --learning-file path Override the learning profile used by --learn");
34
+ console.log(" --json Emit machine-readable check results");
35
+ }
36
+
37
+ function mark(level) {
38
+ if (level === "pass") return "✓";
39
+ if (level === "warn") return "!";
40
+ return "✗";
41
+ }
42
+
43
+ function printResult(item) {
44
+ const line = `${mark(item.level)} ${item.title}: ${item.message}`;
45
+ if (item.level === "pass") {
46
+ success(line.slice(2));
47
+ } else if (item.level === "warn") {
48
+ warn(line.slice(2));
49
+ } else {
50
+ error(line.slice(2));
51
+ }
52
+ if (item.evidence) {
53
+ console.log(` ${dim(item.evidence)}`);
54
+ }
55
+ }
56
+
57
+ function printExampleResult(item) {
58
+ const { example, report } = item;
59
+ const title = `${example.relPath}: ${report.status} (${report.failures} fail, ${report.warnings} warn)`;
60
+ if (report.status === "pass") {
61
+ success(title);
62
+ } else if (report.status === "warn") {
63
+ warn(title);
64
+ } else {
65
+ error(title);
66
+ }
67
+
68
+ const notable = report.results.filter((resultItem) => resultItem.level !== "pass").slice(0, 3);
69
+ for (const resultItem of notable) {
70
+ console.log(` ${dim(`${resultItem.id}: ${resultItem.evidence || resultItem.message}`)}`);
71
+ }
72
+ }
73
+
74
+ function printRouteExampleSummary(routeReport, { issuesOnly = false } = {}) {
75
+ if (issuesOnly && routeReport.status === "pass") return;
76
+
77
+ const line = `${routeReport.routeId}: ${routeReport.status} (${routeReport.failed} fail, ${routeReport.warned} warn, ${routeReport.passed} pass)`;
78
+ if (routeReport.status === "pass") {
79
+ success(line);
80
+ } else if (routeReport.status === "warn") {
81
+ warn(line);
82
+ } else {
83
+ console.log(`${red("✗")} ${line}`);
84
+ }
85
+
86
+ const notable = routeReport.examples
87
+ .filter((item) => item.report.status !== "pass")
88
+ .slice(0, 1);
89
+ for (const item of notable) {
90
+ console.log(` ${dim(`${item.example.relPath}: ${item.report.status}`)}`);
91
+ const firstIssue = item.report.results.find((resultItem) => resultItem.level !== "pass");
92
+ if (firstIssue) {
93
+ console.log(` ${dim(`${firstIssue.id}: ${firstIssue.evidence || firstIssue.message}`)}`);
94
+ }
95
+ }
96
+ }
97
+
98
+ function printLearningCapture(capture) {
99
+ console.log();
100
+ console.log(capture.applied ? "Learning capture applied" : "Learning capture preview");
101
+ info(`File: ${capture.file}`);
102
+ info(`Source: ${capture.source}`);
103
+ info(`Candidates: ${capture.candidateCount}`);
104
+ info(`Added: ${capture.addedCount}`);
105
+ info(`Skipped: ${capture.skippedCount}`);
106
+ console.log();
107
+
108
+ if (capture.candidateCount === 0) {
109
+ console.log("No warning or failure check results to capture.");
110
+ return;
111
+ }
112
+
113
+ if (capture.entries.length > 0) {
114
+ console.log(capture.applied ? "Saved entries:" : "Would save:");
115
+ for (const entry of capture.entries) {
116
+ console.log(`- [${entry.category}] ${entry.text}`);
117
+ }
118
+ }
119
+
120
+ if (capture.skipped.length > 0) {
121
+ if (capture.entries.length > 0) console.log();
122
+ console.log("Skipped:");
123
+ for (const entry of capture.skipped) {
124
+ console.log(`- [${entry.category}] ${entry.textPreview} (${entry.reason})`);
125
+ }
126
+ }
127
+
128
+ if (capture.dryRun) {
129
+ console.log();
130
+ console.log("No changes made. Add --yes to save these learning entries.");
131
+ }
132
+ }
133
+
134
+ export async function runCheck(args) {
135
+ const parsed = parseCheckArgs(args);
136
+ if (parsed.help) {
137
+ printHelp();
138
+ return;
139
+ }
140
+
141
+ if (parsed.examples) {
142
+ const report = parsed.allRoutes
143
+ ? checkAllExampleArtifacts({
144
+ designAiPath: DESIGN_AI_HOME,
145
+ limit: parsed.limit,
146
+ })
147
+ : checkExampleArtifacts({
148
+ designAiPath: DESIGN_AI_HOME,
149
+ routeId: parsed.routeId,
150
+ limit: parsed.limit,
151
+ });
152
+
153
+ if (parsed.json) {
154
+ console.log(formatCheckJson(report));
155
+ } else if (parsed.allRoutes) {
156
+ header("design-ai check examples", "all routes");
157
+ info(`Source: ${DESIGN_AI_HOME}`);
158
+ info(`Status: ${report.status}`);
159
+ info(`Routes: ${report.totalRoutes} (${report.failedRoutes} fail, ${report.warnedRoutes} warn, ${report.passedRoutes} pass)`);
160
+ info(`Examples: ${report.totalExamples} (${report.failedExamples} fail, ${report.warnedExamples} warn, ${report.passedExamples} pass)`);
161
+ console.log();
162
+ for (const routeReport of report.routes) {
163
+ printRouteExampleSummary(routeReport, { issuesOnly: parsed.issuesOnly });
164
+ }
165
+ } else {
166
+ header("design-ai check examples", parsed.routeId);
167
+ info(`Source: ${DESIGN_AI_HOME}`);
168
+ info(`Query: ${report.query}`);
169
+ info(`Status: ${report.status}`);
170
+ info(`Examples: ${report.total} (${report.failed} fail, ${report.warned} warn, ${report.passed} pass)`);
171
+ if (report.message) info(report.message);
172
+ console.log();
173
+ const examplesToPrint = parsed.issuesOnly
174
+ ? report.examples.filter((item) => item.report.status !== "pass")
175
+ : report.examples;
176
+ for (const item of examplesToPrint) {
177
+ printExampleResult(item);
178
+ }
179
+ }
180
+
181
+ if (report.status === "fail" || (parsed.strict && report.status !== "pass")) {
182
+ process.exitCode = 1;
183
+ }
184
+ return;
185
+ }
186
+
187
+ if (!parsed.target && !parsed.stdin) {
188
+ printHelp();
189
+ process.exitCode = 1;
190
+ return;
191
+ }
192
+
193
+ const filePath = parsed.stdin ? "stdin" : path.resolve(process.cwd(), parsed.target);
194
+ const content = parsed.stdin ? readFileSync(0, "utf8") : readFileSync(filePath, "utf8");
195
+ const report = checkArtifactContent({ content, filePath, routeId: parsed.routeId });
196
+ const learningCapture = parsed.learn
197
+ ? buildCheckLearningCapture(report, {
198
+ filePath: parsed.learningFilePath ? path.resolve(process.cwd(), parsed.learningFilePath) : "",
199
+ dryRun: !parsed.yes,
200
+ })
201
+ : null;
202
+ const outputReport = learningCapture ? { ...report, learningCapture } : report;
203
+
204
+ if (parsed.json) {
205
+ console.log(formatCheckJson(outputReport));
206
+ } else {
207
+ header("design-ai check", parsed.stdin ? "stdin" : parsed.target);
208
+ if (parsed.routeId) info(`Route: ${parsed.routeId}`);
209
+ info(`Status: ${report.status}`);
210
+ info(`Score: ${report.score} (${report.failures} fail, ${report.warnings} warn)`);
211
+ console.log();
212
+ const resultsToPrint = parsed.issuesOnly
213
+ ? report.results.filter((item) => item.level !== "pass")
214
+ : report.results;
215
+ for (const item of resultsToPrint) {
216
+ printResult(item);
217
+ }
218
+ if (learningCapture) {
219
+ printLearningCapture(learningCapture);
220
+ }
221
+ }
222
+
223
+ if (report.status === "fail" || (parsed.strict && report.status !== "pass")) {
224
+ process.exitCode = 1;
225
+ }
226
+ }
@@ -0,0 +1,141 @@
1
+ // `design-ai doctor` — diagnose source, runtime, and Claude Code install state.
2
+
3
+ import { collectDoctorReport, formatDoctorJson, STATUS } from "../lib/doctor.mjs";
4
+ import { header, info, success, warn, error, dim } from "../lib/log.mjs";
5
+ import { run } from "../lib/exec.mjs";
6
+ import {
7
+ DESIGN_AI_HOME,
8
+ CLAUDE_HOME,
9
+ SYMLINK_PREFIX,
10
+ INSTALL_SCRIPT,
11
+ } from "../lib/paths.mjs";
12
+ import { unknownOptionMessage } from "../lib/suggest.mjs";
13
+
14
+ const DOCTOR_OPTIONS = ["-h", "--help", "--strict", "--json", "--fix"];
15
+ const ALLOWED_ARGS = new Set(["--strict", "--json", "--fix"]);
16
+
17
+ function normalizeArgs(args) {
18
+ const flags = {
19
+ strict: false,
20
+ json: false,
21
+ fix: false,
22
+ help: false,
23
+ };
24
+
25
+ for (const arg of args) {
26
+ if (arg === "-h" || arg === "--help") {
27
+ flags.help = true;
28
+ continue;
29
+ }
30
+ if (!ALLOWED_ARGS.has(arg)) {
31
+ throw new Error(
32
+ `${unknownOptionMessage("doctor", arg, DOCTOR_OPTIONS)}\n` +
33
+ "Usage: design-ai doctor [--strict] [--json] [--fix]",
34
+ );
35
+ }
36
+ if (arg === "--strict") flags.strict = true;
37
+ if (arg === "--json") flags.json = true;
38
+ if (arg === "--fix") flags.fix = true;
39
+ }
40
+
41
+ return flags;
42
+ }
43
+
44
+ function printHelp() {
45
+ console.log("Usage: design-ai doctor [--strict] [--json] [--fix]\n");
46
+ console.log("Checks source layout, versions, runtimes, audit tooling, and Claude Code symlinks.\n");
47
+ console.log("Options:");
48
+ console.log(" --strict Exit non-zero when warnings are present");
49
+ console.log(" --json Emit machine-readable diagnostics");
50
+ console.log(" --fix Re-run install.sh when diagnostics show only fixable warnings");
51
+ }
52
+
53
+ function printCheck(check) {
54
+ const line = `${check.label}: ${check.detail}`;
55
+ if (check.status === STATUS.PASS) {
56
+ success(line);
57
+ } else if (check.status === STATUS.WARN) {
58
+ warn(line);
59
+ } else {
60
+ error(line);
61
+ }
62
+
63
+ if (check.action) {
64
+ console.log(` ${dim(check.action)}`);
65
+ }
66
+ }
67
+
68
+ async function applyFix() {
69
+ await run("bash", [INSTALL_SCRIPT, "install"], {
70
+ cwd: DESIGN_AI_HOME,
71
+ silent: true,
72
+ env: {
73
+ DESIGN_AI_PREFIX: SYMLINK_PREFIX,
74
+ CLAUDE_HOME,
75
+ },
76
+ });
77
+ }
78
+
79
+ function printReport(report) {
80
+ header("design-ai doctor", "Diagnose install and runtime health");
81
+ info(`Source: ${report.context.sourceRoot}`);
82
+ info(`Target: ${report.context.claudeHome}`);
83
+ info(`Prefix: ${report.context.prefix}`);
84
+ console.log();
85
+
86
+ for (const check of report.checks) {
87
+ printCheck(check);
88
+ }
89
+
90
+ console.log();
91
+ info(
92
+ `Summary: ${report.summary.pass} pass, ${report.summary.warn} warning(s), ${report.summary.fail} failure(s)`,
93
+ );
94
+ }
95
+
96
+ export async function runDoctor(args) {
97
+ const flags = normalizeArgs(args);
98
+ if (flags.help) {
99
+ printHelp();
100
+ return;
101
+ }
102
+
103
+ const before = collectDoctorReport();
104
+ let report = before;
105
+ let fix = {
106
+ attempted: false,
107
+ applied: false,
108
+ reason: "",
109
+ };
110
+
111
+ if (flags.fix) {
112
+ fix.attempted = true;
113
+ if (before.summary.fail > 0) {
114
+ fix.reason = "Skipped because diagnostics contain failure(s) that require manual review.";
115
+ } else if (before.summary.warn === 0) {
116
+ fix.reason = "Skipped because no fixable warnings were found.";
117
+ } else {
118
+ await applyFix();
119
+ fix.applied = true;
120
+ fix.reason = "Ran install.sh to refresh Claude Code symlinks.";
121
+ report = collectDoctorReport();
122
+ }
123
+ }
124
+
125
+ if (flags.json) {
126
+ console.log(formatDoctorJson({ ...report, fix }));
127
+ } else {
128
+ printReport(report);
129
+ if (flags.fix) {
130
+ if (fix.applied) {
131
+ success(`Fix applied: ${fix.reason}`);
132
+ } else {
133
+ warn(`Fix not applied: ${fix.reason}`);
134
+ }
135
+ }
136
+ }
137
+
138
+ if (report.summary.fail > 0 || (flags.strict && report.summary.warn > 0)) {
139
+ process.exitCode = 1;
140
+ }
141
+ }
@@ -0,0 +1,58 @@
1
+ // `design-ai examples` — discover worked examples for a route or query.
2
+
3
+ import { DESIGN_AI_HOME } from "../lib/paths.mjs";
4
+ import { dim, header, info, warn } from "../lib/log.mjs";
5
+ import { formatExamplesJson, listExamples, parseExamplesArgs } from "../lib/examples.mjs";
6
+
7
+ function printHelp() {
8
+ console.log("Usage: design-ai examples [query] [--route id] [--limit N] [--json]\n");
9
+ console.log("Finds worked outputs in examples/ so users can compare against known-good design-ai artifacts.\n");
10
+ console.log("Options:");
11
+ console.log(" --route id Bias example search to a route id from `design-ai routes`");
12
+ console.log(" --limit N Maximum examples to return, 1-100. Default: 12");
13
+ console.log(" --json Emit machine-readable results");
14
+ }
15
+
16
+ function printExamples(examples) {
17
+ for (let i = 0; i < examples.length; i += 1) {
18
+ const example = examples[i];
19
+ console.log(`${i + 1}. ${example.title} ${dim(`(${example.category}, score ${example.score})`)}`);
20
+ console.log(` ${example.relPath}`);
21
+ if (example.preview) {
22
+ console.log(` ${dim(example.preview)}`);
23
+ }
24
+ }
25
+ }
26
+
27
+ export async function runExamples(args) {
28
+ const parsed = parseExamplesArgs(args);
29
+ if (parsed.help) {
30
+ printHelp();
31
+ return;
32
+ }
33
+
34
+ const payload = listExamples({
35
+ designAiPath: DESIGN_AI_HOME,
36
+ query: parsed.query,
37
+ routeId: parsed.routeId,
38
+ limit: parsed.limit,
39
+ });
40
+
41
+ if (parsed.json) {
42
+ console.log(formatExamplesJson(payload));
43
+ return;
44
+ }
45
+
46
+ header("design-ai examples", parsed.routeId || parsed.query || "all");
47
+ info(`Source: ${DESIGN_AI_HOME}`);
48
+ info(`Effective query: ${payload.effectiveQuery || "(none)"}`);
49
+ info(`Examples: ${payload.examples.length}`);
50
+ console.log();
51
+
52
+ if (payload.examples.length === 0) {
53
+ warn("No examples found.");
54
+ return;
55
+ }
56
+
57
+ printExamples(payload.examples);
58
+ }