thursday-agent 0.1.2 → 0.2.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 (358) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/routes-manifest.json +6 -0
  6. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +13 -13
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +12 -12
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/.next/server/app/api/artifact/route.js +1 -1
  21. package/.next/server/app/api/artifact/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bot/notes/route/app-paths-manifest.json +3 -0
  23. package/.next/server/app/api/bot/notes/route/build-manifest.json +12 -0
  24. package/.next/server/app/api/bot/notes/route/server-reference-manifest.json +4 -0
  25. package/.next/server/app/api/bot/notes/route.js +14 -0
  26. package/.next/server/app/api/bot/notes/route.js.map +5 -0
  27. package/.next/server/app/api/bot/notes/route.js.nft.json +1 -0
  28. package/.next/server/app/api/bot/notes/route_client-reference-manifest.js +3 -0
  29. package/.next/server/app/api/bot/route.js +4 -4
  30. package/.next/server/app/api/bot/route.js.nft.json +1 -1
  31. package/.next/server/app/api/bot/task/[id]/route.js +6 -6
  32. package/.next/server/app/api/bot/task/[id]/route.js.nft.json +1 -1
  33. package/.next/server/app/api/bot/task/route.js +6 -6
  34. package/.next/server/app/api/bot/task/route.js.nft.json +1 -1
  35. package/.next/server/app/api/config/route.js +3 -3
  36. package/.next/server/app/api/config/route.js.nft.json +1 -1
  37. package/.next/server/app/api/events/route.js +1 -1
  38. package/.next/server/app/api/events/route.js.nft.json +1 -1
  39. package/.next/server/app/api/file/[...path]/route.js +1 -1
  40. package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
  41. package/.next/server/app/api/llm-model/catalog/route.js +6 -6
  42. package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
  43. package/.next/server/app/api/llm-model/route.js +3 -3
  44. package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
  45. package/.next/server/app/api/mcp/[name]/route.js +3 -3
  46. package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
  47. package/.next/server/app/api/mcp/oauth/callback/route.js +5 -5
  48. package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
  49. package/.next/server/app/api/mcp/route.js +3 -3
  50. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  51. package/.next/server/app/api/mcp/tools/route.js +3 -3
  52. package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
  53. package/.next/server/app/api/memory/route.js +7 -7
  54. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  55. package/.next/server/app/api/memory/tidy/route.js +10 -11
  56. package/.next/server/app/api/memory/tidy/route.js.nft.json +1 -1
  57. package/.next/server/app/api/skills/[source]/[name]/route.js +1 -1
  58. package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/skills/route.js +1 -1
  60. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  61. package/.next/server/app/api/thursday/call/route.js +8 -8
  62. package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
  63. package/.next/server/app/api/thursday/skills/route.js +8 -8
  64. package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
  65. package/.next/server/app/api/thursday/tool-call/route.js +11 -12
  66. package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
  67. package/.next/server/app/api/workspace/route.js +1 -1
  68. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  69. package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
  70. package/.next/server/app/artifact/[...path]/page.js +3 -3
  71. package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
  72. package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
  73. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  74. package/.next/server/app/page/server-reference-manifest.json +63 -41
  75. package/.next/server/app/page.js +7 -7
  76. package/.next/server/app/page.js.nft.json +1 -1
  77. package/.next/server/app/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app-paths-manifest.json +1 -0
  79. package/.next/server/chunks/0d-b_next_dist_server_app-render_after-task-async-storage_external_0-exn7p.js +3 -0
  80. package/.next/server/chunks/{[root-of-the-server]__0t_dqaj._.js → [root-of-the-server]__0-npkh_._.js} +1 -1
  81. package/.next/server/chunks/[root-of-the-server]__005var5._.js +3 -0
  82. package/.next/server/chunks/[root-of-the-server]__019dx9f._.js +2 -2
  83. package/.next/server/chunks/[root-of-the-server]__02va5wz._.js +3 -0
  84. package/.next/server/chunks/{[root-of-the-server]__1mzp_el._.js → [root-of-the-server]__04_8spk._.js} +2 -2
  85. package/.next/server/chunks/[root-of-the-server]__06t77t4._.js +1 -1
  86. package/.next/server/chunks/[root-of-the-server]__0bed6hu._.js +4 -4
  87. package/.next/server/chunks/[root-of-the-server]__0cro2dz._.js +5 -0
  88. package/.next/server/chunks/[root-of-the-server]__0emr6go._.js +3 -0
  89. package/.next/server/chunks/[root-of-the-server]__0le4d-p._.js +1 -1
  90. package/.next/server/chunks/[root-of-the-server]__0m8ywyo._.js +5 -5
  91. package/.next/server/chunks/{[root-of-the-server]__113fqg5._.js → [root-of-the-server]__0p32jfz._.js} +3 -3
  92. package/.next/server/chunks/[root-of-the-server]__0phdgco._.js +4 -4
  93. package/.next/server/chunks/[root-of-the-server]__0wvgrsl._.js +1 -1
  94. package/.next/server/chunks/[root-of-the-server]__11j52t0._.js +5 -0
  95. package/.next/server/chunks/{[root-of-the-server]__0j_n5l3._.js → [root-of-the-server]__1692zrv._.js} +2 -2
  96. package/.next/server/chunks/[root-of-the-server]__16thabu._.js +1 -1
  97. package/.next/server/chunks/[root-of-the-server]__173nhwf._.js +3 -3
  98. package/.next/server/chunks/[root-of-the-server]__1bn73ih._.js +10 -0
  99. package/.next/server/chunks/[root-of-the-server]__1bqhuh9._.js +4 -4
  100. package/.next/server/chunks/[root-of-the-server]__1ccon1w._.js +10 -0
  101. package/.next/server/chunks/[root-of-the-server]__1cqizfq._.js +1 -1
  102. package/.next/server/chunks/{[root-of-the-server]__1u_qvc7._.js → [root-of-the-server]__1fboj2j._.js} +2 -2
  103. package/.next/server/chunks/{[root-of-the-server]__1dow0bz._.js → [root-of-the-server]__1oli73c._.js} +2 -2
  104. package/.next/server/chunks/[root-of-the-server]__1txedx6._.js +4 -4
  105. package/.next/server/chunks/[root-of-the-server]__1untqv8._.js +5 -0
  106. package/.next/server/chunks/_0-73of8._.js +55 -0
  107. package/.next/server/chunks/{_2050gwn._.js → _00_584r._.js} +66 -28
  108. package/.next/server/chunks/{_0y8is-s._.js → _03a0897._.js} +1 -1
  109. package/.next/server/chunks/_05h2cii._.js +1 -1
  110. package/.next/server/chunks/_06mxlgn._.js +1 -1
  111. package/.next/server/chunks/_0a351g7._.js +1 -1
  112. package/.next/server/chunks/{_0hin38_._.js → _0khihjk._.js} +5 -5
  113. package/.next/server/chunks/_0kjjmag._.js +1 -1
  114. package/.next/server/chunks/{_1t8fv7b._.js → _0n74zsf._.js} +5 -5
  115. package/.next/server/chunks/_0nn99o2._.js +3 -0
  116. package/.next/server/chunks/_0pppbb5._.js +10 -6
  117. package/.next/server/chunks/{_1icgbi8._.js → _0rnf-6n._.js} +5 -5
  118. package/.next/server/chunks/_0u10wmw._.js +55 -0
  119. package/.next/server/chunks/{_0kl37zl._.js → _0vnutv9._.js} +1 -1
  120. package/.next/server/chunks/_0wp4le3._.js +1 -1
  121. package/.next/server/chunks/_0y5fg-x._.js +1 -1
  122. package/.next/server/chunks/_106co2o._.js +3 -0
  123. package/.next/server/chunks/_12bbv5i._.js +10 -6
  124. package/.next/server/chunks/_15hq89o._.js +1 -1
  125. package/.next/server/chunks/_15q1pig._.js +1 -1
  126. package/.next/server/chunks/_18-1wcc._.js +55 -0
  127. package/.next/server/chunks/_19wg5yn._.js +138 -0
  128. package/.next/server/chunks/_1_5mnq4._.js +18 -0
  129. package/.next/server/chunks/_1bt95p9._.js +55 -0
  130. package/.next/server/chunks/_1cbk7ms._.js +9 -9
  131. package/.next/server/chunks/_1drgfx4._.js +18 -0
  132. package/.next/server/chunks/_1drv2et._.js +10 -6
  133. package/.next/server/chunks/{_10qam6o._.js → _1e48czp._.js} +5 -5
  134. package/.next/server/chunks/{_1skgy7b._.js → _1kg70wc._.js} +5 -5
  135. package/.next/server/chunks/_1php4eq._.js +1 -1
  136. package/.next/server/chunks/_1rysr-r._.js +10 -0
  137. package/.next/server/chunks/_1u3rwbr._.js +3 -0
  138. package/.next/server/chunks/_1x7p319._.js +1 -1
  139. package/.next/server/chunks/_1yuv4vp._.js +1 -1
  140. package/.next/server/chunks/_next-internal_server_app_api_bot_notes_route_actions_0qcsyu7.js +3 -0
  141. package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
  142. package/.next/server/chunks/features_bot_task_query_ts_11xuzl3._.js +1 -1
  143. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0228f43._.js → node_modules_consola_dist_chunks_prompt_mjs_02s3hjt._.js} +1 -1
  144. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0ir-vo2._.js → node_modules_consola_dist_chunks_prompt_mjs_06067w6._.js} +1 -1
  145. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0otw8ef._.js → node_modules_consola_dist_chunks_prompt_mjs_096ais_._.js} +1 -1
  146. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0tf290y._.js → node_modules_consola_dist_chunks_prompt_mjs_0a1rd09._.js} +1 -1
  147. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0gzvgfv._.js +3 -0
  148. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0j61-ma._.js +3 -0
  149. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0tvkfgh._.js +3 -0
  150. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_11zjo-1._.js +3 -0
  151. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1pycqsq._.js +3 -0
  152. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1tpvamf._.js +3 -0
  153. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y9-wcr._.js +3 -0
  154. package/.next/server/chunks/ssr/[externals]__0dizgek._.js +3 -0
  155. package/.next/server/chunks/ssr/[root-of-the-server]__0f6s48x._.js +1 -1
  156. package/.next/server/chunks/ssr/[root-of-the-server]__0m1b5ky._.js +3 -0
  157. package/.next/server/chunks/ssr/{[root-of-the-server]__0dfwvr4._.js → [root-of-the-server]__0un-erv._.js} +2 -2
  158. package/.next/server/chunks/ssr/[root-of-the-server]__1-mnhyd._.js +5 -3
  159. package/.next/server/chunks/ssr/[root-of-the-server]__1bww500._.js +3 -0
  160. package/.next/server/chunks/ssr/[root-of-the-server]__1mzi-ju._.js +1 -1
  161. package/.next/server/chunks/ssr/[root-of-the-server]__1qfqvmg._.js +3 -0
  162. package/.next/server/chunks/ssr/[root-of-the-server]__1vcdast._.js +3 -0
  163. package/.next/server/chunks/ssr/[root-of-the-server]__1xwnu-h._.js +3 -0
  164. package/.next/server/chunks/ssr/_03webdr._.js +3 -0
  165. package/.next/server/chunks/ssr/{_0gd4vaa._.js → _040sk32._.js} +71 -29
  166. package/.next/server/chunks/ssr/_077-g6s._.js +1 -1
  167. package/.next/server/chunks/ssr/{_0lc_7c8._.js → _09ja_w1._.js} +2 -2
  168. package/.next/server/chunks/ssr/{_1dcxzqe._.js → _0f_b_9s._.js} +2 -2
  169. package/.next/server/chunks/ssr/_0h7zdni._.js +1 -1
  170. package/.next/server/chunks/ssr/_0lu1n_x._.js +3 -0
  171. package/.next/server/chunks/ssr/_0sf1isi._.js +1 -1
  172. package/.next/server/chunks/ssr/_0su6_08._.js +3 -0
  173. package/.next/server/chunks/ssr/{_0nso8tp._.js → _0w5bgak._.js} +2 -2
  174. package/.next/server/chunks/ssr/{_19_o9d-._.js → _0x_nu5e._.js} +2 -2
  175. package/.next/server/chunks/ssr/_1-teee5._.js +3 -3
  176. package/.next/server/chunks/ssr/_13punpm._.js +1 -1
  177. package/.next/server/chunks/ssr/{_0ay6b01._.js → _1ciyoo3._.js} +2 -2
  178. package/.next/server/chunks/ssr/_1e-dgz0._.js +1 -1
  179. package/.next/server/chunks/ssr/_1fq7zgb._.js +1 -1
  180. package/.next/server/chunks/ssr/{_0cvjbuz._.js → _1g6l4uj._.js} +2 -2
  181. package/.next/server/chunks/ssr/{_0q_2f2x._.js → _1lip4th._.js} +2 -2
  182. package/.next/server/chunks/ssr/_1m3bsfr._.js +3 -0
  183. package/.next/server/chunks/ssr/_1mznrxk._.js +1 -1
  184. package/.next/server/chunks/ssr/_1ruzehw._.js +3 -0
  185. package/.next/server/chunks/ssr/_1vyd1ji._.js +3 -0
  186. package/.next/server/chunks/ssr/features_bot_components_bot-setting_tsx_01ajft6._.js +2 -2
  187. package/.next/server/chunks/ssr/features_config_components_14jqgy4._.js +1 -1
  188. package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
  189. package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
  190. package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +1 -1
  191. package/.next/server/chunks/ssr/lib_realtime_12wg_dd._.js +27 -0
  192. package/.next/server/chunks/ssr/lib_realtime_15h_v1v._.js +27 -0
  193. package/.next/server/chunks/ssr/{node_modules_108wd2o._.js → node_modules_004qlr4._.js} +1 -1
  194. package/.next/server/chunks/ssr/{node_modules_1ub40gk._.js → node_modules_01qnv-a._.js} +1 -1
  195. package/.next/server/chunks/ssr/{node_modules_1y8_3vg._.js → node_modules_04n7mjs._.js} +1 -1
  196. package/.next/server/chunks/ssr/{node_modules_0_j7-g4._.js → node_modules_08d8bke._.js} +1 -1
  197. package/.next/server/chunks/ssr/{node_modules_0y2-av4._.js → node_modules_09xhur7._.js} +1 -1
  198. package/.next/server/chunks/ssr/{node_modules_043-236._.js → node_modules_0_n241r._.js} +1 -1
  199. package/.next/server/chunks/ssr/{node_modules_0ls96je._.js → node_modules_0iz1rzd._.js} +1 -1
  200. package/.next/server/chunks/ssr/{node_modules_0xwx4u-._.js → node_modules_0kl7-tn._.js} +1 -1
  201. package/.next/server/chunks/ssr/{node_modules_1jatz7w._.js → node_modules_0kxz4gt._.js} +1 -1
  202. package/.next/server/chunks/ssr/{node_modules_1t0y5jt._.js → node_modules_0lrjk5t._.js} +1 -1
  203. package/.next/server/chunks/ssr/{node_modules_13f2md6._.js → node_modules_0m93zeg._.js} +1 -1
  204. package/.next/server/chunks/ssr/{node_modules_1nhw9qg._.js → node_modules_0n1kj4p._.js} +1 -1
  205. package/.next/server/chunks/ssr/{node_modules_1k29j1j._.js → node_modules_0ndvxub._.js} +1 -1
  206. package/.next/server/chunks/ssr/{node_modules_16i4o_3._.js → node_modules_13r44jq._.js} +1 -1
  207. package/.next/server/chunks/ssr/{node_modules_0fbw5-u._.js → node_modules_17lrt3y._.js} +1 -1
  208. package/.next/server/chunks/ssr/{node_modules_1d-is1o._.js → node_modules_18_dk7_._.js} +1 -1
  209. package/.next/server/chunks/ssr/{node_modules_1hn_sd5._.js → node_modules_19dp7ko._.js} +1 -1
  210. package/.next/server/chunks/ssr/{node_modules_20ynonm._.js → node_modules_1dwguw_._.js} +1 -1
  211. package/.next/server/chunks/ssr/{node_modules_00d6675._.js → node_modules_1hd-5tv._.js} +1 -1
  212. package/.next/server/chunks/ssr/{node_modules_1ee8gav._.js → node_modules_1hn8z1f._.js} +1 -1
  213. package/.next/server/chunks/ssr/{node_modules_0bue6gy._.js → node_modules_1n5ygqe._.js} +1 -1
  214. package/.next/server/chunks/ssr/{node_modules_1_588_4._.js → node_modules_1q0p85z._.js} +1 -1
  215. package/.next/server/chunks/ssr/{node_modules_0ipn1ho._.js → node_modules_1toafc-._.js} +1 -1
  216. package/.next/server/chunks/ssr/{node_modules_0_fvxnt._.js → node_modules_1xyd7ov._.js} +1 -1
  217. package/.next/server/chunks/ssr/{node_modules_1v0077l._.js → node_modules_1zu988w._.js} +1 -1
  218. package/.next/server/chunks/ssr/{node_modules_06kvvuo._.js → node_modules_20yebtj._.js} +1 -1
  219. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_092s8nx._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0m9a4y0._.js} +1 -1
  220. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1nvexgu._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_13w_wy9._.js} +1 -1
  221. package/.next/server/chunks/ssr/node_modules_consola_dist_chunks_prompt_mjs_05cwqv2._.js +47 -0
  222. package/.next/server/middleware-build-manifest.js +3 -3
  223. package/.next/server/pages/404.html +1 -1
  224. package/.next/server/pages/500.html +1 -1
  225. package/.next/server/server-reference-manifest.js +1 -1
  226. package/.next/server/server-reference-manifest.json +64 -42
  227. package/.next/static/chunks/05b6nx_o3_f_n.js +1 -0
  228. package/.next/static/chunks/{3aquirz5h71da.js → 07kl352c-lvcz.js} +1 -1
  229. package/.next/static/chunks/0dmns-gi0raa4.js +1 -0
  230. package/.next/static/chunks/0oc4_xoia77dg.css +1 -0
  231. package/.next/static/chunks/0pheo8m3a-rzi.js +1 -0
  232. package/.next/static/chunks/{2ihkf6l2jowo9.js → 18vhba44l1fc9.js} +3 -3
  233. package/.next/static/chunks/19i8h2t-5evjx.js +1 -0
  234. package/.next/static/chunks/{1gy3bbv7usnjo.js → 1c5fcj473025q.js} +1 -1
  235. package/.next/static/chunks/1pi_hbmjw-f-z.js +1 -0
  236. package/.next/static/chunks/{0tydnn2kybibk.js → 1twt6k09vg4np.js} +1 -1
  237. package/.next/static/chunks/{21rk8w7bda-su.js → 28gotuisldmom.js} +1 -1
  238. package/.next/static/chunks/{3xxa2j56-f3nm.js → 2998p0y7k1c8z.js} +1 -1
  239. package/.next/static/chunks/2l233xfycjpd8.js +1 -0
  240. package/.next/static/chunks/2p5n7pa3c40t-.js +2 -0
  241. package/.next/static/chunks/2ru1q132af7h7.js +1 -0
  242. package/.next/static/chunks/{2fq_86jvq9ymq.js → 2t8wqycwg3y04.js} +2 -2
  243. package/.next/static/chunks/32z_ypgtchw48.js +1 -0
  244. package/.next/static/chunks/{247d-r95j8xs0.js → 33pyjb3xd1iez.js} +1 -1
  245. package/.next/static/chunks/3786h5vayt80-.js +28 -0
  246. package/.next/static/chunks/3_h9txt3tq8t8.js +28 -0
  247. package/.next/static/chunks/{1khakdu_iuedc.js → 3ard_noqapnw1.js} +1 -1
  248. package/.next/static/chunks/{1fr5m75pwtyic.js → 3omud5xunrk1f.js} +1 -1
  249. package/.next/static/chunks/42dnrkbph9e-1.js +1 -0
  250. package/app/api/events/app-event.client.ts +24 -0
  251. package/app/api/events/app-event.server.ts +45 -0
  252. package/app/api/events/app-event.ts +44 -0
  253. package/app/api/llm-model/catalog/route.ts +12 -0
  254. package/app/api/llm-model/route.ts +21 -0
  255. package/app/api/query-key.ts +144 -0
  256. package/app/api/thursday/tool-call/route.ts +67 -0
  257. package/components/ui/button-group.tsx +45 -0
  258. package/components/ui/custom-icon.tsx +259 -0
  259. package/components/ui/dropdown-menu.tsx +271 -0
  260. package/components/ui/folded-text.tsx +68 -0
  261. package/components/ui/input-group.tsx +157 -0
  262. package/components/ui/json-view.tsx +240 -0
  263. package/components/ui/shiny-text.tsx +141 -0
  264. package/components/ui/text-type.tsx +213 -0
  265. package/components/ui/theme-sync.tsx +9 -0
  266. package/database/migrations/{20260908030742_rainy_marvel_zombies → 20260909060813_optimal_sabretooth}/migration.sql +7 -0
  267. package/database/migrations/{20260908030742_rainy_marvel_zombies → 20260909060813_optimal_sabretooth}/snapshot.json +54 -1
  268. package/database/migrations/20260909063821_bitter_tenebrous/migration.sql +1 -0
  269. package/database/migrations/20260909063821_bitter_tenebrous/snapshot.json +1285 -0
  270. package/docs/how-it-works.md +59 -0
  271. package/docs/images/keeps-going.png +0 -0
  272. package/docs/images/task-thread.png +0 -0
  273. package/docs/images/two-minds.png +0 -0
  274. package/features/ai/load-tools.ts +55 -5
  275. package/features/ai/prompts/bot.prompt.ts +121 -26
  276. package/features/ai/prompts/memory-tidy.prompt.ts +7 -1
  277. package/features/ai/prompts/prompt-helper.ts +31 -5
  278. package/features/ai/prompts/thursday.prompt.ts +2 -0
  279. package/features/ai/tools/bot.tool.ts +37 -18
  280. package/features/ai/tools/mcp.tool.ts +5 -5
  281. package/features/ai/tools/memory.tool.ts +17 -10
  282. package/features/ai/tools/studio.tool.ts +5 -5
  283. package/features/ai/tools/tool-name.ts +2 -0
  284. package/features/ai/tools/workspace.tool.ts +33 -5
  285. package/features/bot/bot.action.ts +31 -4
  286. package/features/bot/bot.notes.ts +120 -0
  287. package/features/bot/bot.query.ts +56 -1
  288. package/features/bot/bot.run.ts +43 -3
  289. package/features/bot/bot.runner.ts +94 -20
  290. package/features/bot/bot.schema.ts +17 -0
  291. package/features/bot/components/bot-room.tsx +405 -306
  292. package/features/bot/components/bot-setting.tsx +123 -20
  293. package/features/bot/task.query.ts +18 -5
  294. package/features/memory/components/memory-setting.tsx +11 -2
  295. package/features/memory/memory.query.ts +9 -2
  296. package/features/memory/memory.schema.ts +30 -0
  297. package/features/skills/components/skills-setting.tsx +9 -1
  298. package/features/workspace/workspace.ts +136 -3
  299. package/hooks/use-draft.ts +37 -0
  300. package/hooks/use-hotkey.ts +105 -0
  301. package/hooks/use-object-state.ts +51 -0
  302. package/hooks/use-on-visible.ts +72 -0
  303. package/hooks/use-theme.ts +106 -0
  304. package/hooks/use-wake-word.ts +262 -0
  305. package/lib/realtime/realtime.driver.ts +34 -1
  306. package/lib/realtime/realtime.protocol.ts +6 -0
  307. package/lib/sandbox.ts +9 -1
  308. package/lib/tokens.ts +19 -0
  309. package/package.json +1 -1
  310. package/.next/server/chunks/[root-of-the-server]__02kt8yn._.js +0 -10
  311. package/.next/server/chunks/[root-of-the-server]__0h59di-._.js +0 -5
  312. package/.next/server/chunks/[root-of-the-server]__0qjqtwo._.js +0 -5
  313. package/.next/server/chunks/[root-of-the-server]__0yk6s3w._.js +0 -5
  314. package/.next/server/chunks/[root-of-the-server]__0z3gelv._.js +0 -3
  315. package/.next/server/chunks/[root-of-the-server]__11w_7_3._.js +0 -3
  316. package/.next/server/chunks/[root-of-the-server]__1_0q_9w._.js +0 -3
  317. package/.next/server/chunks/[root-of-the-server]__1gmn1cs._.js +0 -10
  318. package/.next/server/chunks/_0fzqt2y._.js +0 -100
  319. package/.next/server/chunks/_0jgm3b8._.js +0 -55
  320. package/.next/server/chunks/_0ks6_sg._.js +0 -55
  321. package/.next/server/chunks/_0tzfesa._.js +0 -3
  322. package/.next/server/chunks/_0zmestz._.js +0 -55
  323. package/.next/server/chunks/_12nr4xc._.js +0 -3
  324. package/.next/server/chunks/_1hzrsvg._.js +0 -55
  325. package/.next/server/chunks/_1uj4_io._.js +0 -10
  326. package/.next/server/chunks/_1yldgo4._.js +0 -55
  327. package/.next/server/chunks/features_0scmr4i._.js +0 -3
  328. package/.next/server/chunks/features_bot_bot_query_ts_12mgkl2._.js +0 -3
  329. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0ykklj0._.js +0 -3
  330. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1ryg3wh._.js +0 -3
  331. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1vwbnq_._.js +0 -3
  332. package/.next/server/chunks/ssr/[root-of-the-server]__01id-v3._.js +0 -3
  333. package/.next/server/chunks/ssr/[root-of-the-server]__0b-0i32._.js +0 -3
  334. package/.next/server/chunks/ssr/[root-of-the-server]__185grso._.js +0 -3
  335. package/.next/server/chunks/ssr/[root-of-the-server]__1minz8_._.js +0 -3
  336. package/.next/server/chunks/ssr/_0j4v8of._.js +0 -3
  337. package/.next/server/chunks/ssr/_0l81bzy._.js +0 -3
  338. package/.next/server/chunks/ssr/_10uvw3l._.js +0 -3
  339. package/.next/server/chunks/ssr/_1jbv7m1._.js +0 -3
  340. package/.next/server/chunks/ssr/lib_realtime_0aetuyp._.js +0 -24
  341. package/.next/server/chunks/ssr/lib_realtime_18k_aj-._.js +0 -24
  342. package/.next/server/chunks/ssr/node_modules_zod_v4_classic_errors_05xv7vp.js +0 -3
  343. package/.next/static/chunks/0yysv1gzin17t.js +0 -1
  344. package/.next/static/chunks/1keib_gt066gc.js +0 -1
  345. package/.next/static/chunks/28g42tw8tsvhd.js +0 -1
  346. package/.next/static/chunks/2cwjgkt_hoyhj.js +0 -22
  347. package/.next/static/chunks/2rbf1fpd8n80-.js +0 -22
  348. package/.next/static/chunks/2ukj8k69y89um.js +0 -1
  349. package/.next/static/chunks/2wngeetfnzxkp.js +0 -2
  350. package/.next/static/chunks/388-t2v72jh39.css +0 -1
  351. package/.next/static/chunks/3fqvc0cg-atq_.js +0 -1
  352. package/.next/static/chunks/3p4egvfjxpatb.js +0 -1
  353. package/.next/static/chunks/3qe1w1ei-huhl.js +0 -1
  354. package/.next/static/chunks/3y40riycdip-i.js +0 -1
  355. package/.next/static/chunks/45a6zbtkelph9.js +0 -1
  356. /package/.next/static/{X34BUd9bfdH27ripuwwBm → YR4NWcDDuzwLbTTU7U7Vr}/_buildManifest.js +0 -0
  357. /package/.next/static/{X34BUd9bfdH27ripuwwBm → YR4NWcDDuzwLbTTU7U7Vr}/_clientMiddlewareManifest.js +0 -0
  358. /package/.next/static/{X34BUd9bfdH27ripuwwBm → YR4NWcDDuzwLbTTU7U7Vr}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
- module.exports=[874533,(e,t,a)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,a)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},380690,e=>{"use strict";let t,a,r,n,i,o;var s,l=e.i(687388),c=e.i(640911);let d={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},h=globalThis,u=h.__appEvents??=(t=new Set,{emit(e){for(let a of[...t])try{a(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),m=h.__presence??=(s=l.BROWSER_GONE_MS,a=!1,r=null,n=new Set,i=new Set,o=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return a},track(e){if(e>0){r&&clearTimeout(r),r=null,a||(a=!0,o(i));return}!r&&a&&(r=setTimeout(()=>{r=null,a=!1,o(n)},s))},onGone:e=>(n.add(e),()=>n.delete(e)),onBack:e=>(i.add(e),()=>i.delete(e))}),p=h.__appEventStream??=function(e,t={}){let a=new TextEncoder,r=t.heartbeatMs??2e4,n=0;return{respond:(i,o)=>{let s=()=>{};return new Response(new ReadableStream({async start(l){let d=!1,h=new Map,u=[],m=e=>{if(!d)try{l.enqueue(a.encode(e))}catch{s()}},p=e=>m(`data: ${JSON.stringify(e)}
1
+ module.exports=[874533,(e,t,a)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},912714,(e,t,a)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},380690,e=>{"use strict";let t,a,n,r,i,o;var s,l=e.i(687388),c=e.i(640911);let d={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},h=globalThis,u=h.__appEvents??=(t=new Set,{emit(e){for(let a of[...t])try{a(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),m=h.__presence??=(s=l.BROWSER_GONE_MS,a=!1,n=null,r=new Set,i=new Set,o=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return a},track(e){if(e>0){n&&clearTimeout(n),n=null,a||(a=!0,o(i));return}!n&&a&&(n=setTimeout(()=>{n=null,a=!1,o(r)},s))},onGone:e=>(r.add(e),()=>r.delete(e)),onBack:e=>(i.add(e),()=>i.delete(e))}),p=h.__appEventStream??=function(e,t={}){let a=new TextEncoder,n=t.heartbeatMs??2e4,r=0;return{respond:(i,o)=>{let s=()=>{};return new Response(new ReadableStream({async start(l){let d=!1,h=new Map,u=[],m=e=>{if(!d)try{l.enqueue(a.encode(e))}catch{s()}},p=e=>m(`data: ${JSON.stringify(e)}
2
2
 
3
- `),w=e=>{let a=t.coalesce?.keyOf(e)??null;if(null===a)return p(e);let r=h.get(a);r&&clearTimeout(r),h.set(a,setTimeout(()=>{h.delete(a),p(e)},t.coalesce?.ms))},f=e.subscribe(e=>u?u.push(e):w(e)),g=setInterval(()=>m(": ping\n\n"),r);n+=1,t.onWatchers?.(n),s=()=>{if(!d){for(let e of(d=!0,n-=1,t.onWatchers?.(n),f(),clearInterval(g),h.values()))clearTimeout(e);try{l.close()}catch{}}},i.addEventListener("abort",s);try{for(let e of await o?.()??[])p(e)}catch(e){c.logger.error("event stream opening failed",e),s();return}let b=u;for(let e of(u=null,b))w(e)},cancel(){s()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return n}}}(u,{coalesce:{ms:150,keyOf:e=>e.type in d?e.type:null},onWatchers:m.track}),w=h.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,w,"appEventStream",0,p,"appEvents",0,u],380690)},316172,e=>{"use strict";var t=e.i(912714),a=e.i(847841),r=e.i(907855),n=e.i(353885),i=e.i(629668),o=e.i(786025);let s={name:n.TOOL_NAMES.delegate,description:"Hand a job to a bot. Returns immediately; the job runs in the background and its result is put in front of you later.",parameters:r.object({bot:r.string().describe("A name from the bot list."),request:r.string().describe("The whole job. The bot cannot hear the call, so everything it needs goes here — names, paths, what the user actually asked for — in their own language and their own words: it is the only language the bot has, and whatever it writes comes back to them. **Their request, never your reading of it**: a condition, a caution or a smaller goal they did not say is how a job comes back as the wrong thing. When their words leave a real choice open, ask them on the call and put the answer here."),label:r.string().describe("Two or three words naming the job, in the user's language. Used on screen and said out loud.")})},l={name:n.TOOL_NAMES.ask_bot,description:"Hand one part of the job you are holding to another bot and wait for what they bring back. The job stays yours.",parameters:r.object({bot:r.string().describe("A name from the bot list."),request:r.string().describe("The part they take, as a brief: the outcome you want, the shape to hand it back in (a path, a number, a list), and every name, path, number and limit that bears on it. They see nothing but this and `context` — not the call, not your thread — so write it long rather than short; a brief that leaves them guessing costs a whole run."),context:r.string().describe("The job you were given, quoted, and whatever you have found that bears on this part — exact values, and the paths of files you wrote for them to read. They cannot see your work, your tool output, or the call.")})},c={name:n.TOOL_NAMES.ask_back,description:"Ask the bot that handed you this part. They answer from what they have — the original request, the call it came from, what they found before asking you.",parameters:r.object({question:r.string().describe("One whole question — what you need and why. They cannot take it to the user for you, so ask what they would know.")})},d={name:n.TOOL_NAMES.ask_thursday,description:"Ask Thursday, who handed you this job. The job stops until an answer comes back.",parameters:r.object({question:r.string().describe("One whole question — what you need and why. One or two sentences, in the user's language: she may read it to them out loud, options and all."),options:r.union([r.string().array(),r.string()]).nullable().describe('Only when there really are choices — two or three, each short, as an array: ["Signed in", "Not yet"]. Null for an open question.')})},h={name:n.TOOL_NAMES.report,description:"Hand back what the job produced. Calling this ends the job — nothing after it runs.",parameters:r.object({result:r.string().describe("The result itself, in a few lines what you found or did, not a replay of how. Thursday reads this out loud, so write what a person needs to hear. If you could not do it, say what stopped you."),complete:r.boolean().describe("True when the whole request is done. False when work is left over — the user is then asked whether to keep going, and `result` is what they decide on.")})},u={name:n.TOOL_NAMES.task,description:"Check a job you handed over, answer what it is asking, or cancel it.",parameters:r.object({action:r.enum(["status","answer","cancel"]),task:r.string().nullable().describe("The job, by its label or by the handle a past call's transcript carries. With `status`: null for every job in one line each — that is the list — or name one to get its report in full."),answer:r.string().nullable().describe("With `answer`: what to tell the bot — the answer to its question, a course correction for a job still running, or what to do next on one that finished.")})},m=(0,a.tool)({description:d.description,inputSchema:d.parameters}),p=(0,a.tool)({description:h.description,inputSchema:h.parameters,execute:async({result:e,complete:t})=>{let a=await f(e);return a.length?`${w} these files do not exist — ${a.join(", ")}. Write them first, or take the paths out of the result.`:t?"Handed back. The job is closed; nothing further runs.":"Handed back as unfinished. The user decides whether to continue."}}),w="Not handed back:";async function f(e){let a=[];for(let r of(0,i.pathsIn)(e)){let e=await (0,o.insideWorkspace)(r);e&&(await (0,t.stat)(e).then(e=>e.isFile(),()=>!1)||a.push(r))}return a}e.s(["askBackSpec",0,c,"askBotSpec",0,l,"askThursdayTool",0,m,"delegateSpec",0,s,"reportAccepted",0,e=>"string"!=typeof e||!e.startsWith(w),"reportTool",0,p,"taskSpec",0,u])},353885,e=>{"use strict";e.s(["STUDIO_TOOLS",0,{generate_image:"generate_image",generate_speech:"generate_speech",transcribe:"transcribe",generate_video:"generate_video"},"TOOL_NAMES",0,{memory_recall:"memory_recall",memory_remember:"memory_remember",memory_forget:"memory_forget",memory_show:"memory_show",bash:"bash",write_file:"write_file",tool_search:"tool_search",tool_call:"tool_call",load_skill:"load_skill",web_search:"web_search",delegate:"delegate",task:"task",ask_bot:"ask_bot",ask_thursday:"ask_thursday",ask_back:"ask_back",report:"report",end_call:"end_call",tidy_done:"tidy_done"}])},629668,e=>{"use strict";var t=e.i(687388);let a=e=>`text/${e}; charset=utf-8`,r={md:{kind:"markdown",mime:a("markdown")},markdown:{kind:"markdown",mime:a("markdown")},csv:{kind:"csv",mime:a("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:a("plain")},log:{kind:"text",mime:a("plain")},html:{kind:"frame",mime:a("html")},htm:{kind:"frame",mime:a("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:a("css")},js:{kind:"none",mime:a("javascript")},woff2:{kind:"none",mime:"font/woff2"}},n=e=>e.split(".").pop()?.toLowerCase()??"",i=new Set(["node_modules","__pycache__"]),o=Object.entries(r).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(".")&&!i.has(e),"mimeOf",0,e=>r[n(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),a=new Set;for(let e of t.match(s)??[]){let t=function(e){let t,a,r=(a=(t=e.trim()).indexOf(l))>=0?t.slice(a+l.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!r)return null;let[n,...i]=r.split("/");return i.length&&n.includes(".")?null:r}(e);t&&a.add(t)}return[...a].slice(0,6)},"viewKindOf",0,e=>r[n(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(687388);e.i(640911);var n=e.i(874533);let i=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function o(e,r,n,i){if(e.length<=i.max)return e;let o=(0,a.join)(n,i.dir),s=(0,a.join)(o,`${new Date().toISOString().replace(/[:.]/g,"-")}-${r.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,a.relative)(n,s)||s}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,i.head).trimEnd()}
3
+ `),w=e=>{let a=t.coalesce?.keyOf(e)??null;if(null===a)return p(e);let n=h.get(a);n&&clearTimeout(n),h.set(a,setTimeout(()=>{h.delete(a),p(e)},t.coalesce?.ms))},f=e.subscribe(e=>u?u.push(e):w(e)),g=setInterval(()=>m(": ping\n\n"),n);r+=1,t.onWatchers?.(r),s=()=>{if(!d){for(let e of(d=!0,r-=1,t.onWatchers?.(r),f(),clearInterval(g),h.values()))clearTimeout(e);try{l.close()}catch{}}},i.addEventListener("abort",s);try{for(let e of await o?.()??[])p(e)}catch(e){c.logger.error("event stream opening failed",e),s();return}let y=u;for(let e of(u=null,y))w(e)},cancel(){s()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return r}}}(u,{coalesce:{ms:150,keyOf:e=>e.type in d?e.type:null},onWatchers:m.track}),w=h.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,w,"appEventStream",0,p,"appEvents",0,u],380690)},316172,e=>{"use strict";var t=e.i(912714),a=e.i(847841),n=e.i(907855),r=e.i(353885),i=e.i(629668),o=e.i(786025);let s={name:r.TOOL_NAMES.delegate,description:"Hand a job to a bot. Returns immediately; the job runs in the background and its result is put in front of you later.",parameters:n.object({bot:n.string().describe("A name from the bot list."),request:n.string().describe("The whole job. The bot cannot hear the call, so everything it needs goes here — names, paths, what the user actually asked for — in their own language and their own words: it is the only language the bot has, and whatever it writes comes back to them. **Their request, never your reading of it**: a condition, a caution or a smaller goal they did not say is how a job comes back as the wrong thing. When their words leave a real choice open, ask them on the call and put the answer here."),label:n.string().describe("Two or three words naming the job, in the user's language. Used on screen and said out loud.")})},l={name:r.TOOL_NAMES.ask_bot,description:"Hand one part of the job you are holding to another bot and wait for what they bring back. The job stays yours.",parameters:n.object({bot:n.string().describe("A name from the bot list."),request:n.string().describe("The part they take, as a brief: the outcome you want, the shape to hand it back in (a path, a number, a list), and every name, path, number and limit that bears on it. They see nothing but this and `context` — not the call, not your thread — so write it long rather than short; a brief that leaves them guessing costs a whole run."),context:n.string().describe("The job you were given, quoted, and whatever you have found that bears on this part — exact values, and the paths of files you wrote for them to read. They cannot see your work, your tool output, or the call.")})},c={name:r.TOOL_NAMES.ask_back,description:"Ask the bot that handed you this part. They answer from what they have — the original request, the call it came from, what they found before asking you.",parameters:n.object({question:n.string().describe("One whole question — what you need and why. They cannot take it to the user for you, so ask what they would know.")})},d={name:r.TOOL_NAMES.ask_thursday,description:"Ask Thursday, who handed you this job. The job stops until an answer comes back.",parameters:n.object({question:n.string().describe("One whole question — what you need and why. One or two sentences, in the user's language: she may read it to them out loud, options and all."),options:n.union([n.string().array(),n.string()]).nullish().describe('Only when there really are choices — two or three, each short, as an array: ["Signed in", "Not yet"]. Null for an open question.')})},h=n.string().nullish().describe("What should change in your own instructions before your next job here something to add, something wrong to correct, something to drop. Your own words, any length; someone else writes it in. Nothing to say is the usual answer, and leaving it out costs nothing: they already say what they say."),u={name:r.TOOL_NAMES.task,description:"Check a job you handed over, answer what it is asking, or cancel it.",parameters:n.object({action:n.enum(["status","answer","cancel"]),task:n.string().nullish().describe("The job, by its label or by the handle a past call's transcript carries. With `status`: null for every job in one line each — that is the list — or name one to get its report in full."),answer:n.string().nullish().describe("With `answer`: what to tell the bot — the answer to its question, a course correction for a job still running, or what to do next on one that finished.")})},m=(0,a.tool)({description:d.description,inputSchema:d.parameters}),p="Not handed back:";async function w(e){let a=[];for(let n of(0,i.pathsIn)(e)){let e=await (0,o.insideWorkspace)(n);e&&(await (0,t.stat)(e).then(e=>e.isFile(),()=>!1)||a.push(n))}return a}e.s(["askBackSpec",0,c,"askBotSpec",0,l,"askThursdayTool",0,m,"createReportTool",0,e=>{let t={name:r.TOOL_NAMES.report,description:"Hand back what the job produced. Calling this ends the job — nothing after it runs.",parameters:n.object({result:n.string().describe("The result itself, in a few lines — what you found or did, not a replay of how. Thursday reads this out loud, so write what a person needs to hear. If you could not do it, say what stopped you."),complete:n.boolean().describe("True when the whole request is done. False when work is left over — the user is then asked whether to keep going, and `result` is what they decide on."),...e?{notes:h}:{}})};return(0,a.tool)({description:t.description,inputSchema:t.parameters,execute:async({result:e,complete:t})=>{let a=await w(e);return a.length?`${p} these files do not exist — ${a.join(", ")}. Write them first, or take the paths out of the result.`:t?"Handed back. The job is closed; nothing further runs.":"Handed back as unfinished. The user decides whether to continue."}})},"delegateSpec",0,s,"reportAccepted",0,e=>"string"!=typeof e||!e.startsWith(p),"taskSpec",0,u])},353885,e=>{"use strict";e.s(["STUDIO_TOOLS",0,{generate_image:"generate_image",generate_speech:"generate_speech",transcribe:"transcribe",generate_video:"generate_video"},"TOOL_NAMES",0,{memory_recall:"memory_recall",memory_remember:"memory_remember",memory_forget:"memory_forget",memory_show:"memory_show",bash:"bash",write_file:"write_file",tool_search:"tool_search",tool_call:"tool_call",load_skill:"load_skill",web_search:"web_search",delegate:"delegate",task:"task",ask_bot:"ask_bot",ask_thursday:"ask_thursday",ask_back:"ask_back",report:"report",end_call:"end_call",tidy_done:"tidy_done",update_notes:"update_notes"}])},629668,e=>{"use strict";var t=e.i(687388);let a=e=>`text/${e}; charset=utf-8`,n={md:{kind:"markdown",mime:a("markdown")},markdown:{kind:"markdown",mime:a("markdown")},csv:{kind:"csv",mime:a("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:a("plain")},log:{kind:"text",mime:a("plain")},html:{kind:"frame",mime:a("html")},htm:{kind:"frame",mime:a("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:a("css")},js:{kind:"none",mime:a("javascript")},woff2:{kind:"none",mime:"font/woff2"}},r=e=>e.split(".").pop()?.toLowerCase()??"",i=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(".")&&!i.has(e),"mimeOf",0,e=>n[r(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),a=new Set;for(let e of t.match(s)??[]){let t=function(e){let t,a,n=(a=(t=e.trim()).indexOf(l))>=0?t.slice(a+l.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!n)return null;let[r,...i]=n.split("/");return i.length&&r.includes(".")?null:n}(e);t&&a.add(t)}return[...a].slice(0,6)},"viewKindOf",0,e=>n[r(e)]?.kind??"none"])},786025,211644,e=>{"use strict";var t=e.i(912714),a=e.i(750227),n=e.i(687388);e.i(640911);var r=e.i(874533);let i=18e4,o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]),s=({workingDirectory:e,spill:n,toolPath:s})=>{let c=(0,a.resolve)(e),d=(s??[]).filter(Boolean).join(":"),h=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,a.resolve)(c,e);async function*u(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,a.join)(e,t.name);t.isDirectory()?yield*u(n):t.isFile()&&(yield n)}}return{cwd:c,resolve:h,readFile:(e,a)=>(0,t.readFile)(h(e),a),async writeFile(e,n){let r=h(e);await (0,t.mkdir)((0,a.join)(r,".."),{recursive:!0}),await (0,t.writeFile)(r,n)},readdir:(e,a)=>(0,t.readdir)(h(e),a),fold:(e,t="output")=>l(e,t,c,n),async glob(e,{path:t=".",limit:n=200}={}){let r=h(t),i=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of u(r)){let t=(0,a.relative)(r,e).split(a.sep).join("/");if((i.test(t)||i.test(e))&&o.push(e),o.length>=n)break}return o},exec:(e,{cwd:t,timeoutMs:a=i,signal:o,env:s}={})=>new Promise(i=>{let u=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&&(u.PATH=`${u.PATH??""}:${d}`);let m=(0,r.spawn)(e,{shell:!0,cwd:t?h(t):c,env:{...u,...s},detached:!0}),p="",w="";m.stdout?.on("data",e=>p+=e),m.stderr?.on("data",e=>w+=e);let f=e=>{w+=`
4
+ [${e}]`;try{m.pid&&process.kill(-m.pid,"SIGTERM")}catch{m.kill("SIGTERM")}},g=setTimeout(()=>f(`Timed out after ${a}ms`),a),y=()=>f("Aborted");o?.aborted?y():o?.addEventListener("abort",y,{once:!0});let b=async e=>{clearTimeout(g),o?.removeEventListener("abort",y),i({...e,stdout:await l(e.stdout,"stdout",c,n),stderr:await l(e.stderr,"stderr",c,n)})};m.on("close",e=>b({stdout:p,stderr:w,exitCode:e??-1})),m.on("error",e=>b({stdout:p,stderr:w+String(e),exitCode:-1}))})}};async function l(e,n,r,i){if(e.length<=i.max)return e;let o=(0,a.join)(r,i.dir),s=(0,a.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,a.relative)(r,s)||s}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,i.head).trimEnd()}
4
5
 
5
- [${r} cut at ${i.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
6
+ [${n} cut at ${i.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
6
7
 
7
- ${e.slice(-i.tail).trimStart()}`}let s=r.APP_DIR,l=(0,a.join)(r.DATA_DIR,r.PATHS.workspace),c=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,a.join)(s,"node_modules",".bin")]).filter(Boolean),d=(0,a.join)(l,r.PATHS.artifacts),h=[r.PATHS.artifacts,r.PATHS.projects,r.PATHS.scratch],u=new Set([...h,".agents"]),m=(e,t)=>t===e||t.startsWith(e+a.sep),p=e=>(0,t.realpath)(e).catch(()=>null);async function w(e){let t=await p(l)??l,r=(0,a.resolve)(l,e);if(!m(l,r))return null;let n=r,i=await p(n);for(;null===i&&(0,a.dirname)(n)!==n;)n=(0,a.dirname)(n),i=await p(n);if(null===i)return null;let o=(0,a.relative)(n,r),s=o?(0,a.join)(i,o):i;return m(t,s)?s:null}let f=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:r.BROWSER_VIEWPORT}:{};async function g(e){let t=await k();await t.exec("playwright-cli close",{env:f(e),timeoutMs:15e3}).catch(()=>{}),await b()}async function b(){let e=(0,a.join)(l,".playwright-cli"),r=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),n=Date.now()-36e5;for(let i of r){if(!i.isFile())continue;let r=(0,a.join)(e,i.name),o=await (0,t.stat)(r).catch(()=>null);o&&o.mtimeMs<n&&await (0,t.unlink)(r).catch(()=>{})}}let y={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function k(){for(let e of h)await (0,t.mkdir)((0,a.join)(l,e),{recursive:!0});for(let[e,r]of Object.entries(y))await (0,t.writeFile)((0,a.join)(l,e),r,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:r,toolPath:s})=>{let l=(0,a.resolve)(e),c=(s??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,a.resolve)(l,e);async function*h(e){let r;try{r=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of r){if(i.has(t.name)||t.name.startsWith("."))continue;let r=(0,a.join)(e,t.name);t.isDirectory()?yield*h(r):t.isFile()&&(yield r)}}return{cwd:l,resolve:d,readFile:(e,a)=>(0,t.readFile)(d(e),a),async writeFile(e,r){let n=d(e);await (0,t.mkdir)((0,a.join)(n,".."),{recursive:!0}),await (0,t.writeFile)(n,r)},readdir:(e,a)=>(0,t.readdir)(d(e),a),fold:(e,t="output")=>o(e,t,l,r),async glob(e,{path:t=".",limit:r=200}={}){let n=d(t),i=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of h(n)){let t=(0,a.relative)(n,e).split(a.sep).join("/");if((i.test(t)||i.test(e))&&o.push(e),o.length>=r)break}return o},exec:(e,{cwd:t,timeoutMs:a=18e4,signal:i,env:s}={})=>new Promise(h=>{let u=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&&(u.PATH=`${u.PATH??""}:${c}`);let m=(0,n.spawn)(e,{shell:!0,cwd:t?d(t):l,env:{...u,...s},detached:!0}),p="",w="";m.stdout?.on("data",e=>p+=e),m.stderr?.on("data",e=>w+=e);let f=e=>{w+=`
8
- [${e}]`;try{m.pid&&process.kill(-m.pid,"SIGTERM")}catch{m.kill("SIGTERM")}},g=setTimeout(()=>f(`Timed out after ${a}ms`),a),b=()=>f("Aborted");i?.aborted?b():i?.addEventListener("abort",b,{once:!0});let y=async e=>{clearTimeout(g),i?.removeEventListener("abort",b),h({...e,stdout:await o(e.stdout,"stdout",l,r),stderr:await o(e.stderr,"stderr",l,r)})};m.on("close",e=>y({stdout:p,stderr:w,exitCode:e??-1})),m.on("error",e=>y({stdout:p,stderr:w+String(e),exitCode:-1}))})}})({workingDirectory:l,spill:{dir:r.PATHS.output,...r.TOOL_OUTPUT},toolPath:c})}e.s(["ARTIFACTS",0,d,"closeJobShell",0,g,"insideWorkspace",0,w,"jobShellEnv",0,f,"openWorkspace",0,k,"writeRefusal",0,function(e){if(m(l,e)){let t=(0,a.relative)(l,e),[n]=t.split(a.sep);return n&&u.has(n)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${r.PATHS.artifacts}/, code under ${r.PATHS.projects}/, everything else under ${r.PATHS.scratch}/.`}return m(s,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${l}; outside it, write only where the user pointed you.`:null}],786025)},260338,e=>{"use strict";var t=e.i(518899),a=e.i(844988),r=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,a.is)(e,r.Column)?e:String)}])}];
8
+ ${e.slice(-i.tail).trimStart()}`}e.s(["EXEC_TIMEOUT_MS",0,i,"createSandBox",0,s],211644);let c=n.APP_DIR,d=(0,a.join)(n.DATA_DIR,n.PATHS.workspace),h=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,a.join)(c,"node_modules",".bin")]).filter(Boolean),u=(0,a.join)(d,n.PATHS.artifacts),m=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],p=new Set([...m,".agents"]),w=(e,t)=>t===e||t.startsWith(e+a.sep),f=e=>(0,t.realpath)(e).catch(()=>null);async function g(e){let t=await f(d)??d,n=(0,a.resolve)(d,e);if(!w(d,n))return null;let r=n,i=await f(r);for(;null===i&&(0,a.dirname)(r)!==r;)r=(0,a.dirname)(r),i=await f(r);if(null===i)return null;let o=(0,a.relative)(r,n),s=o?(0,a.join)(i,o):i;return w(t,s)?s:null}async function y(e){let r=`${n.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;return await (0,t.mkdir)((0,a.join)(d,r),{recursive:!0}),r}async function b(e,r){let i,o=(i=r.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,a.join)(d,o),{recursive:!0}),o}let k=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},_={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function T(e){let t=Object.values(_).flat(),{stdout:a}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),n=new Set(a.trim().split(/\s+/).filter(Boolean)),r=e=>({found:e.filter(e=>n.has(e)),missing:e.filter(e=>!n.has(e))});return{runtimes:r(_.runtimes),managers:r(_.managers),browser:null}}async function v(e){let t=await E();await t.exec("playwright-cli close",{env:k(e),timeoutMs:15e3}).catch(()=>{}),await A(),await S()}async function S(){let e=(0,a.join)(d,n.PATHS.output),r=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),i=Date.now()-j;for(let n of r){if(!n.isFile())continue;let r=(0,a.join)(e,n.name),o=await (0,t.stat)(r).catch(()=>null);o&&o.mtimeMs<i&&await (0,t.unlink)(r).catch(()=>{})}}let j=864e5;async function A(){let e=(0,a.join)(d,".playwright-cli"),n=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),r=Date.now()-36e5;for(let i of n){if(!i.isFile())continue;let n=(0,a.join)(e,i.name),o=await (0,t.stat)(n).catch(()=>null);o&&o.mtimeMs<r&&await (0,t.unlink)(n).catch(()=>{})}}let O={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function E(){for(let e of m)await (0,t.mkdir)((0,a.join)(d,e),{recursive:!0});for(let[e,n]of Object.entries(O))await (0,t.writeFile)((0,a.join)(d,e),n,{flag:"wx"}).catch(()=>{});return s({workingDirectory:d,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:h})}e.s(["ARTIFACTS",0,u,"closeJobShell",0,v,"insideWorkspace",0,g,"jobShellEnv",0,k,"openBotFolder",0,y,"openJobScratch",0,b,"openWorkspace",0,E,"readMachineTools",0,T,"writeRefusal",0,function(e){if(w(d,e)){let t=(0,a.relative)(d,e),[r]=t.split(a.sep);return r&&p.has(r)?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 w(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)},260338,e=>{"use strict";var t=e.i(518899),a=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,a.is)(e,n.Column)?e:String)}])}];
9
9
 
10
10
  //# sourceMappingURL=%5Broot-of-the-server%5D__0m8ywyo._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[70729,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_crypto_1kn79-7._.js"].map(t=>e.l(t))).then(()=>t(666680)))},320728,e=>e.a(async(t,a)=>{try{var r=e.i(105303),n=e.i(41444),i=t([r]);async function o(e){let t=new URL(e.url).searchParams,a=t.get("error");if(a){let e=t.get("error_description");return s("Authorization failed",e?`${a}: ${e}`:a)}try{let e=await r.mcpManager.finishAuthorization(t);return s("Connected",`"${e}" is ready.`,{autoClose:!0})}catch(t){let e=(0,n.errorToString)(t);return s("Authorization failed",e)}}function s(e,t,{autoClose:a=!1}={}){let r=`<!doctype html>
1
+ module.exports=[233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},522734,(e,t,a)=>{t.exports=e.x("fs",()=>require("fs"))},70729,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_crypto_1kn79-7._.js"].map(t=>e.l(t))).then(()=>t(666680)))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},320728,e=>e.a(async(t,a)=>{try{var r=e.i(105303),n=e.i(41444),i=t([r]);async function o(e){let t=new URL(e.url).searchParams,a=t.get("error");if(a){let e=t.get("error_description");return s("Authorization failed",e?`${a}: ${e}`:a)}try{let e=await r.mcpManager.finishAuthorization(t);return s("Connected",`"${e}" is ready.`,{autoClose:!0})}catch(t){let e=(0,n.errorToString)(t);return s("Authorization failed",e)}}function s(e,t,{autoClose:a=!1}={}){let r=`<!doctype html>
2
2
  <meta charset="utf-8">
3
3
  <title>${e}</title>
4
4
  <body style="font-family: ui-monospace, monospace; display: grid; place-items: center; min-height: 100dvh; margin: 0">
@@ -7,6 +7,6 @@ module.exports=[70729,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_cr
7
7
  <p style="color: #666; font-size: .875rem; margin: 0">${l(t)}</p>
8
8
  </div>
9
9
  ${a?"<script>setTimeout(() => window.close(), 900)</script>":""}
10
- </body>`;return new Response(r,{headers:{"Content-Type":"text/html; charset=utf-8"}})}function l(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}[r]=i.then?(await i)():i,e.s(["GET",0,o]),a()}catch(e){a(e)}},!1),244263,e=>{"use strict";var t=e.i(747909),a=e.i(174017),r=e.i(996250),n=e.i(759756),i=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),u=e.i(487718),c=e.i(995169),d=e.i(47587),p=e.i(666012),h=e.i(570101),m=e.i(626937),R=e.i(10372),v=e.i(193695);e.i(52474);var g=e.i(600220);let f=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/mcp/oauth/callback/route",pathname:"/api/mcp/oauth/callback",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/mcp/oauth/callback/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(320728),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:y,serverHooks:C}=f;async function E(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),f.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/mcp/oauth/callback/route";w=w.replace(/\/index$/,"")||"/";let y=await f.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:C,deploymentId:E,params:x,nextConfig:_,parsedUrl:A,isDraftMode:T,prerenderManifest:b,routerServerContext:P,isOnDemandRevalidate:S,revalidateOnlyGenerated:N,resolvedPathname:k,clientReferenceManifest:O,serverActionsManifest:q}=y,H=(0,s.normalizeAppPath)(w),I=!!(b.dynamicRoutes[H]||b.routes[k]),M=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,A,!1):t.end("This page could not be found"),null);if(I&&!T){let e=!!b.routes[k],t=b.dynamicRoutes[H];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await M();throw new v.NoFallbackError}}let U=null;!I||f.isDev||T||(U="/index"===(U=k)?"/":U);let $=!0===f.isDev||!I,D=I&&!$;q&&O&&(0,o.setManifestsSingleton)({page:w,clientReferenceManifest:O,serverActionsManifest:q});let j=e.method||"GET",F=(0,i.getTracer)(),K=F.getActiveScopeSpan(),L=!!(null==P?void 0:P.isWrappedByNextServer),z=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await f.getIncrementalCache(e,_,b,z);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:x,previewProps:b.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts,useCacheTimeout:_.experimental.useCacheTimeout},cacheComponents:!!_.cacheComponents,validationLevel:_.experimental.instantInsights.validationLevel,supportsDynamicResponse:$,incrementalCache:B,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:_.cacheLife,staticPageGenerationTimeout:_.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>f.onRequestError(e,t,r,n,P)},sharedContext:{buildId:C,deploymentId:E}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:a})=>{try{if(!z&&S&&N&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await f.handle(W,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let i=G.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let o=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(V,X,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,r=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==a&&a>0?_.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await f.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,P),t}},J=async(n,o)=>{try{var s,l;let n=await f.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:N,responseGenerator:Z,waitUntil:r.waitUntil,isMinimalMode:z});if(!I)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",S?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);z&&I||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(V,X,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await f.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,P),I)throw t;await (0,p.sendResponse)(V,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let a=F.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||H,s=`${j} ${r}`;n.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",r),o.updateName(s))})()}};if(L&&K)await J(K,void 0);else{let t=F.getActiveScopeSpan();await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${j} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},e=>J(e,t)),void 0,!L)}}e.s(["handler",0,E,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:y})},"routeModule",0,f,"serverHooks",0,C,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,y])},329280,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(t=>e.l(t))).then(()=>t(781937)))}];
10
+ </body>`;return new Response(r,{headers:{"Content-Type":"text/html; charset=utf-8"}})}function l(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}[r]=i.then?(await i)():i,e.s(["GET",0,o]),a()}catch(e){a(e)}},!1),244263,e=>{"use strict";var t=e.i(747909),a=e.i(174017),r=e.i(996250),n=e.i(759756),i=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),u=e.i(487718),c=e.i(995169),d=e.i(47587),p=e.i(666012),h=e.i(570101),m=e.i(626937),R=e.i(10372),v=e.i(193695);e.i(52474);var f=e.i(600220);let g=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/mcp/oauth/callback/route",pathname:"/api/mcp/oauth/callback",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/mcp/oauth/callback/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(320728),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:x,serverHooks:y}=g;async function C(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),g.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/mcp/oauth/callback/route";w=w.replace(/\/index$/,"")||"/";let x=await g.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!x)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:y,deploymentId:C,params:E,nextConfig:_,parsedUrl:A,isDraftMode:T,prerenderManifest:b,routerServerContext:P,isOnDemandRevalidate:S,revalidateOnlyGenerated:N,resolvedPathname:q,clientReferenceManifest:k,serverActionsManifest:O}=x,H=(0,s.normalizeAppPath)(w),I=!!(b.dynamicRoutes[H]||b.routes[q]),M=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,A,!1):t.end("This page could not be found"),null);if(I&&!T){let e=!!b.routes[q],t=b.dynamicRoutes[H];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await M();throw new v.NoFallbackError}}let U=null;!I||g.isDev||T||(U="/index"===(U=q)?"/":U);let $=!0===g.isDev||!I,D=I&&!$;O&&k&&(0,o.setManifestsSingleton)({page:w,clientReferenceManifest:k,serverActionsManifest:O});let j=e.method||"GET",F=(0,i.getTracer)(),K=F.getActiveScopeSpan(),L=!!(null==P?void 0:P.isWrappedByNextServer),z=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,_,b,z);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:E,previewProps:b.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts,useCacheTimeout:_.experimental.useCacheTimeout},cacheComponents:!!_.cacheComponents,validationLevel:_.experimental.instantInsights.validationLevel,supportsDynamicResponse:$,incrementalCache:B,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:_.cacheLife,staticPageGenerationTimeout:_.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>g.onRequestError(e,t,r,n,P)},sharedContext:{buildId:y,deploymentId:C}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),Z=async({previousCacheEntry:a})=>{try{if(!z&&S&&N&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await g.handle(W,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let i=G.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let o=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(V,X,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,r=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==a&&a>0?_.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,P),t}},J=async(n,o)=>{try{var s,l;let n=await g.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:N,responseGenerator:Z,waitUntil:r.waitUntil,isMinimalMode:z});if(!I)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",S?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);z&&I||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(V,X,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,P),I)throw t;await (0,p.sendResponse)(V,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let a=F.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||H,s=`${j} ${r}`;n.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",r),o.updateName(s))})()}};if(L&&K)await J(K,void 0);else{let t=F.getActiveScopeSpan();await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${j} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},e=>J(e,t)),void 0,!L)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:x})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,x])},329280,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(t=>e.l(t))).then(()=>t(781937)))}];
11
11
 
12
- //# sourceMappingURL=%5Broot-of-the-server%5D__113fqg5._.js.map
12
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0p32jfz._.js.map
@@ -1,8 +1,8 @@
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"))},238857,e=>{"use strict";var t=e.i(912714),i=e.i(750227),a=e.i(687388),r=e.i(53748),n=e.i(629668),o=e.i(786025);async function s(e,l=a.WORKSPACE_VIEW.rows){let d=await (0,o.insideWorkspace)(e);d||(0,r.publicError)("Outside the workspace");let c=await (0,t.readdir)(d,{withFileTypes:!0}).catch(()=>null);c||(0,r.publicError)("No such folder");let u=c.filter(e=>e.isDirectory()?(0,n.isListedFolder)(e.name):e.isFile()&&"none"!==(0,n.viewKindOf)(e.name)).sort((e,t)=>Number(e.isFile())-Number(t.isFile())||e.name.localeCompare(t.name)),p=await Promise.all(u.slice(0,l).map(async a=>{let r=e?`${e}/${a.name}`:a.name;if(a.isDirectory())return{kind:"dir",name:a.name,path:r};let o=await (0,t.stat)((0,i.join)(d,a.name)).catch(()=>null);return o?{kind:"file",name:a.name,path:r,bytes:o.size,at:o.mtime,view:(0,n.viewKindOf)(a.name)}:null}));return{path:e,entries:p.filter(e=>null!==e),total:u.length}}let l=(0,e.i(91264).serverRoute)(async e=>{let t=new URL(e.url).searchParams,i=Number(t.get("rows"));return s(t.get("path")??"",Number.isSafeInteger(i)&&i>0?i:void 0)});e.s(["GET",0,l],238857)},161286,e=>{"use strict";var t=e.i(747909),i=e.i(174017),a=e.i(996250),r=e.i(759756),n=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),d=e.i(487718),c=e.i(995169),u=e.i(47587),p=e.i(666012),m=e.i(570101),h=e.i(626937),w=e.i(10372),f=e.i(193695);e.i(52474);var g=e.i(600220);let v=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/workspace/route",pathname:"/api/workspace",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/workspace/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(238857),...{}}),{workAsyncStorage:R,workUnitAsyncStorage:k,serverHooks:T}=v;async function E(e,t,a){a.requestMeta&&(0,r.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,r.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/workspace/route";R=R.replace(/\/index$/,"")||"/";let k=await v.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:T,deploymentId:E,params:y,nextConfig:A,parsedUrl:S,isDraftMode:x,prerenderManifest:P,routerServerContext:_,isOnDemandRevalidate:b,revalidateOnlyGenerated:C,resolvedPathname:O,clientReferenceManifest:j,serverActionsManifest:N}=k,H=(0,s.normalizeAppPath)(R),I=!!(P.dynamicRoutes[H]||P.routes[O]),$=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,S,!1):t.end("This page could not be found"),null);if(I&&!x){let e=!!P.routes[O],t=P.dynamicRoutes[H];if(t&&!1===t.fallback&&!e){if(A.adapterPath)return await $();throw new f.NoFallbackError}}let F=null;!I||v.isDev||x||(F="/index"===(F=O)?"/":F);let D=!0===v.isDev||!I,L=I&&!D;N&&j&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:j,serverActionsManifest:N});let M=e.method||"GET",q=(0,n.getTracer)(),U=q.getActiveScopeSpan(),W=!!(null==_?void 0:_.isWrappedByNextServer),K=!!(0,r.getRequestMeta)(e,"minimalMode"),G=(0,r.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,A,P,K);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:y,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,supportsDynamicResponse:D,incrementalCache:G,hmrRefreshHash:(0,r.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,a,r)=>v.onRequestError(e,t,a,r,_)},sharedContext:{buildId:T,deploymentId:E}},z=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),Z=d.NextRequestAdapter.fromNodeNextRequest(z,(0,d.signalFromNodeResponse)(t)),Y=async({previousCacheEntry:i})=>{try{if(!K&&b&&C&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await v.handle(Z,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let n=B.renderOpts.pendingWaitUntil;n&&a.waitUntil&&(a.waitUntil(n),n=void 0);let o=B.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(z,V,r,n),null;{let e=await r.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(r.headers);o&&(t[w.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=w.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,a=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=w.INFINITE_CACHE?!1!==i&&i>0?A.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:a}}}}catch(t){throw(null==i?void 0:i.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:b})},!1,_),t}},X=async(r,o)=>{try{var s,l;let r=await v.handleResponse({req:e,nextConfig:A,cacheKey:F,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:b,revalidateOnlyGenerated:C,responseGenerator:Y,waitUntil:a.waitUntil,isMinimalMode:K});if(!I)return;if((null==r||null==(s=r.value)?void 0:s.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==r||null==(l=r.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",b?"REVALIDATED":r.isMiss?"MISS":r.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,m.fromNodeOutgoingHttpHeaders)(r.value.headers);K&&I||n.delete(w.NEXT_CACHE_TAGS_HEADER),!r.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,h.getCacheControlHeader)(r.cacheControl)),await (0,p.sendResponse)(z,V,new Response(r.value.body,{headers:n,status:r.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:b})},!1,_),I)throw t;await (0,p.sendResponse)(z,V,new Response(null,{status:500}));return}finally{(()=>{if(!r)return;let e=t.statusCode;r.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(r.setStatus({code:n.SpanStatusCode.ERROR}),r.setAttribute("error.type",e.toString()));let i=q.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=i.get("next.route")||H,s=`${M} ${a}`;r.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),r.updateName(s),o&&o!==r&&(o.setAttribute("http.route",a),o.updateName(s))})()}};if(W&&U)await X(U,void 0);else{let t=q.getActiveScopeSpan();await q.withPropagatedContext(e.headers,()=>q.trace(c.BaseServerSpan.handleRequest,{spanName:`${M} ${R}`,kind:n.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},e=>X(e,t)),void 0,!W)}}e.s(["handler",0,E,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:k})},"routeModule",0,v,"serverHooks",0,T,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,k])},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"}},r=e=>e.split(".").pop()?.toLowerCase()??"",n=new Set(["node_modules","__pycache__"]),o=Object.entries(a).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(".")&&!n.has(e),"mimeOf",0,e=>a[r(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,a=(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(!a)return null;let[r,...n]=a.split("/");return n.length&&r.includes(".")?null:a}(e);t&&i.add(t)}return[...i].slice(0,6)},"viewKindOf",0,e=>a[r(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(912714),i=e.i(750227),a=e.i(687388);e.i(640911);var r=e.i(874533);let n=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function o(e,a,r,n){if(e.length<=n.max)return e;let o=(0,i.join)(r,n.dir),s=(0,i.join)(o,`${new Date().toISOString().replace(/[:.]/g,"-")}-${a.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)(r,s)||s}catch{l="(could not be written to a file)"}let d=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,n.head).trimEnd()}
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"))},238857,e=>{"use strict";var t=e.i(912714),i=e.i(750227),a=e.i(687388),n=e.i(53748),r=e.i(629668),o=e.i(786025);async function s(e,l=a.WORKSPACE_VIEW.rows){let c=await (0,o.insideWorkspace)(e);c||(0,n.publicError)("Outside the workspace");let d=await (0,t.readdir)(c,{withFileTypes:!0}).catch(()=>null);d||(0,n.publicError)("No such folder");let u=d.filter(e=>e.isDirectory()?(0,r.isListedFolder)(e.name):e.isFile()&&"none"!==(0,r.viewKindOf)(e.name)).sort((e,t)=>Number(e.isFile())-Number(t.isFile())||e.name.localeCompare(t.name)),p=await Promise.all(u.slice(0,l).map(async a=>{let n=e?`${e}/${a.name}`:a.name;if(a.isDirectory())return{kind:"dir",name:a.name,path:n};let o=await (0,t.stat)((0,i.join)(c,a.name)).catch(()=>null);return o?{kind:"file",name:a.name,path:n,bytes:o.size,at:o.mtime,view:(0,r.viewKindOf)(a.name)}:null}));return{path:e,entries:p.filter(e=>null!==e),total:u.length}}let l=(0,e.i(91264).serverRoute)(async e=>{let t=new URL(e.url).searchParams,i=Number(t.get("rows"));return s(t.get("path")??"",Number.isSafeInteger(i)&&i>0?i:void 0)});e.s(["GET",0,l],238857)},161286,e=>{"use strict";var t=e.i(747909),i=e.i(174017),a=e.i(996250),n=e.i(759756),r=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),c=e.i(487718),d=e.i(995169),u=e.i(47587),p=e.i(666012),m=e.i(570101),h=e.i(626937),w=e.i(10372),f=e.i(193695);e.i(52474);var g=e.i(600220);let v=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/workspace/route",pathname:"/api/workspace",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/workspace/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(238857),...{}}),{workAsyncStorage:R,workUnitAsyncStorage:T,serverHooks:k}=v;async function E(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/workspace/route";R=R.replace(/\/index$/,"")||"/";let T=await v.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!T)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:k,deploymentId:E,params:S,nextConfig:y,parsedUrl:A,isDraftMode:b,prerenderManifest:P,routerServerContext:_,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,resolvedPathname:j,clientReferenceManifest:O,serverActionsManifest:$}=T,H=(0,s.normalizeAppPath)(R),N=!!(P.dynamicRoutes[H]||P.routes[j]),I=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,A,!1):t.end("This page could not be found"),null);if(N&&!b){let e=!!P.routes[j],t=P.dynamicRoutes[H];if(t&&!1===t.fallback&&!e){if(y.adapterPath)return await I();throw new f.NoFallbackError}}let F=null;!N||v.isDev||b||(F="/index"===(F=j)?"/":F);let L=!0===v.isDev||!N,M=N&&!L;$&&O&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:O,serverActionsManifest:$});let D=e.method||"GET",q=(0,r.getTracer)(),U=q.getActiveScopeSpan(),W=!!(null==_?void 0:_.isWrappedByNextServer),K=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,y,P,K);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:S,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!y.experimental.authInterrupts,useCacheTimeout:y.experimental.useCacheTimeout},cacheComponents:!!y.cacheComponents,validationLevel:y.experimental.instantInsights.validationLevel,supportsDynamicResponse:L,incrementalCache:G,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:y.cacheLife,staticPageGenerationTimeout:y.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,a,n)=>v.onRequestError(e,t,a,n,_)},sharedContext:{buildId:k,deploymentId:E}},z=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),Z=c.NextRequestAdapter.fromNodeNextRequest(z,(0,c.signalFromNodeResponse)(t)),X=async({previousCacheEntry:i})=>{try{if(!K&&x&&C&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await v.handle(Z,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let r=B.renderOpts.pendingWaitUntil;r&&a.waitUntil&&(a.waitUntil(r),r=void 0);let o=B.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(z,V,n,r),null;{let e=await n.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[w.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=w.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,a=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=w.INFINITE_CACHE?!1!==i&&i>0?y.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:a}}}}catch(t){throw(null==i?void 0:i.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:x})},!1,_),t}},Y=async(n,o)=>{try{var s,l;let n=await v.handleResponse({req:e,nextConfig:y,cacheKey:F,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,responseGenerator:X,waitUntil:a.waitUntil,isMinimalMode:K});if(!N)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",x?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let r=(0,m.fromNodeOutgoingHttpHeaders)(n.value.headers);K&&N||r.delete(w.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||r.get("Cache-Control")||r.set("Cache-Control",(0,h.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(z,V,new Response(n.value.body,{headers:r,status:n.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:x})},!1,_),N)throw t;await (0,p.sendResponse)(z,V,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:r.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let i=q.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=i.get("next.route")||H,s=`${D} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",a),o.updateName(s))})()}};if(W&&U)await Y(U,void 0);else{let t=q.getActiveScopeSpan();await q.withPropagatedContext(e.headers,()=>q.trace(d.BaseServerSpan.handleRequest,{spanName:`${D} ${R}`,kind:r.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},e=>Y(e,t)),void 0,!W)}}e.s(["handler",0,E,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:T})},"routeModule",0,v,"serverHooks",0,k,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,T])},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"}},n=e=>e.split(".").pop()?.toLowerCase()??"",r=new Set(["node_modules","__pycache__"]),o=Object.entries(a).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=>a[n(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,a=(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(!a)return null;let[n,...r]=a.split("/");return r.length&&n.includes(".")?null:a}(e);t&&i.add(t)}return[...i].slice(0,6)},"viewKindOf",0,e=>a[n(e)]?.kind??"none"])},786025,211644,e=>{"use strict";var t=e.i(912714),i=e.i(750227),a=e.i(687388);e.i(640911);var n=e.i(874533);let r=18e4,o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]),s=({workingDirectory:e,spill:a,toolPath:s})=>{let c=(0,i.resolve)(e),d=(s??[]).filter(Boolean).join(":"),u=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,i.resolve)(c,e);async function*p(e){let a;try{a=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of a){if(o.has(t.name)||t.name.startsWith("."))continue;let a=(0,i.join)(e,t.name);t.isDirectory()?yield*p(a):t.isFile()&&(yield a)}}return{cwd:c,resolve:u,readFile:(e,i)=>(0,t.readFile)(u(e),i),async writeFile(e,a){let n=u(e);await (0,t.mkdir)((0,i.join)(n,".."),{recursive:!0}),await (0,t.writeFile)(n,a)},readdir:(e,i)=>(0,t.readdir)(u(e),i),fold:(e,t="output")=>l(e,t,c,a),async glob(e,{path:t=".",limit:a=200}={}){let n=u(t),r=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of p(n)){let t=(0,i.relative)(n,e).split(i.sep).join("/");if((r.test(t)||r.test(e))&&o.push(e),o.length>=a)break}return o},exec:(e,{cwd:t,timeoutMs:i=r,signal:o,env:s}={})=>new Promise(r=>{let p=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&&(p.PATH=`${p.PATH??""}:${d}`);let m=(0,n.spawn)(e,{shell:!0,cwd:t?u(t):c,env:{...p,...s},detached:!0}),h="",w="";m.stdout?.on("data",e=>h+=e),m.stderr?.on("data",e=>w+=e);let f=e=>{w+=`
2
+ [${e}]`;try{m.pid&&process.kill(-m.pid,"SIGTERM")}catch{m.kill("SIGTERM")}},g=setTimeout(()=>f(`Timed out after ${i}ms`),i),v=()=>f("Aborted");o?.aborted?v():o?.addEventListener("abort",v,{once:!0});let R=async e=>{clearTimeout(g),o?.removeEventListener("abort",v),r({...e,stdout:await l(e.stdout,"stdout",c,a),stderr:await l(e.stderr,"stderr",c,a)})};m.on("close",e=>R({stdout:h,stderr:w,exitCode:e??-1})),m.on("error",e=>R({stdout:h,stderr:w+String(e),exitCode:-1}))})}};async function l(e,a,n,r){if(e.length<=r.max)return e;let o=(0,i.join)(n,r.dir),s=(0,i.join)(o,`${new Date().toISOString().replace(/[:.]/g,"-")}-${a.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)(n,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
 
3
- [${a} cut at ${n.max.toLocaleString("en")} chars — the whole thing (${d} lines) is at ${l}. Read the part you need with \`sed -n\`.]
4
+ [${a} 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
 
5
- ${e.slice(-n.tail).trimStart()}`}let s=a.APP_DIR,l=(0,i.join)(a.DATA_DIR,a.PATHS.workspace),d=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,i.join)(s,"node_modules",".bin")]).filter(Boolean),c=(0,i.join)(l,a.PATHS.artifacts),u=[a.PATHS.artifacts,a.PATHS.projects,a.PATHS.scratch],p=new Set([...u,".agents"]),m=(e,t)=>t===e||t.startsWith(e+i.sep),h=e=>(0,t.realpath)(e).catch(()=>null);async function w(e){let t=await h(l)??l,a=(0,i.resolve)(l,e);if(!m(l,a))return null;let r=a,n=await h(r);for(;null===n&&(0,i.dirname)(r)!==r;)r=(0,i.dirname)(r),n=await h(r);if(null===n)return null;let o=(0,i.relative)(r,a),s=o?(0,i.join)(n,o):n;return m(t,s)?s:null}let f=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:a.BROWSER_VIEWPORT}:{};async function g(e){let t=await k();await t.exec("playwright-cli close",{env:f(e),timeoutMs:15e3}).catch(()=>{}),await v()}async function v(){let e=(0,i.join)(l,".playwright-cli"),a=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),r=Date.now()-36e5;for(let n of a){if(!n.isFile())continue;let a=(0,i.join)(e,n.name),o=await (0,t.stat)(a).catch(()=>null);o&&o.mtimeMs<r&&await (0,t.unlink)(a).catch(()=>{})}}let R={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function k(){for(let e of u)await (0,t.mkdir)((0,i.join)(l,e),{recursive:!0});for(let[e,a]of Object.entries(R))await (0,t.writeFile)((0,i.join)(l,e),a,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:a,toolPath:s})=>{let l=(0,i.resolve)(e),d=(s??[]).filter(Boolean).join(":"),c=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,i.resolve)(l,e);async function*u(e){let a;try{a=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of a){if(n.has(t.name)||t.name.startsWith("."))continue;let a=(0,i.join)(e,t.name);t.isDirectory()?yield*u(a):t.isFile()&&(yield a)}}return{cwd:l,resolve:c,readFile:(e,i)=>(0,t.readFile)(c(e),i),async writeFile(e,a){let r=c(e);await (0,t.mkdir)((0,i.join)(r,".."),{recursive:!0}),await (0,t.writeFile)(r,a)},readdir:(e,i)=>(0,t.readdir)(c(e),i),fold:(e,t="output")=>o(e,t,l,a),async glob(e,{path:t=".",limit:a=200}={}){let r=c(t),n=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of u(r)){let t=(0,i.relative)(r,e).split(i.sep).join("/");if((n.test(t)||n.test(e))&&o.push(e),o.length>=a)break}return o},exec:(e,{cwd:t,timeoutMs:i=18e4,signal:n,env:s}={})=>new Promise(u=>{let p=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&&(p.PATH=`${p.PATH??""}:${d}`);let m=(0,r.spawn)(e,{shell:!0,cwd:t?c(t):l,env:{...p,...s},detached:!0}),h="",w="";m.stdout?.on("data",e=>h+=e),m.stderr?.on("data",e=>w+=e);let f=e=>{w+=`
6
- [${e}]`;try{m.pid&&process.kill(-m.pid,"SIGTERM")}catch{m.kill("SIGTERM")}},g=setTimeout(()=>f(`Timed out after ${i}ms`),i),v=()=>f("Aborted");n?.aborted?v():n?.addEventListener("abort",v,{once:!0});let R=async e=>{clearTimeout(g),n?.removeEventListener("abort",v),u({...e,stdout:await o(e.stdout,"stdout",l,a),stderr:await o(e.stderr,"stderr",l,a)})};m.on("close",e=>R({stdout:h,stderr:w,exitCode:e??-1})),m.on("error",e=>R({stdout:h,stderr:w+String(e),exitCode:-1}))})}})({workingDirectory:l,spill:{dir:a.PATHS.output,...a.TOOL_OUTPUT},toolPath:d})}e.s(["ARTIFACTS",0,c,"closeJobShell",0,g,"insideWorkspace",0,w,"jobShellEnv",0,f,"openWorkspace",0,k,"writeRefusal",0,function(e){if(m(l,e)){let t=(0,i.relative)(l,e),[r]=t.split(i.sep);return r&&p.has(r)?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}/, everything else under ${a.PATHS.scratch}/.`}return m(s,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${l}; outside it, write only where the user pointed you.`:null}],786025)}];
6
+ ${e.slice(-r.tail).trimStart()}`}e.s(["EXEC_TIMEOUT_MS",0,r,"createSandBox",0,s],211644);let c=a.APP_DIR,d=(0,i.join)(a.DATA_DIR,a.PATHS.workspace),u=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,i.join)(c,"node_modules",".bin")]).filter(Boolean),p=(0,i.join)(d,a.PATHS.artifacts),m=[a.PATHS.artifacts,a.PATHS.projects,a.PATHS.scratch,a.PATHS.bots],h=new Set([...m,".agents"]),w=(e,t)=>t===e||t.startsWith(e+i.sep),f=e=>(0,t.realpath)(e).catch(()=>null);async function g(e){let t=await f(d)??d,a=(0,i.resolve)(d,e);if(!w(d,a))return null;let n=a,r=await f(n);for(;null===r&&(0,i.dirname)(n)!==n;)n=(0,i.dirname)(n),r=await f(n);if(null===r)return null;let o=(0,i.relative)(n,a),s=o?(0,i.join)(r,o):r;return w(t,s)?s:null}async function v(e){let n=`${a.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;return await (0,t.mkdir)((0,i.join)(d,n),{recursive:!0}),n}async function R(e,n){let r,o=(r=n.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${a.PATHS.scratch}/${r}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,i.join)(d,o),{recursive:!0}),o}let T=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:a.BROWSER_VIEWPORT}:{},k={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function E(e){let t=Object.values(k).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)),n=e=>({found:e.filter(e=>a.has(e)),missing:e.filter(e=>!a.has(e))});return{runtimes:n(k.runtimes),managers:n(k.managers),browser:null}}async function S(e){let t=await _();await t.exec("playwright-cli close",{env:T(e),timeoutMs:15e3}).catch(()=>{}),await b(),await y()}async function y(){let e=(0,i.join)(d,a.PATHS.output),n=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),r=Date.now()-A;for(let a of n){if(!a.isFile())continue;let n=(0,i.join)(e,a.name),o=await (0,t.stat)(n).catch(()=>null);o&&o.mtimeMs<r&&await (0,t.unlink)(n).catch(()=>{})}}let A=864e5;async function b(){let e=(0,i.join)(d,".playwright-cli"),a=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),n=Date.now()-36e5;for(let r of a){if(!r.isFile())continue;let a=(0,i.join)(e,r.name),o=await (0,t.stat)(a).catch(()=>null);o&&o.mtimeMs<n&&await (0,t.unlink)(a).catch(()=>{})}}let P={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function _(){for(let e of m)await (0,t.mkdir)((0,i.join)(d,e),{recursive:!0});for(let[e,a]of Object.entries(P))await (0,t.writeFile)((0,i.join)(d,e),a,{flag:"wx"}).catch(()=>{});return s({workingDirectory:d,spill:{dir:a.PATHS.output,...a.TOOL_OUTPUT},toolPath:u})}e.s(["ARTIFACTS",0,p,"closeJobShell",0,S,"insideWorkspace",0,g,"jobShellEnv",0,T,"openBotFolder",0,v,"openJobScratch",0,R,"openWorkspace",0,_,"readMachineTools",0,E,"writeRefusal",0,function(e){if(w(d,e)){let t=(0,i.relative)(d,e),[n]=t.split(i.sep);return n&&h.has(n)?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 w(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)}];
7
7
 
8
8
  //# sourceMappingURL=%5Broot-of-the-server%5D__0phdgco._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[750227,(e,s,t)=>{s.exports=e.x("node:path",()=>require("node:path"))},59639,(e,s,t)=>{s.exports=e.x("node:process",()=>require("node:process"))},509656,(e,s,t)=>{s.exports=e.x("node:tty",()=>require("node:tty"))},812057,(e,s,t)=>{s.exports=e.x("node:util",()=>require("node:util"))},333925,e=>{"use strict";let s=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),t=process.env.THURSDAY_HOME?.trim()||process.cwd(),r=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,o=`file:${t}/local.db`,_=".ai-workspace",c={workspace:_,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${_}/.agents/skills`}};e.s(["APP_DIR",0,s,"APP_NAME",0,"Thursday","APP_URL",0,r,"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,t,"DB_FILE_NAME",0,o,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,c,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},207580,e=>{e.v(s=>Promise.all(["server/chunks/[externals]__0y3n8y6._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0q8fc1x._.js"].map(s=>e.l(s))).then(()=>s(27996)))}];
1
+ module.exports=[750227,(s,e,t)=>{e.exports=s.x("node:path",()=>require("node:path"))},59639,(s,e,t)=>{e.exports=s.x("node:process",()=>require("node:process"))},509656,(s,e,t)=>{e.exports=s.x("node:tty",()=>require("node:tty"))},812057,(s,e,t)=>{e.exports=s.x("node:util",()=>require("node:util"))},333925,s=>{"use strict";let e=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),t=process.env.THURSDAY_HOME?.trim()||process.cwd(),r=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,o=`file:${t}/local.db`,_=".ai-workspace",c={workspace:_,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${_}/.agents/skills`}};s.s(["APP_DIR",0,e,"APP_NAME",0,"Thursday","APP_URL",0,r,"BOT_NOTES",0,{chars:400},"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,t,"DB_FILE_NAME",0,o,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,c,"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},207580,s=>{s.v(e=>Promise.all(["server/chunks/[externals]__0y3n8y6._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0q8fc1x._.js"].map(e=>s.l(e))).then(()=>e(27996)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0wvgrsl._.js.map
@@ -0,0 +1,5 @@
1
+ module.exports=[418520,e=>e.a(async(t,r)=>{try{var a=await e.y("@libsql/client-6da938047d5fc1cd");e.n(a),r()}catch(e){r(e)}},!0),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"))},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"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},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"))},380690,e=>{"use strict";let t,r,a,o,n,s;var i,l=e.i(687388),c=e.i(640911);let p={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},m=globalThis,u=m.__appEvents??=(t=new Set,{emit(e){for(let r of[...t])try{r(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),d=m.__presence??=(i=l.BROWSER_GONE_MS,r=!1,a=null,o=new Set,n=new Set,s=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return r},track(e){if(e>0){a&&clearTimeout(a),a=null,r||(r=!0,s(n));return}!a&&r&&(a=setTimeout(()=>{a=null,r=!1,s(o)},i))},onGone:e=>(o.add(e),()=>o.delete(e)),onBack:e=>(n.add(e),()=>n.delete(e))}),b=m.__appEventStream??=function(e,t={}){let r=new TextEncoder,a=t.heartbeatMs??2e4,o=0;return{respond:(n,s)=>{let i=()=>{};return new Response(new ReadableStream({async start(l){let p=!1,m=new Map,u=[],d=e=>{if(!p)try{l.enqueue(r.encode(e))}catch{i()}},b=e=>d(`data: ${JSON.stringify(e)}
2
+
3
+ `),T=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return b(e);let a=m.get(r);a&&clearTimeout(a),m.set(r,setTimeout(()=>{m.delete(r),b(e)},t.coalesce?.ms))},f=e.subscribe(e=>u?u.push(e):T(e)),h=setInterval(()=>d(": ping\n\n"),a);o+=1,t.onWatchers?.(o),i=()=>{if(!p){for(let e of(p=!0,o-=1,t.onWatchers?.(o),f(),clearInterval(h),m.values()))clearTimeout(e);try{l.close()}catch{}}},n.addEventListener("abort",i);try{for(let e of await s?.()??[])b(e)}catch(e){c.logger.error("event stream opening failed",e),i();return}let v=u;for(let e of(u=null,v))T(e)},cancel(){i()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return o}}}(u,{coalesce:{ms:150,keyOf:e=>e.type in p?e.type:null},onWatchers:d.track}),T=m.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,T,"appEventStream",0,b,"appEvents",0,u],380690)},148831,e=>e.a(async(t,r)=>{try{var a=e.i(875225),o=e.i(260338),n=e.i(518899),s=e.i(380690),i=e.i(528790),l=e.i(613240),c=e.i(441963),p=t([i]);function m(e){return(0,c.isRemoteConfig)(e)?{url:e.url}:{command:e.command,args:e.args}}async function u(){return(await i.database.select({name:l.mcpServerTable.name,config:l.mcpServerTable.config,lastError:l.mcpServerTable.lastError,toolCount:(0,o.count)(l.mcpToolTable.id)}).from(l.mcpServerTable).leftJoin(l.mcpToolTable,(0,a.eq)(l.mcpToolTable.serverName,l.mcpServerTable.name)).groupBy(l.mcpServerTable.name)).map(e=>({...e,config:m(e.config)}))}async function d(e){let[t]=await i.database.select({name:l.mcpServerTable.name,config:l.mcpServerTable.config,lastError:l.mcpServerTable.lastError,toolsSyncedAt:l.mcpServerTable.toolsSyncedAt}).from(l.mcpServerTable).where((0,a.eq)(l.mcpServerTable.name,e));return t?{...t,config:m(t.config),tools:await b(e)}:null}async function b(e){return i.database.select({id:l.mcpToolTable.id,name:l.mcpToolTable.name,description:l.mcpToolTable.description,inputSchema:l.mcpToolTable.inputSchema,outputSchema:l.mcpToolTable.outputSchema}).from(l.mcpToolTable).where((0,a.eq)(l.mcpToolTable.serverName,e)).orderBy(l.mcpToolTable.name)}async function T(e){let[t]=await i.database.select().from(l.mcpServerTable).where((0,a.eq)(l.mcpServerTable.name,e));return t??null}[i]=p.then?(await p)():p;let S=()=>s.appEvents.emit({type:"mcp"});async function f(e,t){await i.database.transaction(async r=>{t.length&&await r.insert(l.mcpToolTable).values(t.map(t=>({...t,serverName:e}))).onConflictDoUpdate({target:[l.mcpToolTable.serverName,l.mcpToolTable.name],set:{description:h(l.mcpToolTable.description),inputSchema:h(l.mcpToolTable.inputSchema),outputSchema:h(l.mcpToolTable.outputSchema)}}),await r.delete(l.mcpToolTable).where(t.length?(0,a.and)((0,a.eq)(l.mcpToolTable.serverName,e),(0,a.notInArray)(l.mcpToolTable.name,t.map(e=>e.name))):(0,a.eq)(l.mcpToolTable.serverName,e)),await r.update(l.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,a.eq)(l.mcpServerTable.name,e))}),S()}function h(e){return n.sql.raw(`excluded."${e.name}"`)}async function v(e,t){await i.database.update(l.mcpServerTable).set({lastError:t}).where((0,a.eq)(l.mcpServerTable.name,e)),S()}async function g(e,t){await i.database.update(l.mcpServerTable).set({oauth:t}).where((0,a.eq)(l.mcpServerTable.name,e)),S()}async function y(e){let[t]=await i.database.select().from(l.mcpServerTable).where(n.sql`json_extract(${l.mcpServerTable.oauth}, '$.state') = ${e}`);return t??null}e.s(["findAllServers",0,u,"findAllTools",0,function(){return i.database.select({id:l.mcpToolTable.id,name:l.mcpToolTable.name,serverName:l.mcpToolTable.serverName,description:l.mcpToolTable.description}).from(l.mcpToolTable).orderBy(l.mcpToolTable.serverName,l.mcpToolTable.name)},"findPinnedTools",0,function(e){return i.database.select({server:l.mcpToolTable.serverName,name:l.mcpToolTable.name,description:l.mcpToolTable.description,inputSchema:l.mcpToolTable.inputSchema}).from(l.botMcpToolTable).innerJoin(l.mcpToolTable,(0,a.eq)(l.botMcpToolTable.toolId,l.mcpToolTable.id)).where((0,a.eq)(l.botMcpToolTable.botName,e)).orderBy(l.mcpToolTable.serverName,l.mcpToolTable.name)},"findServer",0,T,"findServerByOAuthState",0,y,"findServerDetail",0,d,"findToolSchemas",0,function(e,t){return t.length?i.database.select({name:l.mcpToolTable.name,description:l.mcpToolTable.description,inputSchema:l.mcpToolTable.inputSchema}).from(l.mcpToolTable).where((0,a.and)((0,a.eq)(l.mcpToolTable.serverName,e),(0,a.inArray)(l.mcpToolTable.name,t))).orderBy(l.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return i.database.select({name:l.mcpServerTable.name}).from(l.mcpServerTable).orderBy(l.mcpServerTable.name)},"listToolNames",0,function(e){let t=i.database.select({server:l.mcpToolTable.serverName,name:l.mcpToolTable.name}).from(l.mcpToolTable);return e?t.where((0,a.eq)(l.mcpToolTable.serverName,e)).orderBy(l.mcpToolTable.name):t.orderBy(l.mcpToolTable.serverName,l.mcpToolTable.name)},"saveConnectionError",0,v,"saveOAuthData",0,g,"syncServerTools",0,f]),r()}catch(e){r(e)}},!1),441963,e=>{"use strict";var t=e.i(469719),r=e.i(704161);let a=t.z.object({url:t.z.url(),headers:t.z.record(t.z.string(),t.z.string()).optional(),oauthClient:t.z.object({clientId:t.z.string().min(1),clientSecret:t.z.string().optional()}).optional()}),o=t.z.object({command:t.z.string().min(1),args:t.z.array(t.z.string()).optional(),env:t.z.record(t.z.string(),t.z.string()).optional()}),n=t.z.union([a,o]),s=t.z.object({name:t.z.string(),description:t.z.string().optional(),inputSchema:t.z.looseObject({}).optional(),outputSchema:t.z.looseObject({}).optional()});t.z.object({clientInformation:t.z.looseObject({}).optional(),tokens:t.z.looseObject({}).optional(),authorizationServer:t.z.looseObject({}).optional(),codeVerifier:t.z.string().optional(),state:t.z.string().optional()});let i=t.z.object({name:t.z.string().min(1).max(40),config:n,toolCount:t.z.number().int(),lastError:t.z.string().nullish()}),l=s.extend({id:t.z.number().int(),description:t.z.string().nullish()});i.omit({toolCount:!0}).extend({tools:l.array().default([]),toolsSyncedAt:r.DateLikeSchema}),t.z.object({name:t.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:n}),t.z.union([t.z.object({mcpServers:t.z.record(t.z.string(),n)}),t.z.record(t.z.string(),n)]),e.s(["isRemoteConfig",0,function(e){return"url"in e}])},704161,e=>{"use strict";var t=e.i(469719);let r=t.z.union([t.z.date(),t.z.iso.datetime()]);e.s(["DateLikeSchema",0,r,"toDate",0,e=>new Date(e)])},260338,e=>{"use strict";var t=e.i(518899),r=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,r.is)(e,a.Column)?e:String)}])},819481,(e,t,r)=>{"use strict";var a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,i={},l={RequestCookies:()=>T,ResponseCookies:()=>f,parseCookie:()=>m,parseSetCookie:()=>u,stringifyCookie:()=>p};for(var c in l)a(i,c,{get:l[c],enumerable:!0});function p(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),a=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?a:`${a}; ${r.join("; ")}`}function m(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[a,o]=[r.slice(0,e),r.slice(e+1)];try{t.set(a,decodeURIComponent(null!=o?o:"true"))}catch{}}return t}function u(e){if(!e)return;let[[t,r],...a]=m(e),{domain:o,expires:n,httponly:s,maxage:i,path:l,samesite:c,secure:p,partitioned:u,priority:T}=Object.fromEntries(a.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var f,h,v={name:t,value:decodeURIComponent(r),domain:o,...n&&{expires:new Date(n)},...s&&{httpOnly:!0},..."string"==typeof i&&{maxAge:Number(i)},path:l,...c&&{sameSite:d.includes(f=(f=c).toLowerCase())?f:void 0},...p&&{secure:!0},...T&&{priority:b.includes(h=(h=T).toLowerCase())?h:void 0},...u&&{partitioned:!0}};let e={};for(let t in v)v[t]&&(e[t]=v[t]);return e}}t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of n(t))s.call(e,i)||void 0===i||a(e,i,{get:()=>t[i],enumerable:!(r=o(t,i))||r.enumerable});return e})(a({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],b=["low","medium","high"],T=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of m(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let a="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===a).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,a=this._parsed;return a.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(a).map(([e,t])=>p(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>p(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},f=class{constructor(e){var t,r,a;this._parsed=new Map,this._headers=e;const o=null!=(a=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?a:[];for(const e of Array.isArray(o)?o:function(e){if(!e)return[];var t,r,a,o,n,s=[],i=0;function l(){for(;i<e.length&&/\s/.test(e.charAt(i));)i+=1;return i<e.length}for(;i<e.length;){for(t=i,n=!1;l();)if(","===(r=e.charAt(i))){for(a=i,i+=1,l(),o=i;i<e.length&&"="!==(r=e.charAt(i))&&";"!==r&&","!==r;)i+=1;i<e.length&&"="===e.charAt(i)?(n=!0,i=o,s.push(e.substring(t,a)),t=i):i=a+1}else i+=1;(!n||i>=e.length)&&s.push(e.substring(t,e.length))}return s}(o)){const t=u(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let a="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===a)}has(e){return this._parsed.has(e)}set(...e){let[t,r,a]=1===e.length?[e[0].name,e[0].value,e[0]]:e,o=this._parsed;return o.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...a})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=p(r);t.append("set-cookie",e)}}(o,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(p).join("; ")}}},442315,(e,t,r)=>{"use strict";t.exports=e.r(918622)},347540,(e,t,r)=>{"use strict";t.exports=e.r(442315).vendored["react-rsc"].React}];
4
+
5
+ //# sourceMappingURL=%5Broot-of-the-server%5D__11j52t0._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[418520,e=>e.a(async(r,t)=>{try{var i=await e.y("@libsql/client-6da938047d5fc1cd");e.n(i),t()}catch(e){t(e)}},!0),522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},902157,(e,r,t)=>{r.exports=e.x("node:fs",()=>require("node:fs"))},446786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))},814747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},264079,e=>{"use strict";var r=e.i(469719);r.z.object({value:r.z.string().min(1),expires_at:r.z.number()});let t=r.z.enum(["openai","anthropic","google","xai","vercel-ai-gateway"]),i=r.z.object({provider:t,model:r.z.string().trim().min(1,"Model name is required").max(80)}),a=r.z.enum(["openai","xai"]),o=r.z.object({provider:a,voice:r.z.string().trim().min(1).max(64).nullish(),model:r.z.string().trim().min(1).max(80).nullish()}),l=r.z.enum(["openai","google","xai","vercel-ai-gateway"]),n=r.z.object({provider:l,model:r.z.string().trim().min(1,"Model name is required").max(120)}),s={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-1.5",label:"GPT Image 1.5",tier:"mid"},{id:"gpt-image-2",label:"GPT Image 2",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:"whisper-1",label:"Whisper",tier:"small"},{id:"gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"gpt-4o-transcribe",label:"4o Transcribe",tier:"mid"}]}},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",models:{image:[{id:"gemini-2.5-flash-image",label:"2.5 Flash Image",tier:"small"},{id:"gemini-3.1-flash-image-preview",label:"3.1 Flash Image",tier:"mid"},{id:"gemini-3-pro-image-preview",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",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-pro",label:"Grok Imagine Pro",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",label:"GPT Image 2",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"}]}}},c=Object.keys(s).map(e=>({id:e,...s[e]})),d={openai:{label:"Open AI",apiKeyName:"OPENAI_API_KEY",suggestModels:[{id:"gpt-5.6-luna",label:"5.6 Luna",tier:"small"},{id:"gpt-5.6-terra",label:"5.6 Terra",tier:"mid"},{id:"gpt-5.6-sol",label:"5.6 Sol",tier:"large"},{id:"gpt-6-astra",label:"6 Astra",tier:"large"}]},anthropic:{label:"Claude",apiKeyName:"ANTHROPIC_API_KEY",suggestModels:[{id:"claude-haiku-4-5-20251001",label:"Haiku 4.5",tier:"small"},{id:"claude-sonnet-5",label:"Sonnet 5",tier:"mid"},{id:"claude-opus-5",label:"Opus 5",tier:"large"},{id:"claude-fable-5-1",label:"Fable 5.1",tier:"large"}]},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",suggestModels:[{id:"gemini-3.8-flash",label:"3.8 Flash",tier:"mid"}]},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",suggestModels:[{id:"grok-4.6",label:"Grok 4.6",tier:"large"}]},"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"},{id:"zai/glm-5.3",label:"GLM 5.3",tier:"mid"},{id:"spacexai/grok-4.6",label:"Grok 4.6",tier:"mid"},{id:"anthropic/claude-sonnet-5",label:"Claude Sonnet 5",tier:"mid"},{id:"openai/gpt-5.6-terra",label:"GPT 5.6 Terra",tier:"mid"},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid"},{id:"openai/gpt-5.6-sol",label:"GPT 5.6 Sol",tier:"large"},{id:"anthropic/claude-opus-5",label:"Claude Opus 5",tier:"large"}]}},p=(e,r)=>(e.suggestModels.find(e=>e.tier===r)??e.suggestModels[0])?.id,m={openai:{apiKeyName:d.openai.apiKeyName,label:d.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:d.xai.apiKeyName,label:d.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"}},u=Object.keys(m).map(e=>({id:e,...m[e]})),g=Object.keys(d).map(e=>({id:e,...d[e]}));e.s(["GATEWAY_TEXT",0,"language","MEDIA_MODEL_PROVIDERS",0,s,"MEDIA_MODEL_PROVIDER_LIST",0,c,"SPEACH_MODEL_PROVIDERS",0,m,"SPEACH_MODEL_PROVIDER_LIST",0,u,"TEXT_MODEL_PROVIDERS",0,d,"TEXT_MODEL_PROVIDER_LIST",0,g,"canMakeKind",0,(e,r)=>(s[e]?.models[r]?.length??0)>0,"cheapestModelOf",0,e=>p(e,"small"),"defaultModelOf",0,e=>p(e,"mid"),"parseMediaModel",0,function(e){let[r,...t]=(e??"").trim().split("/"),i=n.safeParse({provider:r,model:t.join("/")});return i.success?i.data:null},"parseTextModel",0,function(e){let[r,...t]=(e??"").trim().split("/"),a=i.safeParse({provider:r,model:t.join("/")});return a.success?a.data:null},"speachModelRefSchema",0,o,"textModelProviderSchema",0,t],264079)},279041,e=>{"use strict";var r=e.i(264079);let t=[...new Set(Object.values(r.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="DEFAULT_MODEL",l={key:o,label:"Default model",hint:"What a bot thinks with until it picks its own",text:!0,choices:r.TEXT_MODEL_PROVIDER_LIST.flatMap(e=>e.suggestModels.map(r=>({value:`${e.id}/${r.id}`,label:`${e.label} \xb7 ${r.label}`,needs:e.apiKeyName})))},n=e=>t.includes(e.apiKeyName),s=e=>({key:e.apiKeyName,label:e.label,provider:e.id}),c=[{id:"voice",title:"voice",hint:"calls run on one of these",section:"keys",require:"any",note:"one is required",entries:r.TEXT_MODEL_PROVIDER_LIST.filter(n).map(s)},{id:"text",title:"models",hint:"what bots think with — add any, or none",section:"keys",require:"none",entries:r.TEXT_MODEL_PROVIDER_LIST.filter(e=>!n(e)).map(s)},{id:"bots",title:"Bots",hint:"what a bot runs on when it has not picked its own",section:"models",require:"none",entries:[l]},{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:r.MEDIA_MODEL_PROVIDER_LIST.flatMap(r=>r.models[e].map(e=>({value:`${r.id}/${e.id}`,label:`${r.label} \xb7 ${e.label}`,needs:r.apiKeyName})))}))}];Object.fromEntries(c.flatMap(e=>e.entries).map(e=>[e.key,e]));let d=c.flatMap(e=>e.entries.map(e=>e.key)),p=Object.fromEntries(c.flatMap(e=>e.entries).filter(e=>e.choices?.length).map(e=>[e.key,e.choices]));e.s(["CONFIG_CHOICES",0,p,"CONFIG_KEYS",0,d,"DEFAULT_MODEL_KEY",0,o,"MEDIA_MODEL_KEYS",0,i])},340698,e=>e.a(async(r,t)=>{try{var i=e.i(875225),a=e.i(528790),o=e.i(613240);e.i(279041);var l=r([a]);async function n(e){let r=process.env[e]?.trim();if(r)return r;let[t]=await a.database.select({value:o.configTable.value}).from(o.configTable).where((0,i.eq)(o.configTable.key,e));return t?.value.trim()||void 0}[a]=l.then?(await l)():l,e.s(["readConfig",0,n]),t()}catch(e){t(e)}},!1),41444,e=>{"use strict";e.s(["PromiseChain",0,()=>{let e=Promise.resolve();return r=>{let t=e.then(()=>r());return e=t.catch(()=>{}),t}},"clip",0,function(e,r){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1).trimEnd()}…`:t},"errorToString",0,function(e){return e instanceof Error?e.message:String(e)}])},78997,(e,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={isValidAccessToken:()=>k,readAuthConfig:()=>y,writeAuthConfig:()=>O};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.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 r=g.readFileSync(e,"utf8");if(!r)return null;return JSON.parse(r)}catch(e){return null}}function O(e){let r=h(),t=f.dirname(r);g.existsSync(t)||g.mkdirSync(t,{mode:504,recursive:!0}),g.writeFileSync(r,JSON.stringify(e,null,2),{mode:384})}function k(e,r=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let t=Math.floor(Date.now()/1e3);return e.expiresAt>=t+r/1e3}},452005,(e,r,t)=>{"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});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.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,r,t)=>{"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});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.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)()}`,m=null;async function u(){if(m)return m;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 r=await e.json();if(!r||"string"!=typeof r.token_endpoint)throw Error("Invalid OAuth discovery response");let t=r.token_endpoint;return m=t,t}async function g(e){let r=await u();return await fetch(r,{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 r=await e.json();return e.ok?"object"!=typeof r||null===r?[Error("Invalid token response")]:"string"!=typeof r.access_token?[Error("Missing access_token in response")]:"Bearer"!==r.token_type?[Error("Invalid token_type in response")]:"number"!=typeof r.expires_in?[Error("Missing expires_in in response")]:[null,r]:[Error("object"==typeof r&&r&&"error"in r?String(r.error):"Token refresh failed")]}},484199,(e,r,t)=>{"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});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.enumerable});return e})(i({},"__esModule",{value:!0}),n);class d extends Error{constructor(e,r){super(e),this.name="VercelOidcTokenError",this.cause=r}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},1791,(e,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={findRootDir:()=>y,getUserDataDir:()=>O};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.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 r=g.default.join(e,".vercel");if(f.default.existsSync(r))return e;e=g.default.dirname(e)}}catch(e){throw new h.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function O(){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,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={assertVercelOidcTokenResponse:()=>w,findProjectInfo:()=>_,getTokenPayload:()=>A,getVercelDataDir:()=>v,getVercelOidcToken:()=>E,getVercelToken:()=>T,isExpired:()=>j,loadToken:()=>I,saveToken:()=>P};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.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),O=e.r(394853),k=e.r(452005);function v(){let e=(0,h.getUserDataDir)();return e?g.join(e,"com.vercel.cli"):null}async function T(e){let r=(0,y.readAuthConfig)();if(!r?.token)throw new k.AccessTokenMissingError;if((0,y.isValidAccessToken)(r,e?.expirationBufferMs))return r.token;if(!r.refreshToken)throw(0,y.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,O.refreshTokenRequest)({refresh_token:r.refreshToken}),[t,i]=await (0,O.processTokenResponse)(e);if(t||!i)throw(0,y.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError(t);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 k.AccessTokenMissingError||e instanceof k.RefreshAccessTokenFailedError)throw e;throw new k.RefreshAccessTokenFailedError(e)}}async function E(e,r,t){let i=`https://api.vercel.com/v1/projects/${r}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,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 r=g.join(e,".vercel","project.json");if(!f.existsSync(r))throw new b.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(f.readFileSync(r,"utf8"));if("string"!=typeof t.projectId&&"string"!=typeof t.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:t.projectId,teamId:t.orgId}}function P(e,r){let t=(0,h.getUserDataDir)();if(!t)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let i=g.join(t,"com.vercel.token",`${r}.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 r=(0,h.getUserDataDir)();if(!r)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=g.join(r,"com.vercel.token",`${e}.json`);if(!f.existsSync(t))return null;let i=JSON.parse(f.readFileSync(t,"utf8"));return w(i),i}function A(e){let r=e.split(".");if(3!==r.length)throw new b.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=r[1].replace(/-/g,"+").replace(/_/g,"/"),i=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(i,"base64").toString("utf8"))}function j(e,r=0){return 1e3*e.exp<Date.now()+r}}];
1
+ module.exports=[418520,e=>e.a(async(r,t)=>{try{var i=await e.y("@libsql/client-6da938047d5fc1cd");e.n(i),t()}catch(e){t(e)}},!0),522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},902157,(e,r,t)=>{r.exports=e.x("node:fs",()=>require("node:fs"))},446786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))},814747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},264079,e=>{"use strict";var r=e.i(469719);r.z.object({value:r.z.string().min(1),expires_at:r.z.number()});let t=r.z.enum(["openai","anthropic","google","xai","vercel-ai-gateway"]),i=r.z.object({provider:t,model:r.z.string().trim().min(1,"Model name is required").max(80)}),a=r.z.enum(["openai","xai"]),o=r.z.object({provider:a,voice:r.z.string().trim().min(1).max(64).nullish(),model:r.z.string().trim().min(1).max(80).nullish()}),l=r.z.enum(["openai","google","xai","vercel-ai-gateway"]),n=r.z.object({provider:l,model:r.z.string().trim().min(1,"Model name is required").max(120)}),s={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-1.5",label:"GPT Image 1.5",tier:"mid"},{id:"gpt-image-2",label:"GPT Image 2",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:"whisper-1",label:"Whisper",tier:"small"},{id:"gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"gpt-4o-transcribe",label:"4o Transcribe",tier:"mid"}]}},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",models:{image:[{id:"gemini-2.5-flash-image",label:"2.5 Flash Image",tier:"small"},{id:"gemini-3.1-flash-image-preview",label:"3.1 Flash Image",tier:"mid"},{id:"gemini-3-pro-image-preview",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",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-pro",label:"Grok Imagine Pro",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",label:"GPT Image 2",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"}]}}},c=Object.keys(s).map(e=>({id:e,...s[e]})),d={openai:{label:"Open AI",apiKeyName:"OPENAI_API_KEY",suggestModels:[{id:"gpt-5.6-luna",label:"5.6 Luna",tier:"small"},{id:"gpt-5.6-terra",label:"5.6 Terra",tier:"mid"},{id:"gpt-5.6-sol",label:"5.6 Sol",tier:"large"},{id:"gpt-6-astra",label:"6 Astra",tier:"large"}]},anthropic:{label:"Claude",apiKeyName:"ANTHROPIC_API_KEY",suggestModels:[{id:"claude-haiku-4-5-20251001",label:"Haiku 4.5",tier:"small"},{id:"claude-sonnet-5",label:"Sonnet 5",tier:"mid"},{id:"claude-opus-5",label:"Opus 5",tier:"large"},{id:"claude-fable-5-1",label:"Fable 5.1",tier:"large"}]},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",suggestModels:[{id:"gemini-3.8-flash",label:"3.8 Flash",tier:"mid"}]},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",suggestModels:[{id:"grok-4.6",label:"Grok 4.6",tier:"large"}]},"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"},{id:"zai/glm-5.3",label:"GLM 5.3",tier:"mid"},{id:"spacexai/grok-4.6",label:"Grok 4.6",tier:"mid"},{id:"anthropic/claude-sonnet-5",label:"Claude Sonnet 5",tier:"mid"},{id:"openai/gpt-5.6-terra",label:"GPT 5.6 Terra",tier:"mid"},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid"},{id:"openai/gpt-5.6-sol",label:"GPT 5.6 Sol",tier:"large"},{id:"anthropic/claude-opus-5",label:"Claude Opus 5",tier:"large"}]}},p=(e,r)=>(e.suggestModels.find(e=>e.tier===r)??e.suggestModels[0])?.id,m={openai:{apiKeyName:d.openai.apiKeyName,label:d.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:d.xai.apiKeyName,label:d.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"}},u=Object.keys(m).map(e=>({id:e,...m[e]})),f=Object.keys(d).map(e=>({id:e,...d[e]}));e.s(["GATEWAY_TEXT",0,"language","MEDIA_MODEL_PROVIDERS",0,s,"MEDIA_MODEL_PROVIDER_LIST",0,c,"SPEACH_MODEL_PROVIDERS",0,m,"SPEACH_MODEL_PROVIDER_LIST",0,u,"TEXT_MODEL_PROVIDERS",0,d,"TEXT_MODEL_PROVIDER_LIST",0,f,"canMakeKind",0,(e,r)=>(s[e]?.models[r]?.length??0)>0,"cheapestModelOf",0,e=>p(e,"small"),"defaultModelOf",0,e=>p(e,"mid"),"parseMediaModel",0,function(e){let[r,...t]=(e??"").trim().split("/"),i=n.safeParse({provider:r,model:t.join("/")});return i.success?i.data:null},"parseTextModel",0,function(e){let[r,...t]=(e??"").trim().split("/"),a=i.safeParse({provider:r,model:t.join("/")});return a.success?a.data:null},"speachModelRefSchema",0,o,"textModelProviderSchema",0,t],264079)},279041,e=>{"use strict";var r=e.i(264079);let t=[...new Set(Object.values(r.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="DEFAULT_MODEL",l={key:o,label:"Default model",hint:"What a bot thinks with until it picks its own",text:!0,choices:r.TEXT_MODEL_PROVIDER_LIST.flatMap(e=>e.suggestModels.map(r=>({value:`${e.id}/${r.id}`,label:`${e.label} \xb7 ${r.label}`,needs:e.apiKeyName})))},n=e=>t.includes(e.apiKeyName),s=e=>({key:e.apiKeyName,label:e.label,provider:e.id}),c=[{id:"voice",title:"voice",hint:"calls run on one of these",section:"keys",require:"any",note:"one is required",entries:r.TEXT_MODEL_PROVIDER_LIST.filter(n).map(s)},{id:"text",title:"models",hint:"what bots think with — add any, or none",section:"keys",require:"none",entries:r.TEXT_MODEL_PROVIDER_LIST.filter(e=>!n(e)).map(s)},{id:"bots",title:"Bots",hint:"what a bot runs on when it has not picked its own",section:"models",require:"none",entries:[l]},{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:r.MEDIA_MODEL_PROVIDER_LIST.flatMap(r=>r.models[e].map(e=>({value:`${r.id}/${e.id}`,label:`${r.label} \xb7 ${e.label}`,needs:r.apiKeyName})))}))}];Object.fromEntries(c.flatMap(e=>e.entries).map(e=>[e.key,e]));let d=c.flatMap(e=>e.entries.map(e=>e.key)),p=Object.fromEntries(c.flatMap(e=>e.entries).filter(e=>e.choices?.length).map(e=>[e.key,e.choices]));e.s(["CONFIG_CHOICES",0,p,"CONFIG_KEYS",0,d,"DEFAULT_MODEL_KEY",0,o,"MEDIA_MODEL_KEYS",0,i])},340698,e=>e.a(async(r,t)=>{try{var i=e.i(875225),a=e.i(528790),o=e.i(613240);e.i(279041);var l=r([a]);async function n(e){let r=process.env[e]?.trim();if(r)return r;let[t]=await a.database.select({value:o.configTable.value}).from(o.configTable).where((0,i.eq)(o.configTable.key,e));return t?.value.trim()||void 0}[a]=l.then?(await l)():l,e.s(["readConfig",0,n]),t()}catch(e){t(e)}},!1),78997,(e,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={isValidAccessToken:()=>k,readAuthConfig:()=>y,writeAuthConfig:()=>O};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.exports=c(a({},"__esModule",{value:!0}),p);var f=d(e.r(522734)),g=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 g.join(e,"auth.json")}function y(){try{let e=h();if(!f.existsSync(e))return null;let r=f.readFileSync(e,"utf8");if(!r)return null;return JSON.parse(r)}catch(e){return null}}function O(e){let r=h(),t=g.dirname(r);f.existsSync(t)||f.mkdirSync(t,{mode:504,recursive:!0}),f.writeFileSync(r,JSON.stringify(e,null,2),{mode:384})}function k(e,r=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let t=Math.floor(Date.now()/1e3);return e.expiresAt>=t+r/1e3}},452005,(e,r,t)=>{"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});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.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,r,t)=>{"use strict";var i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,n={},s={processTokenResponse:()=>g,refreshTokenRequest:()=>f};for(var c in s)i(n,c,{get:s[c],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.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)()}`,m=null;async function u(){if(m)return m;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 r=await e.json();if(!r||"string"!=typeof r.token_endpoint)throw Error("Invalid OAuth discovery response");let t=r.token_endpoint;return m=t,t}async function f(e){let r=await u();return await fetch(r,{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 g(e){let r=await e.json();return e.ok?"object"!=typeof r||null===r?[Error("Invalid token response")]:"string"!=typeof r.access_token?[Error("Missing access_token in response")]:"Bearer"!==r.token_type?[Error("Invalid token_type in response")]:"number"!=typeof r.expires_in?[Error("Missing expires_in in response")]:[null,r]:[Error("object"==typeof r&&r&&"error"in r?String(r.error):"Token refresh failed")]}},484199,(e,r,t)=>{"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});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of o(r))l.call(e,n)||void 0===n||i(e,n,{get:()=>r[n],enumerable:!(t=a(r,n))||t.enumerable});return e})(i({},"__esModule",{value:!0}),n);class d extends Error{constructor(e,r){super(e),this.name="VercelOidcTokenError",this.cause=r}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},1791,(e,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={findRootDir:()=>y,getUserDataDir:()=>O};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.exports=c(a({},"__esModule",{value:!0}),p);var f=d(e.r(814747)),g=d(e.r(522734)),b=d(e.r(446786)),h=e.r(484199);function y(){try{let e=process.cwd();for(;e!==f.default.dirname(e);){let r=f.default.join(e,".vercel");if(g.default.existsSync(r))return e;e=f.default.dirname(e)}}catch(e){throw new h.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function O(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(b.default.platform()){case"darwin":return f.default.join(b.default.homedir(),"Library/Application Support");case"linux":return f.default.join(b.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},783697,(e,r,t)=>{"use strict";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,r,t,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let n of l(r))s.call(e,n)||n===t||a(e,n,{get:()=>r[n],enumerable:!(i=o(r,n))||i.enumerable});return e},d=(e,r,t)=>(t=null!=e?i(n(e)):{},c(!r&&e&&e.__esModule?t:a(t,"default",{value:e,enumerable:!0}),e)),p={},m={assertVercelOidcTokenResponse:()=>w,findProjectInfo:()=>_,getTokenPayload:()=>A,getVercelDataDir:()=>v,getVercelOidcToken:()=>E,getVercelToken:()=>T,isExpired:()=>j,loadToken:()=>I,saveToken:()=>P};for(var u in m)a(p,u,{get:m[u],enumerable:!0});r.exports=c(a({},"__esModule",{value:!0}),p);var f=d(e.r(814747)),g=d(e.r(522734)),b=e.r(484199),h=e.r(1791),y=e.r(78997),O=e.r(394853),k=e.r(452005);function v(){let e=(0,h.getUserDataDir)();return e?f.join(e,"com.vercel.cli"):null}async function T(e){let r=(0,y.readAuthConfig)();if(!r?.token)throw new k.AccessTokenMissingError;if((0,y.isValidAccessToken)(r,e?.expirationBufferMs))return r.token;if(!r.refreshToken)throw(0,y.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,O.refreshTokenRequest)({refresh_token:r.refreshToken}),[t,i]=await (0,O.processTokenResponse)(e);if(t||!i)throw(0,y.writeAuthConfig)({}),new k.RefreshAccessTokenFailedError(t);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 k.AccessTokenMissingError||e instanceof k.RefreshAccessTokenFailedError)throw e;throw new k.RefreshAccessTokenFailedError(e)}}async function E(e,r,t){let i=`https://api.vercel.com/v1/projects/${r}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,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 r=f.join(e,".vercel","project.json");if(!g.existsSync(r))throw new b.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(g.readFileSync(r,"utf8"));if("string"!=typeof t.projectId&&"string"!=typeof t.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:t.projectId,teamId:t.orgId}}function P(e,r){let t=(0,h.getUserDataDir)();if(!t)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let i=f.join(t,"com.vercel.token",`${r}.json`),a=JSON.stringify(e);g.mkdirSync(f.dirname(i),{mode:504,recursive:!0}),g.writeFileSync(i,a),g.chmodSync(i,432)}function I(e){let r=(0,h.getUserDataDir)();if(!r)throw new b.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=f.join(r,"com.vercel.token",`${e}.json`);if(!g.existsSync(t))return null;let i=JSON.parse(g.readFileSync(t,"utf8"));return w(i),i}function A(e){let r=e.split(".");if(3!==r.length)throw new b.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=r[1].replace(/-/g,"+").replace(/_/g,"/"),i=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(i,"base64").toString("utf8"))}function j(e,r=0){return 1e3*e.exp<Date.now()+r}}];
2
2
 
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0j_n5l3._.js.map
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__1692zrv._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[418520,e=>e.a(async(t,a)=>{try{var i=await e.y("@libsql/client-6da938047d5fc1cd");e.n(i),a()}catch(e){a(e)}},!0),902157,(e,t,a)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,a)=>{t.exports=e.x("node:path",()=>require("node:path"))},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),a=process.env.THURSDAY_HOME?.trim()||process.cwd(),i=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,l=`file:${a}/local.db`,s=".ai-workspace",n={workspace:s,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${s}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,i,"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,a,"DB_FILE_NAME",0,l,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,n,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},656719,e=>{"use strict";var t=e.i(864328);let a=[...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"},l={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"}},s="DEFAULT_MODEL",n={key:s,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})))},r=e=>a.includes(e.apiKeyName),o=e=>({key:e.apiKeyName,label:e.label,provider:e.id}),c=[{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(r).map(o)},{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=>!r(e)).map(o)},{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],...l[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(c.flatMap(e=>e.entries).map(e=>[e.key,e])),c.flatMap(e=>e.entries.map(e=>e.key)),Object.fromEntries(c.flatMap(e=>e.entries).filter(e=>e.choices?.length).map(e=>[e.key,e.choices])),e.s(["DEFAULT_MODEL_KEY",0,s,"MEDIA_MODEL_KEYS",0,i])},724185,e=>e.a(async(t,a)=>{try{var i=e.i(336763),l=e.i(876393),s=e.i(220376);e.i(656719);var n=t([l]);async function r(e){let t=process.env[e]?.trim();if(t)return t;let[a]=await l.database.select({value:s.configTable.value}).from(s.configTable).where((0,i.eq)(s.configTable.key,e));return a?.value.trim()||void 0}[l]=n.then?(await n)():n,e.s(["readConfig",0,r]),a()}catch(e){a(e)}},!1),933395,e=>{"use strict";var t=e.i(517435),a=e.i(864328),i=e.i(951056),l=e.i(986129);t.default.object({systemPrompt:t.default.string().max(l.COMMON_VALIDATE.prompt.max).nullish(),model:a.speachModelRefSchema.nullish(),locale:t.default.string().max(35).nullish()}),i.botIconSchema.extend({kind:t.default.enum(["mark","ascii"]).default("ascii"),charset:t.default.enum(["ascii","emoji","emojiOnly"]).default("ascii"),fontSize:t.default.number().min(4).max(16).default(8),density:t.default.number().min(.6).max(2).default(1.4)}).parse({});t.default.object({enabled:t.default.boolean(),phrase:t.default.string().trim().min(3).max(32)}),t.default.object({enabled:t.default.boolean(),combo:t.default.string().trim().min(1).max(64)}),t.default.enum(["off","waiting","any"]),t.default.enum(["center","sides"]),t.default.object({id:t.default.string().min(1),role:t.default.enum(["user","assistant","tool"]),tool:t.default.string().nullish(),text:t.default.string(),seq:t.default.number().int().min(0)}),e.s(["THURSDAY_KEYS",0,{skills:"THURSDAY_SKILLS"},"isSkillsOn",0,e=>e?.trim()==="on"],933395)},520401,e=>e.a(async(t,a)=>{try{var i=e.i(336763),l=e.i(396918),s=e.i(876393),n=e.i(220376),r=e.i(724185),o=e.i(933395),c=t([s,r]);async function d(){return(0,o.isSkillsOn)(await (0,r.readConfig)(o.THURSDAY_KEYS.skills))}async function u(e,t){return(await s.database.select({role:n.callMessageTable.role,text:n.callMessageTable.text}).from(n.callMessageTable).where((0,i.and)((0,i.eq)(n.callMessageTable.callId,e),(0,i.inArray)(n.callMessageTable.role,["user","assistant"]))).orderBy((0,l.desc)(n.callMessageTable.seq)).limit(t)).reverse().map(e=>({role:e.role,text:e.text}))}async function m(){return(await s.database.select({id:n.callTable.id}).from(n.callTable).where((0,i.isNull)(n.callTable.endedAt)).limit(1)).length>0}async function f(){await s.database.update(n.callTable).set({endedAt:new Date}).where((0,i.isNull)(n.callTable.endedAt))}[s,r]=c.then?(await c)():c,e.s(["isAnyCallLive",0,m,"listCallTurns",0,u,"readCallSkillsOn",0,d,"sweepCalls",0,f]),a()}catch(e){a(e)}},!1)];
1
+ module.exports=[418520,e=>e.a(async(t,a)=>{try{var i=await e.y("@libsql/client-6da938047d5fc1cd");e.n(i),a()}catch(e){a(e)}},!0),902157,(e,t,a)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,a)=>{t.exports=e.x("node:path",()=>require("node:path"))},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),a=process.env.THURSDAY_HOME?.trim()||process.cwd(),i=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,l=`file:${a}/local.db`,s=".ai-workspace",n={workspace:s,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${s}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,i,"BOT_NOTES",0,{chars:400},"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,a,"DB_FILE_NAME",0,l,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,n,"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},656719,e=>{"use strict";var t=e.i(864328);let a=[...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"},l={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"}},s="DEFAULT_MODEL",n={key:s,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})))},r=e=>a.includes(e.apiKeyName),o=e=>({key:e.apiKeyName,label:e.label,provider:e.id}),c=[{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(r).map(o)},{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=>!r(e)).map(o)},{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],...l[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(c.flatMap(e=>e.entries).map(e=>[e.key,e])),c.flatMap(e=>e.entries.map(e=>e.key)),Object.fromEntries(c.flatMap(e=>e.entries).filter(e=>e.choices?.length).map(e=>[e.key,e.choices])),e.s(["DEFAULT_MODEL_KEY",0,s,"MEDIA_MODEL_KEYS",0,i])},724185,e=>e.a(async(t,a)=>{try{var i=e.i(336763),l=e.i(876393),s=e.i(220376);e.i(656719);var n=t([l]);async function r(e){let t=process.env[e]?.trim();if(t)return t;let[a]=await l.database.select({value:s.configTable.value}).from(s.configTable).where((0,i.eq)(s.configTable.key,e));return a?.value.trim()||void 0}[l]=n.then?(await n)():n,e.s(["readConfig",0,r]),a()}catch(e){a(e)}},!1),933395,e=>{"use strict";var t=e.i(517435),a=e.i(864328),i=e.i(951056),l=e.i(986129);t.default.object({systemPrompt:t.default.string().max(l.COMMON_VALIDATE.prompt.max).nullish(),model:a.speachModelRefSchema.nullish(),locale:t.default.string().max(35).nullish()}),i.botIconSchema.extend({kind:t.default.enum(["mark","ascii"]).default("ascii"),charset:t.default.enum(["ascii","emoji","emojiOnly"]).default("ascii"),fontSize:t.default.number().min(4).max(16).default(8),density:t.default.number().min(.6).max(2).default(1.4)}).parse({});t.default.object({enabled:t.default.boolean(),phrase:t.default.string().trim().min(3).max(32)}),t.default.object({enabled:t.default.boolean(),combo:t.default.string().trim().min(1).max(64)}),t.default.enum(["off","waiting","any"]),t.default.enum(["center","sides"]),t.default.object({id:t.default.string().min(1),role:t.default.enum(["user","assistant","tool"]),tool:t.default.string().nullish(),text:t.default.string(),seq:t.default.number().int().min(0)}),e.s(["THURSDAY_KEYS",0,{skills:"THURSDAY_SKILLS"},"isSkillsOn",0,e=>e?.trim()==="on"],933395)},520401,e=>e.a(async(t,a)=>{try{var i=e.i(336763),l=e.i(396918),s=e.i(876393),n=e.i(220376),r=e.i(724185),o=e.i(933395),c=t([s,r]);async function d(){return(0,o.isSkillsOn)(await (0,r.readConfig)(o.THURSDAY_KEYS.skills))}async function u(e,t){return(await s.database.select({role:n.callMessageTable.role,text:n.callMessageTable.text}).from(n.callMessageTable).where((0,i.and)((0,i.eq)(n.callMessageTable.callId,e),(0,i.inArray)(n.callMessageTable.role,["user","assistant"]))).orderBy((0,l.desc)(n.callMessageTable.seq)).limit(t)).reverse().map(e=>({role:e.role,text:e.text}))}async function m(){return(await s.database.select({id:n.callTable.id}).from(n.callTable).where((0,i.isNull)(n.callTable.endedAt)).limit(1)).length>0}async function f(){await s.database.update(n.callTable).set({endedAt:new Date}).where((0,i.isNull)(n.callTable.endedAt))}[s,r]=c.then?(await c)():c,e.s(["isAnyCallLive",0,m,"listCallTurns",0,u,"readCallSkillsOn",0,d,"sweepCalls",0,f]),a()}catch(e){a(e)}},!1)];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__16thabu._.js.map
@@ -1,8 +1,8 @@
1
- module.exports=[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"))},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"))},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),i=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,s=`file:${r}/local.db`,a=".ai-workspace",o={workspace:a,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${a}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,i,"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,r,"DB_FILE_NAME",0,s,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,o,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},871096,e=>{"use strict";var t=e.i(912714),r=e.i(750227),i=e.i(333925),s=e.i(938281),a=e.i(874533);let o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function n(e,i,s,a){if(e.length<=a.max)return e;let o=(0,r.join)(s,a.dir),n=(0,r.join)(o,`${new Date().toISOString().replace(/[:.]/g,"-")}-${i.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=n;try{await (0,t.mkdir)(o,{recursive:!0}),await (0,t.writeFile)(n,e),l=(0,r.relative)(s,n)||n}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,a.head).trimEnd()}
1
+ module.exports=[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"))},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"))},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),i=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,s=`file:${r}/local.db`,a=".ai-workspace",n={workspace:a,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${a}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,i,"BOT_NOTES",0,{chars:400},"BOT_RUN",0,{steps:25,compactAt:12e4,summaryWords:{min:600,max:3e3,perTokens:200},resumeMessages:20},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","DATA_DIR",0,r,"DB_FILE_NAME",0,s,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,n,"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500}])},871096,73829,e=>{"use strict";var t=e.i(912714),r=e.i(750227),i=e.i(333925),s=e.i(938281),a=e.i(874533);let n=18e4,o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]),l=({workingDirectory:e,spill:i,toolPath:s})=>{let l=(0,r.resolve)(e),u=(s??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);async function*p(e){let i;try{i=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of i){if(o.has(t.name)||t.name.startsWith("."))continue;let i=(0,r.join)(e,t.name);t.isDirectory()?yield*p(i):t.isFile()&&(yield i)}}return{cwd:l,resolve:d,readFile:(e,r)=>(0,t.readFile)(d(e),r),async writeFile(e,i){let s=d(e);await (0,t.mkdir)((0,r.join)(s,".."),{recursive:!0}),await (0,t.writeFile)(s,i)},readdir:(e,r)=>(0,t.readdir)(d(e),r),fold:(e,t="output")=>c(e,t,l,i),async glob(e,{path:t=".",limit:i=200}={}){let s=d(t),a=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),n=[];for await(let e of p(s)){let t=(0,r.relative)(s,e).split(r.sep).join("/");if((a.test(t)||a.test(e))&&n.push(e),n.length>=i)break}return n},exec:(e,{cwd:t,timeoutMs:r=n,signal:s,env:o}={})=>new Promise(n=>{let p=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&&(p.PATH=`${p.PATH??""}:${u}`);let h=(0,a.spawn)(e,{shell:!0,cwd:t?d(t):l,env:{...p,...o},detached:!0}),w="",m="";h.stdout?.on("data",e=>w+=e),h.stderr?.on("data",e=>m+=e);let T=e=>{m+=`
2
+ [${e}]`;try{h.pid&&process.kill(-h.pid,"SIGTERM")}catch{h.kill("SIGTERM")}},f=setTimeout(()=>T(`Timed out after ${r}ms`),r),_=()=>T("Aborted");s?.aborted?_():s?.addEventListener("abort",_,{once:!0});let S=async e=>{clearTimeout(f),s?.removeEventListener("abort",_),n({...e,stdout:await c(e.stdout,"stdout",l,i),stderr:await c(e.stderr,"stderr",l,i)})};h.on("close",e=>S({stdout:w,stderr:m,exitCode:e??-1})),h.on("error",e=>S({stdout:w,stderr:m+String(e),exitCode:-1}))})}};async function c(e,i,s,a){if(e.length<=a.max)return e;let n=(0,r.join)(s,a.dir),o=(0,r.join)(n,`${new Date().toISOString().replace(/[:.]/g,"-")}-${i.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=o;try{await (0,t.mkdir)(n,{recursive:!0}),await (0,t.writeFile)(o,e),l=(0,r.relative)(s,o)||o}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,a.head).trimEnd()}
2
3
 
3
4
  [${i} cut at ${a.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
4
5
 
5
- ${e.slice(-a.tail).trimStart()}`}let l=i.APP_DIR,c=(0,r.join)(i.DATA_DIR,i.PATHS.workspace),d=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean);(0,r.join)(c,i.PATHS.artifacts);let u=[i.PATHS.artifacts,i.PATHS.projects,i.PATHS.scratch],p=new Set([...u,".agents"]),h=(e,t)=>t===e||t.startsWith(e+r.sep),w=e=>(0,t.realpath)(e).catch(()=>null);async function _(e){let t=await w(c)??c,i=(0,r.resolve)(c,e);if(!h(c,i))return null;let s=i,a=await w(s);for(;null===a&&(0,r.dirname)(s)!==s;)s=(0,r.dirname)(s),a=await w(s);if(null===a)return null;let o=(0,r.relative)(s,i),n=o?(0,r.join)(a,o):a;return h(t,n)?n:null}let m=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:i.BROWSER_VIEWPORT}:{};async function T(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await P(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));0!==t.exitCode&&s.logger.warn(`no browser — bots cannot open a page until \`playwright-cli install-browser chromium\` succeeds: ${t.stderr.trim().split("\n").at(-1)??""}`)}async function f(e){let t=await P();await t.exec("playwright-cli close",{env:m(e),timeoutMs:15e3}).catch(()=>{}),await S()}async function S(){let e=(0,r.join)(c,".playwright-cli"),i=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),s=Date.now()-36e5;for(let a of i){if(!a.isFile())continue;let i=(0,r.join)(e,a.name),o=await (0,t.stat)(i).catch(()=>null);o&&o.mtimeMs<s&&await (0,t.unlink)(i).catch(()=>{})}}let A={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function P(){for(let e of u)await (0,t.mkdir)((0,r.join)(c,e),{recursive:!0});for(let[e,i]of Object.entries(A))await (0,t.writeFile)((0,r.join)(c,e),i,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:i,toolPath:s})=>{let l=(0,r.resolve)(e),c=(s??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);async function*u(e){let i;try{i=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of i){if(o.has(t.name)||t.name.startsWith("."))continue;let i=(0,r.join)(e,t.name);t.isDirectory()?yield*u(i):t.isFile()&&(yield i)}}return{cwd:l,resolve:d,readFile:(e,r)=>(0,t.readFile)(d(e),r),async writeFile(e,i){let s=d(e);await (0,t.mkdir)((0,r.join)(s,".."),{recursive:!0}),await (0,t.writeFile)(s,i)},readdir:(e,r)=>(0,t.readdir)(d(e),r),fold:(e,t="output")=>n(e,t,l,i),async glob(e,{path:t=".",limit:i=200}={}){let s=d(t),a=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),o=[];for await(let e of u(s)){let t=(0,r.relative)(s,e).split(r.sep).join("/");if((a.test(t)||a.test(e))&&o.push(e),o.length>=i)break}return o},exec:(e,{cwd:t,timeoutMs:r=18e4,signal:s,env:o}={})=>new Promise(u=>{let p=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&&(p.PATH=`${p.PATH??""}:${c}`);let h=(0,a.spawn)(e,{shell:!0,cwd:t?d(t):l,env:{...p,...o},detached:!0}),w="",_="";h.stdout?.on("data",e=>w+=e),h.stderr?.on("data",e=>_+=e);let m=e=>{_+=`
6
- [${e}]`;try{h.pid&&process.kill(-h.pid,"SIGTERM")}catch{h.kill("SIGTERM")}},T=setTimeout(()=>m(`Timed out after ${r}ms`),r),f=()=>m("Aborted");s?.aborted?f():s?.addEventListener("abort",f,{once:!0});let S=async e=>{clearTimeout(T),s?.removeEventListener("abort",f),u({...e,stdout:await n(e.stdout,"stdout",l,i),stderr:await n(e.stderr,"stderr",l,i)})};h.on("close",e=>S({stdout:w,stderr:_,exitCode:e??-1})),h.on("error",e=>S({stdout:w,stderr:_+String(e),exitCode:-1}))})}})({workingDirectory:c,spill:{dir:i.PATHS.output,...i.TOOL_OUTPUT},toolPath:d})}e.s(["closeJobShell",0,f,"ensureBrowser",0,T,"insideWorkspace",0,_,"jobShellEnv",0,m,"openWorkspace",0,P,"writeRefusal",0,function(e){if(h(c,e)){let t=(0,r.relative)(c,e),[s]=t.split(r.sep);return s&&p.has(s)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${i.PATHS.artifacts}/, code under ${i.PATHS.projects}/, everything else under ${i.PATHS.scratch}/.`}return h(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}],871096)},207580,e=>{e.v(t=>Promise.all(["server/chunks/[externals]__0y3n8y6._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0q8fc1x._.js"].map(t=>e.l(t))).then(()=>t(27996)))}];
6
+ ${e.slice(-a.tail).trimStart()}`}e.s(["EXEC_TIMEOUT_MS",0,n,"createSandBox",0,l],73829);let u=i.APP_DIR,d=(0,r.join)(i.DATA_DIR,i.PATHS.workspace),p=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(u,"node_modules",".bin")]).filter(Boolean);(0,r.join)(d,i.PATHS.artifacts);let h=[i.PATHS.artifacts,i.PATHS.projects,i.PATHS.scratch,i.PATHS.bots],w=new Set([...h,".agents"]),m=(e,t)=>t===e||t.startsWith(e+r.sep),T=e=>(0,t.realpath)(e).catch(()=>null);async function f(e){let t=await T(d)??d,i=(0,r.resolve)(d,e);if(!m(d,i))return null;let s=i,a=await T(s);for(;null===a&&(0,r.dirname)(s)!==s;)s=(0,r.dirname)(s),a=await T(s);if(null===a)return null;let n=(0,r.relative)(s,i),o=n?(0,r.join)(a,n):a;return m(t,o)?o:null}async function _(e){let s=`${i.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;return await (0,t.mkdir)((0,r.join)(d,s),{recursive:!0}),s}async function S(e,s){let a,n=(a=s.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${i.PATHS.scratch}/${a}-${e.slice(0,6)}`);return await (0,t.mkdir)((0,r.join)(d,n),{recursive:!0}),n}let P=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:i.BROWSER_VIEWPORT}:{},A=null,y={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function g(e){let t=Object.values(y).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),i=new Set(r.trim().split(/\s+/).filter(Boolean)),s=e=>({found:e.filter(e=>i.has(e)),missing:e.filter(e=>!i.has(e))});return{runtimes:s(y.runtimes),managers:s(y.managers),browser:A}}async function E(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await x(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));(A=0===t.exitCode)||s.logger.warn(`no browser — bots cannot open a page until \`playwright-cli install-browser chromium\` succeeds: ${t.stderr.trim().split("\n").at(-1)??""}`)}async function R(e){let t=await x();await t.exec("playwright-cli close",{env:P(e),timeoutMs:15e3}).catch(()=>{}),await k(),await v()}async function v(){let e=(0,r.join)(d,i.PATHS.output),s=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),a=Date.now()-$;for(let i of s){if(!i.isFile())continue;let s=(0,r.join)(e,i.name),n=await (0,t.stat)(s).catch(()=>null);n&&n.mtimeMs<a&&await (0,t.unlink)(s).catch(()=>{})}}let $=864e5;async function k(){let e=(0,r.join)(d,".playwright-cli"),i=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),s=Date.now()-36e5;for(let a of i){if(!a.isFile())continue;let i=(0,r.join)(e,a.name),n=await (0,t.stat)(i).catch(()=>null);n&&n.mtimeMs<s&&await (0,t.unlink)(i).catch(()=>{})}}let O={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function x(){for(let e of h)await (0,t.mkdir)((0,r.join)(d,e),{recursive:!0});for(let[e,i]of Object.entries(O))await (0,t.writeFile)((0,r.join)(d,e),i,{flag:"wx"}).catch(()=>{});return l({workingDirectory:d,spill:{dir:i.PATHS.output,...i.TOOL_OUTPUT},toolPath:p})}e.s(["closeJobShell",0,R,"ensureBrowser",0,E,"insideWorkspace",0,f,"jobShellEnv",0,P,"openBotFolder",0,_,"openJobScratch",0,S,"openWorkspace",0,x,"readMachineTools",0,g,"writeRefusal",0,function(e){if(m(d,e)){let t=(0,r.relative)(d,e),[s]=t.split(r.sep);return s&&w.has(s)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${i.PATHS.artifacts}/, code under ${i.PATHS.projects}/, your own kit under ${i.PATHS.bots}/, and this job's working material under ${i.PATHS.scratch}/.`}return m(u,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}],871096)},207580,e=>{e.v(t=>Promise.all(["server/chunks/[externals]__0y3n8y6._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0q8fc1x._.js"].map(t=>e.l(t))).then(()=>t(27996)))}];
7
7
 
8
8
  //# sourceMappingURL=%5Broot-of-the-server%5D__173nhwf._.js.map