thursday-agent 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +1 -1
  13. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/api/artifact/route.js +4 -4
  17. package/.next/server/app/api/artifact/route.js.nft.json +1 -1
  18. package/.next/server/app/api/bot/memory/files/route.js +3 -3
  19. package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
  20. package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
  21. package/.next/server/app/api/bot/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bot/task/[id]/route.js +8 -8
  23. package/.next/server/app/api/bot/task/[id]/route.js.nft.json +1 -1
  24. package/.next/server/app/api/bot/task/route.js +6 -6
  25. package/.next/server/app/api/bot/task/route.js.nft.json +1 -1
  26. package/.next/server/app/api/config/route.js.nft.json +1 -1
  27. package/.next/server/app/api/events/route.js.nft.json +1 -1
  28. package/.next/server/app/api/file/[...path]/route.js +4 -4
  29. package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/llm-model/catalog/route.js +2 -2
  31. package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
  32. package/.next/server/app/api/llm-model/credits/route.js +2 -2
  33. package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -1
  34. package/.next/server/app/api/llm-model/route.js +2 -2
  35. package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
  36. package/.next/server/app/api/llm-model/subscription/route.js +2 -2
  37. package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
  38. package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
  39. package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
  40. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  41. package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
  42. package/.next/server/app/api/memory/edit/route.js +11 -11
  43. package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
  44. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  45. package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
  46. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  47. package/.next/server/app/api/thursday/call/route.js +6 -6
  48. package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
  49. package/.next/server/app/api/thursday/skills/route.js +6 -6
  50. package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
  51. package/.next/server/app/api/thursday/tool-call/route.js +8 -8
  52. package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
  53. package/.next/server/app/api/workspace/route.js +3 -2
  54. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  55. package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
  56. package/.next/server/app/artifact/[...path]/page.js +2 -2
  57. package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
  58. package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  60. package/.next/server/app/page/server-reference-manifest.json +40 -40
  61. package/.next/server/app/page.js +1 -1
  62. package/.next/server/app/page.js.nft.json +1 -1
  63. package/.next/server/app/page_client-reference-manifest.js +1 -1
  64. package/.next/server/chunks/[root-of-the-server]__026u77e._.js +5 -0
  65. package/.next/server/chunks/{[root-of-the-server]__02xjoto._.js → [root-of-the-server]__050zri4._.js} +1 -1
  66. package/.next/server/chunks/[root-of-the-server]__0bg9710._.js +3 -0
  67. package/.next/server/chunks/[root-of-the-server]__0in-d5s._.js +3 -0
  68. package/.next/server/chunks/[root-of-the-server]__0pa9k-f._.js +8 -0
  69. package/.next/server/chunks/[root-of-the-server]__0qi_m0e._.js +8 -0
  70. package/.next/server/chunks/[root-of-the-server]__0tq0m_k._.js +3 -0
  71. package/.next/server/chunks/[root-of-the-server]__0xep6j_._.js +3 -0
  72. package/.next/server/chunks/[root-of-the-server]__144l7qt._.js +8 -0
  73. package/.next/server/chunks/[root-of-the-server]__1anc1p9._.js +1 -1
  74. package/.next/server/chunks/[root-of-the-server]__1jg8t86._.js +8 -0
  75. package/.next/server/chunks/{[root-of-the-server]__12cabg9._.js → [root-of-the-server]__1lldzy9._.js} +1 -1
  76. package/.next/server/chunks/{[root-of-the-server]__01dkp4a._.js → [root-of-the-server]__1peqvsi._.js} +1 -1
  77. package/.next/server/chunks/[root-of-the-server]__1w8gm5h._.js +10 -0
  78. package/.next/server/chunks/[root-of-the-server]__1xt39nn._.js +8 -0
  79. package/.next/server/chunks/[root-of-the-server]__1zb8mfo._.js +8 -0
  80. package/.next/server/chunks/_0-fjql4._.js +11 -6
  81. package/.next/server/chunks/_00xh_q0._.js +1 -1
  82. package/.next/server/chunks/{_1_9mjx-._.js → _091bi8d._.js} +1 -1
  83. package/.next/server/chunks/_0fzqt2y._.js +29 -21
  84. package/.next/server/chunks/{_0u4aiy2._.js → _0lr92vd._.js} +1 -1
  85. package/.next/server/chunks/_0mecv0f._.js +11 -6
  86. package/.next/server/chunks/{_0sbynis._.js → _0si7xzn._.js} +1 -1
  87. package/.next/server/chunks/_1230wbx._.js +5 -5
  88. package/.next/server/chunks/{_0obojvv._.js → _18d7-5p._.js} +1 -1
  89. package/.next/server/chunks/_1c78vw5._.js +33 -25
  90. package/.next/server/chunks/_1d0j961._.js +2 -2
  91. package/.next/server/chunks/_1krd9rf._.js +1 -1
  92. package/.next/server/chunks/{_03a0897._.js → _1zkfbaa._.js} +1 -1
  93. package/.next/server/chunks/features_1qf3cei._.js +6 -1
  94. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0r28-sm._.js → node_modules_consola_dist_chunks_prompt_mjs_17k8irj._.js} +1 -1
  95. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_1xoq2rl._.js → node_modules_consola_dist_chunks_prompt_mjs_1jidylq._.js} +1 -1
  96. package/.next/server/chunks/ssr/[root-of-the-server]__0-nob52._.js +4 -0
  97. package/.next/server/chunks/ssr/{[root-of-the-server]__202p40z._.js → [root-of-the-server]__0s4wb56._.js} +1 -1
  98. package/.next/server/chunks/ssr/{[root-of-the-server]__0xsog8n._.js → [root-of-the-server]__0sd3izg._.js} +2 -2
  99. package/.next/server/chunks/ssr/{[root-of-the-server]__1gtlw6v._.js → [root-of-the-server]__1-13tcn._.js} +2 -2
  100. package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +1 -1
  101. package/.next/server/chunks/ssr/{[root-of-the-server]__0s9l2sv._.js → [root-of-the-server]__1zidpfl._.js} +1 -1
  102. package/.next/server/chunks/ssr/_001_ms1._.js +6 -1
  103. package/.next/server/chunks/ssr/{_0gb4gmf._.js → _04z2c7b._.js} +2 -2
  104. package/.next/server/chunks/ssr/{_1nnsk7z._.js → _06tssji._.js} +2 -2
  105. package/.next/server/chunks/ssr/_0fk4c7d._.js +3 -0
  106. package/.next/server/chunks/ssr/_0i_6q1w._.js +1 -1
  107. package/.next/server/chunks/ssr/{_1h0rw11._.js → _0m2lsd1._.js} +2 -2
  108. package/.next/server/chunks/ssr/_0mggveb._.js +3 -0
  109. package/.next/server/chunks/ssr/{_1jhd09t._.js → _0nbpc_8._.js} +2 -2
  110. package/.next/server/chunks/ssr/{_1fojd41._.js → _0rzucul._.js} +3 -3
  111. package/.next/server/chunks/ssr/_0s99bgb._.js +1 -1
  112. package/.next/server/chunks/ssr/_1-teee5._.js +4 -4
  113. package/.next/server/chunks/ssr/{_0fz4mf_._.js → _11j92tu._.js} +2 -2
  114. package/.next/server/chunks/ssr/{_1b2mjwr._.js → _1ebxla1._.js} +2 -2
  115. package/.next/server/chunks/ssr/{_1gd8q8l._.js → _1jdgjv9._.js} +2 -2
  116. package/.next/server/chunks/ssr/_1lz_cq2._.js +19 -11
  117. package/.next/server/chunks/ssr/{_0ilna52._.js → _1nj4niv._.js} +2 -2
  118. package/.next/server/chunks/ssr/_1ovmc9s._.js +3 -0
  119. package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
  120. package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
  121. package/.next/server/chunks/ssr/{node_modules_0pvd7q-._.js → node_modules_0-dr_o7._.js} +1 -1
  122. package/.next/server/chunks/ssr/{node_modules_1_pc9kq._.js → node_modules_04sksn9._.js} +1 -1
  123. package/.next/server/chunks/ssr/{node_modules_1vh5ntv._.js → node_modules_05-n6dz._.js} +1 -1
  124. package/.next/server/chunks/ssr/{node_modules_0b__sgl._.js → node_modules_056qgf-._.js} +1 -1
  125. package/.next/server/chunks/ssr/{node_modules_0g7fzk3._.js → node_modules_07dsgkx._.js} +1 -1
  126. package/.next/server/chunks/ssr/{node_modules_04jf_m8._.js → node_modules_0bvopy2._.js} +1 -1
  127. package/.next/server/chunks/ssr/{node_modules_0arus10._.js → node_modules_0fkeku3._.js} +1 -1
  128. package/.next/server/chunks/ssr/{node_modules_14om4ar._.js → node_modules_0ifp389._.js} +1 -1
  129. package/.next/server/chunks/ssr/{node_modules_0cxaxk9._.js → node_modules_0iur59s._.js} +1 -1
  130. package/.next/server/chunks/ssr/{node_modules_1aaxuef._.js → node_modules_0m383r2._.js} +1 -1
  131. package/.next/server/chunks/ssr/{node_modules_1qpjvy5._.js → node_modules_0u9da1h._.js} +1 -1
  132. package/.next/server/chunks/ssr/{node_modules_1cx_ql6._.js → node_modules_0zeg3x_._.js} +1 -1
  133. package/.next/server/chunks/ssr/{node_modules_0_-_a--._.js → node_modules_1-y7nni._.js} +1 -1
  134. package/.next/server/chunks/ssr/{node_modules_08dhkiq._.js → node_modules_16mkxuo._.js} +1 -1
  135. package/.next/server/chunks/ssr/{node_modules_198nmll._.js → node_modules_1a0kmjl._.js} +1 -1
  136. package/.next/server/chunks/ssr/{node_modules_1efrqxi._.js → node_modules_1chvq5f._.js} +1 -1
  137. package/.next/server/chunks/ssr/{node_modules_0yugy6m._.js → node_modules_1j8j4pt._.js} +1 -1
  138. package/.next/server/chunks/ssr/{node_modules_09q35v_._.js → node_modules_1k6n600._.js} +1 -1
  139. package/.next/server/chunks/ssr/{node_modules_1cz2hle._.js → node_modules_1k7z2j6._.js} +1 -1
  140. package/.next/server/chunks/ssr/{node_modules_1gdh31p._.js → node_modules_1k8j8n0._.js} +1 -1
  141. package/.next/server/chunks/ssr/{node_modules_1eg7m6c._.js → node_modules_1lz0oxc._.js} +1 -1
  142. package/.next/server/chunks/ssr/{node_modules_0940ns5._.js → node_modules_1t77e4n._.js} +1 -1
  143. package/.next/server/chunks/ssr/{node_modules_00etblx._.js → node_modules_1uyk91w._.js} +1 -1
  144. package/.next/server/chunks/ssr/{node_modules_0had7xd._.js → node_modules_1x0ztf4._.js} +1 -1
  145. package/.next/server/chunks/ssr/{node_modules_14q6g4n._.js → node_modules_1y79i83._.js} +1 -1
  146. package/.next/server/chunks/ssr/{node_modules_1hpopmo._.js → node_modules_20c28js._.js} +1 -1
  147. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1b748ic._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0bkwd0u._.js} +1 -1
  148. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1z4hm5e._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0p9a9su._.js} +1 -1
  149. package/.next/server/chunks/ssr/{node_modules_@vercel_oidc_dist_06mk8id._.js → node_modules_@vercel_oidc_dist_1o553h-._.js} +1 -1
  150. package/.next/server/middleware-build-manifest.js +3 -3
  151. package/.next/server/pages/404.html +1 -1
  152. package/.next/server/pages/500.html +1 -1
  153. package/.next/server/server-reference-manifest.js +1 -1
  154. package/.next/server/server-reference-manifest.json +41 -41
  155. package/.next/static/chunks/{39j0fvpybzabl.js → 0n3jle9kbqfr2.js} +2 -2
  156. package/.next/static/chunks/{0fl3gwe4-l6tz.js → 11r2yp_yh9_qn.js} +1 -1
  157. package/.next/static/chunks/{1jd09sxcjddu1.js → 126fj4pga_72k.js} +1 -1
  158. package/.next/static/chunks/{0gnqdjn2lvdad.js → 159udiexf6dom.js} +1 -1
  159. package/.next/static/chunks/{08qe4as2q428z.js → 18gi7o2ibrgh8.js} +1 -1
  160. package/.next/static/chunks/{2u7xt6mxg44lf.js → 1q9z1tohil7xn.js} +1 -1
  161. package/.next/static/chunks/{3zmcsnuo25zvq.js → 1sjgfets224re.js} +1 -1
  162. package/.next/static/chunks/{0wcprt5ot5she.js → 1wszsr83t01gh.js} +1 -1
  163. package/.next/static/chunks/{0w52rrrmuj9r9.js → 2szintyibu0s5.js} +1 -1
  164. package/.next/static/chunks/{0hwap1-p0m5sa.js → 3-b6b7entqazs.js} +1 -1
  165. package/.next/static/chunks/{17p6tk6k88dq6.js → 3dmbhsv2u_8kj.js} +1 -1
  166. package/.next/static/chunks/{214ya3n5gxeih.js → 3i0a5px-oufgc.js} +1 -1
  167. package/.next/static/chunks/{1w73ece_6bheu.js → 3wexk9qo8zuj3.js} +3 -3
  168. package/.next/static/chunks/3xre8bu_pk1p_.js +1 -0
  169. package/.next/static/chunks/{3woj-xd7ki5_i.js → 3zv6t3i77xhr_.js} +1 -1
  170. package/.next/static/chunks/{3akmqm77muj4-.js → 408ueu4hfvcg7.js} +1 -1
  171. package/.next/static/chunks/{15m575979un5f.js → 435atsnhs7ksu.js} +6 -6
  172. package/bin/thursday.mjs +0 -0
  173. package/features/ai/prompts/bot.prompt.ts +1 -1
  174. package/features/ai/tools/bot.tool.ts +3 -3
  175. package/features/ai/tools/skills.tool.ts +25 -8
  176. package/features/bot/bot.run.ts +184 -73
  177. package/features/bot/bot.runner.ts +48 -23
  178. package/features/bot/task.query.ts +107 -4
  179. package/features/bot/task.store.ts +3 -5
  180. package/features/workspace/workspace.ts +27 -20
  181. package/package.json +1 -1
  182. package/skills/browser/SKILL.md +6 -5
  183. package/.next/server/chunks/[root-of-the-server]__04q--0f._.js +0 -8
  184. package/.next/server/chunks/[root-of-the-server]__0bl-e63._.js +0 -3
  185. package/.next/server/chunks/[root-of-the-server]__0jq4ohy._.js +0 -8
  186. package/.next/server/chunks/[root-of-the-server]__0ls6_8y._.js +0 -8
  187. package/.next/server/chunks/[root-of-the-server]__1339jnv._.js +0 -8
  188. package/.next/server/chunks/[root-of-the-server]__18_teo8._.js +0 -8
  189. package/.next/server/chunks/[root-of-the-server]__1ccon1w._.js +0 -10
  190. package/.next/server/chunks/[root-of-the-server]__1wa1k7r._.js +0 -8
  191. package/.next/server/chunks/_1zjrdag._.js +0 -3
  192. package/.next/server/chunks/ssr/[root-of-the-server]__1ox7hbk._.js +0 -4
  193. package/.next/server/chunks/ssr/_0n3toaw._.js +0 -3
  194. package/.next/server/chunks/ssr/_1-_etts._.js +0 -3
  195. package/.next/server/chunks/ssr/_1f-dg-6._.js +0 -3
  196. package/.next/static/chunks/00rd4-v8r7axp.js +0 -1
  197. /package/.next/static/{kaTO0UHqF1bMnWgCDik2f → G6-gNoyGDEcgAsq-L4PE1}/_buildManifest.js +0 -0
  198. /package/.next/static/{kaTO0UHqF1bMnWgCDik2f → G6-gNoyGDEcgAsq-L4PE1}/_clientMiddlewareManifest.js +0 -0
  199. /package/.next/static/{kaTO0UHqF1bMnWgCDik2f → G6-gNoyGDEcgAsq-L4PE1}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
- module.exports=[232347,e=>{"use strict";let t,r,a,i,n,s;var o,l=e.i(333925),c=e.i(938281);let u={tasks:!0,memory:!0,mcp:!0,config:!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)})}),f=d.__presence??=(o=l.BROWSER_GONE_MS,r=!1,a=null,i=new Set,n=new Set,s=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return r},track(e){if(e>0){a&&clearTimeout(a),a=null,r||(r=!0,s(n));return}!a&&r&&(a=setTimeout(()=>{a=null,r=!1,s(i)},o))},onGone:e=>(i.add(e),()=>i.delete(e)),onBack:e=>(n.add(e),()=>n.delete(e))}),m=d.__appEventStream??=function(e,t={}){let r=new TextEncoder,a=t.heartbeatMs??2e4,i=0;return{respond:(n,s)=>{let o=()=>{};return new Response(new ReadableStream({async start(l){let u=!1,d=new Map,p=[],f=e=>{if(!u)try{l.enqueue(r.encode(e))}catch{o()}},m=e=>f(`data: ${JSON.stringify(e)}
1
+ module.exports=[232347,e=>{"use strict";let t,r,a,i,s,n;var o,l=e.i(333925),c=e.i(938281);let u={tasks:!0,memory:!0,mcp:!0,config:!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)})}),f=d.__presence??=(o=l.BROWSER_GONE_MS,r=!1,a=null,i=new Set,s=new Set,n=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,n(s));return}!a&&r&&(a=setTimeout(()=>{a=null,r=!1,n(i)},o))},onGone:e=>(i.add(e),()=>i.delete(e)),onBack:e=>(s.add(e),()=>s.delete(e))}),m=d.__appEventStream??=function(e,t={}){let r=new TextEncoder,a=t.heartbeatMs??2e4,i=0;return{respond:(s,n)=>{let o=()=>{};return new Response(new ReadableStream({async start(l){let u=!1,d=new Map,p=[],f=e=>{if(!u)try{l.enqueue(r.encode(e))}catch{o()}},m=e=>f(`data: ${JSON.stringify(e)}
2
2
 
3
- `),h=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return m(e);let a=d.get(r);a&&clearTimeout(a),d.set(r,setTimeout(()=>{d.delete(r),m(e)},t.coalesce?.ms))},w=e.subscribe(e=>p?p.push(e):h(e)),T=setInterval(()=>f(": ping\n\n"),a);i+=1,t.onWatchers?.(i),o=()=>{if(!u){for(let e of(u=!0,i-=1,t.onWatchers?.(i),w(),clearInterval(T),d.values()))clearTimeout(e);try{l.close()}catch{}}},n.addEventListener("abort",o);try{for(let e of await s?.()??[])m(e)}catch(e){c.logger.error("event stream opening failed",e),o();return}let S=p;for(let e of(p=null,S))h(e)},cancel(){o()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return i}}}(p,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:f.track});d.__bootId??=crypto.randomUUID(),e.s(["appEventStream",0,m,"appEvents",0,p,"presence",0,f],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,i=`file:${r}/local.db`,n=".ai-workspace",s={workspace:n,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${n}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ASCII_FACE",0,{charset:"emojiOnly",fontSize:{default:8,min:4,max:16},density:{default:1.4,min:.6,max:2}},"BOT_MEMORY_LISTED",0,20,"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},depth:2,askBack:3,silenceMs:3e5,autoResumes:3,retryAfterMs:[3e4,12e4,3e5],overflowShrink:.6,compactFiles:40},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,r,"DB_FILE_NAME",0,i,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"INBOX_FINISHED",0,3,"IS_DEV",0,!1,"MEMORY_CONVERSATION_PAGE",0,100,"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,carried:20},"PAGE_SIZE",0,50,"PATHS",0,s,"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,callTurn:160,botMemory:100},"SEARCH",0,{sources:6,excerptChars:1200,timeoutMs:3e4},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5}])},871096,e=>{"use strict";var t=e.i(912714),r=e.i(750227),a=e.i(333925),i=e.i(938281),n=e.i(874533),s=a;let o=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*l(e){let a;try{a=await (0,t.readdir)(e,{withFileTypes:!0})}catch{return}for(let t of a){if(o.has(t.name)||t.name.startsWith("."))continue;let a=(0,r.join)(e,t.name);t.isDirectory()?yield*l(a):t.isFile()&&(yield a)}}async function c(e,a,i,n){if(e.length<=n.max)return e;let s=(0,r.join)(i,n.dir),o=(0,r.join)(s,`${new Date().toISOString().replace(/[:.]/g,"-")}-${a.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=o;try{await (0,t.mkdir)(s,{recursive:!0}),await (0,t.writeFile)(o,e),l=(0,r.relative)(i,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()}
3
+ `),h=e=>{let r=t.coalesce?.keyOf(e)??null;if(null===r)return m(e);let a=d.get(r);a&&clearTimeout(a),d.set(r,setTimeout(()=>{d.delete(r),m(e)},t.coalesce?.ms))},w=e.subscribe(e=>p?p.push(e):h(e)),S=setInterval(()=>f(": ping\n\n"),a);i+=1,t.onWatchers?.(i),o=()=>{if(!u){for(let e of(u=!0,i-=1,t.onWatchers?.(i),w(),clearInterval(S),d.values()))clearTimeout(e);try{l.close()}catch{}}},s.addEventListener("abort",o);try{for(let e of await n?.()??[])m(e)}catch(e){c.logger.error("event stream opening failed",e),o();return}let T=p;for(let e of(p=null,T))h(e)},cancel(){o()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return i}}}(p,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:f.track});d.__bootId??=crypto.randomUUID(),e.s(["appEventStream",0,m,"appEvents",0,p,"presence",0,f],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),r=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,i=`file:${r}/local.db`,s=".ai-workspace",n={workspace:s,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${s}/.agents/skills`}};e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ASCII_FACE",0,{charset:"emojiOnly",fontSize:{default:8,min:4,max:16},density:{default:1.4,min:.6,max:2}},"BOT_MEMORY_LISTED",0,20,"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},depth:2,askBack:3,silenceMs:3e5,autoResumes:3,retryAfterMs:[3e4,12e4,3e5],overflowShrink:.6,compactFiles:40},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,r,"DB_FILE_NAME",0,i,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"INBOX_FINISHED",0,3,"IS_DEV",0,!1,"MEMORY_CONVERSATION_PAGE",0,100,"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,carried:20},"PAGE_SIZE",0,50,"PATHS",0,n,"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,callTurn:160,botMemory:100},"SEARCH",0,{sources:6,excerptChars:1200,timeoutMs:3e4},"STUDIO_SERVER",0,"studio","TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5}])},871096,e=>{"use strict";var t=e.i(666680),r=e.i(912714),a=e.i(750227),i=e.i(333925),s=e.i(938281),n=e.i(874533),o=i;let l=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*c(e){let t;try{t=await (0,r.readdir)(e,{withFileTypes:!0})}catch{return}for(let r of t){if(l.has(r.name)||r.name.startsWith("."))continue;let t=(0,a.join)(e,r.name);r.isDirectory()?yield*c(t):r.isFile()&&(yield t)}}async function u(e,t,i,s){if(e.length<=s.max)return e;let n=(0,a.join)(i,s.dir),o=(0,a.join)(n,`${new Date().toISOString().replace(/[:.]/g,"-")}-${t.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),l=o;try{await (0,r.mkdir)(n,{recursive:!0}),await (0,r.writeFile)(o,e),l=(0,a.relative)(i,o)||o}catch{l="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,s.head).trimEnd()}
4
4
 
5
- [${a} cut at ${n.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
5
+ [${t} cut at ${s.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${l}. Read the part you need with \`sed -n\`.]
6
6
 
7
- ${e.slice(-n.tail).trimStart()}`}let u=a.APP_DIR,d=(0,r.join)(a.DATA_DIR,a.PATHS.workspace),p=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,r.join)(u,"node_modules",".bin")]).filter(Boolean);(0,r.join)(d,a.PATHS.artifacts);let f=[a.PATHS.artifacts,a.PATHS.projects,a.PATHS.scratch,a.PATHS.bots],m=new Set([...f,".agents"]),h=(e,t)=>t===e||t.startsWith(e+r.sep),w=e=>(0,t.realpath)(e).catch(()=>null);async function T(e){let t=await w(d)??d,a=(0,r.resolve)(d,e);if(!h(d,a))return null;let i=a,n=await w(i);for(;null===n&&(0,r.dirname)(i)!==i;)i=(0,r.dirname)(i),n=await w(i);if(null===n)return null;let s=(0,r.relative)(i,a),o=s?(0,r.join)(n,s):n;return h(t,o)?o:null}function S(e,t){let r=t.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job";return`${a.PATHS.scratch}/${r}-${e.slice(0,6)}`}let E=e=>`${a.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function _(e){let a=E(e);return await (0,t.mkdir)((0,r.join)(d,a),{recursive:!0}),a}async function y(e,a){let i=S(e,a);return await (0,t.mkdir)((0,r.join)(d,i),{recursive:!0}),i}let A=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:a.BROWSER_VIEWPORT}:{},P=null,R={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function g(e){let t=Object.values(R).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),a=new Set(r.trim().split(/\s+/).filter(Boolean)),i=e=>({found:e.filter(e=>a.has(e)),missing:e.filter(e=>!a.has(e))});return{runtimes:i(R.runtimes),managers:i(R.managers),browser:P}}async function O(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await L(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));(P=0===t.exitCode)||i.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 v(){await k(),await b()}async function I(e){let t,r=await L(),a=A(e),i=await r.exec("playwright-cli list --json",{env:a,timeoutMs:15e3}).catch(()=>null);try{let{browsers:e}=JSON.parse(i?.stdout??"");t=e?.find(e=>e.name===a.PLAYWRIGHT_CLI_SESSION)}catch{}t?.headed!==!1||t.attached||await r.exec("playwright-cli close",{env:a,timeoutMs:15e3}).catch(()=>{}),await v()}async function M(e){let t=await L();await t.exec("playwright-cli close",{env:A(e),timeoutMs:15e3}).catch(()=>{}),await v()}let b=()=>$(a.PATHS.output),k=()=>$(".playwright-cli");async function $(e){let i=(0,r.join)(d,e),n=await (0,t.readdir)(i,{withFileTypes:!0}).catch(()=>[]),s=Date.now()-a.WORKSPACE_KEEP.forMs;for(let e of n){if(!e.isFile())continue;let a=(0,r.join)(i,e.name),n=await (0,t.stat)(a).catch(()=>null);n&&n.mtimeMs<s&&await (0,t.unlink)(a).catch(()=>{})}}async function j(){return(await (0,t.readdir)((0,r.join)(d,a.PATHS.scratch),{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>`${a.PATHS.scratch}/${e.name}`)}async function H(e){let i=Date.now()-a.WORKSPACE_KEEP.forMs,n=[];for(let a of e){let e=(0,r.join)(d,a),s=await (0,t.stat)(e).catch(()=>null);s?.isDirectory()&&!(s.mtimeMs>=i)&&(await (0,t.rm)(e,{recursive:!0,force:!0}).catch(()=>{}),n.push(a))}return n}let C={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function L(){for(let e of f)await (0,t.mkdir)((0,r.join)(d,e),{recursive:!0});for(let[e,a]of Object.entries(C))await (0,t.writeFile)((0,r.join)(d,e),a,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:a,toolPath:i})=>{let o=(0,r.resolve)(e),u=(i??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,r.resolve)(o,e);return{cwd:o,resolve:d,readFile:(e,r)=>(0,t.readFile)(d(e),r),async writeFile(e,a){let i=d(e);await (0,t.mkdir)((0,r.join)(i,".."),{recursive:!0}),await (0,t.writeFile)(i,a)},readdir:(e,r)=>(0,t.readdir)(d(e),r),fold:(e,t="output")=>c(e,t,o,a),async glob(e,{path:t=".",limit:a=200}={}){let i=d(t),n=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),s=[];for await(let e of l(i)){let t=(0,r.relative)(i,e).split(r.sep).join("/");if((n.test(t)||n.test(e))&&s.push(e),s.length>=a)break}return s},exec:(e,{cwd:t,timeoutMs:r=s.EXEC_TIMEOUT_MS,signal:i,env:l}={})=>new Promise(p=>{let f,m,h=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();u&&(h.PATH=`${h.PATH??""}:${u}`);let w=(0,n.spawn)(e,{shell:!0,cwd:t?d(t):o,env:{...h,...l},detached:!0}),T="",S="";w.stdout?.on("data",e=>T+=e),w.stderr?.on("data",e=>S+=e);let E=e=>{try{w.pid&&process.kill(-w.pid,e)}catch{w.kill(e)}},_=!1,y=async e=>{_||(_=!0,clearTimeout(P),clearTimeout(f),clearTimeout(m),i?.removeEventListener("abort",R),p({...e,stdout:await c(e.stdout,"stdout",o,a),stderr:await c(e.stderr,"stderr",o,a)}))},A=e=>{f||_||(S+=`
8
- [${e}]`,E("SIGTERM"),f=setTimeout(()=>{S+="\n[Killed: it did not exit on SIGTERM]",E("SIGKILL"),m=setTimeout(()=>{w.stdout?.destroy(),w.stderr?.destroy(),y({stdout:T,stderr:S,exitCode:-1})},1e3)},s.EXEC_KILL_GRACE_MS))},P=setTimeout(()=>A(`Timed out after ${r}ms`),r),R=()=>A("Aborted");i?.aborted?R():i?.addEventListener("abort",R,{once:!0}),w.on("close",e=>y({stdout:T,stderr:S,exitCode:e??-1})),w.on("error",e=>y({stdout:T,stderr:S+String(e),exitCode:-1}))})}})({workingDirectory:d,spill:{dir:a.PATHS.output,...a.TOOL_OUTPUT},toolPath:p})}async function D(e,a){let i=e.map(e=>(0,r.resolve)(d,e));if(a){let e=0;for await(let t of l((0,r.join)(d,a)))if(i.push(t),(e+=1)>=500)break}let n=new Map;for(let e of i){let a=await (0,t.stat)(e).catch(()=>null);if(!a?.isFile())continue;let i=(0,r.relative)(d,e);n.set(i&&!i.startsWith("..")?i:e,a.mtimeMs)}return[...n].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}async function x(e,a){await (0,t.rm)((0,r.join)(d,S(e,a)),{recursive:!0,force:!0}).catch(()=>{})}e.s(["WORKSPACE",0,d,"botFolder",0,E,"closeHiddenBrowser",0,I,"closeJobShell",0,M,"ensureBrowser",0,O,"filesOnDisk",0,D,"insideWorkspace",0,T,"jobScratch",0,S,"jobShellEnv",0,A,"listScratchFolders",0,j,"openBotFolder",0,_,"openJobScratch",0,y,"openWorkspace",0,L,"pruneJobFiles",0,v,"readMachineTools",0,g,"removeJobScratch",0,x,"removeUnchangedFolders",0,H,"writeRefusal",0,function(e){if(h(d,e)){let t=(0,r.relative)(d,e),[i]=t.split(r.sep);return i&&m.has(i)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${a.PATHS.artifacts}/, code under ${a.PATHS.projects}/, your own kit under ${a.PATHS.bots}/, and this job's working material under ${a.PATHS.scratch}/.`}return h(u,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${d}; outside it, write only where the user pointed you.`:null}],871096)}];
7
+ ${e.slice(-s.tail).trimStart()}`}let d=i.APP_DIR,p=(0,a.join)(i.DATA_DIR,i.PATHS.workspace),f=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,a.join)(d,"node_modules",".bin")]).filter(Boolean);(0,a.join)(p,i.PATHS.artifacts);let m=[i.PATHS.artifacts,i.PATHS.projects,i.PATHS.scratch,i.PATHS.bots],h=new Set([...m,".agents"]),w=(e,t)=>t===e||t.startsWith(e+a.sep),S=e=>(0,r.realpath)(e).catch(()=>null);async function T(e){let t=await S(p)??p,r=(0,a.resolve)(p,e);if(!w(p,r))return null;let i=r,s=await S(i);for(;null===s&&(0,a.dirname)(i)!==i;)i=(0,a.dirname)(i),s=await S(i);if(null===s)return null;let n=(0,a.relative)(i,r),o=n?(0,a.join)(s,n):s;return w(t,o)?o:null}function _(e,t){let r=t.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job";return`${i.PATHS.scratch}/${r}-${e.slice(0,6)}`}let E=e=>`${i.PATHS.bots}/${e.replace(/[^\p{L}\p{N}_-]+/gu,"-")}`;async function y(e){let t=E(e);return await (0,r.mkdir)((0,a.join)(p,t),{recursive:!0}),t}async function A(e,t){let i=_(e,t);return await (0,r.mkdir)((0,a.join)(p,i),{recursive:!0}),i}let P=e=>e?{PLAYWRIGHT_CLI_SESSION:`task-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:i.BROWSER_VIEWPORT}:{},R=null,O={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function g(e){let t=Object.values(O).flat(),{stdout:r}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),a=new Set(r.trim().split(/\s+/).filter(Boolean)),i=e=>({found:e.filter(e=>a.has(e)),missing:e.filter(e=>!a.has(e))});return{runtimes:i(O.runtimes),managers:i(O.managers),browser:R}}async function I(){if(process.env.THURSDAY_SKIP_BROWSER)return;let e=await W(),t=await e.exec("playwright-cli install-browser chromium").catch(e=>({exitCode:1,stderr:String(e)}));(R=0===t.exitCode)||s.logger.warn(`no browser — bots cannot open a page until \`playwright-cli install-browser chromium\` succeeds: ${t.stderr.trim().split("\n").at(-1)??""}`)}async function v(){await H(),await $()}async function b(e){await k(e,!1)}async function M(e){await k(e,!0)}async function k(e,t){let r=await W(),a=P(e),i=await r.exec("playwright-cli list --json",{env:a,timeoutMs:15e3}).catch(()=>null),s=[];try{let{browsers:e}=JSON.parse(i?.stdout??"");s=e?.filter(e=>e.name===a.PLAYWRIGHT_CLI_SESSION||e.name.startsWith(`${a.PLAYWRIGHT_CLI_SESSION}-`))??[]}catch{}for(let e of s)!e.attached&&(t||!1===e.headed)&&await r.exec("playwright-cli close",{env:{...a,PLAYWRIGHT_CLI_SESSION:e.name},timeoutMs:15e3}).catch(()=>{});await v()}let $=()=>C(i.PATHS.output),H=()=>C(".playwright-cli");async function C(e){let t=(0,a.join)(p,e),s=await (0,r.readdir)(t,{withFileTypes:!0}).catch(()=>[]),n=Date.now()-i.WORKSPACE_KEEP.forMs;for(let e of s){if(!e.isFile())continue;let i=(0,a.join)(t,e.name),s=await (0,r.stat)(i).catch(()=>null);s&&s.mtimeMs<n&&await (0,r.unlink)(i).catch(()=>{})}}async function L(){return(await (0,r.readdir)((0,a.join)(p,i.PATHS.scratch),{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>`${i.PATHS.scratch}/${e.name}`)}async function j(e){let t=Date.now()-i.WORKSPACE_KEEP.forMs,s=[];for(let i of e){let e=(0,a.join)(p,i),n=await (0,r.stat)(e).catch(()=>null);n?.isDirectory()&&!(n.mtimeMs>=t)&&(await (0,r.rm)(e,{recursive:!0,force:!0}).catch(()=>{}),s.push(i))}return s}let D={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function W(){for(let e of m)await (0,r.mkdir)((0,a.join)(p,e),{recursive:!0});for(let[e,t]of Object.entries(D))await (0,r.writeFile)((0,a.join)(p,e),t,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:t,toolPath:i})=>{let s=(0,a.resolve)(e),l=(i??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,a.resolve)(s,e);return{cwd:s,resolve:d,readFile:(e,t)=>(0,r.readFile)(d(e),t),async writeFile(e,t){let i=d(e);await (0,r.mkdir)((0,a.join)(i,".."),{recursive:!0}),await (0,r.writeFile)(i,t)},readdir:(e,t)=>(0,r.readdir)(d(e),t),fold:(e,r="output")=>u(e,r,s,t),async glob(e,{path:t=".",limit:r=200}={}){let i=d(t),s=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),n=[];for await(let e of c(i)){let t=(0,a.relative)(i,e).split(a.sep).join("/");if((s.test(t)||s.test(e))&&n.push(e),n.length>=r)break}return n},exec:(e,{cwd:r,timeoutMs:a=o.EXEC_TIMEOUT_MS,signal:i,env:c}={})=>new Promise(p=>{let f,m,h=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}();l&&(h.PATH=`${h.PATH??""}:${l}`);let w=(0,n.spawn)(e,{shell:!0,cwd:r?d(r):s,env:{...h,...c},detached:!0}),S="",T="";w.stdout?.on("data",e=>S+=e),w.stderr?.on("data",e=>T+=e);let _=e=>{try{w.pid&&process.kill(-w.pid,e)}catch{w.kill(e)}},E=!1,y=async e=>{E||(E=!0,clearTimeout(P),clearTimeout(f),clearTimeout(m),i?.removeEventListener("abort",R),p({...e,stdout:await u(e.stdout,"stdout",s,t),stderr:await u(e.stderr,"stderr",s,t)}))},A=e=>{f||E||(T+=`
8
+ [${e}]`,_("SIGTERM"),f=setTimeout(()=>{T+="\n[Killed: it did not exit on SIGTERM]",_("SIGKILL"),m=setTimeout(()=>{w.stdout?.destroy(),w.stderr?.destroy(),y({stdout:S,stderr:T,exitCode:-1})},1e3)},o.EXEC_KILL_GRACE_MS))},P=setTimeout(()=>A(`Timed out after ${a}ms`),a),R=()=>A("Aborted");i?.aborted?R():i?.addEventListener("abort",R,{once:!0}),w.on("close",e=>y({stdout:S,stderr:T,exitCode:e??-1})),w.on("error",e=>y({stdout:S,stderr:T+String(e),exitCode:-1}))})}})({workingDirectory:p,spill:{dir:i.PATHS.output,...i.TOOL_OUTPUT},toolPath:f})}async function x(e,t){let i=e.map(e=>(0,a.resolve)(p,e));if(t){let e=0;for await(let r of c((0,a.join)(p,t)))if(i.push(r),(e+=1)>=500)break}let s=new Map;for(let e of i){let t=await (0,r.stat)(e).catch(()=>null);if(!t?.isFile())continue;let i=(0,a.relative)(p,e);s.set(i&&!i.startsWith("..")?i:e,t.mtimeMs)}return[...s].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}async function N(e,t){await (0,r.rm)((0,a.join)(p,_(e,t)),{recursive:!0,force:!0}).catch(()=>{})}e.s(["WORKSPACE",0,p,"botBrowserSession",0,(e,r)=>`${e}-bot-${(0,t.createHash)("sha256").update(r.toLowerCase()).digest("hex").slice(0,20)}`,"botFolder",0,E,"closeHiddenBrowser",0,b,"closeJobShell",0,M,"ensureBrowser",0,I,"filesOnDisk",0,x,"insideWorkspace",0,T,"jobScratch",0,_,"jobShellEnv",0,P,"listScratchFolders",0,L,"openBotFolder",0,y,"openJobScratch",0,A,"openWorkspace",0,W,"pruneJobFiles",0,v,"readMachineTools",0,g,"removeJobScratch",0,N,"removeUnchangedFolders",0,j,"writeRefusal",0,function(e){if(w(p,e)){let t=(0,a.relative)(p,e),[r]=t.split(a.sep);return r&&h.has(r)?null:`Not written: ${t||"the workspace root"} is outside the workspace's folders. Finished work goes under ${i.PATHS.artifacts}/, code under ${i.PATHS.projects}/, your own kit under ${i.PATHS.bots}/, and this job's working material under ${i.PATHS.scratch}/.`}return w(d,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${p}; outside it, write only where the user pointed you.`:null}],871096)}];
9
9
 
10
10
  //# sourceMappingURL=_1230wbx._.js.map
@@ -1,3 +1,3 @@
1
1
  module.exports=[21124,e=>{"use strict";var t=e.i(687388),a=e.i(393189),r=e.i(91264),n=e.i(53748);let i=(0,r.serverRoute)(async e=>{let r=new URL(e.url).searchParams.get("bot")?.trim();return r||(0,n.publicError)("Which bot?"),(0,a.listBotMemory)(r,t.WORKSPACE_VIEW.rows)});e.s(["GET",0,i])},239818,e=>{"use strict";var t=e.i(747909),a=e.i(174017),r=e.i(996250),n=e.i(759756),i=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),u=e.i(487718),d=e.i(995169),c=e.i(47587),p=e.i(666012),h=e.i(570101),m=e.i(626937),R=e.i(10372),f=e.i(193695);e.i(52474);var v=e.i(600220);let g=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/bot/memory/files/route",pathname:"/api/bot/memory/files",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/bot/memory/files/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(21124),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:E,serverHooks:y}=g;async function C(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),g.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/bot/memory/files/route";w=w.replace(/\/index$/,"")||"/";let E=await g.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:y,deploymentId:C,params:x,nextConfig:_,parsedUrl:b,isDraftMode:A,prerenderManifest:T,routerServerContext:P,isOnDemandRevalidate:S,revalidateOnlyGenerated:O,resolvedPathname:N,clientReferenceManifest:M,serverActionsManifest:q}=E,H=(0,s.normalizeAppPath)(w),I=!!(T.dynamicRoutes[H]||T.routes[N]),k=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,b,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!T.routes[N],t=T.dynamicRoutes[H];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await k();throw new f.NoFallbackError}}let U=null;!I||g.isDev||A||(U="/index"===(U=N)?"/":U);let D=!0===g.isDev||!I,j=I&&!D;q&&M&&(0,o.setManifestsSingleton)({page:w,clientReferenceManifest:M,serverActionsManifest:q});let B=e.method||"GET",F=(0,i.getTracer)(),$=F.getActiveScopeSpan(),K=!!(null==P?void 0:P.isWrappedByNextServer),L=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,_,T,L);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let G={params:x,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts,useCacheTimeout:_.experimental.useCacheTimeout},cacheComponents:!!_.cacheComponents,validationLevel:_.experimental.instantInsights.validationLevel,supportsDynamicResponse:D,incrementalCache:W,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:_.cacheLife,staticPageGenerationTimeout:_.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>g.onRequestError(e,t,r,n,P)},sharedContext:{buildId:y,deploymentId:C}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),z=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),Y=async({previousCacheEntry:a})=>{try{if(!L&&S&&O&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await g.handle(z,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let i=G.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let o=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(V,X,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,r=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==a&&a>0?_.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:S})},!1,P),t}},Z=async(n,o)=>{try{var s,l;let n=await g.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:O,responseGenerator:Y,waitUntil:r.waitUntil,isMinimalMode:L});if(!I)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==v.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});L||t.setHeader("x-nextjs-cache",S?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);L&&I||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(V,X,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:H,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:S})},!1,P),I)throw t;await (0,p.sendResponse)(V,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let a=F.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||H,s=`${B} ${r}`;n.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",r),o.updateName(s))})()}};if(K&&$)await Z($,void 0);else{let t=F.getActiveScopeSpan();await F.withPropagatedContext(e.headers,()=>F.trace(d.BaseServerSpan.handleRequest,{spanName:`${B} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},e=>Z(e,t)),void 0,!K)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:E})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,E])},393189,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(687388),n=e.i(786025);let i=e=>`${(0,n.botFolder)(e)}/memory`;async function o(e,l=r.BOT_MEMORY_LISTED){let u=i(e),d=(0,a.join)(n.WORKSPACE,u),c=await (0,t.readdir)(d).catch(()=>[]),p=(await Promise.all(c.filter(e=>!e.startsWith(".")).map(async e=>{let r=await (0,t.stat)((0,a.join)(d,e)).catch(()=>null);return r?.isFile()?{name:e,changed:r.mtimeMs,bytes:r.size}:null}))).filter(e=>null!==e).sort((e,t)=>t.changed-e.changed),h=await Promise.all(p.slice(0,l).map(async({name:e,changed:t,bytes:r})=>({file:e,path:`${u}/${e}`,line:await s((0,a.join)(d,e)),at:new Date(t),bytes:r})));return{folder:u,entries:h,total:p.length}}async function s(e){let a=await (0,t.open)(e,"r").catch(()=>null);if(!a)return"";try{let e=Buffer.alloc(1024),{bytesRead:t}=await a.read(e,0,1024,0),r=e.toString("utf8",0,t).split("\n").map(e=>e.trim()).filter(Boolean);if("---"===r[0]){let e=r.find(e=>e.startsWith("description:"));if(e)return e.slice(12).trim().replace(/^["']|["']$/g,"");let t=r.indexOf("---",1);return t>0?(r[t+1]??"").replace(/^#+\s*/,""):""}return(r[0]??"").replace(/^#+\s*/,"")}finally{await a.close()}}e.s(["botMemoryFolder",0,i,"listBotMemory",0,o])},329280,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(t=>e.l(t))).then(()=>t(781937)))}];
2
2
 
3
- //# sourceMappingURL=_0obojvv._.js.map
3
+ //# sourceMappingURL=_18d7-5p._.js.map