makersclaw 0.8.0 → 0.8.2

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 (401) hide show
  1. package/README.md +9 -3
  2. package/package.json +1 -1
  3. package/r/activity-log.json +52 -0
  4. package/r/agent-changes.json +51 -0
  5. package/r/agent-chat.json +53 -0
  6. package/r/agent-column.json +85 -0
  7. package/r/agent-dock.json +57 -0
  8. package/r/agent-kit.json +49 -0
  9. package/r/agent-marks.json +49 -0
  10. package/r/agent-pane.json +93 -0
  11. package/r/ai-action.json +56 -0
  12. package/r/annotate.json +3 -3
  13. package/r/approval-request.json +2 -2
  14. package/r/approval.json +54 -0
  15. package/r/ask-bar.json +50 -0
  16. package/r/audio-player.json +2 -2
  17. package/r/auth-form.json +2 -2
  18. package/r/automation-editor.json +66 -0
  19. package/r/automation-list.json +57 -0
  20. package/r/automation-model.json +118 -0
  21. package/r/automations-screen.json +71 -0
  22. package/r/board.json +2 -2
  23. package/r/calendar-view.json +3 -3
  24. package/r/cart.json +2 -2
  25. package/r/chart.json +2 -2
  26. package/r/chat-pane.json +84 -0
  27. package/r/chat.json +2 -2
  28. package/r/code-editor.json +2 -2
  29. package/r/comment-box.json +3 -3
  30. package/r/connect-card.json +51 -0
  31. package/r/contact-section.json +2 -2
  32. package/r/core.json +13 -7
  33. package/r/cost.json +51 -0
  34. package/r/csv-import.json +3 -3
  35. package/r/data-picker.json +60 -0
  36. package/r/data-table.json +2 -2
  37. package/r/diagram.json +2 -2
  38. package/r/doc-editor.json +2 -2
  39. package/r/doc-page.json +3 -3
  40. package/r/email-render.json +2 -2
  41. package/r/faq.json +2 -2
  42. package/r/file-upload.json +2 -2
  43. package/r/first-run.json +63 -0
  44. package/r/fix-note.json +57 -0
  45. package/r/flow-canvas.json +2 -2
  46. package/r/flow-editor.json +79 -0
  47. package/r/footer.json +2 -2
  48. package/r/gantt.json +3 -3
  49. package/r/job-panel.json +2 -2
  50. package/r/json-editor.json +3 -3
  51. package/r/library-shelf.json +56 -0
  52. package/r/map.json +2 -2
  53. package/r/margin-notes.json +67 -0
  54. package/r/menubar.json +2 -2
  55. package/r/mind-map.json +3 -3
  56. package/r/navigation-menu.json +2 -2
  57. package/r/needs-you.json +55 -0
  58. package/r/order-detail.json +2 -2
  59. package/r/org-chart.json +3 -3
  60. package/r/pace-bar.json +69 -0
  61. package/r/page-builder.json +2 -2
  62. package/r/payment-methods.json +2 -2
  63. package/r/pdf-document.json +2 -2
  64. package/r/pdf-viewer.json +2 -2
  65. package/r/product-detail.json +2 -2
  66. package/r/product-grid.json +3 -3
  67. package/r/record-form.json +2 -2
  68. package/r/record-grid.json +52 -0
  69. package/r/record-notes.json +4 -4
  70. package/r/registry.json +4086 -1512
  71. package/r/run-history.json +52 -0
  72. package/r/run-view.json +80 -0
  73. package/r/schedule-card.json +54 -0
  74. package/r/schedule-engine.json +79 -0
  75. package/r/schedule-gantt.json +83 -0
  76. package/r/schedule-ruler.json +64 -0
  77. package/r/search-dialog.json +2 -2
  78. package/r/settings-list.json +2 -2
  79. package/r/setup-checklist.json +2 -2
  80. package/r/share-dialog.json +2 -2
  81. package/r/sidebar.json +2 -2
  82. package/r/signature-pad.json +2 -2
  83. package/r/sketch-canvas.json +2 -2
  84. package/r/source-receipt.json +52 -0
  85. package/r/spreadsheet.json +3 -3
  86. package/r/stat-cards.json +3 -3
  87. package/r/step-picker.json +53 -0
  88. package/r/step-settings.json +72 -0
  89. package/r/suggestion.json +58 -0
  90. package/r/sum-bar.json +64 -0
  91. package/r/task-list.json +3 -3
  92. package/r/task-model.json +2 -2
  93. package/r/testimonials.json +2 -2
  94. package/r/tier-map.json +67 -0
  95. package/r/time-grid.json +73 -0
  96. package/r/time-strip.json +64 -0
  97. package/r/top-bar.json +66 -0
  98. package/r/transaction-list.json +2 -2
  99. package/r/trigger-picker.json +61 -0
  100. package/r/whiteboard.json +3 -3
  101. package/r/workflow-view.json +55 -0
  102. package/registry/blocks/activity-log/README.md +112 -0
  103. package/registry/blocks/activity-log/activity-log.jsx +351 -0
  104. package/registry/blocks/activity-log/block.json +33 -0
  105. package/registry/blocks/activity-log/demo.jsx +48 -0
  106. package/registry/blocks/activity-log/index.js +4 -0
  107. package/registry/blocks/agent-changes/README.md +94 -0
  108. package/registry/blocks/agent-changes/agent-changes.jsx +118 -0
  109. package/registry/blocks/agent-changes/block.json +28 -0
  110. package/registry/blocks/agent-changes/demo.jsx +39 -0
  111. package/registry/blocks/agent-changes/index.js +3 -0
  112. package/registry/blocks/agent-chat/README.md +145 -0
  113. package/registry/blocks/agent-chat/agent-chat.jsx +415 -0
  114. package/registry/blocks/agent-chat/block.json +30 -0
  115. package/registry/blocks/agent-chat/demo.jsx +165 -0
  116. package/registry/blocks/agent-chat/index.js +3 -0
  117. package/registry/blocks/agent-column/README.md +197 -0
  118. package/registry/blocks/agent-column/agent-column.jsx +492 -0
  119. package/registry/blocks/agent-column/block.json +67 -0
  120. package/registry/blocks/agent-column/column-picker.jsx +163 -0
  121. package/registry/blocks/agent-column/demo.jsx +50 -0
  122. package/registry/blocks/agent-column/index.js +7 -0
  123. package/registry/blocks/agent-column/model.js +164 -0
  124. package/registry/blocks/agent-column/receipt.jsx +483 -0
  125. package/registry/blocks/agent-column/spreadsheet-type.jsx +24 -0
  126. package/registry/blocks/agent-dock/README.md +210 -0
  127. package/registry/blocks/agent-dock/agent-dock.jsx +356 -0
  128. package/registry/blocks/agent-dock/block.json +47 -0
  129. package/registry/blocks/agent-dock/demo.jsx +153 -0
  130. package/registry/blocks/agent-dock/dock-model.js +118 -0
  131. package/registry/blocks/agent-dock/index.js +5 -0
  132. package/registry/blocks/agent-kit/README.md +73 -0
  133. package/registry/blocks/agent-kit/agent-kit.jsx +86 -0
  134. package/registry/blocks/agent-kit/block.json +10 -0
  135. package/registry/blocks/agent-kit/demo.jsx +35 -0
  136. package/registry/blocks/agent-kit/index.js +3 -0
  137. package/registry/blocks/agent-marks/README.md +80 -0
  138. package/registry/blocks/agent-marks/agent-marks.jsx +133 -0
  139. package/registry/blocks/agent-marks/block.json +27 -0
  140. package/registry/blocks/agent-marks/demo.jsx +49 -0
  141. package/registry/blocks/agent-marks/index.js +3 -0
  142. package/registry/blocks/agent-pane/README.md +234 -0
  143. package/registry/blocks/agent-pane/agent-pane.jsx +246 -0
  144. package/registry/blocks/agent-pane/block.json +41 -0
  145. package/registry/blocks/agent-pane/composer.jsx +6 -0
  146. package/registry/blocks/agent-pane/demo.jsx +233 -0
  147. package/registry/blocks/agent-pane/dock-context.js +10 -0
  148. package/registry/blocks/agent-pane/index.js +4 -0
  149. package/registry/blocks/agent-pane/prose.jsx +84 -0
  150. package/registry/blocks/agent-pane/questions.jsx +134 -0
  151. package/registry/blocks/agent-pane/transcript.jsx +268 -0
  152. package/registry/blocks/agent-pane/work.jsx +368 -0
  153. package/registry/blocks/ai-action/README.md +94 -0
  154. package/registry/blocks/ai-action/ai-action.jsx +188 -0
  155. package/registry/blocks/ai-action/block.json +34 -0
  156. package/registry/blocks/ai-action/demo.jsx +93 -0
  157. package/registry/blocks/ai-action/index.js +3 -0
  158. package/registry/blocks/approval/README.md +145 -0
  159. package/registry/blocks/approval/approval.jsx +163 -0
  160. package/registry/blocks/approval/block.json +31 -0
  161. package/registry/blocks/approval/demo.jsx +121 -0
  162. package/registry/blocks/approval/index.js +3 -0
  163. package/registry/blocks/ask-bar/README.md +105 -0
  164. package/registry/blocks/ask-bar/ask-bar.jsx +166 -0
  165. package/registry/blocks/ask-bar/block.json +26 -0
  166. package/registry/blocks/ask-bar/demo.jsx +78 -0
  167. package/registry/blocks/ask-bar/index.js +3 -0
  168. package/registry/blocks/automation-editor/README.md +291 -0
  169. package/registry/blocks/automation-editor/automation-editor.jsx +656 -0
  170. package/registry/blocks/automation-editor/block.json +39 -0
  171. package/registry/blocks/automation-editor/demo.jsx +284 -0
  172. package/registry/blocks/automation-editor/index.js +4 -0
  173. package/registry/blocks/automation-editor/run-inputs.jsx +82 -0
  174. package/registry/blocks/automation-list/README.md +129 -0
  175. package/registry/blocks/automation-list/automation-list.jsx +476 -0
  176. package/registry/blocks/automation-list/block.json +35 -0
  177. package/registry/blocks/automation-list/demo.jsx +67 -0
  178. package/registry/blocks/automation-list/index.js +3 -0
  179. package/registry/blocks/automation-model/README.md +109 -0
  180. package/registry/blocks/automation-model/block.json +135 -0
  181. package/registry/blocks/automation-model/catalog.js +256 -0
  182. package/registry/blocks/automation-model/check.js +161 -0
  183. package/registry/blocks/automation-model/demo.jsx +42 -0
  184. package/registry/blocks/automation-model/edit.js +262 -0
  185. package/registry/blocks/automation-model/fixes.js +287 -0
  186. package/registry/blocks/automation-model/glyph.jsx +13 -0
  187. package/registry/blocks/automation-model/graph.js +410 -0
  188. package/registry/blocks/automation-model/index.js +33 -0
  189. package/registry/blocks/automation-model/overlay.js +175 -0
  190. package/registry/blocks/automation-model/parts.jsx +94 -0
  191. package/registry/blocks/automation-model/schedule.js +53 -0
  192. package/registry/blocks/automation-model/templates.js +128 -0
  193. package/registry/blocks/automation-model/values.js +29 -0
  194. package/registry/blocks/automation-model/words.js +439 -0
  195. package/registry/blocks/automations-screen/README.md +207 -0
  196. package/registry/blocks/automations-screen/automations-screen.jsx +452 -0
  197. package/registry/blocks/automations-screen/block.json +47 -0
  198. package/registry/blocks/automations-screen/demo.jsx +364 -0
  199. package/registry/blocks/automations-screen/index.js +4 -0
  200. package/registry/blocks/automations-screen/screen-model.js +129 -0
  201. package/registry/blocks/chat-pane/README.md +143 -0
  202. package/registry/blocks/chat-pane/block.json +48 -0
  203. package/registry/blocks/chat-pane/chat-attach.js +166 -0
  204. package/registry/blocks/chat-pane/chat-composer.jsx +195 -0
  205. package/registry/blocks/chat-pane/chat-context.js +17 -0
  206. package/registry/blocks/chat-pane/chat-model.js +43 -0
  207. package/registry/blocks/chat-pane/chat-pane.jsx +398 -0
  208. package/registry/blocks/chat-pane/chats-list.jsx +52 -0
  209. package/registry/blocks/chat-pane/demo.jsx +103 -0
  210. package/registry/blocks/chat-pane/index.js +9 -0
  211. package/registry/blocks/connect-card/README.md +99 -0
  212. package/registry/blocks/connect-card/block.json +10 -0
  213. package/registry/blocks/connect-card/connect-card.jsx +103 -0
  214. package/registry/blocks/connect-card/demo.jsx +49 -0
  215. package/registry/blocks/connect-card/index.js +3 -0
  216. package/registry/blocks/cost/README.md +115 -0
  217. package/registry/blocks/cost/block.json +10 -0
  218. package/registry/blocks/cost/cost.jsx +176 -0
  219. package/registry/blocks/cost/demo.jsx +66 -0
  220. package/registry/blocks/cost/index.js +3 -0
  221. package/registry/blocks/data-picker/README.md +81 -0
  222. package/registry/blocks/data-picker/block.json +38 -0
  223. package/registry/blocks/data-picker/data-picker.jsx +210 -0
  224. package/registry/blocks/data-picker/demo.jsx +34 -0
  225. package/registry/blocks/data-picker/fields.js +89 -0
  226. package/registry/blocks/data-picker/index.js +4 -0
  227. package/registry/blocks/data-table/demo.jsx +1 -1
  228. package/registry/blocks/first-run/README.md +118 -0
  229. package/registry/blocks/first-run/block.json +11 -0
  230. package/registry/blocks/first-run/demo.jsx +88 -0
  231. package/registry/blocks/first-run/first-run-model.js +51 -0
  232. package/registry/blocks/first-run/first-run.jsx +156 -0
  233. package/registry/blocks/first-run/index.js +5 -0
  234. package/registry/blocks/first-run/probe-rules.js +26 -0
  235. package/registry/blocks/fix-note/README.md +79 -0
  236. package/registry/blocks/fix-note/block.json +35 -0
  237. package/registry/blocks/fix-note/demo.jsx +30 -0
  238. package/registry/blocks/fix-note/fix-note.jsx +235 -0
  239. package/registry/blocks/fix-note/index.js +3 -0
  240. package/registry/blocks/flow-editor/README.md +108 -0
  241. package/registry/blocks/flow-editor/block.json +44 -0
  242. package/registry/blocks/flow-editor/demo.jsx +115 -0
  243. package/registry/blocks/flow-editor/flow-canvas.jsx +568 -0
  244. package/registry/blocks/flow-editor/flow-editor.jsx +154 -0
  245. package/registry/blocks/flow-editor/index.js +6 -0
  246. package/registry/blocks/flow-editor/minimap.jsx +78 -0
  247. package/registry/blocks/flow-editor/outline.jsx +134 -0
  248. package/registry/blocks/library-shelf/README.md +117 -0
  249. package/registry/blocks/library-shelf/block.json +28 -0
  250. package/registry/blocks/library-shelf/demo.jsx +68 -0
  251. package/registry/blocks/library-shelf/index.js +3 -0
  252. package/registry/blocks/library-shelf/library-shelf.jsx +211 -0
  253. package/registry/blocks/library-shelf/probe-rules.js +15 -0
  254. package/registry/blocks/margin-notes/README.md +222 -0
  255. package/registry/blocks/margin-notes/block.json +10 -0
  256. package/registry/blocks/margin-notes/demo.jsx +144 -0
  257. package/registry/blocks/margin-notes/index.js +20 -0
  258. package/registry/blocks/margin-notes/margin-model.js +224 -0
  259. package/registry/blocks/margin-notes/margin-notes.jsx +465 -0
  260. package/registry/blocks/needs-you/README.md +177 -0
  261. package/registry/blocks/needs-you/block.json +34 -0
  262. package/registry/blocks/needs-you/demo.jsx +143 -0
  263. package/registry/blocks/needs-you/index.js +3 -0
  264. package/registry/blocks/needs-you/needs-you.jsx +441 -0
  265. package/registry/blocks/pace-bar/README.md +230 -0
  266. package/registry/blocks/pace-bar/block.json +10 -0
  267. package/registry/blocks/pace-bar/demo.jsx +255 -0
  268. package/registry/blocks/pace-bar/index.js +22 -0
  269. package/registry/blocks/pace-bar/pace-bar.jsx +461 -0
  270. package/registry/blocks/pace-bar/pace-model.js +288 -0
  271. package/registry/blocks/record-grid/README.md +100 -0
  272. package/registry/blocks/record-grid/block.json +28 -0
  273. package/registry/blocks/record-grid/demo.jsx +43 -0
  274. package/registry/blocks/record-grid/index.js +3 -0
  275. package/registry/blocks/record-grid/record-grid.jsx +251 -0
  276. package/registry/blocks/run-history/README.md +138 -0
  277. package/registry/blocks/run-history/block.json +10 -0
  278. package/registry/blocks/run-history/demo.jsx +74 -0
  279. package/registry/blocks/run-history/index.js +3 -0
  280. package/registry/blocks/run-history/run-history.jsx +218 -0
  281. package/registry/blocks/run-view/README.md +174 -0
  282. package/registry/blocks/run-view/block.json +50 -0
  283. package/registry/blocks/run-view/demo.jsx +286 -0
  284. package/registry/blocks/run-view/index.js +5 -0
  285. package/registry/blocks/run-view/run-controls.jsx +266 -0
  286. package/registry/blocks/run-view/run-view.jsx +236 -0
  287. package/registry/blocks/run-view/runs-list.jsx +99 -0
  288. package/registry/blocks/schedule-card/README.md +121 -0
  289. package/registry/blocks/schedule-card/block.json +10 -0
  290. package/registry/blocks/schedule-card/demo.jsx +82 -0
  291. package/registry/blocks/schedule-card/index.js +3 -0
  292. package/registry/blocks/schedule-card/schedule-card.jsx +136 -0
  293. package/registry/blocks/schedule-engine/README.md +137 -0
  294. package/registry/blocks/schedule-engine/block.json +10 -0
  295. package/registry/blocks/schedule-engine/demo.jsx +82 -0
  296. package/registry/blocks/schedule-engine/engine.js +769 -0
  297. package/registry/blocks/schedule-engine/index.js +9 -0
  298. package/registry/blocks/schedule-engine/ops.js +71 -0
  299. package/registry/blocks/schedule-engine/place.js +294 -0
  300. package/registry/blocks/schedule-engine/tree.js +79 -0
  301. package/registry/blocks/schedule-engine/waits.js +80 -0
  302. package/registry/blocks/schedule-gantt/README.md +159 -0
  303. package/registry/blocks/schedule-gantt/block.json +10 -0
  304. package/registry/blocks/schedule-gantt/demo.jsx +223 -0
  305. package/registry/blocks/schedule-gantt/gantt-model.js +219 -0
  306. package/registry/blocks/schedule-gantt/geometry.js +176 -0
  307. package/registry/blocks/schedule-gantt/index.js +26 -0
  308. package/registry/blocks/schedule-gantt/schedule-gantt.jsx +882 -0
  309. package/registry/blocks/schedule-gantt/sheet.jsx +372 -0
  310. package/registry/blocks/schedule-gantt/track.jsx +190 -0
  311. package/registry/blocks/schedule-ruler/README.md +148 -0
  312. package/registry/blocks/schedule-ruler/block.json +10 -0
  313. package/registry/blocks/schedule-ruler/demo.jsx +181 -0
  314. package/registry/blocks/schedule-ruler/index.js +21 -0
  315. package/registry/blocks/schedule-ruler/ruler-model.js +239 -0
  316. package/registry/blocks/schedule-ruler/schedule-ruler.jsx +548 -0
  317. package/registry/blocks/source-receipt/README.md +97 -0
  318. package/registry/blocks/source-receipt/block.json +30 -0
  319. package/registry/blocks/source-receipt/demo.jsx +71 -0
  320. package/registry/blocks/source-receipt/index.js +3 -0
  321. package/registry/blocks/source-receipt/source-receipt.jsx +107 -0
  322. package/registry/blocks/spreadsheet/spreadsheet.jsx +15 -1
  323. package/registry/blocks/step-picker/README.md +78 -0
  324. package/registry/blocks/step-picker/block.json +31 -0
  325. package/registry/blocks/step-picker/demo.jsx +23 -0
  326. package/registry/blocks/step-picker/index.js +3 -0
  327. package/registry/blocks/step-picker/step-picker.jsx +144 -0
  328. package/registry/blocks/step-settings/README.md +100 -0
  329. package/registry/blocks/step-settings/block.json +44 -0
  330. package/registry/blocks/step-settings/demo.jsx +93 -0
  331. package/registry/blocks/step-settings/fields.jsx +58 -0
  332. package/registry/blocks/step-settings/flow-settings.jsx +115 -0
  333. package/registry/blocks/step-settings/index.js +5 -0
  334. package/registry/blocks/step-settings/step-settings.jsx +290 -0
  335. package/registry/blocks/suggestion/README.md +171 -0
  336. package/registry/blocks/suggestion/block.json +40 -0
  337. package/registry/blocks/suggestion/demo.jsx +91 -0
  338. package/registry/blocks/suggestion/index.js +3 -0
  339. package/registry/blocks/suggestion/suggestion.jsx +436 -0
  340. package/registry/blocks/sum-bar/README.md +122 -0
  341. package/registry/blocks/sum-bar/block.json +10 -0
  342. package/registry/blocks/sum-bar/demo.jsx +110 -0
  343. package/registry/blocks/sum-bar/index.js +5 -0
  344. package/registry/blocks/sum-bar/sum-bar.jsx +209 -0
  345. package/registry/blocks/sum-bar/sum-model.js +126 -0
  346. package/registry/blocks/tier-map/README.md +217 -0
  347. package/registry/blocks/tier-map/block.json +10 -0
  348. package/registry/blocks/tier-map/demo.jsx +222 -0
  349. package/registry/blocks/tier-map/index.js +24 -0
  350. package/registry/blocks/tier-map/tier-map.jsx +574 -0
  351. package/registry/blocks/tier-map/tier-model.js +318 -0
  352. package/registry/blocks/time-grid/README.md +305 -0
  353. package/registry/blocks/time-grid/block.json +10 -0
  354. package/registry/blocks/time-grid/demo.jsx +279 -0
  355. package/registry/blocks/time-grid/grid-model.js +322 -0
  356. package/registry/blocks/time-grid/index.js +25 -0
  357. package/registry/blocks/time-grid/time-grid.jsx +1325 -0
  358. package/registry/blocks/time-strip/README.md +141 -0
  359. package/registry/blocks/time-strip/block.json +10 -0
  360. package/registry/blocks/time-strip/demo.jsx +129 -0
  361. package/registry/blocks/time-strip/index.js +19 -0
  362. package/registry/blocks/time-strip/strip-model.js +178 -0
  363. package/registry/blocks/time-strip/time-strip.jsx +260 -0
  364. package/registry/blocks/top-bar/README.md +149 -0
  365. package/registry/blocks/top-bar/block.json +35 -0
  366. package/registry/blocks/top-bar/demo.jsx +78 -0
  367. package/registry/blocks/top-bar/index.js +5 -0
  368. package/registry/blocks/top-bar/probe-rules.js +74 -0
  369. package/registry/blocks/top-bar/top-bar-model.js +152 -0
  370. package/registry/blocks/top-bar/top-bar.jsx +244 -0
  371. package/registry/blocks/trigger-picker/README.md +98 -0
  372. package/registry/blocks/trigger-picker/block.json +38 -0
  373. package/registry/blocks/trigger-picker/demo.jsx +59 -0
  374. package/registry/blocks/trigger-picker/index.js +3 -0
  375. package/registry/blocks/trigger-picker/trigger-picker.jsx +374 -0
  376. package/registry/blocks/workflow-view/README.md +123 -0
  377. package/registry/blocks/workflow-view/block.json +10 -0
  378. package/registry/blocks/workflow-view/demo.jsx +90 -0
  379. package/registry/blocks/workflow-view/index.js +3 -0
  380. package/registry/blocks/workflow-view/workflow-view.jsx +203 -0
  381. package/src/install.mjs +77 -16
  382. package/src/registry.mjs +3 -0
  383. package/templates/next/browser/lib/data.js +6 -1
  384. package/templates/next/files/README.md +627 -24
  385. package/templates/next/files/check/automation-format.ts +2103 -0
  386. package/templates/next/files/check/automation-package.ts +142 -0
  387. package/templates/next/files/check/run.mjs +968 -9
  388. package/templates/next/files/components/ui/field.jsx +17 -4
  389. package/templates/next/files/components/ui/icon.jsx +13 -0
  390. package/templates/next/files/components/ui/index.js +2 -1
  391. package/templates/next/files/components/ui/layout.jsx +77 -2
  392. package/templates/next/files/components/ui/notice.jsx +70 -0
  393. package/templates/next/files/components/ui/page.jsx +124 -0
  394. package/templates/next/files/components/ui/stat.jsx +22 -7
  395. package/templates/next/files/components/ui/toast.jsx +6 -3
  396. package/templates/next/files/lib/automations.js +660 -0
  397. package/templates/next/files/lib/claw.js +241 -5
  398. package/templates/next/files/lib/door.js +92 -0
  399. package/templates/next/files/lib/hooks.js +1677 -8
  400. package/templates/next/files/lib/platform.js +529 -21
  401. package/templates/next/template.json +13 -3
@@ -0,0 +1,153 @@
1
+ "use client";
2
+
3
+ // AgentDock in the kit's AppLayout over a pretend agent — the gallery's and
4
+ // the smoke test's surface. Not installed into apps. The frame is an
5
+ // AppLayout with a rail and a top bar whose Ask button is useAgentDock's
6
+ // toggle; the dock is its `dock`. A width picker sets how wide the app is:
7
+ // at 1100 it is a column (drag its divider, or focus the divider and press
8
+ // the arrows; Home goes back to a quarter), at 700 it is a sheet over the
9
+ // app (Escape folds it). The chat is a pretend one: Chats lists two past
10
+ // chats, New chat clears, and any ask is answered after a moment. "Have the
11
+ // agent draft it" is openAgent: the dock opens with the line already sent in
12
+ // a new chat; "Start a line" puts the line in the box instead.
13
+ import { useEffect, useRef, useState } from "react";
14
+ import { AppLayout, Button, ButtonGroup } from "../components/ui";
15
+ import { AgentDock, openAgent, useAgentDock } from "../components/blocks/agent-dock";
16
+ import { AgentPane } from "../components/blocks/agent-pane";
17
+
18
+ const CHATS = {
19
+ items: [
20
+ { sessionId: "past-1", requestId: "q1", title: "Who should we follow up with this week?", mark: "needs", at: new Date(Date.now() - 20 * 60 * 1000).toISOString() },
21
+ { sessionId: "past-2", requestId: "q2", title: "Weekly pipeline read", mark: null, at: new Date(Date.now() - 3 * 3600 * 1000).toISOString() },
22
+ ],
23
+ loading: false,
24
+ error: null,
25
+ unavailable: false,
26
+ };
27
+
28
+ function usePretendChat(withChats) {
29
+ const [messages, setMessages] = useState([]);
30
+ const [state, setState] = useState(null);
31
+ const timers = useRef([]);
32
+ useEffect(() => () => timers.current.forEach(clearTimeout), []);
33
+ return {
34
+ sessionId: messages.length ? "demo" : null,
35
+ state,
36
+ needs: null,
37
+ turns: [],
38
+ view: { messages, thinking: state === "working", failure: null, questions: [] },
39
+ place: "app",
40
+ request: messages.length ? { id: "demo-request", title: "Ask" } : null,
41
+ pending: null,
42
+ sending: false,
43
+ loading: false,
44
+ error: null,
45
+ unavailable: false,
46
+ chats: withChats ? CHATS : { items: [], loading: false, error: null, unavailable: false },
47
+ send: (text) => {
48
+ const id = `m${Date.now()}`;
49
+ setState("working");
50
+ setMessages((m) => [...m, { id: `${id}u`, role: "user", text, files: [] }]);
51
+ timers.current.push(
52
+ setTimeout(() => {
53
+ setMessages((m) => [...m, { id: `${id}a`, role: "assistant", live: false, blocks: [{ kind: "text", key: "t", text: "Three people have gone quiet for over two weeks. Want me to draft a note to each?", streaming: false }] }]);
54
+ setState("done");
55
+ }, 900),
56
+ );
57
+ },
58
+ answer: async () => ({ ok: true }),
59
+ stop: () => setState("stopped"),
60
+ openOnDesk: () => true,
61
+ openRequest: () => true,
62
+ openSession: () => undefined,
63
+ callDetail: async () => ({ ok: false }),
64
+ newChat: () => {
65
+ setMessages([]);
66
+ setState(null);
67
+ },
68
+ reload: () => undefined,
69
+ };
70
+ }
71
+
72
+ const WIDTHS = [
73
+ { id: "1100", label: "1100 px (a column)" },
74
+ { id: "700", label: "700 px (a sheet)" },
75
+ ];
76
+
77
+ function Frame({ withChats, label }) {
78
+ const dock = useAgentDock({ storageKey: "gallery-dock" });
79
+ const chat = usePretendChat(withChats);
80
+ return (
81
+ <AppLayout
82
+ height="parent"
83
+ navigationWidth={160}
84
+ navigation={<nav className="grid gap-1 p-3 text-sm"><span className="font-medium">People</span><span className="text-muted-foreground">Companies</span><span className="text-muted-foreground">Deals</span></nav>}
85
+ header={
86
+ <div className="flex h-10 items-center justify-between gap-2 px-3 text-sm">
87
+ <span className="font-semibold">{label}</span>
88
+ <Button size="sm" variant={dock.open ? "secondary" : "primary"} icon="sparkles" onClick={dock.toggle} aria-pressed={dock.open}>
89
+ Ask
90
+ </Button>
91
+ </div>
92
+ }
93
+ dock={
94
+ <AgentDock dock={dock} label="Ask the agent">
95
+ <AgentPane
96
+ chat={chat}
97
+ title="Ask the agent"
98
+ empty="The agent reads every person and deal. What it changes you can take back."
99
+ suggestions={["Who should we follow up with?", "What changed this week?"]}
100
+ />
101
+ </AgentDock>
102
+ }
103
+ className="text-sm"
104
+ >
105
+ <div className="grid gap-3 p-6">
106
+ <h2 className="text-lg font-semibold">People</h2>
107
+ <p className="max-w-prose text-muted-foreground">The content reflows beside the column and keeps its own scroll. Ask opens the dock; the close in its head folds it; the width and the open state are kept in this browser.</p>
108
+ {/* "Have the agent do it" (X9): the dock opens with the line already sent in a new chat, no form first. */}
109
+ <div className="flex flex-wrap gap-2">
110
+ <Button variant="primary" icon="sparkles" onClick={() => openAgent("Draft a project plan for me")}>
111
+ Have the agent draft it
112
+ </Button>
113
+ <Button onClick={() => openAgent({ ask: "Draft a project plan for ", send: false })}>Start a line</Button>
114
+ </div>
115
+ {Array.from({ length: 12 }, (_, i) => (
116
+ <div key={i} className="rounded-[var(--radius)] border border-border px-3 py-2">
117
+ Row {i + 1}: a person, a company, the last time you spoke.
118
+ </div>
119
+ ))}
120
+ </div>
121
+ </AppLayout>
122
+ );
123
+ }
124
+
125
+ export default function AgentDockDemo() {
126
+ const [width, setWidth] = useState("1100");
127
+ const [chats, setChats] = useState("some");
128
+ return (
129
+ <div className="grid gap-3 p-6">
130
+ <div className="flex flex-wrap items-center gap-3">
131
+ <ButtonGroup>
132
+ {WIDTHS.map((w) => (
133
+ <Button key={w.id} size="sm" variant={width === w.id ? "secondary" : "quiet"} onClick={() => setWidth(w.id)}>
134
+ {w.label}
135
+ </Button>
136
+ ))}
137
+ </ButtonGroup>
138
+ <ButtonGroup>
139
+ <Button size="sm" variant={chats === "some" ? "secondary" : "quiet"} onClick={() => setChats("some")}>
140
+ Past chats
141
+ </Button>
142
+ <Button size="sm" variant={chats === "none" ? "secondary" : "quiet"} onClick={() => setChats("none")}>
143
+ No chats yet
144
+ </Button>
145
+ </ButtonGroup>
146
+ </div>
147
+ {/* The transform makes this box the sheet's containing block, so a sheet lays over this frame in the gallery as it lays over an app's window. */}
148
+ <div className="h-[640px] max-w-full overflow-hidden rounded-lg border border-border" style={{ width: `${width}px`, transform: "translateZ(0)" }}>
149
+ <Frame key={`${chats}`} withChats={chats === "some"} label="Pinewood CRM" />
150
+ </div>
151
+ </div>
152
+ );
153
+ }
@@ -0,0 +1,118 @@
1
+ // agent-dock: the numbers and the keys, as plain functions (they work on the
2
+ // server too, and test/agent-dock.test.mjs holds them).
3
+ //
4
+ // The dock is a column beside the work. Its width is the member's to drag:
5
+ // never under MIN_W, never over half the body it sits in, a quarter of it
6
+ // until dragged. Below `columnAt` px of body the column has no room and the
7
+ // dock becomes a sheet laid over the app.
8
+
9
+ /** The narrowest the column goes, px. */
10
+ export const MIN_W = 280;
11
+ /** One press of an arrow key on the divider, px. */
12
+ export const STEP = 16;
13
+ /** The body width from which the dock is a column beside the work (the
14
+ * desk's own agent column uses 900). */
15
+ export const COLUMN_AT = 900;
16
+ /** The share of the body the column takes until it is dragged. */
17
+ export const DEFAULT_SHARE = 0.25;
18
+
19
+ /** The widest the column goes in a body this wide: half of it, never under MIN_W. */
20
+ export function maxWidth(body) {
21
+ const b = Number(body);
22
+ return Math.max(MIN_W, Number.isFinite(b) && b > 0 ? Math.floor(b / 2) : MIN_W);
23
+ }
24
+
25
+ /** A width kept inside its bounds, whole px. */
26
+ export function clampWidth(width, body) {
27
+ const w = Number(width);
28
+ if (!Number.isFinite(w)) return MIN_W;
29
+ return Math.min(maxWidth(body), Math.max(MIN_W, Math.round(w)));
30
+ }
31
+
32
+ /** What a stored width is worth: a whole number of px at least MIN_W, else
33
+ * null (the default). The CSS clamps it again whatever was stored. */
34
+ export function storedWidth(raw) {
35
+ if (raw === null || raw === undefined || raw === "") return null;
36
+ const n = Number(raw);
37
+ return Number.isFinite(n) && n >= MIN_W ? Math.round(n) : null;
38
+ }
39
+
40
+ /** The width the column has now: the dragged one, else a quarter of the
41
+ * body, kept inside the same bounds the CSS uses. */
42
+ export function columnWidth(width, body) {
43
+ const b = Number(body) > 0 ? Number(body) : 0;
44
+ return clampWidth(width ?? b * DEFAULT_SHARE, b);
45
+ }
46
+
47
+ /** Is there room for a column beside the work? An unmeasured body (0) is
48
+ * taken to have room: the first paint is never a sheet by mistake. */
49
+ export function hasRoom(body, columnAt = COLUMN_AT) {
50
+ const b = Number(body);
51
+ return !(Number.isFinite(b) && b > 0) || b >= columnAt;
52
+ }
53
+
54
+ /** The divider dragged: the pointer moving left widens the column. */
55
+ export function dragged(startWidth, startX, x, body) {
56
+ return clampWidth(Number(startWidth) - (Number(x) - Number(startX)), body);
57
+ }
58
+
59
+ /** The divider's keys. Left widens, Right narrows, End opens it to the
60
+ * widest, Home goes back to the default (null). `undefined` = not ours. */
61
+ export function nudged(key, now, body) {
62
+ if (key === "ArrowLeft") return clampWidth(Number(now) + STEP, body);
63
+ if (key === "ArrowRight") return clampWidth(Number(now) - STEP, body);
64
+ if (key === "End") return maxWidth(body);
65
+ if (key === "Home") return null;
66
+ return undefined;
67
+ }
68
+
69
+ /** The two keys this browser keeps for one app's dock. */
70
+ export function dockKeys(storageKey) {
71
+ const k = String(storageKey || "app").replace(/[^\w.-]+/g, "-");
72
+ return { open: `mc.dock.${k}.open`, width: `mc.dock.${k}.width` };
73
+ }
74
+
75
+ // ---- "have the agent do it" (X9) -------------------------------------------
76
+ //
77
+ // A button that says the agent will do the work does not open a form. It
78
+ // opens the dock with the agent's first line already sent (or in the box),
79
+ // and the agent asks only for what it is missing, in the chat. openAgent()
80
+ // (agent-dock.jsx) is the call; this is its message.
81
+
82
+ /** The window event openAgent() dispatches; every useAgentDock hears it. */
83
+ export const OPEN_EVENT = "mc:agent-dock:open";
84
+
85
+ let seq = 0;
86
+
87
+ /**
88
+ * What openAgent was asked, made whole. The argument is a line ("Draft a
89
+ * project plan for me") or an object:
90
+ *
91
+ * ask the starting line
92
+ * send true (the default): send it as the member's first words.
93
+ * false: put it in the box for the member to finish
94
+ * fresh true (the default): in a new chat, so it is its own thing
95
+ * and not a follow-up. false: carry on in the open one
96
+ * storageKey only the dock of that app (default: any dock on the page)
97
+ *
98
+ * → { ask, send, fresh, storageKey, nonce }. The line is kept as given (a
99
+ * trailing space is where the member goes on typing); the pane trims what it
100
+ * sends. The nonce is new every call: a pane takes a nonce once.
101
+ */
102
+ export function openRequest(input, now = Date.now()) {
103
+ const o = typeof input === "string" ? { ask: input } : (input ?? {});
104
+ return {
105
+ ask: String(o.ask ?? ""),
106
+ send: o.send !== false,
107
+ fresh: o.fresh !== false,
108
+ storageKey: o.storageKey ? String(o.storageKey) : null,
109
+ nonce: `${now}-${++seq}`,
110
+ };
111
+ }
112
+
113
+ /** Does an openAgent call carry a line for the pane? With no line
114
+ * (`openAgent()`, `{ ask: "" }`, a blank string) the dock only opens: nothing
115
+ * is sent and no chat is started. */
116
+ export function carriesLine(request) {
117
+ return Boolean(String(request?.ask ?? "").trim());
118
+ }
@@ -0,0 +1,5 @@
1
+ // The AgentDock block — `makersclaw add agent-dock`. Fixed: compose it
2
+ // through its props (README.md beside this file). The model's helpers are
3
+ // plain functions; they work on the server too.
4
+ export { AgentDock, openAgent, useAgentDock } from "./agent-dock";
5
+ export { COLUMN_AT, DEFAULT_SHARE, MIN_W, OPEN_EVENT, STEP, carriesLine, clampWidth, columnWidth, dockKeys, dragged, hasRoom, maxWidth, nudged, openRequest, storedWidth } from "./dock-model";
@@ -0,0 +1,73 @@
1
+ # AgentKit
2
+
3
+ What the app's agent knows and what it can do, shown inside the app.
4
+ Part of the agent kit (0.8.1).
5
+
6
+ - **What it knows** — its skills. The app's own references first, each
7
+ with when the agent reads it ("Before writing a follow-up"); then the
8
+ skills added on top, marked **Added**, and **Not installed** where one
9
+ is not yet.
10
+ - **What it can do** — its tools: the app's declared actions, by what
11
+ they do ("Move a deal to another stage"), with the action's name
12
+ under it.
13
+
14
+ Read only. Adding or removing a skill is the window's Settings › Skills;
15
+ `onManage` opens it ("Manage in Settings").
16
+
17
+ ```jsx
18
+ import { AgentKit } from "../components/blocks/agent-kit"; // a Makersclaw app
19
+ import { AgentKit } from "@/components/makersclaw/blocks/agent-kit"; // a shadcn project
20
+ ```
21
+
22
+ A client component. Its own width decides its layout: the two lists sit
23
+ side by side from about 768 px, one over the other below.
24
+
25
+ ## Props
26
+
27
+ - `skills` — useAgentKit's `skills`: `[{ name, title, when, from: "app"
28
+ | "added", installed }]`.
29
+ - `tools` — useAgentKit's `tools`: `[{ name, description }]` (only the
30
+ actions the agent may run; one declared `"agent": false` is left out).
31
+ - `onManage` — opens the window's Settings › Skills. Leave it out for no
32
+ button. `manageLabel` — its words (default "Manage in Settings").
33
+ - `title` — the head (default "The agent"); `null` for none.
34
+ - `empty` — `{ skills, tools }`: what an empty list says.
35
+ - `className` — layout around it. Never colour.
36
+
37
+ ## useAgentKit (lib/hooks.js)
38
+
39
+ ```js
40
+ const { skills, tools } = useAgentKit();
41
+ ```
42
+
43
+ It reads `GET _claw/agent` once: `own_skills` (`{ name, title, when }`,
44
+ from the app's `references/*.md`), `skills` (added on top, `{ name,
45
+ installed }`) and `actions` (`{ name, description, agent }`, the
46
+ declared actions). On a claw from before `own_skills` and `actions` it
47
+ answers empty lists: the block says so plainly, never an error.
48
+
49
+ ## Who may do what
50
+
51
+ Any member reads it. Adding or removing a skill: the window's Settings ›
52
+ Skills, on the desk, by whoever may change the app there.
53
+
54
+ ## Never
55
+
56
+ - Never an Add or Remove of a skill here: that is the desk's.
57
+ - Never the agent's instructions (its brief) word for word: they are
58
+ for the agent. Say what it knows by its skills' titles.
59
+ - Never a tool the app does not declare: the list is the declared
60
+ actions, nothing written by hand.
61
+
62
+ ## Example
63
+
64
+ ```jsx
65
+ "use client";
66
+ import { useAgentKit } from "../lib/hooks";
67
+ import { AgentKit } from "../components/blocks/agent-kit";
68
+
69
+ export default function AboutTheAgent({ openSettings }) {
70
+ const { skills, tools } = useAgentKit();
71
+ return <AgentKit title="What the CRM's agent knows" skills={skills} tools={tools} onManage={openSettings} />;
72
+ }
73
+ ```
@@ -0,0 +1,86 @@
1
+ "use client";
2
+
3
+ // What the app's agent knows and what it can do, inside the app: its
4
+ // skills (the app's own references, with when it reads each, and those
5
+ // added on top, marked added and, where so, not installed) and its tools
6
+ // (the app's declared actions). Props in, callbacks out; read only —
7
+ // adding or removing a skill stays in the window's Settings › Skills,
8
+ // which onManage opens. Tokens only. Its own width decides its layout
9
+ // (@container): the two lists sit side by side from about 768 px.
10
+
11
+ import { Badge, Button, Icon, cx } from "../../ui";
12
+
13
+ function Section({ icon, title, count, children }) {
14
+ return (
15
+ <section aria-label={title} className="grid min-w-0 content-start gap-1">
16
+ <h3 className="m-0 flex min-w-0 items-center gap-2 px-3.5 pt-3 text-sm font-semibold">
17
+ <Icon name={icon} size={14} className="shrink-0 text-muted-foreground" />
18
+ <span className="truncate">{title}</span>
19
+ {count ? <span className="text-xs font-normal tabular-nums text-muted-foreground">{count}</span> : null}
20
+ </h3>
21
+ {children}
22
+ </section>
23
+ );
24
+ }
25
+
26
+ /**
27
+ * skills [{ name, title, when, from: "app" | "added", installed }]
28
+ * (useAgentKit's `skills`)
29
+ * tools [{ name, description }] (useAgentKit's `tools`)
30
+ * onManage opens the window's Settings › Skills; leave it out for none
31
+ * manageLabel its words (default "Manage in Settings")
32
+ * title the head (default "The agent"); null for none
33
+ * empty { skills, tools }: what an empty list says
34
+ */
35
+ export function AgentKit({ skills = [], tools = [], onManage, manageLabel = "Manage in Settings", title = "The agent", empty, className }) {
36
+ const known = Array.isArray(skills) ? skills : [];
37
+ const can = Array.isArray(tools) ? tools : [];
38
+ return (
39
+ <section aria-label={title ?? "The agent"} className={cx("@container grid min-w-0 overflow-hidden rounded-[var(--radius)] border border-border bg-card text-card-foreground", className)}>
40
+ {title || onManage ? (
41
+ <header className="flex min-w-0 flex-wrap items-center gap-2 border-b border-border px-3.5 py-2">
42
+ {title ? <b className="min-w-0 flex-1 truncate text-sm font-semibold">{title}</b> : <span className="flex-1" />}
43
+ {onManage ? (
44
+ <Button size="sm" variant="quiet" icon="settings" onClick={onManage}>
45
+ {manageLabel}
46
+ </Button>
47
+ ) : null}
48
+ </header>
49
+ ) : null}
50
+ <div className="grid min-w-0 divide-y divide-border @3xl:grid-cols-2 @3xl:divide-x @3xl:divide-y-0">
51
+ <Section icon="lightbulb" title="What it knows" count={known.length || null}>
52
+ {known.length ? (
53
+ <ul className="m-0 grid list-none p-0 pb-1.5">
54
+ {known.map((s) => (
55
+ <li key={`${s.from}-${s.name}`} className="grid min-w-0 gap-0.5 px-3.5 py-2">
56
+ <span className="flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1">
57
+ <span className="min-w-0 truncate text-[13px] font-medium">{s.title || s.name}</span>
58
+ {s.from === "added" ? <Badge tone="info">Added</Badge> : null}
59
+ {s.from === "added" && !s.installed ? <Badge tone="warning">Not installed</Badge> : null}
60
+ </span>
61
+ {s.when ? <span className="line-clamp-2 text-xs text-muted-foreground">{s.when}</span> : null}
62
+ </li>
63
+ ))}
64
+ </ul>
65
+ ) : (
66
+ <p className="m-0 px-3.5 pb-3 text-[13px] text-muted-foreground">{empty?.skills ?? "Nothing of its own yet: it works from the app's instructions."}</p>
67
+ )}
68
+ </Section>
69
+ <Section icon="wand" title="What it can do" count={can.length || null}>
70
+ {can.length ? (
71
+ <ul className="m-0 grid list-none p-0 pb-1.5">
72
+ {can.map((t) => (
73
+ <li key={t.name} className="grid min-w-0 gap-0.5 px-3.5 py-2">
74
+ <span className="min-w-0 text-[13px]">{t.description || t.name}</span>
75
+ {t.description ? <code className="truncate text-[11.5px] text-muted-foreground">{t.name}</code> : null}
76
+ </li>
77
+ ))}
78
+ </ul>
79
+ ) : (
80
+ <p className="m-0 px-3.5 pb-3 text-[13px] text-muted-foreground">{empty?.tools ?? "No actions declared yet: it reads, and asks before it writes."}</p>
81
+ )}
82
+ </Section>
83
+ </div>
84
+ </section>
85
+ );
86
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "agent-kit",
3
+ "title": "AgentKit",
4
+ "description": "What the app's agent knows and what it can do, inside the app: its skills (the app's own references, each with when the agent reads it, and the skills added on top, marked Added and, where so, Not installed) and its tools (the app's declared actions, by what they do). Read only; \"Manage in Settings\" (onManage) opens the window's Settings › Skills, where skills are added and removed. It draws what useAgentKit() returns (lib/hooks.js, GET _claw/agent).",
5
+ "useWhen": "An app shows its member what its agent is for and may do: an About the agent page, a side card beside the agent's chat, a settings screen's Agent section, a help panel (\"What can I ask?\"). For the agent's runs use run-history; for its schedule use schedule-card; for the chat itself use agent-chat.",
6
+ "tags": ["skills", "tools", "actions", "capabilities", "knowledge", "about", "settings", "help", "kit"],
7
+ "exports": ["AgentKit"],
8
+ "files": ["index.js", "agent-kit.jsx"],
9
+ "requires": []
10
+ }
@@ -0,0 +1,35 @@
1
+ "use client";
2
+
3
+ // AgentKit with a pretend agent — the gallery's and the smoke test's
4
+ // surface. Not installed into apps. A CRM's agent at 800 px (side by
5
+ // side from 768), the same at 320 px, and a new app's agent with nothing
6
+ // of its own yet.
7
+ import { AgentKit } from "../components/blocks/agent-kit";
8
+
9
+ const SKILLS = [
10
+ { name: "reading-mail", title: "Reading the morning mail", when: "On every morning read, before it files a thread under a person", from: "app", installed: true },
11
+ { name: "drafting", title: "Drafting follow-ups", when: "Before it writes a follow-up: the tone, the length, never a promise of a date", from: "app", installed: true },
12
+ { name: "deal-stages", title: "What each deal stage means", when: "Before it moves a deal", from: "app", installed: true },
13
+ { name: "web-research", title: "web-research", when: null, from: "added", installed: true },
14
+ { name: "linkedin-lookup", title: "linkedin-lookup", when: null, from: "added", installed: false },
15
+ ];
16
+
17
+ const TOOLS = [
18
+ { name: "add_person", description: "Add a person, with where they were found" },
19
+ { name: "update_person", description: "Change a person's details" },
20
+ { name: "move_deal", description: "Move a deal to another stage" },
21
+ { name: "log_meeting", description: "Put a meeting on a person's timeline" },
22
+ { name: "draft_follow_up", description: "Draft a follow-up for your yes" },
23
+ ];
24
+
25
+ export default function AgentKitDemo() {
26
+ return (
27
+ <div className="grid gap-6 p-4">
28
+ <AgentKit className="w-full max-w-[800px]" title="What the CRM's agent knows" skills={SKILLS} tools={TOOLS} onManage={() => {}} />
29
+ <div className="flex flex-wrap items-start gap-4">
30
+ <AgentKit className="w-full max-w-[320px]" skills={SKILLS.slice(0, 3)} tools={TOOLS.slice(0, 3)} onManage={() => {}} />
31
+ <AgentKit className="w-full max-w-[368px]" title="A new app's agent" skills={[]} tools={[]} />
32
+ </div>
33
+ </div>
34
+ );
35
+ }
@@ -0,0 +1,3 @@
1
+ // The AgentKit block — `makersclaw add agent-kit`. Fixed: compose it
2
+ // through its props (README.md beside this file).
3
+ export { AgentKit } from "./agent-kit";
@@ -0,0 +1,80 @@
1
+ # AgentMarks
2
+
3
+ Two marks and a byline, one of each for the whole platform.
4
+
5
+ - **AgentMark** — a filled diamond. The agent's work: it read, used
6
+ tools, wrote. It may cost more than one call.
7
+ - **CallMark** — a sparkle in a dashed ring. One model call: no
8
+ conversation, no tools ("Shorter · 1 cr").
9
+ - **Byline** — who did it, in words: "By the agent, on Priya's ask ·
10
+ 11:20".
11
+
12
+ Before the kit, the store's apps drew the agent in six different glyphs.
13
+ A member who learns the diamond in one app now reads it in every app.
14
+
15
+ The two marks differ in **shape**, filled against dashed. Never tell them
16
+ apart by colour alone, and never draw a sparkle or a robot of your own.
17
+
18
+ ```jsx
19
+ import { AgentMark, CallMark, Byline } from "../components/blocks/agent-marks"; // a Makersclaw app ("./blocks/agent-marks" from components/)
20
+ import { AgentMark, CallMark, Byline } from "@/components/makersclaw/blocks/agent-marks"; // a shadcn project
21
+ ```
22
+
23
+ No data, no hook, no door. Props in.
24
+
25
+ ## Props
26
+
27
+ ### AgentMark · CallMark
28
+
29
+ - `label` — what a screen reader hears when the mark stands alone ("The
30
+ agent", "One model call"). Leave it out when words beside the mark
31
+ already say it: the mark is then decoration.
32
+ - `size` — `xs` · `sm` (default, 12px) · `md` · `lg`, or pixels.
33
+ - `children` — words drawn beside the mark ("Agent", "1 call").
34
+ - `className` — layout around it. Never colour: the agent's mark is the
35
+ theme's `primary`, the call's is muted.
36
+
37
+ ### Byline
38
+
39
+ - `by` — `"agent"` (the default; its mark leads), `"call"` (one model
40
+ call), or a person's name ("Owen").
41
+ - `ask` — whose ask the agent worked on: a name ("Priya" → "on Priya's
42
+ ask"), `"you"` ("on your ask"), or `"run"` for a scheduled job's run
43
+ ("on a run").
44
+ - `at` — when: words ("11:20"), a `Date`, or an ISO string (today reads
45
+ as the time, another day as "12 Sep").
46
+ - `mark` — `false` drops the mark before the words, for a head that
47
+ already draws one.
48
+
49
+ ## Where each one goes
50
+
51
+ - A value the agent wrote, in a cell or beside a field: `AgentMark` with
52
+ `label="Written by the agent"`.
53
+ - A button that makes one model call: `CallMark` (the `ai-action` block
54
+ draws it for you).
55
+ - The head of a receipt, a timeline line, a draft: `Byline`.
56
+
57
+ ## Never
58
+
59
+ - Never mark a person's own work with either mark.
60
+ - Never use `AgentMark` for one model call, or `CallMark` for an ask: the
61
+ member reads cost and reach from the shape.
62
+ - Never colour a mark through `className`.
63
+
64
+ ## Example
65
+
66
+ ```jsx
67
+ import { AgentMark, Byline } from "./blocks/agent-marks";
68
+
69
+ export function WrittenBy({ note }) {
70
+ return (
71
+ <div className="grid gap-1">
72
+ <p className="flex items-center gap-1.5">
73
+ <AgentMark label="Written by the agent" />
74
+ {note.text}
75
+ </p>
76
+ <Byline by="agent" ask={note.asked_by_name} at={note.created_at} />
77
+ </div>
78
+ );
79
+ }
80
+ ```