@agent-native/dispatch 0.12.2 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (766) hide show
  1. package/dist/actions/apply-dream-proposal.d.ts +14 -14
  2. package/dist/actions/apply-dream-proposal.d.ts.map +1 -1
  3. package/dist/actions/apply-dream-proposal.js.map +1 -1
  4. package/dist/actions/approve-dispatch-change.d.ts.map +1 -1
  5. package/dist/actions/approve-dispatch-change.js.map +1 -1
  6. package/dist/actions/approve-vault-request.d.ts.map +1 -1
  7. package/dist/actions/approve-vault-request.js.map +1 -1
  8. package/dist/actions/archive-workspace-app.d.ts.map +1 -1
  9. package/dist/actions/archive-workspace-app.js.map +1 -1
  10. package/dist/actions/ask_app.d.ts.map +1 -1
  11. package/dist/actions/ask_app.js.map +1 -1
  12. package/dist/actions/create-dream-report.d.ts +26 -26
  13. package/dist/actions/create-dream-report.d.ts.map +1 -1
  14. package/dist/actions/create-dream-report.js.map +1 -1
  15. package/dist/actions/create-link-token.d.ts +1 -1
  16. package/dist/actions/create-link-token.d.ts.map +1 -1
  17. package/dist/actions/create-link-token.js.map +1 -1
  18. package/dist/actions/create-pylon-ticket.d.ts +1 -1
  19. package/dist/actions/create-pylon-ticket.d.ts.map +1 -1
  20. package/dist/actions/create-pylon-ticket.js.map +1 -1
  21. package/dist/actions/create-vault-grant.d.ts.map +1 -1
  22. package/dist/actions/create-vault-grant.js.map +1 -1
  23. package/dist/actions/create-vault-secret.d.ts.map +1 -1
  24. package/dist/actions/create-vault-secret.js.map +1 -1
  25. package/dist/actions/create-workspace-resource-grant.d.ts.map +1 -1
  26. package/dist/actions/create-workspace-resource-grant.js.map +1 -1
  27. package/dist/actions/create-workspace-resource.d.ts +2 -2
  28. package/dist/actions/create-workspace-resource.d.ts.map +1 -1
  29. package/dist/actions/create-workspace-resource.js.map +1 -1
  30. package/dist/actions/create_embed_session.d.ts.map +1 -1
  31. package/dist/actions/create_embed_session.js.map +1 -1
  32. package/dist/actions/delete-destination.d.ts +12 -12
  33. package/dist/actions/delete-destination.d.ts.map +1 -1
  34. package/dist/actions/delete-destination.js.map +1 -1
  35. package/dist/actions/delete-staged-dataset.d.ts.map +1 -1
  36. package/dist/actions/delete-staged-dataset.js.map +1 -1
  37. package/dist/actions/delete-vault-secret.d.ts.map +1 -1
  38. package/dist/actions/delete-vault-secret.js.map +1 -1
  39. package/dist/actions/delete-workspace-resource.d.ts +13 -13
  40. package/dist/actions/delete-workspace-resource.d.ts.map +1 -1
  41. package/dist/actions/delete-workspace-resource.js.map +1 -1
  42. package/dist/actions/deny-vault-request.d.ts.map +1 -1
  43. package/dist/actions/deny-vault-request.js.map +1 -1
  44. package/dist/actions/ensure-dream-job.d.ts.map +1 -1
  45. package/dist/actions/ensure-dream-job.js.map +1 -1
  46. package/dist/actions/get-agent-thread-debug.d.ts +2 -2
  47. package/dist/actions/get-agent-thread-debug.d.ts.map +1 -1
  48. package/dist/actions/get-agent-thread-debug.js.map +1 -1
  49. package/dist/actions/get-app-creation-settings.d.ts.map +1 -1
  50. package/dist/actions/get-app-creation-settings.js.map +1 -1
  51. package/dist/actions/get-dispatch-settings.d.ts.map +1 -1
  52. package/dist/actions/get-dispatch-settings.js.map +1 -1
  53. package/dist/actions/get-dream-settings.d.ts.map +1 -1
  54. package/dist/actions/get-dream-settings.js.map +1 -1
  55. package/dist/actions/get-dream.d.ts +26 -26
  56. package/dist/actions/get-dream.d.ts.map +1 -1
  57. package/dist/actions/get-dream.js.map +1 -1
  58. package/dist/actions/get-vault-access-settings.d.ts.map +1 -1
  59. package/dist/actions/get-vault-access-settings.js.map +1 -1
  60. package/dist/actions/get-workspace-info.d.ts.map +1 -1
  61. package/dist/actions/get-workspace-info.js.map +1 -1
  62. package/dist/actions/get-workspace-resource-effective-context.d.ts.map +1 -1
  63. package/dist/actions/get-workspace-resource-effective-context.js.map +1 -1
  64. package/dist/actions/grant-vault-secrets-to-app.d.ts.map +1 -1
  65. package/dist/actions/grant-vault-secrets-to-app.js.map +1 -1
  66. package/dist/actions/grant-workspace-resources-to-app.d.ts.map +1 -1
  67. package/dist/actions/grant-workspace-resources-to-app.js.map +1 -1
  68. package/dist/actions/index.d.ts.map +1 -1
  69. package/dist/actions/index.js +12 -12
  70. package/dist/actions/index.js.map +1 -1
  71. package/dist/actions/list-agent-thread-sources.d.ts.map +1 -1
  72. package/dist/actions/list-agent-thread-sources.js.map +1 -1
  73. package/dist/actions/list-available-workspace-templates.d.ts.map +1 -1
  74. package/dist/actions/list-available-workspace-templates.js.map +1 -1
  75. package/dist/actions/list-connected-agents.d.ts +4 -4
  76. package/dist/actions/list-connected-agents.d.ts.map +1 -1
  77. package/dist/actions/list-connected-agents.js +4 -4
  78. package/dist/actions/list-connected-agents.js.map +1 -1
  79. package/dist/actions/list-destinations.d.ts.map +1 -1
  80. package/dist/actions/list-destinations.js.map +1 -1
  81. package/dist/actions/list-dispatch-approvals.d.ts.map +1 -1
  82. package/dist/actions/list-dispatch-approvals.js.map +1 -1
  83. package/dist/actions/list-dispatch-audit.d.ts.map +1 -1
  84. package/dist/actions/list-dispatch-audit.js.map +1 -1
  85. package/dist/actions/list-dispatch-overview.d.ts +7 -7
  86. package/dist/actions/list-dispatch-overview.d.ts.map +1 -1
  87. package/dist/actions/list-dispatch-overview.js.map +1 -1
  88. package/dist/actions/list-dispatch-usage-metrics.d.ts.map +1 -1
  89. package/dist/actions/list-dispatch-usage-metrics.js.map +1 -1
  90. package/dist/actions/list-dream-candidates.d.ts.map +1 -1
  91. package/dist/actions/list-dream-candidates.js.map +1 -1
  92. package/dist/actions/list-dreams.d.ts +14 -14
  93. package/dist/actions/list-dreams.d.ts.map +1 -1
  94. package/dist/actions/list-dreams.js.map +1 -1
  95. package/dist/actions/list-integrations-catalog.d.ts.map +1 -1
  96. package/dist/actions/list-integrations-catalog.js.map +1 -1
  97. package/dist/actions/list-linked-identities.d.ts.map +1 -1
  98. package/dist/actions/list-linked-identities.js.map +1 -1
  99. package/dist/actions/list-mcp-app-access.d.ts.map +1 -1
  100. package/dist/actions/list-mcp-app-access.js.map +1 -1
  101. package/dist/actions/list-staged-datasets.d.ts.map +1 -1
  102. package/dist/actions/list-staged-datasets.js.map +1 -1
  103. package/dist/actions/list-vault-audit.d.ts.map +1 -1
  104. package/dist/actions/list-vault-audit.js.map +1 -1
  105. package/dist/actions/list-vault-grants.d.ts.map +1 -1
  106. package/dist/actions/list-vault-grants.js.map +1 -1
  107. package/dist/actions/list-vault-requests.d.ts +1 -1
  108. package/dist/actions/list-vault-requests.d.ts.map +1 -1
  109. package/dist/actions/list-vault-requests.js.map +1 -1
  110. package/dist/actions/list-vault-secret-options.d.ts.map +1 -1
  111. package/dist/actions/list-vault-secret-options.js.map +1 -1
  112. package/dist/actions/list-vault-secrets.d.ts.map +1 -1
  113. package/dist/actions/list-vault-secrets.js.map +1 -1
  114. package/dist/actions/list-workspace-apps.d.ts.map +1 -1
  115. package/dist/actions/list-workspace-apps.js.map +1 -1
  116. package/dist/actions/list-workspace-resource-grants.d.ts.map +1 -1
  117. package/dist/actions/list-workspace-resource-grants.js.map +1 -1
  118. package/dist/actions/list-workspace-resource-options.d.ts +1 -1
  119. package/dist/actions/list-workspace-resource-options.d.ts.map +1 -1
  120. package/dist/actions/list-workspace-resource-options.js.map +1 -1
  121. package/dist/actions/list-workspace-resources-for-app.d.ts.map +1 -1
  122. package/dist/actions/list-workspace-resources-for-app.js.map +1 -1
  123. package/dist/actions/list-workspace-resources.d.ts +1 -1
  124. package/dist/actions/list-workspace-resources.d.ts.map +1 -1
  125. package/dist/actions/list-workspace-resources.js.map +1 -1
  126. package/dist/actions/list_apps.d.ts.map +1 -1
  127. package/dist/actions/list_apps.js.map +1 -1
  128. package/dist/actions/navigate.d.ts.map +1 -1
  129. package/dist/actions/navigate.js +1 -1
  130. package/dist/actions/navigate.js.map +1 -1
  131. package/dist/actions/open_app.d.ts.map +1 -1
  132. package/dist/actions/open_app.js.map +1 -1
  133. package/dist/actions/preview-dream-proposal.d.ts +15 -15
  134. package/dist/actions/preview-dream-proposal.d.ts.map +1 -1
  135. package/dist/actions/preview-dream-proposal.js.map +1 -1
  136. package/dist/actions/preview-workspace-resource-change.d.ts +1 -1
  137. package/dist/actions/preview-workspace-resource-change.d.ts.map +1 -1
  138. package/dist/actions/preview-workspace-resource-change.js.map +1 -1
  139. package/dist/actions/provider-api-catalog.d.ts +4 -4
  140. package/dist/actions/provider-api-catalog.d.ts.map +1 -1
  141. package/dist/actions/provider-api-catalog.js.map +1 -1
  142. package/dist/actions/provider-api-docs.d.ts +3 -3
  143. package/dist/actions/provider-api-docs.d.ts.map +1 -1
  144. package/dist/actions/provider-api-docs.js.map +1 -1
  145. package/dist/actions/provider-api-register.d.ts +14 -14
  146. package/dist/actions/provider-api-register.d.ts.map +1 -1
  147. package/dist/actions/provider-api-register.js +1 -1
  148. package/dist/actions/provider-api-register.js.map +1 -1
  149. package/dist/actions/provider-api-request.d.ts +1 -1
  150. package/dist/actions/provider-api-request.d.ts.map +1 -1
  151. package/dist/actions/provider-api-request.js.map +1 -1
  152. package/dist/actions/query-staged-dataset.d.ts +2 -2
  153. package/dist/actions/query-staged-dataset.d.ts.map +1 -1
  154. package/dist/actions/query-staged-dataset.js.map +1 -1
  155. package/dist/actions/reject-dispatch-change.d.ts.map +1 -1
  156. package/dist/actions/reject-dispatch-change.js.map +1 -1
  157. package/dist/actions/reject-dream-proposal.d.ts +14 -14
  158. package/dist/actions/reject-dream-proposal.d.ts.map +1 -1
  159. package/dist/actions/reject-dream-proposal.js.map +1 -1
  160. package/dist/actions/remove-pending-workspace-app.d.ts.map +1 -1
  161. package/dist/actions/remove-pending-workspace-app.js.map +1 -1
  162. package/dist/actions/request-vault-secret.d.ts.map +1 -1
  163. package/dist/actions/request-vault-secret.js.map +1 -1
  164. package/dist/actions/restore-starter-workspace-resources.d.ts.map +1 -1
  165. package/dist/actions/restore-starter-workspace-resources.js.map +1 -1
  166. package/dist/actions/revoke-vault-grant.d.ts.map +1 -1
  167. package/dist/actions/revoke-vault-grant.js.map +1 -1
  168. package/dist/actions/revoke-workspace-resource-grant.d.ts.map +1 -1
  169. package/dist/actions/revoke-workspace-resource-grant.js.map +1 -1
  170. package/dist/actions/scaffold-workspace-app.d.ts.map +1 -1
  171. package/dist/actions/scaffold-workspace-app.js.map +1 -1
  172. package/dist/actions/search-agent-threads.d.ts +1 -1
  173. package/dist/actions/search-agent-threads.d.ts.map +1 -1
  174. package/dist/actions/search-agent-threads.js.map +1 -1
  175. package/dist/actions/send-code-agent-remote-command.d.ts.map +1 -1
  176. package/dist/actions/send-code-agent-remote-command.js.map +1 -1
  177. package/dist/actions/send-platform-message.d.ts +3 -3
  178. package/dist/actions/send-platform-message.d.ts.map +1 -1
  179. package/dist/actions/send-platform-message.js +1 -1
  180. package/dist/actions/send-platform-message.js.map +1 -1
  181. package/dist/actions/set-app-creation-settings.d.ts.map +1 -1
  182. package/dist/actions/set-app-creation-settings.js.map +1 -1
  183. package/dist/actions/set-dispatch-approval-policy.d.ts.map +1 -1
  184. package/dist/actions/set-dispatch-approval-policy.js.map +1 -1
  185. package/dist/actions/set-dream-settings.d.ts.map +1 -1
  186. package/dist/actions/set-dream-settings.js.map +1 -1
  187. package/dist/actions/set-mcp-app-access.d.ts.map +1 -1
  188. package/dist/actions/set-mcp-app-access.js +2 -2
  189. package/dist/actions/set-mcp-app-access.js.map +1 -1
  190. package/dist/actions/set-vault-access-settings.d.ts.map +1 -1
  191. package/dist/actions/set-vault-access-settings.js.map +1 -1
  192. package/dist/actions/start-workspace-app-creation.d.ts +4 -4
  193. package/dist/actions/start-workspace-app-creation.d.ts.map +1 -1
  194. package/dist/actions/start-workspace-app-creation.js.map +1 -1
  195. package/dist/actions/sync-vault-to-app.d.ts +1 -1
  196. package/dist/actions/sync-vault-to-app.d.ts.map +1 -1
  197. package/dist/actions/sync-vault-to-app.js.map +1 -1
  198. package/dist/actions/unarchive-workspace-app.d.ts.map +1 -1
  199. package/dist/actions/unarchive-workspace-app.js.map +1 -1
  200. package/dist/actions/update-vault-secret.d.ts.map +1 -1
  201. package/dist/actions/update-vault-secret.js.map +1 -1
  202. package/dist/actions/update-workspace-app-metadata.d.ts.map +1 -1
  203. package/dist/actions/update-workspace-app-metadata.js.map +1 -1
  204. package/dist/actions/update-workspace-resource.d.ts.map +1 -1
  205. package/dist/actions/update-workspace-resource.js.map +1 -1
  206. package/dist/actions/upsert-destination.d.ts +2 -2
  207. package/dist/actions/upsert-destination.d.ts.map +1 -1
  208. package/dist/actions/upsert-destination.js.map +1 -1
  209. package/dist/actions/view-screen.d.ts.map +1 -1
  210. package/dist/actions/view-screen.js +3 -3
  211. package/dist/actions/view-screen.js.map +1 -1
  212. package/dist/components/agents-panel.d.ts +1 -1
  213. package/dist/components/agents-panel.d.ts.map +1 -1
  214. package/dist/components/agents-panel.js +3 -3
  215. package/dist/components/agents-panel.js.map +1 -1
  216. package/dist/components/app-keys-popover.d.ts +1 -1
  217. package/dist/components/app-keys-popover.d.ts.map +1 -1
  218. package/dist/components/app-keys-popover.js +2 -2
  219. package/dist/components/app-keys-popover.js.map +1 -1
  220. package/dist/components/approval-value-block.d.ts +1 -1
  221. package/dist/components/approval-value-block.d.ts.map +1 -1
  222. package/dist/components/create-app-popover.d.ts +2 -2
  223. package/dist/components/create-app-popover.d.ts.map +1 -1
  224. package/dist/components/create-app-popover.js +3 -3
  225. package/dist/components/create-app-popover.js.map +1 -1
  226. package/dist/components/dispatch-control-plane.d.ts +1 -1
  227. package/dist/components/dispatch-control-plane.d.ts.map +1 -1
  228. package/dist/components/dispatch-control-plane.js +6 -6
  229. package/dist/components/dispatch-control-plane.js.map +1 -1
  230. package/dist/components/dispatch-shell.d.ts +1 -1
  231. package/dist/components/dispatch-shell.d.ts.map +1 -1
  232. package/dist/components/dispatch-shell.js +2 -2
  233. package/dist/components/dispatch-shell.js.map +1 -1
  234. package/dist/components/layout/Header.d.ts +1 -1
  235. package/dist/components/layout/Header.d.ts.map +1 -1
  236. package/dist/components/layout/Header.js +3 -3
  237. package/dist/components/layout/Header.js.map +1 -1
  238. package/dist/components/layout/Layout.d.ts +2 -2
  239. package/dist/components/layout/Layout.d.ts.map +1 -1
  240. package/dist/components/layout/Layout.js +4 -4
  241. package/dist/components/layout/Layout.js.map +1 -1
  242. package/dist/components/messaging-setup-panel.d.ts +1 -1
  243. package/dist/components/messaging-setup-panel.d.ts.map +1 -1
  244. package/dist/components/messaging-setup-panel.js +3 -3
  245. package/dist/components/messaging-setup-panel.js.map +1 -1
  246. package/dist/components/ui/accordion.d.ts +2 -2
  247. package/dist/components/ui/accordion.d.ts.map +1 -1
  248. package/dist/components/ui/accordion.js +1 -1
  249. package/dist/components/ui/accordion.js.map +1 -1
  250. package/dist/components/ui/alert-dialog.d.ts +9 -9
  251. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  252. package/dist/components/ui/alert-dialog.js +2 -2
  253. package/dist/components/ui/alert-dialog.js.map +1 -1
  254. package/dist/components/ui/alert.d.ts +2 -2
  255. package/dist/components/ui/alert.d.ts.map +1 -1
  256. package/dist/components/ui/alert.js +1 -1
  257. package/dist/components/ui/alert.js.map +1 -1
  258. package/dist/components/ui/aspect-ratio.d.ts +1 -1
  259. package/dist/components/ui/aspect-ratio.d.ts.map +1 -1
  260. package/dist/components/ui/avatar.d.ts +1 -1
  261. package/dist/components/ui/avatar.d.ts.map +1 -1
  262. package/dist/components/ui/avatar.js +1 -1
  263. package/dist/components/ui/avatar.js.map +1 -1
  264. package/dist/components/ui/badge.d.ts +3 -3
  265. package/dist/components/ui/badge.d.ts.map +1 -1
  266. package/dist/components/ui/badge.js.map +1 -1
  267. package/dist/components/ui/breadcrumb.d.ts +8 -8
  268. package/dist/components/ui/breadcrumb.d.ts.map +1 -1
  269. package/dist/components/ui/breadcrumb.js +1 -1
  270. package/dist/components/ui/breadcrumb.js.map +1 -1
  271. package/dist/components/ui/button.d.ts +4 -4
  272. package/dist/components/ui/button.d.ts.map +1 -1
  273. package/dist/components/ui/button.js +1 -1
  274. package/dist/components/ui/button.js.map +1 -1
  275. package/dist/components/ui/calendar.d.ts +1 -1
  276. package/dist/components/ui/calendar.d.ts.map +1 -1
  277. package/dist/components/ui/calendar.js +1 -1
  278. package/dist/components/ui/calendar.js.map +1 -1
  279. package/dist/components/ui/carousel.d.ts +1 -1
  280. package/dist/components/ui/carousel.d.ts.map +1 -1
  281. package/dist/components/ui/carousel.js +3 -3
  282. package/dist/components/ui/carousel.js.map +1 -1
  283. package/dist/components/ui/chart.d.ts +12 -12
  284. package/dist/components/ui/chart.d.ts.map +1 -1
  285. package/dist/components/ui/chart.js +1 -1
  286. package/dist/components/ui/checkbox.d.ts +1 -1
  287. package/dist/components/ui/checkbox.d.ts.map +1 -1
  288. package/dist/components/ui/checkbox.js +1 -1
  289. package/dist/components/ui/checkbox.js.map +1 -1
  290. package/dist/components/ui/collapsible.d.ts +3 -3
  291. package/dist/components/ui/collapsible.d.ts.map +1 -1
  292. package/dist/components/ui/command.d.ts +13 -13
  293. package/dist/components/ui/command.d.ts.map +1 -1
  294. package/dist/components/ui/command.js +3 -3
  295. package/dist/components/ui/command.js.map +1 -1
  296. package/dist/components/ui/context-menu.d.ts +5 -5
  297. package/dist/components/ui/context-menu.d.ts.map +1 -1
  298. package/dist/components/ui/context-menu.js +1 -1
  299. package/dist/components/ui/context-menu.js.map +1 -1
  300. package/dist/components/ui/dialog.d.ts +9 -9
  301. package/dist/components/ui/dialog.d.ts.map +1 -1
  302. package/dist/components/ui/dialog.js +1 -1
  303. package/dist/components/ui/dialog.js.map +1 -1
  304. package/dist/components/ui/drawer.d.ts +19 -19
  305. package/dist/components/ui/drawer.d.ts.map +1 -1
  306. package/dist/components/ui/dropdown-menu.d.ts +5 -5
  307. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  308. package/dist/components/ui/dropdown-menu.js +1 -1
  309. package/dist/components/ui/dropdown-menu.js.map +1 -1
  310. package/dist/components/ui/form.d.ts +7 -5
  311. package/dist/components/ui/form.d.ts.map +1 -1
  312. package/dist/components/ui/form.js +2 -2
  313. package/dist/components/ui/form.js.map +1 -1
  314. package/dist/components/ui/hover-card.d.ts +1 -1
  315. package/dist/components/ui/hover-card.d.ts.map +1 -1
  316. package/dist/components/ui/hover-card.js +1 -1
  317. package/dist/components/ui/hover-card.js.map +1 -1
  318. package/dist/components/ui/input-otp.d.ts +7 -7
  319. package/dist/components/ui/input-otp.d.ts.map +1 -1
  320. package/dist/components/ui/input-otp.js +2 -2
  321. package/dist/components/ui/input-otp.js.map +1 -1
  322. package/dist/components/ui/label.d.ts +2 -2
  323. package/dist/components/ui/label.d.ts.map +1 -1
  324. package/dist/components/ui/label.js +1 -1
  325. package/dist/components/ui/label.js.map +1 -1
  326. package/dist/components/ui/menubar.d.ts +5 -5
  327. package/dist/components/ui/menubar.d.ts.map +1 -1
  328. package/dist/components/ui/menubar.js +1 -1
  329. package/dist/components/ui/menubar.js.map +1 -1
  330. package/dist/components/ui/navigation-menu.d.ts +2 -2
  331. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  332. package/dist/components/ui/navigation-menu.js +2 -2
  333. package/dist/components/ui/navigation-menu.js.map +1 -1
  334. package/dist/components/ui/pagination.d.ts +20 -20
  335. package/dist/components/ui/pagination.d.ts.map +1 -1
  336. package/dist/components/ui/pagination.js +2 -2
  337. package/dist/components/ui/pagination.js.map +1 -1
  338. package/dist/components/ui/popover.d.ts +1 -1
  339. package/dist/components/ui/popover.d.ts.map +1 -1
  340. package/dist/components/ui/popover.js +1 -1
  341. package/dist/components/ui/popover.js.map +1 -1
  342. package/dist/components/ui/progress.d.ts +1 -1
  343. package/dist/components/ui/progress.d.ts.map +1 -1
  344. package/dist/components/ui/progress.js +1 -1
  345. package/dist/components/ui/progress.js.map +1 -1
  346. package/dist/components/ui/radio-group.d.ts +1 -1
  347. package/dist/components/ui/radio-group.d.ts.map +1 -1
  348. package/dist/components/ui/radio-group.js +1 -1
  349. package/dist/components/ui/radio-group.js.map +1 -1
  350. package/dist/components/ui/resizable.d.ts +2 -2
  351. package/dist/components/ui/resizable.d.ts.map +1 -1
  352. package/dist/components/ui/scroll-area.d.ts +1 -1
  353. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  354. package/dist/components/ui/scroll-area.js +1 -1
  355. package/dist/components/ui/scroll-area.js.map +1 -1
  356. package/dist/components/ui/select.d.ts +1 -1
  357. package/dist/components/ui/select.d.ts.map +1 -1
  358. package/dist/components/ui/select.js +1 -1
  359. package/dist/components/ui/select.js.map +1 -1
  360. package/dist/components/ui/separator.d.ts +1 -1
  361. package/dist/components/ui/separator.d.ts.map +1 -1
  362. package/dist/components/ui/separator.js +1 -1
  363. package/dist/components/ui/separator.js.map +1 -1
  364. package/dist/components/ui/sheet.d.ts +10 -10
  365. package/dist/components/ui/sheet.d.ts.map +1 -1
  366. package/dist/components/ui/sheet.js +1 -1
  367. package/dist/components/ui/sheet.js.map +1 -1
  368. package/dist/components/ui/sidebar.d.ts +4 -4
  369. package/dist/components/ui/sidebar.d.ts.map +1 -1
  370. package/dist/components/ui/sidebar.js +4 -4
  371. package/dist/components/ui/sidebar.js.map +1 -1
  372. package/dist/components/ui/skeleton.d.ts +1 -1
  373. package/dist/components/ui/skeleton.d.ts.map +1 -1
  374. package/dist/components/ui/slider.d.ts +1 -1
  375. package/dist/components/ui/slider.d.ts.map +1 -1
  376. package/dist/components/ui/slider.js +1 -1
  377. package/dist/components/ui/slider.js.map +1 -1
  378. package/dist/components/ui/sonner.d.ts +1 -1
  379. package/dist/components/ui/sonner.d.ts.map +1 -1
  380. package/dist/components/ui/spinner.d.ts +1 -1
  381. package/dist/components/ui/spinner.d.ts.map +1 -1
  382. package/dist/components/ui/switch.d.ts +1 -1
  383. package/dist/components/ui/switch.d.ts.map +1 -1
  384. package/dist/components/ui/switch.js +1 -1
  385. package/dist/components/ui/switch.js.map +1 -1
  386. package/dist/components/ui/tabs.d.ts +1 -1
  387. package/dist/components/ui/tabs.d.ts.map +1 -1
  388. package/dist/components/ui/tabs.js +1 -1
  389. package/dist/components/ui/tabs.js.map +1 -1
  390. package/dist/components/ui/toast.d.ts +2 -2
  391. package/dist/components/ui/toast.d.ts.map +1 -1
  392. package/dist/components/ui/toast.js +2 -2
  393. package/dist/components/ui/toast.js.map +1 -1
  394. package/dist/components/ui/toaster.d.ts +1 -1
  395. package/dist/components/ui/toaster.d.ts.map +1 -1
  396. package/dist/components/ui/toaster.js +1 -1
  397. package/dist/components/ui/toaster.js.map +1 -1
  398. package/dist/components/ui/toggle-group.d.ts +6 -6
  399. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  400. package/dist/components/ui/toggle-group.js +2 -2
  401. package/dist/components/ui/toggle-group.js.map +1 -1
  402. package/dist/components/ui/toggle.d.ts +5 -5
  403. package/dist/components/ui/toggle.d.ts.map +1 -1
  404. package/dist/components/ui/toggle.js +1 -1
  405. package/dist/components/ui/toggle.js.map +1 -1
  406. package/dist/components/ui/tooltip.d.ts +1 -1
  407. package/dist/components/ui/tooltip.d.ts.map +1 -1
  408. package/dist/components/ui/tooltip.js +1 -1
  409. package/dist/components/ui/tooltip.js.map +1 -1
  410. package/dist/components/workspace-app-card.d.ts +1 -1
  411. package/dist/components/workspace-app-card.d.ts.map +1 -1
  412. package/dist/components/workspace-app-card.js +2 -2
  413. package/dist/components/workspace-app-card.js.map +1 -1
  414. package/dist/components/workspace-resource-effective-stack.d.ts +2 -2
  415. package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -1
  416. package/dist/components/workspace-resource-effective-stack.js +1 -1
  417. package/dist/components/workspace-resource-effective-stack.js.map +1 -1
  418. package/dist/components/workspace-resource-impact-preview.d.ts +1 -1
  419. package/dist/components/workspace-resource-impact-preview.d.ts.map +1 -1
  420. package/dist/components/workspace-resource-impact-preview.js.map +1 -1
  421. package/dist/db/index.d.ts.map +1 -1
  422. package/dist/db/index.js.map +1 -1
  423. package/dist/db/schema.d.ts +13 -13
  424. package/dist/hooks/use-navigation-state.d.ts.map +1 -1
  425. package/dist/hooks/use-navigation-state.js +3 -3
  426. package/dist/hooks/use-navigation-state.js.map +1 -1
  427. package/dist/hooks/use-toast.d.ts +1 -1
  428. package/dist/hooks/use-toast.d.ts.map +1 -1
  429. package/dist/hooks/use-toast.js.map +1 -1
  430. package/dist/lib/catch-all-target.js.map +1 -1
  431. package/dist/lib/thread-link-preview.d.ts +4 -4
  432. package/dist/routes/pages/$appId.d.ts +1 -1
  433. package/dist/routes/pages/$appId.d.ts.map +1 -1
  434. package/dist/routes/pages/$appId.js +5 -4
  435. package/dist/routes/pages/$appId.js.map +1 -1
  436. package/dist/routes/pages/_index.d.ts +7 -7
  437. package/dist/routes/pages/_index.d.ts.map +1 -1
  438. package/dist/routes/pages/_index.js +6 -7
  439. package/dist/routes/pages/_index.js.map +1 -1
  440. package/dist/routes/pages/agents.d.ts +1 -1
  441. package/dist/routes/pages/agents.d.ts.map +1 -1
  442. package/dist/routes/pages/agents.js +16 -10
  443. package/dist/routes/pages/agents.js.map +1 -1
  444. package/dist/routes/pages/approval.d.ts +1 -1
  445. package/dist/routes/pages/approval.d.ts.map +1 -1
  446. package/dist/routes/pages/approval.js +3 -3
  447. package/dist/routes/pages/approval.js.map +1 -1
  448. package/dist/routes/pages/approvals.d.ts +1 -1
  449. package/dist/routes/pages/approvals.d.ts.map +1 -1
  450. package/dist/routes/pages/approvals.js +1 -1
  451. package/dist/routes/pages/approvals.js.map +1 -1
  452. package/dist/routes/pages/apps.$appId.d.ts +1 -1
  453. package/dist/routes/pages/apps.$appId.d.ts.map +1 -1
  454. package/dist/routes/pages/apps.$appId.js +4 -3
  455. package/dist/routes/pages/apps.$appId.js.map +1 -1
  456. package/dist/routes/pages/apps.d.ts +1 -1
  457. package/dist/routes/pages/apps.d.ts.map +1 -1
  458. package/dist/routes/pages/apps.js +32 -14
  459. package/dist/routes/pages/apps.js.map +1 -1
  460. package/dist/routes/pages/audit.d.ts +1 -1
  461. package/dist/routes/pages/audit.d.ts.map +1 -1
  462. package/dist/routes/pages/audit.js.map +1 -1
  463. package/dist/routes/pages/chat.d.ts +1 -1
  464. package/dist/routes/pages/chat.d.ts.map +1 -1
  465. package/dist/routes/pages/chat.js +1 -1
  466. package/dist/routes/pages/chat.js.map +1 -1
  467. package/dist/routes/pages/destinations.d.ts +1 -1
  468. package/dist/routes/pages/destinations.d.ts.map +1 -1
  469. package/dist/routes/pages/destinations.js +20 -14
  470. package/dist/routes/pages/destinations.js.map +1 -1
  471. package/dist/routes/pages/dreams.d.ts +1 -1
  472. package/dist/routes/pages/dreams.d.ts.map +1 -1
  473. package/dist/routes/pages/dreams.js +4 -3
  474. package/dist/routes/pages/dreams.js.map +1 -1
  475. package/dist/routes/pages/extensions.$id.d.ts +1 -1
  476. package/dist/routes/pages/extensions.$id.d.ts.map +1 -1
  477. package/dist/routes/pages/extensions._index.d.ts +1 -1
  478. package/dist/routes/pages/extensions._index.d.ts.map +1 -1
  479. package/dist/routes/pages/identities.d.ts +1 -1
  480. package/dist/routes/pages/identities.d.ts.map +1 -1
  481. package/dist/routes/pages/identities.js.map +1 -1
  482. package/dist/routes/pages/integrations.d.ts +1 -1
  483. package/dist/routes/pages/integrations.d.ts.map +1 -1
  484. package/dist/routes/pages/integrations.js +3 -3
  485. package/dist/routes/pages/integrations.js.map +1 -1
  486. package/dist/routes/pages/messaging.d.ts +1 -1
  487. package/dist/routes/pages/messaging.d.ts.map +1 -1
  488. package/dist/routes/pages/messaging.js +1 -1
  489. package/dist/routes/pages/messaging.js.map +1 -1
  490. package/dist/routes/pages/metrics.d.ts +1 -1
  491. package/dist/routes/pages/metrics.d.ts.map +1 -1
  492. package/dist/routes/pages/metrics.js +10 -7
  493. package/dist/routes/pages/metrics.js.map +1 -1
  494. package/dist/routes/pages/new-app.d.ts +1 -1
  495. package/dist/routes/pages/new-app.d.ts.map +1 -1
  496. package/dist/routes/pages/new-app.js +3 -2
  497. package/dist/routes/pages/new-app.js.map +1 -1
  498. package/dist/routes/pages/overview.d.ts +7 -7
  499. package/dist/routes/pages/overview.d.ts.map +1 -1
  500. package/dist/routes/pages/settings.d.ts +1 -1
  501. package/dist/routes/pages/settings.d.ts.map +1 -1
  502. package/dist/routes/pages/settings.js +1 -1
  503. package/dist/routes/pages/settings.js.map +1 -1
  504. package/dist/routes/pages/team.d.ts +1 -1
  505. package/dist/routes/pages/team.d.ts.map +1 -1
  506. package/dist/routes/pages/team.js.map +1 -1
  507. package/dist/routes/pages/thread-debug.d.ts +1 -1
  508. package/dist/routes/pages/thread-debug.d.ts.map +1 -1
  509. package/dist/routes/pages/thread-debug.js +4 -3
  510. package/dist/routes/pages/thread-debug.js.map +1 -1
  511. package/dist/routes/pages/tools.$id.d.ts +1 -1
  512. package/dist/routes/pages/tools.$id.d.ts.map +1 -1
  513. package/dist/routes/pages/tools._index.d.ts +1 -1
  514. package/dist/routes/pages/tools._index.d.ts.map +1 -1
  515. package/dist/routes/pages/vault.d.ts +1 -1
  516. package/dist/routes/pages/vault.d.ts.map +1 -1
  517. package/dist/routes/pages/vault.js +5 -5
  518. package/dist/routes/pages/vault.js.map +1 -1
  519. package/dist/routes/pages/workspace.d.ts +1 -1
  520. package/dist/routes/pages/workspace.d.ts.map +1 -1
  521. package/dist/routes/pages/workspace.js +5 -5
  522. package/dist/routes/pages/workspace.js.map +1 -1
  523. package/dist/server/index.d.ts.map +1 -1
  524. package/dist/server/index.js.map +1 -1
  525. package/dist/server/lib/app-creation-store.d.ts +4 -4
  526. package/dist/server/lib/app-creation-store.d.ts.map +1 -1
  527. package/dist/server/lib/app-creation-store.js +3 -3
  528. package/dist/server/lib/app-creation-store.js.map +1 -1
  529. package/dist/server/lib/dispatch-integrations.d.ts.map +1 -1
  530. package/dist/server/lib/dispatch-integrations.js +2 -2
  531. package/dist/server/lib/dispatch-integrations.js.map +1 -1
  532. package/dist/server/lib/dispatch-store.d.ts.map +1 -1
  533. package/dist/server/lib/dispatch-store.js +2 -2
  534. package/dist/server/lib/dispatch-store.js.map +1 -1
  535. package/dist/server/lib/dreams-store.d.ts +122 -122
  536. package/dist/server/lib/dreams-store.d.ts.map +1 -1
  537. package/dist/server/lib/dreams-store.js +1 -1
  538. package/dist/server/lib/dreams-store.js.map +1 -1
  539. package/dist/server/lib/mcp-access-store.js +1 -1
  540. package/dist/server/lib/mcp-access-store.js.map +1 -1
  541. package/dist/server/lib/mcp-gateway.d.ts.map +1 -1
  542. package/dist/server/lib/mcp-gateway.js +1 -1
  543. package/dist/server/lib/mcp-gateway.js.map +1 -1
  544. package/dist/server/lib/onboarding-steps.d.ts.map +1 -1
  545. package/dist/server/lib/onboarding-steps.js.map +1 -1
  546. package/dist/server/lib/provider-api.d.ts +2 -2
  547. package/dist/server/lib/thread-debug-store.d.ts +2 -2
  548. package/dist/server/lib/thread-debug-store.d.ts.map +1 -1
  549. package/dist/server/lib/thread-debug-store.js.map +1 -1
  550. package/dist/server/lib/thread-link-preview.d.ts.map +1 -1
  551. package/dist/server/lib/thread-link-preview.js.map +1 -1
  552. package/dist/server/lib/usage-metrics-store.d.ts.map +1 -1
  553. package/dist/server/lib/usage-metrics-store.js +3 -3
  554. package/dist/server/lib/usage-metrics-store.js.map +1 -1
  555. package/dist/server/lib/vault-store.d.ts +2 -2
  556. package/dist/server/lib/vault-store.d.ts.map +1 -1
  557. package/dist/server/lib/vault-store.js +2 -2
  558. package/dist/server/lib/vault-store.js.map +1 -1
  559. package/dist/server/lib/workspace-resources-store.d.ts.map +1 -1
  560. package/dist/server/lib/workspace-resources-store.js +2 -2
  561. package/dist/server/lib/workspace-resources-store.js.map +1 -1
  562. package/dist/server/plugins/agent-chat.d.ts.map +1 -1
  563. package/dist/server/plugins/agent-chat.js +1 -1
  564. package/dist/server/plugins/agent-chat.js.map +1 -1
  565. package/dist/server/plugins/auth.d.ts.map +1 -1
  566. package/dist/server/plugins/auth.js.map +1 -1
  567. package/dist/server/plugins/core-routes.d.ts.map +1 -1
  568. package/dist/server/plugins/core-routes.js.map +1 -1
  569. package/dist/server/plugins/db.d.ts.map +1 -1
  570. package/dist/server/plugins/db.js.map +1 -1
  571. package/dist/server/plugins/integrations.d.ts.map +1 -1
  572. package/dist/server/plugins/integrations.js +2 -2
  573. package/dist/server/plugins/integrations.js.map +1 -1
  574. package/package.json +29 -29
  575. package/src/actions/apply-dream-proposal.ts +1 -0
  576. package/src/actions/approve-dispatch-change.ts +1 -0
  577. package/src/actions/approve-vault-request.ts +1 -0
  578. package/src/actions/archive-workspace-app.ts +1 -0
  579. package/src/actions/ask_app.ts +1 -0
  580. package/src/actions/create-dream-report.ts +1 -0
  581. package/src/actions/create-link-token.ts +1 -0
  582. package/src/actions/create-pylon-ticket.ts +1 -0
  583. package/src/actions/create-vault-grant.ts +1 -0
  584. package/src/actions/create-vault-secret.ts +1 -0
  585. package/src/actions/create-workspace-resource-grant.ts +1 -0
  586. package/src/actions/create-workspace-resource.ts +1 -0
  587. package/src/actions/create_embed_session.ts +1 -0
  588. package/src/actions/delete-destination.ts +1 -0
  589. package/src/actions/delete-staged-dataset.ts +1 -0
  590. package/src/actions/delete-vault-secret.ts +1 -0
  591. package/src/actions/delete-workspace-resource.ts +1 -0
  592. package/src/actions/deny-vault-request.ts +1 -0
  593. package/src/actions/ensure-dream-job.ts +1 -0
  594. package/src/actions/get-agent-thread-debug.ts +1 -0
  595. package/src/actions/get-app-creation-settings.ts +1 -0
  596. package/src/actions/get-dispatch-settings.ts +1 -0
  597. package/src/actions/get-dream-settings.ts +1 -0
  598. package/src/actions/get-dream.ts +1 -0
  599. package/src/actions/get-vault-access-settings.ts +1 -0
  600. package/src/actions/get-workspace-info.ts +1 -0
  601. package/src/actions/get-workspace-resource-effective-context.ts +1 -0
  602. package/src/actions/grant-vault-secrets-to-app.ts +1 -0
  603. package/src/actions/grant-workspace-resources-to-app.ts +1 -0
  604. package/src/actions/index.ts +13 -12
  605. package/src/actions/list-agent-thread-sources.ts +1 -0
  606. package/src/actions/list-available-workspace-templates.ts +1 -0
  607. package/src/actions/list-connected-agents.ts +9 -9
  608. package/src/actions/list-destinations.ts +1 -0
  609. package/src/actions/list-dispatch-approvals.ts +1 -0
  610. package/src/actions/list-dispatch-audit.ts +1 -0
  611. package/src/actions/list-dispatch-overview.ts +1 -0
  612. package/src/actions/list-dispatch-usage-metrics.ts +1 -0
  613. package/src/actions/list-dream-candidates.ts +1 -0
  614. package/src/actions/list-dreams.ts +1 -0
  615. package/src/actions/list-integrations-catalog.ts +1 -0
  616. package/src/actions/list-linked-identities.ts +1 -0
  617. package/src/actions/list-mcp-app-access.ts +1 -0
  618. package/src/actions/list-staged-datasets.ts +1 -0
  619. package/src/actions/list-vault-audit.ts +1 -0
  620. package/src/actions/list-vault-grants.ts +1 -0
  621. package/src/actions/list-vault-requests.ts +1 -0
  622. package/src/actions/list-vault-secret-options.ts +1 -0
  623. package/src/actions/list-vault-secrets.ts +1 -0
  624. package/src/actions/list-workspace-apps.ts +1 -0
  625. package/src/actions/list-workspace-resource-grants.ts +1 -0
  626. package/src/actions/list-workspace-resource-options.ts +1 -0
  627. package/src/actions/list-workspace-resources-for-app.ts +1 -0
  628. package/src/actions/list-workspace-resources.ts +1 -0
  629. package/src/actions/list_apps.ts +1 -0
  630. package/src/actions/navigate.ts +1 -1
  631. package/src/actions/open_app.ts +1 -0
  632. package/src/actions/preview-dream-proposal.ts +1 -0
  633. package/src/actions/preview-workspace-resource-change.ts +1 -0
  634. package/src/actions/provider-api-catalog.ts +1 -0
  635. package/src/actions/provider-api-docs.ts +1 -0
  636. package/src/actions/provider-api-register.ts +1 -1
  637. package/src/actions/provider-api-request.ts +1 -0
  638. package/src/actions/query-staged-dataset.ts +1 -0
  639. package/src/actions/reject-dispatch-change.ts +1 -0
  640. package/src/actions/reject-dream-proposal.ts +1 -0
  641. package/src/actions/remove-pending-workspace-app.ts +1 -0
  642. package/src/actions/request-vault-secret.ts +1 -0
  643. package/src/actions/restore-starter-workspace-resources.ts +1 -0
  644. package/src/actions/revoke-vault-grant.ts +1 -0
  645. package/src/actions/revoke-workspace-resource-grant.ts +1 -0
  646. package/src/actions/scaffold-workspace-app.ts +1 -0
  647. package/src/actions/search-agent-threads.ts +1 -0
  648. package/src/actions/send-code-agent-remote-command.ts +1 -0
  649. package/src/actions/send-platform-message.ts +2 -1
  650. package/src/actions/set-app-creation-settings.ts +1 -0
  651. package/src/actions/set-dispatch-approval-policy.ts +1 -0
  652. package/src/actions/set-dream-settings.ts +1 -0
  653. package/src/actions/set-mcp-app-access.ts +3 -2
  654. package/src/actions/set-vault-access-settings.ts +1 -0
  655. package/src/actions/start-workspace-app-creation.ts +1 -0
  656. package/src/actions/sync-vault-to-app.ts +1 -0
  657. package/src/actions/unarchive-workspace-app.ts +1 -0
  658. package/src/actions/update-vault-secret.ts +1 -0
  659. package/src/actions/update-workspace-app-metadata.ts +1 -0
  660. package/src/actions/update-workspace-resource.ts +1 -0
  661. package/src/actions/upsert-destination.ts +1 -0
  662. package/src/actions/view-screen.ts +8 -7
  663. package/src/components/agents-panel.tsx +5 -4
  664. package/src/components/app-keys-popover.tsx +3 -2
  665. package/src/components/approval-value-block.spec.tsx +1 -0
  666. package/src/components/create-app-popover.tsx +3 -2
  667. package/src/components/dispatch-control-plane.tsx +7 -6
  668. package/src/components/dispatch-shell.tsx +4 -3
  669. package/src/components/layout/Header.tsx +5 -3
  670. package/src/components/layout/Layout.tsx +13 -11
  671. package/src/components/messaging-setup-panel.tsx +4 -3
  672. package/src/components/ui/accordion.tsx +1 -1
  673. package/src/components/ui/alert-dialog.tsx +2 -2
  674. package/src/components/ui/alert.tsx +1 -1
  675. package/src/components/ui/avatar.tsx +1 -1
  676. package/src/components/ui/badge.tsx +1 -1
  677. package/src/components/ui/breadcrumb.tsx +1 -1
  678. package/src/components/ui/button.tsx +1 -1
  679. package/src/components/ui/calendar.tsx +2 -2
  680. package/src/components/ui/carousel.tsx +3 -3
  681. package/src/components/ui/checkbox.tsx +1 -1
  682. package/src/components/ui/command.tsx +3 -3
  683. package/src/components/ui/context-menu.tsx +1 -1
  684. package/src/components/ui/dialog.tsx +1 -1
  685. package/src/components/ui/dropdown-menu.tsx +1 -1
  686. package/src/components/ui/form.tsx +2 -2
  687. package/src/components/ui/hover-card.tsx +1 -1
  688. package/src/components/ui/input-otp.tsx +2 -2
  689. package/src/components/ui/label.tsx +1 -1
  690. package/src/components/ui/menubar.tsx +1 -1
  691. package/src/components/ui/navigation-menu.tsx +2 -2
  692. package/src/components/ui/pagination.tsx +2 -2
  693. package/src/components/ui/popover.tsx +1 -1
  694. package/src/components/ui/progress.tsx +1 -1
  695. package/src/components/ui/radio-group.tsx +1 -1
  696. package/src/components/ui/scroll-area.tsx +1 -1
  697. package/src/components/ui/select.tsx +1 -1
  698. package/src/components/ui/separator.tsx +1 -1
  699. package/src/components/ui/sheet.tsx +1 -1
  700. package/src/components/ui/sidebar.tsx +4 -4
  701. package/src/components/ui/slider.tsx +1 -1
  702. package/src/components/ui/switch.tsx +1 -1
  703. package/src/components/ui/tabs.tsx +1 -1
  704. package/src/components/ui/toast.tsx +2 -2
  705. package/src/components/ui/toaster.tsx +1 -1
  706. package/src/components/ui/toggle-group.tsx +2 -2
  707. package/src/components/ui/toggle.tsx +1 -1
  708. package/src/components/ui/tooltip.tsx +1 -1
  709. package/src/components/workspace-app-card.tsx +3 -2
  710. package/src/components/workspace-resource-effective-stack.spec.tsx +1 -0
  711. package/src/components/workspace-resource-effective-stack.tsx +1 -0
  712. package/src/components/workspace-resource-impact-preview.spec.tsx +1 -0
  713. package/src/components/workspace-resource-impact-preview.tsx +2 -0
  714. package/src/db/index.ts +1 -0
  715. package/src/db/migrations.spec.ts +1 -0
  716. package/src/hooks/use-navigation-state.spec.ts +1 -0
  717. package/src/hooks/use-navigation-state.ts +4 -3
  718. package/src/lib/catch-all-target.spec.ts +1 -0
  719. package/src/routes/pages/$appId.tsx +22 -18
  720. package/src/routes/pages/_index.tsx +7 -7
  721. package/src/routes/pages/agents.tsx +25 -17
  722. package/src/routes/pages/approval.tsx +10 -9
  723. package/src/routes/pages/approvals.tsx +2 -1
  724. package/src/routes/pages/apps.$appId.tsx +18 -16
  725. package/src/routes/pages/apps.tsx +44 -22
  726. package/src/routes/pages/audit.tsx +1 -0
  727. package/src/routes/pages/chat.tsx +7 -6
  728. package/src/routes/pages/destinations.tsx +46 -34
  729. package/src/routes/pages/dream-settings.spec.ts +1 -0
  730. package/src/routes/pages/dreams.tsx +13 -8
  731. package/src/routes/pages/identities.tsx +1 -0
  732. package/src/routes/pages/integrations.tsx +4 -3
  733. package/src/routes/pages/messaging.tsx +1 -1
  734. package/src/routes/pages/metrics.tsx +15 -11
  735. package/src/routes/pages/new-app.tsx +5 -3
  736. package/src/routes/pages/settings.tsx +2 -1
  737. package/src/routes/pages/team.tsx +1 -0
  738. package/src/routes/pages/thread-debug.tsx +6 -4
  739. package/src/routes/pages/vault.tsx +16 -15
  740. package/src/routes/pages/workspace.tsx +8 -7
  741. package/src/server/index.ts +2 -1
  742. package/src/server/lib/app-creation-store.spec.ts +2 -1
  743. package/src/server/lib/app-creation-store.ts +6 -4
  744. package/src/server/lib/dispatch-integrations.spec.ts +2 -1
  745. package/src/server/lib/dispatch-integrations.ts +5 -3
  746. package/src/server/lib/dispatch-remote-commands.spec.ts +2 -1
  747. package/src/server/lib/dispatch-store.ts +4 -2
  748. package/src/server/lib/dreams-store.ts +10 -1
  749. package/src/server/lib/mcp-access-store.spec.ts +1 -0
  750. package/src/server/lib/mcp-access-store.ts +4 -4
  751. package/src/server/lib/mcp-gateway.spec.ts +2 -1
  752. package/src/server/lib/mcp-gateway.ts +2 -1
  753. package/src/server/lib/onboarding-steps.ts +1 -0
  754. package/src/server/lib/thread-debug-store.ts +1 -0
  755. package/src/server/lib/thread-link-preview.spec.ts +2 -2
  756. package/src/server/lib/thread-link-preview.ts +1 -0
  757. package/src/server/lib/usage-metrics-store.ts +8 -7
  758. package/src/server/lib/vault-store.ts +4 -2
  759. package/src/server/lib/workspace-resource-approval-lifecycle.spec.ts +1 -0
  760. package/src/server/lib/workspace-resources-store.ts +4 -2
  761. package/src/server/plugins/agent-chat.ts +2 -1
  762. package/src/server/plugins/auth.ts +1 -0
  763. package/src/server/plugins/core-routes.ts +1 -0
  764. package/src/server/plugins/db.ts +1 -0
  765. package/src/server/plugins/integrations.ts +3 -2
  766. package/src/styles/dispatch-css.spec.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-control-plane.js","sourceRoot":"","sources":["../../src/components/dispatch-control-plane.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n PromptComposer,\n agentNativePath,\n isInBuilderFrame,\n useActionQuery,\n useChangeVersions,\n useChatModels,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport {\n IconActivity,\n IconAlertTriangle,\n IconArrowUpRight,\n IconBolt,\n IconBroadcast,\n IconCheck,\n IconClockHour4,\n IconListCheck,\n IconMessages,\n IconPlayerPlay,\n IconPlugConnected,\n IconPlus,\n IconRobot,\n IconRocket,\n IconSettingsAutomation,\n IconShieldCheck,\n IconStack3,\n IconUsersGroup,\n type IconProps,\n} from \"@tabler/icons-react\";\nimport { toast } from \"sonner\";\nimport { CreateAppPopover } from \"@/components/create-app-popover\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport { WorkspaceAppCard } from \"@/components/workspace-app-card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { cn } from \"@/lib/utils\";\nimport {\n listDispatchAutomations,\n setDispatchAutomationEnabled,\n type DispatchAutomationItem,\n type SetDispatchAutomationEnabledInput,\n} from \"@/lib/automations\";\nimport { submitOverviewPrompt } from \"@/lib/overview-chat\";\nimport type { ConnectedAgent } from \"@/components/agents-panel\";\nimport type { WorkspaceAppSummary } from \"@/lib/workspace-apps\";\n\ninterface DispatchOverview {\n counts?: {\n destinations?: number;\n pendingApprovals?: number;\n linkedIdentities?: number;\n activeTokens?: number;\n };\n recentApprovals?: Array<{\n id: string;\n summary: string;\n status: string;\n requestedBy?: string;\n }>;\n recentAudit?: RecentAuditEvent[];\n settings?: {\n enabled?: boolean;\n };\n vault?: {\n secretCount?: number;\n activeGrantCount?: number;\n accessMode?: string;\n };\n}\n\ninterface RecentAuditEvent {\n id: string;\n summary: string;\n actor: string;\n action?: string;\n createdAt: string;\n}\n\ninterface TaskQueueRecentFailure {\n id: string;\n platform: string;\n error: string;\n attempts: number;\n}\n\ninterface TaskQueueStats {\n pending: number;\n processing: number;\n completed_last_hour: number;\n failed_last_hour: number;\n oldest_pending_age_seconds: number;\n recent_failures: TaskQueueRecentFailure[];\n}\n\ntype AutomationItem = DispatchAutomationItem;\n\nconst ZERO_TASK_QUEUE_STATS: TaskQueueStats = {\n pending: 0,\n processing: 0,\n completed_last_hour: 0,\n failed_last_hour: 0,\n oldest_pending_age_seconds: 0,\n recent_failures: [],\n};\n\nconst PROMPT_SUGGESTIONS = [\n \"Summarize the current workspace health\",\n \"Create an app for onboarding requests\",\n \"Check which agents can help with analytics\",\n];\n\nconst AUTOMATIONS_QUERY_KEY = [\n \"dispatch-control-plane\",\n \"automations\",\n] as const;\n\nfunction formatNumber(value: number): string {\n return new Intl.NumberFormat(undefined, {\n notation: value >= 10_000 ? \"compact\" : \"standard\",\n maximumFractionDigits: value >= 10_000 ? 1 : 0,\n }).format(value);\n}\n\nfunction formatAgeSeconds(seconds: number): string {\n if (!seconds || seconds < 0) return \"0s\";\n if (seconds < 60) return `${Math.floor(seconds)}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;\n}\n\nfunction timeAgo(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"never\";\n const timestamp =\n typeof value === \"number\" ? value : new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"never\";\n const diff = Math.max(0, Date.now() - timestamp);\n if (diff < 60_000) return \"now\";\n if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h`;\n return `${Math.floor(diff / 86_400_000)}d`;\n}\n\nfunction relativeRunTime(value: string | null | undefined): string {\n if (!value) return \"never\";\n const timestamp = new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"never\";\n const diff = timestamp - Date.now();\n const abs = Math.abs(diff);\n const suffix = diff >= 0 ? \"from now\" : \"ago\";\n if (abs < 60_000) return diff >= 0 ? \"soon\" : \"now\";\n if (abs < 3_600_000) return `${Math.floor(abs / 60_000)}m ${suffix}`;\n if (abs < 86_400_000) return `${Math.floor(abs / 3_600_000)}h ${suffix}`;\n return `${Math.floor(abs / 86_400_000)}d ${suffix}`;\n}\n\nfunction dateTimeTitle(value: string | null | undefined): string | undefined {\n if (!value) return undefined;\n const timestamp = new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return undefined;\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n }).format(timestamp);\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary): number {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction threadTitle(thread: ChatThreadSummary): string {\n return thread.title || thread.preview || \"New chat\";\n}\n\nfunction automationTarget(item: AutomationItem): string {\n if (item.triggerType === \"event\" && item.event) return item.event;\n if (item.scheduleDescription) return item.scheduleDescription;\n if (item.schedule) return item.schedule;\n return item.triggerType || \"schedule\";\n}\n\nfunction automationLastRun(item: AutomationItem): string {\n return item.lastRun ? relativeRunTime(item.lastRun) : \"never\";\n}\n\nfunction automationNextRun(item: AutomationItem): string {\n if (!item.enabled) return \"paused\";\n if (item.triggerType === \"event\") return \"on event\";\n return item.nextRun ? relativeRunTime(item.nextRun) : \"not scheduled\";\n}\n\nfunction automationStatus(item: AutomationItem): {\n label: string;\n tone: \"default\" | \"success\" | \"warning\" | \"danger\" | \"muted\";\n} {\n if (!item.enabled) return { label: \"Paused\", tone: \"muted\" };\n if (item.lastStatus === \"error\") return { label: \"Error\", tone: \"danger\" };\n if (item.lastStatus === \"running\")\n return { label: \"Running\", tone: \"warning\" };\n if (item.lastStatus === \"skipped\")\n return { label: \"Skipped\", tone: \"warning\" };\n if (item.lastStatus === \"success\")\n return { label: \"Healthy\", tone: \"success\" };\n return { label: \"Ready\", tone: \"default\" };\n}\n\nfunction automationIdentity(\n item: Pick<AutomationItem, \"owner\" | \"path\">,\n): string {\n return `${item.owner}:${item.path}`;\n}\n\nfunction StatusDot({\n tone = \"default\",\n}: {\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"muted\";\n}) {\n return (\n <span\n className={cn(\n \"size-2 rounded-full\",\n tone === \"success\" && \"bg-emerald-500\",\n tone === \"warning\" && \"bg-amber-500\",\n tone === \"danger\" && \"bg-destructive\",\n tone === \"muted\" && \"bg-muted-foreground/35\",\n tone === \"default\" && \"bg-primary\",\n )}\n />\n );\n}\n\nfunction useAutomationsStatus() {\n const version = useChangeVersions([\"action\", \"screen-refresh\"]);\n return useQuery<AutomationItem[]>({\n queryKey: [...AUTOMATIONS_QUERY_KEY, version],\n queryFn: listDispatchAutomations,\n placeholderData: (prev) => prev,\n refetchInterval: 15_000,\n staleTime: 5_000,\n });\n}\n\nfunction useToggleAutomation() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: setDispatchAutomationEnabled,\n onMutate: async (input: SetDispatchAutomationEnabledInput) => {\n await queryClient.cancelQueries({ queryKey: AUTOMATIONS_QUERY_KEY });\n const snapshots = queryClient.getQueriesData<AutomationItem[]>({\n queryKey: AUTOMATIONS_QUERY_KEY,\n });\n\n queryClient.setQueriesData<AutomationItem[]>(\n { queryKey: AUTOMATIONS_QUERY_KEY },\n (rows) =>\n rows?.map((item) =>\n automationIdentity(item) === automationIdentity(input)\n ? { ...item, enabled: input.enabled }\n : item,\n ),\n );\n\n return { snapshots };\n },\n onError: (err, _input, context) => {\n for (const [queryKey, data] of context?.snapshots ?? []) {\n queryClient.setQueryData(queryKey, data);\n }\n toast.error(\n `Could not update automation: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n },\n onSuccess: (updated) => {\n queryClient.setQueriesData<AutomationItem[]>(\n { queryKey: AUTOMATIONS_QUERY_KEY },\n (rows) =>\n rows?.map((item) =>\n automationIdentity(item) === automationIdentity(updated)\n ? updated\n : item,\n ),\n );\n },\n onSettled: () => {\n void queryClient.invalidateQueries({ queryKey: AUTOMATIONS_QUERY_KEY });\n },\n });\n}\n\nfunction useTaskQueueStats() {\n return useQuery<TaskQueueStats>({\n queryKey: [\"dispatch-control-plane\", \"task-queue\"],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\"/_agent-native/integrations/task-queue/status\"),\n );\n if (!res.ok) return ZERO_TASK_QUEUE_STATS;\n const stats = await res.json();\n if (!stats || typeof stats !== \"object\") return ZERO_TASK_QUEUE_STATS;\n return {\n pending: Number(stats.pending ?? 0),\n processing: Number(stats.processing ?? 0),\n completed_last_hour: Number(stats.completed_last_hour ?? 0),\n failed_last_hour: Number(stats.failed_last_hour ?? 0),\n oldest_pending_age_seconds: Number(\n stats.oldest_pending_age_seconds ?? 0,\n ),\n recent_failures: Array.isArray(stats.recent_failures)\n ? stats.recent_failures\n : [],\n };\n },\n placeholderData: (prev) => prev,\n refetchInterval: 15_000,\n staleTime: 5_000,\n });\n}\n\nfunction CommandPanel() {\n const { selectedModel } = useChatModels();\n const navigate = useNavigate();\n\n function send(message: string) {\n const trimmed = message.trim();\n if (!trimmed) return;\n\n if (isInBuilderFrame()) {\n submitOverviewPrompt(trimmed, selectedModel);\n return;\n }\n\n navigate(\"/chat\", {\n state: {\n dispatchPrompt: {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n message: trimmed,\n selectedModel,\n },\n },\n });\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n <IconBroadcast size={16} className=\"text-muted-foreground\" />\n <h2 className=\"text-sm font-semibold text-foreground\">\n Ask Dispatch\n </h2>\n </div>\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/chat\">\n Open chat\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n </div>\n <PromptComposer\n placeholder=\"Route work, inspect status, or create an app...\"\n onSubmit={(text) => send(text)}\n />\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {PROMPT_SUGGESTIONS.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => send(suggestion)}\n className=\"cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-xs text-muted-foreground transition hover:border-foreground/30 hover:text-foreground\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </section>\n );\n}\n\nfunction MetricCard({\n label,\n value,\n detail,\n icon: Icon,\n to,\n tone = \"default\",\n}: {\n label: string;\n value: ReactNode;\n detail: string;\n icon: React.ComponentType<IconProps>;\n to?: string;\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\";\n}) {\n const body = (\n <>\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 text-xs font-medium text-muted-foreground\">\n <Icon size={15} />\n <span className=\"truncate\">{label}</span>\n </div>\n <StatusDot\n tone={\n tone === \"success\"\n ? \"success\"\n : tone === \"warning\"\n ? \"warning\"\n : tone === \"danger\"\n ? \"danger\"\n : \"default\"\n }\n />\n </div>\n <div className=\"mt-3 text-2xl font-semibold tracking-tight text-foreground\">\n {value}\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {detail}\n </div>\n </>\n );\n\n const className = cn(\n \"block min-w-0 rounded-lg border bg-card p-4 transition\",\n to && \"hover:border-foreground/30 hover:bg-muted/20\",\n );\n\n if (to) {\n return (\n <Link to={to} className={className}>\n {body}\n </Link>\n );\n }\n\n return <div className={className}>{body}</div>;\n}\n\nfunction ControlPlaneMetrics({\n overview,\n apps,\n agents,\n automations,\n threads,\n taskQueue,\n}: {\n overview?: DispatchOverview;\n apps: WorkspaceAppSummary[];\n agents: ConnectedAgent[];\n automations: AutomationItem[];\n threads: ChatThreadSummary[];\n taskQueue: TaskQueueStats;\n}) {\n const activeApps = apps.filter((app) => !app.isDispatch && !app.archived);\n const pendingApps = activeApps.filter((app) => app.status === \"pending\");\n const enabledAutomations = automations.filter((item) => item.enabled);\n const automationErrors = automations.filter(\n (item) => item.enabled && item.lastStatus === \"error\",\n );\n const pendingApprovals = overview?.counts?.pendingApprovals ?? 0;\n const activeRuns = taskQueue.processing;\n\n return (\n <section className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-6\">\n <MetricCard\n label=\"Chats\"\n value={formatNumber(threads.length)}\n detail={`${threads.filter((thread) => thread.messageCount > 0).length} with messages`}\n icon={IconMessages}\n to=\"/chat\"\n />\n <MetricCard\n label=\"Runs\"\n value={formatNumber(activeRuns)}\n detail={`${formatNumber(taskQueue.pending)} queued`}\n icon={IconPlayerPlay}\n tone={\n taskQueue.failed_last_hour > 0\n ? \"danger\"\n : taskQueue.pending > 5\n ? \"warning\"\n : \"default\"\n }\n />\n <MetricCard\n label=\"Apps\"\n value={formatNumber(activeApps.length)}\n detail={`${formatNumber(pendingApps.length)} building`}\n icon={IconStack3}\n to=\"/apps\"\n tone={pendingApps.length > 0 ? \"warning\" : \"default\"}\n />\n <MetricCard\n label=\"Agents\"\n value={formatNumber(agents.length)}\n detail={`${formatNumber(agents.filter((agent) => agent.source === \"custom\").length)} custom`}\n icon={IconRobot}\n to=\"/agents\"\n />\n <MetricCard\n label=\"Automations\"\n value={formatNumber(enabledAutomations.length)}\n detail={`${formatNumber(automationErrors.length)} need attention`}\n icon={IconSettingsAutomation}\n tone={automationErrors.length > 0 ? \"danger\" : \"success\"}\n />\n <MetricCard\n label=\"Approvals\"\n value={formatNumber(pendingApprovals)}\n detail={\n overview?.settings?.enabled ? \"review mode\" : \"immediate changes\"\n }\n icon={IconShieldCheck}\n to=\"/approvals\"\n tone={pendingApprovals > 0 ? \"warning\" : \"default\"}\n />\n </section>\n );\n}\n\nfunction SectionHeader({\n icon: Icon,\n title,\n detail,\n action,\n}: {\n icon: React.ComponentType<IconProps>;\n title: string;\n detail?: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Icon size={16} className=\"shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0\">\n <h2 className=\"truncate text-sm font-semibold text-foreground\">\n {title}\n </h2>\n {detail ? (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {detail}\n </p>\n ) : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\nfunction RecentChatsPanel() {\n const navigate = useNavigate();\n const { threads, activeThreadId, createThread, switchThread } =\n useChatThreads(undefined, undefined, undefined, { autoCreate: false });\n const [creating, setCreating] = useState(false);\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 5),\n [activeThreadId, threads],\n );\n\n function openThread(threadId: string, isNew = false) {\n switchThread(threadId);\n navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: isNew },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n setCreating(true);\n try {\n const threadId = await createThread();\n if (threadId) openThread(threadId, true);\n } finally {\n setCreating(false);\n }\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconMessages}\n title=\"Chats\"\n detail={`${visibleThreads.length} recent`}\n action={\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNewChat}\n disabled={creating}\n >\n <IconPlus size={14} />\n New\n </Button>\n }\n />\n <div className=\"mt-3 divide-y rounded-md border\">\n {visibleThreads.length > 0 ? (\n visibleThreads.map((thread) => (\n <button\n key={thread.id}\n type=\"button\"\n onClick={() => openThread(thread.id)}\n className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] gap-3 px-3 py-2.5 text-left transition hover:bg-muted/40\"\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {threadTitle(thread)}\n </span>\n <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">\n {thread.preview || `${thread.messageCount} messages`}\n </span>\n </span>\n <span className=\"text-[11px] text-muted-foreground\">\n {timeAgo(threadUpdatedAt(thread))}\n </span>\n </button>\n ))\n ) : (\n <button\n type=\"button\"\n onClick={handleNewChat}\n className=\"block w-full px-3 py-8 text-center text-sm text-muted-foreground transition hover:bg-muted/40\"\n >\n Start a Dispatch chat\n </button>\n )}\n </div>\n </section>\n );\n}\n\nfunction RunsPanel({ taskQueue }: { taskQueue: TaskQueueStats }) {\n const hasFailure = taskQueue.failed_last_hour > 0;\n const hasBacklog =\n taskQueue.pending > 5 || taskQueue.oldest_pending_age_seconds > 300;\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconPlayerPlay}\n title=\"Runs\"\n detail={\n hasFailure\n ? `${taskQueue.failed_last_hour} failed in the last hour`\n : `${taskQueue.processing} processing`\n }\n action={\n <RunsTray\n triggerVariant=\"pill\"\n hideWhenIdle={false}\n showRecent\n limit={8}\n />\n }\n />\n <div className=\"mt-3 grid grid-cols-4 gap-2\">\n <QueueCell label=\"Queued\" value={taskQueue.pending} />\n <QueueCell label=\"Active\" value={taskQueue.processing} />\n <QueueCell label=\"Done 1h\" value={taskQueue.completed_last_hour} />\n <QueueCell\n label=\"Failed 1h\"\n value={taskQueue.failed_last_hour}\n danger={hasFailure}\n />\n </div>\n <div\n className={cn(\n \"mt-3 rounded-md border px-3 py-2 text-xs\",\n hasFailure\n ? \"border-destructive/30 bg-destructive/5 text-destructive\"\n : hasBacklog\n ? \"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300\"\n : \"bg-muted/20 text-muted-foreground\",\n )}\n >\n Oldest queued: {formatAgeSeconds(taskQueue.oldest_pending_age_seconds)}\n </div>\n {taskQueue.recent_failures.length > 0 ? (\n <div className=\"mt-3 divide-y rounded-md border\">\n {taskQueue.recent_failures.slice(0, 3).map((failure) => (\n <div key={failure.id} className=\"px-3 py-2\">\n <div className=\"flex items-center justify-between gap-3 text-xs\">\n <span className=\"font-medium text-foreground\">\n {failure.platform}\n </span>\n <span className=\"text-muted-foreground\">\n {failure.attempts} attempts\n </span>\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {failure.error || \"(no error message)\"}\n </div>\n </div>\n ))}\n </div>\n ) : null}\n </section>\n );\n}\n\nfunction QueueCell({\n label,\n value,\n danger,\n}: {\n label: string;\n value: number;\n danger?: boolean;\n}) {\n return (\n <div className=\"rounded-md border bg-background px-2 py-2\">\n <div\n className={cn(\n \"text-lg font-semibold text-foreground\",\n danger && \"text-destructive\",\n )}\n >\n {formatNumber(value)}\n </div>\n <div className=\"truncate text-[11px] text-muted-foreground\">{label}</div>\n </div>\n );\n}\n\nfunction AppsPanel({\n apps,\n isLoading,\n}: {\n apps: WorkspaceAppSummary[];\n isLoading: boolean;\n}) {\n const visibleApps = apps\n .filter((app) => !app.isDispatch && !app.archived)\n .slice(0, 4);\n const showSkeletons = isLoading && visibleApps.length === 0;\n\n return (\n <section className=\"space-y-3\">\n <SectionHeader\n icon={IconStack3}\n title=\"Projects and apps\"\n detail={`${apps.filter((app) => !app.isDispatch && !app.archived).length} active`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/apps\">\n View all\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n {showSkeletons ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {Array.from({ length: 4 }).map((_, index) => (\n <div key={index} className=\"rounded-lg border bg-card p-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"mt-3 h-3 w-24\" />\n <Skeleton className=\"mt-3 h-3 w-full\" />\n </div>\n ))}\n </div>\n ) : visibleApps.length > 0 ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {visibleApps.map((app) => (\n <WorkspaceAppCard key={app.id} app={app} className=\"min-h-32\" />\n ))}\n </div>\n ) : (\n <CreateAppPopover />\n )}\n </section>\n );\n}\n\nfunction AutomationsPanel({\n automations,\n isLoading,\n}: {\n automations: AutomationItem[];\n isLoading: boolean;\n}) {\n const toggleAutomation = useToggleAutomation();\n const ordered = useMemo(\n () =>\n [...automations].sort((a, b) => {\n const aError = a.enabled && a.lastStatus === \"error\" ? 1 : 0;\n const bError = b.enabled && b.lastStatus === \"error\" ? 1 : 0;\n if (aError !== bError) return bError - aError;\n return (b.lastRun || \"\").localeCompare(a.lastRun || \"\");\n }),\n [automations],\n );\n const enabled = automations.filter((item) => item.enabled).length;\n const errors = automations.filter(\n (item) => item.enabled && item.lastStatus === \"error\",\n ).length;\n const pendingToggleIdentity = toggleAutomation.isPending\n ? toggleAutomation.variables\n ? automationIdentity(toggleAutomation.variables)\n : null\n : null;\n\n function handleToggle(item: AutomationItem, enabled: boolean) {\n toggleAutomation.mutate({\n owner: item.owner,\n path: item.path,\n enabled,\n });\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconSettingsAutomation}\n title=\"Automations\"\n detail={`${enabled} enabled · ${errors} errors`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/chat\">\n Create\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 divide-y rounded-md border\">\n {isLoading && ordered.length === 0 ? (\n Array.from({ length: 4 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"mt-2 h-3 w-28\" />\n </div>\n ))\n ) : ordered.length > 0 ? (\n ordered.slice(0, 6).map((item) => {\n const status = automationStatus(item);\n const canUpdate = item.canUpdate !== false;\n const isToggling =\n pendingToggleIdentity === automationIdentity(item);\n return (\n <div\n key={item.id}\n className=\"grid grid-cols-[minmax(0,1fr)_auto] gap-3 px-3 py-2.5\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <StatusDot tone={status.tone} />\n <span className=\"truncate text-sm font-medium text-foreground\">\n {item.name}\n </span>\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {automationTarget(item)}\n </div>\n <div className=\"mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground\">\n <span title={dateTimeTitle(item.lastRun)}>\n Last {automationLastRun(item)}\n </span>\n <span title={dateTimeTitle(item.nextRun)}>\n Next {automationNextRun(item)}\n </span>\n </div>\n {item.lastError ? (\n <div className=\"mt-1 truncate text-xs text-destructive\">\n {item.lastError}\n </div>\n ) : null}\n </div>\n <div className=\"flex flex-col items-end gap-1\">\n <Badge\n variant={\n status.tone === \"danger\" ? \"destructive\" : \"outline\"\n }\n className=\"h-5\"\n >\n {status.label}\n </Badge>\n <Switch\n checked={!!item.enabled}\n disabled={!canUpdate || isToggling}\n aria-label={`${item.enabled ? \"Disable\" : \"Enable\"} automation ${item.name}`}\n onCheckedChange={(checked) => handleToggle(item, checked)}\n />\n </div>\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No automations yet\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction AgentsPanelSummary({ agents }: { agents: ConnectedAgent[] }) {\n const builtin = agents.filter((agent) => agent.source === \"builtin\");\n const extra = agents.filter((agent) => agent.source !== \"builtin\");\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconPlugConnected}\n title=\"Agents\"\n detail={`${builtin.length} built in · ${extra.length} added`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/agents\">\n Manage\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {agents.slice(0, 12).map((agent) => (\n <span\n key={agent.id}\n className=\"inline-flex max-w-full items-center gap-2 rounded-md border bg-background px-2.5 py-1.5 text-xs text-muted-foreground\"\n >\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: agent.color || \"hsl(var(--primary))\" }}\n />\n <span className=\"truncate\">{agent.name}</span>\n </span>\n ))}\n {agents.length === 0 ? (\n <div className=\"w-full rounded-md border border-dashed px-3 py-6 text-center text-sm text-muted-foreground\">\n No agents detected\n </div>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction ApprovalsAndAuditPanel({\n overview,\n isLoading,\n}: {\n overview?: DispatchOverview;\n isLoading: boolean;\n}) {\n const approvals = overview?.recentApprovals ?? [];\n const audit = overview?.recentAudit ?? [];\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconActivity}\n title=\"Activity\"\n detail={`${approvals.length} approvals · ${audit.length} audit rows`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/audit\">\n Audit\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 grid gap-3 lg:grid-cols-2\">\n <div className=\"rounded-md border\">\n <div className=\"flex items-center justify-between gap-3 border-b px-3 py-2\">\n <div className=\"text-xs font-medium uppercase text-muted-foreground\">\n Approvals\n </div>\n <Button variant=\"ghost\" size=\"sm\" asChild>\n <Link to=\"/approvals\">Open</Link>\n </Button>\n </div>\n <div className=\"divide-y\">\n {isLoading && approvals.length === 0 ? (\n Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"mt-2 h-3 w-24\" />\n </div>\n ))\n ) : approvals.length > 0 ? (\n approvals.slice(0, 4).map((approval) => (\n <div key={approval.id} className=\"px-3 py-2.5\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {approval.summary}\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <StatusDot\n tone={approval.status === \"pending\" ? \"warning\" : \"muted\"}\n />\n <span>{approval.status}</span>\n </div>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No approval requests\n </div>\n )}\n </div>\n </div>\n\n <div className=\"rounded-md border\">\n <div className=\"border-b px-3 py-2 text-xs font-medium uppercase text-muted-foreground\">\n Recent audit\n </div>\n <div className=\"divide-y\">\n {isLoading && audit.length === 0 ? (\n Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-44\" />\n <Skeleton className=\"mt-2 h-3 w-28\" />\n </div>\n ))\n ) : audit.length > 0 ? (\n audit.slice(0, 4).map((event) => (\n <div key={event.id} className=\"px-3 py-2.5\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {event.summary}\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {event.actor} · {timeAgo(event.createdAt)}\n </div>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No audit entries\n </div>\n )}\n </div>\n </div>\n </div>\n </section>\n );\n}\n\nfunction ReadinessPanel({\n overview,\n apps,\n agents,\n automations,\n}: {\n overview?: DispatchOverview;\n apps: WorkspaceAppSummary[];\n agents: ConnectedAgent[];\n automations: AutomationItem[];\n}) {\n const rows = [\n {\n label: \"Vault\",\n detail:\n (overview?.vault?.secretCount ?? 0) > 0\n ? `${overview?.vault?.secretCount ?? 0} secrets`\n : \"no secrets\",\n ok: (overview?.vault?.secretCount ?? 0) > 0,\n to: \"/vault\",\n icon: IconShieldCheck,\n },\n {\n label: \"Apps\",\n detail: `${apps.filter((app) => !app.isDispatch && !app.archived).length} active`,\n ok: apps.some((app) => !app.isDispatch && !app.archived),\n to: \"/apps\",\n icon: IconRocket,\n },\n {\n label: \"Agents\",\n detail: `${agents.length} available`,\n ok: agents.length > 0,\n to: \"/agents\",\n icon: IconRobot,\n },\n {\n label: \"Automations\",\n detail: `${automations.filter((item) => item.enabled).length} enabled`,\n ok: automations.every(\n (item) => !item.enabled || item.lastStatus !== \"error\",\n ),\n to: \"/chat\",\n icon: IconBolt,\n },\n {\n label: \"Team\",\n detail: `${overview?.counts?.linkedIdentities ?? 0} linked identities`,\n ok: (overview?.counts?.linkedIdentities ?? 0) > 0,\n to: \"/team\",\n icon: IconUsersGroup,\n },\n ];\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader icon={IconListCheck} title=\"Readiness\" />\n <div className=\"mt-3 divide-y rounded-md border\">\n {rows.map((row) => {\n const Icon = row.icon;\n return (\n <Link\n key={row.label}\n to={row.to}\n className=\"flex items-center gap-3 px-3 py-2.5 transition hover:bg-muted/40\"\n >\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md border\",\n row.ok\n ? \"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\"\n : \"bg-background text-muted-foreground\",\n )}\n >\n {row.ok ? <IconCheck size={14} /> : <Icon size={14} />}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {row.label}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {row.detail}\n </span>\n </span>\n <IconArrowUpRight size={14} className=\"text-muted-foreground\" />\n </Link>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function DispatchControlPlane() {\n const { data: overviewData, isLoading: overviewLoading } =\n useActionQuery<DispatchOverview>(\"list-dispatch-overview\", {});\n const { data: connectedAgents = [] } = useActionQuery<ConnectedAgent[]>(\n \"list-connected-agents\",\n {},\n );\n const { data: workspaceApps = [], isLoading: appsLoading } = useActionQuery<\n WorkspaceAppSummary[]\n >(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n { refetchInterval: 2_000 },\n );\n const { threads } = useChatThreads(undefined, undefined, undefined, {\n autoCreate: false,\n });\n const automationsQuery = useAutomationsStatus();\n const taskQueueQuery = useTaskQueueStats();\n\n const overview = overviewData;\n const apps = workspaceApps ?? [];\n const agents = connectedAgents ?? [];\n const automations = automationsQuery.data ?? [];\n const taskQueue = taskQueueQuery.data ?? ZERO_TASK_QUEUE_STATS;\n const visibleThreads = threads.filter((thread) => thread.messageCount > 0);\n\n useEffect(() => {\n const handleRunning = () => {\n void taskQueueQuery.refetch();\n };\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n return () => {\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n };\n }, [taskQueueQuery]);\n\n return (\n <DispatchShell\n title=\"Control plane\"\n description=\"Dispatch is the workspace shell for chats, runs, apps, agents, automations, approvals, and resources.\"\n >\n <div className=\"space-y-6\">\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.08fr)_minmax(360px,0.92fr)]\">\n <CommandPanel />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <MetricCard\n label=\"Vault\"\n value={formatNumber(overview?.vault?.secretCount ?? 0)}\n detail={`${formatNumber(overview?.vault?.activeGrantCount ?? 0)} active grants`}\n icon={IconShieldCheck}\n to=\"/vault\"\n tone={\n (overview?.vault?.secretCount ?? 0) > 0 ? \"success\" : \"default\"\n }\n />\n <MetricCard\n label=\"Resources\"\n value={formatNumber(overview?.counts?.destinations ?? 0)}\n detail=\"destinations\"\n icon={IconArrowUpRight}\n to=\"/destinations\"\n />\n </div>\n </div>\n\n <ControlPlaneMetrics\n overview={overview}\n apps={apps}\n agents={agents}\n automations={automations}\n threads={visibleThreads}\n taskQueue={taskQueue}\n />\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.15fr)_minmax(340px,0.85fr)]\">\n <div className=\"space-y-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <RecentChatsPanel />\n <RunsPanel taskQueue={taskQueue} />\n </div>\n <AppsPanel apps={apps} isLoading={appsLoading} />\n <ApprovalsAndAuditPanel\n overview={overview}\n isLoading={overviewLoading}\n />\n </div>\n\n <div className=\"space-y-4\">\n <AutomationsPanel\n automations={automations}\n isLoading={automationsQuery.isLoading}\n />\n <AgentsPanelSummary agents={agents} />\n <ReadinessPanel\n overview={overview}\n apps={apps}\n agents={agents}\n automations={automations}\n />\n {taskQueue.failed_last_hour > 0 ? (\n <div className=\"rounded-lg border border-destructive/30 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"flex items-center gap-2 font-medium\">\n <IconAlertTriangle size={16} />\n Integration failures detected\n </div>\n <div className=\"mt-1 text-xs\">\n Check credentials, destinations, and recent queue errors.\n </div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </DispatchShell>\n );\n}\n"]}
1
+ {"version":3,"file":"dispatch-control-plane.js","sourceRoot":"","sources":["../../src/components/dispatch-control-plane.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n PromptComposer,\n agentNativePath,\n isInBuilderFrame,\n useActionQuery,\n useChangeVersions,\n useChatModels,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport {\n IconActivity,\n IconAlertTriangle,\n IconArrowUpRight,\n IconBolt,\n IconBroadcast,\n IconCheck,\n IconClockHour4,\n IconListCheck,\n IconMessages,\n IconPlayerPlay,\n IconPlugConnected,\n IconPlus,\n IconRobot,\n IconRocket,\n IconSettingsAutomation,\n IconShieldCheck,\n IconStack3,\n IconUsersGroup,\n type IconProps,\n} from \"@tabler/icons-react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport type { ConnectedAgent } from \"@/components/agents-panel\";\nimport { CreateAppPopover } from \"@/components/create-app-popover\";\nimport { DispatchShell } from \"@/components/dispatch-shell\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { WorkspaceAppCard } from \"@/components/workspace-app-card\";\nimport {\n listDispatchAutomations,\n setDispatchAutomationEnabled,\n type DispatchAutomationItem,\n type SetDispatchAutomationEnabledInput,\n} from \"@/lib/automations\";\nimport { submitOverviewPrompt } from \"@/lib/overview-chat\";\nimport { cn } from \"@/lib/utils\";\nimport type { WorkspaceAppSummary } from \"@/lib/workspace-apps\";\n\ninterface DispatchOverview {\n counts?: {\n destinations?: number;\n pendingApprovals?: number;\n linkedIdentities?: number;\n activeTokens?: number;\n };\n recentApprovals?: Array<{\n id: string;\n summary: string;\n status: string;\n requestedBy?: string;\n }>;\n recentAudit?: RecentAuditEvent[];\n settings?: {\n enabled?: boolean;\n };\n vault?: {\n secretCount?: number;\n activeGrantCount?: number;\n accessMode?: string;\n };\n}\n\ninterface RecentAuditEvent {\n id: string;\n summary: string;\n actor: string;\n action?: string;\n createdAt: string;\n}\n\ninterface TaskQueueRecentFailure {\n id: string;\n platform: string;\n error: string;\n attempts: number;\n}\n\ninterface TaskQueueStats {\n pending: number;\n processing: number;\n completed_last_hour: number;\n failed_last_hour: number;\n oldest_pending_age_seconds: number;\n recent_failures: TaskQueueRecentFailure[];\n}\n\ntype AutomationItem = DispatchAutomationItem;\n\nconst ZERO_TASK_QUEUE_STATS: TaskQueueStats = {\n pending: 0,\n processing: 0,\n completed_last_hour: 0,\n failed_last_hour: 0,\n oldest_pending_age_seconds: 0,\n recent_failures: [],\n};\n\nconst PROMPT_SUGGESTIONS = [\n \"Summarize the current workspace health\",\n \"Create an app for onboarding requests\",\n \"Check which agents can help with analytics\",\n];\n\nconst AUTOMATIONS_QUERY_KEY = [\n \"dispatch-control-plane\",\n \"automations\",\n] as const;\n\nfunction formatNumber(value: number): string {\n return new Intl.NumberFormat(undefined, {\n notation: value >= 10_000 ? \"compact\" : \"standard\",\n maximumFractionDigits: value >= 10_000 ? 1 : 0,\n }).format(value);\n}\n\nfunction formatAgeSeconds(seconds: number): string {\n if (!seconds || seconds < 0) return \"0s\";\n if (seconds < 60) return `${Math.floor(seconds)}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\n return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;\n}\n\nfunction timeAgo(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"never\";\n const timestamp =\n typeof value === \"number\" ? value : new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"never\";\n const diff = Math.max(0, Date.now() - timestamp);\n if (diff < 60_000) return \"now\";\n if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h`;\n return `${Math.floor(diff / 86_400_000)}d`;\n}\n\nfunction relativeRunTime(value: string | null | undefined): string {\n if (!value) return \"never\";\n const timestamp = new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"never\";\n const diff = timestamp - Date.now();\n const abs = Math.abs(diff);\n const suffix = diff >= 0 ? \"from now\" : \"ago\";\n if (abs < 60_000) return diff >= 0 ? \"soon\" : \"now\";\n if (abs < 3_600_000) return `${Math.floor(abs / 60_000)}m ${suffix}`;\n if (abs < 86_400_000) return `${Math.floor(abs / 3_600_000)}h ${suffix}`;\n return `${Math.floor(abs / 86_400_000)}d ${suffix}`;\n}\n\nfunction dateTimeTitle(value: string | null | undefined): string | undefined {\n if (!value) return undefined;\n const timestamp = new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return undefined;\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n }).format(timestamp);\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary): number {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction threadTitle(thread: ChatThreadSummary): string {\n return thread.title || thread.preview || \"New chat\";\n}\n\nfunction automationTarget(item: AutomationItem): string {\n if (item.triggerType === \"event\" && item.event) return item.event;\n if (item.scheduleDescription) return item.scheduleDescription;\n if (item.schedule) return item.schedule;\n return item.triggerType || \"schedule\";\n}\n\nfunction automationLastRun(item: AutomationItem): string {\n return item.lastRun ? relativeRunTime(item.lastRun) : \"never\";\n}\n\nfunction automationNextRun(item: AutomationItem): string {\n if (!item.enabled) return \"paused\";\n if (item.triggerType === \"event\") return \"on event\";\n return item.nextRun ? relativeRunTime(item.nextRun) : \"not scheduled\";\n}\n\nfunction automationStatus(item: AutomationItem): {\n label: string;\n tone: \"default\" | \"success\" | \"warning\" | \"danger\" | \"muted\";\n} {\n if (!item.enabled) return { label: \"Paused\", tone: \"muted\" };\n if (item.lastStatus === \"error\") return { label: \"Error\", tone: \"danger\" };\n if (item.lastStatus === \"running\")\n return { label: \"Running\", tone: \"warning\" };\n if (item.lastStatus === \"skipped\")\n return { label: \"Skipped\", tone: \"warning\" };\n if (item.lastStatus === \"success\")\n return { label: \"Healthy\", tone: \"success\" };\n return { label: \"Ready\", tone: \"default\" };\n}\n\nfunction automationIdentity(\n item: Pick<AutomationItem, \"owner\" | \"path\">,\n): string {\n return `${item.owner}:${item.path}`;\n}\n\nfunction StatusDot({\n tone = \"default\",\n}: {\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"muted\";\n}) {\n return (\n <span\n className={cn(\n \"size-2 rounded-full\",\n tone === \"success\" && \"bg-emerald-500\",\n tone === \"warning\" && \"bg-amber-500\",\n tone === \"danger\" && \"bg-destructive\",\n tone === \"muted\" && \"bg-muted-foreground/35\",\n tone === \"default\" && \"bg-primary\",\n )}\n />\n );\n}\n\nfunction useAutomationsStatus() {\n const version = useChangeVersions([\"action\", \"screen-refresh\"]);\n return useQuery<AutomationItem[]>({\n queryKey: [...AUTOMATIONS_QUERY_KEY, version],\n queryFn: listDispatchAutomations,\n placeholderData: (prev) => prev,\n refetchInterval: 15_000,\n staleTime: 5_000,\n });\n}\n\nfunction useToggleAutomation() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: setDispatchAutomationEnabled,\n onMutate: async (input: SetDispatchAutomationEnabledInput) => {\n await queryClient.cancelQueries({ queryKey: AUTOMATIONS_QUERY_KEY });\n const snapshots = queryClient.getQueriesData<AutomationItem[]>({\n queryKey: AUTOMATIONS_QUERY_KEY,\n });\n\n queryClient.setQueriesData<AutomationItem[]>(\n { queryKey: AUTOMATIONS_QUERY_KEY },\n (rows) =>\n rows?.map((item) =>\n automationIdentity(item) === automationIdentity(input)\n ? { ...item, enabled: input.enabled }\n : item,\n ),\n );\n\n return { snapshots };\n },\n onError: (err, _input, context) => {\n for (const [queryKey, data] of context?.snapshots ?? []) {\n queryClient.setQueryData(queryKey, data);\n }\n toast.error(\n `Could not update automation: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n },\n onSuccess: (updated) => {\n queryClient.setQueriesData<AutomationItem[]>(\n { queryKey: AUTOMATIONS_QUERY_KEY },\n (rows) =>\n rows?.map((item) =>\n automationIdentity(item) === automationIdentity(updated)\n ? updated\n : item,\n ),\n );\n },\n onSettled: () => {\n void queryClient.invalidateQueries({ queryKey: AUTOMATIONS_QUERY_KEY });\n },\n });\n}\n\nfunction useTaskQueueStats() {\n return useQuery<TaskQueueStats>({\n queryKey: [\"dispatch-control-plane\", \"task-queue\"],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\"/_agent-native/integrations/task-queue/status\"),\n );\n if (!res.ok) return ZERO_TASK_QUEUE_STATS;\n const stats = await res.json();\n if (!stats || typeof stats !== \"object\") return ZERO_TASK_QUEUE_STATS;\n return {\n pending: Number(stats.pending ?? 0),\n processing: Number(stats.processing ?? 0),\n completed_last_hour: Number(stats.completed_last_hour ?? 0),\n failed_last_hour: Number(stats.failed_last_hour ?? 0),\n oldest_pending_age_seconds: Number(\n stats.oldest_pending_age_seconds ?? 0,\n ),\n recent_failures: Array.isArray(stats.recent_failures)\n ? stats.recent_failures\n : [],\n };\n },\n placeholderData: (prev) => prev,\n refetchInterval: 15_000,\n staleTime: 5_000,\n });\n}\n\nfunction CommandPanel() {\n const { selectedModel } = useChatModels();\n const navigate = useNavigate();\n\n function send(message: string) {\n const trimmed = message.trim();\n if (!trimmed) return;\n\n if (isInBuilderFrame()) {\n submitOverviewPrompt(trimmed, selectedModel);\n return;\n }\n\n navigate(\"/chat\", {\n state: {\n dispatchPrompt: {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n message: trimmed,\n selectedModel,\n },\n },\n });\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n <IconBroadcast size={16} className=\"text-muted-foreground\" />\n <h2 className=\"text-sm font-semibold text-foreground\">\n Ask Dispatch\n </h2>\n </div>\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/chat\">\n Open chat\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n </div>\n <PromptComposer\n placeholder=\"Route work, inspect status, or create an app...\"\n onSubmit={(text) => send(text)}\n />\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {PROMPT_SUGGESTIONS.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => send(suggestion)}\n className=\"cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-xs text-muted-foreground transition hover:border-foreground/30 hover:text-foreground\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </section>\n );\n}\n\nfunction MetricCard({\n label,\n value,\n detail,\n icon: Icon,\n to,\n tone = \"default\",\n}: {\n label: string;\n value: ReactNode;\n detail: string;\n icon: React.ComponentType<IconProps>;\n to?: string;\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\";\n}) {\n const body = (\n <>\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 text-xs font-medium text-muted-foreground\">\n <Icon size={15} />\n <span className=\"truncate\">{label}</span>\n </div>\n <StatusDot\n tone={\n tone === \"success\"\n ? \"success\"\n : tone === \"warning\"\n ? \"warning\"\n : tone === \"danger\"\n ? \"danger\"\n : \"default\"\n }\n />\n </div>\n <div className=\"mt-3 text-2xl font-semibold tracking-tight text-foreground\">\n {value}\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {detail}\n </div>\n </>\n );\n\n const className = cn(\n \"block min-w-0 rounded-lg border bg-card p-4 transition\",\n to && \"hover:border-foreground/30 hover:bg-muted/20\",\n );\n\n if (to) {\n return (\n <Link to={to} className={className}>\n {body}\n </Link>\n );\n }\n\n return <div className={className}>{body}</div>;\n}\n\nfunction ControlPlaneMetrics({\n overview,\n apps,\n agents,\n automations,\n threads,\n taskQueue,\n}: {\n overview?: DispatchOverview;\n apps: WorkspaceAppSummary[];\n agents: ConnectedAgent[];\n automations: AutomationItem[];\n threads: ChatThreadSummary[];\n taskQueue: TaskQueueStats;\n}) {\n const activeApps = apps.filter((app) => !app.isDispatch && !app.archived);\n const pendingApps = activeApps.filter((app) => app.status === \"pending\");\n const enabledAutomations = automations.filter((item) => item.enabled);\n const automationErrors = automations.filter(\n (item) => item.enabled && item.lastStatus === \"error\",\n );\n const pendingApprovals = overview?.counts?.pendingApprovals ?? 0;\n const activeRuns = taskQueue.processing;\n\n return (\n <section className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-6\">\n <MetricCard\n label=\"Chats\"\n value={formatNumber(threads.length)}\n detail={`${threads.filter((thread) => thread.messageCount > 0).length} with messages`}\n icon={IconMessages}\n to=\"/chat\"\n />\n <MetricCard\n label=\"Runs\"\n value={formatNumber(activeRuns)}\n detail={`${formatNumber(taskQueue.pending)} queued`}\n icon={IconPlayerPlay}\n tone={\n taskQueue.failed_last_hour > 0\n ? \"danger\"\n : taskQueue.pending > 5\n ? \"warning\"\n : \"default\"\n }\n />\n <MetricCard\n label=\"Apps\"\n value={formatNumber(activeApps.length)}\n detail={`${formatNumber(pendingApps.length)} building`}\n icon={IconStack3}\n to=\"/apps\"\n tone={pendingApps.length > 0 ? \"warning\" : \"default\"}\n />\n <MetricCard\n label=\"Agents\"\n value={formatNumber(agents.length)}\n detail={`${formatNumber(agents.filter((agent) => agent.source === \"custom\").length)} custom`}\n icon={IconRobot}\n to=\"/agents\"\n />\n <MetricCard\n label=\"Automations\"\n value={formatNumber(enabledAutomations.length)}\n detail={`${formatNumber(automationErrors.length)} need attention`}\n icon={IconSettingsAutomation}\n tone={automationErrors.length > 0 ? \"danger\" : \"success\"}\n />\n <MetricCard\n label=\"Approvals\"\n value={formatNumber(pendingApprovals)}\n detail={\n overview?.settings?.enabled ? \"review mode\" : \"immediate changes\"\n }\n icon={IconShieldCheck}\n to=\"/approvals\"\n tone={pendingApprovals > 0 ? \"warning\" : \"default\"}\n />\n </section>\n );\n}\n\nfunction SectionHeader({\n icon: Icon,\n title,\n detail,\n action,\n}: {\n icon: React.ComponentType<IconProps>;\n title: string;\n detail?: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Icon size={16} className=\"shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0\">\n <h2 className=\"truncate text-sm font-semibold text-foreground\">\n {title}\n </h2>\n {detail ? (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {detail}\n </p>\n ) : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\nfunction RecentChatsPanel() {\n const navigate = useNavigate();\n const { threads, activeThreadId, createThread, switchThread } =\n useChatThreads(undefined, undefined, undefined, { autoCreate: false });\n const [creating, setCreating] = useState(false);\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 5),\n [activeThreadId, threads],\n );\n\n function openThread(threadId: string, isNew = false) {\n switchThread(threadId);\n navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: isNew },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n setCreating(true);\n try {\n const threadId = await createThread();\n if (threadId) openThread(threadId, true);\n } finally {\n setCreating(false);\n }\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconMessages}\n title=\"Chats\"\n detail={`${visibleThreads.length} recent`}\n action={\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNewChat}\n disabled={creating}\n >\n <IconPlus size={14} />\n New\n </Button>\n }\n />\n <div className=\"mt-3 divide-y rounded-md border\">\n {visibleThreads.length > 0 ? (\n visibleThreads.map((thread) => (\n <button\n key={thread.id}\n type=\"button\"\n onClick={() => openThread(thread.id)}\n className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] gap-3 px-3 py-2.5 text-left transition hover:bg-muted/40\"\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {threadTitle(thread)}\n </span>\n <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">\n {thread.preview || `${thread.messageCount} messages`}\n </span>\n </span>\n <span className=\"text-[11px] text-muted-foreground\">\n {timeAgo(threadUpdatedAt(thread))}\n </span>\n </button>\n ))\n ) : (\n <button\n type=\"button\"\n onClick={handleNewChat}\n className=\"block w-full px-3 py-8 text-center text-sm text-muted-foreground transition hover:bg-muted/40\"\n >\n Start a Dispatch chat\n </button>\n )}\n </div>\n </section>\n );\n}\n\nfunction RunsPanel({ taskQueue }: { taskQueue: TaskQueueStats }) {\n const hasFailure = taskQueue.failed_last_hour > 0;\n const hasBacklog =\n taskQueue.pending > 5 || taskQueue.oldest_pending_age_seconds > 300;\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconPlayerPlay}\n title=\"Runs\"\n detail={\n hasFailure\n ? `${taskQueue.failed_last_hour} failed in the last hour`\n : `${taskQueue.processing} processing`\n }\n action={\n <RunsTray\n triggerVariant=\"pill\"\n hideWhenIdle={false}\n showRecent\n limit={8}\n />\n }\n />\n <div className=\"mt-3 grid grid-cols-4 gap-2\">\n <QueueCell label=\"Queued\" value={taskQueue.pending} />\n <QueueCell label=\"Active\" value={taskQueue.processing} />\n <QueueCell label=\"Done 1h\" value={taskQueue.completed_last_hour} />\n <QueueCell\n label=\"Failed 1h\"\n value={taskQueue.failed_last_hour}\n danger={hasFailure}\n />\n </div>\n <div\n className={cn(\n \"mt-3 rounded-md border px-3 py-2 text-xs\",\n hasFailure\n ? \"border-destructive/30 bg-destructive/5 text-destructive\"\n : hasBacklog\n ? \"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300\"\n : \"bg-muted/20 text-muted-foreground\",\n )}\n >\n Oldest queued: {formatAgeSeconds(taskQueue.oldest_pending_age_seconds)}\n </div>\n {taskQueue.recent_failures.length > 0 ? (\n <div className=\"mt-3 divide-y rounded-md border\">\n {taskQueue.recent_failures.slice(0, 3).map((failure) => (\n <div key={failure.id} className=\"px-3 py-2\">\n <div className=\"flex items-center justify-between gap-3 text-xs\">\n <span className=\"font-medium text-foreground\">\n {failure.platform}\n </span>\n <span className=\"text-muted-foreground\">\n {failure.attempts} attempts\n </span>\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {failure.error || \"(no error message)\"}\n </div>\n </div>\n ))}\n </div>\n ) : null}\n </section>\n );\n}\n\nfunction QueueCell({\n label,\n value,\n danger,\n}: {\n label: string;\n value: number;\n danger?: boolean;\n}) {\n return (\n <div className=\"rounded-md border bg-background px-2 py-2\">\n <div\n className={cn(\n \"text-lg font-semibold text-foreground\",\n danger && \"text-destructive\",\n )}\n >\n {formatNumber(value)}\n </div>\n <div className=\"truncate text-[11px] text-muted-foreground\">{label}</div>\n </div>\n );\n}\n\nfunction AppsPanel({\n apps,\n isLoading,\n}: {\n apps: WorkspaceAppSummary[];\n isLoading: boolean;\n}) {\n const visibleApps = apps\n .filter((app) => !app.isDispatch && !app.archived)\n .slice(0, 4);\n const showSkeletons = isLoading && visibleApps.length === 0;\n\n return (\n <section className=\"space-y-3\">\n <SectionHeader\n icon={IconStack3}\n title=\"Projects and apps\"\n detail={`${apps.filter((app) => !app.isDispatch && !app.archived).length} active`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/apps\">\n View all\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n {showSkeletons ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {Array.from({ length: 4 }).map((_, index) => (\n <div key={index} className=\"rounded-lg border bg-card p-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"mt-3 h-3 w-24\" />\n <Skeleton className=\"mt-3 h-3 w-full\" />\n </div>\n ))}\n </div>\n ) : visibleApps.length > 0 ? (\n <div className=\"grid gap-3 md:grid-cols-2\">\n {visibleApps.map((app) => (\n <WorkspaceAppCard key={app.id} app={app} className=\"min-h-32\" />\n ))}\n </div>\n ) : (\n <CreateAppPopover />\n )}\n </section>\n );\n}\n\nfunction AutomationsPanel({\n automations,\n isLoading,\n}: {\n automations: AutomationItem[];\n isLoading: boolean;\n}) {\n const toggleAutomation = useToggleAutomation();\n const ordered = useMemo(\n () =>\n [...automations].sort((a, b) => {\n const aError = a.enabled && a.lastStatus === \"error\" ? 1 : 0;\n const bError = b.enabled && b.lastStatus === \"error\" ? 1 : 0;\n if (aError !== bError) return bError - aError;\n return (b.lastRun || \"\").localeCompare(a.lastRun || \"\");\n }),\n [automations],\n );\n const enabled = automations.filter((item) => item.enabled).length;\n const errors = automations.filter(\n (item) => item.enabled && item.lastStatus === \"error\",\n ).length;\n const pendingToggleIdentity = toggleAutomation.isPending\n ? toggleAutomation.variables\n ? automationIdentity(toggleAutomation.variables)\n : null\n : null;\n\n function handleToggle(item: AutomationItem, enabled: boolean) {\n toggleAutomation.mutate({\n owner: item.owner,\n path: item.path,\n enabled,\n });\n }\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconSettingsAutomation}\n title=\"Automations\"\n detail={`${enabled} enabled · ${errors} errors`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/chat\">\n Create\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 divide-y rounded-md border\">\n {isLoading && ordered.length === 0 ? (\n Array.from({ length: 4 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"mt-2 h-3 w-28\" />\n </div>\n ))\n ) : ordered.length > 0 ? (\n ordered.slice(0, 6).map((item) => {\n const status = automationStatus(item);\n const canUpdate = item.canUpdate !== false;\n const isToggling =\n pendingToggleIdentity === automationIdentity(item);\n return (\n <div\n key={item.id}\n className=\"grid grid-cols-[minmax(0,1fr)_auto] gap-3 px-3 py-2.5\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <StatusDot tone={status.tone} />\n <span className=\"truncate text-sm font-medium text-foreground\">\n {item.name}\n </span>\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {automationTarget(item)}\n </div>\n <div className=\"mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground\">\n <span title={dateTimeTitle(item.lastRun)}>\n Last {automationLastRun(item)}\n </span>\n <span title={dateTimeTitle(item.nextRun)}>\n Next {automationNextRun(item)}\n </span>\n </div>\n {item.lastError ? (\n <div className=\"mt-1 truncate text-xs text-destructive\">\n {item.lastError}\n </div>\n ) : null}\n </div>\n <div className=\"flex flex-col items-end gap-1\">\n <Badge\n variant={\n status.tone === \"danger\" ? \"destructive\" : \"outline\"\n }\n className=\"h-5\"\n >\n {status.label}\n </Badge>\n <Switch\n checked={!!item.enabled}\n disabled={!canUpdate || isToggling}\n aria-label={`${item.enabled ? \"Disable\" : \"Enable\"} automation ${item.name}`}\n onCheckedChange={(checked) => handleToggle(item, checked)}\n />\n </div>\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No automations yet\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction AgentsPanelSummary({ agents }: { agents: ConnectedAgent[] }) {\n const builtin = agents.filter((agent) => agent.source === \"builtin\");\n const extra = agents.filter((agent) => agent.source !== \"builtin\");\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconPlugConnected}\n title=\"Agents\"\n detail={`${builtin.length} built in · ${extra.length} added`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/agents\">\n Manage\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {agents.slice(0, 12).map((agent) => (\n <span\n key={agent.id}\n className=\"inline-flex max-w-full items-center gap-2 rounded-md border bg-background px-2.5 py-1.5 text-xs text-muted-foreground\"\n >\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: agent.color || \"hsl(var(--primary))\" }}\n />\n <span className=\"truncate\">{agent.name}</span>\n </span>\n ))}\n {agents.length === 0 ? (\n <div className=\"w-full rounded-md border border-dashed px-3 py-6 text-center text-sm text-muted-foreground\">\n No agents detected\n </div>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction ApprovalsAndAuditPanel({\n overview,\n isLoading,\n}: {\n overview?: DispatchOverview;\n isLoading: boolean;\n}) {\n const approvals = overview?.recentApprovals ?? [];\n const audit = overview?.recentAudit ?? [];\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader\n icon={IconActivity}\n title=\"Activity\"\n detail={`${approvals.length} approvals · ${audit.length} audit rows`}\n action={\n <Button variant=\"outline\" size=\"sm\" asChild>\n <Link to=\"/audit\">\n Audit\n <IconArrowUpRight size={14} />\n </Link>\n </Button>\n }\n />\n <div className=\"mt-3 grid gap-3 lg:grid-cols-2\">\n <div className=\"rounded-md border\">\n <div className=\"flex items-center justify-between gap-3 border-b px-3 py-2\">\n <div className=\"text-xs font-medium uppercase text-muted-foreground\">\n Approvals\n </div>\n <Button variant=\"ghost\" size=\"sm\" asChild>\n <Link to=\"/approvals\">Open</Link>\n </Button>\n </div>\n <div className=\"divide-y\">\n {isLoading && approvals.length === 0 ? (\n Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"mt-2 h-3 w-24\" />\n </div>\n ))\n ) : approvals.length > 0 ? (\n approvals.slice(0, 4).map((approval) => (\n <div key={approval.id} className=\"px-3 py-2.5\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {approval.summary}\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <StatusDot\n tone={approval.status === \"pending\" ? \"warning\" : \"muted\"}\n />\n <span>{approval.status}</span>\n </div>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No approval requests\n </div>\n )}\n </div>\n </div>\n\n <div className=\"rounded-md border\">\n <div className=\"border-b px-3 py-2 text-xs font-medium uppercase text-muted-foreground\">\n Recent audit\n </div>\n <div className=\"divide-y\">\n {isLoading && audit.length === 0 ? (\n Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"px-3 py-2.5\">\n <Skeleton className=\"h-4 w-44\" />\n <Skeleton className=\"mt-2 h-3 w-28\" />\n </div>\n ))\n ) : audit.length > 0 ? (\n audit.slice(0, 4).map((event) => (\n <div key={event.id} className=\"px-3 py-2.5\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {event.summary}\n </div>\n <div className=\"mt-1 truncate text-xs text-muted-foreground\">\n {event.actor} · {timeAgo(event.createdAt)}\n </div>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No audit entries\n </div>\n )}\n </div>\n </div>\n </div>\n </section>\n );\n}\n\nfunction ReadinessPanel({\n overview,\n apps,\n agents,\n automations,\n}: {\n overview?: DispatchOverview;\n apps: WorkspaceAppSummary[];\n agents: ConnectedAgent[];\n automations: AutomationItem[];\n}) {\n const rows = [\n {\n label: \"Vault\",\n detail:\n (overview?.vault?.secretCount ?? 0) > 0\n ? `${overview?.vault?.secretCount ?? 0} secrets`\n : \"no secrets\",\n ok: (overview?.vault?.secretCount ?? 0) > 0,\n to: \"/vault\",\n icon: IconShieldCheck,\n },\n {\n label: \"Apps\",\n detail: `${apps.filter((app) => !app.isDispatch && !app.archived).length} active`,\n ok: apps.some((app) => !app.isDispatch && !app.archived),\n to: \"/apps\",\n icon: IconRocket,\n },\n {\n label: \"Agents\",\n detail: `${agents.length} available`,\n ok: agents.length > 0,\n to: \"/agents\",\n icon: IconRobot,\n },\n {\n label: \"Automations\",\n detail: `${automations.filter((item) => item.enabled).length} enabled`,\n ok: automations.every(\n (item) => !item.enabled || item.lastStatus !== \"error\",\n ),\n to: \"/chat\",\n icon: IconBolt,\n },\n {\n label: \"Team\",\n detail: `${overview?.counts?.linkedIdentities ?? 0} linked identities`,\n ok: (overview?.counts?.linkedIdentities ?? 0) > 0,\n to: \"/team\",\n icon: IconUsersGroup,\n },\n ];\n\n return (\n <section className=\"rounded-lg border bg-card p-4\">\n <SectionHeader icon={IconListCheck} title=\"Readiness\" />\n <div className=\"mt-3 divide-y rounded-md border\">\n {rows.map((row) => {\n const Icon = row.icon;\n return (\n <Link\n key={row.label}\n to={row.to}\n className=\"flex items-center gap-3 px-3 py-2.5 transition hover:bg-muted/40\"\n >\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md border\",\n row.ok\n ? \"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\"\n : \"bg-background text-muted-foreground\",\n )}\n >\n {row.ok ? <IconCheck size={14} /> : <Icon size={14} />}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {row.label}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {row.detail}\n </span>\n </span>\n <IconArrowUpRight size={14} className=\"text-muted-foreground\" />\n </Link>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function DispatchControlPlane() {\n const { data: overviewData, isLoading: overviewLoading } =\n useActionQuery<DispatchOverview>(\"list-dispatch-overview\", {});\n const { data: connectedAgents = [] } = useActionQuery<ConnectedAgent[]>(\n \"list-connected-agents\",\n {},\n );\n const { data: workspaceApps = [], isLoading: appsLoading } = useActionQuery<\n WorkspaceAppSummary[]\n >(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n { refetchInterval: 2_000 },\n );\n const { threads } = useChatThreads(undefined, undefined, undefined, {\n autoCreate: false,\n });\n const automationsQuery = useAutomationsStatus();\n const taskQueueQuery = useTaskQueueStats();\n\n const overview = overviewData;\n const apps = workspaceApps ?? [];\n const agents = connectedAgents ?? [];\n const automations = automationsQuery.data ?? [];\n const taskQueue = taskQueueQuery.data ?? ZERO_TASK_QUEUE_STATS;\n const visibleThreads = threads.filter((thread) => thread.messageCount > 0);\n\n useEffect(() => {\n const handleRunning = () => {\n void taskQueueQuery.refetch();\n };\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n return () => {\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n };\n }, [taskQueueQuery]);\n\n return (\n <DispatchShell\n title=\"Control plane\"\n description=\"Dispatch is the workspace shell for chats, runs, apps, agents, automations, approvals, and resources.\"\n >\n <div className=\"space-y-6\">\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.08fr)_minmax(360px,0.92fr)]\">\n <CommandPanel />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <MetricCard\n label=\"Vault\"\n value={formatNumber(overview?.vault?.secretCount ?? 0)}\n detail={`${formatNumber(overview?.vault?.activeGrantCount ?? 0)} active grants`}\n icon={IconShieldCheck}\n to=\"/vault\"\n tone={\n (overview?.vault?.secretCount ?? 0) > 0 ? \"success\" : \"default\"\n }\n />\n <MetricCard\n label=\"Resources\"\n value={formatNumber(overview?.counts?.destinations ?? 0)}\n detail=\"destinations\"\n icon={IconArrowUpRight}\n to=\"/destinations\"\n />\n </div>\n </div>\n\n <ControlPlaneMetrics\n overview={overview}\n apps={apps}\n agents={agents}\n automations={automations}\n threads={visibleThreads}\n taskQueue={taskQueue}\n />\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.15fr)_minmax(340px,0.85fr)]\">\n <div className=\"space-y-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <RecentChatsPanel />\n <RunsPanel taskQueue={taskQueue} />\n </div>\n <AppsPanel apps={apps} isLoading={appsLoading} />\n <ApprovalsAndAuditPanel\n overview={overview}\n isLoading={overviewLoading}\n />\n </div>\n\n <div className=\"space-y-4\">\n <AutomationsPanel\n automations={automations}\n isLoading={automationsQuery.isLoading}\n />\n <AgentsPanelSummary agents={agents} />\n <ReadinessPanel\n overview={overview}\n apps={apps}\n agents={agents}\n automations={automations}\n />\n {taskQueue.failed_last_hour > 0 ? (\n <div className=\"rounded-lg border border-destructive/30 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"flex items-center gap-2 font-medium\">\n <IconAlertTriangle size={16} />\n Integration failures detected\n </div>\n <div className=\"mt-1 text-xs\">\n Check credentials, destinations, and recent queue errors.\n </div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </DispatchShell>\n );\n}\n"]}
@@ -9,5 +9,5 @@ export declare function DispatchShell({ title, description, children, }: {
9
9
  title: string;
10
10
  description?: string;
11
11
  children: ReactNode;
12
- }): import("react/jsx-runtime").JSX.Element;
12
+ }): import("node_modules/@types/react").JSX.Element;
13
13
  //# sourceMappingURL=dispatch-shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CA+BA"}
1
+ {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,mDA+BA"}
@@ -1,8 +1,8 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Popover, PopoverContent, PopoverTrigger, } from "../components/ui/popover.js";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
2
  import { useT } from "@agent-native/core/client";
4
3
  import { IconInfoCircle } from "@tabler/icons-react";
5
4
  import { useSetPageTitle } from "../components/layout/HeaderActions.js";
5
+ import { Popover, PopoverContent, PopoverTrigger, } from "../components/ui/popover.js";
6
6
  /**
7
7
  * DispatchShell renders the per-page title (with an optional click-to-open
8
8
  * description popover) into the global header via the HeaderActions store.
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { type ReactNode } from \"react\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { useT } from \"@agent-native/core/client\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { useSetPageTitle } from \"@/components/layout/HeaderActions\";\n\n/**\n * DispatchShell renders the per-page title (with an optional click-to-open\n * description popover) into the global header via the HeaderActions store.\n * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)\n * is provided by `Layout` mounted in `root.tsx`.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { useT } from \"@agent-native/core/client\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { type ReactNode } from \"react\";\n\nimport { useSetPageTitle } from \"@/components/layout/HeaderActions\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\n\n/**\n * DispatchShell renders the per-page title (with an optional click-to-open\n * description popover) into the global header via the HeaderActions store.\n * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)\n * is provided by `Layout` mounted in `root.tsx`.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export declare function Header({ onOpenMobile, showAgentToggle, }: {
2
2
  onOpenMobile?: () => void;
3
3
  showAgentToggle?: boolean;
4
- }): import("react/jsx-runtime").JSX.Element;
4
+ }): import("node_modules/@types/react").JSX.Element;
5
5
  //# sourceMappingURL=Header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,MAAM,CAAC,EACrB,YAAY,EACZ,eAAsB,GACvB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,2CAsDA"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"AAiCA,wBAAgB,MAAM,CAAC,EACrB,YAAY,EACZ,eAAsB,GACvB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,mDAsDA"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useLocation, useNavigate } from "react-router";
3
- import { useHeaderTitle, useHeaderActions } from "./HeaderActions.js";
4
2
  import { AgentToggleButton, LanguagePicker } from "@agent-native/core/client";
5
3
  import { RunsTray } from "@agent-native/core/client/progress";
6
- import { Button } from "../../components/ui/button.js";
7
4
  import { IconLayoutSidebar } from "@tabler/icons-react";
5
+ import { useLocation, useNavigate } from "react-router";
6
+ import { Button } from "../../components/ui/button.js";
7
+ import { useHeaderTitle, useHeaderActions } from "./HeaderActions.js";
8
8
  const pageTitles = {
9
9
  "/": "Overview",
10
10
  "/overview": "Overview",
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,GAA2B;IACzC,GAAG,EAAE,UAAU;IACf,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,OAAO;IACjB,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,QAAQ;IACnB,eAAe,EAAE,cAAc;IAC/B,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,WAAW;IACzB,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEtD,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,YAAY,CAAC;IAE5D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,YAAY,EACZ,eAAe,GAAG,IAAI,GAIvB;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,SAAS,aAAa,CAAC,QAAgB;QACrC,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE;gBACL,cAAc,EAAE;oBACd,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE;oBAC/B,QAAQ;iBACT;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,wBAAwB,EAAE;gBACxC,MAAM,EAAE,EAAE,QAAQ,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CACL,kBAAQ,SAAS,EAAC,yFAAyF,aACxG,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,kCAAkC,EAC5C,OAAO,EAAE,YAAY,gBACV,iBAAiB,YAE5B,KAAC,iBAAiB,KAAG,GACd,CACV,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,wCAAwC,YACpD,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,+CAA+C,YAC1D,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAC7B,CACN,GACG,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,OAAO,EACR,KAAC,cAAc,IAAC,OAAO,EAAC,MAAM,GAAG,EACjC,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,GAAI,EAClD,eAAe,CAAC,CAAC,CAAC,CACjB,KAAC,iBAAiB,IAAC,SAAS,EAAC,oCAAoC,GAAG,CACrE,CAAC,CAAC,CAAC,IAAI,IACJ,IACC,CACV,CAAC;AACJ,CAAC","sourcesContent":["import { useLocation, useNavigate } from \"react-router\";\nimport { useHeaderTitle, useHeaderActions } from \"./HeaderActions\";\nimport { AgentToggleButton, LanguagePicker } from \"@agent-native/core/client\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport { Button } from \"@/components/ui/button\";\nimport { IconLayoutSidebar } from \"@tabler/icons-react\";\n\nconst pageTitles: Record<string, string> = {\n \"/\": \"Overview\",\n \"/overview\": \"Overview\",\n \"/vault\": \"Vault\",\n \"/integrations\": \"Integrations\",\n \"/workspace\": \"Resources\",\n \"/messaging\": \"Messaging\",\n \"/agents\": \"Agents\",\n \"/destinations\": \"Destinations\",\n \"/identities\": \"Identities\",\n \"/approvals\": \"Approvals\",\n \"/audit\": \"Audit\",\n \"/settings\": \"Settings\",\n \"/team\": \"Team\",\n};\n\nfunction resolveTitle(pathname: string): string {\n if (pageTitles[pathname]) return pageTitles[pathname];\n\n if (pathname.startsWith(\"/extensions\")) return \"Extensions\";\n\n return \"Dispatch\";\n}\n\nexport function Header({\n onOpenMobile,\n showAgentToggle = true,\n}: {\n onOpenMobile?: () => void;\n showAgentToggle?: boolean;\n}) {\n const location = useLocation();\n const navigate = useNavigate();\n const title = useHeaderTitle();\n const actions = useHeaderActions();\n\n function openRunThread(threadId: string) {\n navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId },\n }),\n );\n });\n }\n\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6\">\n {onOpenMobile ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 lg:hidden cursor-pointer\"\n onClick={onOpenMobile}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar />\n </Button>\n ) : null}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {title ?? (\n <h1 className=\"text-lg font-semibold tracking-tight truncate\">\n {resolveTitle(location.pathname)}\n </h1>\n )}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n <LanguagePicker variant=\"icon\" />\n <RunsTray limit={8} onOpenThread={openRunThread} />\n {showAgentToggle ? (\n <AgentToggleButton className=\"h-8 w-8 rounded-md hover:bg-accent\" />\n ) : null}\n </div>\n </header>\n );\n}\n"]}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,UAAU,GAA2B;IACzC,GAAG,EAAE,UAAU;IACf,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,OAAO;IACjB,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,QAAQ;IACnB,eAAe,EAAE,cAAc;IAC/B,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,WAAW;IACzB,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEtD,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,YAAY,CAAC;IAE5D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,YAAY,EACZ,eAAe,GAAG,IAAI,GAIvB;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,SAAS,aAAa,CAAC,QAAgB;QACrC,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE;gBACL,cAAc,EAAE;oBACd,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE;oBAC/B,QAAQ;iBACT;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,wBAAwB,EAAE;gBACxC,MAAM,EAAE,EAAE,QAAQ,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CACL,kBAAQ,SAAS,EAAC,yFAAyF,aACxG,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,kCAAkC,EAC5C,OAAO,EAAE,YAAY,gBACV,iBAAiB,YAE5B,KAAC,iBAAiB,KAAG,GACd,CACV,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,wCAAwC,YACpD,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,+CAA+C,YAC1D,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAC7B,CACN,GACG,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,OAAO,EACR,KAAC,cAAc,IAAC,OAAO,EAAC,MAAM,GAAG,EACjC,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,GAAI,EAClD,eAAe,CAAC,CAAC,CAAC,CACjB,KAAC,iBAAiB,IAAC,SAAS,EAAC,oCAAoC,GAAG,CACrE,CAAC,CAAC,CAAC,IAAI,IACJ,IACC,CACV,CAAC;AACJ,CAAC","sourcesContent":["import { AgentToggleButton, LanguagePicker } from \"@agent-native/core/client\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport { IconLayoutSidebar } from \"@tabler/icons-react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { Button } from \"@/components/ui/button\";\n\nimport { useHeaderTitle, useHeaderActions } from \"./HeaderActions\";\n\nconst pageTitles: Record<string, string> = {\n \"/\": \"Overview\",\n \"/overview\": \"Overview\",\n \"/vault\": \"Vault\",\n \"/integrations\": \"Integrations\",\n \"/workspace\": \"Resources\",\n \"/messaging\": \"Messaging\",\n \"/agents\": \"Agents\",\n \"/destinations\": \"Destinations\",\n \"/identities\": \"Identities\",\n \"/approvals\": \"Approvals\",\n \"/audit\": \"Audit\",\n \"/settings\": \"Settings\",\n \"/team\": \"Team\",\n};\n\nfunction resolveTitle(pathname: string): string {\n if (pageTitles[pathname]) return pageTitles[pathname];\n\n if (pathname.startsWith(\"/extensions\")) return \"Extensions\";\n\n return \"Dispatch\";\n}\n\nexport function Header({\n onOpenMobile,\n showAgentToggle = true,\n}: {\n onOpenMobile?: () => void;\n showAgentToggle?: boolean;\n}) {\n const location = useLocation();\n const navigate = useNavigate();\n const title = useHeaderTitle();\n const actions = useHeaderActions();\n\n function openRunThread(threadId: string) {\n navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId },\n }),\n );\n });\n }\n\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6\">\n {onOpenMobile ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 lg:hidden cursor-pointer\"\n onClick={onOpenMobile}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar />\n </Button>\n ) : null}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {title ?? (\n <h1 className=\"text-lg font-semibold tracking-tight truncate\">\n {resolveTitle(location.pathname)}\n </h1>\n )}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n <LanguagePicker variant=\"icon\" />\n <RunsTray limit={8} onOpenThread={openRunThread} />\n {showAgentToggle ? (\n <AgentToggleButton className=\"h-8 w-8 rounded-md hover:bg-accent\" />\n ) : null}\n </div>\n </header>\n );\n}\n"]}
@@ -25,9 +25,9 @@ export interface DispatchExtensionConfig {
25
25
  export declare function NavContent({ onNavigate, extensions, }: {
26
26
  onNavigate?: () => void;
27
27
  extensions?: DispatchExtensionConfig;
28
- }): import("react/jsx-runtime").JSX.Element;
28
+ }): import("node_modules/@types/react").JSX.Element;
29
29
  export declare function Layout({ children, extensions, }: {
30
30
  children: ReactNode;
31
31
  extensions?: DispatchExtensionConfig;
32
- }): import("react/jsx-runtime").JSX.Element;
32
+ }): import("node_modules/@types/react").JSX.Element;
33
33
  //# sourceMappingURL=Layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAgEf,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,mFAAmF;IACnF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gEAAgE;IAChE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAieD,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,UAAU,GACX,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC,2CA0JA;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC,2CAyGA"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"AAwCA,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA0Bf,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,mFAAmF;IACnF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gEAAgE;IAChE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAieD,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,UAAU,GACX,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC,mDA0JA;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC,mDAyGA"}
@@ -1,15 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useMemo, useRef, useState, } from "react";
3
- import { NavLink, useLocation, useNavigate } from "react-router";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
2
  import { AgentSidebar, FeedbackButton, appBasePath, appPath, focusAgentChat, navigateWithAgentChatViewTransition, useActionQuery, useAgentChatHomeHandoff, useAgentChatHomeHandoffLinks, useChatThreads, useFormatters, useT, } from "@agent-native/core/client";
5
3
  import { ExtensionsSidebarSection } from "@agent-native/core/client/extensions";
6
4
  import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
7
5
  import { IconArrowUpRight, IconApps, IconBrain, IconChartBar, IconBrandTelegram, IconKey, IconChevronDown, IconDots, IconEdit, IconLayersSubtract, IconMessageQuestion, IconMessages, IconPlus, IconPlugConnected, IconBroadcast, IconFingerprint, IconHistory, IconPuzzle, IconSettings, IconShieldCheck, IconUsersGroup, } from "@tabler/icons-react";
8
- import { cn } from "../../lib/utils.js";
6
+ import { useEffect, useMemo, useRef, useState, } from "react";
7
+ import { NavLink, useLocation, useNavigate } from "react-router";
9
8
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../../components/ui/dropdown-menu.js";
10
9
  import { Input } from "../../components/ui/input.js";
11
10
  import { Sheet, SheetContent, SheetDescription, SheetTitle, } from "../../components/ui/sheet.js";
12
11
  import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip.js";
12
+ import { cn } from "../../lib/utils.js";
13
13
  import { Header } from "./Header.js";
14
14
  import { HeaderActionsProvider } from "./HeaderActions.js";
15
15
  const PRIMARY_NAV_ITEMS = [