@monkey-mini-app/dsh-mini-app 0.1.0 → 0.1.4

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 (317) hide show
  1. package/README.md +59 -0
  2. package/assets/apps-list.png +0 -0
  3. package/assets/complex-demo-app.png +0 -0
  4. package/assets/demo-app.png +0 -0
  5. package/assets/home.png +0 -0
  6. package/assets/sidebar-mode.png +0 -0
  7. package/lib/client.js +2024 -783
  8. package/lib/index.d.ts +5 -2
  9. package/lib/index.js +29 -16
  10. package/package.json +12 -10
  11. package/skills/monkey-mini-app/SKILL.md +182 -106
  12. package/skills/monkey-mini-app/references/catalog.md +236 -99
  13. package/skills/monkey-mini-app/references/contracts/accordion.md +30 -0
  14. package/skills/monkey-mini-app/references/contracts/activity-feed.md +12 -2
  15. package/skills/monkey-mini-app/references/contracts/alert-dialog.md +38 -0
  16. package/skills/monkey-mini-app/references/contracts/alert.md +38 -0
  17. package/skills/monkey-mini-app/references/contracts/app-shell.md +2 -2
  18. package/skills/monkey-mini-app/references/contracts/aspect-ratio.md +25 -0
  19. package/skills/monkey-mini-app/references/contracts/attachment-gallery.md +12 -2
  20. package/skills/monkey-mini-app/references/contracts/attachment.md +35 -0
  21. package/skills/monkey-mini-app/references/contracts/autocomplete.md +12 -2
  22. package/skills/monkey-mini-app/references/contracts/avatar.md +24 -0
  23. package/skills/monkey-mini-app/references/contracts/badge.md +26 -0
  24. package/skills/monkey-mini-app/references/contracts/breadcrumb.md +33 -0
  25. package/skills/monkey-mini-app/references/contracts/bubble.md +30 -0
  26. package/skills/monkey-mini-app/references/contracts/button-group.md +36 -0
  27. package/skills/monkey-mini-app/references/contracts/button.md +26 -0
  28. package/skills/monkey-mini-app/references/contracts/calendar.md +20 -0
  29. package/skills/monkey-mini-app/references/contracts/card.md +41 -0
  30. package/skills/monkey-mini-app/references/contracts/cascader.md +12 -2
  31. package/skills/monkey-mini-app/references/contracts/chart.md +32 -0
  32. package/skills/monkey-mini-app/references/contracts/checkbox.md +19 -0
  33. package/skills/monkey-mini-app/references/contracts/code-block.md +20 -2
  34. package/skills/monkey-mini-app/references/contracts/code-editor.md +30 -4
  35. package/skills/monkey-mini-app/references/contracts/collapsible.md +21 -0
  36. package/skills/monkey-mini-app/references/contracts/color-picker.md +12 -2
  37. package/skills/monkey-mini-app/references/contracts/combobox.md +34 -0
  38. package/skills/monkey-mini-app/references/contracts/command.md +41 -0
  39. package/skills/monkey-mini-app/references/contracts/comment-thread.md +12 -2
  40. package/skills/monkey-mini-app/references/contracts/commit-graph.md +50 -0
  41. package/skills/monkey-mini-app/references/contracts/confirm-dialog.md +20 -2
  42. package/skills/monkey-mini-app/references/contracts/context-menu.md +41 -0
  43. package/skills/monkey-mini-app/references/contracts/copyable.md +12 -2
  44. package/skills/monkey-mini-app/references/contracts/currency-input.md +12 -2
  45. package/skills/monkey-mini-app/references/contracts/dashboard-shell.md +41 -0
  46. package/skills/monkey-mini-app/references/contracts/data-grid.md +13 -6
  47. package/skills/monkey-mini-app/references/contracts/date-picker.md +20 -2
  48. package/skills/monkey-mini-app/references/contracts/date-range-picker.md +10 -2
  49. package/skills/monkey-mini-app/references/contracts/date-time-picker.md +20 -2
  50. package/skills/monkey-mini-app/references/contracts/date-time-range-picker.md +20 -2
  51. package/skills/monkey-mini-app/references/contracts/description-list.md +12 -2
  52. package/skills/monkey-mini-app/references/contracts/detail-panel.md +10 -2
  53. package/skills/monkey-mini-app/references/contracts/dialog.md +44 -0
  54. package/skills/monkey-mini-app/references/contracts/diff-viewer.md +21 -2
  55. package/skills/monkey-mini-app/references/contracts/donut-chart.md +14 -2
  56. package/skills/monkey-mini-app/references/contracts/drawer.md +29 -0
  57. package/skills/monkey-mini-app/references/contracts/dropdown-menu.md +49 -0
  58. package/skills/monkey-mini-app/references/contracts/duration-input.md +20 -2
  59. package/skills/monkey-mini-app/references/contracts/empty.md +40 -0
  60. package/skills/monkey-mini-app/references/contracts/env-badge.md +12 -2
  61. package/skills/monkey-mini-app/references/contracts/env-table.md +46 -0
  62. package/skills/monkey-mini-app/references/contracts/event-calendar.md +28 -20
  63. package/skills/monkey-mini-app/references/contracts/field.md +34 -0
  64. package/skills/monkey-mini-app/references/contracts/file-dropzone.md +20 -2
  65. package/skills/monkey-mini-app/references/contracts/file-tree.md +12 -2
  66. package/skills/monkey-mini-app/references/contracts/filter-bar.md +2 -2
  67. package/skills/monkey-mini-app/references/contracts/form-sheet.md +51 -0
  68. package/skills/monkey-mini-app/references/contracts/gantt.md +20 -2
  69. package/skills/monkey-mini-app/references/contracts/gauge.md +14 -2
  70. package/skills/monkey-mini-app/references/contracts/hover-card.md +21 -0
  71. package/skills/monkey-mini-app/references/contracts/input-group.md +24 -0
  72. package/skills/monkey-mini-app/references/contracts/input.md +33 -0
  73. package/skills/monkey-mini-app/references/contracts/item.md +36 -0
  74. package/skills/monkey-mini-app/references/contracts/jira-wiki.md +3 -4
  75. package/skills/monkey-mini-app/references/contracts/jql-input.md +15 -8
  76. package/skills/monkey-mini-app/references/contracts/json-viewer.md +20 -2
  77. package/skills/monkey-mini-app/references/contracts/kanban-issue-panel.md +12 -2
  78. package/skills/monkey-mini-app/references/contracts/kanban.md +10 -2
  79. package/skills/monkey-mini-app/references/contracts/kbd.md +20 -0
  80. package/skills/monkey-mini-app/references/contracts/label.md +33 -0
  81. package/skills/monkey-mini-app/references/contracts/list-detail.md +46 -0
  82. package/skills/monkey-mini-app/references/contracts/log-viewer.md +45 -4
  83. package/skills/monkey-mini-app/references/contracts/markdown-editor.md +20 -2
  84. package/skills/monkey-mini-app/references/contracts/markdown.md +12 -2
  85. package/skills/monkey-mini-app/references/contracts/marker.md +30 -0
  86. package/skills/monkey-mini-app/references/contracts/menubar.md +34 -0
  87. package/skills/monkey-mini-app/references/contracts/message-scroller.md +24 -0
  88. package/skills/monkey-mini-app/references/contracts/message.md +24 -0
  89. package/skills/monkey-mini-app/references/contracts/mini-calendar.md +20 -2
  90. package/skills/monkey-mini-app/references/contracts/native-select.md +21 -0
  91. package/skills/monkey-mini-app/references/contracts/navigation-menu.md +27 -0
  92. package/skills/monkey-mini-app/references/contracts/notification-center.md +12 -2
  93. package/skills/monkey-mini-app/references/contracts/number-field.md +20 -2
  94. package/skills/monkey-mini-app/references/contracts/page-header.md +2 -2
  95. package/skills/monkey-mini-app/references/contracts/pagination.md +33 -0
  96. package/skills/monkey-mini-app/references/contracts/password-field.md +12 -2
  97. package/skills/monkey-mini-app/references/contracts/phone-input.md +12 -2
  98. package/skills/monkey-mini-app/references/contracts/popover.md +32 -0
  99. package/skills/monkey-mini-app/references/contracts/progress-ring.md +14 -2
  100. package/skills/monkey-mini-app/references/contracts/progress.md +39 -0
  101. package/skills/monkey-mini-app/references/contracts/questionnaire.md +33 -0
  102. package/skills/monkey-mini-app/references/contracts/radar-chart.md +14 -2
  103. package/skills/monkey-mini-app/references/contracts/radio-group.md +20 -0
  104. package/skills/monkey-mini-app/references/contracts/rating.md +12 -2
  105. package/skills/monkey-mini-app/references/contracts/relative-date-picker.md +20 -2
  106. package/skills/monkey-mini-app/references/contracts/request-inspector.md +12 -2
  107. package/skills/monkey-mini-app/references/contracts/resizable.md +29 -0
  108. package/skills/monkey-mini-app/references/contracts/reveal.md +31 -0
  109. package/skills/monkey-mini-app/references/contracts/rich-text-editor.md +14 -2
  110. package/skills/monkey-mini-app/references/contracts/run-timeline.md +20 -2
  111. package/skills/monkey-mini-app/references/contracts/scroll-area.md +20 -0
  112. package/skills/monkey-mini-app/references/contracts/scrollspy.md +20 -2
  113. package/skills/monkey-mini-app/references/contracts/search-input.md +12 -2
  114. package/skills/monkey-mini-app/references/contracts/select.md +36 -0
  115. package/skills/monkey-mini-app/references/contracts/separator.md +27 -0
  116. package/skills/monkey-mini-app/references/contracts/settings-split.md +53 -0
  117. package/skills/monkey-mini-app/references/contracts/severity-chip.md +12 -2
  118. package/skills/monkey-mini-app/references/contracts/sheet.md +34 -0
  119. package/skills/monkey-mini-app/references/contracts/sidebar.md +42 -0
  120. package/skills/monkey-mini-app/references/contracts/skeleton.md +33 -0
  121. package/skills/monkey-mini-app/references/contracts/slider-range.md +12 -2
  122. package/skills/monkey-mini-app/references/contracts/slider.md +25 -0
  123. package/skills/monkey-mini-app/references/contracts/sortable-list.md +20 -2
  124. package/skills/monkey-mini-app/references/contracts/sparkline.md +13 -2
  125. package/skills/monkey-mini-app/references/contracts/spinner.md +31 -0
  126. package/skills/monkey-mini-app/references/contracts/stacked-bar-chart.md +17 -2
  127. package/skills/monkey-mini-app/references/contracts/stat-card.md +2 -2
  128. package/skills/monkey-mini-app/references/contracts/status-badge.md +2 -2
  129. package/skills/monkey-mini-app/references/contracts/stepper-item.md +39 -0
  130. package/skills/monkey-mini-app/references/contracts/stepper.md +38 -11
  131. package/skills/monkey-mini-app/references/contracts/switch.md +25 -0
  132. package/skills/monkey-mini-app/references/contracts/table-page.md +41 -0
  133. package/skills/monkey-mini-app/references/contracts/table.md +42 -0
  134. package/skills/monkey-mini-app/references/contracts/tabs.md +31 -0
  135. package/skills/monkey-mini-app/references/contracts/tag-input.md +12 -2
  136. package/skills/monkey-mini-app/references/contracts/terminal.md +13 -2
  137. package/skills/monkey-mini-app/references/contracts/test-step-list.md +12 -2
  138. package/skills/monkey-mini-app/references/contracts/textarea.md +25 -0
  139. package/skills/monkey-mini-app/references/contracts/time-picker.md +18 -2
  140. package/skills/monkey-mini-app/references/contracts/time-range-picker.md +20 -2
  141. package/skills/monkey-mini-app/references/contracts/time-wheel.md +6 -2
  142. package/skills/monkey-mini-app/references/contracts/timeline.md +20 -2
  143. package/skills/monkey-mini-app/references/contracts/timezone-select.md +20 -2
  144. package/skills/monkey-mini-app/references/contracts/toast.md +39 -0
  145. package/skills/monkey-mini-app/references/contracts/toggle-group.md +28 -0
  146. package/skills/monkey-mini-app/references/contracts/toggle.md +26 -0
  147. package/skills/monkey-mini-app/references/contracts/tooltip.md +30 -0
  148. package/skills/monkey-mini-app/references/contracts/transfer.md +12 -2
  149. package/skills/monkey-mini-app/references/contracts/tree-view.md +20 -2
  150. package/skills/monkey-mini-app/references/contracts/trend-card.md +12 -2
  151. package/skills/monkey-mini-app/references/contracts/user-picker.md +12 -2
  152. package/skills/monkey-mini-app/references/contracts/wizard-shell.md +56 -0
  153. package/skills/monkey-mini-app/references/ctx.md +123 -53
  154. package/skills/monkey-mini-app/references/eval.md +115 -0
  155. package/skills/monkey-mini-app/references/examples/alert/alert-01.tsx +17 -0
  156. package/skills/monkey-mini-app/references/examples/aspect-ratio/aspect-ratio-01.tsx +16 -0
  157. package/skills/monkey-mini-app/references/examples/attachment/attachment-01.tsx +19 -0
  158. package/skills/monkey-mini-app/references/examples/breadcrumb/breadcrumb-01.tsx +31 -0
  159. package/skills/monkey-mini-app/references/examples/bubble/bubble-01.tsx +16 -0
  160. package/skills/monkey-mini-app/references/examples/button-group/button-group-01.tsx +23 -0
  161. package/skills/monkey-mini-app/references/examples/card/card-01.tsx +19 -0
  162. package/skills/monkey-mini-app/references/examples/charts-blocks.md +15 -0
  163. package/skills/monkey-mini-app/references/examples/code-block/code-block-01.tsx +14 -0
  164. package/skills/monkey-mini-app/references/examples/code-editor/code-editor-01.tsx +15 -0
  165. package/skills/monkey-mini-app/references/examples/command/command-01.tsx +30 -0
  166. package/skills/monkey-mini-app/references/examples/confirm-dialog/confirm-dialog-01.tsx +33 -0
  167. package/skills/monkey-mini-app/references/examples/context-menu/context-menu-01.tsx +29 -0
  168. package/skills/monkey-mini-app/references/examples/dashboard-shell/dashboard-shell-01.tsx +78 -0
  169. package/skills/monkey-mini-app/references/examples/data-grid/data-grid-01.tsx +34 -0
  170. package/skills/monkey-mini-app/references/examples/data-grid/data-grid-02.tsx +88 -0
  171. package/skills/monkey-mini-app/references/examples/date-picker/date-picker-01.tsx +14 -0
  172. package/skills/monkey-mini-app/references/examples/date-range-picker/date-range-picker-01.tsx +14 -0
  173. package/skills/monkey-mini-app/references/examples/date-time-picker/date-time-picker-01.tsx +16 -0
  174. package/skills/monkey-mini-app/references/examples/date-time-range-picker/date-time-range-picker-01.tsx +15 -0
  175. package/skills/monkey-mini-app/references/examples/detail-panel/detail-panel-01.tsx +21 -0
  176. package/skills/monkey-mini-app/references/examples/dialog/dialog-01.tsx +30 -0
  177. package/skills/monkey-mini-app/references/examples/diff-viewer/diff-viewer-01.tsx +10 -0
  178. package/skills/monkey-mini-app/references/examples/dropdown-menu/dropdown-menu-01.tsx +31 -0
  179. package/skills/monkey-mini-app/references/examples/duration-input/duration-input-01.tsx +20 -0
  180. package/skills/monkey-mini-app/references/examples/editors.md +11 -0
  181. package/skills/monkey-mini-app/references/examples/empty/empty-01.tsx +19 -0
  182. package/skills/monkey-mini-app/references/examples/event-calendar/event-calendar-01.tsx +53 -0
  183. package/skills/monkey-mini-app/references/examples/file-dropzone/file-dropzone-01.tsx +14 -0
  184. package/skills/monkey-mini-app/references/examples/form-sheet/form-sheet-01.tsx +85 -0
  185. package/skills/monkey-mini-app/references/examples/forms.md +16 -0
  186. package/skills/monkey-mini-app/references/examples/gantt/gantt-01.tsx +29 -0
  187. package/skills/monkey-mini-app/references/examples/input/input-01.tsx +10 -0
  188. package/skills/monkey-mini-app/references/examples/item/item-01.tsx +19 -0
  189. package/skills/monkey-mini-app/references/examples/jql-input/jql-input-01.tsx +33 -0
  190. package/skills/monkey-mini-app/references/examples/json-viewer/json-viewer-01.tsx +10 -0
  191. package/skills/monkey-mini-app/references/examples/kanban/kanban-01.tsx +60 -0
  192. package/skills/monkey-mini-app/references/examples/label/label-01.tsx +10 -0
  193. package/skills/monkey-mini-app/references/examples/list-detail/list-detail-01.tsx +117 -0
  194. package/skills/monkey-mini-app/references/examples/log-viewer/log-viewer-01.tsx +20 -0
  195. package/skills/monkey-mini-app/references/examples/markdown-editor/markdown-editor-01.tsx +18 -0
  196. package/skills/monkey-mini-app/references/examples/marker/marker-01.tsx +16 -0
  197. package/skills/monkey-mini-app/references/examples/mini-calendar/mini-calendar-01.tsx +14 -0
  198. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-01.tsx +20 -0
  199. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-02.tsx +32 -0
  200. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-03.tsx +47 -0
  201. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-04.tsx +20 -0
  202. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-05.tsx +24 -0
  203. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-06.tsx +89 -0
  204. package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-01.tsx +114 -0
  205. package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-02.tsx +33 -0
  206. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-01.tsx +22 -0
  207. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-02.tsx +37 -0
  208. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-03.tsx +42 -0
  209. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-04.tsx +25 -0
  210. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-05.tsx +27 -0
  211. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-06.tsx +33 -0
  212. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-07.tsx +44 -0
  213. package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-01.tsx +43 -0
  214. package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-02.tsx +38 -0
  215. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-01.tsx +21 -0
  216. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-02.tsx +52 -0
  217. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-03.tsx +44 -0
  218. package/skills/monkey-mini-app/references/examples/number-field/number-field-01.tsx +22 -0
  219. package/skills/monkey-mini-app/references/examples/overlays.md +11 -0
  220. package/skills/monkey-mini-app/references/examples/pagination/pagination-01.tsx +51 -0
  221. package/skills/monkey-mini-app/references/examples/primitives.md +12 -0
  222. package/skills/monkey-mini-app/references/examples/progress/progress-01.tsx +10 -0
  223. package/skills/monkey-mini-app/references/examples/relative-date-picker/relative-date-picker-01.tsx +19 -0
  224. package/skills/monkey-mini-app/references/examples/rich-text-editor/rich-text-editor-01.tsx +15 -0
  225. package/skills/monkey-mini-app/references/examples/run-timeline/run-timeline-01.tsx +17 -0
  226. package/skills/monkey-mini-app/references/examples/scrollspy/scrollspy-01.tsx +29 -0
  227. package/skills/monkey-mini-app/references/examples/separator/separator-01.tsx +10 -0
  228. package/skills/monkey-mini-app/references/examples/settings-split/settings-split-01.tsx +84 -0
  229. package/skills/monkey-mini-app/references/examples/shared/jira-wiki-sample.ts +38 -0
  230. package/skills/monkey-mini-app/references/examples/skeleton/skeleton-01.tsx +10 -0
  231. package/skills/monkey-mini-app/references/examples/slider/slider-01.tsx +22 -0
  232. package/skills/monkey-mini-app/references/examples/sortable-list/sortable-list-01.tsx +18 -0
  233. package/skills/monkey-mini-app/references/examples/spinner/spinner-01.tsx +10 -0
  234. package/skills/monkey-mini-app/references/examples/stepper/stepper-01.tsx +41 -0
  235. package/skills/monkey-mini-app/references/examples/table/table-01.tsx +25 -0
  236. package/skills/monkey-mini-app/references/examples/table-page/table-page-01.tsx +103 -0
  237. package/skills/monkey-mini-app/references/examples/time-picker/time-picker-01.tsx +19 -0
  238. package/skills/monkey-mini-app/references/examples/time-range-picker/time-range-picker-01.tsx +14 -0
  239. package/skills/monkey-mini-app/references/examples/timeline/timeline-01.tsx +18 -0
  240. package/skills/monkey-mini-app/references/examples/timezone-select/timezone-select-01.tsx +15 -0
  241. package/skills/monkey-mini-app/references/examples/toggle/toggle-01.tsx +20 -0
  242. package/skills/monkey-mini-app/references/examples/toggle-group/toggle-group-01.tsx +22 -0
  243. package/skills/monkey-mini-app/references/examples/tree-view/tree-view-01.tsx +25 -0
  244. package/skills/monkey-mini-app/references/examples/wizard-shell/wizard-shell-01.tsx +58 -0
  245. package/skills/monkey-mini-app/references/history.md +23 -7
  246. package/skills/monkey-mini-app/references/icons.md +99 -69
  247. package/skills/monkey-mini-app/references/llm-json.md +39 -26
  248. package/skills/monkey-mini-app/references/loader.md +47 -20
  249. package/skills/monkey-mini-app/references/looks/aurora-bento.md +88 -0
  250. package/skills/monkey-mini-app/references/looks/desk-split.md +89 -0
  251. package/skills/monkey-mini-app/references/looks/editorial.md +78 -0
  252. package/skills/monkey-mini-app/references/looks/glass-island.md +90 -0
  253. package/skills/monkey-mini-app/references/looks/index.md +18 -0
  254. package/skills/monkey-mini-app/references/looks/signage.md +74 -0
  255. package/skills/monkey-mini-app/references/looks/tape.md +22 -0
  256. package/skills/monkey-mini-app/references/looks/terminal.md +88 -0
  257. package/skills/monkey-mini-app/references/looks/void.md +22 -0
  258. package/skills/monkey-mini-app/references/styling.md +189 -0
  259. package/skills/monkey-mini-app/references/test.md +12 -12
  260. package/skills/monkey-mini-app/references/theme.md +197 -0
  261. package/skills/monkey-mini-app/references/tools.md +12 -12
  262. package/skills/monkey-mini-app/references/troubleshoot.md +165 -12
  263. package/skills/monkey-mini-app/templates/README.md +33 -21
  264. package/skills/monkey-mini-app/templates/{jira → board}/main.api.ts +11 -11
  265. package/skills/monkey-mini-app/templates/board/manifest.json +8 -0
  266. package/skills/monkey-mini-app/templates/board/theme.css +46 -0
  267. package/skills/monkey-mini-app/templates/board/ui.tsx +546 -0
  268. package/skills/monkey-mini-app/templates/chores/main.api.ts +35 -0
  269. package/skills/monkey-mini-app/templates/chores/manifest.json +8 -0
  270. package/skills/monkey-mini-app/templates/chores/theme.css +46 -0
  271. package/skills/monkey-mini-app/templates/chores/ui.tsx +117 -0
  272. package/skills/monkey-mini-app/templates/minimal/main.api.ts +5 -5
  273. package/skills/monkey-mini-app/templates/minimal/manifest.json +1 -2
  274. package/skills/monkey-mini-app/templates/minimal/ui.tsx +17 -8
  275. package/skills/monkey-mini-app/templates/radar/api/scan.ts +79 -0
  276. package/skills/monkey-mini-app/templates/radar/main.api.ts +29 -0
  277. package/skills/monkey-mini-app/templates/radar/manifest.json +8 -0
  278. package/skills/monkey-mini-app/templates/radar/shared/events.ts +25 -0
  279. package/skills/monkey-mini-app/templates/{insights/lib → radar/shared}/sample.ts +1 -1
  280. package/skills/monkey-mini-app/templates/radar/theme.css +47 -0
  281. package/skills/monkey-mini-app/templates/radar/ui/brief.tsx +31 -0
  282. package/skills/monkey-mini-app/templates/radar/ui.tsx +131 -0
  283. package/skills/monkey-mini-app/templates/runner/main.api.ts +91 -0
  284. package/skills/monkey-mini-app/templates/runner/manifest.json +8 -0
  285. package/skills/monkey-mini-app/templates/runner/shared/events.ts +14 -0
  286. package/skills/monkey-mini-app/templates/runner/theme.css +46 -0
  287. package/skills/monkey-mini-app/templates/runner/ui.tsx +213 -0
  288. package/skills/monkey-mini-app/templates/sheets/main.api.ts +276 -0
  289. package/skills/monkey-mini-app/templates/sheets/manifest.json +8 -0
  290. package/skills/monkey-mini-app/templates/sheets/theme.css +46 -0
  291. package/skills/monkey-mini-app/templates/sheets/ui.tsx +419 -0
  292. package/skills/monkey-mini-app/templates/{todo → today}/main.api.ts +8 -8
  293. package/skills/monkey-mini-app/templates/today/manifest.json +8 -0
  294. package/skills/monkey-mini-app/templates/today/theme.css +45 -0
  295. package/skills/monkey-mini-app/templates/today/ui/item-row.tsx +25 -0
  296. package/skills/monkey-mini-app/templates/today/ui.tsx +406 -0
  297. package/skills/monkey-mini-app/templates/{monitor → watch}/main.api.ts +8 -8
  298. package/skills/monkey-mini-app/templates/watch/manifest.json +8 -0
  299. package/skills/monkey-mini-app/templates/watch/ui.tsx +187 -0
  300. package/skills/monkey-mini-app/tsconfig.json +31 -0
  301. package/skills/monkey-mini-app/types/cdn.d.ts +1 -0
  302. package/tsup.config.ts +1 -0
  303. package/skills/monkey-mini-app/templates/agentrun/main.api.ts +0 -78
  304. package/skills/monkey-mini-app/templates/agentrun/manifest.json +0 -9
  305. package/skills/monkey-mini-app/templates/agentrun/ui.tsx +0 -125
  306. package/skills/monkey-mini-app/templates/insights/main.api.ts +0 -101
  307. package/skills/monkey-mini-app/templates/insights/manifest.json +0 -9
  308. package/skills/monkey-mini-app/templates/insights/ui.tsx +0 -138
  309. package/skills/monkey-mini-app/templates/jira/manifest.json +0 -9
  310. package/skills/monkey-mini-app/templates/jira/ui.tsx +0 -318
  311. package/skills/monkey-mini-app/templates/monitor/manifest.json +0 -9
  312. package/skills/monkey-mini-app/templates/monitor/ui.tsx +0 -176
  313. package/skills/monkey-mini-app/templates/review/main.api.ts +0 -68
  314. package/skills/monkey-mini-app/templates/review/manifest.json +0 -9
  315. package/skills/monkey-mini-app/templates/review/ui.tsx +0 -159
  316. package/skills/monkey-mini-app/templates/todo/manifest.json +0 -8
  317. package/skills/monkey-mini-app/templates/todo/ui.tsx +0 -177
@@ -0,0 +1,90 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Glass Island
4
+
5
+ Also known as `玻璃岛屿` (sample product copy).
6
+
7
+ id: `glass-island` · grammar: `poster-dock`
8
+
9
+ **When:** Personal home, lock-screen style one-shot. Liquid glass islands float on a haze sky; the working set is a soft card below.
10
+
11
+ **Not:** Launchers, DataGrid, incident walls. Not a 2D mosaic. Not wall-to-wall glass.
12
+
13
+ **How to copy it:** Liquid glass (SVG displacement + blur), not frost. `backdrop-filter: blur(2px) saturate(160%) url(#mma-liquid)` with feTurbulence→blur→displace (scale ~45, yChannel=B). Light ground is haze-grey + white + a whisper of blue with large floating orbs — not a saturated sky; dark is deep indigo. Sky needs grain + orb edges or the lens bends nothing. Only the island cluster is liquid; the working set is a soft card so the sky still frames the cluster (wall-to-wall glass is why the facade used to look nothing like the prototype). Radius is large (`--radius: 28px`) on the style object. Non-Chromium falls back to frost. Host bakes local theme.css vars into `/app/:id` first paint so the look is not near-white while mma-set-env is in flight.
14
+
15
+ ## Style (inline — Tailwind drops multi-layer shadows)
16
+
17
+ ```tsx
18
+ const GLASS = {
19
+ "borderRadius": "var(--radius)",
20
+ "backgroundColor": "color-mix(in oklch, var(--card) 14%, transparent)",
21
+ "boxShadow": "inset 0 1px 0 card/60, inset 0 -1px 0 card/22, inset 0 0 24px card/14, 0 14px 36px -10px var(--shadow)",
22
+ "border": "1px solid color-mix(in oklch, var(--card) 28%, transparent)",
23
+ "backdropFilter": "blur(2px) saturate(160%) url(#mma-liquid) /* Chromium; frost fallback otherwise */"
24
+ } as const;
25
+ ```
26
+
27
+ ## Classes (copy literals)
28
+
29
+ - `root`: `bg-background relative flex h-full min-h-0 flex-col gap-3 overflow-hidden p-5`
30
+ - `wash`: `pointer-events-none absolute inset-0 (multi-hue soft orbs + grain — see facade)`
31
+ - `cluster`: `relative mx-auto flex h-full min-h-0 w-full max-w-5xl flex-col gap-3`
32
+ - `island`: `liquid glass style object (radius var(--radius), blur+saturate+url(#mma-liquid))`
33
+ - `work`: `soft card surface — NOT liquid glass (keeps sky around the cluster)`
34
+
35
+ ## Palette (optional `theme.css` in the app dir)
36
+
37
+ This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
38
+ makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
39
+ pick a host palette. Omit the file to follow the host palette instead.
40
+
41
+ ```css
42
+ /* name: 玻璃岛屿 */
43
+ /* Light: haze grey-blue a step deeper than pure fog, white glass, soft floating orbs that
44
+ actually read. Dark: deep indigo. Radius large for liquid glass on big panes. */
45
+ :root[data-mode="light"] {
46
+ --bg: #d5e0ed;
47
+ --fg: #243044;
48
+ --surface: #ffffff;
49
+ --surface-fg: #243044;
50
+ --border: #c2d0e0;
51
+ --muted: #c8d5e6;
52
+ --muted-fg: #5a6b80;
53
+ --primary: #6b8ab8;
54
+ --primary-fg: #ffffff;
55
+ --secondary: #d0dbe8;
56
+ --secondary-fg: #243044;
57
+ --accent: #e4ebf4;
58
+ --accent-fg: #243044;
59
+ --destructive: #c63f4f;
60
+ --destructive-fg: #ffffff;
61
+ --ring: #6b8ab8;
62
+ --input: #b8c8da;
63
+ --radius: 28px;
64
+ --shadow: rgba(60, 85, 120, 0.18);
65
+ }
66
+ :root[data-mode="dark"] {
67
+ --bg: #0e1128;
68
+ --fg: #e9edff;
69
+ --surface: #21264c;
70
+ --surface-fg: #e9edff;
71
+ --border: #2e3566;
72
+ --muted: #1d2046;
73
+ --muted-fg: #a3b0e6;
74
+ --primary: #8b94fa;
75
+ --primary-fg: #12142c;
76
+ --secondary: #232757;
77
+ --secondary-fg: #e9edff;
78
+ --accent: #1d2046;
79
+ --accent-fg: #e9edff;
80
+ --destructive: #f97066;
81
+ --destructive-fg: #20120d;
82
+ --ring: #8b94fa;
83
+ --input: #2e3566;
84
+ --radius: 28px;
85
+ --shadow: rgba(0, 4, 24, 0.66);
86
+ }
87
+ ```
88
+
89
+
90
+ Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
@@ -0,0 +1,18 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Looks
4
+
5
+ Recommended visual recipes (colour intent + layout grammar + surface). **Not apps.**
6
+ Pick a facade first. Open a Look only when the user names a style.
7
+ No kit API — copy the class literals. Light and dark are a pair (live fixture + theme.css, not image previews).
8
+
9
+ | id | name | when | default facade |
10
+ |---|---|---|---|
11
+ | [`glass-island`](./glass-island.md) | Glass Island (`玻璃岛屿`) | Personal home, lock-screen style one-shot. Liquid glass islands float on a haze sky; the working set is a soft card below. | `today` |
12
+ | [`aurora-bento`](./aurora-bento.md) | Aurora Bento (`极光便当`) | Launcher / overview. The page is a 6×3 tessellation, every cell a destination. | `board` |
13
+ | [`desk-split`](./desk-split.md) | Desk Split (`精致分栏`) | CRUD, tickets, contacts, ledgers. Two panes, hairline, dense toolbar. | `sheets` |
14
+ | [`editorial`](./editorial.md) | Editorial (`编辑排版`) | Weekly digest, insights, runbook, help. Type hierarchy, hairline rules, almost no cards. | `radar` |
15
+ | [`tape`](./tape.md) | Tape (`行情带`) | Watch board, quotes, incident strip. Tabular numerals, vertical rules, colour = delta only. | `watch` |
16
+ | [`void`](./void.md) | Void (`黑空`) | Named 'premium / sparse / AI product'. Huge type, one hairline, almost empty. | — |
17
+ | [`signage`](./signage.md) | Signage (`霓虹招牌`) | Named cyberpunk / neon. Display type, chroma wash, caption columns — not glow cards. | — |
18
+ | [`terminal`](./terminal.md) | Terminal (`终端等宽`) | Logs, agent progress, a command well. Mono rows, lamps, colour = state. | `runner`, `chores` |
@@ -0,0 +1,74 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Signage
4
+
5
+ Also known as `霓虹招牌` (sample product copy).
6
+
7
+ id: `signage` · grammar: `display-type`
8
+
9
+ **When:** Named cyberpunk / neon. Display type, chroma wash, caption columns — not glow cards.
10
+
11
+ **Not:** A dark dashboard with extra shadow. Opt-in only.
12
+
13
+
14
+ ## Classes (copy literals)
15
+
16
+ - `root`: `relative h-full min-h-0 overflow-hidden bg-background p-6`
17
+ - `wash`: `pointer-events-none absolute inset-0 bg-[radial-gradient(420px_180px_at_90%_10%,color-mix(in_oklch,var(--primary)_28%,transparent),transparent_62%)]`
18
+ - `display`: `text-4xl font-bold tracking-tight leading-[0.95]`
19
+
20
+ ## Palette (optional `theme.css` in the app dir)
21
+
22
+ This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
23
+ makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
24
+ pick a host palette. Omit the file to follow the host palette instead.
25
+
26
+ ```css
27
+ /* name: 霓虹招牌 */
28
+ /* Look-owned palette: the chroma IS the style. ui.tsx still never contains a hex. */
29
+ :root[data-mode="light"] {
30
+ --bg: #f6effa;
31
+ --fg: #1a1020;
32
+ --surface: #ffffff;
33
+ --surface-fg: #1a1020;
34
+ --border: #e2d3ea;
35
+ --muted: #efe4f5;
36
+ --muted-fg: #5f4a6b;
37
+ --primary: #b3128a;
38
+ --primary-fg: #ffffff;
39
+ --secondary: #efe4f5;
40
+ --secondary-fg: #1a1020;
41
+ --accent: #f6e9fb;
42
+ --accent-fg: #1a1020;
43
+ --destructive: #c02626;
44
+ --destructive-fg: #ffffff;
45
+ --ring: #b3128a;
46
+ --input: #e2d3ea;
47
+ --radius: 14px;
48
+ --shadow: rgba(60, 20, 70, 0.12);
49
+ }
50
+ :root[data-mode="dark"] {
51
+ --bg: #0a0614;
52
+ --fg: #f6ecff;
53
+ --surface: #150b26;
54
+ --surface-fg: #f6ecff;
55
+ --border: #2e1b45;
56
+ --muted: #1c1030;
57
+ --muted-fg: #a98fc4;
58
+ --primary: #ff2ea6;
59
+ --primary-fg: #12031a;
60
+ --secondary: #1c1030;
61
+ --secondary-fg: #f6ecff;
62
+ --accent: #241036;
63
+ --accent-fg: #f6ecff;
64
+ --destructive: #ff5c5c;
65
+ --destructive-fg: #12031a;
66
+ --ring: #ff2ea6;
67
+ --input: #2e1b45;
68
+ --radius: 14px;
69
+ --shadow: rgba(0, 0, 0, 0.6);
70
+ }
71
+ ```
72
+
73
+
74
+ Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
@@ -0,0 +1,22 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Tape
4
+
5
+ Also known as `行情带` (sample product copy).
6
+
7
+ id: `tape` · grammar: `numeral-strip`
8
+
9
+ **When:** Watch board, quotes, incident strip. Tabular numerals, vertical rules, colour = delta only.
10
+
11
+ **Not:** Homes, forms. No graph-paper grid, no card chrome.
12
+
13
+
14
+ ## Classes (copy literals)
15
+
16
+ - `root`: `h-full min-h-0 bg-background font-mono`
17
+ - `nums`: `grid grid-cols-4 divide-x divide-border`
18
+ - `num`: `px-4 py-5 text-3xl font-medium tracking-tight tabular-nums`
19
+
20
+ This look follows the host palette on purpose — no `theme.css`.
21
+
22
+ Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
@@ -0,0 +1,88 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Terminal
4
+
5
+ Also known as `终端等宽` (sample product copy).
6
+
7
+ id: `terminal` · grammar: `mono-well`
8
+
9
+ **When:** Logs, agent progress, a command well. Mono rows, lamps, colour = state.
10
+
11
+ **Not:** Long-form reading.
12
+
13
+ **How to copy it:** Phosphor-on-black CRT is the identity (green #3dff6e on #060904 in dark; a paper well with deep green ink in light). The Terminal block defaults to hard zinc-950 — override it with `bg-card text-card-foreground` (the app-side Tailwind theme has no `--color-surface`; use card tokens) or a host swap washes the well out (templates ship this look's theme.css for that reason). Scanlines + vignette sell the CRT; they live on an aria-hidden pointer-events-none overlay so they never eat clicks. Radius squared (8px): rounds read as a chat app, not a console. Colour = state, nothing else.
14
+
15
+ ## Style (inline — Tailwind drops multi-layer shadows)
16
+
17
+ ```tsx
18
+ const GLASS = {
19
+ "well": {
20
+ "className": "rounded-lg border bg-card text-card-foreground",
21
+ "textShadow": "0 0 6px color-mix(in oklch, var(--primary) 65%, transparent)",
22
+ "overlay": "repeating-linear-gradient(0deg, foreground 7% hairlines every 3px) + radial corner vignette"
23
+ }
24
+ } as const;
25
+ ```
26
+
27
+ ## Classes (copy literals)
28
+
29
+ - `root`: `flex h-full min-h-0 flex-col bg-background`
30
+ - `well`: `min-h-0 flex-1 overflow-auto`
31
+
32
+ ## Palette (optional `theme.css` in the app dir)
33
+
34
+ This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
35
+ makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
36
+ pick a host palette. Omit the file to follow the host palette instead.
37
+
38
+ ```css
39
+ /* name: 终端等宽 */
40
+ /* Look-owned palette: phosphor-on-black CRT is the identity — a host palette would turn the
41
+ well pink. Light mode is a paper well with deep green ink; dark is near-black with green
42
+ phosphor (#3dff6e). Radius is squared: rounds read as "chat app", not as a console. */
43
+ :root[data-mode="light"] {
44
+ --bg: #ecefe4;
45
+ --fg: #12290f;
46
+ --surface: #f7faf1;
47
+ --surface-fg: #12290f;
48
+ --border: #ccd5c0;
49
+ --muted: #dfe6d4;
50
+ --muted-fg: #4c5f44;
51
+ --primary: #157a24;
52
+ --primary-fg: #ffffff;
53
+ --secondary: #dfe6d4;
54
+ --secondary-fg: #12290f;
55
+ --accent: #e2ecd6;
56
+ --accent-fg: #12290f;
57
+ --destructive: #b42318;
58
+ --destructive-fg: #ffffff;
59
+ --ring: #157a24;
60
+ --input: #ccd5c0;
61
+ --radius: 8px;
62
+ --shadow: rgba(20, 40, 25, 0.12);
63
+ }
64
+ :root[data-mode="dark"] {
65
+ --bg: #0a0d08;
66
+ --fg: #3dff6e;
67
+ --surface: #060904;
68
+ --surface-fg: #3dff6e;
69
+ --border: #1d2a18;
70
+ --muted: #10180d;
71
+ --muted-fg: #5f8a55;
72
+ --primary: #3dff6e;
73
+ --primary-fg: #0a0d08;
74
+ --secondary: #10180d;
75
+ --secondary-fg: #3dff6e;
76
+ --accent: #12200f;
77
+ --accent-fg: #3dff6e;
78
+ --destructive: #ff5341;
79
+ --destructive-fg: #0a0d08;
80
+ --ring: #3dff6e;
81
+ --input: #1d2a18;
82
+ --radius: 8px;
83
+ --shadow: rgba(0, 0, 0, 0.55);
84
+ }
85
+ ```
86
+
87
+
88
+ Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
@@ -0,0 +1,22 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Void
4
+
5
+ Also known as `黑空` (sample product copy).
6
+
7
+ id: `void` · grammar: `sparse-hero`
8
+
9
+ **When:** Named 'premium / sparse / AI product'. Huge type, one hairline, almost empty.
10
+
11
+ **Not:** Dense tables, watch boards. Opt-in only.
12
+
13
+
14
+ ## Classes (copy literals)
15
+
16
+ - `root`: `flex h-full min-h-0 flex-col justify-center px-8 py-10`
17
+ - `display`: `max-w-[12ch] text-4xl font-medium tracking-tight`
18
+ - `hair`: `mt-6 h-px w-28 bg-linear-to-r from-foreground to-transparent`
19
+
20
+ This look follows the host palette on purpose — no `theme.css`.
21
+
22
+ Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
@@ -0,0 +1,189 @@
1
+ # Styling a mini-app
2
+
3
+ Two things are decided for you and cannot be changed: **Tailwind is compiled per app at
4
+ reload time**, and **colours come from theme tokens**. Everything below follows from that.
5
+
6
+ **Reload ↔ CSS contract:** every `mini_app_reload` drops the in-memory app CSS memo
7
+ (`caches.appCss: "dropped"`). The tool also defaults to `cleanCaches: true`, which deletes
8
+ `.autogen/ui.css` so a stale sheet cannot survive on disk either. You do not need a second
9
+ "clear CSS" step — if a class is missing after a green reload, the class was never in source
10
+ (dynamic string) or the panel never re-fetched (`caches.views`).
11
+
12
+ ## Tailwind is real JIT over your own source — not a fixed safelist
13
+
14
+ The host runs Tailwind v4 against the app directory on every compile
15
+ (`@import "tailwindcss" source(none)` + `@source` globs over your `.ts`/`.tsx`), and serves
16
+ the result as the app's own stylesheet next to the shared base. So the answer to "is this
17
+ class available?" is:
18
+
19
+ | You write | Works? | Why |
20
+ |---|---|---|
21
+ | `hover:bg-muted` `group-hover:opacity-100` `focus-visible:ring-2` | ✅ | variants are generated from your source |
22
+ | `md:grid-cols-3` `dark:border` | ✅ | responsive + the host's `dark` class |
23
+ | `bg-rose-500` `text-emerald-300` | ✅ | the default palette is emitted with the sheet |
24
+ | `w-[437px]` `grid-cols-[1fr_auto]` `top-[7px]` | ✅ | arbitrary values are compiled like any other class |
25
+ | `bg-card text-muted-foreground` | ✅ | semantic tokens → [theme.md](theme.md) |
26
+ | `` className={`bg-${c}-500`} `` | ❌ **silently** | see below |
27
+
28
+ **The one real trap: class names must appear as complete literals in your source.**
29
+ Tailwind reads source text, it does not evaluate your template strings. A composed name
30
+ produces no CSS and no error — the element just renders unstyled, which is how "my class
31
+ did not work" usually turns out to be a build-time string problem.
32
+
33
+ ```tsx
34
+ // ✗ no CSS is generated for the composed names
35
+ <span className={`bg-${tone}-100 text-${tone}-700`} />
36
+
37
+ // ✓ literal, one branch per case
38
+ const map = {
39
+ ok: "bg-emerald-100 text-emerald-700",
40
+ warn: "bg-amber-100 text-amber-700",
41
+ bad: "bg-rose-100 text-rose-700",
42
+ } as const;
43
+ <span className={map[tone]} />
44
+ ```
45
+
46
+ Because of this, **do not fall back to inline `style` "to be safe"**. That is strictly
47
+ worse: you lose variants, dark mode, and the theme tokens, and you gain nothing — arbitrary
48
+ values and variants already compile.
49
+
50
+ ## Colour: tokens, not literals
51
+
52
+ Never hardcode hex. The user picks a palette in the panel and the host rewrites the token
53
+ values under `<html>`; a literal colour sits outside that system and looks broken in dark
54
+ mode. Full table → **[theme.md](theme.md)** (generated from the real stylesheet).
55
+
56
+ ```tsx
57
+ // ✗ follows no palette
58
+ <div style={{ background: "#0b1220", color: "#e2e8f0" }}>
59
+
60
+ // ✓ adapts to mode and palette
61
+ <div className="bg-card text-card-foreground">
62
+ ```
63
+
64
+ Raw `var(--token)` is correct only where a utility cannot reach: SVG `fill`/`stroke`,
65
+ gradients, `color-mix()`, or a colour you hand to a chart component.
66
+
67
+ ```tsx
68
+ <svg><path fill="var(--primary)" /></svg>
69
+ ```
70
+
71
+ The accent colour for SVG is `--primary`; `Illu*` illustrations already map themselves.
72
+
73
+ ## Layout
74
+
75
+ There is no `Stack` / `Text` / `Box` component — layout is Tailwind classes on plain
76
+ elements or on a component's `className` (every component takes `className` and `style`).
77
+
78
+ ```tsx
79
+ <div className="flex flex-col gap-3 p-4 w-full">
80
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">…</div>
81
+ </div>
82
+ ```
83
+
84
+ The iframe fills its panel and the app scrolls inside it, so size against the viewport
85
+ (`h-full`, `min-h-0`, `overflow-auto`) rather than a fixed pixel height.
86
+
87
+ ## Custom host theme (only when the user asks)
88
+
89
+ Do **not** put hex in `ui.tsx`. If the user wants a named / branded palette, write a
90
+ **host-global** file — contract and skeleton are generated in [theme.md](theme.md)
91
+ (*Custom host theme file*). `mini_app_edit` cannot write it (outside the app dir).
92
+
93
+ Light and dark are a **pair**, not two independent palettes. Worked example:
94
+ `docs/assets/themes/theme-crimson.css` (same hue family, not an invert).
95
+
96
+ 1. **One hue family, two densities.** Do not invert (`#f7f2f1` → a cold `#080d0e`).
97
+ 2. **Contrast first.** `fg` on `bg`, `surface-fg` on `surface`, `primary-fg` on `primary`,
98
+ `muted-fg` on both `muted` and `bg` must all read.
99
+ 3. **Dark is not dimmer light.** Drop `bg` / `surface` to a near-black of the same hue;
100
+ **lift** `primary` chroma (`crimson` light `#c0392b` → dark `#ff5c4d`). `primary-fg`
101
+ flips with the new primary.
102
+ 4. **Elevation.** `surface` a step above `bg`; `border` visible on both; `shadow` stronger in dark.
103
+ 5. **Destructive stays a distinct red** even if the brand hue is already red.
104
+ 6. **Monochrome / graphite.** `primary` is a mid grey, not blue. Do not ship only
105
+ `#000` / `#fff` — `muted` / `border` / `surface` need room.
106
+ 7. **No second accent hue** unless asked. `accent` is a wash of `primary`.
107
+ 8. **Verify both modes** in the panel theme pop after writing. A file that only looks right in dark has failed.
108
+
109
+ ## Animation
110
+
111
+ The platform ships [motion](https://motion.dev) in the iframe — one build at
112
+ `/mma/vendors/motion.js`, sharing the same React as the kit. It is not an npm install and
113
+ not a kit re-export; you write the package name you already know:
114
+
115
+ ```tsx
116
+ import { motion, AnimatePresence } from "motion/react";
117
+ ```
118
+
119
+ Pick by how much you actually need:
120
+
121
+ | You want | Use |
122
+ |---|---|
123
+ | A hover / press / colour change on one property | Tailwind `transition duration-200 ease-out` — no motion |
124
+ | A card or row **entering** (fade + rise, staggered) | `<Reveal delay={i * 60}>` from the kit |
125
+ | Exit animation, or a list where rows come and go | `AnimatePresence` + `motion.div` with `initial` / `animate` / `exit` |
126
+ | Something that moves to a new position (layout shift) | `motion.div layout` |
127
+ | A looping decorative effect (shimmer, pulse) | Tailwind `animate-pulse` / `animate-spin` first; `motion` `animate={{ … , transition: { repeat: Infinity } }}` if that is not enough |
128
+
129
+ ```tsx
130
+ // rows that leave without popping out of existence
131
+ <AnimatePresence initial={false}>
132
+ {items.map((it, i) => (
133
+ <motion.div
134
+ key={it.id}
135
+ initial={{ opacity: 0, y: 8 }}
136
+ animate={{ opacity: 1, y: 0 }}
137
+ exit={{ opacity: 0, y: -8 }}
138
+ transition={{ delay: i * 0.04 }}
139
+ >
140
+ <Card>{it.title}</Card>
141
+ </motion.div>
142
+ ))}
143
+ </AnimatePresence>
144
+ ```
145
+
146
+ Rules that keep this from breaking:
147
+
148
+ - **Keyframe names are global inside one app document.** Each mini-app runs in its own
149
+ iframe, so your keyframes cannot affect another app — but two of *your* components can
150
+ fight over one name, and whichever mounts last wins for both. That is a real, silent bug:
151
+ one dashboard declared `@keyframes soft-pulse` twice with different opacity values, and
152
+ whichever panel opened later changed the other's animation.
153
+ - **Prefer a name the platform does not already use.** The host's own sheet defines
154
+ `spin`, `ping`, `pulse`, `enter`, `exit`, `accordion-down`, `accordion-up`,
155
+ `scroll-fade-reveal-*`, `tw-shimmer` and `mma-dot`. Declaring one of those overrides it
156
+ for the whole app. The reload check reports a clash as a **notice** and the app still
157
+ loads — overriding deliberately is allowed, being unaware of it is what gets you.
158
+ - **Don't mix** an injected `animation` with `animate-in` / `fill-mode-both` on the same
159
+ element — they fight over `opacity`.
160
+ - `motion` is **UI only**. `main.api.ts` has no React, so `import … from "motion"` there
161
+ fails with `BACKEND_IMPORT`.
162
+ - Respect the OS setting: `useReducedMotion()` from `motion/react` before animating
163
+ position. (Kit `Reveal` already does this.)
164
+ - Colour still comes from tokens. Animate `opacity` / `transform`, and use theme vars
165
+ (`var(--primary)`) rather than hex inside a keyframe. → [theme.md](theme.md)
166
+ - Do not `mini_app_install` `motion` or `framer-motion` — the host rejects them, because a
167
+ second copy means a second React.
168
+
169
+ ```tsx
170
+ /* ✓ your own name, so nothing else in this document is sharing it */
171
+ <style>{`@keyframes ledger-row-in { from { opacity: 0; transform: translateY(6px) } }`}</style>
172
+
173
+ /* ✗ silently redefines Tailwind's spin for every animate-spin in the app */
174
+ <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>
175
+ ```
176
+
177
+ ## What is actually on disk
178
+
179
+ `.autogen/` inside an app holds the generated Tailwind output. It is overwritten on the
180
+ next compile — never edit it, and never import from it.
181
+
182
+ ## Checklist
183
+
184
+ - [ ] every class name is a complete literal in the source (no `` `bg-${x}-500` ``)
185
+ - [ ] no hex / rgb literals for themeable colour — tokens only
186
+ - [ ] sized against the viewport, not a fixed height
187
+ - [ ] animations use `motion` / kit `Reveal`, or a Tailwind transition — and any custom
188
+ `@keyframes` has a name the platform sheet does not already define → *Animation*
189
+ - [ ] ask the live view what won: `mini_app_view_eval({ appId, code: 'const cs = getComputedStyle(mma.$(".your-class")); return { color: cs.color, bg: cs.backgroundColor };' })` → [eval.md](eval.md)
@@ -1,22 +1,22 @@
1
- # Host 冒烟调试(人类用)
1
+ # Host smoke debugging
2
2
 
3
- 这是 **Host `:17880` 调试**,不是小程序里的 `ctx.http`。
3
+ This is **host `:17880` debugging**, not `ctx.http` inside a mini-app.
4
4
 
5
- 冒烟请用聊天工具 **`mini_app_call({ appId, method, args })`**,不要 bash/curl
5
+ For smoke tests use the chat tool **`mini_app_call({ appId, method, args })`** — not bash, not curl.
6
6
 
7
- Base: `http://127.0.0.1:17880`(插件 apply 时已 listen,打开小程序面板会预热)。仅在人类调试时用 curl
7
+ Base: `http://127.0.0.1:17880` (the host listens when the plugin applies; opening the mini-app panel warms it). Use curl only when a human is debugging.
8
8
 
9
- | 方法 | 路径 | Body | 结果 |
9
+ | Method | Path | Body | Result |
10
10
  |------|------|------|------|
11
11
  | GET | `/api/apps` | | `{ apps: [{ id, name, version }] }` |
12
12
  | GET | `/api/ctx-tools` | | `{ count, tools: [{ name, description, schema }] }` |
13
- | POST | `/api/call` | `{ appId, method, args }` | `{ ok: true, value }` `{ ok: false, error }` |
13
+ | POST | `/api/call` | `{ appId, method, args }` | `{ ok: true, value }` or `{ ok: false, error }` |
14
14
  | GET | `/app/:id` | | runner HTML |
15
- | GET | `/api/app/:id/ui/entry.js` | | per-app UI bundle(编译缓存) |
16
- | GET | `/ui.css` | | @monkey-mini-app/ui 全局样式 |
15
+ | GET | `/api/app/:id/ui/entry.js` | | Per-app UI bundle (compile cache) |
16
+ | GET | `/ui.css` | | Component-library global CSS (injected by the host; never import it from an app) |
17
17
  | DELETE | `/api/app/:id` | | `{ ok, appId }` |
18
- | GET/POST | `/api/host-config` | POST `{ hostPort, theme, palette, … }` | Host 设置 |
19
- | GET/POST | `/api/llm-config` | POST `{ provider, model }` | 写入 `runtime/llm.json` |
18
+ | GET/POST | `/api/host-config` | POST `{ hostPort, theme, palette, … }` | Host settings |
19
+ | GET/POST | `/api/llm-config` | POST `{ provider, model }` | Writes `runtime/llm.json` |
20
20
 
21
21
  ```bash
22
22
  curl -s http://127.0.0.1:17880/api/apps
@@ -25,6 +25,6 @@ curl -s http://127.0.0.1:17880/api/call \
25
25
  -d '{"appId":"com.example.todo","method":"list","args":{"filter":"all"}}'
26
26
  ```
27
27
 
28
- CORS 已开。改 `main.api.ts` 后直接再 curl,不必开浏览器。
28
+ CORS is open. After editing `main.api.ts` just curl again — no browser needed.
29
29
 
30
- 小程序后端抓外网 API:用 `ctx.http`,见 [ctx.md](ctx.md)
30
+ To fetch an external API from a mini-app backend, use `ctx.http` — see [ctx.md](ctx.md).