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
@@ -24,7 +24,11 @@ import { errorToString } from "@/lib/utils";
24
24
 
25
25
  export type BotRef = { name: string; icon?: BotIcon | null };
26
26
 
27
- /** `note` is a marker, not speech: a compaction summary (bot.run compact). Draw as a divider. */
27
+ /**
28
+ * `note` and `stop` are the app's markers, not speech. `note` is a compaction
29
+ * summary (bot.run compact), drawn as a divider; `stop` is where the app stopped
30
+ * the run (bot.runner parkTask), drawn muted in the bot's turn.
31
+ */
28
32
  export type ChatterKind =
29
33
  | "say"
30
34
  | "ask"
@@ -32,7 +36,8 @@ export type ChatterKind =
32
36
  | "user"
33
37
  | "result"
34
38
  | "error"
35
- | "note";
39
+ | "note"
40
+ | "stop";
36
41
 
37
42
  /** One tool call. `name` picks the renderer (components/bot-tool); `results` arrive after the call. */
38
43
  export type ToolUse = {
@@ -63,6 +68,8 @@ export type Chatter = {
63
68
  tool?: ToolUse;
64
69
  /** Options attached to a question; only on the line where the bot stopped to ask. */
65
70
  options?: string[];
71
+ /** When it was written; only for kind `stop`, whose repeats fold into one line. */
72
+ at?: DateLike;
66
73
  };
67
74
 
68
75
  /** `waiting`: the bot stopped to ask the user something. */
@@ -134,15 +141,12 @@ export function taskFromRow(row: Task, bots?: Bot[]): TaskView {
134
141
  const openLines = new Map<string, number>();
135
142
  /** `ask_bot` call id to who was asked, so the answer draws as a reply. */
136
143
  const asked = new Map<string, BotRef>();
144
+ const askers = new Map<string, BotRef>();
137
145
 
138
146
  for (const line of row.lines) {
139
147
  // A borrowed bot speaks to the borrower; the job's own bot speaks to nobody
140
148
  const bot = line.bot ? ref(line.bot) : owner;
141
- const to = line.parent
142
- ? asked.get(line.parent)?.name
143
- ? owner
144
- : null
145
- : null;
149
+ const to = line.parent ? (askers.get(line.parent) ?? null) : null;
146
150
  switch (line.kind) {
147
151
  case "user":
148
152
  lines.push({
@@ -159,6 +163,16 @@ export function taskFromRow(row: Task, bots?: Bot[]): TaskView {
159
163
  case "note":
160
164
  lines.push({ id: line.id, bot, to, text: line.text, kind: "note" });
161
165
  break;
166
+ case "stop":
167
+ lines.push({
168
+ id: line.id,
169
+ bot,
170
+ to,
171
+ text: line.text,
172
+ kind: "stop",
173
+ at: line.at,
174
+ });
175
+ break;
162
176
  case "tool":
163
177
  openLines.set(line.callId, lines.length);
164
178
  lines.push({
@@ -190,6 +204,7 @@ export function taskFromRow(row: Task, bots?: Bot[]): TaskView {
190
204
  case "ask": {
191
205
  const other = ref(line.to);
192
206
  asked.set(line.callId, other);
207
+ askers.set(line.callId, bot);
193
208
  lines.push({
194
209
  id: line.id,
195
210
  bot,
@@ -264,7 +279,8 @@ export function taskFromRow(row: Task, bots?: Bot[]): TaskView {
264
279
  export function lastSaid(task: TaskView): Chatter | null {
265
280
  for (let at = task.lines.length - 1; at >= 0; at--) {
266
281
  const line = task.lines[at];
267
- if (line.kind !== "user" && line.kind !== "note") return line;
282
+ if (line.kind !== "user" && line.kind !== "note" && line.kind !== "stop")
283
+ return line;
268
284
  }
269
285
  return null;
270
286
  }
@@ -412,7 +428,8 @@ export function latestPerBot(list: TaskView[]): BotLine[] {
412
428
  byBot.set(task.bot.name, { bot: task.bot, task, line: null, open: 0 });
413
429
  }
414
430
  for (const line of task.lines) {
415
- if (line.kind === "user" || line.kind === "note") continue;
431
+ if (line.kind === "user" || line.kind === "note" || line.kind === "stop")
432
+ continue;
416
433
  byBot.set(line.bot.name, {
417
434
  bot: line.bot,
418
435
  task,
@@ -217,7 +217,7 @@ function describe(
217
217
  ): Change {
218
218
  const args = (input ?? {}) as {
219
219
  path?: string;
220
- factId?: number;
220
+ factIds?: (number | null | undefined)[] | null;
221
221
  description?: string | null;
222
222
  aliases?: (string | undefined)[] | null;
223
223
  facts?:
@@ -234,12 +234,14 @@ function describe(
234
234
  }
235
235
 
236
236
  if (name === TOOL_NAMES.memory_forget) {
237
- const fact = args.factId != null ? known.get(args.factId) : undefined;
238
- const fallback = args.factId != null ? `Fact #${args.factId}` : "";
237
+ const ids = (args.factIds ?? []).filter((id) => id != null);
238
+ const facts = ids.map((id) => known.get(id));
239
239
  return {
240
240
  kind: "Forget",
241
- path: fact?.path ?? "",
242
- lines: [{ before: fact?.text ?? fallback }],
241
+ path: facts.find((fact) => fact)?.path ?? "",
242
+ lines: ids.map((id, index) => ({
243
+ before: facts[index]?.text ?? `Fact #${id}`,
244
+ })),
243
245
  carried: false,
244
246
  };
245
247
  }
@@ -29,7 +29,6 @@ import { toolIcon } from "@/features/bot/components/bot-tool";
29
29
  import { installSeedBots } from "@/features/bot/seed-bots";
30
30
  import { VoiceKeys } from "@/features/config/components/voice-key";
31
31
  import { type ConfigStatus, isConfigSet } from "@/features/config/config.const";
32
- import { MemoryView } from "@/features/memory/components/memory-view";
33
32
  import { SECTIONS, Settings } from "@/features/settings/components/settings";
34
33
  import {
35
34
  type SectionAlert,
@@ -214,8 +213,6 @@ export function CallScreen({
214
213
  </div>
215
214
  </div>
216
215
 
217
- {/* Memory the model opens for reading (memory_show) */}
218
- <MemoryView />
219
216
  {/* Documents a finished task produced; opens itself on the artifact event */}
220
217
  <ArtifactView />
221
218
 
@@ -6,7 +6,6 @@ const LINES: Record<string, string> = {
6
6
  [TOOL_NAMES.memory_recall]: "Checking your notes",
7
7
  [TOOL_NAMES.memory_remember]: "Noting that down",
8
8
  [TOOL_NAMES.memory_forget]: "Forgetting that",
9
- [TOOL_NAMES.memory_show]: "Putting your notes on screen",
10
9
  [TOOL_NAMES.bash]: "Doing it on this computer",
11
10
  [TOOL_NAMES.web_search]: "Searching the web",
12
11
  [TOOL_NAMES.load_skill]: "Reading how to do this",
@@ -654,7 +654,7 @@ export function useThursday() {
654
654
  // line open: flush held lines first
655
655
  outbox.open((one) => flush([one]));
656
656
 
657
- // First call: the opening system entry makes the model speak first, on the same path as a relay
657
+ // An opening — a first call, or memory to tidy — makes the model speak first, on the same path as a relay
658
658
  if (handshake.opening) {
659
659
  readAloud();
660
660
  live.say(handshake.opening);
@@ -1,3 +1,4 @@
1
+ import { createHash } from "node:crypto";
1
2
  import {
2
3
  mkdir,
3
4
  readdir,
@@ -156,6 +157,10 @@ export const jobShellEnv = (
156
157
  }
157
158
  : {};
158
159
 
160
+ /** A participant's browser belongs to the job and its canonical bot name, across every caller. */
161
+ export const botBrowserSession = (taskId: string, bot: string) =>
162
+ `${taskId}-bot-${createHash("sha256").update(bot.toLowerCase()).digest("hex").slice(0, 20)}`;
163
+
159
164
  /** Set by `ensureBrowser`, read by `readMachineTools`; null until it has finished. */
160
165
  let browserReady: boolean | null = null;
161
166
 
@@ -243,42 +248,44 @@ type ListedBrowser = { name: string; headed?: boolean; attached?: boolean };
243
248
  * — leaves the browser as it is.
244
249
  */
245
250
  export async function closeHiddenBrowser(taskId: string): Promise<void> {
251
+ await closeBrowsers(taskId, false);
252
+ }
253
+
254
+ /** Cancel and delete close every participant's window, but never an attached personal browser. */
255
+ export async function closeJobShell(taskId: string): Promise<void> {
256
+ await closeBrowsers(taskId, true);
257
+ }
258
+
259
+ async function closeBrowsers(taskId: string, visible: boolean): Promise<void> {
246
260
  const sandbox = await openWorkspace();
247
261
  const env = jobShellEnv(taskId);
248
262
  const listed = await sandbox
249
263
  .exec("playwright-cli list --json", { env, timeoutMs: 15_000 })
250
264
  .catch(() => null);
251
- let session: ListedBrowser | undefined;
265
+ let sessions: ListedBrowser[] = [];
252
266
  try {
253
267
  const { browsers } = JSON.parse(listed?.stdout ?? "") as {
254
268
  browsers?: ListedBrowser[];
255
269
  };
256
- session = browsers?.find((b) => b.name === env.PLAYWRIGHT_CLI_SESSION);
270
+ sessions =
271
+ browsers?.filter(
272
+ (b) =>
273
+ b.name === env.PLAYWRIGHT_CLI_SESSION ||
274
+ b.name.startsWith(`${env.PLAYWRIGHT_CLI_SESSION}-`),
275
+ ) ?? [];
257
276
  } catch {}
258
- if (session?.headed === false && !session.attached) {
277
+ for (const session of sessions) {
278
+ if (session.attached || (!visible && session.headed !== false)) continue;
259
279
  await sandbox
260
- .exec("playwright-cli close", { env, timeoutMs: 15_000 })
280
+ .exec("playwright-cli close", {
281
+ env: { ...env, PLAYWRIGHT_CLI_SESSION: session.name },
282
+ timeoutMs: 15_000,
283
+ })
261
284
  .catch(() => {});
262
285
  }
263
286
  await pruneJobFiles();
264
287
  }
265
288
 
266
- /**
267
- * Closes the job's browser whatever it shows. Only for a job the user cancelled
268
- * or deleted: its row is gone, so a window left open would belong to nothing on
269
- * the screen.
270
- */
271
- export async function closeJobShell(taskId: string): Promise<void> {
272
- const sandbox = await openWorkspace();
273
- await sandbox
274
- .exec("playwright-cli close", {
275
- env: jobShellEnv(taskId),
276
- timeoutMs: 15_000,
277
- })
278
- .catch(() => {});
279
- await pruneJobFiles();
280
- }
281
-
282
289
  const pruneOutputFiles = () => pruneOldFiles(PATHS.output);
283
290
 
284
291
  const pruneBrowserFiles = () => pruneOldFiles(BROWSER_DIR);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thursday-agent",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "A voice agent that runs on your own machine — talk to her, she hands the slow work to bots with a shell, a browser and skills.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -22,14 +22,15 @@ window cannot be snapshotted or acted on by ref. For the browser they already
22
22
  have open — a tab they left, a profile they are signed into — attach instead:
23
23
  `playwright-cli attach --cdp=chrome`.
24
24
 
25
- **Your browser is this job's own.** Its session is already in your shell
25
+ **Your browser is your own on this job.** Its session is already in your shell
26
26
  (`PLAYWRIGHT_CLI_SESSION`): never pass `-s=`, never `close-all` or `kill-all` —
27
- other jobs are running theirs.
27
+ other bots and jobs are running theirs. A follow-up uses this same session:
28
+ read `snapshot` to continue where you left off; use `open` only if it is closed.
28
29
 
29
30
  **Headless is yours; headed is theirs.** A browser opens headless: nobody sees
30
- it, and the app closes it when the job ends. `--headed` puts a real window on
31
- their screen, and that window outlives the job — the app never closes it, they
32
- do. So you can show them the thing itself instead of describing it: the order
31
+ it, and the app keeps it for follow-ups until the job's workspace expires.
32
+ `--headed` puts a real window on their screen, and that window outlives the job
33
+ until they close it or cancel or delete the job. Show them the thing itself: the order
33
34
  sitting at checkout for them to confirm, the map with the pin dropped, the page
34
35
  they asked to watch, a sign-in for them to finish. Open it `--headed`, leave it
35
36
  open, and say in your answer that it is on their screen. A window you opened
@@ -1,8 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},120635,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},559043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},509656,(e,t,r)=>{t.exports=e.x("node:tty",()=>require("node:tty"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},629668,e=>{"use strict";var t=e.i(687388);let r=e=>`text/${e}; charset=utf-8`,n={md:{kind:"markdown",mime:r("markdown")},markdown:{kind:"markdown",mime:r("markdown")},csv:{kind:"csv",mime:r("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:r("plain")},log:{kind:"text",mime:r("plain")},html:{kind:"frame",mime:r("html")},htm:{kind:"frame",mime:r("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:r("css")},js:{kind:"none",mime:r("javascript")},woff2:{kind:"none",mime:"font/woff2"}},i=e=>e.split(".").pop()?.toLowerCase()??"",o=new Set(["node_modules","__pycache__"]),a=Object.entries(n).filter(([,e])=>"none"!==e.kind).map(([e])=>e),s=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${a.join("|")})\b`,"giu"),u=`${t.PATHS.workspace}/`;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!o.has(e),"mimeOf",0,e=>n[i(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),r=new Set;for(let e of t.match(s)??[]){let t=function(e){let t,r,n=(r=(t=e.trim()).indexOf(u))>=0?t.slice(r+u.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!n)return null;let[i,...o]=n.split("/");return o.length&&i.includes(".")?null:n}(e);t&&r.add(t)}return[...r].slice(0,6)},"viewKindOf",0,e=>n[i(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),r=e.i(750227),n=e.i(687388);e.i(640911);var i=e.i(874533),o=n;let a=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*s(e){let n;try{n=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of n){if(a.has(t.name)||t.name.startsWith("."))continue;let n=(0,r.join)(e,t.name);t.isDirectory()?yield*s(n):t.isFile()&&(yield n)}}async function u(e,n,i,o){if(e.length<=o.max)return e;let a=(0,r.join)(i,o.dir),s=(0,r.join)(a,`${new Date().toISOString().replace(/[:.]/g,"-")}-${n.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),u=s;try{await (0,t.mkdir)(a,{recursive:!0}),await (0,t.writeFile)(s,e),u=(0,r.relative)(i,s)||s}catch{u="(could not be written to a file)"}let l=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,o.head).trimEnd()}
2
-
3
- [${n} cut at ${o.max.toLocaleString("en")} chars — the whole thing (${l} lines) is at ${u}. Read the part you need with \`sed -n\`.]
4
-
5
- ${e.slice(-o.tail).trimStart()}`}let l=n.APP_DIR,d=(0,r.join)(n.DATA_DIR,n.PATHS.workspace),c=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean),f=(0,r.join)(d,n.PATHS.artifacts),p=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],m=new Set([...p,".agents"]),_=(e,t)=>t===e||t.startsWith(e+r.sep),b=e=>(0,t.realpath)(e).catch(()=>null);async function y(e){let t=await b(d)??d,n=(0,r.resolve)(d,e);if(!_(d,n))return null;let i=n,o=await b(i);for(;null===o&&(0,r.dirname)(i)!==i;)i=(0,r.dirname)(i),o=await b(i);if(null===o)return null;let a=(0,r.relative)(i,n),s=a?(0,r.join)(o,a):o;return _(t,s)?s:null}let g=e=>`${n.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function R(e){let n=g(e);return await (0,t.mkdir)((0,r.join)(d,n),{recursive:!0}),n}async function h(e,i){let o,a=(o=i.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${n.PATHS.scratch}/${o}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,r.join)(d,a),{recursive:!0}),a}let E=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},j={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function w(e){let t=Object.values(j).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),n=new Set(r.trim().split(/\s+/).filter(Boolean)),i=e=>({found:e.filter(e=>n.has(e)),missing:e.filter(e=>!n.has(e))});return{runtimes:i(j.runtimes),managers:i(j.managers),browser:null}}async function O(){await T(),await x()}async function v(e){let t,r=await A(),n=E(e),i=await r.exec("playwright-cli list --json",{env:n,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(i?.stdout??"");t=e?.find(e=>e.name===n.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await r.exec("playwright-cli close",{env:n,timeoutMs:15e3}).catch(()=>{}),await O()}async function P(e){let t=await A();await t.exec("playwright-cli close",{env:E(e),timeoutMs:15e3}).catch(()=>{}),await O()}let x=()=>S(n.PATHS.output),T=()=>S(".playwright-cli");async function S(e){let i=(0,r.join)(d,e),o=await (0,t.readdir)(i,{withFileTypes:!0}).catch(()=>[]),a=Date.now()-n.WORKSPACE_KEEP.forMs;for(let e of o){if(!e.isFile())continue;let n=(0,r.join)(i,e.name),o=await (0,t.stat)(n).catch(()=>null);o&&o.mtimeMs<a&&await (0,t.unlink)(n).catch(()=>{})}}let k={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function A(){for(let e of p)await (0,t.mkdir)((0,r.join)(d,e),{recursive:!0});for(let[e,n]of Object.entries(k))await (0,t.writeFile)((0,r.join)(d,e),n,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:n,toolPath:a})=>{let l=(0,r.resolve)(e),d=(a??[]).filter(Boolean).join(":"),c=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);return{cwd:l,resolve:c,readFile:(e,r)=>(0,t.readFile)(c(e),r),async writeFile(e,n){let i=c(e);await (0,t.mkdir)((0,r.join)(i,".."),{recursive:!0}),await (0,t.writeFile)(i,n)},readdir:(e,r)=>(0,t.readdir)(c(e),r),fold:(e,t="output")=>u(e,t,l,n),async glob(e,{path:t=".",limit:n=200}={}){let i=c(t),o=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),a=[];for await(let e of s(i)){let t=(0,r.relative)(i,e).split(r.sep).join("/");if((o.test(t)||o.test(e))&&a.push(e),a.length>=n)break}return a},exec:(e,{cwd:t,timeoutMs:r=o.EXEC_TIMEOUT_MS,signal:a,env:s}={})=>new Promise(f=>{let p,m,_=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();d&&(_.PATH=`${_.PATH??""}:${d}`);let b=(0,i.spawn)(e,{shell:!0,cwd:t?c(t):l,env:{..._,...s},detached:!0}),y="",g="";b.stdout?.on("data",e=>y+=e),b.stderr?.on("data",e=>g+=e);let R=e=>{try{b.pid&&process.kill(-b.pid,e)}catch{b.kill(e)}},h=!1,E=async e=>{h||(h=!0,clearTimeout(w),clearTimeout(p),clearTimeout(m),a?.removeEventListener("abort",O),f({...e,stdout:await u(e.stdout,"stdout",l,n),stderr:await u(e.stderr,"stderr",l,n)}))},j=e=>{p||h||(g+=`
6
- [${e}]`,R("SIGTERM"),p=setTimeout(()=>{g+="\n[Killed: it did not exit on SIGTERM]",R("SIGKILL"),m=setTimeout(()=>{b.stdout?.destroy(),b.stderr?.destroy(),E({stdout:y,stderr:g,exitCode:-1})},1e3)},o.EXEC_KILL_GRACE_MS))},w=setTimeout(()=>j(`Timed out after ${r}ms`),r),O=()=>j("Aborted");a?.aborted?O():a?.addEventListener("abort",O,{once:!0}),b.on("close",e=>E({stdout:y,stderr:g,exitCode:e??-1})),b.on("error",e=>E({stdout:y,stderr:g+String(e),exitCode:-1}))})}})({workingDirectory:d,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:c})}async function M(e,n){let i=e.map(e=>(0,r.resolve)(d,e));if(n){let e=0;for await(let t of s((0,r.join)(d,n)))if(i.push(t),(e+=1)>=500)break}let o=new Map;for(let e of i){let n=await (0,t.stat)(e).catch(()=>null);if(!n?.isFile())continue;let i=(0,r.relative)(d,e);o.set(i&&!i.startsWith("..")?i:e,n.mtimeMs)}return[...o].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,f,"WORKSPACE",0,d,"botFolder",0,g,"closeHiddenBrowser",0,v,"closeJobShell",0,P,"filesOnDisk",0,M,"insideWorkspace",0,y,"jobShellEnv",0,E,"openBotFolder",0,R,"openJobScratch",0,h,"openWorkspace",0,A,"pruneJobFiles",0,O,"readMachineTools",0,w,"writeRefusal",0,function(e){if(_(d,e)){let t=(0,r.relative)(d,e),[i]=t.split(r.sep);return i&&m.has(i)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, your own kit under ${n.PATHS.bots}/, and this job's working material under ${n.PATHS.scratch}/.`}return _(l,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${d}; outside it, write only where the user pointed you.`:null}],786025)},91264,e=>{"use strict";let t=e=>!!e&&"object"==typeof e&&(!0===e.$ok||!1===e.$ok),r=e=>t(e)&&e.$ok,n=e=>({$ok:!0,data:e}),i=e=>({$ok:!1,message:e});var o=e.i(379509),a=e.i(915874),s=e.i(640911),u=e.i(53748);async function l(e){try{let i=n(await e());for(;r(i)&&t(i.data);)i=i.data;return i}catch(e){if((0,o.unstable_rethrow)(e),(0,u.isPublicError)(e))return i(e.message);if(e instanceof a.ZodError)return i(e.issues[0]?.message);if(t(e)&&!e.$ok)return e;return s.logger.error(e),i()}}e.s(["serverRoute",0,e=>async(t,n)=>{let i=await l(()=>e(t,n));return r(i)&&i.data instanceof Response?i.data:Response.json(i)}],91264)},53748,e=>{"use strict";class t extends Error{message;constructor(e){super(e),this.message=e}}e.s(["isPublicError",0,e=>e instanceof t,"publicError",0,function(e){throw new t(e)}])},462782,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isNextRouterError",{enumerable:!0,get:function(){return o}});let n=e.r(712053),i=e.r(319334);function o(e){return(0,i.isRedirectError)(e)||(0,n.isHTTPAccessFallbackError)(e)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},708595,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return i}});class n extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1174",enumerable:!1,configurable:!0})}}class i extends URLSearchParams{append(){throw new n}delete(){throw new n}set(){throw new n}sort(){throw new n}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},950723,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RedirectStatusCode",{enumerable:!0,get:function(){return i}});var n,i=((n={})[n.SeeOther=303]="SeeOther",n[n.TemporaryRedirect=307]="TemporaryRedirect",n[n.PermanentRedirect=308]="PermanentRedirect",n);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},319334,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={REDIRECT_ERROR_CODE:function(){return a},isRedirectError:function(){return s}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(950723),a="NEXT_REDIRECT";function s(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,n]=t,i=t.slice(2,-2).join(";"),s=Number(t.at(-2));return r===a&&("replace"===n||"push"===n)&&"string"==typeof i&&!isNaN(s)&&s in o.RedirectStatusCode}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},515458,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={actionAsyncStorage:function(){return o.actionAsyncStorage},workAsyncStorage:function(){return a.workAsyncStorage},workUnitAsyncStorage:function(){return s.workUnitAsyncStorage}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(120635),a=e.r(556704),s=e.r(832319);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},922349,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getRedirectError:function(){return u},getRedirectStatusCodeFromError:function(){return p},getRedirectTypeFromError:function(){return f},getURLFromRedirectError:function(){return c},permanentRedirect:function(){return d},redirect:function(){return l}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(950723),a=e.r(319334),s=e.r(515458);function u(e,t,r=o.RedirectStatusCode.TemporaryRedirect){let n=Object.defineProperty(Error(a.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n.digest=`${a.REDIRECT_ERROR_CODE};${t};${e};${r};`,n}function l(e,t){throw u(e,t??=s.actionAsyncStorage?.getStore()?.isAction?"push":"replace",o.RedirectStatusCode.TemporaryRedirect)}function d(e,t="replace"){throw u(e,t,o.RedirectStatusCode.PermanentRedirect)}function c(e){return(0,a.isRedirectError)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function f(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function p(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},712053,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={HTTPAccessErrorStatus:function(){return o},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return s},getAccessFallbackErrorTypeByStatus:function(){return d},getAccessFallbackHTTPStatus:function(){return l},isHTTPAccessFallbackError:function(){return u}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},a=new Set(Object.values(o)),s="NEXT_HTTP_ERROR_FALLBACK";function u(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return t===s&&a.has(Number(r))}function l(e){return Number(e.digest.split(";")[1])}function d(e){switch(e){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},102507,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"notFound",{enumerable:!0,get:function(){return o}});let n=e.r(712053),i=`${n.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function o(){let e=Object.defineProperty(Error(i),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw e.digest=i,e}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},647658,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"forbidden",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},235458,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unauthorized",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},109811,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,a.isNextRouterError)(t)||(0,o.isBailoutToCSRError)(t)||(0,u.isDynamicServerError)(t)||(0,s.isDynamicPostpone)(t)||(0,i.isPostpone)(t)||(0,n.isHangingPromiseRejectionError)(t)||(0,s.isPrerenderInterruptedError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=e.r(204642),i=e.r(267539),o=e.r(331584),a=e.r(462782),s=e.r(868665),u=e.r(865252);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},379509,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ReadonlyURLSearchParams:function(){return o.ReadonlyURLSearchParams},RedirectType:function(){return f},forbidden:function(){return u.forbidden},notFound:function(){return s.notFound},permanentRedirect:function(){return a.permanentRedirect},redirect:function(){return a.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return c},unstable_rethrow:function(){return d.unstable_rethrow}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(708595),a=e.r(922349),s=e.r(102507),u=e.r(647658),l=e.r(235458),d=e.r(109811);function c(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let f={push:"push",replace:"replace"};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},267539,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isPostpone",{enumerable:!0,get:function(){return i}});let n=Symbol.for("react.postpone");function i(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__04q--0f._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},347299,(e,t,r)=>{t.exports=e.x("node:http",()=>require("node:http"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},264079,e=>{"use strict";var t=e.i(469719),r=e.i(687388);t.z.object({value:t.z.string().min(1),expires_at:t.z.number()});let i=t.z.enum(["openai","chatgpt","anthropic","google","xai","vercel-ai-gateway"]),a=t.z.object({provider:i,model:t.z.string().trim().min(1,"Model name is required").max(80)}),o=t.z.enum(["openai","xai"]),l=t.z.object({provider:o,voice:t.z.string().trim().min(1).max(64).nullish(),model:t.z.string().trim().min(1).max(80).nullish()}),n=t.z.enum(["openai","google","xai","vercel-ai-gateway"]),s=t.z.object({provider:n,model:t.z.string().trim().min(1,"Model name is required").max(120)}),c={openai:{label:"Open AI",apiKeyName:"OPENAI_API_KEY",models:{image:[{id:"gpt-image-1-mini",label:"GPT Image 1 mini",tier:"small"},{id:"gpt-image-2.5-flare",label:"GPT Image 2.5 Flare",tier:"mid"},{id:"gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[],speech:[{id:"tts-1",label:"TTS 1",tier:"small"},{id:"gpt-4o-mini-tts",label:"4o mini TTS",tier:"mid"},{id:"tts-1-hd",label:"TTS 1 HD",tier:"large"}],transcription:[{id:"gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"gpt-transcribe",label:"GPT Transcribe",tier:"mid"}]}},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",models:{image:[{id:"gemini-3.1-flash-lite-image",label:"3.1 Flash Lite Image",tier:"small"},{id:"gemini-3.1-flash-image",label:"3.1 Flash Image",tier:"mid"},{id:"gemini-3-pro-image",label:"3 Pro Image",tier:"large"}],video:[{id:"veo-3.1-lite-generate-preview",label:"Veo 3.1 Lite",tier:"small"},{id:"veo-3.1-fast-generate-preview",label:"Veo 3.1 Fast",tier:"mid"},{id:"veo-3.1-generate-preview",label:"Veo 3.1",tier:"large"}],speech:[{id:"gemini-2.5-flash-preview-tts",label:"2.5 Flash TTS",tier:"small"},{id:"gemini-3.1-flash-tts-preview",label:"3.1 Flash TTS",tier:"mid"},{id:"gemini-2.5-pro-preview-tts",label:"2.5 Pro TTS",tier:"large"}],transcription:[{id:"gemini-3.5-transcribe",label:"3.5 Transcribe",tier:"mid"}]}},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",models:{image:[{id:"grok-imagine-image",label:"Grok Imagine",tier:"small"},{id:"grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"mid"}],video:[{id:"grok-imagine-video",label:"Grok Imagine Video",tier:"small"},{id:"grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"}],speech:[{id:"grok-tts",label:"Grok TTS",tier:"mid"}],transcription:[{id:"grok-stt",label:"Grok STT",tier:"mid"}]}},"vercel-ai-gateway":{label:"Vercel AI GateWay",apiKeyName:"AI_GATEWAY_API_KEY",models:{image:[{id:"bytedance/seedream-5.0-lite",label:"Seedream 5.0 Lite",tier:"small"},{id:"bfl/flux-2-klein-9b",label:"FLUX 2 Klein 9B",tier:"small"},{id:"spacexai/grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"small"},{id:"google/gemini-3.1-flash-image",label:"Gemini 3.1 Flash Image",tier:"mid"},{id:"bfl/flux-2-pro",label:"FLUX 2 Pro",tier:"mid"},{id:"bytedance/seedream-5.0-pro",label:"Seedream 5.0 Pro",tier:"mid"},{id:"recraft/recraft-v4.1",label:"Recraft V4.1",tier:"mid"},{id:"google/gemini-3-pro-image",label:"Gemini 3 Pro Image",tier:"large"},{id:"openai/gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[{id:"bytedance/seedance-2.0-mini",label:"Seedance 2.0 Mini",tier:"small"},{id:"google/veo-3.1-lite-generate-001",label:"Veo 3.1 Lite",tier:"small"},{id:"alibaba/wan-v2.6-t2v",label:"Wan 2.6",tier:"small"},{id:"google/veo-3.1-fast-generate-001",label:"Veo 3.1 Fast",tier:"mid"},{id:"bytedance/seedance-2.5",label:"Seedance 2.5",tier:"mid"},{id:"spacexai/grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"},{id:"klingai/kling-v3.0-t2v",label:"Kling 3.0",tier:"large"},{id:"google/veo-3.1-generate-001",label:"Veo 3.1",tier:"large"}],speech:[{id:"fish-audio/s1",label:"Fish Audio S1",tier:"small"},{id:"openai/tts-1",label:"OpenAI TTS 1",tier:"small"},{id:"spacexai/grok-tts",label:"Grok TTS",tier:"mid"},{id:"fish-audio/s2.1-pro",label:"Fish Audio S2.1 Pro",tier:"mid"},{id:"openai/tts-1-hd",label:"OpenAI TTS 1 HD",tier:"large"}],transcription:[{id:"spacexai/grok-stt",label:"Grok STT",tier:"small"},{id:"fish-audio/transcribe-1",label:"Fish Transcribe 1",tier:"small"},{id:"openai/gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"openai/gpt-4o-transcribe",label:"4o Transcribe",tier:"mid"},{id:"google/gemini-3.5-transcribe",label:"Gemini 3.5 Transcribe",tier:"mid"}]}}},d=Object.keys(c).map(e=>({id:e,...c[e]})),p={openai:{label:"Open AI",apiKeyName:"OPENAI_API_KEY",suggestModels:[{id:"gpt-5.6-luna",label:"5.6 Luna",tier:"small",context:105e4},{id:"gpt-5.6-terra",label:"5.6 Terra",tier:"mid",context:105e4},{id:"gpt-5.6-sol",label:"5.6 Sol",tier:"large",context:105e4},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:105e4}]},chatgpt:{label:"GPT Subscription",apiKeyName:"CHATGPT_SIGN_IN",signIn:!0,suggestModels:[{id:"gpt-5.6-luna",label:"5.6 Luna",tier:"small",context:272e3},{id:"gpt-5.6-terra",label:"5.6 Terra",tier:"mid",context:272e3},{id:"gpt-5.6-sol",label:"5.6 Sol",tier:"large",context:272e3},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:272e3}]},anthropic:{label:"Claude",apiKeyName:"ANTHROPIC_API_KEY",suggestModels:[{id:"claude-haiku-4-5",label:"Haiku 4.5",tier:"small"},{id:"claude-sonnet-5",label:"Sonnet 5",tier:"mid",context:1e6},{id:"claude-opus-5",label:"Opus 5",tier:"large",context:1e6},{id:"claude-fable-5-1",label:"Fable 5.1",tier:"large"}]},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",suggestModels:[{id:"gemini-3.5-flash-lite",label:"3.5 Flash Lite",tier:"small",context:1e6},{id:"gemini-3.8-flash",label:"3.8 Flash",tier:"mid",context:1e6}]},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",suggestModels:[{id:"grok-4.6",label:"Grok 4.6",tier:"large",context:5e5}]},"vercel-ai-gateway":{label:"Vercel AI GateWay",apiKeyName:"AI_GATEWAY_API_KEY",suggestModels:[{id:"zai/glm-5.3-flash",label:"GLM 5.3 Flash",tier:"small"},{id:"google/gemini-3.8-flash",label:"Gemini 3.8 Flash",tier:"small"},{id:"openai/gpt-5.6-luna",label:"GPT 5.6 Luna",tier:"small",context:105e4},{id:"zai/glm-5.3",label:"GLM 5.3",tier:"mid"},{id:"spacexai/grok-4.6",label:"Grok 4.6",tier:"mid",context:5e5},{id:"anthropic/claude-sonnet-5",label:"Claude Sonnet 5",tier:"mid"},{id:"openai/gpt-5.6-terra",label:"GPT 5.6 Terra",tier:"mid",context:105e4},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid"},{id:"openai/gpt-5.6-sol",label:"GPT 5.6 Sol",tier:"large",context:105e4},{id:"anthropic/claude-opus-5",label:"Claude Opus 5",tier:"large",context:1e6},{id:"openai/gpt-6-astra",label:"GPT 6 Astra",tier:"large",context:105e4}]}},u={openai:{apiKeyName:p.openai.apiKeyName,label:p.openai.label,keyPrefix:["sk-"],models:[{id:"gpt-realtime-2.1",label:"Realtime 2.1"},{id:"gpt-realtime-2.1-mini",label:"Realtime 2.1 mini"},{id:"gpt-realtime-2",label:"Realtime 2"}],voices:["marin","cedar","alloy","ash","ballad","coral","echo","sage","shimmer","verse"],defaultVoice:"marin"},xai:{apiKeyName:p.xai.apiKeyName,label:p.xai.label,keyPrefix:["xai-"],models:[{id:"grok-voice-think-fast-2.0",label:"Voice Think Fast 2.0"},{id:"grok-voice-latest",label:"Voice latest"}],voices:["eve","ara","leo","rex","sal"],defaultVoice:"eve"}},m=Object.keys(u).map(e=>({id:e,...u[e]})),g=Object.keys(p).map(e=>({id:e,...p[e]}));e.s(["GATEWAY_TEXT",0,"language","MEDIA_MODEL_PROVIDERS",0,c,"MEDIA_MODEL_PROVIDER_LIST",0,d,"SPEACH_MODEL_PROVIDERS",0,u,"SPEACH_MODEL_PROVIDER_LIST",0,m,"TEXT_MODEL_PROVIDERS",0,p,"TEXT_MODEL_PROVIDER_LIST",0,g,"canMakeKind",0,(e,t)=>(c[e]?.models[t]?.length??0)>0,"compactAtFor",0,e=>e&&e>0?Math.round(e*r.BOT_RUN.compactHeadroom):r.BOT_RUN.compactAt,"contextWindowOf",0,function(e,t,r=[]){if("vercel-ai-gateway"===e)return r.find(e=>e.id===t)?.contextWindow??null;let i=p[e].suggestModels;return i.find(e=>e.id===t)?.context??null},"defaultModelOf",0,e=>(e.suggestModels.find(e=>"mid"===e.tier)??e.suggestModels[0])?.id,"parseMediaModel",0,function(e){let[t,...r]=(e??"").trim().split("/"),i=s.safeParse({provider:t,model:r.join("/")});return i.success?i.data:null},"parseTextModel",0,function(e){let[t,...r]=(e??"").trim().split("/"),i=a.safeParse({provider:t,model:r.join("/")});return i.success?i.data:null},"speachModelRefSchema",0,l,"textModelProviderSchema",0,i,"textModelRefSchema",0,a],264079)},279041,e=>{"use strict";var t=e.i(264079);let r=[...new Set(Object.values(t.SPEACH_MODEL_PROVIDERS).map(e=>e.apiKeyName))],i={image:"IMAGE_MODEL",video:"VIDEO_MODEL",speech:"SPEECH_MODEL",transcription:"TRANSCRIPTION_MODEL"},a={image:{label:"Image model",hint:"What bots draw with"},video:{label:"Video model",hint:"What bots film with — minutes a clip"},speech:{label:"Speech model",hint:"What reads text aloud into a file"},transcription:{label:"Transcription model",hint:"What turns a recording into text"}},o="EXA_API_KEY",l="DEFAULT_MODEL",n={key:l,label:"Default model",hint:"What a bot thinks with until it picks its own",text:!0,choices:t.TEXT_MODEL_PROVIDER_LIST.flatMap(e=>e.suggestModels.map(t=>({value:`${e.id}/${t.id}`,label:`${e.label} \xb7 ${t.label}`,needs:e.apiKeyName})))},s=e=>r.includes(e.apiKeyName),c=e=>({key:e.apiKeyName,label:e.label,provider:e.id,signIn:e.signIn}),d=[{id:"voice",title:"voice",hint:"calls run on one of these",section:"keys",require:"any",note:"one is required",entries:t.TEXT_MODEL_PROVIDER_LIST.filter(s).map(c)},{id:"text",title:"models",hint:"what bots think with — add any, or none",section:"keys",require:"none",entries:t.TEXT_MODEL_PROVIDER_LIST.filter(e=>!s(e)).map(c)},{id:"search",title:"search",hint:"how bots look things up — one key, or their own model's",section:"keys",require:"none",entries:[{key:o,label:"Exa",hint:"web search in one call — dashboard.exa.ai"}]},{id:"bots",title:"Bots",hint:"what a bot runs on when it has not picked its own",section:"models",require:"none",entries:[n]},{id:"studio",title:"Studio",hint:"what a bot draws, films and speaks with — off until you pick one",section:"models",require:"none",entries:Object.keys(i).map(e=>({key:i[e],...a[e],kind:e,choices:t.MEDIA_MODEL_PROVIDER_LIST.flatMap(t=>t.models[e].map(e=>({value:`${t.id}/${e.id}`,label:`${t.label} \xb7 ${e.label}`,needs:t.apiKeyName})))}))}];Object.fromEntries(d.flatMap(e=>e.entries).map(e=>[e.key,e]));let p=d.flatMap(e=>e.entries.map(e=>e.key)),u=Object.fromEntries(d.flatMap(e=>e.entries).filter(e=>e.choices?.length).map(e=>[e.key,e.choices]));e.s(["CONFIG_CHOICES",0,u,"CONFIG_KEYS",0,p,"DEFAULT_MODEL_KEY",0,l,"EXA_API_KEY",0,o,"MEDIA_MODEL_KEYS",0,i])},340698,e=>e.a(async(t,r)=>{try{var i=e.i(875225),a=e.i(528790),o=e.i(613240);e.i(279041);var l=t([a]);async function n(e){let t=process.env[e]?.trim();if(t)return t;let[r]=await a.database.select({value:o.configTable.value}).from(o.configTable).where((0,i.eq)(o.configTable.key,e));return r?.value.trim()||void 0}async function s(e,t){await a.database.insert(o.configTable).values({key:e,value:t}).onConflictDoUpdate({target:o.configTable.key,set:{value:t}})}[a]=l.then?(await l)():l,e.s(["readConfig",0,n,"writeConfig",0,s]),r()}catch(e){r(e)}},!1),268486,e=>{"use strict";var t=e.i(41444);e.s(["createKeyedLock",0,function(){let e=new Map,r=new Map;return function(i,a){let o=e.get(i);o||(o=(0,t.PromiseChain)(),e.set(i,o)),r.set(i,(r.get(i)??0)+1);let l=()=>{let t=(r.get(i)??1)-1;t>0?r.set(i,t):(r.delete(i),e.delete(i))};return o(a).then(e=>(l(),e),e=>{throw l(),e})}}])},78997,(e,t,r)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))s.call(e,n)||n===r||a(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e},d=(e,t,r)=>(r=null!=e?i(n(e)):{},c(!t&&e&&e.__esModule?r:a(r,"default",{value:e,enumerable:!0}),e)),p={},u={isValidAccessToken:()=>O,readAuthConfig:()=>y,writeAuthConfig:()=>k};for(var m in u)a(p,m,{get:u[m],enumerable:!0});t.exports=c(a({},"__esModule",{value:!0}),p);var g=d(e.r(522734)),f=d(e.r(814747)),b=e.r(783697);function h(){let e=(0,b.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return f.join(e,"auth.json")}function y(){try{let e=h();if(!g.existsSync(e))return null;let t=g.readFileSync(e,"utf8");if(!t)return null;return JSON.parse(t)}catch(e){return null}}function k(e){let t=h(),r=f.dirname(t);g.existsSync(r)||g.mkdirSync(r,{mode:504,recursive:!0}),g.writeFileSync(t,JSON.stringify(e,null,2),{mode:384})}function O(e,t=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let r=Math.floor(Date.now()/1e3);return e.expiresAt>=r+t/1e3}},452005,(e,t,r)=>{"use strict";var i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,n={},s={AccessTokenMissingError:()=>d,RefreshAccessTokenFailedError:()=>p};for(var c in s)i(n,c,{get:s[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of o(t))l.call(e,n)||void 0===n||i(e,n,{get:()=>t[n],enumerable:!(r=a(t,n))||r.enumerable});return e})(i({},"__esModule",{value:!0}),n);class d extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class p extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},394853,(e,t,r)=>{"use strict";var i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,n={},s={processTokenResponse:()=>f,refreshTokenRequest:()=>g};for(var c in s)i(n,c,{get:s[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of o(t))l.call(e,n)||void 0===n||i(e,n,{get:()=>t[n],enumerable:!(r=a(t,n))||r.enumerable});return e})(i({},"__esModule",{value:!0}),n);var d=e.r(446786);let p=`@vercel/oidc node-${process.version} ${(0,d.platform)()} (${(0,d.arch)()}) ${(0,d.hostname)()}`,u=null;async function m(){if(u)return u;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":p}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let t=await e.json();if(!t||"string"!=typeof t.token_endpoint)throw Error("Invalid OAuth discovery response");let r=t.token_endpoint;return u=r,r}async function g(e){let t=await m();return await fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":p},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function f(e){let t=await e.json();return e.ok?"object"!=typeof t||null===t?[Error("Invalid token response")]:"string"!=typeof t.access_token?[Error("Missing access_token in response")]:"Bearer"!==t.token_type?[Error("Invalid token_type in response")]:"number"!=typeof t.expires_in?[Error("Missing expires_in in response")]:[null,t]:[Error("object"==typeof t&&t&&"error"in t?String(t.error):"Token refresh failed")]}},484199,(e,t,r)=>{"use strict";var i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,n={},s={VercelOidcTokenError:()=>d};for(var c in s)i(n,c,{get:s[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of o(t))l.call(e,n)||void 0===n||i(e,n,{get:()=>t[n],enumerable:!(r=a(t,n))||r.enumerable});return e})(i({},"__esModule",{value:!0}),n);class d extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},1791,(e,t,r)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))s.call(e,n)||n===r||a(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e},d=(e,t,r)=>(r=null!=e?i(n(e)):{},c(!t&&e&&e.__esModule?r:a(r,"default",{value:e,enumerable:!0}),e)),p={},u={findRootDir:()=>y,getUserDataDir:()=>k};for(var m in u)a(p,m,{get:u[m],enumerable:!0});t.exports=c(a({},"__esModule",{value:!0}),p);var g=d(e.r(814747)),f=d(e.r(522734)),b=d(e.r(446786)),h=e.r(484199);function y(){try{let e=process.cwd();for(;e!==g.default.dirname(e);){let t=g.default.join(e,".vercel");if(f.default.existsSync(t))return e;e=g.default.dirname(e)}}catch(e){throw new h.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function k(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(b.default.platform()){case"darwin":return g.default.join(b.default.homedir(),"Library/Application Support");case"linux":return g.default.join(b.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},783697,(e,t,r)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))s.call(e,n)||n===r||a(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e},d=(e,t,r)=>(r=null!=e?i(n(e)):{},c(!t&&e&&e.__esModule?r:a(r,"default",{value:e,enumerable:!0}),e)),p={},u={assertVercelOidcTokenResponse:()=>w,findProjectInfo:()=>_,getTokenPayload:()=>P,getVercelDataDir:()=>T,getVercelOidcToken:()=>E,getVercelToken:()=>v,isExpired:()=>A,loadToken:()=>I,saveToken:()=>x};for(var m in u)a(p,m,{get:u[m],enumerable:!0});t.exports=c(a({},"__esModule",{value:!0}),p);var g=d(e.r(814747)),f=d(e.r(522734)),b=e.r(484199),h=e.r(1791),y=e.r(78997),k=e.r(394853),O=e.r(452005);function T(){let e=(0,h.getUserDataDir)();return e?g.join(e,"com.vercel.cli"):null}async function v(e){let t=(0,y.readAuthConfig)();if(!t?.token)throw new O.AccessTokenMissingError;if((0,y.isValidAccessToken)(t,e?.expirationBufferMs))return t.token;if(!t.refreshToken)throw(0,y.writeAuthConfig)({}),new O.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,k.refreshTokenRequest)({refresh_token:t.refreshToken}),[r,i]=await (0,k.processTokenResponse)(e);if(r||!i)throw(0,y.writeAuthConfig)({}),new O.RefreshAccessTokenFailedError(r);let a={token:i.access_token,expiresAt:Math.floor(Date.now()/1e3)+i.expires_in};return i.refresh_token&&(a.refreshToken=i.refresh_token),(0,y.writeAuthConfig)(a),a.token}catch(e){if((0,y.writeAuthConfig)({}),e instanceof O.AccessTokenMissingError||e instanceof O.RefreshAccessTokenFailedError)throw e;throw new O.RefreshAccessTokenFailedError(e)}}async function E(e,t,r){let i=`https://api.vercel.com/v1/projects/${t}/token?source=vercel-oidc-refresh${r?`&teamId=${r}`:""}`,a=await fetch(i,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!a.ok)throw new b.VercelOidcTokenError(`Failed to refresh OIDC token: ${a.statusText}`);let o=await a.json();return w(o),o}function w(e){if(!e||"object"!=typeof e)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in e)||"string"!=typeof e.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function _(){let e=(0,h.findRootDir)();if(!e)throw new b.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let t=g.join(e,".vercel","project.json");if(!f.existsSync(t))throw new b.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let r=JSON.parse(f.readFileSync(t,"utf8"));if("string"!=typeof r.projectId&&"string"!=typeof r.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:r.projectId,teamId:r.orgId}}function x(e,t){let r=(0,h.getUserDataDir)();if(!r)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let i=g.join(r,"com.vercel.token",`${t}.json`),a=JSON.stringify(e);f.mkdirSync(g.dirname(i),{mode:504,recursive:!0}),f.writeFileSync(i,a),f.chmodSync(i,432)}function I(e){let t=(0,h.getUserDataDir)();if(!t)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let r=g.join(t,"com.vercel.token",`${e}.json`);if(!f.existsSync(r))return null;let i=JSON.parse(f.readFileSync(r,"utf8"));return w(i),i}function P(e){let t=e.split(".");if(3!==t.length)throw new b.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let r=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=r.padEnd(r.length+(4-r.length%4)%4,"=");return JSON.parse(Buffer.from(i,"base64").toString("utf8"))}function A(e,t=0){return 1e3*e.exp<Date.now()+t}}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0bl-e63._.js.map
@@ -1,8 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},120635,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},559043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},509656,(e,t,r)=>{t.exports=e.x("node:tty",()=>require("node:tty"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},786025,e=>{"use strict";var t=e.i(912714),r=e.i(750227),n=e.i(687388);e.i(640911);var o=e.i(874533),i=n;let a=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*u(e){let n;try{n=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of n){if(a.has(t.name)||t.name.startsWith("."))continue;let n=(0,r.join)(e,t.name);t.isDirectory()?yield*u(n):t.isFile()&&(yield n)}}async function s(e,n,o,i){if(e.length<=i.max)return e;let a=(0,r.join)(o,i.dir),u=(0,r.join)(a,`${new Date().toISOString().replace(/[:.]/g,"-")}-${n.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),s=u;try{await (0,t.mkdir)(a,{recursive:!0}),await (0,t.writeFile)(u,e),s=(0,r.relative)(o,u)||u}catch{s="(could not be written to a file)"}let l=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,i.head).trimEnd()}
2
-
3
- [${n} cut at ${i.max.toLocaleString("en")} chars — the whole thing (${l} lines) is at ${s}. Read the part you need with \`sed -n\`.]
4
-
5
- ${e.slice(-i.tail).trimStart()}`}let l=n.APP_DIR,c=(0,r.join)(n.DATA_DIR,n.PATHS.workspace),d=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean),f=(0,r.join)(c,n.PATHS.artifacts),p=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],_=new Set([...p,".agents"]),b=(e,t)=>t===e||t.startsWith(e+r.sep),y=e=>(0,t.realpath)(e).catch(()=>null);async function R(e){let t=await y(c)??c,n=(0,r.resolve)(c,e);if(!b(c,n))return null;let o=n,i=await y(o);for(;null===i&&(0,r.dirname)(o)!==o;)o=(0,r.dirname)(o),i=await y(o);if(null===i)return null;let a=(0,r.relative)(o,n),u=a?(0,r.join)(i,a):i;return b(t,u)?u:null}let m=e=>`${n.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function E(e){let n=m(e);return await (0,t.mkdir)((0,r.join)(c,n),{recursive:!0}),n}async function O(e,o){let i,a=(i=o.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${n.PATHS.scratch}/${i}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,r.join)(c,a),{recursive:!0}),a}let j=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},g={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function h(e){let t=Object.values(g).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),n=new Set(r.trim().split(/\s+/).filter(Boolean)),o=e=>({found:e.filter(e=>n.has(e)),missing:e.filter(e=>!n.has(e))});return{runtimes:o(g.runtimes),managers:o(g.managers),browser:null}}async function w(){await T(),await x()}async function v(e){let t,r=await M(),n=j(e),o=await r.exec("playwright-cli list --json",{env:n,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(o?.stdout??"");t=e?.find(e=>e.name===n.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await r.exec("playwright-cli close",{env:n,timeoutMs:15e3}).catch(()=>{}),await w()}async function P(e){let t=await M();await t.exec("playwright-cli close",{env:j(e),timeoutMs:15e3}).catch(()=>{}),await w()}let x=()=>S(n.PATHS.output),T=()=>S(".playwright-cli");async function S(e){let o=(0,r.join)(c,e),i=await (0,t.readdir)(o,{withFileTypes:!0}).catch(()=>[]),a=Date.now()-n.WORKSPACE_KEEP.forMs;for(let e of i){if(!e.isFile())continue;let n=(0,r.join)(o,e.name),i=await (0,t.stat)(n).catch(()=>null);i&&i.mtimeMs<a&&await (0,t.unlink)(n).catch(()=>{})}}let A={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function M(){for(let e of p)await (0,t.mkdir)((0,r.join)(c,e),{recursive:!0});for(let[e,n]of Object.entries(A))await (0,t.writeFile)((0,r.join)(c,e),n,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:n,toolPath:a})=>{let l=(0,r.resolve)(e),c=(a??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);return{cwd:l,resolve:d,readFile:(e,r)=>(0,t.readFile)(d(e),r),async writeFile(e,n){let o=d(e);await (0,t.mkdir)((0,r.join)(o,".."),{recursive:!0}),await (0,t.writeFile)(o,n)},readdir:(e,r)=>(0,t.readdir)(d(e),r),fold:(e,t="output")=>s(e,t,l,n),async glob(e,{path:t=".",limit:n=200}={}){let o=d(t),i=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),a=[];for await(let e of u(o)){let t=(0,r.relative)(o,e).split(r.sep).join("/");if((i.test(t)||i.test(e))&&a.push(e),a.length>=n)break}return a},exec:(e,{cwd:t,timeoutMs:r=i.EXEC_TIMEOUT_MS,signal:a,env:u}={})=>new Promise(f=>{let p,_,b=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();c&&(b.PATH=`${b.PATH??""}:${c}`);let y=(0,o.spawn)(e,{shell:!0,cwd:t?d(t):l,env:{...b,...u},detached:!0}),R="",m="";y.stdout?.on("data",e=>R+=e),y.stderr?.on("data",e=>m+=e);let E=e=>{try{y.pid&&process.kill(-y.pid,e)}catch{y.kill(e)}},O=!1,j=async e=>{O||(O=!0,clearTimeout(h),clearTimeout(p),clearTimeout(_),a?.removeEventListener("abort",w),f({...e,stdout:await s(e.stdout,"stdout",l,n),stderr:await s(e.stderr,"stderr",l,n)}))},g=e=>{p||O||(m+=`
6
- [${e}]`,E("SIGTERM"),p=setTimeout(()=>{m+="\n[Killed: it did not exit on SIGTERM]",E("SIGKILL"),_=setTimeout(()=>{y.stdout?.destroy(),y.stderr?.destroy(),j({stdout:R,stderr:m,exitCode:-1})},1e3)},i.EXEC_KILL_GRACE_MS))},h=setTimeout(()=>g(`Timed out after ${r}ms`),r),w=()=>g("Aborted");a?.aborted?w():a?.addEventListener("abort",w,{once:!0}),y.on("close",e=>j({stdout:R,stderr:m,exitCode:e??-1})),y.on("error",e=>j({stdout:R,stderr:m+String(e),exitCode:-1}))})}})({workingDirectory:c,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:d})}async function C(e,n){let o=e.map(e=>(0,r.resolve)(c,e));if(n){let e=0;for await(let t of u((0,r.join)(c,n)))if(o.push(t),(e+=1)>=500)break}let i=new Map;for(let e of o){let n=await (0,t.stat)(e).catch(()=>null);if(!n?.isFile())continue;let o=(0,r.relative)(c,e);i.set(o&&!o.startsWith("..")?o:e,n.mtimeMs)}return[...i].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,f,"WORKSPACE",0,c,"botFolder",0,m,"closeHiddenBrowser",0,v,"closeJobShell",0,P,"filesOnDisk",0,C,"insideWorkspace",0,R,"jobShellEnv",0,j,"openBotFolder",0,E,"openJobScratch",0,O,"openWorkspace",0,M,"pruneJobFiles",0,w,"readMachineTools",0,h,"writeRefusal",0,function(e){if(b(c,e)){let t=(0,r.relative)(c,e),[o]=t.split(r.sep);return o&&_.has(o)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, your own kit under ${n.PATHS.bots}/, and this job's working material under ${n.PATHS.scratch}/.`}return b(l,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${c}; outside it, write only where the user pointed you.`:null}],786025)},91264,e=>{"use strict";let t=e=>!!e&&"object"==typeof e&&(!0===e.$ok||!1===e.$ok),r=e=>t(e)&&e.$ok,n=e=>({$ok:!0,data:e}),o=e=>({$ok:!1,message:e});var i=e.i(379509),a=e.i(915874),u=e.i(640911),s=e.i(53748);async function l(e){try{let o=n(await e());for(;r(o)&&t(o.data);)o=o.data;return o}catch(e){if((0,i.unstable_rethrow)(e),(0,s.isPublicError)(e))return o(e.message);if(e instanceof a.ZodError)return o(e.issues[0]?.message);if(t(e)&&!e.$ok)return e;return u.logger.error(e),o()}}e.s(["serverRoute",0,e=>async(t,n)=>{let o=await l(()=>e(t,n));return r(o)&&o.data instanceof Response?o.data:Response.json(o)}],91264)},53748,e=>{"use strict";class t extends Error{message;constructor(e){super(e),this.message=e}}e.s(["isPublicError",0,e=>e instanceof t,"publicError",0,function(e){throw new t(e)}])},462782,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isNextRouterError",{enumerable:!0,get:function(){return i}});let n=e.r(712053),o=e.r(319334);function i(e){return(0,o.isRedirectError)(e)||(0,n.isHTTPAccessFallbackError)(e)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},708595,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return o}});class n extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1174",enumerable:!1,configurable:!0})}}class o extends URLSearchParams{append(){throw new n}delete(){throw new n}set(){throw new n}sort(){throw new n}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},950723,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RedirectStatusCode",{enumerable:!0,get:function(){return o}});var n,o=((n={})[n.SeeOther=303]="SeeOther",n[n.TemporaryRedirect=307]="TemporaryRedirect",n[n.PermanentRedirect=308]="PermanentRedirect",n);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},319334,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={REDIRECT_ERROR_CODE:function(){return a},isRedirectError:function(){return u}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(950723),a="NEXT_REDIRECT";function u(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,n]=t,o=t.slice(2,-2).join(";"),u=Number(t.at(-2));return r===a&&("replace"===n||"push"===n)&&"string"==typeof o&&!isNaN(u)&&u in i.RedirectStatusCode}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},515458,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={actionAsyncStorage:function(){return i.actionAsyncStorage},workAsyncStorage:function(){return a.workAsyncStorage},workUnitAsyncStorage:function(){return u.workUnitAsyncStorage}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(120635),a=e.r(556704),u=e.r(832319);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},922349,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getRedirectError:function(){return s},getRedirectStatusCodeFromError:function(){return p},getRedirectTypeFromError:function(){return f},getURLFromRedirectError:function(){return d},permanentRedirect:function(){return c},redirect:function(){return l}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(950723),a=e.r(319334),u=e.r(515458);function s(e,t,r=i.RedirectStatusCode.TemporaryRedirect){let n=Object.defineProperty(Error(a.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n.digest=`${a.REDIRECT_ERROR_CODE};${t};${e};${r};`,n}function l(e,t){throw s(e,t??=u.actionAsyncStorage?.getStore()?.isAction?"push":"replace",i.RedirectStatusCode.TemporaryRedirect)}function c(e,t="replace"){throw s(e,t,i.RedirectStatusCode.PermanentRedirect)}function d(e){return(0,a.isRedirectError)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function f(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function p(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},712053,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={HTTPAccessErrorStatus:function(){return i},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return u},getAccessFallbackErrorTypeByStatus:function(){return c},getAccessFallbackHTTPStatus:function(){return l},isHTTPAccessFallbackError:function(){return s}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},a=new Set(Object.values(i)),u="NEXT_HTTP_ERROR_FALLBACK";function s(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return t===u&&a.has(Number(r))}function l(e){return Number(e.digest.split(";")[1])}function c(e){switch(e){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},102507,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"notFound",{enumerable:!0,get:function(){return i}});let n=e.r(712053),o=`${n.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function i(){let e=Object.defineProperty(Error(o),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw e.digest=o,e}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},647658,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"forbidden",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},235458,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unauthorized",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},109811,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,a.isNextRouterError)(t)||(0,i.isBailoutToCSRError)(t)||(0,s.isDynamicServerError)(t)||(0,u.isDynamicPostpone)(t)||(0,o.isPostpone)(t)||(0,n.isHangingPromiseRejectionError)(t)||(0,u.isPrerenderInterruptedError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=e.r(204642),o=e.r(267539),i=e.r(331584),a=e.r(462782),u=e.r(868665),s=e.r(865252);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},379509,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ReadonlyURLSearchParams:function(){return i.ReadonlyURLSearchParams},RedirectType:function(){return f},forbidden:function(){return s.forbidden},notFound:function(){return u.notFound},permanentRedirect:function(){return a.permanentRedirect},redirect:function(){return a.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return d},unstable_rethrow:function(){return c.unstable_rethrow}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(708595),a=e.r(922349),u=e.r(102507),s=e.r(647658),l=e.r(235458),c=e.r(109811);function d(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let f={push:"push",replace:"replace"};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},267539,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isPostpone",{enumerable:!0,get:function(){return o}});let n=Symbol.for("react.postpone");function o(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__0jq4ohy._.js.map
@@ -1,8 +0,0 @@
1
- module.exports=[874533,(e,t,i)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,i)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},944971,514499,e=>{"use strict";var t=e.i(105249),i=e.i(687388),a=e.i(264079),l=e.i(704161);let n={name:{max:16},shortDescription:{max:60},description:{max:100},prompt:{max:4e3}};e.s(["COMMON_VALIDATE",0,n],514499);var r=e.i(41444);Array(8).fill(0);let o="currentColor",s=[{id:"system",label:"System",value:o},{id:"slate",label:"Slate",value:"#64748B"},{id:"indigo",label:"Indigo",value:"#6366F1"},{id:"blue",label:"Blue",value:"#3B82F6"},{id:"cyan",label:"Cyan",value:"#06B6D4"},{id:"teal",label:"Teal",value:"#14B8A6"},{id:"green",label:"Green",value:"#22C55E"},{id:"lime",label:"Lime",value:"#84CC16"},{id:"amber",label:"Amber",value:"#F59E0B"},{id:"orange",label:"Orange",value:"#F97316"},{id:"red",label:"Red",value:"#EF4444"},{id:"pink",label:"Pink",value:"#EC4899"},{id:"violet",label:"Violet",value:"#8B5CF6"},{id:"fuchsia",label:"Fuchsia",value:"#D946EF"},{id:"rose",label:"Rose",value:"#F43F5E"},{id:"sky",label:"Sky",value:"#0EA5E9"},{id:"emerald",label:"Emerald",value:"#10B981"},{id:"yellow",label:"Yellow",value:"#EAB308"},{id:"stone",label:"Stone",value:"#78716C"},{id:"navy",label:"Navy",value:"#1E3A8A",dark:!0},{id:"ocean",label:"Ocean",value:"#155E75",dark:!0},{id:"pine",label:"Pine",value:"#166534",dark:!0},{id:"moss",label:"Moss",value:"#3F6212",dark:!0},{id:"olive",label:"Olive",value:"#854D0E",dark:!0},{id:"rust",label:"Rust",value:"#9A3412",dark:!0},{id:"wine",label:"Wine",value:"#9F1239",dark:!0},{id:"plum",label:"Plum",value:"#6B21A8",dark:!0},{id:"grape",label:"Grape",value:"#5B21B6",dark:!0},{id:"iron",label:"Iron",value:"#334155",dark:!0}],d=Object.fromEntries(s.map(e=>[e.id,e.value]));s.filter(e=>e.value!==o).map(e=>e.value),d.amber,d.red,s.filter(e=>e.value!==o&&!("dark"in e)).map(e=>e.value),s.filter(e=>"dark"in e).map(e=>e.value);let u=t.default.object({color:t.default.string().regex(/^(#[0-9a-fA-F]{6}|currentColor)$/,"Hex color").optional(),shape:t.default.enum(["blob","poly","squircle"]).optional(),outline:t.default.boolean().optional()}),c=t.default.string().max(n.prompt.max),m=t.default.object({id:t.default.number(),name:t.default.string(),serverName:t.default.string()}),f=t.default.string().trim().transform(e=>e.replace(/\s+/g," ")).pipe(t.default.string().min(1,"A name is required").max(n.name.max)),p=t.default.object({input:t.default.number(),output:t.default.number()});t.default.object({name:t.default.string(),description:t.default.string(),systemPrompt:t.default.string().nullish(),icon:u.nullish(),provider:a.textModelProviderSchema.nullish(),model:t.default.string().nullish(),compactAt:t.default.number().nullish(),disabled:t.default.boolean(),createdAt:l.DateLikeSchema,tools:m.array().default([]),tokens:p,lastJobAt:l.DateLikeSchema.nullish()}),t.default.object({name:f,description:t.default.string().trim().min(1,"Say what this bot is for").max(n.description.max),systemPrompt:c.optional(),icon:u.optional(),provider:a.textModelProviderSchema.nullish(),model:t.default.string().trim().max(80).nullish(),compactAt:t.default.coerce.number().int().min(8e3,"At least 8k").nullish(),disabled:t.default.boolean().optional(),toolIds:t.default.number().int().array().max(10).default([])}),t.default.object({file:t.default.string(),path:t.default.string(),line:t.default.string(),at:l.DateLikeSchema,bytes:t.default.number()});let g=i.PAGE_SIZE,h=t.default.discriminatedUnion("type",[t.default.object({type:t.default.literal("text"),text:t.default.string()}),t.default.object({type:t.default.literal("image"),src:t.default.string()})]),b=t.default.object({id:t.default.string(),seq:t.default.number(),bot:t.default.string().nullable(),parent:t.default.string().nullable(),at:l.DateLikeSchema}),k=t.default.discriminatedUnion("kind",[b.extend({kind:t.default.literal("user"),text:t.default.string()}),b.extend({kind:t.default.literal("text"),text:t.default.string()}),b.extend({kind:t.default.literal("note"),text:t.default.string()}),b.extend({kind:t.default.literal("tool"),callId:t.default.string(),name:t.default.string(),input:t.default.string(),note:t.default.string().nullish(),path:t.default.string().nullish()}),b.extend({kind:t.default.literal("tool-result"),callId:t.default.string(),name:t.default.string(),results:h.array(),more:t.default.boolean()}),b.extend({kind:t.default.literal("ask"),callId:t.default.string(),to:t.default.string(),text:t.default.string()}),b.extend({kind:t.default.literal("ask-result"),callId:t.default.string(),text:t.default.string()}),b.extend({kind:t.default.literal("waiting"),callId:t.default.string(),question:t.default.string(),options:t.default.string().array()})]),v=t.default.object({question:t.default.string(),options:t.default.string().array(),auto:t.default.boolean()});t.default.object({id:t.default.string(),bot:t.default.string(),label:t.default.string(),request:t.default.string(),status:t.default.enum(["running","waiting","done","failed"]),outcome:t.default.string().nullable(),ask:v.nullable(),seen:t.default.boolean(),tokens:p,contextTokens:t.default.number(),contextBudget:t.default.number(),createdAt:l.DateLikeSchema,updatedAt:l.DateLikeSchema,lines:k.array()}),e.s(["BOT_MEMORY_KEY",0,"BOT_MEMORY","COMPACT_AT_MIN",0,8e3,"DEFAULT_BOT",0,{name:"Jarvis",description:"Anything — this computer, a browser, the web, files, services",systemPrompt:null,icon:{color:"#14B8A6",shape:"squircle"},provider:null,model:null,disabled:!1,compactAt:null},"NO_TOKENS",0,{input:0,output:0},"TASK_CONTINUE",0,"Continue","TASK_HISTORY_PAGE",0,g,"botIconSchema",0,u,"isBotMemoryOn",0,e=>e?.trim()!=="off","taskActivity",0,function(e,t=120){let i=null;for(let a=e.length-1;a>=0;a--){let l=e[a];if("tool"===l.kind)i??=`${l.name} ${l.note??l.input}`;else if("text"===l.kind)return(0,r.clip)(i?`${l.text} → ${i}`:l.text,t);else if("ask"===l.kind)return(0,r.clip)(l.parent?`asked ${l.to}: ${l.text}`:`asked ${l.to} for: ${l.text}`,t);else if("user"===l.kind||"waiting"===l.kind)break}return i?(0,r.clip)(i,t):null}],944971)},629668,e=>{"use strict";var t=e.i(687388);let i=e=>`text/${e}; charset=utf-8`,a={md:{kind:"markdown",mime:i("markdown")},markdown:{kind:"markdown",mime:i("markdown")},csv:{kind:"csv",mime:i("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:i("plain")},log:{kind:"text",mime:i("plain")},html:{kind:"frame",mime:i("html")},htm:{kind:"frame",mime:i("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:i("css")},js:{kind:"none",mime:i("javascript")},woff2:{kind:"none",mime:"font/woff2"}},l=e=>e.split(".").pop()?.toLowerCase()??"",n=new Set(["node_modules","__pycache__"]),r=Object.entries(a).filter(([,e])=>"none"!==e.kind).map(([e])=>e),o=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${r.join("|")})\b`,"giu"),s=`${t.PATHS.workspace}/`;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!n.has(e),"mimeOf",0,e=>a[l(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),i=new Set;for(let e of t.match(o)??[]){let t=function(e){let t,i,a=(i=(t=e.trim()).indexOf(s))>=0?t.slice(i+s.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!a)return null;let[l,...n]=a.split("/");return n.length&&l.includes(".")?null:a}(e);t&&i.add(t)}return[...i].slice(0,6)},"viewKindOf",0,e=>a[l(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),i=e.i(750227),a=e.i(687388);e.i(640911);var l=e.i(874533),n=a;let r=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*o(e){let a;try{a=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of a){if(r.has(t.name)||t.name.startsWith("."))continue;let a=(0,i.join)(e,t.name);t.isDirectory()?yield*o(a):t.isFile()&&(yield a)}}async function s(e,a,l,n){if(e.length<=n.max)return e;let r=(0,i.join)(l,n.dir),o=(0,i.join)(r,`${new Date().toISOString().replace(/[:.]/g,"-")}-${a.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),s=o;try{await (0,t.mkdir)(r,{recursive:!0}),await (0,t.writeFile)(o,e),s=(0,i.relative)(l,o)||o}catch{s="(could not be written to a file)"}let d=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,n.head).trimEnd()}
2
-
3
- [${a} cut at ${n.max.toLocaleString("en")} chars — the whole thing (${d} lines) is at ${s}. Read the part you need with \`sed -n\`.]
4
-
5
- ${e.slice(-n.tail).trimStart()}`}let d=a.APP_DIR,u=(0,i.join)(a.DATA_DIR,a.PATHS.workspace),c=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,i.join)(d,"node_modules",".bin")]).filter(Boolean),m=(0,i.join)(u,a.PATHS.artifacts),f=[a.PATHS.artifacts,a.PATHS.projects,a.PATHS.scratch,a.PATHS.bots],p=new Set([...f,".agents"]),g=(e,t)=>t===e||t.startsWith(e+i.sep),h=e=>(0,t.realpath)(e).catch(()=>null);async function b(e){let t=await h(u)??u,a=(0,i.resolve)(u,e);if(!g(u,a))return null;let l=a,n=await h(l);for(;null===n&&(0,i.dirname)(l)!==l;)l=(0,i.dirname)(l),n=await h(l);if(null===n)return null;let r=(0,i.relative)(l,a),o=r?(0,i.join)(n,r):n;return g(t,o)?o:null}let k=e=>`${a.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function v(e){let a=k(e);return await (0,t.mkdir)((0,i.join)(u,a),{recursive:!0}),a}async function w(e,l){let n,r=(n=l.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${a.PATHS.scratch}/${n}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,i.join)(u,r),{recursive:!0}),r}let S=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:a.BROWSER_VIEWPORT}:{},y={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function A(e){let t=Object.values(y).flat(),{stdout:i}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),a=new Set(i.trim().split(/\s+/).filter(Boolean)),l=e=>({found:e.filter(e=>a.has(e)),missing:e.filter(e=>!a.has(e))});return{runtimes:l(y.runtimes),managers:l(y.managers),browser:null}}async function x(){await j(),await _()}async function T(e){let t,i=await O(),a=S(e),l=await i.exec("playwright-cli list --json",{env:a,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(l?.stdout??"");t=e?.find(e=>e.name===a.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await i.exec("playwright-cli close",{env:a,timeoutMs:15e3}).catch(()=>{}),await x()}async function E(e){let t=await O();await t.exec("playwright-cli close",{env:S(e),timeoutMs:15e3}).catch(()=>{}),await x()}let _=()=>P(a.PATHS.output),j=()=>P(".playwright-cli");async function P(e){let l=(0,i.join)(u,e),n=await (0,t.readdir)(l,{withFileTypes:!0}).catch(()=>[]),r=Date.now()-a.WORKSPACE_KEEP.forMs;for(let e of n){if(!e.isFile())continue;let a=(0,i.join)(l,e.name),n=await (0,t.stat)(a).catch(()=>null);n&&n.mtimeMs<r&&await (0,t.unlink)(a).catch(()=>{})}}let $={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function O(){for(let e of f)await (0,t.mkdir)((0,i.join)(u,e),{recursive:!0});for(let[e,a]of Object.entries($))await (0,t.writeFile)((0,i.join)(u,e),a,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:a,toolPath:r})=>{let d=(0,i.resolve)(e),u=(r??[]).filter(Boolean).join(":"),c=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,i.resolve)(d,e);return{cwd:d,resolve:c,readFile:(e,i)=>(0,t.readFile)(c(e),i),async writeFile(e,a){let l=c(e);await (0,t.mkdir)((0,i.join)(l,".."),{recursive:!0}),await (0,t.writeFile)(l,a)},readdir:(e,i)=>(0,t.readdir)(c(e),i),fold:(e,t="output")=>s(e,t,d,a),async glob(e,{path:t=".",limit:a=200}={}){let l=c(t),n=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),r=[];for await(let e of o(l)){let t=(0,i.relative)(l,e).split(i.sep).join("/");if((n.test(t)||n.test(e))&&r.push(e),r.length>=a)break}return r},exec:(e,{cwd:t,timeoutMs:i=n.EXEC_TIMEOUT_MS,signal:r,env:o}={})=>new Promise(m=>{let f,p,g=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();u&&(g.PATH=`${g.PATH??""}:${u}`);let h=(0,l.spawn)(e,{shell:!0,cwd:t?c(t):d,env:{...g,...o},detached:!0}),b="",k="";h.stdout?.on("data",e=>b+=e),h.stderr?.on("data",e=>k+=e);let v=e=>{try{h.pid&&process.kill(-h.pid,e)}catch{h.kill(e)}},w=!1,S=async e=>{w||(w=!0,clearTimeout(A),clearTimeout(f),clearTimeout(p),r?.removeEventListener("abort",x),m({...e,stdout:await s(e.stdout,"stdout",d,a),stderr:await s(e.stderr,"stderr",d,a)}))},y=e=>{f||w||(k+=`
6
- [${e}]`,v("SIGTERM"),f=setTimeout(()=>{k+="\n[Killed: it did not exit on SIGTERM]",v("SIGKILL"),p=setTimeout(()=>{h.stdout?.destroy(),h.stderr?.destroy(),S({stdout:b,stderr:k,exitCode:-1})},1e3)},n.EXEC_KILL_GRACE_MS))},A=setTimeout(()=>y(`Timed out after ${i}ms`),i),x=()=>y("Aborted");r?.aborted?x():r?.addEventListener("abort",x,{once:!0}),h.on("close",e=>S({stdout:b,stderr:k,exitCode:e??-1})),h.on("error",e=>S({stdout:b,stderr:k+String(e),exitCode:-1}))})}})({workingDirectory:u,spill:{dir:a.PATHS.output,...a.TOOL_OUTPUT},toolPath:c})}async function I(e,a){let l=e.map(e=>(0,i.resolve)(u,e));if(a){let e=0;for await(let t of o((0,i.join)(u,a)))if(l.push(t),(e+=1)>=500)break}let n=new Map;for(let e of l){let a=await (0,t.stat)(e).catch(()=>null);if(!a?.isFile())continue;let l=(0,i.relative)(u,e);n.set(l&&!l.startsWith("..")?l:e,a.mtimeMs)}return[...n].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,m,"WORKSPACE",0,u,"botFolder",0,k,"closeHiddenBrowser",0,T,"closeJobShell",0,E,"filesOnDisk",0,I,"insideWorkspace",0,b,"jobShellEnv",0,S,"openBotFolder",0,v,"openJobScratch",0,w,"openWorkspace",0,O,"pruneJobFiles",0,x,"readMachineTools",0,A,"writeRefusal",0,function(e){if(g(u,e)){let t=(0,i.relative)(u,e),[l]=t.split(i.sep);return l&&p.has(l)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${a.PATHS.artifacts}/, code under ${a.PATHS.projects}/, your own kit under ${a.PATHS.bots}/, and this job's working material under ${a.PATHS.scratch}/.`}return g(d,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${u}; outside it, write only where the user pointed you.`:null}],786025)},704161,e=>{"use strict";var t=e.i(469719);let i=t.z.union([t.z.date(),t.z.iso.datetime()]);e.s(["DateLikeSchema",0,i,"toDate",0,e=>new Date(e)])},260338,e=>{"use strict";var t=e.i(518899),i=e.i(844988),a=e.i(156325);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,i.is)(e,a.Column)?e:String)}])},105249,e=>{"use strict";var t=e.i(562810);e.s(["default",0,t])}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ls6_8y._.js.map
@@ -1,8 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},120635,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},559043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},509656,(e,t,r)=>{t.exports=e.x("node:tty",()=>require("node:tty"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},629668,e=>{"use strict";var t=e.i(687388);let r=e=>`text/${e}; charset=utf-8`,n={md:{kind:"markdown",mime:r("markdown")},markdown:{kind:"markdown",mime:r("markdown")},csv:{kind:"csv",mime:r("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:r("plain")},log:{kind:"text",mime:r("plain")},html:{kind:"frame",mime:r("html")},htm:{kind:"frame",mime:r("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:r("css")},js:{kind:"none",mime:r("javascript")},woff2:{kind:"none",mime:"font/woff2"}},i=e=>e.split(".").pop()?.toLowerCase()??"",o=new Set(["node_modules","__pycache__"]),a=Object.entries(n).filter(([,e])=>"none"!==e.kind).map(([e])=>e),s=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${a.join("|")})\b`,"giu"),u=`${t.PATHS.workspace}/`;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!o.has(e),"mimeOf",0,e=>n[i(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),r=new Set;for(let e of t.match(s)??[]){let t=function(e){let t,r,n=(r=(t=e.trim()).indexOf(u))>=0?t.slice(r+u.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!n)return null;let[i,...o]=n.split("/");return o.length&&i.includes(".")?null:n}(e);t&&r.add(t)}return[...r].slice(0,6)},"viewKindOf",0,e=>n[i(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),r=e.i(750227),n=e.i(687388);e.i(640911);var i=e.i(874533),o=n;let a=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*s(e){let n;try{n=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of n){if(a.has(t.name)||t.name.startsWith("."))continue;let n=(0,r.join)(e,t.name);t.isDirectory()?yield*s(n):t.isFile()&&(yield n)}}async function u(e,n,i,o){if(e.length<=o.max)return e;let a=(0,r.join)(i,o.dir),s=(0,r.join)(a,`${new Date().toISOString().replace(/[:.]/g,"-")}-${n.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),u=s;try{await (0,t.mkdir)(a,{recursive:!0}),await (0,t.writeFile)(s,e),u=(0,r.relative)(i,s)||s}catch{u="(could not be written to a file)"}let l=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,o.head).trimEnd()}
2
-
3
- [${n} cut at ${o.max.toLocaleString("en")} chars — the whole thing (${l} lines) is at ${u}. Read the part you need with \`sed -n\`.]
4
-
5
- ${e.slice(-o.tail).trimStart()}`}let l=n.APP_DIR,d=(0,r.join)(n.DATA_DIR,n.PATHS.workspace),c=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean),f=(0,r.join)(d,n.PATHS.artifacts),p=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],m=new Set([...p,".agents"]),_=(e,t)=>t===e||t.startsWith(e+r.sep),b=e=>(0,t.realpath)(e).catch(()=>null);async function y(e){let t=await b(d)??d,n=(0,r.resolve)(d,e);if(!_(d,n))return null;let i=n,o=await b(i);for(;null===o&&(0,r.dirname)(i)!==i;)i=(0,r.dirname)(i),o=await b(i);if(null===o)return null;let a=(0,r.relative)(i,n),s=a?(0,r.join)(o,a):o;return _(t,s)?s:null}let g=e=>`${n.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function R(e){let n=g(e);return await (0,t.mkdir)((0,r.join)(d,n),{recursive:!0}),n}async function h(e,i){let o,a=(o=i.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${n.PATHS.scratch}/${o}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,r.join)(d,a),{recursive:!0}),a}let E=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},j={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function w(e){let t=Object.values(j).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),n=new Set(r.trim().split(/\s+/).filter(Boolean)),i=e=>({found:e.filter(e=>n.has(e)),missing:e.filter(e=>!n.has(e))});return{runtimes:i(j.runtimes),managers:i(j.managers),browser:null}}async function O(){await T(),await x()}async function v(e){let t,r=await A(),n=E(e),i=await r.exec("playwright-cli list --json",{env:n,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(i?.stdout??"");t=e?.find(e=>e.name===n.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await r.exec("playwright-cli close",{env:n,timeoutMs:15e3}).catch(()=>{}),await O()}async function P(e){let t=await A();await t.exec("playwright-cli close",{env:E(e),timeoutMs:15e3}).catch(()=>{}),await O()}let x=()=>S(n.PATHS.output),T=()=>S(".playwright-cli");async function S(e){let i=(0,r.join)(d,e),o=await (0,t.readdir)(i,{withFileTypes:!0}).catch(()=>[]),a=Date.now()-n.WORKSPACE_KEEP.forMs;for(let e of o){if(!e.isFile())continue;let n=(0,r.join)(i,e.name),o=await (0,t.stat)(n).catch(()=>null);o&&o.mtimeMs<a&&await (0,t.unlink)(n).catch(()=>{})}}let k={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function A(){for(let e of p)await (0,t.mkdir)((0,r.join)(d,e),{recursive:!0});for(let[e,n]of Object.entries(k))await (0,t.writeFile)((0,r.join)(d,e),n,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:n,toolPath:a})=>{let l=(0,r.resolve)(e),d=(a??[]).filter(Boolean).join(":"),c=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);return{cwd:l,resolve:c,readFile:(e,r)=>(0,t.readFile)(c(e),r),async writeFile(e,n){let i=c(e);await (0,t.mkdir)((0,r.join)(i,".."),{recursive:!0}),await (0,t.writeFile)(i,n)},readdir:(e,r)=>(0,t.readdir)(c(e),r),fold:(e,t="output")=>u(e,t,l,n),async glob(e,{path:t=".",limit:n=200}={}){let i=c(t),o=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),a=[];for await(let e of s(i)){let t=(0,r.relative)(i,e).split(r.sep).join("/");if((o.test(t)||o.test(e))&&a.push(e),a.length>=n)break}return a},exec:(e,{cwd:t,timeoutMs:r=o.EXEC_TIMEOUT_MS,signal:a,env:s}={})=>new Promise(f=>{let p,m,_=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();d&&(_.PATH=`${_.PATH??""}:${d}`);let b=(0,i.spawn)(e,{shell:!0,cwd:t?c(t):l,env:{..._,...s},detached:!0}),y="",g="";b.stdout?.on("data",e=>y+=e),b.stderr?.on("data",e=>g+=e);let R=e=>{try{b.pid&&process.kill(-b.pid,e)}catch{b.kill(e)}},h=!1,E=async e=>{h||(h=!0,clearTimeout(w),clearTimeout(p),clearTimeout(m),a?.removeEventListener("abort",O),f({...e,stdout:await u(e.stdout,"stdout",l,n),stderr:await u(e.stderr,"stderr",l,n)}))},j=e=>{p||h||(g+=`
6
- [${e}]`,R("SIGTERM"),p=setTimeout(()=>{g+="\n[Killed: it did not exit on SIGTERM]",R("SIGKILL"),m=setTimeout(()=>{b.stdout?.destroy(),b.stderr?.destroy(),E({stdout:y,stderr:g,exitCode:-1})},1e3)},o.EXEC_KILL_GRACE_MS))},w=setTimeout(()=>j(`Timed out after ${r}ms`),r),O=()=>j("Aborted");a?.aborted?O():a?.addEventListener("abort",O,{once:!0}),b.on("close",e=>E({stdout:y,stderr:g,exitCode:e??-1})),b.on("error",e=>E({stdout:y,stderr:g+String(e),exitCode:-1}))})}})({workingDirectory:d,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:c})}async function M(e,n){let i=e.map(e=>(0,r.resolve)(d,e));if(n){let e=0;for await(let t of s((0,r.join)(d,n)))if(i.push(t),(e+=1)>=500)break}let o=new Map;for(let e of i){let n=await (0,t.stat)(e).catch(()=>null);if(!n?.isFile())continue;let i=(0,r.relative)(d,e);o.set(i&&!i.startsWith("..")?i:e,n.mtimeMs)}return[...o].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,f,"WORKSPACE",0,d,"botFolder",0,g,"closeHiddenBrowser",0,v,"closeJobShell",0,P,"filesOnDisk",0,M,"insideWorkspace",0,y,"jobShellEnv",0,E,"openBotFolder",0,R,"openJobScratch",0,h,"openWorkspace",0,A,"pruneJobFiles",0,O,"readMachineTools",0,w,"writeRefusal",0,function(e){if(_(d,e)){let t=(0,r.relative)(d,e),[i]=t.split(r.sep);return i&&m.has(i)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, your own kit under ${n.PATHS.bots}/, and this job's working material under ${n.PATHS.scratch}/.`}return _(l,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${d}; outside it, write only where the user pointed you.`:null}],786025)},91264,e=>{"use strict";let t=e=>!!e&&"object"==typeof e&&(!0===e.$ok||!1===e.$ok),r=e=>t(e)&&e.$ok,n=e=>({$ok:!0,data:e}),i=e=>({$ok:!1,message:e});var o=e.i(379509),a=e.i(915874),s=e.i(640911),u=e.i(53748);async function l(e){try{let i=n(await e());for(;r(i)&&t(i.data);)i=i.data;return i}catch(e){if((0,o.unstable_rethrow)(e),(0,u.isPublicError)(e))return i(e.message);if(e instanceof a.ZodError)return i(e.issues[0]?.message);if(t(e)&&!e.$ok)return e;return s.logger.error(e),i()}}e.s(["serverRoute",0,e=>async(t,n)=>{let i=await l(()=>e(t,n));return r(i)&&i.data instanceof Response?i.data:Response.json(i)}],91264)},53748,e=>{"use strict";class t extends Error{message;constructor(e){super(e),this.message=e}}e.s(["isPublicError",0,e=>e instanceof t,"publicError",0,function(e){throw new t(e)}])},462782,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isNextRouterError",{enumerable:!0,get:function(){return o}});let n=e.r(712053),i=e.r(319334);function o(e){return(0,i.isRedirectError)(e)||(0,n.isHTTPAccessFallbackError)(e)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},708595,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return i}});class n extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1174",enumerable:!1,configurable:!0})}}class i extends URLSearchParams{append(){throw new n}delete(){throw new n}set(){throw new n}sort(){throw new n}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},950723,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RedirectStatusCode",{enumerable:!0,get:function(){return i}});var n,i=((n={})[n.SeeOther=303]="SeeOther",n[n.TemporaryRedirect=307]="TemporaryRedirect",n[n.PermanentRedirect=308]="PermanentRedirect",n);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},319334,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={REDIRECT_ERROR_CODE:function(){return a},isRedirectError:function(){return s}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(950723),a="NEXT_REDIRECT";function s(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,n]=t,i=t.slice(2,-2).join(";"),s=Number(t.at(-2));return r===a&&("replace"===n||"push"===n)&&"string"==typeof i&&!isNaN(s)&&s in o.RedirectStatusCode}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},515458,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={actionAsyncStorage:function(){return o.actionAsyncStorage},workAsyncStorage:function(){return a.workAsyncStorage},workUnitAsyncStorage:function(){return s.workUnitAsyncStorage}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(120635),a=e.r(556704),s=e.r(832319);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},922349,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getRedirectError:function(){return u},getRedirectStatusCodeFromError:function(){return p},getRedirectTypeFromError:function(){return f},getURLFromRedirectError:function(){return c},permanentRedirect:function(){return d},redirect:function(){return l}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(950723),a=e.r(319334),s=e.r(515458);function u(e,t,r=o.RedirectStatusCode.TemporaryRedirect){let n=Object.defineProperty(Error(a.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n.digest=`${a.REDIRECT_ERROR_CODE};${t};${e};${r};`,n}function l(e,t){throw u(e,t??=s.actionAsyncStorage?.getStore()?.isAction?"push":"replace",o.RedirectStatusCode.TemporaryRedirect)}function d(e,t="replace"){throw u(e,t,o.RedirectStatusCode.PermanentRedirect)}function c(e){return(0,a.isRedirectError)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function f(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function p(e){if(!(0,a.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},712053,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={HTTPAccessErrorStatus:function(){return o},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return s},getAccessFallbackErrorTypeByStatus:function(){return d},getAccessFallbackHTTPStatus:function(){return l},isHTTPAccessFallbackError:function(){return u}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},a=new Set(Object.values(o)),s="NEXT_HTTP_ERROR_FALLBACK";function u(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return t===s&&a.has(Number(r))}function l(e){return Number(e.digest.split(";")[1])}function d(e){switch(e){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},102507,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"notFound",{enumerable:!0,get:function(){return o}});let n=e.r(712053),i=`${n.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function o(){let e=Object.defineProperty(Error(i),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw e.digest=i,e}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},647658,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"forbidden",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},235458,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unauthorized",{enumerable:!0,get:function(){return n}}),e.r(712053).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},109811,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,a.isNextRouterError)(t)||(0,o.isBailoutToCSRError)(t)||(0,u.isDynamicServerError)(t)||(0,s.isDynamicPostpone)(t)||(0,i.isPostpone)(t)||(0,n.isHangingPromiseRejectionError)(t)||(0,s.isPrerenderInterruptedError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=e.r(204642),i=e.r(267539),o=e.r(331584),a=e.r(462782),s=e.r(868665),u=e.r(865252);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},379509,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ReadonlyURLSearchParams:function(){return o.ReadonlyURLSearchParams},RedirectType:function(){return f},forbidden:function(){return u.forbidden},notFound:function(){return s.notFound},permanentRedirect:function(){return a.permanentRedirect},redirect:function(){return a.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return c},unstable_rethrow:function(){return d.unstable_rethrow}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(708595),a=e.r(922349),s=e.r(102507),u=e.r(647658),l=e.r(235458),d=e.r(109811);function c(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let f={push:"push",replace:"replace"};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},267539,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isPostpone",{enumerable:!0,get:function(){return i}});let n=Symbol.for("react.postpone");function i(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__1339jnv._.js.map
@@ -1,8 +0,0 @@
1
- module.exports=[874533,(e,t,i)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,i)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},629668,e=>{"use strict";var t=e.i(687388);let i=e=>`text/${e}; charset=utf-8`,n={md:{kind:"markdown",mime:i("markdown")},markdown:{kind:"markdown",mime:i("markdown")},csv:{kind:"csv",mime:i("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:i("plain")},log:{kind:"text",mime:i("plain")},html:{kind:"frame",mime:i("html")},htm:{kind:"frame",mime:i("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:i("css")},js:{kind:"none",mime:i("javascript")},woff2:{kind:"none",mime:"font/woff2"}},a=e=>e.split(".").pop()?.toLowerCase()??"",r=new Set(["node_modules","__pycache__"]),o=Object.entries(n).filter(([,e])=>"none"!==e.kind).map(([e])=>e),s=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${o.join("|")})\b`,"giu"),l=`${t.PATHS.workspace}/`;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!r.has(e),"mimeOf",0,e=>n[a(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),i=new Set;for(let e of t.match(s)??[]){let t=function(e){let t,i,n=(i=(t=e.trim()).indexOf(l))>=0?t.slice(i+l.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!n)return null;let[a,...r]=n.split("/");return r.length&&a.includes(".")?null:n}(e);t&&i.add(t)}return[...i].slice(0,6)},"viewKindOf",0,e=>n[a(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),i=e.i(750227),n=e.i(687388);e.i(640911);var a=e.i(874533),r=n;let o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*s(e){let n;try{n=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of n){if(o.has(t.name)||t.name.startsWith("."))continue;let n=(0,i.join)(e,t.name);t.isDirectory()?yield*s(n):t.isFile()&&(yield n)}}async function l(e,n,a,r){if(e.length<=r.max)return e;let o=(0,i.join)(a,r.dir),s=(0,i.join)(o,`${new Date().toISOString().replace(/[:.]/g,"-")}-${n.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=s;try{await (0,t.mkdir)(o,{recursive:!0}),await (0,t.writeFile)(s,e),l=(0,i.relative)(a,s)||s}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,r.head).trimEnd()}
2
-
3
- [${n} cut at ${r.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
4
-
5
- ${e.slice(-r.tail).trimStart()}`}let c=n.APP_DIR,d=(0,i.join)(n.DATA_DIR,n.PATHS.workspace),m=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,i.join)(c,"node_modules",".bin")]).filter(Boolean),u=(0,i.join)(d,n.PATHS.artifacts),p=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],w=new Set([...p,".agents"]),f=(e,t)=>t===e||t.startsWith(e+i.sep),h=e=>(0,t.realpath)(e).catch(()=>null);async function g(e){let t=await h(d)??d,n=(0,i.resolve)(d,e);if(!f(d,n))return null;let a=n,r=await h(a);for(;null===r&&(0,i.dirname)(a)!==a;)a=(0,i.dirname)(a),r=await h(a);if(null===r)return null;let o=(0,i.relative)(a,n),s=o?(0,i.join)(r,o):r;return f(t,s)?s:null}let k=e=>`${n.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function S(e){let n=k(e);return await (0,t.mkdir)((0,i.join)(d,n),{recursive:!0}),n}async function T(e,a){let r,o=(r=a.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${n.PATHS.scratch}/${r}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,i.join)(d,o),{recursive:!0}),o}let v=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},y={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function _(e){let t=Object.values(y).flat(),{stdout:i}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),n=new Set(i.trim().split(/\s+/).filter(Boolean)),a=e=>({found:e.filter(e=>n.has(e)),missing:e.filter(e=>!n.has(e))});return{runtimes:a(y.runtimes),managers:a(y.managers),browser:null}}async function A(){await P(),await b()}async function j(e){let t,i=await R(),n=v(e),a=await i.exec("playwright-cli list --json",{env:n,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(a?.stdout??"");t=e?.find(e=>e.name===n.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await i.exec("playwright-cli close",{env:n,timeoutMs:15e3}).catch(()=>{}),await A()}async function $(e){let t=await R();await t.exec("playwright-cli close",{env:v(e),timeoutMs:15e3}).catch(()=>{}),await A()}let b=()=>E(n.PATHS.output),P=()=>E(".playwright-cli");async function E(e){let a=(0,i.join)(d,e),r=await (0,t.readdir)(a,{withFileTypes:!0}).catch(()=>[]),o=Date.now()-n.WORKSPACE_KEEP.forMs;for(let e of r){if(!e.isFile())continue;let n=(0,i.join)(a,e.name),r=await (0,t.stat)(n).catch(()=>null);r&&r.mtimeMs<o&&await (0,t.unlink)(n).catch(()=>{})}}let x={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function R(){for(let e of p)await (0,t.mkdir)((0,i.join)(d,e),{recursive:!0});for(let[e,n]of Object.entries(x))await (0,t.writeFile)((0,i.join)(d,e),n,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:n,toolPath:o})=>{let c=(0,i.resolve)(e),d=(o??[]).filter(Boolean).join(":"),m=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,i.resolve)(c,e);return{cwd:c,resolve:m,readFile:(e,i)=>(0,t.readFile)(m(e),i),async writeFile(e,n){let a=m(e);await (0,t.mkdir)((0,i.join)(a,".."),{recursive:!0}),await (0,t.writeFile)(a,n)},readdir:(e,i)=>(0,t.readdir)(m(e),i),fold:(e,t="output")=>l(e,t,c,n),async glob(e,{path:t=".",limit:n=200}={}){let a=m(t),r=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of s(a)){let t=(0,i.relative)(a,e).split(i.sep).join("/");if((r.test(t)||r.test(e))&&o.push(e),o.length>=n)break}return o},exec:(e,{cwd:t,timeoutMs:i=r.EXEC_TIMEOUT_MS,signal:o,env:s}={})=>new Promise(u=>{let p,w,f=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();d&&(f.PATH=`${f.PATH??""}:${d}`);let h=(0,a.spawn)(e,{shell:!0,cwd:t?m(t):c,env:{...f,...s},detached:!0}),g="",k="";h.stdout?.on("data",e=>g+=e),h.stderr?.on("data",e=>k+=e);let S=e=>{try{h.pid&&process.kill(-h.pid,e)}catch{h.kill(e)}},T=!1,v=async e=>{T||(T=!0,clearTimeout(_),clearTimeout(p),clearTimeout(w),o?.removeEventListener("abort",A),u({...e,stdout:await l(e.stdout,"stdout",c,n),stderr:await l(e.stderr,"stderr",c,n)}))},y=e=>{p||T||(k+=`
6
- [${e}]`,S("SIGTERM"),p=setTimeout(()=>{k+="\n[Killed: it did not exit on SIGTERM]",S("SIGKILL"),w=setTimeout(()=>{h.stdout?.destroy(),h.stderr?.destroy(),v({stdout:g,stderr:k,exitCode:-1})},1e3)},r.EXEC_KILL_GRACE_MS))},_=setTimeout(()=>y(`Timed out after ${i}ms`),i),A=()=>y("Aborted");o?.aborted?A():o?.addEventListener("abort",A,{once:!0}),h.on("close",e=>v({stdout:g,stderr:k,exitCode:e??-1})),h.on("error",e=>v({stdout:g,stderr:k+String(e),exitCode:-1}))})}})({workingDirectory:d,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:m})}async function L(e,n){let a=e.map(e=>(0,i.resolve)(d,e));if(n){let e=0;for await(let t of s((0,i.join)(d,n)))if(a.push(t),(e+=1)>=500)break}let r=new Map;for(let e of a){let n=await (0,t.stat)(e).catch(()=>null);if(!n?.isFile())continue;let a=(0,i.relative)(d,e);r.set(a&&!a.startsWith("..")?a:e,n.mtimeMs)}return[...r].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,u,"WORKSPACE",0,d,"botFolder",0,k,"closeHiddenBrowser",0,j,"closeJobShell",0,$,"filesOnDisk",0,L,"insideWorkspace",0,g,"jobShellEnv",0,v,"openBotFolder",0,S,"openJobScratch",0,T,"openWorkspace",0,R,"pruneJobFiles",0,A,"readMachineTools",0,_,"writeRefusal",0,function(e){if(f(d,e)){let t=(0,i.relative)(d,e),[a]=t.split(i.sep);return a&&w.has(a)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, your own kit under ${n.PATHS.bots}/, and this job's working material under ${n.PATHS.scratch}/.`}return f(c,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${d}; outside it, write only where the user pointed you.`:null}],786025)},704161,e=>{"use strict";var t=e.i(469719);let i=t.z.union([t.z.date(),t.z.iso.datetime()]);e.s(["DateLikeSchema",0,i,"toDate",0,e=>new Date(e)])},260338,e=>{"use strict";var t=e.i(518899),i=e.i(844988),n=e.i(156325);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,i.is)(e,n.Column)?e:String)}])}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__18_teo8._.js.map