@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,1388 @@
1
+ import {
2
+ A2AClient,
3
+ canonicalA2AAudience,
4
+ signA2AToken,
5
+ type Task,
6
+ } from "@agent-native/core/a2a";
7
+ import { isFeatureFlagEnabled } from "@agent-native/core/feature-flags";
8
+ import {
9
+ buildMcpToolName,
10
+ McpClientManager,
11
+ } from "@agent-native/core/mcp-client";
12
+ import { getOrgA2ASecret, getOrgDomain } from "@agent-native/core/org";
13
+ import {
14
+ buildDeepLink,
15
+ buildEmbedStartPath,
16
+ createEmbedSessionTicket,
17
+ getRequestContext,
18
+ getRequestOrgId,
19
+ getRequestUserEmail,
20
+ } from "@agent-native/core/server";
21
+ import {
22
+ discoverAgents,
23
+ getBuiltinAgents,
24
+ type DiscoveredAgent,
25
+ } from "@agent-native/core/server/agent-discovery";
26
+
27
+ import {
28
+ DISPATCH_WORKSPACE_SSO_FLAG,
29
+ isWorkspaceSsoAppUrl,
30
+ } from "../../shared/workspace-sso.js";
31
+ import {
32
+ listWorkspaceApps,
33
+ type WorkspaceAppSummary,
34
+ } from "./app-creation-store.js";
35
+ import {
36
+ getDispatchMcpAppAccessSettings,
37
+ isAppAllowedByMcpAccess,
38
+ type DispatchMcpAppAccessSettings,
39
+ } from "./mcp-access-store.js";
40
+
41
+ const DISPATCH_APP_ID = "dispatch";
42
+ const DISPATCH_NAME = "Dispatch";
43
+ const DISPATCH_DESCRIPTION =
44
+ "Workspace control plane for extensions, agents, vault, integrations, approvals, and app routing.";
45
+ const DISPATCH_COLOR = "#14B8A6";
46
+ const TARGET_EMBED_SESSION_ATTEMPTS = 3;
47
+ const TARGET_EMBED_SESSION_RETRY_BASE_MS = 250;
48
+ const DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS = 20_000;
49
+ const DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS = 25_000;
50
+ const DISPATCH_ASK_APP_POLL_INTERVAL_MS = 1_500;
51
+ const DISPATCH_A2A_REQUEST_TIMEOUT_MS = 10_000;
52
+ const DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS = [250, 750, 1_500] as const;
53
+ const DISPATCH_ASK_APP_TERMINAL_STATES = new Set([
54
+ "completed",
55
+ "failed",
56
+ "canceled",
57
+ "input-required",
58
+ ]);
59
+
60
+ class DispatchAskAppInlineDeadlineError extends Error {
61
+ constructor() {
62
+ super("ask_app inline wait deadline reached");
63
+ this.name = "DispatchAskAppInlineDeadlineError";
64
+ }
65
+ }
66
+
67
+ export interface DispatchMcpAccessibleApp {
68
+ id: string;
69
+ name: string;
70
+ description: string;
71
+ url: string;
72
+ /** Canonical browser entry point when `url` is a deep A2A/agent link. */
73
+ homeUrl?: string;
74
+ color: string;
75
+ granted: boolean;
76
+ }
77
+
78
+ function normalizeAppId(value: string): string {
79
+ return value.trim().toLowerCase();
80
+ }
81
+
82
+ function boundedDispatchAskAppWaitMs(raw: unknown): number {
83
+ if (raw == null || raw === "") {
84
+ return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;
85
+ }
86
+ const parsed = Number(raw);
87
+ if (!Number.isFinite(parsed)) return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;
88
+ return Math.max(
89
+ 0,
90
+ Math.min(DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS, Math.trunc(parsed)),
91
+ );
92
+ }
93
+
94
+ function isTerminalDispatchTask(task: Task): boolean {
95
+ return DISPATCH_ASK_APP_TERMINAL_STATES.has(String(task.status.state));
96
+ }
97
+
98
+ function dispatchTaskText(task: Task): string {
99
+ return (
100
+ task.status.message?.parts
101
+ ?.filter(
102
+ (part): part is { type: "text"; text: string } => part.type === "text",
103
+ )
104
+ .map((part) => part.text)
105
+ .join("\n")
106
+ .trim() ?? ""
107
+ );
108
+ }
109
+
110
+ type DispatchAskAppStatusErrorCategory =
111
+ | "transport"
112
+ | "timeout"
113
+ | "upstream_5xx"
114
+ | "rate_limited";
115
+
116
+ type DispatchAskAppTaskResult = {
117
+ app: string;
118
+ routedVia: "a2a";
119
+ taskId: string;
120
+ status: string;
121
+ response?: string;
122
+ error?: string;
123
+ inputRequired?: string;
124
+ statusRead?: "unavailable";
125
+ retryable?: true;
126
+ errorCategory?: DispatchAskAppStatusErrorCategory;
127
+ attempts?: number;
128
+ pollAfterMs?: number;
129
+ poll?: { tool: "ask_app_status"; arguments: { app: string; taskId: string } };
130
+ message?: string;
131
+ };
132
+
133
+ function dispatchAskAppTaskResult(
134
+ app: string,
135
+ task: Task,
136
+ ): DispatchAskAppTaskResult {
137
+ const status = String(task.status.state);
138
+ const response = dispatchTaskText(task);
139
+ const base = {
140
+ app,
141
+ routedVia: "a2a" as const,
142
+ taskId: task.id,
143
+ status,
144
+ };
145
+
146
+ if (status === "completed") {
147
+ return { ...base, response: response || "(no response)" };
148
+ }
149
+ if (status === "failed" || status === "canceled") {
150
+ return {
151
+ ...base,
152
+ ...(response ? { response } : {}),
153
+ error: response || `ask_app task ${status}.`,
154
+ };
155
+ }
156
+ if (status === "input-required") {
157
+ const inputRequired =
158
+ response || "The agent needs additional input before it can continue.";
159
+ return {
160
+ ...base,
161
+ response: inputRequired,
162
+ inputRequired,
163
+ message: inputRequired,
164
+ };
165
+ }
166
+ return {
167
+ ...base,
168
+ pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,
169
+ poll: {
170
+ tool: "ask_app_status",
171
+ arguments: { app, taskId: task.id },
172
+ },
173
+ message:
174
+ `ask_app is still ${status}. Call ask_app_status with ` +
175
+ `taskId "${task.id}" to retrieve the final response.`,
176
+ };
177
+ }
178
+
179
+ async function createDispatchA2AClient(input: {
180
+ targetUrl: string;
181
+ userEmail: string;
182
+ orgDomain?: string;
183
+ orgSecret?: string;
184
+ deadline?: number;
185
+ }): Promise<{
186
+ client: A2AClient;
187
+ metadata: Record<string, unknown>;
188
+ }> {
189
+ const apiKeys: string[] = [];
190
+ const addSignedToken = async (preferGlobalSecret: boolean) => {
191
+ try {
192
+ const token = await signA2AToken(
193
+ input.userEmail,
194
+ input.orgDomain,
195
+ input.orgSecret,
196
+ { preferGlobalSecret },
197
+ );
198
+ if (token && !apiKeys.includes(token)) apiKeys.push(token);
199
+ } catch {
200
+ // A2A can still be configured for local/dev unauthenticated calls. If
201
+ // signing is unavailable, let the target return its own auth error.
202
+ }
203
+ };
204
+
205
+ if (process.env.A2A_SECRET?.trim()) await addSignedToken(true);
206
+ if (input.orgSecret) await addSignedToken(false);
207
+
208
+ const metadata: Record<string, unknown> = {
209
+ userEmail: input.userEmail,
210
+ ...(input.orgDomain ? { orgDomain: input.orgDomain } : {}),
211
+ ...(getRequestContext()?.requestOrigin
212
+ ? { requestOrigin: getRequestContext()?.requestOrigin }
213
+ : {}),
214
+ };
215
+ const remainingMs =
216
+ input.deadline == null ? null : input.deadline - Date.now();
217
+ return {
218
+ client: new A2AClient(input.targetUrl, apiKeys[0], {
219
+ requestTimeoutMs:
220
+ remainingMs == null
221
+ ? DISPATCH_A2A_REQUEST_TIMEOUT_MS
222
+ : Math.max(1, Math.min(DISPATCH_A2A_REQUEST_TIMEOUT_MS, remainingMs)),
223
+ ...(apiKeys.length > 1 ? { fallbackApiKeys: apiKeys.slice(1) } : {}),
224
+ }),
225
+ metadata,
226
+ };
227
+ }
228
+
229
+ function isTransientDispatchAskAppStatusError(err: unknown): boolean {
230
+ return dispatchAskAppStatusErrorCategory(err) != null;
231
+ }
232
+
233
+ function dispatchAskAppStatusErrorCategory(
234
+ err: unknown,
235
+ ): DispatchAskAppStatusErrorCategory | null {
236
+ const message = err instanceof Error ? err.message : String(err ?? "");
237
+ const causeCode = dispatchAskAppStatusErrorCauseCode(err) ?? "";
238
+ const diagnostic = `${message} ${causeCode}`;
239
+ if (/A2A request failed \(429\)/i.test(message)) return "rate_limited";
240
+ if (/A2A request failed \((?:500|502|503|504)\)/i.test(message)) {
241
+ return "upstream_5xx";
242
+ }
243
+ if (/etimedout|timeout|aborted|aborterror/i.test(diagnostic)) {
244
+ return "timeout";
245
+ }
246
+ if (
247
+ /\bfetch failed\b|failed to fetch|networkerror|socket hang up|econnreset/i.test(
248
+ diagnostic,
249
+ )
250
+ ) {
251
+ return "transport";
252
+ }
253
+ return null;
254
+ }
255
+
256
+ function dispatchAskAppStatusErrorCauseCode(err: unknown): string | undefined {
257
+ if (!(err instanceof Error)) return undefined;
258
+ const directCode = (err as Error & { code?: unknown }).code;
259
+ if (typeof directCode === "string" && directCode.trim()) {
260
+ return directCode.trim();
261
+ }
262
+ if (!err.cause || typeof err.cause !== "object") return undefined;
263
+ const code = (err.cause as { code?: unknown }).code;
264
+ return typeof code === "string" && code.trim() ? code.trim() : undefined;
265
+ }
266
+
267
+ function dispatchAskAppStatusOriginHost(origin: string): string {
268
+ try {
269
+ return new URL(origin).host;
270
+ } catch {
271
+ return "unknown";
272
+ }
273
+ }
274
+
275
+ function dispatchAskAppStatusReadUnavailableResult(
276
+ app: string,
277
+ taskId: string,
278
+ errorCategory: DispatchAskAppStatusErrorCategory,
279
+ attempts: number,
280
+ ): DispatchAskAppTaskResult {
281
+ return {
282
+ app,
283
+ routedVia: "a2a",
284
+ taskId,
285
+ status: "unknown",
286
+ statusRead: "unavailable",
287
+ retryable: true,
288
+ errorCategory,
289
+ attempts,
290
+ pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,
291
+ poll: {
292
+ tool: "ask_app_status",
293
+ arguments: { app, taskId },
294
+ },
295
+ message:
296
+ "The durable ask_app task status could not be read after bounded retries. " +
297
+ "The task may still be running or completed. Retry ask_app_status " +
298
+ "with the same app and taskId; do not resubmit ask_app.",
299
+ };
300
+ }
301
+
302
+ async function runBeforeDispatchAskAppDeadline<T>(
303
+ operation: () => Promise<T>,
304
+ deadline: number,
305
+ ): Promise<T> {
306
+ const remainingMs = deadline - Date.now();
307
+ if (remainingMs <= 0) throw new DispatchAskAppInlineDeadlineError();
308
+
309
+ let timeout: ReturnType<typeof setTimeout> | undefined;
310
+ try {
311
+ return await Promise.race([
312
+ operation(),
313
+ new Promise<T>((_resolve, reject) => {
314
+ timeout = setTimeout(
315
+ () => reject(new DispatchAskAppInlineDeadlineError()),
316
+ remainingMs,
317
+ );
318
+ }),
319
+ ]);
320
+ } finally {
321
+ if (timeout) clearTimeout(timeout);
322
+ }
323
+ }
324
+
325
+ async function waitForDispatchA2ATask(
326
+ client: A2AClient,
327
+ task: Task,
328
+ deadline: number | undefined,
329
+ ): Promise<Task> {
330
+ if (deadline == null || isTerminalDispatchTask(task)) return task;
331
+ let current = task;
332
+ while (!isTerminalDispatchTask(current)) {
333
+ const remaining = deadline - Date.now();
334
+ if (remaining <= 0) return current;
335
+ await new Promise((resolve) =>
336
+ setTimeout(
337
+ resolve,
338
+ Math.min(DISPATCH_ASK_APP_POLL_INTERVAL_MS, remaining),
339
+ ),
340
+ );
341
+ if (Date.now() >= deadline) return current;
342
+ try {
343
+ current = await runBeforeDispatchAskAppDeadline(
344
+ () => client.getTask(task.id),
345
+ deadline,
346
+ );
347
+ } catch (err) {
348
+ if (err instanceof DispatchAskAppInlineDeadlineError) return current;
349
+ if (!isTransientDispatchAskAppStatusError(err)) throw err;
350
+ if (Date.now() >= deadline) return current;
351
+ }
352
+ }
353
+ return current;
354
+ }
355
+
356
+ function normalizeBaseUrl(raw: string | undefined | null): string | null {
357
+ const value = raw?.trim();
358
+ if (!value) return null;
359
+ try {
360
+ const url = new URL(value);
361
+ if (url.protocol !== "http:" && url.protocol !== "https:") return null;
362
+ return url.toString().replace(/\/+$/, "");
363
+ } catch {
364
+ return null;
365
+ }
366
+ }
367
+
368
+ function normalizeBasePath(value: string | undefined): string {
369
+ const trimmed = value?.trim();
370
+ if (!trimmed || trimmed === "/") return "";
371
+ const normalized = trimmed.replace(/^\/+/, "").replace(/\/+$/, "");
372
+ return normalized ? `/${normalized}` : "";
373
+ }
374
+
375
+ function withConfiguredBasePath(baseUrl: string): string {
376
+ const basePath = normalizeBasePath(
377
+ process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,
378
+ );
379
+ if (!basePath) return baseUrl;
380
+ try {
381
+ const url = new URL(baseUrl);
382
+ const path = normalizeBasePath(url.pathname);
383
+ if (path === basePath || path.startsWith(`${basePath}/`)) {
384
+ return baseUrl;
385
+ }
386
+ url.pathname = path && path !== "/" ? `${basePath}${path}` : `${basePath}/`;
387
+ return url.toString().replace(/\/+$/, "");
388
+ } catch {
389
+ return baseUrl;
390
+ }
391
+ }
392
+
393
+ function dispatchSelfBaseUrl(): string {
394
+ const requestOrigin = normalizeBaseUrl(getRequestContext()?.requestOrigin);
395
+ if (requestOrigin) return withConfiguredBasePath(requestOrigin);
396
+
397
+ const configured =
398
+ normalizeBaseUrl(process.env.WORKSPACE_GATEWAY_URL) ??
399
+ normalizeBaseUrl(process.env.APP_URL) ??
400
+ normalizeBaseUrl(process.env.URL) ??
401
+ normalizeBaseUrl(process.env.DEPLOY_URL) ??
402
+ normalizeBaseUrl(process.env.BETTER_AUTH_URL);
403
+ if (configured) return withConfiguredBasePath(configured);
404
+
405
+ return process.env.NODE_ENV === "production"
406
+ ? "https://dispatch.agent-native.com"
407
+ : "http://localhost:8092";
408
+ }
409
+
410
+ function dispatchSelfApp(
411
+ settings: DispatchMcpAppAccessSettings,
412
+ ): DispatchMcpAccessibleApp {
413
+ return {
414
+ id: DISPATCH_APP_ID,
415
+ name: DISPATCH_NAME,
416
+ description: DISPATCH_DESCRIPTION,
417
+ url: dispatchSelfBaseUrl(),
418
+ color: DISPATCH_COLOR,
419
+ granted: isAppAllowedByMcpAccess(DISPATCH_APP_ID, settings),
420
+ };
421
+ }
422
+
423
+ const CONTROL_CHARS = new RegExp("[\\u0000-\\u001f\\u007f]");
424
+
425
+ function safeAppPath(raw: unknown): string | null {
426
+ if (typeof raw !== "string" || !raw.trim()) return null;
427
+ const value = raw.trim();
428
+ if (CONTROL_CHARS.test(value)) return null;
429
+ if (!value.startsWith("/")) return null;
430
+ if (value.startsWith("//") || value.startsWith("/\\")) return null;
431
+ if (/^\/[a-z][a-z0-9+.-]*:/i.test(value)) return null;
432
+ if (/%(?:2f|5c)/i.test(value)) return null;
433
+ const rawPath = value.split(/[?#]/, 1)[0] ?? value;
434
+ let parsed: URL;
435
+ try {
436
+ parsed = new URL(value, "http://agent-native.invalid");
437
+ } catch {
438
+ return null;
439
+ }
440
+ if (parsed.pathname !== rawPath) return null;
441
+ return value;
442
+ }
443
+
444
+ function appendParamsToPath(
445
+ path: string,
446
+ params: Record<string, string | number | boolean> | undefined,
447
+ ): string {
448
+ if (!params || Object.keys(params).length === 0) return path;
449
+ const url = new URL(path, "http://agent-native.invalid");
450
+ for (const [key, value] of Object.entries(params)) {
451
+ url.searchParams.set(key, String(value));
452
+ }
453
+ return `${url.pathname}${url.search}${url.hash}`;
454
+ }
455
+
456
+ function safeAppOrigin(app: DispatchMcpAccessibleApp): string | null {
457
+ try {
458
+ const url = new URL(app.url);
459
+ return url.protocol === "http:" || url.protocol === "https:"
460
+ ? url.origin
461
+ : null;
462
+ } catch {
463
+ return null;
464
+ }
465
+ }
466
+
467
+ function appBaseUrl(app: DispatchMcpAccessibleApp): string {
468
+ return app.url.replace(/\/+$/, "");
469
+ }
470
+
471
+ function appHomeBaseUrl(app: DispatchMcpAccessibleApp): string {
472
+ const configured = app.homeUrl?.trim();
473
+ if (configured) {
474
+ try {
475
+ const url = new URL(configured);
476
+ if (url.protocol === "http:" || url.protocol === "https:") {
477
+ return url.toString().replace(/\/+$/, "");
478
+ }
479
+ } catch {
480
+ // coercion-ok: invalid optional home URL falls back to endpoint.
481
+ // Fall back to the registered endpoint below. The endpoint has already
482
+ // passed the app-origin validation before this helper is reached.
483
+ }
484
+ }
485
+ return appBaseUrl(app);
486
+ }
487
+
488
+ function resolveGrantedAppEmbedStartUrl(
489
+ app: DispatchMcpAccessibleApp,
490
+ startUrl: string,
491
+ ): string {
492
+ try {
493
+ const baseUrl = appHomeBaseUrl(app);
494
+ const resolved = new URL(startUrl, `${baseUrl}/`);
495
+ if (!appMatchesUrlPath(app, resolved)) {
496
+ throw new Error(
497
+ "Target app returned an embed start URL outside the granted app.",
498
+ );
499
+ }
500
+ return resolved.toString();
501
+ } catch {
502
+ throw new Error("Target app returned an invalid embed start URL.");
503
+ }
504
+ }
505
+
506
+ function appBasePath(app: DispatchMcpAccessibleApp): string {
507
+ const pathname = new URL(appHomeBaseUrl(app)).pathname.replace(/\/+$/, "");
508
+ return pathname === "/" ? "" : pathname;
509
+ }
510
+
511
+ function appMatchesUrlPath(app: DispatchMcpAccessibleApp, url: URL): boolean {
512
+ const origin = new URL(appHomeBaseUrl(app)).origin;
513
+ if (!origin || url.origin !== origin) return false;
514
+ const basePath = appBasePath(app);
515
+ if (!basePath) return true;
516
+ return url.pathname === basePath || url.pathname.startsWith(`${basePath}/`);
517
+ }
518
+
519
+ function appPathSpecificity(app: DispatchMcpAccessibleApp): number {
520
+ return appBasePath(app).length;
521
+ }
522
+
523
+ function appRelativePath(app: DispatchMcpAccessibleApp, url: URL): string {
524
+ const basePath = appBasePath(app);
525
+ const path = basePath
526
+ ? url.pathname === basePath
527
+ ? "/"
528
+ : url.pathname.slice(basePath.length)
529
+ : url.pathname;
530
+ return `${path || "/"}${url.search}${url.hash}`;
531
+ }
532
+
533
+ function defaultWorkspaceSsoHomeUrl(
534
+ app: DispatchMcpAccessibleApp,
535
+ builtinHomeUrls: ReadonlyMap<string, string>,
536
+ ): string | undefined {
537
+ const builtinHomeUrl = builtinHomeUrls.get(app.id);
538
+ if (builtinHomeUrl) return builtinHomeUrl;
539
+ return safeAppOrigin(app) ?? undefined;
540
+ }
541
+
542
+ function isDispatchControlPath(path: string | null): boolean {
543
+ if (!path) return false;
544
+ const route = path.split(/[?#]/, 1)[0] ?? path;
545
+ return (
546
+ route === "/extensions" ||
547
+ route.startsWith("/extensions/") ||
548
+ route === "/tools" ||
549
+ route.startsWith("/tools/")
550
+ );
551
+ }
552
+
553
+ function assertAppCanOpenPath(app: DispatchMcpAccessibleApp, path: string) {
554
+ if (app.id !== DISPATCH_APP_ID && isDispatchControlPath(path)) {
555
+ throw new Error(
556
+ `Path "${path}" belongs to Dispatch. Use app: "dispatch" for Dispatch extension and tool routes.`,
557
+ );
558
+ }
559
+ }
560
+
561
+ function toAccessibleApp(
562
+ agent: DiscoveredAgent,
563
+ settings: DispatchMcpAppAccessSettings,
564
+ ): DispatchMcpAccessibleApp {
565
+ return {
566
+ id: agent.id,
567
+ name: agent.name,
568
+ description: agent.description,
569
+ url: agent.url,
570
+ color: agent.color,
571
+ granted: isAppAllowedByMcpAccess(agent.id, settings),
572
+ };
573
+ }
574
+
575
+ export async function listDispatchMcpApps(): Promise<{
576
+ settings: DispatchMcpAppAccessSettings;
577
+ apps: DispatchMcpAccessibleApp[];
578
+ }> {
579
+ const [settings, agents] = await Promise.all([
580
+ getDispatchMcpAppAccessSettings(),
581
+ discoverAgents("dispatch"),
582
+ ]);
583
+ return {
584
+ settings,
585
+ apps: [
586
+ dispatchSelfApp(settings),
587
+ ...agents
588
+ .filter((agent) => normalizeAppId(agent.id) !== DISPATCH_APP_ID)
589
+ .map((agent) => toAccessibleApp(agent, settings)),
590
+ ],
591
+ };
592
+ }
593
+
594
+ export async function listGrantedDispatchMcpApps(): Promise<
595
+ DispatchMcpAccessibleApp[]
596
+ > {
597
+ const { apps } = await listDispatchMcpApps();
598
+ return apps.filter((app) => app.granted && safeAppOrigin(app));
599
+ }
600
+
601
+ export async function listGrantedDispatchMcpAppOrigins(): Promise<string[]> {
602
+ const apps = await listGrantedDispatchMcpApps();
603
+ return Array.from(new Set(apps.flatMap((app) => safeAppOrigin(app) ?? [])));
604
+ }
605
+
606
+ export async function resolveGrantedDispatchMcpApp(
607
+ app: string,
608
+ ): Promise<DispatchMcpAccessibleApp> {
609
+ const target = normalizeAppId(app);
610
+ if (!target) throw new Error("app is required");
611
+ const { apps } = await listDispatchMcpApps();
612
+ const match = apps.find(
613
+ (candidate) =>
614
+ candidate.id === target || candidate.name.toLowerCase() === target,
615
+ );
616
+ if (!match) {
617
+ throw new Error(
618
+ `Unknown app "${app}". Call list_apps to see apps available through Dispatch MCP.`,
619
+ );
620
+ }
621
+ if (!match.granted) {
622
+ throw new Error(
623
+ `Dispatch MCP access to "${match.id}" is not granted. Open Dispatch > Agents to change MCP app access.`,
624
+ );
625
+ }
626
+ if (!safeAppOrigin(match)) {
627
+ throw new Error(
628
+ `Dispatch MCP app "${match.id}" has an invalid URL and cannot be opened through MCP.`,
629
+ );
630
+ }
631
+ return match;
632
+ }
633
+
634
+ async function isEligibleWorkspaceSsoApp(
635
+ candidate: DispatchMcpAccessibleApp,
636
+ ): Promise<boolean> {
637
+ return isWorkspaceSsoAppUrl(candidate, {
638
+ nodeEnv: process.env.NODE_ENV,
639
+ registryRaw: process.env.IDENTITY_SSO_APP_REGISTRY_JSON,
640
+ });
641
+ }
642
+
643
+ async function listWorkspaceSsoApps(): Promise<DispatchMcpAccessibleApp[]> {
644
+ const [agents, mountedApps] = await Promise.all([
645
+ discoverAgents("dispatch"),
646
+ listWorkspaceApps({ includeAgentCards: false }),
647
+ ]);
648
+ const builtinHomeUrls = new Map(
649
+ getBuiltinAgents("dispatch").map((agent) => [agent.id, agent.url]),
650
+ );
651
+ const candidatesById = new Map<string, DispatchMcpAccessibleApp>();
652
+ for (const agent of agents) {
653
+ if (normalizeAppId(agent.id) === DISPATCH_APP_ID) continue;
654
+ const accessible = toAccessibleApp(agent, {
655
+ mode: "all-apps",
656
+ selectedAppIds: [],
657
+ });
658
+ candidatesById.set(agent.id, {
659
+ ...accessible,
660
+ homeUrl: defaultWorkspaceSsoHomeUrl(accessible, builtinHomeUrls),
661
+ granted: true,
662
+ });
663
+ }
664
+ // The hosted Dispatch database is separate from the shared Workspace
665
+ // database. Overlay the live mounted registry so custom apps remain
666
+ // discoverable without copying a stale app list into Dispatch configuration.
667
+ for (const app of mountedApps) {
668
+ if (app.isDispatch || !app.url) continue;
669
+ candidatesById.set(app.id, {
670
+ id: app.id,
671
+ name: app.name,
672
+ description: app.description,
673
+ url: app.url,
674
+ color: DISPATCH_COLOR,
675
+ granted: true,
676
+ });
677
+ }
678
+ const candidates = [...candidatesById.values()];
679
+ const eligible = [] as DispatchMcpAccessibleApp[];
680
+ for (const candidate of candidates) {
681
+ if (await isEligibleWorkspaceSsoApp(candidate)) {
682
+ eligible.push(candidate);
683
+ }
684
+ }
685
+ return [
686
+ {
687
+ id: DISPATCH_APP_ID,
688
+ name: DISPATCH_NAME,
689
+ description: DISPATCH_DESCRIPTION,
690
+ url: dispatchSelfBaseUrl(),
691
+ color: DISPATCH_COLOR,
692
+ granted: true,
693
+ },
694
+ ...eligible,
695
+ ];
696
+ }
697
+
698
+ async function resolveWorkspaceSsoApp(
699
+ app: string,
700
+ ): Promise<DispatchMcpAccessibleApp> {
701
+ const target = normalizeAppId(app);
702
+ if (!target) throw new Error("app is required");
703
+ const apps = await listWorkspaceSsoApps();
704
+ const match = apps.find(
705
+ (candidate) =>
706
+ candidate.id === target || candidate.name.toLowerCase() === target,
707
+ );
708
+ if (!match) {
709
+ throw new Error(
710
+ `Workspace app "${app}" is not registered for workspace sign-in.`,
711
+ );
712
+ }
713
+ return match;
714
+ }
715
+
716
+ export async function askGrantedDispatchMcpApp(
717
+ app: string,
718
+ message: string,
719
+ options?: { async?: boolean; maxWaitMs?: number },
720
+ ): Promise<ReturnType<typeof dispatchAskAppTaskResult>> {
721
+ const trimmedMessage = message.trim();
722
+ if (!trimmedMessage) throw new Error("message is required");
723
+ const target = await resolveGrantedDispatchMcpApp(app);
724
+ const userEmail = getRequestUserEmail();
725
+ if (!userEmail) throw new Error("no authenticated user");
726
+
727
+ const orgId = getRequestOrgId();
728
+ const [orgDomain, orgSecret] = orgId
729
+ ? await Promise.all([
730
+ getOrgDomain(orgId).catch(() => null),
731
+ getOrgA2ASecret(orgId).catch(() => null),
732
+ ])
733
+ : [null, null];
734
+
735
+ const inlineWaitMs =
736
+ options?.async === true
737
+ ? 0
738
+ : boundedDispatchAskAppWaitMs(options?.maxWaitMs);
739
+ const deadline = inlineWaitMs > 0 ? Date.now() + inlineWaitMs : undefined;
740
+
741
+ const { client, metadata } = await createDispatchA2AClient({
742
+ targetUrl: target.url,
743
+ userEmail,
744
+ orgDomain: orgDomain ?? undefined,
745
+ orgSecret: orgSecret ?? undefined,
746
+ deadline,
747
+ });
748
+ const task = await client.send(
749
+ {
750
+ role: "user",
751
+ parts: [{ type: "text", text: trimmedMessage }],
752
+ },
753
+ { async: true, metadata },
754
+ );
755
+ const finalOrRunning = await waitForDispatchA2ATask(client, task, deadline);
756
+ return dispatchAskAppTaskResult(target.id, finalOrRunning);
757
+ }
758
+
759
+ export async function getGrantedDispatchMcpAppTask(
760
+ app: string,
761
+ taskId: string,
762
+ ): Promise<DispatchAskAppTaskResult> {
763
+ const trimmedTaskId = taskId.trim();
764
+ if (!trimmedTaskId) throw new Error("taskId is required");
765
+ const target = await resolveGrantedDispatchMcpApp(app);
766
+ const userEmail = getRequestUserEmail();
767
+ if (!userEmail) throw new Error("no authenticated user");
768
+
769
+ const orgId = getRequestOrgId();
770
+ const [orgDomain, orgSecret] = orgId
771
+ ? await Promise.all([
772
+ getOrgDomain(orgId).catch(() => null),
773
+ getOrgA2ASecret(orgId).catch(() => null),
774
+ ])
775
+ : [null, null];
776
+ const { client } = await createDispatchA2AClient({
777
+ targetUrl: target.url,
778
+ userEmail,
779
+ orgDomain: orgDomain ?? undefined,
780
+ orgSecret: orgSecret ?? undefined,
781
+ });
782
+ const maxAttempts = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length + 1;
783
+ for (
784
+ let attempt = 0;
785
+ attempt <= DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length;
786
+ attempt++
787
+ ) {
788
+ const startedAt = Date.now();
789
+ try {
790
+ const task = await client.getTask(trimmedTaskId);
791
+ return dispatchAskAppTaskResult(target.id, task);
792
+ } catch (err) {
793
+ const delayMs = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS[attempt];
794
+ const errorCategory = dispatchAskAppStatusErrorCategory(err);
795
+ const retryable = errorCategory != null;
796
+ const willRetry = retryable && delayMs != null;
797
+ if (retryable) {
798
+ console.warn("[ask_app_status] tasks/get attempt failed", {
799
+ app: target.id,
800
+ routedVia: "a2a",
801
+ taskId: trimmedTaskId,
802
+ originHost: dispatchAskAppStatusOriginHost(target.url),
803
+ attempt: attempt + 1,
804
+ maxAttempts,
805
+ elapsedMs: Date.now() - startedAt,
806
+ errorCategory,
807
+ errorName: err instanceof Error ? err.name : typeof err,
808
+ causeCode: dispatchAskAppStatusErrorCauseCode(err),
809
+ willRetry,
810
+ });
811
+ }
812
+ if (!retryable) throw err;
813
+ if (delayMs == null) {
814
+ return dispatchAskAppStatusReadUnavailableResult(
815
+ target.id,
816
+ trimmedTaskId,
817
+ errorCategory,
818
+ maxAttempts,
819
+ );
820
+ }
821
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
822
+ }
823
+ }
824
+ throw new Error("ask_app_status retry loop exited unexpectedly.");
825
+ }
826
+
827
+ export async function openGrantedDispatchMcpApp(input: {
828
+ app: string;
829
+ view?: string;
830
+ path?: string;
831
+ params?: Record<string, string | number | boolean>;
832
+ embed?: boolean;
833
+ chrome?: "full" | "minimal";
834
+ }): Promise<{
835
+ app: string;
836
+ view?: string;
837
+ path?: string;
838
+ url: string;
839
+ embed?: boolean;
840
+ chrome?: "full" | "minimal";
841
+ embedStartUrl?: string;
842
+ embedTargetPath?: string;
843
+ embedExpiresAt?: number;
844
+ }> {
845
+ const view = input.view?.trim() ?? "";
846
+ const hasPathInput = input.path != null;
847
+ const path = safeAppPath(input.path);
848
+ if (hasPathInput && !path) {
849
+ throw new Error("path must be a safe app-relative route");
850
+ }
851
+ if (!view && !path) throw new Error("open_app requires view or path");
852
+ const target = await resolveGrantedDispatchMcpApp(input.app);
853
+ if (path) assertAppCanOpenPath(target, path);
854
+ const relUrl = path
855
+ ? appendParamsToPath(path, input.params)
856
+ : buildDeepLink({
857
+ app: target.id,
858
+ view,
859
+ params: input.params,
860
+ });
861
+ const url = `${appBaseUrl(target)}${relUrl}`;
862
+ let embedSession: Awaited<
863
+ ReturnType<typeof createGrantedDispatchMcpEmbedSession>
864
+ > | null = null;
865
+ if (input.embed) {
866
+ try {
867
+ embedSession = await createGrantedDispatchMcpEmbedSession({
868
+ app: target.id,
869
+ url,
870
+ chrome: input.chrome,
871
+ });
872
+ } catch (error) {
873
+ console.warn(
874
+ `[dispatch] Could not pre-mint MCP embed session for ${target.id}:`,
875
+ error,
876
+ );
877
+ }
878
+ }
879
+ return {
880
+ app: target.id,
881
+ ...(view ? { view } : {}),
882
+ ...(path ? { path } : {}),
883
+ url,
884
+ ...(input.embed === true ? { embed: true } : {}),
885
+ ...(input.chrome ? { chrome: input.chrome } : {}),
886
+ ...(embedSession?.startUrl ? { embedStartUrl: embedSession.startUrl } : {}),
887
+ ...(embedSession?.targetPath
888
+ ? { embedTargetPath: embedSession.targetPath }
889
+ : {}),
890
+ ...(typeof embedSession?.expiresAt === "number"
891
+ ? { embedExpiresAt: embedSession.expiresAt }
892
+ : {}),
893
+ };
894
+ }
895
+
896
+ function parseMcpToolTextResult(result: unknown): Record<string, unknown> {
897
+ if (result && typeof result === "object") {
898
+ const structured = (result as any).structuredContent;
899
+ if (structured && typeof structured === "object") return structured;
900
+ const parts = Array.isArray((result as any).content)
901
+ ? ((result as any).content as Array<Record<string, unknown>>)
902
+ : [];
903
+ const text = parts.find(
904
+ (part) => part?.type === "text" && typeof part.text === "string",
905
+ )?.text;
906
+ if (typeof text === "string" && text.trim()) {
907
+ if ((result as any).isError) throw new Error(text.trim());
908
+ const parsed = JSON.parse(text);
909
+ if (parsed && typeof parsed === "object") return parsed;
910
+ }
911
+ }
912
+ throw new Error("Target app did not return an embed session.");
913
+ }
914
+
915
+ function sleep(ms: number): Promise<void> {
916
+ return new Promise((resolve) => setTimeout(resolve, ms));
917
+ }
918
+
919
+ function isRetryableTargetMcpError(error: unknown): boolean {
920
+ const message =
921
+ error instanceof Error
922
+ ? error.message
923
+ : typeof error === "string"
924
+ ? error
925
+ : String(error ?? "");
926
+ if (
927
+ /rejected the request|unauthorized|forbidden|401|403|404|405|html/i.test(
928
+ message,
929
+ )
930
+ ) {
931
+ return false;
932
+ }
933
+ return /streamable http|handshake|failed to fetch|fetch failed|networkerror|econnrefused|enotfound|timed out|timeout|502|503|504/i.test(
934
+ message,
935
+ );
936
+ }
937
+
938
+ function isTargetMcpAuthError(error: unknown): boolean {
939
+ const message =
940
+ error instanceof Error
941
+ ? error.message
942
+ : typeof error === "string"
943
+ ? error
944
+ : String(error ?? "");
945
+ return /\b401\b|\b403\b|unauthorized|forbidden|invalid(?: or expired)? (?:a2a )?token|authentication required/i.test(
946
+ message,
947
+ );
948
+ }
949
+
950
+ function targetMcpErrorStatus(error: unknown): number | undefined {
951
+ const message =
952
+ error instanceof Error
953
+ ? error.message
954
+ : typeof error === "string"
955
+ ? error
956
+ : String(error ?? "");
957
+ const status = message.match(/\b([45]\d{2})\b/)?.[1];
958
+ return status ? Number(status) : undefined;
959
+ }
960
+
961
+ type TargetMcpTokenAttempt = {
962
+ token: string;
963
+ strategy: "org" | "global";
964
+ };
965
+
966
+ function targetMcpRequestDetails(input: {
967
+ app: DispatchMcpAccessibleApp;
968
+ url: string;
969
+ }): { app: string; targetOrigin: string; targetPath: string } {
970
+ const targetUrl = new URL(input.url);
971
+ return {
972
+ app: input.app.id,
973
+ targetOrigin: targetUrl.origin,
974
+ targetPath: targetUrl.pathname,
975
+ };
976
+ }
977
+
978
+ function targetMcpRetryDelay(attempt: number): number {
979
+ const base =
980
+ TARGET_EMBED_SESSION_RETRY_BASE_MS * Math.pow(2, Math.max(0, attempt - 1));
981
+ return base + Math.floor(Math.random() * 100);
982
+ }
983
+
984
+ async function callTargetCreateEmbedSession(input: {
985
+ app: DispatchMcpAccessibleApp;
986
+ token: string;
987
+ url: string;
988
+ chrome?: "full" | "minimal";
989
+ }): Promise<unknown> {
990
+ const serverId = "target";
991
+ for (let attempt = 1; ; attempt += 1) {
992
+ const manager = new McpClientManager({
993
+ servers: {
994
+ [serverId]: {
995
+ type: "http",
996
+ url: `${appBaseUrl(input.app)}/mcp`,
997
+ headers: {
998
+ Authorization: `Bearer ${input.token}`,
999
+ },
1000
+ },
1001
+ },
1002
+ });
1003
+ try {
1004
+ await manager.start();
1005
+ return await manager.callTool(
1006
+ buildMcpToolName(serverId, "create_embed_session"),
1007
+ {
1008
+ url: input.url,
1009
+ chrome: input.chrome ?? "full",
1010
+ },
1011
+ );
1012
+ } catch (error) {
1013
+ if (
1014
+ attempt >= TARGET_EMBED_SESSION_ATTEMPTS ||
1015
+ !isRetryableTargetMcpError(error)
1016
+ ) {
1017
+ throw error;
1018
+ }
1019
+ await sleep(targetMcpRetryDelay(attempt));
1020
+ } finally {
1021
+ await manager.stop().catch((stopError) => {
1022
+ console.warn("[dispatch] Failed to stop target MCP client:", stopError);
1023
+ });
1024
+ }
1025
+ }
1026
+ }
1027
+
1028
+ async function createTargetMcpTokenAttempts(input: {
1029
+ ownerEmail: string;
1030
+ orgDomain?: string;
1031
+ orgSecret?: string;
1032
+ target: DispatchMcpAccessibleApp;
1033
+ }): Promise<TargetMcpTokenAttempt[]> {
1034
+ const attempts: TargetMcpTokenAttempt[] = [];
1035
+ const addAttempt = async (tokenInput: {
1036
+ strategy: TargetMcpTokenAttempt["strategy"];
1037
+ secret?: string;
1038
+ preferGlobalSecret: boolean;
1039
+ }) => {
1040
+ const token = await signA2AToken(
1041
+ input.ownerEmail,
1042
+ input.orgDomain,
1043
+ tokenInput.secret,
1044
+ {
1045
+ expiresIn: "5m",
1046
+ audience: canonicalA2AAudience(appBaseUrl(input.target)),
1047
+ preferGlobalSecret: tokenInput.preferGlobalSecret,
1048
+ },
1049
+ );
1050
+ if (!attempts.some((attempt) => attempt.token === token)) {
1051
+ attempts.push({ token, strategy: tokenInput.strategy });
1052
+ }
1053
+ };
1054
+
1055
+ if (input.orgDomain && input.orgSecret) {
1056
+ await addAttempt({
1057
+ strategy: "org",
1058
+ secret: input.orgSecret,
1059
+ preferGlobalSecret: false,
1060
+ });
1061
+ // A target app may not have the org secret synced yet. The shared secret
1062
+ // is a bounded compatibility fallback, used only after the target rejects
1063
+ // the org-signed request and never after a non-authentication failure.
1064
+ if (process.env.A2A_SECRET?.trim()) {
1065
+ await addAttempt({
1066
+ strategy: "global",
1067
+ preferGlobalSecret: true,
1068
+ });
1069
+ }
1070
+ } else {
1071
+ await addAttempt({
1072
+ strategy: "global",
1073
+ preferGlobalSecret: true,
1074
+ });
1075
+ }
1076
+
1077
+ return attempts;
1078
+ }
1079
+
1080
+ async function resolveEmbedTarget(
1081
+ input: {
1082
+ app?: string;
1083
+ url?: string;
1084
+ path?: string;
1085
+ },
1086
+ options: {
1087
+ resolveApp: (app: string) => Promise<DispatchMcpAccessibleApp>;
1088
+ listApps: () => Promise<DispatchMcpAccessibleApp[]>;
1089
+ urlError: string;
1090
+ },
1091
+ ): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {
1092
+ const explicitApp = input.app?.trim()
1093
+ ? await options.resolveApp(input.app)
1094
+ : null;
1095
+ if (explicitApp && input.path) {
1096
+ const path = safeAppPath(input.path);
1097
+ if (!path) throw new Error("path must be a safe app-relative route");
1098
+ assertAppCanOpenPath(explicitApp, path);
1099
+ return {
1100
+ app: explicitApp,
1101
+ path,
1102
+ url: `${appHomeBaseUrl(explicitApp)}${path}`,
1103
+ };
1104
+ }
1105
+
1106
+ if (!input.url) {
1107
+ throw new Error("create_embed_session requires a url or app + path.");
1108
+ }
1109
+
1110
+ let parsed: URL;
1111
+ try {
1112
+ parsed = new URL(input.url);
1113
+ } catch {
1114
+ if (!explicitApp) {
1115
+ throw new Error("Relative embed paths require an app id.");
1116
+ }
1117
+ const path = safeAppPath(input.url);
1118
+ if (!path) throw new Error("url must be a safe app route.");
1119
+ return {
1120
+ app: explicitApp,
1121
+ path,
1122
+ url: `${appHomeBaseUrl(explicitApp)}${path}`,
1123
+ };
1124
+ }
1125
+
1126
+ const apps = explicitApp ? [explicitApp] : await options.listApps();
1127
+ const target = apps
1128
+ .filter((app) => appMatchesUrlPath(app, parsed))
1129
+ .sort((a, b) => appPathSpecificity(b) - appPathSpecificity(a))[0];
1130
+ if (!target) {
1131
+ throw new Error(options.urlError);
1132
+ }
1133
+ const path = safeAppPath(appRelativePath(target, parsed));
1134
+ if (!path) throw new Error("Embed URL path is not safe.");
1135
+ assertAppCanOpenPath(target, path);
1136
+ return { app: target, path, url: `${appHomeBaseUrl(target)}${path}` };
1137
+ }
1138
+
1139
+ async function resolveDispatchEmbedTarget(input: {
1140
+ app?: string;
1141
+ url?: string;
1142
+ path?: string;
1143
+ }): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {
1144
+ return resolveEmbedTarget(input, {
1145
+ resolveApp: resolveGrantedDispatchMcpApp,
1146
+ listApps: listGrantedDispatchMcpApps,
1147
+ urlError: "Embed URL must belong to an app granted through Dispatch.",
1148
+ });
1149
+ }
1150
+
1151
+ async function resolveWorkspaceSsoEmbedTarget(input: {
1152
+ app?: string;
1153
+ url?: string;
1154
+ path?: string;
1155
+ }): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {
1156
+ return resolveEmbedTarget(input, {
1157
+ resolveApp: resolveWorkspaceSsoApp,
1158
+ listApps: listWorkspaceSsoApps,
1159
+ urlError:
1160
+ "Embed URL must belong to an app registered for Dispatch workspace sign-in.",
1161
+ });
1162
+ }
1163
+
1164
+ async function createDispatchSelfEmbedSession(input: {
1165
+ ownerEmail: string;
1166
+ orgId?: string;
1167
+ path: string;
1168
+ baseUrl: string;
1169
+ chrome?: "full" | "minimal";
1170
+ }): Promise<{
1171
+ startUrl: string;
1172
+ targetPath?: string;
1173
+ expiresAt?: number;
1174
+ app: string;
1175
+ }> {
1176
+ const ticket = await createEmbedSessionTicket({
1177
+ ownerEmail: input.ownerEmail,
1178
+ orgId: input.orgId,
1179
+ targetPath: input.path,
1180
+ scope: input.chrome ?? null,
1181
+ });
1182
+ const startPath = buildEmbedStartPath(ticket.ticket);
1183
+ return {
1184
+ startUrl: new URL(startPath, input.baseUrl).toString(),
1185
+ targetPath: input.path,
1186
+ expiresAt: ticket.expiresAt,
1187
+ app: DISPATCH_APP_ID,
1188
+ };
1189
+ }
1190
+
1191
+ export async function createGrantedDispatchMcpEmbedSession(input: {
1192
+ app?: string;
1193
+ url?: string;
1194
+ path?: string;
1195
+ chrome?: "full" | "minimal";
1196
+ }): Promise<{
1197
+ startUrl: string;
1198
+ targetPath?: string;
1199
+ expiresAt?: number;
1200
+ app: string;
1201
+ }> {
1202
+ const userEmail = getRequestUserEmail();
1203
+ if (!userEmail) throw new Error("no authenticated user");
1204
+ const target = await resolveDispatchEmbedTarget(input);
1205
+
1206
+ return createEmbedSessionForResolvedApp({
1207
+ ownerEmail: userEmail,
1208
+ orgId: getRequestOrgId(),
1209
+ target,
1210
+ chrome: input.chrome,
1211
+ });
1212
+ }
1213
+
1214
+ async function createEmbedSessionForResolvedApp(input: {
1215
+ ownerEmail: string;
1216
+ orgId?: string;
1217
+ target: { app: DispatchMcpAccessibleApp; path: string; url: string };
1218
+ chrome?: "full" | "minimal";
1219
+ }): Promise<{
1220
+ startUrl: string;
1221
+ targetPath?: string;
1222
+ expiresAt?: number;
1223
+ app: string;
1224
+ }> {
1225
+ const { ownerEmail, orgId, target, chrome } = input;
1226
+
1227
+ if (target.app.id === DISPATCH_APP_ID) {
1228
+ return createDispatchSelfEmbedSession({
1229
+ ownerEmail,
1230
+ orgId,
1231
+ path: target.path,
1232
+ baseUrl: appBaseUrl(target.app),
1233
+ chrome,
1234
+ });
1235
+ }
1236
+
1237
+ const [orgDomain, orgSecret] = orgId
1238
+ ? await Promise.all([
1239
+ getOrgDomain(orgId).catch(() => null),
1240
+ getOrgA2ASecret(orgId).catch(() => null),
1241
+ ])
1242
+ : [null, null];
1243
+ const usableOrgSecret =
1244
+ typeof orgSecret === "string" && orgSecret.trim().length > 0;
1245
+ const usableOrgDomain =
1246
+ typeof orgDomain === "string" && orgDomain.trim().length > 0;
1247
+ const signedOrgDomain = usableOrgDomain ? orgDomain.trim() : undefined;
1248
+ const tokenAttempts = await createTargetMcpTokenAttempts({
1249
+ ownerEmail,
1250
+ orgDomain: signedOrgDomain,
1251
+ orgSecret: usableOrgSecret ? orgSecret.trim() : undefined,
1252
+ target: target.app,
1253
+ });
1254
+ const targetDetails = targetMcpRequestDetails({
1255
+ app: target.app,
1256
+ url: target.url,
1257
+ });
1258
+ let parsed: {
1259
+ startUrl?: string;
1260
+ targetPath?: string;
1261
+ expiresAt?: number;
1262
+ } | null = null;
1263
+ let lastError: unknown;
1264
+ for (
1265
+ let attemptIndex = 0;
1266
+ attemptIndex < tokenAttempts.length;
1267
+ attemptIndex++
1268
+ ) {
1269
+ const tokenAttempt = tokenAttempts[attemptIndex];
1270
+ console.info("[dispatch] workspace embed target request", {
1271
+ ...targetDetails,
1272
+ authStrategy: tokenAttempt.strategy,
1273
+ attempt: attemptIndex + 1,
1274
+ attempts: tokenAttempts.length,
1275
+ });
1276
+ try {
1277
+ const result = await callTargetCreateEmbedSession({
1278
+ app: target.app,
1279
+ token: tokenAttempt.token,
1280
+ url: target.url,
1281
+ chrome,
1282
+ });
1283
+ parsed = parseMcpToolTextResult(result) as {
1284
+ startUrl?: string;
1285
+ targetPath?: string;
1286
+ expiresAt?: number;
1287
+ };
1288
+ break;
1289
+ } catch (error) {
1290
+ lastError = error;
1291
+ console.warn("[dispatch] workspace embed target response", {
1292
+ ...targetDetails,
1293
+ authStrategy: tokenAttempt.strategy,
1294
+ attempt: attemptIndex + 1,
1295
+ status: targetMcpErrorStatus(error),
1296
+ category: isTargetMcpAuthError(error)
1297
+ ? "authentication"
1298
+ : isRetryableTargetMcpError(error)
1299
+ ? "transient"
1300
+ : "permanent",
1301
+ });
1302
+ if (
1303
+ !isTargetMcpAuthError(error) ||
1304
+ attemptIndex >= tokenAttempts.length - 1
1305
+ ) {
1306
+ throw error;
1307
+ }
1308
+ }
1309
+ }
1310
+ if (!parsed) {
1311
+ throw lastError instanceof Error
1312
+ ? lastError
1313
+ : new Error("Target app did not return an embed session.");
1314
+ }
1315
+ if (!parsed.startUrl) {
1316
+ throw new Error("Target app did not return an embed start URL.");
1317
+ }
1318
+ const startUrl = resolveGrantedAppEmbedStartUrl(target.app, parsed.startUrl);
1319
+ const startUrlDetails = new URL(startUrl);
1320
+ console.info("[dispatch] workspace embed target minted session", {
1321
+ ...targetDetails,
1322
+ startPath: startUrlDetails.pathname,
1323
+ returnedTicket: startUrlDetails.searchParams.has("ticket"),
1324
+ returnedTargetPath: typeof parsed.targetPath === "string",
1325
+ returnedExpiry: typeof parsed.expiresAt === "number",
1326
+ });
1327
+ const output: {
1328
+ startUrl: string;
1329
+ targetPath?: string;
1330
+ expiresAt?: number;
1331
+ app: string;
1332
+ } = {
1333
+ startUrl,
1334
+ app: target.app.id,
1335
+ };
1336
+ if (parsed.targetPath) output.targetPath = parsed.targetPath;
1337
+ if (typeof parsed.expiresAt === "number") output.expiresAt = parsed.expiresAt;
1338
+ return output;
1339
+ }
1340
+
1341
+ export async function createWorkspaceSsoEmbedSession(input: {
1342
+ app?: string;
1343
+ url?: string;
1344
+ path?: string;
1345
+ chrome?: "full" | "minimal";
1346
+ }): Promise<{
1347
+ startUrl: string;
1348
+ targetPath?: string;
1349
+ expiresAt?: number;
1350
+ app: string;
1351
+ }> {
1352
+ const ownerEmail = getRequestUserEmail();
1353
+ if (!ownerEmail) {
1354
+ console.warn("[dispatch] workspace embed mint rejected", {
1355
+ phase: "dispatch-auth",
1356
+ requestedApp: input.app ?? null,
1357
+ hasPath: typeof input.path === "string",
1358
+ hasUrl: typeof input.url === "string",
1359
+ ownerResolved: false,
1360
+ orgResolved: Boolean(getRequestOrgId()),
1361
+ });
1362
+ throw new Error("no authenticated user");
1363
+ }
1364
+ const enabled = await isFeatureFlagEnabled(DISPATCH_WORKSPACE_SSO_FLAG, {
1365
+ userEmail: ownerEmail,
1366
+ userKey: ownerEmail,
1367
+ orgId: getRequestOrgId(),
1368
+ });
1369
+ if (!enabled) {
1370
+ console.warn("[dispatch] workspace embed mint rejected", {
1371
+ phase: "feature-flag",
1372
+ requestedApp: input.app ?? null,
1373
+ hasPath: typeof input.path === "string",
1374
+ hasUrl: typeof input.url === "string",
1375
+ ownerResolved: true,
1376
+ orgResolved: Boolean(getRequestOrgId()),
1377
+ });
1378
+ throw new Error("Dispatch workspace sign-in is not enabled.");
1379
+ }
1380
+
1381
+ const target = await resolveWorkspaceSsoEmbedTarget(input);
1382
+ return createEmbedSessionForResolvedApp({
1383
+ ownerEmail,
1384
+ orgId: getRequestOrgId(),
1385
+ target,
1386
+ chrome: input.chrome,
1387
+ });
1388
+ }