@jami-studio/dispatch 0.13.14

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 (1129) hide show
  1. package/README.md +134 -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 +10 -0
  19. package/dist/actions/ask_app.d.ts.map +1 -0
  20. package/dist/actions/ask_app.js +12 -0
  21. package/dist/actions/ask_app.js.map +1 -0
  22. package/dist/actions/create-dream-report.d.ts +59 -0
  23. package/dist/actions/create-dream-report.d.ts.map +1 -0
  24. package/dist/actions/create-dream-report.js +67 -0
  25. package/dist/actions/create-dream-report.js.map +1 -0
  26. package/dist/actions/create-link-token.d.ts +10 -0
  27. package/dist/actions/create-link-token.d.ts.map +1 -0
  28. package/dist/actions/create-link-token.js +11 -0
  29. package/dist/actions/create-link-token.js.map +1 -0
  30. package/dist/actions/create-pylon-ticket.d.ts +17 -0
  31. package/dist/actions/create-pylon-ticket.d.ts.map +1 -0
  32. package/dist/actions/create-pylon-ticket.js +95 -0
  33. package/dist/actions/create-pylon-ticket.js.map +1 -0
  34. package/dist/actions/create-vault-grant.d.ts +17 -0
  35. package/dist/actions/create-vault-grant.d.ts.map +1 -0
  36. package/dist/actions/create-vault-grant.js +14 -0
  37. package/dist/actions/create-vault-grant.js.map +1 -0
  38. package/dist/actions/create-vault-secret.d.ts +21 -0
  39. package/dist/actions/create-vault-secret.d.ts.map +1 -0
  40. package/dist/actions/create-vault-secret.js +26 -0
  41. package/dist/actions/create-vault-secret.js.map +1 -0
  42. package/dist/actions/create-workspace-resource-grant.d.ts +16 -0
  43. package/dist/actions/create-workspace-resource-grant.d.ts.map +1 -0
  44. package/dist/actions/create-workspace-resource-grant.js +14 -0
  45. package/dist/actions/create-workspace-resource-grant.js.map +1 -0
  46. package/dist/actions/create-workspace-resource.d.ts +40 -0
  47. package/dist/actions/create-workspace-resource.d.ts.map +1 -0
  48. package/dist/actions/create-workspace-resource.js +22 -0
  49. package/dist/actions/create-workspace-resource.js.map +1 -0
  50. package/dist/actions/create_embed_session.d.ts +13 -0
  51. package/dist/actions/create_embed_session.d.ts.map +1 -0
  52. package/dist/actions/create_embed_session.js +28 -0
  53. package/dist/actions/create_embed_session.js.map +1 -0
  54. package/dist/actions/delete-destination.d.ts +34 -0
  55. package/dist/actions/delete-destination.d.ts.map +1 -0
  56. package/dist/actions/delete-destination.js +11 -0
  57. package/dist/actions/delete-destination.js.map +1 -0
  58. package/dist/actions/delete-staged-dataset.d.ts +8 -0
  59. package/dist/actions/delete-staged-dataset.d.ts.map +1 -0
  60. package/dist/actions/delete-staged-dataset.js +31 -0
  61. package/dist/actions/delete-staged-dataset.js.map +1 -0
  62. package/dist/actions/delete-vault-secret.d.ts +17 -0
  63. package/dist/actions/delete-vault-secret.d.ts.map +1 -0
  64. package/dist/actions/delete-vault-secret.js +11 -0
  65. package/dist/actions/delete-vault-secret.js.map +1 -0
  66. package/dist/actions/delete-workspace-resource.d.ts +35 -0
  67. package/dist/actions/delete-workspace-resource.d.ts.map +1 -0
  68. package/dist/actions/delete-workspace-resource.js +11 -0
  69. package/dist/actions/delete-workspace-resource.js.map +1 -0
  70. package/dist/actions/deny-vault-request.d.ts +19 -0
  71. package/dist/actions/deny-vault-request.d.ts.map +1 -0
  72. package/dist/actions/deny-vault-request.js +12 -0
  73. package/dist/actions/deny-vault-request.js.map +1 -0
  74. package/dist/actions/ensure-dream-job.d.ts +33 -0
  75. package/dist/actions/ensure-dream-job.d.ts.map +1 -0
  76. package/dist/actions/ensure-dream-job.js +73 -0
  77. package/dist/actions/ensure-dream-job.js.map +1 -0
  78. package/dist/actions/get-agent-thread-debug.d.ts +55 -0
  79. package/dist/actions/get-agent-thread-debug.d.ts.map +1 -0
  80. package/dist/actions/get-agent-thread-debug.js +24 -0
  81. package/dist/actions/get-agent-thread-debug.js.map +1 -0
  82. package/dist/actions/get-app-creation-settings.d.ts +3 -0
  83. package/dist/actions/get-app-creation-settings.d.ts.map +1 -0
  84. package/dist/actions/get-app-creation-settings.js +10 -0
  85. package/dist/actions/get-app-creation-settings.js.map +1 -0
  86. package/dist/actions/get-dispatch-settings.d.ts +3 -0
  87. package/dist/actions/get-dispatch-settings.d.ts.map +1 -0
  88. package/dist/actions/get-dispatch-settings.js +10 -0
  89. package/dist/actions/get-dispatch-settings.js.map +1 -0
  90. package/dist/actions/get-dream-settings.d.ts +3 -0
  91. package/dist/actions/get-dream-settings.d.ts.map +1 -0
  92. package/dist/actions/get-dream-settings.js +11 -0
  93. package/dist/actions/get-dream-settings.js.map +1 -0
  94. package/dist/actions/get-dream.d.ts +48 -0
  95. package/dist/actions/get-dream.d.ts.map +1 -0
  96. package/dist/actions/get-dream.js +13 -0
  97. package/dist/actions/get-dream.js.map +1 -0
  98. package/dist/actions/get-vault-access-settings.d.ts +3 -0
  99. package/dist/actions/get-vault-access-settings.d.ts.map +1 -0
  100. package/dist/actions/get-vault-access-settings.js +10 -0
  101. package/dist/actions/get-vault-access-settings.js.map +1 -0
  102. package/dist/actions/get-workspace-info.d.ts +3 -0
  103. package/dist/actions/get-workspace-info.d.ts.map +1 -0
  104. package/dist/actions/get-workspace-info.js +10 -0
  105. package/dist/actions/get-workspace-info.js.map +1 -0
  106. package/dist/actions/get-workspace-resource-effective-context.d.ts +8 -0
  107. package/dist/actions/get-workspace-resource-effective-context.d.ts.map +1 -0
  108. package/dist/actions/get-workspace-resource-effective-context.js +27 -0
  109. package/dist/actions/get-workspace-resource-effective-context.js.map +1 -0
  110. package/dist/actions/grant-vault-secrets-to-app.d.ts +27 -0
  111. package/dist/actions/grant-vault-secrets-to-app.d.ts.map +1 -0
  112. package/dist/actions/grant-vault-secrets-to-app.js +19 -0
  113. package/dist/actions/grant-vault-secrets-to-app.js.map +1 -0
  114. package/dist/actions/grant-workspace-resources-to-app.d.ts +17 -0
  115. package/dist/actions/grant-workspace-resources-to-app.d.ts.map +1 -0
  116. package/dist/actions/grant-workspace-resources-to-app.js +15 -0
  117. package/dist/actions/grant-workspace-resources-to-app.js.map +1 -0
  118. package/dist/actions/index.d.ts +9 -0
  119. package/dist/actions/index.d.ts.map +1 -0
  120. package/dist/actions/index.js +183 -0
  121. package/dist/actions/index.js.map +1 -0
  122. package/dist/actions/list-agent-thread-sources.d.ts +9 -0
  123. package/dist/actions/list-agent-thread-sources.d.ts.map +1 -0
  124. package/dist/actions/list-agent-thread-sources.js +11 -0
  125. package/dist/actions/list-agent-thread-sources.js.map +1 -0
  126. package/dist/actions/list-available-workspace-templates.d.ts +3 -0
  127. package/dist/actions/list-available-workspace-templates.d.ts.map +1 -0
  128. package/dist/actions/list-available-workspace-templates.js +10 -0
  129. package/dist/actions/list-available-workspace-templates.js.map +1 -0
  130. package/dist/actions/list-connected-agents.d.ts +13 -0
  131. package/dist/actions/list-connected-agents.d.ts.map +1 -0
  132. package/dist/actions/list-connected-agents.js +79 -0
  133. package/dist/actions/list-connected-agents.js.map +1 -0
  134. package/dist/actions/list-destinations.d.ts +15 -0
  135. package/dist/actions/list-destinations.d.ts.map +1 -0
  136. package/dist/actions/list-destinations.js +10 -0
  137. package/dist/actions/list-destinations.js.map +1 -0
  138. package/dist/actions/list-dispatch-approvals.d.ts +20 -0
  139. package/dist/actions/list-dispatch-approvals.d.ts.map +1 -0
  140. package/dist/actions/list-dispatch-approvals.js +10 -0
  141. package/dist/actions/list-dispatch-approvals.js.map +1 -0
  142. package/dist/actions/list-dispatch-audit.d.ts +16 -0
  143. package/dist/actions/list-dispatch-audit.d.ts.map +1 -0
  144. package/dist/actions/list-dispatch-audit.js +12 -0
  145. package/dist/actions/list-dispatch-audit.js.map +1 -0
  146. package/dist/actions/list-dispatch-overview.d.ts +61 -0
  147. package/dist/actions/list-dispatch-overview.d.ts.map +1 -0
  148. package/dist/actions/list-dispatch-overview.js +17 -0
  149. package/dist/actions/list-dispatch-overview.js.map +1 -0
  150. package/dist/actions/list-dispatch-usage-metrics.d.ts +5 -0
  151. package/dist/actions/list-dispatch-usage-metrics.d.ts.map +1 -0
  152. package/dist/actions/list-dispatch-usage-metrics.js +18 -0
  153. package/dist/actions/list-dispatch-usage-metrics.js.map +1 -0
  154. package/dist/actions/list-dream-candidates.d.ts +24 -0
  155. package/dist/actions/list-dream-candidates.d.ts.map +1 -0
  156. package/dist/actions/list-dream-candidates.js +68 -0
  157. package/dist/actions/list-dream-candidates.js.map +1 -0
  158. package/dist/actions/list-dreams.d.ts +29 -0
  159. package/dist/actions/list-dreams.d.ts.map +1 -0
  160. package/dist/actions/list-dreams.js +17 -0
  161. package/dist/actions/list-dreams.js.map +1 -0
  162. package/dist/actions/list-integrations-catalog.d.ts +3 -0
  163. package/dist/actions/list-integrations-catalog.d.ts.map +1 -0
  164. package/dist/actions/list-integrations-catalog.js +10 -0
  165. package/dist/actions/list-integrations-catalog.js.map +1 -0
  166. package/dist/actions/list-linked-identities.d.ts +29 -0
  167. package/dist/actions/list-linked-identities.d.ts.map +1 -0
  168. package/dist/actions/list-linked-identities.js +10 -0
  169. package/dist/actions/list-linked-identities.js.map +1 -0
  170. package/dist/actions/list-mcp-app-access.d.ts +14 -0
  171. package/dist/actions/list-mcp-app-access.d.ts.map +1 -0
  172. package/dist/actions/list-mcp-app-access.js +25 -0
  173. package/dist/actions/list-mcp-app-access.js.map +1 -0
  174. package/dist/actions/list-staged-datasets.d.ts +13 -0
  175. package/dist/actions/list-staged-datasets.d.ts.map +1 -0
  176. package/dist/actions/list-staged-datasets.js +33 -0
  177. package/dist/actions/list-staged-datasets.js.map +1 -0
  178. package/dist/actions/list-vault-audit.d.ts +16 -0
  179. package/dist/actions/list-vault-audit.d.ts.map +1 -0
  180. package/dist/actions/list-vault-audit.js +15 -0
  181. package/dist/actions/list-vault-audit.js.map +1 -0
  182. package/dist/actions/list-vault-grants.d.ts +17 -0
  183. package/dist/actions/list-vault-grants.d.ts.map +1 -0
  184. package/dist/actions/list-vault-grants.js +13 -0
  185. package/dist/actions/list-vault-grants.js.map +1 -0
  186. package/dist/actions/list-vault-requests.d.ts +18 -0
  187. package/dist/actions/list-vault-requests.d.ts.map +1 -0
  188. package/dist/actions/list-vault-requests.js +15 -0
  189. package/dist/actions/list-vault-requests.js.map +1 -0
  190. package/dist/actions/list-vault-secret-options.d.ts +9 -0
  191. package/dist/actions/list-vault-secret-options.d.ts.map +1 -0
  192. package/dist/actions/list-vault-secret-options.js +19 -0
  193. package/dist/actions/list-vault-secret-options.js.map +1 -0
  194. package/dist/actions/list-vault-secrets.d.ts +13 -0
  195. package/dist/actions/list-vault-secrets.d.ts.map +1 -0
  196. package/dist/actions/list-vault-secrets.js +25 -0
  197. package/dist/actions/list-vault-secrets.js.map +1 -0
  198. package/dist/actions/list-workspace-apps.d.ts +6 -0
  199. package/dist/actions/list-workspace-apps.d.ts.map +1 -0
  200. package/dist/actions/list-workspace-apps.js +28 -0
  201. package/dist/actions/list-workspace-apps.js.map +1 -0
  202. package/dist/actions/list-workspace-resource-grants.d.ts +16 -0
  203. package/dist/actions/list-workspace-resource-grants.d.ts.map +1 -0
  204. package/dist/actions/list-workspace-resource-grants.js +13 -0
  205. package/dist/actions/list-workspace-resource-grants.js.map +1 -0
  206. package/dist/actions/list-workspace-resource-options.d.ts +5 -0
  207. package/dist/actions/list-workspace-resource-options.d.ts.map +1 -0
  208. package/dist/actions/list-workspace-resource-options.js +15 -0
  209. package/dist/actions/list-workspace-resource-options.js.map +1 -0
  210. package/dist/actions/list-workspace-resources-for-app.d.ts +15 -0
  211. package/dist/actions/list-workspace-resources-for-app.d.ts.map +1 -0
  212. package/dist/actions/list-workspace-resources-for-app.js +12 -0
  213. package/dist/actions/list-workspace-resources-for-app.js.map +1 -0
  214. package/dist/actions/list-workspace-resources.d.ts +18 -0
  215. package/dist/actions/list-workspace-resources.d.ts.map +1 -0
  216. package/dist/actions/list-workspace-resources.js +15 -0
  217. package/dist/actions/list-workspace-resources.js.map +1 -0
  218. package/dist/actions/list_apps.d.ts +14 -0
  219. package/dist/actions/list_apps.d.ts.map +1 -0
  220. package/dist/actions/list_apps.js +26 -0
  221. package/dist/actions/list_apps.js.map +1 -0
  222. package/dist/actions/navigate.d.ts +23 -0
  223. package/dist/actions/navigate.d.ts.map +1 -0
  224. package/dist/actions/navigate.js +53 -0
  225. package/dist/actions/navigate.js.map +1 -0
  226. package/dist/actions/open_app.d.ts +20 -0
  227. package/dist/actions/open_app.d.ts.map +1 -0
  228. package/dist/actions/open_app.js +123 -0
  229. package/dist/actions/open_app.js.map +1 -0
  230. package/dist/actions/preview-dream-proposal.d.ts +43 -0
  231. package/dist/actions/preview-dream-proposal.d.ts.map +1 -0
  232. package/dist/actions/preview-dream-proposal.js +13 -0
  233. package/dist/actions/preview-dream-proposal.js.map +1 -0
  234. package/dist/actions/preview-workspace-resource-change.d.ts +8 -0
  235. package/dist/actions/preview-workspace-resource-change.d.ts.map +1 -0
  236. package/dist/actions/preview-workspace-resource-change.js +24 -0
  237. package/dist/actions/preview-workspace-resource-change.js.map +1 -0
  238. package/dist/actions/provider-api-catalog.d.ts +24 -0
  239. package/dist/actions/provider-api-catalog.d.ts.map +1 -0
  240. package/dist/actions/provider-api-catalog.js +22 -0
  241. package/dist/actions/provider-api-catalog.js.map +1 -0
  242. package/dist/actions/provider-api-docs.d.ts +22 -0
  243. package/dist/actions/provider-api-docs.d.ts.map +1 -0
  244. package/dist/actions/provider-api-docs.js +57 -0
  245. package/dist/actions/provider-api-docs.js.map +1 -0
  246. package/dist/actions/provider-api-register.d.ts +85 -0
  247. package/dist/actions/provider-api-register.d.ts.map +1 -0
  248. package/dist/actions/provider-api-register.js +160 -0
  249. package/dist/actions/provider-api-register.js.map +1 -0
  250. package/dist/actions/provider-api-request.d.ts +35 -0
  251. package/dist/actions/provider-api-request.d.ts.map +1 -0
  252. package/dist/actions/provider-api-request.js +168 -0
  253. package/dist/actions/provider-api-request.js.map +1 -0
  254. package/dist/actions/query-staged-dataset.d.ts +28 -0
  255. package/dist/actions/query-staged-dataset.d.ts.map +1 -0
  256. package/dist/actions/query-staged-dataset.js +105 -0
  257. package/dist/actions/query-staged-dataset.js.map +1 -0
  258. package/dist/actions/reject-dispatch-change.d.ts +23 -0
  259. package/dist/actions/reject-dispatch-change.d.ts.map +1 -0
  260. package/dist/actions/reject-dispatch-change.js +12 -0
  261. package/dist/actions/reject-dispatch-change.js.map +1 -0
  262. package/dist/actions/reject-dream-proposal.d.ts +27 -0
  263. package/dist/actions/reject-dream-proposal.d.ts.map +1 -0
  264. package/dist/actions/reject-dream-proposal.js +12 -0
  265. package/dist/actions/reject-dream-proposal.js.map +1 -0
  266. package/dist/actions/remove-pending-workspace-app.d.ts +7 -0
  267. package/dist/actions/remove-pending-workspace-app.d.ts.map +1 -0
  268. package/dist/actions/remove-pending-workspace-app.js +15 -0
  269. package/dist/actions/remove-pending-workspace-app.js.map +1 -0
  270. package/dist/actions/request-vault-secret.d.ts +20 -0
  271. package/dist/actions/request-vault-secret.d.ts.map +1 -0
  272. package/dist/actions/request-vault-secret.js +15 -0
  273. package/dist/actions/request-vault-secret.js.map +1 -0
  274. package/dist/actions/restore-starter-workspace-resources.d.ts +9 -0
  275. package/dist/actions/restore-starter-workspace-resources.d.ts.map +1 -0
  276. package/dist/actions/restore-starter-workspace-resources.js +14 -0
  277. package/dist/actions/restore-starter-workspace-resources.js.map +1 -0
  278. package/dist/actions/revoke-vault-grant.d.ts +16 -0
  279. package/dist/actions/revoke-vault-grant.d.ts.map +1 -0
  280. package/dist/actions/revoke-vault-grant.js +11 -0
  281. package/dist/actions/revoke-vault-grant.js.map +1 -0
  282. package/dist/actions/revoke-workspace-resource-grant.d.ts +15 -0
  283. package/dist/actions/revoke-workspace-resource-grant.d.ts.map +1 -0
  284. package/dist/actions/revoke-workspace-resource-grant.js +11 -0
  285. package/dist/actions/revoke-workspace-resource-grant.js.map +1 -0
  286. package/dist/actions/scaffold-workspace-app.d.ts +10 -0
  287. package/dist/actions/scaffold-workspace-app.d.ts.map +1 -0
  288. package/dist/actions/scaffold-workspace-app.js +40 -0
  289. package/dist/actions/scaffold-workspace-app.js.map +1 -0
  290. package/dist/actions/search-agent-threads.d.ts +32 -0
  291. package/dist/actions/search-agent-threads.d.ts.map +1 -0
  292. package/dist/actions/search-agent-threads.js +25 -0
  293. package/dist/actions/search-agent-threads.js.map +1 -0
  294. package/dist/actions/send-code-agent-remote-command.d.ts +34 -0
  295. package/dist/actions/send-code-agent-remote-command.d.ts.map +1 -0
  296. package/dist/actions/send-code-agent-remote-command.js +53 -0
  297. package/dist/actions/send-code-agent-remote-command.js.map +1 -0
  298. package/dist/actions/send-platform-message.d.ts +14 -0
  299. package/dist/actions/send-platform-message.d.ts.map +1 -0
  300. package/dist/actions/send-platform-message.js +73 -0
  301. package/dist/actions/send-platform-message.js.map +1 -0
  302. package/dist/actions/set-app-creation-settings.d.ts +5 -0
  303. package/dist/actions/set-app-creation-settings.d.ts.map +1 -0
  304. package/dist/actions/set-app-creation-settings.js +18 -0
  305. package/dist/actions/set-app-creation-settings.js.map +1 -0
  306. package/dist/actions/set-dispatch-approval-policy.d.ts +23 -0
  307. package/dist/actions/set-dispatch-approval-policy.d.ts.map +1 -0
  308. package/dist/actions/set-dispatch-approval-policy.js +19 -0
  309. package/dist/actions/set-dispatch-approval-policy.js.map +1 -0
  310. package/dist/actions/set-dream-settings.d.ts +17 -0
  311. package/dist/actions/set-dream-settings.d.ts.map +1 -0
  312. package/dist/actions/set-dream-settings.js +41 -0
  313. package/dist/actions/set-dream-settings.js.map +1 -0
  314. package/dist/actions/set-mcp-app-access.d.ts +17 -0
  315. package/dist/actions/set-mcp-app-access.d.ts.map +1 -0
  316. package/dist/actions/set-mcp-app-access.js +46 -0
  317. package/dist/actions/set-mcp-app-access.js.map +1 -0
  318. package/dist/actions/set-vault-access-settings.d.ts +5 -0
  319. package/dist/actions/set-vault-access-settings.d.ts.map +1 -0
  320. package/dist/actions/set-vault-access-settings.js +13 -0
  321. package/dist/actions/set-vault-access-settings.js.map +1 -0
  322. package/dist/actions/start-workspace-app-creation.d.ts +54 -0
  323. package/dist/actions/start-workspace-app-creation.d.ts.map +1 -0
  324. package/dist/actions/start-workspace-app-creation.js +42 -0
  325. package/dist/actions/start-workspace-app-creation.js.map +1 -0
  326. package/dist/actions/sync-vault-to-app.d.ts +32 -0
  327. package/dist/actions/sync-vault-to-app.d.ts.map +1 -0
  328. package/dist/actions/sync-vault-to-app.js +13 -0
  329. package/dist/actions/sync-vault-to-app.js.map +1 -0
  330. package/dist/actions/unarchive-workspace-app.d.ts +7 -0
  331. package/dist/actions/unarchive-workspace-app.d.ts.map +1 -0
  332. package/dist/actions/unarchive-workspace-app.js +15 -0
  333. package/dist/actions/unarchive-workspace-app.js.map +1 -0
  334. package/dist/actions/update-vault-secret.d.ts +22 -0
  335. package/dist/actions/update-vault-secret.d.ts.map +1 -0
  336. package/dist/actions/update-vault-secret.js +43 -0
  337. package/dist/actions/update-vault-secret.js.map +1 -0
  338. package/dist/actions/update-workspace-app-metadata.d.ts +7 -0
  339. package/dist/actions/update-workspace-app-metadata.d.ts.map +1 -0
  340. package/dist/actions/update-workspace-app-metadata.js +30 -0
  341. package/dist/actions/update-workspace-app-metadata.js.map +1 -0
  342. package/dist/actions/update-workspace-resource.d.ts +39 -0
  343. package/dist/actions/update-workspace-resource.d.ts.map +1 -0
  344. package/dist/actions/update-workspace-resource.js +18 -0
  345. package/dist/actions/update-workspace-resource.js.map +1 -0
  346. package/dist/actions/upsert-destination.d.ts +39 -0
  347. package/dist/actions/upsert-destination.d.ts.map +1 -0
  348. package/dist/actions/upsert-destination.js +26 -0
  349. package/dist/actions/upsert-destination.js.map +1 -0
  350. package/dist/actions/view-screen.d.ts +11 -0
  351. package/dist/actions/view-screen.d.ts.map +1 -0
  352. package/dist/actions/view-screen.js +217 -0
  353. package/dist/actions/view-screen.js.map +1 -0
  354. package/dist/components/agents-panel.d.ts +16 -0
  355. package/dist/components/agents-panel.d.ts.map +1 -0
  356. package/dist/components/agents-panel.js +128 -0
  357. package/dist/components/agents-panel.js.map +1 -0
  358. package/dist/components/app-keys-popover.d.ts +11 -0
  359. package/dist/components/app-keys-popover.d.ts.map +1 -0
  360. package/dist/components/app-keys-popover.js +96 -0
  361. package/dist/components/app-keys-popover.js.map +1 -0
  362. package/dist/components/approval-value-block.d.ts +7 -0
  363. package/dist/components/approval-value-block.d.ts.map +1 -0
  364. package/dist/components/approval-value-block.js +22 -0
  365. package/dist/components/approval-value-block.js.map +1 -0
  366. package/dist/components/create-app-popover.d.ts +24 -0
  367. package/dist/components/create-app-popover.d.ts.map +1 -0
  368. package/dist/components/create-app-popover.js +268 -0
  369. package/dist/components/create-app-popover.js.map +1 -0
  370. package/dist/components/dispatch-control-plane.d.ts +2 -0
  371. package/dist/components/dispatch-control-plane.d.ts.map +1 -0
  372. package/dist/components/dispatch-control-plane.js +63 -0
  373. package/dist/components/dispatch-control-plane.js.map +1 -0
  374. package/dist/components/dispatch-shell.d.ts +13 -0
  375. package/dist/components/dispatch-shell.d.ts.map +1 -0
  376. package/dist/components/dispatch-shell.js +17 -0
  377. package/dist/components/dispatch-shell.js.map +1 -0
  378. package/dist/components/index.d.ts +13 -0
  379. package/dist/components/index.d.ts.map +1 -0
  380. package/dist/components/index.js +12 -0
  381. package/dist/components/index.js.map +1 -0
  382. package/dist/components/layout/Header.d.ts +5 -0
  383. package/dist/components/layout/Header.d.ts.map +1 -0
  384. package/dist/components/layout/Header.js +52 -0
  385. package/dist/components/layout/Header.js.map +1 -0
  386. package/dist/components/layout/HeaderActions.d.ts +18 -0
  387. package/dist/components/layout/HeaderActions.d.ts.map +1 -0
  388. package/dist/components/layout/HeaderActions.js +52 -0
  389. package/dist/components/layout/HeaderActions.js.map +1 -0
  390. package/dist/components/layout/Layout.d.ts +36 -0
  391. package/dist/components/layout/Layout.d.ts.map +1 -0
  392. package/dist/components/layout/Layout.js +476 -0
  393. package/dist/components/layout/Layout.js.map +1 -0
  394. package/dist/components/messaging-setup-panel.d.ts +2 -0
  395. package/dist/components/messaging-setup-panel.d.ts.map +1 -0
  396. package/dist/components/messaging-setup-panel.js +299 -0
  397. package/dist/components/messaging-setup-panel.js.map +1 -0
  398. package/dist/components/task-queue-health.d.ts +2 -0
  399. package/dist/components/task-queue-health.d.ts.map +1 -0
  400. package/dist/components/task-queue-health.js +49 -0
  401. package/dist/components/task-queue-health.js.map +1 -0
  402. package/dist/components/ui/accordion.d.ts +8 -0
  403. package/dist/components/ui/accordion.d.ts.map +1 -0
  404. package/dist/components/ui/accordion.js +14 -0
  405. package/dist/components/ui/accordion.js.map +1 -0
  406. package/dist/components/ui/alert-dialog.d.ts +21 -0
  407. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  408. package/dist/components/ui/alert-dialog.js +27 -0
  409. package/dist/components/ui/alert-dialog.js.map +1 -0
  410. package/dist/components/ui/alert.d.ts +9 -0
  411. package/dist/components/ui/alert.d.ts.map +1 -0
  412. package/dist/components/ui/alert.js +23 -0
  413. package/dist/components/ui/alert.js.map +1 -0
  414. package/dist/components/ui/aspect-ratio.d.ts +4 -0
  415. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  416. package/dist/components/ui/aspect-ratio.js +4 -0
  417. package/dist/components/ui/aspect-ratio.js.map +1 -0
  418. package/dist/components/ui/avatar.d.ts +7 -0
  419. package/dist/components/ui/avatar.d.ts.map +1 -0
  420. package/dist/components/ui/avatar.js +12 -0
  421. package/dist/components/ui/avatar.js.map +1 -0
  422. package/dist/components/ui/badge.d.ts +10 -0
  423. package/dist/components/ui/badge.d.ts.map +1 -0
  424. package/dist/components/ui/badge.js +21 -0
  425. package/dist/components/ui/badge.js.map +1 -0
  426. package/dist/components/ui/breadcrumb.d.ts +20 -0
  427. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  428. package/dist/components/ui/breadcrumb.js +24 -0
  429. package/dist/components/ui/breadcrumb.js.map +1 -0
  430. package/dist/components/ui/button.d.ts +12 -0
  431. package/dist/components/ui/button.d.ts.map +1 -0
  432. package/dist/components/ui/button.js +34 -0
  433. package/dist/components/ui/button.js.map +1 -0
  434. package/dist/components/ui/calendar.d.ts +9 -0
  435. package/dist/components/ui/calendar.d.ts.map +1 -0
  436. package/dist/components/ui/calendar.js +41 -0
  437. package/dist/components/ui/calendar.js.map +1 -0
  438. package/dist/components/ui/card.d.ts +9 -0
  439. package/dist/components/ui/card.d.ts.map +1 -0
  440. package/dist/components/ui/card.js +17 -0
  441. package/dist/components/ui/card.js.map +1 -0
  442. package/dist/components/ui/carousel.d.ts +19 -0
  443. package/dist/components/ui/carousel.d.ts.map +1 -0
  444. package/dist/components/ui/carousel.js +99 -0
  445. package/dist/components/ui/carousel.js.map +1 -0
  446. package/dist/components/ui/chart.d.ts +80 -0
  447. package/dist/components/ui/chart.d.ts.map +1 -0
  448. package/dist/components/ui/chart.js +131 -0
  449. package/dist/components/ui/chart.js.map +1 -0
  450. package/dist/components/ui/checkbox.d.ts +5 -0
  451. package/dist/components/ui/checkbox.d.ts.map +1 -0
  452. package/dist/components/ui/checkbox.js +9 -0
  453. package/dist/components/ui/checkbox.js.map +1 -0
  454. package/dist/components/ui/collapsible.d.ts +6 -0
  455. package/dist/components/ui/collapsible.d.ts.map +1 -0
  456. package/dist/components/ui/collapsible.js +6 -0
  457. package/dist/components/ui/collapsible.js.map +1 -0
  458. package/dist/components/ui/command.d.ts +83 -0
  459. package/dist/components/ui/command.d.ts.map +1 -0
  460. package/dist/components/ui/command.js +29 -0
  461. package/dist/components/ui/command.js.map +1 -0
  462. package/dist/components/ui/context-menu.d.ts +28 -0
  463. package/dist/components/ui/context-menu.d.ts.map +1 -0
  464. package/dist/components/ui/context-menu.js +34 -0
  465. package/dist/components/ui/context-menu.js.map +1 -0
  466. package/dist/components/ui/dialog.d.ts +20 -0
  467. package/dist/components/ui/dialog.d.ts.map +1 -0
  468. package/dist/components/ui/dialog.js +23 -0
  469. package/dist/components/ui/dialog.js.map +1 -0
  470. package/dist/components/ui/drawer.d.ts +23 -0
  471. package/dist/components/ui/drawer.d.ts.map +1 -0
  472. package/dist/components/ui/drawer.js +23 -0
  473. package/dist/components/ui/drawer.js.map +1 -0
  474. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  475. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  476. package/dist/components/ui/dropdown-menu.js +36 -0
  477. package/dist/components/ui/dropdown-menu.js.map +1 -0
  478. package/dist/components/ui/form.d.ts +26 -0
  479. package/dist/components/ui/form.d.ts.map +1 -0
  480. package/dist/components/ui/form.js +63 -0
  481. package/dist/components/ui/form.js.map +1 -0
  482. package/dist/components/ui/hover-card.d.ts +7 -0
  483. package/dist/components/ui/hover-card.d.ts.map +1 -0
  484. package/dist/components/ui/hover-card.js +10 -0
  485. package/dist/components/ui/hover-card.js.map +1 -0
  486. package/dist/components/ui/input-otp.d.ts +35 -0
  487. package/dist/components/ui/input-otp.d.ts.map +1 -0
  488. package/dist/components/ui/input-otp.js +19 -0
  489. package/dist/components/ui/input-otp.js.map +1 -0
  490. package/dist/components/ui/input.d.ts +4 -0
  491. package/dist/components/ui/input.d.ts.map +1 -0
  492. package/dist/components/ui/input.js +9 -0
  493. package/dist/components/ui/input.js.map +1 -0
  494. package/dist/components/ui/label.d.ts +6 -0
  495. package/dist/components/ui/label.d.ts.map +1 -0
  496. package/dist/components/ui/label.js +10 -0
  497. package/dist/components/ui/label.js.map +1 -0
  498. package/dist/components/ui/menubar.d.ts +29 -0
  499. package/dist/components/ui/menubar.d.ts.map +1 -0
  500. package/dist/components/ui/menubar.js +41 -0
  501. package/dist/components/ui/menubar.js.map +1 -0
  502. package/dist/components/ui/navigation-menu.d.ts +13 -0
  503. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  504. package/dist/components/ui/navigation-menu.js +25 -0
  505. package/dist/components/ui/navigation-menu.js.map +1 -0
  506. package/dist/components/ui/pagination.d.ts +29 -0
  507. package/dist/components/ui/pagination.d.ts.map +1 -0
  508. package/dist/components/ui/pagination.js +24 -0
  509. package/dist/components/ui/pagination.js.map +1 -0
  510. package/dist/components/ui/popover.d.ts +7 -0
  511. package/dist/components/ui/popover.d.ts.map +1 -0
  512. package/dist/components/ui/popover.js +10 -0
  513. package/dist/components/ui/popover.js.map +1 -0
  514. package/dist/components/ui/progress.d.ts +5 -0
  515. package/dist/components/ui/progress.d.ts.map +1 -0
  516. package/dist/components/ui/progress.js +8 -0
  517. package/dist/components/ui/progress.js.map +1 -0
  518. package/dist/components/ui/radio-group.d.ts +6 -0
  519. package/dist/components/ui/radio-group.d.ts.map +1 -0
  520. package/dist/components/ui/radio-group.js +15 -0
  521. package/dist/components/ui/radio-group.js.map +1 -0
  522. package/dist/components/ui/resizable.d.ts +8 -0
  523. package/dist/components/ui/resizable.d.ts.map +1 -0
  524. package/dist/components/ui/resizable.js +9 -0
  525. package/dist/components/ui/resizable.js.map +1 -0
  526. package/dist/components/ui/scroll-area.d.ts +6 -0
  527. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  528. package/dist/components/ui/scroll-area.js +12 -0
  529. package/dist/components/ui/scroll-area.js.map +1 -0
  530. package/dist/components/ui/select.d.ts +14 -0
  531. package/dist/components/ui/select.d.ts.map +1 -0
  532. package/dist/components/ui/select.js +27 -0
  533. package/dist/components/ui/select.js.map +1 -0
  534. package/dist/components/ui/separator.d.ts +5 -0
  535. package/dist/components/ui/separator.d.ts.map +1 -0
  536. package/dist/components/ui/separator.js +8 -0
  537. package/dist/components/ui/separator.js.map +1 -0
  538. package/dist/components/ui/sheet.d.ts +26 -0
  539. package/dist/components/ui/sheet.d.ts.map +1 -0
  540. package/dist/components/ui/sheet.js +37 -0
  541. package/dist/components/ui/sheet.js.map +1 -0
  542. package/dist/components/ui/sidebar.d.ts +67 -0
  543. package/dist/components/ui/sidebar.d.ts.map +1 -0
  544. package/dist/components/ui/sidebar.js +233 -0
  545. package/dist/components/ui/sidebar.js.map +1 -0
  546. package/dist/components/ui/skeleton.d.ts +3 -0
  547. package/dist/components/ui/skeleton.d.ts.map +1 -0
  548. package/dist/components/ui/skeleton.js +7 -0
  549. package/dist/components/ui/skeleton.js.map +1 -0
  550. package/dist/components/ui/slider.d.ts +5 -0
  551. package/dist/components/ui/slider.d.ts.map +1 -0
  552. package/dist/components/ui/slider.js +8 -0
  553. package/dist/components/ui/slider.js.map +1 -0
  554. package/dist/components/ui/sonner.d.ts +5 -0
  555. package/dist/components/ui/sonner.d.ts.map +1 -0
  556. package/dist/components/ui/sonner.js +25 -0
  557. package/dist/components/ui/sonner.js.map +1 -0
  558. package/dist/components/ui/spinner.d.ts +3 -0
  559. package/dist/components/ui/spinner.d.ts.map +1 -0
  560. package/dist/components/ui/spinner.js +7 -0
  561. package/dist/components/ui/spinner.js.map +1 -0
  562. package/dist/components/ui/switch.d.ts +5 -0
  563. package/dist/components/ui/switch.d.ts.map +1 -0
  564. package/dist/components/ui/switch.js +8 -0
  565. package/dist/components/ui/switch.js.map +1 -0
  566. package/dist/components/ui/table.d.ts +11 -0
  567. package/dist/components/ui/table.d.ts.map +1 -0
  568. package/dist/components/ui/table.js +21 -0
  569. package/dist/components/ui/table.js.map +1 -0
  570. package/dist/components/ui/tabs.d.ts +8 -0
  571. package/dist/components/ui/tabs.d.ts.map +1 -0
  572. package/dist/components/ui/tabs.js +13 -0
  573. package/dist/components/ui/tabs.js.map +1 -0
  574. package/dist/components/ui/textarea.d.ts +6 -0
  575. package/dist/components/ui/textarea.d.ts.map +1 -0
  576. package/dist/components/ui/textarea.js +9 -0
  577. package/dist/components/ui/textarea.js.map +1 -0
  578. package/dist/components/ui/toast.d.ts +16 -0
  579. package/dist/components/ui/toast.d.ts.map +1 -0
  580. package/dist/components/ui/toast.js +34 -0
  581. package/dist/components/ui/toast.js.map +1 -0
  582. package/dist/components/ui/toaster.d.ts +2 -0
  583. package/dist/components/ui/toaster.d.ts.map +1 -0
  584. package/dist/components/ui/toaster.js +10 -0
  585. package/dist/components/ui/toaster.js.map +1 -0
  586. package/dist/components/ui/toggle-group.d.ts +13 -0
  587. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  588. package/dist/components/ui/toggle-group.js +21 -0
  589. package/dist/components/ui/toggle-group.js.map +1 -0
  590. package/dist/components/ui/toggle.d.ts +13 -0
  591. package/dist/components/ui/toggle.d.ts.map +1 -0
  592. package/dist/components/ui/toggle.js +26 -0
  593. package/dist/components/ui/toggle.js.map +1 -0
  594. package/dist/components/ui/tooltip.d.ts +8 -0
  595. package/dist/components/ui/tooltip.d.ts.map +1 -0
  596. package/dist/components/ui/tooltip.js +11 -0
  597. package/dist/components/ui/tooltip.js.map +1 -0
  598. package/dist/components/ui/use-toast.d.ts +3 -0
  599. package/dist/components/ui/use-toast.d.ts.map +1 -0
  600. package/dist/components/ui/use-toast.js +3 -0
  601. package/dist/components/ui/use-toast.js.map +1 -0
  602. package/dist/components/workspace-app-card.d.ts +6 -0
  603. package/dist/components/workspace-app-card.d.ts.map +1 -0
  604. package/dist/components/workspace-app-card.js +105 -0
  605. package/dist/components/workspace-app-card.js.map +1 -0
  606. package/dist/components/workspace-resource-effective-stack.d.ts +11 -0
  607. package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -0
  608. package/dist/components/workspace-resource-effective-stack.js +59 -0
  609. package/dist/components/workspace-resource-effective-stack.js.map +1 -0
  610. package/dist/components/workspace-resource-impact-preview.d.ts +9 -0
  611. package/dist/components/workspace-resource-impact-preview.d.ts.map +1 -0
  612. package/dist/components/workspace-resource-impact-preview.js +39 -0
  613. package/dist/components/workspace-resource-impact-preview.js.map +1 -0
  614. package/dist/config.d.ts +33 -0
  615. package/dist/config.d.ts.map +1 -0
  616. package/dist/config.js +7 -0
  617. package/dist/config.js.map +1 -0
  618. package/dist/db/index.d.ts +7 -0
  619. package/dist/db/index.d.ts.map +1 -0
  620. package/dist/db/index.js +10 -0
  621. package/dist/db/index.js.map +1 -0
  622. package/dist/db/migrations.d.ts +5 -0
  623. package/dist/db/migrations.d.ts.map +1 -0
  624. package/dist/db/migrations.js +225 -0
  625. package/dist/db/migrations.js.map +1 -0
  626. package/dist/db/schema.d.ts +3058 -0
  627. package/dist/db/schema.d.ts.map +1 -0
  628. package/dist/db/schema.js +190 -0
  629. package/dist/db/schema.js.map +1 -0
  630. package/dist/hooks/use-mobile.d.ts +2 -0
  631. package/dist/hooks/use-mobile.d.ts.map +1 -0
  632. package/dist/hooks/use-mobile.js +16 -0
  633. package/dist/hooks/use-mobile.js.map +1 -0
  634. package/dist/hooks/use-navigation-state.d.ts +14 -0
  635. package/dist/hooks/use-navigation-state.d.ts.map +1 -0
  636. package/dist/hooks/use-navigation-state.js +257 -0
  637. package/dist/hooks/use-navigation-state.js.map +1 -0
  638. package/dist/hooks/use-toast.d.ts +45 -0
  639. package/dist/hooks/use-toast.d.ts.map +1 -0
  640. package/dist/hooks/use-toast.js +127 -0
  641. package/dist/hooks/use-toast.js.map +1 -0
  642. package/dist/index.d.ts +15 -0
  643. package/dist/index.d.ts.map +1 -0
  644. package/dist/index.js +15 -0
  645. package/dist/index.js.map +1 -0
  646. package/dist/lib/automation-display.d.ts +13 -0
  647. package/dist/lib/automation-display.d.ts.map +1 -0
  648. package/dist/lib/automation-display.js +62 -0
  649. package/dist/lib/automation-display.js.map +1 -0
  650. package/dist/lib/automations.d.ts +28 -0
  651. package/dist/lib/automations.d.ts.map +1 -0
  652. package/dist/lib/automations.js +27 -0
  653. package/dist/lib/automations.js.map +1 -0
  654. package/dist/lib/catch-all-target.d.ts +17 -0
  655. package/dist/lib/catch-all-target.d.ts.map +1 -0
  656. package/dist/lib/catch-all-target.js +103 -0
  657. package/dist/lib/catch-all-target.js.map +1 -0
  658. package/dist/lib/overview-chat.d.ts +4 -0
  659. package/dist/lib/overview-chat.d.ts.map +1 -0
  660. package/dist/lib/overview-chat.js +21 -0
  661. package/dist/lib/overview-chat.js.map +1 -0
  662. package/dist/lib/task-queue.d.ts +19 -0
  663. package/dist/lib/task-queue.d.ts.map +1 -0
  664. package/dist/lib/task-queue.js +54 -0
  665. package/dist/lib/task-queue.js.map +1 -0
  666. package/dist/lib/thread-link-preview.d.ts +23 -0
  667. package/dist/lib/thread-link-preview.d.ts.map +1 -0
  668. package/dist/lib/thread-link-preview.js +150 -0
  669. package/dist/lib/thread-link-preview.js.map +1 -0
  670. package/dist/lib/utils.d.ts +3 -0
  671. package/dist/lib/utils.d.ts.map +1 -0
  672. package/dist/lib/utils.js +6 -0
  673. package/dist/lib/utils.js.map +1 -0
  674. package/dist/lib/workspace-apps.d.ts +25 -0
  675. package/dist/lib/workspace-apps.d.ts.map +1 -0
  676. package/dist/lib/workspace-apps.js +9 -0
  677. package/dist/lib/workspace-apps.js.map +1 -0
  678. package/dist/routes/index.d.ts +32 -0
  679. package/dist/routes/index.d.ts.map +1 -0
  680. package/dist/routes/index.js +64 -0
  681. package/dist/routes/index.js.map +1 -0
  682. package/dist/routes/pages/$appId.d.ts +8 -0
  683. package/dist/routes/pages/$appId.d.ts.map +1 -0
  684. package/dist/routes/pages/$appId.js +103 -0
  685. package/dist/routes/pages/$appId.js.map +1 -0
  686. package/dist/routes/pages/_index.d.ts +22 -0
  687. package/dist/routes/pages/_index.d.ts.map +1 -0
  688. package/dist/routes/pages/_index.js +48 -0
  689. package/dist/routes/pages/_index.js.map +1 -0
  690. package/dist/routes/pages/agents.d.ts +5 -0
  691. package/dist/routes/pages/agents.d.ts.map +1 -0
  692. package/dist/routes/pages/agents.js +89 -0
  693. package/dist/routes/pages/agents.js.map +1 -0
  694. package/dist/routes/pages/approval.d.ts +5 -0
  695. package/dist/routes/pages/approval.d.ts.map +1 -0
  696. package/dist/routes/pages/approval.js +51 -0
  697. package/dist/routes/pages/approval.js.map +1 -0
  698. package/dist/routes/pages/approvals.d.ts +5 -0
  699. package/dist/routes/pages/approvals.d.ts.map +1 -0
  700. package/dist/routes/pages/approvals.js +48 -0
  701. package/dist/routes/pages/approvals.js.map +1 -0
  702. package/dist/routes/pages/apps.$appId.d.ts +5 -0
  703. package/dist/routes/pages/apps.$appId.d.ts.map +1 -0
  704. package/dist/routes/pages/apps.$appId.js +29 -0
  705. package/dist/routes/pages/apps.$appId.js.map +1 -0
  706. package/dist/routes/pages/apps.d.ts +5 -0
  707. package/dist/routes/pages/apps.d.ts.map +1 -0
  708. package/dist/routes/pages/apps.js +90 -0
  709. package/dist/routes/pages/apps.js.map +1 -0
  710. package/dist/routes/pages/audit.d.ts +5 -0
  711. package/dist/routes/pages/audit.d.ts.map +1 -0
  712. package/dist/routes/pages/audit.js +11 -0
  713. package/dist/routes/pages/audit.js.map +1 -0
  714. package/dist/routes/pages/automations.d.ts +5 -0
  715. package/dist/routes/pages/automations.d.ts.map +1 -0
  716. package/dist/routes/pages/automations.js +106 -0
  717. package/dist/routes/pages/automations.js.map +1 -0
  718. package/dist/routes/pages/chat.d.ts +5 -0
  719. package/dist/routes/pages/chat.d.ts.map +1 -0
  720. package/dist/routes/pages/chat.js +115 -0
  721. package/dist/routes/pages/chat.js.map +1 -0
  722. package/dist/routes/pages/destinations.d.ts +5 -0
  723. package/dist/routes/pages/destinations.d.ts.map +1 -0
  724. package/dist/routes/pages/destinations.js +90 -0
  725. package/dist/routes/pages/destinations.js.map +1 -0
  726. package/dist/routes/pages/dream-settings.d.ts +34 -0
  727. package/dist/routes/pages/dream-settings.d.ts.map +1 -0
  728. package/dist/routes/pages/dream-settings.js +68 -0
  729. package/dist/routes/pages/dream-settings.js.map +1 -0
  730. package/dist/routes/pages/dreams.d.ts +5 -0
  731. package/dist/routes/pages/dreams.d.ts.map +1 -0
  732. package/dist/routes/pages/dreams.js +436 -0
  733. package/dist/routes/pages/dreams.js.map +1 -0
  734. package/dist/routes/pages/extensions.$id.d.ts +5 -0
  735. package/dist/routes/pages/extensions.$id.d.ts.map +1 -0
  736. package/dist/routes/pages/extensions.$id.js +9 -0
  737. package/dist/routes/pages/extensions.$id.js.map +1 -0
  738. package/dist/routes/pages/extensions._index.d.ts +5 -0
  739. package/dist/routes/pages/extensions._index.d.ts.map +1 -0
  740. package/dist/routes/pages/extensions._index.js +9 -0
  741. package/dist/routes/pages/extensions._index.js.map +1 -0
  742. package/dist/routes/pages/identities.d.ts +5 -0
  743. package/dist/routes/pages/identities.d.ts.map +1 -0
  744. package/dist/routes/pages/identities.js +18 -0
  745. package/dist/routes/pages/identities.js.map +1 -0
  746. package/dist/routes/pages/integrations.d.ts +5 -0
  747. package/dist/routes/pages/integrations.d.ts.map +1 -0
  748. package/dist/routes/pages/integrations.js +152 -0
  749. package/dist/routes/pages/integrations.js.map +1 -0
  750. package/dist/routes/pages/messaging.d.ts +5 -0
  751. package/dist/routes/pages/messaging.d.ts.map +1 -0
  752. package/dist/routes/pages/messaging.js +10 -0
  753. package/dist/routes/pages/messaging.js.map +1 -0
  754. package/dist/routes/pages/metrics.d.ts +5 -0
  755. package/dist/routes/pages/metrics.d.ts.map +1 -0
  756. package/dist/routes/pages/metrics.js +175 -0
  757. package/dist/routes/pages/metrics.js.map +1 -0
  758. package/dist/routes/pages/new-app.d.ts +5 -0
  759. package/dist/routes/pages/new-app.d.ts.map +1 -0
  760. package/dist/routes/pages/new-app.js +11 -0
  761. package/dist/routes/pages/new-app.js.map +1 -0
  762. package/dist/routes/pages/overview.d.ts +18 -0
  763. package/dist/routes/pages/overview.d.ts.map +1 -0
  764. package/dist/routes/pages/overview.js +19 -0
  765. package/dist/routes/pages/overview.js.map +1 -0
  766. package/dist/routes/pages/settings.d.ts +5 -0
  767. package/dist/routes/pages/settings.d.ts.map +1 -0
  768. package/dist/routes/pages/settings.js +18 -0
  769. package/dist/routes/pages/settings.js.map +1 -0
  770. package/dist/routes/pages/team.d.ts +5 -0
  771. package/dist/routes/pages/team.d.ts.map +1 -0
  772. package/dist/routes/pages/team.js +9 -0
  773. package/dist/routes/pages/team.js.map +1 -0
  774. package/dist/routes/pages/thread-debug.d.ts +5 -0
  775. package/dist/routes/pages/thread-debug.d.ts.map +1 -0
  776. package/dist/routes/pages/thread-debug.js +161 -0
  777. package/dist/routes/pages/thread-debug.js.map +1 -0
  778. package/dist/routes/pages/tools.$id.d.ts +5 -0
  779. package/dist/routes/pages/tools.$id.d.ts.map +1 -0
  780. package/dist/routes/pages/tools.$id.js +9 -0
  781. package/dist/routes/pages/tools.$id.js.map +1 -0
  782. package/dist/routes/pages/tools._index.d.ts +5 -0
  783. package/dist/routes/pages/tools._index.d.ts.map +1 -0
  784. package/dist/routes/pages/tools._index.js +9 -0
  785. package/dist/routes/pages/tools._index.js.map +1 -0
  786. package/dist/routes/pages/vault.d.ts +5 -0
  787. package/dist/routes/pages/vault.d.ts.map +1 -0
  788. package/dist/routes/pages/vault.js +194 -0
  789. package/dist/routes/pages/vault.js.map +1 -0
  790. package/dist/routes/pages/workspace.d.ts +5 -0
  791. package/dist/routes/pages/workspace.d.ts.map +1 -0
  792. package/dist/routes/pages/workspace.js +327 -0
  793. package/dist/routes/pages/workspace.js.map +1 -0
  794. package/dist/server/index.d.ts +44 -0
  795. package/dist/server/index.d.ts.map +1 -0
  796. package/dist/server/index.js +68 -0
  797. package/dist/server/index.js.map +1 -0
  798. package/dist/server/lib/app-creation-store.d.ts +156 -0
  799. package/dist/server/lib/app-creation-store.d.ts.map +1 -0
  800. package/dist/server/lib/app-creation-store.js +1507 -0
  801. package/dist/server/lib/app-creation-store.js.map +1 -0
  802. package/dist/server/lib/dispatch-integrations.d.ts +10 -0
  803. package/dist/server/lib/dispatch-integrations.d.ts.map +1 -0
  804. package/dist/server/lib/dispatch-integrations.js +244 -0
  805. package/dist/server/lib/dispatch-integrations.js.map +1 -0
  806. package/dist/server/lib/dispatch-remote-commands.d.ts +83 -0
  807. package/dist/server/lib/dispatch-remote-commands.d.ts.map +1 -0
  808. package/dist/server/lib/dispatch-remote-commands.js +256 -0
  809. package/dist/server/lib/dispatch-remote-commands.js.map +1 -0
  810. package/dist/server/lib/dispatch-store.d.ts +339 -0
  811. package/dist/server/lib/dispatch-store.d.ts.map +1 -0
  812. package/dist/server/lib/dispatch-store.js +685 -0
  813. package/dist/server/lib/dispatch-store.js.map +1 -0
  814. package/dist/server/lib/dreams-store.d.ts +398 -0
  815. package/dist/server/lib/dreams-store.d.ts.map +1 -0
  816. package/dist/server/lib/dreams-store.js +2330 -0
  817. package/dist/server/lib/dreams-store.js.map +1 -0
  818. package/dist/server/lib/env-config.d.ts +3 -0
  819. package/dist/server/lib/env-config.d.ts.map +1 -0
  820. package/dist/server/lib/env-config.js +48 -0
  821. package/dist/server/lib/env-config.js.map +1 -0
  822. package/dist/server/lib/mcp-access-store.d.ts +16 -0
  823. package/dist/server/lib/mcp-access-store.d.ts.map +1 -0
  824. package/dist/server/lib/mcp-access-store.js +64 -0
  825. package/dist/server/lib/mcp-access-store.js.map +1 -0
  826. package/dist/server/lib/mcp-gateway.d.ts +51 -0
  827. package/dist/server/lib/mcp-gateway.d.ts.map +1 -0
  828. package/dist/server/lib/mcp-gateway.js +477 -0
  829. package/dist/server/lib/mcp-gateway.js.map +1 -0
  830. package/dist/server/lib/onboarding-steps.d.ts +12 -0
  831. package/dist/server/lib/onboarding-steps.d.ts.map +1 -0
  832. package/dist/server/lib/onboarding-steps.js +47 -0
  833. package/dist/server/lib/onboarding-steps.js.map +1 -0
  834. package/dist/server/lib/pre-auth-routing.d.ts +2 -0
  835. package/dist/server/lib/pre-auth-routing.d.ts.map +1 -0
  836. package/dist/server/lib/pre-auth-routing.js +136 -0
  837. package/dist/server/lib/pre-auth-routing.js.map +1 -0
  838. package/dist/server/lib/provider-api.d.ts +27 -0
  839. package/dist/server/lib/provider-api.d.ts.map +1 -0
  840. package/dist/server/lib/provider-api.js +49 -0
  841. package/dist/server/lib/provider-api.js.map +1 -0
  842. package/dist/server/lib/thread-debug-store.d.ts +109 -0
  843. package/dist/server/lib/thread-debug-store.d.ts.map +1 -0
  844. package/dist/server/lib/thread-debug-store.js +590 -0
  845. package/dist/server/lib/thread-debug-store.js.map +1 -0
  846. package/dist/server/lib/thread-link-preview.d.ts +3 -0
  847. package/dist/server/lib/thread-link-preview.d.ts.map +1 -0
  848. package/dist/server/lib/thread-link-preview.js +28 -0
  849. package/dist/server/lib/thread-link-preview.js.map +1 -0
  850. package/dist/server/lib/usage-metrics-store.d.ts +96 -0
  851. package/dist/server/lib/usage-metrics-store.d.ts.map +1 -0
  852. package/dist/server/lib/usage-metrics-store.js +422 -0
  853. package/dist/server/lib/usage-metrics-store.js.map +1 -0
  854. package/dist/server/lib/vault-store.d.ts +344 -0
  855. package/dist/server/lib/vault-store.d.ts.map +1 -0
  856. package/dist/server/lib/vault-store.js +874 -0
  857. package/dist/server/lib/vault-store.js.map +1 -0
  858. package/dist/server/lib/workspace-resources-store.d.ts +358 -0
  859. package/dist/server/lib/workspace-resources-store.d.ts.map +1 -0
  860. package/dist/server/lib/workspace-resources-store.js +991 -0
  861. package/dist/server/lib/workspace-resources-store.js.map +1 -0
  862. package/dist/server/plugins/agent-chat.d.ts +3 -0
  863. package/dist/server/plugins/agent-chat.d.ts.map +1 -0
  864. package/dist/server/plugins/agent-chat.js +67 -0
  865. package/dist/server/plugins/agent-chat.js.map +1 -0
  866. package/dist/server/plugins/auth.d.ts +9 -0
  867. package/dist/server/plugins/auth.d.ts.map +1 -0
  868. package/dist/server/plugins/auth.js +30 -0
  869. package/dist/server/plugins/auth.js.map +1 -0
  870. package/dist/server/plugins/core-routes.d.ts +3 -0
  871. package/dist/server/plugins/core-routes.d.ts.map +1 -0
  872. package/dist/server/plugins/core-routes.js +10 -0
  873. package/dist/server/plugins/core-routes.js.map +1 -0
  874. package/dist/server/plugins/db.d.ts +3 -0
  875. package/dist/server/plugins/db.d.ts.map +1 -0
  876. package/dist/server/plugins/db.js +6 -0
  877. package/dist/server/plugins/db.js.map +1 -0
  878. package/dist/server/plugins/integrations.d.ts +8 -0
  879. package/dist/server/plugins/integrations.d.ts.map +1 -0
  880. package/dist/server/plugins/integrations.js +67 -0
  881. package/dist/server/plugins/integrations.js.map +1 -0
  882. package/package.json +113 -0
  883. package/src/actions/apply-dream-proposal.ts +13 -0
  884. package/src/actions/approve-dispatch-change.ts +12 -0
  885. package/src/actions/approve-vault-request.ts +24 -0
  886. package/src/actions/archive-workspace-app.ts +17 -0
  887. package/src/actions/ask_app.ts +14 -0
  888. package/src/actions/create-dream-report.ts +77 -0
  889. package/src/actions/create-link-token.ts +13 -0
  890. package/src/actions/create-pylon-ticket.ts +111 -0
  891. package/src/actions/create-vault-grant.ts +16 -0
  892. package/src/actions/create-vault-secret.ts +28 -0
  893. package/src/actions/create-workspace-resource-grant.ts +16 -0
  894. package/src/actions/create-workspace-resource.ts +30 -0
  895. package/src/actions/create_embed_session.ts +30 -0
  896. package/src/actions/delete-destination.ts +12 -0
  897. package/src/actions/delete-staged-dataset.ts +40 -0
  898. package/src/actions/delete-vault-secret.ts +13 -0
  899. package/src/actions/delete-workspace-resource.ts +13 -0
  900. package/src/actions/deny-vault-request.ts +13 -0
  901. package/src/actions/ensure-dream-job.ts +77 -0
  902. package/src/actions/get-agent-thread-debug.ts +26 -0
  903. package/src/actions/get-app-creation-settings.ts +12 -0
  904. package/src/actions/get-dispatch-settings.ts +11 -0
  905. package/src/actions/get-dream-settings.ts +13 -0
  906. package/src/actions/get-dream.ts +15 -0
  907. package/src/actions/get-vault-access-settings.ts +12 -0
  908. package/src/actions/get-workspace-info.ts +12 -0
  909. package/src/actions/get-workspace-resource-effective-context.ts +35 -0
  910. package/src/actions/grant-vault-secrets-to-app.ts +21 -0
  911. package/src/actions/grant-workspace-resources-to-app.ts +17 -0
  912. package/src/actions/index.spec.ts +32 -0
  913. package/src/actions/index.ts +186 -0
  914. package/src/actions/list-agent-thread-sources.ts +13 -0
  915. package/src/actions/list-available-workspace-templates.ts +12 -0
  916. package/src/actions/list-connected-agents.ts +103 -0
  917. package/src/actions/list-destinations.ts +11 -0
  918. package/src/actions/list-dispatch-approvals.ts +11 -0
  919. package/src/actions/list-dispatch-audit.ts +13 -0
  920. package/src/actions/list-dispatch-overview.ts +19 -0
  921. package/src/actions/list-dispatch-usage-metrics.ts +20 -0
  922. package/src/actions/list-dream-candidates.ts +78 -0
  923. package/src/actions/list-dreams.ts +18 -0
  924. package/src/actions/list-integrations-catalog.ts +12 -0
  925. package/src/actions/list-linked-identities.ts +11 -0
  926. package/src/actions/list-mcp-app-access.ts +27 -0
  927. package/src/actions/list-staged-datasets.ts +37 -0
  928. package/src/actions/list-vault-audit.ts +17 -0
  929. package/src/actions/list-vault-grants.ts +15 -0
  930. package/src/actions/list-vault-requests.ts +17 -0
  931. package/src/actions/list-vault-secret-options.ts +21 -0
  932. package/src/actions/list-vault-secrets.ts +27 -0
  933. package/src/actions/list-workspace-apps.ts +30 -0
  934. package/src/actions/list-workspace-resource-grants.ts +15 -0
  935. package/src/actions/list-workspace-resource-options.ts +17 -0
  936. package/src/actions/list-workspace-resources-for-app.ts +14 -0
  937. package/src/actions/list-workspace-resources.ts +17 -0
  938. package/src/actions/list_apps.ts +28 -0
  939. package/src/actions/navigate.ts +53 -0
  940. package/src/actions/open_app.spec.ts +106 -0
  941. package/src/actions/open_app.ts +152 -0
  942. package/src/actions/preview-dream-proposal.ts +15 -0
  943. package/src/actions/preview-workspace-resource-change.ts +26 -0
  944. package/src/actions/provider-api-catalog.ts +27 -0
  945. package/src/actions/provider-api-docs.ts +73 -0
  946. package/src/actions/provider-api-register.ts +198 -0
  947. package/src/actions/provider-api-request.ts +231 -0
  948. package/src/actions/query-staged-dataset.ts +126 -0
  949. package/src/actions/reject-dispatch-change.ts +13 -0
  950. package/src/actions/reject-dream-proposal.ts +13 -0
  951. package/src/actions/remove-pending-workspace-app.ts +17 -0
  952. package/src/actions/request-vault-secret.ts +17 -0
  953. package/src/actions/restore-starter-workspace-resources.ts +18 -0
  954. package/src/actions/revoke-vault-grant.ts +12 -0
  955. package/src/actions/revoke-workspace-resource-grant.ts +16 -0
  956. package/src/actions/scaffold-workspace-app.spec.ts +33 -0
  957. package/src/actions/scaffold-workspace-app.ts +50 -0
  958. package/src/actions/search-agent-threads.ts +31 -0
  959. package/src/actions/send-code-agent-remote-command.ts +60 -0
  960. package/src/actions/send-platform-message.ts +101 -0
  961. package/src/actions/set-app-creation-settings.ts +20 -0
  962. package/src/actions/set-dispatch-approval-policy.ts +25 -0
  963. package/src/actions/set-dream-settings.spec.ts +81 -0
  964. package/src/actions/set-dream-settings.ts +45 -0
  965. package/src/actions/set-mcp-app-access.ts +60 -0
  966. package/src/actions/set-vault-access-settings.ts +17 -0
  967. package/src/actions/start-workspace-app-creation.ts +49 -0
  968. package/src/actions/sync-vault-to-app.ts +15 -0
  969. package/src/actions/unarchive-workspace-app.ts +17 -0
  970. package/src/actions/update-vault-secret.ts +49 -0
  971. package/src/actions/update-workspace-app-metadata.ts +33 -0
  972. package/src/actions/update-workspace-resource.ts +20 -0
  973. package/src/actions/upsert-destination.ts +30 -0
  974. package/src/actions/view-screen.ts +249 -0
  975. package/src/components/agents-panel.tsx +358 -0
  976. package/src/components/app-keys-popover.tsx +258 -0
  977. package/src/components/approval-value-block.spec.tsx +60 -0
  978. package/src/components/approval-value-block.tsx +33 -0
  979. package/src/components/create-app-popover.tsx +598 -0
  980. package/src/components/dispatch-control-plane.tsx +228 -0
  981. package/src/components/dispatch-shell.tsx +53 -0
  982. package/src/components/index.ts +17 -0
  983. package/src/components/layout/Header.tsx +93 -0
  984. package/src/components/layout/HeaderActions.tsx +84 -0
  985. package/src/components/layout/Layout.tsx +981 -0
  986. package/src/components/messaging-setup-panel.tsx +677 -0
  987. package/src/components/task-queue-health.tsx +166 -0
  988. package/src/components/ui/accordion.tsx +56 -0
  989. package/src/components/ui/alert-dialog.tsx +139 -0
  990. package/src/components/ui/alert.tsx +59 -0
  991. package/src/components/ui/aspect-ratio.tsx +5 -0
  992. package/src/components/ui/avatar.tsx +48 -0
  993. package/src/components/ui/badge.tsx +37 -0
  994. package/src/components/ui/breadcrumb.tsx +115 -0
  995. package/src/components/ui/button.tsx +57 -0
  996. package/src/components/ui/calendar.tsx +68 -0
  997. package/src/components/ui/card.tsx +86 -0
  998. package/src/components/ui/carousel.tsx +260 -0
  999. package/src/components/ui/chart.tsx +375 -0
  1000. package/src/components/ui/checkbox.tsx +28 -0
  1001. package/src/components/ui/collapsible.tsx +9 -0
  1002. package/src/components/ui/command.tsx +154 -0
  1003. package/src/components/ui/context-menu.tsx +198 -0
  1004. package/src/components/ui/dialog.tsx +120 -0
  1005. package/src/components/ui/drawer.tsx +128 -0
  1006. package/src/components/ui/dropdown-menu.tsx +198 -0
  1007. package/src/components/ui/form.tsx +177 -0
  1008. package/src/components/ui/hover-card.tsx +27 -0
  1009. package/src/components/ui/input-otp.tsx +69 -0
  1010. package/src/components/ui/input.tsx +22 -0
  1011. package/src/components/ui/label.tsx +24 -0
  1012. package/src/components/ui/menubar.tsx +235 -0
  1013. package/src/components/ui/navigation-menu.tsx +128 -0
  1014. package/src/components/ui/pagination.tsx +121 -0
  1015. package/src/components/ui/popover.tsx +29 -0
  1016. package/src/components/ui/progress.tsx +26 -0
  1017. package/src/components/ui/radio-group.tsx +42 -0
  1018. package/src/components/ui/resizable.tsx +43 -0
  1019. package/src/components/ui/scroll-area.tsx +46 -0
  1020. package/src/components/ui/select.tsx +158 -0
  1021. package/src/components/ui/separator.tsx +29 -0
  1022. package/src/components/ui/sheet.tsx +139 -0
  1023. package/src/components/ui/sidebar.tsx +777 -0
  1024. package/src/components/ui/skeleton.tsx +15 -0
  1025. package/src/components/ui/slider.tsx +26 -0
  1026. package/src/components/ui/sonner.tsx +58 -0
  1027. package/src/components/ui/spinner.tsx +17 -0
  1028. package/src/components/ui/switch.tsx +27 -0
  1029. package/src/components/ui/table.tsx +117 -0
  1030. package/src/components/ui/tabs.tsx +53 -0
  1031. package/src/components/ui/textarea.tsx +23 -0
  1032. package/src/components/ui/toast.tsx +127 -0
  1033. package/src/components/ui/toaster.tsx +33 -0
  1034. package/src/components/ui/toggle-group.tsx +59 -0
  1035. package/src/components/ui/toggle.tsx +43 -0
  1036. package/src/components/ui/tooltip.tsx +28 -0
  1037. package/src/components/ui/use-toast.ts +3 -0
  1038. package/src/components/workspace-app-card.tsx +450 -0
  1039. package/src/components/workspace-resource-effective-stack.spec.tsx +126 -0
  1040. package/src/components/workspace-resource-effective-stack.tsx +142 -0
  1041. package/src/components/workspace-resource-impact-preview.spec.tsx +148 -0
  1042. package/src/components/workspace-resource-impact-preview.tsx +117 -0
  1043. package/src/config.ts +35 -0
  1044. package/src/db/index.ts +13 -0
  1045. package/src/db/migrations.spec.ts +80 -0
  1046. package/src/db/migrations.ts +224 -0
  1047. package/src/db/schema.ts +204 -0
  1048. package/src/hooks/use-mobile.tsx +21 -0
  1049. package/src/hooks/use-navigation-state.spec.ts +45 -0
  1050. package/src/hooks/use-navigation-state.ts +295 -0
  1051. package/src/hooks/use-toast.ts +188 -0
  1052. package/src/index.ts +19 -0
  1053. package/src/lib/automation-display.spec.ts +95 -0
  1054. package/src/lib/automation-display.ts +70 -0
  1055. package/src/lib/automations.ts +60 -0
  1056. package/src/lib/catch-all-target.spec.ts +156 -0
  1057. package/src/lib/catch-all-target.ts +125 -0
  1058. package/src/lib/overview-chat.spec.ts +63 -0
  1059. package/src/lib/overview-chat.ts +26 -0
  1060. package/src/lib/task-queue.spec.ts +57 -0
  1061. package/src/lib/task-queue.ts +72 -0
  1062. package/src/lib/thread-link-preview.ts +160 -0
  1063. package/src/lib/utils.ts +6 -0
  1064. package/src/lib/workspace-apps.ts +31 -0
  1065. package/src/routes/index.ts +64 -0
  1066. package/src/routes/pages/$appId.tsx +193 -0
  1067. package/src/routes/pages/_index.tsx +60 -0
  1068. package/src/routes/pages/agents.tsx +216 -0
  1069. package/src/routes/pages/approval.tsx +287 -0
  1070. package/src/routes/pages/approvals.tsx +158 -0
  1071. package/src/routes/pages/apps.$appId.tsx +124 -0
  1072. package/src/routes/pages/apps.tsx +396 -0
  1073. package/src/routes/pages/audit.tsx +42 -0
  1074. package/src/routes/pages/automations.tsx +280 -0
  1075. package/src/routes/pages/chat.tsx +194 -0
  1076. package/src/routes/pages/destinations.tsx +274 -0
  1077. package/src/routes/pages/dream-settings.spec.ts +131 -0
  1078. package/src/routes/pages/dream-settings.ts +103 -0
  1079. package/src/routes/pages/dreams.tsx +1837 -0
  1080. package/src/routes/pages/extensions.$id.tsx +9 -0
  1081. package/src/routes/pages/extensions._index.tsx +9 -0
  1082. package/src/routes/pages/identities.tsx +92 -0
  1083. package/src/routes/pages/integrations.tsx +451 -0
  1084. package/src/routes/pages/messaging.tsx +17 -0
  1085. package/src/routes/pages/metrics.tsx +777 -0
  1086. package/src/routes/pages/new-app.tsx +19 -0
  1087. package/src/routes/pages/overview.tsx +22 -0
  1088. package/src/routes/pages/settings.tsx +122 -0
  1089. package/src/routes/pages/team.tsx +9 -0
  1090. package/src/routes/pages/thread-debug.tsx +690 -0
  1091. package/src/routes/pages/tools.$id.tsx +9 -0
  1092. package/src/routes/pages/tools._index.tsx +9 -0
  1093. package/src/routes/pages/vault.tsx +874 -0
  1094. package/src/routes/pages/workspace.tsx +1162 -0
  1095. package/src/server/index.ts +79 -0
  1096. package/src/server/lib/app-creation-store.spec.ts +379 -0
  1097. package/src/server/lib/app-creation-store.ts +1933 -0
  1098. package/src/server/lib/dispatch-integrations.spec.ts +277 -0
  1099. package/src/server/lib/dispatch-integrations.ts +302 -0
  1100. package/src/server/lib/dispatch-remote-commands.spec.ts +168 -0
  1101. package/src/server/lib/dispatch-remote-commands.ts +375 -0
  1102. package/src/server/lib/dispatch-store.ts +927 -0
  1103. package/src/server/lib/dreams-store.spec.ts +1492 -0
  1104. package/src/server/lib/dreams-store.ts +3187 -0
  1105. package/src/server/lib/env-config.ts +49 -0
  1106. package/src/server/lib/mcp-access-store.spec.ts +59 -0
  1107. package/src/server/lib/mcp-access-store.ts +104 -0
  1108. package/src/server/lib/mcp-gateway.spec.ts +693 -0
  1109. package/src/server/lib/mcp-gateway.ts +627 -0
  1110. package/src/server/lib/onboarding-steps.ts +50 -0
  1111. package/src/server/lib/pre-auth-routing.ts +159 -0
  1112. package/src/server/lib/provider-api.ts +69 -0
  1113. package/src/server/lib/thread-debug-store.ts +784 -0
  1114. package/src/server/lib/thread-link-preview.spec.ts +127 -0
  1115. package/src/server/lib/thread-link-preview.ts +32 -0
  1116. package/src/server/lib/usage-metrics-store.spec.ts +102 -0
  1117. package/src/server/lib/usage-metrics-store.ts +659 -0
  1118. package/src/server/lib/vault-store.spec.ts +189 -0
  1119. package/src/server/lib/vault-store.ts +1234 -0
  1120. package/src/server/lib/workspace-resource-approval-lifecycle.spec.ts +227 -0
  1121. package/src/server/lib/workspace-resources-store.spec.ts +1108 -0
  1122. package/src/server/lib/workspace-resources-store.ts +1396 -0
  1123. package/src/server/plugins/agent-chat.ts +69 -0
  1124. package/src/server/plugins/auth.ts +35 -0
  1125. package/src/server/plugins/core-routes.ts +12 -0
  1126. package/src/server/plugins/db.ts +7 -0
  1127. package/src/server/plugins/integrations.ts +77 -0
  1128. package/src/styles/dispatch-css.spec.ts +65 -0
  1129. package/src/styles/dispatch.css +108 -0
@@ -0,0 +1,1837 @@
1
+ import { useActionMutation, useActionQuery } from "@agent-native/core/client";
2
+ import {
3
+ IconAlertTriangle,
4
+ IconBrain,
5
+ IconCalendarTime,
6
+ IconCheck,
7
+ IconCircleDashed,
8
+ IconClock,
9
+ IconDatabase,
10
+ IconFileDiff,
11
+ IconPlayerPlay,
12
+ IconRefresh,
13
+ IconSettings,
14
+ IconX,
15
+ } from "@tabler/icons-react";
16
+ import { useEffect, useMemo, useState } from "react";
17
+ import { useSearchParams } from "react-router";
18
+ import { toast } from "sonner";
19
+
20
+ import { DispatchShell } from "../../components/dispatch-shell";
21
+ import {
22
+ Accordion,
23
+ AccordionContent,
24
+ AccordionItem,
25
+ AccordionTrigger,
26
+ } from "../../components/ui/accordion";
27
+ import { Alert, AlertDescription, AlertTitle } from "../../components/ui/alert";
28
+ import { Badge } from "../../components/ui/badge";
29
+ import { Button } from "../../components/ui/button";
30
+ import { Input } from "../../components/ui/input";
31
+ import { Label } from "../../components/ui/label";
32
+ import { ScrollArea } from "../../components/ui/scroll-area";
33
+ import { Separator } from "../../components/ui/separator";
34
+ import {
35
+ Sheet,
36
+ SheetContent,
37
+ SheetDescription,
38
+ SheetFooter,
39
+ SheetHeader,
40
+ SheetTitle,
41
+ SheetTrigger,
42
+ } from "../../components/ui/sheet";
43
+ import { Skeleton } from "../../components/ui/skeleton";
44
+ import { Spinner } from "../../components/ui/spinner";
45
+ import { Switch } from "../../components/ui/switch";
46
+ import {
47
+ Table,
48
+ TableBody,
49
+ TableCell,
50
+ TableHead,
51
+ TableHeader,
52
+ TableRow,
53
+ } from "../../components/ui/table";
54
+ import {
55
+ Tabs,
56
+ TabsContent,
57
+ TabsList,
58
+ TabsTrigger,
59
+ } from "../../components/ui/tabs";
60
+ import { Textarea } from "../../components/ui/textarea";
61
+ import { cn } from "../../lib/utils";
62
+ import {
63
+ dreamSettingsToDraft,
64
+ dreamSettingsUpdateFromDraft,
65
+ splitSourceIds,
66
+ type DreamSettings,
67
+ type DreamSettingsDraft,
68
+ } from "./dream-settings";
69
+
70
+ export function meta() {
71
+ return [{ title: "Dreams — Dispatch" }];
72
+ }
73
+
74
+ type DreamStatus =
75
+ | "running"
76
+ | "completed"
77
+ | "failed"
78
+ | "pending"
79
+ | "applied"
80
+ | "rejected"
81
+ | "stale"
82
+ | string;
83
+
84
+ interface DreamPass {
85
+ id: string;
86
+ title?: string | null;
87
+ summary?: string | null;
88
+ status?: DreamStatus | null;
89
+ sourceId?: string | null;
90
+ query?: string | null;
91
+ error?: string | null;
92
+ createdAt?: number | string | null;
93
+ startedAt?: number | string | null;
94
+ completedAt?: number | string | null;
95
+ updatedAt?: number | string | null;
96
+ candidateCount?: number | null;
97
+ inspectedThreadCount?: number | null;
98
+ inspectedRunCount?: number | null;
99
+ proposalCount?: number | null;
100
+ proposalCounts?: Record<string, number> | null;
101
+ appliedCount?: number | null;
102
+ rejectedCount?: number | null;
103
+ sourceHealth?: DreamSourceHealth[] | null;
104
+ }
105
+
106
+ interface DreamEvidence {
107
+ id?: string | null;
108
+ label?: string | null;
109
+ title?: string | null;
110
+ source?: string | null;
111
+ sourceId?: string | null;
112
+ threadId?: string | null;
113
+ threadTitle?: string | null;
114
+ runId?: string | null;
115
+ kind?: string | null;
116
+ quote?: string | null;
117
+ snippet?: string | null;
118
+ summary?: string | null;
119
+ confidence?: number | null;
120
+ createdAt?: number | string | null;
121
+ [key: string]: unknown;
122
+ }
123
+
124
+ interface DreamProposal {
125
+ id: string;
126
+ dreamId?: string | null;
127
+ title?: string | null;
128
+ summary?: string | null;
129
+ status?: DreamStatus | null;
130
+ targetType?: string | null;
131
+ targetPath?: string | null;
132
+ type?: string | null;
133
+ target?: string | null;
134
+ path?: string | null;
135
+ risk?: string | null;
136
+ confidence?: number | null;
137
+ rationale?: string | null;
138
+ content?: string | null;
139
+ evidence?: DreamEvidence[] | null;
140
+ sourceRunIds?: string[] | null;
141
+ createdAt?: number | string | null;
142
+ }
143
+
144
+ interface CandidateRun {
145
+ id?: string;
146
+ thread?: {
147
+ id: string;
148
+ ownerEmail: string;
149
+ title: string;
150
+ preview: string;
151
+ messageCount: number;
152
+ createdAt: number;
153
+ updatedAt: number;
154
+ };
155
+ title?: string | null;
156
+ summary?: string | null;
157
+ preview?: string | null;
158
+ ownerEmail?: string | null;
159
+ sourceId?: string | null;
160
+ sourceLabel?: string | null;
161
+ threadId?: string | null;
162
+ runId?: string | null;
163
+ status?: string | null;
164
+ score?: number | null;
165
+ reasons?:
166
+ | string[]
167
+ | Array<{
168
+ code: string;
169
+ label: string;
170
+ score: number;
171
+ evidenceCount: number;
172
+ }>
173
+ | null;
174
+ signals?: string[] | null;
175
+ latestRunStatus?: string | null;
176
+ updatedAt?: number | string | null;
177
+ startedAt?: number | string | null;
178
+ completedAt?: number | string | null;
179
+ evidence?: DreamEvidence[] | null;
180
+ }
181
+
182
+ interface DreamSourceHealth {
183
+ sourceId: string;
184
+ label?: string | null;
185
+ status: "ok" | "timed_out" | "error" | string;
186
+ startedAt?: number | string | null;
187
+ completedAt?: number | string | null;
188
+ durationMs: number;
189
+ timeoutMs?: number | null;
190
+ inspectedThreadCount: number;
191
+ candidateCount: number;
192
+ errorCount: number;
193
+ threadErrorCount?: number | null;
194
+ message?: string | null;
195
+ }
196
+
197
+ interface DreamDetail {
198
+ dream?: DreamPass | null;
199
+ report?: string | null;
200
+ summary?: string | null;
201
+ proposals?: DreamProposal[] | null;
202
+ candidates?: CandidateRun[] | null;
203
+ inspectedRuns?: CandidateRun[] | null;
204
+ evidence?: DreamEvidence[] | null;
205
+ [key: string]: unknown;
206
+ }
207
+
208
+ type ListDreamsResponse =
209
+ | DreamPass[]
210
+ | {
211
+ dreams?: DreamPass[];
212
+ items?: DreamPass[];
213
+ results?: DreamPass[];
214
+ };
215
+
216
+ type ListCandidatesResponse =
217
+ | CandidateRun[]
218
+ | {
219
+ candidates?: CandidateRun[];
220
+ items?: CandidateRun[];
221
+ results?: CandidateRun[];
222
+ sources?: DreamSourceHealth[];
223
+ sourceHealth?: DreamSourceHealth[];
224
+ };
225
+
226
+ type GetDreamResponse = DreamDetail | null;
227
+
228
+ interface CreateDreamReportParams {
229
+ sourceId?: string;
230
+ sourceIds?: string[];
231
+ allSources?: boolean;
232
+ query?: string;
233
+ ownerEmail?: string;
234
+ limit?: number;
235
+ sourceTimeoutMs?: number;
236
+ sourceConcurrency?: number;
237
+ sourceStartStaggerMs?: number;
238
+ threadConcurrency?: number;
239
+ threadTimeoutMs?: number;
240
+ title?: string;
241
+ }
242
+
243
+ interface CreateDreamReportResult {
244
+ id?: string;
245
+ dreamId?: string;
246
+ dream?: DreamPass;
247
+ }
248
+
249
+ interface ProposalMutationParams {
250
+ id: string;
251
+ reason?: string;
252
+ }
253
+
254
+ interface DreamProposalPreview {
255
+ operation?: "create" | "update" | "append" | string;
256
+ targetExists?: boolean;
257
+ currentContent?: string | null;
258
+ proposedContent?: string | null;
259
+ target?: {
260
+ type?: string | null;
261
+ path?: string | null;
262
+ kind?: string | null;
263
+ resourceId?: string | null;
264
+ };
265
+ approval?: {
266
+ required?: boolean;
267
+ policyEnabled?: boolean;
268
+ willRequestApproval?: boolean;
269
+ };
270
+ }
271
+
272
+ function normalizeArray<T>(value: unknown, keys: readonly string[]): T[] {
273
+ if (Array.isArray(value)) return value as T[];
274
+ if (!value || typeof value !== "object") return [];
275
+ const record = value as Record<string, unknown>;
276
+ for (const key of keys) {
277
+ if (Array.isArray(record[key])) return record[key] as T[];
278
+ }
279
+ return [];
280
+ }
281
+
282
+ function normalizeSourceHealth(value: unknown): DreamSourceHealth[] {
283
+ if (!value || typeof value !== "object" || Array.isArray(value)) return [];
284
+ const record = value as Record<string, unknown>;
285
+ if (Array.isArray(record.sources)) {
286
+ return record.sources as DreamSourceHealth[];
287
+ }
288
+ if (Array.isArray(record.sourceHealth)) {
289
+ return record.sourceHealth as DreamSourceHealth[];
290
+ }
291
+ return [];
292
+ }
293
+
294
+ function formatDate(value: number | string | null | undefined): string {
295
+ if (value == null || value === "") return "n/a";
296
+ const numeric = Number(value);
297
+ const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);
298
+ if (Number.isNaN(date.getTime())) return "n/a";
299
+ return date.toLocaleString();
300
+ }
301
+
302
+ function compactDate(value: number | string | null | undefined): string {
303
+ if (value == null || value === "") return "n/a";
304
+ const numeric = Number(value);
305
+ const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);
306
+ if (Number.isNaN(date.getTime())) return "n/a";
307
+ return date.toLocaleDateString(undefined, {
308
+ month: "short",
309
+ day: "numeric",
310
+ hour: "numeric",
311
+ minute: "2-digit",
312
+ });
313
+ }
314
+
315
+ function json(value: unknown): string {
316
+ try {
317
+ return JSON.stringify(value, null, 2);
318
+ } catch {
319
+ return String(value);
320
+ }
321
+ }
322
+
323
+ function plural(value: number, singular: string, pluralLabel = `${singular}s`) {
324
+ return `${value} ${value === 1 ? singular : pluralLabel}`;
325
+ }
326
+
327
+ function dreamLabel(dream: DreamPass, index: number): string {
328
+ return dream.title || `Dream pass ${index + 1}`;
329
+ }
330
+
331
+ function proposalTarget(proposal: DreamProposal): string {
332
+ return (
333
+ proposal.targetPath ||
334
+ proposal.path ||
335
+ proposal.target ||
336
+ proposal.targetType ||
337
+ proposal.type ||
338
+ "memory"
339
+ );
340
+ }
341
+
342
+ function evidenceLabel(evidence: DreamEvidence, index: number): string {
343
+ return (
344
+ evidence.label ||
345
+ evidence.title ||
346
+ evidence.threadTitle ||
347
+ evidence.source ||
348
+ evidence.threadId ||
349
+ evidence.runId ||
350
+ `Evidence ${index + 1}`
351
+ );
352
+ }
353
+
354
+ function candidateLabel(candidate: CandidateRun): string {
355
+ return (
356
+ candidate.thread?.title ||
357
+ candidate.title ||
358
+ candidate.summary ||
359
+ candidate.thread?.preview ||
360
+ candidate.preview ||
361
+ candidate.thread?.id ||
362
+ candidate.threadId ||
363
+ candidate.runId ||
364
+ candidate.id ||
365
+ "candidate"
366
+ );
367
+ }
368
+
369
+ function candidateSignals(candidate: CandidateRun): string[] {
370
+ const reasons = (candidate.reasons ?? []).map((reason) =>
371
+ typeof reason === "string" ? reason : reason.label,
372
+ );
373
+ return [...reasons, ...(candidate.signals ?? [])].filter(Boolean);
374
+ }
375
+
376
+ function candidateId(candidate: CandidateRun): string {
377
+ return (
378
+ candidate.id ||
379
+ candidate.thread?.id ||
380
+ candidate.threadId ||
381
+ candidate.runId ||
382
+ candidateLabel(candidate)
383
+ );
384
+ }
385
+
386
+ function candidateStatus(candidate: CandidateRun): string {
387
+ return candidate.latestRunStatus || candidate.status || "unknown";
388
+ }
389
+
390
+ function candidateOwner(candidate: CandidateRun): string {
391
+ return candidate.thread?.ownerEmail || candidate.ownerEmail || "n/a";
392
+ }
393
+
394
+ function candidateUpdatedAt(candidate: CandidateRun): number | string | null {
395
+ return (
396
+ candidate.updatedAt ||
397
+ candidate.completedAt ||
398
+ candidate.startedAt ||
399
+ candidate.thread?.updatedAt ||
400
+ null
401
+ );
402
+ }
403
+
404
+ function dreamProposalCount(dream: DreamPass): number {
405
+ return dream.proposalCount ?? dream.proposalCounts?.total ?? 0;
406
+ }
407
+
408
+ function dreamInspectedCount(dream: DreamPass): number {
409
+ return dream.inspectedThreadCount ?? dream.inspectedRunCount ?? 0;
410
+ }
411
+
412
+ function resultDreamId(result: CreateDreamReportResult | null | undefined) {
413
+ return result?.dream?.id || result?.dreamId || result?.id || null;
414
+ }
415
+
416
+ function statusVariant(status: DreamStatus | null | undefined) {
417
+ const normalized = String(status || "pending").toLowerCase();
418
+ if (normalized === "failed") return "destructive" as const;
419
+ if (normalized === "completed" || normalized === "applied")
420
+ return "default" as const;
421
+ if (normalized === "rejected" || normalized === "stale")
422
+ return "outline" as const;
423
+ return "secondary" as const;
424
+ }
425
+
426
+ function sourceStatusVariant(status: string | null | undefined) {
427
+ const normalized = String(status || "ok").toLowerCase();
428
+ if (normalized === "error" || normalized === "timed_out") {
429
+ return "destructive" as const;
430
+ }
431
+ return "secondary" as const;
432
+ }
433
+
434
+ function StatusBadge({ status }: { status?: DreamStatus | null }) {
435
+ const normalized = String(status || "pending").toLowerCase();
436
+ return (
437
+ <Badge variant={statusVariant(status)} className="capitalize">
438
+ {normalized.replace(/_/g, " ")}
439
+ </Badge>
440
+ );
441
+ }
442
+
443
+ function SourceHealthPanel({ sources }: { sources: DreamSourceHealth[] }) {
444
+ if (sources.length === 0) return null;
445
+ const unhealthyCount = sources.filter(
446
+ (source) => String(source.status).toLowerCase() !== "ok",
447
+ ).length;
448
+ return (
449
+ <Alert variant={unhealthyCount > 0 ? "destructive" : "default"}>
450
+ <IconDatabase className="h-4 w-4" />
451
+ <AlertTitle>Source health</AlertTitle>
452
+ <AlertDescription>
453
+ <div className="mt-2 flex flex-wrap gap-1.5">
454
+ {sources.map((source) => (
455
+ <Badge
456
+ key={source.sourceId}
457
+ variant={sourceStatusVariant(source.status)}
458
+ className="gap-1"
459
+ title={
460
+ source.message ||
461
+ `${source.inspectedThreadCount} inspected, ${source.candidateCount} candidates, ${source.durationMs}ms of ${source.timeoutMs ?? "n/a"}ms`
462
+ }
463
+ >
464
+ {source.label || source.sourceId}:{" "}
465
+ {String(source.status).replace(/_/g, " ")} · {source.durationMs}
466
+ ms
467
+ </Badge>
468
+ ))}
469
+ </div>
470
+ </AlertDescription>
471
+ </Alert>
472
+ );
473
+ }
474
+
475
+ function isApprovalRequestResult(value: unknown): boolean {
476
+ if (!value || typeof value !== "object") return false;
477
+ const record = value as Record<string, unknown>;
478
+ const result = record.result as Record<string, unknown> | undefined;
479
+ return result?.approvalRequired === true;
480
+ }
481
+
482
+ function QueryState({ error, label }: { error: unknown; label: string }) {
483
+ if (!error) return null;
484
+ return (
485
+ <Alert variant="destructive">
486
+ <IconAlertTriangle className="h-4 w-4" />
487
+ <AlertTitle>{label}</AlertTitle>
488
+ <AlertDescription>
489
+ {error instanceof Error ? error.message : String(error)}
490
+ </AlertDescription>
491
+ </Alert>
492
+ );
493
+ }
494
+
495
+ function RawBlock({ value }: { value: unknown }) {
496
+ return (
497
+ <pre className="max-h-64 overflow-auto rounded-md border bg-muted/30 p-3 text-xs leading-relaxed text-foreground whitespace-pre-wrap break-words">
498
+ {typeof value === "string" ? value : json(value)}
499
+ </pre>
500
+ );
501
+ }
502
+
503
+ function EmptyPanel({
504
+ title,
505
+ description,
506
+ }: {
507
+ title: string;
508
+ description: string;
509
+ }) {
510
+ return (
511
+ <div className="rounded-lg border border-dashed bg-muted/20 px-4 py-8 text-center">
512
+ <div className="text-sm font-medium text-foreground">{title}</div>
513
+ <div className="mx-auto mt-1 max-w-md text-xs leading-relaxed text-muted-foreground">
514
+ {description}
515
+ </div>
516
+ </div>
517
+ );
518
+ }
519
+
520
+ function DreamListSkeleton() {
521
+ return (
522
+ <div className="space-y-2">
523
+ {Array.from({ length: 5 }).map((_, index) => (
524
+ <div key={index} className="rounded-lg border p-3">
525
+ <Skeleton className="h-4 w-2/3" />
526
+ <Skeleton className="mt-2 h-3 w-full" />
527
+ <Skeleton className="mt-2 h-3 w-1/2" />
528
+ </div>
529
+ ))}
530
+ </div>
531
+ );
532
+ }
533
+
534
+ function ProposalSkeleton() {
535
+ return (
536
+ <div className="space-y-3">
537
+ {Array.from({ length: 3 }).map((_, index) => (
538
+ <div key={index} className="rounded-lg border p-4">
539
+ <Skeleton className="h-4 w-1/2" />
540
+ <Skeleton className="mt-3 h-3 w-full" />
541
+ <Skeleton className="mt-2 h-3 w-3/4" />
542
+ </div>
543
+ ))}
544
+ </div>
545
+ );
546
+ }
547
+
548
+ function StatTile({
549
+ label,
550
+ value,
551
+ icon: Icon,
552
+ }: {
553
+ label: string;
554
+ value: string | number;
555
+ icon: typeof IconBrain;
556
+ }) {
557
+ return (
558
+ <div className="rounded-lg border bg-card px-3 py-2.5">
559
+ <div className="flex items-center justify-between gap-3">
560
+ <div>
561
+ <div className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
562
+ {label}
563
+ </div>
564
+ <div className="mt-1 text-xl font-semibold tabular-nums text-foreground">
565
+ {value}
566
+ </div>
567
+ </div>
568
+ <Icon size={18} className="text-muted-foreground" />
569
+ </div>
570
+ </div>
571
+ );
572
+ }
573
+
574
+ function DreamSettingsSheet({
575
+ open,
576
+ onOpenChange,
577
+ draft,
578
+ onDraftChange,
579
+ onSave,
580
+ saving,
581
+ loading,
582
+ }: {
583
+ open: boolean;
584
+ onOpenChange: (open: boolean) => void;
585
+ draft: DreamSettingsDraft;
586
+ onDraftChange: (draft: DreamSettingsDraft) => void;
587
+ onSave: () => void;
588
+ saving: boolean;
589
+ loading: boolean;
590
+ }) {
591
+ const sourceIds = splitSourceIds(draft.sourceIdsText);
592
+ const canSave = draft.schedule.trim().length > 0;
593
+
594
+ function update<K extends keyof DreamSettingsDraft>(
595
+ key: K,
596
+ value: DreamSettingsDraft[K],
597
+ ) {
598
+ onDraftChange({ ...draft, [key]: value });
599
+ }
600
+
601
+ return (
602
+ <Sheet open={open} onOpenChange={onOpenChange}>
603
+ <SheetTrigger asChild>
604
+ <Button variant="outline" disabled={loading}>
605
+ <IconSettings size={15} className="mr-1.5" />
606
+ Settings
607
+ </Button>
608
+ </SheetTrigger>
609
+ <SheetContent className="flex w-full flex-col p-0 sm:max-w-2xl">
610
+ <SheetHeader className="border-b px-5 py-4">
611
+ <div className="flex flex-wrap items-center gap-2 pr-8">
612
+ <Badge variant={draft.enabled ? "default" : "secondary"}>
613
+ {draft.enabled ? "Enabled" : "Paused"}
614
+ </Badge>
615
+ <Badge variant="outline" className="font-mono">
616
+ {draft.schedule || "No schedule"}
617
+ </Badge>
618
+ </div>
619
+ <SheetTitle className="mt-2 text-base">Dream settings</SheetTitle>
620
+ <SheetDescription>
621
+ Configure recurring dream scope, schedule, and scan limits.
622
+ </SheetDescription>
623
+ </SheetHeader>
624
+
625
+ <ScrollArea className="min-h-0 flex-1">
626
+ <div className="space-y-6 p-5">
627
+ <section className="space-y-3">
628
+ <div className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
629
+ Schedule
630
+ </div>
631
+ <div className="flex items-center justify-between gap-4 rounded-lg border bg-muted/20 px-3 py-3">
632
+ <div>
633
+ <Label htmlFor="dream-enabled">Recurring dreams</Label>
634
+ <div className="mt-1 text-xs text-muted-foreground">
635
+ Saved setting used by dream jobs.
636
+ </div>
637
+ </div>
638
+ <Switch
639
+ id="dream-enabled"
640
+ checked={draft.enabled}
641
+ onCheckedChange={(checked) => update("enabled", checked)}
642
+ />
643
+ </div>
644
+ <div className="grid gap-4 sm:grid-cols-[minmax(0,1fr)_180px]">
645
+ <div className="space-y-2">
646
+ <Label htmlFor="dream-schedule">Cron schedule</Label>
647
+ <Input
648
+ id="dream-schedule"
649
+ value={draft.schedule}
650
+ onChange={(event) => update("schedule", event.target.value)}
651
+ placeholder="0 9 * * 1"
652
+ className="font-mono"
653
+ />
654
+ </div>
655
+ <div className="space-y-2">
656
+ <Label htmlFor="dream-min-candidates">Min candidates</Label>
657
+ <Input
658
+ id="dream-min-candidates"
659
+ type="number"
660
+ min={0}
661
+ max={50}
662
+ value={draft.minCandidateCount}
663
+ onChange={(event) =>
664
+ update("minCandidateCount", event.target.value)
665
+ }
666
+ />
667
+ </div>
668
+ </div>
669
+ </section>
670
+
671
+ <Separator />
672
+
673
+ <section className="space-y-3">
674
+ <div className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
675
+ Sources
676
+ </div>
677
+ <div className="flex items-center justify-between gap-4 rounded-lg border bg-muted/20 px-3 py-3">
678
+ <div>
679
+ <Label htmlFor="dream-all-sources">All sources</Label>
680
+ <div className="mt-1 text-xs text-muted-foreground">
681
+ Scan every connected thread-debug source.
682
+ </div>
683
+ </div>
684
+ <Switch
685
+ id="dream-all-sources"
686
+ checked={draft.allSources}
687
+ onCheckedChange={(checked) => update("allSources", checked)}
688
+ />
689
+ </div>
690
+ <div className="grid gap-4 sm:grid-cols-2">
691
+ <div className="space-y-2">
692
+ <Label htmlFor="dream-source-id">Source ID</Label>
693
+ <Input
694
+ id="dream-source-id"
695
+ value={draft.sourceId}
696
+ onChange={(event) => update("sourceId", event.target.value)}
697
+ disabled={draft.allSources || sourceIds.length > 0}
698
+ placeholder="current"
699
+ className="font-mono"
700
+ />
701
+ </div>
702
+ <div className="space-y-2">
703
+ <Label htmlFor="dream-query">Query</Label>
704
+ <Input
705
+ id="dream-query"
706
+ value={draft.query}
707
+ onChange={(event) => update("query", event.target.value)}
708
+ placeholder="Optional search term"
709
+ />
710
+ </div>
711
+ </div>
712
+ <div className="space-y-2">
713
+ <Label htmlFor="dream-source-ids">Explicit source IDs</Label>
714
+ <Textarea
715
+ id="dream-source-ids"
716
+ value={draft.sourceIdsText}
717
+ onChange={(event) =>
718
+ update("sourceIdsText", event.target.value)
719
+ }
720
+ disabled={draft.allSources}
721
+ rows={3}
722
+ placeholder="One source ID per line"
723
+ className="font-mono"
724
+ />
725
+ </div>
726
+ </section>
727
+
728
+ <Separator />
729
+
730
+ <section className="space-y-3">
731
+ <div className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
732
+ Scan Limits
733
+ </div>
734
+ <div className="grid gap-4 sm:grid-cols-2">
735
+ <div className="space-y-2">
736
+ <Label htmlFor="dream-limit">Candidate limit</Label>
737
+ <Input
738
+ id="dream-limit"
739
+ type="number"
740
+ min={1}
741
+ max={50}
742
+ value={draft.limit}
743
+ onChange={(event) => update("limit", event.target.value)}
744
+ />
745
+ </div>
746
+ <div className="space-y-2">
747
+ <Label htmlFor="dream-source-timeout">
748
+ Source timeout ms
749
+ </Label>
750
+ <Input
751
+ id="dream-source-timeout"
752
+ type="number"
753
+ min={1000}
754
+ max={60000}
755
+ value={draft.sourceTimeoutMs}
756
+ onChange={(event) =>
757
+ update("sourceTimeoutMs", event.target.value)
758
+ }
759
+ />
760
+ </div>
761
+ <div className="space-y-2">
762
+ <Label htmlFor="dream-source-concurrency">
763
+ Source concurrency
764
+ </Label>
765
+ <Input
766
+ id="dream-source-concurrency"
767
+ type="number"
768
+ min={1}
769
+ max={8}
770
+ value={draft.sourceConcurrency}
771
+ onChange={(event) =>
772
+ update("sourceConcurrency", event.target.value)
773
+ }
774
+ />
775
+ </div>
776
+ <div className="space-y-2">
777
+ <Label htmlFor="dream-start-stagger">Start stagger ms</Label>
778
+ <Input
779
+ id="dream-start-stagger"
780
+ type="number"
781
+ min={0}
782
+ max={5000}
783
+ value={draft.sourceStartStaggerMs}
784
+ onChange={(event) =>
785
+ update("sourceStartStaggerMs", event.target.value)
786
+ }
787
+ />
788
+ </div>
789
+ <div className="space-y-2">
790
+ <Label htmlFor="dream-thread-concurrency">
791
+ Thread concurrency
792
+ </Label>
793
+ <Input
794
+ id="dream-thread-concurrency"
795
+ type="number"
796
+ min={1}
797
+ max={10}
798
+ value={draft.threadConcurrency}
799
+ onChange={(event) =>
800
+ update("threadConcurrency", event.target.value)
801
+ }
802
+ />
803
+ </div>
804
+ <div className="space-y-2">
805
+ <Label htmlFor="dream-thread-timeout">
806
+ Thread timeout ms
807
+ </Label>
808
+ <Input
809
+ id="dream-thread-timeout"
810
+ type="number"
811
+ min={1000}
812
+ max={30000}
813
+ value={draft.threadTimeoutMs}
814
+ onChange={(event) =>
815
+ update("threadTimeoutMs", event.target.value)
816
+ }
817
+ />
818
+ </div>
819
+ </div>
820
+ </section>
821
+ </div>
822
+ </ScrollArea>
823
+
824
+ <SheetFooter className="gap-2 border-t px-5 py-4">
825
+ <Button variant="outline" onClick={() => onOpenChange(false)}>
826
+ Close
827
+ </Button>
828
+ <Button disabled={!canSave || saving} onClick={onSave}>
829
+ {saving ? <Spinner className="mr-1.5 size-3.5" /> : null}
830
+ Save settings
831
+ </Button>
832
+ </SheetFooter>
833
+ </SheetContent>
834
+ </Sheet>
835
+ );
836
+ }
837
+
838
+ function ProposalCard({
839
+ proposal,
840
+ applying,
841
+ rejecting,
842
+ onApply,
843
+ onReject,
844
+ }: {
845
+ proposal: DreamProposal;
846
+ applying: boolean;
847
+ rejecting: boolean;
848
+ onApply: () => void;
849
+ onReject: (reason?: string) => void;
850
+ }) {
851
+ const [open, setOpen] = useState(false);
852
+ const [rejectReason, setRejectReason] = useState("");
853
+ const evidence = proposal.evidence ?? [];
854
+ const sourceRunIds = proposal.sourceRunIds ?? [];
855
+ const status = String(proposal.status || "pending").toLowerCase();
856
+ const canAct = status === "pending";
857
+ const needsApproval =
858
+ proposal.targetType != null && proposal.targetType !== "personal-memory";
859
+ const previewQuery = useActionQuery<DreamProposalPreview>(
860
+ "preview-dream-proposal",
861
+ { id: proposal.id },
862
+ { enabled: open, staleTime: 0 },
863
+ );
864
+ const preview = previewQuery.data;
865
+
866
+ return (
867
+ <div className="rounded-lg border bg-card">
868
+ <div className="flex flex-col gap-3 border-b px-4 py-3 md:flex-row md:items-start md:justify-between">
869
+ <div className="min-w-0">
870
+ <div className="flex flex-wrap items-center gap-2">
871
+ <StatusBadge status={proposal.status} />
872
+ <Badge variant="outline" className="font-mono">
873
+ {proposalTarget(proposal)}
874
+ </Badge>
875
+ {proposal.risk ? (
876
+ <Badge variant="secondary" className="capitalize">
877
+ {proposal.risk} risk
878
+ </Badge>
879
+ ) : null}
880
+ </div>
881
+ <div className="mt-2 text-sm font-medium text-foreground">
882
+ {proposal.title || proposal.summary || proposal.id}
883
+ </div>
884
+ {proposal.summary && proposal.title ? (
885
+ <div className="mt-1 text-xs leading-relaxed text-muted-foreground">
886
+ {proposal.summary}
887
+ </div>
888
+ ) : null}
889
+ </div>
890
+ <div className="flex shrink-0 gap-2">
891
+ <Sheet open={open} onOpenChange={setOpen}>
892
+ <SheetTrigger asChild>
893
+ <Button size="sm" variant={canAct ? "default" : "outline"}>
894
+ <IconFileDiff size={14} className="mr-1.5" />
895
+ Review
896
+ </Button>
897
+ </SheetTrigger>
898
+ <SheetContent className="flex w-full flex-col p-0 sm:max-w-3xl">
899
+ <SheetHeader className="border-b px-5 py-4">
900
+ <div className="flex flex-wrap items-center gap-2 pr-8">
901
+ <StatusBadge status={proposal.status} />
902
+ <Badge variant="outline" className="font-mono">
903
+ {preview?.target?.path || proposalTarget(proposal)}
904
+ </Badge>
905
+ <Badge variant="secondary" className="capitalize">
906
+ {preview?.operation || "review"}
907
+ </Badge>
908
+ {preview?.approval?.willRequestApproval ? (
909
+ <Badge variant="secondary">Approval request</Badge>
910
+ ) : null}
911
+ </div>
912
+ <SheetTitle className="mt-2 text-base">
913
+ {proposal.title || proposal.summary || proposal.id}
914
+ </SheetTitle>
915
+ <SheetDescription>
916
+ {proposal.summary ||
917
+ "Review the target, evidence, and proposed content before applying this dream proposal."}
918
+ </SheetDescription>
919
+ </SheetHeader>
920
+
921
+ <ScrollArea className="min-h-0 flex-1">
922
+ <div className="space-y-5 p-5">
923
+ {previewQuery.error ? (
924
+ <QueryState
925
+ error={previewQuery.error}
926
+ label="Could not preview proposal"
927
+ />
928
+ ) : null}
929
+ {previewQuery.isLoading ? <ProposalSkeleton /> : null}
930
+
931
+ <div className="grid gap-3 sm:grid-cols-2">
932
+ <div className="rounded-lg border bg-muted/20 p-3">
933
+ <div className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
934
+ Target
935
+ </div>
936
+ <div className="mt-1 break-all font-mono text-xs text-foreground">
937
+ {preview?.target?.path || proposalTarget(proposal)}
938
+ </div>
939
+ <div className="mt-2 flex flex-wrap gap-1.5">
940
+ <Badge variant="outline">
941
+ {preview?.target?.type ||
942
+ proposal.targetType ||
943
+ "memory"}
944
+ </Badge>
945
+ {preview?.targetExists ? (
946
+ <Badge variant="secondary">Existing target</Badge>
947
+ ) : (
948
+ <Badge variant="secondary">New target</Badge>
949
+ )}
950
+ </div>
951
+ </div>
952
+ <div className="rounded-lg border bg-muted/20 p-3">
953
+ <div className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
954
+ Review gate
955
+ </div>
956
+ <div className="mt-1 text-xs leading-relaxed text-foreground">
957
+ {preview?.approval?.willRequestApproval
958
+ ? "Applying will create a Dispatch approval request."
959
+ : needsApproval
960
+ ? "Applying writes a shared/workspace resource because approvals are disabled."
961
+ : "Applying writes personal memory directly."}
962
+ </div>
963
+ <div className="mt-2 flex flex-wrap gap-1.5">
964
+ {proposal.risk ? (
965
+ <Badge variant="outline" className="capitalize">
966
+ {proposal.risk} risk
967
+ </Badge>
968
+ ) : null}
969
+ {proposal.confidence != null ? (
970
+ <Badge variant="outline">
971
+ {proposal.confidence}% confidence
972
+ </Badge>
973
+ ) : null}
974
+ </div>
975
+ </div>
976
+ </div>
977
+
978
+ {proposal.rationale ? (
979
+ <div>
980
+ <div className="text-xs font-medium text-foreground">
981
+ Rationale
982
+ </div>
983
+ <div className="mt-1 text-xs leading-relaxed text-muted-foreground">
984
+ {proposal.rationale}
985
+ </div>
986
+ </div>
987
+ ) : null}
988
+
989
+ <Separator />
990
+
991
+ <div className="grid gap-4 lg:grid-cols-2">
992
+ <div>
993
+ <div className="mb-2 text-xs font-medium text-foreground">
994
+ Current target
995
+ </div>
996
+ {preview?.currentContent ? (
997
+ <RawBlock value={preview.currentContent} />
998
+ ) : (
999
+ <EmptyPanel
1000
+ title="No existing content"
1001
+ description="This proposal would create a new target or append to an empty target."
1002
+ />
1003
+ )}
1004
+ </div>
1005
+ <div>
1006
+ <div className="mb-2 text-xs font-medium text-foreground">
1007
+ Proposed content
1008
+ </div>
1009
+ <RawBlock
1010
+ value={preview?.proposedContent || proposal.content}
1011
+ />
1012
+ </div>
1013
+ </div>
1014
+
1015
+ <Separator />
1016
+
1017
+ <div>
1018
+ <div className="mb-2 text-xs font-medium text-foreground">
1019
+ Evidence
1020
+ </div>
1021
+ {sourceRunIds.length > 0 ? (
1022
+ <div className="mb-2 flex flex-wrap gap-1.5">
1023
+ {sourceRunIds.map((id) => (
1024
+ <Badge
1025
+ key={id}
1026
+ variant="outline"
1027
+ className="font-mono"
1028
+ >
1029
+ {id}
1030
+ </Badge>
1031
+ ))}
1032
+ </div>
1033
+ ) : null}
1034
+ {evidence.length > 0 ? (
1035
+ <div className="space-y-2">
1036
+ {evidence.map((item, index) => (
1037
+ <div
1038
+ key={item.id || `${proposal.id}-review-${index}`}
1039
+ className="rounded-md border bg-muted/20 px-3 py-2"
1040
+ >
1041
+ <div className="flex flex-wrap items-center justify-between gap-2">
1042
+ <div className="text-xs font-medium text-foreground">
1043
+ {evidenceLabel(item, index)}
1044
+ </div>
1045
+ <div className="text-[11px] text-muted-foreground">
1046
+ {formatDate(item.createdAt)}
1047
+ </div>
1048
+ </div>
1049
+ <div className="mt-1 text-xs leading-relaxed text-muted-foreground">
1050
+ {item.quote ||
1051
+ item.snippet ||
1052
+ item.summary ||
1053
+ "No text"}
1054
+ </div>
1055
+ </div>
1056
+ ))}
1057
+ </div>
1058
+ ) : (
1059
+ <EmptyPanel
1060
+ title="No structured evidence"
1061
+ description="The proposal did not include compact evidence records."
1062
+ />
1063
+ )}
1064
+ </div>
1065
+
1066
+ {canAct ? (
1067
+ <div className="space-y-2">
1068
+ <Label htmlFor={`reject-${proposal.id}`}>
1069
+ Rejection reason
1070
+ </Label>
1071
+ <Textarea
1072
+ id={`reject-${proposal.id}`}
1073
+ value={rejectReason}
1074
+ onChange={(event) =>
1075
+ setRejectReason(event.target.value)
1076
+ }
1077
+ placeholder="Optional note for the audit log"
1078
+ />
1079
+ </div>
1080
+ ) : null}
1081
+ </div>
1082
+ </ScrollArea>
1083
+
1084
+ <SheetFooter className="gap-2 border-t px-5 py-4">
1085
+ <Button
1086
+ variant="outline"
1087
+ disabled={!canAct || applying || rejecting}
1088
+ onClick={() => {
1089
+ onReject(rejectReason.trim() || undefined);
1090
+ setOpen(false);
1091
+ }}
1092
+ >
1093
+ {rejecting ? (
1094
+ <Spinner className="mr-1.5 size-3.5" />
1095
+ ) : (
1096
+ <IconX size={14} className="mr-1.5" />
1097
+ )}
1098
+ Reject
1099
+ </Button>
1100
+ <Button
1101
+ disabled={!canAct || applying || rejecting}
1102
+ onClick={() => {
1103
+ onApply();
1104
+ setOpen(false);
1105
+ }}
1106
+ >
1107
+ {applying ? (
1108
+ <Spinner className="mr-1.5 size-3.5" />
1109
+ ) : (
1110
+ <IconCheck size={14} className="mr-1.5" />
1111
+ )}
1112
+ {needsApproval ? "Request approval" : "Apply"}
1113
+ </Button>
1114
+ </SheetFooter>
1115
+ </SheetContent>
1116
+ </Sheet>
1117
+ </div>
1118
+ </div>
1119
+
1120
+ <Accordion type="multiple" className="px-4">
1121
+ <AccordionItem value="evidence" className="border-b-0">
1122
+ <AccordionTrigger className="py-3 text-xs hover:no-underline">
1123
+ Evidence and provenance
1124
+ </AccordionTrigger>
1125
+ <AccordionContent className="space-y-3 pb-4">
1126
+ {sourceRunIds.length > 0 ? (
1127
+ <div className="flex flex-wrap gap-1.5">
1128
+ {sourceRunIds.map((id) => (
1129
+ <Badge key={id} variant="outline" className="font-mono">
1130
+ {id}
1131
+ </Badge>
1132
+ ))}
1133
+ </div>
1134
+ ) : null}
1135
+ {evidence.length > 0 ? (
1136
+ <div className="space-y-2">
1137
+ {evidence.map((item, index) => (
1138
+ <div
1139
+ key={item.id || `${proposal.id}-evidence-${index}`}
1140
+ className="rounded-md border bg-muted/20 px-3 py-2"
1141
+ >
1142
+ <div className="flex flex-wrap items-center justify-between gap-2">
1143
+ <div className="text-xs font-medium text-foreground">
1144
+ {evidenceLabel(item, index)}
1145
+ </div>
1146
+ <div className="text-[11px] text-muted-foreground">
1147
+ {formatDate(item.createdAt)}
1148
+ </div>
1149
+ </div>
1150
+ <div className="mt-1 text-xs leading-relaxed text-muted-foreground">
1151
+ {item.quote || item.snippet || item.summary || "No text"}
1152
+ </div>
1153
+ </div>
1154
+ ))}
1155
+ </div>
1156
+ ) : (
1157
+ <div className="text-xs text-muted-foreground">
1158
+ No structured evidence attached yet.
1159
+ </div>
1160
+ )}
1161
+ </AccordionContent>
1162
+ </AccordionItem>
1163
+ {proposal.content ? (
1164
+ <AccordionItem value="content" className="border-b-0">
1165
+ <AccordionTrigger className="py-3 text-xs hover:no-underline">
1166
+ Proposed content
1167
+ </AccordionTrigger>
1168
+ <AccordionContent className="pb-4">
1169
+ <RawBlock value={proposal.content} />
1170
+ </AccordionContent>
1171
+ </AccordionItem>
1172
+ ) : null}
1173
+ </Accordion>
1174
+ </div>
1175
+ );
1176
+ }
1177
+
1178
+ export default function DreamsRoute() {
1179
+ const [searchParams, setSearchParams] = useSearchParams();
1180
+ const [selectedDreamId, setSelectedDreamId] = useState<string | null>(
1181
+ searchParams.get("dreamId"),
1182
+ );
1183
+ const [settingsOpen, setSettingsOpen] = useState(false);
1184
+ const [settingsDraft, setSettingsDraft] = useState<DreamSettingsDraft>(() =>
1185
+ dreamSettingsToDraft(null),
1186
+ );
1187
+
1188
+ const dreamsQuery = useActionQuery<ListDreamsResponse>(
1189
+ "list-dreams",
1190
+ { limit: 25 },
1191
+ { staleTime: 15_000 },
1192
+ );
1193
+ const candidatesQuery = useActionQuery<ListCandidatesResponse>(
1194
+ "list-dream-candidates",
1195
+ {
1196
+ limit: 25,
1197
+ sourceTimeoutMs: 30_000,
1198
+ sourceConcurrency: 2,
1199
+ sourceStartStaggerMs: 250,
1200
+ threadConcurrency: 3,
1201
+ threadTimeoutMs: 8_000,
1202
+ },
1203
+ { staleTime: 15_000 },
1204
+ );
1205
+ const dreamSettingsQuery = useActionQuery<DreamSettings>(
1206
+ "get-dream-settings",
1207
+ {},
1208
+ { staleTime: 30_000 },
1209
+ );
1210
+ const dreamDetailQuery = useActionQuery<GetDreamResponse>(
1211
+ "get-dream",
1212
+ { id: selectedDreamId ?? "" },
1213
+ { enabled: !!selectedDreamId, staleTime: 10_000 },
1214
+ );
1215
+
1216
+ const dreams = useMemo(
1217
+ () =>
1218
+ normalizeArray<DreamPass>(dreamsQuery.data, [
1219
+ "dreams",
1220
+ "items",
1221
+ "results",
1222
+ ]),
1223
+ [dreamsQuery.data],
1224
+ );
1225
+ const candidates = useMemo(
1226
+ () =>
1227
+ normalizeArray<CandidateRun>(candidatesQuery.data, [
1228
+ "candidates",
1229
+ "items",
1230
+ "results",
1231
+ ]),
1232
+ [candidatesQuery.data],
1233
+ );
1234
+ const candidateSourceHealth = useMemo(
1235
+ () => normalizeSourceHealth(candidatesQuery.data),
1236
+ [candidatesQuery.data],
1237
+ );
1238
+
1239
+ useEffect(() => {
1240
+ const urlDreamId = searchParams.get("dreamId");
1241
+ if (urlDreamId && urlDreamId !== selectedDreamId) {
1242
+ setSelectedDreamId(urlDreamId);
1243
+ return;
1244
+ }
1245
+ if (selectedDreamId && dreams.some((dream) => dream.id === selectedDreamId))
1246
+ return;
1247
+ const nextId = dreams[0]?.id ?? null;
1248
+ setSelectedDreamId(nextId);
1249
+ if (nextId && nextId !== urlDreamId) {
1250
+ const next = new URLSearchParams(searchParams);
1251
+ next.set("dreamId", nextId);
1252
+ setSearchParams(next, { replace: true });
1253
+ }
1254
+ }, [dreams, searchParams, selectedDreamId, setSearchParams]);
1255
+
1256
+ function selectDream(dreamId: string) {
1257
+ setSelectedDreamId(dreamId);
1258
+ const next = new URLSearchParams(searchParams);
1259
+ next.set("dreamId", dreamId);
1260
+ setSearchParams(next, { replace: true });
1261
+ }
1262
+
1263
+ const createDream = useActionMutation<
1264
+ CreateDreamReportResult,
1265
+ CreateDreamReportParams
1266
+ >("create-dream-report", {
1267
+ onSuccess: (result) => {
1268
+ const nextId = resultDreamId(result);
1269
+ if (nextId) selectDream(nextId);
1270
+ toast.success("Dream report created");
1271
+ },
1272
+ onError: (err) => toast.error(String(err)),
1273
+ });
1274
+
1275
+ const applyProposal = useActionMutation<unknown, ProposalMutationParams>(
1276
+ "apply-dream-proposal",
1277
+ {
1278
+ onSuccess: (result) => {
1279
+ toast.success(
1280
+ isApprovalRequestResult(result)
1281
+ ? "Approval requested"
1282
+ : "Proposal applied",
1283
+ );
1284
+ dreamDetailQuery.refetch();
1285
+ dreamsQuery.refetch();
1286
+ },
1287
+ onError: (err) => toast.error(String(err)),
1288
+ },
1289
+ );
1290
+
1291
+ const rejectProposal = useActionMutation<unknown, ProposalMutationParams>(
1292
+ "reject-dream-proposal",
1293
+ {
1294
+ onSuccess: () => {
1295
+ toast.success("Proposal rejected");
1296
+ dreamDetailQuery.refetch();
1297
+ dreamsQuery.refetch();
1298
+ },
1299
+ onError: (err) => toast.error(String(err)),
1300
+ },
1301
+ );
1302
+ const ensureDreamSchedule = useActionMutation<
1303
+ unknown,
1304
+ Partial<DreamSettings>
1305
+ >("ensure-dream-job", {
1306
+ onSuccess: () => {
1307
+ toast.success("Dream schedule updated");
1308
+ dreamSettingsQuery.refetch();
1309
+ },
1310
+ onError: (err) => toast.error(String(err)),
1311
+ });
1312
+ const saveDreamSettings = useActionMutation<
1313
+ DreamSettings,
1314
+ Partial<DreamSettings>
1315
+ >("set-dream-settings", {
1316
+ onSuccess: (settings) => {
1317
+ toast.success("Dream settings saved");
1318
+ setSettingsDraft(dreamSettingsToDraft(settings));
1319
+ setSettingsOpen(false);
1320
+ dreamSettingsQuery.refetch();
1321
+ candidatesQuery.refetch();
1322
+ },
1323
+ onError: (err) => toast.error(String(err)),
1324
+ });
1325
+
1326
+ const detail = dreamDetailQuery.data ?? null;
1327
+ const dreamSettings = dreamSettingsQuery.data ?? null;
1328
+ const selectedDream =
1329
+ detail?.dream ?? dreams.find((dream) => dream.id === selectedDreamId);
1330
+ const proposals: DreamProposal[] = detail?.proposals ?? [];
1331
+ const inspectedRuns: CandidateRun[] =
1332
+ detail?.inspectedRuns ?? detail?.candidates ?? [];
1333
+ const evidenceItems: DreamEvidence[] = detail?.evidence ?? [];
1334
+ const selectedSourceHealth: DreamSourceHealth[] =
1335
+ selectedDream?.sourceHealth ?? [];
1336
+ const pendingProposalCount = proposals.filter(
1337
+ (proposal) =>
1338
+ String(proposal.status || "pending").toLowerCase() === "pending",
1339
+ ).length;
1340
+ const appliedProposalCount = proposals.filter(
1341
+ (proposal) => String(proposal.status || "").toLowerCase() === "applied",
1342
+ ).length;
1343
+
1344
+ useEffect(() => {
1345
+ if (dreamSettings && !settingsOpen) {
1346
+ setSettingsDraft(dreamSettingsToDraft(dreamSettings));
1347
+ }
1348
+ }, [dreamSettings, settingsOpen]);
1349
+
1350
+ function handleSettingsOpenChange(open: boolean) {
1351
+ if (open) {
1352
+ setSettingsDraft(dreamSettingsToDraft(dreamSettings));
1353
+ }
1354
+ setSettingsOpen(open);
1355
+ }
1356
+
1357
+ function saveSettings() {
1358
+ const update = dreamSettingsUpdateFromDraft(settingsDraft);
1359
+ if (!update.schedule) {
1360
+ toast.error("Add a cron schedule before saving");
1361
+ return;
1362
+ }
1363
+ saveDreamSettings.mutate(update);
1364
+ }
1365
+
1366
+ function runDream(scanAllSources = false) {
1367
+ createDream.mutate({
1368
+ sourceId: scanAllSources ? "all" : "current",
1369
+ allSources: scanAllSources,
1370
+ limit: scanAllSources
1371
+ ? 8
1372
+ : candidates.length > 0
1373
+ ? candidates.length
1374
+ : 20,
1375
+ sourceTimeoutMs: dreamSettings?.sourceTimeoutMs ?? 30_000,
1376
+ sourceConcurrency: dreamSettings?.sourceConcurrency ?? 2,
1377
+ sourceStartStaggerMs: dreamSettings?.sourceStartStaggerMs ?? 250,
1378
+ threadConcurrency: dreamSettings?.threadConcurrency ?? 3,
1379
+ threadTimeoutMs: dreamSettings?.threadTimeoutMs ?? 8_000,
1380
+ });
1381
+ }
1382
+
1383
+ function ensureSchedule() {
1384
+ ensureDreamSchedule.mutate({
1385
+ schedule: dreamSettings?.schedule,
1386
+ sourceId: dreamSettings?.sourceId ?? "all",
1387
+ sourceIds: dreamSettings?.sourceIds,
1388
+ allSources: dreamSettings?.allSources ?? true,
1389
+ query: dreamSettings?.query ?? undefined,
1390
+ limit: dreamSettings?.limit ?? 8,
1391
+ sourceTimeoutMs: dreamSettings?.sourceTimeoutMs ?? 30_000,
1392
+ sourceConcurrency: dreamSettings?.sourceConcurrency ?? 2,
1393
+ sourceStartStaggerMs: dreamSettings?.sourceStartStaggerMs ?? 250,
1394
+ threadConcurrency: dreamSettings?.threadConcurrency ?? 3,
1395
+ threadTimeoutMs: dreamSettings?.threadTimeoutMs ?? 8_000,
1396
+ minCandidateCount: dreamSettings?.minCandidateCount ?? 1,
1397
+ });
1398
+ }
1399
+
1400
+ return (
1401
+ <DispatchShell
1402
+ title="Dreams"
1403
+ description="Review agent runs, propose memory improvements, and apply evidence-backed learning changes."
1404
+ >
1405
+ <div className="space-y-4">
1406
+ <div className="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
1407
+ <div className="grid flex-1 gap-2 sm:grid-cols-2 xl:grid-cols-4">
1408
+ <StatTile
1409
+ label="Dream passes"
1410
+ value={dreams.length}
1411
+ icon={IconBrain}
1412
+ />
1413
+ <StatTile
1414
+ label="Pending proposals"
1415
+ value={pendingProposalCount}
1416
+ icon={IconCircleDashed}
1417
+ />
1418
+ <StatTile
1419
+ label="Candidate runs"
1420
+ value={candidates.length}
1421
+ icon={IconClock}
1422
+ />
1423
+ <StatTile
1424
+ label="Inspected threads"
1425
+ value={selectedDream ? dreamInspectedCount(selectedDream) : 0}
1426
+ icon={IconCheck}
1427
+ />
1428
+ </div>
1429
+ <div className="flex shrink-0 flex-wrap gap-2">
1430
+ {dreamSettings ? (
1431
+ <Badge variant="outline" className="h-9 px-3">
1432
+ {dreamSettings.enabled ? "Enabled" : "Paused"} ·{" "}
1433
+ {dreamSettings.allSources
1434
+ ? "All sources"
1435
+ : dreamSettings.sourceId}{" "}
1436
+ · {dreamSettings.schedule}
1437
+ </Badge>
1438
+ ) : null}
1439
+ <DreamSettingsSheet
1440
+ open={settingsOpen}
1441
+ onOpenChange={handleSettingsOpenChange}
1442
+ draft={settingsDraft}
1443
+ onDraftChange={setSettingsDraft}
1444
+ onSave={saveSettings}
1445
+ saving={saveDreamSettings.isPending}
1446
+ loading={dreamSettingsQuery.isLoading}
1447
+ />
1448
+ <Button
1449
+ variant="outline"
1450
+ onClick={() => {
1451
+ dreamsQuery.refetch();
1452
+ candidatesQuery.refetch();
1453
+ if (selectedDreamId) dreamDetailQuery.refetch();
1454
+ }}
1455
+ >
1456
+ <IconRefresh size={15} className="mr-1.5" />
1457
+ Refresh
1458
+ </Button>
1459
+ <Button
1460
+ variant="outline"
1461
+ onClick={ensureSchedule}
1462
+ disabled={ensureDreamSchedule.isPending}
1463
+ >
1464
+ {ensureDreamSchedule.isPending ? (
1465
+ <Spinner className="mr-1.5 size-3.5" />
1466
+ ) : (
1467
+ <IconCalendarTime size={15} className="mr-1.5" />
1468
+ )}
1469
+ Ensure schedule
1470
+ </Button>
1471
+ <Button
1472
+ variant="outline"
1473
+ onClick={() => runDream(true)}
1474
+ disabled={createDream.isPending}
1475
+ >
1476
+ {createDream.isPending ? (
1477
+ <Spinner className="mr-1.5 size-3.5" />
1478
+ ) : (
1479
+ <IconDatabase size={15} className="mr-1.5" />
1480
+ )}
1481
+ Run all sources
1482
+ </Button>
1483
+ <Button
1484
+ onClick={() => runDream(false)}
1485
+ disabled={createDream.isPending}
1486
+ >
1487
+ {createDream.isPending ? (
1488
+ <Spinner className="mr-1.5 size-3.5" />
1489
+ ) : (
1490
+ <IconPlayerPlay size={15} className="mr-1.5" />
1491
+ )}
1492
+ Run dream
1493
+ </Button>
1494
+ </div>
1495
+ </div>
1496
+
1497
+ <div className="grid gap-4 xl:grid-cols-[280px_minmax(0,1fr)_380px]">
1498
+ <section className="rounded-lg border bg-card">
1499
+ <div className="border-b px-4 py-3">
1500
+ <div className="text-sm font-semibold text-foreground">
1501
+ Recent passes
1502
+ </div>
1503
+ <div className="mt-1 text-xs text-muted-foreground">
1504
+ Reports generated from prior agent activity.
1505
+ </div>
1506
+ </div>
1507
+ <div className="max-h-[720px] overflow-auto p-3">
1508
+ <QueryState
1509
+ error={dreamsQuery.error}
1510
+ label="Could not load dream passes"
1511
+ />
1512
+ {dreamsQuery.isLoading ? <DreamListSkeleton /> : null}
1513
+ {!dreamsQuery.isLoading && !dreamsQuery.error ? (
1514
+ dreams.length > 0 ? (
1515
+ <div className="space-y-2">
1516
+ {dreams.map((dream, index) => {
1517
+ const selected = dream.id === selectedDreamId;
1518
+ return (
1519
+ <button
1520
+ key={dream.id}
1521
+ type="button"
1522
+ onClick={() => selectDream(dream.id)}
1523
+ className={cn(
1524
+ "w-full rounded-lg border px-3 py-3 text-left transition-colors",
1525
+ selected
1526
+ ? "border-foreground bg-muted"
1527
+ : "bg-background hover:border-foreground/30 hover:bg-muted/40",
1528
+ )}
1529
+ >
1530
+ <div className="flex items-start justify-between gap-2">
1531
+ <div className="min-w-0">
1532
+ <div className="truncate text-sm font-medium text-foreground">
1533
+ {dreamLabel(dream, index)}
1534
+ </div>
1535
+ <div className="mt-1 truncate font-mono text-[11px] text-muted-foreground">
1536
+ {dream.id}
1537
+ </div>
1538
+ </div>
1539
+ <StatusBadge status={dream.status} />
1540
+ </div>
1541
+ <div className="mt-2 line-clamp-2 text-xs leading-relaxed text-muted-foreground">
1542
+ {dream.summary || "No summary yet."}
1543
+ </div>
1544
+ <div className="mt-3 flex flex-wrap gap-1.5">
1545
+ <Badge variant="outline">
1546
+ {plural(dreamProposalCount(dream), "proposal")}
1547
+ </Badge>
1548
+ <Badge variant="outline">
1549
+ {plural(dreamInspectedCount(dream), "run")}
1550
+ </Badge>
1551
+ </div>
1552
+ <div className="mt-2 text-[11px] text-muted-foreground">
1553
+ {compactDate(
1554
+ dream.completedAt ??
1555
+ dream.updatedAt ??
1556
+ dream.startedAt ??
1557
+ dream.createdAt,
1558
+ )}
1559
+ </div>
1560
+ </button>
1561
+ );
1562
+ })}
1563
+ </div>
1564
+ ) : (
1565
+ <EmptyPanel
1566
+ title="No dreams yet"
1567
+ description="Run the first dream pass to review recent agent history and generate proposed memory changes."
1568
+ />
1569
+ )
1570
+ ) : null}
1571
+ </div>
1572
+ </section>
1573
+
1574
+ <section className="min-w-0 rounded-lg border bg-card">
1575
+ <div className="border-b px-4 py-3">
1576
+ <div className="flex flex-wrap items-center justify-between gap-3">
1577
+ <div className="min-w-0">
1578
+ <div className="truncate text-sm font-semibold text-foreground">
1579
+ {selectedDream
1580
+ ? selectedDream.title || selectedDream.id
1581
+ : "Dream detail"}
1582
+ </div>
1583
+ <div className="mt-1 text-xs text-muted-foreground">
1584
+ {selectedDream
1585
+ ? `Completed ${formatDate(
1586
+ selectedDream.completedAt ??
1587
+ selectedDream.updatedAt ??
1588
+ selectedDream.createdAt,
1589
+ )}`
1590
+ : "Select a pass or run a new dream."}
1591
+ </div>
1592
+ </div>
1593
+ {selectedDream ? (
1594
+ <div className="flex flex-wrap gap-1.5">
1595
+ <StatusBadge status={selectedDream.status} />
1596
+ <Badge variant="outline">
1597
+ {plural(appliedProposalCount, "applied", "applied")}
1598
+ </Badge>
1599
+ </div>
1600
+ ) : null}
1601
+ </div>
1602
+ </div>
1603
+
1604
+ <div className="p-4">
1605
+ <QueryState
1606
+ error={dreamDetailQuery.error}
1607
+ label="Could not load dream detail"
1608
+ />
1609
+ {dreamDetailQuery.isLoading ? <ProposalSkeleton /> : null}
1610
+ {!selectedDreamId && !dreamDetailQuery.isLoading ? (
1611
+ <EmptyPanel
1612
+ title="Nothing selected"
1613
+ description="Choose a recent dream pass or run one from candidate agent runs."
1614
+ />
1615
+ ) : null}
1616
+ {selectedDreamId &&
1617
+ !dreamDetailQuery.isLoading &&
1618
+ !dreamDetailQuery.error ? (
1619
+ <Tabs defaultValue="proposals" className="w-full">
1620
+ <TabsList className="grid w-full grid-cols-3">
1621
+ <TabsTrigger value="proposals">Proposals</TabsTrigger>
1622
+ <TabsTrigger value="report">Report</TabsTrigger>
1623
+ <TabsTrigger value="sources">Sources</TabsTrigger>
1624
+ </TabsList>
1625
+
1626
+ <TabsContent value="proposals" className="mt-4">
1627
+ {proposals.length > 0 ? (
1628
+ <div className="space-y-3">
1629
+ {proposals.map((proposal) => (
1630
+ <ProposalCard
1631
+ key={proposal.id}
1632
+ proposal={proposal}
1633
+ applying={
1634
+ applyProposal.isPending &&
1635
+ applyProposal.variables?.id === proposal.id
1636
+ }
1637
+ rejecting={
1638
+ rejectProposal.isPending &&
1639
+ rejectProposal.variables?.id === proposal.id
1640
+ }
1641
+ onApply={() =>
1642
+ applyProposal.mutate({
1643
+ id: proposal.id,
1644
+ })
1645
+ }
1646
+ onReject={(reason) =>
1647
+ rejectProposal.mutate({
1648
+ id: proposal.id,
1649
+ reason,
1650
+ })
1651
+ }
1652
+ />
1653
+ ))}
1654
+ </div>
1655
+ ) : (
1656
+ <EmptyPanel
1657
+ title="No proposals"
1658
+ description="This dream did not produce reviewable memory, skill, job, or instruction changes."
1659
+ />
1660
+ )}
1661
+ </TabsContent>
1662
+
1663
+ <TabsContent value="report" className="mt-4">
1664
+ {detail?.report || detail?.summary ? (
1665
+ <RawBlock value={detail.report || detail.summary || ""} />
1666
+ ) : (
1667
+ <EmptyPanel
1668
+ title="No report text"
1669
+ description="The dream detail action did not return a report body."
1670
+ />
1671
+ )}
1672
+ </TabsContent>
1673
+
1674
+ <TabsContent value="sources" className="mt-4">
1675
+ {selectedSourceHealth.length > 0 ? (
1676
+ <div className="mb-4">
1677
+ <SourceHealthPanel sources={selectedSourceHealth} />
1678
+ </div>
1679
+ ) : null}
1680
+ {inspectedRuns.length > 0 || evidenceItems.length ? (
1681
+ <Accordion type="multiple" className="rounded-lg border">
1682
+ {inspectedRuns.map((run, index) => (
1683
+ <AccordionItem
1684
+ key={candidateId(run)}
1685
+ value={candidateId(run) || `run-${index}`}
1686
+ className="px-4"
1687
+ >
1688
+ <AccordionTrigger className="text-sm hover:no-underline">
1689
+ <span className="min-w-0 truncate text-left">
1690
+ {candidateLabel(run)}
1691
+ </span>
1692
+ </AccordionTrigger>
1693
+ <AccordionContent className="pb-4">
1694
+ <div className="grid gap-2 text-xs text-muted-foreground sm:grid-cols-2">
1695
+ <div>
1696
+ Thread:{" "}
1697
+ <span className="font-mono text-foreground">
1698
+ {run.thread?.id ?? run.threadId ?? "n/a"}
1699
+ </span>
1700
+ </div>
1701
+ <div>
1702
+ Run:{" "}
1703
+ <span className="font-mono text-foreground">
1704
+ {run.runId ?? run.id}
1705
+ </span>
1706
+ </div>
1707
+ <div>Owner: {candidateOwner(run)}</div>
1708
+ <div>Status: {candidateStatus(run)}</div>
1709
+ </div>
1710
+ {candidateSignals(run).length > 0 ? (
1711
+ <div className="mt-3 flex flex-wrap gap-1.5">
1712
+ {candidateSignals(run).map((signal) => (
1713
+ <Badge key={signal} variant="outline">
1714
+ {signal}
1715
+ </Badge>
1716
+ ))}
1717
+ </div>
1718
+ ) : null}
1719
+ </AccordionContent>
1720
+ </AccordionItem>
1721
+ ))}
1722
+ {evidenceItems.map((item, index) => (
1723
+ <AccordionItem
1724
+ key={item.id || `evidence-${index}`}
1725
+ value={item.id || `evidence-${index}`}
1726
+ className="px-4"
1727
+ >
1728
+ <AccordionTrigger className="text-sm hover:no-underline">
1729
+ {evidenceLabel(item, index)}
1730
+ </AccordionTrigger>
1731
+ <AccordionContent className="pb-4">
1732
+ <RawBlock value={item} />
1733
+ </AccordionContent>
1734
+ </AccordionItem>
1735
+ ))}
1736
+ </Accordion>
1737
+ ) : (
1738
+ <EmptyPanel
1739
+ title="No source runs"
1740
+ description="This dream has no structured source list yet."
1741
+ />
1742
+ )}
1743
+ </TabsContent>
1744
+ </Tabs>
1745
+ ) : null}
1746
+ </div>
1747
+ </section>
1748
+
1749
+ <section className="rounded-lg border bg-card">
1750
+ <div className="border-b px-4 py-3">
1751
+ <div>
1752
+ <div className="text-sm font-semibold text-foreground">
1753
+ Candidate runs
1754
+ </div>
1755
+ <div className="mt-1 text-xs text-muted-foreground">
1756
+ Grounded signals ready for review.
1757
+ </div>
1758
+ </div>
1759
+ </div>
1760
+ <div className="max-h-[720px] overflow-auto p-3">
1761
+ <QueryState
1762
+ error={candidatesQuery.error}
1763
+ label="Could not load candidates"
1764
+ />
1765
+ {candidatesQuery.isLoading ? <DreamListSkeleton /> : null}
1766
+ {!candidatesQuery.isLoading &&
1767
+ !candidatesQuery.error &&
1768
+ candidateSourceHealth.length > 0 ? (
1769
+ <div className="mb-3">
1770
+ <SourceHealthPanel sources={candidateSourceHealth} />
1771
+ </div>
1772
+ ) : null}
1773
+ {!candidatesQuery.isLoading && !candidatesQuery.error ? (
1774
+ candidates.length > 0 ? (
1775
+ <Table>
1776
+ <TableHeader>
1777
+ <TableRow>
1778
+ <TableHead>Run</TableHead>
1779
+ <TableHead>Signals</TableHead>
1780
+ <TableHead className="w-20 text-right">Score</TableHead>
1781
+ </TableRow>
1782
+ </TableHeader>
1783
+ <TableBody>
1784
+ {candidates.map((candidate) => {
1785
+ const id = candidateId(candidate);
1786
+ const signals = candidateSignals(candidate);
1787
+ return (
1788
+ <TableRow key={id}>
1789
+ <TableCell className="min-w-0 py-3">
1790
+ <div className="max-w-[230px] truncate text-sm font-medium text-foreground">
1791
+ {candidateLabel(candidate)}
1792
+ </div>
1793
+ <div className="mt-1 truncate font-mono text-[11px] text-muted-foreground">
1794
+ {candidate.thread?.id ??
1795
+ candidate.threadId ??
1796
+ candidate.runId ??
1797
+ id}
1798
+ </div>
1799
+ <div className="mt-1 text-[11px] text-muted-foreground">
1800
+ {candidateOwner(candidate)} ·{" "}
1801
+ {compactDate(candidateUpdatedAt(candidate))}
1802
+ </div>
1803
+ </TableCell>
1804
+ <TableCell className="py-3">
1805
+ <div className="mt-1 flex flex-wrap gap-1">
1806
+ <Badge variant="outline">
1807
+ {candidateStatus(candidate)}
1808
+ </Badge>
1809
+ {signals.slice(0, 2).map((signal) => (
1810
+ <Badge key={signal} variant="secondary">
1811
+ {signal}
1812
+ </Badge>
1813
+ ))}
1814
+ </div>
1815
+ </TableCell>
1816
+ <TableCell className="py-3 text-right text-sm tabular-nums text-muted-foreground">
1817
+ {candidate.score ?? "n/a"}
1818
+ </TableCell>
1819
+ </TableRow>
1820
+ );
1821
+ })}
1822
+ </TableBody>
1823
+ </Table>
1824
+ ) : (
1825
+ <EmptyPanel
1826
+ title="No candidates"
1827
+ description="No recent runs matched the dream candidate heuristics."
1828
+ />
1829
+ )
1830
+ ) : null}
1831
+ </div>
1832
+ </section>
1833
+ </div>
1834
+ </div>
1835
+ </DispatchShell>
1836
+ );
1837
+ }