@alook/app 0.0.117 → 0.0.118

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 (225) hide show
  1. package/bundled/email-worker/index.js +219 -207
  2. package/bundled/web/.open-next/.build/durable-objects/queue.js +5 -5
  3. package/bundled/web/.open-next/assets/BUILD_ID +1 -1
  4. package/bundled/web/.open-next/assets/_next/static/chunks/018pin4~.wsr7.js +1 -0
  5. package/bundled/web/.open-next/assets/_next/static/chunks/02-xuu3pg.f40.js +63 -0
  6. package/bundled/web/.open-next/assets/_next/static/chunks/028fjo.mmn73u.js +7 -0
  7. package/bundled/web/.open-next/assets/_next/static/chunks/{0tw05tsn2c~1m.js → 02j9o2uuj_oc8.js} +15 -15
  8. package/bundled/web/.open-next/assets/_next/static/chunks/058lb48xc0jj~.js +3 -0
  9. package/bundled/web/.open-next/assets/_next/static/chunks/0d3l0nm-qcu53.js +1 -0
  10. package/bundled/web/.open-next/assets/_next/static/chunks/0fw7efx7cy195.js +62 -0
  11. package/bundled/web/.open-next/assets/_next/static/chunks/0kk1judky0sd5.js +1 -0
  12. package/bundled/web/.open-next/assets/_next/static/chunks/{12bd-kqbplx9m.js → 0nj24~vvlulgh.js} +3 -3
  13. package/bundled/web/.open-next/assets/_next/static/chunks/0p87feis4b6ju.css +1 -0
  14. package/bundled/web/.open-next/assets/_next/static/chunks/0r8zw56k96o0q.js +1 -0
  15. package/bundled/web/.open-next/assets/_next/static/chunks/{042a4jeudcp22.js → 0u64son5-k77n.js} +1 -1
  16. package/bundled/web/.open-next/assets/_next/static/chunks/0xaxg3kh619o8.js +1 -0
  17. package/bundled/web/.open-next/assets/_next/static/chunks/{110sy1mmp9v~7.js → 0~lm_shhgzh8z.js} +1 -1
  18. package/bundled/web/.open-next/assets/_next/static/chunks/0~r1l8ej-9p~h.js +3 -0
  19. package/bundled/web/.open-next/assets/_next/static/chunks/{118ani.qejoy9.js → 12tz.n~x91ghm.js} +1 -1
  20. package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/_global-error.cache +1 -1
  21. package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/_not-found.cache +1 -1
  22. package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/device.cache +1 -1
  23. package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/privacy.cache +1 -1
  24. package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/sitemap.xml.cache +1 -1
  25. package/bundled/web/.open-next/cloudflare/cache-assets-manifest.sql +1 -1
  26. package/bundled/web/.open-next/cloudflare/init.js +1 -1
  27. package/bundled/web/.open-next/dynamodb-provider/dynamodb-cache.json +1 -1
  28. package/bundled/web/.open-next/middleware/handler.mjs +8 -8
  29. package/bundled/web/.open-next/server-functions/default/src/web/.next/BUILD_ID +1 -1
  30. package/bundled/web/.open-next/server-functions/default/src/web/.next/app-path-routes-manifest.json +1 -2
  31. package/bundled/web/.open-next/server-functions/default/src/web/.next/build-manifest.json +3 -3
  32. package/bundled/web/.open-next/server-functions/default/src/web/.next/prerender-manifest.json +3 -3
  33. package/bundled/web/.open-next/server-functions/default/src/web/.next/routes-manifest.json +8 -17
  34. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/invite/[token]/page_client-reference-manifest.js +1 -1
  35. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/studio/new/page_client-reference-manifest.js +1 -1
  36. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/activity/page/react-loadable-manifest.json +1 -1
  37. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/activity/page_client-reference-manifest.js +1 -1
  38. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/[convId]/page/react-loadable-manifest.json +1 -1
  39. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/[convId]/page_client-reference-manifest.js +1 -1
  40. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/page/react-loadable-manifest.json +1 -1
  41. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/page_client-reference-manifest.js +1 -1
  42. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/email/page/react-loadable-manifest.json +1 -1
  43. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/email/page_client-reference-manifest.js +1 -1
  44. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/files/page/react-loadable-manifest.json +1 -1
  45. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/files/page_client-reference-manifest.js +1 -1
  46. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/meetings/page/react-loadable-manifest.json +1 -1
  47. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/meetings/page_client-reference-manifest.js +1 -1
  48. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/page/react-loadable-manifest.json +1 -1
  49. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/page_client-reference-manifest.js +1 -1
  50. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/new/page/react-loadable-manifest.json +1 -1
  51. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/new/page_client-reference-manifest.js +1 -1
  52. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/page/react-loadable-manifest.json +1 -1
  53. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/page_client-reference-manifest.js +1 -1
  54. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/calendar/page/react-loadable-manifest.json +1 -1
  55. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/calendar/page_client-reference-manifest.js +1 -1
  56. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/flags/page/react-loadable-manifest.json +1 -1
  57. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/flags/page_client-reference-manifest.js +1 -1
  58. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/help/email-setup/page/react-loadable-manifest.json +1 -1
  59. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/help/email-setup/page_client-reference-manifest.js +1 -1
  60. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/home/page/react-loadable-manifest.json +1 -1
  61. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/home/page_client-reference-manifest.js +1 -1
  62. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/issues/page/react-loadable-manifest.json +1 -1
  63. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/issues/page_client-reference-manifest.js +1 -1
  64. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/page/react-loadable-manifest.json +1 -1
  65. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/page_client-reference-manifest.js +1 -1
  66. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/runtimes/page/react-loadable-manifest.json +1 -1
  67. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/runtimes/page_client-reference-manifest.js +1 -1
  68. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/settings/page/react-loadable-manifest.json +1 -1
  69. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/settings/page_client-reference-manifest.js +1 -1
  70. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/[traceId]/page/react-loadable-manifest.json +1 -1
  71. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/[traceId]/page_client-reference-manifest.js +1 -1
  72. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/page/react-loadable-manifest.json +1 -1
  73. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/page_client-reference-manifest.js +1 -1
  74. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/unread/page/react-loadable-manifest.json +1 -1
  75. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/unread/page_client-reference-manifest.js +1 -1
  76. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/workspaces/page_client-reference-manifest.js +1 -1
  77. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(auth)/sign-in/page_client-reference-manifest.js +1 -1
  78. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  79. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/chat-init/route.js +6 -7
  80. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/whitelist/route.js +7 -8
  81. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/route.js +4 -5
  82. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/active-task/route.js +7 -8
  83. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/init/route.js +6 -7
  84. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/messages/route.js +8 -9
  85. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/{conversations/[id]/buffered-messages/[messageId] → daemon/conversations/[id]/messages}/route.js +8 -8
  86. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/conversations/[id]/messages/route_client-reference-manifest.js +3 -0
  87. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/register/route.js +3 -4
  88. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/sweep/route.js +5 -7
  89. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/complete/route.js +6 -8
  90. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/fail/route.js +6 -8
  91. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/messages/route.js +3 -4
  92. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/start/route.js +6 -8
  93. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/supersede/route.js +6 -8
  94. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/poll/route.js +5 -7
  95. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/notify/route.js +2 -2
  96. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/[id]/comments/route.js +7 -8
  97. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/[id]/route.js +7 -8
  98. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/route.js +7 -8
  99. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/studios/route.js +7 -8
  100. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/tasks/[id]/retry/route.js +7 -8
  101. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/device/page_client-reference-manifest.js +1 -1
  102. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/page/react-loadable-manifest.json +2 -2
  103. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  105. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/templates/[id]/page_client-reference-manifest.js +1 -1
  106. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/templates/page_client-reference-manifest.js +1 -1
  107. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app-paths-manifest.json +1 -2
  108. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/05hd_server_app_api_daemon_conversations_[id]_messages_route_actions_0.iz1u1.js +3 -0
  109. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0-63.yt._.js +3 -0
  110. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__010~hln._.js +3 -0
  111. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__01pm5bg._.js +58 -70
  112. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__08oq0ro._.js +3 -0
  113. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0arm85_._.js +3 -0
  114. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0gp~w40._.js +3 -0
  115. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/{[root-of-the-server]__088o0os._.js → [root-of-the-server]__0hz_j32._.js} +2 -2
  116. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0i0ukpl._.js +58 -70
  117. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0j5fdu2._.js +58 -70
  118. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0syz.lm._.js +3 -0
  119. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/{[root-of-the-server]__0sf_9ve._.js → [root-of-the-server]__0vi97bn._.js} +2 -2
  120. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0x8e1~2._.js +3 -0
  121. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[turbopack]_runtime.js +38 -43
  122. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0.gkbx8._.js +3 -0
  123. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_00-p7_0._.js +3 -0
  124. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_03gwxos._.js +5 -0
  125. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_06mrt6t._.js +3 -0
  126. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_08xh_f8._.js +1 -1
  127. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0_21cs4._.js +3 -0
  128. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0huk3rm._.js +3 -0
  129. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0jj44iu._.js +3 -3
  130. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0m4uqwa._.js +3 -3
  131. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0mibx4k._.js +3 -3
  132. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0ow_nxn._.js +3 -0
  133. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0r.02hx._.js +3 -0
  134. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0thudj4._.js +3 -0
  135. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0wbaduy._.js +3 -0
  136. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0yzq1gx._.js +3 -0
  137. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0zyolvu._.js +1 -1
  138. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_12-_-5g._.js +3 -0
  139. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_12-v7sn._.js +3 -0
  140. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/src_0wkbw.-._.js +3 -0
  141. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__04mf.th._.js +54 -66
  142. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0e65njz._.js +54 -66
  143. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0i8fzgr._.js +1 -1
  144. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{[root-of-the-server]__10nperb._.js → [root-of-the-server]__0p4syi4._.js} +2 -2
  145. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[turbopack]_runtime.js +38 -43
  146. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{_0bti.y.._.js → _00ix2wb._.js} +1 -1
  147. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_04w2ll1._.js +65 -0
  148. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0_.06ux._.js +1 -1
  149. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{_0iiagkx._.js → _0c0t735._.js} +1 -1
  150. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0im0q-g._.js +9 -0
  151. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0r_ppn9._.js +1 -1
  152. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0vtcof8._.js +2 -2
  153. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{_0bt_5pi._.js → _13ya7_b._.js} +1 -1
  154. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_02vp72~._.js → node_modules__pnpm_00cke3h._.js} +1 -1
  155. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0y6wy4c._.js → node_modules__pnpm_088eule._.js} +1 -1
  156. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0.jtjpe._.js → node_modules__pnpm_0_gg4s6._.js} +1 -1
  157. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0k_ahqs._.js → node_modules__pnpm_0g4.m0t._.js} +1 -1
  158. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0j~49hk._.js → node_modules__pnpm_0lw6_x.._.js} +1 -1
  159. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0t783t_._.js → node_modules__pnpm_0mr.gag._.js} +1 -1
  160. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_04xzk.p._.js → node_modules__pnpm_0tuts0b._.js} +1 -1
  161. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{node_modules__pnpm_0i183cf._.js → node_modules__pnpm_0xykudd._.js} +1 -1
  162. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_0liq_10._.js +54 -66
  163. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_0~23g-y._.js +2 -2
  164. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_app_(app)_w_[slug]_agents_[id]_meetings_page_tsx_073~u~-._.js +1 -1
  165. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_lib_api_ts_0uf2r1p._.js +1 -1
  166. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-build-manifest.js +3 -3
  167. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-manifest.json +5 -5
  168. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.js +1 -1
  169. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.json +1 -1
  170. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs +469 -511
  171. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs.meta.json +983 -799
  172. package/bundled/web/.open-next/server-functions/default/src/web/index.mjs +5 -5
  173. package/bundled/web/migrations/0037_inbox_unread_table.sql +43 -0
  174. package/bundled/web/wrangler.toml +1 -1
  175. package/bundled/ws-do/index.js +174 -174
  176. package/dist/cli/index.js +355 -68
  177. package/dist/cli/session-runner.js +56 -9
  178. package/dist/index.js +23 -2
  179. package/package.json +1 -1
  180. package/bundled/web/.open-next/assets/_next/static/chunks/0_7t-ouonb08v.js +0 -3
  181. package/bundled/web/.open-next/assets/_next/static/chunks/0fme52sqdtk.p.js +0 -3
  182. package/bundled/web/.open-next/assets/_next/static/chunks/0h5tl-yh9wijv.js +0 -1
  183. package/bundled/web/.open-next/assets/_next/static/chunks/0j5gd-ljh6ao_.js +0 -62
  184. package/bundled/web/.open-next/assets/_next/static/chunks/0lus0pm79r-7o.js +0 -7
  185. package/bundled/web/.open-next/assets/_next/static/chunks/0m-e05qz5c6a..js +0 -1
  186. package/bundled/web/.open-next/assets/_next/static/chunks/0s-pai_2464mg.css +0 -1
  187. package/bundled/web/.open-next/assets/_next/static/chunks/0u8cu1dfn9~01.js +0 -63
  188. package/bundled/web/.open-next/assets/_next/static/chunks/0xg02n4bo4.1m.js +0 -1
  189. package/bundled/web/.open-next/assets/_next/static/chunks/18b_fy7re_rp..js +0 -1
  190. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/buffered-messages/[messageId]/route_client-reference-manifest.js +0 -3
  191. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/buffered-messages/route.js +0 -17
  192. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/buffered-messages/route_client-reference-manifest.js +0 -3
  193. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/00~o_app_api_conversations_[id]_buffered-messages_[messageId]_route_actions_0e338dt.js +0 -3
  194. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/05hd_server_app_api_conversations_[id]_buffered-messages_route_actions_0mf5n8a.js +0 -3
  195. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0d0_qit._.js +0 -3
  196. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_00_9pus._.js +0 -3
  197. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_02.f31i._.js +0 -5
  198. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_025fm6r._.js +0 -3
  199. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_03ju0js._.js +0 -3
  200. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_06imn.m._.js +0 -3
  201. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_07hpwgw._.js +0 -3
  202. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_08y2ta9._.js +0 -3
  203. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0_kfe3c._.js +0 -3
  204. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0ahwrti._.js +0 -3
  205. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0b4pq8.._.js +0 -3
  206. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0d6rwbr._.js +0 -3
  207. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0gqpz7w._.js +0 -3
  208. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0h-fa04._.js +0 -3
  209. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0il0z_b._.js +0 -3
  210. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0l1rr.g._.js +0 -3
  211. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0p_10om._.js +0 -3
  212. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0r04wj_._.js +0 -3
  213. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0ri6_n4._.js +0 -3
  214. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0zk1_mu._.js +0 -3
  215. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0zt3sdk._.js +0 -3
  216. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_102qunz._.js +0 -3
  217. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_12i.jt7._.js +0 -3
  218. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_13lep.0._.js +0 -3
  219. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/src_web_src_lib_services_0yvxfxt._.js +0 -3
  220. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0g~0u9h._.js +0 -65
  221. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0kv_hld._.js +0 -9
  222. /package/bundled/web/.open-next/assets/_next/static/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/_buildManifest.js +0 -0
  223. /package/bundled/web/.open-next/assets/_next/static/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/_clientMiddlewareManifest.js +0 -0
  224. /package/bundled/web/.open-next/assets/_next/static/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/_ssgManifest.js +0 -0
  225. /package/bundled/web/.open-next/cache/{FjNKGEvkF0L0MRIiOb2vT → odmmcsMVYHDGmqyrWQ3kc}/robots.txt.cache +0 -0
@@ -16966,7 +16966,7 @@ var init_zod = __esm({
16966
16966
  });
16967
16967
 
16968
16968
  // ../shared/src/schemas.ts
16969
- var TaskStatusSchema, ClaimedTaskRowSchema, ColleagueDataApiSchema, TaskAgentDataApiSchema, TaskApiBaseSchema, TaskSenderApiSchema, TaskApiSchema, HeartbeatRequestSchema, SweepRequestSchema, PollRequestSchema, FileRequestItemSchema, PollMeetingItemSchema, PollResponseSchema, DaemonPushMessageSchema, RegisterResponseSchema, DaemonRuntimeItemSchema, ActivateTokenRuntimeSchema, ActivateTokenRequestSchema, RegisterDaemonRequestSchema, DeregisterRequestSchema, CompleteTaskRequestSchema, FailTaskRequestSchema, MessageItemSchema, ReportMessagesRequestSchema, RepeatIntervalSchema, CreateCalendarEventRequestSchema, UpdateCalendarEventRequestSchema, DeleteCalendarEventRequestSchema, CalendarEventApiSchema, IssueStatusSchema, CreateIssueRequestSchema, UpdateIssueRequestSchema, CreateIssueCommentBodySchema, CreateIssueCommentRequestSchema, IssueCommentApiSchema, IssueApiSchema, CreateAgentLinkRequestSchema, UpdateAgentLinkRequestSchema, AddWhitelistRequestSchema, RuntimeConfigSchema, CreateAgentRequestSchema, UpdateAgentRequestSchema, CreateConversationRequestSchema, CreateMessageRequestSchema, CreateBufferedMessageRequestSchema, EmailAttachmentSchema, SendEmailRequestSchema, UpdateEmailStatusRequestSchema, MeetingInfoSchema, EmailNotifyRequestSchema, CreateEmailAccountSchema, UpdateEmailAccountSchema, TestEmailConnectionSchema, UpdateMemberRequestSchema, CreateWorkspaceRequestSchema, UpdateWorkspaceRequestSchema, DeleteWorkspaceRequestSchema, GrantAgentAccessRequestSchema, WorkspaceFileBrowseRequestSchema, WorkspaceFileEntrySchema, WorkspaceFileReportSchema, SkillEntrySchema, SkillItemSchema, SkillSyncRequestSchema, StudioMemberSchema, CreateStudioRequestSchema, RecruitAgentRequestSchema;
16969
+ var TaskStatusSchema, ClaimedTaskRowSchema, ColleagueDataApiSchema, TaskAgentDataApiSchema, TaskApiBaseSchema, TaskSenderApiSchema, TaskApiSchema, HeartbeatRequestSchema, SweepRequestSchema, PollRequestSchema, FileRequestItemSchema, PollMeetingItemSchema, PollResponseSchema, DaemonPushMessageSchema, RegisterResponseSchema, DaemonRuntimeItemSchema, ActivateTokenRuntimeSchema, ActivateTokenRequestSchema, RegisterDaemonRequestSchema, DeregisterRequestSchema, CompleteTaskRequestSchema, FailTaskRequestSchema, MessageItemSchema, ReportMessagesRequestSchema, RepeatIntervalSchema, CreateCalendarEventRequestSchema, UpdateCalendarEventRequestSchema, DeleteCalendarEventRequestSchema, CalendarEventApiSchema, IssueStatusSchema, CreateIssueRequestSchema, UpdateIssueRequestSchema, CreateIssueCommentBodySchema, CreateIssueCommentRequestSchema, IssueCommentApiSchema, IssueApiSchema, CreateAgentLinkRequestSchema, UpdateAgentLinkRequestSchema, UpsertAgentLinkRequestSchema, AddWhitelistRequestSchema, RuntimeConfigSchema, CreateAgentRequestSchema, UpdateAgentRequestSchema, CreateConversationRequestSchema, CreateMessageRequestSchema, AgentDmRequestSchema, EmailAttachmentSchema, SendEmailRequestSchema, UpdateEmailStatusRequestSchema, MeetingInfoSchema, EmailNotifyRequestSchema, CreateEmailAccountSchema, UpdateEmailAccountSchema, TestEmailConnectionSchema, UpdateMemberRequestSchema, CreateWorkspaceRequestSchema, UpdateWorkspaceRequestSchema, DeleteWorkspaceRequestSchema, GrantAgentAccessRequestSchema, WorkspaceFileBrowseRequestSchema, WorkspaceFileEntrySchema, WorkspaceFileReportSchema, SkillEntrySchema, SkillItemSchema, SkillSyncRequestSchema, StudioMemberSchema, CreateStudioRequestSchema, RecruitAgentRequestSchema;
16970
16970
  var init_schemas3 = __esm({
16971
16971
  "../shared/src/schemas.ts"() {
16972
16972
  "use strict";
@@ -17261,6 +17261,10 @@ var init_schemas3 = __esm({
17261
17261
  UpdateAgentLinkRequestSchema = external_exports.object({
17262
17262
  instruction: external_exports.string()
17263
17263
  });
17264
+ UpsertAgentLinkRequestSchema = external_exports.object({
17265
+ target_agent_id: external_exports.string().min(1, "target_agent_id is required"),
17266
+ instruction: external_exports.string()
17267
+ });
17264
17268
  AddWhitelistRequestSchema = external_exports.object({
17265
17269
  email: external_exports.string().email()
17266
17270
  });
@@ -17294,8 +17298,9 @@ var init_schemas3 = __esm({
17294
17298
  CreateMessageRequestSchema = external_exports.object({
17295
17299
  content: external_exports.string().min(1, "content is required")
17296
17300
  });
17297
- CreateBufferedMessageRequestSchema = external_exports.object({
17298
- content: external_exports.string().min(1, "content is required")
17301
+ AgentDmRequestSchema = external_exports.object({
17302
+ content: external_exports.string().min(1, "content is required"),
17303
+ task_id: external_exports.string().min(1).optional()
17299
17304
  });
17300
17305
  EmailAttachmentSchema = external_exports.object({
17301
17306
  key: external_exports.string().min(1),
@@ -24473,6 +24478,7 @@ __export(schema_exports, {
24473
24478
  conversationMap: () => conversationMap,
24474
24479
  conversationReadState: () => conversationReadState,
24475
24480
  emails: () => emails,
24481
+ inboxUnread: () => inboxUnread,
24476
24482
  issue: () => issue2,
24477
24483
  issueComment: () => issueComment,
24478
24484
  machine: () => machine,
@@ -24489,7 +24495,7 @@ __export(schema_exports, {
24489
24495
  workspaceFileRequest: () => workspaceFileRequest,
24490
24496
  workspaceInvite: () => workspaceInvite
24491
24497
  });
24492
- var user, session, account, verification, workspace, member, workspaceInvite, agentAccess, agentPin, agentSidebarOrder, machine, agentRuntime, agent, agentWhitelist, channel2, conversation, message, agentTaskQueue, issue2, issueComment, taskMessage, emails, calendarEvent, artifact, agentEmailAccount, meetingSession, machineToken, messageFlag, conversationMap, agentLink, conversationReadState, workspaceFileRequest, agentSkill;
24498
+ var user, session, account, verification, workspace, member, workspaceInvite, agentAccess, agentPin, agentSidebarOrder, machine, agentRuntime, agent, agentWhitelist, channel2, conversation, message, agentTaskQueue, issue2, issueComment, taskMessage, emails, calendarEvent, artifact, agentEmailAccount, meetingSession, machineToken, messageFlag, conversationMap, agentLink, conversationReadState, workspaceFileRequest, agentSkill, inboxUnread;
24493
24499
  var init_schema = __esm({
24494
24500
  "../shared/src/db/schema.ts"() {
24495
24501
  "use strict";
@@ -25139,6 +25145,26 @@ var init_schema = __esm({
25139
25145
  }).onDelete("cascade")
25140
25146
  ]
25141
25147
  );
25148
+ inboxUnread = sqliteTable(
25149
+ "inbox_unread",
25150
+ {
25151
+ id: text("id").primaryKey().$defaultFn(() => nanoid()),
25152
+ conversationId: text("conversation_id").notNull().references(() => conversation.id, { onDelete: "cascade" }),
25153
+ userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
25154
+ workspaceId: text("workspace_id").notNull(),
25155
+ agentId: text("agent_id").notNull(),
25156
+ taskId: text("task_id").notNull(),
25157
+ taskType: text("task_type").notNull(),
25158
+ taskStatus: text("task_status").notNull(),
25159
+ taskPrompt: text("task_prompt"),
25160
+ completedAt: text("completed_at").notNull(),
25161
+ latestMessageId: text("latest_message_id")
25162
+ },
25163
+ (t) => [
25164
+ unique("inbox_unread_conv_user").on(t.conversationId, t.userId),
25165
+ index("idx_inbox_unread_user_ws").on(t.userId, t.workspaceId, t.taskType, t.completedAt)
25166
+ ]
25167
+ );
25142
25168
  }
25143
25169
  });
25144
25170
 
@@ -25751,19 +25777,12 @@ var init_conversation = __esm({
25751
25777
  // ../shared/src/db/queries/message.ts
25752
25778
  var message_exports = {};
25753
25779
  __export(message_exports, {
25754
- activateNextBufferedMessage: () => activateNextBufferedMessage,
25755
- countBufferedMessages: () => countBufferedMessages,
25756
- createBufferedMessage: () => createBufferedMessage,
25757
25780
  createMessage: () => createMessage,
25758
- deleteAllBufferedMessages: () => deleteAllBufferedMessages,
25759
- deleteBufferedMessage: () => deleteBufferedMessage,
25760
25781
  getActiveMessageCount: () => getActiveMessageCount,
25761
25782
  getMessage: () => getMessage,
25762
25783
  getNewestMessageId: () => getNewestMessageId,
25763
- listBufferedMessages: () => listBufferedMessages,
25764
25784
  listMessages: () => listMessages,
25765
25785
  listMessagesAroundTask: () => listMessagesAroundTask,
25766
- revertToBuffered: () => revertToBuffered,
25767
25786
  updateMessageTaskId: () => updateMessageTaskId
25768
25787
  });
25769
25788
  async function createMessage(db, data) {
@@ -25819,62 +25838,6 @@ async function getMessage(db, id) {
25819
25838
  const rows = await db.select().from(message).where(eq(message.id, id));
25820
25839
  return rows[0] ?? null;
25821
25840
  }
25822
- async function createBufferedMessage(db, data) {
25823
- const rows = await db.insert(message).values({
25824
- conversationId: data.conversationId,
25825
- role: "user",
25826
- content: data.content,
25827
- status: "buffered",
25828
- attachmentIds: data.attachmentIds ?? null
25829
- }).returning();
25830
- return rows[0];
25831
- }
25832
- async function listBufferedMessages(db, conversationId) {
25833
- return db.select().from(message).where(
25834
- and(
25835
- eq(message.conversationId, conversationId),
25836
- eq(message.status, "buffered")
25837
- )
25838
- ).orderBy(asc(message.createdAt), asc(message.id));
25839
- }
25840
- async function activateNextBufferedMessage(db, conversationId) {
25841
- const candidates = await db.select().from(message).where(
25842
- and(
25843
- eq(message.conversationId, conversationId),
25844
- eq(message.status, "buffered")
25845
- )
25846
- ).orderBy(asc(message.createdAt), asc(message.id)).limit(1);
25847
- if (candidates.length === 0) return null;
25848
- const target = candidates[0];
25849
- const updated = await db.update(message).set({ status: "active", createdAt: new Date(Date.now() + 1e3).toISOString() }).where(and(eq(message.id, target.id), eq(message.status, "buffered"))).returning();
25850
- return updated[0] ?? null;
25851
- }
25852
- async function revertToBuffered(db, id) {
25853
- const rows = await db.update(message).set({ status: "buffered" }).where(and(eq(message.id, id), eq(message.status, "active"))).returning();
25854
- return rows[0] ?? null;
25855
- }
25856
- async function deleteBufferedMessage(db, id) {
25857
- const rows = await db.delete(message).where(and(eq(message.id, id), eq(message.status, "buffered"))).returning();
25858
- return rows[0] ?? null;
25859
- }
25860
- async function deleteAllBufferedMessages(db, conversationId) {
25861
- const rows = await db.delete(message).where(
25862
- and(
25863
- eq(message.conversationId, conversationId),
25864
- eq(message.status, "buffered")
25865
- )
25866
- ).returning();
25867
- return rows;
25868
- }
25869
- async function countBufferedMessages(db, conversationId) {
25870
- const rows = await db.select({ count: count3(message.id) }).from(message).where(
25871
- and(
25872
- eq(message.conversationId, conversationId),
25873
- eq(message.status, "buffered")
25874
- )
25875
- );
25876
- return rows[0]?.count ?? 0;
25877
- }
25878
25841
  async function updateMessageTaskId(db, messageId, taskId) {
25879
25842
  await db.update(message).set({ taskId }).where(eq(message.id, messageId));
25880
25843
  }
@@ -25921,13 +25884,6 @@ var init_message = __esm({
25921
25884
  __name(getActiveMessageCount, "getActiveMessageCount");
25922
25885
  __name(listMessages, "listMessages");
25923
25886
  __name(getMessage, "getMessage");
25924
- __name(createBufferedMessage, "createBufferedMessage");
25925
- __name(listBufferedMessages, "listBufferedMessages");
25926
- __name(activateNextBufferedMessage, "activateNextBufferedMessage");
25927
- __name(revertToBuffered, "revertToBuffered");
25928
- __name(deleteBufferedMessage, "deleteBufferedMessage");
25929
- __name(deleteAllBufferedMessages, "deleteAllBufferedMessages");
25930
- __name(countBufferedMessages, "countBufferedMessages");
25931
25887
  __name(updateMessageTaskId, "updateMessageTaskId");
25932
25888
  __name(listMessagesAroundTask, "listMessagesAroundTask");
25933
25889
  }
@@ -26644,9 +26600,9 @@ var init_task = __esm({
26644
26600
  // ../shared/src/db/queries/task-message.ts
26645
26601
  var task_message_exports = {};
26646
26602
  __export(task_message_exports, {
26647
- countTextMessagesByTaskIds: () => countTextMessagesByTaskIds,
26648
26603
  createTaskMessage: () => createTaskMessage,
26649
26604
  deleteTaskMessages: () => deleteTaskMessages,
26605
+ listTaskErrorMessages: () => listTaskErrorMessages,
26650
26606
  listTaskMessages: () => listTaskMessages,
26651
26607
  listTaskMessagesSince: () => listTaskMessagesSince
26652
26608
  });
@@ -26680,46 +26636,32 @@ async function listTaskMessages(db, taskId, workspaceId) {
26680
26636
  }
26681
26637
  return db.select().from(taskMessage).where(and(eq(taskMessage.taskId, taskId), notInArray(taskMessage.type, ["tool-result", "tool-use", "thinking"]))).orderBy(asc(taskMessage.seq));
26682
26638
  }
26639
+ async function listTaskErrorMessages(db, taskId, workspaceId) {
26640
+ return db.select({
26641
+ id: taskMessage.id,
26642
+ taskId: taskMessage.taskId,
26643
+ seq: taskMessage.seq,
26644
+ type: taskMessage.type,
26645
+ tool: taskMessage.tool,
26646
+ content: taskMessage.content,
26647
+ callId: taskMessage.callId,
26648
+ input: taskMessage.input,
26649
+ output: taskMessage.output,
26650
+ createdAt: taskMessage.createdAt
26651
+ }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
26652
+ and(
26653
+ eq(taskMessage.taskId, taskId),
26654
+ eq(agentTaskQueue.workspaceId, workspaceId),
26655
+ eq(taskMessage.type, "error")
26656
+ )
26657
+ ).orderBy(asc(taskMessage.seq));
26658
+ }
26683
26659
  async function listTaskMessagesSince(db, taskId, afterSeq) {
26684
26660
  return db.select().from(taskMessage).where(and(eq(taskMessage.taskId, taskId), gt(taskMessage.seq, afterSeq), notInArray(taskMessage.type, ["tool-result", "tool-use", "thinking"]))).orderBy(asc(taskMessage.seq));
26685
26661
  }
26686
26662
  async function deleteTaskMessages(db, taskId) {
26687
26663
  await db.delete(taskMessage).where(eq(taskMessage.taskId, taskId));
26688
26664
  }
26689
- async function countTextMessagesByTaskIds(db, taskIds, workspaceId) {
26690
- if (taskIds.length === 0) return [];
26691
- const chunkSize = SQLITE_MAX_PARAMS - FIXED_PARAMS;
26692
- if (taskIds.length <= chunkSize) {
26693
- const rows = await db.select({
26694
- taskId: taskMessage.taskId,
26695
- count: count3(taskMessage.id)
26696
- }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
26697
- and(
26698
- inArray(taskMessage.taskId, taskIds),
26699
- eq(agentTaskQueue.workspaceId, workspaceId),
26700
- eq(taskMessage.type, "text")
26701
- )
26702
- ).groupBy(taskMessage.taskId);
26703
- return rows.map((r) => ({ taskId: r.taskId, count: r.count }));
26704
- }
26705
- const results = [];
26706
- for (let i = 0; i < taskIds.length; i += chunkSize) {
26707
- const chunk = taskIds.slice(i, i + chunkSize);
26708
- const rows = await db.select({
26709
- taskId: taskMessage.taskId,
26710
- count: count3(taskMessage.id)
26711
- }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
26712
- and(
26713
- inArray(taskMessage.taskId, chunk),
26714
- eq(agentTaskQueue.workspaceId, workspaceId),
26715
- eq(taskMessage.type, "text")
26716
- )
26717
- ).groupBy(taskMessage.taskId);
26718
- results.push(...rows.map((r) => ({ taskId: r.taskId, count: r.count })));
26719
- }
26720
- return results;
26721
- }
26722
- var SQLITE_MAX_PARAMS, FIXED_PARAMS;
26723
26665
  var init_task_message = __esm({
26724
26666
  "../shared/src/db/queries/task-message.ts"() {
26725
26667
  "use strict";
@@ -26730,11 +26672,9 @@ var init_task_message = __esm({
26730
26672
  init_schema();
26731
26673
  __name(createTaskMessage, "createTaskMessage");
26732
26674
  __name(listTaskMessages, "listTaskMessages");
26675
+ __name(listTaskErrorMessages, "listTaskErrorMessages");
26733
26676
  __name(listTaskMessagesSince, "listTaskMessagesSince");
26734
26677
  __name(deleteTaskMessages, "deleteTaskMessages");
26735
- SQLITE_MAX_PARAMS = 999;
26736
- FIXED_PARAMS = 2;
26737
- __name(countTextMessagesByTaskIds, "countTextMessagesByTaskIds");
26738
26678
  }
26739
26679
  });
26740
26680
 
@@ -28255,12 +28195,14 @@ var agent_link_exports = {};
28255
28195
  __export(agent_link_exports, {
28256
28196
  create: () => create,
28257
28197
  getAllColleaguesForWorkspace: () => getAllColleaguesForWorkspace,
28198
+ getByPair: () => getByPair,
28258
28199
  getColleaguesForAgent: () => getColleaguesForAgent,
28259
28200
  getColleaguesForAgents: () => getColleaguesForAgents,
28260
28201
  listByAgent: () => listByAgent,
28261
28202
  listByWorkspace: () => listByWorkspace,
28262
28203
  remove: () => remove,
28263
- update: () => update
28204
+ update: () => update,
28205
+ upsertByPair: () => upsertByPair
28264
28206
  });
28265
28207
  async function listByWorkspace(db, workspaceId, opts) {
28266
28208
  let q = db.select().from(agentLink).where(eq(agentLink.workspaceId, workspaceId)).$dynamic();
@@ -28292,6 +28234,34 @@ async function create(db, data) {
28292
28234
  }).returning();
28293
28235
  return rows[0];
28294
28236
  }
28237
+ async function getByPair(db, workspaceId, a3, b2) {
28238
+ const [sourceAgentId, targetAgentId] = a3 > b2 ? [b2, a3] : [a3, b2];
28239
+ const rows = await db.select().from(agentLink).where(
28240
+ and(
28241
+ eq(agentLink.workspaceId, workspaceId),
28242
+ eq(agentLink.sourceAgentId, sourceAgentId),
28243
+ eq(agentLink.targetAgentId, targetAgentId)
28244
+ )
28245
+ );
28246
+ return rows[0] ?? null;
28247
+ }
28248
+ async function upsertByPair(db, data) {
28249
+ const existing = await getByPair(
28250
+ db,
28251
+ data.workspaceId,
28252
+ data.sourceAgentId,
28253
+ data.targetAgentId
28254
+ );
28255
+ if (existing) {
28256
+ const updated = await update(db, existing.id, data.workspaceId, {
28257
+ instruction: data.instruction
28258
+ });
28259
+ if (!updated) return { row: existing, created: false };
28260
+ return { row: updated, created: false };
28261
+ }
28262
+ const created = await create(db, data);
28263
+ return { row: created, created: true };
28264
+ }
28295
28265
  async function update(db, id, workspaceId, data) {
28296
28266
  const rows = await db.update(agentLink).set({
28297
28267
  instruction: data.instruction,
@@ -28402,6 +28372,8 @@ var init_agent_link = __esm({
28402
28372
  __name(listByWorkspace, "listByWorkspace");
28403
28373
  __name(listByAgent, "listByAgent");
28404
28374
  __name(create, "create");
28375
+ __name(getByPair, "getByPair");
28376
+ __name(upsertByPair, "upsertByPair");
28405
28377
  __name(update, "update");
28406
28378
  __name(remove, "remove");
28407
28379
  __name(getColleaguesForAgent, "getColleaguesForAgent");
@@ -28413,68 +28385,96 @@ var init_agent_link = __esm({
28413
28385
  // ../shared/src/db/queries/inbox.ts
28414
28386
  var inbox_exports = {};
28415
28387
  __export(inbox_exports, {
28388
+ deleteAllUnreadEntries: () => deleteAllUnreadEntries,
28389
+ deleteUnreadEntry: () => deleteUnreadEntry,
28390
+ findLatestAssistantMessageId: () => findLatestAssistantMessageId,
28416
28391
  getUnreadCount: () => getUnreadCount,
28392
+ isUnreadEligible: () => isUnreadEligible,
28417
28393
  listUnreadConversations: () => listUnreadConversations,
28418
28394
  markAllConversationsRead: () => markAllConversationsRead,
28419
- markConversationRead: () => markConversationRead
28420
- });
28395
+ markConversationRead: () => markConversationRead,
28396
+ updateUnreadLatestMessage: () => updateUnreadLatestMessage,
28397
+ upsertUnreadEntry: () => upsertUnreadEntry
28398
+ });
28399
+ function isUnreadEligible(task) {
28400
+ if (task.parentTaskId != null) return false;
28401
+ if (task.traceId == null) return false;
28402
+ if (!UNREAD_ELIGIBLE_TYPES.includes(task.type)) return false;
28403
+ if (task.type === "email_notification" && task.context?.isInternal === true) return false;
28404
+ return true;
28405
+ }
28406
+ async function upsertUnreadEntry(db, entry) {
28407
+ const id = nanoid();
28408
+ await db.run(sql`
28409
+ INSERT INTO inbox_unread (id, conversation_id, user_id, workspace_id, agent_id, task_id, task_type, task_status, task_prompt, completed_at, latest_message_id)
28410
+ VALUES (${id}, ${entry.conversationId}, ${entry.userId}, ${entry.workspaceId}, ${entry.agentId}, ${entry.taskId}, ${entry.taskType}, ${entry.taskStatus}, ${entry.taskPrompt}, ${entry.completedAt}, ${entry.latestMessageId})
28411
+ ON CONFLICT (conversation_id, user_id) DO UPDATE SET
28412
+ agent_id = excluded.agent_id,
28413
+ task_id = excluded.task_id,
28414
+ task_type = excluded.task_type,
28415
+ task_status = excluded.task_status,
28416
+ task_prompt = excluded.task_prompt,
28417
+ completed_at = excluded.completed_at,
28418
+ latest_message_id = excluded.latest_message_id
28419
+ WHERE excluded.completed_at >= inbox_unread.completed_at
28420
+ `);
28421
+ }
28422
+ async function updateUnreadLatestMessage(db, conversationId, userId, messageId) {
28423
+ await db.run(sql`
28424
+ UPDATE inbox_unread
28425
+ SET latest_message_id = ${messageId}
28426
+ WHERE conversation_id = ${conversationId} AND user_id = ${userId}
28427
+ `);
28428
+ }
28429
+ async function deleteUnreadEntry(db, conversationId, userId) {
28430
+ await db.run(sql`
28431
+ DELETE FROM inbox_unread
28432
+ WHERE conversation_id = ${conversationId} AND user_id = ${userId}
28433
+ `);
28434
+ }
28435
+ async function deleteAllUnreadEntries(db, userId, workspaceId) {
28436
+ await db.run(sql`
28437
+ DELETE FROM inbox_unread
28438
+ WHERE user_id = ${userId} AND workspace_id = ${workspaceId}
28439
+ `);
28440
+ }
28441
+ async function findLatestAssistantMessageId(db, conversationId) {
28442
+ const rows = await db.all(sql`
28443
+ SELECT id FROM message
28444
+ WHERE conversation_id = ${conversationId}
28445
+ AND role = 'assistant'
28446
+ AND status = 'active'
28447
+ ORDER BY created_at DESC
28448
+ LIMIT 1
28449
+ `);
28450
+ return rows[0]?.id ?? null;
28451
+ }
28421
28452
  async function listUnreadConversations(db, userId, workspaceId, opts) {
28422
28453
  const limit = opts?.limit ?? 30;
28423
- const beforeClause = opts?.before ? sql`AND t.completed_at < ${opts.before}` : sql``;
28454
+ const beforeClause = opts?.before ? sql`AND u.completed_at < ${opts.before}` : sql``;
28424
28455
  const types = opts?.types?.length ? opts.types : ["user_dm_message"];
28425
28456
  const typePlaceholders = sql.join(types.map((t) => sql`${t}`), sql`, `);
28426
28457
  const rows = await db.all(sql`
28427
- SELECT c.id,
28428
- c.agent_id,
28458
+ SELECT u.conversation_id AS id,
28459
+ u.agent_id,
28429
28460
  c.title,
28430
28461
  c.channel,
28431
- m_latest.content AS latest_response,
28432
- t.completed_at AS latest_response_at,
28433
- t.prompt AS root_prompt,
28462
+ m.content AS latest_response,
28463
+ u.completed_at AS latest_response_at,
28464
+ u.task_prompt AS root_prompt,
28434
28465
  a.name AS agent_name,
28435
28466
  a.avatar_url AS agent_avatar_url,
28436
- t.status AS root_task_status,
28437
- t.type AS root_task_type
28438
- FROM agent_task_queue t
28439
- INNER JOIN conversation c
28440
- ON c.id = t.conversation_id
28441
- AND c.user_id = ${userId}
28442
- AND c.workspace_id = ${workspaceId}
28443
- LEFT JOIN conversation_read_state crs
28444
- ON crs.conversation_id = c.id AND crs.user_id = ${userId}
28445
- INNER JOIN message m_latest
28446
- ON m_latest.conversation_id = c.id
28447
- AND m_latest.role = 'assistant'
28448
- AND m_latest.status = 'active'
28449
- AND m_latest.id = (
28450
- SELECT id FROM message
28451
- WHERE conversation_id = c.id
28452
- AND role = 'assistant'
28453
- AND status = 'active'
28454
- ORDER BY created_at DESC LIMIT 1
28455
- )
28456
- LEFT JOIN agent a
28457
- ON a.id = c.agent_id AND a.workspace_id = c.workspace_id
28458
- WHERE t.workspace_id = ${workspaceId}
28459
- AND t.parent_task_id IS NULL
28460
- AND t.trace_id IS NOT NULL
28461
- AND t.type IN (${typePlaceholders})
28462
- AND t.status IN ('completed', 'failed')
28463
- AND t.completed_at > COALESCE(crs.last_read_at, '1970-01-01T00:00:00.000Z')
28464
- AND NOT (t.type = 'email_notification' AND COALESCE(json_extract(t.context, '$.isInternal'), 0) = 1)
28465
- AND t.id = (
28466
- SELECT id FROM agent_task_queue
28467
- WHERE workspace_id = ${workspaceId}
28468
- AND conversation_id = c.id
28469
- AND parent_task_id IS NULL
28470
- AND trace_id IS NOT NULL
28471
- AND type IN (${typePlaceholders})
28472
- AND status IN ('completed', 'failed')
28473
- AND NOT (type = 'email_notification' AND COALESCE(json_extract(context, '$.isInternal'), 0) = 1)
28474
- ORDER BY completed_at DESC LIMIT 1
28475
- )
28467
+ u.task_status AS root_task_status,
28468
+ u.task_type AS root_task_type
28469
+ FROM inbox_unread u
28470
+ INNER JOIN conversation c ON c.id = u.conversation_id
28471
+ LEFT JOIN message m ON m.id = u.latest_message_id
28472
+ LEFT JOIN agent a ON a.id = u.agent_id AND a.workspace_id = u.workspace_id
28473
+ WHERE u.user_id = ${userId}
28474
+ AND u.workspace_id = ${workspaceId}
28475
+ AND u.task_type IN (${typePlaceholders})
28476
28476
  ${beforeClause}
28477
- ORDER BY t.completed_at DESC
28477
+ ORDER BY u.completed_at DESC
28478
28478
  LIMIT ${limit + 1}
28479
28479
  `);
28480
28480
  const hasMore = rows.length > limit;
@@ -28485,21 +28485,11 @@ async function getUnreadCount(db, userId, workspaceId, types) {
28485
28485
  const validTypes = types?.length ? types : ["user_dm_message"];
28486
28486
  const typePlaceholders = sql.join(validTypes.map((t) => sql`${t}`), sql`, `);
28487
28487
  const rows = await db.all(sql`
28488
- SELECT COUNT(DISTINCT t.conversation_id) AS count
28489
- FROM agent_task_queue t
28490
- INNER JOIN conversation c
28491
- ON c.id = t.conversation_id
28492
- AND c.user_id = ${userId}
28493
- AND c.workspace_id = ${workspaceId}
28494
- LEFT JOIN conversation_read_state crs
28495
- ON crs.conversation_id = t.conversation_id AND crs.user_id = ${userId}
28496
- WHERE t.workspace_id = ${workspaceId}
28497
- AND t.parent_task_id IS NULL
28498
- AND t.trace_id IS NOT NULL
28499
- AND t.type IN (${typePlaceholders})
28500
- AND t.status IN ('completed', 'failed')
28501
- AND t.completed_at > COALESCE(crs.last_read_at, '1970-01-01T00:00:00.000Z')
28502
- AND NOT (t.type = 'email_notification' AND COALESCE(json_extract(t.context, '$.isInternal'), 0) = 1)
28488
+ SELECT COUNT(*) AS count
28489
+ FROM inbox_unread
28490
+ WHERE user_id = ${userId}
28491
+ AND workspace_id = ${workspaceId}
28492
+ AND task_type IN (${typePlaceholders})
28503
28493
  `);
28504
28494
  return rows[0]?.count ?? 0;
28505
28495
  }
@@ -28511,6 +28501,7 @@ async function markConversationRead(db, userId, conversationId) {
28511
28501
  ON CONFLICT (conversation_id, user_id)
28512
28502
  DO UPDATE SET last_read_at = ${now}
28513
28503
  `);
28504
+ await deleteUnreadEntry(db, conversationId, userId);
28514
28505
  }
28515
28506
  async function markAllConversationsRead(db, userId, workspaceId) {
28516
28507
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -28523,7 +28514,9 @@ async function markAllConversationsRead(db, userId, workspaceId) {
28523
28514
  ON CONFLICT (conversation_id, user_id)
28524
28515
  DO UPDATE SET last_read_at = ${now}
28525
28516
  `);
28517
+ await deleteAllUnreadEntries(db, userId, workspaceId);
28526
28518
  }
28519
+ var UNREAD_ELIGIBLE_TYPES;
28527
28520
  var init_inbox = __esm({
28528
28521
  "../shared/src/db/queries/inbox.ts"() {
28529
28522
  "use strict";
@@ -28532,6 +28525,13 @@ var init_inbox = __esm({
28532
28525
  init_performance2();
28533
28526
  init_drizzle_orm();
28534
28527
  init_index_browser();
28528
+ UNREAD_ELIGIBLE_TYPES = ["user_dm_message", "email_notification", "calendar_event"];
28529
+ __name(isUnreadEligible, "isUnreadEligible");
28530
+ __name(upsertUnreadEntry, "upsertUnreadEntry");
28531
+ __name(updateUnreadLatestMessage, "updateUnreadLatestMessage");
28532
+ __name(deleteUnreadEntry, "deleteUnreadEntry");
28533
+ __name(deleteAllUnreadEntries, "deleteAllUnreadEntries");
28534
+ __name(findLatestAssistantMessageId, "findLatestAssistantMessageId");
28535
28535
  __name(listUnreadConversations, "listUnreadConversations");
28536
28536
  __name(getUnreadCount, "getUnreadCount");
28537
28537
  __name(markConversationRead, "markConversationRead");
@@ -29315,6 +29315,25 @@ var init_slug = __esm({
29315
29315
  }
29316
29316
  });
29317
29317
 
29318
+ // ../shared/src/utils/title.ts
29319
+ function truncateTitle(text2, maxLen = 50) {
29320
+ const trimmed = text2.replace(/\s+/g, " ").trim();
29321
+ if (trimmed.length <= maxLen) return trimmed;
29322
+ const cut = trimmed.slice(0, maxLen);
29323
+ const lastSpace = cut.lastIndexOf(" ");
29324
+ const title2 = lastSpace > 20 ? cut.slice(0, lastSpace) : cut;
29325
+ return title2 + "...";
29326
+ }
29327
+ var init_title = __esm({
29328
+ "../shared/src/utils/title.ts"() {
29329
+ "use strict";
29330
+ init_virtual_unenv_global_polyfill_cloudflare_unenv_preset_node_process();
29331
+ init_virtual_unenv_global_polyfill_cloudflare_unenv_preset_node_console();
29332
+ init_performance2();
29333
+ __name(truncateTitle, "truncateTitle");
29334
+ }
29335
+ });
29336
+
29318
29337
  // ../shared/src/semver.ts
29319
29338
  function semverGte(a3, b2) {
29320
29339
  const pa = a3.split(".").map(Number);
@@ -29399,13 +29418,13 @@ __export(src_exports, {
29399
29418
  ActivateTokenRequestSchema: () => ActivateTokenRequestSchema,
29400
29419
  ActivateTokenRuntimeSchema: () => ActivateTokenRuntimeSchema,
29401
29420
  AddWhitelistRequestSchema: () => AddWhitelistRequestSchema,
29421
+ AgentDmRequestSchema: () => AgentDmRequestSchema,
29402
29422
  AgentStatus: () => AgentStatus,
29403
29423
  CalendarEventApiSchema: () => CalendarEventApiSchema,
29404
29424
  ClaimedTaskRowSchema: () => ClaimedTaskRowSchema,
29405
29425
  CompleteTaskRequestSchema: () => CompleteTaskRequestSchema,
29406
29426
  CreateAgentLinkRequestSchema: () => CreateAgentLinkRequestSchema,
29407
29427
  CreateAgentRequestSchema: () => CreateAgentRequestSchema,
29408
- CreateBufferedMessageRequestSchema: () => CreateBufferedMessageRequestSchema,
29409
29428
  CreateCalendarEventRequestSchema: () => CreateCalendarEventRequestSchema,
29410
29429
  CreateConversationRequestSchema: () => CreateConversationRequestSchema,
29411
29430
  CreateEmailAccountSchema: () => CreateEmailAccountSchema,
@@ -29473,6 +29492,7 @@ __export(src_exports, {
29473
29492
  UpdateIssueRequestSchema: () => UpdateIssueRequestSchema,
29474
29493
  UpdateMemberRequestSchema: () => UpdateMemberRequestSchema,
29475
29494
  UpdateWorkspaceRequestSchema: () => UpdateWorkspaceRequestSchema,
29495
+ UpsertAgentLinkRequestSchema: () => UpsertAgentLinkRequestSchema,
29476
29496
  WorkspaceFileBrowseRequestSchema: () => WorkspaceFileBrowseRequestSchema,
29477
29497
  WorkspaceFileEntrySchema: () => WorkspaceFileEntrySchema,
29478
29498
  WorkspaceFileReportSchema: () => WorkspaceFileReportSchema,
@@ -29507,7 +29527,8 @@ __export(src_exports, {
29507
29527
  resolveMode: () => resolveMode,
29508
29528
  schema: () => schema_exports,
29509
29529
  semverGte: () => semverGte,
29510
- toAlookAddress: () => toAlookAddress
29530
+ toAlookAddress: () => toAlookAddress,
29531
+ truncateTitle: () => truncateTitle
29511
29532
  });
29512
29533
  var init_src = __esm({
29513
29534
  "../shared/src/index.ts"() {
@@ -29532,6 +29553,7 @@ var init_src = __esm({
29532
29553
  init_status();
29533
29554
  init_db_errors();
29534
29555
  init_slug();
29556
+ init_title();
29535
29557
  init_semver();
29536
29558
  init_mode();
29537
29559
  }
@@ -34070,6 +34092,9 @@ var b = class a2 {
34070
34092
  }
34071
34093
  };
34072
34094
 
34095
+ // src/index.ts
34096
+ import { EmailMessage } from "cloudflare:email";
34097
+
34073
34098
  // src/imap-poller-do.ts
34074
34099
  init_virtual_unenv_global_polyfill_cloudflare_unenv_preset_node_process();
34075
34100
  init_virtual_unenv_global_polyfill_cloudflare_unenv_preset_node_console();
@@ -34439,6 +34464,19 @@ var index_default = {
34439
34464
  };
34440
34465
  })
34441
34466
  )).filter((a3) => a3 !== null);
34467
+ const fromDomain = useCustomSmtp && customAccount ? customAccount.emailAddress.split("@").pop() : "alook.ai";
34468
+ const outMessageId = `<${nanoid()}@${fromDomain}>`;
34469
+ const rawMime = buildMimeMessage({
34470
+ from: fromAddress,
34471
+ to: body.to,
34472
+ subject: body.subject,
34473
+ messageId: outMessageId,
34474
+ inReplyTo: body.inReplyTo,
34475
+ references: body.references,
34476
+ body: htmlBody,
34477
+ bodyType: "text/html",
34478
+ attachments: attachments.map((a3) => ({ filename: a3.filename, contentType: a3.type, base64: a3.base64 }))
34479
+ });
34442
34480
  if (useCustomSmtp && customAccount) {
34443
34481
  const secret = env2.ENCRYPTION_KEY;
34444
34482
  if (!secret) {
@@ -34448,7 +34486,7 @@ var index_default = {
34448
34486
  const smtpUsername = decrypt(customAccount.smtpUsername, secret);
34449
34487
  const smtpPassword = decrypt(customAccount.smtpPassword, secret);
34450
34488
  const smtpTls = customAccount.smtpTls;
34451
- const threadingHeaders = {};
34489
+ const threadingHeaders = { "Message-ID": outMessageId };
34452
34490
  if (body.inReplyTo) threadingHeaders["In-Reply-To"] = body.inReplyTo;
34453
34491
  if (body.references) threadingHeaders["References"] = body.references;
34454
34492
  await b.send(
@@ -34479,34 +34517,8 @@ var index_default = {
34479
34517
  return Response.json({ error: `SMTP send failed: ${msg}` }, { status: 500 });
34480
34518
  }
34481
34519
  } else {
34482
- const sendPayload = {
34483
- from: fromAddress,
34484
- to: body.to,
34485
- subject: body.subject,
34486
- html: htmlBody
34487
- };
34488
- if (attachments.length > 0) {
34489
- sendPayload.attachments = attachments.map((a3) => ({
34490
- disposition: a3.disposition,
34491
- filename: a3.filename,
34492
- type: a3.type,
34493
- content: a3.raw
34494
- }));
34495
- }
34496
- await env2.SEND_EMAIL.send(sendPayload);
34520
+ await env2.SEND_EMAIL.send(new EmailMessage(fromAddress, body.to, rawMime));
34497
34521
  }
34498
- const outMessageId = `<${nanoid()}@alook.ai>`;
34499
- const rawMime = buildMimeMessage({
34500
- from: fromAddress,
34501
- to: body.to,
34502
- subject: body.subject,
34503
- messageId: outMessageId,
34504
- inReplyTo: body.inReplyTo,
34505
- references: body.references,
34506
- body: htmlBody,
34507
- bodyType: "text/html",
34508
- attachments: attachments.map((a3) => ({ filename: a3.filename, contentType: a3.type, base64: a3.base64 }))
34509
- });
34510
34522
  const r2Id = nanoid();
34511
34523
  const r2Key = `emails/${r2Id}/raw`;
34512
34524
  await env2.EMAIL_BUCKET.put(r2Key, rawMime, {