@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
@@ -16245,6 +16245,10 @@ var CreateAgentLinkRequestSchema = external_exports.object({
16245
16245
  var UpdateAgentLinkRequestSchema = external_exports.object({
16246
16246
  instruction: external_exports.string()
16247
16247
  });
16248
+ var UpsertAgentLinkRequestSchema = external_exports.object({
16249
+ target_agent_id: external_exports.string().min(1, "target_agent_id is required"),
16250
+ instruction: external_exports.string()
16251
+ });
16248
16252
  var AddWhitelistRequestSchema = external_exports.object({
16249
16253
  email: external_exports.string().email()
16250
16254
  });
@@ -16278,8 +16282,9 @@ var CreateConversationRequestSchema = external_exports.object({
16278
16282
  var CreateMessageRequestSchema = external_exports.object({
16279
16283
  content: external_exports.string().min(1, "content is required")
16280
16284
  });
16281
- var CreateBufferedMessageRequestSchema = external_exports.object({
16282
- content: external_exports.string().min(1, "content is required")
16285
+ var AgentDmRequestSchema = external_exports.object({
16286
+ content: external_exports.string().min(1, "content is required"),
16287
+ task_id: external_exports.string().min(1).optional()
16283
16288
  });
16284
16289
  var EmailAttachmentSchema = external_exports.object({
16285
16290
  key: external_exports.string().min(1),
@@ -22462,6 +22467,7 @@ __export(schema_exports, {
22462
22467
  conversationMap: () => conversationMap,
22463
22468
  conversationReadState: () => conversationReadState,
22464
22469
  emails: () => emails,
22470
+ inboxUnread: () => inboxUnread,
22465
22471
  issue: () => issue2,
22466
22472
  issueComment: () => issueComment,
22467
22473
  machine: () => machine,
@@ -23132,6 +23138,26 @@ var agentSkill = sqliteTable(
23132
23138
  }).onDelete("cascade")
23133
23139
  ]
23134
23140
  );
23141
+ var inboxUnread = sqliteTable(
23142
+ "inbox_unread",
23143
+ {
23144
+ id: text("id").primaryKey().$defaultFn(() => nanoid3()),
23145
+ conversationId: text("conversation_id").notNull().references(() => conversation.id, { onDelete: "cascade" }),
23146
+ userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
23147
+ workspaceId: text("workspace_id").notNull(),
23148
+ agentId: text("agent_id").notNull(),
23149
+ taskId: text("task_id").notNull(),
23150
+ taskType: text("task_type").notNull(),
23151
+ taskStatus: text("task_status").notNull(),
23152
+ taskPrompt: text("task_prompt"),
23153
+ completedAt: text("completed_at").notNull(),
23154
+ latestMessageId: text("latest_message_id")
23155
+ },
23156
+ (t) => [
23157
+ unique("inbox_unread_conv_user").on(t.conversationId, t.userId),
23158
+ index("idx_inbox_unread_user_ws").on(t.userId, t.workspaceId, t.taskType, t.completedAt)
23159
+ ]
23160
+ );
23135
23161
 
23136
23162
  // ../shared/src/db/index.ts
23137
23163
  function createDb(d1) {
@@ -23708,19 +23734,12 @@ __name(hasPreviousConversations, "hasPreviousConversations");
23708
23734
  // ../shared/src/db/queries/message.ts
23709
23735
  var message_exports = {};
23710
23736
  __export(message_exports, {
23711
- activateNextBufferedMessage: () => activateNextBufferedMessage,
23712
- countBufferedMessages: () => countBufferedMessages,
23713
- createBufferedMessage: () => createBufferedMessage,
23714
23737
  createMessage: () => createMessage,
23715
- deleteAllBufferedMessages: () => deleteAllBufferedMessages,
23716
- deleteBufferedMessage: () => deleteBufferedMessage,
23717
23738
  getActiveMessageCount: () => getActiveMessageCount,
23718
23739
  getMessage: () => getMessage,
23719
23740
  getNewestMessageId: () => getNewestMessageId,
23720
- listBufferedMessages: () => listBufferedMessages,
23721
23741
  listMessages: () => listMessages,
23722
23742
  listMessagesAroundTask: () => listMessagesAroundTask,
23723
- revertToBuffered: () => revertToBuffered,
23724
23743
  updateMessageTaskId: () => updateMessageTaskId
23725
23744
  });
23726
23745
  async function createMessage(db, data) {
@@ -23782,69 +23801,6 @@ async function getMessage(db, id) {
23782
23801
  return rows[0] ?? null;
23783
23802
  }
23784
23803
  __name(getMessage, "getMessage");
23785
- async function createBufferedMessage(db, data) {
23786
- const rows = await db.insert(message).values({
23787
- conversationId: data.conversationId,
23788
- role: "user",
23789
- content: data.content,
23790
- status: "buffered",
23791
- attachmentIds: data.attachmentIds ?? null
23792
- }).returning();
23793
- return rows[0];
23794
- }
23795
- __name(createBufferedMessage, "createBufferedMessage");
23796
- async function listBufferedMessages(db, conversationId) {
23797
- return db.select().from(message).where(
23798
- and(
23799
- eq(message.conversationId, conversationId),
23800
- eq(message.status, "buffered")
23801
- )
23802
- ).orderBy(asc(message.createdAt), asc(message.id));
23803
- }
23804
- __name(listBufferedMessages, "listBufferedMessages");
23805
- async function activateNextBufferedMessage(db, conversationId) {
23806
- const candidates = await db.select().from(message).where(
23807
- and(
23808
- eq(message.conversationId, conversationId),
23809
- eq(message.status, "buffered")
23810
- )
23811
- ).orderBy(asc(message.createdAt), asc(message.id)).limit(1);
23812
- if (candidates.length === 0) return null;
23813
- const target = candidates[0];
23814
- 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();
23815
- return updated[0] ?? null;
23816
- }
23817
- __name(activateNextBufferedMessage, "activateNextBufferedMessage");
23818
- async function revertToBuffered(db, id) {
23819
- const rows = await db.update(message).set({ status: "buffered" }).where(and(eq(message.id, id), eq(message.status, "active"))).returning();
23820
- return rows[0] ?? null;
23821
- }
23822
- __name(revertToBuffered, "revertToBuffered");
23823
- async function deleteBufferedMessage(db, id) {
23824
- const rows = await db.delete(message).where(and(eq(message.id, id), eq(message.status, "buffered"))).returning();
23825
- return rows[0] ?? null;
23826
- }
23827
- __name(deleteBufferedMessage, "deleteBufferedMessage");
23828
- async function deleteAllBufferedMessages(db, conversationId) {
23829
- const rows = await db.delete(message).where(
23830
- and(
23831
- eq(message.conversationId, conversationId),
23832
- eq(message.status, "buffered")
23833
- )
23834
- ).returning();
23835
- return rows;
23836
- }
23837
- __name(deleteAllBufferedMessages, "deleteAllBufferedMessages");
23838
- async function countBufferedMessages(db, conversationId) {
23839
- const rows = await db.select({ count: count3(message.id) }).from(message).where(
23840
- and(
23841
- eq(message.conversationId, conversationId),
23842
- eq(message.status, "buffered")
23843
- )
23844
- );
23845
- return rows[0]?.count ?? 0;
23846
- }
23847
- __name(countBufferedMessages, "countBufferedMessages");
23848
23804
  async function updateMessageTaskId(db, messageId, taskId) {
23849
23805
  await db.update(message).set({ taskId }).where(eq(message.id, messageId));
23850
23806
  }
@@ -24576,9 +24532,9 @@ __name(getTraceTree, "getTraceTree");
24576
24532
  // ../shared/src/db/queries/task-message.ts
24577
24533
  var task_message_exports = {};
24578
24534
  __export(task_message_exports, {
24579
- countTextMessagesByTaskIds: () => countTextMessagesByTaskIds,
24580
24535
  createTaskMessage: () => createTaskMessage,
24581
24536
  deleteTaskMessages: () => deleteTaskMessages,
24537
+ listTaskErrorMessages: () => listTaskErrorMessages,
24582
24538
  listTaskMessages: () => listTaskMessages,
24583
24539
  listTaskMessagesSince: () => listTaskMessagesSince
24584
24540
  });
@@ -24614,6 +24570,27 @@ async function listTaskMessages(db, taskId, workspaceId) {
24614
24570
  return db.select().from(taskMessage).where(and(eq(taskMessage.taskId, taskId), notInArray(taskMessage.type, ["tool-result", "tool-use", "thinking"]))).orderBy(asc(taskMessage.seq));
24615
24571
  }
24616
24572
  __name(listTaskMessages, "listTaskMessages");
24573
+ async function listTaskErrorMessages(db, taskId, workspaceId) {
24574
+ return db.select({
24575
+ id: taskMessage.id,
24576
+ taskId: taskMessage.taskId,
24577
+ seq: taskMessage.seq,
24578
+ type: taskMessage.type,
24579
+ tool: taskMessage.tool,
24580
+ content: taskMessage.content,
24581
+ callId: taskMessage.callId,
24582
+ input: taskMessage.input,
24583
+ output: taskMessage.output,
24584
+ createdAt: taskMessage.createdAt
24585
+ }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
24586
+ and(
24587
+ eq(taskMessage.taskId, taskId),
24588
+ eq(agentTaskQueue.workspaceId, workspaceId),
24589
+ eq(taskMessage.type, "error")
24590
+ )
24591
+ ).orderBy(asc(taskMessage.seq));
24592
+ }
24593
+ __name(listTaskErrorMessages, "listTaskErrorMessages");
24617
24594
  async function listTaskMessagesSince(db, taskId, afterSeq) {
24618
24595
  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));
24619
24596
  }
@@ -24622,42 +24599,6 @@ async function deleteTaskMessages(db, taskId) {
24622
24599
  await db.delete(taskMessage).where(eq(taskMessage.taskId, taskId));
24623
24600
  }
24624
24601
  __name(deleteTaskMessages, "deleteTaskMessages");
24625
- var SQLITE_MAX_PARAMS = 999;
24626
- var FIXED_PARAMS = 2;
24627
- async function countTextMessagesByTaskIds(db, taskIds, workspaceId) {
24628
- if (taskIds.length === 0) return [];
24629
- const chunkSize = SQLITE_MAX_PARAMS - FIXED_PARAMS;
24630
- if (taskIds.length <= chunkSize) {
24631
- const rows = await db.select({
24632
- taskId: taskMessage.taskId,
24633
- count: count3(taskMessage.id)
24634
- }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
24635
- and(
24636
- inArray(taskMessage.taskId, taskIds),
24637
- eq(agentTaskQueue.workspaceId, workspaceId),
24638
- eq(taskMessage.type, "text")
24639
- )
24640
- ).groupBy(taskMessage.taskId);
24641
- return rows.map((r) => ({ taskId: r.taskId, count: r.count }));
24642
- }
24643
- const results = [];
24644
- for (let i = 0; i < taskIds.length; i += chunkSize) {
24645
- const chunk = taskIds.slice(i, i + chunkSize);
24646
- const rows = await db.select({
24647
- taskId: taskMessage.taskId,
24648
- count: count3(taskMessage.id)
24649
- }).from(taskMessage).innerJoin(agentTaskQueue, eq(taskMessage.taskId, agentTaskQueue.id)).where(
24650
- and(
24651
- inArray(taskMessage.taskId, chunk),
24652
- eq(agentTaskQueue.workspaceId, workspaceId),
24653
- eq(taskMessage.type, "text")
24654
- )
24655
- ).groupBy(taskMessage.taskId);
24656
- results.push(...rows.map((r) => ({ taskId: r.taskId, count: r.count })));
24657
- }
24658
- return results;
24659
- }
24660
- __name(countTextMessagesByTaskIds, "countTextMessagesByTaskIds");
24661
24602
 
24662
24603
  // ../shared/src/db/queries/machine.ts
24663
24604
  var machine_exports = {};
@@ -25960,12 +25901,14 @@ var agent_link_exports = {};
25960
25901
  __export(agent_link_exports, {
25961
25902
  create: () => create,
25962
25903
  getAllColleaguesForWorkspace: () => getAllColleaguesForWorkspace,
25904
+ getByPair: () => getByPair,
25963
25905
  getColleaguesForAgent: () => getColleaguesForAgent,
25964
25906
  getColleaguesForAgents: () => getColleaguesForAgents,
25965
25907
  listByAgent: () => listByAgent,
25966
25908
  listByWorkspace: () => listByWorkspace,
25967
25909
  remove: () => remove,
25968
- update: () => update
25910
+ update: () => update,
25911
+ upsertByPair: () => upsertByPair
25969
25912
  });
25970
25913
  async function listByWorkspace(db, workspaceId, opts) {
25971
25914
  let q = db.select().from(agentLink).where(eq(agentLink.workspaceId, workspaceId)).$dynamic();
@@ -26000,6 +25943,36 @@ async function create(db, data) {
26000
25943
  return rows[0];
26001
25944
  }
26002
25945
  __name(create, "create");
25946
+ async function getByPair(db, workspaceId, a, b) {
25947
+ const [sourceAgentId, targetAgentId] = a > b ? [b, a] : [a, b];
25948
+ const rows = await db.select().from(agentLink).where(
25949
+ and(
25950
+ eq(agentLink.workspaceId, workspaceId),
25951
+ eq(agentLink.sourceAgentId, sourceAgentId),
25952
+ eq(agentLink.targetAgentId, targetAgentId)
25953
+ )
25954
+ );
25955
+ return rows[0] ?? null;
25956
+ }
25957
+ __name(getByPair, "getByPair");
25958
+ async function upsertByPair(db, data) {
25959
+ const existing = await getByPair(
25960
+ db,
25961
+ data.workspaceId,
25962
+ data.sourceAgentId,
25963
+ data.targetAgentId
25964
+ );
25965
+ if (existing) {
25966
+ const updated = await update(db, existing.id, data.workspaceId, {
25967
+ instruction: data.instruction
25968
+ });
25969
+ if (!updated) return { row: existing, created: false };
25970
+ return { row: updated, created: false };
25971
+ }
25972
+ const created = await create(db, data);
25973
+ return { row: created, created: true };
25974
+ }
25975
+ __name(upsertByPair, "upsertByPair");
26003
25976
  async function update(db, id, workspaceId, data) {
26004
25977
  const rows = await db.update(agentLink).set({
26005
25978
  instruction: data.instruction,
@@ -26108,68 +26081,103 @@ __name(getAllColleaguesForWorkspace, "getAllColleaguesForWorkspace");
26108
26081
  // ../shared/src/db/queries/inbox.ts
26109
26082
  var inbox_exports = {};
26110
26083
  __export(inbox_exports, {
26084
+ deleteAllUnreadEntries: () => deleteAllUnreadEntries,
26085
+ deleteUnreadEntry: () => deleteUnreadEntry,
26086
+ findLatestAssistantMessageId: () => findLatestAssistantMessageId,
26111
26087
  getUnreadCount: () => getUnreadCount,
26088
+ isUnreadEligible: () => isUnreadEligible,
26112
26089
  listUnreadConversations: () => listUnreadConversations,
26113
26090
  markAllConversationsRead: () => markAllConversationsRead,
26114
- markConversationRead: () => markConversationRead
26115
- });
26091
+ markConversationRead: () => markConversationRead,
26092
+ updateUnreadLatestMessage: () => updateUnreadLatestMessage,
26093
+ upsertUnreadEntry: () => upsertUnreadEntry
26094
+ });
26095
+ var UNREAD_ELIGIBLE_TYPES = ["user_dm_message", "email_notification", "calendar_event"];
26096
+ function isUnreadEligible(task) {
26097
+ if (task.parentTaskId != null) return false;
26098
+ if (task.traceId == null) return false;
26099
+ if (!UNREAD_ELIGIBLE_TYPES.includes(task.type)) return false;
26100
+ if (task.type === "email_notification" && task.context?.isInternal === true) return false;
26101
+ return true;
26102
+ }
26103
+ __name(isUnreadEligible, "isUnreadEligible");
26104
+ async function upsertUnreadEntry(db, entry) {
26105
+ const id = nanoid3();
26106
+ await db.run(sql`
26107
+ 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)
26108
+ VALUES (${id}, ${entry.conversationId}, ${entry.userId}, ${entry.workspaceId}, ${entry.agentId}, ${entry.taskId}, ${entry.taskType}, ${entry.taskStatus}, ${entry.taskPrompt}, ${entry.completedAt}, ${entry.latestMessageId})
26109
+ ON CONFLICT (conversation_id, user_id) DO UPDATE SET
26110
+ agent_id = excluded.agent_id,
26111
+ task_id = excluded.task_id,
26112
+ task_type = excluded.task_type,
26113
+ task_status = excluded.task_status,
26114
+ task_prompt = excluded.task_prompt,
26115
+ completed_at = excluded.completed_at,
26116
+ latest_message_id = excluded.latest_message_id
26117
+ WHERE excluded.completed_at >= inbox_unread.completed_at
26118
+ `);
26119
+ }
26120
+ __name(upsertUnreadEntry, "upsertUnreadEntry");
26121
+ async function updateUnreadLatestMessage(db, conversationId, userId, messageId) {
26122
+ await db.run(sql`
26123
+ UPDATE inbox_unread
26124
+ SET latest_message_id = ${messageId}
26125
+ WHERE conversation_id = ${conversationId} AND user_id = ${userId}
26126
+ `);
26127
+ }
26128
+ __name(updateUnreadLatestMessage, "updateUnreadLatestMessage");
26129
+ async function deleteUnreadEntry(db, conversationId, userId) {
26130
+ await db.run(sql`
26131
+ DELETE FROM inbox_unread
26132
+ WHERE conversation_id = ${conversationId} AND user_id = ${userId}
26133
+ `);
26134
+ }
26135
+ __name(deleteUnreadEntry, "deleteUnreadEntry");
26136
+ async function deleteAllUnreadEntries(db, userId, workspaceId) {
26137
+ await db.run(sql`
26138
+ DELETE FROM inbox_unread
26139
+ WHERE user_id = ${userId} AND workspace_id = ${workspaceId}
26140
+ `);
26141
+ }
26142
+ __name(deleteAllUnreadEntries, "deleteAllUnreadEntries");
26143
+ async function findLatestAssistantMessageId(db, conversationId) {
26144
+ const rows = await db.all(sql`
26145
+ SELECT id FROM message
26146
+ WHERE conversation_id = ${conversationId}
26147
+ AND role = 'assistant'
26148
+ AND status = 'active'
26149
+ ORDER BY created_at DESC
26150
+ LIMIT 1
26151
+ `);
26152
+ return rows[0]?.id ?? null;
26153
+ }
26154
+ __name(findLatestAssistantMessageId, "findLatestAssistantMessageId");
26116
26155
  async function listUnreadConversations(db, userId, workspaceId, opts) {
26117
26156
  const limit = opts?.limit ?? 30;
26118
- const beforeClause = opts?.before ? sql`AND t.completed_at < ${opts.before}` : sql``;
26157
+ const beforeClause = opts?.before ? sql`AND u.completed_at < ${opts.before}` : sql``;
26119
26158
  const types = opts?.types?.length ? opts.types : ["user_dm_message"];
26120
26159
  const typePlaceholders = sql.join(types.map((t) => sql`${t}`), sql`, `);
26121
26160
  const rows = await db.all(sql`
26122
- SELECT c.id,
26123
- c.agent_id,
26161
+ SELECT u.conversation_id AS id,
26162
+ u.agent_id,
26124
26163
  c.title,
26125
26164
  c.channel,
26126
- m_latest.content AS latest_response,
26127
- t.completed_at AS latest_response_at,
26128
- t.prompt AS root_prompt,
26165
+ m.content AS latest_response,
26166
+ u.completed_at AS latest_response_at,
26167
+ u.task_prompt AS root_prompt,
26129
26168
  a.name AS agent_name,
26130
26169
  a.avatar_url AS agent_avatar_url,
26131
- t.status AS root_task_status,
26132
- t.type AS root_task_type
26133
- FROM agent_task_queue t
26134
- INNER JOIN conversation c
26135
- ON c.id = t.conversation_id
26136
- AND c.user_id = ${userId}
26137
- AND c.workspace_id = ${workspaceId}
26138
- LEFT JOIN conversation_read_state crs
26139
- ON crs.conversation_id = c.id AND crs.user_id = ${userId}
26140
- INNER JOIN message m_latest
26141
- ON m_latest.conversation_id = c.id
26142
- AND m_latest.role = 'assistant'
26143
- AND m_latest.status = 'active'
26144
- AND m_latest.id = (
26145
- SELECT id FROM message
26146
- WHERE conversation_id = c.id
26147
- AND role = 'assistant'
26148
- AND status = 'active'
26149
- ORDER BY created_at DESC LIMIT 1
26150
- )
26151
- LEFT JOIN agent a
26152
- ON a.id = c.agent_id AND a.workspace_id = c.workspace_id
26153
- WHERE t.workspace_id = ${workspaceId}
26154
- AND t.parent_task_id IS NULL
26155
- AND t.trace_id IS NOT NULL
26156
- AND t.type IN (${typePlaceholders})
26157
- AND t.status IN ('completed', 'failed')
26158
- AND t.completed_at > COALESCE(crs.last_read_at, '1970-01-01T00:00:00.000Z')
26159
- AND NOT (t.type = 'email_notification' AND COALESCE(json_extract(t.context, '$.isInternal'), 0) = 1)
26160
- AND t.id = (
26161
- SELECT id FROM agent_task_queue
26162
- WHERE workspace_id = ${workspaceId}
26163
- AND conversation_id = c.id
26164
- AND parent_task_id IS NULL
26165
- AND trace_id IS NOT NULL
26166
- AND type IN (${typePlaceholders})
26167
- AND status IN ('completed', 'failed')
26168
- AND NOT (type = 'email_notification' AND COALESCE(json_extract(context, '$.isInternal'), 0) = 1)
26169
- ORDER BY completed_at DESC LIMIT 1
26170
- )
26170
+ u.task_status AS root_task_status,
26171
+ u.task_type AS root_task_type
26172
+ FROM inbox_unread u
26173
+ INNER JOIN conversation c ON c.id = u.conversation_id
26174
+ LEFT JOIN message m ON m.id = u.latest_message_id
26175
+ LEFT JOIN agent a ON a.id = u.agent_id AND a.workspace_id = u.workspace_id
26176
+ WHERE u.user_id = ${userId}
26177
+ AND u.workspace_id = ${workspaceId}
26178
+ AND u.task_type IN (${typePlaceholders})
26171
26179
  ${beforeClause}
26172
- ORDER BY t.completed_at DESC
26180
+ ORDER BY u.completed_at DESC
26173
26181
  LIMIT ${limit + 1}
26174
26182
  `);
26175
26183
  const hasMore = rows.length > limit;
@@ -26181,21 +26189,11 @@ async function getUnreadCount(db, userId, workspaceId, types) {
26181
26189
  const validTypes = types?.length ? types : ["user_dm_message"];
26182
26190
  const typePlaceholders = sql.join(validTypes.map((t) => sql`${t}`), sql`, `);
26183
26191
  const rows = await db.all(sql`
26184
- SELECT COUNT(DISTINCT t.conversation_id) AS count
26185
- FROM agent_task_queue t
26186
- INNER JOIN conversation c
26187
- ON c.id = t.conversation_id
26188
- AND c.user_id = ${userId}
26189
- AND c.workspace_id = ${workspaceId}
26190
- LEFT JOIN conversation_read_state crs
26191
- ON crs.conversation_id = t.conversation_id AND crs.user_id = ${userId}
26192
- WHERE t.workspace_id = ${workspaceId}
26193
- AND t.parent_task_id IS NULL
26194
- AND t.trace_id IS NOT NULL
26195
- AND t.type IN (${typePlaceholders})
26196
- AND t.status IN ('completed', 'failed')
26197
- AND t.completed_at > COALESCE(crs.last_read_at, '1970-01-01T00:00:00.000Z')
26198
- AND NOT (t.type = 'email_notification' AND COALESCE(json_extract(t.context, '$.isInternal'), 0) = 1)
26192
+ SELECT COUNT(*) AS count
26193
+ FROM inbox_unread
26194
+ WHERE user_id = ${userId}
26195
+ AND workspace_id = ${workspaceId}
26196
+ AND task_type IN (${typePlaceholders})
26199
26197
  `);
26200
26198
  return rows[0]?.count ?? 0;
26201
26199
  }
@@ -26208,6 +26206,7 @@ async function markConversationRead(db, userId, conversationId) {
26208
26206
  ON CONFLICT (conversation_id, user_id)
26209
26207
  DO UPDATE SET last_read_at = ${now}
26210
26208
  `);
26209
+ await deleteUnreadEntry(db, conversationId, userId);
26211
26210
  }
26212
26211
  __name(markConversationRead, "markConversationRead");
26213
26212
  async function markAllConversationsRead(db, userId, workspaceId) {
@@ -26221,6 +26220,7 @@ async function markAllConversationsRead(db, userId, workspaceId) {
26221
26220
  ON CONFLICT (conversation_id, user_id)
26222
26221
  DO UPDATE SET last_read_at = ${now}
26223
26222
  `);
26223
+ await deleteAllUnreadEntries(db, userId, workspaceId);
26224
26224
  }
26225
26225
  __name(markAllConversationsRead, "markAllConversationsRead");
26226
26226