thursday-agent 0.26.0 → 0.27.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 (391) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +5 -5
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +5 -5
  5. package/.next/server/app/_global-error/page/build-manifest.json +2 -2
  6. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page/build-manifest.json +2 -2
  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 +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/.next/server/app/api/artifact/route.js +10 -10
  21. package/.next/server/app/api/artifact/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bot/memory/files/route.js +1 -1
  23. package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
  24. package/.next/server/app/api/bot/memory/route.js +8 -8
  25. package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
  26. package/.next/server/app/api/bot/route.js +8 -8
  27. package/.next/server/app/api/bot/route.js.nft.json +1 -1
  28. package/.next/server/app/api/bot/thread/file/route.js +15 -15
  29. package/.next/server/app/api/bot/thread/file/route.js.nft.json +1 -1
  30. package/.next/server/app/api/bot/thread/route.js +5 -5
  31. package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
  32. package/.next/server/app/api/bot/tool-result/[id]/route.js +6 -6
  33. package/.next/server/app/api/bot/tool-result/[id]/route.js.nft.json +1 -1
  34. package/.next/server/app/api/config/route.js +3 -3
  35. package/.next/server/app/api/config/route.js.nft.json +1 -1
  36. package/.next/server/app/api/events/route.js +1 -1
  37. package/.next/server/app/api/events/route.js.nft.json +1 -1
  38. package/.next/server/app/api/favicon/[host]/route.js +4 -4
  39. package/.next/server/app/api/favicon/[host]/route.js.nft.json +1 -1
  40. package/.next/server/app/api/file/[...path]/route.js +4 -4
  41. package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
  42. package/.next/server/app/api/llm-model/automatic/route.js +5 -5
  43. package/.next/server/app/api/llm-model/automatic/route.js.nft.json +1 -1
  44. package/.next/server/app/api/llm-model/catalog/[provider]/route.js +5 -5
  45. package/.next/server/app/api/llm-model/catalog/[provider]/route.js.nft.json +1 -1
  46. package/.next/server/app/api/llm-model/credits/[provider]/route.js +5 -5
  47. package/.next/server/app/api/llm-model/credits/[provider]/route.js.nft.json +1 -1
  48. package/.next/server/app/api/llm-model/route.js +6 -6
  49. package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
  50. package/.next/server/app/api/llm-model/subscription/route.js +6 -6
  51. package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
  52. package/.next/server/app/api/mcp/[name]/route.js +5 -5
  53. package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
  54. package/.next/server/app/api/mcp/oauth/callback/route.js +6 -6
  55. package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
  56. package/.next/server/app/api/mcp/route.js +5 -5
  57. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  58. package/.next/server/app/api/mcp/tools/route.js +5 -5
  59. package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
  60. package/.next/server/app/api/memory/edit/route.js +15 -15
  61. package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
  62. package/.next/server/app/api/memory/route.js +4 -4
  63. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  64. package/.next/server/app/api/reach/route.js +18 -18
  65. package/.next/server/app/api/reach/route.js.nft.json +1 -1
  66. package/.next/server/app/api/routine/route.js +8 -8
  67. package/.next/server/app/api/routine/route.js.nft.json +1 -1
  68. package/.next/server/app/api/running/route.js +2 -2
  69. package/.next/server/app/api/running/route.js.nft.json +1 -1
  70. package/.next/server/app/api/signins/route.js +3 -3
  71. package/.next/server/app/api/signins/route.js.nft.json +1 -1
  72. package/.next/server/app/api/skills/[source]/[name]/route.js +6 -6
  73. package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
  74. package/.next/server/app/api/skills/route.js +6 -6
  75. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  76. package/.next/server/app/api/thursday/call/end/route.js +5 -5
  77. package/.next/server/app/api/thursday/call/end/route.js.nft.json +1 -1
  78. package/.next/server/app/api/thursday/call/plan/route.js +14 -14
  79. package/.next/server/app/api/thursday/call/plan/route.js.nft.json +1 -1
  80. package/.next/server/app/api/thursday/call/route.js +6 -6
  81. package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
  82. package/.next/server/app/api/thursday/settings/route.js +5 -5
  83. package/.next/server/app/api/thursday/settings/route.js.nft.json +1 -1
  84. package/.next/server/app/api/thursday/text/route.js +14 -14
  85. package/.next/server/app/api/thursday/text/route.js.nft.json +1 -1
  86. package/.next/server/app/api/thursday/tool-call/route.js +15 -15
  87. package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
  88. package/.next/server/app/api/update/route.js +7 -7
  89. package/.next/server/app/api/update/route.js.nft.json +1 -1
  90. package/.next/server/app/api/workspace/files/route.js +6 -6
  91. package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
  92. package/.next/server/app/api/workspace/route.js +6 -6
  93. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  94. package/.next/server/app/artifact/[...path]/page/build-manifest.json +2 -2
  95. package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +11 -11
  96. package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
  97. package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/favicon.ico/route.js +2 -2
  99. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  100. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  101. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  102. package/.next/server/app/page/build-manifest.json +2 -2
  103. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  104. package/.next/server/app/page/server-reference-manifest.json +184 -184
  105. package/.next/server/app/page.js +10 -10
  106. package/.next/server/app/page.js.nft.json +1 -1
  107. package/.next/server/app/page_client-reference-manifest.js +1 -1
  108. package/.next/server/chunks/[root-of-the-server]__01jpmcj._.js +2 -2
  109. package/.next/server/chunks/[root-of-the-server]__03bjojd._.js +3 -3
  110. package/.next/server/chunks/{[root-of-the-server]__0wosonh._.js → [root-of-the-server]__05u-9a3._.js} +1 -1
  111. package/.next/server/chunks/{[root-of-the-server]__1dyse-1._.js → [root-of-the-server]__0_qe8iq._.js} +1 -1
  112. package/.next/server/chunks/[root-of-the-server]__0d-dfqm._.js +1 -1
  113. package/.next/server/chunks/[root-of-the-server]__0jqidnu._.js +1 -1
  114. package/.next/server/chunks/[root-of-the-server]__0mmynvy._.js +2 -2
  115. package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +1 -1
  116. package/.next/server/chunks/[root-of-the-server]__0qhf60h._.js +3 -0
  117. package/.next/server/chunks/[root-of-the-server]__0sea36s._.js +4 -4
  118. package/.next/server/chunks/[root-of-the-server]__0zezbds._.js +2 -2
  119. package/.next/server/chunks/[root-of-the-server]__12hkdpz._.js +1 -1
  120. package/.next/server/chunks/[root-of-the-server]__13hng6h._.js +1 -1
  121. package/.next/server/chunks/[root-of-the-server]__14inehv._.js +3 -0
  122. package/.next/server/chunks/[root-of-the-server]__17kdjf6._.js +1 -1
  123. package/.next/server/chunks/[root-of-the-server]__17yv6lg._.js +2 -2
  124. package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +2 -2
  125. package/.next/server/chunks/{[root-of-the-server]__0b3_rzi._.js → [root-of-the-server]__1hjb8wf._.js} +1 -1
  126. package/.next/server/chunks/[root-of-the-server]__1jcu_e9._.js +2 -2
  127. package/.next/server/chunks/[root-of-the-server]__1jmr2ed._.js +3 -3
  128. package/.next/server/chunks/[root-of-the-server]__1ndi14y._.js +1 -1
  129. package/.next/server/chunks/[root-of-the-server]__1o7z93z._.js +2 -2
  130. package/.next/server/chunks/[root-of-the-server]__1onvx8x._.js +2 -2
  131. package/.next/server/chunks/_0-mqt2w._.js +1 -1
  132. package/.next/server/chunks/_04s1gb9._.js +30 -27
  133. package/.next/server/chunks/_06u9yo-._.js +1 -1
  134. package/.next/server/chunks/_08354bn._.js +33 -30
  135. package/.next/server/chunks/_083t_nr._.js +1 -1
  136. package/.next/server/chunks/_0c-s0ei._.js +1 -1
  137. package/.next/server/chunks/_0gifi_2._.js +2 -2
  138. package/.next/server/chunks/_0m3sdq8._.js +1 -1
  139. package/.next/server/chunks/_0pljp-1._.js +1 -1
  140. package/.next/server/chunks/_0wjia9n._.js +1 -1
  141. package/.next/server/chunks/_0wyh244._.js +33 -30
  142. package/.next/server/chunks/_0x2mdif._.js +1 -1
  143. package/.next/server/chunks/_1-sk_q4._.js +1 -1
  144. package/.next/server/chunks/_12a_gfz._.js +1 -1
  145. package/.next/server/chunks/_14-kmob._.js +1 -1
  146. package/.next/server/chunks/_16zct7w._.js +30 -27
  147. package/.next/server/chunks/_1823_7a._.js +4 -4
  148. package/.next/server/chunks/_1f_x75d._.js +1 -1
  149. package/.next/server/chunks/_1o2r4ja._.js +1 -1
  150. package/.next/server/chunks/_1q42187._.js +3 -3
  151. package/.next/server/chunks/_1ufbxe1._.js +1 -1
  152. package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
  153. package/.next/server/chunks/features_14kex_m._.js +11 -11
  154. package/.next/server/chunks/features_bot_08z387_._.js +4 -4
  155. package/.next/server/chunks/features_memory_0__61kl._.js +1 -1
  156. package/.next/server/chunks/features_memory_1uqvksn._.js +1 -1
  157. package/.next/server/chunks/features_workspace_workspace_ts_13h82gv._.js +1 -1
  158. package/.next/server/chunks/features_workspace_workspace_ts_1iyjroj._.js +3 -3
  159. package/.next/server/chunks/ssr/{[root-of-the-server]__0x297x3._.js → [root-of-the-server]__03_9u5q._.js} +2 -2
  160. package/.next/server/chunks/ssr/{[root-of-the-server]__0653diy._.js → [root-of-the-server]__04ky8w1._.js} +2 -2
  161. package/.next/server/chunks/ssr/{[root-of-the-server]__1zlzs9j._.js → [root-of-the-server]__0crm8gr._.js} +2 -2
  162. package/.next/server/chunks/ssr/{[root-of-the-server]__02936mh._.js → [root-of-the-server]__0d3n8i_._.js} +2 -2
  163. package/.next/server/chunks/ssr/{[root-of-the-server]__0s8q44q._.js → [root-of-the-server]__0d4o9hs._.js} +2 -2
  164. package/.next/server/chunks/ssr/[root-of-the-server]__0id2dqb._.js +1 -1
  165. package/.next/server/chunks/ssr/{[root-of-the-server]__1s0etwd._.js → [root-of-the-server]__0q2c15o._.js} +2 -2
  166. package/.next/server/chunks/ssr/[root-of-the-server]__0t_oz3-._.js +6 -0
  167. package/.next/server/chunks/ssr/{[root-of-the-server]__16x99f1._.js → [root-of-the-server]__12r70jm._.js} +1 -1
  168. package/.next/server/chunks/ssr/[root-of-the-server]__1867koj._.js +1 -1
  169. package/.next/server/chunks/ssr/{[root-of-the-server]__0glkz9k._.js → [root-of-the-server]__1fvh0zn._.js} +2 -2
  170. package/.next/server/chunks/ssr/[root-of-the-server]__1t38-p_._.js +1 -1
  171. package/.next/server/chunks/ssr/{[root-of-the-server]__1c1xyyb._.js → [root-of-the-server]__1uy0zqr._.js} +2 -2
  172. package/.next/server/chunks/ssr/_02uubus._.js +3 -0
  173. package/.next/server/chunks/ssr/_0692i-a._.js +3 -0
  174. package/.next/server/chunks/ssr/_079xt7h._.js +32 -29
  175. package/.next/server/chunks/ssr/_07g7ojr._.js +3 -0
  176. package/.next/server/chunks/ssr/_0ewhz_x._.js +3 -0
  177. package/.next/server/chunks/ssr/_0f3t9pm._.js +2 -2
  178. package/.next/server/chunks/ssr/_0gx6qzr._.js +57 -0
  179. package/.next/server/chunks/ssr/_0pjwmak._.js +6 -0
  180. package/.next/server/chunks/ssr/_0pnzfq1._.js +1 -1
  181. package/.next/server/chunks/ssr/_0px9eat._.js +3 -0
  182. package/.next/server/chunks/ssr/_0r2_l__._.js +3 -0
  183. package/.next/server/chunks/ssr/{_20_wc-g._.js → _0rcuovx._.js} +2 -2
  184. package/.next/server/chunks/ssr/_0uwhhcs._.js +3 -0
  185. package/.next/server/chunks/ssr/{_1wct0tm._.js → _128r03g._.js} +1 -1
  186. package/.next/server/chunks/ssr/_12c2n7f._.js +3 -0
  187. package/.next/server/chunks/ssr/{_12_ail7._.js → _14f64h2._.js} +1 -1
  188. package/.next/server/chunks/ssr/_17fa2ns._.js +162 -0
  189. package/.next/server/chunks/ssr/_1_px1o-._.js +3 -0
  190. package/.next/server/chunks/ssr/_1a_w_du._.js +1 -1
  191. package/.next/server/chunks/ssr/_1e_9qjr._.js +1 -1
  192. package/.next/server/chunks/ssr/_1f59vze._.js +57 -0
  193. package/.next/server/chunks/ssr/_1j5ohq5._.js +3 -0
  194. package/.next/server/chunks/ssr/{_0ingto_._.js → _1kj3d2q._.js} +2 -2
  195. package/.next/server/chunks/ssr/_1neoj22._.js +1 -1
  196. package/.next/server/chunks/ssr/_1ocl7u0._.js +3 -0
  197. package/.next/server/chunks/ssr/_1q9r6u6._.js +3 -0
  198. package/.next/server/chunks/ssr/{_0fvctar._.js → _1qqusa-._.js} +2 -2
  199. package/.next/server/chunks/ssr/_1soynbw._.js +2 -2
  200. package/.next/server/chunks/ssr/_1uok0wt._.js +3 -0
  201. package/.next/server/chunks/ssr/_1v1pcoh._.js +1 -1
  202. package/.next/server/chunks/ssr/_1xw9imq._.js +3 -0
  203. package/.next/server/chunks/ssr/{components_ui_markdown-body_tsx_0h7bkrz._.js → components_ui_markdown-body_tsx_08i96c6._.js} +2 -2
  204. package/.next/server/chunks/ssr/features_0rrgq_t._.js +1 -1
  205. package/.next/server/chunks/ssr/features_ai_components_model-picker_tsx_0ucb1y9._.js +1 -1
  206. package/.next/server/chunks/ssr/features_bot_0tb4ui-._.js +2 -2
  207. package/.next/server/chunks/ssr/features_bot_components_01ye2wp._.js +1 -1
  208. package/.next/server/chunks/ssr/features_bot_components_bot-setting_tsx_01ajft6._.js +2 -2
  209. package/.next/server/chunks/ssr/features_bot_components_thread-setting_tsx_0yae7zy._.js +1 -1
  210. package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +2 -2
  211. package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
  212. package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +2 -2
  213. package/.next/server/chunks/ssr/features_routine_components_routine-setting_tsx_055fknz._.js +1 -1
  214. package/.next/server/chunks/ssr/features_skills_components_skills-setting_tsx_1wtuuip._.js +1 -1
  215. package/.next/server/chunks/ssr/features_thursday_components_thursday-setting_tsx_1_6ydrc._.js +1 -1
  216. package/.next/server/chunks/ssr/{node_modules_193w7l8._.js → node_modules_02djdfa._.js} +2 -2
  217. package/.next/server/chunks/ssr/{node_modules_1bwlhwa._.js → node_modules_03ybg-h._.js} +1 -1
  218. package/.next/server/chunks/ssr/{node_modules_01xoz64._.js → node_modules_066eqdg._.js} +1 -1
  219. package/.next/server/chunks/ssr/{node_modules_20ifwl6._.js → node_modules_09605b3._.js} +1 -1
  220. package/.next/server/chunks/ssr/{node_modules_1yilsx4._.js → node_modules_0_c17cv._.js} +1 -1
  221. package/.next/server/chunks/ssr/{node_modules_080f5gu._.js → node_modules_0a1-9-h._.js} +1 -1
  222. package/.next/server/chunks/ssr/{node_modules_17c047f._.js → node_modules_0bfpl_c._.js} +1 -1
  223. package/.next/server/chunks/ssr/{node_modules_1pav8g4._.js → node_modules_0brchjo._.js} +1 -1
  224. package/.next/server/chunks/ssr/{node_modules_0gwiuga._.js → node_modules_0c0pgdi._.js} +1 -1
  225. package/.next/server/chunks/ssr/{node_modules_02-zrtu._.js → node_modules_0ep265x._.js} +1 -1
  226. package/.next/server/chunks/ssr/{node_modules_0kqej10._.js → node_modules_0gzvt6a._.js} +2 -2
  227. package/.next/server/chunks/ssr/{node_modules_0i18max._.js → node_modules_0h4gjw5._.js} +1 -1
  228. package/.next/server/chunks/ssr/{node_modules_1m2_gxv._.js → node_modules_0iso-he._.js} +1 -1
  229. package/.next/server/chunks/ssr/{node_modules_0cda8i6._.js → node_modules_0jvqmb4._.js} +1 -1
  230. package/.next/server/chunks/ssr/node_modules_0kzgugm._.js +3 -0
  231. package/.next/server/chunks/ssr/{node_modules_0uvoegq._.js → node_modules_0l8gpkg._.js} +1 -1
  232. package/.next/server/chunks/ssr/{node_modules_12ajdg8._.js → node_modules_0mlrvds._.js} +2 -2
  233. package/.next/server/chunks/ssr/node_modules_0nvqvnw._.js +7 -7
  234. package/.next/server/chunks/ssr/{node_modules_1s3j8gb._.js → node_modules_0ogtyfm._.js} +2 -2
  235. package/.next/server/chunks/ssr/{node_modules_1_xiwxs._.js → node_modules_0os_-0h._.js} +1 -1
  236. package/.next/server/chunks/ssr/{node_modules_1abjhxx._.js → node_modules_0p05zru._.js} +1 -1
  237. package/.next/server/chunks/ssr/{node_modules_1o-m6_3._.js → node_modules_0pf8124._.js} +2 -2
  238. package/.next/server/chunks/ssr/{node_modules_0eqvt2l._.js → node_modules_0pp3v4f._.js} +2 -2
  239. package/.next/server/chunks/ssr/{node_modules_0rzz90e._.js → node_modules_0r1vv13._.js} +1 -1
  240. package/.next/server/chunks/ssr/{node_modules_1kum1yu._.js → node_modules_0r9yw6x._.js} +1 -1
  241. package/.next/server/chunks/ssr/{node_modules_1yw5fq4._.js → node_modules_0rk1a3e._.js} +1 -1
  242. package/.next/server/chunks/ssr/{node_modules_1es3wjv._.js → node_modules_0sq1pa3._.js} +2 -2
  243. package/.next/server/chunks/ssr/{node_modules_1-cv1_p._.js → node_modules_0w-pjyz._.js} +2 -2
  244. package/.next/server/chunks/ssr/{node_modules_0g_yuwn._.js → node_modules_0yoh66_._.js} +1 -1
  245. package/.next/server/chunks/ssr/{node_modules_1s9agqr._.js → node_modules_10kn3ni._.js} +2 -2
  246. package/.next/server/chunks/ssr/{node_modules_1yajzrd._.js → node_modules_124ipg-._.js} +1 -1
  247. package/.next/server/chunks/ssr/{node_modules_0svoyrb._.js → node_modules_12_p7d0._.js} +1 -1
  248. package/.next/server/chunks/ssr/{node_modules_203yqqb._.js → node_modules_12w12wr._.js} +1 -1
  249. package/.next/server/chunks/ssr/{node_modules_17ks351._.js → node_modules_16kmp_v._.js} +2 -2
  250. package/.next/server/chunks/ssr/{node_modules_05qs8r_._.js → node_modules_16m_yhd._.js} +1 -1
  251. package/.next/server/chunks/ssr/{node_modules_07dc1cr._.js → node_modules_171uvar._.js} +1 -1
  252. package/.next/server/chunks/ssr/{node_modules_0qsi9t2._.js → node_modules_19pn2ti._.js} +1 -1
  253. package/.next/server/chunks/ssr/{node_modules_0k9_jdk._.js → node_modules_1_ly5yy._.js} +1 -1
  254. package/.next/server/chunks/ssr/{node_modules_0o_gq58._.js → node_modules_1_wsn9q._.js} +1 -1
  255. package/.next/server/chunks/ssr/{node_modules_1u7wlaq._.js → node_modules_1djak6n._.js} +2 -2
  256. package/.next/server/chunks/ssr/{node_modules_08cq8i-._.js → node_modules_1e-oxmh._.js} +1 -1
  257. package/.next/server/chunks/ssr/{node_modules_15x7int._.js → node_modules_1ed4zep._.js} +2 -2
  258. package/.next/server/chunks/ssr/{node_modules_1pkpq6d._.js → node_modules_1f2qlxm._.js} +2 -2
  259. package/.next/server/chunks/ssr/{node_modules_1aw7c9f._.js → node_modules_1fn72fs._.js} +2 -2
  260. package/.next/server/chunks/ssr/node_modules_1h9p77x._.js +7 -7
  261. package/.next/server/chunks/ssr/{node_modules_1ucf2fi._.js → node_modules_1hj0rvo._.js} +1 -1
  262. package/.next/server/chunks/ssr/{node_modules_12pvysk._.js → node_modules_1jvkoqj._.js} +1 -1
  263. package/.next/server/chunks/ssr/{node_modules_0tq4-57._.js → node_modules_1jzofr8._.js} +1 -1
  264. package/.next/server/chunks/ssr/{node_modules_08hfp3a._.js → node_modules_1maqy-g._.js} +1 -1
  265. package/.next/server/chunks/ssr/{node_modules_071fb26._.js → node_modules_1oox5h1._.js} +1 -1
  266. package/.next/server/chunks/ssr/{node_modules_0_jxnnn._.js → node_modules_1p56fwh._.js} +1 -1
  267. package/.next/server/chunks/ssr/{node_modules_01yukzc._.js → node_modules_1prbr1-._.js} +1 -1
  268. package/.next/server/chunks/ssr/{node_modules_1hrbceb._.js → node_modules_1qfou69._.js} +1 -1
  269. package/.next/server/chunks/ssr/{node_modules_11f1w-3._.js → node_modules_1qnosqe._.js} +2 -2
  270. package/.next/server/chunks/ssr/{node_modules_1kd_hpx._.js → node_modules_1rdpn6v._.js} +1 -1
  271. package/.next/server/chunks/ssr/{node_modules_079iwnx._.js → node_modules_1v6m9sp._.js} +1 -1
  272. package/.next/server/chunks/ssr/{node_modules_1iapzqf._.js → node_modules_1z8ywx9._.js} +1 -1
  273. package/.next/server/chunks/ssr/{node_modules_1dim95c._.js → node_modules_1zzudo-._.js} +1 -1
  274. package/.next/server/chunks/ssr/{node_modules_1_71wv3._.js → node_modules_2157u1j._.js} +2 -2
  275. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_1c5gb92._.js → node_modules_katex_dist_katex_mjs_12lynt6._.js} +1 -1
  276. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_1ocxq2z._.js → node_modules_katex_dist_katex_mjs_1vjoadq._.js} +1 -1
  277. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_1v93o68._.js +1 -1
  278. package/.next/server/middleware-build-manifest.js +5 -5
  279. package/.next/server/pages/404.html +1 -1
  280. package/.next/server/pages/500.html +1 -1
  281. package/.next/server/server-reference-manifest.js +1 -1
  282. package/.next/server/server-reference-manifest.json +185 -185
  283. package/.next/static/chunks/051z85h3ofmif.js +1 -0
  284. package/.next/static/chunks/05722zc-sohb_.js +4 -0
  285. package/.next/static/chunks/07jo959manleh.js +1 -0
  286. package/.next/static/chunks/0_5a18_y41-_4.js +1 -0
  287. package/.next/static/chunks/0be7dgti95u_2.js +1 -0
  288. package/.next/static/chunks/0c28x0q2aqsbj.js +1 -0
  289. package/.next/static/chunks/0o_rabv5are-o.js +2 -0
  290. package/.next/static/chunks/{0776-hu4_eek7.js → 0wwq57j09skhy.js} +2 -2
  291. package/.next/static/chunks/0zm3urd75-zw5.js +1 -0
  292. package/.next/static/chunks/16hfi69t-6a4t.js +2 -0
  293. package/.next/static/chunks/1g58g8-daiwu5.js +3 -0
  294. package/.next/static/chunks/1i1u85j-_yb1n.js +15 -0
  295. package/.next/static/chunks/1kd2sxkkrae8e.js +1 -0
  296. package/.next/static/chunks/{3xloayc4c096r.js → 1n3a07w81jbc-.js} +1 -1
  297. package/.next/static/chunks/1nncyxatu7une.js +1 -0
  298. package/.next/static/chunks/1s5t41jiomssd.css +1 -0
  299. package/.next/static/chunks/1yl4mlpsw8e7h.js +1 -0
  300. package/.next/static/chunks/{33qtnlc00c9gq.js → 2gl-fo_rmmmq0.js} +1 -1
  301. package/.next/static/chunks/2h_sak2oi70qs.js +1 -0
  302. package/.next/static/chunks/2isg5redeg2bc.js +1 -0
  303. package/.next/static/chunks/{2fxn-xltgy2un.js → 2of2-kggzp-fk.js} +1 -1
  304. package/.next/static/chunks/2vmran3sacktz.js +1 -0
  305. package/.next/static/chunks/2w02v9g8o9-rz.js +1 -0
  306. package/.next/static/chunks/2wi2pcbjrqm86.js +1 -0
  307. package/.next/static/chunks/2xk8otp3gnzml.js +1 -0
  308. package/.next/static/chunks/2ym1hrikoit8p.js +1 -0
  309. package/.next/static/chunks/34d1f980dv5c6.js +18 -0
  310. package/.next/static/chunks/34zhr71217o1-.js +2 -0
  311. package/.next/static/chunks/{0o1r15rfncytn.js → 37r4l2878vybp.js} +1 -1
  312. package/.next/static/chunks/{2cz5734j90h5b.js → 3a-2z23puvz2z.js} +1 -1
  313. package/.next/static/chunks/3d55-y263hup9.js +1 -0
  314. package/.next/static/chunks/3dzrveotr82eu.js +39 -0
  315. package/.next/static/chunks/3fensfht8pxhl.js +55 -0
  316. package/.next/static/chunks/3k7fum0yljmyr.js +1 -0
  317. package/.next/static/chunks/3sawwm4vucnzn.js +1 -0
  318. package/.next/static/chunks/{0z0-g4k1hnpw2.js → 3u208m--8u1iq.js} +1 -1
  319. package/.next/static/chunks/{turbopack-1kym6rf88i5i0.js → turbopack-0ekrsq98buh0j.js} +1 -1
  320. package/README.md +18 -18
  321. package/bin/background.mjs +60 -32
  322. package/bin/print.mjs +82 -0
  323. package/bin/thursday.mjs +44 -13
  324. package/guide/bots.md +19 -3
  325. package/guide/calls.md +5 -2
  326. package/guide/memory.md +2 -1
  327. package/guide/setup.md +8 -6
  328. package/guide/trouble.md +4 -0
  329. package/package.json +11 -5
  330. package/public/voices/intro/awake-f4e02fad.ogg +0 -0
  331. package/seed-skills/concierge/travel/scripts/itinerary.mjs +2 -1
  332. package/server.js +1 -1
  333. package/skills/artifact/references/document.md +5 -2
  334. package/skills/artifact/runtime/document/markdown.mjs +14 -1
  335. package/skills/artifact/runtime/shell/head.html +1 -1
  336. package/skills/artifact/scripts/document.mjs +9 -3
  337. package/skills/browser/SKILL.md +17 -13
  338. package/.next/server/chunks/[root-of-the-server]__0ald4vb._.js +0 -3
  339. package/.next/server/chunks/[root-of-the-server]__0srfj96._.js +0 -3
  340. package/.next/server/chunks/ssr/[root-of-the-server]__1kos36s._.js +0 -6
  341. package/.next/server/chunks/ssr/_024j8bs._.js +0 -3
  342. package/.next/server/chunks/ssr/_04jb10a._.js +0 -3
  343. package/.next/server/chunks/ssr/_059oyhd._.js +0 -3
  344. package/.next/server/chunks/ssr/_0d0uyl3._.js +0 -3
  345. package/.next/server/chunks/ssr/_0fk7dbp._.js +0 -88
  346. package/.next/server/chunks/ssr/_0gfa_rb._.js +0 -3
  347. package/.next/server/chunks/ssr/_0i7zd74._.js +0 -3
  348. package/.next/server/chunks/ssr/_0sp2z94._.js +0 -3
  349. package/.next/server/chunks/ssr/_1avnw03._.js +0 -57
  350. package/.next/server/chunks/ssr/_1bfrntd._.js +0 -6
  351. package/.next/server/chunks/ssr/_1cpvfkg._.js +0 -3
  352. package/.next/server/chunks/ssr/_1cqjpyq._.js +0 -3
  353. package/.next/server/chunks/ssr/_1khngyc._.js +0 -72
  354. package/.next/server/chunks/ssr/_1kyjimg._.js +0 -162
  355. package/.next/server/chunks/ssr/_1sw4r4m._.js +0 -6
  356. package/.next/server/chunks/ssr/_20004tu._.js +0 -57
  357. package/.next/server/chunks/ssr/node_modules_01alue6._.js +0 -3
  358. package/.next/server/chunks/ssr/node_modules_02n9-pb._.js +0 -3
  359. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_0zxr5sz._.js +0 -3
  360. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_trash_mjs_0px2gzr._.js +0 -3
  361. package/.next/static/chunks/02d9vhnz5mwvu.js +0 -1
  362. package/.next/static/chunks/06ff4fq0z4das.js +0 -1
  363. package/.next/static/chunks/09q9n7jrkm4c9.js +0 -39
  364. package/.next/static/chunks/0b3wt5kqs-mk2.js +0 -2
  365. package/.next/static/chunks/0blrj_tg1yur0.js +0 -1
  366. package/.next/static/chunks/0dn1ptom1ahgg.js +0 -18
  367. package/.next/static/chunks/0dq7uppta9s--.js +0 -1
  368. package/.next/static/chunks/0hoz2b--nhn4y.js +0 -1
  369. package/.next/static/chunks/0kfjtkez2xze2.js +0 -1
  370. package/.next/static/chunks/0mv2zywfzt83k.js +0 -4
  371. package/.next/static/chunks/0txtrhykehsd_.js +0 -55
  372. package/.next/static/chunks/17vs1vz7_4l4p.css +0 -1
  373. package/.next/static/chunks/1dnvf_117h4k3.js +0 -2
  374. package/.next/static/chunks/1irynso77np9t.js +0 -1
  375. package/.next/static/chunks/1sh_-w_keseat.js +0 -1
  376. package/.next/static/chunks/1z2_9pl3nezly.js +0 -3
  377. package/.next/static/chunks/23ty4edkuxirx.js +0 -1
  378. package/.next/static/chunks/2f1cnfz4h1e2x.js +0 -1
  379. package/.next/static/chunks/2jepcbdewlwlg.js +0 -1
  380. package/.next/static/chunks/2r_zq_knm0hph.js +0 -15
  381. package/.next/static/chunks/2yfmmo4qr_f-m.js +0 -1
  382. package/.next/static/chunks/3-xnkknav7azp.js +0 -1
  383. package/.next/static/chunks/38q31td1ecuay.js +0 -1
  384. package/.next/static/chunks/3n75-7grldc6f.js +0 -1
  385. package/.next/static/chunks/3ofr4htw4wpj3.js +0 -1
  386. package/.next/static/chunks/40bkw3zfenss4.js +0 -2
  387. package/public/voices/intro/awake-17dbafbf.ogg +0 -0
  388. package/public/voices/intro/models-d09ddc74.ogg +0 -0
  389. /package/.next/static/{YIQV0_9FZPTFUe9TCiVSF → 3_9hbwcAuWTSWCJSufp3d}/_buildManifest.js +0 -0
  390. /package/.next/static/{YIQV0_9FZPTFUe9TCiVSF → 3_9hbwcAuWTSWCJSufp3d}/_clientMiddlewareManifest.js +0 -0
  391. /package/.next/static/{YIQV0_9FZPTFUe9TCiVSF → 3_9hbwcAuWTSWCJSufp3d}/_ssgManifest.js +0 -0
@@ -1,12 +1,12 @@
1
- module.exports=[811592,e=>e.a(async(t,a)=>{try{var r=e.i(666680),d=e.i(336763),n=e.i(157406),i=e.i(533102),l=e.i(232347),o=e.i(333925),s=e.i(876393),h=e.i(220376),u=e.i(51083),b=e.i(212389),c=e.i(64774),T=e.i(951056),w=e.i(600690),p=t([s]);[s]=p.then?(await p)():p;let Q=()=>l.appEvents.emit({type:"threads"}),V=e=>"done"===e||"cancelled"===e,X=(e,t,a)=>`message:${(0,r.createHash)("sha256").update(JSON.stringify([e,t,a])).digest("hex")}`;async function f(e,t,a){let[r]=await e.select({id:h.threadWorkTable.id}).from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,t),(0,d.eq)(h.threadWorkTable.state,"external"),(0,d.eq)(h.threadWorkTable.caller,a))).limit(1);return!!r}async function y(e,t,a){let r=a.flatMap(e=>"assistant"===e.role&&Array.isArray(e.content)?e.content.flatMap(e=>"tool-call"===e.type&&e.toolName===u.TOOL_NAMES.send_message?[e.toolCallId]:[]):[]),n=r.map(a=>X(e,t,a)),i=new Map;if(!n.length)return i;let[l,o]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)),s.database.select({key:h.threadDeliveryTable.key,workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.threadId,e),(0,d.inArray)(h.threadDeliveryTable.key,n)))]),b=new Map(l.map(e=>[e.id,e])),c=new Map(o.map(e=>[e.key,e.workId]));for(let[e,t]of r.entries()){let a=b.get(c.get(n[e])??n[e]);a&&i.set(t,x(a,n[e]))}return i}async function g(e,t,a){let[r]=await e.select({seq:(0,n.max)(h.threadMessageTable.seq)}).from(h.threadMessageTable).where((0,d.eq)(h.threadMessageTable.threadId,t)),i=(r?.seq??-1)+1;return await e.insert(h.threadMessageTable).values({threadId:t,seq:i,...a}),i}let G=(e,t)=>({bot:e.bot,parent:e.id,role:"user",content:`${t} ${w.RESUME_CHECK}`,note:!0});async function m(e,t){await k(e.threadId,G(e,t))}async function k(e,t){let a=await s.database.transaction(a=>g(a,e,t));return Q(),a}async function I(e){return s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(h.threadWorkTable.createdAt,h.threadWorkTable.id)}async function q(e,t){let[a]=await s.database.select({budget:i.sql`min(nullif(${h.threadWorkTable.contextBudget}, 0))`}).from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.bot,t)));return a?.budget??void 0}async function W(e,t){await s.database.transaction(async a=>{await A(a,e),await a.update(h.threadWorkTable).set({contextBudget:t}).where((0,d.eq)(h.threadWorkTable.id,e.id))}),Q()}async function A(e,t){let[a]=await e.select().from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.id,t.id),(0,d.eq)(h.threadWorkTable.generation,t.generation),(0,d.eq)(h.threadWorkTable.state,"running")));return a||(0,b.publicError)("This turn is no longer running."),a}async function v(e,t){await e.insert(h.threadDeliveryTable).values(t).onConflictDoNothing();let[a]=await e.select({bot:h.threadWorkTable.bot}).from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.id,t.workId));a&&await f(e,t.threadId,a.bot)||await e.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.id,t.workId),(0,d.inArray)(h.threadWorkTable.state,["waiting","done"])))}let Z=(e,t,a)=>e.some(e=>e.caller===t&&e.bot===a&&!V(e.state)),ee=e=>"waiting"===e.state&&e.waitsFor.length>0;async function R(e,t){let a=await e.select({speaker:h.threadDeliveryTable.speaker}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,t.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1)));return new Set(a.map(e=>e.speaker))}let et=e=>e.length>1?`the answers of ${e.join(" and ")}`:`${e[0]}'s answer`;function D(e,t,a){return a.map(a=>{let r=e.filter(e=>e.caller===t&&e.bot===a).sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime()).at(-1);return r?.state==="done"&&r.result?`## ${a}'s answer
1
+ module.exports=[811592,e=>e.a(async(t,a)=>{try{var r=e.i(666680),d=e.i(336763),n=e.i(157406),i=e.i(533102),l=e.i(232347),o=e.i(333925),s=e.i(876393),h=e.i(220376),u=e.i(51083),b=e.i(212389),c=e.i(64774),T=e.i(951056),w=e.i(600690),p=t([s]);[s]=p.then?(await p)():p;let z=()=>l.appEvents.emit({type:"threads"}),Q=e=>"done"===e||"cancelled"===e,V=(e,t,a)=>`message:${(0,r.createHash)("sha256").update(JSON.stringify([e,t,a])).digest("hex")}`;async function f(e,t,a){let[r]=await e.select({id:h.threadWorkTable.id}).from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,t),(0,d.eq)(h.threadWorkTable.state,"external"),(0,d.eq)(h.threadWorkTable.caller,a))).limit(1);return!!r}async function y(e,t,a){let r=a.flatMap(e=>"assistant"===e.role&&Array.isArray(e.content)?e.content.flatMap(e=>"tool-call"===e.type&&e.toolName===u.TOOL_NAMES.send_message?[e.toolCallId]:[]):[]),n=r.map(a=>V(e,t,a)),i=new Map;if(!n.length)return i;let[l,o]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)),s.database.select({key:h.threadDeliveryTable.key,workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.threadId,e),(0,d.inArray)(h.threadDeliveryTable.key,n)))]),b=new Map(l.map(e=>[e.id,e])),c=new Map(o.map(e=>[e.key,e.workId]));for(let[e,t]of r.entries()){let a=b.get(c.get(n[e])??n[e]);a&&i.set(t,x(a,n[e]))}return i}async function g(e,t,a){let[r]=await e.select({seq:(0,n.max)(h.threadMessageTable.seq)}).from(h.threadMessageTable).where((0,d.eq)(h.threadMessageTable.threadId,t)),i=(r?.seq??-1)+1;return await e.insert(h.threadMessageTable).values({threadId:t,seq:i,...a}),i}let G=(e,t)=>({bot:e.bot,parent:e.id,role:"user",content:`${t} ${w.RESUME_CHECK}`,note:!0});async function m(e,t){await k(e.threadId,G(e,t))}async function k(e,t){let a=await s.database.transaction(a=>g(a,e,t));return z(),a}async function I(e){return s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(h.threadWorkTable.createdAt,h.threadWorkTable.id)}async function q(e,t){let[a]=await s.database.select({budget:i.sql`min(nullif(${h.threadWorkTable.contextBudget}, 0))`}).from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.bot,t)));return a?.budget??void 0}async function W(e,t){await s.database.transaction(async a=>{await A(a,e),await a.update(h.threadWorkTable).set({contextBudget:t}).where((0,d.eq)(h.threadWorkTable.id,e.id))}),z()}async function A(e,t){let[a]=await e.select().from(h.threadWorkTable).where((0,d.and)((0,d.eq)(h.threadWorkTable.id,t.id),(0,d.eq)(h.threadWorkTable.generation,t.generation),(0,d.eq)(h.threadWorkTable.state,"running")));return a||(0,b.publicError)("This turn is no longer running."),a}async function v(e,t){await e.insert(h.threadDeliveryTable).values(t).onConflictDoNothing();let[a]=await e.select({bot:h.threadWorkTable.bot}).from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.id,t.workId));a&&await f(e,t.threadId,a.bot)||await e.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.id,t.workId),(0,d.inArray)(h.threadWorkTable.state,["waiting","done"])))}let Z=(e,t,a)=>e.some(e=>e.caller===t&&e.bot===a&&!Q(e.state)),ee=e=>"waiting"===e.state&&e.waitsFor.length>0;async function R(e,t){let a=await e.select({speaker:h.threadDeliveryTable.speaker}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,t.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1)));return new Set(a.map(e=>e.speaker))}let et=e=>e.length>1?`the answers of ${e.join(" and ")}`:`${e[0]}'s answer`;function D(e,t,a){return a.map(a=>{let r=e.filter(e=>e.caller===t&&e.bot===a).sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime()).at(-1);return r?.state==="done"&&r.result?`## ${a}'s answer
2
2
 
3
3
  ${r.result}`:`## ${a}
4
4
 
5
- ${a} stopped without an answer.`})}let ea=(e,t,a,r)=>[a,...D(e,t,r)].join("\n\n");function x(e,t){let a={messageId:t,to:e.bot};return e.bot===w.ROOM_THURSDAY?a:ee(e)?{...a,note:`Held: it goes to ${e.bot} with ${et(e.waitsFor)} attached, when you end the turn in which you have read ${e.waitsFor.length>1?"them":"it"}. There is nothing to do for it until then.`}:e.id!==t?{...a,note:`${e.bot} is already working for you and reads this before its next step. Its one answer covers both.`}:{...a,note:`${e.bot} has it now, and their answer starts your next turn: until then, do not research, build, guess or report their part yourself, or watch their folder. Work that needs their answer goes out now with \`after: ["${e.bot}"]\`, and the app hands it on with that answer attached. A fact only the user has is asked for now, not after. Otherwise end your turn; the thread stays open.`}}async function O(e,t){let a=await e.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,t.threadId)).orderBy(i.sql`${h.threadWorkTable}.rowid`),r=a.filter(e=>e.caller===t.bot&&e.waitsFor.length>0&&"cancelled"!==e.state);if(!r.length||await f(e,t.threadId,t.bot))return;let n=await R(e,t);for(let i of r)i.waitsFor.some(e=>Z(a,t.bot,e)||n.has(e))||(await v(e,{key:`after:${i.id}`,threadId:t.threadId,workId:i.id,speaker:t.bot,text:D(a,t.bot,i.waitsFor).join("\n\n")}),await e.update(h.threadWorkTable).set({waitsFor:[]}).where((0,d.eq)(h.threadWorkTable.id,i.id)))}function $(e,t){let a=new Set(e.map(e=>e.bot).filter(e=>e!==w.ROOM_THURSDAY));t!==w.ROOM_THURSDAY&&!a.has(t)&&a.size>=o.BOT_RUN.participants&&(0,b.publicError)("This thread has reached its participant limit."),e.filter(e=>!V(e.state)).length>=o.BOT_RUN.queuedMessages&&(0,b.publicError)("This thread has reached its pending message limit.")}async function M(e,t){await e.update(h.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,t))}async function S(e,t){let a={...w.RoomMessageSchema.parse(t),id:t.id};"question"===a.kind&&a.to!==w.ROOM_THURSDAY&&(0,b.publicError)("Address user questions to Thursday; use a message to contact another bot."),a.options?.length&&"question"!==a.kind&&(0,b.publicError)("Offer answer choices only with a user question."),a.to===w.ROOM_THURSDAY&&"question"!==a.kind&&(0,b.publicError)("Send Thursday only a question for the user. The user already sees who is working, and your result reaches them as the last words of your turn."),a.to===w.ROOM_THURSDAY&&a.after?.length&&(0,b.publicError)("`after` is for work handed to a bot, not for a question."),a.to===e.bot&&(0,b.publicError)("Continue your own work directly; choose another recipient.");let r=await s.database.transaction(async t=>{await A(t,e);let r=X(e.threadId,e.bot,a.id),n=await t.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId)),[i]=await t.select({workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.eq)(h.threadDeliveryTable.key,r)),l=n.find(e=>e.id===(i?.workId??r));if(l)return x(l,r);if(a.to===w.ROOM_THURSDAY)return $(n,a.to),await t.insert(h.threadWorkTable).values({id:r,threadId:e.threadId,bot:w.ROOM_THURSDAY,caller:e.bot,parentId:e.id,state:"external",result:a.text,options:[...new Set(a.options??[])]}),await t.insert(h.threadRelayTable).values({key:r,threadId:e.threadId,bot:e.bot,text:a.text,kind:"question",messageId:r}),await M(t,e.threadId),{messageId:r,to:w.ROOM_THURSDAY};let o=function(e,t,a,r){let d=new Map(e.filter(e=>e.caller===t&&e.bot!==w.ROOM_THURSDAY).map(e=>[e.bot.toLowerCase(),e.bot])),n=[];for(let e of r){e.toLowerCase()===a.toLowerCase()&&(0,b.publicError)(`${a} cannot wait on its own answer; leave it out of after.`);let t=d.get(e.toLowerCase());t||(0,b.publicError)(`${e} has no work from you to wait on: hand ${e} its part first, or leave it out of after.`),n.includes(t)||n.push(t)}return n}(n,e.bot,a.to,a.after??[]),s=await R(t,e),u=o.filter(t=>Z(n,e.bot,t)||s.has(t)),c=n.filter(t=>t.bot===a.to&&t.caller===e.bot&&!V(t.state)),T=c.find(ee),p=c.find(e=>"running"===e.state)??c.find(e=>!ee(e));if(T&&(u.length||!p)){await t.insert(h.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:T.id,speaker:e.bot,text:a.text});let n=[...new Set([...T.waitsFor,...o])];return await t.update(h.threadWorkTable).set({waitsFor:n}).where((0,d.eq)(h.threadWorkTable.id,T.id)),await M(t,e.threadId),x({...T,waitsFor:n},r)}if(p&&!u.length)return await v(t,{key:r,threadId:e.threadId,workId:p.id,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await M(t,e.threadId),x(p,r);$(n,a.to);let[f]=await t.insert(h.threadWorkTable).values({id:r,threadId:e.threadId,bot:a.to,caller:e.bot,parentId:e.id,state:u.length?"waiting":"queued",waitsFor:u.length?o:[]}).returning();return u.length?await t.insert(h.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:a.text}):await v(t,{key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await M(t,e.threadId),x(f,r)});return Q(),r}async function _(e){let t=!1,a=await s.database.transaction(async a=>{let[r]=await a.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));if(!r||"running"!==r.status)return null;let n=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(i.sql`${h.threadWorkTable}.rowid`),l=new Set(n.filter(e=>"external"===e.state).map(e=>e.caller));for(let e of n)"queued"===e.state&&l.has(e.bot)&&(await a.update(h.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(h.threadWorkTable.id,e.id)),e.state="waiting",t=!0);let s=n.filter(e=>"running"===e.state);if(s.length>=o.BOT_RUN.concurrent)return null;let u=n.find(e=>"queued"===e.state&&!s.some(t=>t.bot===e.bot));if(!u)return null;if(r.turns>=o.BOT_RUN.turns)return await a.update(h.threadWorkTable).set({state:"paused"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"queued"))),null;let[b]=await a.update(h.threadWorkTable).set({state:"running",generation:u.generation+1}).where((0,d.eq)(h.threadWorkTable.id,u.id)).returning();return await a.update(h.threadTable).set({turns:r.turns+1}).where((0,d.eq)(h.threadTable.id,e)),b});return(a||t)&&Q(),a}async function E(e){let t=await s.database.transaction(async t=>{await A(t,e);let a=await t.select().from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).orderBy(h.threadDeliveryTable.id);for(let r of a){let a=B(r);await g(t,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:a,hidden:!r.visible}),await t.update(h.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(h.threadDeliveryTable.id,r.id))}return a.map(B)});return t.length&&Q(),t}async function U(e,t){await s.database.transaction(async a=>{await A(a,e);let[r]=await a.select().from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1),(0,d.eq)(h.threadDeliveryTable.visible,!1),(0,d.eq)(h.threadDeliveryTable.speaker,e.caller))).orderBy(h.threadDeliveryTable.id).limit(1);await g(a,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:t(r?{from:r.speaker,text:r.text}:null),hidden:!0}),r&&await a.update(h.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(h.threadDeliveryTable.id,r.id))}),Q()}async function N(e){let t=await s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId)).orderBy(h.threadWorkTable.createdAt),a=t.filter(t=>t.parentId===e.id&&t.bot!==w.ROOM_THURSDAY);if(!a.length)return null;let r=a.filter(e=>!V(e.state)||"done"===e.state&&e.waitsFor.length>0);if(!r.length)return"Everything you handed out is back.";let n=new Map,i=new Set;for(let e of(await s.database.select({workId:h.threadDeliveryTable.workId,key:h.threadDeliveryTable.key,text:h.threadDeliveryTable.text,visible:h.threadDeliveryTable.visible}).from(h.threadDeliveryTable).where((0,d.inArray)(h.threadDeliveryTable.workId,r.map(e=>e.id))).orderBy(h.threadDeliveryTable.id)))n.has(e.workId)||n.set(e.workId,e),e.key===`after:${e.workId}`&&i.add(e.workId);let l=Date.now(),u=e=>{let a=Math.max(0,Math.round((l-e.createdAt.getTime())/6e4)),r=(n.get(e.id)?.text??"").split("\n")[0].trim();return`- ${e.bot}, ${function(e,t,a){let r=t.waitsFor.filter(a=>Z(e,t.caller,a)),d=r.length?`once ${r.join(" and ")} ${r.length>1?"are":"is"} back`:"when you end this turn";if(ee(t))return r.length?`waits for ${r.join(" and ")}`:`goes out with ${et(t.waitsFor)} ${d}`;let n="running"===t.state?"working":"queued"===t.state?"about to start":"paused"===t.state?"paused":"done"===t.state?"done for now":"waiting",i=t.waitsFor.length?`; ${et(t.waitsFor)} follows ${d}`:"";return`${n}${a?", with the answers it waited for":""}${i}`}(t,e,i.has(e.id))} (${a} min): "${(0,c.clip)(r,o.PROMPT_LINE.boardAsk)}"`},b=r.filter(e=>!n.get(e.id)?.visible),T=r.filter(e=>n.get(e.id)?.visible);return[b.length?`What you handed out that is not back yet:
5
+ ${a} stopped without an answer.`})}let ea=(e,t,a,r)=>[a,...D(e,t,r)].join("\n\n");function x(e,t){let a={messageId:t,to:e.bot};return e.bot===w.ROOM_THURSDAY?a:ee(e)?{...a,note:`Held: it goes to ${e.bot} with ${et(e.waitsFor)} attached, when you end the turn in which you have read ${e.waitsFor.length>1?"them":"it"}. There is nothing to do for it until then.`}:e.id!==t?{...a,note:`${e.bot} is already working for you and reads this before its next step. Its one answer covers both.`}:{...a,note:`${e.bot} has it now, and their answer starts your next turn: until then, do not research, build, guess or report their part yourself, or watch their folder. Work that needs their answer goes out now with \`after: ["${e.bot}"]\`, and the app hands it on with that answer attached. A fact only the user has is asked for now, not after. Otherwise end your turn; the thread stays open.`}}async function O(e,t){let a=await e.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,t.threadId)).orderBy(i.sql`${h.threadWorkTable}.rowid`),r=a.filter(e=>e.caller===t.bot&&e.waitsFor.length>0&&"cancelled"!==e.state);if(!r.length||await f(e,t.threadId,t.bot))return;let n=await R(e,t);for(let i of r)i.waitsFor.some(e=>Z(a,t.bot,e)||n.has(e))||(await v(e,{key:`after:${i.id}`,threadId:t.threadId,workId:i.id,speaker:t.bot,text:D(a,t.bot,i.waitsFor).join("\n\n")}),await e.update(h.threadWorkTable).set({waitsFor:[]}).where((0,d.eq)(h.threadWorkTable.id,i.id)))}function $(e,t){let a=new Set(e.map(e=>e.bot).filter(e=>e!==w.ROOM_THURSDAY));t!==w.ROOM_THURSDAY&&!a.has(t)&&a.size>=o.BOT_RUN.participants&&(0,b.publicError)("This thread has reached its participant limit."),e.filter(e=>!Q(e.state)).length>=o.BOT_RUN.queuedMessages&&(0,b.publicError)("This thread has reached its pending message limit.")}async function M(e,t){await e.update(h.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,t))}async function S(e,t){let a={...w.RoomMessageSchema.parse(t),id:t.id};"question"===a.kind&&a.to!==w.ROOM_THURSDAY&&(0,b.publicError)("Address user questions to Thursday; use a message to contact another bot."),a.options?.length&&"question"!==a.kind&&(0,b.publicError)("Offer answer choices only with a user question."),a.to===w.ROOM_THURSDAY&&"question"!==a.kind&&(0,b.publicError)("Thursday takes only a question that needs the user's answer: they already see who is working, and your result reaches them as the last words of your turn. Do not send this as a question; end your turn, and a bot's answer starts your next one."),a.to===w.ROOM_THURSDAY&&a.after?.length&&(0,b.publicError)("`after` is for work handed to a bot, not for a question."),a.to===e.bot&&(0,b.publicError)("Continue your own work directly; choose another recipient.");let r=await s.database.transaction(async t=>{await A(t,e);let r=V(e.threadId,e.bot,a.id),n=await t.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId)),[i]=await t.select({workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.eq)(h.threadDeliveryTable.key,r)),l=n.find(e=>e.id===(i?.workId??r));if(l)return x(l,r);if(a.to===w.ROOM_THURSDAY)return $(n,a.to),await t.insert(h.threadWorkTable).values({id:r,threadId:e.threadId,bot:w.ROOM_THURSDAY,caller:e.bot,parentId:e.id,state:"external",result:a.text,options:[...new Set(a.options??[])]}),await t.insert(h.threadRelayTable).values({key:r,threadId:e.threadId,bot:e.bot,text:a.text,kind:"question",messageId:r}),await M(t,e.threadId),{messageId:r,to:w.ROOM_THURSDAY};let o=function(e,t,a,r){let d=new Map(e.filter(e=>e.caller===t&&e.bot!==w.ROOM_THURSDAY).map(e=>[e.bot.toLowerCase(),e.bot])),n=[];for(let e of r){e.toLowerCase()===a.toLowerCase()&&(0,b.publicError)(`${a} cannot wait on its own answer; leave it out of after.`);let t=d.get(e.toLowerCase());t||(0,b.publicError)(`${e} has no work from you to wait on: hand ${e} its part first, or leave it out of after.`),n.includes(t)||n.push(t)}return n}(n,e.bot,a.to,a.after??[]),s=await R(t,e),u=o.filter(t=>Z(n,e.bot,t)||s.has(t)),c=n.filter(t=>t.bot===a.to&&t.caller===e.bot&&!Q(t.state)),T=c.find(ee),p=c.find(e=>"running"===e.state)??c.find(e=>!ee(e));if(T&&(u.length||!p)){await t.insert(h.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:T.id,speaker:e.bot,text:a.text});let n=[...new Set([...T.waitsFor,...o])];return await t.update(h.threadWorkTable).set({waitsFor:n}).where((0,d.eq)(h.threadWorkTable.id,T.id)),await M(t,e.threadId),x({...T,waitsFor:n},r)}if(p&&!u.length)return await v(t,{key:r,threadId:e.threadId,workId:p.id,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await M(t,e.threadId),x(p,r);$(n,a.to);let[f]=await t.insert(h.threadWorkTable).values({id:r,threadId:e.threadId,bot:a.to,caller:e.bot,parentId:e.id,state:u.length?"waiting":"queued",waitsFor:u.length?o:[]}).returning();return u.length?await t.insert(h.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:a.text}):await v(t,{key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await M(t,e.threadId),x(f,r)});return z(),r}async function _(e){let t=!1,a=await s.database.transaction(async a=>{let[r]=await a.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));if(!r||"running"!==r.status)return null;let n=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(i.sql`${h.threadWorkTable}.rowid`),l=new Set(n.filter(e=>"external"===e.state).map(e=>e.caller));for(let e of n)"queued"===e.state&&l.has(e.bot)&&(await a.update(h.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(h.threadWorkTable.id,e.id)),e.state="waiting",t=!0);let s=n.filter(e=>"running"===e.state);if(s.length>=o.BOT_RUN.concurrent)return null;let u=n.find(e=>"queued"===e.state&&!s.some(t=>t.bot===e.bot));if(!u)return null;if(r.turns>=o.BOT_RUN.turns)return await a.update(h.threadWorkTable).set({state:"paused"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"queued"))),null;let[b]=await a.update(h.threadWorkTable).set({state:"running",generation:u.generation+1}).where((0,d.eq)(h.threadWorkTable.id,u.id)).returning();return await a.update(h.threadTable).set({turns:r.turns+1}).where((0,d.eq)(h.threadTable.id,e)),b});return(a||t)&&z(),a}async function E(e){let t=await s.database.transaction(async t=>{await A(t,e);let a=await t.select().from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).orderBy(h.threadDeliveryTable.id);for(let r of a){let a=B(r);await g(t,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:a,hidden:!r.visible}),await t.update(h.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(h.threadDeliveryTable.id,r.id))}return a.map(B)});return t.length&&z(),t}async function N(e,t){await s.database.transaction(async a=>{await A(a,e);let[r]=await a.select().from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1),(0,d.eq)(h.threadDeliveryTable.visible,!1),(0,d.eq)(h.threadDeliveryTable.speaker,e.caller))).orderBy(h.threadDeliveryTable.id).limit(1);await g(a,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:t(r?{from:r.speaker,text:r.text}:null),hidden:!0}),r&&await a.update(h.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(h.threadDeliveryTable.id,r.id))}),z()}async function U(e){let t=await s.database.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId)).orderBy(h.threadWorkTable.createdAt),a=t.filter(t=>t.parentId===e.id&&t.bot!==w.ROOM_THURSDAY);if(!a.length)return null;let r=a.filter(e=>!Q(e.state)||"done"===e.state&&e.waitsFor.length>0);if(!r.length)return"Everything you handed out is back.";let n=new Map,i=new Set;for(let e of(await s.database.select({workId:h.threadDeliveryTable.workId,key:h.threadDeliveryTable.key,text:h.threadDeliveryTable.text,visible:h.threadDeliveryTable.visible}).from(h.threadDeliveryTable).where((0,d.inArray)(h.threadDeliveryTable.workId,r.map(e=>e.id))).orderBy(h.threadDeliveryTable.id)))n.has(e.workId)||n.set(e.workId,e),e.key===`after:${e.workId}`&&i.add(e.workId);let l=Date.now(),u=e=>{let a=Math.max(0,Math.round((l-e.createdAt.getTime())/6e4)),r=(n.get(e.id)?.text??"").split("\n")[0].trim();return`- ${e.bot}, ${function(e,t,a){let r=t.waitsFor.filter(a=>Z(e,t.caller,a)),d=r.length?`once ${r.join(" and ")} ${r.length>1?"are":"is"} back`:"when you end this turn";if(ee(t))return r.length?`waits for ${r.join(" and ")}`:`goes out with ${et(t.waitsFor)} ${d}`;let n="running"===t.state?"working":"queued"===t.state?"about to start":"paused"===t.state?"paused":"done"===t.state?"done for now":"waiting",i=t.waitsFor.length?`; ${et(t.waitsFor)} follows ${d}`:"";return`${n}${a?", with the answers it waited for":""}${i}`}(t,e,i.has(e.id))} (${a} min): "${(0,c.clip)(r,o.PROMPT_LINE.boardAsk)}"`},b=r.filter(e=>!n.get(e.id)?.visible),T=r.filter(e=>n.get(e.id)?.visible);return[b.length?`What you handed out that is not back yet:
6
6
  ${b.map(u).join("\n")}`:"Everything you handed out is back.",...T.length?[`The user wrote to these bots directly; their answers come to you:
7
7
  ${T.map(u).join("\n")}`]:[]].join("\n\n")}function B(e){return e.visible?(0,T.tagSpeaker)(e.speaker===w.ROOM_USER?"user":"thursday",e.text):`${e.speaker}:
8
8
 
9
- ${e.text}`}async function C(e,t){await s.database.transaction(async a=>{await A(a,e),await O(a,e);let r=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.parentId,e.id)),n=await a.select({id:h.threadDeliveryTable.id}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).limit(1),i=await f(a,e.threadId,e.bot),l=n.length&&!i?"queued":n.length||r.some(e=>!V(e.state))?"waiting":"done";if(await a.update(h.threadWorkTable).set({state:l,result:t}).where((0,d.eq)(h.threadWorkTable.id,e.id)),"done"!==l)return;if(e.parentId){let[r]=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.id,e.parentId)),[n]=t?[]:await a.select({id:h.threadDeliveryTable.id}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.parentId),(0,d.eq)(h.threadDeliveryTable.speaker,e.bot),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).limit(1);r&&"cancelled"!==r.state&&!n&&await v(a,{key:`return:${e.id}:${e.generation}`,threadId:e.threadId,workId:r.id,speaker:e.bot,text:t||"This turn ended without a message."})}let[o]=await a.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e.threadId)),s=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId));o&&e.bot===o.bot&&!e.parentId&&s.every(e=>V(e.state))&&(await a.update(h.threadTable).set({status:t?"done":"waiting",outcome:t||"The room is idle. Send a message to continue.",pending:t?null:{options:[T.THREAD_CONTINUE]},wrapped:!0,endedAt:t?new Date:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e.threadId)),t&&await a.insert(h.threadRelayTable).values({key:`report:${e.threadId}:${o.generation}`,threadId:e.threadId,bot:e.bot,text:t,kind:"report"}).onConflictDoNothing())}),Q()}async function H(e){await s.database.transaction(async t=>{let[a]=await t.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));if(!a||"running"!==a.status)return;let r=await t.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e));if(r.some(e=>"queued"===e.state||"running"===e.state))return;let n=r.find(e=>"external"===e.state);if(n)return void await t.update(h.threadTable).set({status:"waiting",outcome:n.result,pending:{options:n.options,messageId:n.id,bot:n.caller},updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e));if(r.some(e=>!V(e.state))||a.wrapped){let n=a.turns>=o.BOT_RUN.turns?"The room reached its automatic turn limit. Continue from the saved conversation.":"Work is paused. Continue from the saved conversation.";return a.routineId?void await L(t,e,r,n):void await t.update(h.threadTable).set({status:"waiting",outcome:n,pending:{options:[T.THREAD_CONTINUE]},updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e))}let i=crypto.randomUUID();await t.insert(h.threadWorkTable).values({id:i,threadId:e,bot:a.bot,caller:w.ROOM_THURSDAY,state:"queued"}),await v(t,{key:i,threadId:e,workId:i,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await t.update(h.threadTable).set({wrapped:!0}).where((0,d.eq)(h.threadTable.id,e))}),Q()}async function L(e,t,a,r){for(let t of a.filter(e=>!V(e.state)))await e.update(h.threadWorkTable).set({state:"cancelled",generation:t.generation+1}).where((0,d.eq)(h.threadWorkTable.id,t.id));await e.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.threadId,t)),await e.update(h.threadTable).set({status:"cancelled",outcome:r,pending:null,seen:!1,endedAt:new Date,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,t)),await e.insert(h.threadRelayTable).values({key:crypto.randomUUID(),threadId:t,bot:a.find(e=>!e.parentId)?.bot??"Bot",text:r,kind:"interrupted"})}async function j(e,t,a){await s.database.transaction(async r=>{let n=await r.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)),[i]=await r.select({routineId:h.threadTable.routineId}).from(h.threadTable).where((0,d.eq)(h.threadTable.id,e)),l=!!i?.routineId;for(let a of n.filter(e=>"running"===e.state||"queued"===e.state))l||await r.update(h.threadWorkTable).set({state:"paused",generation:a.generation+1}).where((0,d.eq)(h.threadWorkTable.id,a.id)),await g(r,e,G(a,t));l?await L(r,e,n,t):(await r.update(h.threadTable).set({status:"waiting",outcome:t,pending:{options:[T.THREAD_CONTINUE],...a?{refused:a}:{}},seen:!1,endedAt:null,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await r.insert(h.threadRelayTable).values({key:crypto.randomUUID(),threadId:e,bot:n.find(e=>!e.parentId)?.bot??"Bot",text:t,kind:"interrupted"}))}),Q()}async function F(e){await s.database.transaction(async t=>{await t.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"paused"))),await t.update(h.threadTable).set({status:"running",generation:i.sql`${h.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(h.threadRelayTable.threadId,e),(0,d.eq)(h.threadRelayTable.kind,"interrupted")))}),Q()}async function Y(e,t,a){let r=e.select({workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.threadId,t),(0,d.eq)(h.threadDeliveryTable.consumed,!1)));await e.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,t),(0,d.eq)(h.threadWorkTable.bot,a),(0,d.inArray)(h.threadWorkTable.state,["waiting","done"]),(0,d.inArray)(h.threadWorkTable.id,r)))}async function K(e,t,a,r,n,l=!0){let o=await s.database.transaction(async o=>{let[s]=await o.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));s||(0,b.publicError)("No such thread.");let u=await o.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(h.threadWorkTable.createdAt),c=u.filter(e=>"external"===e.state),T=n?[c.find(e=>e.id===n)??(0,b.publicError)("That question is no longer waiting for an answer.")]:l?function(e,t){let a=t?e.filter(e=>e.caller===t):e;if(new Set(a.map(e=>e.caller)).size<=1)return a;(0,b.publicError)(`Several bots are waiting for an answer: ${a.map(e=>`${e.caller} (replyTo ${e.id}): “${(e.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by naming its bot or by its replyTo.`)}(c,r):[],p=T[0],y=p?.caller??r??s.bot,g=p?u.find(e=>e.id===p.parentId):u.find(e=>e.bot===y&&"running"===e.state)??u.find(e=>e.bot===y&&!V(e.state)&&"external"!==e.state);for(let e of T)await o.update(h.threadWorkTable).set({state:"done",result:t}).where((0,d.eq)(h.threadWorkTable.id,e.id)),await o.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.messageId,e.id));if(!g){let t=null;if(y!==s.bot){let a=u.findLast(e=>e.bot===s.bot&&!e.parentId&&"cancelled"!==e.state);a?"done"===a.state&&await o.update(h.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(h.threadWorkTable.id,a.id)):a=(await o.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:s.bot,caller:w.ROOM_THURSDAY,state:"waiting"}).returning())[0],t=a.id}g=(await o.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:y,caller:t?s.bot:w.ROOM_THURSDAY,parentId:t,state:"queued"}).returning())[0]}p&&await v(o,{key:`answer:${p.id}`,threadId:e,workId:g.id,speaker:"Thread activity",text:T.length>1?`The next message answers your questions to the user: ${T.map(e=>`“${e.result??""}”`).join(", ")}`:`The next message answers your question to the user: “${p.result??""}”`});let m=crypto.randomUUID();return await v(o,{key:m,threadId:e,workId:g.id,speaker:a,text:t,visible:!0}),p&&!await f(o,e,y)&&await Y(o,e,y),await o.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"paused"))),await o.update(h.threadTable).set({status:"running",generation:i.sql`${h.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await o.update(h.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(h.threadRelayTable.threadId,e),(0,d.inArray)(h.threadRelayTable.kind,["interrupted","report"]))),{key:m,to:y,answered:p?{bot:p.caller,question:T.map(e=>e.result??"").join(" · ")}:null}});return Q(),o}async function P(e){await s.database.transaction(async t=>{await t.update(h.threadWorkTable).set({state:"cancelled",generation:i.sql`${h.threadWorkTable.generation} + 1`}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.inArray)(h.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.threadId,e))}),Q()}async function J(e,t){let[a]=await s.database.select({bot:h.threadTable.bot}).from(h.threadTable).where((0,d.eq)(h.threadTable.id,e)),r=await s.database.select().from(h.threadMessageTable).where((0,d.and)((0,d.eq)(h.threadMessageTable.threadId,e),(0,d.or)((0,d.eq)(h.threadMessageTable.bot,t),a?.bot===t?i.sql`${h.threadMessageTable.bot} is null AND ${h.threadMessageTable.parent} is null`:void 0))).orderBy(h.threadMessageTable.seq),n=r.findLastIndex(e=>e.compact);return(n>0?[r[0],...r.slice(n)]:r).map(e=>({role:e.role,content:e.content}))}async function z(e){e.length&&(await s.database.update(h.threadRelayTable).set({accepted:!0}).where((0,d.inArray)(h.threadRelayTable.id,e)),Q())}e.s(["acceptRoomRelays",0,z,"appendRoomMessage",0,k,"cancelRoom",0,P,"claimRoomWork",0,_,"consumeRoomInbox",0,E,"finishRoomWork",0,C,"joinRoom",0,U,"listParticipantTranscript",0,J,"listRoomReceipts",0,y,"listRoomWork",0,I,"lowerRoomContextBudget",0,W,"messageKey",0,X,"noteRoomBreak",0,m,"pauseRoom",0,j,"resumeRoom",0,F,"roomBoard",0,N,"roomContextBudget",0,q,"sendRoomMessage",0,S,"settleRoom",0,H,"tellRoom",0,K]),a()}catch(e){a(e)}},!1),5509,e=>e.a(async(t,a)=>{try{var r=e.i(336763),d=e.i(396918),n=e.i(533102),i=e.i(232347),l=e.i(139886),o=e.i(333925),s=e.i(876393),h=e.i(220376),u=e.i(51083),b=e.i(64774),c=e.i(951056),T=e.i(811592),w=e.i(600690),p=t([s,T]);[s,T]=p.then?(await p)():p;let F=()=>i.appEvents.emit({type:"threads"}),Y={id:h.threadTable.id,bot:h.threadTable.bot,label:h.threadTable.label,request:h.threadTable.request,status:h.threadTable.status,outcome:h.threadTable.outcome,pending:h.threadTable.pending,seen:h.threadTable.seen,routineId:h.threadTable.routineId,startedBy:h.threadTable.startedBy,inputTokens:h.threadTable.inputTokens,outputTokens:h.threadTable.outputTokens,contextTokens:h.threadTable.contextTokens,contextBudget:h.threadTable.contextBudget,createdAt:h.threadTable.createdAt,updatedAt:h.threadTable.updatedAt};async function f(e){let{opening:t,...a}=e,r=await s.database.transaction(async e=>{let[r]=await e.insert(h.threadTable).values({id:crypto.randomUUID(),status:"running",...a}).returning();return await e.insert(h.threadMessageTable).values({threadId:r.id,seq:0,bot:null,parent:null,role:"user",content:t,compact:!1,note:!1}),await e.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:r.id,bot:r.bot,caller:w.ROOM_THURSDAY,state:"queued"}),r});return F(),r}async function y(e,t){await s.database.update(h.threadTable).set({...t,updatedAt:new Date}).where((0,r.eq)(h.threadTable.id,e)),F()}async function g(e){0!==e.length&&(await s.database.transaction(async t=>{await t.update(h.threadTable).set({seen:!0}).where((0,r.inArray)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,r.inArray)(h.threadRelayTable.threadId,e))}),F())}async function m(){let e=s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])),t=await s.database.update(h.threadWorkTable).set({state:"cancelled"}).where((0,r.and)((0,r.notInArray)(h.threadWorkTable.state,["done","cancelled"]),(0,r.inArray)(h.threadWorkTable.threadId,e))).returning({id:h.threadWorkTable.id}),a=await s.database.update(h.threadTable).set({pending:null}).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.isNotNull)(h.threadTable.pending))).returning({id:h.threadTable.id});return(t.length||a.length)&&F(),{closed:t.length,cleared:a.length}}async function k(e,t,a=null){(t.input||t.output||null!==a)&&(await s.database.update(h.threadTable).set({inputTokens:n.sql`${h.threadTable.inputTokens} + ${t.input}`,outputTokens:n.sql`${h.threadTable.outputTokens} + ${t.output}`,cacheReadTokens:n.sql`${h.threadTable.cacheReadTokens} + ${t.cacheRead}`,cacheWriteTokens:n.sql`${h.threadTable.cacheWriteTokens} + ${t.cacheWrite}`,...null===a?{}:{contextTokens:a.tokens,contextBudget:a.budget}}).where((0,r.eq)(h.threadTable.id,e)),F())}async function I(e){let[t]=await s.database.select(Y).from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));if(!t)return null;let[a]=await N([t],()=>!1);return a?.room??null}async function q(e){let[t]=await s.database.select().from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));return t??null}async function W(){let[e,t,a,n]=await Promise.all([s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["running","waiting"])).orderBy((0,d.desc)(h.threadTable.updatedAt)),s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_FINISHED),s.database.select(Y).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.eq)(h.threadTable.seen,!1))),s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadRelayTable.threadId}).from(h.threadRelayTable).where((0,r.eq)(h.threadRelayTable.accepted,!1))))]),i=[...new Map([...e,...t,...a,...n].map(e=>[e.id,e])).values()].sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime());return N(i,e=>{let t;return t=e.status,"running"===t||"waiting"===t})}async function A(){let e=await s.database.select(Y).from(h.threadTable).orderBy(n.sql`case when ${h.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,d.desc)(h.threadTable.updatedAt),(0,d.desc)(h.threadTable.id)).limit(o.THREAD_STATUS_LIMIT);return N(e,e=>"running"===e.status)}async function v(e){return e.length?await s.database.select({id:h.threadTable.id,callId:h.threadTable.callId,label:h.threadTable.label,status:h.threadTable.status,outcome:h.threadTable.outcome}).from(h.threadTable).where((0,r.inArray)(h.threadTable.callId,e)).orderBy(h.threadTable.createdAt):[]}async function R(e,t){let a=(a,n)=>s.database.select({id:h.threadTable.id,owner:h.threadTable.bot,label:h.threadTable.label,status:h.threadTable.status,pending:h.threadTable.pending,updatedAt:h.threadTable.updatedAt}).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,a),t?(0,r.ne)(h.threadTable.id,t):void 0,(0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadWorkTable.threadId}).from(h.threadWorkTable).where((0,r.eq)(h.threadWorkTable.bot,e))))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(n),[n,i]=await Promise.all([a(["running","waiting"],o.BOT_WORK.open),a(["done","cancelled"],o.BOT_WORK.recent)]),l=[...n,...i].map(e=>e.id);if(!l.length)return{open:[],recent:[]};let u=await s.database.select({id:h.threadWorkTable.id,threadId:h.threadWorkTable.threadId,result:h.threadWorkTable.result}).from(h.threadWorkTable).where((0,r.and)((0,r.eq)(h.threadWorkTable.bot,e),(0,r.inArray)(h.threadWorkTable.threadId,l),(0,r.isNotNull)(h.threadWorkTable.result))).orderBy((0,d.desc)(h.threadWorkTable.createdAt)),b=new Map;for(let{id:e,threadId:t,result:a}of u)a?.trim()&&!b.has(t)&&b.set(t,{workId:e,words:a});let c=({pending:e,...t})=>{let a=b.get(t.id);return{...t,workId:a?.workId??null,asking:"waiting"===t.status&&!!e?.messageId,said:a?.words??null,cut:!!a&&a.words.replace(/\s+/g," ").trim().length>o.BOT_WORK.said}};return{open:n.map(c),recent:i.map(c)}}async function D(e,t){if(t.owner===e){let[e]=await s.database.select({request:h.threadTable.request}).from(h.threadTable).where((0,r.eq)(h.threadTable.id,t.id));return e?.request??""}return t.workId?(await s.database.select({text:h.threadDeliveryTable.text}).from(h.threadDeliveryTable).where((0,r.eq)(h.threadDeliveryTable.workId,t.workId)).orderBy(h.threadDeliveryTable.id)).map(e=>e.text).join("\n\n"):""}async function x(e){let t=await s.database.delete(h.threadTable).where((0,r.eq)(h.threadTable.id,e)).returning({id:h.threadTable.id});return t.length&&F(),t.length>0}async function O(){return(await s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.eq)(h.threadTable.status,"running"))).map(e=>e.id)}async function $(){return await s.database.select({id:h.threadTable.id,label:h.threadTable.label,status:h.threadTable.status,endedAt:h.threadTable.endedAt,updatedAt:h.threadTable.updatedAt}).from(h.threadTable)}function M(e){let t=new Set;for(let a of e)if(Array.isArray(a))for(let e of a){if("tool-call"!==e.type||e.toolName!==u.TOOL_NAMES.write_file)continue;let a=e.input?.path;"string"==typeof a&&a.trim()&&(t.delete(a.trim()),t.add(a.trim()))}return[...t]}async function S(e){let t=await s.database.select({content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.eq)(h.threadMessageTable.role,"assistant"))).orderBy(h.threadMessageTable.seq);return M(t.map(e=>e.content))}async function _(e){let t=e.trim();if(!t)return null;let a=await q(t);if(a)return a;let r=t.toLowerCase();return(await s.database.select().from(h.threadTable).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.THREAD_LABEL_REACH)).find(e=>e.label.toLowerCase()===r)??null}async function E(e,t,a){await s.database.insert(h.threadMessageTable).values({threadId:e,seq:t,...a,compact:a.compact??!1,note:a.note??!1}).onConflictDoUpdate({target:[h.threadMessageTable.threadId,h.threadMessageTable.seq],set:{role:a.role,content:a.content,compact:a.compact??!1,note:a.note??!1}}),F()}async function U(e,t){t.length&&(await s.database.delete(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.seq,t))),F())}async function N(e,t=()=>!0){if(0===e.length)return[];let a=e.filter(t).map(e=>e.id),d=a.length?await s.database.select().from(h.threadMessageTable).where((0,r.inArray)(h.threadMessageTable.threadId,a)).orderBy(h.threadMessageTable.seq):[],i=e.map(e=>e.id),[l,o,p]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,r.inArray)(h.threadWorkTable.threadId,i)).orderBy(n.sql`${h.threadWorkTable}.rowid`),s.database.select().from(h.threadDeliveryTable).where((0,r.and)((0,r.inArray)(h.threadDeliveryTable.threadId,i),(0,r.eq)(h.threadDeliveryTable.visible,!0))),s.database.select().from(h.threadRelayTable).where((0,r.and)((0,r.inArray)(h.threadRelayTable.threadId,i),(0,r.eq)(h.threadRelayTable.accepted,!1)))]),f=new Map(e.map(e=>[e.id,e.bot])),y=new Map(l.map(e=>[e.id,e.caller])),g=new Map;for(let e of d){let t=g.get(e.threadId)??[];t.push(...function(e,t){if(e.hidden)return[];let a={seq:e.seq,bot:e.bot,parent:e.parent,to:"user"===e.role?e.bot:t,at:e.createdAt},r=t=>`${e.id}-${t}`,d=e.content;if("user"===e.role){if(0===e.seq)return[];let t="string"==typeof d?d:d.flatMap(e=>"text"===e.type&&e.text?[e.text]:[]).join("\n").trim();if(!t)return[];if(e.compact)return[{...a,id:r(0),kind:"note",text:t}];if(e.note){let e=t.endsWith(w.RESUME_CHECK)?t.slice(0,-w.RESUME_CHECK.length).trimEnd():t;return[{...a,id:r(0),kind:"stop",text:e}]}return[{...a,id:r(0),kind:"user",text:(0,c.untagSpeaker)(t),by:(0,c.speakerOf)(t)}]}if("assistant"===e.role){let t=e.content;if("string"==typeof t)return t.trim()?[{...a,id:r(0),kind:"text",text:t.trim()}]:[];let d=[];return t.forEach((t,n)=>{if("text"===t.type){let e=t.text.trim();e&&d.push({...a,id:r(n),kind:"text",text:e});return}if("tool-result"===t.type)return void d.push(L(a,r(n),t));if("tool-call"!==t.type)return;let i=t.input??{};if(t.toolName===u.TOOL_NAMES.send_message){let l;d.push({...a,id:r(n),kind:"ask",callId:t.toolCallId,to:(l=String(i.to??"").trim()).toLowerCase()===w.ROOM_THURSDAY.toLowerCase()?w.ROOM_THURSDAY:l,text:String(i.text??""),question:"question"===i.kind,..."question"===i.kind&&e.bot?{questionId:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...e.bot?{exchange:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...Array.isArray(i.after)&&i.after.length?{after:i.after.map(String)}:{}})}else t.toolName===u.TOOL_NAMES.bash?d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:(0,b.clip)(String(i.command??""),120),note:B(i)}):d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:C(t.toolName,i),note:B(i),path:t.toolName===u.TOOL_NAMES.write_file?P(i,"path")??null:null})}),d}if("tool"===e.role){let t=[];return e.content.forEach((e,d)=>{"tool-result"!==e.type||(e.toolName!==u.TOOL_NAMES.send_message||"error-text"===e.output.type)&&t.push(L(a,r(d),e))}),t}return[]}(e,(e.parent?y.get(e.parent):null)??f.get(e.threadId)??"")),g.set(e.threadId,t)}return e.map(e=>{let a=l.filter(t=>t.threadId===e.id),r=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(a.map(e=>e.bot))].filter(e=>e!==w.ROOM_THURSDAY).map(e=>({bot:e,state:a.filter(t=>t.bot===e).sort((e,t)=>r.indexOf(e.state)-r.indexOf(t.state))[0].state}));return{...function(e,t){let{pending:a,inputTokens:r,outputTokens:d,...n}=e;return{...n,ask:"waiting"===e.status?{question:e.outcome??"",options:a?.options??[],messageId:a?.messageId,bot:a?.bot,refused:a?.refused}:null,tokens:{input:r,output:d},lines:t}}(e,g.get(e.id)??[]),room:{participants:d,questions:a.filter(e=>"external"===e.state).map(e=>({id:e.id,bot:e.caller,text:e.result??"",options:e.options})),deliveries:o.filter(t=>t.threadId===e.id).map(t=>({id:t.key,bot:a.find(e=>e.id===t.workId)?.bot??e.bot,text:t.text,delivered:t.consumed})),relays:p.filter(t=>t.threadId===e.id),exchanges:t(e)?a.map(e=>({id:e.id,bot:e.bot,caller:e.caller,state:e.state,waitsFor:e.waitsFor})):[]}}})}let K=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],P=(e,t)=>{let a=e[t];return"string"==typeof a&&a.trim()?a:null};function B(e){let t=P(e,"description");return t?(0,b.clip)(t,120):null}function C(e,t){let a=t??{};if("object"!=typeof a||Array.isArray(a))return(0,b.clip)(String(t??""),120);if(e===u.TOOL_NAMES.bash)return B(a)??(0,b.clip)(String(a.command??""),120);if(e===u.TOOL_NAMES.tool_call||e===u.TOOL_NAMES.tool_search){let e=Array.isArray(a.tools)?a.tools.map(String).join(", "):String(a.tool??""),t=a.args??null,r=t&&"object"==typeof t?String(a.server??"")===o.STUDIO_SERVER?H(t):JSON.stringify(t):"";return(0,b.clip)([String(a.server??""),e,r].filter(Boolean).join(" "),120)}let r=H(a);return r?(0,b.clip)(r,120):Object.keys(a).length?(0,b.clip)(JSON.stringify(a),120):""}function H(e){for(let t of K){let a=P(e,t);if(a)return a}for(let t of Object.keys(e)){let a=P(e,t);if(a)return a}return""}let J=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,z=" — ";function L(e,t,a){let r=a.toolName===u.TOOL_NAMES.web_search,d=function e(t,a,r=!1){var d;if(null==t)return[];if("string"==typeof t)return j(t,a,r);if("object"!=typeof t)return j(String(t),a,r);switch(t.type){case"text":case"error-text":return j(String(t.value??""),a,r);case"json":case"error-json":return e(t.value,a,r);case"execution-denied":return j("Denied.",a,r);case"content":{if(!Array.isArray(t.value))return[];let e=[];for(let d of t.value){if("text"===d.type&&"string"==typeof d.text){e.push(...j(d.text,a,r));continue}let t=function(e){let t=String(e.mediaType??"");if(!t.startsWith("image/"))return null;let a=e.data;return"string"==typeof a?`data:${t};base64,${a}`:a?.type==="url"&&a.url?a.url:a?.type==="data"&&"string"==typeof a.data?`data:${t};base64,${a.data}`:null}(d);t&&e.push({type:"image",src:t})}return e}}return"string"==typeof t.path&&String(t.mediaType??"").startsWith("image/")?[{type:"text",text:t.path},{type:"image",src:l.queryKey.file(t.path)}]:Array.isArray(t.sources)?t.sources.map(e=>String(e?.title??"")).filter(Boolean).slice(0,a).map(e=>({type:"text",text:e})):"string"==typeof t.stdout?j(t.stdout||String(t.stderr??""),a,r):"string"==typeof t.answer?j(t.answer,a,r):j(r?(d=t,Array.isArray(d)?JSON.stringify(d,null,2):Object.entries(d).map(([e,t])=>"string"==typeof t&&t.includes("\n")?`${e}:
10
- ${t}`:`${e}: ${JSON.stringify(t,null,2)}`).join("\n")):JSON.stringify(t),a,r)}(a.output,r?o.FULL_RESULT_LINES:5),n=d.flatMap(e=>"text"===e.type?[e.text]:[]),i=r?n.filter(e=>J.test(e)):[],s=(i.length?i:n).slice(0,4);return{...e,id:t,kind:"tool-result",callId:a.toolCallId,name:a.toolName,results:s.map(e=>({type:"text",text:i.length?function(e){let t=e.replace(/\s+/g," ").trim(),a=J.exec(t);if(!a||t.length<=200)return(0,b.clip)(t,200);let r=a[0].trim(),d=t.slice(0,a.index).replace(/[\s—-]+$/,""),n=200-r.length-z.length;return d&&n>1?`${(0,b.clip)(d,n)}${z}${r}`:r}(e):(0,b.clip)(e,200)})),more:n.length>s.length||d.length>n.length||s.some(e=>e.length>200)}}function j(e,t,a=!1){if(a){let a=e.split("\n"),r=a.slice(0,t);a.length>t&&r.push(`… ${a.length-t} more lines`);let d=r.join("\n").trimEnd();return d?[{type:"text",text:d}]:[]}return e.split("\n").map(e=>e.trim()).filter(Boolean).slice(0,t).map(e=>({type:"text",text:e}))}e.s(["addThreadUsage",0,k,"argumentLine",0,C,"closeEndedQuestions",0,m,"deleteMessages",0,U,"deleteThread",0,x,"findThread",0,q,"findThreadRoom",0,I,"insertThread",0,f,"listBotWork",0,R,"listCallJobs",0,v,"listInboxThreads",0,W,"listRunningThreadIds",0,O,"listThreadFolders",0,$,"listThreadOverview",0,A,"listWrittenPaths",0,S,"markSeen",0,g,"readBotAsk",0,D,"resolveThread",0,_,"updateThread",0,y,"upsertMessage",0,E,"writtenPathsIn",0,M]),a()}catch(e){a(e)}},!1),157406,e=>{"use strict";var t=e.i(533102),a=e.i(539774),r=e.i(763369);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,a.is)(e,r.Column)?e:String)}])}];
9
+ ${e.text}`}async function C(e,t){await s.database.transaction(async a=>{await A(a,e),await O(a,e);let r=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.parentId,e.id)),n=await a.select({id:h.threadDeliveryTable.id}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.id),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).limit(1),i=await f(a,e.threadId,e.bot),l=n.length&&!i?"queued":n.length||r.some(e=>!Q(e.state))?"waiting":"done";if(await a.update(h.threadWorkTable).set({state:l,result:t}).where((0,d.eq)(h.threadWorkTable.id,e.id)),"done"!==l)return;if(e.parentId){let[r]=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.id,e.parentId)),[n]=t?[]:await a.select({id:h.threadDeliveryTable.id}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.workId,e.parentId),(0,d.eq)(h.threadDeliveryTable.speaker,e.bot),(0,d.eq)(h.threadDeliveryTable.consumed,!1))).limit(1);r&&"cancelled"!==r.state&&!n&&await v(a,{key:`return:${e.id}:${e.generation}`,threadId:e.threadId,workId:r.id,speaker:e.bot,text:t||"This turn ended without a message."})}let[o]=await a.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e.threadId)),s=await a.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e.threadId));o&&e.bot===o.bot&&!e.parentId&&s.every(e=>Q(e.state))&&(await a.update(h.threadTable).set({status:t?"done":"waiting",outcome:t||"The room is idle. Send a message to continue.",pending:t?null:{options:[T.THREAD_CONTINUE]},wrapped:!0,endedAt:t?new Date:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e.threadId)),t&&await a.insert(h.threadRelayTable).values({key:`report:${e.threadId}:${o.generation}`,threadId:e.threadId,bot:e.bot,text:t,kind:"report"}).onConflictDoNothing())}),z()}async function H(e){await s.database.transaction(async t=>{let[a]=await t.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));if(!a||"running"!==a.status)return;let r=await t.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e));if(r.some(e=>"queued"===e.state||"running"===e.state))return;let n=r.find(e=>"external"===e.state);if(n)return void await t.update(h.threadTable).set({status:"waiting",outcome:n.result,pending:{options:n.options,messageId:n.id,bot:n.caller},updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e));if(r.some(e=>!Q(e.state))||a.wrapped){let n=a.turns>=o.BOT_RUN.turns?"The room reached its automatic turn limit. Continue from the saved conversation.":"Work is paused. Continue from the saved conversation.";return a.routineId?void await L(t,e,r,n):void await t.update(h.threadTable).set({status:"waiting",outcome:n,pending:{options:[T.THREAD_CONTINUE]},updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e))}let i=crypto.randomUUID();await t.insert(h.threadWorkTable).values({id:i,threadId:e,bot:a.bot,caller:w.ROOM_THURSDAY,state:"queued"}),await v(t,{key:i,threadId:e,workId:i,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await t.update(h.threadTable).set({wrapped:!0}).where((0,d.eq)(h.threadTable.id,e))}),z()}async function L(e,t,a,r){for(let t of a.filter(e=>!Q(e.state)))await e.update(h.threadWorkTable).set({state:"cancelled",generation:t.generation+1}).where((0,d.eq)(h.threadWorkTable.id,t.id));await e.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.threadId,t)),await e.update(h.threadTable).set({status:"cancelled",outcome:r,pending:null,seen:!1,endedAt:new Date,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,t)),await e.insert(h.threadRelayTable).values({key:crypto.randomUUID(),threadId:t,bot:a.find(e=>!e.parentId)?.bot??"Bot",text:r,kind:"interrupted"})}async function j(e,t,a){await s.database.transaction(async r=>{let n=await r.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)),[i]=await r.select({routineId:h.threadTable.routineId}).from(h.threadTable).where((0,d.eq)(h.threadTable.id,e)),l=!!i?.routineId;for(let a of n.filter(e=>"running"===e.state||"queued"===e.state))l||await r.update(h.threadWorkTable).set({state:"paused",generation:a.generation+1}).where((0,d.eq)(h.threadWorkTable.id,a.id)),await g(r,e,G(a,t));l?await L(r,e,n,t):(await r.update(h.threadTable).set({status:"waiting",outcome:t,pending:{options:[T.THREAD_CONTINUE],...a?{refused:a}:{}},seen:!1,endedAt:null,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await r.insert(h.threadRelayTable).values({key:crypto.randomUUID(),threadId:e,bot:n.find(e=>!e.parentId)?.bot??"Bot",text:t,kind:"interrupted"}))}),z()}async function F(e){await s.database.transaction(async t=>{await t.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"paused"))),await t.update(h.threadTable).set({status:"running",generation:i.sql`${h.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(h.threadRelayTable.threadId,e),(0,d.eq)(h.threadRelayTable.kind,"interrupted")))}),z()}async function Y(e,t,a){let r=e.select({workId:h.threadDeliveryTable.workId}).from(h.threadDeliveryTable).where((0,d.and)((0,d.eq)(h.threadDeliveryTable.threadId,t),(0,d.eq)(h.threadDeliveryTable.consumed,!1)));await e.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,t),(0,d.eq)(h.threadWorkTable.bot,a),(0,d.inArray)(h.threadWorkTable.state,["waiting","done"]),(0,d.inArray)(h.threadWorkTable.id,r)))}async function K(e,t,a,r,n,l=!0){let o=await s.database.transaction(async o=>{let[s]=await o.select().from(h.threadTable).where((0,d.eq)(h.threadTable.id,e));s||(0,b.publicError)("No such thread.");let u=await o.select().from(h.threadWorkTable).where((0,d.eq)(h.threadWorkTable.threadId,e)).orderBy(h.threadWorkTable.createdAt),c=u.filter(e=>"external"===e.state),T=n?[c.find(e=>e.id===n)??(0,b.publicError)("That question is no longer waiting for an answer.")]:l?function(e,t){let a=t?e.filter(e=>e.caller===t):e;if(new Set(a.map(e=>e.caller)).size<=1)return a;(0,b.publicError)(`Several bots are waiting for an answer: ${a.map(e=>`${e.caller} (replyTo ${e.id}): “${(e.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by naming its bot or by its replyTo.`)}(c,r):[],p=T[0],y=p?.caller??r??s.bot,g=p?u.find(e=>e.id===p.parentId):u.find(e=>e.bot===y&&"running"===e.state)??u.find(e=>e.bot===y&&!Q(e.state)&&"external"!==e.state);for(let e of T)await o.update(h.threadWorkTable).set({state:"done",result:t}).where((0,d.eq)(h.threadWorkTable.id,e.id)),await o.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.messageId,e.id));if(!g){let t=null;if(y!==s.bot){let a=u.findLast(e=>e.bot===s.bot&&!e.parentId&&"cancelled"!==e.state);a?"done"===a.state&&await o.update(h.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(h.threadWorkTable.id,a.id)):a=(await o.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:s.bot,caller:w.ROOM_THURSDAY,state:"waiting"}).returning())[0],t=a.id}g=(await o.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:y,caller:t?s.bot:w.ROOM_THURSDAY,parentId:t,state:"queued"}).returning())[0]}p&&await v(o,{key:`answer:${p.id}`,threadId:e,workId:g.id,speaker:"Thread activity",text:T.length>1?`The next message answers your questions to the user: ${T.map(e=>`“${e.result??""}”`).join(", ")}`:`The next message answers your question to the user: “${p.result??""}”`});let m=crypto.randomUUID();return await v(o,{key:m,threadId:e,workId:g.id,speaker:a,text:t,visible:!0}),p&&!await f(o,e,y)&&await Y(o,e,y),await o.update(h.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.eq)(h.threadWorkTable.state,"paused"))),await o.update(h.threadTable).set({status:"running",generation:i.sql`${h.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(h.threadTable.id,e)),await o.update(h.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(h.threadRelayTable.threadId,e),(0,d.inArray)(h.threadRelayTable.kind,["interrupted","report"]))),{key:m,to:y,answered:p?{bot:p.caller,question:T.map(e=>e.result??"").join(" · ")}:null}});return z(),o}async function P(e){await s.database.transaction(async t=>{await t.update(h.threadWorkTable).set({state:"cancelled",generation:i.sql`${h.threadWorkTable.generation} + 1`}).where((0,d.and)((0,d.eq)(h.threadWorkTable.threadId,e),(0,d.inArray)(h.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,d.eq)(h.threadRelayTable.threadId,e))}),z()}async function J(e,t){let[a]=await s.database.select({bot:h.threadTable.bot}).from(h.threadTable).where((0,d.eq)(h.threadTable.id,e)),r=await s.database.select().from(h.threadMessageTable).where((0,d.and)((0,d.eq)(h.threadMessageTable.threadId,e),(0,d.or)((0,d.eq)(h.threadMessageTable.bot,t),a?.bot===t?i.sql`${h.threadMessageTable.bot} is null AND ${h.threadMessageTable.parent} is null`:void 0))).orderBy(h.threadMessageTable.seq),n=r.findLastIndex(e=>e.compact);return(n>0?[r[0],...r.slice(n)]:r).map(e=>({role:e.role,content:e.content}))}async function X(e){e.length&&(await s.database.update(h.threadRelayTable).set({accepted:!0}).where((0,d.inArray)(h.threadRelayTable.id,e)),z())}e.s(["acceptRoomRelays",0,X,"appendRoomMessage",0,k,"cancelRoom",0,P,"claimRoomWork",0,_,"consumeRoomInbox",0,E,"finishRoomWork",0,C,"joinRoom",0,N,"listParticipantTranscript",0,J,"listRoomReceipts",0,y,"listRoomWork",0,I,"lowerRoomContextBudget",0,W,"messageKey",0,V,"noteRoomBreak",0,m,"pauseRoom",0,j,"resumeRoom",0,F,"roomBoard",0,U,"roomContextBudget",0,q,"sendRoomMessage",0,S,"settleRoom",0,H,"tellRoom",0,K]),a()}catch(e){a(e)}},!1),5509,e=>e.a(async(t,a)=>{try{var r=e.i(336763),d=e.i(396918),n=e.i(533102),i=e.i(232347),l=e.i(139886),o=e.i(333925),s=e.i(876393),h=e.i(220376),u=e.i(51083),b=e.i(64774),c=e.i(951056),T=e.i(811592),w=e.i(600690),p=t([s,T]);[s,T]=p.then?(await p)():p;let F=()=>i.appEvents.emit({type:"threads"}),Y={id:h.threadTable.id,bot:h.threadTable.bot,label:h.threadTable.label,request:h.threadTable.request,status:h.threadTable.status,outcome:h.threadTable.outcome,pending:h.threadTable.pending,seen:h.threadTable.seen,routineId:h.threadTable.routineId,startedBy:h.threadTable.startedBy,inputTokens:h.threadTable.inputTokens,outputTokens:h.threadTable.outputTokens,contextTokens:h.threadTable.contextTokens,contextBudget:h.threadTable.contextBudget,createdAt:h.threadTable.createdAt,updatedAt:h.threadTable.updatedAt};async function f(e){let{opening:t,...a}=e,r=await s.database.transaction(async e=>{let[r]=await e.insert(h.threadTable).values({id:crypto.randomUUID(),status:"running",...a}).returning();return await e.insert(h.threadMessageTable).values({threadId:r.id,seq:0,bot:null,parent:null,role:"user",content:t,compact:!1,note:!1}),await e.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:r.id,bot:r.bot,caller:w.ROOM_THURSDAY,state:"queued"}),r});return F(),r}async function y(e,t){let[a]=await s.database.update(h.threadTable).set({...t,updatedAt:new Date}).where((0,r.eq)(h.threadTable.id,e)).returning({routineId:h.threadTable.routineId});F(),a?.routineId&&("status"in t||"outcome"in t)&&i.appEvents.emit({type:"routines"})}async function g(e){0!==e.length&&(await s.database.transaction(async t=>{await t.update(h.threadTable).set({seen:!0}).where((0,r.inArray)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,r.inArray)(h.threadRelayTable.threadId,e))}),F())}async function m(){let e=s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])),t=await s.database.update(h.threadWorkTable).set({state:"cancelled"}).where((0,r.and)((0,r.notInArray)(h.threadWorkTable.state,["done","cancelled"]),(0,r.inArray)(h.threadWorkTable.threadId,e))).returning({id:h.threadWorkTable.id}),a=await s.database.update(h.threadTable).set({pending:null}).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.isNotNull)(h.threadTable.pending))).returning({id:h.threadTable.id});return(t.length||a.length)&&F(),{closed:t.length,cleared:a.length}}async function k(e,t,a=null){(t.input||t.output||null!==a)&&(await s.database.update(h.threadTable).set({inputTokens:n.sql`${h.threadTable.inputTokens} + ${t.input}`,outputTokens:n.sql`${h.threadTable.outputTokens} + ${t.output}`,cacheReadTokens:n.sql`${h.threadTable.cacheReadTokens} + ${t.cacheRead}`,cacheWriteTokens:n.sql`${h.threadTable.cacheWriteTokens} + ${t.cacheWrite}`,...null===a?{}:{contextTokens:a.tokens,contextBudget:a.budget}}).where((0,r.eq)(h.threadTable.id,e)),F())}async function I(e){let[t]=await s.database.select(Y).from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));if(!t)return null;let[a]=await U([t],()=>!1);return a?.room??null}async function q(e){let[t]=await s.database.select().from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));return t??null}async function W(){let[e,t,a,n]=await Promise.all([s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["running","waiting"])).orderBy((0,d.desc)(h.threadTable.updatedAt)),s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_FINISHED),s.database.select(Y).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.eq)(h.threadTable.seen,!1))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_UNREAD),s.database.select(Y).from(h.threadTable).where((0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadRelayTable.threadId}).from(h.threadRelayTable).where((0,r.eq)(h.threadRelayTable.accepted,!1)))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_UNREAD)]),i=[...new Map([...e,...t,...a,...n].map(e=>[e.id,e])).values()].sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime());return U(i,e=>{let t;return t=e.status,"running"===t||"waiting"===t})}async function A(){let e=await s.database.select(Y).from(h.threadTable).orderBy(n.sql`case when ${h.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,d.desc)(h.threadTable.updatedAt),(0,d.desc)(h.threadTable.id)).limit(o.THREAD_STATUS_LIMIT);return U(e,e=>"running"===e.status)}async function v(e){return e.length?await s.database.select({id:h.threadTable.id,callId:h.threadTable.callId,label:h.threadTable.label,status:h.threadTable.status,outcome:h.threadTable.outcome}).from(h.threadTable).where((0,r.inArray)(h.threadTable.callId,e)).orderBy(h.threadTable.createdAt):[]}async function R(e,t){let a=(a,n)=>s.database.select({id:h.threadTable.id,owner:h.threadTable.bot,label:h.threadTable.label,status:h.threadTable.status,pending:h.threadTable.pending,updatedAt:h.threadTable.updatedAt}).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,a),t?(0,r.ne)(h.threadTable.id,t):void 0,(0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadWorkTable.threadId}).from(h.threadWorkTable).where((0,r.eq)(h.threadWorkTable.bot,e))))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(n),[n,i]=await Promise.all([a(["running","waiting"],o.BOT_WORK.open),a(["done","cancelled"],o.BOT_WORK.recent)]),l=[...n,...i].map(e=>e.id);if(!l.length)return{open:[],recent:[]};let u=await s.database.select({id:h.threadWorkTable.id,threadId:h.threadWorkTable.threadId,result:h.threadWorkTable.result}).from(h.threadWorkTable).where((0,r.and)((0,r.eq)(h.threadWorkTable.bot,e),(0,r.inArray)(h.threadWorkTable.threadId,l),(0,r.isNotNull)(h.threadWorkTable.result))).orderBy((0,d.desc)(h.threadWorkTable.createdAt)),b=new Map;for(let{id:e,threadId:t,result:a}of u)a?.trim()&&!b.has(t)&&b.set(t,{workId:e,words:a});let c=({pending:e,...t})=>{let a=b.get(t.id);return{...t,workId:a?.workId??null,asking:"waiting"===t.status&&!!e?.messageId,said:a?.words??null,cut:!!a&&a.words.replace(/\s+/g," ").trim().length>o.BOT_WORK.said}};return{open:n.map(c),recent:i.map(c)}}async function D(e,t){if(t.owner===e){let[e]=await s.database.select({request:h.threadTable.request}).from(h.threadTable).where((0,r.eq)(h.threadTable.id,t.id));return e?.request??""}return t.workId?(await s.database.select({text:h.threadDeliveryTable.text}).from(h.threadDeliveryTable).where((0,r.eq)(h.threadDeliveryTable.workId,t.workId)).orderBy(h.threadDeliveryTable.id)).map(e=>e.text).join("\n\n"):""}async function x(e){let t=await s.database.delete(h.threadTable).where((0,r.eq)(h.threadTable.id,e)).returning({id:h.threadTable.id});return t.length&&F(),t.length>0}async function O(){return(await s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.eq)(h.threadTable.status,"running"))).map(e=>e.id)}async function $(){return await s.database.select({id:h.threadTable.id,label:h.threadTable.label,status:h.threadTable.status,endedAt:h.threadTable.endedAt,updatedAt:h.threadTable.updatedAt}).from(h.threadTable)}function M(e){let t=new Set;for(let a of e)if(Array.isArray(a))for(let e of a){if("tool-call"!==e.type||e.toolName!==u.TOOL_NAMES.write_file)continue;let a=e.input?.path;"string"==typeof a&&a.trim()&&(t.delete(a.trim()),t.add(a.trim()))}return[...t]}async function S(e){let t=await s.database.select({content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.eq)(h.threadMessageTable.role,"assistant"))).orderBy(h.threadMessageTable.seq);return M(t.map(e=>e.content))}async function _(e){let t=e.trim();if(!t)return null;let a=await q(t);if(a)return a;let r=t.toLowerCase();return(await s.database.select().from(h.threadTable).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.THREAD_LABEL_REACH)).find(e=>e.label.toLowerCase()===r)??null}async function E(e,t,a){await s.database.insert(h.threadMessageTable).values({threadId:e,seq:t,...a,compact:a.compact??!1,note:a.note??!1}).onConflictDoUpdate({target:[h.threadMessageTable.threadId,h.threadMessageTable.seq],set:{role:a.role,content:a.content,compact:a.compact??!1,note:a.note??!1}}),F()}async function N(e,t){t.length&&(await s.database.delete(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.seq,t))),F())}async function U(e,t=()=>!0){if(0===e.length)return[];let a=e.filter(t).map(e=>e.id),d=a.length?await s.database.select().from(h.threadMessageTable).where((0,r.inArray)(h.threadMessageTable.threadId,a)).orderBy(h.threadMessageTable.seq):[],i=e.map(e=>e.id),[l,o,p]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,r.inArray)(h.threadWorkTable.threadId,i)).orderBy(n.sql`${h.threadWorkTable}.rowid`),s.database.select().from(h.threadDeliveryTable).where((0,r.and)((0,r.inArray)(h.threadDeliveryTable.threadId,i),(0,r.eq)(h.threadDeliveryTable.visible,!0))),s.database.select().from(h.threadRelayTable).where((0,r.and)((0,r.inArray)(h.threadRelayTable.threadId,i),(0,r.eq)(h.threadRelayTable.accepted,!1)))]),f=new Map(e.map(e=>[e.id,e.bot])),y=new Map(l.map(e=>[e.id,e.caller])),g=new Map;for(let e of d){let t=g.get(e.threadId)??[];t.push(...function(e,t){if(e.hidden)return[];let a={seq:e.seq,bot:e.bot,parent:e.parent,to:"user"===e.role?e.bot:t,at:e.createdAt},r=t=>`${e.id}-${t}`,d=e.content;if("user"===e.role){if(0===e.seq)return[];let t="string"==typeof d?d:d.flatMap(e=>"text"===e.type&&e.text?[e.text]:[]).join("\n").trim();if(!t)return[];if(e.compact)return[{...a,id:r(0),kind:"note",text:t}];if(e.note){let e=t.endsWith(w.RESUME_CHECK)?t.slice(0,-w.RESUME_CHECK.length).trimEnd():t;return[{...a,id:r(0),kind:"stop",text:e}]}return[{...a,id:r(0),kind:"user",text:(0,c.untagSpeaker)(t),by:(0,c.speakerOf)(t)}]}if("assistant"===e.role){let t=e.content;if("string"==typeof t)return t.trim()?[{...a,id:r(0),kind:"text",text:t.trim()}]:[];let d=[];return t.forEach((t,n)=>{if("text"===t.type){let e=t.text.trim();e&&d.push({...a,id:r(n),kind:"text",text:e});return}if("tool-result"===t.type)return void d.push(L(a,r(n),t));if("tool-call"!==t.type)return;let i=t.input??{};if(t.toolName===u.TOOL_NAMES.send_message){let l;d.push({...a,id:r(n),kind:"ask",callId:t.toolCallId,to:(l=String(i.to??"").trim()).toLowerCase()===w.ROOM_THURSDAY.toLowerCase()?w.ROOM_THURSDAY:l,text:String(i.text??""),question:"question"===i.kind,..."question"===i.kind&&e.bot?{questionId:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...e.bot?{exchange:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...Array.isArray(i.after)&&i.after.length?{after:i.after.map(String)}:{}})}else t.toolName===u.TOOL_NAMES.bash?d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:(0,b.clip)(String(i.command??""),120),note:B(i)}):d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:C(t.toolName,i),note:B(i),path:t.toolName===u.TOOL_NAMES.write_file?P(i,"path")??null:null})}),d}if("tool"===e.role){let t=[];return e.content.forEach((e,d)=>{"tool-result"!==e.type||(e.toolName!==u.TOOL_NAMES.send_message||"error-text"===e.output.type)&&t.push(L(a,r(d),e))}),t}return[]}(e,(e.parent?y.get(e.parent):null)??f.get(e.threadId)??"")),g.set(e.threadId,t)}return e.map(e=>{let a=l.filter(t=>t.threadId===e.id),r=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(a.map(e=>e.bot))].filter(e=>e!==w.ROOM_THURSDAY).map(e=>({bot:e,state:a.filter(t=>t.bot===e).sort((e,t)=>r.indexOf(e.state)-r.indexOf(t.state))[0].state}));return{...function(e,t){let{pending:a,inputTokens:r,outputTokens:d,...n}=e;return{...n,ask:"waiting"===e.status?{question:e.outcome??"",options:a?.options??[],messageId:a?.messageId,bot:a?.bot,refused:a?.refused}:null,tokens:{input:r,output:d},lines:t}}(e,g.get(e.id)??[]),room:{participants:d,questions:a.filter(e=>"external"===e.state).map(e=>({id:e.id,bot:e.caller,text:e.result??"",options:e.options})),deliveries:o.filter(t=>t.threadId===e.id).map(t=>({id:t.key,bot:a.find(e=>e.id===t.workId)?.bot??e.bot,text:t.text,delivered:t.consumed})),relays:p.filter(t=>t.threadId===e.id),exchanges:t(e)?a.map(e=>({id:e.id,bot:e.bot,caller:e.caller,state:e.state,waitsFor:e.waitsFor})):[]}}})}let K=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],P=(e,t)=>{let a=e[t];return"string"==typeof a&&a.trim()?a:null};function B(e){let t=P(e,"description");return t?(0,b.clip)(t,120):null}function C(e,t){let a=t??{};if("object"!=typeof a||Array.isArray(a))return(0,b.clip)(String(t??""),120);if(e===u.TOOL_NAMES.bash)return B(a)??(0,b.clip)(String(a.command??""),120);if(e===u.TOOL_NAMES.tool_call||e===u.TOOL_NAMES.tool_search){let e=Array.isArray(a.tools)?a.tools.map(String).join(", "):String(a.tool??""),t=a.args??null,r=t&&"object"==typeof t?String(a.server??"")===o.STUDIO_SERVER?H(t):JSON.stringify(t):"";return(0,b.clip)([String(a.server??""),e,r].filter(Boolean).join(" "),120)}let r=H(a);return r?(0,b.clip)(r,120):Object.keys(a).length?(0,b.clip)(JSON.stringify(a),120):""}function H(e){for(let t of K){let a=P(e,t);if(a)return a}for(let t of Object.keys(e)){let a=P(e,t);if(a)return a}return""}let J=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,X=" — ";function L(e,t,a){let r=a.toolName===u.TOOL_NAMES.web_search,d=function e(t,a,r=!1){var d;if(null==t)return[];if("string"==typeof t)return j(t,a,r);if("object"!=typeof t)return j(String(t),a,r);switch(t.type){case"text":case"error-text":return j(String(t.value??""),a,r);case"json":case"error-json":return e(t.value,a,r);case"execution-denied":return j("Denied.",a,r);case"content":{if(!Array.isArray(t.value))return[];let e=[];for(let d of t.value){if("text"===d.type&&"string"==typeof d.text){e.push(...j(d.text,a,r));continue}let t=function(e){let t=String(e.mediaType??"");if(!t.startsWith("image/"))return null;let a=e.data;return"string"==typeof a?`data:${t};base64,${a}`:a?.type==="url"&&a.url?a.url:a?.type==="data"&&"string"==typeof a.data?`data:${t};base64,${a.data}`:null}(d);t&&e.push({type:"image",src:t})}return e}}return"string"==typeof t.path&&String(t.mediaType??"").startsWith("image/")?[{type:"text",text:t.path},{type:"image",src:l.queryKey.file(t.path)}]:Array.isArray(t.sources)?t.sources.map(e=>String(e?.title??"")).filter(Boolean).slice(0,a).map(e=>({type:"text",text:e})):"string"==typeof t.stdout?j(t.stdout||String(t.stderr??""),a,r):"string"==typeof t.answer?j(t.answer,a,r):j(r?(d=t,Array.isArray(d)?JSON.stringify(d,null,2):Object.entries(d).map(([e,t])=>"string"==typeof t&&t.includes("\n")?`${e}:
10
+ ${t}`:`${e}: ${JSON.stringify(t,null,2)}`).join("\n")):JSON.stringify(t),a,r)}(a.output,r?o.FULL_RESULT_LINES:5),n=d.flatMap(e=>"text"===e.type?[e.text]:[]),i=r?n.filter(e=>J.test(e)):[],s=(i.length?i:n).slice(0,4);return{...e,id:t,kind:"tool-result",callId:a.toolCallId,name:a.toolName,results:s.map(e=>({type:"text",text:i.length?function(e){let t=e.replace(/\s+/g," ").trim(),a=J.exec(t);if(!a||t.length<=200)return(0,b.clip)(t,200);let r=a[0].trim(),d=t.slice(0,a.index).replace(/[\s—-]+$/,""),n=200-r.length-X.length;return d&&n>1?`${(0,b.clip)(d,n)}${X}${r}`:r}(e):(0,b.clip)(e,200)})),more:n.length>s.length||d.length>n.length||s.some(e=>e.length>200)}}function j(e,t,a=!1){if(a){let a=e.split("\n"),r=a.slice(0,t);a.length>t&&r.push(`… ${a.length-t} more lines`);let d=r.join("\n").trimEnd();return d?[{type:"text",text:d}]:[]}return e.split("\n").map(e=>e.trim()).filter(Boolean).slice(0,t).map(e=>({type:"text",text:e}))}e.s(["addThreadUsage",0,k,"argumentLine",0,C,"closeEndedQuestions",0,m,"deleteMessages",0,N,"deleteThread",0,x,"findThread",0,q,"findThreadRoom",0,I,"insertThread",0,f,"listBotWork",0,R,"listCallJobs",0,v,"listInboxThreads",0,W,"listRunningThreadIds",0,O,"listThreadFolders",0,$,"listThreadOverview",0,A,"listWrittenPaths",0,S,"markSeen",0,g,"readBotAsk",0,D,"resolveThread",0,_,"updateThread",0,y,"upsertMessage",0,E,"writtenPathsIn",0,M]),a()}catch(e){a(e)}},!1),157406,e=>{"use strict";var t=e.i(533102),a=e.i(539774),r=e.i(763369);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,a.is)(e,r.Column)?e:String)}])}];
11
11
 
12
12
  //# sourceMappingURL=_1823_7a._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[175936,e=>{"use strict";let a=e=>e.split("/").map(encodeURIComponent).join("/");e.s(["decodePath",0,e=>e.join("/"),"queryKey",0,{memory:"/api/memory",memoryPage:e=>({url:"/api/memory",query:{offset:e||null}}),mcp:"/api/mcp",mcpServer:e=>({url:"/api/mcp",pathVariable:[e]}),mcpTools:"/api/mcp/tools",skills:"/api/skills",skillNode:(e,a,l)=>({url:"/api/skills",pathVariable:[e,a],query:{path:l}}),bot:"/api/bot",botMemory:"/api/bot/memory",botMemoryFiles:e=>({url:"/api/bot/memory/files",query:{bot:e}}),routines:"/api/routine",threads:"/api/bot/thread",threadHistory:e=>({url:"/api/bot/thread",query:{history:1,before:e}}),thread:e=>({url:"/api/bot/thread",query:{id:e}}),fileNotes:"/api/bot/thread/file",fileNote:(e,a)=>({url:"/api/bot/thread/file",query:{path:e,from:a}}),toolResult:(e,a)=>({url:"/api/bot/tool-result",pathVariable:[e],query:{call:a}}),workspace:"/api/workspace",workspaceFolder:(e,a)=>({url:"/api/workspace",query:{path:e||null,rows:a}}),workspaceFiles:e=>({url:"/api/workspace/files",query:{paths:JSON.stringify(e)}}),artifacts:"/api/artifact",artifactShelf:e=>({url:"/api/artifact",query:{rows:e}}),artifactSet:(e,a)=>({url:"/api/artifact",query:{set:e,rows:a}}),file:e=>`/api/file/${a(e)}`,fileFace:e=>`/api/file/${a(e)}?face`,favicon:e=>`/api/favicon/${encodeURIComponent(e)}`,fileView:e=>`/artifact/${a(e)}`,events:"/api/events",config:"/api/config",callHistory:e=>({url:"/api/thursday/call",query:{before:e}}),thursdaySettings:"/api/thursday/settings",toolCall:"/api/thursday/tool-call",callEnd:"/api/thursday/call/end",signIns:"/api/signins",reach:"/api/reach",textCall:"/api/thursday/text",memoryEdit:"/api/memory/edit",llmModel:"/api/llm-model",automaticModel:"/api/llm-model/automatic",modelCatalog:e=>`/api/llm-model/catalog/${e}`,keyCredits:e=>`/api/llm-model/credits/${e}`,subscriptionUsage:"/api/llm-model/subscription",running:"/api/running",update:"/api/update"}])},554199,e=>{"use strict";let a="currentColor",l=[{id:"system",label:"System",value:a},{id:"slate",label:"Slate",value:"#64748B"},{id:"indigo",label:"Indigo",value:"#6366F1"},{id:"blue",label:"Blue",value:"#3B82F6"},{id:"cyan",label:"Cyan",value:"#06B6D4"},{id:"teal",label:"Teal",value:"#14B8A6"},{id:"green",label:"Green",value:"#22C55E"},{id:"lime",label:"Lime",value:"#84CC16"},{id:"amber",label:"Amber",value:"#F59E0B"},{id:"orange",label:"Orange",value:"#F97316"},{id:"red",label:"Red",value:"#EF4444"},{id:"pink",label:"Pink",value:"#EC4899"},{id:"violet",label:"Violet",value:"#8B5CF6"},{id:"fuchsia",label:"Fuchsia",value:"#D946EF"},{id:"rose",label:"Rose",value:"#F43F5E"},{id:"sky",label:"Sky",value:"#0EA5E9"},{id:"emerald",label:"Emerald",value:"#10B981"},{id:"yellow",label:"Yellow",value:"#EAB308"},{id:"stone",label:"Stone",value:"#78716C"}],t=Object.fromEntries(l.map(e=>[e.id,e.value])),i=l.filter(e=>e.value!==a).map(e=>e.value),s=[t.amber,t.red],n={[t.cyan]:"#009dbb",[t.teal]:"#00a190",[t.green]:"#00a640",[t.lime]:"#5ca100",[t.amber]:"#d07b00",[t.orange]:"#ec6700",[t.sky]:"#0098dc",[t.emerald]:"#00a46d",[t.yellow]:"#bb8600"},r={rainbow:{label:"Rainbow",look:"flow",colors:[0,45,90,140,190,240,290,330,360].map(e=>`oklch(0.77 0.16 ${e})`)},duo:{label:"Duo",look:"duo",colors:["#818CF8","#F472B6"]},aurora:{label:"Aurora",look:"aurora",edge:"dark",colors:["#1a2f73","#2c56c9","#34d399","#22d3ee","#a7f3d0"]},"aurora-pink":{label:"Pink aurora",look:"aurora",edge:"dark",colors:["#3a1478","#7c3aed","#f472b6","#e879f9","#fbcfe8"]}},o=Object.keys(r);e.s(["MARK_INK",0,t,"MARK_PAINTS",0,r,"MARK_PAINT_IDS",0,o,"MARK_SHAPES",0,["blob","poly","squircle","heart"],"MARK_SYSTEM",0,a,"markInk",0,(e,a)=>a?e:n[e]??e,"randomMarkFill",0,function(){let e=[...i.filter(e=>!s.includes(e)).map(e=>({color:e})),...o.map(e=>({paint:e}))];return e[Math.floor(Math.random()*e.length)]}])},22676,e=>e.a(async(a,l)=>{try{var t=e.i(875225),i=e.i(349129),s=e.i(518899),n=e.i(687388),r=e.i(528790),o=e.i(613240),d=e.i(911757),c=e.i(378884),m=e.i(340698),u=e.i(134344),p=a([r,c,m]);async function b(){let e=function(e){if(!e)return null;try{let a=JSON.parse(e);return a&&"object"==typeof a&&!Array.isArray(a)?a:null}catch{return null}}(await (0,m.readConfig)(u.THURSDAY_KEYS.settings)),a=d.LiveSettingsSchema.parse((0,d.migrateLiveSettings)(e));return e?a:{...a,readSkills:await g()}}async function g(){return(await (0,m.readConfig)(u.THURSDAY_KEYS.wasSkills))?.trim()==="on"}async function f(e,a){return(await r.database.update(o.callTable).set({endedAt:new Date,...a?{endedReason:a.reason,seconds:a.seconds??null}:{}}).where((0,t.and)((0,t.eq)(o.callTable.id,e),(0,t.isNull)(o.callTable.endedAt))).returning({id:o.callTable.id})).length>0}async function h(e,a){for(let l of a)await r.database.insert(o.callMessageTable).values({callId:e,...l,fragments:l.fragments??null}).onConflictDoUpdate({target:[o.callMessageTable.callId,o.callMessageTable.id],set:{text:l.text,role:l.role,tool:l.tool??null,fragments:l.fragments??null}})}async function T(e){let[a]=await r.database.select({seq:s.sql`max(${o.callMessageTable.seq})`}).from(o.callMessageTable).where((0,t.eq)(o.callMessageTable.callId,e));return a?.seq==null?0:Number(a.seq)+1}async function y(e,a){await r.database.insert(o.callThoughtTable).values({callId:e,...a}).onConflictDoNothing()}async function k(e,a){let l=await r.database.select({callId:o.callMessageTable.callId,startedAt:o.callTable.startedAt,role:o.callMessageTable.role,tool:o.callMessageTable.tool,text:o.callMessageTable.text,seq:o.callMessageTable.seq}).from(o.callMessageTable).innerJoin(o.callTable,(0,t.eq)(o.callMessageTable.callId,o.callTable.id)).where(a?(0,t.ne)(o.callMessageTable.callId,a):void 0).orderBy((0,i.desc)(o.callTable.startedAt),(0,i.desc)(o.callMessageTable.seq)).limit(e),s=new Map;for(let e of l){let a=s.get(e.callId)??{callId:e.callId,startedAt:e.startedAt,turns:[]};a.turns.push({role:e.role,tool:e.tool,text:e.text,seq:e.seq}),s.set(e.callId,a)}return[...s.values()].reverse().map(e=>({...e,turns:e.turns.reverse()}))}async function v(){return(await r.database.select({id:o.callTable.id}).from(o.callTable).where((0,t.isNull)(o.callTable.endedAt)).limit(1)).length>0}async function w(e){let a=e.limit??n.CALL_HISTORY_PAGE,l=await r.database.select({id:o.callTable.id,provider:o.callTable.provider,model:o.callTable.model,backendModel:o.callTable.backendModel,startedAt:o.callTable.startedAt,endedAt:o.callTable.endedAt,endedReason:o.callTable.endedReason,seconds:o.callTable.seconds}).from(o.callTable).innerJoin(o.callMessageTable,(0,t.eq)(o.callMessageTable.callId,o.callTable.id)).where(e.before?(0,t.lt)(o.callTable.startedAt,e.before):void 0).groupBy(o.callTable.id).orderBy((0,i.desc)(o.callTable.startedAt)).limit(a);if(0===l.length)return[];let s=await r.database.select({callId:o.callMessageTable.callId,id:o.callMessageTable.id,role:o.callMessageTable.role,tool:o.callMessageTable.tool,text:o.callMessageTable.text,seq:o.callMessageTable.seq,fragments:o.callMessageTable.fragments,at:o.callMessageTable.at}).from(o.callMessageTable).where((0,t.inArray)(o.callMessageTable.callId,l.map(e=>e.id))).orderBy((0,i.asc)(o.callMessageTable.callId),(0,i.asc)(o.callMessageTable.seq)),d=new Map;for(let e of s){let{callId:a,...l}=e,t=d.get(a);t?t.push(l):d.set(a,[l])}let m=await (0,c.listCallJobs)(l.map(e=>e.id));return l.map(e=>({...e,turns:d.get(e.id)??[],jobs:m.filter(a=>a.callId===e.id).map(e=>({id:e.id,label:e.label,status:e.status,outcome:e.outcome}))}))}[r,c,m]=p.then?(await p)():p,e.s(["endCall",0,f,"isAnyCallLive",0,v,"listCallHistory",0,w,"listRecentTurns",0,k,"nextTurnSeq",0,T,"readLiveSettings",0,b,"saveThought",0,y,"saveTurns",0,h]),l()}catch(e){l(e)}},!1),134344,e=>{"use strict";var a=e.i(907855),l=e.i(175936),t=e.i(264079),i=e.i(629668),s=e.i(904309);let n=a.object({place:a.string().max(120).regex(/^[^\n\r]*$/).nullable(),weather:a.object({code:a.number().int().min(0).max(99),temperature:a.number(),low:a.number(),high:a.number(),sunrise:a.string().regex(/^\d{2}:\d{2}$/),sunset:a.string().regex(/^\d{2}:\d{2}$/),gusts:a.number().min(0).nullish()}).nullable()}),r=[{id:"chatgpt",...t.TEXT_MODEL_PROVIDERS.chatgpt},{id:"openai",...t.TEXT_MODEL_PROVIDERS.openai}],o=a.object({id:a.string().min(1),text:a.string(),said:a.boolean(),pictures:a.array(a.string()).optional()}),d="note",c=e=>e.type===`data-${d}`?e.data:null;a.object({enabled:a.boolean(),phrase:a.string().trim().min(3).max(32)}),a.object({enabled:a.boolean(),combo:a.string().trim().min(1).max(64)}),a.enum(["off","waiting","any"]),a.enum(["center","sides"]),a.object({id:a.string().min(1),role:a.enum(["user","assistant","tool"]),tool:a.string().nullish(),text:a.string(),seq:a.number().int().min(0),fragments:a.array(s.LiveFragmentSchema).nullish()}),a.object({id:a.string().min(1),text:a.string(),seq:a.number().int().min(0)}),e.s(["TEXT_CALL_MOVED",0,"moved","TEXT_CALL_NOTE",0,d,"TEXT_CALL_PROVIDERS",0,r,"TEXT_CALL_REFUSED",0,"refused","THURSDAY_KEYS",0,{settings:"THURSDAY_SETTINGS",wasSkills:"THURSDAY_SKILLS"},"TextCallNoteSchema",0,o,"WhereSchema",0,n,"noteOf",0,c,"notesIn",0,e=>e.flatMap(e=>e.parts.flatMap(e=>{let a=c(e);return a?[a]:[]})),"picturePart",0,e=>({type:"file",mediaType:(0,i.mimeOf)(e),url:l.queryKey.file(e),filename:e.split("/").pop()??e}),"textCallRunsOn",0,e=>r.find(a=>e(a.apiKeyName))?.id??null])},629668,e=>{"use strict";var a=e.i(175936),l=e.i(687388);let t=e=>`text/${e}; charset=utf-8`,i={md:{kind:"markdown",mime:t("markdown")},markdown:{kind:"markdown",mime:t("markdown")},csv:{kind:"csv",mime:t("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:t("plain")},log:{kind:"text",mime:t("plain")},html:{kind:"frame",mime:t("html")},htm:{kind:"frame",mime:t("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},docx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},xlsx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},pptx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"},css:{kind:"none",mime:t("css")},js:{kind:"none",mime:t("javascript")},woff2:{kind:"none",mime:"font/woff2"}},s=e=>e.split(".").pop()?.toLowerCase()??"",n=e=>i[s(e)]?.kind??"none",r=new Set(["node_modules","__pycache__"]),o=new Set(["css","js","woff2"]),d=Object.keys(i).filter(e=>!o.has(e)),c=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${d.join("|")})\b`,"giu"),m=`${l.PATHS.workspace}/`,u=a.queryKey.file("");function p(e){let a=function(e){if(!e.startsWith(u))return e;let a=e.slice(u.length);try{return decodeURIComponent(a)}catch{return a}}(e.trim()),l=a.indexOf(m);return l>=0?a.slice(l+m.length)||null:a.startsWith("/")||/^[A-Za-z]:/.test(a)||a.split("/").includes("..")?null:a||null}let b=e=>e.startsWith(`${l.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(s(e));e.s(["extensionOf",0,s,"isListedFile",0,e=>!e.startsWith(".")&&!o.has(s(e)),"isListedFolder",0,e=>!e.startsWith(".")&&!r.has(e),"isPicture",0,e=>"image"===n(e)&&"svg"!==s(e),"leadFirst",0,function(e){let a=e.findIndex(b);return a>0?[e[a],...e.filter((e,l)=>l!==a)]:e},"mimeOf",0,e=>i[s(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let a=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," ").replace(/\b[a-z][\w+.-]+:(?=\/)/gi," "),l=new Set,t="";for(let[e]of a.matchAll(c)){let a=!e.includes("/"),i=function(e){let a=p(e);if(!a)return null;let[l,...t]=a.split("/");return t.length&&l.includes(".")?null:a}(a?t+e:e);a||(t=i?.slice(0,i.lastIndexOf("/")+1)??""),i&&l.add(i)}return[...l].slice(0,12)},"viewKindOf",0,n,"workspaceRelative",0,p])},260338,e=>{"use strict";var a=e.i(518899),l=e.i(844988),t=e.i(156325);e.s(["count",0,function(e){return a.sql`count(${e||a.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return a.sql`max(${e})`.mapWith((0,l.is)(e,t.Column)?e:String)}])}];
1
+ module.exports=[175936,e=>{"use strict";let a=e=>e.split("/").map(encodeURIComponent).join("/");e.s(["decodePath",0,e=>e.join("/"),"queryKey",0,{memory:"/api/memory",memoryPage:e=>({url:"/api/memory",query:{offset:e||null}}),mcp:"/api/mcp",mcpServer:e=>({url:"/api/mcp",pathVariable:[e]}),mcpTools:"/api/mcp/tools",skills:"/api/skills",skillNode:(e,a,l)=>({url:"/api/skills",pathVariable:[e,a],query:{path:l}}),bot:"/api/bot",botMemory:"/api/bot/memory",botMemoryFiles:e=>({url:"/api/bot/memory/files",query:{bot:e}}),routines:"/api/routine",threads:"/api/bot/thread",threadHistory:(e,a)=>({url:"/api/bot/thread",query:{history:1,before:e,q:a||void 0}}),thread:e=>({url:"/api/bot/thread",query:{id:e}}),fileNotes:"/api/bot/thread/file",fileNote:(e,a)=>({url:"/api/bot/thread/file",query:{path:e,from:a}}),toolResult:(e,a)=>({url:"/api/bot/tool-result",pathVariable:[e],query:{call:a}}),workspace:"/api/workspace",workspaceFolder:(e,a)=>({url:"/api/workspace",query:{path:e||null,rows:a}}),workspaceFiles:e=>({url:"/api/workspace/files",query:{paths:JSON.stringify(e)}}),artifacts:"/api/artifact",artifactShelf:e=>({url:"/api/artifact",query:{rows:e}}),artifactSet:(e,a)=>({url:"/api/artifact",query:{set:e,rows:a}}),file:e=>`/api/file/${a(e)}`,fileFace:e=>`/api/file/${a(e)}?face`,favicon:e=>`/api/favicon/${encodeURIComponent(e)}`,fileView:e=>`/artifact/${a(e)}`,events:"/api/events",config:"/api/config",callHistory:e=>({url:"/api/thursday/call",query:{before:e}}),thursdaySettings:"/api/thursday/settings",toolCall:"/api/thursday/tool-call",callEnd:"/api/thursday/call/end",signIns:"/api/signins",reach:"/api/reach",textCall:"/api/thursday/text",memoryEdit:"/api/memory/edit",llmModel:"/api/llm-model",automaticModel:"/api/llm-model/automatic",modelCatalog:e=>`/api/llm-model/catalog/${e}`,keyCredits:e=>`/api/llm-model/credits/${e}`,subscriptionUsage:"/api/llm-model/subscription",running:"/api/running",update:"/api/update"}])},554199,e=>{"use strict";let a="currentColor",l=[{id:"system",label:"System",value:a},{id:"slate",label:"Slate",value:"#64748B"},{id:"indigo",label:"Indigo",value:"#6366F1"},{id:"blue",label:"Blue",value:"#3B82F6"},{id:"cyan",label:"Cyan",value:"#06B6D4"},{id:"teal",label:"Teal",value:"#14B8A6"},{id:"green",label:"Green",value:"#22C55E"},{id:"lime",label:"Lime",value:"#84CC16"},{id:"amber",label:"Amber",value:"#F59E0B"},{id:"orange",label:"Orange",value:"#F97316"},{id:"red",label:"Red",value:"#EF4444"},{id:"pink",label:"Pink",value:"#EC4899"},{id:"violet",label:"Violet",value:"#8B5CF6"},{id:"fuchsia",label:"Fuchsia",value:"#D946EF"},{id:"rose",label:"Rose",value:"#F43F5E"},{id:"sky",label:"Sky",value:"#0EA5E9"},{id:"emerald",label:"Emerald",value:"#10B981"},{id:"yellow",label:"Yellow",value:"#EAB308"},{id:"stone",label:"Stone",value:"#78716C"}],t=Object.fromEntries(l.map(e=>[e.id,e.value])),i=l.filter(e=>e.value!==a).map(e=>e.value),s=[t.amber,t.red],n={[t.cyan]:"#009dbb",[t.teal]:"#00a190",[t.green]:"#00a640",[t.lime]:"#5ca100",[t.amber]:"#d07b00",[t.orange]:"#ec6700",[t.sky]:"#0098dc",[t.emerald]:"#00a46d",[t.yellow]:"#bb8600"},r={rainbow:{label:"Rainbow",look:"flow",colors:[0,45,90,140,190,240,290,330,360].map(e=>`oklch(0.77 0.16 ${e})`)},duo:{label:"Duo",look:"duo",colors:["#818CF8","#F472B6"]},aurora:{label:"Aurora",look:"aurora",edge:"dark",colors:["#1a2f73","#2c56c9","#34d399","#22d3ee","#a7f3d0"]},"aurora-pink":{label:"Pink aurora",look:"aurora",edge:"dark",colors:["#3a1478","#7c3aed","#f472b6","#e879f9","#fbcfe8"]}},o=Object.keys(r);e.s(["MARK_INK",0,t,"MARK_PAINTS",0,r,"MARK_PAINT_IDS",0,o,"MARK_SHAPES",0,["blob","poly","squircle","heart"],"MARK_SYSTEM",0,a,"markInk",0,(e,a)=>a?e:n[e]??e,"randomMarkFill",0,function(){let e=[...i.filter(e=>!s.includes(e)).map(e=>({color:e})),...o.map(e=>({paint:e}))];return e[Math.floor(Math.random()*e.length)]}])},22676,e=>e.a(async(a,l)=>{try{var t=e.i(875225),i=e.i(349129),s=e.i(518899),n=e.i(687388),r=e.i(528790),o=e.i(613240),d=e.i(911757),c=e.i(378884),m=e.i(340698),u=e.i(134344),p=a([r,c,m]);async function b(){let e=function(e){if(!e)return null;try{let a=JSON.parse(e);return a&&"object"==typeof a&&!Array.isArray(a)?a:null}catch{return null}}(await (0,m.readConfig)(u.THURSDAY_KEYS.settings)),a=d.LiveSettingsSchema.parse((0,d.migrateLiveSettings)(e));return e?a:{...a,readSkills:await g()}}async function g(){return(await (0,m.readConfig)(u.THURSDAY_KEYS.wasSkills))?.trim()==="on"}async function f(e,a){return(await r.database.update(o.callTable).set({endedAt:new Date,...a?{endedReason:a.reason,seconds:a.seconds??null}:{}}).where((0,t.and)((0,t.eq)(o.callTable.id,e),(0,t.isNull)(o.callTable.endedAt))).returning({id:o.callTable.id})).length>0}async function h(e,a){for(let l of a)await r.database.insert(o.callMessageTable).values({callId:e,...l,fragments:l.fragments??null}).onConflictDoUpdate({target:[o.callMessageTable.callId,o.callMessageTable.id],set:{text:l.text,role:l.role,tool:l.tool??null,fragments:l.fragments??null}})}async function T(e){let[a]=await r.database.select({seq:s.sql`max(${o.callMessageTable.seq})`}).from(o.callMessageTable).where((0,t.eq)(o.callMessageTable.callId,e));return a?.seq==null?0:Number(a.seq)+1}async function y(e,a){await r.database.insert(o.callThoughtTable).values({callId:e,...a}).onConflictDoNothing()}async function k(e,a){let l=await r.database.select({callId:o.callMessageTable.callId,startedAt:o.callTable.startedAt,role:o.callMessageTable.role,tool:o.callMessageTable.tool,text:o.callMessageTable.text,seq:o.callMessageTable.seq}).from(o.callMessageTable).innerJoin(o.callTable,(0,t.eq)(o.callMessageTable.callId,o.callTable.id)).where(a?(0,t.ne)(o.callMessageTable.callId,a):void 0).orderBy((0,i.desc)(o.callTable.startedAt),(0,i.desc)(o.callMessageTable.seq)).limit(e),s=new Map;for(let e of l){let a=s.get(e.callId)??{callId:e.callId,startedAt:e.startedAt,turns:[]};a.turns.push({role:e.role,tool:e.tool,text:e.text,seq:e.seq}),s.set(e.callId,a)}return[...s.values()].reverse().map(e=>({...e,turns:e.turns.reverse()}))}async function v(){return(await r.database.select({id:o.callTable.id}).from(o.callTable).where((0,t.isNull)(o.callTable.endedAt)).limit(1)).length>0}async function w(e){let a=e.limit??n.CALL_HISTORY_PAGE,l=await r.database.select({id:o.callTable.id,provider:o.callTable.provider,model:o.callTable.model,backendModel:o.callTable.backendModel,startedAt:o.callTable.startedAt,endedAt:o.callTable.endedAt,endedReason:o.callTable.endedReason,seconds:o.callTable.seconds}).from(o.callTable).innerJoin(o.callMessageTable,(0,t.eq)(o.callMessageTable.callId,o.callTable.id)).where(e.before?(0,t.lt)(o.callTable.startedAt,e.before):void 0).groupBy(o.callTable.id).orderBy((0,i.desc)(o.callTable.startedAt)).limit(a);if(0===l.length)return[];let s=await r.database.select({callId:o.callMessageTable.callId,id:o.callMessageTable.id,role:o.callMessageTable.role,tool:o.callMessageTable.tool,text:o.callMessageTable.text,seq:o.callMessageTable.seq,fragments:o.callMessageTable.fragments,at:o.callMessageTable.at}).from(o.callMessageTable).where((0,t.inArray)(o.callMessageTable.callId,l.map(e=>e.id))).orderBy((0,i.asc)(o.callMessageTable.callId),(0,i.asc)(o.callMessageTable.seq)),d=new Map;for(let e of s){let{callId:a,...l}=e,t=d.get(a);t?t.push(l):d.set(a,[l])}let m=await (0,c.listCallJobs)(l.map(e=>e.id));return l.map(e=>({...e,turns:d.get(e.id)??[],jobs:m.filter(a=>a.callId===e.id).map(e=>({id:e.id,label:e.label,status:e.status,outcome:e.outcome}))}))}[r,c,m]=p.then?(await p)():p,e.s(["endCall",0,f,"isAnyCallLive",0,v,"listCallHistory",0,w,"listRecentTurns",0,k,"nextTurnSeq",0,T,"readLiveSettings",0,b,"saveThought",0,y,"saveTurns",0,h]),l()}catch(e){l(e)}},!1),134344,e=>{"use strict";var a=e.i(907855),l=e.i(175936),t=e.i(264079),i=e.i(629668),s=e.i(904309);let n=a.object({place:a.string().max(120).regex(/^[^\n\r]*$/).nullable(),weather:a.object({code:a.number().int().min(0).max(99),temperature:a.number(),low:a.number(),high:a.number(),sunrise:a.string().regex(/^\d{2}:\d{2}$/),sunset:a.string().regex(/^\d{2}:\d{2}$/),gusts:a.number().min(0).nullish()}).nullable()}),r=[{id:"chatgpt",...t.TEXT_MODEL_PROVIDERS.chatgpt},{id:"openai",...t.TEXT_MODEL_PROVIDERS.openai}],o=a.object({id:a.string().min(1),text:a.string(),said:a.boolean(),pictures:a.array(a.string()).optional()}),d="note",c=e=>e.type===`data-${d}`?e.data:null;a.object({enabled:a.boolean(),phrase:a.string().trim().min(3).max(32)}),a.object({enabled:a.boolean(),combo:a.string().trim().min(1).max(64)}),a.enum(["off","waiting","any"]),a.enum(["center","sides"]),a.object({id:a.string().min(1),role:a.enum(["user","assistant","tool"]),tool:a.string().nullish(),text:a.string(),seq:a.number().int().min(0),fragments:a.array(s.LiveFragmentSchema).nullish()}),a.object({id:a.string().min(1),text:a.string(),seq:a.number().int().min(0)}),e.s(["TEXT_CALL_MOVED",0,"moved","TEXT_CALL_NOTE",0,d,"TEXT_CALL_PROVIDERS",0,r,"TEXT_CALL_REFUSED",0,"refused","THURSDAY_KEYS",0,{settings:"THURSDAY_SETTINGS",wasSkills:"THURSDAY_SKILLS"},"TextCallNoteSchema",0,o,"WhereSchema",0,n,"noteOf",0,c,"notesIn",0,e=>e.flatMap(e=>e.parts.flatMap(e=>{let a=c(e);return a?[a]:[]})),"picturePart",0,e=>({type:"file",mediaType:(0,i.mimeOf)(e),url:l.queryKey.file(e),filename:e.split("/").pop()??e}),"textCallRunsOn",0,e=>r.find(a=>e(a.apiKeyName))?.id??null])},629668,e=>{"use strict";var a=e.i(175936),l=e.i(687388);let t=e=>`text/${e}; charset=utf-8`,i={md:{kind:"markdown",mime:t("markdown")},markdown:{kind:"markdown",mime:t("markdown")},csv:{kind:"csv",mime:t("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:t("plain")},log:{kind:"text",mime:t("plain")},html:{kind:"frame",mime:t("html")},htm:{kind:"frame",mime:t("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},docx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},xlsx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},pptx:{kind:"none",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"},css:{kind:"none",mime:t("css")},js:{kind:"none",mime:t("javascript")},woff2:{kind:"none",mime:"font/woff2"}},s=e=>e.split(".").pop()?.toLowerCase()??"",n=e=>i[s(e)]?.kind??"none",r=new Set(["node_modules","__pycache__"]),o=new Set(["css","js","woff2"]),d=Object.keys(i).filter(e=>!o.has(e)),c=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${d.join("|")})\b`,"giu"),m=`${l.PATHS.workspace}/`,u=a.queryKey.file("");function p(e){let a=function(e){if(!e.startsWith(u))return e;let a=e.slice(u.length);try{return decodeURIComponent(a)}catch{return a}}(e.trim()),l=a.indexOf(m);return l>=0?a.slice(l+m.length)||null:a.startsWith("/")||/^[A-Za-z]:/.test(a)||a.split("/").includes("..")?null:a||null}let b=e=>e.startsWith(`${l.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(s(e));e.s(["extensionOf",0,s,"isListedFile",0,e=>!e.startsWith(".")&&!o.has(s(e)),"isListedFolder",0,e=>!e.startsWith(".")&&!r.has(e),"isPicture",0,e=>"image"===n(e)&&"svg"!==s(e),"leadFirst",0,function(e){let a=e.findIndex(b);return a>0?[e[a],...e.filter((e,l)=>l!==a)]:e},"mimeOf",0,e=>i[s(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let a=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," ").replace(/\b[a-z][\w+.-]+:(?=\/)/gi," "),l=new Set,t="";for(let[e]of a.matchAll(c)){let a=!e.includes("/"),i=function(e){let a=p(e);if(!a)return null;let[l,...t]=a.split("/");return t.length&&l.includes(".")?null:a}(a?t+e:e);a||(t=i?.slice(0,i.lastIndexOf("/")+1)??""),i&&l.add(i)}return[...l].slice(0,12)},"viewKindOf",0,n,"workspaceRelative",0,p])},260338,e=>{"use strict";var a=e.i(518899),l=e.i(844988),t=e.i(156325);e.s(["count",0,function(e){return a.sql`count(${e||a.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return a.sql`max(${e})`.mapWith((0,l.is)(e,t.Column)?e:String)}])}];
2
2
 
3
3
  //# sourceMappingURL=_1f_x75d._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[380690,e=>{"use strict";let t,n,a,r,i,s;var o,u=e.i(687388),l=e.i(850063);let c={threads:!0,bots:!0,routines:!0,memory:!0,mcp:!0,config:!0,reach:!0,signins:!0,files:!0},d=globalThis,m=d.__appEvents??=(t=new Set,{emit(e){for(let n of[...t])try{n(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),h=d.__presence??=(o=u.BROWSER_GONE_MS,n=!1,a=null,r=new Set,i=new Set,s=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return n},track(e){if(e>0){a&&clearTimeout(a),a=null,n||(n=!0,s(i));return}!a&&n&&(a=setTimeout(()=>{a=null,n=!1,s(r)},o))},onGone:e=>(r.add(e),()=>r.delete(e)),onBack:e=>(i.add(e),()=>i.delete(e))}),f=d.__appEventStream??=(0,l.createEventStream)(m,{coalesce:{ms:u.SIGNAL_PACE_MS,keyOf:e=>e.type in c?e.type:null},onWatchers:h.track});e.s(["appEventStream",0,f,"appEvents",0,m,"presence",0,h],380690)},687388,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),n=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,r=`${n}/local.db`,i=`file:${r}`,s=`${n}/.env`,o=".ai-workspace",u={workspace:o,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",signIns:".sign-ins",skills:{default:"skills",custom:`${o}/.agents/skills`,own:".agents/skills",runtime:"runtime",seeds:"seed-skills"}},l="artifact";e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ARTIFACT_SKILL",0,l,"ARTIFACT_VIEW",0,{rows:200,setFiles:120},"BOT_MEMORY_LIMITS",0,{files:20,chars:1e4},"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},participants:8,concurrent:8,turns:120,queuedMessages:200,silenceMs:3e5,overflowShrink:.6,retryMs:1e4,compactFiles:40},"BOT_WORK",0,{open:5,recent:5,said:80,files:2,reads:2,asked:400,readChars:4e3},"BROWSER_CLI",0,{readMs:15e3,loadMs:3e4},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CALL_HISTORY_PAGE",0,10,"CALL_RELAY",0,{quietMs:2e3,perTurn:3,readMs:15e3,chars:600},"CATALOG_MS",0,6e5,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"CHATGPT_USAGE_HIGH",0,80,"COMMON_VALIDATE",0,{name:{max:16},shortDescription:{max:60},description:{max:100},prompt:{max:4e3}},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,n,"DB_FILE_NAME",0,i,"DB_PATH",0,r,"DECK",0,{slides:30,shotsMs:9e4},"ENV_PATH",0,s,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"FAVICON",0,{timeoutMs:4e3,maxBytes:3e5,kept:500,againMs:6e4,pageBytes:65536},"FINISHED_NOTICE",0,{rows:5,shown:1,words:240},"FULL_RESULT_LINES",0,400,"INBOX_FINISHED",0,5,"IS_DEV",0,!1,"JOB_FOLDER_WALK",0,500,"KEY_LOW_CREDIT",0,1,"LIVE_CALL",0,{startupMs:3e4,closeMs:15e3,transcriptGapMs:1500,transcriptSaveMs:500,appendMs:15e3,backendOutputTokens:4096,reasoningCheckMs:5e3,keyCheckMs:5e3,openingHoldMs:3e3},"LOOK",0,{maxBytes:4194304,perRequest:0xc00000},"MAIL_CHECK",0,{backMs:18e5,waitMs:12e4,waitMaxMs:3e5,chars:6e3},"MARKETING_SKILL",0,"marketing","MAX_PINNED_TOOLS",0,10,"MCP_IDLE_MS",0,18e5,"MEMORY_EDIT",0,{maxSteps:20},"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,descriptionChars:100},"PAGE_SIZE",0,50,"PATHS",0,u,"PLAN_CALL",0,{delegationBytes:4096,pictureBytes:262144},"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,botMemory:100,threadStatus:200,routineRequest:300,routineOutcome:200,boardAsk:100},"REACH",0,{pollSeconds:50,retryMs:5e3,idleMs:6e5,messages:40,trimTo:30,oldChars:1e3,files:3,fileBytes:0x2d00000,rateRetries:3,rateWaitMs:3e4,codeDigits:4,held:5,pictures:9,drawMs:6e4,lookMs:2e3,mailFreshMs:1728e5,mailCheckAgainMs:3e4,mailHoldMs:36e5,mailPushAfterMs:1e3,mailIdleMs:24e4,mailDnsMs:5e3,mailIdsKept:200,mailLookMs:3e5},"RECENT_CALL",0,{rows:20,tokens:600},"ROUTINE",0,{tickMs:3e4,max:12,minHours:1,runsShown:5},"SEARCH",0,{sources:3,excerptChars:1200,timeoutMs:3e4},"SEED_KITS_RENAMED",0,{marketer:"writer"},"SIGNAL_PACE_MS",0,150,"SKILLS_FOLDED",0,{design:l,"picture-book":l,"interactive-page":l},"SKILL_FILES",0,{uploadBytes:0x1400000,inlineBytes:524288,unpackedBytes:0x6400000,archiveEntries:1e3},"SKILL_FILES_LISTED",0,50,"STUDIO_SERVER",0,"studio","TEXT_CALL",0,{maxSteps:12,model:"text",autoTurns:10},"THREAD_LABEL_REACH",0,20,"THREAD_STATUS_LIMIT",0,10,"TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"TOOL_SEARCH_SCHEMAS",0,8,"TRAVEL_SKILL",0,"travel","UPDATE",0,{checkMs:864e5,againMs:6e5,timeoutMs:5e3,quietMs:864e5,waitMs:3e5,pollMs:2e3},"WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5},"WORKSPACE_VIEW",0,{rows:200,textMax:524288,autoCloseMs:5e3,elementMax:0x3200000}])},850063,e=>{"use strict";var t=e.i(640911);e.s(["createEventStream",0,function(e,n={}){let a=new TextEncoder,r=n.heartbeatMs??2e4,i=0;return{respond:(s,o)=>{let u=()=>{};return new Response(new ReadableStream({async start(l){let c=!1,d=new Map,m=[],h=e=>{if(!c)try{l.enqueue(a.encode(e))}catch{u()}},f=e=>h(`data: ${JSON.stringify(e)}
1
+ module.exports=[380690,e=>{"use strict";let t,n,a,r,i,s;var o,u=e.i(687388),l=e.i(850063);let c={threads:!0,bots:!0,routines:!0,memory:!0,mcp:!0,config:!0,reach:!0,signins:!0,files:!0},d=globalThis,m=d.__appEvents??=(t=new Set,{emit(e){for(let n of[...t])try{n(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),h=d.__presence??=(o=u.BROWSER_GONE_MS,n=!1,a=null,r=new Set,i=new Set,s=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return n},track(e){if(e>0){a&&clearTimeout(a),a=null,n||(n=!0,s(i));return}!a&&n&&(a=setTimeout(()=>{a=null,n=!1,s(r)},o))},onGone:e=>(r.add(e),()=>r.delete(e)),onBack:e=>(i.add(e),()=>i.delete(e))}),f=d.__appEventStream??=(0,l.createEventStream)(m,{coalesce:{ms:u.SIGNAL_PACE_MS,keyOf:e=>e.type in c?e.type:null},onWatchers:h.track});e.s(["appEventStream",0,f,"appEvents",0,m,"presence",0,h],380690)},687388,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),n=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,r=`${n}/local.db`,i=`file:${r}`,s=`${n}/.env`,o=".ai-workspace",u={workspace:o,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",signIns:".sign-ins",skills:{default:"skills",custom:`${o}/.agents/skills`,own:".agents/skills",runtime:"runtime",seeds:"seed-skills"}},l="artifact";e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ARTIFACT_SKILL",0,l,"ARTIFACT_VIEW",0,{rows:200,setFiles:120},"BOT_MEMORY_LIMITS",0,{files:60,chars:3e3},"BOT_REFLECT",0,{minTools:5,steps:8},"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},participants:8,concurrent:8,turns:120,queuedMessages:200,silenceMs:3e5,overflowShrink:.6,retryMs:1e4,compactFiles:40},"BOT_WORK",0,{open:5,recent:5,said:80,files:2,reads:2,asked:400,readChars:4e3},"BROWSER_CLI",0,{readMs:15e3,loadMs:3e4},"BROWSER_GONE_MS",0,1e4,"BROWSER_IDLE",0,{closeAfterMs:36e5,checkEveryMs:3e5},"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CALL_HISTORY_PAGE",0,10,"CALL_RELAY",0,{quietMs:2e3,perTurn:3,readMs:15e3,chars:600},"CATALOG_MS",0,6e5,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"CHATGPT_USAGE_HIGH",0,80,"COMMON_VALIDATE",0,{name:{max:16},shortDescription:{max:60},description:{max:100},prompt:{max:4e3}},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,n,"DB_FILE_NAME",0,i,"DB_PATH",0,r,"DECK",0,{slides:30,shotsMs:9e4},"ENV_PATH",0,s,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"FAVICON",0,{timeoutMs:4e3,maxBytes:3e5,kept:500,againMs:6e4,pageBytes:65536},"FINISHED_NOTICE",0,{rows:5,shown:1,words:240},"FULL_RESULT_LINES",0,400,"INBOX_FINISHED",0,5,"INBOX_UNREAD",0,20,"IS_DEV",0,!1,"JOB_FOLDER_WALK",0,500,"KEY_LOW_CREDIT",0,1,"LIVE_CALL",0,{startupMs:3e4,closeMs:15e3,transcriptGapMs:1500,transcriptSaveMs:500,appendMs:15e3,backendOutputTokens:4096,reasoningCheckMs:5e3,keyCheckMs:5e3,openingHoldMs:3e3,instructionsTokens:16384},"LOOK",0,{maxBytes:4194304,perRequest:0xc00000},"MAIL_CHECK",0,{backMs:18e5,waitMs:12e4,waitMaxMs:3e5,chars:6e3},"MARKETING_SKILL",0,"marketing","MAX_PINNED_TOOLS",0,10,"MCP_IDLE_MS",0,18e5,"MEMORY_EDIT",0,{maxSteps:20},"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,descriptionChars:100},"PAGE_SIZE",0,50,"PATHS",0,u,"PLAN_CALL",0,{delegationBytes:4096,pictureBytes:262144},"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,botMemory:100,threadStatus:200,routineRequest:300,routineOutcome:200,boardAsk:100},"REACH",0,{pollSeconds:50,retryMs:5e3,idleMs:6e5,messages:40,trimTo:30,oldChars:1e3,files:3,fileBytes:0x2d00000,rateRetries:3,rateWaitMs:3e4,codeDigits:4,held:5,pictures:9,drawMs:6e4,lookMs:2e3,mailFreshMs:1728e5,mailCheckAgainMs:3e4,mailHoldMs:36e5,mailPushAfterMs:1e3,mailIdleMs:24e4,mailDnsMs:5e3,mailIdsKept:200,mailLookMs:3e5},"RECENT_CALL",0,{rows:20,tokens:600},"ROUTINE",0,{tickMs:3e4,max:12,minHours:1,runsShown:5},"SEARCH",0,{sources:3,excerptChars:1200,timeoutMs:3e4},"SEED_KITS_RENAMED",0,{marketer:"writer"},"SIGNAL_PACE_MS",0,150,"SKILLS_FOLDED",0,{design:l,"picture-book":l,"interactive-page":l},"SKILL_FILES",0,{uploadBytes:0x1400000,inlineBytes:524288,unpackedBytes:0x6400000,archiveEntries:1e3},"SKILL_FILES_LISTED",0,50,"STUDIO_SERVER",0,"studio","TEXT_CALL",0,{maxSteps:12,model:"text",autoTurns:10,chunkMs:12e4},"THREAD_LABEL_REACH",0,20,"THREAD_STATUS_LIMIT",0,10,"TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"TOOL_SEARCH_SCHEMAS",0,8,"TRAVEL_SKILL",0,"travel","UPDATE",0,{checkMs:864e5,againMs:6e5,timeoutMs:5e3,quietMs:864e5,waitMs:3e5,pollMs:2e3},"WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5},"WORKSPACE_VIEW",0,{rows:200,textMax:524288,autoCloseMs:5e3,elementMax:0x3200000}])},850063,e=>{"use strict";var t=e.i(640911);e.s(["createEventStream",0,function(e,n={}){let a=new TextEncoder,r=n.heartbeatMs??2e4,i=0;return{respond:(s,o)=>{let u=()=>{};return new Response(new ReadableStream({async start(l){let c=!1,d=new Map,m=[],h=e=>{if(!c)try{l.enqueue(a.encode(e))}catch{u()}},f=e=>h(`data: ${JSON.stringify(e)}
2
2
 
3
3
  `),p=e=>{let t={last:null},a=setTimeout(()=>{d.delete(e),!c&&t.last&&(f(t.last),p(e))},n.coalesce?.ms);d.set(e,{timer:a,wait:t})},g=e=>{if(c)return;let t=n.coalesce?.keyOf(e)??null;if(null===t)return f(e);let a=d.get(t);if(a){a.wait.last=e;return}f(e),p(t)},M=e.subscribe(e=>m?m.push(e):g(e)),y=setInterval(()=>h(": ping\n\n"),r);i+=1,n.onWatchers?.(i),u=()=>{if(!c){for(let e of(c=!0,i-=1,n.onWatchers?.(i),M(),clearInterval(y),d.values()))clearTimeout(e.timer);try{l.close()}catch{}}},s.addEventListener("abort",u);try{for(let e of await o?.()??[])f(e)}catch(e){t.logger.error("event stream opening failed",e),u();return}let S=m;for(let e of(m=null,S))g(e)},cancel(){u()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return i}}}])},41444,e=>{"use strict";function t(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-1).trimEnd()}…`:n}let n=["\\*","_"].flatMap(e=>{let t="_"===e?"\\w_":e;return[3,2,1].map(n=>{let a=e.repeat(n);return RegExp(`(?<![${t}])${a}(?![\\s${e}])(.+?)(?<![\\s${e}])${a}(?![${t}])`,"g")})}),a=e=>n.reduce((e,t)=>e.replace(t,"$1"),e),r=/\[([^\]\n]+)\]\(([^)\s]+)\)/g;e.s(["MARKDOWN_LINK",0,r,"PromiseChain",0,()=>{let e=Promise.resolve();return t=>{let n=e.then(()=>t());return e=n.catch(()=>{}),n}},"captionText",0,function(e){let t=[],n=e.replace(/```[\s\S]*?```/g," ").replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1").replace(r,(e,n,r)=>(t.push(`[${a(n.replace(/`/g,""))}](${r})`),`\uE000${t.length-1}\uE000`)),i=[];for(let e of n.split("\n")){let t=e.trim();t&&(/^\|?[\s:|-]+\|[\s:|-]*$|^[-*_]{3,}$/.test(t)||(/\|.*\|/.test(t)&&(t=t.replace(/^\||\|$/g,"").split("|").map(e=>e.trim()).filter(Boolean).join(" · ")),t=a(t.replace(/^#{1,6}\s+/,"").replace(/^>\s?/,"").replace(/^[-*+]\s+/,"• ").replace(/`([^`]*)`/g,"$1")).replace(/\s+/g," "),i.push(t)))}return i.join("\n").replace(/\uE000(\d+)\uE000/g,(e,n)=>t[Number(n)]??"")},"clip",0,t,"errorToString",0,function(e){if(e instanceof Error)return e.message;if("object"!=typeof e||null===e)return String(e);let{message:n,error:a}=e;if("string"==typeof n&&n)return n;if("string"==typeof a&&a)return a;let r=a?.message;if("string"==typeof r&&r)return r;try{return t(JSON.stringify(e),300)}catch{return`${e.constructor?.name??"Object"} thrown without a message`}},"formatBytes",0,function(e){if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],n=e/1024,a=0;for(;n>=1024&&a<t.length-1;)n/=1024,a+=1;return`${n.toFixed(+(n<10))} ${t[a]}`},"hostOf",0,function(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return null}},"plainText",0,function(e){return e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]*)`/g,"$1").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/^\s{0,3}(#{1,6}\s+|[-*+]\s+|\d+\.\s+|>\s?)/gm,"").replace(/[^\n]+/g,a).replace(/^\s*\|?[\s:|-]+\|\s*$/gm," ").replace(/\|/g," ").replace(/\s+/g," ").trim()},"slug",0,function(e){return e.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)}])},89929,609730,277988,e=>{"use strict";var t=e.i(874321);function n(e,n){return(0,t.constructFrom)(n||e,e)}e.s(["toDate",0,n],609730),e.s(["getTimezoneOffsetInMilliseconds",0,function(e){let t=n(e),a=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return a.setUTCFullYear(t.getFullYear()),e-a}],89929),e.s(["normalizeDates",0,function(e,...n){let a=t.constructFrom.bind(null,e||n.find(e=>"object"==typeof e));return n.map(a)}],277988)},874321,438220,e=>{"use strict";let t=Symbol.for("constructDateFrom");e.s(["constructFromSymbol",0,t,"millisecondsInDay",0,864e5,"millisecondsInMinute",0,6e4,"millisecondsInWeek",0,6048e5,"minutesInDay",0,1440,"minutesInMonth",0,43200,"minutesInYear",0,525600],438220),e.s(["constructFrom",0,function(e,n){return"function"==typeof e?e(n):e&&"object"==typeof e&&t in e?e[t](n):e instanceof Date?new e.constructor(n):new Date(n)}],874321)},599447,e=>{"use strict";var t=e.i(874321);e.s(["constructNow",0,function(e){return(0,t.constructFrom)(e,Date.now())}])},881237,662001,e=>{"use strict";var t;let n={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function a(e){return (t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}let r={date:a({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:a({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:a({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},i={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function s(e){return(t,n)=>{let a;if("formatting"===(n?.context?String(n.context):"standalone")&&e.formattingValues){let t=e.defaultFormattingWidth||e.defaultWidth,r=n?.width?String(n.width):t;a=e.formattingValues[r]||e.formattingValues[t]}else{let t=e.defaultWidth,r=n?.width?String(n.width):e.defaultWidth;a=e.values[r]||e.values[t]}return a[e.argumentCallback?e.argumentCallback(t):t]}}let o={ordinalNumber:(e,t)=>{let n=Number(e),a=n%100;if(a>20||a<10)switch(a%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:s({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:s({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:s({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:s({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})};function u(e){return(t,n={})=>{let a,r=n.width,i=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],s=t.match(i);if(!s)return null;let o=s[0],u=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(u)?function(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}(u,e=>e.test(o)):function(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}(u,e=>e.test(o));return a=e.valueCallback?e.valueCallback(l):l,{value:a=n.valueCallback?n.valueCallback(a):a,rest:t.slice(o.length)}}}let l={ordinalNumber:(t={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},(e,n={})=>{let a=e.match(t.matchPattern);if(!a)return null;let r=a[0],i=e.match(t.parsePattern);if(!i)return null;let s=t.valueCallback?t.valueCallback(i[0]):i[0];return{value:s=n.valueCallback?n.valueCallback(s):s,rest:e.slice(r.length)}}),era:u({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:u({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:u({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:u({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:u({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})};e.s(["defaultLocale",0,{code:"en-US",formatDistance:(e,t,a)=>{let r,i=n[e];if(r="string"==typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),a?.addSuffix)if(a.comparison&&a.comparison>0)return"in "+r;else return r+" ago";return r},formatLong:r,formatRelative:(e,t,n,a)=>i[e],localize:o,match:l,options:{weekStartsOn:0,firstWeekContainsDate:1}}],881237);let c={};e.s(["getDefaultOptions",0,function(){return c}],662001)},551047,e=>{"use strict";var t=e.i(862061),n=e.i(907855);function a(e){return t._isoDateTime(n.ZodISODateTime,e)}function r(e){return t._isoDate(n.ZodISODate,e)}function i(e){return t._isoTime(n.ZodISOTime,e)}function s(e){return t._isoDuration(n.ZodISODuration,e)}e.s(["date",0,r,"datetime",0,a,"duration",0,s,"time",0,i],691681),e.i(691681),e.s(["ZodISODate",()=>n.ZodISODate,"ZodISODateTime",()=>n.ZodISODateTime,"ZodISODuration",()=>n.ZodISODuration,"ZodISOTime",()=>n.ZodISOTime,"date",0,r,"datetime",0,a,"duration",0,s,"time",0,i],551047)}];
4
4
 
@@ -1,9 +1,9 @@
1
- module.exports=[102473,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1_04mcf._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(232347)))},130022,e=>{e.v(s=>Promise.all(["server/chunks/config_ts_1g4sz5o._.js"].map(s=>e.l(s))).then(()=>s(333925)))},7313,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__13hng6h._.js","server/chunks/_0uet1h6._.js"].map(s=>e.l(s))).then(()=>s(876393)))},266965,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__01jpmcj._.js","server/chunks/_10qam6o._.js"].map(s=>e.l(s))).then(()=>s(946280)))},171772,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1ndi14y._.js"].map(s=>e.l(s))).then(()=>s(973589)))},242792,e=>{e.v(s=>Promise.all(["server/chunks/_07mczew._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/[root-of-the-server]__17yv6lg._.js","server/chunks/_07ftwpg._.js","server/chunks/_1ihge52._.js","server/chunks/features_0uy40ze._.js","server/chunks/_0mirg2-._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_07pkeds._.js","server/chunks/_1skgy7b._.js"].map(s=>e.l(s))).then(()=>s(799791)))},327784,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__17m7ag9._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/features_1cb9luv._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_07pkeds._.js","server/chunks/_1skgy7b._.js","server/chunks/_0cm67bo._.js","server/chunks/_0gifi_2._.js","server/chunks/_07ftwpg._.js","server/chunks/_1823_7a._.js","server/chunks/_0oyz9x0._.js","server/chunks/_0_y-ab-._.js","server/chunks/node_modules_zod_v4_1u-rl3b._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_0c-s0ei._.js","server/chunks/_16zct7w._.js","server/chunks/[root-of-the-server]__0qabtlx._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(49002)))},193435,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js","server/chunks/features_1cb9luv._.js","server/chunks/_1823_7a._.js","server/chunks/_07ftwpg._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0hin38_._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/[root-of-the-server]__0mmynvy._.js","server/chunks/_0mirg2-._.js"].map(s=>e.l(s))).then(()=>s(5509)))},68704,e=>{e.v(s=>Promise.all(["server/chunks/_1x2xiyw._.js","server/chunks/_0bcg3vg._.js","server/chunks/[root-of-the-server]__0d-dfqm._.js","server/chunks/_07pkeds._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0uet1h6._.js","server/chunks/_0mirg2-._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/_07ftwpg._.js"].map(s=>e.l(s))).then(()=>s(514025)))},566024,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1onvx8x._.js","server/chunks/_07ftwpg._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/_0hin38_._.js","server/chunks/_0mirg2-._.js"].map(s=>e.l(s))).then(()=>s(1363)))},975158,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0a2v56f._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/_0cm67bo._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_07ftwpg._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_07pkeds._.js","server/chunks/_0c-s0ei._.js","server/chunks/features_1cb9luv._.js","server/chunks/_04s1gb9._.js","server/chunks/_0co609c._.js","server/chunks/_1823_7a._.js","server/chunks/_0_y-ab-._.js","server/chunks/_1skgy7b._.js","server/chunks/_0oyz9x0._.js","server/chunks/node_modules_zod_v4_1u-rl3b._.js","server/chunks/_0gifi_2._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_032k4m6._.js"].map(s=>e.l(s))).then(()=>s(312485)))},569286,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0mh1tgg._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/features_0uy40ze._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_0mirg2-._.js","server/chunks/_07pkeds._.js","server/chunks/_0cm67bo._.js","server/chunks/_0gifi_2._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_16zct7w._.js","server/chunks/_0_y-ab-._.js","server/chunks/_1skgy7b._.js","server/chunks/_1823_7a._.js","server/chunks/_07ftwpg._.js","server/chunks/_0c-s0ei._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/[root-of-the-server]__0qabtlx._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(733184)))},741548,e=>{e.v(s=>Promise.all(["server/chunks/_0ynjnhl._.js","server/chunks/[root-of-the-server]__1jcu_e9._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js"].map(s=>e.l(s))).then(()=>s(379651)))},917723,e=>{e.v(s=>Promise.all(["server/chunks/_07mczew._.js","server/chunks/features_1cb9luv._.js","server/chunks/_07ftwpg._.js","server/chunks/_07pkeds._.js","server/chunks/[root-of-the-server]__0rqmdxt._.js","server/chunks/_1823_7a._.js","server/chunks/_0mirg2-._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0hin38_._.js","server/chunks/_083t_nr._.js"].map(s=>e.l(s))).then(()=>s(520401)))},51833,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js","server/chunks/[root-of-the-server]__1jcu_e9._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(871096)))},482438,e=>{"use strict";async function s(){let{APP_DIR:s,APP_NAME:r,DATA_DIR:_,DB_PATH:t,ENV_PATH:n,HISTORY_KEEP:o,WORKSPACE_KEEP:a}=await e.A(130022),{logger:c}=await e.A(415568),{migrateDatabase:h,NewerDatabase:u}=await e.A(266965);await h().catch(e=>{e instanceof u&&(console.error(` ${e.message}
1
+ module.exports=[102473,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1_04mcf._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(232347)))},130022,e=>{e.v(s=>Promise.all(["server/chunks/config_ts_1g4sz5o._.js"].map(s=>e.l(s))).then(()=>s(333925)))},7313,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__13hng6h._.js","server/chunks/_0uet1h6._.js"].map(s=>e.l(s))).then(()=>s(876393)))},266965,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__01jpmcj._.js","server/chunks/_10qam6o._.js"].map(s=>e.l(s))).then(()=>s(946280)))},171772,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1ndi14y._.js"].map(s=>e.l(s))).then(()=>s(973589)))},242792,e=>{e.v(s=>Promise.all(["server/chunks/_07mczew._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/[root-of-the-server]__17yv6lg._.js","server/chunks/_07ftwpg._.js","server/chunks/_1ihge52._.js","server/chunks/features_0uy40ze._.js","server/chunks/_0mirg2-._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_07pkeds._.js","server/chunks/_1skgy7b._.js"].map(s=>e.l(s))).then(()=>s(799791)))},327784,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__17m7ag9._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/features_1cb9luv._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_07pkeds._.js","server/chunks/_1skgy7b._.js","server/chunks/_0cm67bo._.js","server/chunks/_0gifi_2._.js","server/chunks/_07ftwpg._.js","server/chunks/_1823_7a._.js","server/chunks/_0oyz9x0._.js","server/chunks/_0_y-ab-._.js","server/chunks/node_modules_zod_v4_1u-rl3b._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_0c-s0ei._.js","server/chunks/_16zct7w._.js","server/chunks/[root-of-the-server]__0qabtlx._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(49002)))},193435,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js","server/chunks/features_1cb9luv._.js","server/chunks/_1823_7a._.js","server/chunks/_07ftwpg._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0hin38_._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/[root-of-the-server]__0mmynvy._.js","server/chunks/_0mirg2-._.js"].map(s=>e.l(s))).then(()=>s(5509)))},68704,e=>{e.v(s=>Promise.all(["server/chunks/_1x2xiyw._.js","server/chunks/_0bcg3vg._.js","server/chunks/[root-of-the-server]__0d-dfqm._.js","server/chunks/_07pkeds._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0uet1h6._.js","server/chunks/_0mirg2-._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/_07ftwpg._.js"].map(s=>e.l(s))).then(()=>s(514025)))},566024,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__1onvx8x._.js","server/chunks/_07ftwpg._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/_0hin38_._.js","server/chunks/_0mirg2-._.js"].map(s=>e.l(s))).then(()=>s(1363)))},975158,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0a2v56f._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/features_1cb9luv._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_0oyz9x0._.js","server/chunks/_0co609c._.js","server/chunks/_0cm67bo._.js","server/chunks/_0c-s0ei._.js","server/chunks/_07pkeds._.js","server/chunks/node_modules_zod_v4_1u-rl3b._.js","server/chunks/_1skgy7b._.js","server/chunks/_04s1gb9._.js","server/chunks/_0_y-ab-._.js","server/chunks/_1823_7a._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_07ftwpg._.js","server/chunks/_0gifi_2._.js","server/chunks/_032k4m6._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js"].map(s=>e.l(s))).then(()=>s(312485)))},569286,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0mh1tgg._.js","server/chunks/features_memory_0__61kl._.js","server/chunks/features_0uy40ze._.js","server/chunks/features_bot_1dfrdsb._.js","server/chunks/_0mirg2-._.js","server/chunks/_07pkeds._.js","server/chunks/_0cm67bo._.js","server/chunks/_0gifi_2._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/_16zct7w._.js","server/chunks/_0_y-ab-._.js","server/chunks/_1skgy7b._.js","server/chunks/_1823_7a._.js","server/chunks/_07ftwpg._.js","server/chunks/_0c-s0ei._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/[root-of-the-server]__0qabtlx._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(733184)))},741548,e=>{e.v(s=>Promise.all(["server/chunks/_0ynjnhl._.js","server/chunks/[root-of-the-server]__1jcu_e9._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js"].map(s=>e.l(s))).then(()=>s(379651)))},917723,e=>{e.v(s=>Promise.all(["server/chunks/_07mczew._.js","server/chunks/features_1cb9luv._.js","server/chunks/_07ftwpg._.js","server/chunks/_07pkeds._.js","server/chunks/[root-of-the-server]__0rqmdxt._.js","server/chunks/_1823_7a._.js","server/chunks/_0mirg2-._.js","server/chunks/node_modules_zod_v4_0uctlhw._.js","server/chunks/lib_logger_ts_07e65t5._.js","server/chunks/_0hin38_._.js","server/chunks/_083t_nr._.js"].map(s=>e.l(s))).then(()=>s(520401)))},51833,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js","server/chunks/[root-of-the-server]__1jcu_e9._.js","server/chunks/features_workspace_workspace_ts_1iyjroj._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(871096)))},482438,e=>{"use strict";async function s(){let{APP_DIR:s,BROWSER_IDLE:r,DATA_DIR:_,DB_PATH:t,ENV_PATH:o,HISTORY_KEEP:n,WORKSPACE_KEEP:a}=await e.A(130022),{logger:c}=await e.A(415568),{migrateDatabase:h,NewerDatabase:u}=await e.A(266965);await h().catch(e=>{e instanceof u&&(console.error(` ${e.message}
2
2
  Nothing was changed. Start the newer one (npx thursday-agent@latest), or update this one, and it opens as it was.
3
3
  `),process.exit(66)),c.error(`Cannot migrate ${t}`),console.error(` ${e instanceof Error?e.message:e}
4
4
  Starting over gives an empty one. API keys, bots, connectors, calls, threads and memory go with it; the workspace and skills stay.
5
5
  The old ${t} is moved aside as .corrupt-<time> rather than removed, so a file damaged by a crash or a full disk can still be opened.
6
- `),process.exit(65)});let{ENCRYPTION_KEY_NAME:v,encryptionKey:l}=await e.A(109244);try{"made"===l().from&&c.info(`made the key that seals saved secrets, in ${n}`)}catch(e){c.error(`Cannot load ${v}`),console.error(` ${e instanceof Error?e.message:e}
7
- `),process.exit(1)}let{sealStoredSecrets:i}=await e.A(68704);await i().then(({sealed:e,unreadable:s,scrub:r})=>{e&&c.info(`sealed ${e} secret(s) kept in the clear`),"done"===r&&c.info("rewrote the database: no key it held in the clear is left in it"),"pending"===r&&c.warn("the database's log could not be emptied: a key it held in the clear may be left in it until the next start rewrites it"),s.length&&c.warn(`${s.join(", ")} can't be unlocked: sealed with an encryption key this data folder no longer has (${v} in ${n}). Put that .env back from a backup and start the app again to open them, or enter each again — Settings marks them`)}).catch(e=>c.error("seal secrets (the next start tries again)",e));let{ensureRootNotes:k}=await e.A(566024);await k();let{refreshSeedWords:j}=await e.A(242792);await j().then(e=>{e&&c.info(`${e} ready-made bot(s) took their seed's new words`)}).catch(e=>c.error("refresh seed words",e));let{installGuide:d}=await e.A(171772);await d().catch(e=>c.error("install guide",e));let{sweepJobFiles:m,sweepThreads:w}=await e.A(327784);await w();let{closeEndedQuestions:f}=await e.A(193435);await f().then(({closed:e,cleared:s})=>{(e||s)&&c.info(`closed ${e} question(s) on ${s} ended job(s)`)}).catch(e=>c.error("close ended questions",e));let p=()=>void m().catch(e=>c.error("sweep job files",e));p(),setInterval(p,a.sweepEveryMs).unref();let{deleteEndedCalls:g,sweepCalls:b}=await e.A(917723);await b();let{removeFinishedThreads:y}=await e.A(327784),A=()=>void(async()=>{let e=new Date(Date.now()-o.forMs),s=await g(e),r=await y(e);(s||r)&&c.info(`cleared ${s} old call(s) and ${r} old job(s)`)})().catch(e=>c.error("sweep history",e));A(),setInterval(A,o.sweepEveryMs).unref();let{presence:P}=await e.A(102473),{pauseThreads:$}=await e.A(327784),{heldCalls:z}=await e.A(975158);P.onGone(()=>{b(z()).catch(e=>c.error("browser gone",e))});let{startRoutineClock:x}=await e.A(569286);x();let{adoptKeptSessions:I}=await e.A(741548);await I().catch(e=>c.error("adopt kept sessions",e));let{startReach:q}=await e.A(975158);if(q().catch(e=>c.error("start reach",e)),process.env.NEXT_MANUAL_SIG_HANDLE){let{checkpoint:s}=await e.A(7313),r=!1;for(let[e,_]of[["SIGINT",130],["SIGTERM",143],["SIGHUP",129]])process.on(e,()=>{r||(r=!0,c.info(`${e} — parking what was running`),Promise.race([$("The server was shut down while this was running.").catch(e=>c.error("pause threads",e)).then(()=>s()).catch(e=>c.error("checkpoint",e)),new Promise(e=>setTimeout(e,3e3))]).finally(()=>process.exit(_)))})}c.info(`${r} is up — app ${s}, data ${_}`);let{ensureBrowser:E}=await e.A(51833);E().catch(e=>c.debug("browser fetch",e))}e.s(["boot",0,s])},415568,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0ncs9uu._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(938281)))},109244,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__03bjojd._.js"].map(s=>e.l(s))).then(()=>s(685178)))}];
6
+ `),process.exit(65)});let{ENCRYPTION_KEY_NAME:v,encryptionKey:l}=await e.A(109244);try{"made"===l().from&&c.info(`made the key that seals saved secrets, in ${o}`)}catch(e){c.error(`Cannot load ${v}`),console.error(` ${e instanceof Error?e.message:e}
7
+ `),process.exit(1)}let{sealStoredSecrets:i}=await e.A(68704);await i().then(({sealed:e,unreadable:s,scrub:r})=>{e&&c.info(`sealed ${e} secret(s) kept in the clear`),"done"===r&&c.info("rewrote the database: no key it held in the clear is left in it"),"pending"===r&&c.warn("the database's log could not be emptied: a key it held in the clear may be left in it until the next start rewrites it"),s.length&&c.warn(`${s.join(", ")} can't be unlocked: sealed with an encryption key this data folder no longer has (${v} in ${o}). Put that .env back from a backup and start the app again to open them, or enter each again — Settings marks them`)}).catch(e=>c.error("seal secrets (the next start tries again)",e));let{ensureRootNotes:k}=await e.A(566024);await k();let{refreshSeedWords:j}=await e.A(242792);await j().then(e=>{e&&c.info(`${e} ready-made bot(s) took their seed's new words`)}).catch(e=>c.error("refresh seed words",e));let{installGuide:d}=await e.A(171772);await d().catch(e=>c.error("install guide",e));let{closeIdleBrowsers:m,sweepJobFiles:w,sweepThreads:f}=await e.A(327784);await f();let{closeEndedQuestions:p}=await e.A(193435);await p().then(({closed:e,cleared:s})=>{(e||s)&&c.info(`closed ${e} question(s) on ${s} ended job(s)`)}).catch(e=>c.error("close ended questions",e));let g=()=>void w().catch(e=>c.error("sweep job files",e));g(),setInterval(g,a.sweepEveryMs).unref();let b=()=>void m().catch(e=>c.error("close idle browsers",e));b(),setInterval(b,r.checkEveryMs).unref();let{deleteEndedCalls:y,sweepCalls:A}=await e.A(917723);await A();let{removeFinishedThreads:P}=await e.A(327784),$=()=>void(async()=>{let e=new Date(Date.now()-n.forMs),s=await y(e),r=await P(e);(s||r)&&c.info(`cleared ${s} old call(s) and ${r} old job(s)`)})().catch(e=>c.error("sweep history",e));$(),setInterval($,n.sweepEveryMs).unref();let{presence:z}=await e.A(102473),{pauseThreads:x}=await e.A(327784),{heldCalls:I}=await e.A(975158);z.onGone(()=>{A(I()).catch(e=>c.error("browser gone",e))});let{startRoutineClock:E}=await e.A(569286);E();let{adoptKeptSessions:q}=await e.A(741548);await q().catch(e=>c.error("adopt kept sessions",e));let{startReach:S}=await e.A(975158);if(S().catch(e=>c.error("start reach",e)),process.env.NEXT_MANUAL_SIG_HANDLE){let{checkpoint:s}=await e.A(7313),{closeHiddenBrowsers:r}=await e.A(51833),_=!1;for(let[e,t]of[["SIGINT",130],["SIGTERM",143],["SIGHUP",129]])process.on(e,()=>{if(_)return;_=!0,c.info(`${e} — parking what was running`);let o=x("The server was shut down while this was running.").catch(e=>c.error("pause threads",e)).then(()=>s()).catch(e=>c.error("checkpoint",e)),n=r().catch(e=>c.error("close browsers",e)),a=new Promise(e=>setTimeout(e,3e3));Promise.race([Promise.all([o,n]),a]).finally(()=>process.exit(t))})}c.info(`up — app ${s}, data ${_}`);let{ensureBrowser:M}=await e.A(51833);M().catch(e=>c.debug("browser fetch",e))}e.s(["boot",0,s])},415568,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__0ncs9uu._.js","server/chunks/lib_logger_ts_07e65t5._.js"].map(s=>e.l(s))).then(()=>s(938281)))},109244,e=>{e.v(s=>Promise.all(["server/chunks/[root-of-the-server]__03bjojd._.js"].map(s=>e.l(s))).then(()=>s(685178)))}];
8
8
 
9
9
  //# sourceMappingURL=_1q42187._.js.map
@@ -1,5 +1,5 @@
1
1
  module.exports=[232347,e=>{"use strict";let t,i,a,l,r,s;var o,n=e.i(333925),d=e.i(938281);let m={threads:!0,bots:!0,routines:!0,memory:!0,mcp:!0,config:!0,reach:!0,signins:!0,files:!0},c=globalThis,g=c.__appEvents??=(t=new Set,{emit(e){for(let i of[...t])try{i(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),p=c.__presence??=(o=n.BROWSER_GONE_MS,i=!1,a=null,l=new Set,r=new Set,s=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return i},track(e){if(e>0){a&&clearTimeout(a),a=null,i||(i=!0,s(r));return}!a&&i&&(a=setTimeout(()=>{a=null,i=!1,s(l)},o))},onGone:e=>(l.add(e),()=>l.delete(e)),onBack:e=>(r.add(e),()=>r.delete(e))});c.__appEventStream??=function(e,t={}){let i=new TextEncoder,a=t.heartbeatMs??2e4,l=0;return{respond:(r,s)=>{let o=()=>{};return new Response(new ReadableStream({async start(n){let m=!1,c=new Map,g=[],p=e=>{if(!m)try{n.enqueue(i.encode(e))}catch{o()}},u=e=>p(`data: ${JSON.stringify(e)}
2
2
 
3
- `),h=e=>{let i={last:null},a=setTimeout(()=>{c.delete(e),!m&&i.last&&(u(i.last),h(e))},t.coalesce?.ms);c.set(e,{timer:a,wait:i})},b=e=>{if(m)return;let i=t.coalesce?.keyOf(e)??null;if(null===i)return u(e);let a=c.get(i);if(a){a.wait.last=e;return}u(e),h(i)},f=e.subscribe(e=>g?g.push(e):b(e)),_=setInterval(()=>p(": ping\n\n"),a);l+=1,t.onWatchers?.(l),o=()=>{if(!m){for(let e of(m=!0,l-=1,t.onWatchers?.(l),f(),clearInterval(_),c.values()))clearTimeout(e.timer);try{n.close()}catch{}}},r.addEventListener("abort",o);try{for(let e of await s?.()??[])u(e)}catch(e){d.logger.error("event stream opening failed",e),o();return}let E=g;for(let e of(g=null,E))b(e)},cancel(){o()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return l}}}(g,{coalesce:{ms:n.SIGNAL_PACE_MS,keyOf:e=>e.type in m?e.type:null},onWatchers:p.track}),e.s(["appEvents",0,g,"presence",0,p],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),i=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,l=`${i}/local.db`,r=`file:${l}`,s=`${i}/.env`,o=".ai-workspace",n={workspace:o,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",signIns:".sign-ins",skills:{default:"skills",custom:`${o}/.agents/skills`,own:".agents/skills",runtime:"runtime",seeds:"seed-skills"}},d="artifact";e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ARTIFACT_SKILL",0,d,"BOT_MEMORY_LIMITS",0,{files:20,chars:1e4},"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},participants:8,concurrent:8,turns:120,queuedMessages:200,silenceMs:3e5,overflowShrink:.6,retryMs:1e4,compactFiles:40},"BOT_WORK",0,{open:5,recent:5,said:80,files:2,reads:2,asked:400,readChars:4e3},"BROWSER_CLI",0,{readMs:15e3,loadMs:3e4},"BROWSER_GONE_MS",0,1e4,"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CALL_RELAY",0,{quietMs:2e3,perTurn:3,readMs:15e3,chars:600},"CATALOG_MS",0,6e5,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"COMMON_VALIDATE",0,{name:{max:16},shortDescription:{max:60},description:{max:100},prompt:{max:4e3}},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,i,"DB_FILE_NAME",0,r,"DB_PATH",0,l,"DECK",0,{slides:30,shotsMs:9e4},"ENV_PATH",0,s,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"FINISHED_NOTICE",0,{rows:5,shown:1,words:240},"FULL_RESULT_LINES",0,400,"GIVEN_FILES",0,{dir:"inbox",maxBytes:0x1900000,perMessage:8},"HISTORY_KEEP",0,{forMs:7776e6,sweepEveryMs:216e5},"INBOX_FINISHED",0,5,"IS_DEV",0,!1,"JOB_FOLDER_WALK",0,500,"LIVE_CALL",0,{startupMs:3e4,closeMs:15e3,transcriptGapMs:1500,transcriptSaveMs:500,appendMs:15e3,backendOutputTokens:4096,reasoningCheckMs:5e3,keyCheckMs:5e3,openingHoldMs:3e3},"LOOK",0,{maxBytes:4194304,perRequest:0xc00000},"MAIL_CHECK",0,{backMs:18e5,waitMs:12e4,waitMaxMs:3e5,chars:6e3},"MARKETING_SKILL",0,"marketing","MAX_PINNED_TOOLS",0,10,"MCP_IDLE_MS",0,18e5,"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,descriptionChars:100},"PATHS",0,n,"PLAN_CALL",0,{delegationBytes:4096,pictureBytes:262144},"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,botMemory:100,threadStatus:200,routineRequest:300,routineOutcome:200,boardAsk:100},"REACH",0,{pollSeconds:50,retryMs:5e3,idleMs:6e5,messages:40,trimTo:30,oldChars:1e3,files:3,fileBytes:0x2d00000,rateRetries:3,rateWaitMs:3e4,codeDigits:4,held:5,pictures:9,drawMs:6e4,lookMs:2e3,mailFreshMs:1728e5,mailCheckAgainMs:3e4,mailHoldMs:36e5,mailPushAfterMs:1e3,mailIdleMs:24e4,mailDnsMs:5e3,mailIdsKept:200,mailLookMs:3e5},"RECENT_CALL",0,{rows:20,tokens:600},"ROUTINE",0,{tickMs:3e4,max:12,minHours:1,runsShown:5},"SEARCH",0,{sources:3,excerptChars:1200,timeoutMs:3e4},"SEED_KITS_RENAMED",0,{marketer:"writer"},"SIGNAL_PACE_MS",0,150,"SKILLS_FOLDED",0,{design:d,"picture-book":d,"interactive-page":d},"SKILL_FILES_LISTED",0,50,"STUDIO_SERVER",0,"studio","TEXT_CALL",0,{maxSteps:12,model:"text",autoTurns:10},"THREAD_LABEL_REACH",0,20,"THREAD_STATUS_LIMIT",0,10,"TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"TOOL_SEARCH_SCHEMAS",0,8,"TRAVEL_SKILL",0,"travel","WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5}])},864328,e=>{"use strict";var t=e.i(749906),i=e.i(333925);let a=t.enum(["openai","chatgpt","anthropic","google","xai","vercel-ai-gateway","openrouter","mistral","deepseek","groq","cerebras","togetherai","fireworks","deepinfra","cohere"]),l=t.object({provider:a,model:t.string().trim().min(1,"Model name is required").max(80)}),r=["none","minimal","low","medium","high","xhigh"],s=t.enum(r),o=["vercel-ai-gateway","openrouter"],n=e=>o.includes(e),d=t.enum(["openai","chatgpt","google","xai","vercel-ai-gateway"]),m=t.object({provider:d,model:t.string().trim().min(1,"Model name is required").max(120)}),c={openai:{label:"OpenAI",apiKeyName:"OPENAI_API_KEY",models:{image:[{id:"gpt-image-1-mini",label:"GPT Image 1 mini",tier:"small"},{id:"gpt-image-2.5-flare",label:"GPT Image 2.5 Flare",tier:"mid"},{id:"gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[],speech:[{id:"tts-1",label:"TTS 1",tier:"small"},{id:"gpt-4o-mini-tts",label:"4o mini TTS",tier:"mid"},{id:"tts-1-hd",label:"TTS 1 HD",tier:"large"}],transcription:[{id:"gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"gpt-transcribe",label:"GPT Transcribe",tier:"mid"}]}},chatgpt:{label:"GPT Subscription",apiKeyName:"CHATGPT_SIGN_IN",models:{image:[{id:"gpt-image-2",label:"GPT Image 2",tier:"mid"}],video:[],speech:[],transcription:[]}},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",models:{image:[{id:"gemini-3.1-flash-lite-image",label:"3.1 Flash Lite Image",tier:"small"},{id:"gemini-3.1-flash-image",label:"3.1 Flash Image",tier:"mid"},{id:"gemini-3-pro-image",label:"3 Pro Image",tier:"large"}],video:[{id:"veo-3.1-lite-generate-preview",label:"Veo 3.1 Lite",tier:"small"},{id:"veo-3.1-fast-generate-preview",label:"Veo 3.1 Fast",tier:"mid"},{id:"veo-3.1-generate-preview",label:"Veo 3.1",tier:"large"}],speech:[{id:"gemini-2.5-flash-preview-tts",label:"2.5 Flash TTS",tier:"small"},{id:"gemini-3.1-flash-tts-preview",label:"3.1 Flash TTS",tier:"mid"},{id:"gemini-2.5-pro-preview-tts",label:"2.5 Pro TTS",tier:"large"}],transcription:[{id:"gemini-3.5-transcribe",label:"3.5 Transcribe",tier:"mid"}]}},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",models:{image:[{id:"grok-imagine-image",label:"Grok Imagine",tier:"small"},{id:"grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"mid"}],video:[{id:"grok-imagine-video",label:"Grok Imagine Video",tier:"small"},{id:"grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"}],speech:[{id:"grok-tts",label:"Grok TTS",tier:"mid"}],transcription:[{id:"grok-stt",label:"Grok STT",tier:"mid"}]}},"vercel-ai-gateway":{label:"Vercel AI Gateway",apiKeyName:"AI_GATEWAY_API_KEY",models:{image:[{id:"bytedance/seedream-5.0-lite",label:"Seedream 5.0 Lite",tier:"small"},{id:"bfl/flux-2-klein-9b",label:"FLUX 2 Klein 9B",tier:"small"},{id:"spacexai/grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"small"},{id:"bfl/flux-2-pro",label:"FLUX 2 Pro",tier:"mid"},{id:"bytedance/seedream-5.0-pro",label:"Seedream 5.0 Pro",tier:"mid"},{id:"recraft/recraft-v4.1",label:"Recraft V4.1",tier:"mid"},{id:"openai/gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[{id:"bytedance/seedance-2.0-mini",label:"Seedance 2.0 Mini",tier:"small"},{id:"google/veo-3.1-lite-generate-001",label:"Veo 3.1 Lite",tier:"small"},{id:"alibaba/wan-v2.6-t2v",label:"Wan 2.6",tier:"small"},{id:"google/veo-3.1-fast-generate-001",label:"Veo 3.1 Fast",tier:"mid"},{id:"bytedance/seedance-2.5",label:"Seedance 2.5",tier:"mid"},{id:"spacexai/grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"},{id:"klingai/kling-v3.0-t2v",label:"Kling 3.0",tier:"large"},{id:"google/veo-3.1-generate-001",label:"Veo 3.1",tier:"large"}],speech:[{id:"fish-audio/s1",label:"Fish Audio S1",tier:"small"},{id:"openai/tts-1",label:"OpenAI TTS 1",tier:"small"},{id:"spacexai/grok-tts",label:"Grok TTS",tier:"mid"},{id:"fish-audio/s2.1-pro",label:"Fish Audio S2.1 Pro",tier:"mid"},{id:"openai/tts-1-hd",label:"OpenAI TTS 1 HD",tier:"large"}],transcription:[{id:"spacexai/grok-stt",label:"Grok STT",tier:"small"},{id:"fish-audio/transcribe-1",label:"Fish Transcribe 1",tier:"small"},{id:"openai/gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"openai/gpt-4o-transcribe",label:"4o Transcribe",tier:"mid"},{id:"google/gemini-3.5-transcribe",label:"Gemini 3.5 Transcribe",tier:"mid"}]}}},g=Object.keys(c).map(e=>({id:e,...c[e]})),p={openai:{label:"OpenAI",apiKeyName:"OPENAI_API_KEY",keysAt:"https://platform.openai.com/api-keys",keyLooks:"sk-…",defaultTier:"small",suggestModels:[{id:"gpt-6-luna",label:"6 Luna",tier:"small",context:105e4,efforts:["none","low","medium","high","xhigh"]},{id:"gpt-6.1-sol",label:"6.1 Sol",tier:"mid",context:105e4,efforts:["low","medium","high","xhigh"]},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:105e4,efforts:["low","medium","high","xhigh"]}]},chatgpt:{label:"GPT Subscription",apiKeyName:"CHATGPT_SIGN_IN",signIn:!0,suggestModels:[{id:"gpt-6-luna",label:"6 Luna",tier:"small",context:272e3,efforts:["none","low","medium","high","xhigh"]},{id:"gpt-6.1-sol",label:"6.1 Sol",tier:"mid",context:272e3,efforts:["low","medium","high","xhigh"]},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:272e3,efforts:["low","medium","high","xhigh"]}]},anthropic:{label:"Claude",apiKeyName:"ANTHROPIC_API_KEY",keysAt:"https://platform.claude.com/settings/keys",keyLooks:"sk-ant-…",suggestModels:[{id:"claude-haiku-4-5",label:"Haiku 4.5",tier:"small",efforts:["none","minimal","low","medium","high","xhigh"]},{id:"claude-sonnet-5-5",label:"Sonnet 5.5",tier:"mid",context:1e6,efforts:["none","low","medium","high","xhigh"]},{id:"claude-opus-5-5",label:"Opus 5.5",tier:"large",context:1e6,efforts:["low","medium","high","xhigh"]},{id:"claude-fable-5-1",label:"Fable 5.1",tier:"large",efforts:["none","low","medium","high","xhigh"]}]},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",keysAt:"https://aistudio.google.com/apikey",keyLooks:"AIza…",suggestModels:[{id:"gemini-3.5-flash-lite",label:"3.5 Flash Lite",tier:"small",context:1e6,efforts:["minimal","low","medium","high"]},{id:"gemini-3.8-flash",label:"3.8 Flash",tier:"mid",context:1e6,efforts:["low","medium","high"]}]},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",keysAt:"https://console.x.ai",keyLooks:"xai-…",suggestModels:[{id:"grok-4.7",label:"Grok 4.7",tier:"large",context:5e5,efforts:["none","low","medium","high","xhigh"]}]},"vercel-ai-gateway":{label:"Vercel AI Gateway",apiKeyName:"AI_GATEWAY_API_KEY",keysAt:"https://vercel.com/docs/ai-gateway/authentication-and-byok/authentication",suggestModels:[{id:"zai/glm-5.3-flash",label:"GLM 5.3 Flash",tier:"small"},{id:"google/gemini-3.8-flash",label:"Gemini 3.8 Flash",tier:"small"},{id:"openai/gpt-6-luna",label:"GPT 6 Luna",tier:"small",context:105e4},{id:"zai/glm-5.3",label:"GLM 5.3",tier:"mid"},{id:"spacexai/grok-4.7",label:"Grok 4.7",tier:"mid",context:5e5},{id:"anthropic/claude-sonnet-5.5",label:"Claude Sonnet 5.5",tier:"mid"},{id:"openai/gpt-6.1-sol",label:"GPT 6.1 Sol",tier:"mid",context:105e4},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid"},{id:"anthropic/claude-opus-5.5",label:"Claude Opus 5.5",tier:"large",context:1e6},{id:"openai/gpt-6-astra",label:"GPT 6 Astra",tier:"large",context:105e4}]},openrouter:{label:"OpenRouter",apiKeyName:"OPENROUTER_API_KEY",keysAt:"https://openrouter.ai/settings/keys",keyLooks:"sk-or-…",suggestModels:[{id:"z-ai/glm-5.3-flash",label:"GLM 5.3 Flash",tier:"small",context:1310720},{id:"google/gemini-3.8-flash",label:"Gemini 3.8 Flash",tier:"small",context:1048576},{id:"openai/gpt-6-luna",label:"GPT 6 Luna",tier:"small",context:105e4},{id:"z-ai/glm-5.3",label:"GLM 5.3",tier:"mid",context:1310720},{id:"x-ai/grok-4.7",label:"Grok 4.7",tier:"mid",context:5e5},{id:"anthropic/claude-sonnet-5.5",label:"Claude Sonnet 5.5",tier:"mid",context:1e6},{id:"openai/gpt-6.1-sol",label:"GPT 6.1 Sol",tier:"mid",context:105e4},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid",context:1048576},{id:"anthropic/claude-opus-5.5",label:"Claude Opus 5.5",tier:"large",context:1e6},{id:"openai/gpt-6-astra",label:"GPT 6 Astra",tier:"large",context:105e4}]},mistral:{label:"Mistral",apiKeyName:"MISTRAL_API_KEY",keysAt:"https://console.mistral.ai/api-keys",suggestModels:[{id:"ministral-8b-latest",label:"Ministral 8B",tier:"small",efforts:[]},{id:"mistral-small-latest",label:"Small",tier:"mid",efforts:["none","high"]},{id:"mistral-medium-latest",label:"Medium",tier:"large",efforts:["none","high"]},{id:"mistral-large-latest",label:"Large",tier:"large",efforts:[]}]},deepseek:{label:"DeepSeek",apiKeyName:"DEEPSEEK_API_KEY",keysAt:"https://platform.deepseek.com/api_keys",keyLooks:"sk-…",suggestModels:[{id:"deepseek-flash",label:"V4.1 Flash",tier:"small",context:1e6,efforts:["none","low","high","xhigh"]},{id:"deepseek-v4-pro",label:"V4 Pro",tier:"large",context:1e6,efforts:["none","low","high","xhigh"]}]},groq:{label:"Groq",apiKeyName:"GROQ_API_KEY",keysAt:"https://console.groq.com/keys",keyLooks:"gsk_…",suggestModels:[{id:"openai/gpt-oss-20b",label:"GPT OSS 20B",tier:"small",context:131072,efforts:["low","medium","high"]},{id:"openai/gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:131072,efforts:["low","medium","high"]},{id:"llama-3.3-70b-versatile",label:"Llama 3.3 70B",tier:"mid",context:131072,efforts:[]}]},cerebras:{label:"Cerebras",apiKeyName:"CEREBRAS_API_KEY",keysAt:"https://cloud.cerebras.ai",keyLooks:"csk-…",suggestModels:[{id:"qwen-3.8-27b",label:"Qwen 3.8 27B",tier:"small",context:64e3},{id:"gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:65536}]},togetherai:{label:"Together",apiKeyName:"TOGETHER_AI_API_KEY",keysAt:"https://api.together.ai/settings/api-keys",suggestModels:[{id:"Qwen/Qwen3.5-9B",label:"Qwen 3.5 9B",tier:"small",context:262144},{id:"zai-org/GLM-5.3-Flash",label:"GLM 5.3 Flash",tier:"small",context:1048575},{id:"openai/gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:131072},{id:"deepseek-ai/DeepSeek-V4.1-Flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1e6},{id:"zai-org/GLM-5.3",label:"GLM 5.3",tier:"large",context:1048575},{id:"moonshotai/Kimi-K3",label:"Kimi K3",tier:"large",context:1048576}]},fireworks:{label:"Fireworks",apiKeyName:"FIREWORKS_API_KEY",keysAt:"https://app.fireworks.ai/account/api-keys",keyLooks:"fw_…",suggestModels:[{id:"accounts/fireworks/models/glm-5p3-flash",label:"GLM 5.3 Flash",tier:"small",context:1048576},{id:"accounts/fireworks/models/deepseek-v4p1-flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1048576},{id:"accounts/fireworks/models/minimax-m3",label:"MiniMax M3",tier:"mid",context:512e3},{id:"accounts/fireworks/models/glm-5p3",label:"GLM 5.3",tier:"large",context:1048576},{id:"accounts/fireworks/models/kimi-k3",label:"Kimi K3",tier:"large",context:1048576}]},deepinfra:{label:"DeepInfra",apiKeyName:"DEEPINFRA_API_KEY",keysAt:"https://deepinfra.com/dash/api_keys",suggestModels:[{id:"deepseek-ai/DeepSeek-V4-Flash-0731",label:"DeepSeek V4 Flash",tier:"small",context:1048576},{id:"deepseek-ai/DeepSeek-V4.1-Flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1048576},{id:"zai-org/GLM-5.2",label:"GLM 5.2",tier:"mid",context:1048576},{id:"zai-org/GLM-5.3",label:"GLM 5.3",tier:"large",context:1048576},{id:"moonshotai/Kimi-K3",label:"Kimi K3",tier:"large",context:1048576}]},cohere:{label:"Cohere",apiKeyName:"COHERE_API_KEY",keysAt:"https://dashboard.cohere.com/api-keys",suggestModels:[{id:"command-r7b-12-2024",label:"Command R7B",tier:"small",context:128e3},{id:"command-a-03-2025",label:"Command A",tier:"mid",context:256e3},{id:"command-a-plus-05-2026",label:"Command A+",tier:"large",context:128e3}]}},u=Object.keys(p).map(e=>({id:e,...p[e]}));e.s(["CATALOG_TEXT",0,"language","CATALOG_TOOL_USE",0,"tool-use","EFFORTS",0,r,"MEDIA_MODEL_PROVIDERS",0,c,"MEDIA_MODEL_PROVIDER_LIST",0,g,"TEXT_MODEL_PROVIDERS",0,p,"TEXT_MODEL_PROVIDER_LIST",0,u,"VENDOR_PROVIDERS",0,{anthropic:"anthropic",openai:"openai",google:"google",spacexai:"xai",mistral:"mistral",deepseek:"deepseek",cohere:"cohere",openrouter:"openrouter"},"canMakeKind",0,(e,t)=>(c[e]?.models[t]?.length??0)>0,"compactAtFor",0,e=>e&&e>0?Math.round(e*i.BOT_RUN.compactHeadroom):i.BOT_RUN.compactAt,"contextWindowOf",0,function(e,t,i=[]){if(n(e))return i.find(e=>e.id===t)?.contextWindow??null;let a=p[e].suggestModels;return a.find(e=>e.id===t)?.context??null},"defaultModelOf",0,e=>{let t;return t=e.defaultTier??"mid",(e.suggestModels.find(e=>e.tier===t)??e.suggestModels[0])?.id},"effortSchema",0,s,"effortsOf",0,function(e,t,i=[]){if(n(e))return i.find(e=>e.id===t)?.efforts??null;let a=p[e].suggestModels;return a.find(e=>e.id===t)?.efforts??null},"isCatalogProvider",0,n,"parseMediaModel",0,function(e){let[t,...i]=(e??"").trim().split("/"),a=m.safeParse({provider:t,model:i.join("/")});return a.success?a.data:null},"parseTextModel",0,function(e){let[t,...i]=(e??"").trim().split("/"),a=l.safeParse({provider:t,model:i.join("/")});return a.success?a.data:null},"planMediaOf",0,function(e,t){if(!t||t.plan?.toLowerCase()==="free")return null;let[i]=c.chatgpt.models[e];return i?{provider:"chatgpt",model:i.id}:null},"textModelProviderSchema",0,a,"textModelRefSchema",0,l])},64774,e=>{"use strict";function t(e,t){let i=e.replace(/\s+/g," ").trim();return i.length>t?`${i.slice(0,t-1).trimEnd()}…`:i}let i=["\\*","_"].flatMap(e=>{let t="_"===e?"\\w_":e;return[3,2,1].map(i=>{let a=e.repeat(i);return RegExp(`(?<![${t}])${a}(?![\\s${e}])(.+?)(?<![\\s${e}])${a}(?![${t}])`,"g")})}),a=e=>i.reduce((e,t)=>e.replace(t,"$1"),e),l=/\[([^\]\n]+)\]\(([^)\s]+)\)/g;e.s(["MARKDOWN_LINK",0,l,"PromiseChain",0,()=>{let e=Promise.resolve();return t=>{let i=e.then(()=>t());return e=i.catch(()=>{}),i}},"captionText",0,function(e){let t=[],i=e.replace(/```[\s\S]*?```/g," ").replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1").replace(l,(e,i,l)=>(t.push(`[${a(i.replace(/`/g,""))}](${l})`),`\uE000${t.length-1}\uE000`)),r=[];for(let e of i.split("\n")){let t=e.trim();t&&(/^\|?[\s:|-]+\|[\s:|-]*$|^[-*_]{3,}$/.test(t)||(/\|.*\|/.test(t)&&(t=t.replace(/^\||\|$/g,"").split("|").map(e=>e.trim()).filter(Boolean).join(" · ")),t=a(t.replace(/^#{1,6}\s+/,"").replace(/^>\s?/,"").replace(/^[-*+]\s+/,"• ").replace(/`([^`]*)`/g,"$1")).replace(/\s+/g," "),r.push(t)))}return r.join("\n").replace(/\uE000(\d+)\uE000/g,(e,i)=>t[Number(i)]??"")},"clip",0,t,"errorToString",0,function(e){if(e instanceof Error)return e.message;if("object"!=typeof e||null===e)return String(e);let{message:i,error:a}=e;if("string"==typeof i&&i)return i;if("string"==typeof a&&a)return a;let l=a?.message;if("string"==typeof l&&l)return l;try{return t(JSON.stringify(e),300)}catch{return`${e.constructor?.name??"Object"} thrown without a message`}},"formatBytes",0,function(e){if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],i=e/1024,a=0;for(;i>=1024&&a<t.length-1;)i/=1024,a+=1;return`${i.toFixed(+(i<10))} ${t[a]}`},"hostOf",0,function(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return null}},"plainText",0,function(e){return e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]*)`/g,"$1").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/^\s{0,3}(#{1,6}\s+|[-*+]\s+|\d+\.\s+|>\s?)/gm,"").replace(/[^\n]+/g,a).replace(/^\s*\|?[\s:|-]+\|\s*$/gm," ").replace(/\|/g," ").replace(/\s+/g," ").trim()},"slug",0,function(e){return e.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)}])}];
3
+ `),h=e=>{let i={last:null},a=setTimeout(()=>{c.delete(e),!m&&i.last&&(u(i.last),h(e))},t.coalesce?.ms);c.set(e,{timer:a,wait:i})},b=e=>{if(m)return;let i=t.coalesce?.keyOf(e)??null;if(null===i)return u(e);let a=c.get(i);if(a){a.wait.last=e;return}u(e),h(i)},f=e.subscribe(e=>g?g.push(e):b(e)),_=setInterval(()=>p(": ping\n\n"),a);l+=1,t.onWatchers?.(l),o=()=>{if(!m){for(let e of(m=!0,l-=1,t.onWatchers?.(l),f(),clearInterval(_),c.values()))clearTimeout(e.timer);try{n.close()}catch{}}},r.addEventListener("abort",o);try{for(let e of await s?.()??[])u(e)}catch(e){d.logger.error("event stream opening failed",e),o();return}let E=g;for(let e of(g=null,E))b(e)},cancel(){o()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return l}}}(g,{coalesce:{ms:n.SIGNAL_PACE_MS,keyOf:e=>e.type in m?e.type:null},onWatchers:p.track}),e.s(["appEvents",0,g,"presence",0,p],232347)},333925,e=>{"use strict";let t=process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),i=process.env.THURSDAY_HOME?.trim()||process.cwd(),a=process.env.THURSDAY_URL?.trim()||`http://localhost:${process.env.PORT?.trim()||3e3}`,l=`${i}/local.db`,r=`file:${l}`,s=`${i}/.env`,o=".ai-workspace",n={workspace:o,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",signIns:".sign-ins",skills:{default:"skills",custom:`${o}/.agents/skills`,own:".agents/skills",runtime:"runtime",seeds:"seed-skills"}},d="artifact";e.s(["APP_DIR",0,t,"APP_NAME",0,"Thursday","APP_URL",0,a,"ARTIFACT_SKILL",0,d,"BOT_MEMORY_LIMITS",0,{files:60,chars:3e3},"BOT_REFLECT",0,{minTools:5,steps:8},"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},participants:8,concurrent:8,turns:120,queuedMessages:200,silenceMs:3e5,overflowShrink:.6,retryMs:1e4,compactFiles:40},"BOT_WORK",0,{open:5,recent:5,said:80,files:2,reads:2,asked:400,readChars:4e3},"BROWSER_CLI",0,{readMs:15e3,loadMs:3e4},"BROWSER_GONE_MS",0,1e4,"BROWSER_IDLE",0,{closeAfterMs:36e5,checkEveryMs:3e5},"BROWSER_VIEWPORT",0,"700x700","CALL_EXEC_TIMEOUT_MS",0,15e3,"CALL_RELAY",0,{quietMs:2e3,perTurn:3,readMs:15e3,chars:600},"CATALOG_MS",0,6e5,"CHATGPT_SIGN_IN",0,{waitMs:6e5,renewBeforeMs:3e5},"COMMON_VALIDATE",0,{name:{max:16},shortDescription:{max:60},description:{max:100},prompt:{max:4e3}},"CONNECTED_TOOL_TIMEOUT_MS",0,6e5,"DATA_DIR",0,i,"DB_FILE_NAME",0,r,"DB_PATH",0,l,"DECK",0,{slides:30,shotsMs:9e4},"ENV_PATH",0,s,"EXEC_KILL_GRACE_MS",0,5e3,"EXEC_TIMEOUT_MS",0,18e4,"FINISHED_NOTICE",0,{rows:5,shown:1,words:240},"FULL_RESULT_LINES",0,400,"GIVEN_FILES",0,{dir:"inbox",maxBytes:0x1900000,perMessage:8},"HISTORY_KEEP",0,{forMs:7776e6,sweepEveryMs:216e5},"INBOX_FINISHED",0,5,"INBOX_UNREAD",0,20,"IS_DEV",0,!1,"JOB_FOLDER_WALK",0,500,"LIVE_CALL",0,{startupMs:3e4,closeMs:15e3,transcriptGapMs:1500,transcriptSaveMs:500,appendMs:15e3,backendOutputTokens:4096,reasoningCheckMs:5e3,keyCheckMs:5e3,openingHoldMs:3e3,instructionsTokens:16384},"LOOK",0,{maxBytes:4194304,perRequest:0xc00000},"MAIL_CHECK",0,{backMs:18e5,waitMs:12e4,waitMaxMs:3e5,chars:6e3},"MARKETING_SKILL",0,"marketing","MAX_PINNED_TOOLS",0,10,"MCP_IDLE_MS",0,18e5,"MEMORY_LIMITS",0,{facts:400,factsPerNote:50,descriptionChars:100},"PATHS",0,n,"PLAN_CALL",0,{delegationBytes:4096,pictureBytes:262144},"PROMPT_BUDGET",0,6e3,"PROMPT_LINE",0,{skill:90,toolArgs:30,jobOutcome:160,botMemory:100,threadStatus:200,routineRequest:300,routineOutcome:200,boardAsk:100},"REACH",0,{pollSeconds:50,retryMs:5e3,idleMs:6e5,messages:40,trimTo:30,oldChars:1e3,files:3,fileBytes:0x2d00000,rateRetries:3,rateWaitMs:3e4,codeDigits:4,held:5,pictures:9,drawMs:6e4,lookMs:2e3,mailFreshMs:1728e5,mailCheckAgainMs:3e4,mailHoldMs:36e5,mailPushAfterMs:1e3,mailIdleMs:24e4,mailDnsMs:5e3,mailIdsKept:200,mailLookMs:3e5},"RECENT_CALL",0,{rows:20,tokens:600},"ROUTINE",0,{tickMs:3e4,max:12,minHours:1,runsShown:5},"SEARCH",0,{sources:3,excerptChars:1200,timeoutMs:3e4},"SEED_KITS_RENAMED",0,{marketer:"writer"},"SIGNAL_PACE_MS",0,150,"SKILLS_FOLDED",0,{design:d,"picture-book":d,"interactive-page":d},"SKILL_FILES_LISTED",0,50,"STUDIO_SERVER",0,"studio","TEXT_CALL",0,{maxSteps:12,model:"text",autoTurns:10,chunkMs:12e4},"THREAD_LABEL_REACH",0,20,"THREAD_STATUS_LIMIT",0,10,"TOOL_OUTPUT",0,{max:8e3,head:5500,tail:1500},"TOOL_SEARCH_SCHEMAS",0,8,"TRAVEL_SKILL",0,"travel","WORKSPACE_KEEP",0,{forMs:2592e5,sweepEveryMs:36e5}])},864328,e=>{"use strict";var t=e.i(749906),i=e.i(333925);let a=t.enum(["openai","chatgpt","anthropic","google","xai","vercel-ai-gateway","openrouter","mistral","deepseek","groq","cerebras","togetherai","fireworks","deepinfra","cohere"]),l=t.object({provider:a,model:t.string().trim().min(1,"Model name is required").max(80)}),r=["none","minimal","low","medium","high","xhigh"],s=t.enum(r),o=["vercel-ai-gateway","openrouter"],n=e=>o.includes(e),d=t.enum(["openai","chatgpt","google","xai","vercel-ai-gateway"]),m=t.object({provider:d,model:t.string().trim().min(1,"Model name is required").max(120)}),c={openai:{label:"OpenAI",apiKeyName:"OPENAI_API_KEY",models:{image:[{id:"gpt-image-1-mini",label:"GPT Image 1 mini",tier:"small"},{id:"gpt-image-2.5-flare",label:"GPT Image 2.5 Flare",tier:"mid"},{id:"gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[],speech:[{id:"tts-1",label:"TTS 1",tier:"small"},{id:"gpt-4o-mini-tts",label:"4o mini TTS",tier:"mid"},{id:"tts-1-hd",label:"TTS 1 HD",tier:"large"}],transcription:[{id:"gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"gpt-transcribe",label:"GPT Transcribe",tier:"mid"}]}},chatgpt:{label:"GPT Subscription",apiKeyName:"CHATGPT_SIGN_IN",models:{image:[{id:"gpt-image-2",label:"GPT Image 2",tier:"mid"}],video:[],speech:[],transcription:[]}},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",models:{image:[{id:"gemini-3.1-flash-lite-image",label:"3.1 Flash Lite Image",tier:"small"},{id:"gemini-3.1-flash-image",label:"3.1 Flash Image",tier:"mid"},{id:"gemini-3-pro-image",label:"3 Pro Image",tier:"large"}],video:[{id:"veo-3.1-lite-generate-preview",label:"Veo 3.1 Lite",tier:"small"},{id:"veo-3.1-fast-generate-preview",label:"Veo 3.1 Fast",tier:"mid"},{id:"veo-3.1-generate-preview",label:"Veo 3.1",tier:"large"}],speech:[{id:"gemini-2.5-flash-preview-tts",label:"2.5 Flash TTS",tier:"small"},{id:"gemini-3.1-flash-tts-preview",label:"3.1 Flash TTS",tier:"mid"},{id:"gemini-2.5-pro-preview-tts",label:"2.5 Pro TTS",tier:"large"}],transcription:[{id:"gemini-3.5-transcribe",label:"3.5 Transcribe",tier:"mid"}]}},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",models:{image:[{id:"grok-imagine-image",label:"Grok Imagine",tier:"small"},{id:"grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"mid"}],video:[{id:"grok-imagine-video",label:"Grok Imagine Video",tier:"small"},{id:"grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"}],speech:[{id:"grok-tts",label:"Grok TTS",tier:"mid"}],transcription:[{id:"grok-stt",label:"Grok STT",tier:"mid"}]}},"vercel-ai-gateway":{label:"Vercel AI Gateway",apiKeyName:"AI_GATEWAY_API_KEY",models:{image:[{id:"bytedance/seedream-5.0-lite",label:"Seedream 5.0 Lite",tier:"small"},{id:"bfl/flux-2-klein-9b",label:"FLUX 2 Klein 9B",tier:"small"},{id:"spacexai/grok-imagine-image-2.0",label:"Grok Imagine 2.0",tier:"small"},{id:"bfl/flux-2-pro",label:"FLUX 2 Pro",tier:"mid"},{id:"bytedance/seedream-5.0-pro",label:"Seedream 5.0 Pro",tier:"mid"},{id:"recraft/recraft-v4.1",label:"Recraft V4.1",tier:"mid"},{id:"openai/gpt-image-2.5-sunburst",label:"GPT Image 2.5 Sunburst",tier:"large"}],video:[{id:"bytedance/seedance-2.0-mini",label:"Seedance 2.0 Mini",tier:"small"},{id:"google/veo-3.1-lite-generate-001",label:"Veo 3.1 Lite",tier:"small"},{id:"alibaba/wan-v2.6-t2v",label:"Wan 2.6",tier:"small"},{id:"google/veo-3.1-fast-generate-001",label:"Veo 3.1 Fast",tier:"mid"},{id:"bytedance/seedance-2.5",label:"Seedance 2.5",tier:"mid"},{id:"spacexai/grok-imagine-video-1.5",label:"Grok Imagine Video 1.5",tier:"mid"},{id:"klingai/kling-v3.0-t2v",label:"Kling 3.0",tier:"large"},{id:"google/veo-3.1-generate-001",label:"Veo 3.1",tier:"large"}],speech:[{id:"fish-audio/s1",label:"Fish Audio S1",tier:"small"},{id:"openai/tts-1",label:"OpenAI TTS 1",tier:"small"},{id:"spacexai/grok-tts",label:"Grok TTS",tier:"mid"},{id:"fish-audio/s2.1-pro",label:"Fish Audio S2.1 Pro",tier:"mid"},{id:"openai/tts-1-hd",label:"OpenAI TTS 1 HD",tier:"large"}],transcription:[{id:"spacexai/grok-stt",label:"Grok STT",tier:"small"},{id:"fish-audio/transcribe-1",label:"Fish Transcribe 1",tier:"small"},{id:"openai/gpt-4o-mini-transcribe",label:"4o mini Transcribe",tier:"small"},{id:"openai/gpt-4o-transcribe",label:"4o Transcribe",tier:"mid"},{id:"google/gemini-3.5-transcribe",label:"Gemini 3.5 Transcribe",tier:"mid"}]}}},g=Object.keys(c).map(e=>({id:e,...c[e]})),p={openai:{label:"OpenAI",apiKeyName:"OPENAI_API_KEY",keysAt:"https://platform.openai.com/api-keys",keyLooks:"sk-…",defaultTier:"small",suggestModels:[{id:"gpt-6-luna",label:"6 Luna",tier:"small",context:105e4,efforts:["none","low","medium","high","xhigh"]},{id:"gpt-6.1-sol",label:"6.1 Sol",tier:"mid",context:105e4,efforts:["low","medium","high","xhigh"]},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:105e4,efforts:["low","medium","high","xhigh"]}]},chatgpt:{label:"GPT Subscription",apiKeyName:"CHATGPT_SIGN_IN",signIn:!0,suggestModels:[{id:"gpt-6-luna",label:"6 Luna",tier:"small",context:272e3,efforts:["none","low","medium","high","xhigh"]},{id:"gpt-6.1-sol",label:"6.1 Sol",tier:"mid",context:272e3,efforts:["low","medium","high","xhigh"]},{id:"gpt-6-astra",label:"6 Astra",tier:"large",context:272e3,efforts:["low","medium","high","xhigh"]}]},anthropic:{label:"Claude",apiKeyName:"ANTHROPIC_API_KEY",keysAt:"https://platform.claude.com/settings/keys",keyLooks:"sk-ant-…",suggestModels:[{id:"claude-haiku-4-5",label:"Haiku 4.5",tier:"small",efforts:["none","minimal","low","medium","high","xhigh"]},{id:"claude-sonnet-5-5",label:"Sonnet 5.5",tier:"mid",context:1e6,efforts:["none","low","medium","high","xhigh"]},{id:"claude-opus-5-5",label:"Opus 5.5",tier:"large",context:1e6,efforts:["low","medium","high","xhigh"]},{id:"claude-fable-5-1",label:"Fable 5.1",tier:"large",efforts:["none","low","medium","high","xhigh"]}]},google:{label:"Gemini",apiKeyName:"GOOGLE_GENERATIVE_AI_API_KEY",keysAt:"https://aistudio.google.com/apikey",keyLooks:"AIza…",suggestModels:[{id:"gemini-3.5-flash-lite",label:"3.5 Flash Lite",tier:"small",context:1e6,efforts:["minimal","low","medium","high"]},{id:"gemini-3.8-flash",label:"3.8 Flash",tier:"mid",context:1e6,efforts:["low","medium","high"]}]},xai:{label:"xAI",apiKeyName:"XAI_API_KEY",keysAt:"https://console.x.ai",keyLooks:"xai-…",suggestModels:[{id:"grok-4.7",label:"Grok 4.7",tier:"large",context:5e5,efforts:["none","low","medium","high","xhigh"]}]},"vercel-ai-gateway":{label:"Vercel AI Gateway",apiKeyName:"AI_GATEWAY_API_KEY",keysAt:"https://vercel.com/docs/ai-gateway/authentication-and-byok/authentication",suggestModels:[{id:"zai/glm-5.3-flash",label:"GLM 5.3 Flash",tier:"small"},{id:"google/gemini-3.8-flash",label:"Gemini 3.8 Flash",tier:"small"},{id:"openai/gpt-6-luna",label:"GPT 6 Luna",tier:"small",context:105e4},{id:"zai/glm-5.3",label:"GLM 5.3",tier:"mid"},{id:"spacexai/grok-4.7",label:"Grok 4.7",tier:"mid",context:5e5},{id:"anthropic/claude-sonnet-5.5",label:"Claude Sonnet 5.5",tier:"mid"},{id:"openai/gpt-6.1-sol",label:"GPT 6.1 Sol",tier:"mid",context:105e4},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid"},{id:"anthropic/claude-opus-5.5",label:"Claude Opus 5.5",tier:"large",context:1e6},{id:"openai/gpt-6-astra",label:"GPT 6 Astra",tier:"large",context:105e4}]},openrouter:{label:"OpenRouter",apiKeyName:"OPENROUTER_API_KEY",keysAt:"https://openrouter.ai/settings/keys",keyLooks:"sk-or-…",suggestModels:[{id:"z-ai/glm-5.3-flash",label:"GLM 5.3 Flash",tier:"small",context:1310720},{id:"google/gemini-3.8-flash",label:"Gemini 3.8 Flash",tier:"small",context:1048576},{id:"openai/gpt-6-luna",label:"GPT 6 Luna",tier:"small",context:105e4},{id:"z-ai/glm-5.3",label:"GLM 5.3",tier:"mid",context:1310720},{id:"x-ai/grok-4.7",label:"Grok 4.7",tier:"mid",context:5e5},{id:"anthropic/claude-sonnet-5.5",label:"Claude Sonnet 5.5",tier:"mid",context:1e6},{id:"openai/gpt-6.1-sol",label:"GPT 6.1 Sol",tier:"mid",context:105e4},{id:"moonshotai/kimi-k3",label:"Kimi K3",tier:"mid",context:1048576},{id:"anthropic/claude-opus-5.5",label:"Claude Opus 5.5",tier:"large",context:1e6},{id:"openai/gpt-6-astra",label:"GPT 6 Astra",tier:"large",context:105e4}]},mistral:{label:"Mistral",apiKeyName:"MISTRAL_API_KEY",keysAt:"https://console.mistral.ai/api-keys",suggestModels:[{id:"ministral-8b-latest",label:"Ministral 8B",tier:"small",efforts:[]},{id:"mistral-small-latest",label:"Small",tier:"mid",efforts:["none","high"]},{id:"mistral-medium-latest",label:"Medium",tier:"large",efforts:["none","high"]},{id:"mistral-large-latest",label:"Large",tier:"large",efforts:[]}]},deepseek:{label:"DeepSeek",apiKeyName:"DEEPSEEK_API_KEY",keysAt:"https://platform.deepseek.com/api_keys",keyLooks:"sk-…",suggestModels:[{id:"deepseek-flash",label:"V4.1 Flash",tier:"small",context:1e6,efforts:["none","low","high","xhigh"]},{id:"deepseek-v4-pro",label:"V4 Pro",tier:"large",context:1e6,efforts:["none","low","high","xhigh"]}]},groq:{label:"Groq",apiKeyName:"GROQ_API_KEY",keysAt:"https://console.groq.com/keys",keyLooks:"gsk_…",suggestModels:[{id:"openai/gpt-oss-20b",label:"GPT OSS 20B",tier:"small",context:131072,efforts:["low","medium","high"]},{id:"openai/gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:131072,efforts:["low","medium","high"]},{id:"llama-3.3-70b-versatile",label:"Llama 3.3 70B",tier:"mid",context:131072,efforts:[]}]},cerebras:{label:"Cerebras",apiKeyName:"CEREBRAS_API_KEY",keysAt:"https://cloud.cerebras.ai",keyLooks:"csk-…",suggestModels:[{id:"qwen-3.8-27b",label:"Qwen 3.8 27B",tier:"small",context:64e3},{id:"gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:65536}]},togetherai:{label:"Together",apiKeyName:"TOGETHER_AI_API_KEY",keysAt:"https://api.together.ai/settings/api-keys",suggestModels:[{id:"Qwen/Qwen3.5-9B",label:"Qwen 3.5 9B",tier:"small",context:262144},{id:"zai-org/GLM-5.3-Flash",label:"GLM 5.3 Flash",tier:"small",context:1048575},{id:"openai/gpt-oss-120b",label:"GPT OSS 120B",tier:"mid",context:131072},{id:"deepseek-ai/DeepSeek-V4.1-Flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1e6},{id:"zai-org/GLM-5.3",label:"GLM 5.3",tier:"large",context:1048575},{id:"moonshotai/Kimi-K3",label:"Kimi K3",tier:"large",context:1048576}]},fireworks:{label:"Fireworks",apiKeyName:"FIREWORKS_API_KEY",keysAt:"https://app.fireworks.ai/account/api-keys",keyLooks:"fw_…",suggestModels:[{id:"accounts/fireworks/models/glm-5p3-flash",label:"GLM 5.3 Flash",tier:"small",context:1048576},{id:"accounts/fireworks/models/deepseek-v4p1-flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1048576},{id:"accounts/fireworks/models/minimax-m3",label:"MiniMax M3",tier:"mid",context:512e3},{id:"accounts/fireworks/models/glm-5p3",label:"GLM 5.3",tier:"large",context:1048576},{id:"accounts/fireworks/models/kimi-k3",label:"Kimi K3",tier:"large",context:1048576}]},deepinfra:{label:"DeepInfra",apiKeyName:"DEEPINFRA_API_KEY",keysAt:"https://deepinfra.com/dash/api_keys",suggestModels:[{id:"deepseek-ai/DeepSeek-V4-Flash-0731",label:"DeepSeek V4 Flash",tier:"small",context:1048576},{id:"deepseek-ai/DeepSeek-V4.1-Flash",label:"DeepSeek V4.1 Flash",tier:"mid",context:1048576},{id:"zai-org/GLM-5.2",label:"GLM 5.2",tier:"mid",context:1048576},{id:"zai-org/GLM-5.3",label:"GLM 5.3",tier:"large",context:1048576},{id:"moonshotai/Kimi-K3",label:"Kimi K3",tier:"large",context:1048576}]},cohere:{label:"Cohere",apiKeyName:"COHERE_API_KEY",keysAt:"https://dashboard.cohere.com/api-keys",suggestModels:[{id:"command-r7b-12-2024",label:"Command R7B",tier:"small",context:128e3},{id:"command-a-03-2025",label:"Command A",tier:"mid",context:256e3},{id:"command-a-plus-05-2026",label:"Command A+",tier:"large",context:128e3}]}},u=Object.keys(p).map(e=>({id:e,...p[e]}));e.s(["CATALOG_TEXT",0,"language","CATALOG_TOOL_USE",0,"tool-use","EFFORTS",0,r,"MEDIA_MODEL_PROVIDERS",0,c,"MEDIA_MODEL_PROVIDER_LIST",0,g,"TEXT_MODEL_PROVIDERS",0,p,"TEXT_MODEL_PROVIDER_LIST",0,u,"VENDOR_PROVIDERS",0,{anthropic:"anthropic",openai:"openai",google:"google",spacexai:"xai",mistral:"mistral",deepseek:"deepseek",cohere:"cohere",openrouter:"openrouter"},"canMakeKind",0,(e,t)=>(c[e]?.models[t]?.length??0)>0,"compactAtFor",0,e=>e&&e>0?Math.round(e*i.BOT_RUN.compactHeadroom):i.BOT_RUN.compactAt,"contextWindowOf",0,function(e,t,i=[]){if(n(e))return i.find(e=>e.id===t)?.contextWindow??null;let a=p[e].suggestModels;return a.find(e=>e.id===t)?.context??null},"defaultModelOf",0,e=>{let t;return t=e.defaultTier??"mid",(e.suggestModels.find(e=>e.tier===t)??e.suggestModels[0])?.id},"effortSchema",0,s,"effortsOf",0,function(e,t,i=[]){if(n(e))return i.find(e=>e.id===t)?.efforts??null;let a=p[e].suggestModels;return a.find(e=>e.id===t)?.efforts??null},"isCatalogProvider",0,n,"parseMediaModel",0,function(e){let[t,...i]=(e??"").trim().split("/"),a=m.safeParse({provider:t,model:i.join("/")});return a.success?a.data:null},"parseTextModel",0,function(e){let[t,...i]=(e??"").trim().split("/"),a=l.safeParse({provider:t,model:i.join("/")});return a.success?a.data:null},"planMediaOf",0,function(e,t){if(!t||t.plan?.toLowerCase()==="free")return null;let[i]=c.chatgpt.models[e];return i?{provider:"chatgpt",model:i.id}:null},"textModelProviderSchema",0,a,"textModelRefSchema",0,l])},64774,e=>{"use strict";function t(e,t){let i=e.replace(/\s+/g," ").trim();return i.length>t?`${i.slice(0,t-1).trimEnd()}…`:i}let i=["\\*","_"].flatMap(e=>{let t="_"===e?"\\w_":e;return[3,2,1].map(i=>{let a=e.repeat(i);return RegExp(`(?<![${t}])${a}(?![\\s${e}])(.+?)(?<![\\s${e}])${a}(?![${t}])`,"g")})}),a=e=>i.reduce((e,t)=>e.replace(t,"$1"),e),l=/\[([^\]\n]+)\]\(([^)\s]+)\)/g;e.s(["MARKDOWN_LINK",0,l,"PromiseChain",0,()=>{let e=Promise.resolve();return t=>{let i=e.then(()=>t());return e=i.catch(()=>{}),i}},"captionText",0,function(e){let t=[],i=e.replace(/```[\s\S]*?```/g," ").replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1").replace(l,(e,i,l)=>(t.push(`[${a(i.replace(/`/g,""))}](${l})`),`\uE000${t.length-1}\uE000`)),r=[];for(let e of i.split("\n")){let t=e.trim();t&&(/^\|?[\s:|-]+\|[\s:|-]*$|^[-*_]{3,}$/.test(t)||(/\|.*\|/.test(t)&&(t=t.replace(/^\||\|$/g,"").split("|").map(e=>e.trim()).filter(Boolean).join(" · ")),t=a(t.replace(/^#{1,6}\s+/,"").replace(/^>\s?/,"").replace(/^[-*+]\s+/,"• ").replace(/`([^`]*)`/g,"$1")).replace(/\s+/g," "),r.push(t)))}return r.join("\n").replace(/\uE000(\d+)\uE000/g,(e,i)=>t[Number(i)]??"")},"clip",0,t,"errorToString",0,function(e){if(e instanceof Error)return e.message;if("object"!=typeof e||null===e)return String(e);let{message:i,error:a}=e;if("string"==typeof i&&i)return i;if("string"==typeof a&&a)return a;let l=a?.message;if("string"==typeof l&&l)return l;try{return t(JSON.stringify(e),300)}catch{return`${e.constructor?.name??"Object"} thrown without a message`}},"formatBytes",0,function(e){if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],i=e/1024,a=0;for(;i>=1024&&a<t.length-1;)i/=1024,a+=1;return`${i.toFixed(+(i<10))} ${t[a]}`},"hostOf",0,function(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return null}},"plainText",0,function(e){return e.replace(/```[\s\S]*?```/g," ").replace(/`([^`]*)`/g,"$1").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/^\s{0,3}(#{1,6}\s+|[-*+]\s+|\d+\.\s+|>\s?)/gm,"").replace(/[^\n]+/g,a).replace(/^\s*\|?[\s:|-]+\|\s*$/gm," ").replace(/\|/g," ").replace(/\s+/g," ").trim()},"slug",0,function(e){return e.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)}])}];
4
4
 
5
5
  //# sourceMappingURL=_1ufbxe1._.js.map