@alook/app 0.0.68 → 0.0.70

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 (240) hide show
  1. package/bundled/email-worker/index.js +9 -1
  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/0.vi-1cgnne0e.css +1 -0
  5. package/bundled/web/.open-next/assets/_next/static/chunks/{0vob59t.w8yuf.js → 060hy1yx9.8u4.js} +2 -2
  6. package/bundled/web/.open-next/assets/_next/static/chunks/08u3p1v8e1gxg.js +63 -0
  7. package/bundled/web/.open-next/assets/_next/static/chunks/{13fkss9rmgdqw.js → 0fmcohc0raah~.js} +22 -22
  8. package/bundled/web/.open-next/assets/_next/static/chunks/0va5axmz5ywg8.js +3 -0
  9. package/bundled/web/.open-next/assets/_next/static/chunks/0vb-n1ns9b-93.js +1 -0
  10. package/bundled/web/.open-next/assets/_next/static/chunks/0ymb~iviyjlb_.js +3 -0
  11. package/bundled/web/.open-next/assets/_next/static/chunks/13lom177x6744.js +1 -0
  12. package/bundled/web/.open-next/cache/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/_global-error.cache +1 -1
  13. package/bundled/web/.open-next/cache/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/_not-found.cache +1 -1
  14. package/bundled/web/.open-next/cache/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/sitemap.xml.cache +1 -1
  15. package/bundled/web/.open-next/cloudflare/cache-assets-manifest.sql +1 -1
  16. package/bundled/web/.open-next/cloudflare/init.js +1 -1
  17. package/bundled/web/.open-next/dynamodb-provider/dynamodb-cache.json +1 -1
  18. package/bundled/web/.open-next/middleware/handler.mjs +3 -3
  19. package/bundled/web/.open-next/server-functions/default/src/web/.next/BUILD_ID +1 -1
  20. package/bundled/web/.open-next/server-functions/default/src/web/.next/build-manifest.json +3 -3
  21. package/bundled/web/.open-next/server-functions/default/src/web/.next/prerender-manifest.json +3 -3
  22. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/invite/[token]/page_client-reference-manifest.js +1 -1
  23. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/studio/new/page_client-reference-manifest.js +1 -1
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/page_client-reference-manifest.js +1 -1
  33. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/calendar/page_client-reference-manifest.js +1 -1
  34. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/flags/page_client-reference-manifest.js +1 -1
  35. 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
  36. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/home/page_client-reference-manifest.js +1 -1
  37. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/issues/page_client-reference-manifest.js +1 -1
  38. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/runtimes/page_client-reference-manifest.js +1 -1
  39. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/settings/page_client-reference-manifest.js +1 -1
  40. 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
  41. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/page_client-reference-manifest.js +1 -1
  42. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/unread/page_client-reference-manifest.js +1 -1
  43. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/workspaces/page_client-reference-manifest.js +1 -1
  44. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(auth)/sign-in/page_client-reference-manifest.js +1 -1
  45. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  46. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agent-links/[id]/route.js +2 -2
  47. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agent-links/route.js +1 -1
  48. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/access/[userId]/route.js +3 -3
  49. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/access/route.js +3 -3
  50. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/active-tasks/route.js +3 -3
  51. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/activity/route.js +2 -2
  52. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/chat-init/route.js +1 -1
  53. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/conversation/route.js +2 -2
  54. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/conversations/route.js +2 -2
  55. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/email-accounts/[accountId]/route.js +2 -2
  56. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/email-accounts/[accountId]/sync/route.js +3 -3
  57. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/email-accounts/[accountId]/test/route.js +3 -3
  58. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/email-accounts/route.js +2 -2
  59. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/meetings/[meetingId]/approve/route.js +2 -2
  60. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/meetings/[meetingId]/route.js +2 -2
  61. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/meetings/[meetingId]/stop/route.js +2 -2
  62. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/meetings/route.js +2 -2
  63. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/pin/route.js +3 -3
  64. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/route.js +2 -2
  65. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/whitelist/[whitelistId]/route.js +3 -3
  66. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/whitelist/route.js +4 -4
  67. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/[id]/workspace/browse/route.js +3 -3
  68. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/active-task-counts/route.js +3 -3
  69. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/active-tasks/route.js +6 -6
  70. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/pins/reorder/route.js +3 -3
  71. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/pins/route.js +3 -3
  72. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/route.js +6 -6
  73. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/agents/sidebar/reorder/route.js +3 -3
  74. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/artifacts/[id]/content/route.js +3 -3
  75. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/artifacts/[id]/route.js +3 -3
  76. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/artifacts/route.js +3 -3
  77. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/artifacts/upload/route.js +3 -3
  78. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/calendar/[id]/route.js +4 -4
  79. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/calendar/route.js +3 -3
  80. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/channels/[id]/route.js +1 -1
  81. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/channels/reorder/route.js +3 -3
  82. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/channels/route.js +1 -1
  83. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/config/min-version/route.js +3 -3
  84. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/config/model-options/route.js +3 -3
  85. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/active-task/route.js +1 -1
  86. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/buffered-messages/[messageId]/route.js +3 -3
  87. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/buffered-messages/route.js +4 -4
  88. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/messages/route.js +3 -3
  89. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/[id]/route.js +2 -2
  90. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/conversations/route.js +2 -2
  91. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/deregister/route.js +2 -2
  92. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/register/route.js +1 -1
  93. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/complete/route.js +1 -1
  94. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/fail/route.js +1 -1
  95. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/messages/route.js +3 -3
  96. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/progress/route.js +1 -1
  97. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/start/route.js +1 -1
  98. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/status/route.js +3 -3
  99. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/[taskId]/supersede/route.js +1 -1
  100. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/tasks/poll/route.js +3 -3
  101. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/daemon/workspace/report/route.js +1 -1
  102. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/[id]/attachment/[index]/route.js +4 -4
  103. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/[id]/body/route.js +4 -4
  104. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/[id]/raw/route.js +3 -3
  105. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/[id]/route.js +2 -2
  106. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/[id]/thread/route.js +2 -2
  107. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/notify/route.js +2 -2
  108. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/route.js +2 -2
  109. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/send/route.js +3 -3
  110. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/email/upload/route.js +4 -4
  111. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/flags/[messageId]/route.js +4 -4
  112. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/flags/count/route.js +3 -3
  113. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/flags/route.js +2 -2
  114. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/inbox/count/route.js +3 -3
  115. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/inbox/read/route.js +1 -1
  116. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/inbox/read-all/route.js +1 -1
  117. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/inbox/route.js +2 -2
  118. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/invite/[token]/route.js +3 -3
  119. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/[id]/comments/route.js +4 -4
  120. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/[id]/route.js +2 -2
  121. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/issues/route.js +1 -1
  122. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/machine-tokens/[id]/route.js +3 -3
  123. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/machine-tokens/activate/route.js +1 -1
  124. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/machine-tokens/route.js +3 -3
  125. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/me/route.js +5 -5
  126. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/meeting/callback/route.js +3 -3
  127. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/members/me/route.js +3 -3
  128. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/runtimes/[runtimeId]/rescan/route.js +3 -3
  129. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/runtimes/[runtimeId]/update/route.js +1 -1
  130. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/runtimes/machine/route.js +1 -1
  131. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/runtimes/route.js +1 -1
  132. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/studios/check-handles/route.js +1 -1
  133. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/studios/check-name/route.js +3 -3
  134. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/studios/route.js +4 -4
  135. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/tasks/[id]/messages/route.js +2 -2
  136. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/tasks/[id]/retry/route.js +1 -1
  137. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/tasks/[id]/route.js +2 -2
  138. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/tasks/step-counts/route.js +3 -3
  139. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/traces/[traceId]/route.js +6 -6
  140. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/traces/route.js +6 -6
  141. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/invites/[inviteId]/route.js +3 -3
  142. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/invites/route.js +2 -2
  143. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/members/[memberId]/route.js +3 -3
  144. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/members/route.js +2 -2
  145. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/overview/route.js +6 -6
  146. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/[id]/route.js +1 -1
  147. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/api/workspaces/route.js +3 -3
  148. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/page_client-reference-manifest.js +1 -1
  149. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/templates/[id]/page_client-reference-manifest.js +1 -1
  150. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/templates/page_client-reference-manifest.js +1 -1
  151. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0.1vmoe._.js +85 -0
  152. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__009_wu3._.js +1 -1
  153. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__01crkpf._.js +1 -1
  154. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__01~--ue._.js +3 -0
  155. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/{[root-of-the-server]__0~4t--s._.js → [root-of-the-server]__027mioa._.js} +8 -8
  156. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__09cer93._.js +3 -0
  157. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0dy~25_._.js +3 -0
  158. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0faxj6t._.js +1 -1
  159. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0k4l9.h._.js +1 -1
  160. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0m5a1_f._.js +1 -1
  161. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0m_ya4f._.js +3 -0
  162. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0niqi98._.js +85 -0
  163. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0ntc1ld._.js +1 -1
  164. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0ud56v.._.js +1 -1
  165. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[turbopack]_runtime.js +16 -16
  166. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0266t8u._.js +2 -2
  167. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_02t7kem._.js +1 -1
  168. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_06imn.m._.js +1 -1
  169. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_07-798_._.js +1 -1
  170. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_08xh_f8._.js +2 -2
  171. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_09j_99x._.js +2 -2
  172. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0c9~wb-._.js +1 -1
  173. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0exm5_w._.js +2 -2
  174. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0gqpz7w._.js +1 -1
  175. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0j1t6f2._.js +1 -1
  176. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0k3wl-3._.js +1 -1
  177. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0l1m9wf._.js +2 -2
  178. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0lmedw9._.js +1 -1
  179. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0ow_nxn._.js +1 -1
  180. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0piy2kq._.js +1 -1
  181. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0r0h9so._.js +3 -3
  182. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0s4qnoj._.js +1 -1
  183. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0sj8mn_._.js +3 -0
  184. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0s~hhx-._.js +1 -1
  185. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0tarogd._.js +1 -1
  186. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0tcd35h._.js +1 -1
  187. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0u3tu2x._.js +2 -2
  188. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0w6dw.t._.js +2 -2
  189. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0y3~9l1._.js +1 -1
  190. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0z.s70x._.js +1 -1
  191. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_122y7jv._.js +1 -1
  192. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/src_0q3gvkd._.js +3 -0
  193. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{[root-of-the-server]__0ppv-5d._.js → [root-of-the-server]__099etsu._.js} +1 -1
  194. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0r2s1aj._.js +3 -0
  195. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0xzp3_y._.js +3 -0
  196. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[turbopack]_runtime.js +16 -16
  197. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_063q-hj._.js +2 -2
  198. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{_0gm0lpi._.js → _091qk6t._.js} +1 -1
  199. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_09b8fgg._.js +1 -1
  200. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/{_0e7_cpm._.js → _0xcw94t._.js} +1 -1
  201. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_11~t2ti._.js +3 -0
  202. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_12e18r-._.js +2 -2
  203. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_13__3im._.js +1 -1
  204. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_13cbsrm._.js +65 -0
  205. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_0~23g-y._.js +2 -2
  206. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_app_(app)_w_[slug]_home_page_tsx_0lkx78f._.js +1 -1
  207. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-build-manifest.js +3 -3
  208. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-manifest.json +5 -5
  209. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.js +1 -1
  210. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.json +1 -1
  211. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs +68 -150
  212. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs.meta.json +294 -330
  213. package/bundled/web/.open-next/server-functions/default/src/web/index.mjs +3 -3
  214. package/bundled/web/wrangler.toml +1 -1
  215. package/bundled/ws-do/index.js +9 -1
  216. package/dist/cli/index.js +2427 -426
  217. package/dist/cli/session-runner.js +189 -36
  218. package/package.json +1 -1
  219. package/bundled/web/.open-next/assets/_next/static/chunks/02xsv1h-9twmr.js +0 -3
  220. package/bundled/web/.open-next/assets/_next/static/chunks/085gv~jsjhgvo.js +0 -3
  221. package/bundled/web/.open-next/assets/_next/static/chunks/0csp6ncjhvojv.js +0 -63
  222. package/bundled/web/.open-next/assets/_next/static/chunks/0lf.3fdr8qzrz.css +0 -1
  223. package/bundled/web/.open-next/assets/_next/static/chunks/0u1.3sr-iag4j.js +0 -1
  224. package/bundled/web/.open-next/assets/_next/static/chunks/0v0kh80r40w4f.js +0 -1
  225. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0axs-gp._.js +0 -3
  226. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0kvsfuj._.js +0 -85
  227. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0l3u9pl._.js +0 -85
  228. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0lvfzvr._.js +0 -3
  229. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0n_hjiv._.js +0 -3
  230. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0ug4a08._.js +0 -85
  231. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0~jiu74._.js +0 -3
  232. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0jx_8bw._.js +0 -3
  233. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/src_0-jf-76._.js +0 -3
  234. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0-uhgif._.js +0 -3
  235. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0oe.0yf._.js +0 -3
  236. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0ohl~vp._.js +0 -65
  237. /package/bundled/web/.open-next/assets/_next/static/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/_buildManifest.js +0 -0
  238. /package/bundled/web/.open-next/assets/_next/static/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/_clientMiddlewareManifest.js +0 -0
  239. /package/bundled/web/.open-next/assets/_next/static/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/_ssgManifest.js +0 -0
  240. /package/bundled/web/.open-next/cache/{d6FEqIY-HdfUib-E9v9dt → P_a_AT2D4owiIED7-cUYg}/robots.txt.cache +0 -0
@@ -15,6 +15,7 @@ var __export = (target, all) => {
15
15
 
16
16
  // daemon/session-runner.ts
17
17
  import { mkdir, writeFile, rm, rename } from "fs/promises";
18
+ import { mkdirSync as mkdirSync4 } from "fs";
18
19
  import path from "path";
19
20
 
20
21
  // ../shared/src/constants.ts
@@ -16852,8 +16853,19 @@ class ClaudeBackend {
16852
16853
  const proc = spawn(this.cliPath, args, {
16853
16854
  cwd: options.cwd,
16854
16855
  stdio: ["pipe", "pipe", "pipe"],
16855
- env: { ...process.env, ...options.env }
16856
+ env: { ...process.env, ...options.env },
16857
+ shell: process.platform === "win32"
16856
16858
  });
16859
+ if (!proc.pid) {
16860
+ const error51 = `Failed to start ${this.cliPath}: binary not found or not executable. Is 'claude' installed and on PATH?`;
16861
+ const failedResult = { status: "failed", output: "", error: error51, durationMs: 0, sessionId: "" };
16862
+ const emptyMessages = { [Symbol.asyncIterator]() {
16863
+ return { async next() {
16864
+ return { value: undefined, done: true };
16865
+ } };
16866
+ } };
16867
+ return { pid: undefined, messages: emptyMessages, sessionId: Promise.resolve(""), result: Promise.resolve(failedResult) };
16868
+ }
16857
16869
  let timedOut = false;
16858
16870
  let timeoutTimer;
16859
16871
  if (options.timeout) {
@@ -16972,6 +16984,24 @@ class ClaudeBackend {
16972
16984
  }
16973
16985
  }
16974
16986
  });
16987
+ proc.on("error", (err) => {
16988
+ resultStatus = "failed";
16989
+ lastError = `spawn error: ${err.message}`;
16990
+ resolveSessionId(lastSessionId);
16991
+ messageDone = true;
16992
+ if (messageResolve) {
16993
+ const r = messageResolve;
16994
+ messageResolve = null;
16995
+ r();
16996
+ }
16997
+ resolve({
16998
+ status: "failed",
16999
+ output: "",
17000
+ error: lastError,
17001
+ durationMs: Date.now() - startTime,
17002
+ sessionId: lastSessionId
17003
+ });
17004
+ });
16975
17005
  proc.on("close", (code) => {
16976
17006
  if (timeoutTimer)
16977
17007
  clearTimeout(timeoutTimer);
@@ -17091,8 +17121,19 @@ class CodexBackend {
17091
17121
  const proc = spawn2(this.cliPath, ["app-server", "--listen", "stdio://", "--config", "sandbox_mode=danger-full-access"], {
17092
17122
  cwd: options.cwd,
17093
17123
  stdio: ["pipe", "pipe", "pipe"],
17094
- env: { ...process.env, ...options.env }
17124
+ env: { ...process.env, ...options.env },
17125
+ shell: process.platform === "win32"
17095
17126
  });
17127
+ if (!proc.pid) {
17128
+ const error51 = `Failed to start ${this.cliPath}: binary not found or not executable. Is 'codex' installed and on PATH?`;
17129
+ const failedResult = { status: "failed", output: "", error: error51, durationMs: 0, sessionId: "" };
17130
+ const emptyMessages = { [Symbol.asyncIterator]() {
17131
+ return { async next() {
17132
+ return { value: undefined, done: true };
17133
+ } };
17134
+ } };
17135
+ return { pid: undefined, messages: emptyMessages, sessionId: Promise.resolve(""), result: Promise.resolve(failedResult) };
17136
+ }
17096
17137
  let timedOut = false;
17097
17138
  let timeoutTimer;
17098
17139
  if (options.timeout) {
@@ -17472,6 +17513,25 @@ class CodexBackend {
17472
17513
  }
17473
17514
  };
17474
17515
  startHandshake();
17516
+ proc.on("error", (err) => {
17517
+ resultStatus = "failed";
17518
+ lastError = `spawn error: ${err.message}`;
17519
+ closeAllPending("spawn error");
17520
+ resolveSessionId(sessionId);
17521
+ messageDone = true;
17522
+ if (messageResolve) {
17523
+ const r = messageResolve;
17524
+ messageResolve = null;
17525
+ r();
17526
+ }
17527
+ resolve({
17528
+ status: "failed",
17529
+ output: "",
17530
+ error: lastError,
17531
+ durationMs: Date.now() - startTime,
17532
+ sessionId
17533
+ });
17534
+ });
17475
17535
  proc.on("close", (code) => {
17476
17536
  if (timeoutTimer)
17477
17537
  clearTimeout(timeoutTimer);
@@ -17550,8 +17610,19 @@ class OpenCodeBackend {
17550
17610
  const proc = spawn3(this.cliPath, args, {
17551
17611
  cwd: options.cwd,
17552
17612
  stdio: ["ignore", "pipe", "pipe"],
17553
- env: { ...process.env, ...options.env, OPENCODE_PERMISSION: '{"*":"allow"}' }
17613
+ env: { ...process.env, ...options.env, OPENCODE_PERMISSION: '{"*":"allow"}' },
17614
+ shell: process.platform === "win32"
17554
17615
  });
17616
+ if (!proc.pid) {
17617
+ const error51 = `Failed to start ${this.cliPath}: binary not found or not executable. Is 'opencode' installed and on PATH?`;
17618
+ const failedResult = { status: "failed", output: "", error: error51, durationMs: 0, sessionId: "" };
17619
+ const emptyMessages = { [Symbol.asyncIterator]() {
17620
+ return { async next() {
17621
+ return { value: undefined, done: true };
17622
+ } };
17623
+ } };
17624
+ return { pid: undefined, messages: emptyMessages, sessionId: Promise.resolve(""), result: Promise.resolve(failedResult) };
17625
+ }
17555
17626
  let timedOut = false;
17556
17627
  let timeoutTimer;
17557
17628
  if (options.timeout) {
@@ -17703,6 +17774,24 @@ class OpenCodeBackend {
17703
17774
  }
17704
17775
  }
17705
17776
  });
17777
+ proc.on("error", (err) => {
17778
+ resultStatus = "failed";
17779
+ lastError = `spawn error: ${err.message}`;
17780
+ resolveSessionId(lastSessionId);
17781
+ messageDone = true;
17782
+ if (messageResolve) {
17783
+ const r = messageResolve;
17784
+ messageResolve = null;
17785
+ r();
17786
+ }
17787
+ resolve({
17788
+ status: "failed",
17789
+ output: "",
17790
+ error: lastError,
17791
+ durationMs: Date.now() - startTime,
17792
+ sessionId: lastSessionId
17793
+ });
17794
+ });
17706
17795
  proc.on("close", (code) => {
17707
17796
  if (timeoutTimer)
17708
17797
  clearTimeout(timeoutTimer);
@@ -17799,7 +17888,8 @@ import {
17799
17888
  symlinkSync,
17800
17889
  unlinkSync,
17801
17890
  existsSync,
17802
- readlinkSync
17891
+ readlinkSync,
17892
+ copyFileSync
17803
17893
  } from "fs";
17804
17894
  import { join as join2 } from "path";
17805
17895
  var CANONICAL_FILE = "AGENTS.md";
@@ -17917,7 +18007,7 @@ ${task.agent.instructions}
17917
18007
  content += `
17918
18008
  ## Alook CLI Tools
17919
18009
  You can communicate with the world through Alook CLI.
17920
- Your alook agent id is '${task.agentId}'. remember this, most of alook cli will requires you input your agent id.
18010
+ The CLI auto-detects your identity from the environment. No need to pass \`--agent_id\`.
17921
18011
  `;
17922
18012
  if (alookAddr || customAddrs.length > 0) {
17923
18013
  const lines = [];
@@ -17933,12 +18023,12 @@ ${lines.join(`
17933
18023
 
17934
18024
  ### Emails
17935
18025
  ---
17936
- Run '${cmdPrefix()} email pull --agent_id ${task.agentId} --status unread' to download unread emails from inbox to '${tempDir("alook-emails")}/${task.workspaceId}/${task.agentId}/'.
18026
+ Run '${cmdPrefix()} email pull --status unread' to download unread emails from inbox to '${tempDir("alook-emails")}/${task.workspaceId}/${task.agentId}/'.
17937
18027
  ---
17938
- To download sent emails, add '--folder sent': '${cmdPrefix()} email pull --agent_id ${task.agentId} --folder sent'
18028
+ To download sent emails, add '--folder sent': '${cmdPrefix()} email pull --folder sent'
17939
18029
  Valid folders: inbox (default), sent, untrust.
17940
18030
  To limit the number of emails downloaded, add '--limit <N>' (e.g. '--limit 20'). Use '--offset <N>' to skip emails for pagination.
17941
- Example: '${cmdPrefix()} email pull --agent_id ${task.agentId} --status unread --limit 20 --offset 0'
18031
+ Example: '${cmdPrefix()} email pull --status unread --limit 20 --offset 0'
17942
18032
  ---
17943
18033
  Each email is saved to '${tempDir("alook-emails")}/${task.workspaceId}/${task.agentId}/<emailId>/' with:
17944
18034
  - 'metadata.json' — sender, recipient, subject, date, status, message_id, in_reply_to, references
@@ -17947,40 +18037,40 @@ Each email is saved to '${tempDir("alook-emails")}/${task.workspaceId}/${task.ag
17947
18037
  - 'attachments/' — extracted attachment files (if any)
17948
18038
  ---
17949
18039
  Before starting to process an INBOX email, mark it as read:
17950
- - Run '${cmdPrefix()} email set --agent_id ${task.agentId} --email_id <EMAIL_ID> --status read'
18040
+ - Run '${cmdPrefix()} email set --email_id <EMAIL_ID> --status read'
17951
18041
  ---
17952
18042
 
17953
18043
  #### Sending a new email
17954
18044
  Write the HTML body to a file first, then send it. The body is forwarded as-is (HTML).
17955
- - Run '${cmdPrefix()} email send --agent_id ${task.agentId} --to <ADDRESS> --subject "<SUBJECT>" --body-file <PATH_TO_HTML>'
18045
+ - Run '${cmdPrefix()} email send --to <ADDRESS> --subject "<SUBJECT>" --body-file <PATH_TO_HTML>'
17956
18046
  - To send from a specific mailbox, add '--from <YOUR_EMAIL_ADDRESS>'. Without '--from', the default Alook address is used.
17957
18047
  - Attach files with '--attachment <PATH>' — repeat the flag for multiple attachments. Each file is uploaded before sending.
17958
- - Example: '${cmdPrefix()} email send --agent_id ${task.agentId} --to foo@bar.com --subject "Weekly report" --body-file /tmp/body.html --from alice@company.com --attachment /tmp/report.pdf'
18048
+ - Example: '${cmdPrefix()} email send --to foo@bar.com --subject "Weekly report" --body-file /tmp/body.html --from alice@company.com --attachment /tmp/report.pdf'
17959
18049
 
17960
18050
  #### Replying to an email
17961
18051
  To reply to an email, add '--in-reply-to <EMAIL_ID>' to the send command. This sets the correct email threading headers so the recipient's email client groups the reply into the same conversation thread.
17962
18052
  - Use 'Re: <original subject>' as the subject.
17963
18053
  - Quote the original email body in your reply (wrap it in a blockquote).
17964
18054
  - The <EMAIL_ID> is the Alook email id from metadata.json (not the message_id header).
17965
- - Example: '${cmdPrefix()} email send --agent_id ${task.agentId} --to sender@example.com --subject "Re: Bug report" --body-file /tmp/reply.html --in-reply-to <EMAIL_ID>'
18055
+ - Example: '${cmdPrefix()} email send --to sender@example.com --subject "Re: Bug report" --body-file /tmp/reply.html --in-reply-to <EMAIL_ID>'
17966
18056
  Tips:
17967
18057
  - If you think the task will take a while, consider sending a short "I'm on it" style email reply first to reassure the sender.
17968
18058
  ---
17969
18059
 
17970
18060
  #### Forwarding an email
17971
18061
  Forward any email to a new recipient, with an optional note prepended above the original content. All original attachments are re-attached automatically.
17972
- - Run '${cmdPrefix()} email forward --agent_id ${task.agentId} --email_id <EMAIL_ID> --to <RECIPIENT>'
18062
+ - Run '${cmdPrefix()} email forward --email_id <EMAIL_ID> --to <RECIPIENT>'
17973
18063
  - Add '--note "FYI, see the request below."' to prepend a note above the forwarded body.
17974
18064
  - Add '--from <YOUR_EMAIL_ADDRESS>' to send from a specific mailbox.
17975
18065
  - Add '--attachment <PATH>' to attach extra files (repeatable).
17976
- - Example: '${cmdPrefix()} email forward --agent_id ${task.agentId} --email_id em_abc --to boss@company.com --note "FYI" --attachment /tmp/summary.pdf'
18066
+ - Example: '${cmdPrefix()} email forward --email_id em_abc --to boss@company.com --note "FYI" --attachment /tmp/summary.pdf'
17977
18067
  ---
17978
18068
 
17979
18069
  #### Email Whitelist (Allowed Senders)
17980
18070
  Manage which email addresses are allowed to send you emails.
17981
- - List: '${cmdPrefix()} email whitelist list --agent_id ${task.agentId}' (add '--json' for machine-readable output)
17982
- - Add: '${cmdPrefix()} email whitelist add --agent_id ${task.agentId} <EMAIL_ADDRESS>'
17983
- - Remove: '${cmdPrefix()} email whitelist delete --agent_id ${task.agentId} <EMAIL_ADDRESS>'
18071
+ - List: '${cmdPrefix()} email whitelist list' (add '--json' for machine-readable output)
18072
+ - Add: '${cmdPrefix()} email whitelist add <EMAIL_ADDRESS>'
18073
+ - Remove: '${cmdPrefix()} email whitelist delete <EMAIL_ADDRESS>'
17984
18074
  ---
17985
18075
  `;
17986
18076
  }
@@ -17988,7 +18078,7 @@ Manage which email addresses are allowed to send you emails.
17988
18078
  ### Artifacts
17989
18079
  Upload files for your owner to review in the app.
17990
18080
  - Your current conversation id is available via env var: $ALOOK_CONVERSATION_ID
17991
- - Run '${cmdPrefix()} sync upload-artifact --agent_id ${task.agentId} --conversation_id $ALOOK_CONVERSATION_ID --file <PATH>'
18081
+ - Run '${cmdPrefix()} sync upload-artifact --conversation_id $ALOOK_CONVERSATION_ID --file <PATH>'
17992
18082
  - Use this after generating plans, reports, or any file the owner should review.
17993
18083
  - You response will be rendered in remote server, so don't output link format with local path in your response (cause user can click it and jump to nowheres)
17994
18084
  - If you think user may need to know any file detail, use upload-artifact tool to send the file to user.
@@ -18010,26 +18100,26 @@ Schedule future tasks for yourself. At the scheduled time, a new task is dispatc
18010
18100
  Keep the event title informative and concise, less than 20 words.
18011
18101
  Place the event details in description.
18012
18102
  Create a one-off event:
18013
- - Run '${cmdPrefix()} calendar set --agent_id ${task.agentId} --event_title "<TASK_TITLE>" --description "<TASK_BODY>" --datetime <YYYY-MM-DDTHH:MM>'
18103
+ - Run '${cmdPrefix()} calendar set --event_title "<TASK_TITLE>" --description "<TASK_BODY>" --datetime <YYYY-MM-DDTHH:MM>'
18014
18104
  - '--datetime' is LOCAL time, format 'YYYY-MM-DDTHH:MM' (e.g. '2026-04-17T09:30'). Do NOT pass UTC / ISO strings with 'Z'.
18015
18105
  - '--event_title' becomes the task prompt when the event fires — write it as the instruction you want future-you to receive.
18016
18106
 
18017
18107
  Create a repeating event:
18018
18108
  - Add '--repeat <interval>' where interval is like '1day', '2hour', '1week', '1month'.
18019
18109
  - Optionally add '--repeat_stop_date <YYYY-MM-DD>' to stop the recurrence (local date).
18020
- - Example: '${cmdPrefix()} calendar set --agent_id ${task.agentId} --event_title "<REPEAT_TASK_TITLE>" --description "<REPEAT_TASK_BODY>" --datetime 2026-04-18T09:00 --repeat 1day --repeat_stop_date 2026-05-18'
18110
+ - Example: '${cmdPrefix()} calendar set --event_title "<REPEAT_TASK_TITLE>" --description "<REPEAT_TASK_BODY>" --datetime 2026-04-18T09:00 --repeat 1day --repeat_stop_date 2026-05-18'
18021
18111
  ---
18022
18112
  List upcoming events:
18023
- - Run '${cmdPrefix()} calendar list --agent_id ${task.agentId}' (defaults: next 30 days, past 0 days).
18113
+ - Run '${cmdPrefix()} calendar list' (defaults: next 30 days, past 0 days).
18024
18114
  - Tune the window with '--future_days <N>' and '--past_days <N>'. Add '--json' for machine-readable output.
18025
18115
  - 'list' shows a '[has description]' badge instead of the full description — use 'show' (below) to read it.
18026
18116
 
18027
18117
  Show full detail of one event (use this to read the description):
18028
- - Run '${cmdPrefix()} calendar show --agent_id ${task.agentId} --event_id <EVENT_ID>'
18118
+ - Run '${cmdPrefix()} calendar show --event_id <EVENT_ID>'
18029
18119
  - Add '--json' for machine-readable output.
18030
18120
 
18031
18121
  Edit an existing event (preserves event id and recurring state):
18032
- - Run '${cmdPrefix()} calendar update --agent_id ${task.agentId} --event_id <EVENT_ID> [flags]'
18122
+ - Run '${cmdPrefix()} calendar update --event_id <EVENT_ID> [flags]'
18033
18123
  - Supply only the fields you want to change. Available flags:
18034
18124
  - '--event_title "<t>"' — rename the event / change the fire-time prompt
18035
18125
  - '--description "<d>"' to set, or '--clear_description' to remove
@@ -18039,7 +18129,7 @@ Edit an existing event (preserves event id and recurring state):
18039
18129
  - Passing no mutating flag is an error. Do NOT use 'delete' + 'set' to edit — that loses the event id and the recurring 'last fired' state.
18040
18130
 
18041
18131
  Delete an event:
18042
- - Run '${cmdPrefix()} calendar delete --agent_id ${task.agentId} --event_id <EVENT_ID>'
18132
+ - Run '${cmdPrefix()} calendar delete --event_id <EVENT_ID>'
18043
18133
  ---
18044
18134
  `;
18045
18135
  return content;
@@ -18073,13 +18163,26 @@ function ensureSymlinks(workDir) {
18073
18163
  continue;
18074
18164
  unlinkSync(aliasPath);
18075
18165
  } else {
18166
+ const aliasContent = readFileSync(aliasPath, "utf-8");
18167
+ const canonicalContent = readFileSync(canonicalPath, "utf-8");
18168
+ if (aliasContent === canonicalContent)
18169
+ continue;
18076
18170
  unlinkSync(aliasPath);
18077
18171
  }
18078
18172
  } catch (err) {
18079
18173
  if (err?.code !== "ENOENT")
18080
18174
  throw err;
18081
18175
  }
18082
- symlinkSync(CANONICAL_FILE, aliasPath);
18176
+ try {
18177
+ symlinkSync(CANONICAL_FILE, aliasPath);
18178
+ } catch (err) {
18179
+ const code = err?.code;
18180
+ if (code === "EPERM" || code === "EACCES") {
18181
+ copyFileSync(canonicalPath, aliasPath);
18182
+ } else {
18183
+ throw err;
18184
+ }
18185
+ }
18083
18186
  }
18084
18187
  }
18085
18188
  function writeInstructionFileIfChanged(workDir, task) {
@@ -18462,7 +18565,7 @@ function clearKillIntent(baseDir, taskId) {
18462
18565
  // daemon/prompt.ts
18463
18566
  var DM_RESPONSE_NOTICE = "IMPORTANT: Only your final text response is visible to the user." + " Tool calls, intermediate reasoning, and mid-process outputs are NOT displayed." + " Put all key information, answers, and conclusions in your final response — that is the only thing the user will read.";
18464
18567
  var EMAIL_NOTICE = "This task was triggered automatically by an incoming email. There is no human in this session." + " If you need to communicate with a human, you MUST send an email using the email sending tool." + " If you need more information or confirmation from the human, send them an email asking for it and then exit." + " Do not wait — when the human replies, a new task will be triggered automatically and you will be woken up with their response.";
18465
- var ISSUE_NOTICE = "This task was triggered by an assigned issue. The issue_id is provided in this message." + " Use `alook issue show --agent_id <your_agent_id> --issue_id <issue_id>` to read full context." + " Use `alook issue update --agent_id <your_agent_id> --issue_id <issue_id> --status <status>` to change status." + " Use `alook issue comment --agent_id <your_agent_id> --issue_id <issue_id> --body <text>` to leave a comment." + " CRITICAL — You MUST manage the issue status correctly. This is NOT optional:" + " 1. Set status to 'in_progress' when you start working." + " 2. If you complete the work yourself: leave a summary comment, then set status to 'review' as your last action. 'review' means there is actual completed work (code, artifact, result) ready for the owner to look at." + " 3. If you delegated work to colleagues and are waiting for their response: KEEP status as 'in_progress' and exit. This is expected — you will be woken up when they reply. Set 'review' only after all delegated work is confirmed complete." + " 4. NEVER set 'review' unless there is concrete completed work for the owner to review. Sending a plan to a colleague is NOT completed work." + " NEVER exit without doing at least one of: updating the status, or leaving a comment explaining what you did and what you're waiting for.";
18568
+ var ISSUE_NOTICE = "This task was triggered by an assigned issue. The issue_id is provided in this message." + " Use `alook issue show --issue_id <issue_id>` to read full context." + " Use `alook issue update --issue_id <issue_id> --status <status>` to change status." + " Use `alook issue comment --issue_id <issue_id> --body <text>` to leave a comment." + " CRITICAL — You MUST manage the issue status correctly. This is NOT optional:" + " 1. Set status to 'in_progress' when you start working." + " 2. If you complete the work yourself: leave a summary comment, then set status to 'review' as your last action. 'review' means there is actual completed work (code, artifact, result) ready for the owner to look at." + " 3. If you delegated work to colleagues and are waiting for their response: KEEP status as 'in_progress' and exit. This is expected — you will be woken up when they reply. Set 'review' only after all delegated work is confirmed complete." + " 4. NEVER set 'review' unless there is concrete completed work for the owner to review. Sending a plan to a colleague is NOT completed work." + " NEVER exit without doing at least one of: updating the status, or leaving a comment explaining what you did and what you're waiting for.";
18466
18569
  function buildDmNotice(name, email3) {
18467
18570
  return `This task was triggered by an incoming email on a conversation with ${name} (${email3}).` + ` ${name} is present in this session — reply to them directly.` + ` If you need to communicate with anyone else, use the email sending tool.`;
18468
18571
  }
@@ -18515,17 +18618,59 @@ async function writeMarkerFile(workspacesRoot, marker) {
18515
18618
  await writeFile(tmpPath, JSON.stringify(marker), { mode: 384 });
18516
18619
  await rename(tmpPath, finalPath);
18517
18620
  }
18621
+ function isRetryableError(e) {
18622
+ if (!(e instanceof Error))
18623
+ return true;
18624
+ const msg = e.message;
18625
+ if (/ECONNREFUSED|ECONNRESET|ETIMEDOUT|ENETUNREACH|EHOSTUNREACH|EAI_AGAIN/.test(msg))
18626
+ return true;
18627
+ const httpMatch = msg.match(/^HTTP (\d+):/);
18628
+ if (httpMatch) {
18629
+ const status = Number(httpMatch[1]);
18630
+ if (status >= 500)
18631
+ return true;
18632
+ if (status === 408 || status === 429)
18633
+ return true;
18634
+ return false;
18635
+ }
18636
+ return true;
18637
+ }
18638
+ function isClientError(e) {
18639
+ if (!(e instanceof Error))
18640
+ return false;
18641
+ const match = e.message.match(/^HTTP (\d+):/);
18642
+ if (!match)
18643
+ return false;
18644
+ const status = Number(match[1]);
18645
+ if (status === 408 || status === 429)
18646
+ return false;
18647
+ return status >= 400 && status < 500;
18648
+ }
18518
18649
  async function reportToServer(fn, markerData, workspacesRoot) {
18519
- try {
18520
- await fn();
18521
- } catch (e) {
18522
- log4.warn(`server report failed for task ${markerData.taskId}, writing marker: ${e}`);
18650
+ const RETRY_DELAYS = [1000, 3000, 9000];
18651
+ let lastErr;
18652
+ for (let attempt = 0;attempt <= RETRY_DELAYS.length; attempt++) {
18523
18653
  try {
18524
- await writeMarkerFile(workspacesRoot, markerData);
18525
- } catch (writeErr) {
18526
- log4.error(`marker write also failed for task ${markerData.taskId}: ${writeErr}`);
18654
+ await fn();
18655
+ return;
18656
+ } catch (e) {
18657
+ lastErr = e;
18658
+ if (isClientError(e)) {
18659
+ log4.info(`server report for task ${markerData.taskId}: task already in terminal state (${e})`);
18660
+ return;
18661
+ }
18662
+ if (attempt < RETRY_DELAYS.length && isRetryableError(e)) {
18663
+ log4.debug(`server report attempt ${attempt + 1} failed for task ${markerData.taskId}, retrying in ${RETRY_DELAYS[attempt]}ms`);
18664
+ await new Promise((r) => setTimeout(r, RETRY_DELAYS[attempt]));
18665
+ }
18527
18666
  }
18528
18667
  }
18668
+ log4.warn(`server report failed for task ${markerData.taskId} after retries, writing marker: ${lastErr}`);
18669
+ try {
18670
+ await writeMarkerFile(workspacesRoot, markerData);
18671
+ } catch (writeErr) {
18672
+ log4.error(`marker write also failed for task ${markerData.taskId}: ${writeErr}`);
18673
+ }
18529
18674
  }
18530
18675
  function sanitizeFilename(name) {
18531
18676
  return path.basename(name).replace(/[/\\]/g, "_").replace(/\.\./g, "_").slice(0, 255) || "file";
@@ -18558,9 +18703,11 @@ async function runSession(input) {
18558
18703
  log4.info(`starting (task=${task.id}, type=${task.type}, agent=${task.agentId}, provider=${provider}, model=${model || "default"})`);
18559
18704
  const client = new DaemonClient(serverURL);
18560
18705
  const backend = createBackend(provider, cliPath);
18561
- const { workDir, timelineDir, env } = prepare({ workspacesRoot }, task);
18562
- const agentBaseDir = path.dirname(timelineDir);
18706
+ const agentBaseDir = path.join(workspacesRoot, task.workspaceId, task.agentId, "workdir");
18707
+ const timelineDir = path.join(agentBaseDir, ".context_timeline").replace(/\\/g, "/");
18708
+ mkdirSync4(timelineDir, { recursive: true });
18563
18709
  await initEntryAsync(timelineDir, createTimelineEntry(task.id, task.prompt, task.type, undefined, process.pid, provider, task.contextKey, input.logFilePath));
18710
+ const { workDir, env } = prepare({ workspacesRoot }, task);
18564
18711
  let killed = false;
18565
18712
  const earlyOnKill = async () => {
18566
18713
  if (killed)
@@ -18615,7 +18762,7 @@ async function runSession(input) {
18615
18762
  entry.status = "failed";
18616
18763
  entry.errmsg = errMsg;
18617
18764
  });
18618
- await client.failTask(token, task.id, errMsg);
18765
+ await reportToServer(() => client.failTask(token, task.id, errMsg), { taskId: task.id, type: "fail", payload: { error: errMsg }, token, serverURL, createdAt: new Date().toISOString() }, workspacesRoot);
18619
18766
  process.removeListener("SIGTERM", earlyOnKill);
18620
18767
  process.removeListener("SIGINT", earlyOnKill);
18621
18768
  return;
@@ -18828,6 +18975,12 @@ async function main() {
18828
18975
  } catch (e) {
18829
18976
  log4.error(`session-runner: unhandled error for task ${input.task.id}`, e);
18830
18977
  await cleanupAttachments(input.task.id);
18978
+ const timelineDir = path.join(input.workspacesRoot, input.task.workspaceId, input.task.agentId, "workdir", ".context_timeline").replace(/\\/g, "/");
18979
+ updateEntry(timelineDir, input.task.id, (entry) => {
18980
+ entry.pid = null;
18981
+ entry.status = "failed";
18982
+ entry.errmsg = `session-runner crash: ${e}`;
18983
+ });
18831
18984
  const errorMsg = `session-runner crash: ${e}`;
18832
18985
  await reportToServer(() => client.failTask(input.token, input.task.id, errorMsg), { taskId: input.task.id, type: "fail", payload: { error: errorMsg }, token: input.token, serverURL: input.serverURL, createdAt: new Date().toISOString() }, input.workspacesRoot);
18833
18986
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alook/app",
3
- "version": "0.0.68",
3
+ "version": "0.0.70",
4
4
  "description": "Run Alook locally — one command, no clone needed",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/alookai/alook#readme",
@@ -1,3 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,949035,e=>{"use strict";let t=(0,e.i(406963).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],949035)},208020,(e,t,r)=>{t.exports=e.r(170928)},406963,e=>{"use strict";var t=e.i(298699);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),i=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,t.createContext)({}),s=(0,t.forwardRef)(({color:e,size:i,strokeWidth:s,absoluteStrokeWidth:o,className:l="",children:d,iconNode:u,...c},f)=>{let{size:p=24,strokeWidth:g=2,absoluteStrokeWidth:m=!1,color:h="currentColor",className:v=""}=(0,t.useContext)(a)??{},b=o??m?24*Number(s??g)/Number(i??p):s??g;return(0,t.createElement)("svg",{ref:f,...n,width:i??p??n.width,height:i??p??n.height,stroke:e??h,strokeWidth:b,className:r("lucide",v,l),...!d&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(c)&&{"aria-hidden":"true"},...c},[...u.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(d)?d:[d]])});e.s(["default",0,(e,n)=>{let a=(0,t.forwardRef)(({className:a,...o},l)=>(0,t.createElement)(s,{ref:l,iconNode:n,className:r(`lucide-${i(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,a),...o}));return a.displayName=i(e),a}],406963)},616117,484665,e=>{"use strict";e.i(459119);var t=e.i(298699),r=e.i(92615),i=e.i(773825),n=e.i(389068),a=e.i(943891),s=e.i(398258);let o=t.createContext(void 0);function l(e=!1){let r=t.useContext(o);if(void 0===r&&!e)throw Error((0,s.default)(16));return r}function d(e){return(0,r.isHTMLElement)(e)&&"BUTTON"===e.tagName}e.s(["CompositeRootContext",0,o,"useCompositeRootContext",0,l],484665),e.s(["useButton",0,function(e={}){let{disabled:r=!1,focusableWhenDisabled:s,tabIndex:o=0,native:u=!0,composite:c}=e,f=t.useRef(null),p=l(!0),g=c??void 0!==p,{props:m}=function(e){let{focusableWhenDisabled:r,disabled:i,composite:n=!1,tabIndex:a=0,isNativeButton:s}=e,o=n&&!1!==r,l=n&&!1===r;return{props:t.useMemo(()=>{let e={onKeyDown(e){i&&r&&"Tab"!==e.key&&e.preventDefault()}};return n||(e.tabIndex=a,!s&&i&&(e.tabIndex=r?a:-1)),(s&&(r||o)||!s&&i)&&(e["aria-disabled"]=i),s&&(!r||l)&&(e.disabled=i),e},[n,i,r,o,l,s,a])}}({focusableWhenDisabled:s,disabled:r,composite:g,tabIndex:o,isNativeButton:u}),h=t.useCallback(()=>{let e=f.current;d(e)&&g&&r&&void 0===m.disabled&&e.disabled&&(e.disabled=!1)},[r,m.disabled,g]);return(0,n.useIsoLayoutEffect)(h,[h]),{getButtonProps:t.useCallback((e={})=>{let{onClick:t,onMouseDown:i,onKeyUp:n,onKeyDown:s,onPointerDown:o,...l}=e,c=u?"button":void 0;return(0,a.mergeProps)({type:c,onClick(e){r?e.preventDefault():t?.(e)},onMouseDown(e){r||i?.(e)},onKeyDown(e){var i;if(r||((0,a.makeEventPreventable)(e),s?.(e),e.baseUIHandlerPrevented))return;let n=e.target===e.currentTarget,o=e.currentTarget,l=d(o),c=!u&&(i=o,!!(i?.tagName==="A"&&i?.href)),f=n&&(u?l:!c),p="Enter"===e.key,m=" "===e.key,h=o.getAttribute("role"),v=h?.startsWith("menuitem")||"option"===h||"gridcell"===h;if(n&&g&&m){if(e.defaultPrevented&&v)return;e.preventDefault(),c||u&&l?(o.click(),e.preventBaseUIHandler()):f&&(t?.(e),e.preventBaseUIHandler());return}f&&(!u&&(m||p)&&e.preventDefault(),!u&&p&&t?.(e))},onKeyUp(e){r||(((0,a.makeEventPreventable)(e),n?.(e),e.target===e.currentTarget&&u&&g&&d(e.currentTarget)&&" "===e.key)?e.preventDefault():!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||u||g||" "!==e.key||t?.(e)))},onPointerDown(e){r?e.preventDefault():o?.(e)}},u?void 0:{role:"button"},m,l)},[r,m,g,u]),buttonRef:(0,i.useStableCallback)(e=>{f.current=e,h()})}}],616117)},294237,e=>{"use strict";var t=e.i(7284);let r=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,i=t.clsx;e.s(["cva",0,(e,t)=>n=>{var a;if((null==t?void 0:t.variants)==null)return i(e,null==n?void 0:n.class,null==n?void 0:n.className);let{variants:s,defaultVariants:o}=t,l=Object.keys(s).map(e=>{let t=null==n?void 0:n[e],i=null==o?void 0:o[e];if(null===t)return null;let a=r(t)||r(i);return s[e][a]}),d=n&&Object.entries(n).reduce((e,t)=>{let[r,i]=t;return void 0===i||(e[r]=i),e},{});return i(e,l,null==t||null==(a=t.compoundVariants)?void 0:a.reduce((e,t)=>{let{class:r,className:i,...n}=t;return Object.entries(n).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...o,...d}[t]):({...o,...d})[t]===r})?[...e,r,i]:e},[]),null==n?void 0:n.class,null==n?void 0:n.className)}])},186339,e=>{"use strict";var t=e.i(368075);e.i(459119);var r=e.i(298699),i=e.i(616117),n=e.i(597849);let a=r.forwardRef(function(e,t){let{render:r,className:a,disabled:s=!1,focusableWhenDisabled:o=!1,nativeButton:l=!0,style:d,...u}=e,{getButtonProps:c,buttonRef:f}=(0,i.useButton)({disabled:s,focusableWhenDisabled:o,native:l});return(0,n.useRenderElement)("button",e,{state:{disabled:s},ref:[t,f],props:[u,c]})});var s=e.i(294237),o=e.i(613349);let l=(0,s.cva)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});e.s(["Button",0,function({className:e,variant:r="default",size:i="default",...n}){return(0,t.jsx)(a,{"data-slot":"button",className:(0,o.cn)(l({variant:r,size:i,className:e})),...n})},"buttonVariants",0,l],186339)},70738,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return n}});let i=e.r(298699);function n(e,t){let r=(0,i.useRef)(null),n=(0,i.useRef)(null);return(0,i.useCallback)(i=>{if(null===i){let e=r.current;e&&(r.current=null,e());let t=n.current;t&&(n.current=null,t())}else e&&(r.current=a(e,i)),t&&(n.current=a(t,i))},[e,t])}function a(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},934351,e=>{"use strict";var t=e.i(368075),r=e.i(613349);e.s(["Card",0,function({className:e,size:i="default",...n}){return(0,t.jsx)("div",{"data-slot":"card","data-size":i,className:(0,r.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...n})},"CardAction",0,function({className:e,...i}){return(0,t.jsx)("div",{"data-slot":"card-action",className:(0,r.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...i})},"CardContent",0,function({className:e,...i}){return(0,t.jsx)("div",{"data-slot":"card-content",className:(0,r.cn)("px-4 group-data-[size=sm]/card:px-3",e),...i})},"CardHeader",0,function({className:e,...i}){return(0,t.jsx)("div",{"data-slot":"card-header",className:(0,r.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",e),...i})},"CardTitle",0,function({className:e,...i}){return(0,t.jsx)("div",{"data-slot":"card-title",className:(0,r.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",e),...i})}])},821752,(e,t,r)=>{"use strict";function i({widthInt:e,heightInt:t,blurWidth:r,blurHeight:n,blurDataURL:a,objectFit:s}){let o=r?40*r:e,l=n?40*n:t,d=o&&l?`viewBox='0 0 ${o} ${l}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${d}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${d?"none":"contain"===s?"xMidYMid":"cover"===s?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${a}'/%3E%3C/svg%3E`}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImageBlurSvg",{enumerable:!0,get:function(){return i}})},498074,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var i={VALID_LOADERS:function(){return a},imageConfigDefault:function(){return s}};for(var n in i)Object.defineProperty(r,n,{enumerable:!0,get:i[n]});let a=["default","imgix","cloudinary","akamai","custom"],s={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1}},355477,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImgProps",{enumerable:!0,get:function(){return d}}),e.r(611134);let i=e.r(641894),n=e.r(821752),a=e.r(498074),s=["-moz-initial","fill","none","scale-down",void 0];function o(e){return void 0!==e.default}function l(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function d({src:e,sizes:t,unoptimized:r=!1,priority:u=!1,preload:c=!1,loading:f,className:p,quality:g,width:m,height:h,fill:v=!1,style:b,overrideSrc:x,onLoad:y,onLoadingComplete:w,placeholder:j="empty",blurDataURL:_,fetchPriority:C,decoding:k="async",layout:P,objectFit:O,objectPosition:z,lazyBoundary:E,lazyRoot:S,...R},N){var M;let I,D,A,{imgConf:T,showAltText:$,blurComplete:L,defaultLoader:U}=N,B=T||a.imageConfigDefault;if("allSizes"in B)I=B;else{let e=[...B.deviceSizes,...B.imageSizes].sort((e,t)=>e-t),t=B.deviceSizes.sort((e,t)=>e-t),r=B.qualities?.sort((e,t)=>e-t);I={...B,allSizes:e,deviceSizes:t,qualities:r}}if(void 0===U)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let W=R.loader||U;delete R.loader,delete R.srcSet;let q="__next_img_default"in W;if(q){if("custom"===I.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop.
2
- Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=W;W=t=>{let{config:r,...i}=t;return e(i)}}if(P){"fill"===P&&(v=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[P];e&&(b={...b,...e});let r={responsive:"100vw",fill:"100vw"}[P];r&&!t&&(t=r)}let F="",H=l(m),G=l(h);if((M=e)&&"object"==typeof M&&(o(M)||void 0!==M.src)){let t=o(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(D=t.blurWidth,A=t.blurHeight,_=_||t.blurDataURL,F=t.src,!v)if(H||G){if(H&&!G){let e=H/t.width;G=Math.round(t.height*e)}else if(!H&&G){let e=G/t.height;H=Math.round(t.width*e)}}else H=t.width,G=t.height}let V=!u&&!c&&("lazy"===f||void 0===f);(!(e="string"==typeof e?e:F)||e.startsWith("data:")||e.startsWith("blob:"))&&(r=!0,V=!1),I.unoptimized&&(r=!0),q&&!I.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(r=!0);let K=l(g),X=Object.assign(v?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:O,objectPosition:z}:{},$?{}:{color:"transparent"},b),J=L||"empty"===j?null:"blur"===j?`url("data:image/svg+xml;charset=utf-8,${(0,n.getImageBlurSvg)({widthInt:H,heightInt:G,blurWidth:D,blurHeight:A,blurDataURL:_||"",objectFit:X.objectFit})}")`:`url("${j}")`,Q=s.includes(X.objectFit)?"fill"===X.objectFit?"100% 100%":"cover":X.objectFit,Y=J?{backgroundSize:Q,backgroundPosition:X.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:J}:{},Z=function({config:e,src:t,unoptimized:r,width:n,quality:a,sizes:s,loader:o}){if(r){if(t.startsWith("/")&&!t.startsWith("//")){let e=(0,i.getDeploymentId)();if(e){let r=t.indexOf("?");if(-1!==r){let i=new URLSearchParams(t.slice(r+1));i.get("dpl")||(i.append("dpl",e),t=t.slice(0,r)+"?"+i.toString())}else t+=`?dpl=${e}`}}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:l,kind:d}=function({deviceSizes:e,allSizes:t},r,i){if(i){let r=/(^|\s)(1?\d?\d)vw/g,n=[];for(let e;e=r.exec(i);)n.push(parseInt(e[2]));if(n.length){let r=.01*Math.min(...n);return{widths:t.filter(t=>t>=e[0]*r),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof r?{widths:e,kind:"w"}:{widths:[...new Set([r,2*r].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,n,s),u=l.length-1;return{sizes:s||"w"!==d?s:"100vw",srcSet:l.map((r,i)=>`${o({config:e,src:t,quality:a,width:r})} ${"w"===d?r:i+1}${d}`).join(", "),src:o({config:e,src:t,quality:a,width:l[u]})}}({config:I,src:e,unoptimized:r,width:H,quality:K,sizes:t,loader:W}),ee=V?"lazy":f;return{props:{...R,loading:ee,fetchPriority:C,width:H,height:G,decoding:k,className:p,style:{...X,...Y},sizes:Z.sizes,srcSet:Z.srcSet,src:x||Z.src},meta:{unoptimized:r,preload:c||u,placeholder:j,fill:v}}}},477847,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return o}});let i=e.r(298699),n="u"<typeof window,a=n?()=>{}:i.useLayoutEffect,s=n?()=>{}:i.useEffect;function o(e){let{headManager:t,reduceComponentsToState:r}=e;function o(){if(t&&t.mountedInstances){let e=i.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(e))}}return n&&(t?.mountedInstances?.add(e.children),o()),a(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),a(()=>(t&&(t._pendingUpdate=o),()=>{t&&(t._pendingUpdate=o)})),s(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},769049,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var i={default:function(){return m},defaultHead:function(){return c}};for(var n in i)Object.defineProperty(r,n,{enumerable:!0,get:i[n]});let a=e.r(481258),s=e.r(744066),o=e.r(368075),l=s._(e.r(298699)),d=a._(e.r(477847)),u=e.r(951024);function c(){return[(0,o.jsx)("meta",{charSet:"utf-8"},"charset"),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function f(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===l.default.Fragment?e.concat(l.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}e.r(611134);let p=["name","httpEquiv","charSet","itemProp"];function g(e){let t,r,i,n;return e.reduce(f,[]).reverse().concat(c().reverse()).filter((t=new Set,r=new Set,i=new Set,n={},e=>{let a=!0,s=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){s=!0;let r=e.key.slice(e.key.indexOf("$")+1);t.has(r)?a=!1:t.add(r)}switch(e.type){case"title":case"base":r.has(e.type)?a=!1:r.add(e.type);break;case"meta":for(let t=0,r=p.length;t<r;t++){let r=p[t];if(e.props.hasOwnProperty(r))if("charSet"===r)i.has(r)?a=!1:i.add(r);else{let t=e.props[r],i=n[r]||new Set;("name"!==r||!s)&&i.has(t)?a=!1:(i.add(t),n[r]=i)}}}return a})).reverse().map((e,t)=>{let r=e.key||t;return l.default.cloneElement(e,{key:r})})}let m=function({children:e}){let t=(0,l.useContext)(u.HeadManagerContext);return(0,o.jsx)(d.default,{reduceComponentsToState:g,headManager:t,children:e})};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},703694,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ImageConfigContext",{enumerable:!0,get:function(){return a}});let i=e.r(481258)._(e.r(298699)),n=e.r(498074),a=i.default.createContext(n.imageConfigDefault)},507585,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RouterContext",{enumerable:!0,get:function(){return i}});let i=e.r(481258)._(e.r(298699)).default.createContext(null)},246955,(e,t,r)=>{"use strict";function i(e,t){let r=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>Math.abs(t-r)<Math.abs(e-r)?t:e,t.qualities[0]):r}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"findClosestQuality",{enumerable:!0,get:function(){return i}})},107475,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s}});let i=e.r(246955),n=e.r(641894);function a({config:e,src:t,width:r,quality:s}){let o=(0,n.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//")){let e=t.indexOf("?");if(-1!==e){let r=new URLSearchParams(t.slice(e+1)),i=r.get("dpl");if(i){o=i,r.delete("dpl");let n=r.toString();t=t.slice(0,e)+(n?"?"+n:"")}}}if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns.
3
- Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let l=(0,i.findClosestQuality)(s,e);return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${l}${t.startsWith("/")&&o?`&dpl=${o}`:""}`}a.__next_img_default=!0;let s=a},730145,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"Image",{enumerable:!0,get:function(){return y}});let i=e.r(481258),n=e.r(744066),a=e.r(368075),s=n._(e.r(298699)),o=i._(e.r(550008)),l=i._(e.r(769049)),d=e.r(355477),u=e.r(498074),c=e.r(703694);e.r(611134);let f=e.r(507585),p=i._(e.r(107475)),g=e.r(70738),m={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function h(e,t,r,i,n,a,s){let o=e?.src;e&&e["data-loaded-src"]!==o&&(e["data-loaded-src"]=o,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&n(!0),r?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let i=!1,n=!1;r.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>i,isPropagationStopped:()=>n,persist:()=>{},preventDefault:()=>{i=!0,t.preventDefault()},stopPropagation:()=>{n=!0,t.stopPropagation()}})}i?.current&&i.current(e)}}))}function v(e){return s.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let b=(0,s.forwardRef)(({src:e,srcSet:t,sizes:r,height:i,width:n,decoding:o,className:l,style:d,fetchPriority:u,placeholder:c,loading:f,unoptimized:p,fill:m,onLoadRef:b,onLoadingCompleteRef:x,setBlurComplete:y,setShowAltText:w,sizesInput:j,onLoad:_,onError:C,...k},P)=>{let O=(0,s.useCallback)(e=>{e&&(C&&(e.src=e.src),e.complete&&h(e,c,b,x,y,p,j))},[e,c,b,x,y,C,p,j]),z=(0,g.useMergedRef)(P,O);return(0,a.jsx)("img",{...k,...v(u),loading:f,width:n,height:i,decoding:o,"data-nimg":m?"fill":"1",className:l,style:d,sizes:r,srcSet:t,src:e,ref:z,onLoad:e=>{h(e.currentTarget,c,b,x,y,p,j)},onError:e=>{w(!0),"empty"!==c&&y(!0),C&&C(e)}})});function x({isAppRouter:e,imgAttributes:t}){let r={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...v(t.fetchPriority)};return e&&o.default.preload?(o.default.preload(t.src,r),null):(0,a.jsx)(l.default,{children:(0,a.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...r},"__nimg-"+t.src+t.srcSet+t.sizes)})}let y=(0,s.forwardRef)((e,t)=>{let r=(0,s.useContext)(f.RouterContext),i=(0,s.useContext)(c.ImageConfigContext),n=(0,s.useMemo)(()=>{let e=m||i||u.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>e-t),r=e.deviceSizes.sort((e,t)=>e-t),n=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:r,qualities:n,localPatterns:"u"<typeof window?i?.localPatterns:e.localPatterns}},[i]),{onLoad:o,onLoadingComplete:l}=e,g=(0,s.useRef)(o);(0,s.useEffect)(()=>{g.current=o},[o]);let h=(0,s.useRef)(l);(0,s.useEffect)(()=>{h.current=l},[l]);let[v,y]=(0,s.useState)(!1),[w,j]=(0,s.useState)(!1),{props:_,meta:C}=(0,d.getImgProps)(e,{defaultLoader:p.default,imgConf:n,blurComplete:v,showAltText:w});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(b,{..._,unoptimized:C.unoptimized,placeholder:C.placeholder,fill:C.fill,onLoadRef:g,onLoadingCompleteRef:h,setBlurComplete:y,setShowAltText:j,sizesInput:e.sizes,ref:t}),C.preload?(0,a.jsx)(x,{isAppRouter:!r,imgAttributes:_}):null]})});("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},851287,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var i={default:function(){return u},getImageProps:function(){return d}};for(var n in i)Object.defineProperty(r,n,{enumerable:!0,get:i[n]});let a=e.r(481258),s=e.r(355477),o=e.r(730145),l=a._(e.r(107475));function d(e){let{props:t}=(0,s.getImgProps)(e,{defaultLoader:l.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[e,r]of Object.entries(t))void 0===r&&delete t[e];return{props:t}}let u=o.Image},736956,(e,t,r)=>{t.exports=e.r(851287)},866519,e=>{"use strict";let t=(0,e.i(406963).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);e.s(["LogOut",0,t],866519)},898707,e=>{"use strict";var t=e.i(368075);e.s(["GradientBackground",0,function(){return(0,t.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none fixed inset-0 -z-10 overflow-hidden bg-[oklch(0.93_0.015_80)] dark:bg-transparent"})}])},643486,e=>{"use strict";var t=e.i(368075),r=e.i(298699),i=e.i(635790),n=e.i(736956),a=e.i(613349);let s={sm:{icon:28,text:"text-2xl"},lg:{icon:36,text:"text-4xl"}};e.s(["Logo",0,function({size:e="sm",className:o,iconOnly:l=!1}){let{icon:d,text:u}=s[e],{resolvedTheme:c,setTheme:f}=(0,i.useTheme)(),[p,g]=(0,r.useState)(!1),m=(0,r.useRef)(g);return(0,r.useEffect)(()=>{m.current(!0)},[]),(0,t.jsxs)("button",{type:"button",onClick:()=>{f("dark"===c?"light":"dark")},"aria-label":"Toggle theme",className:(0,a.cn)("flex items-center gap-1.5 cursor-pointer select-none transition-opacity hover:opacity-70",o),children:[p?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.default,{src:"/alook.svg",alt:"Alook",width:d,height:d,className:"dark:hidden"}),(0,t.jsx)(n.default,{src:"/alook-dark.svg",alt:"Alook",width:d,height:d,className:"hidden dark:block"})]}):(0,t.jsx)("span",{style:{width:d,height:d}}),!l&&(0,t.jsx)("span",{className:(0,a.cn)(u,"font-black tracking-tight"),style:{fontFamily:"var(--font-brand)"},children:"Alook"})]})}])},12338,e=>{"use strict";var t=e.i(368075),r=e.i(208020),i=e.i(186339),n=e.i(934351),a=e.i(898707),s=e.i(643486),o=e.i(949035);let l=(0,e.i(406963).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);var d=e.i(866519),u=e.i(23055);e.s(["WorkspaceListClient",0,function({workspaces:e}){let c=(0,r.useRouter)();return(0,t.jsxs)("div",{className:"relative flex min-h-dvh flex-col items-center justify-center p-6",children:[(0,t.jsx)(a.GradientBackground,{}),(0,t.jsxs)(i.Button,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 text-muted-foreground",onClick:async()=>{await (0,u.signOut)(),c.push("/sign-in")},children:[(0,t.jsx)(d.LogOut,{className:"size-4"}),"Log out"]}),(0,t.jsxs)("div",{className:"w-full max-w-md space-y-8",children:[(0,t.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,t.jsx)(s.Logo,{size:"lg"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Choose a workspace to continue."})]}),(0,t.jsx)("div",{className:"space-y-3",children:e.map(e=>(0,t.jsx)(n.Card,{className:"cursor-pointer transition-colors duration-200 hover:bg-accent/50",onClick:()=>c.push(`/w/${e.slug}/home`),children:(0,t.jsxs)(n.CardContent,{className:"flex items-center justify-between px-3 py-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)("p",{className:"text-sm font-medium truncate",children:e.name}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:e.slug})]}),(0,t.jsx)(l,{className:"size-3.5 text-muted-foreground shrink-0"})]})},e.id))}),(0,t.jsxs)(i.Button,{variant:"outline",className:"w-full",onClick:()=>c.push("/studio/new"),children:[(0,t.jsx)(o.Plus,{className:"size-4"}),"New workspace"]})]})]})}],12338)}]);