@agent-native/dispatch 0.1.1

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 (737) hide show
  1. package/README.md +220 -0
  2. package/dist/actions/approve-dispatch-change.d.ts +3 -0
  3. package/dist/actions/approve-dispatch-change.d.ts.map +1 -0
  4. package/dist/actions/approve-dispatch-change.js +11 -0
  5. package/dist/actions/approve-dispatch-change.js.map +1 -0
  6. package/dist/actions/approve-vault-request.d.ts +3 -0
  7. package/dist/actions/approve-vault-request.d.ts.map +1 -0
  8. package/dist/actions/approve-vault-request.js +16 -0
  9. package/dist/actions/approve-vault-request.js.map +1 -0
  10. package/dist/actions/create-link-token.d.ts +3 -0
  11. package/dist/actions/create-link-token.d.ts.map +1 -0
  12. package/dist/actions/create-link-token.js +11 -0
  13. package/dist/actions/create-link-token.js.map +1 -0
  14. package/dist/actions/create-vault-grant.d.ts +3 -0
  15. package/dist/actions/create-vault-grant.d.ts.map +1 -0
  16. package/dist/actions/create-vault-grant.js +14 -0
  17. package/dist/actions/create-vault-grant.js.map +1 -0
  18. package/dist/actions/create-vault-secret.d.ts +3 -0
  19. package/dist/actions/create-vault-secret.d.ts.map +1 -0
  20. package/dist/actions/create-vault-secret.js +20 -0
  21. package/dist/actions/create-vault-secret.js.map +1 -0
  22. package/dist/actions/create-workspace-resource-grant.d.ts +3 -0
  23. package/dist/actions/create-workspace-resource-grant.d.ts.map +1 -0
  24. package/dist/actions/create-workspace-resource-grant.js +14 -0
  25. package/dist/actions/create-workspace-resource-grant.js.map +1 -0
  26. package/dist/actions/create-workspace-resource.d.ts +3 -0
  27. package/dist/actions/create-workspace-resource.d.ts.map +1 -0
  28. package/dist/actions/create-workspace-resource.js +24 -0
  29. package/dist/actions/create-workspace-resource.js.map +1 -0
  30. package/dist/actions/delete-destination.d.ts +3 -0
  31. package/dist/actions/delete-destination.d.ts.map +1 -0
  32. package/dist/actions/delete-destination.js +11 -0
  33. package/dist/actions/delete-destination.js.map +1 -0
  34. package/dist/actions/delete-vault-secret.d.ts +3 -0
  35. package/dist/actions/delete-vault-secret.d.ts.map +1 -0
  36. package/dist/actions/delete-vault-secret.js +11 -0
  37. package/dist/actions/delete-vault-secret.js.map +1 -0
  38. package/dist/actions/delete-workspace-resource.d.ts +3 -0
  39. package/dist/actions/delete-workspace-resource.d.ts.map +1 -0
  40. package/dist/actions/delete-workspace-resource.js +11 -0
  41. package/dist/actions/delete-workspace-resource.js.map +1 -0
  42. package/dist/actions/deny-vault-request.d.ts +3 -0
  43. package/dist/actions/deny-vault-request.d.ts.map +1 -0
  44. package/dist/actions/deny-vault-request.js +12 -0
  45. package/dist/actions/deny-vault-request.js.map +1 -0
  46. package/dist/actions/get-app-creation-settings.d.ts +3 -0
  47. package/dist/actions/get-app-creation-settings.d.ts.map +1 -0
  48. package/dist/actions/get-app-creation-settings.js +10 -0
  49. package/dist/actions/get-app-creation-settings.js.map +1 -0
  50. package/dist/actions/get-dispatch-settings.d.ts +3 -0
  51. package/dist/actions/get-dispatch-settings.d.ts.map +1 -0
  52. package/dist/actions/get-dispatch-settings.js +10 -0
  53. package/dist/actions/get-dispatch-settings.js.map +1 -0
  54. package/dist/actions/get-workspace-info.d.ts +3 -0
  55. package/dist/actions/get-workspace-info.d.ts.map +1 -0
  56. package/dist/actions/get-workspace-info.js +10 -0
  57. package/dist/actions/get-workspace-info.js.map +1 -0
  58. package/dist/actions/grant-vault-secrets-to-app.d.ts +3 -0
  59. package/dist/actions/grant-vault-secrets-to-app.d.ts.map +1 -0
  60. package/dist/actions/grant-vault-secrets-to-app.js +19 -0
  61. package/dist/actions/grant-vault-secrets-to-app.js.map +1 -0
  62. package/dist/actions/index.d.ts +9 -0
  63. package/dist/actions/index.d.ts.map +1 -0
  64. package/dist/actions/index.js +101 -0
  65. package/dist/actions/index.js.map +1 -0
  66. package/dist/actions/list-connected-agents.d.ts +3 -0
  67. package/dist/actions/list-connected-agents.d.ts.map +1 -0
  68. package/dist/actions/list-connected-agents.js +79 -0
  69. package/dist/actions/list-connected-agents.js.map +1 -0
  70. package/dist/actions/list-destinations.d.ts +3 -0
  71. package/dist/actions/list-destinations.d.ts.map +1 -0
  72. package/dist/actions/list-destinations.js +10 -0
  73. package/dist/actions/list-destinations.js.map +1 -0
  74. package/dist/actions/list-dispatch-approvals.d.ts +3 -0
  75. package/dist/actions/list-dispatch-approvals.d.ts.map +1 -0
  76. package/dist/actions/list-dispatch-approvals.js +10 -0
  77. package/dist/actions/list-dispatch-approvals.js.map +1 -0
  78. package/dist/actions/list-dispatch-audit.d.ts +3 -0
  79. package/dist/actions/list-dispatch-audit.d.ts.map +1 -0
  80. package/dist/actions/list-dispatch-audit.js +12 -0
  81. package/dist/actions/list-dispatch-audit.js.map +1 -0
  82. package/dist/actions/list-dispatch-overview.d.ts +3 -0
  83. package/dist/actions/list-dispatch-overview.d.ts.map +1 -0
  84. package/dist/actions/list-dispatch-overview.js +17 -0
  85. package/dist/actions/list-dispatch-overview.js.map +1 -0
  86. package/dist/actions/list-integrations-catalog.d.ts +3 -0
  87. package/dist/actions/list-integrations-catalog.d.ts.map +1 -0
  88. package/dist/actions/list-integrations-catalog.js +10 -0
  89. package/dist/actions/list-integrations-catalog.js.map +1 -0
  90. package/dist/actions/list-linked-identities.d.ts +3 -0
  91. package/dist/actions/list-linked-identities.d.ts.map +1 -0
  92. package/dist/actions/list-linked-identities.js +10 -0
  93. package/dist/actions/list-linked-identities.js.map +1 -0
  94. package/dist/actions/list-vault-audit.d.ts +3 -0
  95. package/dist/actions/list-vault-audit.d.ts.map +1 -0
  96. package/dist/actions/list-vault-audit.js +15 -0
  97. package/dist/actions/list-vault-audit.js.map +1 -0
  98. package/dist/actions/list-vault-grants.d.ts +3 -0
  99. package/dist/actions/list-vault-grants.d.ts.map +1 -0
  100. package/dist/actions/list-vault-grants.js +13 -0
  101. package/dist/actions/list-vault-grants.js.map +1 -0
  102. package/dist/actions/list-vault-requests.d.ts +3 -0
  103. package/dist/actions/list-vault-requests.d.ts.map +1 -0
  104. package/dist/actions/list-vault-requests.js +15 -0
  105. package/dist/actions/list-vault-requests.js.map +1 -0
  106. package/dist/actions/list-vault-secret-options.d.ts +3 -0
  107. package/dist/actions/list-vault-secret-options.d.ts.map +1 -0
  108. package/dist/actions/list-vault-secret-options.js +19 -0
  109. package/dist/actions/list-vault-secret-options.js.map +1 -0
  110. package/dist/actions/list-vault-secrets.d.ts +3 -0
  111. package/dist/actions/list-vault-secrets.d.ts.map +1 -0
  112. package/dist/actions/list-vault-secrets.js +25 -0
  113. package/dist/actions/list-vault-secrets.js.map +1 -0
  114. package/dist/actions/list-workspace-apps.d.ts +3 -0
  115. package/dist/actions/list-workspace-apps.d.ts.map +1 -0
  116. package/dist/actions/list-workspace-apps.js +24 -0
  117. package/dist/actions/list-workspace-apps.js.map +1 -0
  118. package/dist/actions/list-workspace-resource-grants.d.ts +3 -0
  119. package/dist/actions/list-workspace-resource-grants.d.ts.map +1 -0
  120. package/dist/actions/list-workspace-resource-grants.js +13 -0
  121. package/dist/actions/list-workspace-resource-grants.js.map +1 -0
  122. package/dist/actions/list-workspace-resources.d.ts +3 -0
  123. package/dist/actions/list-workspace-resources.d.ts.map +1 -0
  124. package/dist/actions/list-workspace-resources.js +15 -0
  125. package/dist/actions/list-workspace-resources.js.map +1 -0
  126. package/dist/actions/navigate.d.ts +16 -0
  127. package/dist/actions/navigate.d.ts.map +1 -0
  128. package/dist/actions/navigate.js +55 -0
  129. package/dist/actions/navigate.js.map +1 -0
  130. package/dist/actions/reject-dispatch-change.d.ts +3 -0
  131. package/dist/actions/reject-dispatch-change.d.ts.map +1 -0
  132. package/dist/actions/reject-dispatch-change.js +12 -0
  133. package/dist/actions/reject-dispatch-change.js.map +1 -0
  134. package/dist/actions/request-vault-secret.d.ts +3 -0
  135. package/dist/actions/request-vault-secret.d.ts.map +1 -0
  136. package/dist/actions/request-vault-secret.js +15 -0
  137. package/dist/actions/request-vault-secret.js.map +1 -0
  138. package/dist/actions/revoke-vault-grant.d.ts +3 -0
  139. package/dist/actions/revoke-vault-grant.d.ts.map +1 -0
  140. package/dist/actions/revoke-vault-grant.js +11 -0
  141. package/dist/actions/revoke-vault-grant.js.map +1 -0
  142. package/dist/actions/revoke-workspace-resource-grant.d.ts +3 -0
  143. package/dist/actions/revoke-workspace-resource-grant.d.ts.map +1 -0
  144. package/dist/actions/revoke-workspace-resource-grant.js +11 -0
  145. package/dist/actions/revoke-workspace-resource-grant.js.map +1 -0
  146. package/dist/actions/send-platform-message.d.ts +3 -0
  147. package/dist/actions/send-platform-message.d.ts.map +1 -0
  148. package/dist/actions/send-platform-message.js +73 -0
  149. package/dist/actions/send-platform-message.js.map +1 -0
  150. package/dist/actions/set-app-creation-settings.d.ts +3 -0
  151. package/dist/actions/set-app-creation-settings.d.ts.map +1 -0
  152. package/dist/actions/set-app-creation-settings.js +18 -0
  153. package/dist/actions/set-app-creation-settings.js.map +1 -0
  154. package/dist/actions/set-dispatch-approval-policy.d.ts +3 -0
  155. package/dist/actions/set-dispatch-approval-policy.d.ts.map +1 -0
  156. package/dist/actions/set-dispatch-approval-policy.js +19 -0
  157. package/dist/actions/set-dispatch-approval-policy.js.map +1 -0
  158. package/dist/actions/start-workspace-app-creation.d.ts +3 -0
  159. package/dist/actions/start-workspace-app-creation.d.ts.map +1 -0
  160. package/dist/actions/start-workspace-app-creation.js +31 -0
  161. package/dist/actions/start-workspace-app-creation.js.map +1 -0
  162. package/dist/actions/sync-vault-to-app.d.ts +3 -0
  163. package/dist/actions/sync-vault-to-app.d.ts.map +1 -0
  164. package/dist/actions/sync-vault-to-app.js +13 -0
  165. package/dist/actions/sync-vault-to-app.js.map +1 -0
  166. package/dist/actions/sync-workspace-resources-to-all.d.ts +3 -0
  167. package/dist/actions/sync-workspace-resources-to-all.d.ts.map +1 -0
  168. package/dist/actions/sync-workspace-resources-to-all.js +9 -0
  169. package/dist/actions/sync-workspace-resources-to-all.js.map +1 -0
  170. package/dist/actions/sync-workspace-resources-to-app.d.ts +3 -0
  171. package/dist/actions/sync-workspace-resources-to-app.d.ts.map +1 -0
  172. package/dist/actions/sync-workspace-resources-to-app.js +11 -0
  173. package/dist/actions/sync-workspace-resources-to-app.js.map +1 -0
  174. package/dist/actions/update-vault-secret.d.ts +3 -0
  175. package/dist/actions/update-vault-secret.d.ts.map +1 -0
  176. package/dist/actions/update-vault-secret.js +12 -0
  177. package/dist/actions/update-vault-secret.js.map +1 -0
  178. package/dist/actions/update-workspace-resource.d.ts +3 -0
  179. package/dist/actions/update-workspace-resource.d.ts.map +1 -0
  180. package/dist/actions/update-workspace-resource.js +18 -0
  181. package/dist/actions/update-workspace-resource.js.map +1 -0
  182. package/dist/actions/upsert-destination.d.ts +3 -0
  183. package/dist/actions/upsert-destination.d.ts.map +1 -0
  184. package/dist/actions/upsert-destination.js +26 -0
  185. package/dist/actions/upsert-destination.js.map +1 -0
  186. package/dist/actions/view-screen.d.ts +11 -0
  187. package/dist/actions/view-screen.d.ts.map +1 -0
  188. package/dist/actions/view-screen.js +68 -0
  189. package/dist/actions/view-screen.js.map +1 -0
  190. package/dist/components/agents-panel.d.ts +16 -0
  191. package/dist/components/agents-panel.d.ts.map +1 -0
  192. package/dist/components/agents-panel.js +64 -0
  193. package/dist/components/agents-panel.js.map +1 -0
  194. package/dist/components/app-keys-popover.d.ts +11 -0
  195. package/dist/components/app-keys-popover.d.ts.map +1 -0
  196. package/dist/components/app-keys-popover.js +84 -0
  197. package/dist/components/app-keys-popover.js.map +1 -0
  198. package/dist/components/create-app-popover.d.ts +24 -0
  199. package/dist/components/create-app-popover.d.ts.map +1 -0
  200. package/dist/components/create-app-popover.js +188 -0
  201. package/dist/components/create-app-popover.js.map +1 -0
  202. package/dist/components/dispatch-shell.d.ts +13 -0
  203. package/dist/components/dispatch-shell.d.ts.map +1 -0
  204. package/dist/components/dispatch-shell.js +15 -0
  205. package/dist/components/dispatch-shell.js.map +1 -0
  206. package/dist/components/index.d.ts +12 -0
  207. package/dist/components/index.d.ts.map +1 -0
  208. package/dist/components/index.js +12 -0
  209. package/dist/components/index.js.map +1 -0
  210. package/dist/components/layout/Header.d.ts +5 -0
  211. package/dist/components/layout/Header.d.ts.map +1 -0
  212. package/dist/components/layout/Header.js +34 -0
  213. package/dist/components/layout/Header.js.map +1 -0
  214. package/dist/components/layout/HeaderActions.d.ts +18 -0
  215. package/dist/components/layout/HeaderActions.d.ts.map +1 -0
  216. package/dist/components/layout/HeaderActions.js +52 -0
  217. package/dist/components/layout/HeaderActions.js.map +1 -0
  218. package/dist/components/layout/Layout.d.ts +8 -0
  219. package/dist/components/layout/Layout.d.ts.map +1 -0
  220. package/dist/components/layout/Layout.js +70 -0
  221. package/dist/components/layout/Layout.js.map +1 -0
  222. package/dist/components/messaging-setup-panel.d.ts +2 -0
  223. package/dist/components/messaging-setup-panel.d.ts.map +1 -0
  224. package/dist/components/messaging-setup-panel.js +300 -0
  225. package/dist/components/messaging-setup-panel.js.map +1 -0
  226. package/dist/components/ui/accordion.d.ts +8 -0
  227. package/dist/components/ui/accordion.d.ts.map +1 -0
  228. package/dist/components/ui/accordion.js +14 -0
  229. package/dist/components/ui/accordion.js.map +1 -0
  230. package/dist/components/ui/alert-dialog.d.ts +21 -0
  231. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  232. package/dist/components/ui/alert-dialog.js +27 -0
  233. package/dist/components/ui/alert-dialog.js.map +1 -0
  234. package/dist/components/ui/alert.d.ts +9 -0
  235. package/dist/components/ui/alert.d.ts.map +1 -0
  236. package/dist/components/ui/alert.js +23 -0
  237. package/dist/components/ui/alert.js.map +1 -0
  238. package/dist/components/ui/aspect-ratio.d.ts +4 -0
  239. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  240. package/dist/components/ui/aspect-ratio.js +4 -0
  241. package/dist/components/ui/aspect-ratio.js.map +1 -0
  242. package/dist/components/ui/avatar.d.ts +7 -0
  243. package/dist/components/ui/avatar.d.ts.map +1 -0
  244. package/dist/components/ui/avatar.js +12 -0
  245. package/dist/components/ui/avatar.js.map +1 -0
  246. package/dist/components/ui/badge.d.ts +10 -0
  247. package/dist/components/ui/badge.d.ts.map +1 -0
  248. package/dist/components/ui/badge.js +21 -0
  249. package/dist/components/ui/badge.js.map +1 -0
  250. package/dist/components/ui/breadcrumb.d.ts +20 -0
  251. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  252. package/dist/components/ui/breadcrumb.js +24 -0
  253. package/dist/components/ui/breadcrumb.js.map +1 -0
  254. package/dist/components/ui/button.d.ts +12 -0
  255. package/dist/components/ui/button.d.ts.map +1 -0
  256. package/dist/components/ui/button.js +34 -0
  257. package/dist/components/ui/button.js.map +1 -0
  258. package/dist/components/ui/calendar.d.ts +9 -0
  259. package/dist/components/ui/calendar.d.ts.map +1 -0
  260. package/dist/components/ui/calendar.js +41 -0
  261. package/dist/components/ui/calendar.js.map +1 -0
  262. package/dist/components/ui/card.d.ts +9 -0
  263. package/dist/components/ui/card.d.ts.map +1 -0
  264. package/dist/components/ui/card.js +17 -0
  265. package/dist/components/ui/card.js.map +1 -0
  266. package/dist/components/ui/carousel.d.ts +19 -0
  267. package/dist/components/ui/carousel.d.ts.map +1 -0
  268. package/dist/components/ui/carousel.js +99 -0
  269. package/dist/components/ui/carousel.js.map +1 -0
  270. package/dist/components/ui/chart.d.ts +80 -0
  271. package/dist/components/ui/chart.d.ts.map +1 -0
  272. package/dist/components/ui/chart.js +131 -0
  273. package/dist/components/ui/chart.js.map +1 -0
  274. package/dist/components/ui/checkbox.d.ts +5 -0
  275. package/dist/components/ui/checkbox.d.ts.map +1 -0
  276. package/dist/components/ui/checkbox.js +9 -0
  277. package/dist/components/ui/checkbox.js.map +1 -0
  278. package/dist/components/ui/collapsible.d.ts +6 -0
  279. package/dist/components/ui/collapsible.d.ts.map +1 -0
  280. package/dist/components/ui/collapsible.js +6 -0
  281. package/dist/components/ui/collapsible.js.map +1 -0
  282. package/dist/components/ui/command.d.ts +83 -0
  283. package/dist/components/ui/command.d.ts.map +1 -0
  284. package/dist/components/ui/command.js +29 -0
  285. package/dist/components/ui/command.js.map +1 -0
  286. package/dist/components/ui/context-menu.d.ts +28 -0
  287. package/dist/components/ui/context-menu.d.ts.map +1 -0
  288. package/dist/components/ui/context-menu.js +34 -0
  289. package/dist/components/ui/context-menu.js.map +1 -0
  290. package/dist/components/ui/dialog.d.ts +20 -0
  291. package/dist/components/ui/dialog.d.ts.map +1 -0
  292. package/dist/components/ui/dialog.js +23 -0
  293. package/dist/components/ui/dialog.js.map +1 -0
  294. package/dist/components/ui/drawer.d.ts +23 -0
  295. package/dist/components/ui/drawer.d.ts.map +1 -0
  296. package/dist/components/ui/drawer.js +23 -0
  297. package/dist/components/ui/drawer.js.map +1 -0
  298. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  299. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  300. package/dist/components/ui/dropdown-menu.js +36 -0
  301. package/dist/components/ui/dropdown-menu.js.map +1 -0
  302. package/dist/components/ui/form.d.ts +24 -0
  303. package/dist/components/ui/form.d.ts.map +1 -0
  304. package/dist/components/ui/form.js +63 -0
  305. package/dist/components/ui/form.js.map +1 -0
  306. package/dist/components/ui/hover-card.d.ts +7 -0
  307. package/dist/components/ui/hover-card.d.ts.map +1 -0
  308. package/dist/components/ui/hover-card.js +10 -0
  309. package/dist/components/ui/hover-card.js.map +1 -0
  310. package/dist/components/ui/input-otp.d.ts +35 -0
  311. package/dist/components/ui/input-otp.d.ts.map +1 -0
  312. package/dist/components/ui/input-otp.js +19 -0
  313. package/dist/components/ui/input-otp.js.map +1 -0
  314. package/dist/components/ui/input.d.ts +4 -0
  315. package/dist/components/ui/input.d.ts.map +1 -0
  316. package/dist/components/ui/input.js +9 -0
  317. package/dist/components/ui/input.js.map +1 -0
  318. package/dist/components/ui/label.d.ts +6 -0
  319. package/dist/components/ui/label.d.ts.map +1 -0
  320. package/dist/components/ui/label.js +10 -0
  321. package/dist/components/ui/label.js.map +1 -0
  322. package/dist/components/ui/menubar.d.ts +29 -0
  323. package/dist/components/ui/menubar.d.ts.map +1 -0
  324. package/dist/components/ui/menubar.js +41 -0
  325. package/dist/components/ui/menubar.js.map +1 -0
  326. package/dist/components/ui/navigation-menu.d.ts +13 -0
  327. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  328. package/dist/components/ui/navigation-menu.js +25 -0
  329. package/dist/components/ui/navigation-menu.js.map +1 -0
  330. package/dist/components/ui/pagination.d.ts +29 -0
  331. package/dist/components/ui/pagination.d.ts.map +1 -0
  332. package/dist/components/ui/pagination.js +24 -0
  333. package/dist/components/ui/pagination.js.map +1 -0
  334. package/dist/components/ui/popover.d.ts +7 -0
  335. package/dist/components/ui/popover.d.ts.map +1 -0
  336. package/dist/components/ui/popover.js +10 -0
  337. package/dist/components/ui/popover.js.map +1 -0
  338. package/dist/components/ui/progress.d.ts +5 -0
  339. package/dist/components/ui/progress.d.ts.map +1 -0
  340. package/dist/components/ui/progress.js +8 -0
  341. package/dist/components/ui/progress.js.map +1 -0
  342. package/dist/components/ui/radio-group.d.ts +6 -0
  343. package/dist/components/ui/radio-group.d.ts.map +1 -0
  344. package/dist/components/ui/radio-group.js +15 -0
  345. package/dist/components/ui/radio-group.js.map +1 -0
  346. package/dist/components/ui/resizable.d.ts +8 -0
  347. package/dist/components/ui/resizable.d.ts.map +1 -0
  348. package/dist/components/ui/resizable.js +9 -0
  349. package/dist/components/ui/resizable.js.map +1 -0
  350. package/dist/components/ui/scroll-area.d.ts +6 -0
  351. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  352. package/dist/components/ui/scroll-area.js +12 -0
  353. package/dist/components/ui/scroll-area.js.map +1 -0
  354. package/dist/components/ui/select.d.ts +14 -0
  355. package/dist/components/ui/select.d.ts.map +1 -0
  356. package/dist/components/ui/select.js +27 -0
  357. package/dist/components/ui/select.js.map +1 -0
  358. package/dist/components/ui/separator.d.ts +5 -0
  359. package/dist/components/ui/separator.d.ts.map +1 -0
  360. package/dist/components/ui/separator.js +8 -0
  361. package/dist/components/ui/separator.js.map +1 -0
  362. package/dist/components/ui/sheet.d.ts +26 -0
  363. package/dist/components/ui/sheet.d.ts.map +1 -0
  364. package/dist/components/ui/sheet.js +37 -0
  365. package/dist/components/ui/sheet.js.map +1 -0
  366. package/dist/components/ui/sidebar.d.ts +67 -0
  367. package/dist/components/ui/sidebar.d.ts.map +1 -0
  368. package/dist/components/ui/sidebar.js +233 -0
  369. package/dist/components/ui/sidebar.js.map +1 -0
  370. package/dist/components/ui/skeleton.d.ts +3 -0
  371. package/dist/components/ui/skeleton.d.ts.map +1 -0
  372. package/dist/components/ui/skeleton.js +7 -0
  373. package/dist/components/ui/skeleton.js.map +1 -0
  374. package/dist/components/ui/slider.d.ts +5 -0
  375. package/dist/components/ui/slider.d.ts.map +1 -0
  376. package/dist/components/ui/slider.js +8 -0
  377. package/dist/components/ui/slider.js.map +1 -0
  378. package/dist/components/ui/sonner.d.ts +5 -0
  379. package/dist/components/ui/sonner.d.ts.map +1 -0
  380. package/dist/components/ui/sonner.js +25 -0
  381. package/dist/components/ui/sonner.js.map +1 -0
  382. package/dist/components/ui/spinner.d.ts +3 -0
  383. package/dist/components/ui/spinner.d.ts.map +1 -0
  384. package/dist/components/ui/spinner.js +7 -0
  385. package/dist/components/ui/spinner.js.map +1 -0
  386. package/dist/components/ui/switch.d.ts +5 -0
  387. package/dist/components/ui/switch.d.ts.map +1 -0
  388. package/dist/components/ui/switch.js +8 -0
  389. package/dist/components/ui/switch.js.map +1 -0
  390. package/dist/components/ui/table.d.ts +11 -0
  391. package/dist/components/ui/table.d.ts.map +1 -0
  392. package/dist/components/ui/table.js +21 -0
  393. package/dist/components/ui/table.js.map +1 -0
  394. package/dist/components/ui/tabs.d.ts +8 -0
  395. package/dist/components/ui/tabs.d.ts.map +1 -0
  396. package/dist/components/ui/tabs.js +13 -0
  397. package/dist/components/ui/tabs.js.map +1 -0
  398. package/dist/components/ui/textarea.d.ts +6 -0
  399. package/dist/components/ui/textarea.d.ts.map +1 -0
  400. package/dist/components/ui/textarea.js +9 -0
  401. package/dist/components/ui/textarea.js.map +1 -0
  402. package/dist/components/ui/toast.d.ts +16 -0
  403. package/dist/components/ui/toast.d.ts.map +1 -0
  404. package/dist/components/ui/toast.js +34 -0
  405. package/dist/components/ui/toast.js.map +1 -0
  406. package/dist/components/ui/toaster.d.ts +2 -0
  407. package/dist/components/ui/toaster.d.ts.map +1 -0
  408. package/dist/components/ui/toaster.js +10 -0
  409. package/dist/components/ui/toaster.js.map +1 -0
  410. package/dist/components/ui/toggle-group.d.ts +13 -0
  411. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  412. package/dist/components/ui/toggle-group.js +21 -0
  413. package/dist/components/ui/toggle-group.js.map +1 -0
  414. package/dist/components/ui/toggle.d.ts +13 -0
  415. package/dist/components/ui/toggle.d.ts.map +1 -0
  416. package/dist/components/ui/toggle.js +26 -0
  417. package/dist/components/ui/toggle.js.map +1 -0
  418. package/dist/components/ui/tooltip.d.ts +8 -0
  419. package/dist/components/ui/tooltip.d.ts.map +1 -0
  420. package/dist/components/ui/tooltip.js +11 -0
  421. package/dist/components/ui/tooltip.js.map +1 -0
  422. package/dist/components/ui/use-toast.d.ts +3 -0
  423. package/dist/components/ui/use-toast.d.ts.map +1 -0
  424. package/dist/components/ui/use-toast.js +3 -0
  425. package/dist/components/ui/use-toast.js.map +1 -0
  426. package/dist/config.d.ts +33 -0
  427. package/dist/config.d.ts.map +1 -0
  428. package/dist/config.js +7 -0
  429. package/dist/config.js.map +1 -0
  430. package/dist/db/index.d.ts +7 -0
  431. package/dist/db/index.d.ts.map +1 -0
  432. package/dist/db/index.js +10 -0
  433. package/dist/db/index.js.map +1 -0
  434. package/dist/db/migrations.d.ts +5 -0
  435. package/dist/db/migrations.d.ts.map +1 -0
  436. package/dist/db/migrations.js +166 -0
  437. package/dist/db/migrations.js.map +1 -0
  438. package/dist/db/schema.d.ts +2344 -0
  439. package/dist/db/schema.d.ts.map +1 -0
  440. package/dist/db/schema.js +148 -0
  441. package/dist/db/schema.js.map +1 -0
  442. package/dist/hooks/use-mobile.d.ts +2 -0
  443. package/dist/hooks/use-mobile.d.ts.map +1 -0
  444. package/dist/hooks/use-mobile.js +16 -0
  445. package/dist/hooks/use-mobile.js.map +1 -0
  446. package/dist/hooks/use-navigation-state.d.ts +6 -0
  447. package/dist/hooks/use-navigation-state.d.ts.map +1 -0
  448. package/dist/hooks/use-navigation-state.js +129 -0
  449. package/dist/hooks/use-navigation-state.js.map +1 -0
  450. package/dist/hooks/use-toast.d.ts +45 -0
  451. package/dist/hooks/use-toast.d.ts.map +1 -0
  452. package/dist/hooks/use-toast.js +127 -0
  453. package/dist/hooks/use-toast.js.map +1 -0
  454. package/dist/index.d.ts +15 -0
  455. package/dist/index.d.ts.map +1 -0
  456. package/dist/index.js +15 -0
  457. package/dist/index.js.map +1 -0
  458. package/dist/lib/utils.d.ts +2 -0
  459. package/dist/lib/utils.d.ts.map +1 -0
  460. package/dist/lib/utils.js +2 -0
  461. package/dist/lib/utils.js.map +1 -0
  462. package/dist/routes/index.d.ts +32 -0
  463. package/dist/routes/index.d.ts.map +1 -0
  464. package/dist/routes/index.js +51 -0
  465. package/dist/routes/index.js.map +1 -0
  466. package/dist/routes/pages/_index.d.ts +15 -0
  467. package/dist/routes/pages/_index.d.ts.map +1 -0
  468. package/dist/routes/pages/_index.js +42 -0
  469. package/dist/routes/pages/_index.js.map +1 -0
  470. package/dist/routes/pages/agents.d.ts +5 -0
  471. package/dist/routes/pages/agents.d.ts.map +1 -0
  472. package/dist/routes/pages/agents.js +12 -0
  473. package/dist/routes/pages/agents.js.map +1 -0
  474. package/dist/routes/pages/approval.d.ts +5 -0
  475. package/dist/routes/pages/approval.d.ts.map +1 -0
  476. package/dist/routes/pages/approval.js +47 -0
  477. package/dist/routes/pages/approval.js.map +1 -0
  478. package/dist/routes/pages/approvals.d.ts +5 -0
  479. package/dist/routes/pages/approvals.d.ts.map +1 -0
  480. package/dist/routes/pages/approvals.js +48 -0
  481. package/dist/routes/pages/approvals.js.map +1 -0
  482. package/dist/routes/pages/apps.$appId.d.ts +5 -0
  483. package/dist/routes/pages/apps.$appId.d.ts.map +1 -0
  484. package/dist/routes/pages/apps.$appId.js +31 -0
  485. package/dist/routes/pages/apps.$appId.js.map +1 -0
  486. package/dist/routes/pages/apps.d.ts +5 -0
  487. package/dist/routes/pages/apps.d.ts.map +1 -0
  488. package/dist/routes/pages/apps.js +42 -0
  489. package/dist/routes/pages/apps.js.map +1 -0
  490. package/dist/routes/pages/audit.d.ts +5 -0
  491. package/dist/routes/pages/audit.d.ts.map +1 -0
  492. package/dist/routes/pages/audit.js +11 -0
  493. package/dist/routes/pages/audit.js.map +1 -0
  494. package/dist/routes/pages/destinations.d.ts +5 -0
  495. package/dist/routes/pages/destinations.d.ts.map +1 -0
  496. package/dist/routes/pages/destinations.js +80 -0
  497. package/dist/routes/pages/destinations.js.map +1 -0
  498. package/dist/routes/pages/identities.d.ts +5 -0
  499. package/dist/routes/pages/identities.d.ts.map +1 -0
  500. package/dist/routes/pages/identities.js +18 -0
  501. package/dist/routes/pages/identities.js.map +1 -0
  502. package/dist/routes/pages/integrations.d.ts +5 -0
  503. package/dist/routes/pages/integrations.d.ts.map +1 -0
  504. package/dist/routes/pages/integrations.js +46 -0
  505. package/dist/routes/pages/integrations.js.map +1 -0
  506. package/dist/routes/pages/messaging.d.ts +5 -0
  507. package/dist/routes/pages/messaging.d.ts.map +1 -0
  508. package/dist/routes/pages/messaging.js +10 -0
  509. package/dist/routes/pages/messaging.js.map +1 -0
  510. package/dist/routes/pages/new-app.d.ts +5 -0
  511. package/dist/routes/pages/new-app.d.ts.map +1 -0
  512. package/dist/routes/pages/new-app.js +10 -0
  513. package/dist/routes/pages/new-app.js.map +1 -0
  514. package/dist/routes/pages/overview.d.ts +5 -0
  515. package/dist/routes/pages/overview.d.ts.map +1 -0
  516. package/dist/routes/pages/overview.js +225 -0
  517. package/dist/routes/pages/overview.js.map +1 -0
  518. package/dist/routes/pages/team.d.ts +5 -0
  519. package/dist/routes/pages/team.d.ts.map +1 -0
  520. package/dist/routes/pages/team.js +10 -0
  521. package/dist/routes/pages/team.js.map +1 -0
  522. package/dist/routes/pages/tools.$id.d.ts +2 -0
  523. package/dist/routes/pages/tools.$id.d.ts.map +1 -0
  524. package/dist/routes/pages/tools.$id.js +6 -0
  525. package/dist/routes/pages/tools.$id.js.map +1 -0
  526. package/dist/routes/pages/tools._index.d.ts +2 -0
  527. package/dist/routes/pages/tools._index.d.ts.map +1 -0
  528. package/dist/routes/pages/tools._index.js +6 -0
  529. package/dist/routes/pages/tools._index.js.map +1 -0
  530. package/dist/routes/pages/vault.d.ts +5 -0
  531. package/dist/routes/pages/vault.d.ts.map +1 -0
  532. package/dist/routes/pages/vault.js +131 -0
  533. package/dist/routes/pages/vault.js.map +1 -0
  534. package/dist/routes/pages/workspace.d.ts +5 -0
  535. package/dist/routes/pages/workspace.d.ts.map +1 -0
  536. package/dist/routes/pages/workspace.js +149 -0
  537. package/dist/routes/pages/workspace.js.map +1 -0
  538. package/dist/server/index.d.ts +44 -0
  539. package/dist/server/index.d.ts.map +1 -0
  540. package/dist/server/index.js +68 -0
  541. package/dist/server/index.js.map +1 -0
  542. package/dist/server/lib/app-creation-store.d.ts +102 -0
  543. package/dist/server/lib/app-creation-store.d.ts.map +1 -0
  544. package/dist/server/lib/app-creation-store.js +780 -0
  545. package/dist/server/lib/app-creation-store.js.map +1 -0
  546. package/dist/server/lib/dispatch-integrations.d.ts +10 -0
  547. package/dist/server/lib/dispatch-integrations.d.ts.map +1 -0
  548. package/dist/server/lib/dispatch-integrations.js +105 -0
  549. package/dist/server/lib/dispatch-integrations.js.map +1 -0
  550. package/dist/server/lib/dispatch-store.d.ts +313 -0
  551. package/dist/server/lib/dispatch-store.d.ts.map +1 -0
  552. package/dist/server/lib/dispatch-store.js +669 -0
  553. package/dist/server/lib/dispatch-store.js.map +1 -0
  554. package/dist/server/lib/env-config.d.ts +3 -0
  555. package/dist/server/lib/env-config.d.ts.map +1 -0
  556. package/dist/server/lib/env-config.js +43 -0
  557. package/dist/server/lib/env-config.js.map +1 -0
  558. package/dist/server/lib/pre-auth-routing.d.ts +2 -0
  559. package/dist/server/lib/pre-auth-routing.d.ts.map +1 -0
  560. package/dist/server/lib/pre-auth-routing.js +128 -0
  561. package/dist/server/lib/pre-auth-routing.js.map +1 -0
  562. package/dist/server/lib/vault-store.d.ts +270 -0
  563. package/dist/server/lib/vault-store.d.ts.map +1 -0
  564. package/dist/server/lib/vault-store.js +554 -0
  565. package/dist/server/lib/vault-store.js.map +1 -0
  566. package/dist/server/lib/workspace-resources-store.d.ts +165 -0
  567. package/dist/server/lib/workspace-resources-store.d.ts.map +1 -0
  568. package/dist/server/lib/workspace-resources-store.js +310 -0
  569. package/dist/server/lib/workspace-resources-store.js.map +1 -0
  570. package/dist/server/plugins/agent-chat.d.ts +3 -0
  571. package/dist/server/plugins/agent-chat.d.ts.map +1 -0
  572. package/dist/server/plugins/agent-chat.js +36 -0
  573. package/dist/server/plugins/agent-chat.js.map +1 -0
  574. package/dist/server/plugins/auth.d.ts +9 -0
  575. package/dist/server/plugins/auth.d.ts.map +1 -0
  576. package/dist/server/plugins/auth.js +30 -0
  577. package/dist/server/plugins/auth.js.map +1 -0
  578. package/dist/server/plugins/core-routes.d.ts +3 -0
  579. package/dist/server/plugins/core-routes.d.ts.map +1 -0
  580. package/dist/server/plugins/core-routes.js +6 -0
  581. package/dist/server/plugins/core-routes.js.map +1 -0
  582. package/dist/server/plugins/db.d.ts +3 -0
  583. package/dist/server/plugins/db.d.ts.map +1 -0
  584. package/dist/server/plugins/db.js +6 -0
  585. package/dist/server/plugins/db.js.map +1 -0
  586. package/dist/server/plugins/integrations.d.ts +8 -0
  587. package/dist/server/plugins/integrations.d.ts.map +1 -0
  588. package/dist/server/plugins/integrations.js +51 -0
  589. package/dist/server/plugins/integrations.js.map +1 -0
  590. package/package.json +103 -0
  591. package/src/actions/approve-dispatch-change.ts +11 -0
  592. package/src/actions/approve-vault-request.ts +23 -0
  593. package/src/actions/create-link-token.ts +12 -0
  594. package/src/actions/create-vault-grant.ts +15 -0
  595. package/src/actions/create-vault-secret.ts +21 -0
  596. package/src/actions/create-workspace-resource-grant.ts +15 -0
  597. package/src/actions/create-workspace-resource.ts +29 -0
  598. package/src/actions/delete-destination.ts +11 -0
  599. package/src/actions/delete-vault-secret.ts +12 -0
  600. package/src/actions/delete-workspace-resource.ts +12 -0
  601. package/src/actions/deny-vault-request.ts +12 -0
  602. package/src/actions/get-app-creation-settings.ts +11 -0
  603. package/src/actions/get-dispatch-settings.ts +10 -0
  604. package/src/actions/get-workspace-info.ts +11 -0
  605. package/src/actions/grant-vault-secrets-to-app.ts +20 -0
  606. package/src/actions/index.ts +102 -0
  607. package/src/actions/list-connected-agents.ts +103 -0
  608. package/src/actions/list-destinations.ts +10 -0
  609. package/src/actions/list-dispatch-approvals.ts +10 -0
  610. package/src/actions/list-dispatch-audit.ts +12 -0
  611. package/src/actions/list-dispatch-overview.ts +18 -0
  612. package/src/actions/list-integrations-catalog.ts +11 -0
  613. package/src/actions/list-linked-identities.ts +10 -0
  614. package/src/actions/list-vault-audit.ts +16 -0
  615. package/src/actions/list-vault-grants.ts +14 -0
  616. package/src/actions/list-vault-requests.ts +16 -0
  617. package/src/actions/list-vault-secret-options.ts +20 -0
  618. package/src/actions/list-vault-secrets.ts +26 -0
  619. package/src/actions/list-workspace-apps.ts +25 -0
  620. package/src/actions/list-workspace-resource-grants.ts +14 -0
  621. package/src/actions/list-workspace-resources.ts +16 -0
  622. package/src/actions/navigate.ts +55 -0
  623. package/src/actions/reject-dispatch-change.ts +12 -0
  624. package/src/actions/request-vault-secret.ts +16 -0
  625. package/src/actions/revoke-vault-grant.ts +11 -0
  626. package/src/actions/revoke-workspace-resource-grant.ts +15 -0
  627. package/src/actions/send-platform-message.ts +96 -0
  628. package/src/actions/set-app-creation-settings.ts +19 -0
  629. package/src/actions/set-dispatch-approval-policy.ts +24 -0
  630. package/src/actions/start-workspace-app-creation.ts +33 -0
  631. package/src/actions/sync-vault-to-app.ts +14 -0
  632. package/src/actions/sync-workspace-resources-to-all.ts +10 -0
  633. package/src/actions/sync-workspace-resources-to-app.ts +12 -0
  634. package/src/actions/update-vault-secret.ts +12 -0
  635. package/src/actions/update-workspace-resource.ts +19 -0
  636. package/src/actions/upsert-destination.ts +29 -0
  637. package/src/actions/view-screen.ts +78 -0
  638. package/src/components/agents-panel.tsx +262 -0
  639. package/src/components/app-keys-popover.tsx +231 -0
  640. package/src/components/create-app-popover.tsx +423 -0
  641. package/src/components/dispatch-shell.tsx +53 -0
  642. package/src/components/index.ts +11 -0
  643. package/src/components/layout/Header.tsx +69 -0
  644. package/src/components/layout/HeaderActions.tsx +84 -0
  645. package/src/components/layout/Layout.tsx +243 -0
  646. package/src/components/messaging-setup-panel.tsx +666 -0
  647. package/src/components/ui/accordion.tsx +56 -0
  648. package/src/components/ui/alert-dialog.tsx +139 -0
  649. package/src/components/ui/alert.tsx +59 -0
  650. package/src/components/ui/aspect-ratio.tsx +5 -0
  651. package/src/components/ui/avatar.tsx +48 -0
  652. package/src/components/ui/badge.tsx +37 -0
  653. package/src/components/ui/breadcrumb.tsx +115 -0
  654. package/src/components/ui/button.tsx +57 -0
  655. package/src/components/ui/calendar.tsx +68 -0
  656. package/src/components/ui/card.tsx +86 -0
  657. package/src/components/ui/carousel.tsx +260 -0
  658. package/src/components/ui/chart.tsx +375 -0
  659. package/src/components/ui/checkbox.tsx +28 -0
  660. package/src/components/ui/collapsible.tsx +9 -0
  661. package/src/components/ui/command.tsx +154 -0
  662. package/src/components/ui/context-menu.tsx +198 -0
  663. package/src/components/ui/dialog.tsx +120 -0
  664. package/src/components/ui/drawer.tsx +116 -0
  665. package/src/components/ui/dropdown-menu.tsx +198 -0
  666. package/src/components/ui/form.tsx +177 -0
  667. package/src/components/ui/hover-card.tsx +27 -0
  668. package/src/components/ui/input-otp.tsx +69 -0
  669. package/src/components/ui/input.tsx +22 -0
  670. package/src/components/ui/label.tsx +24 -0
  671. package/src/components/ui/menubar.tsx +235 -0
  672. package/src/components/ui/navigation-menu.tsx +128 -0
  673. package/src/components/ui/pagination.tsx +121 -0
  674. package/src/components/ui/popover.tsx +29 -0
  675. package/src/components/ui/progress.tsx +26 -0
  676. package/src/components/ui/radio-group.tsx +42 -0
  677. package/src/components/ui/resizable.tsx +43 -0
  678. package/src/components/ui/scroll-area.tsx +46 -0
  679. package/src/components/ui/select.tsx +158 -0
  680. package/src/components/ui/separator.tsx +29 -0
  681. package/src/components/ui/sheet.tsx +139 -0
  682. package/src/components/ui/sidebar.tsx +778 -0
  683. package/src/components/ui/skeleton.tsx +15 -0
  684. package/src/components/ui/slider.tsx +26 -0
  685. package/src/components/ui/sonner.tsx +58 -0
  686. package/src/components/ui/spinner.tsx +17 -0
  687. package/src/components/ui/switch.tsx +27 -0
  688. package/src/components/ui/table.tsx +117 -0
  689. package/src/components/ui/tabs.tsx +53 -0
  690. package/src/components/ui/textarea.tsx +23 -0
  691. package/src/components/ui/toast.tsx +127 -0
  692. package/src/components/ui/toaster.tsx +33 -0
  693. package/src/components/ui/toggle-group.tsx +59 -0
  694. package/src/components/ui/toggle.tsx +43 -0
  695. package/src/components/ui/tooltip.tsx +28 -0
  696. package/src/components/ui/use-toast.ts +3 -0
  697. package/src/config.ts +35 -0
  698. package/src/db/index.ts +12 -0
  699. package/src/db/migrations.ts +165 -0
  700. package/src/db/schema.ts +160 -0
  701. package/src/hooks/use-mobile.tsx +21 -0
  702. package/src/hooks/use-navigation-state.ts +132 -0
  703. package/src/hooks/use-toast.ts +188 -0
  704. package/src/index.ts +19 -0
  705. package/src/lib/utils.ts +1 -0
  706. package/src/routes/index.ts +51 -0
  707. package/src/routes/pages/_index.tsx +51 -0
  708. package/src/routes/pages/agents.tsx +23 -0
  709. package/src/routes/pages/approval.tsx +243 -0
  710. package/src/routes/pages/approvals.tsx +157 -0
  711. package/src/routes/pages/apps.$appId.tsx +134 -0
  712. package/src/routes/pages/apps.tsx +163 -0
  713. package/src/routes/pages/audit.tsx +41 -0
  714. package/src/routes/pages/destinations.tsx +253 -0
  715. package/src/routes/pages/identities.tsx +91 -0
  716. package/src/routes/pages/integrations.tsx +278 -0
  717. package/src/routes/pages/messaging.tsx +17 -0
  718. package/src/routes/pages/new-app.tsx +17 -0
  719. package/src/routes/pages/overview.tsx +792 -0
  720. package/src/routes/pages/team.tsx +23 -0
  721. package/src/routes/pages/tools.$id.tsx +5 -0
  722. package/src/routes/pages/tools._index.tsx +5 -0
  723. package/src/routes/pages/vault.tsx +617 -0
  724. package/src/routes/pages/workspace.tsx +598 -0
  725. package/src/server/index.ts +78 -0
  726. package/src/server/lib/app-creation-store.ts +996 -0
  727. package/src/server/lib/dispatch-integrations.ts +125 -0
  728. package/src/server/lib/dispatch-store.ts +889 -0
  729. package/src/server/lib/env-config.ts +44 -0
  730. package/src/server/lib/pre-auth-routing.ts +150 -0
  731. package/src/server/lib/vault-store.ts +811 -0
  732. package/src/server/lib/workspace-resources-store.ts +445 -0
  733. package/src/server/plugins/agent-chat.ts +36 -0
  734. package/src/server/plugins/auth.ts +34 -0
  735. package/src/server/plugins/core-routes.ts +6 -0
  736. package/src/server/plugins/db.ts +6 -0
  737. package/src/server/plugins/integrations.ts +59 -0
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useActionMutation, useActionQuery } from "@agent-native/core/client";
4
+ import { toast } from "sonner";
5
+ import { DispatchShell } from "../../components/dispatch-shell";
6
+ import { Button } from "../../components/ui/button";
7
+ import { Input } from "../../components/ui/input";
8
+ import { Textarea } from "../../components/ui/textarea";
9
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../components/ui/select";
10
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "../../components/ui/alert-dialog";
11
+ export function meta() {
12
+ return [{ title: "Destinations — Dispatch" }];
13
+ }
14
+ function QuickSendRow({ destination, }) {
15
+ const [text, setText] = useState("");
16
+ const send = useActionMutation("send-platform-message", {
17
+ onSuccess: () => {
18
+ toast.success("Message sent");
19
+ setText("");
20
+ },
21
+ onError: (error) => {
22
+ toast.error(error instanceof Error ? error.message : "Unable to send message");
23
+ },
24
+ });
25
+ return (_jsxs("div", { className: "mt-3 flex gap-2", children: [_jsx(Input, { value: text, onChange: (event) => setText(event.target.value), placeholder: "Quick test message" }), _jsx(Button, { onClick: () => send.mutate({
26
+ destinationId: destination.id,
27
+ text: text || `Test message to ${destination.name}`,
28
+ }), disabled: send.isPending, children: "Send" })] }));
29
+ }
30
+ export default function DestinationsRoute() {
31
+ const { data } = useActionQuery("list-destinations", {});
32
+ const [form, setForm] = useState({
33
+ name: "",
34
+ platform: "slack",
35
+ destination: "",
36
+ threadRef: "",
37
+ notes: "",
38
+ });
39
+ const upsert = useActionMutation("upsert-destination", {
40
+ onSuccess: () => {
41
+ toast.success("Destination saved");
42
+ setForm((current) => ({
43
+ ...current,
44
+ name: "",
45
+ destination: "",
46
+ threadRef: "",
47
+ notes: "",
48
+ }));
49
+ },
50
+ });
51
+ const remove = useActionMutation("delete-destination", {
52
+ onSuccess: () => toast.success("Destination removed"),
53
+ });
54
+ return (_jsx(DispatchShell, { title: "Destinations", description: "Saved outbound Slack channels, Telegram chats, and thread targets.", children: _jsxs("div", { className: "grid gap-4 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]", children: [_jsxs("section", { className: "rounded-2xl border bg-card p-5", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Saved destinations" }), _jsxs("div", { className: "mt-4 space-y-3", children: [(data || []).map((destination) => (_jsxs("div", { className: "rounded-xl border bg-muted/30 p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: destination.name }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [destination.platform, " \u00B7 ", destination.destination, destination.threadRef
55
+ ? ` · thread ${destination.threadRef}`
56
+ : ""] }), destination.notes && (_jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: destination.notes }))] }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "sm", children: "Delete" }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete destination?" }), _jsxs(AlertDialogDescription, { children: ["\u201C", destination.name, "\u201D will be removed. Any saved workflows or jobs that target this destination will start failing on the next send."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { onClick: () => remove.mutate({ id: destination.id }), children: "Delete" })] })] })] })] }), _jsx(QuickSendRow, { destination: destination })] }, destination.id))), (data?.length || 0) === 0 && (_jsx("div", { className: "rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground", children: "No destinations saved yet. Add your first Slack channel or Telegram chat on the right." }))] })] }), _jsxs("section", { className: "rounded-2xl border bg-card p-5", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Add destination" }), _jsxs("div", { className: "mt-4 space-y-3", children: [_jsx(Input, { value: form.name, onChange: (event) => setForm((current) => ({ ...current, name: event.target.value })), placeholder: "Daily digest channel" }), _jsxs(Select, { value: form.platform, onValueChange: (value) => setForm((current) => ({
57
+ ...current,
58
+ platform: value,
59
+ })), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "slack", children: "Slack" }), _jsx(SelectItem, { value: "telegram", children: "Telegram" }), _jsx(SelectItem, { value: "email", children: "Email" })] })] }), _jsx(Input, { value: form.destination, onChange: (event) => setForm((current) => ({
60
+ ...current,
61
+ destination: event.target.value,
62
+ })), placeholder: form.platform === "slack"
63
+ ? "C0123456789"
64
+ : form.platform === "email"
65
+ ? "teammate+qa@agent-native.test"
66
+ : "123456789" }), _jsx(Input, { value: form.threadRef, onChange: (event) => setForm((current) => ({
67
+ ...current,
68
+ threadRef: event.target.value,
69
+ })), placeholder: "Optional thread or topic id" }), _jsx(Textarea, { value: form.notes, onChange: (event) => setForm((current) => ({
70
+ ...current,
71
+ notes: event.target.value,
72
+ })), placeholder: "What should use this destination?" }), _jsx(Button, { className: "w-full", onClick: () => upsert.mutate({
73
+ name: form.name,
74
+ platform: form.platform,
75
+ destination: form.destination,
76
+ threadRef: form.threadRef || undefined,
77
+ notes: form.notes || undefined,
78
+ }), disabled: !form.name || !form.destination, children: "Save destination" })] })] })] }) }));
79
+ }
80
+ //# sourceMappingURL=destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../../../src/routes/pages/destinations.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,IAAI;IAClB,OAAO,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,WAAW,GAGZ;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,iBAAiB,CAAC,uBAAuB,EAAE;QACtD,SAAS,EAAE,GAAG,EAAE;YACd,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,KAAK,CACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAClE,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,KAAK,IACJ,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAChD,WAAW,EAAC,oBAAoB,GAChC,EACF,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CACZ,IAAI,CAAC,MAAM,CAAC;oBACV,aAAa,EAAE,WAAW,CAAC,EAAE;oBAC7B,IAAI,EAAE,IAAI,IAAI,mBAAmB,WAAW,CAAC,IAAI,EAAE;iBACpD,CAAC,EAEJ,QAAQ,EAAE,IAAI,CAAC,SAAS,qBAGjB,IACL,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC/B,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,iBAAiB,CAAC,oBAAoB,EAAE;QACrD,SAAS,EAAE,GAAG,EAAE;YACd,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACpB,GAAG,OAAO;gBACV,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,EAAE;gBACf,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,EAAE;aACV,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,oBAAoB,EAAE;QACrD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;KACtD,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAC,cAAc,EACpB,WAAW,EAAC,oEAAoE,YAEhF,eAAK,SAAS,EAAC,2DAA2D,aACxE,mBAAS,SAAS,EAAC,gCAAgC,aACjD,aAAI,SAAS,EAAC,uCAAuC,mCAEhD,EACL,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CACjC,eAEE,SAAS,EAAC,mCAAmC,aAE7C,eAAK,SAAS,EAAC,wCAAwC,aACrD,0BACE,cAAK,SAAS,EAAC,qCAAqC,YACjD,WAAW,CAAC,IAAI,GACb,EACN,eAAK,SAAS,EAAC,oCAAoC,aAChD,WAAW,CAAC,QAAQ,cAAK,WAAW,CAAC,WAAW,EAChD,WAAW,CAAC,SAAS;oEACpB,CAAC,CAAC,aAAa,WAAW,CAAC,SAAS,EAAE;oEACtC,CAAC,CAAC,EAAE,IACF,EACL,WAAW,CAAC,KAAK,IAAI,CACpB,YAAG,SAAS,EAAC,oCAAoC,YAC9C,WAAW,CAAC,KAAK,GAChB,CACL,IACG,EACN,MAAC,WAAW,eACV,KAAC,kBAAkB,IAAC,OAAO,kBACzB,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,uBAE1B,GACU,EACrB,MAAC,kBAAkB,eACjB,MAAC,iBAAiB,eAChB,KAAC,gBAAgB,sCAAuC,EACxD,MAAC,sBAAsB,yBACnB,WAAW,CAAC,IAAI,6HAGK,IACP,EACpB,MAAC,iBAAiB,eAChB,KAAC,iBAAiB,yBAA2B,EAC7C,KAAC,iBAAiB,IAChB,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,uBAGlC,IACF,IACD,IACT,IACV,EACN,KAAC,YAAY,IAAC,WAAW,EAAE,WAAW,GAAI,KA9CrC,WAAW,CAAC,EAAE,CA+Cf,CACP,CAAC,EACD,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAC5B,cAAK,SAAS,EAAC,yEAAyE,uGAGlF,CACP,IACG,IACE,EAEV,mBAAS,SAAS,EAAC,gCAAgC,aACjD,aAAI,SAAS,EAAC,uCAAuC,gCAEhD,EACL,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,KAAK,IACJ,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAElE,WAAW,EAAC,sBAAsB,GAClC,EACF,MAAC,MAAM,IACL,KAAK,EAAE,IAAI,CAAC,QAAQ,EACpB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CACvB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCACpB,GAAG,OAAO;wCACV,QAAQ,EAAE,KAAK;qCAChB,CAAC,CAAC,aAGL,KAAC,aAAa,cACZ,KAAC,WAAW,KAAG,GACD,EAChB,MAAC,aAAa,eACZ,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,sBAAmB,EAC5C,KAAC,UAAU,IAAC,KAAK,EAAC,UAAU,yBAAsB,EAClD,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,sBAAmB,IAC9B,IACT,EACT,KAAC,KAAK,IACJ,KAAK,EAAE,IAAI,CAAC,WAAW,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCACpB,GAAG,OAAO;wCACV,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;qCAChC,CAAC,CAAC,EAEL,WAAW,EACT,IAAI,CAAC,QAAQ,KAAK,OAAO;wCACvB,CAAC,CAAC,aAAa;wCACf,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO;4CACzB,CAAC,CAAC,+BAA+B;4CACjC,CAAC,CAAC,WAAW,GAEnB,EACF,KAAC,KAAK,IACJ,KAAK,EAAE,IAAI,CAAC,SAAS,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCACpB,GAAG,OAAO;wCACV,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;qCAC9B,CAAC,CAAC,EAEL,WAAW,EAAC,6BAA6B,GACzC,EACF,KAAC,QAAQ,IACP,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCACpB,GAAG,OAAO;wCACV,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;qCAC1B,CAAC,CAAC,EAEL,WAAW,EAAC,mCAAmC,GAC/C,EACF,KAAC,MAAM,IACL,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CACZ,MAAM,CAAC,MAAM,CAAC;wCACZ,IAAI,EAAE,IAAI,CAAC,IAAI;wCACf,QAAQ,EAAE,IAAI,CAAC,QAA0C;wCACzD,WAAW,EAAE,IAAI,CAAC,WAAW;wCAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;wCACtC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;qCAC/B,CAAC,EAEJ,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,iCAGlC,IACL,IACE,IACN,GACQ,CACjB,CAAC;AACJ,CAAC","sourcesContent":["import { useState } from \"react\";\nimport { useActionMutation, useActionQuery } from \"@agent-native/core/client\";\nimport { toast } from \"sonner\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\";\n\nexport function meta() {\n return [{ title: \"Destinations — Dispatch\" }];\n}\n\nfunction QuickSendRow({\n destination,\n}: {\n destination: { id: string; name: string };\n}) {\n const [text, setText] = useState(\"\");\n const send = useActionMutation(\"send-platform-message\", {\n onSuccess: () => {\n toast.success(\"Message sent\");\n setText(\"\");\n },\n onError: (error) => {\n toast.error(\n error instanceof Error ? error.message : \"Unable to send message\",\n );\n },\n });\n return (\n <div className=\"mt-3 flex gap-2\">\n <Input\n value={text}\n onChange={(event) => setText(event.target.value)}\n placeholder=\"Quick test message\"\n />\n <Button\n onClick={() =>\n send.mutate({\n destinationId: destination.id,\n text: text || `Test message to ${destination.name}`,\n })\n }\n disabled={send.isPending}\n >\n Send\n </Button>\n </div>\n );\n}\n\nexport default function DestinationsRoute() {\n const { data } = useActionQuery(\"list-destinations\", {});\n const [form, setForm] = useState({\n name: \"\",\n platform: \"slack\",\n destination: \"\",\n threadRef: \"\",\n notes: \"\",\n });\n\n const upsert = useActionMutation(\"upsert-destination\", {\n onSuccess: () => {\n toast.success(\"Destination saved\");\n setForm((current) => ({\n ...current,\n name: \"\",\n destination: \"\",\n threadRef: \"\",\n notes: \"\",\n }));\n },\n });\n const remove = useActionMutation(\"delete-destination\", {\n onSuccess: () => toast.success(\"Destination removed\"),\n });\n\n return (\n <DispatchShell\n title=\"Destinations\"\n description=\"Saved outbound Slack channels, Telegram chats, and thread targets.\"\n >\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)]\">\n <section className=\"rounded-2xl border bg-card p-5\">\n <h2 className=\"text-lg font-semibold text-foreground\">\n Saved destinations\n </h2>\n <div className=\"mt-4 space-y-3\">\n {(data || []).map((destination) => (\n <div\n key={destination.id}\n className=\"rounded-xl border bg-muted/30 p-4\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-medium text-foreground\">\n {destination.name}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {destination.platform} · {destination.destination}\n {destination.threadRef\n ? ` · thread ${destination.threadRef}`\n : \"\"}\n </div>\n {destination.notes && (\n <p className=\"mt-2 text-sm text-muted-foreground\">\n {destination.notes}\n </p>\n )}\n </div>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n Delete\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete destination?</AlertDialogTitle>\n <AlertDialogDescription>\n “{destination.name}” will be removed. Any saved\n workflows or jobs that target this destination will\n start failing on the next send.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => remove.mutate({ id: destination.id })}\n >\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n <QuickSendRow destination={destination} />\n </div>\n ))}\n {(data?.length || 0) === 0 && (\n <div className=\"rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground\">\n No destinations saved yet. Add your first Slack channel or\n Telegram chat on the right.\n </div>\n )}\n </div>\n </section>\n\n <section className=\"rounded-2xl border bg-card p-5\">\n <h2 className=\"text-lg font-semibold text-foreground\">\n Add destination\n </h2>\n <div className=\"mt-4 space-y-3\">\n <Input\n value={form.name}\n onChange={(event) =>\n setForm((current) => ({ ...current, name: event.target.value }))\n }\n placeholder=\"Daily digest channel\"\n />\n <Select\n value={form.platform}\n onValueChange={(value) =>\n setForm((current) => ({\n ...current,\n platform: value,\n }))\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"slack\">Slack</SelectItem>\n <SelectItem value=\"telegram\">Telegram</SelectItem>\n <SelectItem value=\"email\">Email</SelectItem>\n </SelectContent>\n </Select>\n <Input\n value={form.destination}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n destination: event.target.value,\n }))\n }\n placeholder={\n form.platform === \"slack\"\n ? \"C0123456789\"\n : form.platform === \"email\"\n ? \"teammate+qa@agent-native.test\"\n : \"123456789\"\n }\n />\n <Input\n value={form.threadRef}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n threadRef: event.target.value,\n }))\n }\n placeholder=\"Optional thread or topic id\"\n />\n <Textarea\n value={form.notes}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n notes: event.target.value,\n }))\n }\n placeholder=\"What should use this destination?\"\n />\n <Button\n className=\"w-full\"\n onClick={() =>\n upsert.mutate({\n name: form.name,\n platform: form.platform as \"slack\" | \"telegram\" | \"email\",\n destination: form.destination,\n threadRef: form.threadRef || undefined,\n notes: form.notes || undefined,\n })\n }\n disabled={!form.name || !form.destination}\n >\n Save destination\n </Button>\n </div>\n </section>\n </div>\n </DispatchShell>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function meta(): {
2
+ title: string;
3
+ }[];
4
+ export default function IdentitiesRoute(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=identities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identities.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/identities.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI;;IAEnB;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,4CAiFtC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useActionMutation, useActionQuery } from "@agent-native/core/client";
3
+ import { toast } from "sonner";
4
+ import { DispatchShell } from "../../components/dispatch-shell";
5
+ import { Button } from "../../components/ui/button";
6
+ export function meta() {
7
+ return [{ title: "Identities — Dispatch" }];
8
+ }
9
+ export default function IdentitiesRoute() {
10
+ const { data } = useActionQuery("list-linked-identities", {});
11
+ const createToken = useActionMutation("create-link-token", {
12
+ onSuccess: () => toast.success("Link token created"),
13
+ });
14
+ return (_jsx(DispatchShell, { title: "Identities", description: "Link external senders to workspace users.", children: _jsxs("div", { className: "grid gap-4 xl:grid-cols-2", children: [_jsxs("section", { className: "rounded-2xl border bg-card p-5", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Active links" }), _jsxs("div", { className: "flex shrink-0 gap-2", children: [_jsx(Button, { variant: "outline", onClick: () => createToken.mutate({ platform: "slack" }), children: "New Slack token" }), _jsx(Button, { onClick: () => createToken.mutate({ platform: "telegram" }), children: "New Telegram token" })] })] }), _jsxs("div", { className: "mt-4 space-y-3", children: [(data?.links || []).map((link) => (_jsxs("div", { className: "rounded-xl border bg-muted/30 px-4 py-3", children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: link.externalUserName || link.externalUserId }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [link.platform, " \u2192 ", link.ownerEmail] })] }, link.id))), (data?.links?.length || 0) === 0 && (_jsxs("div", { className: "rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground", children: ["No linked identities yet. Generate a token and ask the user to send ", _jsx("code", { children: "/link TOKEN" }), " from Slack or Telegram."] }))] })] }), _jsxs("section", { className: "rounded-2xl border bg-card p-5", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Link tokens" }), _jsxs("div", { className: "mt-4 space-y-3", children: [(data?.tokens || []).map((token) => (_jsxs("div", { className: "rounded-xl border px-4 py-3", children: [_jsxs("div", { className: "text-sm font-medium text-foreground", children: ["/link ", token.token] }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [token.platform, " \u00B7 expires", " ", new Date(token.expiresAt).toLocaleString(), token.claimedAt
15
+ ? ` · claimed by ${token.claimedByExternalUserName || token.claimedByExternalUserId}`
16
+ : " · waiting to be claimed"] })] }, token.id))), (data?.tokens?.length || 0) === 0 && (_jsx("div", { className: "rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground", children: "No active link tokens." }))] })] })] }) }));
17
+ }
18
+ //# sourceMappingURL=identities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identities.js","sourceRoot":"","sources":["../../../src/routes/pages/identities.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useActionMutation, useActionQuery } from \"@agent-native/core/client\";\nimport { toast } from \"sonner\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport { Button } from \"@/components/ui/button\";\n\nexport function meta() {\n return [{ title: \"Identities — Dispatch\" }];\n}\n\nexport default function IdentitiesRoute() {\n const { data } = useActionQuery(\"list-linked-identities\", {});\n const createToken = useActionMutation(\"create-link-token\", {\n onSuccess: () => toast.success(\"Link token created\"),\n });\n\n return (\n <DispatchShell\n title=\"Identities\"\n description=\"Link external senders to workspace users.\"\n >\n <div className=\"grid gap-4 xl:grid-cols-2\">\n <section className=\"rounded-2xl border bg-card p-5\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"text-lg font-semibold text-foreground\">\n Active links\n </h2>\n <div className=\"flex shrink-0 gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => createToken.mutate({ platform: \"slack\" })}\n >\n New Slack token\n </Button>\n <Button\n onClick={() => createToken.mutate({ platform: \"telegram\" })}\n >\n New Telegram token\n </Button>\n </div>\n </div>\n <div className=\"mt-4 space-y-3\">\n {(data?.links || []).map((link) => (\n <div\n key={link.id}\n className=\"rounded-xl border bg-muted/30 px-4 py-3\"\n >\n <div className=\"text-sm font-medium text-foreground\">\n {link.externalUserName || link.externalUserId}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {link.platform} → {link.ownerEmail}\n </div>\n </div>\n ))}\n {(data?.links?.length || 0) === 0 && (\n <div className=\"rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground\">\n No linked identities yet. Generate a token and ask the user to\n send <code>/link TOKEN</code> from Slack or Telegram.\n </div>\n )}\n </div>\n </section>\n\n <section className=\"rounded-2xl border bg-card p-5\">\n <h2 className=\"text-lg font-semibold text-foreground\">Link tokens</h2>\n <div className=\"mt-4 space-y-3\">\n {(data?.tokens || []).map((token) => (\n <div key={token.id} className=\"rounded-xl border px-4 py-3\">\n <div className=\"text-sm font-medium text-foreground\">\n /link {token.token}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {token.platform} · expires{\" \"}\n {new Date(token.expiresAt).toLocaleString()}\n {token.claimedAt\n ? ` · claimed by ${token.claimedByExternalUserName || token.claimedByExternalUserId}`\n : \" · waiting to be claimed\"}\n </div>\n </div>\n ))}\n {(data?.tokens?.length || 0) === 0 && (\n <div className=\"rounded-xl border border-dashed px-4 py-8 text-sm text-muted-foreground\">\n No active link tokens.\n </div>\n )}\n </div>\n </section>\n </div>\n </DispatchShell>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function meta(): {
2
+ title: string;
3
+ }[];
4
+ export default function IntegrationsRoute(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/integrations.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,IAAI;;IAEnB;AA2JD,MAAM,CAAC,OAAO,UAAU,iBAAiB,4CAwGxC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useActionMutation, useActionQuery } from "@agent-native/core/client";
3
+ import { toast } from "sonner";
4
+ import { IconCheck, IconCircleDashed, IconKey, IconRefresh, IconShieldCheck, IconWifi, IconWifiOff, } from "@tabler/icons-react";
5
+ import { DispatchShell } from "../../components/dispatch-shell";
6
+ import { Badge } from "../../components/ui/badge";
7
+ import { Button } from "../../components/ui/button";
8
+ import { Progress } from "../../components/ui/progress";
9
+ export function meta() {
10
+ return [{ title: "Integrations — Dispatch" }];
11
+ }
12
+ function StatusBadge({ configured, vaultGranted, }) {
13
+ if (configured && vaultGranted) {
14
+ return (_jsxs(Badge, { variant: "secondary", className: "bg-green-500/10 text-green-700 dark:text-green-400", children: [_jsx(IconShieldCheck, { size: 12, className: "mr-1" }), "Vault"] }));
15
+ }
16
+ if (configured) {
17
+ return (_jsxs(Badge, { variant: "secondary", className: "bg-green-500/10 text-green-700 dark:text-green-400", children: [_jsx(IconCheck, { size: 12, className: "mr-1" }), "Configured"] }));
18
+ }
19
+ if (vaultGranted) {
20
+ return (_jsxs(Badge, { variant: "secondary", className: "bg-blue-500/10 text-blue-700 dark:text-blue-400", children: [_jsx(IconKey, { size: 12, className: "mr-1" }), "Granted (not synced)"] }));
21
+ }
22
+ return (_jsxs(Badge, { variant: "secondary", className: "bg-amber-500/10 text-amber-700 dark:text-amber-400", children: [_jsx(IconCircleDashed, { size: 12, className: "mr-1" }), "Missing"] }));
23
+ }
24
+ function AppCard({ app }) {
25
+ const syncToApp = useActionMutation("sync-vault-to-app", {
26
+ onSuccess: (data) => toast.success(`Synced ${data.synced} key(s) to ${data.appId}`),
27
+ onError: (err) => toast.error(String(err)),
28
+ });
29
+ const integrations = app.integrations || [];
30
+ const configuredCount = integrations.filter((i) => i.configured).length;
31
+ const total = integrations.length;
32
+ const coverage = total > 0 ? Math.round((configuredCount / total) * 100) : 0;
33
+ return (_jsxs("div", { className: "rounded-2xl border bg-card", children: [_jsxs("div", { className: "flex items-center justify-between border-b px-5 py-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-xl text-white text-xs font-bold", style: { backgroundColor: app.color }, children: app.appName.charAt(0).toUpperCase() }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: app.appName }), app.reachable ? (_jsx(IconWifi, { size: 14, className: "text-green-500" })) : (_jsx(IconWifiOff, { size: 14, className: "text-muted-foreground/50" }))] }), _jsx("div", { className: "text-xs text-muted-foreground", children: app.appId })] })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => syncToApp.mutate({ appId: app.appId }), disabled: syncToApp.isPending || !app.reachable, children: [_jsx(IconRefresh, { size: 14, className: syncToApp.isPending ? "animate-spin" : "" }), _jsx("span", { className: "ml-1.5", children: "Sync" })] })] }), _jsx("div", { className: "px-5 py-4", children: total > 0 ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [_jsxs("span", { children: [configuredCount, "/", total, " configured"] }), _jsxs("span", { children: [coverage, "%"] })] }), _jsx(Progress, { value: coverage, className: "mt-2 h-1.5" }), _jsx("div", { className: "mt-4 space-y-2", children: integrations.map((integration) => (_jsxs("div", { className: "flex items-center justify-between rounded-lg border px-3 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-foreground", children: integration.label }), integration.required && (_jsx("span", { className: "text-xs text-red-500", children: "required" }))] }), _jsx("div", { className: "font-mono text-xs text-muted-foreground", children: integration.key })] }), _jsx(StatusBadge, { configured: integration.configured, vaultGranted: integration.vaultGranted })] }, integration.key))) })] })) : app.reachable ? (_jsx("div", { className: "py-4 text-center text-sm text-muted-foreground", children: "No declared integrations." })) : (_jsx("div", { className: "py-4 text-center text-sm text-muted-foreground", children: "App is not reachable. Start the app to see its integrations." })) })] }));
34
+ }
35
+ export default function IntegrationsRoute() {
36
+ const { data: catalog, isLoading } = useActionQuery("list-integrations-catalog", {});
37
+ const apps = catalog || [];
38
+ const reachableApps = apps.filter((a) => a.reachable);
39
+ const unreachableApps = apps.filter((a) => !a.reachable);
40
+ const totalIntegrations = apps.reduce((sum, a) => sum + (a.integrations?.length || 0), 0);
41
+ const configuredIntegrations = apps.reduce((sum, a) => sum + (a.integrations?.filter((i) => i.configured)?.length || 0), 0);
42
+ return (_jsxs(DispatchShell, { title: "Integrations", description: "See what credentials each app needs and their configuration status across the workspace.", children: [!isLoading && apps.length > 0 && (_jsxs("div", { className: "grid gap-4 md:grid-cols-3", children: [_jsxs("div", { className: "rounded-2xl border bg-card p-5", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "Apps discovered" }), _jsx("div", { className: "mt-2 text-3xl font-semibold text-foreground", children: apps.length }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [reachableApps.length, " reachable"] })] }), _jsxs("div", { className: "rounded-2xl border bg-card p-5", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "Total integrations" }), _jsx("div", { className: "mt-2 text-3xl font-semibold text-foreground", children: totalIntegrations }), _jsx("div", { className: "mt-1 text-xs text-muted-foreground", children: "across all apps" })] }), _jsxs("div", { className: "rounded-2xl border bg-card p-5", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "Configured" }), _jsxs("div", { className: "mt-2 text-3xl font-semibold text-foreground", children: [configuredIntegrations, "/", totalIntegrations] }), _jsx(Progress, { value: totalIntegrations > 0
43
+ ? Math.round((configuredIntegrations / totalIntegrations) * 100)
44
+ : 0, className: "mt-2 h-1.5" })] })] })), isLoading && (_jsx("div", { className: "rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground", children: "Discovering apps and fetching integration status..." })), reachableApps.length > 0 && (_jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: reachableApps.map((app) => (_jsx(AppCard, { app: app }, app.appId))) })), unreachableApps.length > 0 && (_jsxs("div", { children: [_jsx("h2", { className: "mb-3 text-sm font-medium text-muted-foreground", children: "Offline apps" }), _jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: unreachableApps.map((app) => (_jsx(AppCard, { app: app }, app.appId))) })] })), !isLoading && apps.length === 0 && (_jsx("div", { className: "rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground", children: "No workspace apps found." }))] }));
45
+ }
46
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../../src/routes/pages/integrations.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useActionMutation, useActionQuery } from \"@agent-native/core/client\";\nimport { toast } from \"sonner\";\nimport {\n IconCheck,\n IconCircleDashed,\n IconKey,\n IconRefresh,\n IconShieldCheck,\n IconWifi,\n IconWifiOff,\n} from \"@tabler/icons-react\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Progress } from \"@/components/ui/progress\";\n\nexport function meta() {\n return [{ title: \"Integrations — Dispatch\" }];\n}\n\nfunction StatusBadge({\n configured,\n vaultGranted,\n}: {\n configured: boolean;\n vaultGranted: boolean;\n}) {\n if (configured && vaultGranted) {\n return (\n <Badge\n variant=\"secondary\"\n className=\"bg-green-500/10 text-green-700 dark:text-green-400\"\n >\n <IconShieldCheck size={12} className=\"mr-1\" />\n Vault\n </Badge>\n );\n }\n if (configured) {\n return (\n <Badge\n variant=\"secondary\"\n className=\"bg-green-500/10 text-green-700 dark:text-green-400\"\n >\n <IconCheck size={12} className=\"mr-1\" />\n Configured\n </Badge>\n );\n }\n if (vaultGranted) {\n return (\n <Badge\n variant=\"secondary\"\n className=\"bg-blue-500/10 text-blue-700 dark:text-blue-400\"\n >\n <IconKey size={12} className=\"mr-1\" />\n Granted (not synced)\n </Badge>\n );\n }\n return (\n <Badge\n variant=\"secondary\"\n className=\"bg-amber-500/10 text-amber-700 dark:text-amber-400\"\n >\n <IconCircleDashed size={12} className=\"mr-1\" />\n Missing\n </Badge>\n );\n}\n\nfunction AppCard({ app }: { app: any }) {\n const syncToApp = useActionMutation(\"sync-vault-to-app\", {\n onSuccess: (data: any) =>\n toast.success(`Synced ${data.synced} key(s) to ${data.appId}`),\n onError: (err) => toast.error(String(err)),\n });\n\n const integrations = app.integrations || [];\n const configuredCount = integrations.filter((i: any) => i.configured).length;\n const total = integrations.length;\n const coverage = total > 0 ? Math.round((configuredCount / total) * 100) : 0;\n\n return (\n <div className=\"rounded-2xl border bg-card\">\n <div className=\"flex items-center justify-between border-b px-5 py-4\">\n <div className=\"flex items-center gap-3\">\n <div\n className=\"flex h-9 w-9 items-center justify-center rounded-xl text-white text-xs font-bold\"\n style={{ backgroundColor: app.color }}\n >\n {app.appName.charAt(0).toUpperCase()}\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {app.appName}\n </h3>\n {app.reachable ? (\n <IconWifi size={14} className=\"text-green-500\" />\n ) : (\n <IconWifiOff size={14} className=\"text-muted-foreground/50\" />\n )}\n </div>\n <div className=\"text-xs text-muted-foreground\">{app.appId}</div>\n </div>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => syncToApp.mutate({ appId: app.appId })}\n disabled={syncToApp.isPending || !app.reachable}\n >\n <IconRefresh\n size={14}\n className={syncToApp.isPending ? \"animate-spin\" : \"\"}\n />\n <span className=\"ml-1.5\">Sync</span>\n </Button>\n </div>\n\n <div className=\"px-5 py-4\">\n {total > 0 ? (\n <>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {configuredCount}/{total} configured\n </span>\n <span>{coverage}%</span>\n </div>\n <Progress value={coverage} className=\"mt-2 h-1.5\" />\n\n <div className=\"mt-4 space-y-2\">\n {integrations.map((integration: any) => (\n <div\n key={integration.key}\n className=\"flex items-center justify-between rounded-lg border px-3 py-2\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-foreground\">\n {integration.label}\n </span>\n {integration.required && (\n <span className=\"text-xs text-red-500\">required</span>\n )}\n </div>\n <div className=\"font-mono text-xs text-muted-foreground\">\n {integration.key}\n </div>\n </div>\n <StatusBadge\n configured={integration.configured}\n vaultGranted={integration.vaultGranted}\n />\n </div>\n ))}\n </div>\n </>\n ) : app.reachable ? (\n <div className=\"py-4 text-center text-sm text-muted-foreground\">\n No declared integrations.\n </div>\n ) : (\n <div className=\"py-4 text-center text-sm text-muted-foreground\">\n App is not reachable. Start the app to see its integrations.\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default function IntegrationsRoute() {\n const { data: catalog, isLoading } = useActionQuery(\n \"list-integrations-catalog\",\n {},\n );\n\n const apps = catalog || [];\n const reachableApps = apps.filter((a: any) => a.reachable);\n const unreachableApps = apps.filter((a: any) => !a.reachable);\n\n const totalIntegrations = apps.reduce(\n (sum: number, a: any) => sum + (a.integrations?.length || 0),\n 0,\n );\n const configuredIntegrations = apps.reduce(\n (sum: number, a: any) =>\n sum + (a.integrations?.filter((i: any) => i.configured)?.length || 0),\n 0,\n );\n\n return (\n <DispatchShell\n title=\"Integrations\"\n description=\"See what credentials each app needs and their configuration status across the workspace.\"\n >\n {!isLoading && apps.length > 0 && (\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"rounded-2xl border bg-card p-5\">\n <div className=\"text-sm font-medium text-muted-foreground\">\n Apps discovered\n </div>\n <div className=\"mt-2 text-3xl font-semibold text-foreground\">\n {apps.length}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {reachableApps.length} reachable\n </div>\n </div>\n <div className=\"rounded-2xl border bg-card p-5\">\n <div className=\"text-sm font-medium text-muted-foreground\">\n Total integrations\n </div>\n <div className=\"mt-2 text-3xl font-semibold text-foreground\">\n {totalIntegrations}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n across all apps\n </div>\n </div>\n <div className=\"rounded-2xl border bg-card p-5\">\n <div className=\"text-sm font-medium text-muted-foreground\">\n Configured\n </div>\n <div className=\"mt-2 text-3xl font-semibold text-foreground\">\n {configuredIntegrations}/{totalIntegrations}\n </div>\n <Progress\n value={\n totalIntegrations > 0\n ? Math.round(\n (configuredIntegrations / totalIntegrations) * 100,\n )\n : 0\n }\n className=\"mt-2 h-1.5\"\n />\n </div>\n </div>\n )}\n\n {isLoading && (\n <div className=\"rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground\">\n Discovering apps and fetching integration status...\n </div>\n )}\n\n {reachableApps.length > 0 && (\n <div className=\"grid gap-4 xl:grid-cols-2\">\n {reachableApps.map((app: any) => (\n <AppCard key={app.appId} app={app} />\n ))}\n </div>\n )}\n\n {unreachableApps.length > 0 && (\n <div>\n <h2 className=\"mb-3 text-sm font-medium text-muted-foreground\">\n Offline apps\n </h2>\n <div className=\"grid gap-4 xl:grid-cols-2\">\n {unreachableApps.map((app: any) => (\n <AppCard key={app.appId} app={app} />\n ))}\n </div>\n </div>\n )}\n\n {!isLoading && apps.length === 0 && (\n <div className=\"rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground\">\n No workspace apps found.\n </div>\n )}\n </DispatchShell>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function meta(): {
2
+ title: string;
3
+ }[];
4
+ export default function MessagingRoute(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=messaging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/messaging.tsx"],"names":[],"mappings":"AAGA,wBAAgB,IAAI;;IAEnB;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,4CASrC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MessagingSetupPanel } from "../../components/messaging-setup-panel";
3
+ import { DispatchShell } from "../../components/dispatch-shell";
4
+ export function meta() {
5
+ return [{ title: "Messaging — Dispatch" }];
6
+ }
7
+ export default function MessagingRoute() {
8
+ return (_jsx(DispatchShell, { title: "Messaging", description: "Connect Slack and Telegram directly in dispatch so inbound conversations come through one place.", children: _jsx(MessagingSetupPanel, {}) }));
9
+ }
10
+ //# sourceMappingURL=messaging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/routes/pages/messaging.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,IAAI;IAClB,OAAO,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,cAAc;IACpC,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAC,WAAW,EACjB,WAAW,EAAC,kGAAkG,YAE9G,KAAC,mBAAmB,KAAG,GACT,CACjB,CAAC;AACJ,CAAC","sourcesContent":["import { MessagingSetupPanel } from \"@/components/messaging-setup-panel\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\n\nexport function meta() {\n return [{ title: \"Messaging — Dispatch\" }];\n}\n\nexport default function MessagingRoute() {\n return (\n <DispatchShell\n title=\"Messaging\"\n description=\"Connect Slack and Telegram directly in dispatch so inbound conversations come through one place.\"\n >\n <MessagingSetupPanel />\n </DispatchShell>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function meta(): {
2
+ title: string;
3
+ }[];
4
+ export default function NewAppRoute(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=new-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-app.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/new-app.tsx"],"names":[],"mappings":"AAGA,wBAAgB,IAAI;;IAEnB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,4CASlC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { NewWorkspaceAppFlow } from "@agent-native/core/client";
3
+ import { DispatchShell } from "../../components/dispatch-shell";
4
+ export function meta() {
5
+ return [{ title: "New App — Dispatch" }];
6
+ }
7
+ export default function NewAppRoute() {
8
+ return (_jsx(DispatchShell, { title: "New App", description: "Create a workspace app from a prompt and grant it selected vault keys.", children: _jsx(NewWorkspaceAppFlow, { sourceApp: "dispatch", className: "px-0 py-0" }) }));
9
+ }
10
+ //# sourceMappingURL=new-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-app.js","sourceRoot":"","sources":["../../../src/routes/pages/new-app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,IAAI;IAClB,OAAO,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,wEAAwE,YAEpF,KAAC,mBAAmB,IAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,WAAW,GAAG,GACpD,CACjB,CAAC;AACJ,CAAC","sourcesContent":["import { NewWorkspaceAppFlow } from \"@agent-native/core/client\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\n\nexport function meta() {\n return [{ title: \"New App — Dispatch\" }];\n}\n\nexport default function NewAppRoute() {\n return (\n <DispatchShell\n title=\"New App\"\n description=\"Create a workspace app from a prompt and grant it selected vault keys.\"\n >\n <NewWorkspaceAppFlow sourceApp=\"dispatch\" className=\"px-0 py-0\" />\n </DispatchShell>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function meta(): {
2
+ title: string;
3
+ }[];
4
+ export default function OverviewRoute(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/overview.tsx"],"names":[],"mappings":"AAyeA,wBAAgB,IAAI;;IAEnB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,4CA0SpC"}
@@ -0,0 +1,225 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from "react";
3
+ import { Link } from "react-router";
4
+ import { PromptComposer, isInBuilderFrame, sendToAgentChat, sendToBuilderChat, useActionQuery, useChatModels, agentNativePath, } from "@agent-native/core/client";
5
+ import { IconActivity, IconAlertTriangle, IconApps, IconArrowUpRight, IconCheck, IconClockHour4, IconInfoCircle, IconKey, IconListCheck, IconRocket, IconPlugConnected, IconShieldCheck, } from "@tabler/icons-react";
6
+ import { AppKeysPopover } from "../../components/app-keys-popover";
7
+ import { CreateAppPopover } from "../../components/create-app-popover";
8
+ import { DispatchShell } from "../../components/dispatch-shell";
9
+ import { Alert, AlertDescription, AlertTitle } from "../../components/ui/alert";
10
+ import { Badge } from "../../components/ui/badge";
11
+ import { Button } from "../../components/ui/button";
12
+ import { Skeleton } from "../../components/ui/skeleton";
13
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip";
14
+ const ZERO_TASK_QUEUE_STATS = {
15
+ pending: 0,
16
+ processing: 0,
17
+ completed_last_hour: 0,
18
+ failed_last_hour: 0,
19
+ oldest_pending_age_seconds: 0,
20
+ recent_failures: [],
21
+ };
22
+ function workspaceAppHref(app) {
23
+ if (app.status === "pending")
24
+ return app.builderUrl || null;
25
+ return app.url || app.path || null;
26
+ }
27
+ function isPendingBuilderHref(app) {
28
+ return app.status === "pending" && !!app.builderUrl;
29
+ }
30
+ const HOME_CHAT_SUGGESTIONS = [
31
+ "Create a lightweight customer onboarding app",
32
+ "Ask Slides to draft a board update from our latest metrics",
33
+ "Schedule a Monday morning analytics digest",
34
+ ];
35
+ function HomeChatPanel() {
36
+ const { selectedModel } = useChatModels();
37
+ const send = (message) => {
38
+ // When mounted inside builder.io's webview, the parent frame is the
39
+ // code-writing agent. Route home-chat submissions up to Builder's chat
40
+ // instead of the local dispatch agent — the local sidebar is in this
41
+ // same iframe and would never receive a postMessage we send to parent.
42
+ if (isInBuilderFrame()) {
43
+ sendToBuilderChat({ message, submit: true });
44
+ return;
45
+ }
46
+ sendToAgentChat({
47
+ message,
48
+ submit: true,
49
+ newTab: true,
50
+ model: selectedModel || undefined,
51
+ });
52
+ };
53
+ return (_jsx("section", { className: "px-2 py-6 sm:py-10", children: _jsxs("div", { className: "mx-auto w-full max-w-2xl space-y-5", children: [_jsx("h1", { className: "text-center text-2xl font-semibold tracking-tight text-foreground sm:text-3xl", children: "What should we do next?" }), _jsx(PromptComposer, { placeholder: "Message agent\u2026", onSubmit: (text) => {
54
+ const trimmed = text.trim();
55
+ if (!trimmed)
56
+ return;
57
+ send(trimmed);
58
+ } }), _jsx("div", { className: "flex flex-wrap justify-center gap-2", children: HOME_CHAT_SUGGESTIONS.map((suggestion) => (_jsx("button", { type: "button", onClick: () => send(suggestion), className: "cursor-pointer rounded-full border border-border bg-card px-3 py-1.5 text-xs text-muted-foreground transition hover:border-foreground/30 hover:text-foreground", children: suggestion }, suggestion))) })] }) }));
59
+ }
60
+ function AppCardSkeleton() {
61
+ return (_jsx("div", { className: "rounded-lg border bg-card p-4", children: _jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1 space-y-3", children: [_jsx(Skeleton, { className: "h-4 w-32" }), _jsx(Skeleton, { className: "h-3 w-24" }), _jsxs("div", { className: "space-y-2 pt-1", children: [_jsx(Skeleton, { className: "h-3 w-full" }), _jsx(Skeleton, { className: "h-3 w-2/3" })] })] }), _jsx(Skeleton, { className: "h-5 w-5 rounded-md" })] }) }));
62
+ }
63
+ function WorkspaceAppsSection({ apps, isLoading, }) {
64
+ const filteredApps = apps.filter((app) => !app.isDispatch);
65
+ const visibleApps = filteredApps.slice(0, 6);
66
+ const showSkeletons = isLoading && visibleApps.length === 0;
67
+ return (_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconApps, { size: 16, className: "text-muted-foreground" }), _jsx("h2", { className: "text-sm font-semibold text-foreground", children: "Workspace apps" })] }), _jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsxs(Link, { to: "/apps", children: ["View all", _jsx(IconArrowUpRight, { size: 15, className: "ml-1.5" })] }) })] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2 xl:grid-cols-3", children: [showSkeletons
68
+ ? Array.from({ length: 6 }).map((_, index) => (_jsx(AppCardSkeleton, {}, index)))
69
+ : visibleApps.map((app) => {
70
+ const href = workspaceAppHref(app);
71
+ // Pending Builder branches live on a different host (Builder
72
+ // editor URL); open those in a new tab. Ready workspace apps
73
+ // navigate the current window so this works inside the
74
+ // Builder webview, where new tabs would try to open in the
75
+ // host browser and break the embedded session.
76
+ const openInNewTab = isPendingBuilderHref(app);
77
+ return (_jsx("a", { href: href ?? undefined, target: openInNewTab ? "_blank" : undefined, rel: openInNewTab ? "noreferrer" : undefined, "aria-disabled": !href, className: "group min-h-32 rounded-lg border bg-card p-4 transition hover:border-foreground/30 aria-disabled:pointer-events-none aria-disabled:opacity-60", children: _jsxs("div", { className: "flex h-full items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("h3", { className: "truncate text-sm font-semibold text-foreground", children: app.name }), app.status === "pending" ? (_jsxs(Badge, { variant: "outline", className: "shrink-0 gap-1 border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300", children: [_jsx(IconClockHour4, { size: 12 }), "Building"] })) : null] }), _jsx("p", { className: "mt-1 truncate font-mono text-xs text-muted-foreground", children: app.path }), app.status === "pending" && app.branchName ? (_jsxs("p", { className: "mt-1 truncate text-xs text-muted-foreground", children: ["Branch: ", app.branchName] })) : null, app.description ? (_jsx("p", { className: "mt-2 line-clamp-2 text-xs leading-relaxed text-muted-foreground", children: app.description })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [app.status === "ready" ? (_jsx(AppKeysPopover, { appId: app.id, appName: app.name })) : null, _jsx(IconArrowUpRight, { size: 16, className: "text-muted-foreground transition group-hover:text-foreground" })] })] }) }, app.id));
78
+ }), !showSkeletons ? _jsx(CreateAppPopover, {}) : null] })] }));
79
+ }
80
+ function formatAgeSeconds(seconds) {
81
+ if (!seconds || seconds < 0)
82
+ return "0s";
83
+ if (seconds < 60)
84
+ return `${seconds}s`;
85
+ if (seconds < 3600)
86
+ return `${Math.floor(seconds / 60)}m`;
87
+ return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
88
+ }
89
+ function TaskQueueMetric({ label, value, tone, icon: Icon, }) {
90
+ const toneClass = tone === "danger"
91
+ ? "text-red-600 dark:text-red-400"
92
+ : tone === "warning"
93
+ ? "text-amber-600 dark:text-amber-400"
94
+ : "text-foreground";
95
+ return (_jsxs("div", { className: "rounded-xl border bg-card px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-xs font-medium text-muted-foreground", children: [Icon ? _jsx(Icon, { size: 14 }) : null, _jsx("span", { children: label })] }), _jsx("div", { className: `mt-1 text-2xl font-semibold ${toneClass}`, children: value })] }));
96
+ }
97
+ function TaskQueueSection({ stats }) {
98
+ const showAlert = stats.pending > 5 || stats.failed_last_hour > 0;
99
+ return (_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconListCheck, { size: 16, className: "text-muted-foreground" }), _jsx("h2", { className: "text-sm font-semibold text-foreground", children: "Task queue" })] }), showAlert && (_jsxs(Alert, { variant: stats.failed_last_hour > 0 ? "destructive" : "default", children: [_jsx(IconAlertTriangle, { className: "h-4 w-4" }), _jsx(AlertTitle, { children: stats.failed_last_hour > 0
100
+ ? `${stats.failed_last_hour} integration task${stats.failed_last_hour === 1 ? "" : "s"} failed in the last hour`
101
+ : `${stats.pending} pending integration task${stats.pending === 1 ? "" : "s"} queued` }), _jsx(AlertDescription, { children: stats.failed_last_hour > 0
102
+ ? "Recent failures are listed below. Check platform credentials and retry."
103
+ : "Tasks are waiting to be processed. The queue may be backed up." })] })), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-5", children: [_jsx(TaskQueueMetric, { label: "Pending", value: stats.pending, tone: stats.pending > 5 ? "warning" : "default" }), _jsx(TaskQueueMetric, { label: "Processing", value: stats.processing }), _jsx(TaskQueueMetric, { label: "Completed (1h)", value: stats.completed_last_hour }), _jsx(TaskQueueMetric, { label: "Failed (1h)", value: stats.failed_last_hour, tone: stats.failed_last_hour > 0 ? "danger" : "default" }), _jsx(TaskQueueMetric, { label: "Oldest pending", value: formatAgeSeconds(stats.oldest_pending_age_seconds), icon: IconClockHour4, tone: stats.oldest_pending_age_seconds > 300 ? "warning" : "default" })] }), stats.recent_failures.length > 0 && (_jsxs("div", { className: "rounded-2xl border bg-card p-4", children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: "Recent failures" }), _jsx("div", { className: "mt-3 space-y-2", children: stats.recent_failures.map((failure) => (_jsxs("div", { className: "rounded-xl border bg-muted/30 px-3 py-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [_jsx("span", { className: "font-medium text-foreground", children: failure.platform }), _jsxs("span", { children: [failure.attempts, " attempt", failure.attempts === 1 ? "" : "s"] })] }), _jsx("div", { className: "mt-1 truncate text-sm text-foreground", children: failure.error || "(no error message)" })] }, failure.id))) })] }))] }));
104
+ }
105
+ function HelpTooltip({ content }) {
106
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "text-muted-foreground/60 hover:text-foreground cursor-pointer", children: _jsx(IconInfoCircle, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { side: "top", className: "max-w-64 text-xs leading-relaxed", children: content })] }));
107
+ }
108
+ function StatCard({ label, help, value, icon: Icon, cta, }) {
109
+ return (_jsxs("div", { className: "rounded-2xl border bg-card p-5", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-sm font-medium text-foreground", children: [_jsx("span", { children: label }), _jsx(HelpTooltip, { content: help })] }), _jsx("div", { className: "mt-3 text-3xl font-semibold text-foreground", children: value })] }), _jsx("div", { className: "rounded-xl border bg-muted/30 p-3 text-muted-foreground", children: _jsx(Icon, { size: 18 }) })] }), cta ? _jsx("div", { className: "mt-4", children: cta }) : null] }));
110
+ }
111
+ function StepRow({ step }) {
112
+ const done = step.complete && !step.informational;
113
+ return (_jsxs("div", { className: `flex items-start gap-4 rounded-xl border px-5 py-4 ${done ? "border-border/50 bg-muted/20" : "bg-card"}`, children: [_jsx("div", { className: "flex-none pt-0.5", children: done ? (_jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-emerald-500/15 text-emerald-600 dark:text-emerald-400", children: _jsx(IconCheck, { size: 16, strokeWidth: 2.5 }) })) : (_jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-full border-2 border-muted-foreground/30 text-sm font-semibold text-muted-foreground", children: step.number })) }), _jsxs("div", { className: `min-w-0 flex-1 ${done ? "opacity-50" : ""}`, children: [_jsx("div", { className: `text-sm font-semibold ${done ? "line-through decoration-muted-foreground/40" : "text-foreground"}`, children: step.title }), _jsx("p", { className: "mt-0.5 text-sm leading-relaxed text-muted-foreground", children: step.description })] }), step.to && !done && (_jsx("div", { className: "flex-none pt-0.5", children: _jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: step.to, children: step.actionLabel || "Set up" }) }) }))] }));
114
+ }
115
+ export function meta() {
116
+ return [{ title: "Overview — Dispatch" }];
117
+ }
118
+ export default function OverviewRoute() {
119
+ const { data, isLoading } = useActionQuery("list-dispatch-overview", {});
120
+ const { data: connectedAgents } = useActionQuery("list-connected-agents", {});
121
+ const { data: workspaceApps = [], isLoading: appsLoading } = useActionQuery("list-workspace-apps", { includeAgentCards: false }, {
122
+ refetchInterval: 2_000,
123
+ });
124
+ const [integrationStatuses, setIntegrationStatuses] = useState([]);
125
+ const [taskQueueStats, setTaskQueueStats] = useState(ZERO_TASK_QUEUE_STATS);
126
+ useEffect(() => {
127
+ let active = true;
128
+ fetch(agentNativePath("/_agent-native/integrations/status"))
129
+ .then((res) => (res.ok ? res.json() : []))
130
+ .then((rows) => {
131
+ if (active) {
132
+ setIntegrationStatuses(Array.isArray(rows) ? rows : []);
133
+ }
134
+ })
135
+ .catch(() => {
136
+ if (active)
137
+ setIntegrationStatuses([]);
138
+ });
139
+ return () => {
140
+ active = false;
141
+ };
142
+ }, []);
143
+ useEffect(() => {
144
+ let active = true;
145
+ const load = () => {
146
+ fetch(agentNativePath("/_agent-native/integrations/task-queue/status"))
147
+ .then((res) => (res.ok ? res.json() : null))
148
+ .then((stats) => {
149
+ if (!active || !stats || typeof stats !== "object")
150
+ return;
151
+ setTaskQueueStats({
152
+ pending: Number(stats.pending ?? 0),
153
+ processing: Number(stats.processing ?? 0),
154
+ completed_last_hour: Number(stats.completed_last_hour ?? 0),
155
+ failed_last_hour: Number(stats.failed_last_hour ?? 0),
156
+ oldest_pending_age_seconds: Number(stats.oldest_pending_age_seconds ?? 0),
157
+ recent_failures: Array.isArray(stats.recent_failures)
158
+ ? stats.recent_failures
159
+ : [],
160
+ });
161
+ })
162
+ .catch(() => {
163
+ // Endpoint may not exist on older deploys — ignore.
164
+ });
165
+ };
166
+ load();
167
+ const id = window.setInterval(load, 15000);
168
+ return () => {
169
+ active = false;
170
+ window.clearInterval(id);
171
+ };
172
+ }, []);
173
+ const counts = data?.counts || {
174
+ destinations: 0,
175
+ pendingApprovals: 0,
176
+ linkedIdentities: 0,
177
+ activeTokens: 0,
178
+ };
179
+ const messagingStatuses = useMemo(() => integrationStatuses.filter((row) => row.platform === "slack" || row.platform === "telegram"), [integrationStatuses]);
180
+ const connectedMessagingCount = messagingStatuses.filter((row) => row.enabled || row.configured).length;
181
+ const connectedAgentCount = connectedAgents?.length || 0;
182
+ const vaultSecretCount = data?.vault?.secretCount || 0;
183
+ const typedWorkspaceApps = workspaceApps;
184
+ const messagingDone = connectedMessagingCount > 0;
185
+ const agentsDone = connectedAgentCount > 0;
186
+ const vaultDone = vaultSecretCount > 0;
187
+ const steps = [
188
+ {
189
+ number: 1,
190
+ title: "Connect Slack",
191
+ description: "Add @agent-native to your Slack workspace so your team can ask questions, create decks, pull analytics, and more — right from Slack.",
192
+ complete: messagingDone,
193
+ to: "/messaging",
194
+ actionLabel: "Connect",
195
+ },
196
+ {
197
+ number: 2,
198
+ title: "Review connected agents",
199
+ description: "Dispatch delegates work to specialized apps. The built-in suite (Slides, Analytics, Content, Video, and more) is available automatically.",
200
+ complete: agentsDone,
201
+ to: "/agents",
202
+ actionLabel: "Review",
203
+ },
204
+ {
205
+ number: 3,
206
+ title: "Set up your vault",
207
+ description: "Store API keys centrally and sync them to apps that need them.",
208
+ complete: vaultDone,
209
+ to: "/vault",
210
+ actionLabel: "Open vault",
211
+ },
212
+ {
213
+ number: 4,
214
+ title: "Try it out",
215
+ description: "Mention @agent-native in any Slack channel to get started.",
216
+ complete: false,
217
+ informational: true,
218
+ },
219
+ ];
220
+ const hasIncompleteSteps = steps.some((s) => !s.complete && !s.informational);
221
+ return (_jsxs(DispatchShell, { title: "Overview", description: "Create apps, manage shared keys, and route work across your workspace.", children: [_jsx(HomeChatPanel, {}), _jsx(WorkspaceAppsSection, { apps: typedWorkspaceApps, isLoading: appsLoading }), hasIncompleteSteps && (_jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconRocket, { size: 16, className: "text-muted-foreground" }), _jsx("h2", { className: "text-sm font-semibold text-foreground", children: "Getting started" })] }), _jsx("div", { className: "space-y-2", children: steps.map((step) => (_jsx(StepRow, { step: step }, step.number))) })] })), _jsxs("section", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconActivity, { size: 16, className: "text-muted-foreground" }), _jsx("h2", { className: "text-sm font-semibold text-foreground", children: "At a glance" })] }), _jsxs("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-4", children: [_jsx(StatCard, { label: "Vault secrets", help: "Credentials stored in the workspace vault. Grant them to apps from the Vault page.", value: data?.vault?.secretCount || 0, icon: IconKey, cta: (data?.vault?.secretCount || 0) === 0 ? (_jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: "/vault", children: "Set up vault" }) })) : undefined }), _jsx(StatCard, { label: "Active grants", help: "Secrets currently granted to apps. Sync them to push credentials.", value: data?.vault?.activeGrantCount || 0, icon: IconShieldCheck }), _jsx(StatCard, { label: "Destinations", help: "Saved outbound targets used for proactive sends and scheduled jobs.", value: counts.destinations, icon: IconArrowUpRight, cta: counts.destinations === 0 ? (_jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: "/destinations", children: "Set up destinations" }) })) : undefined }), _jsx(StatCard, { label: "Agents", help: "Agents available to dispatch for delegation over A2A. This includes the built-in app suite plus any additional agents you add.", value: connectedAgentCount, icon: IconPlugConnected, cta: connectedAgentCount === 0 ? (_jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: "/agents", children: "Open agents" }) })) : undefined })] })] }), _jsxs("details", { className: "rounded-xl border", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-3 px-5 py-4 text-sm font-semibold text-foreground hover:bg-muted/30 [&::-webkit-details-marker]:hidden", children: [_jsx("span", { children: "Operations detail" }), _jsx("span", { className: "text-xs font-normal text-muted-foreground", children: "Queue, audit, and approvals" })] }), _jsxs("div", { className: "space-y-5 border-t px-5 py-5", children: [_jsx(TaskQueueSection, { stats: taskQueueStats }), _jsxs("div", { className: "grid gap-4 xl:grid-cols-3", children: [_jsxs("section", { className: "rounded-2xl border bg-card p-5 xl:col-span-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Recent activity" }), isLoading && (_jsx("span", { className: "text-xs text-muted-foreground", children: "Loading..." }))] }), _jsxs("div", { className: "mt-4 space-y-3", children: [(data?.recentAudit || []).map((event) => (_jsxs("div", { className: "rounded-xl border bg-muted/30 px-4 py-3", children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: event.summary }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [event.actor, " \u00B7", " ", new Date(event.createdAt).toLocaleString()] })] }, event.id))), !isLoading && (data?.recentAudit?.length || 0) === 0 && (_jsx("div", { className: "rounded-xl border border-dashed px-4 py-6 text-sm text-muted-foreground", children: "No activity yet." }))] })] }), _jsxs("section", { className: "rounded-2xl border bg-card p-5", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Approval mode" }), _jsxs("div", { className: "mt-4 rounded-xl border bg-muted/30 p-4", children: [_jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "Current policy" }), _jsx("div", { className: "mt-2 text-2xl font-semibold text-foreground", children: data?.settings?.enabled ? "Reviewed" : "Immediate" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: data?.settings?.enabled
222
+ ? "Changes wait for approval before they apply."
223
+ : "Changes apply immediately and are recorded in audit." })] }), _jsxs("div", { className: "mt-4 space-y-2", children: [(data?.recentApprovals || []).map((approval) => (_jsxs("div", { className: "rounded-xl border px-4 py-3", children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: approval.summary }), _jsxs("div", { className: "mt-1 text-xs text-muted-foreground", children: [approval.status, " \u00B7 requested by ", approval.requestedBy] })] }, approval.id))), (data?.recentApprovals?.length || 0) === 0 && (_jsx("div", { className: "rounded-xl border border-dashed px-4 py-6 text-sm text-muted-foreground", children: "No approval requests." }))] })] })] })] })] })] }));
224
+ }
225
+ //# sourceMappingURL=overview.js.map