@kitn.ai/ui 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/README.md +25 -6
  2. package/bin/mcp.js +16 -3
  3. package/bin/route.js +23 -0
  4. package/bin/route.test.js +58 -0
  5. package/dist/{elements/chunks/Icon--Y8vsFal.js → Icon-DObhsRtm.js} +1 -1
  6. package/dist/action-icons-CcgNN2oT.js +1 -0
  7. package/dist/arrow-down-CjRU3JgV.js +1 -0
  8. package/dist/arrow-left-Bnpb1UEW.js +1 -0
  9. package/dist/artifact-Bwt7OgcR.js +1 -0
  10. package/dist/assets/dev-5XzXYR21.js +91 -0
  11. package/dist/attachments-Qr4kg-2b.js +1 -0
  12. package/dist/{elements/chunks/audio-visualizer-D7lB6mvR.js → audio-visualizer-DToYdfSc.js} +1 -1
  13. package/dist/badge-CdEu_jn2.js +1 -0
  14. package/dist/bash-InADTalH.js +1 -6
  15. package/dist/bell-DQAAOpDz.js +1 -0
  16. package/dist/{elements/chunks/button-flUbeufF.js → button-DkuOnGLy.js} +1 -1
  17. package/dist/card-renderer-Jx70m6_l.js +1 -0
  18. package/dist/card-routing-0YidER_3.js +1 -0
  19. package/dist/check-njkVdZu2.js +1 -0
  20. package/dist/checkbox-D7iRB3nL.js +1 -0
  21. package/dist/checkbox-group-B2_rpoPM.js +1 -0
  22. package/dist/chevron-down-B72s6PXR.js +1 -0
  23. package/dist/chevron-right-BatuHzUm.js +1 -0
  24. package/dist/choice-card-m0BYqqOK.js +1 -0
  25. package/dist/circle-check-B62pODB3.js +1 -0
  26. package/dist/circle-x-BPG0iPst.js +1 -0
  27. package/dist/circle-zx0ByzY9.js +1 -0
  28. package/dist/{elements/chunks/cn-CU7UAWzk.js → cn-DN5AWfiS.js} +1 -1
  29. package/dist/code-block-ClMLKb7C.js +1 -0
  30. package/dist/{elements/chunks/collapsible-BzbXpPzr.js → collapsible-B4DlWicL.js} +1 -1
  31. package/dist/components/attachment-types.d.ts +7 -0
  32. package/dist/components/audio-visualizer/fit-scale.d.ts +1 -1
  33. package/dist/components/card-renderer.d.ts +13 -0
  34. package/dist/components/card.d.ts +4 -0
  35. package/dist/components/chat-thread.d.ts +135 -2
  36. package/dist/components/conversation-item.d.ts +35 -7
  37. package/dist/components/conversation-list.d.ts +17 -5
  38. package/dist/components/conversation-panel.d.ts +29 -0
  39. package/dist/components/form-widgets.d.ts +67 -2
  40. package/dist/components/form.d.ts +48 -1
  41. package/dist/components/home-panel.d.ts +34 -0
  42. package/dist/components/message.d.ts +25 -3
  43. package/dist/components/reasoning.d.ts +6 -0
  44. package/dist/components/scroll-button.d.ts +11 -0
  45. package/dist/components/thread.d.ts +5 -0
  46. package/dist/components/tool-types.d.ts +9 -0
  47. package/dist/components/widget-tab-bar.d.ts +16 -0
  48. package/dist/composer-sQ0HcvyG.js +106 -0
  49. package/dist/confirm-card-rQWDQsnC.js +1 -0
  50. package/dist/construct-cli.es.js +1337 -0
  51. package/dist/{elements/chunks/context-VLIL3sJ-.js → context-0kg4ZX1J.js} +1 -1
  52. package/dist/controllable-CnGpMF6r.js +1 -0
  53. package/dist/conversation-item-BxwQLaFJ.js +1 -0
  54. package/dist/conversation-list-BCfGN1JU.js +1 -0
  55. package/dist/copy-n9u9rqpi.js +1 -0
  56. package/dist/core-AYMC6_lb.js +12 -5874
  57. package/dist/{create-tween-BFT6c-Y8.js → create-tween-C-q-JCM-.js} +1 -1
  58. package/dist/{create-tween-CJNlzoaO.js → create-tween-CRrJXxBd.js} +1 -1
  59. package/dist/{create-tween-CQED4T0g.js → create-tween-DZ3RRDHD.js} +1 -1
  60. package/dist/{elements/chunks/create-tween-c4Z8TDYz.js → create-tween-uPkArjIG.js} +2 -2
  61. package/dist/css-M7EaDHN_.js +1 -6
  62. package/dist/custom-elements.json +1433 -202
  63. package/dist/default-input-CaMrJkgH.js +1 -0
  64. package/dist/define-By-uL588.js +1 -0
  65. package/dist/define.d.ts +4 -0
  66. package/dist/define.js +510 -0
  67. package/dist/define.server.d.ts +5 -0
  68. package/dist/define.server.js +506 -0
  69. package/dist/{elements/chunks/disclosure-CcNbyLy0.js → disclosure-WUImBbDv.js} +1 -1
  70. package/dist/{elements/chunks/dropdown-BgWTthUx.js → dropdown-wZVeJOMd.js} +1 -1
  71. package/dist/elements/agent-card.js +1 -1
  72. package/dist/elements/artifact.js +1 -1
  73. package/dist/elements/attachments.js +1 -1
  74. package/dist/elements/audio-visualizer.js +1 -1
  75. package/dist/elements/autoloader.js +1 -1
  76. package/dist/elements/avatar.js +1 -1
  77. package/dist/elements/badge.js +1 -1
  78. package/dist/elements/button.js +1 -1
  79. package/dist/elements/card.js +1 -1
  80. package/dist/elements/cards.js +1 -1
  81. package/dist/elements/chain-of-thought.js +1 -1
  82. package/dist/elements/chat-scope-picker.js +1 -1
  83. package/dist/elements/chat-workspace.js +1 -1
  84. package/dist/elements/chat.js +1 -1
  85. package/dist/elements/checkbox-group.d.ts +1 -0
  86. package/dist/elements/checkbox-group.js +1 -0
  87. package/dist/elements/checkbox.d.ts +1 -0
  88. package/dist/elements/checkbox.js +1 -0
  89. package/dist/elements/checkpoint.js +1 -1
  90. package/dist/elements/choice.js +1 -1
  91. package/dist/elements/coachmark.js +1 -1
  92. package/dist/elements/code-block.js +1 -1
  93. package/dist/elements/command.js +1 -1
  94. package/dist/elements/compare.js +1 -1
  95. package/dist/elements/composer.js +1 -1
  96. package/dist/elements/confirm-card.js +1 -1
  97. package/dist/elements/context-meter.js +1 -1
  98. package/dist/elements/conversation-item.js +1 -1
  99. package/dist/elements/conversation-list.js +1 -1
  100. package/dist/elements/define-entry.d.ts +12 -0
  101. package/dist/elements/dialog.js +1 -1
  102. package/dist/elements/dock.js +102 -8
  103. package/dist/elements/dropdown.js +1 -1
  104. package/dist/elements/editable-label.js +1 -1
  105. package/dist/elements/element-data-types.d.ts +37 -0
  106. package/dist/elements/embed.js +1 -1
  107. package/dist/elements/empty.js +1 -1
  108. package/dist/elements/feedback-bar.js +1 -1
  109. package/dist/elements/file-tree.js +1 -1
  110. package/dist/elements/file-upload.js +1 -1
  111. package/dist/elements/form.js +1 -1
  112. package/dist/elements/hover-card.js +1 -1
  113. package/dist/elements/icon.js +1 -1
  114. package/dist/elements/image.js +1 -1
  115. package/dist/elements/input.js +1 -1
  116. package/dist/elements/kbd.js +1 -1
  117. package/dist/elements/link-preview.js +1 -1
  118. package/dist/elements/loader.js +1 -1
  119. package/dist/elements/markdown.js +1 -1
  120. package/dist/elements/menu.js +1 -1
  121. package/dist/elements/message-skills.js +1 -1
  122. package/dist/elements/message.js +1 -1
  123. package/dist/elements/model-switcher.js +1 -1
  124. package/dist/elements/nav.js +1 -1
  125. package/dist/elements/notice.js +1 -1
  126. package/dist/elements/pane-grid.d.ts +1 -0
  127. package/dist/elements/pane-grid.js +1 -0
  128. package/dist/elements/pane-group.js +1 -1
  129. package/dist/elements/pane.js +1 -1
  130. package/dist/elements/popover.js +1 -1
  131. package/dist/elements/progress-bar.js +1 -1
  132. package/dist/elements/prompt-dock.js +1 -1
  133. package/dist/elements/prompt-input.js +1 -1
  134. package/dist/elements/prompt-suggestions.js +1 -1
  135. package/dist/elements/radio-group.d.ts +1 -0
  136. package/dist/elements/radio-group.js +1 -0
  137. package/dist/elements/reasoning.js +1 -1
  138. package/dist/elements/remote.js +1 -1
  139. package/dist/elements/resizable.js +1 -1
  140. package/dist/elements/response-stream.js +2 -2
  141. package/dist/elements/screen.js +1 -1
  142. package/dist/elements/scroll-area.js +1 -1
  143. package/dist/elements/scroll-button.js +1 -1
  144. package/dist/elements/search.js +1 -1
  145. package/dist/elements/segmented.js +1 -1
  146. package/dist/elements/select.d.ts +1 -0
  147. package/dist/elements/select.js +1 -0
  148. package/dist/elements/separator.js +1 -1
  149. package/dist/elements/setting-item.js +1 -1
  150. package/dist/elements/settings-group.js +1 -1
  151. package/dist/elements/skeleton.js +1 -1
  152. package/dist/elements/slider.d.ts +1 -0
  153. package/dist/elements/slider.js +1 -0
  154. package/dist/elements/slots.d.ts +1 -1
  155. package/dist/elements/source.js +1 -1
  156. package/dist/elements/status.js +1 -1
  157. package/dist/elements/switch.js +1 -1
  158. package/dist/elements/tabs.js +1 -1
  159. package/dist/elements/tasks.js +1 -1
  160. package/dist/elements/text-shimmer.js +1 -1
  161. package/dist/elements/thinking-bar.js +1 -1
  162. package/dist/elements/thread.js +1 -1
  163. package/dist/elements/toast.js +1 -1
  164. package/dist/elements/tool.js +1 -1
  165. package/dist/elements/tooltip.js +1 -1
  166. package/dist/elements/voice-input.js +1 -1
  167. package/dist/elements/voice-output.js +1 -1
  168. package/dist/elements.d.ts +380 -26
  169. package/dist/{elements/chunks/ellipsis-7gU33mL2.js → ellipsis-CbOpJnU3.js} +1 -1
  170. package/dist/embed-CrfjkbUG.js +1 -0
  171. package/dist/engine-javascript-vq0WuIJl.js +14 -2516
  172. package/dist/{elements/chunks/external-link-CSOEsNlx.js → external-link-ByXAwBBQ.js} +1 -1
  173. package/dist/file-text-DMib2qwt.js +1 -0
  174. package/dist/{elements/chunks/file-tree-zvB2i7P9.js → file-tree-CJqM2aP7.js} +1 -1
  175. package/dist/folder-_BAb929C.js +1 -0
  176. package/dist/form-DSZgZQZk.js +1 -0
  177. package/dist/github-dark-dimmed-DUshB20C.js +1 -4
  178. package/dist/github-light-JYsPkUQd.js +1 -4
  179. package/dist/hover-card-BQbul9eq.js +1 -0
  180. package/dist/html-CPZ3oZQ7.js +1 -10
  181. package/dist/icon-CdcfRhYI.js +1 -0
  182. package/dist/{elements/chunks/index-BCRhi84a.js → index-xu_pdcPi.js} +1 -1
  183. package/dist/index.d.ts +4 -2
  184. package/dist/index.js +7474 -5857
  185. package/dist/index.server.js +5965 -4762
  186. package/dist/info-DsFjGuI_.js +1 -0
  187. package/dist/input-DKbmkMos.js +1 -0
  188. package/dist/javascript-C25yR2R2.js +1 -6
  189. package/dist/json-DxJze_jm.js +1 -6
  190. package/dist/kai.es.js +1 -1
  191. package/dist/kbd-PvdGhX4s.js +1 -0
  192. package/dist/{elements/chunks/link-preview-OQ9IEq0f.js → link-preview-DbM1866N.js} +1 -1
  193. package/dist/link-zF8PzWfF.js +1 -0
  194. package/dist/loader-BM4CEz4G.js +1 -0
  195. package/dist/{elements/chunks/markdown-DgBFaGAz.js → markdown-LMvmAyBk.js} +7 -7
  196. package/dist/mcp.es.js +1361 -81
  197. package/dist/message-BSsgvHvf.js +1 -0
  198. package/dist/message-BYZECyek.js +1 -0
  199. package/dist/message-circle-DruwObfX.js +1 -0
  200. package/dist/message-square-BG6q6mlm.js +1 -0
  201. package/dist/{elements/chunks/minimize-2-DPIUKTrT.js → minimize-2-BQRoBV1V.js} +1 -1
  202. package/dist/{elements/chunks/model-switcher-DsT8tFB0.js → model-switcher-CMpCOYcB.js} +1 -1
  203. package/dist/{elements/chunks/overlay-DuiwdXjm.js → overlay-Cb-MkyDa.js} +1 -1
  204. package/dist/panel-right-i8warFxT.js +1 -0
  205. package/dist/paperclip-ByY3UVO6.js +1 -0
  206. package/dist/play-BvKKq3fX.js +1 -0
  207. package/dist/primitives/card-data-types.d.ts +49 -0
  208. package/dist/primitives/card-routing.d.ts +1 -33
  209. package/dist/primitives/card-validate.d.ts +2 -2
  210. package/dist/primitives/chat-config.d.ts +29 -2
  211. package/dist/primitives/conversation-store.d.ts +54 -0
  212. package/dist/primitives/field-mask.d.ts +96 -0
  213. package/dist/primitives/field-semantics.d.ts +36 -0
  214. package/dist/primitives/input-mask.d.ts +46 -0
  215. package/dist/primitives/url-scheme-policy.d.ts +34 -0
  216. package/dist/primitives/use-resize-observer.d.ts +2 -2
  217. package/dist/progress-bar-jVAHvMUf.js +1 -0
  218. package/dist/prompt-suggestion-CD-qtNgC.js +1 -0
  219. package/dist/radio-BsoBMhkF.js +1 -0
  220. package/dist/react/index.d.ts +586 -19
  221. package/dist/react.js +223 -187
  222. package/dist/reasoning-4kBPtlTx.js +1 -0
  223. package/dist/register-impl-B1hLkrI8.js +424 -0
  224. package/dist/{elements/chunks/resizable-D181b4fM.js → resizable-uPmY9VY-.js} +1 -1
  225. package/dist/rotate-ccw-B2xn93py.js +1 -0
  226. package/dist/rotate-cw-CMVLoCyH.js +1 -0
  227. package/dist/schemas/form.schema.json +21 -1
  228. package/dist/schemas/tool-defs.d.ts +11 -1
  229. package/dist/schemas.js +81 -81
  230. package/dist/scroll-area-BqLUo8ZZ.js +1 -0
  231. package/dist/scroll-button-DslXiJyL.js +1 -0
  232. package/dist/select-2cLRtPGT.js +1 -0
  233. package/dist/{elements/chunks/separator-CeJHQqLW.js → separator-BWQtNJcM.js} +1 -1
  234. package/dist/{elements/chunks/settings-CqaHgJF9.js → settings-BBR63jLg.js} +1 -1
  235. package/dist/{elements/chunks/settings-group-CjqjLCOn.js → settings-group-B2ciy-Iw.js} +1 -1
  236. package/dist/{elements/chunks/skeleton-D8akBnKS.js → skeleton-CkHI-HgC.js} +1 -1
  237. package/dist/slider-DDR9U-i0.js +1 -0
  238. package/dist/{solid-BtdqNZI7.js → solid-BzCFdL25.js} +9771 -7594
  239. package/dist/{solid-CnavwBye.js → solid-DruVOXnf.js} +7893 -6183
  240. package/dist/solid.d.ts +16 -2
  241. package/dist/solid.js +256 -243
  242. package/dist/solid.server.js +256 -243
  243. package/dist/source-GEnFF528.js +1 -0
  244. package/dist/star-CilHq8GP.js +1 -0
  245. package/dist/state/index.d.ts +1 -1
  246. package/dist/state/mock.d.ts +32 -2
  247. package/dist/state.js +133 -108
  248. package/dist/store-Ciyk6eZG.js +1 -0
  249. package/dist/svelte--5p79yCD.js +1 -15
  250. package/dist/switch-KkeQIbuH.js +1 -0
  251. package/dist/tasks-card-BrN4bggJ.js +1 -0
  252. package/dist/text-shimmer-Dcj1MHuq.js +1 -0
  253. package/dist/textarea-Dpvbngbg.js +1 -0
  254. package/dist/theme.tokens.css +110 -13
  255. package/dist/{elements/chunks/thumbs-up-DX2Ijk3H.js → thumbs-up-CsT9Wzb9.js} +1 -1
  256. package/dist/toast-store-tgK6MuMv.js +1 -0
  257. package/dist/{elements/chunks/tool-DKQ2D1DP.js → tool-DzUjIBT8.js} +1 -1
  258. package/dist/{elements/chunks/tooltip-B0G99y8w.js → tooltip-Bkkg_4t0.js} +1 -1
  259. package/dist/trash-2-jBKxjGGQ.js +1 -0
  260. package/dist/{elements/chunks/triangle-alert-F9cyUEyy.js → triangle-alert-DlQ68ppf.js} +1 -1
  261. package/dist/tsx-B8rCNbgL.js +1 -6
  262. package/dist/types.d.ts +48 -3
  263. package/dist/typescript-RycA9KXf.js +1 -6
  264. package/dist/ui/checkbox-group.d.ts +83 -0
  265. package/dist/ui/checkbox.d.ts +40 -0
  266. package/dist/ui/dock.d.ts +51 -0
  267. package/dist/ui/icon.d.ts +3 -0
  268. package/dist/ui/input.d.ts +48 -2
  269. package/dist/ui/radio.d.ts +85 -0
  270. package/dist/ui/select.d.ts +71 -0
  271. package/dist/ui/slider.d.ts +65 -0
  272. package/dist/ui/switch.d.ts +9 -2
  273. package/dist/upload-TcAHXv9W.js +1 -0
  274. package/dist/url-scheme-policy-DR5DgvkM.js +1 -0
  275. package/dist/use-card-resolution-DaZqAdWf.js +1 -0
  276. package/dist/{elements/chunks/variant-aurora-qt6Zct8M.js → variant-aurora-BhLuYxJR.js} +1 -1
  277. package/dist/{variant-aurora-B8II3-I1.js → variant-aurora-CNmfHhcx.js} +2 -2
  278. package/dist/{variant-aurora-CMNWOSJR.js → variant-aurora-D6GsdTPA.js} +2 -2
  279. package/dist/{variant-aurora-CcuDMWwQ.js → variant-aurora-DbW_OWL2.js} +1 -1
  280. package/dist/{elements/chunks/variant-custom-tJp22_BQ.js → variant-custom-BRvaNHSi.js} +1 -1
  281. package/dist/{variant-custom-L16JLLZy.js → variant-custom-BvYHR62b.js} +1 -1
  282. package/dist/{variant-custom-BdvYC7af.js → variant-custom-DMTrEO5w.js} +2 -2
  283. package/dist/{variant-custom-C714mqKl.js → variant-custom-DV2x254s.js} +2 -2
  284. package/dist/{variant-wave-ecwykeyL.js → variant-wave-BNMGrDfj.js} +2 -2
  285. package/dist/{variant-wave-2S4La2Ka.js → variant-wave-BpDd8t3Z.js} +1 -1
  286. package/dist/{variant-wave-D7ruiA1W.js → variant-wave-CyBueXj9.js} +2 -2
  287. package/dist/{elements/chunks/variant-wave-CaQ5ti39.js → variant-wave-sp-qwsdI.js} +1 -1
  288. package/dist/vue-BmIZj4XD.js +1 -33
  289. package/dist/x-Z5UntkIJ.js +1 -0
  290. package/frameworks/react/index.tsx +210 -22
  291. package/llms-full.txt +1184 -22
  292. package/llms.txt +6 -3
  293. package/package.json +17 -4
  294. package/src/agent-tooling/README.md +192 -0
  295. package/src/agent-tooling/catalog/invariants.ts +3 -3
  296. package/src/agent-tooling/catalog/surfaces.ts +72 -0
  297. package/src/agent-tooling/construct/cli-entry.ts +8 -0
  298. package/src/agent-tooling/construct/cli.ts +147 -0
  299. package/src/agent-tooling/construct/codegen.ts +1635 -0
  300. package/src/agent-tooling/construct/construct.v1.schema.json +319 -0
  301. package/src/agent-tooling/construct/dev.ts +148 -0
  302. package/src/agent-tooling/construct/fixtures/demo-widget.construct.json +7 -0
  303. package/src/agent-tooling/construct/fixtures/ops-console.construct.json +44 -0
  304. package/src/agent-tooling/construct/fixtures/owner-widget.construct.json +32 -0
  305. package/src/agent-tooling/construct/schema.ts +452 -0
  306. package/src/agent-tooling/mcp/server.ts +2 -1
  307. package/src/agent-tooling/mcp/tools/construct.ts +130 -0
  308. package/src/agent-tooling/mcp/tools/debug.ts +126 -4
  309. package/src/agent-tooling/mcp/tools/reference.ts +104 -3
  310. package/src/agent-tooling/recipes/composed-thread.ts +714 -0
  311. package/src/agent-tooling/recipes/index.ts +22 -0
  312. package/src/agent-tooling/recipes/types.ts +32 -0
  313. package/src/agent-tooling/registry.ts +5 -0
  314. package/src/components/attachment-types.ts +7 -0
  315. package/src/components/audio-visualizer/fit-scale.ts +1 -1
  316. package/src/components/card-renderer.tsx +39 -8
  317. package/src/components/card.tsx +10 -2
  318. package/src/components/chat-scope-picker.tsx +2 -2
  319. package/src/components/chat-thread.tsx +602 -43
  320. package/src/components/choice-card.tsx +102 -37
  321. package/src/components/coachmark.tsx +1 -1
  322. package/src/components/code-block.tsx +2 -2
  323. package/src/components/composer.tsx +89 -15
  324. package/src/components/confirm-card.tsx +20 -4
  325. package/src/components/conversation-item.tsx +56 -9
  326. package/src/components/conversation-list.tsx +25 -10
  327. package/src/components/conversation-panel.tsx +118 -0
  328. package/src/components/empty.tsx +14 -3
  329. package/src/components/file-tree.tsx +5 -1
  330. package/src/components/form-widgets.tsx +257 -195
  331. package/src/components/form.tsx +297 -9
  332. package/src/components/home-panel.tsx +159 -0
  333. package/src/components/loader.tsx +12 -5
  334. package/src/components/message-skills.tsx +1 -1
  335. package/src/components/message.tsx +71 -11
  336. package/src/components/prompt-input.tsx +7 -1
  337. package/src/components/prompt-suggestion.tsx +4 -1
  338. package/src/components/reasoning.tsx +30 -3
  339. package/src/components/response-compare.tsx +2 -2
  340. package/src/components/scroll-button.tsx +56 -4
  341. package/src/components/source.tsx +6 -1
  342. package/src/components/tasks-card.tsx +58 -16
  343. package/src/components/thread.tsx +10 -1
  344. package/src/components/toast.tsx +1 -1
  345. package/src/components/tool-types.ts +9 -0
  346. package/src/components/widget-tab-bar.tsx +73 -0
  347. package/src/elements/attachments.tsx +3 -1
  348. package/src/elements/chat-workspace.tsx +1 -1
  349. package/src/elements/chat.tsx +115 -5
  350. package/src/elements/checkbox-group.tsx +164 -0
  351. package/src/elements/checkbox.tsx +134 -0
  352. package/src/elements/compiled.css +1 -1
  353. package/src/elements/composer.tsx +12 -1
  354. package/src/elements/conversation-item.tsx +62 -22
  355. package/src/elements/conversation-list.tsx +2 -2
  356. package/src/elements/define-entry.ts +12 -0
  357. package/src/elements/dock.tsx +11 -0
  358. package/src/elements/element-data-types.ts +40 -0
  359. package/src/elements/element-manifest.json +24 -0
  360. package/src/elements/element-meta.json +767 -34
  361. package/src/elements/element-nonscalar.json +17 -0
  362. package/src/elements/element-types.d.ts +380 -26
  363. package/src/elements/feedback-bar.tsx +5 -0
  364. package/src/elements/icon-names.json +29 -0
  365. package/src/elements/input.tsx +312 -23
  366. package/src/elements/message.tsx +2 -0
  367. package/src/elements/pane-grid.tsx +111 -0
  368. package/src/elements/prompt-input.tsx +8 -2
  369. package/src/elements/radio-group.tsx +129 -0
  370. package/src/elements/register-impl.ts +6 -0
  371. package/src/elements/scroll-button.tsx +54 -6
  372. package/src/elements/select.tsx +165 -0
  373. package/src/elements/slider.tsx +171 -0
  374. package/src/elements/slots.ts +1 -1
  375. package/src/elements/styles.css +89 -3
  376. package/src/elements/thread.tsx +2 -0
  377. package/src/elements/toast.tsx +14 -1
  378. package/src/index.ts +5 -2
  379. package/src/primitives/card-data-types.ts +49 -0
  380. package/src/primitives/card-host.tsx +4 -2
  381. package/src/primitives/card-routing.ts +7 -56
  382. package/src/primitives/card-schemas/form.schema.json +21 -1
  383. package/src/primitives/card-validate.ts +10 -2
  384. package/src/primitives/chat-config.tsx +33 -6
  385. package/src/primitives/conversation-store.ts +248 -0
  386. package/src/primitives/field-mask.ts +256 -0
  387. package/src/primitives/field-semantics.ts +115 -0
  388. package/src/primitives/input-mask.ts +853 -0
  389. package/src/primitives/toast-store.ts +66 -4
  390. package/src/primitives/url-scheme-policy.ts +70 -0
  391. package/src/primitives/use-resize-observer.ts +2 -2
  392. package/src/schemas/tool-defs.ts +12 -2
  393. package/src/solid.ts +20 -2
  394. package/src/state/index.ts +1 -1
  395. package/src/state/mock.ts +92 -6
  396. package/src/types.ts +45 -3
  397. package/src/ui/agent-card.tsx +2 -2
  398. package/src/ui/avatar.tsx +1 -1
  399. package/src/ui/checkbox-group.tsx +153 -0
  400. package/src/ui/checkbox.tsx +63 -0
  401. package/src/ui/dock.tsx +192 -7
  402. package/src/ui/icon.tsx +53 -0
  403. package/src/ui/input.tsx +249 -9
  404. package/src/ui/kbd.tsx +1 -1
  405. package/src/ui/nav.tsx +1 -1
  406. package/src/ui/pane-group.tsx +2 -2
  407. package/src/ui/radio.tsx +150 -0
  408. package/src/ui/select.tsx +168 -0
  409. package/src/ui/slider.tsx +178 -0
  410. package/src/ui/switch.tsx +49 -18
  411. package/src/utils/cn.ts +11 -5
  412. package/theme.css +112 -13
  413. package/dist/elements/chunks/action-icons-D9u3OzYW.js +0 -1
  414. package/dist/elements/chunks/arrow-left-CVh1TeN7.js +0 -1
  415. package/dist/elements/chunks/artifact-BkYcfIlZ.js +0 -1
  416. package/dist/elements/chunks/attachments-DwfNlubq.js +0 -1
  417. package/dist/elements/chunks/badge-Q0-Cmwzz.js +0 -1
  418. package/dist/elements/chunks/bash-InADTalH.js +0 -1
  419. package/dist/elements/chunks/card-renderer-3Dyl-FpN.js +0 -1
  420. package/dist/elements/chunks/card-routing-BK09BdmL.js +0 -1
  421. package/dist/elements/chunks/check-B5kBPKeo.js +0 -1
  422. package/dist/elements/chunks/chevron-down-DZ1GS39h.js +0 -1
  423. package/dist/elements/chunks/chevron-right-CvP7OUd2.js +0 -1
  424. package/dist/elements/chunks/choice-card-D4QUIOWZ.js +0 -1
  425. package/dist/elements/chunks/circle-CDf9g6MQ.js +0 -1
  426. package/dist/elements/chunks/circle-check-CA47Nqbz.js +0 -1
  427. package/dist/elements/chunks/circle-x-CJ_HVbC8.js +0 -1
  428. package/dist/elements/chunks/code-block-BdLiTitd.js +0 -1
  429. package/dist/elements/chunks/composer-Byve-n8K.js +0 -69
  430. package/dist/elements/chunks/confirm-card-B0flE3MN.js +0 -1
  431. package/dist/elements/chunks/controllable-DTwTIlwp.js +0 -1
  432. package/dist/elements/chunks/conversation-item-BDztezOG.js +0 -1
  433. package/dist/elements/chunks/copy-Nf-kqxXH.js +0 -1
  434. package/dist/elements/chunks/core-AYMC6_lb.js +0 -12
  435. package/dist/elements/chunks/css-M7EaDHN_.js +0 -1
  436. package/dist/elements/chunks/default-input-C2iLFq0b.js +0 -1
  437. package/dist/elements/chunks/define-wjHR1MkU.js +0 -1
  438. package/dist/elements/chunks/download-C4V7tBdb.js +0 -1
  439. package/dist/elements/chunks/embed-D3KewsIJ.js +0 -1
  440. package/dist/elements/chunks/engine-javascript-vq0WuIJl.js +0 -141
  441. package/dist/elements/chunks/file-text-D1G8khle.js +0 -1
  442. package/dist/elements/chunks/folder-WW2LGLid.js +0 -1
  443. package/dist/elements/chunks/form-CQirdC4W.js +0 -1
  444. package/dist/elements/chunks/github-dark-dimmed-DUshB20C.js +0 -1
  445. package/dist/elements/chunks/github-light-JYsPkUQd.js +0 -1
  446. package/dist/elements/chunks/hover-card-CJJkfHTK.js +0 -1
  447. package/dist/elements/chunks/html-CPZ3oZQ7.js +0 -1
  448. package/dist/elements/chunks/icon-Cfgmf4fa.js +0 -1
  449. package/dist/elements/chunks/info-DX3YMOt6.js +0 -1
  450. package/dist/elements/chunks/input-BtW9U6Sq.js +0 -1
  451. package/dist/elements/chunks/javascript-C25yR2R2.js +0 -1
  452. package/dist/elements/chunks/json-DxJze_jm.js +0 -1
  453. package/dist/elements/chunks/kbd-LGXwuT_V.js +0 -1
  454. package/dist/elements/chunks/link-2My69BqT.js +0 -1
  455. package/dist/elements/chunks/loader-iOxc_Tu-.js +0 -1
  456. package/dist/elements/chunks/message-VMZohrXx.js +0 -1
  457. package/dist/elements/chunks/message-circle-CpXMM-_n.js +0 -1
  458. package/dist/elements/chunks/message-square-DxcWtETQ.js +0 -1
  459. package/dist/elements/chunks/message-tZmV2A3p.js +0 -1
  460. package/dist/elements/chunks/paperclip-CRZVp4z_.js +0 -1
  461. package/dist/elements/chunks/progress-bar-DNy66e_E.js +0 -1
  462. package/dist/elements/chunks/prompt-suggestion-Bn64Nl7L.js +0 -1
  463. package/dist/elements/chunks/reasoning-Emn9N4-T.js +0 -1
  464. package/dist/elements/chunks/rotate-cw-CPWe37D9.js +0 -1
  465. package/dist/elements/chunks/scroll-area-ClZkZxIk.js +0 -1
  466. package/dist/elements/chunks/scroll-button-DPE-t3x_.js +0 -1
  467. package/dist/elements/chunks/share-CyfnNEqp.js +0 -1
  468. package/dist/elements/chunks/source-UWCvmVak.js +0 -1
  469. package/dist/elements/chunks/star-DoHFAikQ.js +0 -1
  470. package/dist/elements/chunks/store-Cjq0qwYN.js +0 -1
  471. package/dist/elements/chunks/svelte--5p79yCD.js +0 -1
  472. package/dist/elements/chunks/tasks-card-CmZ5xh6v.js +0 -1
  473. package/dist/elements/chunks/text-shimmer-DYn09zrz.js +0 -1
  474. package/dist/elements/chunks/textarea-skiGHURM.js +0 -1
  475. package/dist/elements/chunks/toast-store-CFnQpThX.js +0 -1
  476. package/dist/elements/chunks/tsx-B8rCNbgL.js +0 -1
  477. package/dist/elements/chunks/typescript-RycA9KXf.js +0 -1
  478. package/dist/elements/chunks/use-card-resolution-DoA2f_EU.js +0 -1
  479. package/dist/elements/chunks/vue-BmIZj4XD.js +0 -1
  480. package/dist/elements/chunks/x-B6UnOiLw.js +0 -1
  481. package/dist/llms/llms-full.txt +0 -2949
  482. package/dist/llms/llms.txt +0 -156
  483. package/dist/register-impl-DpE7icIb.js +0 -293
  484. package/dist/ui/stat.d.ts +0 -16
  485. package/src/ui/stat.tsx +0 -41
  486. /package/dist/{elements/chunks/card-tags-D8lZ-C_U.js → card-tags-D8lZ-C_U.js} +0 -0
  487. /package/dist/{elements/chunks/link-preview-DNILK391.js → link-preview-DNILK391.js} +0 -0
  488. /package/dist/{elements/chunks/slots-DaNjX0rc.js → slots-DaNjX0rc.js} +0 -0
@@ -0,0 +1,319 @@
1
+ {
2
+ "$id": "https://ui.kitn.ai/schemas/construct/v1.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "$schema": {
7
+ "type": "string"
8
+ },
9
+ "name": {
10
+ "type": "string",
11
+ "pattern": "^[a-z][a-z0-9]*-[a-z0-9-]+$"
12
+ },
13
+ "layout": {
14
+ "type": "string",
15
+ "enum": [
16
+ "widget",
17
+ "fullscreen",
18
+ "aside",
19
+ "split",
20
+ "custom"
21
+ ]
22
+ },
23
+ "provider": {
24
+ "oneOf": [
25
+ {
26
+ "type": "object",
27
+ "properties": {
28
+ "mode": {
29
+ "type": "string",
30
+ "const": "mock"
31
+ }
32
+ },
33
+ "required": [
34
+ "mode"
35
+ ],
36
+ "additionalProperties": false
37
+ },
38
+ {
39
+ "type": "object",
40
+ "properties": {
41
+ "mode": {
42
+ "type": "string",
43
+ "const": "endpoint"
44
+ },
45
+ "url": {
46
+ "type": "string",
47
+ "minLength": 1
48
+ },
49
+ "wire": {
50
+ "type": "string",
51
+ "enum": [
52
+ "openai",
53
+ "anthropic"
54
+ ]
55
+ }
56
+ },
57
+ "required": [
58
+ "mode",
59
+ "url",
60
+ "wire"
61
+ ],
62
+ "additionalProperties": false
63
+ }
64
+ ]
65
+ },
66
+ "userId": {
67
+ "type": "string",
68
+ "minLength": 1,
69
+ "pattern": "^[\\x20-\\x7E]+$"
70
+ },
71
+ "theme": {
72
+ "type": "object",
73
+ "properties": {
74
+ "accent": {
75
+ "type": "string"
76
+ },
77
+ "unreadColor": {
78
+ "type": "string"
79
+ },
80
+ "mode": {
81
+ "default": "system",
82
+ "type": "string",
83
+ "enum": [
84
+ "light",
85
+ "dark",
86
+ "system"
87
+ ]
88
+ }
89
+ },
90
+ "required": [
91
+ "mode"
92
+ ],
93
+ "additionalProperties": false
94
+ },
95
+ "header": {
96
+ "type": "object",
97
+ "properties": {
98
+ "title": {
99
+ "type": "string",
100
+ "minLength": 1
101
+ }
102
+ },
103
+ "additionalProperties": false
104
+ },
105
+ "empty": {
106
+ "type": "object",
107
+ "properties": {
108
+ "title": {
109
+ "type": "string",
110
+ "minLength": 1
111
+ },
112
+ "description": {
113
+ "type": "string",
114
+ "minLength": 1
115
+ },
116
+ "icon": {
117
+ "type": "string",
118
+ "minLength": 1
119
+ }
120
+ },
121
+ "required": [
122
+ "title"
123
+ ],
124
+ "additionalProperties": false
125
+ },
126
+ "home": {
127
+ "type": "object",
128
+ "properties": {
129
+ "greeting": {
130
+ "type": "object",
131
+ "properties": {
132
+ "title": {
133
+ "type": "string",
134
+ "minLength": 1
135
+ },
136
+ "subtitle": {
137
+ "type": "string",
138
+ "minLength": 1
139
+ }
140
+ },
141
+ "additionalProperties": false
142
+ },
143
+ "recentConversation": {
144
+ "type": "boolean",
145
+ "const": true
146
+ },
147
+ "newConversation": {
148
+ "type": "object",
149
+ "properties": {
150
+ "label": {
151
+ "type": "string",
152
+ "minLength": 1
153
+ }
154
+ },
155
+ "additionalProperties": false
156
+ },
157
+ "links": {
158
+ "type": "array",
159
+ "items": {
160
+ "type": "object",
161
+ "properties": {
162
+ "label": {
163
+ "type": "string",
164
+ "minLength": 1
165
+ },
166
+ "href": {
167
+ "type": "string",
168
+ "minLength": 1
169
+ },
170
+ "description": {
171
+ "type": "string",
172
+ "minLength": 1
173
+ },
174
+ "icon": {
175
+ "type": "string",
176
+ "minLength": 1
177
+ }
178
+ },
179
+ "required": [
180
+ "label"
181
+ ],
182
+ "additionalProperties": false
183
+ }
184
+ }
185
+ },
186
+ "additionalProperties": false
187
+ },
188
+ "capabilities": {
189
+ "type": "object",
190
+ "properties": {
191
+ "starters": {
192
+ "minItems": 1,
193
+ "maxItems": 6,
194
+ "type": "array",
195
+ "items": {
196
+ "type": "string",
197
+ "minLength": 1
198
+ }
199
+ },
200
+ "attachments": {
201
+ "type": "object",
202
+ "properties": {
203
+ "accept": {
204
+ "minItems": 1,
205
+ "type": "array",
206
+ "items": {
207
+ "type": "string",
208
+ "minLength": 1
209
+ }
210
+ }
211
+ },
212
+ "required": [
213
+ "accept"
214
+ ],
215
+ "additionalProperties": false
216
+ },
217
+ "history": {
218
+ "type": "object",
219
+ "properties": {
220
+ "persistence": {
221
+ "type": "string",
222
+ "enum": [
223
+ "none",
224
+ "local",
225
+ "endpoint"
226
+ ]
227
+ },
228
+ "url": {
229
+ "type": "string",
230
+ "minLength": 1
231
+ }
232
+ },
233
+ "required": [
234
+ "persistence"
235
+ ],
236
+ "additionalProperties": false
237
+ },
238
+ "reasoning": {
239
+ "type": "string",
240
+ "enum": [
241
+ "full",
242
+ "compact",
243
+ "off"
244
+ ]
245
+ },
246
+ "reasoningOpen": {
247
+ "type": "boolean"
248
+ },
249
+ "conversations": {
250
+ "type": "boolean",
251
+ "const": true
252
+ }
253
+ },
254
+ "additionalProperties": false
255
+ },
256
+ "cards": {
257
+ "minItems": 1,
258
+ "type": "array",
259
+ "items": {
260
+ "type": "object",
261
+ "properties": {
262
+ "name": {
263
+ "type": "string",
264
+ "pattern": "^[a-z][a-z0-9_]*$"
265
+ },
266
+ "schema": {
267
+ "type": "object",
268
+ "propertyNames": {
269
+ "type": "string"
270
+ },
271
+ "additionalProperties": {}
272
+ }
273
+ },
274
+ "required": [
275
+ "name",
276
+ "schema"
277
+ ],
278
+ "additionalProperties": false
279
+ }
280
+ },
281
+ "slots": {
282
+ "minItems": 1,
283
+ "maxItems": 8,
284
+ "type": "array",
285
+ "items": {
286
+ "type": "string",
287
+ "pattern": "^[a-z][a-z0-9-]*$"
288
+ }
289
+ },
290
+ "widget": {
291
+ "type": "object",
292
+ "properties": {
293
+ "position": {
294
+ "type": "string",
295
+ "enum": [
296
+ "bottom-end",
297
+ "bottom-start",
298
+ "top-end",
299
+ "top-start"
300
+ ]
301
+ },
302
+ "launcherIcon": {
303
+ "type": "string",
304
+ "minLength": 1
305
+ },
306
+ "defaultOpen": {
307
+ "type": "boolean"
308
+ }
309
+ },
310
+ "additionalProperties": false
311
+ }
312
+ },
313
+ "required": [
314
+ "name",
315
+ "layout",
316
+ "provider"
317
+ ],
318
+ "additionalProperties": false
319
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * kai dev — validate → codegen → npm install (once per dependency change) →
3
+ * vite dev inside the generated project → watch the construct file.
4
+ *
5
+ * HMR comes free: on every construct edit we re-run the SAME generateProject
6
+ * and rewrite the source files in place; the running Vite server sees changed
7
+ * modules and hot-updates the open tab. A validation failure never touches the
8
+ * generated files — the reasons print and the LAST GOOD preview keeps running.
9
+ * Mock-first and keyless by default.
10
+ */
11
+ import { createHash } from 'node:crypto';
12
+ import { spawn } from 'node:child_process';
13
+ import { existsSync, readFileSync, watch, writeFileSync } from 'node:fs';
14
+ import { basename, dirname, join, resolve } from 'node:path';
15
+ import { accentContrastNotice, generateProject, writeProject, type GeneratedFile, type GenerateOptions } from './codegen';
16
+ import { validateConstruct, type Construct, type ConstructProblem } from './schema';
17
+ import type { CliIo } from './cli';
18
+
19
+ export function workDirFor(name: string, root: string): string {
20
+ return join(root, '.kai', name);
21
+ }
22
+
23
+ export function installKey(files: GeneratedFile[]): string {
24
+ const pkg = files.find((f) => f.path === 'package.json');
25
+ return createHash('sha256').update(pkg?.code ?? '').digest('hex');
26
+ }
27
+
28
+ export type RegenOutcome =
29
+ | { ok: true; files: GeneratedFile[]; construct: Construct }
30
+ | { ok: false; problems: ConstructProblem[] };
31
+
32
+ /** One regen turn, injectable writer so the watch loop is testable. */
33
+ export function regenerate(
34
+ raw: unknown,
35
+ sink: { write: (files: GeneratedFile[], dir: string) => void },
36
+ dir: string,
37
+ opts: GenerateOptions = {},
38
+ ): RegenOutcome {
39
+ const validated = validateConstruct(raw);
40
+ if (!validated.ok) return validated;
41
+ const files = generateProject(validated.construct, opts);
42
+ sink.write(files, dir);
43
+ return { ok: true, files, construct: validated.construct };
44
+ }
45
+
46
+ /**
47
+ * One watch-triggered turn: read → regenerate → report. Exported so the
48
+ * "a throw during regen must not kill the loop" guarantee is unit-testable
49
+ * without spawning fs.watch, npm install or Vite. Never throws — every
50
+ * failure (invalid JSON, a rejected construct, or an exception from the
51
+ * sink's real fs writes) is reported via `io` and swallowed here, because
52
+ * this same body runs inside an fs.watch listener where an uncaught throw
53
+ * is an uncaught exception that crashes the whole `kai dev` process rather
54
+ * than leaving the last good preview running.
55
+ */
56
+ export function regenTurn(
57
+ readRaw: () => unknown,
58
+ sink: { write: (files: GeneratedFile[], dir: string) => void },
59
+ dir: string,
60
+ opts: GenerateOptions,
61
+ io: CliIo,
62
+ ): void {
63
+ try {
64
+ const raw = readRaw();
65
+ const out = regenerate(raw, sink, dir, opts);
66
+ if (!out.ok) {
67
+ io.error('construct rejected — last good preview stays up:');
68
+ for (const p of out.problems) io.error(` ${p.path || '(root)'}: ${p.message}`);
69
+ return;
70
+ }
71
+ io.log('construct changed — regenerated; Vite will hot-update the tab.');
72
+ const notice = accentContrastNotice(out.construct);
73
+ if (notice) io.log(notice);
74
+ } catch (err) {
75
+ io.error(`regen failed (${err instanceof Error ? err.message : String(err)}) — last good preview stays up`);
76
+ }
77
+ }
78
+
79
+ const KEY_FILE = '.kai-install-key';
80
+
81
+ /**
82
+ * `npm install` in the generated workdir, but only when the emitted
83
+ * package.json actually changed since the last install (tracked via a hash
84
+ * written to KEY_FILE) — shared by `kai dev` (on first run and per regen) and
85
+ * `kai compile`, so there's one install path, not two.
86
+ */
87
+ export async function ensureInstalled(dir: string, files: GeneratedFile[], io: CliIo): Promise<void> {
88
+ const key = installKey(files);
89
+ const keyPath = join(dir, KEY_FILE);
90
+ const installed = existsSync(keyPath) && readFileSync(keyPath, 'utf8') === key;
91
+ if (installed) return;
92
+ io.log(`installing dependencies in ${dir} (first run or deps changed)…`);
93
+ await new Promise<void>((done, fail) => {
94
+ const child = spawn('npm', ['install'], { cwd: dir, stdio: 'inherit' });
95
+ child.on('exit', (code) => (code === 0 ? done() : fail(new Error(`npm install exited ${code}`))));
96
+ });
97
+ writeFileSync(keyPath, key);
98
+ }
99
+
100
+ export async function dev(
101
+ constructPath: string,
102
+ opts: { io?: CliIo; uiSpec?: string } = {},
103
+ ): Promise<never> {
104
+ const io = opts.io ?? { log: (s: string) => console.log(s), error: (s: string) => console.error(s) };
105
+ const abs = resolve(constructPath);
106
+ const readRaw = (): unknown => JSON.parse(readFileSync(abs, 'utf8'));
107
+
108
+ const first = validateConstruct(readRaw());
109
+ if (!first.ok) {
110
+ for (const p of first.problems) io.error(` ${p.path || '(root)'}: ${p.message}`);
111
+ process.exit(1);
112
+ }
113
+ const dir = workDirFor(first.construct.name, process.cwd());
114
+ const files = generateProject(first.construct, { uiSpec: opts.uiSpec });
115
+ writeProject(files, dir);
116
+ const firstNotice = accentContrastNotice(first.construct);
117
+ if (firstNotice) io.log(firstNotice);
118
+
119
+ await ensureInstalled(dir, files, io);
120
+
121
+ // Watch the PARENT DIRECTORY, not the file itself: most editors save by
122
+ // writing a temp file and renaming it over the original, which replaces the
123
+ // inode. fs.watch(path) on macOS/FSEvents stays bound to the old inode and
124
+ // goes permanently silent after that first rename — one edit works, every
125
+ // edit after it is dropped with no error. Watching the directory and
126
+ // filtering for the construct's basename survives rename-based saves.
127
+ const base = basename(abs);
128
+ watch(dirname(abs), (_event, filename) => {
129
+ if (filename !== base) return;
130
+ regenTurn(readRaw, { write: writeProject }, dir, { uiSpec: opts.uiSpec }, io);
131
+ });
132
+
133
+ io.log(`previewing <${first.construct.name}> — edit ${abs} and watch the tab.`);
134
+ const vite = spawn('npm', ['run', 'dev'], { cwd: dir, stdio: 'inherit' });
135
+ // Explicit cleanup rather than relying on process-group/SIGINT defaults:
136
+ // whatever ends this process (a fatal error above, Ctrl-C, a signal from
137
+ // the shell) takes the Vite child down with it instead of orphaning it.
138
+ const killVite = () => vite.kill();
139
+ process.once('exit', killVite);
140
+ process.once('SIGINT', killVite);
141
+ process.once('SIGTERM', killVite);
142
+ return new Promise<never>((_, rejectP) => {
143
+ vite.on('exit', (code) => {
144
+ rejectP(new Error(`vite dev exited ${code}`));
145
+ process.exit(code ?? 0);
146
+ });
147
+ });
148
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://ui.kitn.ai/schemas/construct/v1.json",
3
+ "name": "demo-widget",
4
+ "layout": "widget",
5
+ "provider": { "mode": "mock" },
6
+ "theme": { "accent": "#e91e63", "mode": "system" }
7
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "https://ui.kitn.ai/schemas/construct/v1.json",
3
+ "name": "ops-console",
4
+ "layout": "aside",
5
+ "provider": { "mode": "endpoint", "url": "/api/chat", "wire": "openai" },
6
+ "theme": { "accent": "#0ea5e9", "mode": "system" },
7
+ "capabilities": {
8
+ "starters": ["Deploy payments to production", "Check the canary status"],
9
+ "attachments": { "accept": ["image/*", "application/pdf"] },
10
+ "history": { "persistence": "local" }
11
+ },
12
+ "cards": [
13
+ {
14
+ "name": "deployment_parameters",
15
+ "schema": {
16
+ "type": "object",
17
+ "title": "Deployment parameters",
18
+ "required": ["region", "ticket"],
19
+ "properties": {
20
+ "region": {
21
+ "type": "string",
22
+ "title": "Region",
23
+ "description": "Where the new revision lands first.",
24
+ "enum": ["us-east-1", "us-west-2", "eu-west-1"],
25
+ "default": "us-east-1",
26
+ "x-kai-widget": "select"
27
+ },
28
+ "ticket": {
29
+ "type": "string",
30
+ "title": "Change ticket",
31
+ "description": "CHG-#### from the change calendar. Shaped as you type.",
32
+ "pattern": "^CHG-[0-9]{4}$",
33
+ "x-kai-placeholder": "CHG-4821",
34
+ "x-kai-format": "custom",
35
+ "x-kai-mask": "CHG-####",
36
+ "x-kai-mask-guide": "CHG-####"
37
+ }
38
+ },
39
+ "x-kai-order": ["region", "ticket"],
40
+ "x-kai-submitLabel": "Draft the approval"
41
+ }
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "https://ui.kitn.ai/schemas/construct/v1.json",
3
+ "name": "acme-support",
4
+ "layout": "widget",
5
+ "provider": { "mode": "mock" },
6
+ "userId": "user_123",
7
+ "header": { "title": "Acme Support" },
8
+ "theme": { "unreadColor": "#38BDF8" },
9
+ "empty": {
10
+ "title": "Hi, we're Acme Support",
11
+ "description": "Ask us about orders, refunds, and more."
12
+ },
13
+ "home": {
14
+ "greeting": { "title": "Hi from Acme 👋", "subtitle": "Orders, refunds, anything." },
15
+ "recentConversation": true,
16
+ "links": [
17
+ { "label": "Help center", "href": "https://ui.kitn.ai", "description": "Guides and FAQs", "icon": "book-open" },
18
+ { "label": "Talk to sales", "description": "We reply fast", "icon": "message-circle" }
19
+ ]
20
+ },
21
+ "widget": {
22
+ "position": "top-start",
23
+ "defaultOpen": true
24
+ },
25
+ "capabilities": {
26
+ "attachments": { "accept": ["image/*", "application/pdf"] },
27
+ "history": { "persistence": "local" },
28
+ "starters": ["Where's my order?", "Request a refund"],
29
+ "reasoningOpen": true,
30
+ "conversations": true
31
+ }
32
+ }