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
package/lib/tokens.ts CHANGED
@@ -14,3 +14,22 @@ export function estimateTokens(text: string): number {
14
14
  }
15
15
  return Math.ceil(cjk / 1.3 + other / 4);
16
16
  }
17
+
18
+ /**
19
+ * One assembled prompt measured by its own `##` headings, biggest first. Read
20
+ * off the finished text rather than off what built it: what is counted is then
21
+ * what is actually sent, and a chapter cannot be added without appearing here.
22
+ */
23
+ export function sectionTokens(
24
+ text: string,
25
+ ): { name: string; tokens: number }[] {
26
+ return text
27
+ .split(/\n(?=## )/)
28
+ .map((block) => ({
29
+ name: block.startsWith("## ")
30
+ ? block.slice(3, block.indexOf("\n"))
31
+ : "identity",
32
+ tokens: estimateTokens(block),
33
+ }))
34
+ .sort((a, b) => b.tokens - a.tokens);
35
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thursday-agent",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "A voice agent that runs on your own machine — talk to her, she hands the slow work to bots with a shell, a browser and skills.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -1,10 +0,0 @@
1
- module.exports=[418520,e=>e.a(async(t,r)=>{try{var s=await e.y("@libsql/client-6da938047d5fc1cd");e.n(s),r()}catch(e){r(e)}},!0),874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},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"))},232347,e=>{"use strict";let t,r,s,a,n,i;var o,l=e.i(333925),c=e.i(938281);let u={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},d=globalThis,p=d.__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)})}),h=d.__presence??=(o=l.BROWSER_GONE_MS,r=!1,s=null,a=new Set,n=new Set,i=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){s&&clearTimeout(s),s=null,r||(r=!0,i(n));return}!s&&r&&(s=setTimeout(()=>{s=null,r=!1,i(a)},o))},onGone:e=>(a.add(e),()=>a.delete(e)),onBack:e=>(n.add(e),()=>n.delete(e))}),f=d.__appEventStream??=function(e,t={}){let r=new TextEncoder,s=t.heartbeatMs??2e4,a=0;return{respond:(n,i)=>{let o=()=>{};return new Response(new ReadableStream({async start(l){let u=!1,d=new Map,p=[],h=e=>{if(!u)try{l.enqueue(r.encode(e))}catch{o()}},f=e=>h(`data: ${JSON.stringify(e)}
2
-
3
- `),w=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return f(e);let s=d.get(r);s&&clearTimeout(s),d.set(r,setTimeout(()=>{d.delete(r),f(e)},t.coalesce?.ms))},m=e.subscribe(e=>p?p.push(e):w(e)),_=setInterval(()=>h(": ping\n\n"),s);a+=1,t.onWatchers?.(a),o=()=>{if(!u){for(let e of(u=!0,a-=1,t.onWatchers?.(a),m(),clearInterval(_),d.values()))clearTimeout(e);try{l.close()}catch{}}},n.addEventListener("abort",o);try{for(let e of await i?.()??[])f(e)}catch(e){c.logger.error("event stream opening failed",e),o();return}let T=p;for(let e of(p=null,T))w(e)},cancel(){o()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return a}}}(p,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:h.track});d.__bootId??=crypto.randomUUID(),e.s(["appEventStream",0,f,"appEvents",0,p,"presence",0,h],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),s=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,a=`file:${r}/local.db`,n=".ai-workspace",i={workspace:n,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${n}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,s,"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,a,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,i,"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),s=e.i(333925),a=e.i(938281),n=e.i(874533);let i=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function o(e,s,a,n){if(e.length<=n.max)return e;let i=(0,r.join)(a,n.dir),o=(0,r.join)(i,`${new Date().toISOString().replace(/[:.]/g,"-")}-${s.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=o;try{await (0,t.mkdir)(i,{recursive:!0}),await (0,t.writeFile)(o,e),l=(0,r.relative)(a,o)||o}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,n.head).trimEnd()}
4
-
5
- [${s} cut at ${n.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
6
-
7
- ${e.slice(-n.tail).trimStart()}`}let l=s.APP_DIR,c=(0,r.join)(s.DATA_DIR,s.PATHS.workspace),u=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean);(0,r.join)(c,s.PATHS.artifacts);let d=[s.PATHS.artifacts,s.PATHS.projects,s.PATHS.scratch],p=new Set([...d,".agents"]),h=(e,t)=>t===e||t.startsWith(e+r.sep),f=e=>(0,t.realpath)(e).catch(()=>null);async function w(e){let t=await f(c)??c,s=(0,r.resolve)(c,e);if(!h(c,s))return null;let a=s,n=await f(a);for(;null===n&&(0,r.dirname)(a)!==a;)a=(0,r.dirname)(a),n=await f(a);if(null===n)return null;let i=(0,r.relative)(a,s),o=i?(0,r.join)(n,i):n;return h(t,o)?o:null}let m=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:s.BROWSER_VIEWPORT}:{};async function _(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await g(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));0!==t.exitCode&&a.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 T(e){let t=await g();await t.exec("playwright-cli close",{env:m(e),timeoutMs:15e3}).catch(()=>{}),await y()}async function y(){let e=(0,r.join)(c,".playwright-cli"),s=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),a=Date.now()-36e5;for(let n of s){if(!n.isFile())continue;let s=(0,r.join)(e,n.name),i=await (0,t.stat)(s).catch(()=>null);i&&i.mtimeMs<a&&await (0,t.unlink)(s).catch(()=>{})}}let S={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function g(){for(let e of d)await (0,t.mkdir)((0,r.join)(c,e),{recursive:!0});for(let[e,s]of Object.entries(S))await (0,t.writeFile)((0,r.join)(c,e),s,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:s,toolPath:a})=>{let l=(0,r.resolve)(e),c=(a??[]).filter(Boolean).join(":"),u=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);async function*d(e){let s;try{s=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of s){if(i.has(t.name)||t.name.startsWith("."))continue;let s=(0,r.join)(e,t.name);t.isDirectory()?yield*d(s):t.isFile()&&(yield s)}}return{cwd:l,resolve:u,readFile:(e,r)=>(0,t.readFile)(u(e),r),async writeFile(e,s){let a=u(e);await (0,t.mkdir)((0,r.join)(a,".."),{recursive:!0}),await (0,t.writeFile)(a,s)},readdir:(e,r)=>(0,t.readdir)(u(e),r),fold:(e,t="output")=>o(e,t,l,s),async glob(e,{path:t=".",limit:s=200}={}){let a=u(t),n=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),i=[];for await(let e of d(a)){let t=(0,r.relative)(a,e).split(r.sep).join("/");if((n.test(t)||n.test(e))&&i.push(e),i.length>=s)break}return i},exec:(e,{cwd:t,timeoutMs:r=18e4,signal:a,env:i}={})=>new Promise(d=>{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,n.spawn)(e,{shell:!0,cwd:t?u(t):l,env:{...p,...i},detached:!0}),f="",w="";h.stdout?.on("data",e=>f+=e),h.stderr?.on("data",e=>w+=e);let m=e=>{w+=`
8
- [${e}]`;try{h.pid&&process.kill(-h.pid,"SIGTERM")}catch{h.kill("SIGTERM")}},_=setTimeout(()=>m(`Timed out after ${r}ms`),r),T=()=>m("Aborted");a?.aborted?T():a?.addEventListener("abort",T,{once:!0});let y=async e=>{clearTimeout(_),a?.removeEventListener("abort",T),d({...e,stdout:await o(e.stdout,"stdout",l,s),stderr:await o(e.stderr,"stderr",l,s)})};h.on("close",e=>y({stdout:f,stderr:w,exitCode:e??-1})),h.on("error",e=>y({stdout:f,stderr:w+String(e),exitCode:-1}))})}})({workingDirectory:c,spill:{dir:s.PATHS.output,...s.TOOL_OUTPUT},toolPath:u})}e.s(["closeJobShell",0,T,"ensureBrowser",0,_,"insideWorkspace",0,w,"jobShellEnv",0,m,"openWorkspace",0,g,"writeRefusal",0,function(e){if(h(c,e)){let t=(0,r.relative)(c,e),[a]=t.split(r.sep);return a&&p.has(a)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${s.PATHS.artifacts}/, code under ${s.PATHS.projects}/, everything else under ${s.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)))}];
9
-
10
- //# sourceMappingURL=%5Broot-of-the-server%5D__02kt8yn._.js.map
@@ -1,5 +0,0 @@
1
- module.exports=[418520,e=>e.a(async(t,r)=>{try{var o=await e.y("@libsql/client-6da938047d5fc1cd");e.n(o),r()}catch(e){r(e)}},!0),233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},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"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},380690,e=>{"use strict";let t,r,o,a,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,o=null,a=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){o&&clearTimeout(o),o=null,r||(r=!0,s(n));return}!o&&r&&(o=setTimeout(()=>{o=null,r=!1,s(a)},i))},onGone:e=>(a.add(e),()=>a.delete(e)),onBack:e=>(n.add(e),()=>n.delete(e))}),b=m.__appEventStream??=function(e,t={}){let r=new TextEncoder,o=t.heartbeatMs??2e4,a=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
- `),f=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return b(e);let o=m.get(r);o&&clearTimeout(o),m.set(r,setTimeout(()=>{m.delete(r),b(e)},t.coalesce?.ms))},T=e.subscribe(e=>u?u.push(e):f(e)),h=setInterval(()=>d(": ping\n\n"),o);a+=1,t.onWatchers?.(a),i=()=>{if(!p){for(let e of(p=!0,a-=1,t.onWatchers?.(a),T(),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 g=u;for(let e of(u=null,g))f(e)},cancel(){i()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return a}}}(u,{coalesce:{ms:150,keyOf:e=>e.type in p?e.type:null},onWatchers:d.track}),f=m.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,f,"appEventStream",0,b,"appEvents",0,u],380690)},148831,e=>e.a(async(t,r)=>{try{var o=e.i(875225),a=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,a.count)(l.mcpToolTable.id)}).from(l.mcpServerTable).leftJoin(l.mcpToolTable,(0,o.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,o.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,o.eq)(l.mcpToolTable.serverName,e)).orderBy(l.mcpToolTable.name)}async function f(e){let[t]=await i.database.select().from(l.mcpServerTable).where((0,o.eq)(l.mcpServerTable.name,e));return t??null}[i]=p.then?(await p)():p;let x=()=>s.appEvents.emit({type:"mcp"});async function T(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,o.and)((0,o.eq)(l.mcpToolTable.serverName,e),(0,o.notInArray)(l.mcpToolTable.name,t.map(e=>e.name))):(0,o.eq)(l.mcpToolTable.serverName,e)),await r.update(l.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,o.eq)(l.mcpServerTable.name,e))}),x()}function h(e){return n.sql.raw(`excluded."${e.name}"`)}async function g(e,t){await i.database.update(l.mcpServerTable).set({lastError:t}).where((0,o.eq)(l.mcpServerTable.name,e)),x()}async function v(e,t){await i.database.update(l.mcpServerTable).set({oauth:t}).where((0,o.eq)(l.mcpServerTable.name,e)),x()}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,o.eq)(l.botMcpToolTable.toolId,l.mcpToolTable.id)).where((0,o.eq)(l.botMcpToolTable.botName,e)).orderBy(l.mcpToolTable.serverName,l.mcpToolTable.name)},"findServer",0,f,"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,o.and)((0,o.eq)(l.mcpToolTable.serverName,e),(0,o.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,o.eq)(l.mcpToolTable.serverName,e)).orderBy(l.mcpToolTable.name):t.orderBy(l.mcpToolTable.serverName,l.mcpToolTable.name)},"saveConnectionError",0,g,"saveOAuthData",0,v,"syncServerTools",0,T]),r()}catch(e){r(e)}},!1),441963,e=>{"use strict";var t=e.i(469719),r=e.i(704161);let o=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()}),a=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([o,a]),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)])},41444,e=>{"use strict";e.s(["PromiseChain",0,()=>{let e=Promise.resolve();return t=>{let r=e.then(()=>t());return e=r.catch(()=>{}),r}},"clip",0,function(e,t){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1).trimEnd()}…`:r},"errorToString",0,function(e){return e instanceof Error?e.message:String(e)}])},260338,e=>{"use strict";var t=e.i(518899),r=e.i(844988),o=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,o.Column)?e:String)}])},819481,(e,t,r)=>{"use strict";var o=Object.defineProperty,a=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,i={},l={RequestCookies:()=>f,ResponseCookies:()=>T,parseCookie:()=>m,parseSetCookie:()=>u,stringifyCookie:()=>p};for(var c in l)o(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),o=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?o:`${o}; ${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[o,a]=[r.slice(0,e),r.slice(e+1)];try{t.set(o,decodeURIComponent(null!=a?a:"true"))}catch{}}return t}function u(e){if(!e)return;let[[t,r],...o]=m(e),{domain:a,expires:n,httponly:s,maxage:i,path:l,samesite:c,secure:p,partitioned:u,priority:f}=Object.fromEntries(o.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var T,h,g={name:t,value:decodeURIComponent(r),domain:a,...n&&{expires:new Date(n)},...s&&{httpOnly:!0},..."string"==typeof i&&{maxAge:Number(i)},path:l,...c&&{sameSite:d.includes(T=(T=c).toLowerCase())?T:void 0},...p&&{secure:!0},...f&&{priority:b.includes(h=(h=f).toLowerCase())?h:void 0},...u&&{partitioned:!0}};let e={};for(let t in g)g[t]&&(e[t]=g[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||o(e,i,{get:()=>t[i],enumerable:!(r=a(t,i))||r.enumerable});return e})(o({},"__esModule",{value:!0}),i);var d=["strict","lax","none"],b=["low","medium","high"],f=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 o="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===o).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,o=this._parsed;return o.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(o).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("; ")}},T=class{constructor(e){var t,r,o;this._parsed=new Map,this._headers=e;const a=null!=(o=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?o:[];for(const e of Array.isArray(a)?a:function(e){if(!e)return[];var t,r,o,a,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(o=i,i+=1,l(),a=i;i<e.length&&"="!==(r=e.charAt(i))&&";"!==r&&","!==r;)i+=1;i<e.length&&"="===e.charAt(i)?(n=!0,i=a,s.push(e.substring(t,o)),t=i):i=o+1}else i+=1;(!n||i>=e.length)&&s.push(e.substring(t,e.length))}return s}(a)){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 o="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===o)}has(e){return this._parsed.has(e)}set(...e){let[t,r,o]=1===e.length?[e[0].name,e[0].value,e[0]]:e,a=this._parsed;return a.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,...o})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=p(r);t.append("set-cookie",e)}}(a,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__0h59di-._.js.map
@@ -1,5 +0,0 @@
1
- module.exports=[500874,(e,r,t)=>{r.exports=e.x("buffer",()=>require("buffer"))},233405,(e,r,t)=>{r.exports=e.x("child_process",()=>require("child_process"))},522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},446786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))},814747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},605365,(e,r,t)=>{r.exports=e.x("process",()=>require("process"))},380690,e=>{"use strict";let r,t,o,n,a,l;var c,i=e.i(687388),s=e.i(640911);let u={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},p=globalThis,m=p.__appEvents??=(r=new Set,{emit(e){for(let t of[...r])try{t(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(r.add(e),()=>{r.delete(e)})}),f=p.__presence??=(c=i.BROWSER_GONE_MS,t=!1,o=null,n=new Set,a=new Set,l=e=>{for(let r of[...e])try{r()}catch(e){console.error("presence listener failed",e)}},{get watching(){return t},track(e){if(e>0){o&&clearTimeout(o),o=null,t||(t=!0,l(a));return}!o&&t&&(o=setTimeout(()=>{o=null,t=!1,l(n)},c))},onGone:e=>(n.add(e),()=>n.delete(e)),onBack:e=>(a.add(e),()=>a.delete(e))}),d=p.__appEventStream??=function(e,r={}){let t=new TextEncoder,o=r.heartbeatMs??2e4,n=0;return{respond:(a,l)=>{let c=()=>{};return new Response(new ReadableStream({async start(i){let u=!1,p=new Map,m=[],f=e=>{if(!u)try{i.enqueue(t.encode(e))}catch{c()}},d=e=>f(`data: ${JSON.stringify(e)}
2
-
3
- `),b=e=>{let t=r.coalesce?.keyOf(e)??null;if(null===t)return d(e);let o=p.get(t);o&&clearTimeout(o),p.set(t,setTimeout(()=>{p.delete(t),d(e)},r.coalesce?.ms))},T=e.subscribe(e=>m?m.push(e):b(e)),h=setInterval(()=>f(": ping\n\n"),o);n+=1,r.onWatchers?.(n),c=()=>{if(!u){for(let e of(u=!0,n-=1,r.onWatchers?.(n),T(),clearInterval(h),p.values()))clearTimeout(e);try{i.close()}catch{}}},a.addEventListener("abort",c);try{for(let e of await l?.()??[])d(e)}catch(e){s.logger.error("event stream opening failed",e),c();return}let y=m;for(let e of(m=null,y))b(e)},cancel(){c()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return n}}}(m,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:f.track}),b=p.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,b,"appEventStream",0,d,"appEvents",0,m],380690)},148831,e=>e.a(async(r,t)=>{try{var o=e.i(875225),n=e.i(260338),a=e.i(518899),l=e.i(380690),c=e.i(528790),i=e.i(613240),s=e.i(441963),u=r([c]);function p(e){return(0,s.isRemoteConfig)(e)?{url:e.url}:{command:e.command,args:e.args}}async function m(){return(await c.database.select({name:i.mcpServerTable.name,config:i.mcpServerTable.config,lastError:i.mcpServerTable.lastError,toolCount:(0,n.count)(i.mcpToolTable.id)}).from(i.mcpServerTable).leftJoin(i.mcpToolTable,(0,o.eq)(i.mcpToolTable.serverName,i.mcpServerTable.name)).groupBy(i.mcpServerTable.name)).map(e=>({...e,config:p(e.config)}))}async function f(e){let[r]=await c.database.select({name:i.mcpServerTable.name,config:i.mcpServerTable.config,lastError:i.mcpServerTable.lastError,toolsSyncedAt:i.mcpServerTable.toolsSyncedAt}).from(i.mcpServerTable).where((0,o.eq)(i.mcpServerTable.name,e));return r?{...r,config:p(r.config),tools:await d(e)}:null}async function d(e){return c.database.select({id:i.mcpToolTable.id,name:i.mcpToolTable.name,description:i.mcpToolTable.description,inputSchema:i.mcpToolTable.inputSchema,outputSchema:i.mcpToolTable.outputSchema}).from(i.mcpToolTable).where((0,o.eq)(i.mcpToolTable.serverName,e)).orderBy(i.mcpToolTable.name)}async function b(e){let[r]=await c.database.select().from(i.mcpServerTable).where((0,o.eq)(i.mcpServerTable.name,e));return r??null}[c]=u.then?(await u)():u;let w=()=>l.appEvents.emit({type:"mcp"});async function T(e,r){await c.database.transaction(async t=>{r.length&&await t.insert(i.mcpToolTable).values(r.map(r=>({...r,serverName:e}))).onConflictDoUpdate({target:[i.mcpToolTable.serverName,i.mcpToolTable.name],set:{description:h(i.mcpToolTable.description),inputSchema:h(i.mcpToolTable.inputSchema),outputSchema:h(i.mcpToolTable.outputSchema)}}),await t.delete(i.mcpToolTable).where(r.length?(0,o.and)((0,o.eq)(i.mcpToolTable.serverName,e),(0,o.notInArray)(i.mcpToolTable.name,r.map(e=>e.name))):(0,o.eq)(i.mcpToolTable.serverName,e)),await t.update(i.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,o.eq)(i.mcpServerTable.name,e))}),w()}function h(e){return a.sql.raw(`excluded."${e.name}"`)}async function y(e,r){await c.database.update(i.mcpServerTable).set({lastError:r}).where((0,o.eq)(i.mcpServerTable.name,e)),w()}async function v(e,r){await c.database.update(i.mcpServerTable).set({oauth:r}).where((0,o.eq)(i.mcpServerTable.name,e)),w()}async function g(e){let[r]=await c.database.select().from(i.mcpServerTable).where(a.sql`json_extract(${i.mcpServerTable.oauth}, '$.state') = ${e}`);return r??null}e.s(["findAllServers",0,m,"findAllTools",0,function(){return c.database.select({id:i.mcpToolTable.id,name:i.mcpToolTable.name,serverName:i.mcpToolTable.serverName,description:i.mcpToolTable.description}).from(i.mcpToolTable).orderBy(i.mcpToolTable.serverName,i.mcpToolTable.name)},"findPinnedTools",0,function(e){return c.database.select({server:i.mcpToolTable.serverName,name:i.mcpToolTable.name,description:i.mcpToolTable.description,inputSchema:i.mcpToolTable.inputSchema}).from(i.botMcpToolTable).innerJoin(i.mcpToolTable,(0,o.eq)(i.botMcpToolTable.toolId,i.mcpToolTable.id)).where((0,o.eq)(i.botMcpToolTable.botName,e)).orderBy(i.mcpToolTable.serverName,i.mcpToolTable.name)},"findServer",0,b,"findServerByOAuthState",0,g,"findServerDetail",0,f,"findToolSchemas",0,function(e,r){return r.length?c.database.select({name:i.mcpToolTable.name,description:i.mcpToolTable.description,inputSchema:i.mcpToolTable.inputSchema}).from(i.mcpToolTable).where((0,o.and)((0,o.eq)(i.mcpToolTable.serverName,e),(0,o.inArray)(i.mcpToolTable.name,r))).orderBy(i.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return c.database.select({name:i.mcpServerTable.name}).from(i.mcpServerTable).orderBy(i.mcpServerTable.name)},"listToolNames",0,function(e){let r=c.database.select({server:i.mcpToolTable.serverName,name:i.mcpToolTable.name}).from(i.mcpToolTable);return e?r.where((0,o.eq)(i.mcpToolTable.serverName,e)).orderBy(i.mcpToolTable.name):r.orderBy(i.mcpToolTable.serverName,i.mcpToolTable.name)},"saveConnectionError",0,y,"saveOAuthData",0,v,"syncServerTools",0,T]),t()}catch(e){t(e)}},!1),441963,e=>{"use strict";var r=e.i(469719),t=e.i(704161);let o=r.z.object({url:r.z.url(),headers:r.z.record(r.z.string(),r.z.string()).optional(),oauthClient:r.z.object({clientId:r.z.string().min(1),clientSecret:r.z.string().optional()}).optional()}),n=r.z.object({command:r.z.string().min(1),args:r.z.array(r.z.string()).optional(),env:r.z.record(r.z.string(),r.z.string()).optional()}),a=r.z.union([o,n]),l=r.z.object({name:r.z.string(),description:r.z.string().optional(),inputSchema:r.z.looseObject({}).optional(),outputSchema:r.z.looseObject({}).optional()});r.z.object({clientInformation:r.z.looseObject({}).optional(),tokens:r.z.looseObject({}).optional(),authorizationServer:r.z.looseObject({}).optional(),codeVerifier:r.z.string().optional(),state:r.z.string().optional()});let c=r.z.object({name:r.z.string().min(1).max(40),config:a,toolCount:r.z.number().int(),lastError:r.z.string().nullish()}),i=l.extend({id:r.z.number().int(),description:r.z.string().nullish()});c.omit({toolCount:!0}).extend({tools:i.array().default([]),toolsSyncedAt:t.DateLikeSchema}),r.z.object({name:r.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:a}),r.z.union([r.z.object({mcpServers:r.z.record(r.z.string(),a)}),r.z.record(r.z.string(),a)]),e.s(["isRemoteConfig",0,function(e){return"url"in e}])},78997,(e,r,t)=>{"use strict";var o=Object.create,n=Object.defineProperty,a=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,c=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,s=(e,r,t,o)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of l(r))i.call(e,c)||c===t||n(e,c,{get:()=>r[c],enumerable:!(o=a(r,c))||o.enumerable});return e},u=(e,r,t)=>(t=null!=e?o(c(e)):{},s(!r&&e&&e.__esModule?t:n(t,"default",{value:e,enumerable:!0}),e)),p={},m={isValidAccessToken:()=>g,readAuthConfig:()=>y,writeAuthConfig:()=>v};for(var f in m)n(p,f,{get:m[f],enumerable:!0});r.exports=s(n({},"__esModule",{value:!0}),p);var d=u(e.r(522734)),b=u(e.r(814747)),T=e.r(783697);function h(){let e=(0,T.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return b.join(e,"auth.json")}function y(){try{let e=h();if(!d.existsSync(e))return null;let r=d.readFileSync(e,"utf8");if(!r)return null;return JSON.parse(r)}catch(e){return null}}function v(e){let r=h(),t=b.dirname(r);d.existsSync(t)||d.mkdirSync(t,{mode:504,recursive:!0}),d.writeFileSync(r,JSON.stringify(e,null,2),{mode:384})}function g(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 o=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,c={},i={AccessTokenMissingError:()=>u,RefreshAccessTokenFailedError:()=>p};for(var s in i)o(c,s,{get:i[s],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of a(r))l.call(e,c)||void 0===c||o(e,c,{get:()=>r[c],enumerable:!(t=n(r,c))||t.enumerable});return e})(o({},"__esModule",{value:!0}),c);class u 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 o=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,c={},i={processTokenResponse:()=>b,refreshTokenRequest:()=>d};for(var s in i)o(c,s,{get:i[s],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of a(r))l.call(e,c)||void 0===c||o(e,c,{get:()=>r[c],enumerable:!(t=n(r,c))||t.enumerable});return e})(o({},"__esModule",{value:!0}),c);var u=e.r(446786);let p=`@vercel/oidc node-${process.version} ${(0,u.platform)()} (${(0,u.arch)()}) ${(0,u.hostname)()}`,m=null;async function f(){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 d(e){let r=await f();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 b(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 o=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,c={},i={VercelOidcTokenError:()=>u};for(var s in i)o(c,s,{get:i[s],enumerable:!0});r.exports=((e,r,t)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of a(r))l.call(e,c)||void 0===c||o(e,c,{get:()=>r[c],enumerable:!(t=n(r,c))||t.enumerable});return e})(o({},"__esModule",{value:!0}),c);class u 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 o=Object.create,n=Object.defineProperty,a=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,c=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,s=(e,r,t,o)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of l(r))i.call(e,c)||c===t||n(e,c,{get:()=>r[c],enumerable:!(o=a(r,c))||o.enumerable});return e},u=(e,r,t)=>(t=null!=e?o(c(e)):{},s(!r&&e&&e.__esModule?t:n(t,"default",{value:e,enumerable:!0}),e)),p={},m={findRootDir:()=>y,getUserDataDir:()=>v};for(var f in m)n(p,f,{get:m[f],enumerable:!0});r.exports=s(n({},"__esModule",{value:!0}),p);var d=u(e.r(814747)),b=u(e.r(522734)),T=u(e.r(446786)),h=e.r(484199);function y(){try{let e=process.cwd();for(;e!==d.default.dirname(e);){let r=d.default.join(e,".vercel");if(b.default.existsSync(r))return e;e=d.default.dirname(e)}}catch(e){throw new h.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function v(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(T.default.platform()){case"darwin":return d.default.join(T.default.homedir(),"Library/Application Support");case"linux":return d.default.join(T.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 o=Object.create,n=Object.defineProperty,a=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,c=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,s=(e,r,t,o)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of l(r))i.call(e,c)||c===t||n(e,c,{get:()=>r[c],enumerable:!(o=a(r,c))||o.enumerable});return e},u=(e,r,t)=>(t=null!=e?o(c(e)):{},s(!r&&e&&e.__esModule?t:n(t,"default",{value:e,enumerable:!0}),e)),p={},m={assertVercelOidcTokenResponse:()=>k,findProjectInfo:()=>j,getTokenPayload:()=>x,getVercelDataDir:()=>w,getVercelOidcToken:()=>S,getVercelToken:()=>O,isExpired:()=>A,loadToken:()=>_,saveToken:()=>E};for(var f in m)n(p,f,{get:m[f],enumerable:!0});r.exports=s(n({},"__esModule",{value:!0}),p);var d=u(e.r(814747)),b=u(e.r(522734)),T=e.r(484199),h=e.r(1791),y=e.r(78997),v=e.r(394853),g=e.r(452005);function w(){let e=(0,h.getUserDataDir)();return e?d.join(e,"com.vercel.cli"):null}async function O(e){let r=(0,y.readAuthConfig)();if(!r?.token)throw new g.AccessTokenMissingError;if((0,y.isValidAccessToken)(r,e?.expirationBufferMs))return r.token;if(!r.refreshToken)throw(0,y.writeAuthConfig)({}),new g.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,v.refreshTokenRequest)({refresh_token:r.refreshToken}),[t,o]=await (0,v.processTokenResponse)(e);if(t||!o)throw(0,y.writeAuthConfig)({}),new g.RefreshAccessTokenFailedError(t);let n={token:o.access_token,expiresAt:Math.floor(Date.now()/1e3)+o.expires_in};return o.refresh_token&&(n.refreshToken=o.refresh_token),(0,y.writeAuthConfig)(n),n.token}catch(e){if((0,y.writeAuthConfig)({}),e instanceof g.AccessTokenMissingError||e instanceof g.RefreshAccessTokenFailedError)throw e;throw new g.RefreshAccessTokenFailedError(e)}}async function S(e,r,t){let o=`https://api.vercel.com/v1/projects/${r}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,n=await fetch(o,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!n.ok)throw new T.VercelOidcTokenError(`Failed to refresh OIDC token: ${n.statusText}`);let a=await n.json();return k(a),a}function k(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 j(){let e=(0,h.findRootDir)();if(!e)throw new T.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let r=d.join(e,".vercel","project.json");if(!b.existsSync(r))throw new T.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(b.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 E(e,r){let t=(0,h.getUserDataDir)();if(!t)throw new T.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let o=d.join(t,"com.vercel.token",`${r}.json`),n=JSON.stringify(e);b.mkdirSync(d.dirname(o),{mode:504,recursive:!0}),b.writeFileSync(o,n),b.chmodSync(o,432)}function _(e){let r=(0,h.getUserDataDir)();if(!r)throw new T.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=d.join(r,"com.vercel.token",`${e}.json`);if(!b.existsSync(t))return null;let o=JSON.parse(b.readFileSync(t,"utf8"));return k(o),o}function x(e){let r=e.split(".");if(3!==r.length)throw new T.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=r[1].replace(/-/g,"+").replace(/_/g,"/"),o=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(o,"base64").toString("utf8"))}function A(e,r=0){return 1e3*e.exp<Date.now()+r}},260338,e=>{"use strict";var r=e.i(518899),t=e.i(844988),o=e.i(156325);e.s(["count",0,function(e){return r.sql`count(${e||r.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return r.sql`max(${e})`.mapWith((0,t.is)(e,o.Column)?e:String)}])}];
4
-
5
- //# sourceMappingURL=%5Broot-of-the-server%5D__0qjqtwo._.js.map
@@ -1,5 +0,0 @@
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),902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},380690,e=>{"use strict";let t,r,a,n,o,i;var s,l=e.i(687388),u=e.i(640911);let c={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},d=globalThis,p=d.__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)})}),h=d.__presence??=(s=l.BROWSER_GONE_MS,r=!1,a=null,n=new Set,o=new Set,i=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,i(o));return}!a&&r&&(a=setTimeout(()=>{a=null,r=!1,i(n)},s))},onGone:e=>(n.add(e),()=>n.delete(e)),onBack:e=>(o.add(e),()=>o.delete(e))}),f=d.__appEventStream??=function(e,t={}){let r=new TextEncoder,a=t.heartbeatMs??2e4,n=0;return{respond:(o,i)=>{let s=()=>{};return new Response(new ReadableStream({async start(l){let c=!1,d=new Map,p=[],h=e=>{if(!c)try{l.enqueue(r.encode(e))}catch{s()}},f=e=>h(`data: ${JSON.stringify(e)}
2
-
3
- `),m=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return f(e);let a=d.get(r);a&&clearTimeout(a),d.set(r,setTimeout(()=>{d.delete(r),f(e)},t.coalesce?.ms))},v=e.subscribe(e=>p?p.push(e):m(e)),R=setInterval(()=>h(": ping\n\n"),a);n+=1,t.onWatchers?.(n),s=()=>{if(!c){for(let e of(c=!0,n-=1,t.onWatchers?.(n),v(),clearInterval(R),d.values()))clearTimeout(e);try{l.close()}catch{}}},o.addEventListener("abort",s);try{for(let e of await i?.()??[])f(e)}catch(e){u.logger.error("event stream opening failed",e),s();return}let g=p;for(let e of(p=null,g))m(e)},cancel(){s()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return n}}}(p,{coalesce:{ms:150,keyOf:e=>e.type in c?e.type:null},onWatchers:h.track}),m=d.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,m,"appEventStream",0,f,"appEvents",0,p],380690)},594286,e=>e.a(async(t,r)=>{try{var a=e.i(619898),n=e.i(91264),o=e.i(53748),i=t([a]);[a]=i.then?(await i)():i;let s=(0,n.serverRoute)(async e=>{let t=new URL(e.url).searchParams,r=t.get("path");if(r){let e=await (0,a.findNoteByPath)(r);return e||(0,o.publicError)("Note not found"),e}let n=Number(t.get("offset")??0);return(0,a.findAllNotes)({offset:Number.isFinite(n)?n:0})});e.s(["GET",0,s]),r()}catch(e){r(e)}},!1),246827,e=>{"use strict";var t=e.i(747909),r=e.i(174017),a=e.i(996250),n=e.i(759756),o=e.i(561916),i=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),f=e.i(626937),m=e.i(10372),v=e.i(193695);e.i(52474);var R=e.i(600220);let g=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/memory/route",pathname:"/api/memory",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/memory/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(594286),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:y,serverHooks:E}=g;async function C(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),g.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/memory/route";w=w.replace(/\/index$/,"")||"/";let y=await g.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:E,deploymentId:C,params:T,nextConfig:x,parsedUrl:S,isDraftMode:b,prerenderManifest:A,routerServerContext:_,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,resolvedPathname:O,clientReferenceManifest:q,serverActionsManifest:I}=y,k=(0,s.normalizeAppPath)(w),H=!!(A.dynamicRoutes[k]||A.routes[O]),M=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,S,!1):t.end("This page could not be found"),null);if(H&&!b){let e=!!A.routes[O],t=A.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(x.adapterPath)return await M();throw new v.NoFallbackError}}let D=null;!H||g.isDev||b||(D="/index"===(D=O)?"/":D);let U=!0===g.isDev||!H,B=H&&!U;I&&q&&(0,i.setManifestsSingleton)({page:w,clientReferenceManifest:q,serverActionsManifest:I});let L=e.method||"GET",F=(0,o.getTracer)(),$=F.getActiveScopeSpan(),G=!!(null==_?void 0:_.isWrappedByNextServer),K=!!(0,n.getRequestMeta)(e,"minimalMode"),j=(0,n.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,x,A,K);null==j||j.resetRequestCache(),globalThis.__incrementalCache=j;let W={params:T,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,supportsDynamicResponse:U,incrementalCache:j,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>g.onRequestError(e,t,a,n,_)},sharedContext:{buildId:E,deploymentId:C}},z=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),V=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!K&&N&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await g.handle(V,W);e.fetchMetrics=W.renderOpts.fetchMetrics;let o=W.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let i=W.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(z,X,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);i&&(t[m.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==r&&r>0?x.expireTime:void 0:W.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:N})},!1,_),t}},Z=async(n,i)=>{try{var s,l;let n=await g.handleResponse({req:e,nextConfig:x,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:K});if(!H)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==R.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",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);K&&H||o.delete(m.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(z,X,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:N})},!1,_),H)throw t;await (0,p.sendResponse)(z,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:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||k,s=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),i&&i!==n&&(i.setAttribute("http.route",a),i.updateName(s))})()}};if(G&&$)await Z($,void 0);else{let t=F.getActiveScopeSpan();await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Z(e,t)),void 0,!G)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:y})},"routeModule",0,g,"serverHooks",0,E,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,y])},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)])},41444,e=>{"use strict";e.s(["PromiseChain",0,()=>{let e=Promise.resolve();return t=>{let r=e.then(()=>t());return e=r.catch(()=>{}),r}},"clip",0,function(e,t){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1).trimEnd()}…`:r},"errorToString",0,function(e){return e instanceof Error?e.message:String(e)}])}];
4
-
5
- //# sourceMappingURL=%5Broot-of-the-server%5D__0yk6s3w._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[324725,(e,t,a)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},265143,e=>e.a(async(t,a)=>{try{var o=e.i(875225),l=e.i(518899),s=e.i(528790),r=e.i(613240),n=e.i(944971),b=t([s]);[s]=b.then?(await b)():b;let c=e=>({name:e.name,description:e.description,systemPrompt:e.systemPrompt,icon:e.icon,provider:e.provider,model:e.model});async function i(){let e=await s.database.select().from(r.botTable).orderBy(r.botTable.createdAt);return e.length?e.map(c):[n.DEFAULT_BOT]}async function m(e){let t=await u(e);if(t)return c(t);let a=e.trim().toLowerCase();return(await i()).find(e=>e.name.toLowerCase()===a)??null}async function p(){let[e,t,a]=await Promise.all([s.database.select().from(r.botTable).orderBy(r.botTable.createdAt),s.database.select({botName:r.botMcpToolTable.botName,id:r.mcpToolTable.id,name:r.mcpToolTable.name,serverName:r.mcpToolTable.serverName}).from(r.botMcpToolTable).innerJoin(r.mcpToolTable,(0,o.eq)(r.botMcpToolTable.toolId,r.mcpToolTable.id)),s.database.select({bot:r.taskTable.bot,input:l.sql`coalesce(sum(${r.taskTable.inputTokens}), 0)`,output:l.sql`coalesce(sum(${r.taskTable.outputTokens}), 0)`,lastJobAt:l.sql`max(${r.taskTable.updatedAt})`}).from(r.taskTable).groupBy(r.taskTable.bot)]),n=new Map;for(let{botName:e,...a}of t){let t=n.get(e)??[];t.push(a),n.set(e,t)}let b=new Map(a.map(e=>[e.bot,{input:Number(e.input),output:Number(e.output)}])),i=new Map(a.flatMap(e=>null==e.lastJobAt?[]:[[e.bot,new Date(1e3*Number(e.lastJobAt))]]));return e.map(e=>({...e,tools:n.get(e.name)??[],tokens:b.get(e.name)??{input:0,output:0},lastJobAt:i.get(e.name)??null}))}async function u(e){let[t]=await s.database.select().from(r.botTable).where((0,o.eq)(r.botTable.name,e));return t??null}e.s(["findAllBots",0,p,"findJobBot",0,m,"listJobBots",0,i]),a()}catch(e){a(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0z3gelv._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[70729,e=>{e.v(s=>Promise.all(["server/chunks/[externals]_node_crypto_1kn79-7._.js"].map(s=>e.l(s))).then(()=>s(666680)))},814317,e=>{e.v(s=>Promise.all(["server/chunks/features_bot_bot_query_ts_12mgkl2._.js"].map(s=>e.l(s))).then(()=>s(265143)))},994193,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0z3gelv._.js","server/chunks/features_bot_task_query_ts_11xuzl3._.js","server/chunks/node_modules_next_04q-o58._.js","server/chunks/_0fzqt2y._.js"].map(s=>e.l(s))).then(()=>s(39803)))},353587,e=>{e.v(s=>Promise.all(["server/chunks/features_bot_task_query_ts_11xuzl3._.js"].map(s=>e.l(s))).then(()=>s(780274)))},967030,e=>{e.v(e=>Promise.resolve().then(()=>e(783697)))},683671,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_@vercel_oidc_dist_token_1o4m7ms.js"].map(s=>e.l(s))).then(()=>s(390391)))},329280,e=>{e.v(s=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(s=>e.l(s))).then(()=>s(781937)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__11w_7_3._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[418520,e=>e.a(async(t,s)=>{try{var a=await e.y("@libsql/client-6da938047d5fc1cd");e.n(a),s()}catch(e){s(e)}},!0),902157,(e,t,s)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,s)=>{t.exports=e.x("node:path",()=>require("node:path"))},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),s=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,r=`file:${s}/local.db`,o=".ai-workspace",c={workspace:o,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${o}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"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,s,"DB_FILE_NAME",0,r,"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}])},799791,e=>e.a(async(t,s)=>{try{var a=e.i(336763),r=e.i(876393),o=e.i(220376),c=e.i(951056),i=t([r]);[r]=i.then?(await i)():i;let p=e=>({name:e.name,description:e.description,systemPrompt:e.systemPrompt,icon:e.icon,provider:e.provider,model:e.model});async function n(){let e=await r.database.select().from(o.botTable).orderBy(o.botTable.createdAt);return e.length?e.map(p):[c.DEFAULT_BOT]}async function l(e){let t=await d(e);if(t)return p(t);let s=e.trim().toLowerCase();return(await n()).find(e=>e.name.toLowerCase()===s)??null}async function d(e){let[t]=await r.database.select().from(o.botTable).where((0,a.eq)(o.botTable.name,e));return t??null}e.s(["findJobBot",0,l,"listJobBots",0,n]),s()}catch(e){s(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1_0q_9w._.js.map
@@ -1,10 +0,0 @@
1
- module.exports=[418520,e=>e.a(async(t,r)=>{try{var n=await e.y("@libsql/client-6da938047d5fc1cd");e.n(n),r()}catch(e){r(e)}},!0),500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},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"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},605365,(e,t,r)=>{t.exports=e.x("process",()=>require("process"))},232347,e=>{"use strict";let t,r,n,o,i,a;var s,l=e.i(333925),c=e.i(938281);let u={tasks:!0,memory:!0,mcp:!0,"memory-tidy":!0},d=globalThis,f=d.__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)})}),p=d.__presence??=(s=l.BROWSER_GONE_MS,r=!1,n=null,o=new Set,i=new Set,a=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){n&&clearTimeout(n),n=null,r||(r=!0,a(i));return}!n&&r&&(n=setTimeout(()=>{n=null,r=!1,a(o)},s))},onGone:e=>(o.add(e),()=>o.delete(e)),onBack:e=>(i.add(e),()=>i.delete(e))}),h=d.__appEventStream??=function(e,t={}){let r=new TextEncoder,n=t.heartbeatMs??2e4,o=0;return{respond:(i,a)=>{let s=()=>{};return new Response(new ReadableStream({async start(l){let u=!1,d=new Map,f=[],p=e=>{if(!u)try{l.enqueue(r.encode(e))}catch{s()}},h=e=>p(`data: ${JSON.stringify(e)}
2
-
3
- `),m=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return h(e);let n=d.get(r);n&&clearTimeout(n),d.set(r,setTimeout(()=>{d.delete(r),h(e)},t.coalesce?.ms))},y=e.subscribe(e=>f?f.push(e):m(e)),w=setInterval(()=>p(": ping\n\n"),n);o+=1,t.onWatchers?.(o),s=()=>{if(!u){for(let e of(u=!0,o-=1,t.onWatchers?.(o),y(),clearInterval(w),d.values()))clearTimeout(e);try{l.close()}catch{}}},i.addEventListener("abort",s);try{for(let e of await a?.()??[])h(e)}catch(e){c.logger.error("event stream opening failed",e),s();return}let b=f;for(let e of(f=null,b))m(e)},cancel(){s()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return o}}}(f,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:p.track});d.__bootId??=crypto.randomUUID(),e.s(["appEventStream",0,h,"appEvents",0,f,"presence",0,p],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),n=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,o=`file:${r}/local.db`,i=".ai-workspace",a={workspace:i,artifacts:"artifacts",projects:"projects",scratch:"scratch",output:".output",skills:{default:"skills",custom:`${i}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,n,"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,o,"IS_DEV",0,!1,"MEMORY_LISTING_TOKENS",0,1e3,"PAGE_SIZE",0,50,"PATHS",0,a,"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 r=[...new Set(Object.values(t.SPEACH_MODEL_PROVIDERS).map(e=>e.apiKeyName))],n={image:"IMAGE_MODEL",video:"VIDEO_MODEL",speech:"SPEECH_MODEL",transcription:"TRANSCRIPTION_MODEL"},o={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"}},i="DEFAULT_MODEL",a={key:i,label:"Default model",hint:"What a bot thinks with until it picks its own",text:!0,choices:t.TEXT_MODEL_PROVIDER_LIST.flatMap(e=>e.suggestModels.map(t=>({value:`${e.id}/${t.id}`,label:`${e.label} \xb7 ${t.label}`,needs:e.apiKeyName})))},s=e=>r.includes(e.apiKeyName),l=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(s).map(l)},{id:"text",title:"models",hint:"what bots think with — add any, or none",section:"keys",require:"none",entries:t.TEXT_MODEL_PROVIDER_LIST.filter(e=>!s(e)).map(l)},{id:"bots",title:"Bots",hint:"what a bot runs on when it has not picked its own",section:"models",require:"none",entries:[a]},{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(n).map(e=>({key:n[e],...o[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,i,"MEDIA_MODEL_KEYS",0,n])},724185,e=>e.a(async(t,r)=>{try{var n=e.i(336763),o=e.i(876393),i=e.i(220376);e.i(656719);var a=t([o]);async function s(e){let t=process.env[e]?.trim();if(t)return t;let[r]=await o.database.select({value:i.configTable.value}).from(i.configTable).where((0,n.eq)(i.configTable.key,e));return r?.value.trim()||void 0}[o]=a.then?(await a)():a,e.s(["readConfig",0,s]),r()}catch(e){r(e)}},!1),933395,e=>{"use strict";var t=e.i(517435),r=e.i(864328),n=e.i(951056),o=e.i(986129);t.default.object({systemPrompt:t.default.string().max(o.COMMON_VALIDATE.prompt.max).nullish(),model:r.speachModelRefSchema.nullish(),locale:t.default.string().max(35).nullish()}),n.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,r)=>{try{var n=e.i(336763),o=e.i(396918),i=e.i(876393),a=e.i(220376),s=e.i(724185),l=e.i(933395),c=t([i,s]);async function u(){return(0,l.isSkillsOn)(await (0,s.readConfig)(l.THURSDAY_KEYS.skills))}async function d(e,t){return(await i.database.select({role:a.callMessageTable.role,text:a.callMessageTable.text}).from(a.callMessageTable).where((0,n.and)((0,n.eq)(a.callMessageTable.callId,e),(0,n.inArray)(a.callMessageTable.role,["user","assistant"]))).orderBy((0,o.desc)(a.callMessageTable.seq)).limit(t)).reverse().map(e=>({role:e.role,text:e.text}))}async function f(){return(await i.database.select({id:a.callTable.id}).from(a.callTable).where((0,n.isNull)(a.callTable.endedAt)).limit(1)).length>0}async function p(){await i.database.update(a.callTable).set({endedAt:new Date}).where((0,n.isNull)(a.callTable.endedAt))}[i,s]=c.then?(await c)():c,e.s(["isAnyCallLive",0,f,"listCallTurns",0,d,"readCallSkillsOn",0,u,"sweepCalls",0,p]),r()}catch(e){r(e)}},!1),871096,e=>{"use strict";var t=e.i(912714),r=e.i(750227),n=e.i(333925),o=e.i(938281),i=e.i(874533);let a=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function s(e,n,o,i){if(e.length<=i.max)return e;let a=(0,r.join)(o,i.dir),s=(0,r.join)(a,`${new Date().toISOString().replace(/[:.]/g,"-")}-${n.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=s;try{await (0,t.mkdir)(a,{recursive:!0}),await (0,t.writeFile)(s,e),l=(0,r.relative)(o,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
- [${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
- ${e.slice(-i.tail).trimStart()}`}let l=n.APP_DIR,c=(0,r.join)(n.DATA_DIR,n.PATHS.workspace),u=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(l,"node_modules",".bin")]).filter(Boolean);(0,r.join)(c,n.PATHS.artifacts);let d=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch],f=new Set([...d,".agents"]),p=(e,t)=>t===e||t.startsWith(e+r.sep),h=e=>(0,t.realpath)(e).catch(()=>null);async function m(e){let t=await h(c)??c,n=(0,r.resolve)(c,e);if(!p(c,n))return null;let o=n,i=await h(o);for(;null===i&&(0,r.dirname)(o)!==o;)o=(0,r.dirname)(o),i=await h(o);if(null===i)return null;let a=(0,r.relative)(o,n),s=a?(0,r.join)(i,a):i;return p(t,s)?s:null}let y=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{};async function w(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await O(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));0!==t.exitCode&&o.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 b(e){let t=await O();await t.exec("playwright-cli close",{env:y(e),timeoutMs:15e3}).catch(()=>{}),await g()}async function g(){let e=(0,r.join)(c,".playwright-cli"),n=await (0,t.readdir)(e,{withFileTypes:!0}).catch(()=>[]),o=Date.now()-36e5;for(let i of n){if(!i.isFile())continue;let n=(0,r.join)(e,i.name),a=await (0,t.stat)(n).catch(()=>null);a&&a.mtimeMs<o&&await (0,t.unlink)(n).catch(()=>{})}}let T={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function O(){for(let e of d)await (0,t.mkdir)((0,r.join)(c,e),{recursive:!0});for(let[e,n]of Object.entries(T))await (0,t.writeFile)((0,r.join)(c,e),n,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:n,toolPath:o})=>{let l=(0,r.resolve)(e),c=(o??[]).filter(Boolean).join(":"),u=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(l,e);async function*d(e){let n;try{n=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of n){if(a.has(t.name)||t.name.startsWith("."))continue;let n=(0,r.join)(e,t.name);t.isDirectory()?yield*d(n):t.isFile()&&(yield n)}}return{cwd:l,resolve:u,readFile:(e,r)=>(0,t.readFile)(u(e),r),async writeFile(e,n){let o=u(e);await (0,t.mkdir)((0,r.join)(o,".."),{recursive:!0}),await (0,t.writeFile)(o,n)},readdir:(e,r)=>(0,t.readdir)(u(e),r),fold:(e,t="output")=>s(e,t,l,n),async glob(e,{path:t=".",limit:n=200}={}){let o=u(t),i=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),a=[];for await(let e of d(o)){let t=(0,r.relative)(o,e).split(r.sep).join("/");if((i.test(t)||i.test(e))&&a.push(e),a.length>=n)break}return a},exec:(e,{cwd:t,timeoutMs:r=18e4,signal:o,env:a}={})=>new Promise(d=>{let f=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();c&&(f.PATH=`${f.PATH??""}:${c}`);let p=(0,i.spawn)(e,{shell:!0,cwd:t?u(t):l,env:{...f,...a},detached:!0}),h="",m="";p.stdout?.on("data",e=>h+=e),p.stderr?.on("data",e=>m+=e);let y=e=>{m+=`
8
- [${e}]`;try{p.pid&&process.kill(-p.pid,"SIGTERM")}catch{p.kill("SIGTERM")}},w=setTimeout(()=>y(`Timed out after ${r}ms`),r),b=()=>y("Aborted");o?.aborted?b():o?.addEventListener("abort",b,{once:!0});let g=async e=>{clearTimeout(w),o?.removeEventListener("abort",b),d({...e,stdout:await s(e.stdout,"stdout",l,n),stderr:await s(e.stderr,"stderr",l,n)})};p.on("close",e=>g({stdout:h,stderr:m,exitCode:e??-1})),p.on("error",e=>g({stdout:h,stderr:m+String(e),exitCode:-1}))})}})({workingDirectory:c,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:u})}e.s(["closeJobShell",0,b,"ensureBrowser",0,w,"insideWorkspace",0,m,"jobShellEnv",0,y,"openWorkspace",0,O,"writeRefusal",0,function(e){if(p(c,e)){let t=(0,r.relative)(c,e),[o]=t.split(r.sep);return o&&f.has(o)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, everything else under ${n.PATHS.scratch}/.`}return p(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)},198306,(e,t,r)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,s=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of a(t))l.call(e,s)||s===r||o(e,s,{get:()=>t[s],enumerable:!(n=i(t,s))||n.enumerable});return e},u=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),d={},f={isValidAccessToken:()=>T,readAuthConfig:()=>b,writeAuthConfig:()=>g};for(var p in f)o(d,p,{get:f[p],enumerable:!0});t.exports=c(o({},"__esModule",{value:!0}),d);var h=u(e.r(522734)),m=u(e.r(814747)),y=e.r(913803);function w(){let e=(0,y.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return m.join(e,"auth.json")}function b(){try{let e=w();if(!h.existsSync(e))return null;let t=h.readFileSync(e,"utf8");if(!t)return null;return JSON.parse(t)}catch(e){return null}}function g(e){let t=w(),r=m.dirname(t);h.existsSync(r)||h.mkdirSync(r,{mode:504,recursive:!0}),h.writeFileSync(t,JSON.stringify(e,null,2),{mode:384})}function T(e,t=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let r=Math.floor(Date.now()/1e3);return e.expiresAt>=r+t/1e3}},736374,(e,t,r)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,s={},l={AccessTokenMissingError:()=>u,RefreshAccessTokenFailedError:()=>d};for(var c in l)n(s,c,{get:l[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))a.call(e,s)||void 0===s||n(e,s,{get:()=>t[s],enumerable:!(r=o(t,s))||r.enumerable});return e})(n({},"__esModule",{value:!0}),s);class u extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class d extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},903736,(e,t,r)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,s={},l={processTokenResponse:()=>m,refreshTokenRequest:()=>h};for(var c in l)n(s,c,{get:l[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))a.call(e,s)||void 0===s||n(e,s,{get:()=>t[s],enumerable:!(r=o(t,s))||r.enumerable});return e})(n({},"__esModule",{value:!0}),s);var u=e.r(446786);let d=`@vercel/oidc node-${process.version} ${(0,u.platform)()} (${(0,u.arch)()}) ${(0,u.hostname)()}`,f=null;async function p(){if(f)return f;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":d}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let t=await e.json();if(!t||"string"!=typeof t.token_endpoint)throw Error("Invalid OAuth discovery response");let r=t.token_endpoint;return f=r,r}async function h(e){let t=await p();return await fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":d},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function m(e){let t=await e.json();return e.ok?"object"!=typeof t||null===t?[Error("Invalid token response")]:"string"!=typeof t.access_token?[Error("Missing access_token in response")]:"Bearer"!==t.token_type?[Error("Invalid token_type in response")]:"number"!=typeof t.expires_in?[Error("Missing expires_in in response")]:[null,t]:[Error("object"==typeof t&&t&&"error"in t?String(t.error):"Token refresh failed")]}},424134,(e,t,r)=>{"use strict";var n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,s={},l={VercelOidcTokenError:()=>u};for(var c in l)n(s,c,{get:l[c],enumerable:!0});t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))a.call(e,s)||void 0===s||n(e,s,{get:()=>t[s],enumerable:!(r=o(t,s))||r.enumerable});return e})(n({},"__esModule",{value:!0}),s);class u extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},713292,(e,t,r)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,s=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of a(t))l.call(e,s)||s===r||o(e,s,{get:()=>t[s],enumerable:!(n=i(t,s))||n.enumerable});return e},u=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),d={},f={findRootDir:()=>b,getUserDataDir:()=>g};for(var p in f)o(d,p,{get:f[p],enumerable:!0});t.exports=c(o({},"__esModule",{value:!0}),d);var h=u(e.r(814747)),m=u(e.r(522734)),y=u(e.r(446786)),w=e.r(424134);function b(){try{let e=process.cwd();for(;e!==h.default.dirname(e);){let t=h.default.join(e,".vercel");if(m.default.existsSync(t))return e;e=h.default.dirname(e)}}catch(e){throw new w.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function g(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(y.default.platform()){case"darwin":return h.default.join(y.default.homedir(),"Library/Application Support");case"linux":return h.default.join(y.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},913803,(e,t,r)=>{"use strict";var n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,s=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of a(t))l.call(e,s)||s===r||o(e,s,{get:()=>t[s],enumerable:!(n=i(t,s))||n.enumerable});return e},u=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),d={},f={assertVercelOidcTokenResponse:()=>_,findProjectInfo:()=>E,getTokenPayload:()=>A,getVercelDataDir:()=>O,getVercelOidcToken:()=>v,getVercelToken:()=>k,isExpired:()=>P,loadToken:()=>j,saveToken:()=>S};for(var p in f)o(d,p,{get:f[p],enumerable:!0});t.exports=c(o({},"__esModule",{value:!0}),d);var h=u(e.r(814747)),m=u(e.r(522734)),y=e.r(424134),w=e.r(713292),b=e.r(198306),g=e.r(903736),T=e.r(736374);function O(){let e=(0,w.getUserDataDir)();return e?h.join(e,"com.vercel.cli"):null}async function k(e){let t=(0,b.readAuthConfig)();if(!t?.token)throw new T.AccessTokenMissingError;if((0,b.isValidAccessToken)(t,e?.expirationBufferMs))return t.token;if(!t.refreshToken)throw(0,b.writeAuthConfig)({}),new T.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,g.refreshTokenRequest)({refresh_token:t.refreshToken}),[r,n]=await (0,g.processTokenResponse)(e);if(r||!n)throw(0,b.writeAuthConfig)({}),new T.RefreshAccessTokenFailedError(r);let o={token:n.access_token,expiresAt:Math.floor(Date.now()/1e3)+n.expires_in};return n.refresh_token&&(o.refreshToken=n.refresh_token),(0,b.writeAuthConfig)(o),o.token}catch(e){if((0,b.writeAuthConfig)({}),e instanceof T.AccessTokenMissingError||e instanceof T.RefreshAccessTokenFailedError)throw e;throw new T.RefreshAccessTokenFailedError(e)}}async function v(e,t,r){let n=`https://api.vercel.com/v1/projects/${t}/token?source=vercel-oidc-refresh${r?`&teamId=${r}`:""}`,o=await fetch(n,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!o.ok)throw new y.VercelOidcTokenError(`Failed to refresh OIDC token: ${o.statusText}`);let i=await o.json();return _(i),i}function _(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 E(){let e=(0,w.findRootDir)();if(!e)throw new y.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let t=h.join(e,".vercel","project.json");if(!m.existsSync(t))throw new y.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let r=JSON.parse(m.readFileSync(t,"utf8"));if("string"!=typeof r.projectId&&"string"!=typeof r.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:r.projectId,teamId:r.orgId}}function S(e,t){let r=(0,w.getUserDataDir)();if(!r)throw new y.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let n=h.join(r,"com.vercel.token",`${t}.json`),o=JSON.stringify(e);m.mkdirSync(h.dirname(n),{mode:504,recursive:!0}),m.writeFileSync(n,o),m.chmodSync(n,432)}function j(e){let t=(0,w.getUserDataDir)();if(!t)throw new y.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let r=h.join(t,"com.vercel.token",`${e}.json`);if(!m.existsSync(r))return null;let n=JSON.parse(m.readFileSync(r,"utf8"));return _(n),n}function A(e){let t=e.split(".");if(3!==t.length)throw new y.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let r=t[1].replace(/-/g,"+").replace(/_/g,"/"),n=r.padEnd(r.length+(4-r.length%4)%4,"=");return JSON.parse(Buffer.from(n,"base64").toString("utf8"))}function P(e,t=0){return 1e3*e.exp<Date.now()+t}}];
9
-
10
- //# sourceMappingURL=%5Broot-of-the-server%5D__1gmn1cs._.js.map
@@ -1,100 +0,0 @@
1
- module.exports=[851372,t=>t.a(async(e,o)=>{try{var a=t.i(687388),s=t.i(353885),n=t.i(265143),i=t.i(148831),r=t.i(619898),l=t.i(636882),u=t.i(786025),h=t.i(640911),d=t.i(41444),c=t.i(660948),p=t.i(54282),y=e([n,i,r,c]);async function w(t,e,o){var a,d,y,w,$;let v,O,x,A=await (0,u.openWorkspace)(),_=t.trim(),[E,M,I,j,L,C]=await Promise.all([(0,l.loadSkills)(A),(0,r.listNoteIndex)(),(0,r.listAlwaysLoaded)(),(0,c.listConnectedToolNames)(),(0,i.findPinnedTools)(_),(0,n.listJobBots)()]),q=o?[]:C.filter(t=>t.name!==_),B=[o?(a=o,[`You are a worker. ${a} is holding a job Thursday handed them and has handed one part of it to you. You never speak to the user: ${a} reports, and what you hand back goes into their report as-is. ${(0,p.nowLine)()}`,m,g].join("\n\n")):[`You are a worker. Thursday handed you a job while she keeps talking to the user; you are not in that conversation and never speak to the user directly. ${(0,p.nowLine)()}`,m,g].join("\n\n"),(d=M,y=I,v=`## Memory
2
-
3
- What the user's assistant knows about them — yours to read, and to add to when the work turns up something about them that outlives the job. What the job itself turned up goes in your report. It describes the user, not you: how they are named and spoken to is hers to use with them, not yours to borrow.`,O=y.length?`Already known:
4
-
5
- ${(0,p.carriedLines)(y)}`:"",x=`path — what is under it (facts) "what the user calls it"
6
-
7
- ${(0,p.noteLines)(d)}
8
-
9
- A topic not listed is one nobody knows anything about.`,[v,O,x].filter(Boolean).join("\n\n")),function(t,e){let o=new Set(e.map(t=>`${t.server}/${t.name}`)),a=t.filter(t=>!o.has(`${t.server}/${t.name}`));if(0===a.length)return"";let n=o.size?" What is not listed above you are already holding — it is in your tools.":"";return`## Connected tools
10
-
11
- ${(0,p.mcpToolLines)(a)}
12
-
13
- Names only: \`${s.TOOL_NAMES.tool_search}\` returns what each one takes, \`${s.TOOL_NAMES.tool_call}\` runs one.${n}`}(j,L),(w=E,0===w.length?"":`## Skills
14
-
15
- Written-down methods. When the job is one of these, read it with \`${s.TOOL_NAMES.load_skill}\` before starting.
16
-
17
- ${(0,p.skillLines)(w)}`),b(A.cwd),($=q,0===$.length?"":`## Bots
18
-
19
- ${$.map(t=>`- **${t.name}** — ${t.description}`).join("\n")}
20
-
21
- A part of your job another bot is for goes to \`${s.TOOL_NAMES.ask_bot}\`, because their tools and their practice are the reason they exist. What you build is made of what they bring back, so send for it before you build. A part you could finish in a couple of commands is yours; one that would take a run of its own is theirs. The job stays yours and you report; they see only your brief — not the call, not this thread.`),o?T(o):k,o?S(o):N,f(e)].filter(Boolean).join("\n\n");return h.logger.debug(`bot prompt
22
- ${B}`),{text:B,peers:q.map(t=>t.name),opening:null}}[n,i,r,c]=y.then?(await y)():y;let m=`**You are on a real computer — the user's own.** You have a shell and a filesystem, and the job is done, not described: where there is no tool for something, write one — in \`node\` unless they asked for another language, the runtime this app itself runs on. Reach for \`${s.TOOL_NAMES.bash}\` before concluding that something cannot be done, but after the roster, not instead of it: a script you write to do another bot's job is the long way round.
23
-
24
- **What is missing gets installed.** Inside the workspace, freely; onto the machine itself — \`python3\`, a \`brew\` package — once they say yes, so ask. What is already there is nobody's question.
25
-
26
- **Bring back the thing itself** — their own machine, their own accounts, their own copy of whatever they sent you for — not a smaller safer version of it, and not a note on why you did not.`,g="**Never present a guess as a result.** She says it out loud as fact. Say which part is unverified and why.",f=t=>t?.trim()?`## Owner's instructions
27
-
28
- Written by the person this bot works for. Where these and anything above disagree, these win.
29
-
30
- ${t.trim()}`:"",b=t=>`## Environment
31
-
32
- Current Cwd: ${t}
33
- Platform: ${process.platform}
34
-
35
- Your workspace — \`${s.TOOL_NAMES.bash}\` runs here. Everything you write goes in one of three folders: \`${a.PATHS.artifacts}/\` (finished work the user opens), \`${a.PATHS.projects}/\` (code you build), \`${a.PATHS.scratch}/\` (everything in progress). Never the directory above — that is the app you run in; outside the workspace, only where the user pointed you.`,k=`## Asking
36
-
37
- What you cannot get for yourself — a decision between real options, a detail only the conversation has, a go-ahead before deleting or sending — goes to \`${s.TOOL_NAMES.ask_thursday}\`, once, with everything in it. Ask before you start, not after an hour; never ask what one command would tell you.
38
-
39
- A job that arrives without its shape — several ways to do it, no telling what it is for, a scale nobody named — is planned before it is built: put the plan up in two or three lines with what you need decided. A job asked for as one thing is built, not proposed.
40
-
41
- A request that says buy, pay, top up is the go-ahead — press the button. Only what is theirs alone stops the job: a password, a one-time code, a passkey, a permission on their machine. Set it up one action away, ask, and carry on when the answer comes back.`,T=t=>`## Asking
42
-
43
- What you cannot get for yourself goes to \`${s.TOOL_NAMES.ask_back}\`: ${t} handed you this part and answers from what they have. They cannot take a question to the user, so for what is the user's alone take the safer reading and say so in what you hand back. Ask before you start, once, whole.`,$=`Your steps are capped at ${a.BOT_RUN.steps}; running long, report what you have with \`complete: false\` while the summary is still yours to write.`,N=`## Finishing
44
-
45
- Every job ends with \`${s.TOOL_NAMES.report}\`, in the user's language, written to be heard — she reads it out loud. **The job ends in the thing that was asked for**: an action with the action done, photos in a page with the photos in it, a comparison in a table. Anything that does not fit in a few lines is a file under \`${a.PATHS.artifacts}/\`, and the report names its path — it becomes a link on their screen. In a \`.md\`, images only by absolute route (\`/api/file/${a.PATHS.artifacts}/…\`).
46
-
47
- \`complete: false\` when part of the request is genuinely undone — say where you got to and the user decides. ${$}`,S=t=>`## Finishing
48
-
49
- Every part ends with \`${s.TOOL_NAMES.report}\`; what you hand back goes into ${t}'s own report. Hand back what the brief asked for, in the shape it asked for, with everything you learned that bears on it — exact values, the paths of files you wrote, what did not work. They cannot see your thread, so long is right here. \`complete: false\` when part of the brief is undone, with where you got to. ${$}`;t.s(["OPENING_TURNS",0,10,"buildTaskOpening",0,function(t){let e=t.conversation.filter(t=>t.text.trim());if(!e.length)return t.request;let o=e.map(t=>`${"user"===t.role?"user":"thursday"}: ${(0,d.clip)(t.text,160)}`);return`${t.request}
50
-
51
- ## The call, just before this reached you
52
-
53
- A detail that is not in the request may be here — a name, a number, which one of two. The request wins where they disagree, with one exception: when they asked out loud for something to be *done* and the request only asks about it, the doing is the job.
54
-
55
- ${o.join("\n")}`},"loadBotPrompt",0,w]),o()}catch(t){o(t)}},!1),585099,t=>t.a(async(e,o)=>{try{var a=t.i(68356),s=t.i(847841),n=t.i(687388),i=t.i(159479),r=t.i(386075),l=t.i(851372),u=t.i(316172),h=t.i(353885),d=t.i(944971),c=t.i(786025),p=t.i(640911),y=t.i(53748),w=t.i(388439),m=t.i(41444),g=t.i(265143),f=t.i(780274),b=e([i,r,l,g,f]);[i,r,l,g,f]=b.then?(await b)():b;let v=n.BOT_RUN.steps,O=n.BOT_RUN.compactAt;async function k(t,e){var o,n;let d,y,m,b,k=e.depth??0,_=e.parent??null,E=t.bot.trim(),M=t=>e.emit({...t,bot:E,parent:_}),I=await (0,g.findJobBot)(E);if(!I)return void await M({type:"error",message:`No bot named "${t.bot}". Use a name from the list.`});let j=await ((o=I).provider&&o.model?(0,r.getTextModel)({provider:o.provider,model:o.model}):(0,r.resolveDefaultModel)().then(r.getTextModel)),[L,C]=await Promise.all([(0,l.loadBotPrompt)(E,I.systemPrompt,"askedBy"in t?t.askedBy:null),(0,i.loadTools)({target:"bot",bot:E,taskId:e.taskId,model:j})]),q="messages"in t?t.messages:[{role:"user",content:(n=t,(d=n.context?.trim())?`${n.request}
56
-
57
- ## What ${n.askedBy} already knows
58
-
59
- ${d}`:n.request)}],B={left:3},W=k>=1?function(t,e,o){let a={...t};delete a[h.TOOL_NAMES.ask_thursday];let{answer:n}=o;return n?{...a,[h.TOOL_NAMES.ask_back]:(0,s.tool)({description:u.askBackSpec.description,inputSchema:u.askBackSpec.parameters,execute:async({question:t})=>(e.left-=1,n(t))})}:a}(C,B,e):function(t,e){if(0===e.peers.length)return t;let o={...t,[h.TOOL_NAMES.ask_bot]:(0,s.tool)({description:u.askBotSpec.description,inputSchema:u.askBotSpec.parameters,execute:async({bot:t,request:a,context:s},n)=>{let i=e.options.taskId?`${e.options.taskId}-${n.toolCallId.slice(0,8)}`:null,r=[],l=async s=>{let i=await N({model:e.model,instructions:e.instructions,tools:o,messages:n.messages,asked:{bot:t,request:a},question:s,signal:e.options.signal});return await e.emit({type:"answered",question:s,...i}),r.push({question:s,answer:i.text}),i.text};try{var u;let o=await $({bot:t,request:a,context:s,askedBy:e.name},{...e.options,depth:e.depth+1,parent:n.toolCallId,taskId:i,answer:l});return r.length?`${o}
60
-
61
- ${u=t,r.map(({question:t,answer:e})=>`(On the way ${u} asked you: "${t}" — you answered: "${e}")`).join("\n")}`:o}finally{i&&(0,c.closeJobShell)(i)}}})};return o}(C,{name:E,model:j.model,instructions:L.text,peers:L.peers,depth:k,options:e,emit:M}),P={compact:null,interjections:[]},U=new a.ToolLoopAgent({model:j.model,instructions:L.text,tools:W,stopWhen:[(0,a.stepCountIs)(v),x,(0,a.hasToolCall)(h.TOOL_NAMES.ask_thursday)],prepareStep:async({stepNumber:t,steps:o,messages:a})=>{let s=t<v-1?{}:{activeTools:[h.TOOL_NAMES.report],toolChoice:{type:"tool",toolName:h.TOOL_NAMES.report}};!s.activeTools&&B.left<=0&&(s={...s,activeTools:Object.keys(W).filter(t=>t!==h.TOOL_NAMES.ask_back)});let n=o.at(-1)?.usage.inputTokens??0,i=Math.max(n,a.reduce((t,e)=>t+(0,w.estimateTokens)("string"==typeof e.content?e.content:JSON.stringify(e.content))+4,0)),r=a;if(i>O&&a.length>=2){let t=await T(j.model,W,a,{signal:e.signal,budget:O});p.logger.debug(`compacted ${a.length} messages at ${i} tokens (budget ${O})`),P.compact={type:"compact",text:t.text,usage:t.usage,messages:a.length,tokens:i},r=[{role:"user",content:t.text}]}let l=t>0?e.notes?.()??[]:[];return(l.length&&(P.interjections.push(...l),r=[...r,...l.map(t=>({role:"user",content:t}))]),r===a)?s:{...s,messages:r}}}),R=(y=[],m=[],b=!1,{push(t){let e=m.shift();e?e(t):y.push(t)},take(){let t=y.shift();return t?Promise.resolve(t):b?Promise.resolve(null):new Promise(t=>m.push(t))},end(){for(let t of(b=!0,m.splice(0)))t(null)}}),Y=await U.stream({messages:q,abortSignal:e.signal,onStepEnd:t=>R.push({messages:t.response.messages,usage:A(t.usage)})}),H="",J=null,F=null,G=null;e.signal?.addEventListener("abort",()=>R.end(),{once:!0});try{for await(let t of Y.fullStream)switch(t.type){case"start-step":for(let t of(P.compact&&(await M(P.compact),P.compact=null),P.interjections.splice(0)))await M({type:"interjection",text:t});break;case"text-delta":H+=t.text;break;case"text-end":{let t=H.trim();if(H="",!t)break;J=t,await M({type:"text",text:t});break}case"tool-call":if(t.toolName===h.TOOL_NAMES.ask_thursday){let e=t.input;F={id:t.toolCallId,question:String(e.question??""),options:(0,f.optionsOf)(e.options)}}else if(t.toolName===h.TOOL_NAMES.report){let e=t.input;G={text:String(e.result??"").trim(),complete:!1!==e.complete}}await M({type:"tool",id:t.toolCallId,name:t.toolName,input:t.input});break;case"tool-result":t.toolName===h.TOOL_NAMES.report&&G&&!(0,u.reportAccepted)(t.output)&&(G={text:`${G.text}
62
-
63
- ${S(t.output)}`,complete:!1}),await M({type:"tool-result",id:t.toolCallId,name:t.toolName,output:t.output});break;case"finish-step":{let t=await R.take();t&&await M({type:"step",...t,budget:O});break}case"error":await M({type:"error",message:(0,r.modelErrorToString)(t.error)});return}}finally{R.end()}try{await Y.response}catch(t){await M({type:"error",message:(0,r.modelErrorToString)(t)});return}F?await M({type:"waiting",...F}):G?await M({type:"report",...G}):await M({type:"report",text:J??"Stopped without handing anything back.",complete:!1})}let x=({steps:t})=>t.at(-1)?.toolResults.some(t=>t.toolName===h.TOOL_NAMES.report&&(0,u.reportAccepted)(t.output))??!1;async function T(t,e,o,s){try{let i,{text:r,usage:l}=await (0,a.generateText)({model:t,tools:e,toolChoice:"none",messages:[...o,{role:"user",content:(i=(t=>{let{min:e,max:o,perTokens:a}=n.BOT_RUN.summaryWords;return Math.min(o,Math.max(e,Math.round(t/a)))})(s.budget),`Compact your context. Everything above is your own work on this job so far; after this message it is replaced by what you write now, and you carry on from that alone. Write what a fresh copy of you needs to continue without re-reading anything:
64
-
65
- - The job as it was given — the request, quoted, and the details from the call that matter.
66
- - What you have done and what you found, with the exact values: numbers, names, urls, dates, ids, error messages.
67
- - Files you wrote or read, by path, and what each holds.
68
- - What is still left to do, in order, and any decision or answer you are waiting on.
69
- - What did not work, so it is not tried again.
70
-
71
- Plain text, under ${i} words. No preamble and no headings about the summary itself — start with the job.`)}],abortSignal:s.signal}),u=r.trim();if(u)return{text:`The context was compacted here. Below is your own summary of the job up to this point; continue from it.
72
-
73
- ${u}`,usage:A(l)}}catch(t){if(s.signal?.aborted)throw t;throw Error(`Could not compact the context (${(0,r.modelErrorToString)(t)}).`)}throw Error("The summary of the context came back empty, so there is nothing to carry on from.")}let A=t=>({input:t.inputTokens??0,output:t.outputTokens??0});async function $(t,e){let o="",a=null;return await k(t,{...e,emit:async t=>{"report"===t.type&&(o=t.complete?t.text:`${t.text}
74
-
75
- (As far as they got — they ran out of steps.)`),"error"===t.type&&(a=t.message),await e.emit(t)}}),a&&(0,y.publicError)(a),o}async function N(t){try{let e,o,{text:s,usage:n}=await (0,a.generateText)({model:t.model,system:t.instructions,tools:t.tools,toolChoice:"none",messages:[...t.messages,{role:"user",content:(e=t.asked,o=t.question,`You handed one part of your job to ${e.bot}:
76
-
77
- > ${e.request.trim()}
78
-
79
- Before going on, they ask you:
80
-
81
- > ${o.trim()}
82
-
83
- Answer from what you already have — the request as it reached you, the call it came out of, what you found before asking them. A few lines, plain text, and nothing else: no tools run here. If it is not in what you have, say so rather than guess, and say which way to go without it.`)}],abortSignal:t.signal});return{text:s.trim()||"They had nothing to add. Go on with your best reading, and say what you assumed in what you hand back.",usage:A(n)}}catch(e){if(t.signal?.aborted)throw e;return p.logger.warn(`ask_back: ${(0,r.modelErrorToString)(e)}`),{text:`No answer came back (${(0,r.modelErrorToString)(e)}). Go on with your best reading, and say what you assumed in what you hand back.`,usage:d.NO_TOKENS}}}function S(t){return"string"==typeof t?t:t&&"object"==typeof t&&"value"in t?"string"==typeof t.value?t.value:JSON.stringify(t.value??""):JSON.stringify(t??"")}t.s(["condenseThread",0,function(t,e=n.BOT_RUN.resumeMessages){let[o,...a]=t,s=[],i=(t,e)=>{let o=e.trim();if(!o)return;let a=s.at(-1);a?.role===t?a.content=`${a.content}
84
-
85
- ${o}`:s.push({role:t,content:o})};for(let t of a)if("user"===t.role)i("user","string"==typeof t.content?t.content:t.content.flatMap(t=>"text"===t.type?[t.text]:[]).join("\n"));else if("assistant"===t.role){if("string"==typeof t.content){i("assistant",t.content);continue}for(let e of t.content)"text"===e.type?i("assistant",e.text):"tool-call"===e.type&&i("assistant",function(t){let e=t.input??{};return t.toolName===h.TOOL_NAMES.ask_thursday?`(asked Thursday: ${String(e.question??"")})`:t.toolName===h.TOOL_NAMES.ask_back?`(asked back: ${String(e.question??"")})`:t.toolName===h.TOOL_NAMES.ask_bot?`(asked ${String(e.bot??"")} for: ${String(e.request??"")})`:t.toolName===h.TOOL_NAMES.report?`(handed back: ${(0,m.clip)(String(e.result??""),300)})`:`[${t.toolName} ${(0,f.toolLine)(t.toolName,e)}]`}(e))}else if("tool"===t.role)for(let e of t.content)"tool-result"===e.type&&(e.toolName===h.TOOL_NAMES.ask_thursday||e.toolName===h.TOOL_NAMES.ask_back?i("user",S(e.output)):e.toolName===h.TOOL_NAMES.ask_bot&&i("assistant",`(they answered: ${(0,m.clip)(S(e.output),600)})`));let r=s.slice(-e);return o?[o,...r]:r},"runBot",0,k]),o()}catch(t){o(t)}},!1),39803,t=>t.a(async(e,o)=>{try{var a=t.i(89171),s=t.i(380690),n=t.i(687388),i=t.i(386075),r=t.i(851372),l=t.i(353885),u=t.i(22676),h=t.i(629668),d=t.i(786025),c=t.i(167004),p=t.i(640911),y=t.i(53748),w=t.i(268486),m=t.i(585099),g=t.i(944971),f=t.i(780274),b=e([i,r,u,m,f]);[i,r,u,m,f]=b.then?(await b)():b;let x=globalThis.__botRuns??=new Map,A=globalThis.__botTaskLock??=(0,w.createKeyedLock)();async function k(t){let e=t.callId?await (0,u.listCallTurns)(t.callId,r.OPENING_TURNS):[],o=(0,r.buildTaskOpening)({request:t.request,conversation:e}),a=await (0,f.insertTask)({...t,opening:o});return N(a.id,{bot:t.bot,messages:[{role:"user",content:o}]}),a.id}async function T(t,e){return A(t,async()=>{var o,a;let s,n=await (0,f.findTask)(t);n||(0,y.publicError)("No such job.");let i=x.get(t);if(i&&"running"===n.status&&i.note(e))return void p.logger.debug(`task ${t}: interjection queued`);i&&(i.stop.abort(),await i.done);let{reply:r,as:u}=(o=n,a=e,s="waiting"===o.status?o.pending:null,s?.toolCallId?{as:"answer",reply:{role:"tool",content:[{type:"tool-result",toolCallId:s.toolCallId,toolName:l.TOOL_NAMES.ask_thursday,output:{type:"text",value:a}}]}}:{as:"running"===o.status?"interruption":"waiting"===o.status?"answer":"follow-up",reply:{role:"user",content:a}});p.logger.debug(`task ${t}: ${u}`);let h=await (0,f.listThread)(t);await (0,f.upsertMessage)(t,await (0,f.lastSeq)(t)+1,{bot:null,parent:null,...r}),await (0,f.updateTask)(t,{status:"running",outcome:null,pending:null,reported:!1,endedAt:null}),N(t,{bot:n.bot,messages:(0,m.condenseThread)([...h,r])})})}async function $(t){return A(t,async()=>{await (0,f.findTask)(t)||(0,y.publicError)("No such job."),x.get(t)?.stop.abort(),await (0,f.updateTask)(t,{status:"failed",outcome:"Cancelled.",pending:null,reported:!0,endedAt:new Date}),(0,d.closeJobShell)(t)})}function N(t,e){let o=new AbortController,s=()=>{},n=new Promise(t=>{s=t}),i=[];x.set(t,{stop:o,done:n,note:e=>!!x.has(t)&&(i.push(e),!0)}),(0,a.after)(()=>S(t,e,o.signal,i).catch(e=>{p.logger.error(`task ${t}`,e)}).finally(s))}class _{taskId;seq;steps;constructor(t,e){this.taskId=t,this.steps=new Map,this.seq=e}step(t){let e=`${t.bot} ${t.parent??""}`,o=this.steps.get(e);return o||(o={assistant:null,tool:null,parts:{assistant:[],tool:[]}},this.steps.set(e,o)),o}write(t,e,o,a={}){let s={bot:e.bot,parent:e.parent,role:o.role,content:o.content,compact:a.compact??!1};return(0,f.upsertMessage)(this.taskId,t,s)}async on(t){let e=this.step(t);switch(t.type){case"text":return e.assistant??=++this.seq,e.parts.assistant.push({type:"text",text:t.text}),this.write(e.assistant,t,{role:"assistant",content:e.parts.assistant});case"tool":return e.assistant??=++this.seq,e.parts.assistant.push({type:"tool-call",toolCallId:t.id,toolName:t.name,input:t.input}),this.write(e.assistant,t,{role:"assistant",content:e.parts.assistant});case"tool-result":return e.assistant??=++this.seq,e.tool??=++this.seq,e.parts.tool.push({type:"tool-result",toolCallId:t.id,toolName:t.name,output:"string"==typeof t.output?{type:"text",value:t.output}:{type:"json",value:t.output}}),this.write(e.tool,t,{role:"tool",content:e.parts.tool});case"step":{let o=[e.assistant,e.tool];this.steps.delete(`${t.bot} ${t.parent??""}`);let a=new Set;for(let[e,s]of t.messages.entries()){let n=o[e]??++this.seq;a.add(n),await this.write(n,t,s)}let s=o.filter(t=>null!==t&&!a.has(t));s.length&&await (0,f.deleteMessages)(this.taskId,s);return}case"compact":return this.write(++this.seq,t,{role:"user",content:t.text},{compact:!0});case"interjection":return this.write(++this.seq,t,{role:"user",content:t.text});default:return}}}async function S(t,e,o,a){let r=new _(t,await (0,f.lastSeq)(t)),l=null;try{await (0,m.runBot)(e,{signal:o,taskId:t,notes:()=>a.splice(0),emit:async e=>{await r.on(e),"step"===e.type&&await (0,f.addTaskUsage)(t,e.usage,e.parent?null:{tokens:e.usage.input,budget:e.budget}),("compact"===e.type||"answered"===e.type)&&await (0,f.addTaskUsage)(t,e.usage),e.parent||("waiting"===e.type?l={status:"waiting",outcome:e.question,pending:{toolCallId:e.id,options:e.options}}:"report"===e.type?l={status:e.complete?"done":"waiting",outcome:e.text,pending:e.complete?null:{toolCallId:null,options:[g.TASK_CONTINUE]}}:"error"===e.type&&(l={status:"failed",outcome:v(e.message),pending:null}))}})}catch(t){l={status:"failed",outcome:v((0,i.modelErrorToString)(t)),pending:null}}finally{x.delete(t)}if(o.aborted)return;let u=l??{status:"failed",outcome:"Stopped without handing anything back.",pending:null};await (0,f.updateTask)(t,{...u,reported:!1,endedAt:"waiting"===u.status?null:new Date}),"waiting"!==u.status&&(0,d.closeJobShell)(t);let c=await (0,f.findTask)(t);if(c){if(a.length){let e=a.splice(0).join("\n\n");p.logger.debug(`task ${t}: interjection after the run ended — resuming`),T(t,e).catch(e=>{p.logger.error(`task ${t}: late interjection`,e)});return}if(await O(c.label,u),"done"===u.status){var y;let e,o=(y=u.outcome,(e=(0,h.pathsIn)(y)).find(t=>t.startsWith(`${n.PATHS.artifacts}/`))??e[0]??null);o&&s.appEvents.emit({type:"artifact",taskId:t,label:c.label,path:o})}}}function v(t){return`The run broke: ${t}
86
-
87
- Everything it had done is still here — answer to pick it back up.`}async function O(t,e){if(0!==s.appEventStream.watchers&&await (0,u.isAnyCallLive)())return;let o="waiting"===e.status?`${t} — needs you`:t;(0,c.desktopNotify)(o,e.outcome)}t.s(["answerTask",0,T,"cancelTask",0,$,"startTask",0,k]),o()}catch(t){o(t)}},!1),167004,t=>{"use strict";var e=t.i(874533),o=t.i(687388);let a=`on run argv
88
- display notification (item 2 of argv) with title (item 1 of argv)
89
- end run`,s=`
90
- $ErrorActionPreference = 'Stop'
91
- [void][Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
92
- $xml = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)
93
- $text = $xml.GetElementsByTagName('text')
94
- [void]$text.Item(0).AppendChild($xml.CreateTextNode($env:NOTIFY_TITLE))
95
- [void]$text.Item(1).AppendChild($xml.CreateTextNode($env:NOTIFY_BODY))
96
- $id = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\WindowsPowerShell\\v1.0\\powershell.exe'
97
- [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($id).Show([Windows.UI.Notifications.ToastNotification]::new($xml))
98
- `,n={darwin:(t,e)=>["osascript",["-e",a,"--",t,e]],win32:()=>["powershell.exe",["-NoProfile","-NonInteractive","-Command",s]],linux:(t,e)=>["notify-send",["--app-name",o.APP_NAME,"--",t,e]]};t.s(["desktopNotify",0,function(t,o){let a=t.slice(0,80),s=o.slice(0,200),i=n[process.platform]?.(a,s);if(!i)return;let[r,l]=i;(0,e.execFile)(r,l,{env:{...process.env,NOTIFY_TITLE:a,NOTIFY_BODY:s},timeout:1e4,windowsHide:!0},()=>{})}])}];
99
-
100
- //# sourceMappingURL=_0fzqt2y._.js.map