@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
@@ -1,83 +1,113 @@
1
1
  # Icons
2
2
 
3
- `import { Icon } from "@monkey-mini-app/ui"` — 一个 `Icon` 命名空间(来自 lucide)。`Icon.<Name>` 接受**任意 lucide React 组件名**(大驼峰)。下面是**常用推荐子集**,按用途分组、一句话告诉你什么时候用;没列到的按 lucide 命名规则也能用(如 `Icon.IconName`)。
3
+ `import { Icon } from "@monkey-mini-app/ui"` — a single `Icon` namespace (lucide). `Icon.<Name>` accepts **any lucide React component name** (PascalCase). Below is a **curated subset**, grouped by purpose with a one-line note on when to reach for it; anything not listed still works by lucide's naming rule (`Icon.IconName`).
4
4
 
5
5
  ```tsx
6
6
  import { Icon } from "@monkey-mini-app/ui";
7
7
  <Icon.Search size={16} strokeWidth={2} />
8
8
  ```
9
9
 
10
- ## 操作
11
- | 名字 | 何时用 |
10
+ Icon-only buttons must carry an accessible name: `<Button size="icon" aria-label="Refresh"><Icon.RefreshCw /></Button>`.
11
+
12
+ ## Actions
13
+
14
+ | Name | Use for |
12
15
  |---|---|
13
- | `Plus` / `Minus` | 添加 / 减少 |
14
- | `X` | 关闭、清除 |
15
- | `Check` / `CheckCircle2` | 完成、成功 |
16
- | `Trash2` | 删除 |
17
- | `Pencil` / `PenLine` | 编辑、重命名 |
18
- | `Copy` / `Clipboard` | 复制 |
19
- | `Download` / `Upload` | 下载 / 上传 |
20
- | `RefreshCw` | 刷新、重新拉取 |
21
- | `Send` | 提交、发送 |
22
- | `ExternalLink` | 打开新窗口 |
23
- | `Link` | 复制链接 |
24
-
25
- ## 导航
26
- | 名字 | 何时用 |
16
+ | `Plus` / `Minus` | Add / remove |
17
+ | `X` | Close, clear |
18
+ | `Check` / `CheckCircle2` | Done, success |
19
+ | `Trash2` | Delete |
20
+ | `Pencil` / `PenLine` | Edit, rename |
21
+ | `Copy` / `Clipboard` | Copy |
22
+ | `Download` / `Upload` | Download / upload |
23
+ | `RefreshCw` | Refresh, re-fetch |
24
+ | `Send` | Submit, send |
25
+ | `ExternalLink` | Open in a new window |
26
+ | `Link` | Copy link |
27
+
28
+ ## Navigation
29
+
30
+ | Name | Use for |
27
31
  |---|---|
28
- | `ChevronRight` / `ChevronLeft` | 进入/展开 返回 |
29
- | `ChevronDown` / `ChevronUp` | 折叠/展开 |
30
- | `ChevronsUpDown` | 可排序 |
31
- | `ArrowUpRight` | 外链、跑分增长 |
32
- | `ArrowLeftRight` / `ArrowUpDown` | 切换、传输 |
33
- | `MoreHorizontal` | 更多菜单 |
34
-
35
- ## 状态
36
- | 名字 | 何时用 |
32
+ | `ChevronRight` / `ChevronLeft` | Enter / expand, or back |
33
+ | `ChevronDown` / `ChevronUp` | Collapse / expand |
34
+ | `ChevronsUpDown` | Sortable column |
35
+ | `ArrowUpRight` | External link, score went up |
36
+ | `ArrowLeftRight` / `ArrowUpDown` | Swap, transfer |
37
+ | `MoreHorizontal` | Overflow menu |
38
+
39
+ ## Status
40
+
41
+ | Name | Use for |
37
42
  |---|---|
38
- | `Bell` / `BellOff` | 通知 / 免打扰 |
39
- | `Eye` / `EyeOff` | 显示 / 隐藏敏感值 |
40
- | `Info` | 信息提示 |
41
- | `AlertCircle` / `TriangleAlert` | 警告 |
42
- | `Loader2` / `LoaderCircle` | 加载中(配 animate |
43
- | `HelpCircle` | 帮助 |
44
- | `BadgeCheck` | 已验证、通过 |
45
- | `Star` / `Heart` | 收藏 / 喜欢 |
46
-
47
- ## 内容 & 输入
48
- | 名字 | 何时用 |
43
+ | `Bell` / `BellOff` | Notifications / muted |
44
+ | `Eye` / `EyeOff` | Show / hide a secret |
45
+ | `Info` | Informational hint |
46
+ | `AlertCircle` / `TriangleAlert` | Warning |
47
+ | `Loader2` / `LoaderCircle` | In progress (pair with an animate class) |
48
+ | `HelpCircle` | Help |
49
+ | `BadgeCheck` | Verified, passed |
50
+ | `Star` / `Heart` | Favourite / like |
51
+
52
+ ## Content & input
53
+
54
+ | Name | Use for |
49
55
  |---|---|
50
- | `Search` | 搜索框 |
51
- | `Filter` | 筛选 |
52
- | `SlidersHorizontal` | 高级筛选、设置参数 |
53
- | `CalendarDays` | 日期 |
54
- | `Clock` / `History` | 时间 / 历史 |
55
- | `Tag` | 标签、分类 |
56
- | `File` / `FileText` | 文件 / 文档 |
57
- | `Folder` / `FolderOpen` | 目录 |
58
- | `Image` | 图片 |
59
- | `List` / `ListOrdered` | 列表 / 有序列表 |
60
- | `Hash` | 编号、话题 |
61
- | `Code2` / `Terminal` | 代码 / 命令行 |
62
-
63
- ## 系统 & 监控
64
- | 名字 | 何时用 |
56
+ | `Search` | Search box |
57
+ | `Filter` | Filter |
58
+ | `SlidersHorizontal` | Advanced filter, tuning parameters |
59
+ | `CalendarDays` | Date |
60
+ | `Clock` / `History` | Time / history |
61
+ | `Tag` | Label, category |
62
+ | `File` / `FileText` | File / document |
63
+ | `Folder` / `FolderOpen` | Directory |
64
+ | `Image` | Image |
65
+ | `List` / `ListOrdered` | List / ordered list |
66
+ | `Hash` | Identifier, topic |
67
+ | `Code2` / `Terminal` | Code / command line |
68
+
69
+ ## System & monitoring
70
+
71
+ | Name | Use for |
65
72
  |---|---|
66
- | `Activity` / `Zap` | 实时活动、性能 |
67
- | `Gauge` / `BarChart3` | 指标、大盘 |
68
- | `Server` / `Database` | 服务、数据存储 |
69
- | `HardDrive` / `Cpu` / `MemoryStick` | 磁盘 / CPU / 内存 |
70
- | `Cloud` / `Network` / `Globe` / `Wifi` | 网络、云、外部服务 |
71
- | `TrendingUp` / `TrendingDown` | / |
72
- | `GitBranch` / `GitMerge` / `GitPullRequest` | git 分支、合并、PR |
73
- | `Rocket` | 发布、上线 |
74
-
75
- ## 媒体 / 用户 / 设置
76
- | 名字 | 何时用 |
73
+ | `Activity` / `Zap` | Live activity, performance |
74
+ | `Gauge` / `BarChart3` | Metrics, overview |
75
+ | `Server` / `Database` | Service, storage |
76
+ | `HardDrive` / `Cpu` / `MemoryStick` | Disk / CPU / memory |
77
+ | `Cloud` / `Network` / `Globe` / `Wifi` | Network, cloud, external services |
78
+ | `TrendingUp` / `TrendingDown` | Up / down |
79
+ | `GitBranch` / `GitMerge` / `GitPullRequest` | Git branch, merge, PR |
80
+ | `Rocket` | Release, ship |
81
+
82
+ ## Media / user / settings
83
+
84
+ | Name | Use for |
85
+ |---|---|
86
+ | `Play` / `Pause` | Play / pause |
87
+ | `Music2` / `Video` / `Mic` / `Camera` | Audio, video |
88
+ | `Settings` / `Settings2` | Settings |
89
+ | `Mail` / `MessageSquare` | Mail / comment |
90
+ | `Lock` / `Unlock` / `KeyRound` | Permission, secret |
91
+ | `Home` | Home |
92
+
93
+ ## Empty-state illustrations (`Illu*`)
94
+
95
+ **Exactly these 10 names** (unDraw sources, tokenised so they follow `--primary` / `--muted`). Unlike lucide, these cannot be guessed — if a name is not in this list, fall back to an `Icon` plus text.
96
+
97
+ ```tsx
98
+ import { IlluEmpty } from "@monkey-mini-app/ui";
99
+ <IlluEmpty className="mx-auto w-40" />
100
+ ```
101
+
102
+ | Name | Use for |
77
103
  |---|---|
78
- | `Play` / `Pause` | 播放 / 暂停 |
79
- | `Music2` / `Video` / `Mic` / `Camera` | 音视频 |
80
- | `Settings` / `Settings2` | 设置 |
81
- | `Mail` / `MessageSquare` | 邮箱 / 评论 |
82
- | `Lock` / `Unlock` / `KeyRound` | 权限、密钥 |
83
- | `Home` | 首页 |
104
+ | `IlluEmpty` | Generic empty list / first run with no data |
105
+ | `IlluNoData` | A filter is applied and the result is empty |
106
+ | `IlluSearch` | Search returned nothing |
107
+ | `IlluLoading` | First load / placeholder |
108
+ | `IlluServerStatus` | Service unavailable, fetch failed |
109
+ | `IlluAccessDenied` | No permission / secret missing |
110
+ | `IlluPageNotFound` | Target missing, stale id |
111
+ | `IlluDataProcessing` | Background job running (pair with `scanStatus`) |
112
+ | `IlluBugFixing` | Error state, empty failure detail |
113
+ | `IlluCodeReview` | Diff / review empty state |
@@ -1,21 +1,21 @@
1
- # 结构化 JSON(`ctx.llm` / `ctx.agent` + `opts.schema`)
1
+ # Structured JSON (`ctx.llm` / `ctx.agent` + `opts.schema`)
2
2
 
3
- 需要对象/数组时走这条,不要自己试各种「请只输出 JSON」。
3
+ When you need an object or an array, use this path — do not experiment with "please output JSON only" phrasings.
4
4
 
5
- ## 契约(llm agent 对齐)
5
+ ## Contract (identical for llm and agent)
6
6
 
7
- | | 说明 |
8
- |--|------|
9
- | 入口 | `ctx.llm(prompt, { schema })` **或** `ctx.agent(goal, { schema })` |
10
- | 返回 | **始终是 string**;给了 `schema` 时宿主会要求模型只回 JSON,并尽量剥掉 markdown/前言 |
11
- | App | `JSON.parse(raw)`;失败就 throw,不要当业务文案展示 |
12
- | 不是什么 | **不是**默认每次结构化;**不是** provider 原生 JSON mode / schema 校验重试(二期可加强) |
7
+ | | |
8
+ |--|--|
9
+ | Entry | `ctx.llm(prompt, { schema })` **or** `ctx.agent(goal, { schema })` |
10
+ | Returns | **Always a string that `JSON.parse` accepts** — the host asks for JSON only, strips fences/preambles, retries what a retry can fix, and raises if nothing parses |
11
+ | In your app | `JSON.parse(raw)`; it is not a question of *whether* the text is JSON, only of whether the fields match — validate those yourself |
12
+ | It is not | Provider-native JSON mode, and **not** full schema validation: the host checks that the answer *parses*, plus nothing about your `required` / `type` / enum shape |
13
13
 
14
- `schema` 用普通 JSON Schema 对象(至少 `type` + `properties` / `items`)。提示宜短:任务说清楚 + 把约束交给 `schema`,不必再堆「不要解释」。
14
+ `schema` is a plain JSON Schema object (at least `type` + `properties` / `items`). Keep the prompt short: state the task, put the constraints in `schema` instead of stacking "no explanation" lines.
15
15
 
16
- ## `ctx.llm` 例子
16
+ ## `ctx.llm` example
17
17
 
18
- 完整 RSS + `./lib` + schema `templates/insights/`。
18
+ Full RSS + `./lib` + schema in `templates/radar/`.
19
19
 
20
20
  ```ts
21
21
  const SCHEMA = {
@@ -27,15 +27,15 @@ const SCHEMA = {
27
27
  required: ["headline", "bullets"],
28
28
  };
29
29
 
30
- const raw = await ctx.llm("写一条中文 headline,以及恰好 3 条中文 bullets。不要前言。", {
30
+ const raw = await ctx.llm("One headline and exactly 3 bullets, in the user's language. No preamble.", {
31
31
  schema: SCHEMA,
32
32
  });
33
33
  const digest = JSON.parse(raw);
34
34
  ```
35
35
 
36
- ## `ctx.agent` 例子
36
+ ## `ctx.agent` example
37
37
 
38
- 适合「多步工具/推理后再收成结构化结果」。仍返回 string。若还要过程时间线,同一调用加 `onEvent`(形状见 [ctx.md](ctx.md))。
38
+ For "reason / use tools over several steps, then return a structured result". Still a string. Need the process timeline too? Add `onEvent` to the same call (shapes in [ctx.md](ctx.md)).
39
39
 
40
40
  ```ts
41
41
  const INSIGHT_SCHEMA = {
@@ -49,7 +49,7 @@ const INSIGHT_SCHEMA = {
49
49
  };
50
50
 
51
51
  const raw = await ctx.agent(
52
- "根据下面材料给出对独立开发者的洞察:风险列表 + 下一步建议。\n" + materials,
52
+ "From the material below, give insights for an independent developer: risks + a next step.\n" + materials,
53
53
  { schema: INSIGHT_SCHEMA },
54
54
  );
55
55
  const insight = JSON.parse(raw);
@@ -57,13 +57,26 @@ await ctx.storage.set("insight", insight);
57
57
  return insight;
58
58
  ```
59
59
 
60
- llm 一样:`schema` 可选;自然语言最终句不必传 `schema`。
61
-
62
- ## 宿主实际做了什么(实现提示)
63
-
64
- 1. `withJsonInstruction`:把 schema 写进约束(llm → stream `system`;agent → one-shot followup 文本)
65
- 2. 模型生成
66
- 3. `coerceSchemaJson`:去掉 \`\`\`json 围栏 / 前言,尽量抽出 `{…}` / `[…]`
67
- 4. App `JSON.parse`
68
-
69
- 校验失败时 **不会**自动重试;该 throw throw,让 UI 显示错误。
60
+ Same as llm: `schema` is optional, and for a natural-language final answer you do not pass one.
61
+
62
+ ## What the host actually does
63
+
64
+ 1. `withJsonInstruction`: writes the schema into the constraints (llm → the stream's `system`; agent → the one-shot follow-up text)
65
+ 2. The model generates
66
+ 3. `coerceSchemaJson`: drops ```` ```json ```` fences / preambles and extracts `{…}` / `[…]` as well as it can
67
+ 4. Your app calls `JSON.parse`
68
+
69
+ ## What the host guarantees, and what it costs
70
+
71
+ - `ctx.llm` tries up to **`retryTimes`** times (default 3 total). A retry happens only for
72
+ something retrying can fix: the call failed / answered nothing, or the answer did not parse.
73
+ - From the second try on, the model is shown *why* the previous answer was rejected, including the
74
+ start of it — a blind re-roll just reproduces the same truncated object.
75
+ - If nothing parses, you get `HostError` `code: "LLM_JSON_INVALID"` (or `LLM_RETRY_EXHAUSTED` if
76
+ the model never answered at all). Its message lists every attempt; `err.attempts` carries them
77
+ structured (`kind`, `error`, `bytes`, `head`). Nothing about the model's output is hidden — the
78
+ rejected samples are in there, which is what lets you fix the prompt instead of guessing.
79
+ - Output is capped at **`maxTokens` (default 4096)**. A schema asking for many items can still be
80
+ truncated at the ceiling, so for wide arrays set it yourself rather than widening the schema.
81
+ - `ctx.agent` defaults to **1 attempt**, because a turn may already have posted a comment or pushed
82
+ a build — replaying it repeats that. Pass `retryTimes` only when your steps are idempotent.
@@ -1,30 +1,57 @@
1
1
  # Loader
2
2
 
3
- Host 在服务端即时编译:**后端**用 sucrase 编译 `main.api.ts` / `lib/*.ts`;**前端 UI** esbuild-wasm `ui.tsx` 连同用到的组件打包成单个 ESM bundle(tree-shake,按 app 裁剪组件库)。
3
+ The host compiles on the fly, server side: the **backend** (`main.api.ts` + its relative imports) goes through sucrase; the **UI** (`ui.tsx` + its relative imports) is bundled to a single ESM file with esbuild (tree-shaken, so only the components you use are included).
4
4
 
5
- ## 后端(main.api.ts / lib/*.ts)
5
+ ## Layout
6
6
 
7
- - `import { defineDashboard } from "@monkeyagent/dashboard"`
8
- - `import { foo } from "./lib/foo"`(也可 `./components/...`)
9
- - TypeScript 随意(sucrase:参数类型、`{ title: string }`、`catch (e: any)` 都可以)
10
- - `export default defineDashboard(...)`
11
- - `lib/` `export function` / `export const` / `export async function`
7
+ ```
8
+ manifest.json
9
+ ui.tsx UI entry
10
+ main.api.ts backend entry
11
+ ui/ components / hooks / view helpers UI only
12
+ api/ backend helpers — backend only
13
+ shared/ pure isomorphic code — both sides
14
+ ```
12
15
 
13
- ## 前端(ui.tsx)
16
+ The three folders are the convention that keeps the two runtimes from reaching into each
17
+ other's code; a trivial app with no helpers needs none of them. **`ui/` and `api/` are
18
+ enforced at compile time**, not style advice:
14
19
 
15
- - `import { Button, DataGrid, ... } from "@monkey-mini-app/ui"` —— 组件库(已内置图标/图表/编辑器依赖,不要额外 import npm 包)
16
- - `import { useDashboardApi } from "@monkeyagent/host"` —— host 注入的 hook,只返回 `{ call }`
17
- - `import { useState } from "react"` —— React 19(host 注入)
18
- - `import { foo } from "./lib/foo"` —— 相对 app 内文件,随 bundle 一起打包
19
- - 布局用 Tailwind classes(`flex flex-col gap-3` 等)
20
+ - UI importing `./api/**` compile error
21
+ - backend importing `./ui/**` load error
22
+ - either side importing outside the app dir (`../…`) error
20
23
 
21
- ## 禁止(编译即报错,不要绕)
24
+ Anything that both sides need belongs in `shared/` — which means pure code: no React, no
25
+ DOM, no `ctx`, no Node builtins.
22
26
 
23
- - npm 包:`recharts`、`lucide-react`、`rss-parser`、`openai`、`node-fetch`…(组件库已内置)
24
- - Node 内置:`fs`、`http`、`path`…
25
- - 逃出 app 目录的 `../` 出界(前端 `./lib` 同理)
26
- - UI `import main.api.ts`(要数据走 `call`)
27
+ ## Backend (`main.api.ts`, `api/**`, `shared/**`)
27
28
 
28
- 抓网页用 `ctx.http("https://…", { timeout: 8000 })`,看 `r.ok` / `r.text` / `r.json`;解析写在 `./lib`。本机命令才 `ctx.bash`。
29
+ - `import { defineApp } from "@monkey-mini-app/api"`; the host injects the runtime `defineApp` when it loads the file, so nothing React-ish is pulled into the backend
30
+ - `import { groupBy, debounce } from "lodash"` (or `lodash-es`) — full lodash, host-injected; same module as the UI vendor bundle
31
+ - A Node library this app genuinely needs: `mini_app_install({ appId, packages: [{ name: "exceljs" }] })` first, then `import ExcelJS from "exceljs"`. It lands in **this app's** `node_modules` (`--ignore-scripts`, lockfile committed, `node_modules` not). `package.json` in the app dir is owned by that tool — do not hand-write it. Anything outside the app's own `node_modules` (the plugin's, the repo's) is refused.
32
+ - `import { parseFeed } from "./api/feed"`, `import { SAMPLE } from "./shared/sample"` — any relative path inside the app dir; subfolder names beyond the convention above are up to you
33
+ - TypeScript freely (sucrase: parameter types, `{ title: string }`, `catch (e: any)` all fine)
34
+ - `export default defineApp(...)`
35
+ - In helper modules: `export function` / `export const` / `export async function`
29
36
 
30
- `ui.tsx` / `main.api.ts` / `lib/*.ts` 会按 mtime 重新编译。RSS + lib 完整例子见 `templates/insights/`。
37
+ ## Frontend (`ui.tsx`, `ui/**`, `shared/**`)
38
+
39
+ - `import { useApp, Button, DataGrid, cn, ... } from "@monkey-mini-app/ui"` — components, `useApp`, `cn`, `Icon`, `Illu*` all come from here (icon/chart/editor dependencies are already inside; never add an npm import)
40
+ - `import { useState } from "react"` — React 19, injected by the host (`/mma/runtime.js`)
41
+ - `import { groupBy, debounce } from "lodash"` — platform vendor (`/mma/vendors/lodash.js`); not a kit re-export
42
+ - `import { fmt } from "./shared/format"` — app-relative, bundled with the UI
43
+ - Layout via Tailwind classes (`flex flex-col gap-3`, …)
44
+
45
+ UI: `@monkey-mini-app/ui` + `react` + `lodash`. Backend: `@monkey-mini-app/api` + `lodash` + packages installed by `mini_app_install`. Nothing else resolves — pre-unification names fail to compile. Rewrite them; do not work around them.
46
+
47
+ ## Forbidden (compile error — do not work around it)
48
+
49
+ - npm packages: `recharts`, `lucide-react`, `rss-parser`, `openai`, `node-fetch`, `axios`, `ramda`, `dayjs`, … in `ui.tsx` (`lodash` is the exception — platform vendor, full API; backend-only libs go through `mini_app_install`)
50
+ - Node builtins: `fs`, `http`, `path`, …
51
+ - `../` escaping the app directory (both sides)
52
+ - UI ↔ `api/**`, backend ↔ `ui/**` (see Layout)
53
+ - UI importing `main.api.ts` (fetch data with `call`)
54
+
55
+ Fetch web content with `ctx.http("https://…", { timeout: 8000 })` and inspect `r.ok` / `r.text` / `r.json`; keep parsing in `api/`. Local machine commands use `ctx.bash`.
56
+
57
+ Editing `ui.tsx` / `main.api.ts` or any helper module under the app dir triggers a recompile by mtime. A full RSS + `shared/` example lives in `templates/radar/`.
@@ -0,0 +1,88 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Aurora Bento
4
+
5
+ Also known as `极光便当` (sample product copy).
6
+
7
+ id: `aurora-bento` · grammar: `tessellation`
8
+
9
+ **When:** Launcher / overview. The page is a 6×3 tessellation, every cell a destination.
10
+
11
+ **Not:** A lock-screen home. No sky, no poster layer.
12
+
13
+ **How to copy it:** A flat `bg-muted` ground turns this into an admin dashboard — the aurora IS the look. Three hue pools mixed out of the palette's own primary (toward --foreground for depth, toward --destructive for a warm drift) so no colour literal appears in ui.tsx, and they stay TIGHT (40-50% radii) so they read as light sources rather than a wallpaper wash. Cap the grid (`max-w-5xl mx-auto`) and gap it: an edge-to-edge tile wall hides the field, and the field is the look. Write spans out (`col-span-2`), never `sm:col-span-*` — the panel width is user-dragged. Tiles are OPAQUE and raised (contact + lift shadow): translucent tiles would collide with glass-island. The hero tile inverts to `bg-foreground text-background`. Every tile is a destination, never a stat readout. Light and dark may carry different hue families — this look's palette is indigo-violet by day, aurora green by night.
14
+
15
+ ## Style (inline — Tailwind drops multi-layer shadows)
16
+
17
+ ```tsx
18
+ const GLASS = {
19
+ "ground": "tight radial pools: --primary 92% (top-left), --primary mixed --foreground (top-right), --primary mixed --destructive (bottom) — token-derived, no literals",
20
+ "RAISED": {
21
+ "boxShadow": "0 1px 2px color-mix(in oklch, var(--foreground) 14%, transparent), 0 14px 30px -14px var(--shadow)"
22
+ }
23
+ } as const;
24
+ ```
25
+
26
+ ## Classes (copy literals)
27
+
28
+ - `root`: `mx-auto grid w-full max-w-5xl grid-cols-6 gap-2.5 (spans written out, no sm:)`
29
+ - `tile`: `bg-card relative rounded-2xl p-3 overflow-hidden + style={RAISED}`
30
+ - `hero`: `bg-foreground text-background col-span-2 row-span-2 rounded-2xl p-4`
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: the ground is an aurora, so the hue IS the identity. Light is the
41
+ indigo-violet field (A1), dark the graphite aurora-green (A2) — the lab picked the best
42
+ side of each; a palette file has two blocks, so that is legal and reads intentional. */
43
+ :root[data-mode="light"] {
44
+ --bg: #c9cdf1;
45
+ --fg: #20213a;
46
+ --surface: #ffffff;
47
+ --surface-fg: #20213a;
48
+ --border: #c2c6e8;
49
+ --muted: #dfe2f5;
50
+ --muted-fg: #565a7e;
51
+ --primary: #6d5ae0;
52
+ --primary-fg: #ffffff;
53
+ --secondary: #e2e4f6;
54
+ --secondary-fg: #20213a;
55
+ --accent: #e9e3fb;
56
+ --accent-fg: #20213a;
57
+ --destructive: #c0392b;
58
+ --destructive-fg: #ffffff;
59
+ --ring: #6d5ae0;
60
+ --input: #c2c6e8;
61
+ --radius: 16px;
62
+ --shadow: rgba(35, 30, 90, 0.35);
63
+ }
64
+ :root[data-mode="dark"] {
65
+ --bg: #0e1512;
66
+ --fg: #dff2e8;
67
+ --surface: #141d19;
68
+ --surface-fg: #dff2e8;
69
+ --border: #1e2c25;
70
+ --muted: #101f19;
71
+ --muted-fg: #6f9784;
72
+ --primary: #3ee39a;
73
+ --primary-fg: #06140d;
74
+ --secondary: #16241d;
75
+ --secondary-fg: #dff2e8;
76
+ --accent: #13281f;
77
+ --accent-fg: #dff2e8;
78
+ --destructive: #ff6b5e;
79
+ --destructive-fg: #14060a;
80
+ --ring: #3ee39a;
81
+ --input: #1e2c25;
82
+ --radius: 16px;
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,89 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Desk Split
4
+
5
+ Also known as `精致分栏` (sample product copy).
6
+
7
+ id: `desk-split` · grammar: `list-detail`
8
+
9
+ **When:** CRUD, tickets, contacts, ledgers. Two panes, hairline, dense toolbar.
10
+
11
+ **Not:** Marketing pages, lock-screen homes.
12
+
13
+ **How to copy it:** The desk IS the palette: walnut `bg-background`, cream papers (`bg-card`) in BOTH modes — lamp-lit paper on a dark desk is the look; dark papers on wood read as mud. All ink (`foreground`) is dark in both modes and only ever lands on paper: chrome text (headers, captions) goes inside a paper strip, never directly on the wood. Wood grain = repeating stripe bands; one warm lamp pool from `--primary`; titles in ui-serif for the desk feel.
14
+
15
+ ## Style (inline — Tailwind drops multi-layer shadows)
16
+
17
+ ```tsx
18
+ const GLASS = {
19
+ "backgroundImage": "repeating-linear-gradient(90deg, fg 5% 2px stripes / 96px bands), radial lamp pool from --primary at top-left, vignette at bottom",
20
+ "paper": {
21
+ "backgroundColor": "var(--card)",
22
+ "boxShadow": "0 1px 2px fg/24, 0 18px 44px -18px var(--shadow), inset 0 1px 0 card/72",
23
+ "borderColor": "fg/12"
24
+ }
25
+ } as const;
26
+ ```
27
+
28
+ ## Classes (copy literals)
29
+
30
+ - `root`: `relative h-full min-h-0 bg-background (walnut wood, DESK wash overlay)`
31
+ - `pane`: `cream paper: bg-card, hairline edge, contact + lift shadow, top highlight (PAPER)`
32
+
33
+ ## Palette (optional `theme.css` in the app dir)
34
+
35
+ This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
36
+ makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
37
+ pick a host palette. Omit the file to follow the host palette instead.
38
+
39
+ ```css
40
+ /* name: 桌面分栏 */
41
+ /* Look-owned palette: walnut desk + amber desk-lamp. The papers are cream in BOTH modes —
42
+ a dark desk with lamp-lit paper is the desk; dark papers would read as mud. All ink is
43
+ dark in both modes for the same reason, so `--foreground` is never painted on the wood. */
44
+ :root[data-mode="light"] {
45
+ --bg: #8a6845;
46
+ --fg: #33260f;
47
+ --surface: #faf5ea;
48
+ --surface-fg: #33260f;
49
+ --border: #6b4f2c;
50
+ --muted: #ebdfc6;
51
+ --muted-fg: #74603f;
52
+ --primary: #a8741c;
53
+ --primary-fg: #fdf6e7;
54
+ --secondary: #efe3c8;
55
+ --secondary-fg: #33260f;
56
+ --accent: #e9d9b4;
57
+ --accent-fg: #33260f;
58
+ --destructive: #a13d2d;
59
+ --destructive-fg: #fff8ee;
60
+ --ring: #c98f2e;
61
+ --input: #c7ab7d;
62
+ --radius: 12px;
63
+ --shadow: rgba(48, 32, 12, 0.42);
64
+ }
65
+ :root[data-mode="dark"] {
66
+ --bg: #2f2311;
67
+ --fg: #2e2113;
68
+ --surface: #f0e6cf;
69
+ --surface-fg: #2e2113;
70
+ --border: #7a5a30;
71
+ --muted: #e2d5b8;
72
+ --muted-fg: #5f4d30;
73
+ --primary: #a8741c;
74
+ --primary-fg: #fdf6e7;
75
+ --secondary: #e6d9b6;
76
+ --secondary-fg: #2e2113;
77
+ --accent: #dfcf9f;
78
+ --accent-fg: #2e2113;
79
+ --destructive: #b04938;
80
+ --destructive-fg: #fff3ec;
81
+ --ring: #d9a643;
82
+ --input: #e2d3ae;
83
+ --radius: 12px;
84
+ --shadow: rgba(8, 5, 1, 0.6);
85
+ }
86
+ ```
87
+
88
+
89
+ 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,78 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Editorial
4
+
5
+ Also known as `编辑排版` (sample product copy).
6
+
7
+ id: `editorial` · grammar: `prose-measure`
8
+
9
+ **When:** Weekly digest, insights, runbook, help. Type hierarchy, hairline rules, almost no cards.
10
+
11
+ **Not:** Monitor walls, dense tables.
12
+
13
+ **How to copy it:** Paper and ink are the identity: under the default palette this look is just text on white and reads unfinished, so it ships a theme.css (newsprint + vermilion by day, cool night-reading stock + ultramarine by night). Keep the measure near 65ch, use hairlines (`border` / `Separator`) instead of cards, one accent only for links and emphasis, `font-serif` for display, and `first-letter:` for a drop cap. Radius stays small — this look is type and rules, not tiles.
14
+
15
+ ## Classes (copy literals)
16
+
17
+ - `root`: `mx-auto max-w-2xl px-6 py-8`
18
+ - `kicker`: `text-xs tracking-[0.2em] uppercase text-muted-foreground`
19
+ - `display`: `font-serif text-3xl font-bold tracking-tight`
20
+
21
+ ## Palette (optional `theme.css` in the app dir)
22
+
23
+ This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
24
+ makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
25
+ pick a host palette. Omit the file to follow the host palette instead.
26
+
27
+ ```css
28
+ /* name: 编辑排版 */
29
+ /* Look-owned palette: paper and ink are the identity — under the default kit palette the
30
+ page is just text and reads as "unfinished". Light is newsprint with vermilion (E1),
31
+ dark is cool night-reading stock with ultramarine (E2). Radius is small: this look is
32
+ rules and type, not cards. */
33
+ :root[data-mode="light"] {
34
+ --bg: #f6f2e9;
35
+ --fg: #1c1a16;
36
+ --surface: #fffdf7;
37
+ --surface-fg: #1c1a16;
38
+ --border: #e0d9c9;
39
+ --muted: #ece5d6;
40
+ --muted-fg: #6d675c;
41
+ --primary: #c0402a;
42
+ --primary-fg: #fff8f5;
43
+ --secondary: #efe8da;
44
+ --secondary-fg: #1c1a16;
45
+ --accent: #f1e9d9;
46
+ --accent-fg: #1c1a16;
47
+ --destructive: #8f2d22;
48
+ --destructive-fg: #fff4f1;
49
+ --ring: #c0402a;
50
+ --input: #d9d2c2;
51
+ --radius: 6px;
52
+ --shadow: rgba(60, 50, 30, 0.18);
53
+ }
54
+ :root[data-mode="dark"] {
55
+ --bg: #14161a;
56
+ --fg: #e8eaee;
57
+ --surface: #191c22;
58
+ --surface-fg: #e8eaee;
59
+ --border: #262a31;
60
+ --muted: #1d2128;
61
+ --muted-fg: #9aa0aa;
62
+ --primary: #7f95f5;
63
+ --primary-fg: #0f1216;
64
+ --secondary: #1d2128;
65
+ --secondary-fg: #e8eaee;
66
+ --accent: #1a2030;
67
+ --accent-fg: #e8eaee;
68
+ --destructive: #ff6b63;
69
+ --destructive-fg: #14060a;
70
+ --ring: #7f95f5;
71
+ --input: #2a2d31;
72
+ --radius: 6px;
73
+ --shadow: rgba(0, 0, 0, 0.5);
74
+ }
75
+ ```
76
+
77
+
78
+ 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.