@agent-native/dispatch 0.0.0-beta-20260819155526

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 (1482) hide show
  1. package/README.md +146 -0
  2. package/dist/actions/apply-dream-proposal.d.ts +29 -0
  3. package/dist/actions/apply-dream-proposal.d.ts.map +1 -0
  4. package/dist/actions/apply-dream-proposal.js +11 -0
  5. package/dist/actions/apply-dream-proposal.js.map +1 -0
  6. package/dist/actions/approve-dispatch-change.d.ts +22 -0
  7. package/dist/actions/approve-dispatch-change.d.ts.map +1 -0
  8. package/dist/actions/approve-dispatch-change.js +11 -0
  9. package/dist/actions/approve-dispatch-change.js.map +1 -0
  10. package/dist/actions/approve-vault-request.d.ts +20 -0
  11. package/dist/actions/approve-vault-request.d.ts.map +1 -0
  12. package/dist/actions/approve-vault-request.js +16 -0
  13. package/dist/actions/approve-vault-request.js.map +1 -0
  14. package/dist/actions/archive-workspace-app.d.ts +7 -0
  15. package/dist/actions/archive-workspace-app.d.ts.map +1 -0
  16. package/dist/actions/archive-workspace-app.js +15 -0
  17. package/dist/actions/archive-workspace-app.js.map +1 -0
  18. package/dist/actions/ask_app.d.ts +29 -0
  19. package/dist/actions/ask_app.d.ts.map +1 -0
  20. package/dist/actions/ask_app.js +23 -0
  21. package/dist/actions/ask_app.js.map +1 -0
  22. package/dist/actions/ask_app_status.d.ts +27 -0
  23. package/dist/actions/ask_app_status.d.ts.map +1 -0
  24. package/dist/actions/ask_app_status.js +14 -0
  25. package/dist/actions/ask_app_status.js.map +1 -0
  26. package/dist/actions/connect-external-agent.d.ts +18 -0
  27. package/dist/actions/connect-external-agent.d.ts.map +1 -0
  28. package/dist/actions/connect-external-agent.js +68 -0
  29. package/dist/actions/connect-external-agent.js.map +1 -0
  30. package/dist/actions/create-browser-chat-session.d.ts +15 -0
  31. package/dist/actions/create-browser-chat-session.d.ts.map +1 -0
  32. package/dist/actions/create-browser-chat-session.js +75 -0
  33. package/dist/actions/create-browser-chat-session.js.map +1 -0
  34. package/dist/actions/create-dream-report.d.ts +59 -0
  35. package/dist/actions/create-dream-report.d.ts.map +1 -0
  36. package/dist/actions/create-dream-report.js +67 -0
  37. package/dist/actions/create-dream-report.js.map +1 -0
  38. package/dist/actions/create-link-token.d.ts +10 -0
  39. package/dist/actions/create-link-token.d.ts.map +1 -0
  40. package/dist/actions/create-link-token.js +11 -0
  41. package/dist/actions/create-link-token.js.map +1 -0
  42. package/dist/actions/create-pylon-ticket.d.ts +17 -0
  43. package/dist/actions/create-pylon-ticket.d.ts.map +1 -0
  44. package/dist/actions/create-pylon-ticket.js +95 -0
  45. package/dist/actions/create-pylon-ticket.js.map +1 -0
  46. package/dist/actions/create-vault-grant.d.ts +17 -0
  47. package/dist/actions/create-vault-grant.d.ts.map +1 -0
  48. package/dist/actions/create-vault-grant.js +14 -0
  49. package/dist/actions/create-vault-grant.js.map +1 -0
  50. package/dist/actions/create-vault-secret.d.ts +21 -0
  51. package/dist/actions/create-vault-secret.d.ts.map +1 -0
  52. package/dist/actions/create-vault-secret.js +26 -0
  53. package/dist/actions/create-vault-secret.js.map +1 -0
  54. package/dist/actions/create-workspace-resource-grant.d.ts +16 -0
  55. package/dist/actions/create-workspace-resource-grant.d.ts.map +1 -0
  56. package/dist/actions/create-workspace-resource-grant.js +14 -0
  57. package/dist/actions/create-workspace-resource-grant.js.map +1 -0
  58. package/dist/actions/create-workspace-resource.d.ts +40 -0
  59. package/dist/actions/create-workspace-resource.d.ts.map +1 -0
  60. package/dist/actions/create-workspace-resource.js +29 -0
  61. package/dist/actions/create-workspace-resource.js.map +1 -0
  62. package/dist/actions/create_embed_session.d.ts +13 -0
  63. package/dist/actions/create_embed_session.d.ts.map +1 -0
  64. package/dist/actions/create_embed_session.js +28 -0
  65. package/dist/actions/create_embed_session.js.map +1 -0
  66. package/dist/actions/create_workspace_app_embed_session.d.ts +19 -0
  67. package/dist/actions/create_workspace_app_embed_session.d.ts.map +1 -0
  68. package/dist/actions/create_workspace_app_embed_session.js +89 -0
  69. package/dist/actions/create_workspace_app_embed_session.js.map +1 -0
  70. package/dist/actions/delete-destination.d.ts +34 -0
  71. package/dist/actions/delete-destination.d.ts.map +1 -0
  72. package/dist/actions/delete-destination.js +11 -0
  73. package/dist/actions/delete-destination.js.map +1 -0
  74. package/dist/actions/delete-staged-dataset.d.ts +10 -0
  75. package/dist/actions/delete-staged-dataset.d.ts.map +1 -0
  76. package/dist/actions/delete-staged-dataset.js +8 -0
  77. package/dist/actions/delete-staged-dataset.js.map +1 -0
  78. package/dist/actions/delete-vault-secret.d.ts +17 -0
  79. package/dist/actions/delete-vault-secret.d.ts.map +1 -0
  80. package/dist/actions/delete-vault-secret.js +11 -0
  81. package/dist/actions/delete-vault-secret.js.map +1 -0
  82. package/dist/actions/delete-workspace-resource.d.ts +35 -0
  83. package/dist/actions/delete-workspace-resource.d.ts.map +1 -0
  84. package/dist/actions/delete-workspace-resource.js +11 -0
  85. package/dist/actions/delete-workspace-resource.js.map +1 -0
  86. package/dist/actions/deny-vault-request.d.ts +19 -0
  87. package/dist/actions/deny-vault-request.d.ts.map +1 -0
  88. package/dist/actions/deny-vault-request.js +12 -0
  89. package/dist/actions/deny-vault-request.js.map +1 -0
  90. package/dist/actions/ensure-dream-job.d.ts +33 -0
  91. package/dist/actions/ensure-dream-job.d.ts.map +1 -0
  92. package/dist/actions/ensure-dream-job.js +73 -0
  93. package/dist/actions/ensure-dream-job.js.map +1 -0
  94. package/dist/actions/get-agent-thread-debug.d.ts +72 -0
  95. package/dist/actions/get-agent-thread-debug.d.ts.map +1 -0
  96. package/dist/actions/get-agent-thread-debug.js +37 -0
  97. package/dist/actions/get-agent-thread-debug.js.map +1 -0
  98. package/dist/actions/get-app-creation-settings.d.ts +3 -0
  99. package/dist/actions/get-app-creation-settings.d.ts.map +1 -0
  100. package/dist/actions/get-app-creation-settings.js +10 -0
  101. package/dist/actions/get-app-creation-settings.js.map +1 -0
  102. package/dist/actions/get-dispatch-settings.d.ts +3 -0
  103. package/dist/actions/get-dispatch-settings.d.ts.map +1 -0
  104. package/dist/actions/get-dispatch-settings.js +10 -0
  105. package/dist/actions/get-dispatch-settings.js.map +1 -0
  106. package/dist/actions/get-dream-settings.d.ts +3 -0
  107. package/dist/actions/get-dream-settings.d.ts.map +1 -0
  108. package/dist/actions/get-dream-settings.js +11 -0
  109. package/dist/actions/get-dream-settings.js.map +1 -0
  110. package/dist/actions/get-dream.d.ts +48 -0
  111. package/dist/actions/get-dream.d.ts.map +1 -0
  112. package/dist/actions/get-dream.js +13 -0
  113. package/dist/actions/get-dream.js.map +1 -0
  114. package/dist/actions/get-vault-access-settings.d.ts +3 -0
  115. package/dist/actions/get-vault-access-settings.d.ts.map +1 -0
  116. package/dist/actions/get-vault-access-settings.js +10 -0
  117. package/dist/actions/get-vault-access-settings.js.map +1 -0
  118. package/dist/actions/get-workspace-info.d.ts +3 -0
  119. package/dist/actions/get-workspace-info.d.ts.map +1 -0
  120. package/dist/actions/get-workspace-info.js +10 -0
  121. package/dist/actions/get-workspace-info.js.map +1 -0
  122. package/dist/actions/get-workspace-resource-effective-context.d.ts +8 -0
  123. package/dist/actions/get-workspace-resource-effective-context.d.ts.map +1 -0
  124. package/dist/actions/get-workspace-resource-effective-context.js +27 -0
  125. package/dist/actions/get-workspace-resource-effective-context.js.map +1 -0
  126. package/dist/actions/grant-vault-secrets-to-app.d.ts +27 -0
  127. package/dist/actions/grant-vault-secrets-to-app.d.ts.map +1 -0
  128. package/dist/actions/grant-vault-secrets-to-app.js +19 -0
  129. package/dist/actions/grant-vault-secrets-to-app.js.map +1 -0
  130. package/dist/actions/grant-workspace-resources-to-app.d.ts +17 -0
  131. package/dist/actions/grant-workspace-resources-to-app.d.ts.map +1 -0
  132. package/dist/actions/grant-workspace-resources-to-app.js +15 -0
  133. package/dist/actions/grant-workspace-resources-to-app.js.map +1 -0
  134. package/dist/actions/import-agent-pack.d.ts +96 -0
  135. package/dist/actions/import-agent-pack.d.ts.map +1 -0
  136. package/dist/actions/import-agent-pack.js +116 -0
  137. package/dist/actions/import-agent-pack.js.map +1 -0
  138. package/dist/actions/import-agent.d.ts +60 -0
  139. package/dist/actions/import-agent.d.ts.map +1 -0
  140. package/dist/actions/import-agent.js +82 -0
  141. package/dist/actions/import-agent.js.map +1 -0
  142. package/dist/actions/index.d.ts +9 -0
  143. package/dist/actions/index.d.ts.map +1 -0
  144. package/dist/actions/index.js +207 -0
  145. package/dist/actions/index.js.map +1 -0
  146. package/dist/actions/list-agent-pack.d.ts +36 -0
  147. package/dist/actions/list-agent-pack.d.ts.map +1 -0
  148. package/dist/actions/list-agent-pack.js +32 -0
  149. package/dist/actions/list-agent-pack.js.map +1 -0
  150. package/dist/actions/list-agent-run-failures.d.ts +65 -0
  151. package/dist/actions/list-agent-run-failures.d.ts.map +1 -0
  152. package/dist/actions/list-agent-run-failures.js +42 -0
  153. package/dist/actions/list-agent-run-failures.js.map +1 -0
  154. package/dist/actions/list-agent-thread-sources.d.ts +9 -0
  155. package/dist/actions/list-agent-thread-sources.d.ts.map +1 -0
  156. package/dist/actions/list-agent-thread-sources.js +11 -0
  157. package/dist/actions/list-agent-thread-sources.js.map +1 -0
  158. package/dist/actions/list-available-workspace-templates.d.ts +3 -0
  159. package/dist/actions/list-available-workspace-templates.d.ts.map +1 -0
  160. package/dist/actions/list-available-workspace-templates.js +10 -0
  161. package/dist/actions/list-available-workspace-templates.js.map +1 -0
  162. package/dist/actions/list-connected-agents.d.ts +14 -0
  163. package/dist/actions/list-connected-agents.d.ts.map +1 -0
  164. package/dist/actions/list-connected-agents.js +87 -0
  165. package/dist/actions/list-connected-agents.js.map +1 -0
  166. package/dist/actions/list-curated-workspace-templates.d.ts +3 -0
  167. package/dist/actions/list-curated-workspace-templates.d.ts.map +1 -0
  168. package/dist/actions/list-curated-workspace-templates.js +10 -0
  169. package/dist/actions/list-curated-workspace-templates.js.map +1 -0
  170. package/dist/actions/list-destinations.d.ts +15 -0
  171. package/dist/actions/list-destinations.d.ts.map +1 -0
  172. package/dist/actions/list-destinations.js +10 -0
  173. package/dist/actions/list-destinations.js.map +1 -0
  174. package/dist/actions/list-dispatch-approvals.d.ts +20 -0
  175. package/dist/actions/list-dispatch-approvals.d.ts.map +1 -0
  176. package/dist/actions/list-dispatch-approvals.js +10 -0
  177. package/dist/actions/list-dispatch-approvals.js.map +1 -0
  178. package/dist/actions/list-dispatch-audit.d.ts +16 -0
  179. package/dist/actions/list-dispatch-audit.d.ts.map +1 -0
  180. package/dist/actions/list-dispatch-audit.js +12 -0
  181. package/dist/actions/list-dispatch-audit.js.map +1 -0
  182. package/dist/actions/list-dispatch-overview.d.ts +61 -0
  183. package/dist/actions/list-dispatch-overview.d.ts.map +1 -0
  184. package/dist/actions/list-dispatch-overview.js +17 -0
  185. package/dist/actions/list-dispatch-overview.js.map +1 -0
  186. package/dist/actions/list-dispatch-usage-metrics.d.ts +7 -0
  187. package/dist/actions/list-dispatch-usage-metrics.d.ts.map +1 -0
  188. package/dist/actions/list-dispatch-usage-metrics.js +28 -0
  189. package/dist/actions/list-dispatch-usage-metrics.js.map +1 -0
  190. package/dist/actions/list-dream-candidates.d.ts +24 -0
  191. package/dist/actions/list-dream-candidates.d.ts.map +1 -0
  192. package/dist/actions/list-dream-candidates.js +68 -0
  193. package/dist/actions/list-dream-candidates.js.map +1 -0
  194. package/dist/actions/list-dreams.d.ts +29 -0
  195. package/dist/actions/list-dreams.d.ts.map +1 -0
  196. package/dist/actions/list-dreams.js +17 -0
  197. package/dist/actions/list-dreams.js.map +1 -0
  198. package/dist/actions/list-integrations-catalog.d.ts +3 -0
  199. package/dist/actions/list-integrations-catalog.d.ts.map +1 -0
  200. package/dist/actions/list-integrations-catalog.js +10 -0
  201. package/dist/actions/list-integrations-catalog.js.map +1 -0
  202. package/dist/actions/list-linked-identities.d.ts +29 -0
  203. package/dist/actions/list-linked-identities.d.ts.map +1 -0
  204. package/dist/actions/list-linked-identities.js +10 -0
  205. package/dist/actions/list-linked-identities.js.map +1 -0
  206. package/dist/actions/list-mcp-app-access.d.ts +14 -0
  207. package/dist/actions/list-mcp-app-access.d.ts.map +1 -0
  208. package/dist/actions/list-mcp-app-access.js +25 -0
  209. package/dist/actions/list-mcp-app-access.js.map +1 -0
  210. package/dist/actions/list-staged-datasets.d.ts +13 -0
  211. package/dist/actions/list-staged-datasets.d.ts.map +1 -0
  212. package/dist/actions/list-staged-datasets.js +8 -0
  213. package/dist/actions/list-staged-datasets.js.map +1 -0
  214. package/dist/actions/list-vault-audit.d.ts +16 -0
  215. package/dist/actions/list-vault-audit.d.ts.map +1 -0
  216. package/dist/actions/list-vault-audit.js +15 -0
  217. package/dist/actions/list-vault-audit.js.map +1 -0
  218. package/dist/actions/list-vault-grants.d.ts +17 -0
  219. package/dist/actions/list-vault-grants.d.ts.map +1 -0
  220. package/dist/actions/list-vault-grants.js +13 -0
  221. package/dist/actions/list-vault-grants.js.map +1 -0
  222. package/dist/actions/list-vault-requests.d.ts +18 -0
  223. package/dist/actions/list-vault-requests.d.ts.map +1 -0
  224. package/dist/actions/list-vault-requests.js +15 -0
  225. package/dist/actions/list-vault-requests.js.map +1 -0
  226. package/dist/actions/list-vault-secret-options.d.ts +9 -0
  227. package/dist/actions/list-vault-secret-options.d.ts.map +1 -0
  228. package/dist/actions/list-vault-secret-options.js +12 -0
  229. package/dist/actions/list-vault-secret-options.js.map +1 -0
  230. package/dist/actions/list-vault-secrets.d.ts +13 -0
  231. package/dist/actions/list-vault-secrets.d.ts.map +1 -0
  232. package/dist/actions/list-vault-secrets.js +25 -0
  233. package/dist/actions/list-vault-secrets.js.map +1 -0
  234. package/dist/actions/list-workspace-apps.d.ts +7 -0
  235. package/dist/actions/list-workspace-apps.d.ts.map +1 -0
  236. package/dist/actions/list-workspace-apps.js +31 -0
  237. package/dist/actions/list-workspace-apps.js.map +1 -0
  238. package/dist/actions/list-workspace-resource-grants.d.ts +16 -0
  239. package/dist/actions/list-workspace-resource-grants.d.ts.map +1 -0
  240. package/dist/actions/list-workspace-resource-grants.js +13 -0
  241. package/dist/actions/list-workspace-resource-grants.js.map +1 -0
  242. package/dist/actions/list-workspace-resource-options.d.ts +5 -0
  243. package/dist/actions/list-workspace-resource-options.d.ts.map +1 -0
  244. package/dist/actions/list-workspace-resource-options.js +22 -0
  245. package/dist/actions/list-workspace-resource-options.js.map +1 -0
  246. package/dist/actions/list-workspace-resources-for-app.d.ts +15 -0
  247. package/dist/actions/list-workspace-resources-for-app.d.ts.map +1 -0
  248. package/dist/actions/list-workspace-resources-for-app.js +12 -0
  249. package/dist/actions/list-workspace-resources-for-app.js.map +1 -0
  250. package/dist/actions/list-workspace-resources.d.ts +18 -0
  251. package/dist/actions/list-workspace-resources.d.ts.map +1 -0
  252. package/dist/actions/list-workspace-resources.js +22 -0
  253. package/dist/actions/list-workspace-resources.js.map +1 -0
  254. package/dist/actions/list_apps.d.ts +15 -0
  255. package/dist/actions/list_apps.d.ts.map +1 -0
  256. package/dist/actions/list_apps.js +34 -0
  257. package/dist/actions/list_apps.js.map +1 -0
  258. package/dist/actions/navigate.d.ts +23 -0
  259. package/dist/actions/navigate.d.ts.map +1 -0
  260. package/dist/actions/navigate.js +53 -0
  261. package/dist/actions/navigate.js.map +1 -0
  262. package/dist/actions/open_app.d.ts +20 -0
  263. package/dist/actions/open_app.d.ts.map +1 -0
  264. package/dist/actions/open_app.js +123 -0
  265. package/dist/actions/open_app.js.map +1 -0
  266. package/dist/actions/preview-dream-proposal.d.ts +43 -0
  267. package/dist/actions/preview-dream-proposal.d.ts.map +1 -0
  268. package/dist/actions/preview-dream-proposal.js +13 -0
  269. package/dist/actions/preview-dream-proposal.js.map +1 -0
  270. package/dist/actions/preview-workspace-resource-change.d.ts +8 -0
  271. package/dist/actions/preview-workspace-resource-change.d.ts.map +1 -0
  272. package/dist/actions/preview-workspace-resource-change.js +24 -0
  273. package/dist/actions/preview-workspace-resource-change.js.map +1 -0
  274. package/dist/actions/provider-api-catalog.d.ts +28 -0
  275. package/dist/actions/provider-api-catalog.d.ts.map +1 -0
  276. package/dist/actions/provider-api-catalog.js +8 -0
  277. package/dist/actions/provider-api-catalog.js.map +1 -0
  278. package/dist/actions/provider-api-docs.d.ts +41 -0
  279. package/dist/actions/provider-api-docs.d.ts.map +1 -0
  280. package/dist/actions/provider-api-docs.js +12 -0
  281. package/dist/actions/provider-api-docs.js.map +1 -0
  282. package/dist/actions/provider-api-register.d.ts +109 -0
  283. package/dist/actions/provider-api-register.d.ts.map +1 -0
  284. package/dist/actions/provider-api-register.js +33 -0
  285. package/dist/actions/provider-api-register.js.map +1 -0
  286. package/dist/actions/provider-api-request.d.ts +67 -0
  287. package/dist/actions/provider-api-request.d.ts.map +1 -0
  288. package/dist/actions/provider-api-request.js +13 -0
  289. package/dist/actions/provider-api-request.js.map +1 -0
  290. package/dist/actions/query-staged-dataset.d.ts +45 -0
  291. package/dist/actions/query-staged-dataset.d.ts.map +1 -0
  292. package/dist/actions/query-staged-dataset.js +8 -0
  293. package/dist/actions/query-staged-dataset.js.map +1 -0
  294. package/dist/actions/read-slack-thread-context.d.ts +29 -0
  295. package/dist/actions/read-slack-thread-context.d.ts.map +1 -0
  296. package/dist/actions/read-slack-thread-context.js +138 -0
  297. package/dist/actions/read-slack-thread-context.js.map +1 -0
  298. package/dist/actions/reject-dispatch-change.d.ts +23 -0
  299. package/dist/actions/reject-dispatch-change.d.ts.map +1 -0
  300. package/dist/actions/reject-dispatch-change.js +12 -0
  301. package/dist/actions/reject-dispatch-change.js.map +1 -0
  302. package/dist/actions/reject-dream-proposal.d.ts +27 -0
  303. package/dist/actions/reject-dream-proposal.d.ts.map +1 -0
  304. package/dist/actions/reject-dream-proposal.js +12 -0
  305. package/dist/actions/reject-dream-proposal.js.map +1 -0
  306. package/dist/actions/remix-workspace-template.d.ts +48 -0
  307. package/dist/actions/remix-workspace-template.d.ts.map +1 -0
  308. package/dist/actions/remix-workspace-template.js +79 -0
  309. package/dist/actions/remix-workspace-template.js.map +1 -0
  310. package/dist/actions/remove-pending-workspace-app.d.ts +7 -0
  311. package/dist/actions/remove-pending-workspace-app.d.ts.map +1 -0
  312. package/dist/actions/remove-pending-workspace-app.js +15 -0
  313. package/dist/actions/remove-pending-workspace-app.js.map +1 -0
  314. package/dist/actions/request-vault-secret.d.ts +20 -0
  315. package/dist/actions/request-vault-secret.d.ts.map +1 -0
  316. package/dist/actions/request-vault-secret.js +15 -0
  317. package/dist/actions/request-vault-secret.js.map +1 -0
  318. package/dist/actions/resolve-integration-source-context.d.ts +5 -0
  319. package/dist/actions/resolve-integration-source-context.d.ts.map +1 -0
  320. package/dist/actions/resolve-integration-source-context.js +30 -0
  321. package/dist/actions/resolve-integration-source-context.js.map +1 -0
  322. package/dist/actions/restore-starter-workspace-resources.d.ts +9 -0
  323. package/dist/actions/restore-starter-workspace-resources.d.ts.map +1 -0
  324. package/dist/actions/restore-starter-workspace-resources.js +14 -0
  325. package/dist/actions/restore-starter-workspace-resources.js.map +1 -0
  326. package/dist/actions/revoke-vault-grant.d.ts +16 -0
  327. package/dist/actions/revoke-vault-grant.d.ts.map +1 -0
  328. package/dist/actions/revoke-vault-grant.js +11 -0
  329. package/dist/actions/revoke-vault-grant.js.map +1 -0
  330. package/dist/actions/revoke-workspace-resource-grant.d.ts +15 -0
  331. package/dist/actions/revoke-workspace-resource-grant.d.ts.map +1 -0
  332. package/dist/actions/revoke-workspace-resource-grant.js +11 -0
  333. package/dist/actions/revoke-workspace-resource-grant.js.map +1 -0
  334. package/dist/actions/scaffold-workspace-app.d.ts +10 -0
  335. package/dist/actions/scaffold-workspace-app.d.ts.map +1 -0
  336. package/dist/actions/scaffold-workspace-app.js +41 -0
  337. package/dist/actions/scaffold-workspace-app.js.map +1 -0
  338. package/dist/actions/search-agent-threads.d.ts +32 -0
  339. package/dist/actions/search-agent-threads.d.ts.map +1 -0
  340. package/dist/actions/search-agent-threads.js +25 -0
  341. package/dist/actions/search-agent-threads.js.map +1 -0
  342. package/dist/actions/send-code-agent-remote-command.d.ts +34 -0
  343. package/dist/actions/send-code-agent-remote-command.d.ts.map +1 -0
  344. package/dist/actions/send-code-agent-remote-command.js +53 -0
  345. package/dist/actions/send-code-agent-remote-command.js.map +1 -0
  346. package/dist/actions/send-platform-message.d.ts +15 -0
  347. package/dist/actions/send-platform-message.d.ts.map +1 -0
  348. package/dist/actions/send-platform-message.js +96 -0
  349. package/dist/actions/send-platform-message.js.map +1 -0
  350. package/dist/actions/set-app-creation-settings.d.ts +5 -0
  351. package/dist/actions/set-app-creation-settings.d.ts.map +1 -0
  352. package/dist/actions/set-app-creation-settings.js +18 -0
  353. package/dist/actions/set-app-creation-settings.js.map +1 -0
  354. package/dist/actions/set-dispatch-approval-policy.d.ts +23 -0
  355. package/dist/actions/set-dispatch-approval-policy.d.ts.map +1 -0
  356. package/dist/actions/set-dispatch-approval-policy.js +19 -0
  357. package/dist/actions/set-dispatch-approval-policy.js.map +1 -0
  358. package/dist/actions/set-dream-settings.d.ts +17 -0
  359. package/dist/actions/set-dream-settings.d.ts.map +1 -0
  360. package/dist/actions/set-dream-settings.js +41 -0
  361. package/dist/actions/set-dream-settings.js.map +1 -0
  362. package/dist/actions/set-mcp-app-access.d.ts +17 -0
  363. package/dist/actions/set-mcp-app-access.d.ts.map +1 -0
  364. package/dist/actions/set-mcp-app-access.js +43 -0
  365. package/dist/actions/set-mcp-app-access.js.map +1 -0
  366. package/dist/actions/set-vault-access-settings.d.ts +5 -0
  367. package/dist/actions/set-vault-access-settings.d.ts.map +1 -0
  368. package/dist/actions/set-vault-access-settings.js +13 -0
  369. package/dist/actions/set-vault-access-settings.js.map +1 -0
  370. package/dist/actions/start-workspace-app-creation.d.ts +10 -0
  371. package/dist/actions/start-workspace-app-creation.d.ts.map +1 -0
  372. package/dist/actions/start-workspace-app-creation.js +43 -0
  373. package/dist/actions/start-workspace-app-creation.js.map +1 -0
  374. package/dist/actions/sync-vault-to-app.d.ts +32 -0
  375. package/dist/actions/sync-vault-to-app.d.ts.map +1 -0
  376. package/dist/actions/sync-vault-to-app.js +13 -0
  377. package/dist/actions/sync-vault-to-app.js.map +1 -0
  378. package/dist/actions/unarchive-workspace-app.d.ts +7 -0
  379. package/dist/actions/unarchive-workspace-app.d.ts.map +1 -0
  380. package/dist/actions/unarchive-workspace-app.js +15 -0
  381. package/dist/actions/unarchive-workspace-app.js.map +1 -0
  382. package/dist/actions/update-vault-secret.d.ts +22 -0
  383. package/dist/actions/update-vault-secret.d.ts.map +1 -0
  384. package/dist/actions/update-vault-secret.js +43 -0
  385. package/dist/actions/update-vault-secret.js.map +1 -0
  386. package/dist/actions/update-workspace-app-metadata.d.ts +7 -0
  387. package/dist/actions/update-workspace-app-metadata.d.ts.map +1 -0
  388. package/dist/actions/update-workspace-app-metadata.js +30 -0
  389. package/dist/actions/update-workspace-app-metadata.js.map +1 -0
  390. package/dist/actions/update-workspace-resource.d.ts +39 -0
  391. package/dist/actions/update-workspace-resource.d.ts.map +1 -0
  392. package/dist/actions/update-workspace-resource.js +18 -0
  393. package/dist/actions/update-workspace-resource.js.map +1 -0
  394. package/dist/actions/upsert-destination.d.ts +39 -0
  395. package/dist/actions/upsert-destination.d.ts.map +1 -0
  396. package/dist/actions/upsert-destination.js +26 -0
  397. package/dist/actions/upsert-destination.js.map +1 -0
  398. package/dist/actions/view-screen.d.ts +11 -0
  399. package/dist/actions/view-screen.d.ts.map +1 -0
  400. package/dist/actions/view-screen.js +332 -0
  401. package/dist/actions/view-screen.js.map +1 -0
  402. package/dist/client/transactional-emails.d.ts +57 -0
  403. package/dist/client/transactional-emails.d.ts.map +1 -0
  404. package/dist/client/transactional-emails.js +116 -0
  405. package/dist/client/transactional-emails.js.map +1 -0
  406. package/dist/components/action-query-error.d.ts +8 -0
  407. package/dist/components/action-query-error.d.ts.map +1 -0
  408. package/dist/components/action-query-error.js +10 -0
  409. package/dist/components/action-query-error.js.map +1 -0
  410. package/dist/components/admin-navigation.d.ts +16 -0
  411. package/dist/components/admin-navigation.d.ts.map +1 -0
  412. package/dist/components/admin-navigation.js +193 -0
  413. package/dist/components/admin-navigation.js.map +1 -0
  414. package/dist/components/agents-panel.d.ts +16 -0
  415. package/dist/components/agents-panel.d.ts.map +1 -0
  416. package/dist/components/agents-panel.js +133 -0
  417. package/dist/components/agents-panel.js.map +1 -0
  418. package/dist/components/app-icon.d.ts +10 -0
  419. package/dist/components/app-icon.d.ts.map +1 -0
  420. package/dist/components/app-icon.js +107 -0
  421. package/dist/components/app-icon.js.map +1 -0
  422. package/dist/components/app-keys-popover.d.ts +15 -0
  423. package/dist/components/app-keys-popover.d.ts.map +1 -0
  424. package/dist/components/app-keys-popover.js +115 -0
  425. package/dist/components/app-keys-popover.js.map +1 -0
  426. package/dist/components/app-list-row.d.ts +12 -0
  427. package/dist/components/app-list-row.d.ts.map +1 -0
  428. package/dist/components/app-list-row.js +11 -0
  429. package/dist/components/app-list-row.js.map +1 -0
  430. package/dist/components/app-open-actions.d.ts +2 -0
  431. package/dist/components/app-open-actions.d.ts.map +1 -0
  432. package/dist/components/app-open-actions.js +2 -0
  433. package/dist/components/app-open-actions.js.map +1 -0
  434. package/dist/components/app-row-settings.d.ts +6 -0
  435. package/dist/components/app-row-settings.d.ts.map +1 -0
  436. package/dist/components/app-row-settings.js +11 -0
  437. package/dist/components/app-row-settings.js.map +1 -0
  438. package/dist/components/approval-value-block.d.ts +7 -0
  439. package/dist/components/approval-value-block.d.ts.map +1 -0
  440. package/dist/components/approval-value-block.js +22 -0
  441. package/dist/components/approval-value-block.js.map +1 -0
  442. package/dist/components/automation-run-history-dialog.d.ts +9 -0
  443. package/dist/components/automation-run-history-dialog.d.ts.map +1 -0
  444. package/dist/components/automation-run-history-dialog.js +63 -0
  445. package/dist/components/automation-run-history-dialog.js.map +1 -0
  446. package/dist/components/connected-app-card.d.ts +6 -0
  447. package/dist/components/connected-app-card.d.ts.map +1 -0
  448. package/dist/components/connected-app-card.js +13 -0
  449. package/dist/components/connected-app-card.js.map +1 -0
  450. package/dist/components/create-app-popover.d.ts +29 -0
  451. package/dist/components/create-app-popover.d.ts.map +1 -0
  452. package/dist/components/create-app-popover.js +262 -0
  453. package/dist/components/create-app-popover.js.map +1 -0
  454. package/dist/components/dispatch-control-plane.d.ts +2 -0
  455. package/dist/components/dispatch-control-plane.d.ts.map +1 -0
  456. package/dist/components/dispatch-control-plane.js +114 -0
  457. package/dist/components/dispatch-control-plane.js.map +1 -0
  458. package/dist/components/dispatch-shell.d.ts +13 -0
  459. package/dist/components/dispatch-shell.d.ts.map +1 -0
  460. package/dist/components/dispatch-shell.js +21 -0
  461. package/dist/components/dispatch-shell.js.map +1 -0
  462. package/dist/components/docs-link.d.ts +16 -0
  463. package/dist/components/docs-link.d.ts.map +1 -0
  464. package/dist/components/docs-link.js +34 -0
  465. package/dist/components/docs-link.js.map +1 -0
  466. package/dist/components/index.d.ts +17 -0
  467. package/dist/components/index.d.ts.map +1 -0
  468. package/dist/components/index.js +16 -0
  469. package/dist/components/index.js.map +1 -0
  470. package/dist/components/layout/Header.d.ts +5 -0
  471. package/dist/components/layout/Header.d.ts.map +1 -0
  472. package/dist/components/layout/Header.js +61 -0
  473. package/dist/components/layout/Header.js.map +1 -0
  474. package/dist/components/layout/HeaderActions.d.ts +2 -0
  475. package/dist/components/layout/HeaderActions.d.ts.map +1 -0
  476. package/dist/components/layout/HeaderActions.js +2 -0
  477. package/dist/components/layout/HeaderActions.js.map +1 -0
  478. package/dist/components/layout/Layout.d.ts +60 -0
  479. package/dist/components/layout/Layout.d.ts.map +1 -0
  480. package/dist/components/layout/Layout.js +1302 -0
  481. package/dist/components/layout/Layout.js.map +1 -0
  482. package/dist/components/layout/workspace-apps-rail.d.ts +5 -0
  483. package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -0
  484. package/dist/components/layout/workspace-apps-rail.js +56 -0
  485. package/dist/components/layout/workspace-apps-rail.js.map +1 -0
  486. package/dist/components/messaging-setup-panel.d.ts +2 -0
  487. package/dist/components/messaging-setup-panel.d.ts.map +1 -0
  488. package/dist/components/messaging-setup-panel.js +414 -0
  489. package/dist/components/messaging-setup-panel.js.map +1 -0
  490. package/dist/components/other-apps-section.d.ts +33 -0
  491. package/dist/components/other-apps-section.d.ts.map +1 -0
  492. package/dist/components/other-apps-section.js +66 -0
  493. package/dist/components/other-apps-section.js.map +1 -0
  494. package/dist/components/simple-agents-panel.d.ts +12 -0
  495. package/dist/components/simple-agents-panel.d.ts.map +1 -0
  496. package/dist/components/simple-agents-panel.js +438 -0
  497. package/dist/components/simple-agents-panel.js.map +1 -0
  498. package/dist/components/task-queue-health.d.ts +2 -0
  499. package/dist/components/task-queue-health.d.ts.map +1 -0
  500. package/dist/components/task-queue-health.js +58 -0
  501. package/dist/components/task-queue-health.js.map +1 -0
  502. package/dist/components/transactional-email-activity.d.ts +24 -0
  503. package/dist/components/transactional-email-activity.d.ts.map +1 -0
  504. package/dist/components/transactional-email-activity.js +31 -0
  505. package/dist/components/transactional-email-activity.js.map +1 -0
  506. package/dist/components/transactional-email-metrics.d.ts +40 -0
  507. package/dist/components/transactional-email-metrics.d.ts.map +1 -0
  508. package/dist/components/transactional-email-metrics.js +44 -0
  509. package/dist/components/transactional-email-metrics.js.map +1 -0
  510. package/dist/components/transactional-email-preview.d.ts +7 -0
  511. package/dist/components/transactional-email-preview.d.ts.map +1 -0
  512. package/dist/components/transactional-email-preview.js +41 -0
  513. package/dist/components/transactional-email-preview.js.map +1 -0
  514. package/dist/components/ui/accordion.d.ts +8 -0
  515. package/dist/components/ui/accordion.d.ts.map +1 -0
  516. package/dist/components/ui/accordion.js +14 -0
  517. package/dist/components/ui/accordion.js.map +1 -0
  518. package/dist/components/ui/alert-dialog.d.ts +21 -0
  519. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  520. package/dist/components/ui/alert-dialog.js +27 -0
  521. package/dist/components/ui/alert-dialog.js.map +1 -0
  522. package/dist/components/ui/alert.d.ts +9 -0
  523. package/dist/components/ui/alert.d.ts.map +1 -0
  524. package/dist/components/ui/alert.js +23 -0
  525. package/dist/components/ui/alert.js.map +1 -0
  526. package/dist/components/ui/aspect-ratio.d.ts +4 -0
  527. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  528. package/dist/components/ui/aspect-ratio.js +4 -0
  529. package/dist/components/ui/aspect-ratio.js.map +1 -0
  530. package/dist/components/ui/avatar.d.ts +7 -0
  531. package/dist/components/ui/avatar.d.ts.map +1 -0
  532. package/dist/components/ui/avatar.js +12 -0
  533. package/dist/components/ui/avatar.js.map +1 -0
  534. package/dist/components/ui/badge.d.ts +10 -0
  535. package/dist/components/ui/badge.d.ts.map +1 -0
  536. package/dist/components/ui/badge.js +21 -0
  537. package/dist/components/ui/badge.js.map +1 -0
  538. package/dist/components/ui/breadcrumb.d.ts +20 -0
  539. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  540. package/dist/components/ui/breadcrumb.js +24 -0
  541. package/dist/components/ui/breadcrumb.js.map +1 -0
  542. package/dist/components/ui/button.d.ts +12 -0
  543. package/dist/components/ui/button.d.ts.map +1 -0
  544. package/dist/components/ui/button.js +34 -0
  545. package/dist/components/ui/button.js.map +1 -0
  546. package/dist/components/ui/calendar.d.ts +9 -0
  547. package/dist/components/ui/calendar.d.ts.map +1 -0
  548. package/dist/components/ui/calendar.js +41 -0
  549. package/dist/components/ui/calendar.js.map +1 -0
  550. package/dist/components/ui/card.d.ts +9 -0
  551. package/dist/components/ui/card.d.ts.map +1 -0
  552. package/dist/components/ui/card.js +17 -0
  553. package/dist/components/ui/card.js.map +1 -0
  554. package/dist/components/ui/carousel.d.ts +19 -0
  555. package/dist/components/ui/carousel.d.ts.map +1 -0
  556. package/dist/components/ui/carousel.js +99 -0
  557. package/dist/components/ui/carousel.js.map +1 -0
  558. package/dist/components/ui/chart.d.ts +80 -0
  559. package/dist/components/ui/chart.d.ts.map +1 -0
  560. package/dist/components/ui/chart.js +131 -0
  561. package/dist/components/ui/chart.js.map +1 -0
  562. package/dist/components/ui/checkbox.d.ts +5 -0
  563. package/dist/components/ui/checkbox.d.ts.map +1 -0
  564. package/dist/components/ui/checkbox.js +9 -0
  565. package/dist/components/ui/checkbox.js.map +1 -0
  566. package/dist/components/ui/collapsible.d.ts +6 -0
  567. package/dist/components/ui/collapsible.d.ts.map +1 -0
  568. package/dist/components/ui/collapsible.js +6 -0
  569. package/dist/components/ui/collapsible.js.map +1 -0
  570. package/dist/components/ui/command.d.ts +83 -0
  571. package/dist/components/ui/command.d.ts.map +1 -0
  572. package/dist/components/ui/command.js +29 -0
  573. package/dist/components/ui/command.js.map +1 -0
  574. package/dist/components/ui/context-menu.d.ts +28 -0
  575. package/dist/components/ui/context-menu.d.ts.map +1 -0
  576. package/dist/components/ui/context-menu.js +34 -0
  577. package/dist/components/ui/context-menu.js.map +1 -0
  578. package/dist/components/ui/dialog.d.ts +2 -0
  579. package/dist/components/ui/dialog.d.ts.map +1 -0
  580. package/dist/components/ui/dialog.js +2 -0
  581. package/dist/components/ui/dialog.js.map +1 -0
  582. package/dist/components/ui/drawer.d.ts +23 -0
  583. package/dist/components/ui/drawer.d.ts.map +1 -0
  584. package/dist/components/ui/drawer.js +23 -0
  585. package/dist/components/ui/drawer.js.map +1 -0
  586. package/dist/components/ui/dropdown-menu.d.ts +2 -0
  587. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  588. package/dist/components/ui/dropdown-menu.js +2 -0
  589. package/dist/components/ui/dropdown-menu.js.map +1 -0
  590. package/dist/components/ui/form.d.ts +26 -0
  591. package/dist/components/ui/form.d.ts.map +1 -0
  592. package/dist/components/ui/form.js +63 -0
  593. package/dist/components/ui/form.js.map +1 -0
  594. package/dist/components/ui/hover-card.d.ts +7 -0
  595. package/dist/components/ui/hover-card.d.ts.map +1 -0
  596. package/dist/components/ui/hover-card.js +10 -0
  597. package/dist/components/ui/hover-card.js.map +1 -0
  598. package/dist/components/ui/input-otp.d.ts +35 -0
  599. package/dist/components/ui/input-otp.d.ts.map +1 -0
  600. package/dist/components/ui/input-otp.js +19 -0
  601. package/dist/components/ui/input-otp.js.map +1 -0
  602. package/dist/components/ui/input.d.ts +4 -0
  603. package/dist/components/ui/input.d.ts.map +1 -0
  604. package/dist/components/ui/input.js +9 -0
  605. package/dist/components/ui/input.js.map +1 -0
  606. package/dist/components/ui/label.d.ts +6 -0
  607. package/dist/components/ui/label.d.ts.map +1 -0
  608. package/dist/components/ui/label.js +10 -0
  609. package/dist/components/ui/label.js.map +1 -0
  610. package/dist/components/ui/menubar.d.ts +29 -0
  611. package/dist/components/ui/menubar.d.ts.map +1 -0
  612. package/dist/components/ui/menubar.js +41 -0
  613. package/dist/components/ui/menubar.js.map +1 -0
  614. package/dist/components/ui/navigation-menu.d.ts +13 -0
  615. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  616. package/dist/components/ui/navigation-menu.js +25 -0
  617. package/dist/components/ui/navigation-menu.js.map +1 -0
  618. package/dist/components/ui/pagination.d.ts +29 -0
  619. package/dist/components/ui/pagination.d.ts.map +1 -0
  620. package/dist/components/ui/pagination.js +24 -0
  621. package/dist/components/ui/pagination.js.map +1 -0
  622. package/dist/components/ui/popover.d.ts +8 -0
  623. package/dist/components/ui/popover.d.ts.map +1 -0
  624. package/dist/components/ui/popover.js +11 -0
  625. package/dist/components/ui/popover.js.map +1 -0
  626. package/dist/components/ui/progress.d.ts +5 -0
  627. package/dist/components/ui/progress.d.ts.map +1 -0
  628. package/dist/components/ui/progress.js +8 -0
  629. package/dist/components/ui/progress.js.map +1 -0
  630. package/dist/components/ui/radio-group.d.ts +6 -0
  631. package/dist/components/ui/radio-group.d.ts.map +1 -0
  632. package/dist/components/ui/radio-group.js +15 -0
  633. package/dist/components/ui/radio-group.js.map +1 -0
  634. package/dist/components/ui/resizable.d.ts +8 -0
  635. package/dist/components/ui/resizable.d.ts.map +1 -0
  636. package/dist/components/ui/resizable.js +9 -0
  637. package/dist/components/ui/resizable.js.map +1 -0
  638. package/dist/components/ui/scroll-area.d.ts +6 -0
  639. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  640. package/dist/components/ui/scroll-area.js +12 -0
  641. package/dist/components/ui/scroll-area.js.map +1 -0
  642. package/dist/components/ui/select.d.ts +2 -0
  643. package/dist/components/ui/select.d.ts.map +1 -0
  644. package/dist/components/ui/select.js +2 -0
  645. package/dist/components/ui/select.js.map +1 -0
  646. package/dist/components/ui/separator.d.ts +5 -0
  647. package/dist/components/ui/separator.d.ts.map +1 -0
  648. package/dist/components/ui/separator.js +8 -0
  649. package/dist/components/ui/separator.js.map +1 -0
  650. package/dist/components/ui/sheet.d.ts +26 -0
  651. package/dist/components/ui/sheet.d.ts.map +1 -0
  652. package/dist/components/ui/sheet.js +37 -0
  653. package/dist/components/ui/sheet.js.map +1 -0
  654. package/dist/components/ui/sidebar.d.ts +67 -0
  655. package/dist/components/ui/sidebar.d.ts.map +1 -0
  656. package/dist/components/ui/sidebar.js +233 -0
  657. package/dist/components/ui/sidebar.js.map +1 -0
  658. package/dist/components/ui/skeleton.d.ts +3 -0
  659. package/dist/components/ui/skeleton.d.ts.map +1 -0
  660. package/dist/components/ui/skeleton.js +7 -0
  661. package/dist/components/ui/skeleton.js.map +1 -0
  662. package/dist/components/ui/slider.d.ts +5 -0
  663. package/dist/components/ui/slider.d.ts.map +1 -0
  664. package/dist/components/ui/slider.js +8 -0
  665. package/dist/components/ui/slider.js.map +1 -0
  666. package/dist/components/ui/sonner.d.ts +5 -0
  667. package/dist/components/ui/sonner.d.ts.map +1 -0
  668. package/dist/components/ui/sonner.js +25 -0
  669. package/dist/components/ui/sonner.js.map +1 -0
  670. package/dist/components/ui/spinner.d.ts +3 -0
  671. package/dist/components/ui/spinner.d.ts.map +1 -0
  672. package/dist/components/ui/spinner.js +7 -0
  673. package/dist/components/ui/spinner.js.map +1 -0
  674. package/dist/components/ui/switch.d.ts +5 -0
  675. package/dist/components/ui/switch.d.ts.map +1 -0
  676. package/dist/components/ui/switch.js +8 -0
  677. package/dist/components/ui/switch.js.map +1 -0
  678. package/dist/components/ui/table.d.ts +11 -0
  679. package/dist/components/ui/table.d.ts.map +1 -0
  680. package/dist/components/ui/table.js +21 -0
  681. package/dist/components/ui/table.js.map +1 -0
  682. package/dist/components/ui/tabs.d.ts +8 -0
  683. package/dist/components/ui/tabs.d.ts.map +1 -0
  684. package/dist/components/ui/tabs.js +13 -0
  685. package/dist/components/ui/tabs.js.map +1 -0
  686. package/dist/components/ui/textarea.d.ts +6 -0
  687. package/dist/components/ui/textarea.d.ts.map +1 -0
  688. package/dist/components/ui/textarea.js +9 -0
  689. package/dist/components/ui/textarea.js.map +1 -0
  690. package/dist/components/ui/toast.d.ts +16 -0
  691. package/dist/components/ui/toast.d.ts.map +1 -0
  692. package/dist/components/ui/toast.js +34 -0
  693. package/dist/components/ui/toast.js.map +1 -0
  694. package/dist/components/ui/toaster.d.ts +2 -0
  695. package/dist/components/ui/toaster.d.ts.map +1 -0
  696. package/dist/components/ui/toaster.js +10 -0
  697. package/dist/components/ui/toaster.js.map +1 -0
  698. package/dist/components/ui/toggle-group.d.ts +13 -0
  699. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  700. package/dist/components/ui/toggle-group.js +21 -0
  701. package/dist/components/ui/toggle-group.js.map +1 -0
  702. package/dist/components/ui/toggle.d.ts +13 -0
  703. package/dist/components/ui/toggle.d.ts.map +1 -0
  704. package/dist/components/ui/toggle.js +26 -0
  705. package/dist/components/ui/toggle.js.map +1 -0
  706. package/dist/components/ui/tooltip.d.ts +8 -0
  707. package/dist/components/ui/tooltip.d.ts.map +1 -0
  708. package/dist/components/ui/tooltip.js +11 -0
  709. package/dist/components/ui/tooltip.js.map +1 -0
  710. package/dist/components/ui/use-toast.d.ts +3 -0
  711. package/dist/components/ui/use-toast.d.ts.map +1 -0
  712. package/dist/components/ui/use-toast.js +3 -0
  713. package/dist/components/ui/use-toast.js.map +1 -0
  714. package/dist/components/usage-alerts-panel.d.ts +11 -0
  715. package/dist/components/usage-alerts-panel.d.ts.map +1 -0
  716. package/dist/components/usage-alerts-panel.js +125 -0
  717. package/dist/components/usage-alerts-panel.js.map +1 -0
  718. package/dist/components/workspace-app-card.d.ts +8 -0
  719. package/dist/components/workspace-app-card.d.ts.map +1 -0
  720. package/dist/components/workspace-app-card.js +198 -0
  721. package/dist/components/workspace-app-card.js.map +1 -0
  722. package/dist/components/workspace-app-host.d.ts +50 -0
  723. package/dist/components/workspace-app-host.d.ts.map +1 -0
  724. package/dist/components/workspace-app-host.js +386 -0
  725. package/dist/components/workspace-app-host.js.map +1 -0
  726. package/dist/components/workspace-app-search.d.ts +10 -0
  727. package/dist/components/workspace-app-search.d.ts.map +1 -0
  728. package/dist/components/workspace-app-search.js +27 -0
  729. package/dist/components/workspace-app-search.js.map +1 -0
  730. package/dist/components/workspace-resource-effective-stack.d.ts +11 -0
  731. package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -0
  732. package/dist/components/workspace-resource-effective-stack.js +65 -0
  733. package/dist/components/workspace-resource-effective-stack.js.map +1 -0
  734. package/dist/components/workspace-resource-impact-preview.d.ts +9 -0
  735. package/dist/components/workspace-resource-impact-preview.d.ts.map +1 -0
  736. package/dist/components/workspace-resource-impact-preview.js +44 -0
  737. package/dist/components/workspace-resource-impact-preview.js.map +1 -0
  738. package/dist/components/workspace-template-card.d.ts +58 -0
  739. package/dist/components/workspace-template-card.d.ts.map +1 -0
  740. package/dist/components/workspace-template-card.js +113 -0
  741. package/dist/components/workspace-template-card.js.map +1 -0
  742. package/dist/config.d.ts +40 -0
  743. package/dist/config.d.ts.map +1 -0
  744. package/dist/config.js +7 -0
  745. package/dist/config.js.map +1 -0
  746. package/dist/db/index.d.ts +7 -0
  747. package/dist/db/index.d.ts.map +1 -0
  748. package/dist/db/index.js +35 -0
  749. package/dist/db/index.js.map +1 -0
  750. package/dist/db/migrations.d.ts +3 -0
  751. package/dist/db/migrations.d.ts.map +1 -0
  752. package/dist/db/migrations.js +250 -0
  753. package/dist/db/migrations.js.map +1 -0
  754. package/dist/db/schema.d.ts +3059 -0
  755. package/dist/db/schema.d.ts.map +1 -0
  756. package/dist/db/schema.js +194 -0
  757. package/dist/db/schema.js.map +1 -0
  758. package/dist/hooks/use-mobile.d.ts +2 -0
  759. package/dist/hooks/use-mobile.d.ts.map +1 -0
  760. package/dist/hooks/use-mobile.js +2 -0
  761. package/dist/hooks/use-mobile.js.map +1 -0
  762. package/dist/hooks/use-navigation-state.d.ts +25 -0
  763. package/dist/hooks/use-navigation-state.d.ts.map +1 -0
  764. package/dist/hooks/use-navigation-state.js +353 -0
  765. package/dist/hooks/use-navigation-state.js.map +1 -0
  766. package/dist/hooks/use-toast.d.ts +45 -0
  767. package/dist/hooks/use-toast.d.ts.map +1 -0
  768. package/dist/hooks/use-toast.js +127 -0
  769. package/dist/hooks/use-toast.js.map +1 -0
  770. package/dist/index.d.ts +15 -0
  771. package/dist/index.d.ts.map +1 -0
  772. package/dist/index.js +15 -0
  773. package/dist/index.js.map +1 -0
  774. package/dist/lib/agent-pack.d.ts +31 -0
  775. package/dist/lib/agent-pack.d.ts.map +1 -0
  776. package/dist/lib/agent-pack.js +149 -0
  777. package/dist/lib/agent-pack.js.map +1 -0
  778. package/dist/lib/automation-display.d.ts +22 -0
  779. package/dist/lib/automation-display.d.ts.map +1 -0
  780. package/dist/lib/automation-display.js +88 -0
  781. package/dist/lib/automation-display.js.map +1 -0
  782. package/dist/lib/automations.d.ts +32 -0
  783. package/dist/lib/automations.d.ts.map +1 -0
  784. package/dist/lib/automations.js +28 -0
  785. package/dist/lib/automations.js.map +1 -0
  786. package/dist/lib/browser-chat-bridge.d.ts +8 -0
  787. package/dist/lib/browser-chat-bridge.d.ts.map +1 -0
  788. package/dist/lib/browser-chat-bridge.js +48 -0
  789. package/dist/lib/browser-chat-bridge.js.map +1 -0
  790. package/dist/lib/browser-chat-protocol.d.ts +33 -0
  791. package/dist/lib/browser-chat-protocol.d.ts.map +1 -0
  792. package/dist/lib/browser-chat-protocol.js +82 -0
  793. package/dist/lib/browser-chat-protocol.js.map +1 -0
  794. package/dist/lib/catch-all-target.d.ts +17 -0
  795. package/dist/lib/catch-all-target.d.ts.map +1 -0
  796. package/dist/lib/catch-all-target.js +103 -0
  797. package/dist/lib/catch-all-target.js.map +1 -0
  798. package/dist/lib/embed-session-recovery.d.ts +3 -0
  799. package/dist/lib/embed-session-recovery.d.ts.map +1 -0
  800. package/dist/lib/embed-session-recovery.js +18 -0
  801. package/dist/lib/embed-session-recovery.js.map +1 -0
  802. package/dist/lib/other-apps.d.ts +16 -0
  803. package/dist/lib/other-apps.d.ts.map +1 -0
  804. package/dist/lib/other-apps.js +36 -0
  805. package/dist/lib/other-apps.js.map +1 -0
  806. package/dist/lib/overview-chat.d.ts +9 -0
  807. package/dist/lib/overview-chat.d.ts.map +1 -0
  808. package/dist/lib/overview-chat.js +16 -0
  809. package/dist/lib/overview-chat.js.map +1 -0
  810. package/dist/lib/simple-agent-profile.d.ts +36 -0
  811. package/dist/lib/simple-agent-profile.d.ts.map +1 -0
  812. package/dist/lib/simple-agent-profile.js +183 -0
  813. package/dist/lib/simple-agent-profile.js.map +1 -0
  814. package/dist/lib/task-queue.d.ts +19 -0
  815. package/dist/lib/task-queue.d.ts.map +1 -0
  816. package/dist/lib/task-queue.js +54 -0
  817. package/dist/lib/task-queue.js.map +1 -0
  818. package/dist/lib/thread-link-preview.d.ts +23 -0
  819. package/dist/lib/thread-link-preview.d.ts.map +1 -0
  820. package/dist/lib/thread-link-preview.js +150 -0
  821. package/dist/lib/thread-link-preview.js.map +1 -0
  822. package/dist/lib/utils.d.ts +3 -0
  823. package/dist/lib/utils.d.ts.map +1 -0
  824. package/dist/lib/utils.js +6 -0
  825. package/dist/lib/utils.js.map +1 -0
  826. package/dist/lib/workspace-app-layout.d.ts +19 -0
  827. package/dist/lib/workspace-app-layout.d.ts.map +1 -0
  828. package/dist/lib/workspace-app-layout.js +75 -0
  829. package/dist/lib/workspace-app-layout.js.map +1 -0
  830. package/dist/lib/workspace-apps.d.ts +72 -0
  831. package/dist/lib/workspace-apps.d.ts.map +1 -0
  832. package/dist/lib/workspace-apps.js +228 -0
  833. package/dist/lib/workspace-apps.js.map +1 -0
  834. package/dist/lib/workspace-apps.test.d.ts +2 -0
  835. package/dist/lib/workspace-apps.test.d.ts.map +1 -0
  836. package/dist/lib/workspace-apps.test.js +105 -0
  837. package/dist/lib/workspace-apps.test.js.map +1 -0
  838. package/dist/routes/index.d.ts +32 -0
  839. package/dist/routes/index.d.ts.map +1 -0
  840. package/dist/routes/index.js +89 -0
  841. package/dist/routes/index.js.map +1 -0
  842. package/dist/routes/pages/$appId.d.ts +8 -0
  843. package/dist/routes/pages/$appId.d.ts.map +1 -0
  844. package/dist/routes/pages/$appId.js +126 -0
  845. package/dist/routes/pages/$appId.js.map +1 -0
  846. package/dist/routes/pages/_index.d.ts +22 -0
  847. package/dist/routes/pages/_index.d.ts.map +1 -0
  848. package/dist/routes/pages/_index.js +53 -0
  849. package/dist/routes/pages/_index.js.map +1 -0
  850. package/dist/routes/pages/_index.test.d.ts +2 -0
  851. package/dist/routes/pages/_index.test.d.ts.map +1 -0
  852. package/dist/routes/pages/_index.test.js +29 -0
  853. package/dist/routes/pages/_index.test.js.map +1 -0
  854. package/dist/routes/pages/admin._index.d.ts +5 -0
  855. package/dist/routes/pages/admin._index.d.ts.map +1 -0
  856. package/dist/routes/pages/admin._index.js +44 -0
  857. package/dist/routes/pages/admin._index.js.map +1 -0
  858. package/dist/routes/pages/admin.d.ts +5 -0
  859. package/dist/routes/pages/admin.d.ts.map +1 -0
  860. package/dist/routes/pages/admin.js +10 -0
  861. package/dist/routes/pages/admin.js.map +1 -0
  862. package/dist/routes/pages/agent-integrations.d.ts +5 -0
  863. package/dist/routes/pages/agent-integrations.d.ts.map +1 -0
  864. package/dist/routes/pages/agent-integrations.js +15 -0
  865. package/dist/routes/pages/agent-integrations.js.map +1 -0
  866. package/dist/routes/pages/agents.d.ts +5 -0
  867. package/dist/routes/pages/agents.d.ts.map +1 -0
  868. package/dist/routes/pages/agents.js +96 -0
  869. package/dist/routes/pages/agents.js.map +1 -0
  870. package/dist/routes/pages/approval.d.ts +5 -0
  871. package/dist/routes/pages/approval.d.ts.map +1 -0
  872. package/dist/routes/pages/approval.js +58 -0
  873. package/dist/routes/pages/approval.js.map +1 -0
  874. package/dist/routes/pages/approvals.d.ts +5 -0
  875. package/dist/routes/pages/approvals.d.ts.map +1 -0
  876. package/dist/routes/pages/approvals.js +55 -0
  877. package/dist/routes/pages/approvals.js.map +1 -0
  878. package/dist/routes/pages/apps.$appId.d.ts +6 -0
  879. package/dist/routes/pages/apps.$appId.d.ts.map +1 -0
  880. package/dist/routes/pages/apps.$appId.js +15 -0
  881. package/dist/routes/pages/apps.$appId.js.map +1 -0
  882. package/dist/routes/pages/apps.d.ts +5 -0
  883. package/dist/routes/pages/apps.d.ts.map +1 -0
  884. package/dist/routes/pages/apps.js +113 -0
  885. package/dist/routes/pages/apps.js.map +1 -0
  886. package/dist/routes/pages/audit.d.ts +5 -0
  887. package/dist/routes/pages/audit.d.ts.map +1 -0
  888. package/dist/routes/pages/audit.js +14 -0
  889. package/dist/routes/pages/audit.js.map +1 -0
  890. package/dist/routes/pages/automations.d.ts +5 -0
  891. package/dist/routes/pages/automations.d.ts.map +1 -0
  892. package/dist/routes/pages/automations.js +124 -0
  893. package/dist/routes/pages/automations.js.map +1 -0
  894. package/dist/routes/pages/browser-chat.d.ts +5 -0
  895. package/dist/routes/pages/browser-chat.d.ts.map +1 -0
  896. package/dist/routes/pages/browser-chat.js +43 -0
  897. package/dist/routes/pages/browser-chat.js.map +1 -0
  898. package/dist/routes/pages/browser-connect.d.ts +5 -0
  899. package/dist/routes/pages/browser-connect.d.ts.map +1 -0
  900. package/dist/routes/pages/browser-connect.js +72 -0
  901. package/dist/routes/pages/browser-connect.js.map +1 -0
  902. package/dist/routes/pages/chat.d.ts +5 -0
  903. package/dist/routes/pages/chat.d.ts.map +1 -0
  904. package/dist/routes/pages/chat.js +192 -0
  905. package/dist/routes/pages/chat.js.map +1 -0
  906. package/dist/routes/pages/destinations.d.ts +5 -0
  907. package/dist/routes/pages/destinations.d.ts.map +1 -0
  908. package/dist/routes/pages/destinations.js +96 -0
  909. package/dist/routes/pages/destinations.js.map +1 -0
  910. package/dist/routes/pages/dream-settings.d.ts +34 -0
  911. package/dist/routes/pages/dream-settings.d.ts.map +1 -0
  912. package/dist/routes/pages/dream-settings.js +68 -0
  913. package/dist/routes/pages/dream-settings.js.map +1 -0
  914. package/dist/routes/pages/dreams.d.ts +5 -0
  915. package/dist/routes/pages/dreams.d.ts.map +1 -0
  916. package/dist/routes/pages/dreams.js +455 -0
  917. package/dist/routes/pages/dreams.js.map +1 -0
  918. package/dist/routes/pages/extensions.$id.d.ts +5 -0
  919. package/dist/routes/pages/extensions.$id.d.ts.map +1 -0
  920. package/dist/routes/pages/extensions.$id.js +9 -0
  921. package/dist/routes/pages/extensions.$id.js.map +1 -0
  922. package/dist/routes/pages/extensions._index.d.ts +5 -0
  923. package/dist/routes/pages/extensions._index.d.ts.map +1 -0
  924. package/dist/routes/pages/extensions._index.js +9 -0
  925. package/dist/routes/pages/extensions._index.js.map +1 -0
  926. package/dist/routes/pages/identities.d.ts +5 -0
  927. package/dist/routes/pages/identities.d.ts.map +1 -0
  928. package/dist/routes/pages/identities.js +20 -0
  929. package/dist/routes/pages/identities.js.map +1 -0
  930. package/dist/routes/pages/integrations.d.ts +5 -0
  931. package/dist/routes/pages/integrations.d.ts.map +1 -0
  932. package/dist/routes/pages/integrations.js +196 -0
  933. package/dist/routes/pages/integrations.js.map +1 -0
  934. package/dist/routes/pages/messaging.d.ts +5 -0
  935. package/dist/routes/pages/messaging.d.ts.map +1 -0
  936. package/dist/routes/pages/messaging.js +10 -0
  937. package/dist/routes/pages/messaging.js.map +1 -0
  938. package/dist/routes/pages/metrics.d.ts +5 -0
  939. package/dist/routes/pages/metrics.d.ts.map +1 -0
  940. package/dist/routes/pages/metrics.js +305 -0
  941. package/dist/routes/pages/metrics.js.map +1 -0
  942. package/dist/routes/pages/new-app.d.ts +5 -0
  943. package/dist/routes/pages/new-app.d.ts.map +1 -0
  944. package/dist/routes/pages/new-app.js +12 -0
  945. package/dist/routes/pages/new-app.js.map +1 -0
  946. package/dist/routes/pages/operations.d.ts +5 -0
  947. package/dist/routes/pages/operations.d.ts.map +1 -0
  948. package/dist/routes/pages/operations.js +53 -0
  949. package/dist/routes/pages/operations.js.map +1 -0
  950. package/dist/routes/pages/overview.d.ts +18 -0
  951. package/dist/routes/pages/overview.d.ts.map +1 -0
  952. package/dist/routes/pages/overview.js +19 -0
  953. package/dist/routes/pages/overview.js.map +1 -0
  954. package/dist/routes/pages/settings.d.ts +5 -0
  955. package/dist/routes/pages/settings.d.ts.map +1 -0
  956. package/dist/routes/pages/settings.js +57 -0
  957. package/dist/routes/pages/settings.js.map +1 -0
  958. package/dist/routes/pages/team.d.ts +5 -0
  959. package/dist/routes/pages/team.d.ts.map +1 -0
  960. package/dist/routes/pages/team.js +9 -0
  961. package/dist/routes/pages/team.js.map +1 -0
  962. package/dist/routes/pages/thread-debug.d.ts +5 -0
  963. package/dist/routes/pages/thread-debug.d.ts.map +1 -0
  964. package/dist/routes/pages/thread-debug.js +563 -0
  965. package/dist/routes/pages/thread-debug.js.map +1 -0
  966. package/dist/routes/pages/tools.$id.d.ts +5 -0
  967. package/dist/routes/pages/tools.$id.d.ts.map +1 -0
  968. package/dist/routes/pages/tools.$id.js +9 -0
  969. package/dist/routes/pages/tools.$id.js.map +1 -0
  970. package/dist/routes/pages/tools._index.d.ts +5 -0
  971. package/dist/routes/pages/tools._index.d.ts.map +1 -0
  972. package/dist/routes/pages/tools._index.js +9 -0
  973. package/dist/routes/pages/tools._index.js.map +1 -0
  974. package/dist/routes/pages/transactional-email.$appId.$id.d.ts +5 -0
  975. package/dist/routes/pages/transactional-email.$appId.$id.d.ts.map +1 -0
  976. package/dist/routes/pages/transactional-email.$appId.$id.js +147 -0
  977. package/dist/routes/pages/transactional-email.$appId.$id.js.map +1 -0
  978. package/dist/routes/pages/transactional-email.d.ts +5 -0
  979. package/dist/routes/pages/transactional-email.d.ts.map +1 -0
  980. package/dist/routes/pages/transactional-email.js +143 -0
  981. package/dist/routes/pages/transactional-email.js.map +1 -0
  982. package/dist/routes/pages/vault.d.ts +5 -0
  983. package/dist/routes/pages/vault.d.ts.map +1 -0
  984. package/dist/routes/pages/vault.js +214 -0
  985. package/dist/routes/pages/vault.js.map +1 -0
  986. package/dist/routes/pages/workspace.d.ts +5 -0
  987. package/dist/routes/pages/workspace.d.ts.map +1 -0
  988. package/dist/routes/pages/workspace.js +336 -0
  989. package/dist/routes/pages/workspace.js.map +1 -0
  990. package/dist/server/index.d.ts +44 -0
  991. package/dist/server/index.d.ts.map +1 -0
  992. package/dist/server/index.js +71 -0
  993. package/dist/server/index.js.map +1 -0
  994. package/dist/server/lib/agent-pack-store.d.ts +24 -0
  995. package/dist/server/lib/agent-pack-store.d.ts.map +1 -0
  996. package/dist/server/lib/agent-pack-store.js +22 -0
  997. package/dist/server/lib/agent-pack-store.js.map +1 -0
  998. package/dist/server/lib/app-creation-store.d.ts +164 -0
  999. package/dist/server/lib/app-creation-store.d.ts.map +1 -0
  1000. package/dist/server/lib/app-creation-store.js +1975 -0
  1001. package/dist/server/lib/app-creation-store.js.map +1 -0
  1002. package/dist/server/lib/browser-extension-allowlist.d.ts +9 -0
  1003. package/dist/server/lib/browser-extension-allowlist.d.ts.map +1 -0
  1004. package/dist/server/lib/browser-extension-allowlist.js +39 -0
  1005. package/dist/server/lib/browser-extension-allowlist.js.map +1 -0
  1006. package/dist/server/lib/curated-workspace-templates.d.ts +22 -0
  1007. package/dist/server/lib/curated-workspace-templates.d.ts.map +1 -0
  1008. package/dist/server/lib/curated-workspace-templates.js +137 -0
  1009. package/dist/server/lib/curated-workspace-templates.js.map +1 -0
  1010. package/dist/server/lib/dispatch-integrations.d.ts +16 -0
  1011. package/dist/server/lib/dispatch-integrations.d.ts.map +1 -0
  1012. package/dist/server/lib/dispatch-integrations.js +411 -0
  1013. package/dist/server/lib/dispatch-integrations.js.map +1 -0
  1014. package/dist/server/lib/dispatch-remote-commands.d.ts +83 -0
  1015. package/dist/server/lib/dispatch-remote-commands.d.ts.map +1 -0
  1016. package/dist/server/lib/dispatch-remote-commands.js +256 -0
  1017. package/dist/server/lib/dispatch-remote-commands.js.map +1 -0
  1018. package/dist/server/lib/dispatch-routing.d.ts +6 -0
  1019. package/dist/server/lib/dispatch-routing.d.ts.map +1 -0
  1020. package/dist/server/lib/dispatch-routing.js +30 -0
  1021. package/dist/server/lib/dispatch-routing.js.map +1 -0
  1022. package/dist/server/lib/dispatch-store.d.ts +342 -0
  1023. package/dist/server/lib/dispatch-store.d.ts.map +1 -0
  1024. package/dist/server/lib/dispatch-store.js +725 -0
  1025. package/dist/server/lib/dispatch-store.js.map +1 -0
  1026. package/dist/server/lib/dreams-store.d.ts +398 -0
  1027. package/dist/server/lib/dreams-store.d.ts.map +1 -0
  1028. package/dist/server/lib/dreams-store.js +2330 -0
  1029. package/dist/server/lib/dreams-store.js.map +1 -0
  1030. package/dist/server/lib/env-config.d.ts +3 -0
  1031. package/dist/server/lib/env-config.d.ts.map +1 -0
  1032. package/dist/server/lib/env-config.js +98 -0
  1033. package/dist/server/lib/env-config.js.map +1 -0
  1034. package/dist/server/lib/mcp-access-store.d.ts +16 -0
  1035. package/dist/server/lib/mcp-access-store.d.ts.map +1 -0
  1036. package/dist/server/lib/mcp-access-store.js +92 -0
  1037. package/dist/server/lib/mcp-access-store.js.map +1 -0
  1038. package/dist/server/lib/mcp-gateway.d.ts +90 -0
  1039. package/dist/server/lib/mcp-gateway.d.ts.map +1 -0
  1040. package/dist/server/lib/mcp-gateway.js +1036 -0
  1041. package/dist/server/lib/mcp-gateway.js.map +1 -0
  1042. package/dist/server/lib/onboarding-steps.d.ts +12 -0
  1043. package/dist/server/lib/onboarding-steps.d.ts.map +1 -0
  1044. package/dist/server/lib/onboarding-steps.js +72 -0
  1045. package/dist/server/lib/onboarding-steps.js.map +1 -0
  1046. package/dist/server/lib/provider-api.d.ts +29 -0
  1047. package/dist/server/lib/provider-api.d.ts.map +1 -0
  1048. package/dist/server/lib/provider-api.js +49 -0
  1049. package/dist/server/lib/provider-api.js.map +1 -0
  1050. package/dist/server/lib/thread-debug-store.d.ts +194 -0
  1051. package/dist/server/lib/thread-debug-store.d.ts.map +1 -0
  1052. package/dist/server/lib/thread-debug-store.js +849 -0
  1053. package/dist/server/lib/thread-debug-store.js.map +1 -0
  1054. package/dist/server/lib/thread-link-preview.d.ts +3 -0
  1055. package/dist/server/lib/thread-link-preview.d.ts.map +1 -0
  1056. package/dist/server/lib/thread-link-preview.js +28 -0
  1057. package/dist/server/lib/thread-link-preview.js.map +1 -0
  1058. package/dist/server/lib/usage-metrics-store.d.ts +113 -0
  1059. package/dist/server/lib/usage-metrics-store.d.ts.map +1 -0
  1060. package/dist/server/lib/usage-metrics-store.js +580 -0
  1061. package/dist/server/lib/usage-metrics-store.js.map +1 -0
  1062. package/dist/server/lib/vault-boot-resync.d.ts +23 -0
  1063. package/dist/server/lib/vault-boot-resync.d.ts.map +1 -0
  1064. package/dist/server/lib/vault-boot-resync.js +44 -0
  1065. package/dist/server/lib/vault-boot-resync.js.map +1 -0
  1066. package/dist/server/lib/vault-store.d.ts +381 -0
  1067. package/dist/server/lib/vault-store.d.ts.map +1 -0
  1068. package/dist/server/lib/vault-store.js +1106 -0
  1069. package/dist/server/lib/vault-store.js.map +1 -0
  1070. package/dist/server/lib/workspace-app-action-auth.d.ts +9 -0
  1071. package/dist/server/lib/workspace-app-action-auth.d.ts.map +1 -0
  1072. package/dist/server/lib/workspace-app-action-auth.js +102 -0
  1073. package/dist/server/lib/workspace-app-action-auth.js.map +1 -0
  1074. package/dist/server/lib/workspace-app-chat-proxy.d.ts +52 -0
  1075. package/dist/server/lib/workspace-app-chat-proxy.d.ts.map +1 -0
  1076. package/dist/server/lib/workspace-app-chat-proxy.js +306 -0
  1077. package/dist/server/lib/workspace-app-chat-proxy.js.map +1 -0
  1078. package/dist/server/lib/workspace-resources-store.d.ts +372 -0
  1079. package/dist/server/lib/workspace-resources-store.d.ts.map +1 -0
  1080. package/dist/server/lib/workspace-resources-store.js +1000 -0
  1081. package/dist/server/lib/workspace-resources-store.js.map +1 -0
  1082. package/dist/server/plugins/agent-chat.d.ts +3 -0
  1083. package/dist/server/plugins/agent-chat.d.ts.map +1 -0
  1084. package/dist/server/plugins/agent-chat.js +94 -0
  1085. package/dist/server/plugins/agent-chat.js.map +1 -0
  1086. package/dist/server/plugins/auth.d.ts +9 -0
  1087. package/dist/server/plugins/auth.d.ts.map +1 -0
  1088. package/dist/server/plugins/auth.js +31 -0
  1089. package/dist/server/plugins/auth.js.map +1 -0
  1090. package/dist/server/plugins/core-routes.d.ts +4 -0
  1091. package/dist/server/plugins/core-routes.d.ts.map +1 -0
  1092. package/dist/server/plugins/core-routes.js +18 -0
  1093. package/dist/server/plugins/core-routes.js.map +1 -0
  1094. package/dist/server/plugins/db.d.ts +11 -0
  1095. package/dist/server/plugins/db.d.ts.map +1 -0
  1096. package/dist/server/plugins/db.js +18 -0
  1097. package/dist/server/plugins/db.js.map +1 -0
  1098. package/dist/server/plugins/integrations.d.ts +8 -0
  1099. package/dist/server/plugins/integrations.d.ts.map +1 -0
  1100. package/dist/server/plugins/integrations.js +72 -0
  1101. package/dist/server/plugins/integrations.js.map +1 -0
  1102. package/dist/shared/app-roles.d.ts +9 -0
  1103. package/dist/shared/app-roles.d.ts.map +1 -0
  1104. package/dist/shared/app-roles.js +7 -0
  1105. package/dist/shared/app-roles.js.map +1 -0
  1106. package/dist/shared/chat-first-pane.d.ts +8 -0
  1107. package/dist/shared/chat-first-pane.d.ts.map +1 -0
  1108. package/dist/shared/chat-first-pane.js +8 -0
  1109. package/dist/shared/chat-first-pane.js.map +1 -0
  1110. package/dist/shared/feature-flags.d.ts +8 -0
  1111. package/dist/shared/feature-flags.d.ts.map +1 -0
  1112. package/dist/shared/feature-flags.js +17 -0
  1113. package/dist/shared/feature-flags.js.map +1 -0
  1114. package/dist/shared/workspace-app-chat.d.ts +23 -0
  1115. package/dist/shared/workspace-app-chat.d.ts.map +1 -0
  1116. package/dist/shared/workspace-app-chat.js +45 -0
  1117. package/dist/shared/workspace-app-chat.js.map +1 -0
  1118. package/dist/shared/workspace-sso.d.ts +48 -0
  1119. package/dist/shared/workspace-sso.d.ts.map +1 -0
  1120. package/dist/shared/workspace-sso.js +142 -0
  1121. package/dist/shared/workspace-sso.js.map +1 -0
  1122. package/package.json +118 -0
  1123. package/src/actions/apply-dream-proposal.ts +13 -0
  1124. package/src/actions/approve-dispatch-change.ts +12 -0
  1125. package/src/actions/approve-vault-request.ts +24 -0
  1126. package/src/actions/archive-workspace-app.ts +17 -0
  1127. package/src/actions/ask_app.ts +26 -0
  1128. package/src/actions/ask_app_status.ts +16 -0
  1129. package/src/actions/connect-external-agent.ts +92 -0
  1130. package/src/actions/create-browser-chat-session.spec.ts +122 -0
  1131. package/src/actions/create-browser-chat-session.ts +99 -0
  1132. package/src/actions/create-dream-report.ts +77 -0
  1133. package/src/actions/create-link-token.ts +13 -0
  1134. package/src/actions/create-pylon-ticket.ts +111 -0
  1135. package/src/actions/create-vault-grant.ts +16 -0
  1136. package/src/actions/create-vault-secret.ts +28 -0
  1137. package/src/actions/create-workspace-resource-grant.ts +16 -0
  1138. package/src/actions/create-workspace-resource.ts +37 -0
  1139. package/src/actions/create_embed_session.ts +30 -0
  1140. package/src/actions/create_workspace_app_embed_session.spec.ts +122 -0
  1141. package/src/actions/create_workspace_app_embed_session.ts +102 -0
  1142. package/src/actions/delete-destination.ts +12 -0
  1143. package/src/actions/delete-staged-dataset.ts +10 -0
  1144. package/src/actions/delete-vault-secret.ts +13 -0
  1145. package/src/actions/delete-workspace-resource.ts +13 -0
  1146. package/src/actions/deny-vault-request.ts +13 -0
  1147. package/src/actions/ensure-dream-job.ts +77 -0
  1148. package/src/actions/get-agent-thread-debug.ts +41 -0
  1149. package/src/actions/get-app-creation-settings.ts +12 -0
  1150. package/src/actions/get-dispatch-settings.ts +11 -0
  1151. package/src/actions/get-dream-settings.ts +13 -0
  1152. package/src/actions/get-dream.ts +15 -0
  1153. package/src/actions/get-vault-access-settings.ts +12 -0
  1154. package/src/actions/get-workspace-info.ts +12 -0
  1155. package/src/actions/get-workspace-resource-effective-context.ts +35 -0
  1156. package/src/actions/grant-vault-secrets-to-app.ts +21 -0
  1157. package/src/actions/grant-workspace-resources-to-app.ts +17 -0
  1158. package/src/actions/import-agent-pack.ts +146 -0
  1159. package/src/actions/import-agent.ts +102 -0
  1160. package/src/actions/index.spec.ts +59 -0
  1161. package/src/actions/index.ts +210 -0
  1162. package/src/actions/list-agent-pack.ts +43 -0
  1163. package/src/actions/list-agent-run-failures.ts +50 -0
  1164. package/src/actions/list-agent-thread-sources.ts +13 -0
  1165. package/src/actions/list-available-workspace-templates.ts +12 -0
  1166. package/src/actions/list-connected-agents.spec.ts +73 -0
  1167. package/src/actions/list-connected-agents.ts +112 -0
  1168. package/src/actions/list-curated-workspace-templates.spec.ts +36 -0
  1169. package/src/actions/list-curated-workspace-templates.ts +12 -0
  1170. package/src/actions/list-destinations.ts +11 -0
  1171. package/src/actions/list-dispatch-approvals.ts +11 -0
  1172. package/src/actions/list-dispatch-audit.ts +13 -0
  1173. package/src/actions/list-dispatch-overview.ts +19 -0
  1174. package/src/actions/list-dispatch-usage-metrics.ts +30 -0
  1175. package/src/actions/list-dream-candidates.ts +78 -0
  1176. package/src/actions/list-dreams.ts +18 -0
  1177. package/src/actions/list-integrations-catalog.ts +12 -0
  1178. package/src/actions/list-linked-identities.ts +11 -0
  1179. package/src/actions/list-mcp-app-access.ts +27 -0
  1180. package/src/actions/list-staged-datasets.ts +10 -0
  1181. package/src/actions/list-vault-audit.ts +17 -0
  1182. package/src/actions/list-vault-grants.ts +15 -0
  1183. package/src/actions/list-vault-requests.ts +17 -0
  1184. package/src/actions/list-vault-secret-options.ts +14 -0
  1185. package/src/actions/list-vault-secrets.ts +27 -0
  1186. package/src/actions/list-workspace-apps.ts +33 -0
  1187. package/src/actions/list-workspace-resource-grants.ts +15 -0
  1188. package/src/actions/list-workspace-resource-options.ts +24 -0
  1189. package/src/actions/list-workspace-resources-for-app.ts +14 -0
  1190. package/src/actions/list-workspace-resources.ts +24 -0
  1191. package/src/actions/list_apps.spec.ts +52 -0
  1192. package/src/actions/list_apps.ts +36 -0
  1193. package/src/actions/navigate.ts +53 -0
  1194. package/src/actions/open_app.spec.ts +106 -0
  1195. package/src/actions/open_app.ts +152 -0
  1196. package/src/actions/preview-dream-proposal.ts +15 -0
  1197. package/src/actions/preview-workspace-resource-change.ts +26 -0
  1198. package/src/actions/provider-api-audit.spec.ts +51 -0
  1199. package/src/actions/provider-api-catalog.ts +14 -0
  1200. package/src/actions/provider-api-docs.ts +24 -0
  1201. package/src/actions/provider-api-register.spec.ts +193 -0
  1202. package/src/actions/provider-api-register.ts +35 -0
  1203. package/src/actions/provider-api-request.ts +28 -0
  1204. package/src/actions/query-staged-dataset.ts +10 -0
  1205. package/src/actions/read-slack-thread-context.spec.ts +134 -0
  1206. package/src/actions/read-slack-thread-context.ts +171 -0
  1207. package/src/actions/reject-dispatch-change.ts +13 -0
  1208. package/src/actions/reject-dream-proposal.ts +13 -0
  1209. package/src/actions/remix-workspace-template.spec.ts +145 -0
  1210. package/src/actions/remix-workspace-template.ts +106 -0
  1211. package/src/actions/remove-pending-workspace-app.ts +17 -0
  1212. package/src/actions/request-vault-secret.ts +17 -0
  1213. package/src/actions/resolve-integration-source-context.spec.ts +78 -0
  1214. package/src/actions/resolve-integration-source-context.ts +37 -0
  1215. package/src/actions/restore-starter-workspace-resources.ts +18 -0
  1216. package/src/actions/revoke-vault-grant.ts +12 -0
  1217. package/src/actions/revoke-workspace-resource-grant.ts +16 -0
  1218. package/src/actions/scaffold-workspace-app.spec.ts +33 -0
  1219. package/src/actions/scaffold-workspace-app.ts +57 -0
  1220. package/src/actions/search-agent-threads.ts +31 -0
  1221. package/src/actions/send-code-agent-remote-command.ts +60 -0
  1222. package/src/actions/send-platform-message.spec.ts +129 -0
  1223. package/src/actions/send-platform-message.ts +150 -0
  1224. package/src/actions/set-app-creation-settings.ts +22 -0
  1225. package/src/actions/set-dispatch-approval-policy.ts +25 -0
  1226. package/src/actions/set-dream-settings.spec.ts +81 -0
  1227. package/src/actions/set-dream-settings.ts +45 -0
  1228. package/src/actions/set-mcp-app-access.spec.ts +73 -0
  1229. package/src/actions/set-mcp-app-access.ts +56 -0
  1230. package/src/actions/set-vault-access-settings.ts +17 -0
  1231. package/src/actions/start-workspace-app-creation.ts +55 -0
  1232. package/src/actions/sync-vault-to-app.ts +15 -0
  1233. package/src/actions/unarchive-workspace-app.ts +17 -0
  1234. package/src/actions/update-vault-secret.ts +49 -0
  1235. package/src/actions/update-workspace-app-metadata.ts +33 -0
  1236. package/src/actions/update-workspace-resource.ts +20 -0
  1237. package/src/actions/upsert-destination.ts +30 -0
  1238. package/src/actions/view-screen.spec.ts +212 -0
  1239. package/src/actions/view-screen.ts +398 -0
  1240. package/src/client/transactional-emails.spec.ts +91 -0
  1241. package/src/client/transactional-emails.ts +201 -0
  1242. package/src/components/action-query-error.spec.tsx +56 -0
  1243. package/src/components/action-query-error.tsx +32 -0
  1244. package/src/components/admin-navigation.tsx +329 -0
  1245. package/src/components/agents-panel.tsx +383 -0
  1246. package/src/components/app-icon.spec.tsx +44 -0
  1247. package/src/components/app-icon.tsx +177 -0
  1248. package/src/components/app-keys-popover.spec.tsx +146 -0
  1249. package/src/components/app-keys-popover.tsx +300 -0
  1250. package/src/components/app-list-row.tsx +40 -0
  1251. package/src/components/app-open-actions.tsx +5 -0
  1252. package/src/components/app-row-settings.tsx +54 -0
  1253. package/src/components/approval-value-block.spec.tsx +60 -0
  1254. package/src/components/approval-value-block.tsx +33 -0
  1255. package/src/components/automation-run-history-dialog.tsx +247 -0
  1256. package/src/components/connected-app-card.tsx +39 -0
  1257. package/src/components/create-app-popover.spec.tsx +376 -0
  1258. package/src/components/create-app-popover.tsx +677 -0
  1259. package/src/components/dispatch-control-plane.spec.tsx +344 -0
  1260. package/src/components/dispatch-control-plane.tsx +416 -0
  1261. package/src/components/dispatch-shell.tsx +59 -0
  1262. package/src/components/docs-link.tsx +52 -0
  1263. package/src/components/index.ts +21 -0
  1264. package/src/components/layout/Header.tsx +100 -0
  1265. package/src/components/layout/HeaderActions.tsx +1 -0
  1266. package/src/components/layout/Layout.app-chat.spec.ts +31 -0
  1267. package/src/components/layout/Layout.spec.tsx +549 -0
  1268. package/src/components/layout/Layout.tsx +2532 -0
  1269. package/src/components/layout/workspace-apps-rail.tsx +132 -0
  1270. package/src/components/messaging-setup-panel.spec.tsx +261 -0
  1271. package/src/components/messaging-setup-panel.tsx +1131 -0
  1272. package/src/components/other-apps-section.tsx +223 -0
  1273. package/src/components/simple-agents-panel.spec.tsx +153 -0
  1274. package/src/components/simple-agents-panel.tsx +1311 -0
  1275. package/src/components/task-queue-health.tsx +175 -0
  1276. package/src/components/transactional-email-activity.tsx +102 -0
  1277. package/src/components/transactional-email-metrics.tsx +127 -0
  1278. package/src/components/transactional-email-preview.tsx +88 -0
  1279. package/src/components/ui/accordion.tsx +56 -0
  1280. package/src/components/ui/alert-dialog.tsx +139 -0
  1281. package/src/components/ui/alert.tsx +59 -0
  1282. package/src/components/ui/aspect-ratio.tsx +5 -0
  1283. package/src/components/ui/avatar.tsx +48 -0
  1284. package/src/components/ui/badge.tsx +37 -0
  1285. package/src/components/ui/breadcrumb.tsx +115 -0
  1286. package/src/components/ui/button.tsx +56 -0
  1287. package/src/components/ui/calendar.tsx +68 -0
  1288. package/src/components/ui/card.tsx +86 -0
  1289. package/src/components/ui/carousel.tsx +260 -0
  1290. package/src/components/ui/chart.tsx +375 -0
  1291. package/src/components/ui/checkbox.tsx +28 -0
  1292. package/src/components/ui/collapsible.tsx +9 -0
  1293. package/src/components/ui/command.tsx +154 -0
  1294. package/src/components/ui/context-menu.tsx +198 -0
  1295. package/src/components/ui/dialog.tsx +1 -0
  1296. package/src/components/ui/drawer.tsx +128 -0
  1297. package/src/components/ui/dropdown-menu.tsx +1 -0
  1298. package/src/components/ui/form.tsx +177 -0
  1299. package/src/components/ui/hover-card.tsx +27 -0
  1300. package/src/components/ui/input-otp.tsx +69 -0
  1301. package/src/components/ui/input.tsx +22 -0
  1302. package/src/components/ui/label.tsx +24 -0
  1303. package/src/components/ui/menubar.tsx +235 -0
  1304. package/src/components/ui/navigation-menu.tsx +128 -0
  1305. package/src/components/ui/pagination.tsx +121 -0
  1306. package/src/components/ui/popover.tsx +31 -0
  1307. package/src/components/ui/progress.tsx +26 -0
  1308. package/src/components/ui/radio-group.tsx +42 -0
  1309. package/src/components/ui/resizable.tsx +43 -0
  1310. package/src/components/ui/scroll-area.tsx +46 -0
  1311. package/src/components/ui/select.tsx +1 -0
  1312. package/src/components/ui/separator.tsx +29 -0
  1313. package/src/components/ui/sheet.tsx +139 -0
  1314. package/src/components/ui/sidebar.tsx +777 -0
  1315. package/src/components/ui/skeleton.tsx +15 -0
  1316. package/src/components/ui/slider.tsx +26 -0
  1317. package/src/components/ui/sonner.tsx +58 -0
  1318. package/src/components/ui/spinner.tsx +17 -0
  1319. package/src/components/ui/switch.tsx +27 -0
  1320. package/src/components/ui/table.tsx +117 -0
  1321. package/src/components/ui/tabs.tsx +53 -0
  1322. package/src/components/ui/textarea.tsx +23 -0
  1323. package/src/components/ui/toast.tsx +127 -0
  1324. package/src/components/ui/toaster.tsx +33 -0
  1325. package/src/components/ui/toggle-group.tsx +59 -0
  1326. package/src/components/ui/toggle.tsx +43 -0
  1327. package/src/components/ui/tooltip.tsx +28 -0
  1328. package/src/components/ui/use-toast.ts +3 -0
  1329. package/src/components/usage-alerts-panel.tsx +445 -0
  1330. package/src/components/workspace-app-card.spec.tsx +408 -0
  1331. package/src/components/workspace-app-card.tsx +711 -0
  1332. package/src/components/workspace-app-chat-rail.spec.tsx +182 -0
  1333. package/src/components/workspace-app-host.spec.tsx +688 -0
  1334. package/src/components/workspace-app-host.tsx +756 -0
  1335. package/src/components/workspace-app-search.tsx +96 -0
  1336. package/src/components/workspace-resource-effective-stack.spec.tsx +126 -0
  1337. package/src/components/workspace-resource-effective-stack.tsx +159 -0
  1338. package/src/components/workspace-resource-impact-preview.spec.tsx +148 -0
  1339. package/src/components/workspace-resource-impact-preview.tsx +128 -0
  1340. package/src/components/workspace-template-card.spec.tsx +228 -0
  1341. package/src/components/workspace-template-card.tsx +363 -0
  1342. package/src/config.ts +42 -0
  1343. package/src/db/index.ts +40 -0
  1344. package/src/db/migrations.spec.ts +84 -0
  1345. package/src/db/migrations.ts +251 -0
  1346. package/src/db/schema.ts +209 -0
  1347. package/src/hooks/use-mobile.tsx +1 -0
  1348. package/src/hooks/use-navigation-state.spec.ts +166 -0
  1349. package/src/hooks/use-navigation-state.ts +400 -0
  1350. package/src/hooks/use-toast.ts +188 -0
  1351. package/src/index.ts +19 -0
  1352. package/src/lib/agent-pack.spec.ts +47 -0
  1353. package/src/lib/agent-pack.ts +226 -0
  1354. package/src/lib/automation-display.spec.ts +149 -0
  1355. package/src/lib/automation-display.ts +108 -0
  1356. package/src/lib/automations.spec.ts +64 -0
  1357. package/src/lib/automations.ts +66 -0
  1358. package/src/lib/browser-chat-bridge.spec.ts +151 -0
  1359. package/src/lib/browser-chat-bridge.ts +79 -0
  1360. package/src/lib/browser-chat-protocol.spec.ts +113 -0
  1361. package/src/lib/browser-chat-protocol.ts +124 -0
  1362. package/src/lib/catch-all-target.spec.ts +156 -0
  1363. package/src/lib/catch-all-target.ts +125 -0
  1364. package/src/lib/embed-session-recovery.spec.ts +63 -0
  1365. package/src/lib/embed-session-recovery.ts +26 -0
  1366. package/src/lib/other-apps.spec.ts +133 -0
  1367. package/src/lib/other-apps.ts +57 -0
  1368. package/src/lib/overview-chat.spec.ts +51 -0
  1369. package/src/lib/overview-chat.ts +29 -0
  1370. package/src/lib/simple-agent-profile.spec.ts +77 -0
  1371. package/src/lib/simple-agent-profile.ts +247 -0
  1372. package/src/lib/task-queue.spec.ts +57 -0
  1373. package/src/lib/task-queue.ts +72 -0
  1374. package/src/lib/thread-link-preview.ts +160 -0
  1375. package/src/lib/utils.ts +6 -0
  1376. package/src/lib/workspace-app-layout.spec.ts +47 -0
  1377. package/src/lib/workspace-app-layout.ts +121 -0
  1378. package/src/lib/workspace-apps.spec.ts +175 -0
  1379. package/src/lib/workspace-apps.test.ts +151 -0
  1380. package/src/lib/workspace-apps.ts +306 -0
  1381. package/src/routes/index.spec.ts +39 -0
  1382. package/src/routes/index.ts +95 -0
  1383. package/src/routes/pages/$appId.spec.tsx +115 -0
  1384. package/src/routes/pages/$appId.tsx +240 -0
  1385. package/src/routes/pages/_index.test.ts +34 -0
  1386. package/src/routes/pages/_index.tsx +65 -0
  1387. package/src/routes/pages/admin._index.tsx +107 -0
  1388. package/src/routes/pages/admin.tsx +15 -0
  1389. package/src/routes/pages/agent-integrations.tsx +24 -0
  1390. package/src/routes/pages/agents.tsx +251 -0
  1391. package/src/routes/pages/approval.tsx +301 -0
  1392. package/src/routes/pages/approvals.tsx +198 -0
  1393. package/src/routes/pages/apps.$appId.spec.tsx +66 -0
  1394. package/src/routes/pages/apps.$appId.tsx +22 -0
  1395. package/src/routes/pages/apps.tsx +431 -0
  1396. package/src/routes/pages/audit.tsx +71 -0
  1397. package/src/routes/pages/automations.tsx +363 -0
  1398. package/src/routes/pages/browser-chat.spec.tsx +121 -0
  1399. package/src/routes/pages/browser-chat.tsx +89 -0
  1400. package/src/routes/pages/browser-connect.spec.tsx +137 -0
  1401. package/src/routes/pages/browser-connect.tsx +143 -0
  1402. package/src/routes/pages/chat.spec.tsx +183 -0
  1403. package/src/routes/pages/chat.tsx +335 -0
  1404. package/src/routes/pages/destinations.tsx +309 -0
  1405. package/src/routes/pages/dream-settings.spec.ts +131 -0
  1406. package/src/routes/pages/dream-settings.ts +103 -0
  1407. package/src/routes/pages/dreams.tsx +1812 -0
  1408. package/src/routes/pages/extensions.$id.tsx +9 -0
  1409. package/src/routes/pages/extensions._index.tsx +9 -0
  1410. package/src/routes/pages/identities.tsx +106 -0
  1411. package/src/routes/pages/integrations.tsx +541 -0
  1412. package/src/routes/pages/messaging.tsx +17 -0
  1413. package/src/routes/pages/metrics.tsx +1135 -0
  1414. package/src/routes/pages/new-app.tsx +20 -0
  1415. package/src/routes/pages/operations.tsx +132 -0
  1416. package/src/routes/pages/overview.tsx +22 -0
  1417. package/src/routes/pages/settings.tsx +196 -0
  1418. package/src/routes/pages/team.tsx +9 -0
  1419. package/src/routes/pages/thread-debug.spec.tsx +370 -0
  1420. package/src/routes/pages/thread-debug.tsx +1923 -0
  1421. package/src/routes/pages/tools.$id.tsx +9 -0
  1422. package/src/routes/pages/tools._index.tsx +9 -0
  1423. package/src/routes/pages/transactional-email.$appId.$id.tsx +369 -0
  1424. package/src/routes/pages/transactional-email.tsx +575 -0
  1425. package/src/routes/pages/vault.tsx +978 -0
  1426. package/src/routes/pages/workspace.tsx +1213 -0
  1427. package/src/server/index.ts +86 -0
  1428. package/src/server/lib/agent-pack-store.ts +35 -0
  1429. package/src/server/lib/app-creation-store.spec.ts +1018 -0
  1430. package/src/server/lib/app-creation-store.ts +2567 -0
  1431. package/src/server/lib/approval-fencing.spec.ts +489 -0
  1432. package/src/server/lib/browser-extension-allowlist.spec.ts +76 -0
  1433. package/src/server/lib/browser-extension-allowlist.ts +58 -0
  1434. package/src/server/lib/curated-workspace-templates.spec.ts +56 -0
  1435. package/src/server/lib/curated-workspace-templates.ts +187 -0
  1436. package/src/server/lib/dispatch-integrations.spec.ts +428 -0
  1437. package/src/server/lib/dispatch-integrations.ts +528 -0
  1438. package/src/server/lib/dispatch-remote-commands.spec.ts +168 -0
  1439. package/src/server/lib/dispatch-remote-commands.ts +375 -0
  1440. package/src/server/lib/dispatch-routing.spec.ts +44 -0
  1441. package/src/server/lib/dispatch-routing.ts +42 -0
  1442. package/src/server/lib/dispatch-store.ts +1008 -0
  1443. package/src/server/lib/dreams-store.spec.ts +1492 -0
  1444. package/src/server/lib/dreams-store.ts +3187 -0
  1445. package/src/server/lib/env-config.ts +99 -0
  1446. package/src/server/lib/mcp-access-store.spec.ts +171 -0
  1447. package/src/server/lib/mcp-access-store.ts +138 -0
  1448. package/src/server/lib/mcp-gateway.spec.ts +1583 -0
  1449. package/src/server/lib/mcp-gateway.ts +1388 -0
  1450. package/src/server/lib/onboarding-steps.ts +82 -0
  1451. package/src/server/lib/provider-api.ts +69 -0
  1452. package/src/server/lib/thread-debug-store.spec.ts +439 -0
  1453. package/src/server/lib/thread-debug-store.ts +1170 -0
  1454. package/src/server/lib/thread-link-preview.spec.ts +127 -0
  1455. package/src/server/lib/thread-link-preview.ts +32 -0
  1456. package/src/server/lib/usage-metrics-store.spec.ts +240 -0
  1457. package/src/server/lib/usage-metrics-store.ts +879 -0
  1458. package/src/server/lib/vault-boot-resync.spec.ts +68 -0
  1459. package/src/server/lib/vault-boot-resync.ts +50 -0
  1460. package/src/server/lib/vault-store.spec.ts +541 -0
  1461. package/src/server/lib/vault-store.ts +1540 -0
  1462. package/src/server/lib/workspace-app-action-auth.spec.ts +212 -0
  1463. package/src/server/lib/workspace-app-action-auth.ts +122 -0
  1464. package/src/server/lib/workspace-app-chat-proxy.spec.ts +322 -0
  1465. package/src/server/lib/workspace-app-chat-proxy.ts +389 -0
  1466. package/src/server/lib/workspace-resource-approval-lifecycle.spec.ts +227 -0
  1467. package/src/server/lib/workspace-resources-store.spec.ts +1108 -0
  1468. package/src/server/lib/workspace-resources-store.ts +1403 -0
  1469. package/src/server/plugins/agent-chat.spec.ts +43 -0
  1470. package/src/server/plugins/agent-chat.ts +99 -0
  1471. package/src/server/plugins/auth.spec.ts +45 -0
  1472. package/src/server/plugins/auth.ts +36 -0
  1473. package/src/server/plugins/core-routes.ts +29 -0
  1474. package/src/server/plugins/db.ts +20 -0
  1475. package/src/server/plugins/integrations.ts +82 -0
  1476. package/src/shared/app-roles.ts +8 -0
  1477. package/src/shared/chat-first-pane.ts +7 -0
  1478. package/src/shared/feature-flags.ts +20 -0
  1479. package/src/shared/workspace-app-chat.ts +45 -0
  1480. package/src/shared/workspace-sso.ts +173 -0
  1481. package/src/styles/dispatch-css.spec.ts +87 -0
  1482. package/src/styles/dispatch.css +146 -0
@@ -0,0 +1,1583 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+
3
+ const mocks = vi.hoisted(() => ({
4
+ discoverAgents: vi.fn(),
5
+ getBuiltinAgents: vi.fn(() => []),
6
+ listWorkspaceApps: vi.fn(),
7
+ getUserSetting: vi.fn(),
8
+ getOrgSetting: vi.fn(),
9
+ createEmbedSessionTicket: vi.fn(),
10
+ buildEmbedStartPath: vi.fn((ticket: string) => {
11
+ return `/_agent-native/embed/start?ticket=${encodeURIComponent(ticket)}`;
12
+ }),
13
+ managerStart: vi.fn(),
14
+ managerStop: vi.fn(),
15
+ managerCallTool: vi.fn(),
16
+ managerConstructor: vi.fn(),
17
+ a2aConstructor: vi.fn(),
18
+ a2aSend: vi.fn(),
19
+ a2aGetTask: vi.fn(),
20
+ signA2AToken: vi.fn(),
21
+ canonicalA2AAudience: vi.fn((url: string) => url.replace(/\/+$/, "")),
22
+ getOrgA2ASecret: vi.fn(),
23
+ getOrgDomain: vi.fn(),
24
+ isFeatureFlagEnabled: vi.fn(),
25
+ }));
26
+
27
+ vi.mock("@agent-native/core/server/agent-discovery", () => ({
28
+ discoverAgents: mocks.discoverAgents,
29
+ getBuiltinAgents: mocks.getBuiltinAgents,
30
+ }));
31
+
32
+ vi.mock("./app-creation-store.js", () => ({
33
+ listWorkspaceApps: mocks.listWorkspaceApps,
34
+ }));
35
+
36
+ vi.mock("@agent-native/core/feature-flags", async (importOriginal) => {
37
+ const actual =
38
+ await importOriginal<typeof import("@agent-native/core/feature-flags")>();
39
+ return {
40
+ ...actual,
41
+ isFeatureFlagEnabled: mocks.isFeatureFlagEnabled,
42
+ };
43
+ });
44
+
45
+ vi.mock("@agent-native/core/settings", () => ({
46
+ getUserSetting: mocks.getUserSetting,
47
+ getOrgSetting: mocks.getOrgSetting,
48
+ putUserSetting: vi.fn(),
49
+ putOrgSetting: vi.fn(),
50
+ }));
51
+
52
+ vi.mock("@agent-native/core/server", async (importOriginal) => {
53
+ const actual =
54
+ await importOriginal<typeof import("@agent-native/core/server")>();
55
+ return {
56
+ ...actual,
57
+ createEmbedSessionTicket: mocks.createEmbedSessionTicket,
58
+ buildEmbedStartPath: mocks.buildEmbedStartPath,
59
+ };
60
+ });
61
+
62
+ vi.mock("@agent-native/core/a2a", () => ({
63
+ A2AClient: class MockA2AClient {
64
+ constructor(...args: unknown[]) {
65
+ mocks.a2aConstructor(...args);
66
+ }
67
+
68
+ send(...args: unknown[]) {
69
+ return mocks.a2aSend(...args);
70
+ }
71
+
72
+ getTask(...args: unknown[]) {
73
+ return mocks.a2aGetTask(...args);
74
+ }
75
+ },
76
+ signA2AToken: mocks.signA2AToken,
77
+ canonicalA2AAudience: mocks.canonicalA2AAudience,
78
+ }));
79
+
80
+ vi.mock("@agent-native/core/org", () => ({
81
+ getOrgA2ASecret: mocks.getOrgA2ASecret,
82
+ getOrgDomain: mocks.getOrgDomain,
83
+ }));
84
+
85
+ vi.mock("@agent-native/core/mcp-client", () => ({
86
+ buildMcpToolName: (serverId: string, toolName: string) =>
87
+ `mcp__${serverId}__${toolName}`,
88
+ McpClientManager: class MockMcpClientManager {
89
+ constructor(config: unknown) {
90
+ mocks.managerConstructor(config);
91
+ }
92
+
93
+ start() {
94
+ return mocks.managerStart();
95
+ }
96
+
97
+ stop() {
98
+ return mocks.managerStop();
99
+ }
100
+
101
+ callTool(name: string, args: unknown) {
102
+ return mocks.managerCallTool(name, args);
103
+ }
104
+ },
105
+ }));
106
+
107
+ import { runWithRequestContext } from "@agent-native/core/server";
108
+
109
+ import {
110
+ createGrantedDispatchMcpEmbedSession,
111
+ createWorkspaceSsoEmbedSession,
112
+ askGrantedDispatchMcpApp,
113
+ getGrantedDispatchMcpAppTask,
114
+ listGrantedDispatchMcpApps,
115
+ listGrantedDispatchMcpAppOrigins,
116
+ openGrantedDispatchMcpApp,
117
+ resolveGrantedDispatchMcpApp,
118
+ } from "./mcp-gateway.js";
119
+
120
+ const analyticsAgent = {
121
+ id: "analytics",
122
+ name: "Analytics",
123
+ description: "Dashboards and metrics",
124
+ url: "http://localhost:8086",
125
+ color: "#6366F1",
126
+ };
127
+
128
+ beforeEach(() => {
129
+ mocks.a2aConstructor.mockReset();
130
+ mocks.a2aSend.mockReset();
131
+ mocks.a2aGetTask.mockReset();
132
+ mocks.signA2AToken.mockReset();
133
+ mocks.discoverAgents.mockResolvedValue([analyticsAgent]);
134
+ mocks.getBuiltinAgents.mockReturnValue([]);
135
+ mocks.listWorkspaceApps.mockResolvedValue([]);
136
+ mocks.getUserSetting.mockResolvedValue({ mode: "all-apps" });
137
+ mocks.getOrgSetting.mockResolvedValue({ mode: "all-apps" });
138
+ mocks.createEmbedSessionTicket.mockResolvedValue({
139
+ ticket: "ticket-123",
140
+ ticketHash: "hash-123",
141
+ expiresAt: 12345,
142
+ });
143
+ mocks.managerStart.mockResolvedValue(undefined);
144
+ mocks.managerStop.mockResolvedValue(undefined);
145
+ mocks.managerCallTool.mockResolvedValue({
146
+ structuredContent: {
147
+ startUrl: "http://localhost:8086/_agent-native/embed/start?ticket=remote",
148
+ },
149
+ });
150
+ mocks.a2aSend.mockResolvedValue({
151
+ id: "task-1",
152
+ status: {
153
+ state: "completed",
154
+ message: {
155
+ role: "agent",
156
+ parts: [{ type: "text", text: "Created the requested dashboard." }],
157
+ },
158
+ },
159
+ });
160
+ mocks.signA2AToken.mockResolvedValue("signed-token");
161
+ mocks.getOrgA2ASecret.mockResolvedValue(null);
162
+ mocks.getOrgDomain.mockResolvedValue(null);
163
+ mocks.isFeatureFlagEnabled.mockResolvedValue(true);
164
+ });
165
+
166
+ afterEach(() => {
167
+ vi.useRealTimers();
168
+ vi.unstubAllEnvs();
169
+ vi.clearAllMocks();
170
+ });
171
+
172
+ describe("Dispatch MCP gateway app discovery", () => {
173
+ it("defaults to exposing every discovered app", async () => {
174
+ mocks.getUserSetting.mockResolvedValue(null);
175
+ const apps = await runWithRequestContext(
176
+ {
177
+ userEmail: "owner@example.test",
178
+ requestOrigin: "http://localhost:8092",
179
+ },
180
+ () => listGrantedDispatchMcpApps(),
181
+ );
182
+
183
+ expect(apps.map((app) => app.id)).toEqual(["dispatch", "analytics"]);
184
+ });
185
+
186
+ it("includes Dispatch itself so agents can target extension routes", async () => {
187
+ mocks.getUserSetting.mockResolvedValue({ mode: "all-apps" });
188
+ const apps = await runWithRequestContext(
189
+ {
190
+ userEmail: "owner@example.test",
191
+ requestOrigin: "http://localhost:8092",
192
+ },
193
+ () => listGrantedDispatchMcpApps(),
194
+ );
195
+
196
+ expect(apps.map((app) => app.id)).toEqual(["dispatch", "analytics"]);
197
+ expect(apps[0]).toMatchObject({
198
+ id: "dispatch",
199
+ name: "Dispatch",
200
+ url: "http://localhost:8092",
201
+ granted: true,
202
+ });
203
+ });
204
+
205
+ it("honors selected app grants for the Dispatch self target", async () => {
206
+ mocks.getUserSetting.mockResolvedValue({
207
+ mode: "selected-apps",
208
+ selectedAppIds: ["dispatch"],
209
+ });
210
+
211
+ const apps = await runWithRequestContext(
212
+ {
213
+ userEmail: "owner@example.test",
214
+ requestOrigin: "http://localhost:8092",
215
+ },
216
+ () => listGrantedDispatchMcpApps(),
217
+ );
218
+
219
+ expect(apps.map((app) => app.id)).toEqual(["dispatch"]);
220
+ });
221
+
222
+ it("returns deduped origins for granted Dispatch MCP apps only", async () => {
223
+ mocks.discoverAgents.mockResolvedValue([
224
+ analyticsAgent,
225
+ {
226
+ ...analyticsAgent,
227
+ id: "analytics-copy",
228
+ name: "Analytics Copy",
229
+ },
230
+ {
231
+ id: "mail",
232
+ name: "Mail",
233
+ description: "Mail",
234
+ url: "https://mail.agent-native.com/inbox",
235
+ color: "#2563EB",
236
+ },
237
+ {
238
+ id: "bad-url",
239
+ name: "Bad URL",
240
+ description: "Invalid manifest URL",
241
+ url: "mail.agent-native.com",
242
+ color: "#111827",
243
+ },
244
+ {
245
+ id: "file-url",
246
+ name: "File URL",
247
+ description: "Unsupported manifest URL scheme",
248
+ url: "file:///tmp/app",
249
+ color: "#111827",
250
+ },
251
+ ]);
252
+ mocks.getUserSetting.mockResolvedValue({
253
+ mode: "selected-apps",
254
+ selectedAppIds: ["dispatch", "analytics", "mail", "bad-url", "file-url"],
255
+ });
256
+
257
+ const origins = await runWithRequestContext(
258
+ {
259
+ userEmail: "owner@example.test",
260
+ requestOrigin: "http://localhost:8092",
261
+ },
262
+ () => listGrantedDispatchMcpAppOrigins(),
263
+ );
264
+ const apps = await runWithRequestContext(
265
+ {
266
+ userEmail: "owner@example.test",
267
+ requestOrigin: "http://localhost:8092",
268
+ },
269
+ () => listGrantedDispatchMcpApps(),
270
+ );
271
+
272
+ expect(origins).toEqual([
273
+ "http://localhost:8092",
274
+ "http://localhost:8086",
275
+ "https://mail.agent-native.com",
276
+ ]);
277
+ expect(apps.map((app) => app.id)).toEqual([
278
+ "dispatch",
279
+ "analytics",
280
+ "mail",
281
+ ]);
282
+ });
283
+
284
+ it("rejects malformed granted app URLs before routing MCP actions", async () => {
285
+ mocks.discoverAgents.mockResolvedValue([
286
+ {
287
+ id: "bad-url",
288
+ name: "Bad URL",
289
+ description: "Invalid manifest URL",
290
+ url: "mail.agent-native.com",
291
+ color: "#111827",
292
+ },
293
+ ]);
294
+ mocks.getUserSetting.mockResolvedValue({ mode: "all-apps" });
295
+
296
+ await expect(
297
+ runWithRequestContext(
298
+ {
299
+ userEmail: "owner@example.test",
300
+ requestOrigin: "http://localhost:8092",
301
+ },
302
+ () => resolveGrantedDispatchMcpApp("bad-url"),
303
+ ),
304
+ ).rejects.toThrow(/invalid URL/);
305
+ });
306
+ });
307
+
308
+ describe("askGrantedDispatchMcpApp", () => {
309
+ it("routes the authenticated user and active org identity to the granted app", async () => {
310
+ mocks.getOrgSetting.mockResolvedValue({
311
+ mode: "selected-apps",
312
+ selectedAppIds: ["analytics"],
313
+ });
314
+ mocks.getOrgDomain.mockResolvedValue("builder.io");
315
+ mocks.getOrgA2ASecret.mockResolvedValue("org-specific-secret");
316
+
317
+ const result = await runWithRequestContext(
318
+ {
319
+ userEmail: "owner@example.test",
320
+ orgId: "org-1",
321
+ requestOrigin: "http://localhost:8092",
322
+ },
323
+ () =>
324
+ askGrantedDispatchMcpApp(
325
+ "analytics",
326
+ "Build a weekly active users dashboard.",
327
+ ),
328
+ );
329
+
330
+ expect(mocks.a2aConstructor).toHaveBeenCalledWith(
331
+ "http://localhost:8086",
332
+ "signed-token",
333
+ { requestTimeoutMs: 10_000 },
334
+ );
335
+ expect(mocks.a2aSend).toHaveBeenCalledWith(
336
+ {
337
+ role: "user",
338
+ parts: [
339
+ { type: "text", text: "Build a weekly active users dashboard." },
340
+ ],
341
+ },
342
+ {
343
+ async: true,
344
+ metadata: {
345
+ userEmail: "owner@example.test",
346
+ orgDomain: "builder.io",
347
+ requestOrigin: "http://localhost:8092",
348
+ },
349
+ },
350
+ );
351
+ expect(result).toMatchObject({
352
+ app: "analytics",
353
+ routedVia: "a2a",
354
+ response: "Created the requested dashboard.",
355
+ taskId: "task-1",
356
+ status: "completed",
357
+ });
358
+ });
359
+
360
+ it("returns a durable polling handle when the downstream task is still working", async () => {
361
+ mocks.a2aSend.mockResolvedValueOnce({
362
+ id: "task-working",
363
+ status: { state: "working" },
364
+ });
365
+
366
+ const result = await runWithRequestContext(
367
+ {
368
+ userEmail: "owner@example.test",
369
+ requestOrigin: "http://localhost:8092",
370
+ },
371
+ () =>
372
+ askGrantedDispatchMcpApp("analytics", "Build the report.", {
373
+ async: true,
374
+ }),
375
+ );
376
+
377
+ expect(result).toEqual({
378
+ app: "analytics",
379
+ routedVia: "a2a",
380
+ taskId: "task-working",
381
+ status: "working",
382
+ pollAfterMs: 1_500,
383
+ poll: {
384
+ tool: "ask_app_status",
385
+ arguments: { app: "analytics", taskId: "task-working" },
386
+ },
387
+ message:
388
+ 'ask_app is still working. Call ask_app_status with taskId "task-working" to retrieve the final response.',
389
+ });
390
+ });
391
+
392
+ it("counts submission and every poll against one inline deadline", async () => {
393
+ vi.useFakeTimers();
394
+ vi.setSystemTime(0);
395
+ mocks.a2aSend.mockImplementationOnce(
396
+ () =>
397
+ new Promise((resolve) => {
398
+ setTimeout(
399
+ () =>
400
+ resolve({
401
+ id: "task-deadline",
402
+ status: { state: "working" },
403
+ }),
404
+ 3_000,
405
+ );
406
+ }),
407
+ );
408
+ mocks.a2aGetTask.mockImplementationOnce(() => new Promise(() => undefined));
409
+
410
+ const resultPromise = runWithRequestContext(
411
+ {
412
+ userEmail: "owner@example.test",
413
+ requestOrigin: "http://localhost:8092",
414
+ },
415
+ () =>
416
+ askGrantedDispatchMcpApp("analytics", "Build the report.", {
417
+ maxWaitMs: 5_000,
418
+ }),
419
+ );
420
+
421
+ await vi.advanceTimersByTimeAsync(5_000);
422
+
423
+ await expect(resultPromise).resolves.toMatchObject({
424
+ taskId: "task-deadline",
425
+ status: "working",
426
+ pollAfterMs: 1_500,
427
+ });
428
+ expect(Date.now()).toBe(5_000);
429
+ expect(mocks.a2aConstructor).toHaveBeenCalledWith(
430
+ "http://localhost:8086",
431
+ undefined,
432
+ { requestTimeoutMs: 5_000 },
433
+ );
434
+ expect(mocks.a2aGetTask).toHaveBeenCalledTimes(1);
435
+ });
436
+
437
+ it.each([401, 403, 404])(
438
+ "surfaces permanent %s status errors without waiting until the deadline",
439
+ async (statusCode) => {
440
+ vi.useFakeTimers();
441
+ vi.setSystemTime(0);
442
+ mocks.a2aSend.mockResolvedValueOnce({
443
+ id: "task-missing",
444
+ status: { state: "working" },
445
+ });
446
+ mocks.a2aGetTask.mockRejectedValueOnce(
447
+ new Error(`A2A request failed (${statusCode}): Task not found`),
448
+ );
449
+
450
+ const resultPromise = runWithRequestContext(
451
+ {
452
+ userEmail: "owner@example.test",
453
+ requestOrigin: "http://localhost:8092",
454
+ },
455
+ () =>
456
+ askGrantedDispatchMcpApp("analytics", "Build the report.", {
457
+ maxWaitMs: 20_000,
458
+ }),
459
+ );
460
+ const rejection = resultPromise.catch((err) => err);
461
+
462
+ await vi.advanceTimersByTimeAsync(0);
463
+ await vi.advanceTimersByTimeAsync(1_500);
464
+
465
+ await expect(rejection).resolves.toEqual(
466
+ expect.objectContaining({
467
+ message: expect.stringMatching(
468
+ new RegExp(`${statusCode}.*not found`, "i"),
469
+ ),
470
+ }),
471
+ );
472
+ expect(Date.now()).toBe(1_500);
473
+ expect(mocks.a2aGetTask).toHaveBeenCalledTimes(1);
474
+ },
475
+ );
476
+
477
+ it("retries transient status failures within the same deadline", async () => {
478
+ vi.useFakeTimers();
479
+ vi.setSystemTime(0);
480
+ mocks.a2aSend.mockResolvedValueOnce({
481
+ id: "task-transient",
482
+ status: { state: "working" },
483
+ });
484
+ mocks.a2aGetTask
485
+ .mockRejectedValueOnce(new Error("A2A request failed (503): retry"))
486
+ .mockResolvedValueOnce({
487
+ id: "task-transient",
488
+ status: {
489
+ state: "completed",
490
+ message: {
491
+ role: "agent",
492
+ parts: [{ type: "text", text: "The report is ready." }],
493
+ },
494
+ },
495
+ });
496
+
497
+ const resultPromise = runWithRequestContext(
498
+ {
499
+ userEmail: "owner@example.test",
500
+ requestOrigin: "http://localhost:8092",
501
+ },
502
+ () =>
503
+ askGrantedDispatchMcpApp("analytics", "Build the report.", {
504
+ maxWaitMs: 20_000,
505
+ }),
506
+ );
507
+
508
+ await vi.advanceTimersByTimeAsync(0);
509
+ await vi.advanceTimersByTimeAsync(3_000);
510
+
511
+ await expect(resultPromise).resolves.toMatchObject({
512
+ taskId: "task-transient",
513
+ status: "completed",
514
+ response: "The report is ready.",
515
+ });
516
+ expect(mocks.a2aGetTask).toHaveBeenCalledTimes(2);
517
+ });
518
+
519
+ it("returns input-required as a terminal handoff instead of a poll loop", async () => {
520
+ mocks.a2aSend.mockResolvedValueOnce({
521
+ id: "task-input",
522
+ status: {
523
+ state: "input-required",
524
+ message: {
525
+ role: "agent",
526
+ parts: [{ type: "text", text: "Which date range should I use?" }],
527
+ },
528
+ },
529
+ });
530
+
531
+ const result = await runWithRequestContext(
532
+ {
533
+ userEmail: "owner@example.test",
534
+ requestOrigin: "http://localhost:8092",
535
+ },
536
+ () => askGrantedDispatchMcpApp("analytics", "Build the report."),
537
+ );
538
+
539
+ expect(result).toEqual({
540
+ app: "analytics",
541
+ routedVia: "a2a",
542
+ taskId: "task-input",
543
+ status: "input-required",
544
+ response: "Which date range should I use?",
545
+ inputRequired: "Which date range should I use?",
546
+ message: "Which date range should I use?",
547
+ });
548
+ expect(mocks.a2aGetTask).not.toHaveBeenCalled();
549
+ });
550
+
551
+ it("polls a granted app task through the same authenticated A2A route", async () => {
552
+ mocks.a2aGetTask.mockResolvedValueOnce({
553
+ id: "task-working",
554
+ status: {
555
+ state: "completed",
556
+ message: {
557
+ role: "agent",
558
+ parts: [{ type: "text", text: "The report is ready." }],
559
+ },
560
+ },
561
+ });
562
+ mocks.getUserSetting.mockResolvedValue({
563
+ mode: "selected-apps",
564
+ selectedAppIds: ["analytics"],
565
+ });
566
+
567
+ const result = await runWithRequestContext(
568
+ {
569
+ userEmail: "owner@example.test",
570
+ requestOrigin: "http://localhost:8092",
571
+ },
572
+ () => getGrantedDispatchMcpAppTask("analytics", "task-working"),
573
+ );
574
+
575
+ expect(mocks.a2aGetTask).toHaveBeenCalledWith("task-working");
576
+ expect(result).toEqual({
577
+ app: "analytics",
578
+ routedVia: "a2a",
579
+ taskId: "task-working",
580
+ status: "completed",
581
+ response: "The report is ready.",
582
+ });
583
+ });
584
+
585
+ it("returns a recoverable envelope when transient task status reads exhaust retries", async () => {
586
+ vi.useFakeTimers();
587
+ vi.setSystemTime(0);
588
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
589
+ mocks.a2aGetTask.mockRejectedValue(new TypeError("fetch failed"));
590
+
591
+ const resultPromise = runWithRequestContext(
592
+ {
593
+ userEmail: "owner@example.test",
594
+ requestOrigin: "http://localhost:8092",
595
+ },
596
+ () => getGrantedDispatchMcpAppTask("analytics", "task-unavailable"),
597
+ );
598
+
599
+ await vi.advanceTimersByTimeAsync(2_500);
600
+
601
+ await expect(resultPromise).resolves.toMatchObject({
602
+ app: "analytics",
603
+ routedVia: "a2a",
604
+ taskId: "task-unavailable",
605
+ status: "unknown",
606
+ statusRead: "unavailable",
607
+ retryable: true,
608
+ errorCategory: "transport",
609
+ attempts: 4,
610
+ pollAfterMs: 1_500,
611
+ poll: {
612
+ tool: "ask_app_status",
613
+ arguments: { app: "analytics", taskId: "task-unavailable" },
614
+ },
615
+ message: expect.stringMatching(
616
+ /status could not be read.*may still be running or completed.*retry.*ask_app_status.*do not resubmit ask_app/i,
617
+ ),
618
+ });
619
+ expect(mocks.a2aGetTask).toHaveBeenCalledTimes(4);
620
+ expect(mocks.a2aSend).not.toHaveBeenCalled();
621
+ expect(warnSpy).toHaveBeenCalledTimes(4);
622
+ expect(warnSpy).toHaveBeenLastCalledWith(
623
+ "[ask_app_status] tasks/get attempt failed",
624
+ expect.objectContaining({
625
+ app: "analytics",
626
+ routedVia: "a2a",
627
+ taskId: "task-unavailable",
628
+ originHost: "localhost:8086",
629
+ attempt: 4,
630
+ maxAttempts: 4,
631
+ errorCategory: "transport",
632
+ errorName: "TypeError",
633
+ willRetry: false,
634
+ }),
635
+ );
636
+ });
637
+
638
+ it("does not retry permanent task status read errors", async () => {
639
+ mocks.a2aGetTask.mockRejectedValueOnce(
640
+ new Error("A2A request failed (404): Task not found"),
641
+ );
642
+
643
+ await expect(
644
+ runWithRequestContext(
645
+ {
646
+ userEmail: "owner@example.test",
647
+ requestOrigin: "http://localhost:8092",
648
+ },
649
+ () => getGrantedDispatchMcpAppTask("analytics", "task-missing"),
650
+ ),
651
+ ).rejects.toThrow(/404.*task not found/i);
652
+ expect(mocks.a2aGetTask).toHaveBeenCalledTimes(1);
653
+ expect(mocks.a2aSend).not.toHaveBeenCalled();
654
+ });
655
+
656
+ it("rejects delegation to an app outside the grant", async () => {
657
+ mocks.getUserSetting.mockResolvedValue({
658
+ mode: "selected-apps",
659
+ selectedAppIds: ["dispatch"],
660
+ });
661
+
662
+ await expect(
663
+ runWithRequestContext(
664
+ {
665
+ userEmail: "owner@example.test",
666
+ requestOrigin: "http://localhost:8092",
667
+ },
668
+ () => askGrantedDispatchMcpApp("analytics", "Show signups."),
669
+ ),
670
+ ).rejects.toThrow(/not granted/);
671
+ expect(mocks.a2aSend).not.toHaveBeenCalled();
672
+ });
673
+
674
+ it("rejects polling a task for an app outside the grant", async () => {
675
+ mocks.getUserSetting.mockResolvedValue({
676
+ mode: "selected-apps",
677
+ selectedAppIds: ["dispatch"],
678
+ });
679
+
680
+ await expect(
681
+ runWithRequestContext(
682
+ {
683
+ userEmail: "owner@example.test",
684
+ requestOrigin: "http://localhost:8092",
685
+ },
686
+ () => getGrantedDispatchMcpAppTask("analytics", "task-working"),
687
+ ),
688
+ ).rejects.toThrow(/not granted/);
689
+ expect(mocks.a2aGetTask).not.toHaveBeenCalled();
690
+ });
691
+ });
692
+
693
+ describe("openGrantedDispatchMcpApp", () => {
694
+ it("opens Dispatch extension routes through the Dispatch app id", async () => {
695
+ const result = await runWithRequestContext(
696
+ {
697
+ userEmail: "owner@example.test",
698
+ requestOrigin: "http://localhost:8092",
699
+ },
700
+ () =>
701
+ openGrantedDispatchMcpApp({
702
+ app: "dispatch",
703
+ path: "/extensions/ext-1/github-stars-over-time",
704
+ embed: true,
705
+ chrome: "minimal",
706
+ }),
707
+ );
708
+
709
+ expect(result).toEqual({
710
+ app: "dispatch",
711
+ path: "/extensions/ext-1/github-stars-over-time",
712
+ url: "http://localhost:8092/extensions/ext-1/github-stars-over-time",
713
+ embed: true,
714
+ chrome: "minimal",
715
+ embedStartUrl:
716
+ "http://localhost:8092/_agent-native/embed/start?ticket=ticket-123",
717
+ embedTargetPath: "/extensions/ext-1/github-stars-over-time",
718
+ embedExpiresAt: 12345,
719
+ });
720
+ });
721
+
722
+ it("pre-mints cross-app embed sessions for MCP app hosts", async () => {
723
+ const result = await runWithRequestContext(
724
+ {
725
+ userEmail: "owner@example.test",
726
+ requestOrigin: "http://localhost:8092",
727
+ },
728
+ () =>
729
+ openGrantedDispatchMcpApp({
730
+ app: "analytics",
731
+ path: "/dashboards?range=30d",
732
+ embed: true,
733
+ chrome: "minimal",
734
+ }),
735
+ );
736
+
737
+ expect(mocks.managerCallTool).toHaveBeenCalledWith(
738
+ "mcp__target__create_embed_session",
739
+ {
740
+ url: "http://localhost:8086/dashboards?range=30d",
741
+ chrome: "minimal",
742
+ },
743
+ );
744
+ expect(result).toEqual({
745
+ app: "analytics",
746
+ path: "/dashboards?range=30d",
747
+ url: "http://localhost:8086/dashboards?range=30d",
748
+ embed: true,
749
+ chrome: "minimal",
750
+ embedStartUrl:
751
+ "http://localhost:8086/_agent-native/embed/start?ticket=remote",
752
+ });
753
+ });
754
+
755
+ it("retries transient target MCP connection failures while pre-minting embeds", async () => {
756
+ const randomSpy = vi.spyOn(Math, "random").mockReturnValue(0);
757
+ mocks.managerCallTool
758
+ .mockRejectedValueOnce(
759
+ new Error(
760
+ 'MCP server "target" is not connected: The server did not complete the Streamable HTTP MCP handshake.',
761
+ ),
762
+ )
763
+ .mockResolvedValueOnce({
764
+ structuredContent: {
765
+ startUrl:
766
+ "http://localhost:8086/_agent-native/embed/start?ticket=remote",
767
+ },
768
+ });
769
+
770
+ const result = await runWithRequestContext(
771
+ {
772
+ userEmail: "owner@example.test",
773
+ requestOrigin: "http://localhost:8092",
774
+ },
775
+ () =>
776
+ openGrantedDispatchMcpApp({
777
+ app: "analytics",
778
+ path: "/dashboards",
779
+ embed: true,
780
+ }),
781
+ );
782
+
783
+ expect(mocks.managerConstructor).toHaveBeenCalledTimes(2);
784
+ expect(mocks.managerStart).toHaveBeenCalledTimes(2);
785
+ expect(mocks.managerStop).toHaveBeenCalledTimes(2);
786
+ expect(mocks.managerCallTool).toHaveBeenCalledTimes(2);
787
+ expect(result).toMatchObject({
788
+ app: "analytics",
789
+ embedStartUrl:
790
+ "http://localhost:8086/_agent-native/embed/start?ticket=remote",
791
+ });
792
+ randomSpy.mockRestore();
793
+ });
794
+
795
+ it("returns the normal open URL when embed preminting fails", async () => {
796
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
797
+ mocks.managerCallTool.mockRejectedValueOnce(
798
+ new Error("Target app did not return an embed session."),
799
+ );
800
+
801
+ const result = await runWithRequestContext(
802
+ {
803
+ userEmail: "owner@example.test",
804
+ requestOrigin: "http://localhost:8092",
805
+ },
806
+ () =>
807
+ openGrantedDispatchMcpApp({
808
+ app: "analytics",
809
+ path: "/dashboards",
810
+ embed: true,
811
+ chrome: "minimal",
812
+ }),
813
+ );
814
+
815
+ expect(result).toEqual({
816
+ app: "analytics",
817
+ path: "/dashboards",
818
+ url: "http://localhost:8086/dashboards",
819
+ embed: true,
820
+ chrome: "minimal",
821
+ });
822
+ expect(warnSpy).toHaveBeenCalled();
823
+ warnSpy.mockRestore();
824
+ });
825
+
826
+ it("rejects Dispatch-owned extension routes on sibling apps", async () => {
827
+ await expect(
828
+ runWithRequestContext(
829
+ {
830
+ userEmail: "owner@example.test",
831
+ requestOrigin: "http://localhost:8092",
832
+ },
833
+ () =>
834
+ openGrantedDispatchMcpApp({
835
+ app: "analytics",
836
+ path: "/extensions/ext-1/github-stars-over-time",
837
+ }),
838
+ ),
839
+ ).rejects.toThrow(/belongs to Dispatch/);
840
+ });
841
+
842
+ it("rejects traversal that normalizes into Dispatch-owned routes on sibling apps", async () => {
843
+ await expect(
844
+ runWithRequestContext(
845
+ {
846
+ userEmail: "owner@example.test",
847
+ requestOrigin: "http://localhost:8092",
848
+ },
849
+ () =>
850
+ openGrantedDispatchMcpApp({
851
+ app: "analytics",
852
+ path: "/../dispatch/extensions/ext-1",
853
+ }),
854
+ ),
855
+ ).rejects.toThrow(/safe app-relative route/);
856
+ });
857
+ });
858
+
859
+ describe("createGrantedDispatchMcpEmbedSession", () => {
860
+ it("mints Dispatch self embeds locally instead of recursively calling Dispatch MCP", async () => {
861
+ const result = await runWithRequestContext(
862
+ {
863
+ userEmail: "owner@example.test",
864
+ requestOrigin: "http://localhost:8092",
865
+ },
866
+ () =>
867
+ createGrantedDispatchMcpEmbedSession({
868
+ app: "dispatch",
869
+ path: "/extensions/ext-1/github-stars-over-time",
870
+ chrome: "minimal",
871
+ }),
872
+ );
873
+
874
+ expect(mocks.createEmbedSessionTicket).toHaveBeenCalledWith({
875
+ ownerEmail: "owner@example.test",
876
+ orgId: undefined,
877
+ targetPath: "/extensions/ext-1/github-stars-over-time",
878
+ scope: "minimal",
879
+ });
880
+ expect(mocks.managerConstructor).not.toHaveBeenCalled();
881
+ expect(result).toEqual({
882
+ app: "dispatch",
883
+ startUrl:
884
+ "http://localhost:8092/_agent-native/embed/start?ticket=ticket-123",
885
+ targetPath: "/extensions/ext-1/github-stars-over-time",
886
+ expiresAt: 12345,
887
+ });
888
+ });
889
+
890
+ it("keeps workspace sign-in behind the rollout flag", async () => {
891
+ mocks.isFeatureFlagEnabled.mockResolvedValueOnce(false);
892
+
893
+ await expect(
894
+ runWithRequestContext(
895
+ {
896
+ userEmail: "owner@example.test",
897
+ requestOrigin: "http://localhost:8092",
898
+ },
899
+ () =>
900
+ createWorkspaceSsoEmbedSession({
901
+ app: "analytics",
902
+ path: "/overview",
903
+ }),
904
+ ),
905
+ ).rejects.toThrow(/not enabled/);
906
+ expect(mocks.managerConstructor).not.toHaveBeenCalled();
907
+ });
908
+
909
+ it("allows an exact canonical app without requiring an MCP app grant", async () => {
910
+ mocks.getUserSetting.mockResolvedValue({
911
+ mode: "selected-apps",
912
+ selectedAppIds: [],
913
+ });
914
+ mocks.discoverAgents.mockResolvedValue([
915
+ {
916
+ ...analyticsAgent,
917
+ url: "https://analytics.agent-native.com",
918
+ },
919
+ ]);
920
+ mocks.managerCallTool.mockResolvedValueOnce({
921
+ structuredContent: {
922
+ startUrl:
923
+ "https://analytics.agent-native.com/_agent-native/embed/start?ticket=remote",
924
+ },
925
+ });
926
+
927
+ const result = await runWithRequestContext(
928
+ {
929
+ userEmail: "owner@example.test",
930
+ requestOrigin: "https://dispatch.agent-native.com",
931
+ },
932
+ () =>
933
+ createWorkspaceSsoEmbedSession({
934
+ app: "analytics",
935
+ path: "/overview",
936
+ chrome: "minimal",
937
+ }),
938
+ );
939
+
940
+ expect(result).toMatchObject({
941
+ app: "analytics",
942
+ startUrl:
943
+ "https://analytics.agent-native.com/_agent-native/embed/start?ticket=remote",
944
+ });
945
+ expect(mocks.managerConstructor).toHaveBeenCalled();
946
+ });
947
+
948
+ it("uses a built-in home URL when discovery returns a deep agent link", async () => {
949
+ mocks.getBuiltinAgents.mockReturnValue([
950
+ {
951
+ id: "clips",
952
+ name: "Clips",
953
+ description: "Record and share",
954
+ url: "https://clips.agent-native.com",
955
+ color: "#000000",
956
+ },
957
+ ]);
958
+ mocks.discoverAgents.mockResolvedValue([
959
+ {
960
+ id: "clips",
961
+ name: "Clips",
962
+ description: "Record and share",
963
+ url: "https://clips.agent-native.com/share/deep-link",
964
+ color: "#000000",
965
+ },
966
+ ]);
967
+ mocks.managerCallTool.mockResolvedValueOnce({
968
+ structuredContent: {
969
+ startUrl:
970
+ "https://clips.agent-native.com/_agent-native/embed/start?ticket=remote",
971
+ },
972
+ });
973
+
974
+ const result = await runWithRequestContext(
975
+ {
976
+ userEmail: "owner@example.test",
977
+ requestOrigin: "https://dispatch.agent-native.com",
978
+ },
979
+ () =>
980
+ createWorkspaceSsoEmbedSession({
981
+ app: "clips",
982
+ path: "/inbox",
983
+ }),
984
+ );
985
+
986
+ expect(mocks.managerCallTool).toHaveBeenCalledWith(
987
+ "mcp__target__create_embed_session",
988
+ {
989
+ url: "https://clips.agent-native.com/inbox",
990
+ chrome: "full",
991
+ },
992
+ );
993
+ expect(result).toMatchObject({
994
+ app: "clips",
995
+ startUrl:
996
+ "https://clips.agent-native.com/_agent-native/embed/start?ticket=remote",
997
+ });
998
+ });
999
+
1000
+ it("uses an external agent origin as the home fallback for deep registrations", async () => {
1001
+ vi.stubEnv(
1002
+ "IDENTITY_SSO_APP_REGISTRY_JSON",
1003
+ JSON.stringify([
1004
+ {
1005
+ appId: "custom-agent",
1006
+ clientId: "custom-agent-client",
1007
+ origin: "https://custom.example.com",
1008
+ callbackPath: "/_agent-native/identity/callback",
1009
+ capabilities: ["identity-sso"],
1010
+ },
1011
+ ]),
1012
+ );
1013
+ mocks.discoverAgents.mockResolvedValue([
1014
+ {
1015
+ id: "custom-agent",
1016
+ name: "Custom agent",
1017
+ description: "Deep endpoint",
1018
+ url: "https://custom.example.com/agent/deep-link",
1019
+ color: "#000000",
1020
+ },
1021
+ ]);
1022
+ mocks.managerCallTool.mockResolvedValueOnce({
1023
+ structuredContent: {
1024
+ startUrl:
1025
+ "https://custom.example.com/_agent-native/embed/start?ticket=remote",
1026
+ },
1027
+ });
1028
+
1029
+ const result = await runWithRequestContext(
1030
+ {
1031
+ userEmail: "owner@example.test",
1032
+ requestOrigin: "https://dispatch.agent-native.com",
1033
+ },
1034
+ () =>
1035
+ createWorkspaceSsoEmbedSession({
1036
+ app: "custom-agent",
1037
+ path: "/home",
1038
+ }),
1039
+ );
1040
+
1041
+ expect(mocks.managerCallTool).toHaveBeenCalledWith(
1042
+ "mcp__target__create_embed_session",
1043
+ {
1044
+ url: "https://custom.example.com/home",
1045
+ chrome: "full",
1046
+ },
1047
+ );
1048
+ expect(result.app).toBe("custom-agent");
1049
+ });
1050
+
1051
+ it("excludes path-mounted apps from SSO while retaining canonical apps", async () => {
1052
+ vi.stubEnv("WORKSPACE_GATEWAY_URL", "https://agent-workspace.builder.io");
1053
+ mocks.discoverAgents.mockResolvedValue([
1054
+ {
1055
+ ...analyticsAgent,
1056
+ url: "https://analytics.agent-native.com",
1057
+ },
1058
+ ]);
1059
+ mocks.managerCallTool.mockResolvedValueOnce({
1060
+ structuredContent: {
1061
+ startUrl:
1062
+ "https://analytics.agent-native.com/_agent-native/embed/start?ticket=remote",
1063
+ },
1064
+ });
1065
+ mocks.listWorkspaceApps.mockResolvedValue([
1066
+ {
1067
+ id: "atlas",
1068
+ name: "Atlas",
1069
+ description: "Workspace app",
1070
+ path: "/atlas",
1071
+ url: "https://agent-workspace.builder.io/atlas",
1072
+ isDispatch: false,
1073
+ audience: "internal",
1074
+ publicPaths: [],
1075
+ protectedPaths: [],
1076
+ },
1077
+ ]);
1078
+
1079
+ await expect(
1080
+ runWithRequestContext(
1081
+ {
1082
+ userEmail: "owner@example.test",
1083
+ requestOrigin: "https://dispatch.agent-native.com",
1084
+ },
1085
+ () =>
1086
+ createWorkspaceSsoEmbedSession({
1087
+ app: "atlas",
1088
+ path: "/",
1089
+ }),
1090
+ ),
1091
+ ).rejects.toThrow(/not registered/);
1092
+
1093
+ const result = await runWithRequestContext(
1094
+ {
1095
+ userEmail: "owner@example.test",
1096
+ requestOrigin: "https://dispatch.agent-native.com",
1097
+ },
1098
+ () =>
1099
+ createWorkspaceSsoEmbedSession({
1100
+ app: "analytics",
1101
+ path: "/overview",
1102
+ }),
1103
+ );
1104
+
1105
+ expect(result.app).toBe("analytics");
1106
+ expect(mocks.managerConstructor).toHaveBeenCalled();
1107
+ });
1108
+
1109
+ it("allows an exact custom registry entry and rejects an unregistered external app", async () => {
1110
+ vi.stubEnv(
1111
+ "IDENTITY_SSO_APP_REGISTRY_JSON",
1112
+ JSON.stringify([
1113
+ {
1114
+ appId: "workspace",
1115
+ clientId: "workspace-client",
1116
+ origin: "https://workspace.example.com",
1117
+ callbackPath: "/_agent-native/identity/callback",
1118
+ capabilities: ["identity-sso"],
1119
+ },
1120
+ ]),
1121
+ );
1122
+ mocks.discoverAgents.mockResolvedValue([
1123
+ {
1124
+ id: "workspace",
1125
+ name: "Workspace",
1126
+ description: "Custom workspace app",
1127
+ url: "https://workspace.example.com",
1128
+ color: "#111827",
1129
+ },
1130
+ {
1131
+ id: "unregistered",
1132
+ name: "Unregistered",
1133
+ description: "External app without registration",
1134
+ url: "https://unregistered.example.com",
1135
+ color: "#111827",
1136
+ },
1137
+ ]);
1138
+ mocks.managerCallTool.mockResolvedValueOnce({
1139
+ structuredContent: {
1140
+ startUrl:
1141
+ "https://workspace.example.com/_agent-native/embed/start?ticket=remote",
1142
+ },
1143
+ });
1144
+
1145
+ await expect(
1146
+ runWithRequestContext(
1147
+ {
1148
+ userEmail: "owner@example.test",
1149
+ requestOrigin: "https://dispatch.agent-native.com",
1150
+ },
1151
+ () =>
1152
+ createWorkspaceSsoEmbedSession({
1153
+ app: "workspace",
1154
+ path: "/home",
1155
+ }),
1156
+ ),
1157
+ ).resolves.toMatchObject({ app: "workspace" });
1158
+
1159
+ await expect(
1160
+ runWithRequestContext(
1161
+ {
1162
+ userEmail: "owner@example.test",
1163
+ requestOrigin: "https://dispatch.agent-native.com",
1164
+ },
1165
+ () =>
1166
+ createWorkspaceSsoEmbedSession({
1167
+ app: "unregistered",
1168
+ path: "/home",
1169
+ }),
1170
+ ),
1171
+ ).rejects.toThrow(/not registered/);
1172
+ });
1173
+
1174
+ it("rejects traversal into Dispatch-owned embed routes on sibling apps", async () => {
1175
+ await expect(
1176
+ runWithRequestContext(
1177
+ {
1178
+ userEmail: "owner@example.test",
1179
+ requestOrigin: "http://localhost:8092",
1180
+ },
1181
+ () =>
1182
+ createGrantedDispatchMcpEmbedSession({
1183
+ app: "analytics",
1184
+ path: "/../dispatch/extensions/ext-1",
1185
+ }),
1186
+ ),
1187
+ ).rejects.toThrow(/safe app-relative route/);
1188
+ });
1189
+
1190
+ it("resolves target-relative embed start URLs against the granted app", async () => {
1191
+ mocks.managerCallTool.mockResolvedValueOnce({
1192
+ structuredContent: {
1193
+ startUrl: "/_agent-native/embed/start?ticket=relative",
1194
+ },
1195
+ });
1196
+
1197
+ const result = await runWithRequestContext(
1198
+ {
1199
+ userEmail: "owner@example.test",
1200
+ requestOrigin: "http://localhost:8092",
1201
+ },
1202
+ () =>
1203
+ createGrantedDispatchMcpEmbedSession({
1204
+ app: "analytics",
1205
+ path: "/overview",
1206
+ chrome: "minimal",
1207
+ }),
1208
+ );
1209
+
1210
+ expect(result.startUrl).toBe(
1211
+ "http://localhost:8086/_agent-native/embed/start?ticket=relative",
1212
+ );
1213
+ });
1214
+
1215
+ it("rejects cross-origin embed start URLs from a granted app", async () => {
1216
+ mocks.managerCallTool.mockResolvedValueOnce({
1217
+ structuredContent: {
1218
+ startUrl: "https://attacker.example/steal?ticket=remote",
1219
+ },
1220
+ });
1221
+
1222
+ await expect(
1223
+ runWithRequestContext(
1224
+ {
1225
+ userEmail: "owner@example.test",
1226
+ requestOrigin: "http://localhost:8092",
1227
+ },
1228
+ () =>
1229
+ createGrantedDispatchMcpEmbedSession({
1230
+ app: "analytics",
1231
+ path: "/overview",
1232
+ chrome: "minimal",
1233
+ }),
1234
+ ),
1235
+ ).rejects.toThrow(/invalid embed start URL/);
1236
+ });
1237
+
1238
+ it("rejects a URL that does not belong to the explicitly named app", async () => {
1239
+ await expect(
1240
+ runWithRequestContext(
1241
+ {
1242
+ userEmail: "owner@example.test",
1243
+ requestOrigin: "http://localhost:8092",
1244
+ },
1245
+ () =>
1246
+ createGrantedDispatchMcpEmbedSession({
1247
+ app: "analytics",
1248
+ url: "https://mail.example.com/inbox",
1249
+ }),
1250
+ ),
1251
+ ).rejects.toThrow(
1252
+ /Embed URL must belong to an app granted through Dispatch/,
1253
+ );
1254
+ });
1255
+
1256
+ it("routes same-origin mounted app embed URLs to the mounted app", async () => {
1257
+ mocks.discoverAgents.mockResolvedValue([
1258
+ {
1259
+ ...analyticsAgent,
1260
+ url: "http://localhost:8092/analytics",
1261
+ },
1262
+ ]);
1263
+ mocks.managerCallTool.mockResolvedValueOnce({
1264
+ structuredContent: {
1265
+ startUrl:
1266
+ "http://localhost:8092/analytics/_agent-native/embed/start?ticket=remote",
1267
+ },
1268
+ });
1269
+
1270
+ const result = await runWithRequestContext(
1271
+ {
1272
+ userEmail: "owner@example.test",
1273
+ requestOrigin: "http://localhost:8092",
1274
+ },
1275
+ () =>
1276
+ createGrantedDispatchMcpEmbedSession({
1277
+ url: "http://localhost:8092/analytics/dashboards?range=30d",
1278
+ }),
1279
+ );
1280
+
1281
+ expect(mocks.createEmbedSessionTicket).not.toHaveBeenCalled();
1282
+ expect(mocks.managerConstructor).toHaveBeenCalledWith({
1283
+ servers: {
1284
+ target: expect.objectContaining({
1285
+ url: "http://localhost:8092/analytics/mcp",
1286
+ }),
1287
+ },
1288
+ });
1289
+ expect(mocks.managerCallTool).toHaveBeenCalledWith(
1290
+ "mcp__target__create_embed_session",
1291
+ {
1292
+ url: "http://localhost:8092/analytics/dashboards?range=30d",
1293
+ chrome: "full",
1294
+ },
1295
+ );
1296
+ expect(result).toEqual({
1297
+ app: "analytics",
1298
+ startUrl:
1299
+ "http://localhost:8092/analytics/_agent-native/embed/start?ticket=remote",
1300
+ });
1301
+ });
1302
+
1303
+ it("skips malformed granted app URLs when matching embed URLs", async () => {
1304
+ mocks.discoverAgents.mockResolvedValue([
1305
+ {
1306
+ id: "bad-url",
1307
+ name: "Bad URL",
1308
+ description: "Invalid manifest URL",
1309
+ url: "mail.agent-native.com",
1310
+ color: "#111827",
1311
+ },
1312
+ {
1313
+ id: "mail",
1314
+ name: "Mail",
1315
+ description: "Mail",
1316
+ url: "https://mail.agent-native.com",
1317
+ color: "#2563EB",
1318
+ },
1319
+ ]);
1320
+ mocks.managerCallTool.mockResolvedValueOnce({
1321
+ structuredContent: {
1322
+ startUrl:
1323
+ "https://mail.agent-native.com/_agent-native/embed/start?ticket=remote",
1324
+ },
1325
+ });
1326
+
1327
+ const result = await runWithRequestContext(
1328
+ {
1329
+ userEmail: "owner@example.test",
1330
+ requestOrigin: "http://localhost:8092",
1331
+ },
1332
+ () =>
1333
+ createGrantedDispatchMcpEmbedSession({
1334
+ url: "https://mail.agent-native.com/inbox",
1335
+ }),
1336
+ );
1337
+
1338
+ expect(mocks.managerConstructor).toHaveBeenCalledWith({
1339
+ servers: {
1340
+ target: expect.objectContaining({
1341
+ url: "https://mail.agent-native.com/mcp",
1342
+ }),
1343
+ },
1344
+ });
1345
+ expect(result).toEqual({
1346
+ app: "mail",
1347
+ startUrl:
1348
+ "https://mail.agent-native.com/_agent-native/embed/start?ticket=remote",
1349
+ });
1350
+ });
1351
+
1352
+ it("uses the org A2A secret when minting cross-app MCP embed tokens", async () => {
1353
+ mocks.getOrgDomain.mockResolvedValue("builder.io");
1354
+ mocks.getOrgA2ASecret.mockResolvedValue("org-specific-secret");
1355
+
1356
+ await runWithRequestContext(
1357
+ {
1358
+ userEmail: "owner@example.test",
1359
+ orgId: "org-1",
1360
+ requestOrigin: "http://localhost:8092",
1361
+ },
1362
+ () =>
1363
+ createGrantedDispatchMcpEmbedSession({
1364
+ app: "analytics",
1365
+ path: "/dashboards",
1366
+ }),
1367
+ );
1368
+
1369
+ expect(mocks.signA2AToken).toHaveBeenCalledWith(
1370
+ "owner@example.test",
1371
+ "builder.io",
1372
+ "org-specific-secret",
1373
+ {
1374
+ expiresIn: "5m",
1375
+ audience: "http://localhost:8086",
1376
+ preferGlobalSecret: false,
1377
+ },
1378
+ );
1379
+ });
1380
+
1381
+ it("falls back to the shared A2A secret when the target rejects org signing", async () => {
1382
+ vi.stubEnv("A2A_SECRET", "shared-secret");
1383
+ mocks.getOrgDomain.mockResolvedValue("builder.io");
1384
+ mocks.getOrgA2ASecret.mockResolvedValue("org-specific-secret");
1385
+ mocks.signA2AToken
1386
+ .mockResolvedValueOnce("org-signed-token")
1387
+ .mockResolvedValueOnce("global-signed-token");
1388
+ mocks.managerCallTool
1389
+ .mockRejectedValueOnce(
1390
+ new Error(
1391
+ 'MCP server "target" is not connected: HTTP 401 Unauthorized',
1392
+ ),
1393
+ )
1394
+ .mockResolvedValueOnce({
1395
+ structuredContent: {
1396
+ startUrl:
1397
+ "http://localhost:8086/_agent-native/embed/start?ticket=remote",
1398
+ },
1399
+ });
1400
+
1401
+ const result = await runWithRequestContext(
1402
+ {
1403
+ userEmail: "owner@example.test",
1404
+ orgId: "org-1",
1405
+ requestOrigin: "http://localhost:8092",
1406
+ },
1407
+ () =>
1408
+ createGrantedDispatchMcpEmbedSession({
1409
+ app: "analytics",
1410
+ path: "/dashboards",
1411
+ }),
1412
+ );
1413
+
1414
+ expect(result).toMatchObject({ app: "analytics" });
1415
+ expect(mocks.managerConstructor).toHaveBeenCalledTimes(2);
1416
+ expect(mocks.managerConstructor).toHaveBeenNthCalledWith(
1417
+ 1,
1418
+ expect.objectContaining({
1419
+ servers: {
1420
+ target: expect.objectContaining({
1421
+ headers: { Authorization: "Bearer org-signed-token" },
1422
+ }),
1423
+ },
1424
+ }),
1425
+ );
1426
+ expect(mocks.managerConstructor).toHaveBeenNthCalledWith(
1427
+ 2,
1428
+ expect.objectContaining({
1429
+ servers: {
1430
+ target: expect.objectContaining({
1431
+ headers: { Authorization: "Bearer global-signed-token" },
1432
+ }),
1433
+ },
1434
+ }),
1435
+ );
1436
+ expect(mocks.signA2AToken).toHaveBeenNthCalledWith(
1437
+ 2,
1438
+ "owner@example.test",
1439
+ "builder.io",
1440
+ undefined,
1441
+ {
1442
+ expiresIn: "5m",
1443
+ audience: "http://localhost:8086",
1444
+ preferGlobalSecret: true,
1445
+ },
1446
+ );
1447
+ });
1448
+
1449
+ it("falls back to the shared A2A secret when no org secret is available", async () => {
1450
+ mocks.getOrgDomain.mockResolvedValue("builder.io");
1451
+ mocks.getOrgA2ASecret.mockResolvedValue(null);
1452
+
1453
+ await runWithRequestContext(
1454
+ {
1455
+ userEmail: "owner@example.test",
1456
+ orgId: "org-1",
1457
+ requestOrigin: "http://localhost:8092",
1458
+ },
1459
+ () =>
1460
+ createGrantedDispatchMcpEmbedSession({
1461
+ app: "analytics",
1462
+ path: "/dashboards",
1463
+ }),
1464
+ );
1465
+
1466
+ expect(mocks.signA2AToken).toHaveBeenCalledWith(
1467
+ "owner@example.test",
1468
+ "builder.io",
1469
+ undefined,
1470
+ {
1471
+ expiresIn: "5m",
1472
+ audience: "http://localhost:8086",
1473
+ preferGlobalSecret: true,
1474
+ },
1475
+ );
1476
+ });
1477
+
1478
+ it("falls back to the shared A2A secret when org signing inputs are incomplete", async () => {
1479
+ mocks.getOrgDomain.mockResolvedValue(null);
1480
+ mocks.getOrgA2ASecret.mockResolvedValue("org-specific-secret");
1481
+
1482
+ await runWithRequestContext(
1483
+ {
1484
+ userEmail: "owner@example.test",
1485
+ orgId: "org-1",
1486
+ requestOrigin: "http://localhost:8092",
1487
+ },
1488
+ () =>
1489
+ createGrantedDispatchMcpEmbedSession({
1490
+ app: "analytics",
1491
+ path: "/dashboards",
1492
+ }),
1493
+ );
1494
+
1495
+ expect(mocks.signA2AToken).toHaveBeenCalledWith(
1496
+ "owner@example.test",
1497
+ undefined,
1498
+ undefined,
1499
+ {
1500
+ expiresIn: "5m",
1501
+ audience: "http://localhost:8086",
1502
+ preferGlobalSecret: true,
1503
+ },
1504
+ );
1505
+ });
1506
+
1507
+ it("does not retry permanent target MCP errors", async () => {
1508
+ mocks.managerCallTool.mockRejectedValueOnce(
1509
+ new Error(
1510
+ 'MCP server "target" is not connected: The MCP server rejected the request.',
1511
+ ),
1512
+ );
1513
+
1514
+ await expect(
1515
+ runWithRequestContext(
1516
+ {
1517
+ userEmail: "owner@example.test",
1518
+ requestOrigin: "http://localhost:8092",
1519
+ },
1520
+ () =>
1521
+ createGrantedDispatchMcpEmbedSession({
1522
+ app: "analytics",
1523
+ path: "/dashboards",
1524
+ }),
1525
+ ),
1526
+ ).rejects.toThrow(/rejected the request/);
1527
+ expect(mocks.managerConstructor).toHaveBeenCalledTimes(1);
1528
+ expect(mocks.managerCallTool).toHaveBeenCalledTimes(1);
1529
+ });
1530
+
1531
+ it("does not let stop failures mask target MCP errors", async () => {
1532
+ mocks.managerCallTool.mockRejectedValueOnce(
1533
+ new Error("Target app returned a permanent auth error."),
1534
+ );
1535
+ mocks.managerStop.mockRejectedValueOnce(new Error("stop failed"));
1536
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
1537
+
1538
+ await expect(
1539
+ runWithRequestContext(
1540
+ {
1541
+ userEmail: "owner@example.test",
1542
+ requestOrigin: "http://localhost:8092",
1543
+ },
1544
+ () =>
1545
+ createGrantedDispatchMcpEmbedSession({
1546
+ app: "analytics",
1547
+ path: "/dashboards",
1548
+ }),
1549
+ ),
1550
+ ).rejects.toThrow(/permanent auth error/);
1551
+ expect(warnSpy).toHaveBeenCalledWith(
1552
+ "[dispatch] Failed to stop target MCP client:",
1553
+ expect.any(Error),
1554
+ );
1555
+ warnSpy.mockRestore();
1556
+ });
1557
+
1558
+ it("surfaces target MCP embed-session errors", async () => {
1559
+ mocks.managerCallTool.mockResolvedValueOnce({
1560
+ isError: true,
1561
+ content: [
1562
+ {
1563
+ type: "text",
1564
+ text: "Error: create_embed_session requires an authenticated MCP caller.",
1565
+ },
1566
+ ],
1567
+ });
1568
+
1569
+ await expect(
1570
+ runWithRequestContext(
1571
+ {
1572
+ userEmail: "owner@example.test",
1573
+ requestOrigin: "http://localhost:8092",
1574
+ },
1575
+ () =>
1576
+ createGrantedDispatchMcpEmbedSession({
1577
+ app: "analytics",
1578
+ path: "/dashboards",
1579
+ }),
1580
+ ),
1581
+ ).rejects.toThrow(/authenticated MCP caller/);
1582
+ });
1583
+ });