thursday-agent 0.3.0 → 0.5.0

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 (253) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +2 -2
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  17. package/.next/server/app/api/artifact/route.js +4 -4
  18. package/.next/server/app/api/artifact/route.js.nft.json +1 -1
  19. package/.next/server/app/api/bot/memory/files/route.js +3 -3
  20. package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
  21. package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bot/route.js.nft.json +1 -1
  23. package/.next/server/app/api/bot/task/[id]/route.js +8 -8
  24. package/.next/server/app/api/bot/task/[id]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/bot/task/route.js +6 -6
  26. package/.next/server/app/api/bot/task/route.js.nft.json +1 -1
  27. package/.next/server/app/api/config/route.js.nft.json +1 -1
  28. package/.next/server/app/api/events/route.js.nft.json +1 -1
  29. package/.next/server/app/api/file/[...path]/route.js +4 -4
  30. package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/llm-model/catalog/route.js +2 -2
  32. package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
  33. package/.next/server/app/api/llm-model/credits/route.js +2 -2
  34. package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -1
  35. package/.next/server/app/api/llm-model/route.js +2 -2
  36. package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
  37. package/.next/server/app/api/llm-model/subscription/route.js +2 -2
  38. package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
  39. package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
  40. package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
  41. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  42. package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
  43. package/.next/server/app/api/memory/edit/route.js +11 -11
  44. package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
  45. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  46. package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
  47. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  48. package/.next/server/app/api/thursday/call/route.js +6 -6
  49. package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
  50. package/.next/server/app/api/thursday/skills/route.js +6 -6
  51. package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
  52. package/.next/server/app/api/thursday/tool-call/route.js +8 -8
  53. package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
  54. package/.next/server/app/api/workspace/route.js +3 -2
  55. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  56. package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
  57. package/.next/server/app/artifact/[...path]/page.js +2 -2
  58. package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
  59. package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  61. package/.next/server/app/page/server-reference-manifest.json +40 -40
  62. package/.next/server/app/page.js +3 -3
  63. package/.next/server/app/page.js.nft.json +1 -1
  64. package/.next/server/app/page_client-reference-manifest.js +1 -1
  65. package/.next/server/chunks/[root-of-the-server]__026u77e._.js +5 -0
  66. package/.next/server/chunks/[root-of-the-server]__02va5wz._.js +1 -1
  67. package/.next/server/chunks/{[root-of-the-server]__02xjoto._.js → [root-of-the-server]__050zri4._.js} +1 -1
  68. package/.next/server/chunks/[root-of-the-server]__0bg9710._.js +3 -0
  69. package/.next/server/chunks/[root-of-the-server]__0in-d5s._.js +3 -0
  70. package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +1 -1
  71. package/.next/server/chunks/[root-of-the-server]__0pa9k-f._.js +8 -0
  72. package/.next/server/chunks/[root-of-the-server]__0qi_m0e._.js +8 -0
  73. package/.next/server/chunks/[root-of-the-server]__0tq0m_k._.js +3 -0
  74. package/.next/server/chunks/[root-of-the-server]__0xep6j_._.js +3 -0
  75. package/.next/server/chunks/[root-of-the-server]__1-ga0kh._.js +2 -2
  76. package/.next/server/chunks/[root-of-the-server]__144l7qt._.js +8 -0
  77. package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +2 -2
  78. package/.next/server/chunks/[root-of-the-server]__1anc1p9._.js +1 -1
  79. package/.next/server/chunks/[root-of-the-server]__1jg8t86._.js +8 -0
  80. package/.next/server/chunks/{[root-of-the-server]__12cabg9._.js → [root-of-the-server]__1lldzy9._.js} +1 -1
  81. package/.next/server/chunks/[root-of-the-server]__1orn-5b._.js +4 -3
  82. package/.next/server/chunks/{[root-of-the-server]__01dkp4a._.js → [root-of-the-server]__1peqvsi._.js} +1 -1
  83. package/.next/server/chunks/[root-of-the-server]__1w8gm5h._.js +10 -0
  84. package/.next/server/chunks/[root-of-the-server]__1xt39nn._.js +8 -0
  85. package/.next/server/chunks/[root-of-the-server]__1zb8mfo._.js +8 -0
  86. package/.next/server/chunks/_0-fjql4._.js +11 -6
  87. package/.next/server/chunks/_00xh_q0._.js +4 -6
  88. package/.next/server/chunks/_05h2cii._.js +1 -1
  89. package/.next/server/chunks/{_1_9mjx-._.js → _091bi8d._.js} +1 -1
  90. package/.next/server/chunks/_0fzqt2y._.js +57 -45
  91. package/.next/server/chunks/{_0u4aiy2._.js → _0lr92vd._.js} +1 -1
  92. package/.next/server/chunks/_0mecv0f._.js +11 -6
  93. package/.next/server/chunks/_0mh8j4m._.js +1 -1
  94. package/.next/server/chunks/{_0sbynis._.js → _0si7xzn._.js} +1 -1
  95. package/.next/server/chunks/_0wp4le3._.js +1 -1
  96. package/.next/server/chunks/_0y5fg-x._.js +1 -1
  97. package/.next/server/chunks/_1230wbx._.js +5 -5
  98. package/.next/server/chunks/_15hq89o._.js +1 -1
  99. package/.next/server/chunks/{_0obojvv._.js → _18d7-5p._.js} +1 -1
  100. package/.next/server/chunks/{_03kp0jp._.js → _1c78vw5._.js} +71 -61
  101. package/.next/server/chunks/_1d0j961._.js +2 -2
  102. package/.next/server/chunks/_1j8k_j5._.js +1 -1
  103. package/.next/server/chunks/_1krd9rf._.js +1 -1
  104. package/.next/server/chunks/_1php4eq._.js +1 -1
  105. package/.next/server/chunks/{_03a0897._.js → _1zkfbaa._.js} +1 -1
  106. package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
  107. package/.next/server/chunks/features_1qf3cei._.js +6 -1
  108. package/.next/server/chunks/features_memory_1uqvksn._.js +2 -2
  109. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0r28-sm._.js → node_modules_consola_dist_chunks_prompt_mjs_17k8irj._.js} +1 -1
  110. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_1xoq2rl._.js → node_modules_consola_dist_chunks_prompt_mjs_1jidylq._.js} +1 -1
  111. package/.next/server/chunks/ssr/[root-of-the-server]__0-nob52._.js +4 -0
  112. package/.next/server/chunks/ssr/[root-of-the-server]__092knlj._.js +3 -0
  113. package/.next/server/chunks/ssr/{[root-of-the-server]__0_69wqr._.js → [root-of-the-server]__0s4wb56._.js} +1 -1
  114. package/.next/server/chunks/ssr/{[root-of-the-server]__1eh7hid._.js → [root-of-the-server]__0s9dq5u._.js} +1 -1
  115. package/.next/server/chunks/ssr/{[root-of-the-server]__0zkv7z_._.js → [root-of-the-server]__0sd3izg._.js} +2 -2
  116. package/.next/server/chunks/ssr/{[root-of-the-server]__1gtlw6v._.js → [root-of-the-server]__1-13tcn._.js} +3 -3
  117. package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +13 -9
  118. package/.next/server/chunks/ssr/[root-of-the-server]__1mzi-ju._.js +1 -1
  119. package/.next/server/chunks/ssr/{[root-of-the-server]__1cyjywu._.js → [root-of-the-server]__1zidpfl._.js} +1 -1
  120. package/.next/server/chunks/ssr/_001_ms1._.js +6 -1
  121. package/.next/server/chunks/ssr/{_07uchnc._.js → _04z2c7b._.js} +2 -2
  122. package/.next/server/chunks/ssr/{_0kbkmar._.js → _06tssji._.js} +2 -2
  123. package/.next/server/chunks/ssr/_0fk4c7d._.js +3 -0
  124. package/.next/server/chunks/ssr/_0i_6q1w._.js +2 -2
  125. package/.next/server/chunks/ssr/{_1xvgn77._.js → _0m2lsd1._.js} +2 -2
  126. package/.next/server/chunks/ssr/_0mggveb._.js +3 -0
  127. package/.next/server/chunks/ssr/_0nbpc_8._.js +3 -0
  128. package/.next/server/chunks/ssr/{_0y0tiht._.js → _0rzucul._.js} +3 -3
  129. package/.next/server/chunks/ssr/{_0mb8zc8._.js → _0s99bgb._.js} +2 -2
  130. package/.next/server/chunks/ssr/_0zcjrbg._.js +3 -0
  131. package/.next/server/chunks/ssr/_1-teee5._.js +4 -4
  132. package/.next/server/chunks/ssr/{_0c-ql2m._.js → _11j92tu._.js} +2 -2
  133. package/.next/server/chunks/ssr/_13fke0x._.js +1 -1
  134. package/.next/server/chunks/ssr/{_01_6m32._.js → _1ebxla1._.js} +2 -2
  135. package/.next/server/chunks/ssr/_1jdgjv9._.js +3 -0
  136. package/.next/server/chunks/ssr/{_0u2jv_x._.js → _1lz_cq2._.js} +60 -50
  137. package/.next/server/chunks/ssr/{_20kd_n0._.js → _1nj4niv._.js} +3 -3
  138. package/.next/server/chunks/ssr/_1ovmc9s._.js +3 -0
  139. package/.next/server/chunks/ssr/_1sji22n._.js +1 -1
  140. package/.next/server/chunks/ssr/_1vyd1ji._.js +1 -1
  141. package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
  142. package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
  143. package/.next/server/chunks/ssr/{node_modules_1-hc6uv._.js → node_modules_0-dr_o7._.js} +1 -1
  144. package/.next/server/chunks/ssr/{node_modules_124bue5._.js → node_modules_04sksn9._.js} +1 -1
  145. package/.next/server/chunks/ssr/{node_modules_1uuj9x1._.js → node_modules_05-n6dz._.js} +1 -1
  146. package/.next/server/chunks/ssr/{node_modules_1i7u1ia._.js → node_modules_056qgf-._.js} +1 -1
  147. package/.next/server/chunks/ssr/{node_modules_0lm7_vm._.js → node_modules_07dsgkx._.js} +1 -1
  148. package/.next/server/chunks/ssr/{node_modules_1h4a4pp._.js → node_modules_0bvopy2._.js} +1 -1
  149. package/.next/server/chunks/ssr/{node_modules_1bc7gu8._.js → node_modules_0fkeku3._.js} +1 -1
  150. package/.next/server/chunks/ssr/{node_modules_0h50b8n._.js → node_modules_0ifp389._.js} +1 -1
  151. package/.next/server/chunks/ssr/{node_modules_0zp9r92._.js → node_modules_0iur59s._.js} +1 -1
  152. package/.next/server/chunks/ssr/{node_modules_063xwpp._.js → node_modules_0m383r2._.js} +1 -1
  153. package/.next/server/chunks/ssr/{node_modules_1bgb6-f._.js → node_modules_0u9da1h._.js} +1 -1
  154. package/.next/server/chunks/ssr/{node_modules_0bvraul._.js → node_modules_0zeg3x_._.js} +1 -1
  155. package/.next/server/chunks/ssr/{node_modules_1t9cyee._.js → node_modules_1-y7nni._.js} +1 -1
  156. package/.next/server/chunks/ssr/{node_modules_1_n3ztw._.js → node_modules_16mkxuo._.js} +1 -1
  157. package/.next/server/chunks/ssr/{node_modules_0eu1va6._.js → node_modules_1a0kmjl._.js} +1 -1
  158. package/.next/server/chunks/ssr/{node_modules_0z5tsu8._.js → node_modules_1chvq5f._.js} +1 -1
  159. package/.next/server/chunks/ssr/{node_modules_0h7u60n._.js → node_modules_1j8j4pt._.js} +1 -1
  160. package/.next/server/chunks/ssr/{node_modules_0rjg6t1._.js → node_modules_1k6n600._.js} +1 -1
  161. package/.next/server/chunks/ssr/{node_modules_1xx28h1._.js → node_modules_1k7z2j6._.js} +1 -1
  162. package/.next/server/chunks/ssr/{node_modules_0h5hnr1._.js → node_modules_1k8j8n0._.js} +1 -1
  163. package/.next/server/chunks/ssr/{node_modules_0mwym0g._.js → node_modules_1lz0oxc._.js} +1 -1
  164. package/.next/server/chunks/ssr/{node_modules_1vqb6po._.js → node_modules_1t77e4n._.js} +1 -1
  165. package/.next/server/chunks/ssr/{node_modules_1l0qtdu._.js → node_modules_1uyk91w._.js} +1 -1
  166. package/.next/server/chunks/ssr/{node_modules_0y_cded._.js → node_modules_1x0ztf4._.js} +1 -1
  167. package/.next/server/chunks/ssr/{node_modules_113tz0l._.js → node_modules_1y79i83._.js} +1 -1
  168. package/.next/server/chunks/ssr/{node_modules_1juq3hs._.js → node_modules_20c28js._.js} +1 -1
  169. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0d3skpl._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0bkwd0u._.js} +1 -1
  170. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0i44kk5._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0p9a9su._.js} +1 -1
  171. package/.next/server/chunks/ssr/{node_modules_@vercel_oidc_dist_0qe30a_._.js → node_modules_@vercel_oidc_dist_1o553h-._.js} +1 -1
  172. package/.next/server/middleware-build-manifest.js +3 -3
  173. package/.next/server/pages/404.html +1 -1
  174. package/.next/server/pages/500.html +1 -1
  175. package/.next/server/server-reference-manifest.js +1 -1
  176. package/.next/server/server-reference-manifest.json +41 -41
  177. package/.next/static/chunks/{17donp69y4do7.js → 0n3jle9kbqfr2.js} +8 -8
  178. package/.next/static/chunks/{3ok9_x74rip3v.js → 11r2yp_yh9_qn.js} +1 -1
  179. package/.next/static/chunks/{26-pr2c9ro222.js → 126fj4pga_72k.js} +1 -1
  180. package/.next/static/chunks/{2a0k6jlq0_v1u.js → 159udiexf6dom.js} +2 -2
  181. package/.next/static/chunks/18gi7o2ibrgh8.js +3 -0
  182. package/.next/static/chunks/{0x79tx04dxbpp.js → 1q9z1tohil7xn.js} +1 -1
  183. package/.next/static/chunks/{3cfi_q6d_wtci.js → 1sjgfets224re.js} +1 -1
  184. package/.next/static/chunks/{3agpgkwaa321p.js → 1wszsr83t01gh.js} +1 -1
  185. package/.next/static/chunks/22_zkas21rpna.js +1 -0
  186. package/.next/static/chunks/{1ekc7ul556kbl.js → 2szintyibu0s5.js} +1 -1
  187. package/.next/static/chunks/{1okqiww3pnwka.js → 3-b6b7entqazs.js} +1 -1
  188. package/.next/static/chunks/3cq5g494yuke8.css +1 -0
  189. package/.next/static/chunks/{2fzs9fm8yarvq.js → 3dmbhsv2u_8kj.js} +1 -1
  190. package/.next/static/chunks/{1grhjo7a5a0_-.js → 3i0a5px-oufgc.js} +1 -1
  191. package/.next/static/chunks/{280t0_e99i276.js → 3wexk9qo8zuj3.js} +3 -3
  192. package/.next/static/chunks/3xre8bu_pk1p_.js +1 -0
  193. package/.next/static/chunks/3zv6t3i77xhr_.js +1 -0
  194. package/.next/static/chunks/{28cizcdaabd4h.js → 408ueu4hfvcg7.js} +1 -1
  195. package/.next/static/chunks/{3xpbkl66ssib5.js → 435atsnhs7ksu.js} +8 -8
  196. package/README.md +46 -23
  197. package/app/api/events/app-event.ts +0 -2
  198. package/bin/port.mjs +65 -0
  199. package/bin/thursday.mjs +2 -33
  200. package/docs/how-it-works.md +11 -7
  201. package/docs/images/face-dark.png +0 -0
  202. package/docs/images/face-light.png +0 -0
  203. package/docs/images/keeps-going.png +0 -0
  204. package/features/ai/chatgpt.ts +42 -20
  205. package/features/ai/load-tools.ts +20 -14
  206. package/features/ai/prompts/bot.prompt.ts +91 -89
  207. package/features/ai/prompts/thursday.prompt.ts +48 -41
  208. package/features/ai/tools/bot.tool.ts +3 -3
  209. package/features/ai/tools/memory.tool.ts +65 -62
  210. package/features/ai/tools/skills.tool.ts +25 -8
  211. package/features/ai/tools/tool-name.ts +0 -1
  212. package/features/ai/tools/workspace.tool.ts +3 -0
  213. package/features/bot/bot.action.ts +6 -1
  214. package/features/bot/bot.run.ts +195 -80
  215. package/features/bot/bot.runner.ts +82 -39
  216. package/features/bot/bot.schema.ts +25 -0
  217. package/features/bot/components/bot-room.tsx +57 -4
  218. package/features/bot/components/bot-tool.tsx +0 -1
  219. package/features/bot/task.query.ts +132 -10
  220. package/features/bot/task.store.ts +26 -9
  221. package/features/memory/components/memory-edit.tsx +7 -5
  222. package/features/thursday/components/thursday.tsx +0 -3
  223. package/features/thursday/tool-line.ts +0 -1
  224. package/features/thursday/use-thursday.ts +1 -1
  225. package/features/workspace/workspace.ts +27 -20
  226. package/package.json +1 -1
  227. package/skills/browser/SKILL.md +6 -5
  228. package/.next/server/chunks/[root-of-the-server]__04q--0f._.js +0 -8
  229. package/.next/server/chunks/[root-of-the-server]__0bl-e63._.js +0 -3
  230. package/.next/server/chunks/[root-of-the-server]__0jq4ohy._.js +0 -8
  231. package/.next/server/chunks/[root-of-the-server]__0ls6_8y._.js +0 -8
  232. package/.next/server/chunks/[root-of-the-server]__1339jnv._.js +0 -8
  233. package/.next/server/chunks/[root-of-the-server]__18_teo8._.js +0 -8
  234. package/.next/server/chunks/[root-of-the-server]__1ccon1w._.js +0 -10
  235. package/.next/server/chunks/[root-of-the-server]__1wa1k7r._.js +0 -8
  236. package/.next/server/chunks/_1zjrdag._.js +0 -3
  237. package/.next/server/chunks/ssr/[root-of-the-server]__1ox7hbk._.js +0 -4
  238. package/.next/server/chunks/ssr/[root-of-the-server]__1pduf5n._.js +0 -3
  239. package/.next/server/chunks/ssr/_0mo2w06._.js +0 -3
  240. package/.next/server/chunks/ssr/_13z3f85._.js +0 -3
  241. package/.next/server/chunks/ssr/_14_lw10._.js +0 -3
  242. package/.next/server/chunks/ssr/_1eoqg_g._.js +0 -3
  243. package/.next/server/chunks/ssr/_1spzm8z._.js +0 -3
  244. package/.next/server/chunks/ssr/lib_date-like_ts_02is0pw._.js +0 -3
  245. package/.next/static/chunks/0tmgrnlje14-s.js +0 -3
  246. package/.next/static/chunks/0xzgvc0fkdb6t.js +0 -1
  247. package/.next/static/chunks/14hgtsjg-kael.css +0 -1
  248. package/.next/static/chunks/2hw2f6zmt7fmt.js +0 -1
  249. package/.next/static/chunks/3111pj5wnjgos.js +0 -1
  250. package/features/memory/components/memory-view.tsx +0 -84
  251. /package/.next/static/{x1cCqY0kWpR_VcYx_lWO5 → G6-gNoyGDEcgAsq-L4PE1}/_buildManifest.js +0 -0
  252. /package/.next/static/{x1cCqY0kWpR_VcYx_lWO5 → G6-gNoyGDEcgAsq-L4PE1}/_clientMiddlewareManifest.js +0 -0
  253. /package/.next/static/{x1cCqY0kWpR_VcYx_lWO5 → G6-gNoyGDEcgAsq-L4PE1}/_ssgManifest.js +0 -0
@@ -1,6 +1,11 @@
1
1
  module.exports=[203469,a=>{"use strict";let b,c,d,e,f,g;var h,i=a.i(569572),j=a.i(176668);let k={tasks:!0,memory:!0,mcp:!0,config:!0},l=globalThis,m=l.__appEvents??=(b=new Set,{emit(a){for(let c of[...b])try{c(a)}catch(a){console.error("event listener failed",a)}},subscribe:a=>(b.add(a),()=>{b.delete(a)})}),n=l.__presence??=(h=i.BROWSER_GONE_MS,c=!1,d=null,e=new Set,f=new Set,g=a=>{for(let b of[...a])try{b()}catch(a){console.error("presence listener failed",a)}},{get watching(){return c},track(a){if(a>0){d&&clearTimeout(d),d=null,c||(c=!0,g(f));return}!d&&c&&(d=setTimeout(()=>{d=null,c=!1,g(e)},h))},onGone:a=>(e.add(a),()=>e.delete(a)),onBack:a=>(f.add(a),()=>f.delete(a))}),o=l.__appEventStream??=function(a,b={}){let c=new TextEncoder,d=b.heartbeatMs??2e4,e=0;return{respond:(f,g)=>{let h=()=>{};return new Response(new ReadableStream({async start(i){let k=!1,l=new Map,m=[],n=a=>{if(!k)try{i.enqueue(c.encode(a))}catch{h()}},o=a=>n(`data: ${JSON.stringify(a)}
2
2
 
3
- `),p=a=>{let c=b.coalesce?.keyOf(a)??null;if(null===c)return o(a);let d=l.get(c);d&&clearTimeout(d),l.set(c,setTimeout(()=>{l.delete(c),o(a)},b.coalesce?.ms))},q=a.subscribe(a=>m?m.push(a):p(a)),r=setInterval(()=>n(": ping\n\n"),d);e+=1,b.onWatchers?.(e),h=()=>{if(!k){for(let a of(k=!0,e-=1,b.onWatchers?.(e),q(),clearInterval(r),l.values()))clearTimeout(a);try{i.close()}catch{}}},f.addEventListener("abort",h);try{for(let a of await g?.()??[])o(a)}catch(a){j.logger.error("event stream opening failed",a),h();return}let s=m;for(let a of(m=null,s))p(a)},cancel(){h()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return e}}}(m,{coalesce:{ms:150,keyOf:a=>a.type in k?a.type:null},onWatchers:n.track});l.__bootId??=crypto.randomUUID(),a.s(["appEventStream",0,o,"appEvents",0,m,"presence",0,n],203469)},978876,a=>{"use strict";var b=a.i(912714),c=a.i(527990),d=a.i(794219),e=a.i(762008),f=a.i(684321),g=a.i(821415);let h={name:e.TOOL_NAMES.delegate,description:"Hand a job to a bot. Returns immediately; the job runs in the background and its result is put in front of you later.",parameters:d.object({bot:d.string().describe("A name from the bot list."),request:d.string().describe("The whole job. The bot cannot hear the call, so everything it needs goes here — names, paths, what the user actually asked for — in their own language and their own words: it is the only language the bot has, and whatever it writes comes back to them. **Their request, never your reading of it**: a condition, a caution or a smaller goal they did not say is how a job comes back as the wrong thing. When their words leave a real choice open, ask them on the call and put the answer here."),label:d.string().describe("Two or three words naming the job, in the user's language. Used on screen and said out loud.")})},i={name:e.TOOL_NAMES.ask_bot,description:"Hand one part of the job you are holding to another bot and wait for what they bring back. The job stays yours.",parameters:d.object({bot:d.string().describe("A name from the bot list."),request:d.string().describe("The part they take: the outcome you want, the shape to hand it back in (a path, a number, a list), and every name, path, number and limit that bears on it. It reaches them under the job and the call it came from, which are attached for you — write the part, not the job again."),context:d.string().describe("What you have done on the job so far and why this part is theirs — exact values, and the paths of files you wrote for them to read. They see this, the part, the job and the call; not your thread or your tool output, so a value you leave out is one they fetch again.")})},j={name:e.TOOL_NAMES.ask_back,description:"Ask the bot that handed you this part. They answer from what they have — the original request, the call it came from, what they found before asking you.",parameters:d.object({question:d.string().describe("One whole question — what you need and why. They cannot take it to the user for you, so ask what they would know.")})},k={name:e.TOOL_NAMES.ask_thursday,description:"Ask Thursday, who handed you this job. The job stops until an answer comes back.",parameters:d.object({question:d.string().describe("One whole question — what you need and why. One or two sentences, in the user's language: she may read it to them out loud, options and all."),options:d.union([d.string().array(),d.string()]).nullish().describe('Only when there really are choices — two or three, each short, as an array: ["Signed in", "Not yet"]. Null for an open question.')})},l={name:e.TOOL_NAMES.answer,description:"Answer the job you were given. Calling this ends the job — nothing after it runs.",parameters:d.object({result:d.string().describe("The answer itself — what you found or did, not a replay of how. As long as the answer needs and no longer: one number is one line. In the user's language; the thread is on their screen. If you could not do it, say what stopped you.")})},m={name:e.TOOL_NAMES.task,description:"Check a job you handed over, answer what it is asking, or cancel it.",parameters:d.object({action:d.enum(["status","answer","cancel"]),task:d.string().nullish().describe('The job, by its label or by the handle a past call\'s transcript carries. Leave it out with `answer` and it goes to the job that moved last — what "that one" means a moment after it answered. With `status`: null for every job in one line each — that is the list — or name one to get its answer in full.'),answer:d.string().nullish().describe("With `answer`: what to tell the bot — the answer to its question, a course correction for a job still running, or what to do next on one that finished.")})},n=(0,c.tool)({description:k.description,inputSchema:k.parameters}),o=(0,c.tool)({description:l.description,inputSchema:l.parameters,execute:async({result:a})=>{let b=await q(a);return b.length?`${p} these files do not exist — ${b.join(", ")}. Write them first, or take the paths out of the answer.`:"Answered. The job is closed; nothing further runs."}}),p="Not answered:";async function q(a){let c=[];for(let d of(0,f.pathsIn)(a)){let a=await (0,g.insideWorkspace)(d);a&&(await (0,b.stat)(a).then(a=>a.isFile(),()=>!1)||c.push(d))}return c}a.s(["answerAccepted",0,a=>"string"!=typeof a||!a.startsWith(p),"answerTool",0,o,"askBackSpec",0,j,"askBotSpec",0,i,"askThursdayTool",0,n,"delegateSpec",0,h,"isAnswerCall",0,a=>a===e.TOOL_NAMES.answer||"report"===a,"taskSpec",0,m])},84929,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(258261),g=a.i(351674),h=a.i(203469),i=a.i(569572),j=a.i(184838),k=a.i(714428),l=a.i(978876),m=a.i(762008),n=a.i(182248),o=a.i(446957),p=b([j]);[j]=p.then?(await p)():p;let R=()=>h.appEvents.emit({type:"tasks"}),S={id:k.taskTable.id,bot:k.taskTable.bot,label:k.taskTable.label,request:k.taskTable.request,status:k.taskTable.status,outcome:k.taskTable.outcome,pending:k.taskTable.pending,seen:k.taskTable.seen,inputTokens:k.taskTable.inputTokens,outputTokens:k.taskTable.outputTokens,contextTokens:k.taskTable.contextTokens,contextBudget:k.taskTable.contextBudget,createdAt:k.taskTable.createdAt,updatedAt:k.taskTable.updatedAt};async function q(a){let{opening:b,...c}=a,[d]=await j.database.insert(k.taskTable).values({id:crypto.randomUUID(),status:"running",...c}).returning();return await G(d.id,0,{bot:null,parent:null,role:"user",content:b}),R(),d}async function r(a,b){await j.database.update(k.taskTable).set({...b,updatedAt:new Date}).where((0,d.eq)(k.taskTable.id,a)),R()}async function s(a){0!==a.length&&(await j.database.update(k.taskTable).set({seen:!0}).where((0,d.inArray)(k.taskTable.id,a)),R())}async function t(a,b,c=null){(b.input||b.output||null!==c)&&(await j.database.update(k.taskTable).set({inputTokens:g.sql`${k.taskTable.inputTokens} + ${b.input}`,outputTokens:g.sql`${k.taskTable.outputTokens} + ${b.output}`,...null===c?{}:{contextTokens:c.tokens,contextBudget:c.budget}}).where((0,d.eq)(k.taskTable.id,a)),R())}async function u(a){let[b]=await j.database.select().from(k.taskTable).where((0,d.eq)(k.taskTable.id,a));return b??null}async function v(){let[a,b]=await Promise.all([j.database.select(S).from(k.taskTable).where((0,d.inArray)(k.taskTable.status,["running","waiting"])).orderBy((0,e.desc)(k.taskTable.updatedAt)),j.database.select(S).from(k.taskTable).where((0,d.inArray)(k.taskTable.status,["done","failed"])).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(i.INBOX_FINISHED)]),c=[...a,...b].sort((a,b)=>b.updatedAt.getTime()-a.updatedAt.getTime());return K(c)}async function w(a={}){let b=await j.database.select(S).from(k.taskTable).where(a.before?(0,d.lt)(k.taskTable.updatedAt,a.before):void 0).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(a.limit??o.TASK_HISTORY_PAGE);return K(b)}async function x(a){return a.length?await j.database.select({id:k.taskTable.id,callId:k.taskTable.callId,label:k.taskTable.label,status:k.taskTable.status,outcome:k.taskTable.outcome}).from(k.taskTable).where((0,d.inArray)(k.taskTable.callId,a)).orderBy(k.taskTable.createdAt):[]}async function y(a){let b=await j.database.delete(k.taskTable).where((0,d.eq)(k.taskTable.id,a)).returning({id:k.taskTable.id});return b.length&&R(),b.length>0}async function z(){let a=await j.database.delete(k.taskTable).where((0,d.inArray)(k.taskTable.status,["done","failed"])).returning({id:k.taskTable.id,label:k.taskTable.label});return a.length&&R(),a}async function A(){return(await j.database.select({id:k.taskTable.id}).from(k.taskTable).orderBy((0,e.desc)(k.taskTable.createdAt))).map(a=>a.id)}async function B(a){let b=await j.database.select({role:k.taskMessageTable.role,bot:k.taskMessageTable.bot,note:k.taskMessageTable.note,compact:k.taskMessageTable.compact}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNull)(k.taskMessageTable.parent))).orderBy((0,e.desc)(k.taskMessageTable.seq)),c=0;for(let a of b){if(a.note){a.compact||(c+=1);continue}if(null===a.bot||"user"===a.role)break}return c}async function C(a){let b=await j.database.select({parent:k.taskMessageTable.parent,bot:k.taskMessageTable.bot,content:k.taskMessageTable.content}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNotNull)(k.taskMessageTable.parent),(0,d.eq)(k.taskMessageTable.role,"assistant"))).orderBy(k.taskMessageTable.seq),c=new Map;for(let a of b){if(!a.parent)continue;let b=c.get(a.parent)??{bot:a.bot??"",texts:[],then:null},d=a.content;for(let a of"string"==typeof d?[{type:"text",text:d}]:d)"text"===a.type&&a.text.trim()?(b.texts.push(a.text.trim()),b.then=null):"tool-call"===a.type&&(b.then=`${a.toolName} ${M(a.toolName,a.input)}`.trim());c.set(a.parent,b)}let e=new Map;for(let[a,b]of c){let c=[...b.texts.slice(-3).map(a=>(0,n.clip)(a,600)),b.then?`Then: ${b.then}`:""].filter(Boolean).join("\n\n");c&&e.set(a,{bot:b.bot,tail:c})}return e}function D(a){let b=new Set;for(let c of a)if(Array.isArray(c))for(let a of c){if("tool-call"!==a.type||a.toolName!==m.TOOL_NAMES.write_file)continue;let c=a.input?.path;"string"==typeof c&&c.trim()&&(b.delete(c.trim()),b.add(c.trim()))}return[...b]}async function E(a){let b=await j.database.select({content:k.taskMessageTable.content}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.eq)(k.taskMessageTable.role,"assistant"))).orderBy(k.taskMessageTable.seq);return D(b.map(a=>a.content))}async function F(a){let b=a.trim();if(!b)return null;let c=await u(b);if(c)return c;let d=b.toLowerCase();return(await j.database.select().from(k.taskTable).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(20)).find(a=>a.label.toLowerCase()===d)??null}async function G(a,b,c){await j.database.insert(k.taskMessageTable).values({taskId:a,seq:b,...c,compact:c.compact??!1,note:c.note??!1}).onConflictDoUpdate({target:[k.taskMessageTable.taskId,k.taskMessageTable.seq],set:{role:c.role,content:c.content,compact:c.compact??!1,note:c.note??!1}}),R()}async function H(a,b){b.length&&(await j.database.delete(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.inArray)(k.taskMessageTable.seq,b))),R())}async function I(a){let[b]=await j.database.select({seq:(0,f.max)(k.taskMessageTable.seq)}).from(k.taskMessageTable).where((0,d.eq)(k.taskMessageTable.taskId,a));return b?.seq??-1}async function J(a){let b=await j.database.select({role:k.taskMessageTable.role,content:k.taskMessageTable.content,compact:k.taskMessageTable.compact}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNull)(k.taskMessageTable.parent))).orderBy(k.taskMessageTable.seq),c=b.findLastIndex(a=>a.compact);return(c>0?[b[0],...b.slice(c)]:b).map(a=>({role:a.role,content:a.content}))}async function K(a){if(0===a.length)return[];let b=await j.database.select().from(k.taskMessageTable).where((0,d.inArray)(k.taskMessageTable.taskId,a.map(a=>a.id))).orderBy(k.taskMessageTable.seq),c=new Map(a.map(a=>[a.id,a.bot])),e=new Map;for(let a of b){let b=e.get(a.taskId)??[];b.push(...function(a,b){let c={seq:a.seq,bot:a.bot,parent:a.parent,at:a.createdAt},d=b=>`${a.id}-${b}`,e=a.content;if("user"===a.role){if(0===a.seq)return[];let b="string"==typeof e?e:e.flatMap(a=>"text"===a.type&&a.text?[a.text]:[]).join("\n").trim();return b?a.note||a.compact?[{...c,id:d(0),kind:"note",text:b}]:[{...c,id:d(0),kind:"user",text:b}]:[]}if("assistant"===a.role){let e=a.content;if("string"==typeof e)return e.trim()?[{...c,id:d(0),kind:"text",text:e.trim()}]:[];let f=[];return e.forEach((a,e)=>{if("text"===a.type){let b=a.text.trim();b&&f.push({...c,id:d(e),kind:"text",text:b});return}if("tool-result"===a.type)return void f.push(N(c,d(e),a));if("tool-call"!==a.type)return;let g=a.input??{};if(a.toolName===m.TOOL_NAMES.ask_thursday)f.push({...c,id:d(e),kind:"waiting",callId:a.toolCallId,question:String(g.question??""),options:O(g.options)});else if((0,l.isAnswerCall)(a.toolName)){let a=String(g.result??"").trim();a&&f.push({...c,id:d(e),kind:"text",text:a})}else a.toolName===m.TOOL_NAMES.ask_bot?f.push({...c,id:d(e),kind:"ask",callId:a.toolCallId,to:String(g.bot??""),text:String(g.request??"")}):a.toolName===m.TOOL_NAMES.ask_back?f.push({...c,id:d(e),kind:"ask",callId:a.toolCallId,to:b,text:String(g.question??"")}):a.toolName===m.TOOL_NAMES.bash?f.push({...c,id:d(e),kind:"tool",callId:a.toolCallId,name:a.toolName,input:(0,n.clip)(String(g.command??""),120),note:L(g)}):f.push({...c,id:d(e),kind:"tool",callId:a.toolCallId,name:a.toolName,input:M(a.toolName,g),note:L(g),path:a.toolName===m.TOOL_NAMES.write_file?U(g,"path")??null:null})}),f}if("tool"===a.role){let b=[];return a.content.forEach((a,e)=>{if("tool-result"===a.type&&!((0,l.isAnswerCall)(a.toolName)&&(0,l.answerAccepted)(a.output)))if(a.toolName===m.TOOL_NAMES.ask_thursday){let f=P(a.output,4).flatMap(a=>"text"===a.type?[a.text]:[]).join("\n");b.push({...c,id:d(e),kind:"user",text:f})}else if(a.toolName===m.TOOL_NAMES.ask_bot||a.toolName===m.TOOL_NAMES.ask_back){let f=P(a.output,4).flatMap(a=>"text"===a.type?[a.text]:[]).join("\n");b.push({...c,id:d(e),kind:"ask-result",callId:a.toolCallId,text:f})}else b.push(N(c,d(e),a))}),b}return[]}(a,c.get(a.taskId)??"")),e.set(a.taskId,b)}return a.map(a=>(function(a,b){let{pending:c,inputTokens:d,outputTokens:e,...f}=a;return{...f,ask:"waiting"===a.status?{question:a.outcome??"",options:c?.options??[],auto:c?.auto===!0}:null,tokens:{input:d,output:e},lines:b}})(a,e.get(a.id)??[]))}let T=["query","command","prompt","url","path","pattern","request","question","title","name","task","text"],U=(a,b)=>{let c=a[b];return"string"==typeof c&&c.trim()?c:null};function L(a){let b=U(a,"description");return b?(0,n.clip)(b,120):null}function M(a,b){let c=b??{};if("object"!=typeof c||Array.isArray(c))return(0,n.clip)(String(b??""),120);if(a===m.TOOL_NAMES.bash)return L(c)??(0,n.clip)(String(c.command??""),120);if(a===m.TOOL_NAMES.tool_call||a===m.TOOL_NAMES.tool_search){let a=Array.isArray(c.tools)?c.tools.map(String).join(", "):String(c.tool??""),b=c.args&&"object"==typeof c.args?JSON.stringify(c.args):"";return(0,n.clip)([String(c.server??""),a,b].filter(Boolean).join(" "),120)}for(let a of T){let b=U(c,a);if(b)return(0,n.clip)(b,120)}for(let a of Object.keys(c)){let b=U(c,a);if(b)return(0,n.clip)(b,120)}return Object.keys(c).length?(0,n.clip)(JSON.stringify(c),120):""}function N(a,b,c){let d=P(c.output,5);return{...a,id:b,kind:"tool-result",callId:c.toolCallId,name:c.toolName,results:d.slice(0,4),more:d.length>4}}function O(a){return Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[]}function P(a,b){if(null==a)return[];if("string"==typeof a)return Q(a,b);if("object"!=typeof a)return Q(String(a),b);switch(a.type){case"text":case"error-text":return Q(String(a.value??""),b);case"json":case"error-json":return P(a.value,b);case"execution-denied":return Q("Denied.",b);case"content":{if(!Array.isArray(a.value))return[];let c=[];for(let d of a.value){if("text"===d.type&&"string"==typeof d.text){c.push(...Q(d.text,b));continue}let a=function(a){let b=String(a.mediaType??"");if(!b.startsWith("image/"))return null;let c=a.data;return"string"==typeof c?`data:${b};base64,${c}`:c?.type==="url"&&c.url?c.url:c?.type==="data"&&"string"==typeof c.data?`data:${b};base64,${c.data}`:null}(d);a&&c.push({type:"image",src:a})}return c}}return Array.isArray(a.sources)?a.sources.map(a=>String(a?.title??"")).filter(Boolean).slice(0,b).map(a=>({type:"text",text:a})):"string"==typeof a.stdout?Q(a.stdout||String(a.stderr??""),b):"string"==typeof a.answer?Q(a.answer,b):Q(JSON.stringify(a),b)}function Q(a,b){return a.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,b).map(a=>({type:"text",text:a}))}a.s(["addTaskUsage",0,t,"countStopsSinceSpoken",0,B,"deleteFinishedTasks",0,z,"deleteMessages",0,H,"deleteTask",0,y,"findTask",0,u,"insertTask",0,q,"lastSeq",0,I,"listAllTaskIds",0,A,"listBorrowedTails",0,C,"listCallJobs",0,x,"listInboxTasks",0,v,"listTaskHistory",0,w,"listThread",0,J,"listWrittenPaths",0,E,"markSeen",0,s,"optionsOf",0,O,"resolveTask",0,F,"updateTask",0,r,"upsertMessage",0,G,"writtenPathsIn",0,D]),c()}catch(a){c(a)}},!1),527990,925034,912735,a=>{"use strict";var b,c,d,e,f,g=a.i(652685),h=a.i(634531),i=a.i(22372);class j extends Error{constructor(a,b){super(a),this.name="ParseError",this.type=b.type,this.field=b.field,this.value=b.value,this.line=b.line}}function k(a){}function l(a,b,c){return 100===c&&97===a.charCodeAt(b+1)&&116===a.charCodeAt(b+2)&&97===a.charCodeAt(b+3)&&58===a.charCodeAt(b+4)}function m(a,b,c){return 101===c&&118===a.charCodeAt(b+1)&&101===a.charCodeAt(b+2)&&110===a.charCodeAt(b+3)&&116===a.charCodeAt(b+4)&&58===a.charCodeAt(b+5)}class n extends TransformStream{constructor({onError:a,onRetry:b,onComment:c,maxBufferSize:d}={}){let e;super({start(f){e=function(a){if("function"==typeof a)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:b=k,onError:c=k,onRetry:d=k,onComment:e,maxBufferSize:f}=a,g=[],h=0,i=!0,n,o="",p=0,q,r=!1;function s(){void 0!==f&&(h+o.length<=f||(r=!0,g.length=0,h=0,n=void 0,o="",p=0,q=void 0,c(new j(`Buffered data exceeded max buffer size of ${f} characters`,{type:"max-buffer-size-exceeded"}))))}function t(a){let c=0;if(-1===a.indexOf("\r")){let d=a.indexOf(`
3
+ `),p=a=>{let c=b.coalesce?.keyOf(a)??null;if(null===c)return o(a);let d=l.get(c);d&&clearTimeout(d),l.set(c,setTimeout(()=>{l.delete(c),o(a)},b.coalesce?.ms))},q=a.subscribe(a=>m?m.push(a):p(a)),r=setInterval(()=>n(": ping\n\n"),d);e+=1,b.onWatchers?.(e),h=()=>{if(!k){for(let a of(k=!0,e-=1,b.onWatchers?.(e),q(),clearInterval(r),l.values()))clearTimeout(a);try{i.close()}catch{}}},f.addEventListener("abort",h);try{for(let a of await g?.()??[])o(a)}catch(a){j.logger.error("event stream opening failed",a),h();return}let s=m;for(let a of(m=null,s))p(a)},cancel(){h()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return e}}}(m,{coalesce:{ms:150,keyOf:a=>a.type in k?a.type:null},onWatchers:n.track});l.__bootId??=crypto.randomUUID(),a.s(["appEventStream",0,o,"appEvents",0,m,"presence",0,n],203469)},978876,a=>{"use strict";var b=a.i(912714),c=a.i(527990),d=a.i(794219),e=a.i(762008),f=a.i(684321),g=a.i(821415);let h={name:e.TOOL_NAMES.delegate,description:"Hand a job to a bot. Returns immediately; the job runs in the background and its result is put in front of you later.",parameters:d.object({bot:d.string().describe("A name from the bot list."),request:d.string().describe("The whole job. The bot cannot hear the call, so everything it needs goes here — names, paths, what the user actually asked for — in their own language and their own words: it is the only language the bot has, and whatever it writes comes back to them. **Their request, never your reading of it**: a condition, a caution or a smaller goal they did not say is how a job comes back as the wrong thing. When their words leave a real choice open, ask them on the call and put the answer here."),label:d.string().describe("Two or three words naming the job, in the user's language. Used on screen and said out loud.")})},i={name:e.TOOL_NAMES.ask_bot,description:"Send a request to another bot on this job and wait for their reply. The same bot continues its own work and conversation whenever you ask it again. The job stays yours.",parameters:d.object({bot:d.string().describe("A name from the bot list."),request:d.string().describe("The part they take: the outcome you want, the shape to hand it back in (a path, a number, a list), and every name, path, number and limit that bears on it. It reaches them under the job and the call it came from, which are attached for you — write the part, not the job again."),context:d.string().describe("Pass on what you know that they do not: exact values and paths they need. They keep their own previous work and your exchanges, but cannot read your private thread or tool output.")})},j={name:e.TOOL_NAMES.ask_back,description:"Ask the bot that handed you this part. They answer from what they have — the original request, the call it came from, what they found before asking you.",parameters:d.object({question:d.string().describe("One whole question — what you need and why. They cannot take it to the user for you, so ask what they would know.")})},k={name:e.TOOL_NAMES.ask_thursday,description:"Ask Thursday, who handed you this job. The job stops until an answer comes back.",parameters:d.object({question:d.string().describe("One whole question — what you need and why. One or two sentences, in the user's language: she may read it to them out loud, options and all."),options:d.union([d.string().array(),d.string()]).nullish().describe('Only when there really are choices — two or three, each short, as an array: ["Signed in", "Not yet"]. Null for an open question.')})},l={name:e.TOOL_NAMES.answer,description:"Answer the job you were given. Calling this ends the job — nothing after it runs.",parameters:d.object({result:d.string().describe("The answer itself — what you found or did, not a replay of how. As long as the answer needs and no longer: one number is one line. In the user's language; the thread is on their screen. If you could not do it, say what stopped you.")})},m={name:e.TOOL_NAMES.task,description:"Check a job you handed over, answer what it is asking, or cancel it.",parameters:d.object({action:d.enum(["status","answer","cancel"]),task:d.string().nullish().describe('The job, by its label or by the handle a past call\'s transcript carries. Leave it out with `answer` and it goes to the job that moved last — what "that one" means a moment after it answered. With `status`: null for every job in one line each — that is the list — or name one to get its answer in full.'),answer:d.string().nullish().describe("With `answer`: what to tell the bot — the answer to its question, a course correction for a job still running, or what to do next on one that finished.")})},n=(0,c.tool)({description:k.description,inputSchema:k.parameters}),o=(0,c.tool)({description:l.description,inputSchema:l.parameters,execute:async({result:a})=>{let b=await q(a);return b.length?`${p} these files do not exist — ${b.join(", ")}. Write them first, or take the paths out of the answer.`:"Answered. The job is closed; nothing further runs."}}),p="Not answered:";async function q(a){let c=[];for(let d of(0,f.pathsIn)(a)){let a=await (0,g.insideWorkspace)(d);a&&(await (0,b.stat)(a).then(a=>a.isFile(),()=>!1)||c.push(d))}return c}a.s(["answerAccepted",0,a=>"string"!=typeof a||!a.startsWith(p),"answerTool",0,o,"askBackSpec",0,j,"askBotSpec",0,i,"askThursdayTool",0,n,"delegateSpec",0,h,"isAnswerCall",0,a=>a===e.TOOL_NAMES.answer||"report"===a,"taskSpec",0,m])},84929,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(258261),g=a.i(351674),h=a.i(203469),i=a.i(569572),j=a.i(184838),k=a.i(714428),l=a.i(978876),m=a.i(762008),n=a.i(182248),o=a.i(446957),p=b([j]);[j]=p.then?(await p)():p;let S=()=>h.appEvents.emit({type:"tasks"}),T={id:k.taskTable.id,bot:k.taskTable.bot,label:k.taskTable.label,request:k.taskTable.request,status:k.taskTable.status,outcome:k.taskTable.outcome,pending:k.taskTable.pending,seen:k.taskTable.seen,inputTokens:k.taskTable.inputTokens,outputTokens:k.taskTable.outputTokens,contextTokens:k.taskTable.contextTokens,contextBudget:k.taskTable.contextBudget,createdAt:k.taskTable.createdAt,updatedAt:k.taskTable.updatedAt};async function q(a){let{opening:b,...c}=a,[d]=await j.database.insert(k.taskTable).values({id:crypto.randomUUID(),status:"running",...c}).returning();return await G(d.id,0,{bot:null,parent:null,role:"user",content:b}),S(),d}async function r(a,b){await j.database.update(k.taskTable).set({...b,updatedAt:new Date}).where((0,d.eq)(k.taskTable.id,a)),S()}async function s(a){0!==a.length&&(await j.database.update(k.taskTable).set({seen:!0}).where((0,d.inArray)(k.taskTable.id,a)),S())}async function t(a,b,c=null){(b.input||b.output||null!==c)&&(await j.database.update(k.taskTable).set({inputTokens:g.sql`${k.taskTable.inputTokens} + ${b.input}`,outputTokens:g.sql`${k.taskTable.outputTokens} + ${b.output}`,...null===c?{}:{contextTokens:c.tokens,contextBudget:c.budget}}).where((0,d.eq)(k.taskTable.id,a)),S())}async function u(a){let[b]=await j.database.select().from(k.taskTable).where((0,d.eq)(k.taskTable.id,a));return b??null}async function v(){let[a,b]=await Promise.all([j.database.select(T).from(k.taskTable).where((0,d.inArray)(k.taskTable.status,["running","waiting"])).orderBy((0,e.desc)(k.taskTable.updatedAt)),j.database.select(T).from(k.taskTable).where((0,d.inArray)(k.taskTable.status,["done","failed"])).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(i.INBOX_FINISHED)]),c=[...a,...b].sort((a,b)=>b.updatedAt.getTime()-a.updatedAt.getTime());return L(c)}async function w(a={}){let b=await j.database.select(T).from(k.taskTable).where(a.before?(0,d.lt)(k.taskTable.updatedAt,a.before):void 0).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(a.limit??o.TASK_HISTORY_PAGE);return L(b)}async function x(a){return a.length?await j.database.select({id:k.taskTable.id,callId:k.taskTable.callId,label:k.taskTable.label,status:k.taskTable.status,outcome:k.taskTable.outcome}).from(k.taskTable).where((0,d.inArray)(k.taskTable.callId,a)).orderBy(k.taskTable.createdAt):[]}async function y(a){let b=await j.database.delete(k.taskTable).where((0,d.eq)(k.taskTable.id,a)).returning({id:k.taskTable.id});return b.length&&S(),b.length>0}async function z(){return(await j.database.select({id:k.taskTable.id}).from(k.taskTable).orderBy((0,e.desc)(k.taskTable.createdAt))).map(a=>a.id)}async function A(){return await j.database.select({id:k.taskTable.id,label:k.taskTable.label,status:k.taskTable.status,endedAt:k.taskTable.endedAt,updatedAt:k.taskTable.updatedAt}).from(k.taskTable)}async function B(a){let b=await j.database.select({role:k.taskMessageTable.role,bot:k.taskMessageTable.bot,note:k.taskMessageTable.note,compact:k.taskMessageTable.compact}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNull)(k.taskMessageTable.parent))).orderBy((0,e.desc)(k.taskMessageTable.seq)),c=0;for(let a of b){if(a.note){a.compact||(c+=1);continue}if(null===a.bot||"user"===a.role)break}return c}async function C(a){let b=await j.database.select({parent:k.taskMessageTable.parent,bot:k.taskMessageTable.bot,content:k.taskMessageTable.content}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNotNull)(k.taskMessageTable.parent),(0,d.inArray)(k.taskMessageTable.role,["assistant","tool"]))).orderBy(k.taskMessageTable.seq),c=new Map,e=new Map;for(let a of b){if(!a.parent)continue;let b=c.get(a.parent)??{bot:a.bot??"",texts:[],then:null,exchanges:[]},d=a.content;for(let a of"string"==typeof d?[{type:"text",text:d}]:d)if("text"===a.type&&a.text.trim())b.texts.push(a.text.trim()),b.then=null;else if("tool-call"===a.type)b.then=`${a.toolName} ${N(a.toolName,a.input)}`.trim(),a.toolName===m.TOOL_NAMES.ask_back&&e.set(a.toolCallId,String(a.input.question??""));else if("tool-result"===a.type&&a.toolName===m.TOOL_NAMES.ask_back){let c=Q(a.output,1/0).flatMap(a=>"text"===a.type?[a.text]:[]).join("\n");b.exchanges.push(`They asked you: ${e.get(a.toolCallId)??""}
4
+ You answered: ${c}`)}c.set(a.parent,b)}let f=new Map;for(let[a,b]of c){let c=[...b.texts.slice(-3).map(a=>(0,n.clip)(a,600)),...b.exchanges.map(a=>(0,n.clip)(a,600)),b.then?`Then: ${b.then}`:""].filter(Boolean).join("\n\n");c&&f.set(a,{bot:b.bot,tail:c})}return f}function D(a){let b=new Set;for(let c of a)if(Array.isArray(c))for(let a of c){if("tool-call"!==a.type||a.toolName!==m.TOOL_NAMES.write_file)continue;let c=a.input?.path;"string"==typeof c&&c.trim()&&(b.delete(c.trim()),b.add(c.trim()))}return[...b]}async function E(a){let b=await j.database.select({content:k.taskMessageTable.content}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.eq)(k.taskMessageTable.role,"assistant"))).orderBy(k.taskMessageTable.seq);return D(b.map(a=>a.content))}async function F(a){let b=a.trim();if(!b)return null;let c=await u(b);if(c)return c;let d=b.toLowerCase();return(await j.database.select().from(k.taskTable).orderBy((0,e.desc)(k.taskTable.updatedAt)).limit(20)).find(a=>a.label.toLowerCase()===d)??null}async function G(a,b,c){await j.database.insert(k.taskMessageTable).values({taskId:a,seq:b,...c,compact:c.compact??!1,note:c.note??!1}).onConflictDoUpdate({target:[k.taskMessageTable.taskId,k.taskMessageTable.seq],set:{role:c.role,content:c.content,compact:c.compact??!1,note:c.note??!1}}),S()}async function H(a,b){b.length&&(await j.database.delete(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.inArray)(k.taskMessageTable.seq,b))),S())}async function I(a){let[b]=await j.database.select({seq:(0,f.max)(k.taskMessageTable.seq)}).from(k.taskMessageTable).where((0,d.eq)(k.taskMessageTable.taskId,a));return b?.seq??-1}async function J(a){let b=await j.database.select({role:k.taskMessageTable.role,content:k.taskMessageTable.content,compact:k.taskMessageTable.compact}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNull)(k.taskMessageTable.parent))).orderBy(k.taskMessageTable.seq),c=b.findLastIndex(a=>a.compact);return(c>0?[b[0],...b.slice(c)]:b).map(a=>({role:a.role,content:a.content}))}async function K(a,b){let c=await j.database.select().from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.isNotNull)(k.taskMessageTable.parent),(0,d.eq)(g.sql`lower(${k.taskMessageTable.bot})`,b.toLowerCase()))).orderBy(k.taskMessageTable.seq),e=await j.database.select({content:k.taskMessageTable.content,bot:k.taskMessageTable.bot}).from(k.taskMessageTable).where((0,d.and)((0,d.eq)(k.taskMessageTable.taskId,a),(0,d.eq)(k.taskMessageTable.role,"assistant"))).orderBy(k.taskMessageTable.seq),f=new Map;for(let a of e)if(Array.isArray(a.content))for(let c of a.content){if("tool-call"!==c.type||c.toolName!==m.TOOL_NAMES.ask_bot)continue;let d=c.input;f.set(c.toolCallId,{role:"user",content:`${a.bot} → ${b}:
5
+
6
+ ${d.request??""}
7
+
8
+ ${d.context??""}`})}let h=[],i=new Set;for(let a of c){if(a.parent&&!i.has(a.parent)&&(i.add(a.parent),"user"!==a.role||a.compact)){let b=f.get(a.parent);b&&h.push({message:b,compact:!1})}h.push({message:{role:a.role,content:a.content},compact:a.compact})}let l=h.findLastIndex(a=>a.compact);return(l>0?[h[0],...h.slice(l)]:h).map(a=>a.message)}async function L(a){if(0===a.length)return[];let b=await j.database.select().from(k.taskMessageTable).where((0,d.inArray)(k.taskMessageTable.taskId,a.map(a=>a.id))).orderBy(k.taskMessageTable.seq),c=new Map(a.map(a=>[a.id,a.bot])),e=new Map;for(let a of b)if("assistant"===a.role&&Array.isArray(a.content))for(let b of a.content)"tool-call"===b.type&&b.toolName===m.TOOL_NAMES.ask_bot&&a.bot&&e.set(`${a.taskId}:${b.toolCallId}`,a.bot);let f=new Map;for(let a of b){let b=f.get(a.taskId)??[];b.push(...function(a,b){let c={seq:a.seq,bot:a.bot,parent:a.parent,at:a.createdAt},d=b=>`${a.id}-${b}`,e=a.content;if("user"===a.role){if(0===a.seq||a.parent&&!a.compact&&!a.note)return[];let b="string"==typeof e?e:e.flatMap(a=>"text"===a.type&&a.text?[a.text]:[]).join("\n").trim();if(!b)return[];if(a.compact)return[{...c,id:d(0),kind:"note",text:b}];if(a.note){let a=b.endsWith(W)?b.slice(0,-W.length).trimEnd():b;return[{...c,id:d(0),kind:"stop",text:a}]}return[{...c,id:d(0),kind:"user",text:(0,o.untagSpeaker)(b)}]}if("assistant"===a.role){let e=a.content;if("string"==typeof e)return e.trim()?[{...c,id:d(0),kind:"text",text:e.trim()}]:[];let f=[];return e.forEach((a,e)=>{if("text"===a.type){let b=a.text.trim();b&&f.push({...c,id:d(e),kind:"text",text:b});return}if("tool-result"===a.type)return void f.push(O(c,d(e),a));if("tool-call"!==a.type)return;let g=a.input??{};if(a.toolName===m.TOOL_NAMES.ask_thursday)f.push({...c,id:d(e),kind:"waiting",callId:a.toolCallId,question:String(g.question??""),options:P(g.options)});else if((0,l.isAnswerCall)(a.toolName)){let a=String(g.result??"").trim();a&&f.push({...c,id:d(e),kind:"text",text:a})}else a.toolName===m.TOOL_NAMES.ask_bot?f.push({...c,id:d(e),kind:"ask",callId:a.toolCallId,to:String(g.bot??""),text:String(g.request??"")}):a.toolName===m.TOOL_NAMES.ask_back?f.push({...c,id:d(e),kind:"ask",callId:a.toolCallId,to:b,text:String(g.question??"")}):a.toolName===m.TOOL_NAMES.bash?f.push({...c,id:d(e),kind:"tool",callId:a.toolCallId,name:a.toolName,input:(0,n.clip)(String(g.command??""),120),note:M(g)}):f.push({...c,id:d(e),kind:"tool",callId:a.toolCallId,name:a.toolName,input:N(a.toolName,g),note:M(g),path:a.toolName===m.TOOL_NAMES.write_file?V(g,"path")??null:null})}),f}if("tool"===a.role){let b=[];return a.content.forEach((a,e)=>{if("tool-result"===a.type&&!((0,l.isAnswerCall)(a.toolName)&&(0,l.answerAccepted)(a.output)))if(a.toolName===m.TOOL_NAMES.ask_thursday){let f=Q(a.output,4).flatMap(a=>"text"===a.type?[a.text]:[]).join("\n");b.push({...c,id:d(e),kind:"user",text:(0,o.untagSpeaker)(f)})}else if(a.toolName===m.TOOL_NAMES.ask_bot||a.toolName===m.TOOL_NAMES.ask_back){let f=Q(a.output,4).flatMap(a=>"text"===a.type?[a.text]:[]).join("\n");b.push({...c,id:d(e),kind:"ask-result",callId:a.toolCallId,text:f})}else b.push(O(c,d(e),a))}),b}return[]}(a,(a.parent?e.get(`${a.taskId}:${a.parent}`):null)??c.get(a.taskId)??"")),f.set(a.taskId,b)}return a.map(a=>(function(a,b){let{pending:c,inputTokens:d,outputTokens:e,...f}=a;return{...f,ask:"waiting"===a.status?{question:a.outcome??"",options:c?.options??[],auto:c?.auto===!0}:null,tokens:{input:d,output:e},lines:b}})(a,f.get(a.id)??[]))}let U=["query","command","prompt","url","path","pattern","request","question","title","name","task","text"],V=(a,b)=>{let c=a[b];return"string"==typeof c&&c.trim()?c:null};function M(a){let b=V(a,"description");return b?(0,n.clip)(b,120):null}function N(a,b){let c=b??{};if("object"!=typeof c||Array.isArray(c))return(0,n.clip)(String(b??""),120);if(a===m.TOOL_NAMES.bash)return M(c)??(0,n.clip)(String(c.command??""),120);if(a===m.TOOL_NAMES.tool_call||a===m.TOOL_NAMES.tool_search){let a=Array.isArray(c.tools)?c.tools.map(String).join(", "):String(c.tool??""),b=c.args&&"object"==typeof c.args?JSON.stringify(c.args):"";return(0,n.clip)([String(c.server??""),a,b].filter(Boolean).join(" "),120)}for(let a of U){let b=V(c,a);if(b)return(0,n.clip)(b,120)}for(let a of Object.keys(c)){let b=V(c,a);if(b)return(0,n.clip)(b,120)}return Object.keys(c).length?(0,n.clip)(JSON.stringify(c),120):""}let W="Anything that was under way — a command, a page loading, a download — may not have finished: check before relying on it, then carry on.";function O(a,b,c){let d=Q(c.output,5);return{...a,id:b,kind:"tool-result",callId:c.toolCallId,name:c.toolName,results:d.slice(0,4),more:d.length>4}}function P(a){return Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[]}function Q(a,b){if(null==a)return[];if("string"==typeof a)return R(a,b);if("object"!=typeof a)return R(String(a),b);switch(a.type){case"text":case"error-text":return R(String(a.value??""),b);case"json":case"error-json":return Q(a.value,b);case"execution-denied":return R("Denied.",b);case"content":{if(!Array.isArray(a.value))return[];let c=[];for(let d of a.value){if("text"===d.type&&"string"==typeof d.text){c.push(...R(d.text,b));continue}let a=function(a){let b=String(a.mediaType??"");if(!b.startsWith("image/"))return null;let c=a.data;return"string"==typeof c?`data:${b};base64,${c}`:c?.type==="url"&&c.url?c.url:c?.type==="data"&&"string"==typeof c.data?`data:${b};base64,${c.data}`:null}(d);a&&c.push({type:"image",src:a})}return c}}return Array.isArray(a.sources)?a.sources.map(a=>String(a?.title??"")).filter(Boolean).slice(0,b).map(a=>({type:"text",text:a})):"string"==typeof a.stdout?R(a.stdout||String(a.stderr??""),b):"string"==typeof a.answer?R(a.answer,b):R(JSON.stringify(a),b)}function R(a,b){return a.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,b).map(a=>({type:"text",text:a}))}a.s(["addTaskUsage",0,t,"countStopsSinceSpoken",0,B,"deleteMessages",0,H,"deleteTask",0,y,"findTask",0,u,"insertTask",0,q,"lastSeq",0,I,"listAllTaskIds",0,z,"listBorrowedTails",0,C,"listBotThread",0,K,"listCallJobs",0,x,"listInboxTasks",0,v,"listTaskFolders",0,A,"listTaskHistory",0,w,"listThread",0,J,"listWrittenPaths",0,E,"markSeen",0,s,"optionsOf",0,P,"resolveTask",0,F,"stopNote",0,a=>`${a} ${W}`,"updateTask",0,r,"upsertMessage",0,G,"writtenPathsIn",0,D]),c()}catch(a){c(a)}},!1),527990,925034,912735,a=>{"use strict";var b,c,d,e,f,g=a.i(652685),h=a.i(634531),i=a.i(22372);class j extends Error{constructor(a,b){super(a),this.name="ParseError",this.type=b.type,this.field=b.field,this.value=b.value,this.line=b.line}}function k(a){}function l(a,b,c){return 100===c&&97===a.charCodeAt(b+1)&&116===a.charCodeAt(b+2)&&97===a.charCodeAt(b+3)&&58===a.charCodeAt(b+4)}function m(a,b,c){return 101===c&&118===a.charCodeAt(b+1)&&101===a.charCodeAt(b+2)&&110===a.charCodeAt(b+3)&&116===a.charCodeAt(b+4)&&58===a.charCodeAt(b+5)}class n extends TransformStream{constructor({onError:a,onRetry:b,onComment:c,maxBufferSize:d}={}){let e;super({start(f){e=function(a){if("function"==typeof a)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:b=k,onError:c=k,onRetry:d=k,onComment:e,maxBufferSize:f}=a,g=[],h=0,i=!0,n,o="",p=0,q,r=!1;function s(){void 0!==f&&(h+o.length<=f||(r=!0,g.length=0,h=0,n=void 0,o="",p=0,q=void 0,c(new j(`Buffered data exceeded max buffer size of ${f} characters`,{type:"max-buffer-size-exceeded"}))))}function t(a){let c=0;if(-1===a.indexOf("\r")){let d=a.indexOf(`
4
9
  `,c);for(;-1!==d;){if(c===d){p>0&&b({id:n,event:q,data:o}),n=void 0,o="",p=0,q=void 0,c=d+1,d=a.indexOf(`
5
10
  `,c);continue}let e=a.charCodeAt(c);if(l(a,c,e)){let e=32===a.charCodeAt(c+5)?c+6:c+5,f=a.slice(e,d);if(0===p&&10===a.charCodeAt(d+1)){b({id:n,event:q,data:f}),n=void 0,o="",q=void 0,c=d+2,d=a.indexOf(`
6
11
  `,c);continue}o=0===p?f:`${o}
@@ -1,3 +1,3 @@
1
- module.exports=[626280,a=>{"use strict";var b=a.i(187924),c=a.i(497895);function d({color:a,picked:e,onPick:f}){return(0,b.jsx)("button",{type:"button",onClick:f,"aria-label":a??"Follow the theme",style:a?{backgroundColor:a}:void 0,className:(0,c.cn)("size-5 rounded-full outline-none transition-transform hover:scale-110 focus-visible:ring-3 focus-visible:ring-ring/50",!a&&"bg-foreground",e&&"ring-2 ring-foreground/40 ring-offset-2 ring-offset-background")})}var e=a.i(324835);a.s(["MarkPalette",0,function({color:a,themePicked:c,onTheme:f,onPick:g}){return(0,b.jsx)("div",{className:"flex justify-center px-2",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(d,{color:null,picked:c,onPick:f}),(0,b.jsx)("span",{className:"w-2"}),e.MARK_PALETTE_ROWS[0].map(c=>(0,b.jsx)(d,{color:c,picked:a===c,onPick:()=>g(c)},c))]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center gap-2 pl-11",children:e.MARK_PALETTE_ROWS[1].map(c=>(0,b.jsx)(d,{color:c,picked:a===c,onPick:()=>g(c)},c))})]})})}],626280)},447478,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f194293e4c1ab83ed63877cc9d8b7aebf42b46bb8",b.callServer,void 0,b.findSourceMapURL,"deleteWorkspaceFileAction");a.s(["deleteWorkspaceFileAction",0,c])},30681,a=>{"use strict";var b=a.i(572131),c=a.i(497895);a.s(["useObjectState",0,a=>{let[d,e]=(0,b.useState)(a);return[d,(0,b.useMemo)(()=>{let a=a=>{e(b=>{let d=(0,c.isFunction)(a)?a(b):a;return Object.keys(d).some(a=>!Object.is(b[a],d[a]))?{...b,...d}:b})},b=new Map;return new Proxy(a,{get(d,e,f){if("symbol"==typeof e)return Reflect.get(d,e,f);let g=b.get(e);return g||(g=b=>{a(a=>({[e]:(0,c.isFunction)(b)?b(a[e]):b}))},b.set(e,g)),g}})},[])]}])},951675,a=>{"use strict";var b=a.i(164831);let c={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};c.node;let d=(0,b.default)(c);a.s(["Trash2",0,d],951675)}];
1
+ module.exports=[626280,a=>{"use strict";var b=a.i(187924),c=a.i(497895);function d({color:a,picked:e,onPick:f}){return(0,b.jsx)("button",{type:"button",onClick:f,"aria-label":a??"Follow the theme",style:a?{backgroundColor:a}:void 0,className:(0,c.cn)("size-5 rounded-full outline-none transition-transform hover:scale-110 focus-visible:ring-3 focus-visible:ring-ring/50",!a&&"bg-foreground",e&&"ring-2 ring-foreground/40 ring-offset-2 ring-offset-background")})}var e=a.i(324835);a.s(["MarkPalette",0,function({color:a,themePicked:c,onTheme:f,onPick:g}){return(0,b.jsx)("div",{className:"flex justify-center px-2",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(d,{color:null,picked:c,onPick:f}),(0,b.jsx)("span",{className:"w-2"}),e.MARK_PALETTE_ROWS[0].map(c=>(0,b.jsx)(d,{color:c,picked:a===c,onPick:()=>g(c)},c))]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center gap-2 pl-11",children:e.MARK_PALETTE_ROWS[1].map(c=>(0,b.jsx)(d,{color:c,picked:a===c,onPick:()=>g(c)},c))})]})})}],626280)},994602,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f2cd09869c1a94eb452d214e327ed12bf3043400f",b.callServer,void 0,b.findSourceMapURL,"deleteWorkspaceFileAction");a.s(["deleteWorkspaceFileAction",0,c])},30681,a=>{"use strict";var b=a.i(572131),c=a.i(497895);a.s(["useObjectState",0,a=>{let[d,e]=(0,b.useState)(a);return[d,(0,b.useMemo)(()=>{let a=a=>{e(b=>{let d=(0,c.isFunction)(a)?a(b):a;return Object.keys(d).some(a=>!Object.is(b[a],d[a]))?{...b,...d}:b})},b=new Map;return new Proxy(a,{get(d,e,f){if("symbol"==typeof e)return Reflect.get(d,e,f);let g=b.get(e);return g||(g=b=>{a(a=>({[e]:(0,c.isFunction)(b)?b(a[e]):b}))},b.set(e,g)),g}})},[])]}])},951675,a=>{"use strict";var b=a.i(164831);let c={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};c.node;let d=(0,b.default)(c);a.s(["Trash2",0,d],951675)}];
2
2
 
3
- //# sourceMappingURL=_07uchnc._.js.map
3
+ //# sourceMappingURL=_04z2c7b._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[210799,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(589027),f=a.i(875160),g=a.i(272944),h=a.i(19895),i=a.i(951675),j=a.i(572131),k=a.i(767561),l=a.i(340695),m=a.i(676504),n=a.i(446181),o=a.i(545097),p=a.i(950463),q=a.i(445009),r=a.i(874004),s=a.i(369278),t=a.i(411509),u=a.i(913834),v=a.i(467268),w=a.i(42380),x=a.i(8468),y=a.i(777279),z=a.i(619477),A=a.i(199169),B=a.i(313237),C=a.i(862966),D=a.i(759497),E=a.i(497895),F=a.i(394440),G=b([v,x]);[v,x]=G.then?(await G)():G;let L="w-36";function H({task:a,bots:b,open:c,onToggle:k,onStop:n,onDelete:p}){var q,r;let s,x="running"===a.status||"waiting"===a.status,z="running"===a.status,B=(0,j.useMemo)(()=>(0,y.taskFromRow)(a,b),[a,b]),C=function(a){if("waiting"===a.status&&a.ask)return{text:(0,t.isAppStop)(a.ask)?(0,E.plainText)(a.outcome??a.ask.question):a.ask.question,tone:E.WAITING_INK};let b=a.seen;if("failed"===a.status)return{text:(0,E.plainText)(a.outcome??"Failed"),tone:b?"text-destructive/70":"text-destructive"};if("done"===a.status)return{text:(0,E.plainText)(a.outcome??"Done"),tone:b?"text-muted-foreground":"text-foreground/80"};for(let b=a.lines.length-1;b>=0;b--){let c=a.lines[b];if("tool"===c.kind)return{text:c.note??c.input,tone:"text-muted-foreground",tool:c.name,shine:!0};if("text"===c.kind)return{text:c.text,tone:"text-muted-foreground",shine:!0};if("user"===c.kind||"waiting"===c.kind)break}return{text:`${a.bot} is taking it on…`,tone:"text-muted-foreground italic",shine:!0}}(a),D=a.tokens.input+a.tokens.output;return(0,d.jsxs)("div",{className:"group/row relative transition-colors hover:bg-muted/50",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsxs)("button",{type:"button",onClick:k,className:"flex min-w-0 flex-1 items-center gap-3 rounded-md text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)(u.BotMark,{size:40,seed:a.bot,vary:a.id,...(q=a.bot,r=b,s=r?.find(a=>a.name===q)?.icon,{color:s?.color,shape:s?.shape,outline:s?.outline}),state:z?"thinking":"idle",notify:"waiting"===a.status,className:"shrink-0"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"truncate text-sm font-medium",children:a.label}),(0,d.jsx)(w.BotRoster,{bots:(0,y.rosterOf)(B),taskId:a.id}),z&&(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"})]}),C&&(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-[13px] leading-snug",children:[C.tool&&(0,d.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:C.tool}),C.shine?(0,d.jsx)(o.ShinyText,{text:C.text,speed:2.2,className:"min-w-0 truncate"}):(0,d.jsx)("span",{className:(0,E.cn)("min-w-0 truncate",C.tone),children:C.text})]})]}),(0,d.jsxs)("span",{className:(0,E.cn)("flex shrink-0 flex-col items-end gap-0.5 font-mono text-[11px] leading-4 text-muted-foreground tabular-nums",L),children:[(0,d.jsx)("span",{children:(0,A.whenOf)(a.updatedAt)}),(0,d.jsxs)("span",{className:"max-w-full truncate text-muted-foreground/70",title:D>0?`${a.id} \xb7 in ${(0,E.formatCount)(a.tokens.input)} \xb7 out ${(0,E.formatCount)(a.tokens.output)}`:a.id,children:[a.bot,D>0&&` \xb7 ${(0,E.formatCount)(D)}`]})]}),(0,d.jsx)(e.ChevronDown,{className:(0,E.cn)("size-4 shrink-0 text-muted-foreground transition-transform",c&&"rotate-180")})]}),(0,d.jsxs)(m.DropdownMenu,{children:[(0,d.jsx)(m.DropdownMenuTrigger,{render:(0,d.jsx)(l.Button,{size:"icon-sm",variant:"ghost"}),children:(0,d.jsx)(g.MoreHorizontal,{})}),(0,d.jsxs)(m.DropdownMenuContent,{align:"end",children:[x&&(0,d.jsxs)(m.DropdownMenuItem,{onClick:n,children:[(0,d.jsx)(h.Square,{}),"Stop"]}),(0,d.jsxs)(m.DropdownMenuItem,{variant:"destructive",onClick:p,children:[(0,d.jsx)(i.Trash2,{}),"Delete"]})]})]})]}),z&&!c&&(0,d.jsx)(I,{task:a}),c&&(0,d.jsxs)("div",{className:"mx-4 mb-4 space-y-2",children:[(0,d.jsx)("div",{className:"rounded-xl border border-border/60 bg-background",children:(0,d.jsx)(v.Conversation,{task:B})}),(0,d.jsx)(F.TaskReply,{task:{id:a.id,label:a.label,bot:a.bot,ask:a.ask},status:a.status})]})]})}function I({task:a}){let b=[];if(a.lines.forEach((c,d)=>{if("tool"!==c.kind)return;let e=a.lines[d+1];b.push({step:c,took:e?(0,A.toDate)(e.at).getTime()-(0,A.toDate)(c.at).getTime():null})}),0===b.length)return null;let c=(0,A.toDate)(a.updatedAt).getTime()-(0,A.toDate)(a.createdAt).getTime();return(0,d.jsxs)("div",{className:"pointer-events-none absolute top-[calc(100%-0.75rem)] left-17 z-20 hidden w-96 max-w-[calc(100%-5rem)] rounded-xl bg-background p-3 pb-2 shadow-xl shadow-black/10 ring-1 ring-border/60 group-hover/row:block",children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center gap-2 font-mono text-[10px] text-muted-foreground",children:[(0,d.jsx)("span",{children:a.bot}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsxs)("span",{children:[b.length," ",1===b.length?"step":"steps"]}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsx)("span",{children:J(c)})]}),b.slice(-6).map(({step:a,took:b})=>{let c=(0,x.toolIcon)(a.name);return(0,d.jsxs)("div",{className:"flex h-5.5 items-center gap-2 font-mono text-[11px]",children:[null===b?(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"}):(0,d.jsx)(c,{className:"size-3 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"w-24 shrink-0 truncate text-muted-foreground",children:a.name}),null===b?(0,d.jsx)(o.ShinyText,{text:a.note??a.input,speed:2.2,className:"min-w-0 flex-1 truncate"}):(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:a.note??a.input}),(0,d.jsx)("span",{className:"w-10 shrink-0 text-right text-muted-foreground/70 tabular-nums",children:null===b?"":J(b)})]},a.id)})]})}function J(a){let b=Math.max(0,a)/1e3;if(b<10)return`${b.toFixed(1)}s`;if(b<60)return`${Math.round(b)}s`;let c=Math.floor(b/60);return`${c}m ${Math.round(b-60*c)}s`}function K(){return(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsx)(p.Skeleton,{className:"size-10 shrink-0 rounded-full"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-2",children:[(0,d.jsx)(p.Skeleton,{className:"h-3 w-40 max-w-full"}),(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-80 max-w-full"})]}),(0,d.jsxs)("span",{className:(0,E.cn)("flex shrink-0 flex-col items-end gap-1.5",L),children:[(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-12"}),(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-24"})]}),(0,d.jsx)("span",{className:"size-4 shrink-0"}),(0,d.jsx)("span",{className:"size-7 shrink-0"})]})}a.s(["TaskSetting",0,function(){let[a,b]=(0,j.useState)(null),[c,e]=(0,j.useState)(""),{data:f}=(0,D.useServerRoute)(k.queryKey.bot),{items:g,isLoading:h,isLoadingMore:i,error:m,hasMore:o,sentinelRef:p}=(0,C.useServerPages)({key:(a,b)=>{if(0===a)return k.queryKey.taskHistory(null);let c=b?.at(-1);return c?k.queryKey.taskHistory((0,A.toDate)(c.updatedAt).toISOString()):null},size:t.TASK_HISTORY_PAGE,swr:{revalidateFirstPage:!0,refreshInterval:a=>3e3*!!a?.[0]?.some(a=>"running"===a.status)}});(0,y.useSeenOnDetail)(g.find(b=>b.id===a));let[u]=(0,B.useServerAction)(q.cancelTaskAction,{okMessage:"Task stopped",onOk:a=>{(0,D.revalidate)(k.queryKey.tasks),y.screenActs.announce({kind:"stopped",id:a.id,label:a.label})}}),[v]=(0,B.useServerAction)(s.deleteTaskAction,{okMessage:"Task deleted",onOk:()=>(0,D.revalidate)(k.queryKey.tasks)}),[w]=(0,B.useServerAction)(r.clearFinishedTasksAction,{onOk:()=>(0,D.revalidate)(k.queryKey.tasks)}),x=async()=>{await n.notify.confirm({title:"Clear finished jobs?",description:"Everything done or failed goes, threads included. Running and waiting jobs stay.",okText:"Clear",destructive:!0})&&w()},E=async a=>{await n.notify.confirm({title:`Delete "${a.label}"?`,description:"The thread goes with it — nothing can be picked back up.",okText:"Delete",destructive:!0})&&v(a.id)};if(h)return(0,d.jsx)(z.SettingSkeleton,{rows:3});if(m)return(0,d.jsx)(z.SettingError,{message:m.message});let F=c.trim().toLowerCase(),G=F?g.filter(a=>[a.label,a.outcome,a.bot].join(" ").toLowerCase().includes(F)):g,I=g.filter(a=>"waiting"===a.status).length,J=g.filter(a=>"failed"===a.status).length;return(0,d.jsx)(z.SettingScreen,{footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(z.SettingRailNote,{children:[g.length," loaded",I>0&&` \xb7 ${I} waiting on you`,J>0&&` \xb7 ${J} failed`]}),(0,d.jsx)(l.Button,{variant:"outline",size:"sm",onClick:x,children:"Clear finished"})]}),children:(0,d.jsx)(z.SettingGroup,{filter:(0,d.jsx)(z.SettingFilter,{value:c,onChange:e,placeholder:"Filter by label, bot or word"}),right:F?`${G.length} of ${g.length}`:void 0,children:(0,d.jsxs)(z.SettingItems,{children:[0===G.length?(0,d.jsx)("p",{className:"p-4 text-sm leading-relaxed text-muted-foreground",children:F?"Nothing loaded matches. Keep scrolling to search further back.":"Nothing yet. When Thursday hands a job to a bot mid-call, it shows up here — while it runs, and after."}):G.map(c=>(0,d.jsx)(H,{task:c,bots:f,open:a===c.id,onToggle:()=>b(a=>a===c.id?null:c.id),onStop:()=>u(c.id),onDelete:()=>E(c)},c.id)),(0,d.jsx)(z.SettingMore,{hasMore:o,loading:i,sentinelRef:p,ghost:(0,d.jsx)(K,{}),className:"divide-y divide-border/60"})]})})})}]),c()}catch(a){c(a)}},!1),874004,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f673b8897006f8ae8c1a709d306fe394476e76d0b",b.callServer,void 0,b.findSourceMapURL,"clearFinishedTasksAction");a.s(["clearFinishedTasksAction",0,c])},369278,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fcad43ea4ae0039c0186bcc86a4e3b3a0e706caa4",b.callServer,void 0,b.findSourceMapURL,"deleteTaskAction");a.s(["deleteTaskAction",0,c])},862966,a=>{"use strict";var b=a.i(572131),c=a.i(988712),d=a.i(426618),e=a.i(664565),f=a.i(487610),g=a.i(561311);let h=Promise.resolve(),i=(0,e.withMiddleware)(c.u,a=>(c,e,i)=>{let j,k=(0,b.useRef)(!1),{cache:l,initialSize:m=1,revalidateAll:n=!1,persistSize:o=!1,revalidateFirstPage:p=!0,revalidateOnMount:q=!1,parallel:r=!1}=i,[,,,s]=d.a.get(d.o);try{(j=(0,d.s)(c?c(0,null):null)[0])&&(j=g.INFINITE_PREFIX+j)}catch(a){}let[t,u,v]=(0,d.c)(l,j),w=(0,b.useCallback)(()=>(0,d.i)(t()._l)?m:t()._l,[l,j,m]);(0,f.useSyncExternalStore)((0,b.useCallback)(a=>j?v(j,()=>{a()}):()=>{},[l,j]),w,w);let x=(0,b.useCallback)(()=>{let a=t()._l;return(0,d.i)(a)?m:a},[j,m]),y=(0,b.useRef)(x());(0,d.u)(()=>{if(!k.current){k.current=!0;return}j&&u({_l:o?y.current:x()})},[j,l]);let z=q&&!k.current,A=a(j,async a=>{let b=t()._i,f=t()._r,g=d.a.get(l),h=g[8],j=()=>g[8]!==h;u({_r:d.U});let k=[],m=x(),[o]=(0,d.c)(l,a),q=o().data,v=[],w=null;for(let a=0;a<m;++a){let[g,h]=(0,d.s)(c(a,r?null:w));if(!g)break;let[m,o]=(0,d.c)(l,g),t=m().data,u=n||b||(0,d.i)(t)||p&&!a&&!(0,d.i)(q)||z||q&&!(0,d.i)(q[a])&&!i.compare(q[a],t);if(e&&("function"==typeof f?f(t,h):u)){let b=async()=>{if(g in s){let a=s[g];delete s[g],t=await a}else t=await e(h);j()||o({data:t,_k:h}),k[a]=t};r?v.push(b):await b()}else k[a]=t;r||(w=t)}return r&&await Promise.all(v.map(a=>a())),j()||u({_i:d.U}),k},i),B=(0,b.useCallback)(function(a,b){let c="boolean"==typeof b?{revalidate:b}:b||{},e=!1!==c.revalidate;return j?(e&&((0,d.i)(a)?u({_i:!0,_r:c.revalidate}):u({_i:!1,_r:c.revalidate})),arguments.length?A.mutate(a,{...c,revalidate:e}):A.mutate()):h},[j,l]),C=(0,b.useCallback)(a=>{let b;if(!j)return h;let[,e]=(0,d.c)(l,j);if((0,d.e)(a)?b=a(x()):"number"==typeof a&&(b=a),"number"!=typeof b)return h;e({_l:b}),y.current=b;let f=[],[g]=(0,d.c)(l,j),i=null;for(let a=0;a<b;++a){let[b]=(0,d.s)(c(a,i)),[e]=(0,d.c)(l,b),h=b?e().data:d.U;if((0,d.i)(h))return B(g().data);f.push(h),i=h}return B(f)},[j,l,B,x]);return{size:x(),setSize:C,mutate:B,get data(){return A.data},get error(){return A.error},get isValidating(){return A.isValidating},get isLoading(){return A.isLoading}}});var j=a.i(287702),k=a.i(759497);a.s(["useServerPages",0,function(a){let c=a.size??j.PAGE_SIZE,{key:d}=a,{data:e,error:f,isLoading:g,isValidating:h,setSize:l,mutate:m}=i((a,b)=>(0,k.resolveKey)(d(a,b)),k.fetchRoute,{dedupingInterval:500,revalidateOnMount:!0,revalidateOnFocus:!0,revalidateOnReconnect:!0,focusThrottleInterval:1e3,revalidateFirstPage:!1,...a.swr}),n=e??[],o=n.flat(),p=n.at(-1),q=void 0!==p&&p.length>=c,r=(0,b.useRef)(0),s=h&&n.length>0&&r.current>n.length,t=(0,b.useRef)({isValidating:h,setSize:l,pages:n.length});t.current={isValidating:h,setSize:l,pages:n.length};let u=(0,k.resolveKey)(d(0,null)),v="string"==typeof u?u:u?.url;(0,b.useEffect)(()=>{if(v)return(0,k.registerPagedReader)({url:v,refresh:()=>m()})},[v,m]);let w=function(a,c={}){let{enabled:d=!0,margin:e="600px",revision:f}=c,g=(0,b.useRef)(a);g.current=a;let h=(0,b.useRef)(null),i=(0,b.useRef)(null),j=(0,b.useCallback)(a=>{h.current=a},[]);return(0,b.useEffect)(()=>{i.current?.disconnect();let a=h.current;if(a&&d)return i.current=new IntersectionObserver(([a])=>{a.isIntersecting&&g.current()},{root:function(a){let b=a.parentElement;for(;b;){let{overflowY:a}=getComputedStyle(b);if(("auto"===a||"scroll"===a)&&b.scrollHeight>b.clientHeight)return b;b=b.parentElement}return null}(a),rootMargin:e}),i.current.observe(a),()=>i.current?.disconnect()},[d,e,f]),j}(()=>{let a=t.current;a.isValidating||(r.current=a.pages+1,a.setSize(a.pages+1))},{enabled:q,revision:`${n.length}:${h}`});return{items:o,isLoading:g,isLoadingMore:s,error:f,hasMore:q,sentinelRef:w,refresh:()=>m()}}],862966)},272944,a=>{"use strict";var b=a.i(164831);let c={name:"ellipsis",size:24,node:[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],aliases:["more-horizontal"]};c.node;let d=(0,b.default)(c);a.s(["MoreHorizontal",0,d],272944)},951675,a=>{"use strict";var b=a.i(164831);let c={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};c.node;let d=(0,b.default)(c);a.s(["Trash2",0,d],951675)}];
1
+ module.exports=[210799,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(589027),f=a.i(875160),g=a.i(272944),h=a.i(19895),i=a.i(951675),j=a.i(572131),k=a.i(767561),l=a.i(340695),m=a.i(676504),n=a.i(446181),o=a.i(545097),p=a.i(950463),q=a.i(229515),r=a.i(411686),s=a.i(742214),t=a.i(411509),u=a.i(913834),v=a.i(467268),w=a.i(42380),x=a.i(8468),y=a.i(777279),z=a.i(619477),A=a.i(199169),B=a.i(313237),C=a.i(862966),D=a.i(759497),E=a.i(497895),F=a.i(394440),G=b([v,x]);[v,x]=G.then?(await G)():G;let L="w-36";function H({task:a,bots:b,open:c,onToggle:k,onStop:n,onDelete:p}){var q,r;let s,x="running"===a.status||"waiting"===a.status,z="running"===a.status,B=(0,j.useMemo)(()=>(0,y.taskFromRow)(a,b),[a,b]),C=function(a){if("waiting"===a.status&&a.ask)return{text:(0,t.isAppStop)(a.ask)?(0,E.plainText)(a.outcome??a.ask.question):a.ask.question,tone:E.WAITING_INK};let b=a.seen;if("failed"===a.status)return{text:(0,E.plainText)(a.outcome??"Failed"),tone:b?"text-destructive/70":"text-destructive"};if("done"===a.status)return{text:(0,E.plainText)(a.outcome??"Done"),tone:b?"text-muted-foreground":"text-foreground/80"};for(let b=a.lines.length-1;b>=0;b--){let c=a.lines[b];if("tool"===c.kind)return{text:c.note??c.input,tone:"text-muted-foreground",tool:c.name,shine:!0};if("text"===c.kind)return{text:c.text,tone:"text-muted-foreground",shine:!0};if("user"===c.kind||"waiting"===c.kind)break}return{text:`${a.bot} is taking it on…`,tone:"text-muted-foreground italic",shine:!0}}(a),D=a.tokens.input+a.tokens.output;return(0,d.jsxs)("div",{className:"group/row relative transition-colors hover:bg-muted/50",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsxs)("button",{type:"button",onClick:k,className:"flex min-w-0 flex-1 items-center gap-3 rounded-md text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)(u.BotMark,{size:40,seed:a.bot,vary:a.id,...(q=a.bot,r=b,s=r?.find(a=>a.name===q)?.icon,{color:s?.color,shape:s?.shape,outline:s?.outline}),state:z?"thinking":"idle",notify:"waiting"===a.status,className:"shrink-0"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"truncate text-sm font-medium",children:a.label}),(0,d.jsx)(w.BotRoster,{bots:(0,y.rosterOf)(B),taskId:a.id}),z&&(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"})]}),C&&(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-[13px] leading-snug",children:[C.tool&&(0,d.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:C.tool}),C.shine?(0,d.jsx)(o.ShinyText,{text:C.text,speed:2.2,className:"min-w-0 truncate"}):(0,d.jsx)("span",{className:(0,E.cn)("min-w-0 truncate",C.tone),children:C.text})]})]}),(0,d.jsxs)("span",{className:(0,E.cn)("flex shrink-0 flex-col items-end gap-0.5 font-mono text-[11px] leading-4 text-muted-foreground tabular-nums",L),children:[(0,d.jsx)("span",{children:(0,A.whenOf)(a.updatedAt)}),(0,d.jsxs)("span",{className:"max-w-full truncate text-muted-foreground/70",title:D>0?`${a.id} \xb7 in ${(0,E.formatCount)(a.tokens.input)} \xb7 out ${(0,E.formatCount)(a.tokens.output)}`:a.id,children:[a.bot,D>0&&` \xb7 ${(0,E.formatCount)(D)}`]})]}),(0,d.jsx)(e.ChevronDown,{className:(0,E.cn)("size-4 shrink-0 text-muted-foreground transition-transform",c&&"rotate-180")})]}),(0,d.jsxs)(m.DropdownMenu,{children:[(0,d.jsx)(m.DropdownMenuTrigger,{render:(0,d.jsx)(l.Button,{size:"icon-sm",variant:"ghost"}),children:(0,d.jsx)(g.MoreHorizontal,{})}),(0,d.jsxs)(m.DropdownMenuContent,{align:"end",children:[x&&(0,d.jsxs)(m.DropdownMenuItem,{onClick:n,children:[(0,d.jsx)(h.Square,{}),"Stop"]}),(0,d.jsxs)(m.DropdownMenuItem,{variant:"destructive",onClick:p,children:[(0,d.jsx)(i.Trash2,{}),"Delete"]})]})]})]}),z&&!c&&(0,d.jsx)(I,{task:a}),c&&(0,d.jsxs)("div",{className:"mx-4 mb-4 space-y-2",children:[(0,d.jsx)("div",{className:"rounded-xl border border-border/60 bg-background",children:(0,d.jsx)(v.Conversation,{task:B})}),(0,d.jsx)(F.TaskReply,{task:{id:a.id,label:a.label,bot:a.bot,ask:a.ask},status:a.status})]})]})}function I({task:a}){let b=[];if(a.lines.forEach((c,d)=>{if("tool"!==c.kind)return;let e=a.lines[d+1];b.push({step:c,took:e?(0,A.toDate)(e.at).getTime()-(0,A.toDate)(c.at).getTime():null})}),0===b.length)return null;let c=(0,A.toDate)(a.updatedAt).getTime()-(0,A.toDate)(a.createdAt).getTime();return(0,d.jsxs)("div",{className:"pointer-events-none absolute top-[calc(100%-0.75rem)] left-17 z-20 hidden w-96 max-w-[calc(100%-5rem)] rounded-xl bg-background p-3 pb-2 shadow-xl shadow-black/10 ring-1 ring-border/60 group-hover/row:block",children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center gap-2 font-mono text-[10px] text-muted-foreground",children:[(0,d.jsx)("span",{children:a.bot}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsxs)("span",{children:[b.length," ",1===b.length?"step":"steps"]}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsx)("span",{children:J(c)})]}),b.slice(-6).map(({step:a,took:b})=>{let c=(0,x.toolIcon)(a.name);return(0,d.jsxs)("div",{className:"flex h-5.5 items-center gap-2 font-mono text-[11px]",children:[null===b?(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"}):(0,d.jsx)(c,{className:"size-3 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"w-24 shrink-0 truncate text-muted-foreground",children:a.name}),null===b?(0,d.jsx)(o.ShinyText,{text:a.note??a.input,speed:2.2,className:"min-w-0 flex-1 truncate"}):(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:a.note??a.input}),(0,d.jsx)("span",{className:"w-10 shrink-0 text-right text-muted-foreground/70 tabular-nums",children:null===b?"":J(b)})]},a.id)})]})}function J(a){let b=Math.max(0,a)/1e3;if(b<10)return`${b.toFixed(1)}s`;if(b<60)return`${Math.round(b)}s`;let c=Math.floor(b/60);return`${c}m ${Math.round(b-60*c)}s`}function K(){return(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsx)(p.Skeleton,{className:"size-10 shrink-0 rounded-full"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-2",children:[(0,d.jsx)(p.Skeleton,{className:"h-3 w-40 max-w-full"}),(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-80 max-w-full"})]}),(0,d.jsxs)("span",{className:(0,E.cn)("flex shrink-0 flex-col items-end gap-1.5",L),children:[(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-12"}),(0,d.jsx)(p.Skeleton,{className:"h-2.5 w-24"})]}),(0,d.jsx)("span",{className:"size-4 shrink-0"}),(0,d.jsx)("span",{className:"size-7 shrink-0"})]})}a.s(["TaskSetting",0,function(){let[a,b]=(0,j.useState)(null),[c,e]=(0,j.useState)(""),{data:f}=(0,D.useServerRoute)(k.queryKey.bot),{items:g,isLoading:h,isLoadingMore:i,error:m,hasMore:o,sentinelRef:p}=(0,C.useServerPages)({key:(a,b)=>{if(0===a)return k.queryKey.taskHistory(null);let c=b?.at(-1);return c?k.queryKey.taskHistory((0,A.toDate)(c.updatedAt).toISOString()):null},size:t.TASK_HISTORY_PAGE,swr:{revalidateFirstPage:!0,refreshInterval:a=>3e3*!!a?.[0]?.some(a=>"running"===a.status)}});(0,y.useSeenOnDetail)(g.find(b=>b.id===a));let[u]=(0,B.useServerAction)(q.cancelTaskAction,{okMessage:"Task stopped",onOk:a=>{(0,D.revalidate)(k.queryKey.tasks),y.screenActs.announce({kind:"stopped",id:a.id,label:a.label})}}),[v]=(0,B.useServerAction)(s.deleteTaskAction,{okMessage:"Task deleted",onOk:()=>(0,D.revalidate)(k.queryKey.tasks)}),[w]=(0,B.useServerAction)(r.clearFinishedTasksAction,{onOk:()=>(0,D.revalidate)(k.queryKey.tasks)}),x=async()=>{await n.notify.confirm({title:"Clear finished jobs?",description:"Everything done or failed goes, threads included. Running and waiting jobs stay.",okText:"Clear",destructive:!0})&&w()},E=async a=>{await n.notify.confirm({title:`Delete "${a.label}"?`,description:"The thread goes with it — nothing can be picked back up.",okText:"Delete",destructive:!0})&&v(a.id)};if(h)return(0,d.jsx)(z.SettingSkeleton,{rows:3});if(m)return(0,d.jsx)(z.SettingError,{message:m.message});let F=c.trim().toLowerCase(),G=F?g.filter(a=>[a.label,a.outcome,a.bot].join(" ").toLowerCase().includes(F)):g,I=g.filter(a=>"waiting"===a.status).length,J=g.filter(a=>"failed"===a.status).length;return(0,d.jsx)(z.SettingScreen,{footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(z.SettingRailNote,{children:[g.length," loaded",I>0&&` \xb7 ${I} waiting on you`,J>0&&` \xb7 ${J} failed`]}),(0,d.jsx)(l.Button,{variant:"outline",size:"sm",onClick:x,children:"Clear finished"})]}),children:(0,d.jsx)(z.SettingGroup,{filter:(0,d.jsx)(z.SettingFilter,{value:c,onChange:e,placeholder:"Filter by label, bot or word"}),right:F?`${G.length} of ${g.length}`:void 0,children:(0,d.jsxs)(z.SettingItems,{children:[0===G.length?(0,d.jsx)("p",{className:"p-4 text-sm leading-relaxed text-muted-foreground",children:F?"Nothing loaded matches. Keep scrolling to search further back.":"Nothing yet. When Thursday hands a job to a bot mid-call, it shows up here — while it runs, and after."}):G.map(c=>(0,d.jsx)(H,{task:c,bots:f,open:a===c.id,onToggle:()=>b(a=>a===c.id?null:c.id),onStop:()=>u(c.id),onDelete:()=>E(c)},c.id)),(0,d.jsx)(z.SettingMore,{hasMore:o,loading:i,sentinelRef:p,ghost:(0,d.jsx)(K,{}),className:"divide-y divide-border/60"})]})})})}]),c()}catch(a){c(a)}},!1),411686,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f573c6ac0e703d41cd96ff148ae8a6a3a62997a81",b.callServer,void 0,b.findSourceMapURL,"clearFinishedTasksAction");a.s(["clearFinishedTasksAction",0,c])},742214,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fc93633f9232e2216f532d788f4598529462ccdfb",b.callServer,void 0,b.findSourceMapURL,"deleteTaskAction");a.s(["deleteTaskAction",0,c])},862966,a=>{"use strict";var b=a.i(572131),c=a.i(988712),d=a.i(426618),e=a.i(664565),f=a.i(487610),g=a.i(561311);let h=Promise.resolve(),i=(0,e.withMiddleware)(c.u,a=>(c,e,i)=>{let j,k=(0,b.useRef)(!1),{cache:l,initialSize:m=1,revalidateAll:n=!1,persistSize:o=!1,revalidateFirstPage:p=!0,revalidateOnMount:q=!1,parallel:r=!1}=i,[,,,s]=d.a.get(d.o);try{(j=(0,d.s)(c?c(0,null):null)[0])&&(j=g.INFINITE_PREFIX+j)}catch(a){}let[t,u,v]=(0,d.c)(l,j),w=(0,b.useCallback)(()=>(0,d.i)(t()._l)?m:t()._l,[l,j,m]);(0,f.useSyncExternalStore)((0,b.useCallback)(a=>j?v(j,()=>{a()}):()=>{},[l,j]),w,w);let x=(0,b.useCallback)(()=>{let a=t()._l;return(0,d.i)(a)?m:a},[j,m]),y=(0,b.useRef)(x());(0,d.u)(()=>{if(!k.current){k.current=!0;return}j&&u({_l:o?y.current:x()})},[j,l]);let z=q&&!k.current,A=a(j,async a=>{let b=t()._i,f=t()._r,g=d.a.get(l),h=g[8],j=()=>g[8]!==h;u({_r:d.U});let k=[],m=x(),[o]=(0,d.c)(l,a),q=o().data,v=[],w=null;for(let a=0;a<m;++a){let[g,h]=(0,d.s)(c(a,r?null:w));if(!g)break;let[m,o]=(0,d.c)(l,g),t=m().data,u=n||b||(0,d.i)(t)||p&&!a&&!(0,d.i)(q)||z||q&&!(0,d.i)(q[a])&&!i.compare(q[a],t);if(e&&("function"==typeof f?f(t,h):u)){let b=async()=>{if(g in s){let a=s[g];delete s[g],t=await a}else t=await e(h);j()||o({data:t,_k:h}),k[a]=t};r?v.push(b):await b()}else k[a]=t;r||(w=t)}return r&&await Promise.all(v.map(a=>a())),j()||u({_i:d.U}),k},i),B=(0,b.useCallback)(function(a,b){let c="boolean"==typeof b?{revalidate:b}:b||{},e=!1!==c.revalidate;return j?(e&&((0,d.i)(a)?u({_i:!0,_r:c.revalidate}):u({_i:!1,_r:c.revalidate})),arguments.length?A.mutate(a,{...c,revalidate:e}):A.mutate()):h},[j,l]),C=(0,b.useCallback)(a=>{let b;if(!j)return h;let[,e]=(0,d.c)(l,j);if((0,d.e)(a)?b=a(x()):"number"==typeof a&&(b=a),"number"!=typeof b)return h;e({_l:b}),y.current=b;let f=[],[g]=(0,d.c)(l,j),i=null;for(let a=0;a<b;++a){let[b]=(0,d.s)(c(a,i)),[e]=(0,d.c)(l,b),h=b?e().data:d.U;if((0,d.i)(h))return B(g().data);f.push(h),i=h}return B(f)},[j,l,B,x]);return{size:x(),setSize:C,mutate:B,get data(){return A.data},get error(){return A.error},get isValidating(){return A.isValidating},get isLoading(){return A.isLoading}}});var j=a.i(287702),k=a.i(759497);a.s(["useServerPages",0,function(a){let c=a.size??j.PAGE_SIZE,{key:d}=a,{data:e,error:f,isLoading:g,isValidating:h,setSize:l,mutate:m}=i((a,b)=>(0,k.resolveKey)(d(a,b)),k.fetchRoute,{dedupingInterval:500,revalidateOnMount:!0,revalidateOnFocus:!0,revalidateOnReconnect:!0,focusThrottleInterval:1e3,revalidateFirstPage:!1,...a.swr}),n=e??[],o=n.flat(),p=n.at(-1),q=void 0!==p&&p.length>=c,r=(0,b.useRef)(0),s=h&&n.length>0&&r.current>n.length,t=(0,b.useRef)({isValidating:h,setSize:l,pages:n.length});t.current={isValidating:h,setSize:l,pages:n.length};let u=(0,k.resolveKey)(d(0,null)),v="string"==typeof u?u:u?.url;(0,b.useEffect)(()=>{if(v)return(0,k.registerPagedReader)({url:v,refresh:()=>m()})},[v,m]);let w=function(a,c={}){let{enabled:d=!0,margin:e="600px",revision:f}=c,g=(0,b.useRef)(a);g.current=a;let h=(0,b.useRef)(null),i=(0,b.useRef)(null),j=(0,b.useCallback)(a=>{h.current=a},[]);return(0,b.useEffect)(()=>{i.current?.disconnect();let a=h.current;if(a&&d)return i.current=new IntersectionObserver(([a])=>{a.isIntersecting&&g.current()},{root:function(a){let b=a.parentElement;for(;b;){let{overflowY:a}=getComputedStyle(b);if(("auto"===a||"scroll"===a)&&b.scrollHeight>b.clientHeight)return b;b=b.parentElement}return null}(a),rootMargin:e}),i.current.observe(a),()=>i.current?.disconnect()},[d,e,f]),j}(()=>{let a=t.current;a.isValidating||(r.current=a.pages+1,a.setSize(a.pages+1))},{enabled:q,revision:`${n.length}:${h}`});return{items:o,isLoading:g,isLoadingMore:s,error:f,hasMore:q,sentinelRef:w,refresh:()=>m()}}],862966)},272944,a=>{"use strict";var b=a.i(164831);let c={name:"ellipsis",size:24,node:[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],aliases:["more-horizontal"]};c.node;let d=(0,b.default)(c);a.s(["MoreHorizontal",0,d],272944)},951675,a=>{"use strict";var b=a.i(164831);let c={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};c.node;let d=(0,b.default)(c);a.s(["Trash2",0,d],951675)}];
2
2
 
3
- //# sourceMappingURL=_0kbkmar._.js.map
3
+ //# sourceMappingURL=_06tssji._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[588237,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-9 px-2 text-left align-middle font-mono text-[11px] font-normal tracking-[0.1em] whitespace-nowrap text-muted-foreground uppercase [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b border-border/60 transition-colors data-[state=selected]:bg-muted hover:bg-muted/40",a),...d})}])},369768,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(767561),g=a.i(340695),h=a.i(965733),i=a.i(846991),j=a.i(950463),k=a.i(588237),l=a.i(287702),m=a.i(559553),n=a.i(12993),o=a.i(313237),p=a.i(497895),q=b([i]);[i]=q.then?(await q)():q;let A=new Set(["frame","image","audio","video"]);function r(a){let b=(0,m.workspaceRelative)(a);if(!b)return{how:"os"};let c=(0,m.viewKindOf)(b);return A.has(c)?{how:"tab",path:b,href:f.queryKey.fileView(b)}:"none"===c?{how:"os"}:{how:"dialog",path:b}}let B=(0,e.createContext)(null),C={dialog:{prose:"px-5 py-4",block:"px-4 py-3"},page:{prose:"px-5 py-6 sm:px-8",block:"px-5 py-5"},inline:{prose:"pb-3",block:"pb-3"}};function s({kind:a,content:b,truncated:c,where:e="dialog"}){return(0,d.jsxs)(d.Fragment,{children:[null!=c&&(0,d.jsx)(t,{of:c}),(0,d.jsx)(u,{kind:a,content:b,where:e})]})}function t({of:a}){return(0,d.jsxs)("p",{className:"border-b border-border/60 px-5 py-2.5 font-mono text-[11px] text-muted-foreground",children:[`Showing the first ${(0,p.formatBytes)(l.WORKSPACE_VIEW.textMax)} of ${(0,p.formatBytes)(a)}. `,"Open the file itself for the rest."]})}function u({kind:a,content:b,where:c}){let e=C[c];switch(a){case"markdown":return(0,d.jsx)("div",{className:(0,p.cn)("min-w-0 text-sm leading-relaxed",e.prose),children:(0,d.jsx)(i.Markdown,{children:b})});case"csv":return(0,d.jsx)(z,{content:b,className:e.block});case"json":return(0,d.jsx)(y,{text:function(a){try{return JSON.stringify(JSON.parse(a),null,2)}catch{return a}}(b),className:e.block});default:return(0,d.jsx)(y,{text:b,className:e.block})}}function v(a){let[b,c]=(0,e.useState)(null),[d,g]=(0,e.useState)(null),[h,i]=(0,e.useState)(null);return(0,e.useEffect)(()=>{if(!a)return;c(null),g(null),i(null);let b=!1;return fetch(f.queryKey.file(a),{headers:{range:`bytes=0-${l.WORKSPACE_VIEW.textMax-1}`}}).then(async a=>{if(!a.ok)throw Error(await a.text());return{text:await a.text(),of:function(a){let b=a.headers.get("content-range")?.match(/^bytes \d+-(\d+)\/(\d+)$/);if(!b)return null;let[,c,d]=b.map(Number);return c+1<d?d:null}(a)}}).then(({text:a,of:d})=>{if(b)return;let e=null===d?a:a.slice(0,a.lastIndexOf("\n")+1||void 0);c(e),i(d)}).catch(a=>!b&&g((0,p.errorToString)(a))),()=>{b=!0}},[a]),{content:b,failure:d,truncated:h}}function w({path:a,bytes:b}){let[c,e]=(0,o.useServerAction)(n.openFileAction);return(0,d.jsxs)("div",{className:"space-y-4 p-8",children:[(0,d.jsxs)("p",{className:"max-w-lg text-sm leading-relaxed text-muted-foreground",children:[`This file is ${(0,p.formatBytes)(b)} — too big to draw here without `,"taking the window with it. Open it where it is instead."]}),(0,d.jsx)(g.Button,{variant:"outline",loading:e,onClick:()=>c(a),children:"Reveal in the file manager"})]})}function x({path:a,kind:b,onClose:c}){let{content:e,failure:f,truncated:g}=v(a),i=a?.split("/").pop()??"";return(0,d.jsx)(h.Dialog,{open:null!==a,onOpenChange:a=>!a&&c(),children:(0,d.jsxs)(h.DialogContent,{className:"flex max-h-[calc(100vh-3rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-4xl",children:[(0,d.jsx)(h.DialogTitle,{className:"sr-only",children:i}),(0,d.jsx)("div",{className:"flex shrink-0 items-center gap-2 border-b border-border/60 px-4 py-2.5 pr-12",children:(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[12px]",children:a})}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-auto",children:f?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:f}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(j.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(j.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(j.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(s,{kind:b,content:e,truncated:g})})]})})}function y({text:a,className:b}){return(0,d.jsx)("pre",{className:(0,p.cn)("overflow-x-auto font-mono text-[12px] leading-relaxed whitespace-pre-wrap text-foreground/90",b),children:a})}function z({content:a,className:b}){let[c,...f]=(0,e.useMemo)(()=>(function(a){let b=[],c=[],d="",e=!1;for(let f=0;f<a.length;f++){let g=a[f];e?'"'===g&&'"'===a[f+1]?(d+='"',f++):'"'===g?e=!1:d+=g:'"'===g?e=!0:","===g?(c.push(d),d=""):"\n"===g||"\r"===g?("\r"===g&&"\n"===a[f+1]&&f++,c.push(d),b.push(c),c=[],d=""):d+=g}return(d.length||c.length)&&(c.push(d),b.push(c)),b.filter(a=>a.some(a=>a.trim()))})(a),[a]);return c?(0,d.jsx)("div",{className:(0,p.cn)("overflow-x-auto",b),children:(0,d.jsxs)(k.Table,{children:[(0,d.jsx)(k.TableHeader,{children:(0,d.jsx)(k.TableRow,{children:c.map((a,b)=>(0,d.jsx)(k.TableHead,{className:"whitespace-nowrap",children:a},`${b}-${a}`))})}),(0,d.jsx)(k.TableBody,{children:f.map((a,b)=>(0,d.jsx)(k.TableRow,{children:c.map((c,e)=>(0,d.jsx)(k.TableCell,{className:"whitespace-nowrap",children:a[e]??""},`${b}-${e}`))},`${b}-${a[0]??""}`))})]})}):(0,d.jsx)(y,{text:a,className:b})}a.s(["FileBody",0,s,"FileDialog",0,x,"FileLink",0,function({path:a,className:b,title:c,label:g,children:h}){let i=r(a),j=(0,e.useContext)(B),[k,l]=(0,o.useServerAction)(n.openFileAction);return"tab"===i.how?(0,d.jsx)("a",{href:i.href,target:"_blank",rel:"noreferrer",title:c??a,"aria-label":g,className:b,children:h}):(0,d.jsx)("button",{type:"button",disabled:l,title:c??a,"aria-label":g,className:b,onClick:()=>{"dialog"===i.how?j?j(i.path):window.open(f.queryKey.fileView(i.path),"_blank"):k(a)},children:h})},"FilePreview",0,function({path:a,bytes:b}){let c=(0,m.viewKindOf)(a),{content:e,failure:g,truncated:h}=v(A.has(c)?null:a);return("frame"===c||"image"===c)&&b>l.WORKSPACE_VIEW.elementMax?(0,d.jsx)(w,{path:a,bytes:b}):"frame"===c?(0,d.jsx)("iframe",{title:a,src:f.queryKey.file(a),allow:"clipboard-read; clipboard-write; fullscreen; autoplay",className:"h-full w-full bg-white"}):"image"===c?(0,d.jsx)("img",{src:f.queryKey.file(a),alt:a,className:"mx-auto max-w-full p-6"}):"audio"===c||"video"===c?"audio"===c?(0,d.jsx)("audio",{controls:!0,src:f.queryKey.file(a),className:"w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):(0,d.jsx)("video",{controls:!0,src:f.queryKey.file(a),className:"max-w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):g?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:g}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(j.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(j.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(j.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(s,{kind:c,content:e,truncated:h})},"FileViewer",0,function({children:a}){let[b,c]=(0,e.useState)(null);return(0,d.jsxs)(B,{value:c,children:[a,(0,d.jsx)(x,{path:b,kind:b?(0,m.viewKindOf)(b):"text",onClose:()=>c(null)})]})},"fileTarget",0,r,"useFileText",0,v,"useOpenFile",0,function(){let a=(0,e.useContext)(B);return(0,e.useCallback)(b=>{let c=r(b);if("os"===c.how)return!1;if("dialog"===c.how&&a)return a(c.path),!0;let d="tab"===c.how?c.href:f.queryKey.fileView(c.path);return null!==window.open(d,"_blank")},[a])}]),c()}catch(a){c(a)}},!1),12993,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fe75c180b16ec13b8c8052e5fbacba3e5789f0aca",b.callServer,void 0,b.findSourceMapURL,"openFileAction");a.s(["openFileAction",0,c])},559553,a=>{"use strict";var b=a.i(287702);let c=a=>`text/${a}; charset=utf-8`,d={md:{kind:"markdown",mime:c("markdown")},markdown:{kind:"markdown",mime:c("markdown")},csv:{kind:"csv",mime:c("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:c("plain")},log:{kind:"text",mime:c("plain")},html:{kind:"frame",mime:c("html")},htm:{kind:"frame",mime:c("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},css:{kind:"none",mime:c("css")},js:{kind:"none",mime:c("javascript")},woff2:{kind:"none",mime:"font/woff2"}},e=Object.entries(d).filter(([,a])=>"none"!==a.kind).map(([a])=>a),f=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${e.join("|")})\b`,"giu"),g=`${b.PATHS.workspace}/`;function h(a){let b=a.trim(),c=b.indexOf(g);return c>=0?b.slice(c+g.length)||null:b.startsWith("/")||/^[A-Za-z]:/.test(b)||b.split("/").includes("..")?null:b||null}a.s(["pathsIn",0,function(a){let b=a.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),c=new Set;for(let a of b.match(f)??[]){let b=function(a){let b=h(a);if(!b)return null;let[c,...d]=b.split("/");return d.length&&c.includes(".")?null:b}(a);b&&c.add(b)}return[...c].slice(0,6)},"viewKindOf",0,a=>d[a.split(".").pop()?.toLowerCase()??""]?.kind??"none","workspaceRelative",0,h])}];
2
+
3
+ //# sourceMappingURL=_0fk4c7d._.js.map