@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,792 @@
1
+ import { useEffect, useMemo, useState } from "react";
2
+ import { Link } from "react-router";
3
+ import {
4
+ PromptComposer,
5
+ isInBuilderFrame,
6
+ sendToAgentChat,
7
+ sendToBuilderChat,
8
+ useActionQuery,
9
+ useChatModels,
10
+ agentNativePath,
11
+ } from "@agent-native/core/client";
12
+ import {
13
+ IconActivity,
14
+ IconAlertTriangle,
15
+ IconApps,
16
+ IconArrowUpRight,
17
+ IconCheck,
18
+ IconClockHour4,
19
+ IconInfoCircle,
20
+ IconKey,
21
+ IconListCheck,
22
+ IconRocket,
23
+ IconPlugConnected,
24
+ IconShieldCheck,
25
+ type IconProps,
26
+ } from "@tabler/icons-react";
27
+ import { AppKeysPopover } from "@/components/app-keys-popover";
28
+ import { CreateAppPopover } from "@/components/create-app-popover";
29
+ import { DispatchShell } from "@/components/dispatch-shell";
30
+ import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
31
+ import { Badge } from "@/components/ui/badge";
32
+ import { Button } from "@/components/ui/button";
33
+ import { Skeleton } from "@/components/ui/skeleton";
34
+ import {
35
+ Tooltip,
36
+ TooltipContent,
37
+ TooltipTrigger,
38
+ } from "@/components/ui/tooltip";
39
+
40
+ interface IntegrationStatus {
41
+ platform: string;
42
+ label: string;
43
+ enabled: boolean;
44
+ configured: boolean;
45
+ }
46
+
47
+ interface TaskQueueRecentFailure {
48
+ id: string;
49
+ platform: string;
50
+ error: string;
51
+ attempts: number;
52
+ }
53
+
54
+ interface TaskQueueStats {
55
+ pending: number;
56
+ processing: number;
57
+ completed_last_hour: number;
58
+ failed_last_hour: number;
59
+ oldest_pending_age_seconds: number;
60
+ recent_failures: TaskQueueRecentFailure[];
61
+ }
62
+
63
+ const ZERO_TASK_QUEUE_STATS: TaskQueueStats = {
64
+ pending: 0,
65
+ processing: 0,
66
+ completed_last_hour: 0,
67
+ failed_last_hour: 0,
68
+ oldest_pending_age_seconds: 0,
69
+ recent_failures: [],
70
+ };
71
+
72
+ interface WorkspaceAppSummary {
73
+ id: string;
74
+ name: string;
75
+ description?: string;
76
+ path: string;
77
+ url?: string | null;
78
+ isDispatch: boolean;
79
+ status?: "ready" | "pending";
80
+ statusLabel?: string;
81
+ builderUrl?: string | null;
82
+ branchName?: string | null;
83
+ }
84
+
85
+ function workspaceAppHref(app: WorkspaceAppSummary): string | null {
86
+ if (app.status === "pending") return app.builderUrl || null;
87
+ return app.url || app.path || null;
88
+ }
89
+
90
+ function isPendingBuilderHref(app: WorkspaceAppSummary): boolean {
91
+ return app.status === "pending" && !!app.builderUrl;
92
+ }
93
+
94
+ const HOME_CHAT_SUGGESTIONS = [
95
+ "Create a lightweight customer onboarding app",
96
+ "Ask Slides to draft a board update from our latest metrics",
97
+ "Schedule a Monday morning analytics digest",
98
+ ];
99
+
100
+ function HomeChatPanel() {
101
+ const { selectedModel } = useChatModels();
102
+
103
+ const send = (message: string) => {
104
+ // When mounted inside builder.io's webview, the parent frame is the
105
+ // code-writing agent. Route home-chat submissions up to Builder's chat
106
+ // instead of the local dispatch agent — the local sidebar is in this
107
+ // same iframe and would never receive a postMessage we send to parent.
108
+ if (isInBuilderFrame()) {
109
+ sendToBuilderChat({ message, submit: true });
110
+ return;
111
+ }
112
+ sendToAgentChat({
113
+ message,
114
+ submit: true,
115
+ newTab: true,
116
+ model: selectedModel || undefined,
117
+ });
118
+ };
119
+
120
+ return (
121
+ <section className="px-2 py-6 sm:py-10">
122
+ <div className="mx-auto w-full max-w-2xl space-y-5">
123
+ <h1 className="text-center text-2xl font-semibold tracking-tight text-foreground sm:text-3xl">
124
+ What should we do next?
125
+ </h1>
126
+ <PromptComposer
127
+ placeholder="Message agent…"
128
+ onSubmit={(text) => {
129
+ const trimmed = text.trim();
130
+ if (!trimmed) return;
131
+ send(trimmed);
132
+ }}
133
+ />
134
+ <div className="flex flex-wrap justify-center gap-2">
135
+ {HOME_CHAT_SUGGESTIONS.map((suggestion) => (
136
+ <button
137
+ key={suggestion}
138
+ type="button"
139
+ onClick={() => send(suggestion)}
140
+ 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"
141
+ >
142
+ {suggestion}
143
+ </button>
144
+ ))}
145
+ </div>
146
+ </div>
147
+ </section>
148
+ );
149
+ }
150
+
151
+ function AppCardSkeleton() {
152
+ return (
153
+ <div className="rounded-lg border bg-card p-4">
154
+ <div className="flex items-start justify-between gap-3">
155
+ <div className="min-w-0 flex-1 space-y-3">
156
+ <Skeleton className="h-4 w-32" />
157
+ <Skeleton className="h-3 w-24" />
158
+ <div className="space-y-2 pt-1">
159
+ <Skeleton className="h-3 w-full" />
160
+ <Skeleton className="h-3 w-2/3" />
161
+ </div>
162
+ </div>
163
+ <Skeleton className="h-5 w-5 rounded-md" />
164
+ </div>
165
+ </div>
166
+ );
167
+ }
168
+
169
+ function WorkspaceAppsSection({
170
+ apps,
171
+ isLoading,
172
+ }: {
173
+ apps: WorkspaceAppSummary[];
174
+ isLoading: boolean;
175
+ }) {
176
+ const filteredApps = apps.filter((app) => !app.isDispatch);
177
+ const visibleApps = filteredApps.slice(0, 6);
178
+ const showSkeletons = isLoading && visibleApps.length === 0;
179
+
180
+ return (
181
+ <section className="space-y-3">
182
+ <div className="flex flex-wrap items-center justify-between gap-3">
183
+ <div className="flex items-center gap-2">
184
+ <IconApps size={16} className="text-muted-foreground" />
185
+ <h2 className="text-sm font-semibold text-foreground">
186
+ Workspace apps
187
+ </h2>
188
+ </div>
189
+ <Button asChild variant="outline" size="sm">
190
+ <Link to="/apps">
191
+ View all
192
+ <IconArrowUpRight size={15} className="ml-1.5" />
193
+ </Link>
194
+ </Button>
195
+ </div>
196
+
197
+ <div className="grid gap-3 sm:grid-cols-2 xl:grid-cols-3">
198
+ {showSkeletons
199
+ ? Array.from({ length: 6 }).map((_, index) => (
200
+ <AppCardSkeleton key={index} />
201
+ ))
202
+ : visibleApps.map((app) => {
203
+ const href = workspaceAppHref(app);
204
+ // Pending Builder branches live on a different host (Builder
205
+ // editor URL); open those in a new tab. Ready workspace apps
206
+ // navigate the current window so this works inside the
207
+ // Builder webview, where new tabs would try to open in the
208
+ // host browser and break the embedded session.
209
+ const openInNewTab = isPendingBuilderHref(app);
210
+ return (
211
+ <a
212
+ key={app.id}
213
+ href={href ?? undefined}
214
+ target={openInNewTab ? "_blank" : undefined}
215
+ rel={openInNewTab ? "noreferrer" : undefined}
216
+ aria-disabled={!href}
217
+ 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"
218
+ >
219
+ <div className="flex h-full items-start justify-between gap-3">
220
+ <div className="min-w-0">
221
+ <div className="flex min-w-0 items-center gap-2">
222
+ <h3 className="truncate text-sm font-semibold text-foreground">
223
+ {app.name}
224
+ </h3>
225
+ {app.status === "pending" ? (
226
+ <Badge
227
+ variant="outline"
228
+ className="shrink-0 gap-1 border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300"
229
+ >
230
+ <IconClockHour4 size={12} />
231
+ Building
232
+ </Badge>
233
+ ) : null}
234
+ </div>
235
+ <p className="mt-1 truncate font-mono text-xs text-muted-foreground">
236
+ {app.path}
237
+ </p>
238
+ {app.status === "pending" && app.branchName ? (
239
+ <p className="mt-1 truncate text-xs text-muted-foreground">
240
+ Branch: {app.branchName}
241
+ </p>
242
+ ) : null}
243
+ {app.description ? (
244
+ <p className="mt-2 line-clamp-2 text-xs leading-relaxed text-muted-foreground">
245
+ {app.description}
246
+ </p>
247
+ ) : null}
248
+ </div>
249
+ <div className="flex shrink-0 items-center gap-1">
250
+ {app.status === "ready" ? (
251
+ <AppKeysPopover appId={app.id} appName={app.name} />
252
+ ) : null}
253
+ <IconArrowUpRight
254
+ size={16}
255
+ className="text-muted-foreground transition group-hover:text-foreground"
256
+ />
257
+ </div>
258
+ </div>
259
+ </a>
260
+ );
261
+ })}
262
+
263
+ {!showSkeletons ? <CreateAppPopover /> : null}
264
+ </div>
265
+ </section>
266
+ );
267
+ }
268
+
269
+ function formatAgeSeconds(seconds: number): string {
270
+ if (!seconds || seconds < 0) return "0s";
271
+ if (seconds < 60) return `${seconds}s`;
272
+ if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;
273
+ return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
274
+ }
275
+
276
+ function TaskQueueMetric({
277
+ label,
278
+ value,
279
+ tone,
280
+ icon: Icon,
281
+ }: {
282
+ label: string;
283
+ value: string | number;
284
+ tone?: "default" | "warning" | "danger";
285
+ icon?: React.ComponentType<IconProps>;
286
+ }) {
287
+ const toneClass =
288
+ tone === "danger"
289
+ ? "text-red-600 dark:text-red-400"
290
+ : tone === "warning"
291
+ ? "text-amber-600 dark:text-amber-400"
292
+ : "text-foreground";
293
+ return (
294
+ <div className="rounded-xl border bg-card px-4 py-3">
295
+ <div className="flex items-center gap-1.5 text-xs font-medium text-muted-foreground">
296
+ {Icon ? <Icon size={14} /> : null}
297
+ <span>{label}</span>
298
+ </div>
299
+ <div className={`mt-1 text-2xl font-semibold ${toneClass}`}>{value}</div>
300
+ </div>
301
+ );
302
+ }
303
+
304
+ function TaskQueueSection({ stats }: { stats: TaskQueueStats }) {
305
+ const showAlert = stats.pending > 5 || stats.failed_last_hour > 0;
306
+ return (
307
+ <section className="space-y-3">
308
+ <div className="flex items-center gap-2">
309
+ <IconListCheck size={16} className="text-muted-foreground" />
310
+ <h2 className="text-sm font-semibold text-foreground">Task queue</h2>
311
+ </div>
312
+ {showAlert && (
313
+ <Alert variant={stats.failed_last_hour > 0 ? "destructive" : "default"}>
314
+ <IconAlertTriangle className="h-4 w-4" />
315
+ <AlertTitle>
316
+ {stats.failed_last_hour > 0
317
+ ? `${stats.failed_last_hour} integration task${stats.failed_last_hour === 1 ? "" : "s"} failed in the last hour`
318
+ : `${stats.pending} pending integration task${stats.pending === 1 ? "" : "s"} queued`}
319
+ </AlertTitle>
320
+ <AlertDescription>
321
+ {stats.failed_last_hour > 0
322
+ ? "Recent failures are listed below. Check platform credentials and retry."
323
+ : "Tasks are waiting to be processed. The queue may be backed up."}
324
+ </AlertDescription>
325
+ </Alert>
326
+ )}
327
+ <div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-5">
328
+ <TaskQueueMetric
329
+ label="Pending"
330
+ value={stats.pending}
331
+ tone={stats.pending > 5 ? "warning" : "default"}
332
+ />
333
+ <TaskQueueMetric label="Processing" value={stats.processing} />
334
+ <TaskQueueMetric
335
+ label="Completed (1h)"
336
+ value={stats.completed_last_hour}
337
+ />
338
+ <TaskQueueMetric
339
+ label="Failed (1h)"
340
+ value={stats.failed_last_hour}
341
+ tone={stats.failed_last_hour > 0 ? "danger" : "default"}
342
+ />
343
+ <TaskQueueMetric
344
+ label="Oldest pending"
345
+ value={formatAgeSeconds(stats.oldest_pending_age_seconds)}
346
+ icon={IconClockHour4}
347
+ tone={stats.oldest_pending_age_seconds > 300 ? "warning" : "default"}
348
+ />
349
+ </div>
350
+ {stats.recent_failures.length > 0 && (
351
+ <div className="rounded-2xl border bg-card p-4">
352
+ <div className="text-sm font-semibold text-foreground">
353
+ Recent failures
354
+ </div>
355
+ <div className="mt-3 space-y-2">
356
+ {stats.recent_failures.map((failure) => (
357
+ <div
358
+ key={failure.id}
359
+ className="rounded-xl border bg-muted/30 px-3 py-2"
360
+ >
361
+ <div className="flex items-center justify-between gap-2 text-xs text-muted-foreground">
362
+ <span className="font-medium text-foreground">
363
+ {failure.platform}
364
+ </span>
365
+ <span>
366
+ {failure.attempts} attempt
367
+ {failure.attempts === 1 ? "" : "s"}
368
+ </span>
369
+ </div>
370
+ <div className="mt-1 truncate text-sm text-foreground">
371
+ {failure.error || "(no error message)"}
372
+ </div>
373
+ </div>
374
+ ))}
375
+ </div>
376
+ </div>
377
+ )}
378
+ </section>
379
+ );
380
+ }
381
+
382
+ function HelpTooltip({ content }: { content: string }) {
383
+ return (
384
+ <Tooltip>
385
+ <TooltipTrigger asChild>
386
+ <button
387
+ type="button"
388
+ className="text-muted-foreground/60 hover:text-foreground cursor-pointer"
389
+ >
390
+ <IconInfoCircle className="h-3.5 w-3.5" />
391
+ </button>
392
+ </TooltipTrigger>
393
+ <TooltipContent side="top" className="max-w-64 text-xs leading-relaxed">
394
+ {content}
395
+ </TooltipContent>
396
+ </Tooltip>
397
+ );
398
+ }
399
+
400
+ function StatCard({
401
+ label,
402
+ help,
403
+ value,
404
+ icon: Icon,
405
+ cta,
406
+ }: {
407
+ label: string;
408
+ help: string;
409
+ value: number;
410
+ icon: React.ComponentType<IconProps>;
411
+ cta?: React.ReactNode;
412
+ }) {
413
+ return (
414
+ <div className="rounded-2xl border bg-card p-5">
415
+ <div className="flex items-start justify-between gap-3">
416
+ <div className="min-w-0">
417
+ <div className="flex items-center gap-1.5 text-sm font-medium text-foreground">
418
+ <span>{label}</span>
419
+ <HelpTooltip content={help} />
420
+ </div>
421
+ <div className="mt-3 text-3xl font-semibold text-foreground">
422
+ {value}
423
+ </div>
424
+ </div>
425
+ <div className="rounded-xl border bg-muted/30 p-3 text-muted-foreground">
426
+ <Icon size={18} />
427
+ </div>
428
+ </div>
429
+ {cta ? <div className="mt-4">{cta}</div> : null}
430
+ </div>
431
+ );
432
+ }
433
+
434
+ interface ChecklistStep {
435
+ number: number;
436
+ title: string;
437
+ description: string;
438
+ complete: boolean;
439
+ /** If set, renders a link button to this path */
440
+ to?: string;
441
+ actionLabel?: string;
442
+ /** If true, this step is always shown as informational (never "complete") */
443
+ informational?: boolean;
444
+ }
445
+
446
+ function StepRow({ step }: { step: ChecklistStep }) {
447
+ const done = step.complete && !step.informational;
448
+
449
+ return (
450
+ <div
451
+ className={`flex items-start gap-4 rounded-xl border px-5 py-4 ${done ? "border-border/50 bg-muted/20" : "bg-card"}`}
452
+ >
453
+ {/* Number / check circle */}
454
+ <div className="flex-none pt-0.5">
455
+ {done ? (
456
+ <div className="flex h-7 w-7 items-center justify-center rounded-full bg-emerald-500/15 text-emerald-600 dark:text-emerald-400">
457
+ <IconCheck size={16} strokeWidth={2.5} />
458
+ </div>
459
+ ) : (
460
+ <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">
461
+ {step.number}
462
+ </div>
463
+ )}
464
+ </div>
465
+
466
+ {/* Text */}
467
+ <div className={`min-w-0 flex-1 ${done ? "opacity-50" : ""}`}>
468
+ <div
469
+ className={`text-sm font-semibold ${done ? "line-through decoration-muted-foreground/40" : "text-foreground"}`}
470
+ >
471
+ {step.title}
472
+ </div>
473
+ <p className="mt-0.5 text-sm leading-relaxed text-muted-foreground">
474
+ {step.description}
475
+ </p>
476
+ </div>
477
+
478
+ {/* Action */}
479
+ {step.to && !done && (
480
+ <div className="flex-none pt-0.5">
481
+ <Button variant="outline" size="sm" asChild>
482
+ <Link to={step.to}>{step.actionLabel || "Set up"}</Link>
483
+ </Button>
484
+ </div>
485
+ )}
486
+ </div>
487
+ );
488
+ }
489
+
490
+ export function meta() {
491
+ return [{ title: "Overview — Dispatch" }];
492
+ }
493
+
494
+ export default function OverviewRoute() {
495
+ const { data, isLoading } = useActionQuery("list-dispatch-overview", {});
496
+ const { data: connectedAgents } = useActionQuery("list-connected-agents", {});
497
+ const { data: workspaceApps = [], isLoading: appsLoading } = useActionQuery(
498
+ "list-workspace-apps",
499
+ { includeAgentCards: false },
500
+ {
501
+ refetchInterval: 2_000,
502
+ },
503
+ );
504
+ const [integrationStatuses, setIntegrationStatuses] = useState<
505
+ IntegrationStatus[]
506
+ >([]);
507
+ const [taskQueueStats, setTaskQueueStats] = useState<TaskQueueStats>(
508
+ ZERO_TASK_QUEUE_STATS,
509
+ );
510
+
511
+ useEffect(() => {
512
+ let active = true;
513
+ fetch(agentNativePath("/_agent-native/integrations/status"))
514
+ .then((res) => (res.ok ? res.json() : []))
515
+ .then((rows) => {
516
+ if (active) {
517
+ setIntegrationStatuses(Array.isArray(rows) ? rows : []);
518
+ }
519
+ })
520
+ .catch(() => {
521
+ if (active) setIntegrationStatuses([]);
522
+ });
523
+ return () => {
524
+ active = false;
525
+ };
526
+ }, []);
527
+
528
+ useEffect(() => {
529
+ let active = true;
530
+ const load = () => {
531
+ fetch(agentNativePath("/_agent-native/integrations/task-queue/status"))
532
+ .then((res) => (res.ok ? res.json() : null))
533
+ .then((stats) => {
534
+ if (!active || !stats || typeof stats !== "object") return;
535
+ setTaskQueueStats({
536
+ pending: Number(stats.pending ?? 0),
537
+ processing: Number(stats.processing ?? 0),
538
+ completed_last_hour: Number(stats.completed_last_hour ?? 0),
539
+ failed_last_hour: Number(stats.failed_last_hour ?? 0),
540
+ oldest_pending_age_seconds: Number(
541
+ stats.oldest_pending_age_seconds ?? 0,
542
+ ),
543
+ recent_failures: Array.isArray(stats.recent_failures)
544
+ ? stats.recent_failures
545
+ : [],
546
+ });
547
+ })
548
+ .catch(() => {
549
+ // Endpoint may not exist on older deploys — ignore.
550
+ });
551
+ };
552
+ load();
553
+ const id = window.setInterval(load, 15000);
554
+ return () => {
555
+ active = false;
556
+ window.clearInterval(id);
557
+ };
558
+ }, []);
559
+
560
+ const counts = data?.counts || {
561
+ destinations: 0,
562
+ pendingApprovals: 0,
563
+ linkedIdentities: 0,
564
+ activeTokens: 0,
565
+ };
566
+
567
+ const messagingStatuses = useMemo(
568
+ () =>
569
+ integrationStatuses.filter(
570
+ (row) => row.platform === "slack" || row.platform === "telegram",
571
+ ),
572
+ [integrationStatuses],
573
+ );
574
+
575
+ const connectedMessagingCount = messagingStatuses.filter(
576
+ (row) => row.enabled || row.configured,
577
+ ).length;
578
+ const connectedAgentCount = connectedAgents?.length || 0;
579
+ const vaultSecretCount = data?.vault?.secretCount || 0;
580
+ const typedWorkspaceApps = workspaceApps as WorkspaceAppSummary[];
581
+
582
+ const messagingDone = connectedMessagingCount > 0;
583
+ const agentsDone = connectedAgentCount > 0;
584
+ const vaultDone = vaultSecretCount > 0;
585
+
586
+ const steps: ChecklistStep[] = [
587
+ {
588
+ number: 1,
589
+ title: "Connect Slack",
590
+ description:
591
+ "Add @agent-native to your Slack workspace so your team can ask questions, create decks, pull analytics, and more — right from Slack.",
592
+ complete: messagingDone,
593
+ to: "/messaging",
594
+ actionLabel: "Connect",
595
+ },
596
+ {
597
+ number: 2,
598
+ title: "Review connected agents",
599
+ description:
600
+ "Dispatch delegates work to specialized apps. The built-in suite (Slides, Analytics, Content, Video, and more) is available automatically.",
601
+ complete: agentsDone,
602
+ to: "/agents",
603
+ actionLabel: "Review",
604
+ },
605
+ {
606
+ number: 3,
607
+ title: "Set up your vault",
608
+ description:
609
+ "Store API keys centrally and sync them to apps that need them.",
610
+ complete: vaultDone,
611
+ to: "/vault",
612
+ actionLabel: "Open vault",
613
+ },
614
+ {
615
+ number: 4,
616
+ title: "Try it out",
617
+ description: "Mention @agent-native in any Slack channel to get started.",
618
+ complete: false,
619
+ informational: true,
620
+ },
621
+ ];
622
+
623
+ const hasIncompleteSteps = steps.some((s) => !s.complete && !s.informational);
624
+
625
+ return (
626
+ <DispatchShell
627
+ title="Overview"
628
+ description="Create apps, manage shared keys, and route work across your workspace."
629
+ >
630
+ <HomeChatPanel />
631
+
632
+ <WorkspaceAppsSection apps={typedWorkspaceApps} isLoading={appsLoading} />
633
+
634
+ {hasIncompleteSteps && (
635
+ <section className="space-y-3">
636
+ <div className="flex items-center gap-2">
637
+ <IconRocket size={16} className="text-muted-foreground" />
638
+ <h2 className="text-sm font-semibold text-foreground">
639
+ Getting started
640
+ </h2>
641
+ </div>
642
+ <div className="space-y-2">
643
+ {steps.map((step) => (
644
+ <StepRow key={step.number} step={step} />
645
+ ))}
646
+ </div>
647
+ </section>
648
+ )}
649
+
650
+ <section className="space-y-3">
651
+ <div className="flex items-center gap-2">
652
+ <IconActivity size={16} className="text-muted-foreground" />
653
+ <h2 className="text-sm font-semibold text-foreground">At a glance</h2>
654
+ </div>
655
+ <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
656
+ <StatCard
657
+ label="Vault secrets"
658
+ help="Credentials stored in the workspace vault. Grant them to apps from the Vault page."
659
+ value={data?.vault?.secretCount || 0}
660
+ icon={IconKey}
661
+ cta={
662
+ (data?.vault?.secretCount || 0) === 0 ? (
663
+ <Button variant="outline" size="sm" asChild>
664
+ <Link to="/vault">Set up vault</Link>
665
+ </Button>
666
+ ) : undefined
667
+ }
668
+ />
669
+ <StatCard
670
+ label="Active grants"
671
+ help="Secrets currently granted to apps. Sync them to push credentials."
672
+ value={data?.vault?.activeGrantCount || 0}
673
+ icon={IconShieldCheck}
674
+ />
675
+ <StatCard
676
+ label="Destinations"
677
+ help="Saved outbound targets used for proactive sends and scheduled jobs."
678
+ value={counts.destinations}
679
+ icon={IconArrowUpRight}
680
+ cta={
681
+ counts.destinations === 0 ? (
682
+ <Button variant="outline" size="sm" asChild>
683
+ <Link to="/destinations">Set up destinations</Link>
684
+ </Button>
685
+ ) : undefined
686
+ }
687
+ />
688
+ <StatCard
689
+ label="Agents"
690
+ help="Agents available to dispatch for delegation over A2A. This includes the built-in app suite plus any additional agents you add."
691
+ value={connectedAgentCount}
692
+ icon={IconPlugConnected}
693
+ cta={
694
+ connectedAgentCount === 0 ? (
695
+ <Button variant="outline" size="sm" asChild>
696
+ <Link to="/agents">Open agents</Link>
697
+ </Button>
698
+ ) : undefined
699
+ }
700
+ />
701
+ </div>
702
+ </section>
703
+
704
+ <details className="rounded-xl border">
705
+ <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">
706
+ <span>Operations detail</span>
707
+ <span className="text-xs font-normal text-muted-foreground">
708
+ Queue, audit, and approvals
709
+ </span>
710
+ </summary>
711
+ <div className="space-y-5 border-t px-5 py-5">
712
+ <TaskQueueSection stats={taskQueueStats} />
713
+
714
+ <div className="grid gap-4 xl:grid-cols-3">
715
+ <section className="rounded-2xl border bg-card p-5 xl:col-span-2">
716
+ <div className="flex items-center justify-between">
717
+ <h2 className="text-lg font-semibold text-foreground">
718
+ Recent activity
719
+ </h2>
720
+ {isLoading && (
721
+ <span className="text-xs text-muted-foreground">
722
+ Loading...
723
+ </span>
724
+ )}
725
+ </div>
726
+ <div className="mt-4 space-y-3">
727
+ {(data?.recentAudit || []).map((event) => (
728
+ <div
729
+ key={event.id}
730
+ className="rounded-xl border bg-muted/30 px-4 py-3"
731
+ >
732
+ <div className="text-sm font-medium text-foreground">
733
+ {event.summary}
734
+ </div>
735
+ <div className="mt-1 text-xs text-muted-foreground">
736
+ {event.actor} ·{" "}
737
+ {new Date(event.createdAt).toLocaleString()}
738
+ </div>
739
+ </div>
740
+ ))}
741
+ {!isLoading && (data?.recentAudit?.length || 0) === 0 && (
742
+ <div className="rounded-xl border border-dashed px-4 py-6 text-sm text-muted-foreground">
743
+ No activity yet.
744
+ </div>
745
+ )}
746
+ </div>
747
+ </section>
748
+
749
+ <section className="rounded-2xl border bg-card p-5">
750
+ <h2 className="text-lg font-semibold text-foreground">
751
+ Approval mode
752
+ </h2>
753
+ <div className="mt-4 rounded-xl border bg-muted/30 p-4">
754
+ <div className="text-sm font-medium text-muted-foreground">
755
+ Current policy
756
+ </div>
757
+ <div className="mt-2 text-2xl font-semibold text-foreground">
758
+ {data?.settings?.enabled ? "Reviewed" : "Immediate"}
759
+ </div>
760
+ <p className="mt-2 text-sm text-muted-foreground">
761
+ {data?.settings?.enabled
762
+ ? "Changes wait for approval before they apply."
763
+ : "Changes apply immediately and are recorded in audit."}
764
+ </p>
765
+ </div>
766
+ <div className="mt-4 space-y-2">
767
+ {(data?.recentApprovals || []).map((approval) => (
768
+ <div
769
+ key={approval.id}
770
+ className="rounded-xl border px-4 py-3"
771
+ >
772
+ <div className="text-sm font-medium text-foreground">
773
+ {approval.summary}
774
+ </div>
775
+ <div className="mt-1 text-xs text-muted-foreground">
776
+ {approval.status} · requested by {approval.requestedBy}
777
+ </div>
778
+ </div>
779
+ ))}
780
+ {(data?.recentApprovals?.length || 0) === 0 && (
781
+ <div className="rounded-xl border border-dashed px-4 py-6 text-sm text-muted-foreground">
782
+ No approval requests.
783
+ </div>
784
+ )}
785
+ </div>
786
+ </section>
787
+ </div>
788
+ </div>
789
+ </details>
790
+ </DispatchShell>
791
+ );
792
+ }