thursday-agent 0.17.2 → 0.18.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 (362) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/routes-manifest.json +6 -0
  6. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/server/app/_global-error.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.js.nft.json +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/artifact/route.js +7 -7
  20. package/.next/server/app/api/artifact/route.js.nft.json +1 -1
  21. package/.next/server/app/api/bot/memory/files/route.js +4 -4
  22. package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
  23. package/.next/server/app/api/bot/memory/route.js +1 -1
  24. package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
  25. package/.next/server/app/api/bot/route.js +1 -1
  26. package/.next/server/app/api/bot/route.js.nft.json +1 -1
  27. package/.next/server/app/api/bot/thread/[id]/route.js +1 -1
  28. package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/bot/thread/file/route/app-paths-manifest.json +3 -0
  30. package/.next/server/app/api/bot/thread/file/route/build-manifest.json +12 -0
  31. package/.next/server/app/api/bot/thread/file/route/server-reference-manifest.json +4 -0
  32. package/.next/server/app/api/bot/thread/file/route.js +29 -0
  33. package/.next/server/app/api/bot/thread/file/route.js.map +5 -0
  34. package/.next/server/app/api/bot/thread/file/route.js.nft.json +1 -0
  35. package/.next/server/app/api/bot/thread/file/route_client-reference-manifest.js +3 -0
  36. package/.next/server/app/api/bot/thread/route.js +1 -1
  37. package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
  38. package/.next/server/app/api/config/route.js +1 -1
  39. package/.next/server/app/api/config/route.js.nft.json +1 -1
  40. package/.next/server/app/api/events/route.js +2 -2
  41. package/.next/server/app/api/events/route.js.nft.json +1 -1
  42. package/.next/server/app/api/favicon/[host]/route.js.nft.json +1 -1
  43. package/.next/server/app/api/file/[...path]/route.js +4 -4
  44. package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
  45. package/.next/server/app/api/llm-model/automatic/route.js +1 -1
  46. package/.next/server/app/api/llm-model/automatic/route.js.nft.json +1 -1
  47. package/.next/server/app/api/llm-model/catalog/route.js +1 -1
  48. package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
  49. package/.next/server/app/api/llm-model/credits/route.js +1 -1
  50. package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -1
  51. package/.next/server/app/api/llm-model/route.js +1 -1
  52. package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
  53. package/.next/server/app/api/llm-model/subscription/route.js +1 -1
  54. package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
  55. package/.next/server/app/api/mcp/[name]/route.js +1 -1
  56. package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/mcp/oauth/callback/route.js +2 -2
  58. package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
  59. package/.next/server/app/api/mcp/route.js +1 -1
  60. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  61. package/.next/server/app/api/mcp/tools/route.js +1 -1
  62. package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
  63. package/.next/server/app/api/memory/edit/route.js +1 -1
  64. package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
  65. package/.next/server/app/api/memory/route.js +1 -1
  66. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  67. package/.next/server/app/api/reach/route.js +1 -1
  68. package/.next/server/app/api/reach/route.js.nft.json +1 -1
  69. package/.next/server/app/api/routine/route.js +1 -1
  70. package/.next/server/app/api/routine/route.js.nft.json +1 -1
  71. package/.next/server/app/api/signins/route.js +1 -1
  72. package/.next/server/app/api/signins/route.js.nft.json +1 -1
  73. package/.next/server/app/api/skills/[source]/[name]/route.js +1 -1
  74. package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/skills/route.js +1 -1
  76. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  77. package/.next/server/app/api/thursday/call/end/route.js +1 -1
  78. package/.next/server/app/api/thursday/call/end/route.js.nft.json +1 -1
  79. package/.next/server/app/api/thursday/call/route.js +1 -1
  80. package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
  81. package/.next/server/app/api/thursday/settings/route.js +1 -1
  82. package/.next/server/app/api/thursday/settings/route.js.nft.json +1 -1
  83. package/.next/server/app/api/thursday/text/route.js +1 -1
  84. package/.next/server/app/api/thursday/text/route.js.nft.json +1 -1
  85. package/.next/server/app/api/thursday/tool-call/route.js +1 -1
  86. package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
  87. package/.next/server/app/api/workspace/files/route.js +1 -1
  88. package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
  89. package/.next/server/app/api/workspace/route.js +1 -1
  90. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  91. package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +94 -6
  92. package/.next/server/app/artifact/[...path]/page.js +9 -6
  93. package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
  94. package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  96. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  97. package/.next/server/app/page/server-reference-manifest.json +161 -128
  98. package/.next/server/app/page.js +9 -9
  99. package/.next/server/app/page.js.nft.json +1 -1
  100. package/.next/server/app/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app-paths-manifest.json +1 -0
  102. package/.next/server/chunks/{[externals]__12stas-._.js → [externals]__178rv3v._.js} +1 -1
  103. package/.next/server/chunks/[root-of-the-server]__00qyw01._.js +1 -1
  104. package/.next/server/chunks/[root-of-the-server]__02ra64t._.js +5 -0
  105. package/.next/server/chunks/[root-of-the-server]__03xamry._.js +1 -1
  106. package/.next/server/chunks/[root-of-the-server]__04hhvpu._.js +7 -0
  107. package/.next/server/chunks/[root-of-the-server]__05dp5tr._.js +1 -1
  108. package/.next/server/chunks/[root-of-the-server]__0bqveex._.js +1 -1
  109. package/.next/server/chunks/{[root-of-the-server]__1_h4hf9._.js → [root-of-the-server]__0brmiv2._.js} +4 -4
  110. package/.next/server/chunks/[root-of-the-server]__0gvdr2h._.js +5 -0
  111. package/.next/server/chunks/[root-of-the-server]__0h656y-._.js +1 -1
  112. package/.next/server/chunks/[root-of-the-server]__0lvjz0b._.js +5 -0
  113. package/.next/server/chunks/[root-of-the-server]__0mgyt8p._.js +1 -1
  114. package/.next/server/chunks/[root-of-the-server]__0mrk2it._.js +1 -1
  115. package/.next/server/chunks/[root-of-the-server]__0my9geo._.js +3 -0
  116. package/.next/server/chunks/[root-of-the-server]__0qdoc_9._.js +5 -0
  117. package/.next/server/chunks/[root-of-the-server]__0sm5xvm._.js +1 -1
  118. package/.next/server/chunks/[root-of-the-server]__0v_kuor._.js +5 -0
  119. package/.next/server/chunks/[root-of-the-server]__1-rmal0._.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]__1_04mcf._.js +2 -2
  122. package/.next/server/chunks/[root-of-the-server]__1ceammd._.js +1 -1
  123. package/.next/server/chunks/[root-of-the-server]__1dth047._.js +5 -0
  124. package/.next/server/chunks/[root-of-the-server]__1etbk64._.js +3 -0
  125. package/.next/server/chunks/[root-of-the-server]__1izes4_._.js +7 -0
  126. package/.next/server/chunks/[root-of-the-server]__1ksm9m-._.js +12 -0
  127. package/.next/server/chunks/[root-of-the-server]__1m_dmf6._.js +5 -0
  128. package/.next/server/chunks/[root-of-the-server]__1mys2c3._.js +5 -0
  129. package/.next/server/chunks/[root-of-the-server]__1ndi14y._.js +1 -1
  130. package/.next/server/chunks/[root-of-the-server]__1p0njle._.js +5 -0
  131. package/.next/server/chunks/[root-of-the-server]__1p47fbb._.js +2 -2
  132. package/.next/server/chunks/[root-of-the-server]__1ygplx1._.js +1 -1
  133. package/.next/server/chunks/[root-of-the-server]__1zn039k._.js +1 -1
  134. package/.next/server/chunks/_01c32w9._.js +1 -1
  135. package/.next/server/chunks/_02bov6_._.js +1 -1
  136. package/.next/server/chunks/_06hnfi8._.js +2 -2
  137. package/.next/server/chunks/_06u9yo-._.js +1 -1
  138. package/.next/server/chunks/_07nxi75._.js +42 -41
  139. package/.next/server/chunks/_08354bn._.js +12 -11
  140. package/.next/server/chunks/{_08btiir._.js → _08_-9ay._.js} +3 -3
  141. package/.next/server/chunks/_08s4vft._.js +1 -1
  142. package/.next/server/chunks/_0bgjf07._.js +5 -0
  143. package/.next/server/chunks/_0fb6dvr._.js +1 -1
  144. package/.next/server/chunks/_0hgvg55._.js +1 -1
  145. package/.next/server/chunks/_0iw19ig._.js +1 -1
  146. package/.next/server/chunks/_0poi1t2._.js +1 -1
  147. package/.next/server/chunks/_0srlnvd._.js +6 -6
  148. package/.next/server/chunks/_0t_7gji._.js +1 -1
  149. package/.next/server/chunks/_0uzj57i._.js +1 -1
  150. package/.next/server/chunks/_0wyh244._.js +112 -0
  151. package/.next/server/chunks/_0xygcxs._.js +42 -41
  152. package/.next/server/chunks/_1-sk_q4._.js +1 -1
  153. package/.next/server/chunks/_108gsm8._.js +2 -2
  154. package/.next/server/chunks/_136j09a._.js +5 -5
  155. package/.next/server/chunks/_15negpy._.js +2 -2
  156. package/.next/server/chunks/_1d7og_q._.js +1 -1
  157. package/.next/server/chunks/_1dxq827._.js +2 -2
  158. package/.next/server/chunks/_1e54wxa._.js +1 -1
  159. package/.next/server/chunks/_1gn2r2q._.js +6 -6
  160. package/.next/server/chunks/_1i3uucm._.js +1 -1
  161. package/.next/server/chunks/_1jvy78-._.js +5 -0
  162. package/.next/server/chunks/_1q6e56i._.js +6 -6
  163. package/.next/server/chunks/_1qgix-j._.js +1 -1
  164. package/.next/server/chunks/_1wwl_7o._.js +1 -1
  165. package/.next/server/chunks/_1y8w80a._.js +5 -5
  166. package/.next/server/chunks/_1yx285_._.js +3 -0
  167. package/.next/server/chunks/_20qn224._.js +3 -0
  168. package/.next/server/chunks/_211dn2c._.js +1 -1
  169. package/.next/server/chunks/_next-internal_server_app_api_bot_thread_file_route_actions_0q3be0o.js +3 -0
  170. package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
  171. package/.next/server/chunks/features_bot_08z387_._.js +3 -3
  172. package/.next/server/chunks/features_workspace_workspace_ts_13h82gv._.js +3 -3
  173. package/.next/server/chunks/features_workspace_workspace_ts_1iyjroj._.js +3 -3
  174. package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_04oxl25._.js → node_modules_consola_dist_chunks_prompt_mjs_0yd5xa0._.js} +1 -1
  175. package/.next/server/chunks/ssr/[root-of-the-server]__04upd5v._.js +1 -1
  176. package/.next/server/chunks/ssr/[root-of-the-server]__06knwl5._.js +3 -0
  177. package/.next/server/chunks/ssr/[root-of-the-server]__07ehpky._.js +3 -0
  178. package/.next/server/chunks/ssr/[root-of-the-server]__0h6jo0s._.js +3 -0
  179. package/.next/server/chunks/ssr/[root-of-the-server]__128hnrd._.js +3 -0
  180. package/.next/server/chunks/ssr/[root-of-the-server]__1867koj._.js +1 -1
  181. package/.next/server/chunks/ssr/[root-of-the-server]__1gzje-h._.js +3 -0
  182. package/.next/server/chunks/ssr/{[root-of-the-server]__1d7usu0._.js → [root-of-the-server]__1qn0axo._.js} +2 -2
  183. package/.next/server/chunks/ssr/[root-of-the-server]__1r7tj27._.js +3 -0
  184. package/.next/server/chunks/ssr/[root-of-the-server]__1tb5vve._.js +46 -0
  185. package/.next/server/chunks/ssr/{features_bot_1knyan7._.js → _07nmtxo._.js} +2 -2
  186. package/.next/server/chunks/ssr/{_10-_awu._.js → _0f9hx5p._.js} +2 -2
  187. package/.next/server/chunks/ssr/_0fo4552._.js +10 -9
  188. package/.next/server/chunks/ssr/{_123y-ah._.js → _0is8m6y._.js} +2 -2
  189. package/.next/server/chunks/ssr/{_17a4qyk._.js → _0ixe3g3._.js} +3 -3
  190. package/.next/server/chunks/ssr/_0j9vh-8._.js +3 -0
  191. package/.next/server/chunks/ssr/_0l7rjg5._.js +1 -1
  192. package/.next/server/chunks/ssr/{lib_logger_ts_0-olsze._.js → _0mfgsk-._.js} +4 -2
  193. package/.next/server/chunks/ssr/_0mpn6q0._.js +5 -0
  194. package/.next/server/chunks/ssr/{_0e2fnvg._.js → _0osvxkt._.js} +2 -2
  195. package/.next/server/chunks/ssr/_0p6w0ef._.js +3 -0
  196. package/.next/server/chunks/ssr/_0pbav_w._.js +3 -0
  197. package/.next/server/chunks/ssr/{_1aqjk-1._.js → _0wuvkqk._.js} +2 -2
  198. package/.next/server/chunks/ssr/_0x8ophf._.js +1 -1
  199. package/.next/server/chunks/ssr/_0x9f717._.js +60 -0
  200. package/.next/server/chunks/ssr/_1-41lck._.js +1 -1
  201. package/.next/server/chunks/ssr/_10jtmhl._.js +3 -0
  202. package/.next/server/chunks/ssr/{_0xfafez._.js → _12jv_41._.js} +2 -2
  203. package/.next/server/chunks/ssr/{_163dr78._.js → _165wnr4._.js} +2 -2
  204. package/.next/server/chunks/ssr/_16_7zeo._.js +3 -0
  205. package/.next/server/chunks/ssr/{_14oirtb._.js → _1_ogjze._.js} +2 -2
  206. package/.next/server/chunks/ssr/_1bfrntd._.js +6 -0
  207. package/.next/server/chunks/ssr/_1i2swyr._.js +3 -0
  208. package/.next/server/chunks/ssr/{_10_ph1t._.js → _1jd8rjm._.js} +2 -2
  209. package/.next/server/chunks/ssr/_1mdjoak._.js +162 -0
  210. package/.next/server/chunks/ssr/_1neoj22._.js +1 -1
  211. package/.next/server/chunks/ssr/{_1dfv66y._.js → _1oafxdu._.js} +2 -2
  212. package/.next/server/chunks/ssr/_1omom9y._.js +3 -0
  213. package/.next/server/chunks/ssr/_1pgxh81._.js +271 -0
  214. package/.next/server/chunks/ssr/{_0vo_oym._.js → _1r4mc3i._.js} +2 -2
  215. package/.next/server/chunks/ssr/_1soynbw._.js +6 -0
  216. package/.next/server/chunks/ssr/{_01al00i._.js → _1tx-2k7._.js} +2 -2
  217. package/.next/server/chunks/ssr/_1w899wx._.js +3 -0
  218. package/.next/server/chunks/ssr/_1xwtbdz._.js +3 -0
  219. package/.next/server/chunks/ssr/features_0796o8r._.js +1 -1
  220. package/.next/server/chunks/ssr/features_bot_0tb4ui-._.js +2 -2
  221. package/.next/server/chunks/ssr/features_bot_18gqkr_._.js +3 -0
  222. package/.next/server/chunks/ssr/{features_config_09n-q9q._.js → features_config_1ond01n._.js} +3 -3
  223. package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
  224. package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +1 -1
  225. package/.next/server/chunks/ssr/features_routine_components_routine-setting_tsx_055fknz._.js +1 -1
  226. package/.next/server/chunks/ssr/features_workspace_workspace_ts_1wc7_u_._.js +4 -4
  227. package/.next/server/chunks/ssr/{node_modules_0msrhxf._.js → node_modules_004qt-z._.js} +1 -1
  228. package/.next/server/chunks/ssr/{node_modules_0q-klni._.js → node_modules_06m6e97._.js} +1 -1
  229. package/.next/server/chunks/ssr/{node_modules_13g-d25._.js → node_modules_09dy7tk._.js} +1 -1
  230. package/.next/server/chunks/ssr/{node_modules_0gd9hbz._.js → node_modules_0_hy3i2._.js} +1 -1
  231. package/.next/server/chunks/ssr/{node_modules_1gq3ght._.js → node_modules_0f485jl._.js} +1 -1
  232. package/.next/server/chunks/ssr/{node_modules_096up6a._.js → node_modules_0gbx70b._.js} +1 -1
  233. package/.next/server/chunks/ssr/{node_modules_13bqv6i._.js → node_modules_0i_v0-m._.js} +1 -1
  234. package/.next/server/chunks/ssr/{node_modules_04x5wyv._.js → node_modules_0lrn9ci._.js} +1 -1
  235. package/.next/server/chunks/ssr/{node_modules_0d6j33x._.js → node_modules_0lxwg2v._.js} +1 -1
  236. package/.next/server/chunks/ssr/{node_modules_113l3e5._.js → node_modules_0n2-p5q._.js} +1 -1
  237. package/.next/server/chunks/ssr/node_modules_0nj36zf._.js +3 -0
  238. package/.next/server/chunks/ssr/{node_modules_0cjnmzp._.js → node_modules_0ppirau._.js} +1 -1
  239. package/.next/server/chunks/ssr/{node_modules_0m73b88._.js → node_modules_0pw13ww._.js} +1 -1
  240. package/.next/server/chunks/ssr/node_modules_0qd7p5f._.js +3 -0
  241. package/.next/server/chunks/ssr/{node_modules_0nmkv-v._.js → node_modules_0upwx50._.js} +1 -1
  242. package/.next/server/chunks/ssr/{node_modules_0__0tvm._.js → node_modules_0v__o4h._.js} +1 -1
  243. package/.next/server/chunks/ssr/{node_modules_1k5i-_9._.js → node_modules_1-4q6is._.js} +1 -1
  244. package/.next/server/chunks/ssr/{node_modules_156kv_t._.js → node_modules_10mb0cv._.js} +1 -1
  245. package/.next/server/chunks/ssr/{node_modules_10_fv2a._.js → node_modules_16z7p8b._.js} +1 -1
  246. package/.next/server/chunks/ssr/{node_modules_1lmyts8._.js → node_modules_17o218r._.js} +1 -1
  247. package/.next/server/chunks/ssr/{node_modules_0k8-y89._.js → node_modules_1gpapfv._.js} +1 -1
  248. package/.next/server/chunks/ssr/{node_modules_1_8-jcj._.js → node_modules_1hdaxu9._.js} +1 -1
  249. package/.next/server/chunks/ssr/{node_modules_1ri_eip._.js → node_modules_1hjvwkh._.js} +1 -1
  250. package/.next/server/chunks/ssr/{node_modules_0nw5jz7._.js → node_modules_1j886a5._.js} +1 -1
  251. package/.next/server/chunks/ssr/{node_modules_1xb-ndg._.js → node_modules_1srjf5c._.js} +1 -1
  252. package/.next/server/chunks/ssr/{node_modules_1p_6sq7._.js → node_modules_1tus4vi._.js} +1 -1
  253. package/.next/server/chunks/ssr/{node_modules_021lid9._.js → node_modules_1tv_7lk._.js} +1 -1
  254. package/.next/server/chunks/ssr/{node_modules_1qstb1x._.js → node_modules_20448xv._.js} +1 -1
  255. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0amkw0b._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0lg9pkl._.js} +1 -1
  256. package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0zq3l45._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1xgbf5j._.js} +1 -1
  257. package/.next/server/middleware-build-manifest.js +3 -3
  258. package/.next/server/middleware.js +1 -1
  259. package/.next/server/pages/404.html +1 -1
  260. package/.next/server/pages/500.html +1 -1
  261. package/.next/server/server-reference-manifest.js +1 -1
  262. package/.next/server/server-reference-manifest.json +205 -132
  263. package/.next/static/chunks/{166smhw8v-s3j.js → 05uvci-bk-vgp.js} +1 -1
  264. package/.next/static/chunks/09y_43y1cy5jw.js +1 -0
  265. package/.next/static/chunks/0_s4z70lx1tgs.js +1 -0
  266. package/.next/static/chunks/0oqviw3f55nfp.js +58 -0
  267. package/.next/static/chunks/0q9b2n6l4flqb.js +1 -0
  268. package/.next/static/chunks/0ruf3dqs--3ve.js +1 -0
  269. package/.next/static/chunks/0vggwjufw2-6r.js +1 -0
  270. package/.next/static/chunks/{3sla-dm1puqd1.js → 0x4m9nj2fazl2.js} +1 -1
  271. package/.next/static/chunks/{3t2c76awm9k_p.js → 1-1yfu34-3p2p.js} +1 -1
  272. package/.next/static/chunks/10oyyypxn_cpx.js +1 -0
  273. package/.next/static/chunks/{1cglo3a2mbeou.js → 17dx6w478vnb0.js} +1 -1
  274. package/.next/static/chunks/184-r80rv0xay.css +1 -0
  275. package/.next/static/chunks/1_hgdoungpm0o.js +1 -0
  276. package/.next/static/chunks/{0obogzscwwekj.js → 1dpg1u4a16ujt.js} +1 -1
  277. package/.next/static/chunks/{2qgkbdshzpq1c.js → 1h_6rh86q3i4p.js} +1 -1
  278. package/.next/static/chunks/{3b96xy59nl_gd.js → 1pe7i5yu779ta.js} +1 -1
  279. package/.next/static/chunks/{2zbl41hed17g3.js → 240nfv2dtidhc.js} +1 -1
  280. package/.next/static/chunks/{0uxq_vs6uxi-b.js → 27l8qwnk1j66z.js} +1 -1
  281. package/.next/static/chunks/2gxfy__ef51n9.js +3 -0
  282. package/.next/static/chunks/2kjwmo70judc2.js +15 -0
  283. package/.next/static/chunks/{3gsxnqqqphh-1.js → 2lzg4zedtmyic.js} +1 -1
  284. package/.next/static/chunks/2ug8q1x9e-_j6.js +1 -0
  285. package/.next/static/chunks/{01l7kw74vfp32.js → 2uk8rdtr-pk58.js} +1 -1
  286. package/.next/static/chunks/337g9g_ux2gj-.js +1 -0
  287. package/.next/static/chunks/{0o7o0eb7ihxi6.js → 396enq-m0sss5.js} +1 -1
  288. package/.next/static/chunks/{0p2f6uv4xytfm.js → 3r7u1y9xjoh-v.js} +1 -1
  289. package/.next/static/chunks/{3jtcieuk1l6tw.js → 3vg1-oc-zgw_7.js} +1 -1
  290. package/.next/static/chunks/40re_3ukjulg9.js +1 -0
  291. package/.next/static/chunks/41ztsnjn4qrn-.js +1 -0
  292. package/README.md +5 -5
  293. package/bin/autostart.mjs +32 -2
  294. package/bin/lock.mjs +85 -4
  295. package/bin/thursday.mjs +42 -15
  296. package/bin/tools.mjs +18 -1
  297. package/database/migrations/20260926021847_thread_cache_tokens/migration.sql +2 -0
  298. package/database/migrations/20260926021847_thread_cache_tokens/snapshot.json +1949 -0
  299. package/guide/bots.md +173 -317
  300. package/guide/calls.md +98 -146
  301. package/guide/index.md +2 -2
  302. package/guide/memory.md +14 -18
  303. package/guide/phone.md +86 -133
  304. package/guide/setup.md +127 -172
  305. package/guide/trouble.md +42 -65
  306. package/package.json +1 -1
  307. package/seed-skills/concierge/travel/scripts/itinerary.mjs +1 -1
  308. package/skills/artifact/runtime/shell/shell.js +32 -3
  309. package/.next/server/chunks/[root-of-the-server]__01ypm_z._.js +0 -3
  310. package/.next/server/chunks/[root-of-the-server]__021dkui._.js +0 -3
  311. package/.next/server/chunks/[root-of-the-server]__09gdscj._.js +0 -7
  312. package/.next/server/chunks/[root-of-the-server]__0ljizgj._.js +0 -5
  313. package/.next/server/chunks/[root-of-the-server]__0nmust6._.js +0 -5
  314. package/.next/server/chunks/[root-of-the-server]__0svzjwa._.js +0 -7
  315. package/.next/server/chunks/[root-of-the-server]__1c2kwku._.js +0 -12
  316. package/.next/server/chunks/[root-of-the-server]__1t02-1p._.js +0 -3
  317. package/.next/server/chunks/[root-of-the-server]__1t0jj1j._.js +0 -5
  318. package/.next/server/chunks/[root-of-the-server]__1vlxv19._.js +0 -5
  319. package/.next/server/chunks/_0j0-gq6._.js +0 -5
  320. package/.next/server/chunks/_0p6v1fr._.js +0 -5
  321. package/.next/server/chunks/_1ic3bew._.js +0 -5
  322. package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0g87zst._.js +0 -3
  323. package/.next/server/chunks/ssr/[root-of-the-server]__0-af_o7._.js +0 -3
  324. package/.next/server/chunks/ssr/[root-of-the-server]__09f39cp._.js +0 -4
  325. package/.next/server/chunks/ssr/[root-of-the-server]__0ouu4qp._.js +0 -3
  326. package/.next/server/chunks/ssr/[root-of-the-server]__0q9g9ea._.js +0 -5
  327. package/.next/server/chunks/ssr/[root-of-the-server]__17h1ggo._.js +0 -46
  328. package/.next/server/chunks/ssr/[root-of-the-server]__1jyeu61._.js +0 -5
  329. package/.next/server/chunks/ssr/_0afrpci._.js +0 -3
  330. package/.next/server/chunks/ssr/_0bgse1c._.js +0 -162
  331. package/.next/server/chunks/ssr/_0qsmpcu._.js +0 -3
  332. package/.next/server/chunks/ssr/_0z38nha._.js +0 -3
  333. package/.next/server/chunks/ssr/_116lfdc._.js +0 -3
  334. package/.next/server/chunks/ssr/_14dfh7a._.js +0 -4
  335. package/.next/server/chunks/ssr/_17qtuv7._.js +0 -3
  336. package/.next/server/chunks/ssr/_1_5xof_._.js +0 -3
  337. package/.next/server/chunks/ssr/_1alxym6._.js +0 -3
  338. package/.next/server/chunks/ssr/_1ou5sj0._.js +0 -3
  339. package/.next/server/chunks/ssr/_1tmw842._.js +0 -5
  340. package/.next/server/chunks/ssr/_1uij_rj._.js +0 -3
  341. package/.next/server/chunks/ssr/_1w9w1ok._.js +0 -3
  342. package/.next/server/chunks/ssr/_20gq_24._.js +0 -3
  343. package/.next/server/chunks/ssr/features_bot_0ouemw8._.js +0 -3
  344. package/.next/server/chunks/ssr/node_modules_@base-ui_react_1j9i1ho._.js +0 -3
  345. package/.next/static/chunks/0a5_-jqhaktjj.js +0 -1
  346. package/.next/static/chunks/0npvak0wpgagb.js +0 -1
  347. package/.next/static/chunks/19l81deo_pyoc.js +0 -1
  348. package/.next/static/chunks/1bnhw-5fj7aiz.js +0 -1
  349. package/.next/static/chunks/1in6nxpu33iab.js +0 -1
  350. package/.next/static/chunks/1u7kg91f9qy3g.js +0 -1
  351. package/.next/static/chunks/1xv4g10m-cl1s.js +0 -1
  352. package/.next/static/chunks/2ajs12-fcdwzm.js +0 -1
  353. package/.next/static/chunks/2i7qtmxc1kuqg.js +0 -1
  354. package/.next/static/chunks/2kz1f6r59nky0.js +0 -3
  355. package/.next/static/chunks/31kn4_h2rvf6k.css +0 -1
  356. package/.next/static/chunks/35jj-5u4te56r.js +0 -1
  357. package/.next/static/chunks/37ixzapa06xlo.js +0 -1
  358. package/.next/static/chunks/3k1d8y03t5nax.js +0 -58
  359. package/.next/static/chunks/3yiqr95d7ybeq.js +0 -15
  360. /package/.next/static/{8I2hKtciyA9LXvd8txuOz → -IBxB5oqr6e3RuOCCmYtL}/_buildManifest.js +0 -0
  361. /package/.next/static/{8I2hKtciyA9LXvd8txuOz → -IBxB5oqr6e3RuOCCmYtL}/_clientMiddlewareManifest.js +0 -0
  362. /package/.next/static/{8I2hKtciyA9LXvd8txuOz → -IBxB5oqr6e3RuOCCmYtL}/_ssgManifest.js +0 -0
package/guide/setup.md CHANGED
@@ -2,204 +2,159 @@
2
2
 
3
3
  ## The first run
4
4
 
5
- The first time the app opens, she comes in larger than the screen and steps down to her own size,
6
- and opens her eyes there, with a soft beat on each step and a run of chimes as she lands; a browser
7
- keeps a page silent until it is clicked, so the opening is often seen without its sound. When the
8
- system is set to reduce motion, she is simply there. Then it walks
9
- through six steps on the call screen itself: a voice key, the microphone, which bots come along, what
10
- they think with, her style, and the first call. She talks
11
- through it in a recorded voice, in English, and says so first; her real voice starts with the first
12
- call. The speaker button at the top right mutes the recording, and stays muted the next time, the opening's sounds with it. Every
13
- step can be passed and done later from the screens below. The bots picked there are set up when
14
- it ends, key or no key; they run once there is a model to run on. With a key the last button is
15
- **Call her**; without one it is **Look around**, and she says whether the bots can already work or
16
- still need a key or a ChatGPT sign-in. It stops showing once a call has been placed, and adding
17
- `?intro` to the address brings it back.
5
+ The first time the app opens, six steps run on the call screen itself: a voice key, the
6
+ microphone, which bots come along, what they think with, her style, and the first call. In a narrow
7
+ window each step sits under her face. She talks through it in a recorded English voice; her
8
+ real voice starts with the first call. The speaker button at the top right mutes it.
9
+
10
+ Every step can be skipped and done later in Settings. On the microphone step the main button turns
11
+ the microphone on (the browser asks first, by its address bar); the line under it goes on without
12
+ one. The bots picked there are set up when it ends; they work once there is a model to run on.
13
+ With a key the last button is **Call her**; without one it is **Look around**.
14
+
15
+ Once it has been left, by any of its buttons, it does not show again, and **Reset history** does not
16
+ bring it back. Adding `?intro` to the address shows it again; leaving it that way sets up no bots.
18
17
 
19
18
  ## Around the screen
20
19
 
21
- The buttons at the top right of the call screen open **Thursday**, **Memory** and **Bots** directly,
22
- and **Settings** opens everything; each carries a dot when something there wants the user. The
23
- Settings list is Thursday, Memory, Bots, Threads, Routines, Files, Skills, Connectors, Sign-ins,
24
- Models, API keys and Phone. ⌘K (Ctrl+K) jumps to its filter, and ⌘ with a number opens one of the
25
- first nine.
26
- Under Phone, as a group of their own named community, **Ask on Discord** opens the app's community,
27
- where people who use and build it answer questions, and **GitHub** opens its code, bug reports and
28
- releases. The theme — **System**, **Light** or **Dark** — is picked at the foot of the list.
20
+ The buttons at the top right of the call screen open **Thursday**, **Memory** and **Bots**, and
21
+ **Settings** opens everything; each carries a dot when something there needs the user. The Settings
22
+ list is Thursday, Memory, Bots, Threads, Routines, Files, Skills, Connectors, Sign-ins, Models,
23
+ API keys and Phone. ⌘K (Ctrl+K) jumps to a section's filter, and ⌘ (Ctrl) with a number from 1 to 9
24
+ opens one of the first nine sections. Under community are **Ask on Discord** and **GitHub**. The
25
+ theme — **System**, **Light** or **Dark** — is at the foot of the list.
29
26
 
30
27
  ## Keys
31
28
 
32
- **Settings › API keys** holds them, and they stay on this machine. One OpenAI key is all a call
33
- needs — it pays for both the voice and the model behind it. That key is checked with OpenAI as it is
34
- saved: one OpenAI turns away is not kept, and the screen says what OpenAI said about it (a mistyped
35
- key, one that was deleted). Bots can run on that same key.
36
-
37
- The screen puts the two easy ways next: **GPT Subscription**, a sign-in with ChatGPT (bots run on the
38
- ChatGPT plan, no key; the row shows how much of the plan is used and when it resets), and the
39
- **Vercel AI Gateway**, one key for every model and the one the app recommends (its row shows what is
40
- left). Under them every other provider is a mark to tap and paste a key into — Claude, Gemini, xAI
41
- and the rest; the first run shows four of them and keeps the others behind **More**. The box a key goes in shows how that provider's keys begin where it is
42
- known, with a link to the page that makes one; **Remove**, on a key already set, is the red word at
43
- the far left.
44
-
45
- A search key (Exa) is optional. With it, calls and bots both search through Exa, which is cheaper
46
- per search and comes with free credits every month. Without it, a call uses OpenAI's own search and
47
- a bot its model's own — which the GPT Subscription has, and OpenAI, Claude, Gemini and xAI on their
48
- own keys. A bot running through the Gateway or any other provider has no search of its own, so it
49
- opens pages in its browser instead.
29
+ **Settings › API keys** holds them, and they stay on this computer. One OpenAI key is all a call
30
+ needs: it pays for both her voice and the model behind it. The key is checked when it is saved,
31
+ and one OpenAI refuses is not kept. Bots can run on the same key.
32
+
33
+ Two easier ways for bots come next:
34
+
35
+ - **GPT Subscription**: sign in with ChatGPT, and bots run on the ChatGPT plan with no key. The row
36
+ shows how much of the plan is used and when it resets. It does not cover a spoken call, which
37
+ OpenAI bills by the minute on a key.
38
+ - **Vercel AI Gateway**: one key for every model; its row shows what credit is left.
39
+
40
+ Under them, every other provider (Claude, Gemini, xAI and more, some behind **More**) is a mark to
41
+ tap and paste a key into, with a link to the page that makes one.
42
+
43
+ A search key (Exa) is optional. With it, calls and bots all search through Exa, which is cheap and
44
+ has free monthly credits. Without it, a call uses OpenAI's own search, and a bot uses its model's
45
+ own search: the GPT Subscription, OpenAI, Claude, Gemini and xAI have one. A bot on the Gateway or
46
+ any other provider has no search of its own, so it opens pages in its browser instead.
50
47
 
51
48
  ## Models
52
49
 
53
- **Settings › Models** has two groups. **Bots** holds the **Default model** — the one a bot uses when
54
- its own page says nothing; a small one is quick and costs little, and is the place to start — and
55
- its **Default effort**. Left unset it shows *auto* and names the model bots run on now: the GPT
56
- Subscription's when you are signed in, since the plan is already paid for, else OpenAI's, else xAI's,
57
- else the first provider with a key — the **small** model on OpenAI, the one the call's backend starts
58
- on too, and the **mid** one on the GPT Subscription, which is paid for either way (a Free plan opens
59
- only the small one and runs that), and elsewhere. A default picked here whose key is
60
- later removed is not swapped for another provider: bots stop and say so until it is back or another
61
- is picked. The
62
- first run's model step sets this same one, and **App default** at the top of a bot's model list puts
63
- that bot back on it. **Studio** holds the **Image model**, **Video model**, **Speech model** and
64
- **Transcription model**. A kind with no model picked simply is not there — a bot that needs it says
65
- so rather than guessing. The call's own two models are in Settings › Thursday.
66
-
67
- **Effort** is how hard a model thinks, as a row of buttons: **auto** first, then one for every step
68
- that model takes (none, low, medium, high, xhigh and so on). Higher is slower and costs more, and
69
- **auto** leaves the step to the model, which is where every model starts. The steps differ by model —
70
- some offer four, some two, and one whose steps the app cannot check offers **auto** alone. Change the
71
- model and the step comes along where the new one has it, and falls back to **auto** where it does
72
- not. A bot's own page and the call's backend have the same control; a bot back on **App default**
73
- follows this one again.
50
+ **Settings › Models** has two groups.
51
+
52
+ - **Bots** holds the **Default model**, which a bot uses when its own page picks none, and its
53
+ effort. Left unset it shows *auto* and names what bots run on now: the GPT Subscription when
54
+ signed in, else OpenAI, else xAI, else the first provider with a key. If the default picked here
55
+ loses its key, bots stop and say so rather than switch to another provider. **App default** at
56
+ the top of a bot's model list puts that bot back on it.
57
+ - **Studio** holds the **Image model**, **Video model**, **Speech model** and **Transcription
58
+ model**. One left unpicked shows *off*, and bots cannot do that kind of work until one is picked.
59
+
60
+ The call's own two models are in **Settings › Thursday**, under Models.
61
+
62
+ **Effort** is how hard a model thinks, shown as a row of buttons: **auto**, then the steps that
63
+ model offers (such as none, low, medium, high, xhigh). Higher is slower and costs more; **auto**
64
+ lets the model decide. A bot's own page and the call's backend have the same control.
74
65
 
75
66
  ## Skills
76
67
 
77
68
  A skill is a written-down way of doing something that a bot reads before it starts. The ones that
78
- ship with the app are every bot's alike: the browser; this Mac (listed on a Mac only); what the user
79
- keeps, looks at or uses — a document, a design canvas, a picture book, the deck every bot can make,
80
- and a page or a small app, with charts and diagrams — as one (the first app installs its kit, which
81
- takes a minute and the network); reading a video, a podcast, an article, a PDF or a recording of
82
- their own, a meeting written up as notes; answers built on
83
- published numbers, with charts, the weather on given days and an amount in another currency; a
84
- daily news brief; finding more skills; and writing a new one. **Marketer** also carries one of its
85
- own for marketing — a product's brief, page copy, email sequences, a launch, social posts, an SEO
86
- audit — and **Concierge** one for trips — flights and stays compared, a booking handed over, a
87
- day-by-day page — which no other bot sees. **Settings › Skills** lists them in groups: **Custom** (the
88
- user's own), one for each bot that has skills of its own (**Marketer's own**: what ships with it,
89
- and what it found or wrote for itself), and **Default** (the ones that ship, read-only). There a skill can be switched off (it stays off through an update of the app), uploaded (a `.md`,
90
- `.zip` or `.skill` file up to 20 MB; an archive that would unpack past 100 MB or 1,000 files is
91
- refused), written from scratch, or deleted when it is one of their own. Each row says what the
92
- skill does; opening it shows the rest of its description and its files. In one of their own,
93
- **Edit** on a file writes it back, which is how a typo or a changed step is fixed without making
94
- the skill again; picking another file with changes not saved asks before dropping them. A bot can
95
- also find one in the open registry while it works, or write a new one. Before it installs one from the registry it asks, saying who published it, its license
96
- and what its security checks found. Either way it decides whether the skill is for itself alone
97
- or for every bot: to itself unless any bot would use it or the user said everyone, and its report
98
- says which. One it keeps for itself shows under its name there, where it can be opened, switched
99
- off, edited or deleted like one of their own.
69
+ ship with the app are shared by every bot: using the browser; using this Mac's apps (on a Mac only);
70
+ making documents, slides, pages and small apps with charts; reading videos, podcasts, articles and
71
+ PDFs; reports built on published numbers; a daily news brief; finding more skills; and writing a new
72
+ one. **Marketer** and **Concierge** also carry skills of their own, for marketing and for trips,
73
+ that no other bot sees.
74
+
75
+ **Settings › Skills** lists them in groups: **Custom** (the user's own), one group for each bot that
76
+ has its own (such as **Marketer's own**), and **Default** (the ones that ship, read-only). There a
77
+ skill can be switched off, uploaded (a `.md`, `.zip` or `.skill` file up to 20 MB), written from
78
+ scratch, or deleted when it is the user's own. In one of the user's own, **Edit** on a file
79
+ changes it in place.
80
+
81
+ A bot can also find a skill in the open registry while it works, or write a new one. Before it
82
+ installs one from the registry it asks, saying who published it, its license and what its security
83
+ checks found. Its report says whether it kept the skill for itself or for every bot.
100
84
 
101
85
  ## Connected services
102
86
 
103
- **Settings › Connectors** connects MCP servers, by picking one from the list or pasting its details.
104
- Once connected, its tools are there for bots to search and call, and up to ten of them can be pinned
105
- to one bot so they are always in front of it; she does not use them on a call herself, she hands
106
- that work to a bot. Opening a server lists every tool it carries, with a box to narrow them by name,
107
- and has **Reconnect** and **Delete**. Signing in happens in a popup window; a server that needs it
108
- again turns red on that screen, with its error, and **Reconnect** signs in again.
87
+ **Settings › Connectors** connects MCP servers, picked from the list or added by pasting their
88
+ details. The list starts with everyday services (to-dos, the house, flights, and Zapier for Gmail,
89
+ Google Calendar and many other apps) and the tools for developers come after. Once connected, a
90
+ server's tools are there for bots to use, and up to ten can be pinned to one bot on its page in
91
+ **Settings › Bots**. She does not use them on a call herself; she hands that work to a bot.
109
92
 
110
- The list starts with everyday services — to-dos, the house, flights, and Zapier for Gmail, Google
111
- Calendar and the other apps connected there — and the tools for developers come after. Home
112
- Assistant asks for two things first: the address of their own Home Assistant, and a long-lived
113
- access token made on their profile page there. Its Model Context Protocol Server integration has to
114
- be added in Home Assistant too.
93
+ Opening a server lists its tools, with **Reconnect** and **Delete**. A server that needs signing in
94
+ again turns red, and **Reconnect** fixes it. Home Assistant asks for the address of their Home
95
+ Assistant and a long-lived access token made on their profile page there; its Model Context Protocol
96
+ Server integration has to be added in Home Assistant too.
115
97
 
116
98
  ## Sites they signed in to
117
99
 
118
- When a bot needs them signed in to a website — to post, to read mail, to order — it opens a window of
119
- the bots' own browser (Google Chrome for Testing, not their Chrome) on their screen and asks; they
120
- sign in there themselves, and the app keeps that sign-in so later work does not ask again. The
121
- window then closes by itself and the bot goes on out of sight, still signed in; it stays up only when
122
- what comes next is for them to see, like the products they asked for or a checkout to confirm. A bot
123
- never opens a window just to look at a page, deck or canvas it made. **Settings
124
- › Sign-ins** lists each one: the site, the account, and the bots that may use it. What is kept is the
125
- site's session, never a password, on this machine and outside the folder the bots work in.
126
-
127
- - The bot that asked for the sign-in may use it. Another bot that needs the same one asks first: its
128
- question carries a button to let it in, and the list shows *… asks* with **Allow**. The **×** on a
129
- bot's name in the list takes that back. A bot that has not been let in cannot replace what is
130
- kept either: if they sign in to the same site for it, that sign-in lasts for its job only, and it
131
- asks — to use the kept one, or for them to sign out of it here so the new one can be kept.
132
- - Some sites — Google is one — do not accept a sign-in carried from one browser to another: the bot
133
- is signed out again on its next job however often they sign in. For those a bot works in a tab of
134
- their own Chrome instead, signed in as they already are. That needs the **Playwright Extension**
135
- from the Chrome Web Store installed in their Chrome once, and Chrome open: the last row of the
136
- list, **Your own Chrome**, has the button to it. The bot gets a tab of its own and cannot see
137
- theirs; nothing is kept from it.
138
- - **Sign out** removes what is kept; the next job that needs the site asks them to sign in again. The
139
- site may go on listing the session until it ends it, so a lost or shared computer is also a reason
140
- to sign out on the site itself.
141
- - A site that ends the session by itself just makes the bot ask again.
100
+ When a bot needs them signed in to a website, to post, read mail or order, it opens a window of the
101
+ bots' own browser (Google Chrome for Testing, not their Chrome) and asks. They sign in there
102
+ themselves, and the app keeps that sign-in so later work does not ask again.
103
+
104
+ **Settings › Sign-ins** lists each one: the site, the account, and the bots that may use it. What is
105
+ kept is the site's session, never a password, and it stays on this computer.
106
+
107
+ - The bot that asked for a sign-in may use it. Another bot that needs it asks first; the list then
108
+ shows *… asks* with **Allow**. The **×** on a bot's name takes that back.
109
+ - Some sites, Google among them, sign the bot out again on every job however often they sign in.
110
+ For those, a bot can work in a tab of their own Chrome instead, signed in as they already are —
111
+ to every site their Chrome is signed in to, not only that one. That needs the Playwright
112
+ extension installed in their Chrome once and Chrome open: the last row, **Your own Chrome**, has
113
+ **Get the extension**.
114
+ - **Sign out** removes what is kept; the next job that needs the site asks again. On a lost or shared
115
+ computer, also sign out on the site itself.
142
116
 
143
117
  ## Its own window
144
118
 
145
- The app runs in a browser tab, and a tab is easy to lose: closed, it takes the wake phrase, the
146
- shortcut and her calls with it. Chrome and Edge can install it instead, which gives it its own window
147
- and its own icon in the Dock or the taskbar, and the browser can be told to open that window when
148
- the computer starts. The call screen offers it once, under the buttons at its top right —
149
- **Install**, or **Not now** and it does not ask again — and **Install app** stays at the foot of the
150
- Settings list for as long as it is not installed. Safari on a Mac does it from its File menu, **Add
151
- to Dock**; Firefox cannot. It is the same local app either way; nothing moves anywhere.
152
-
153
- The window only shows what the server is serving, and the server is started in a terminal. On a Mac
154
- it does not have to be: `thursday autostart` hands it to the computer, which starts it at login and
155
- again whenever it stops, so the icon in the Dock opens the call screen with no terminal anywhere.
156
- It needs the app installed with `npm i -g thursday-agent`, not run through `npx`.
157
- `thursday autostart --off` takes it back. A server nobody is watching writes what it would have said
158
- to `server.local.log`, beside the database. The address is the one it is on when autostart is turned
159
- on, so moving it with `--port` means turning autostart on once more. Linux and Windows start it the
160
- way they start anything else at login.
161
-
162
- The app comes back on the same address every time it starts: the first start takes port 4747, which
163
- other apps rarely use, and keeps it. If that port is taken by something else one day, it says so
164
- where it was started and serves on the next one for that day; the browser then shows other
165
- settings, because a browser keeps settings per address. Starting it once with `--port` and a number
166
- moves it to that address for good; if that port is taken, it says so and stops. `thursday --help`
167
- lists the rest: `--home` for another data folder, `--no-open` to start without opening a browser.
168
-
169
- One data folder is served by one app at a time: started again while it runs — a second `npx`, or
170
- one beside the one that starts at login — it says the address of the one running and stops, rather
171
- than serving the same calls, jobs and phone twice. It needs Node 22.18 or newer and says so on an
172
- older one. Closing the terminal it runs in stops it the way Ctrl+C does: jobs that were running
173
- are paused, to be picked up again.
119
+ The app runs in a browser tab, and a closed tab takes the wake phrase, the shortcut and her calls
120
+ with it. Chrome and Edge can install it as its own window with its own icon. The call screen offers
121
+ this once (**Install** or **Not now**), and **Install app** stays at the foot of the Settings list
122
+ until it is installed. In Safari on a Mac it is **File › Add to Dock**; Firefox cannot do it.
123
+
124
+ The window only shows what the server serves, and the server is started in a terminal with `npx
125
+ thursday-agent`. On a Mac, `thursday autostart` makes the computer start it at login and restart it
126
+ if it stops, so no terminal is needed; this needs the app installed with `npm i -g thursday-agent`,
127
+ not run through `npx`. `thursday autostart --off` turns it off. On Linux and Windows, add it to the
128
+ programs that start at login.
129
+
130
+ The app uses the same address every time: port 4747 by default. If that port is taken one day, it
131
+ says so and uses the next free one for that run, and the browser shows different settings there.
132
+ `--port` with a number moves it for good (turn autostart on again after that). `--home` uses another
133
+ data folder, `--no-open` starts without opening a browser, and `--help` lists everything.
134
+
135
+ Starting it again while it already runs on the same data folder opens the running one in the
136
+ browser instead of starting a second, and says how to stop it. It needs Node 22.18 or newer.
137
+ Closing the terminal it runs in stops it like Ctrl+C: running jobs pause and wait for **Continue**.
174
138
 
175
139
  ## Where the files are
176
140
 
177
- Everything is on this computer, in one folder: `.thursday` in their home folder when the app was
178
- installed or started with `npx thursday-agent`, or the folder it was started from otherwise; every
179
- start prints it. It holds the database with calls, memory, bots, keys and who she is set to be, the
180
- sites they signed in to, and the workspace with finished results, projects, each bot's folder and
181
- the skills that were installed. The folder her shell opens in is that workspace, so the exact place
182
- is one command away when they ask. Updating the app never touches it. Nothing is sent anywhere but
183
- the model providers that were set up and the services that were connected. The app listens only to
184
- this machine and has no account and no login.
185
-
186
- One thing sits outside it: the browser the bots work in. It is downloaded once into this computer's
187
- own cache folder, a few hundred megabytes — so that folder, not `.thursday`, is where to look if the
188
- disk is short.
189
-
190
- A copy of that folder is the backup, and it is taken with the app stopped. While it runs, the newest
191
- calls and messages are in a second file beside the database, so a copy of the database on its own
192
- can be missing the last thing that was said; stopping the app folds that file back in. Moving to
193
- another computer is the same folder put in the same place there. If the app ever cannot open the
194
- database, the terminal it was started in asks whether to set it aside and start over; yes moves it
195
- next to the new one with `.corrupt-` and a number in its name, and nothing is thrown away. Started by
196
- autostart it cannot ask, so it does not come up until it is started once from a terminal. Data a
197
- newer version of the app has opened is not offered to be set aside: an older one — an autostart left
198
- behind while `npx` runs the latest — says so and stops, and the newer one opens it as it was.
141
+ Everything is on this computer, in one folder: `.thursday` in their home folder when started with
142
+ `npx thursday-agent` or installed, or the folder it was started from otherwise; every start prints
143
+ it. It holds the database (calls, memory, bots, keys, her settings), the kept sign-ins, and the
144
+ workspace with finished work, each bot's folder and installed skills. Updating the app never touches
145
+ it. Nothing is sent anywhere except to the model providers and services they set up. The app listens
146
+ only to this computer and has no account.
147
+
148
+ The bots' browser is the one thing outside it: a download of a few hundred megabytes in the
149
+ computer's cache folder.
150
+
151
+ To back up, copy that folder with the app stopped; moving to another computer is the same folder
152
+ put in the same place. If the app ever cannot open the database, the terminal asks whether to set it
153
+ aside and start fresh; the old file is kept beside the new one, with `.corrupt-` in its name.
199
154
 
200
155
  ## What it costs
201
156
 
202
- The user brings their own keys, so the cost is whatever those providers charge: a spoken call is
203
- billed per minute it is open, silence included, and everything else by how much text the models
204
- read and write — a call in writing included. The GPT Subscription spends the ChatGPT plan's usage
205
- instead. A long job on a large model is what adds up fastest.
157
+ The user brings their own keys, so the cost is whatever those providers charge: a spoken call by the
158
+ minute it is open, silence included, and everything else by how much text the models read and
159
+ write, a call in writing included. The GPT Subscription uses the ChatGPT plan instead. A long job on
160
+ a large model adds up fastest.
package/guide/trouble.md CHANGED
@@ -1,88 +1,65 @@
1
1
  # When something does not work
2
2
 
3
- Say what happened and the one thing that fixes it. Most of these are a setting or a key, and the app
4
- has already said which: a provider's own words are shown as they came, never hidden.
3
+ Say what happened and the one thing that fixes it; most problems are a setting or a key.
5
4
 
6
5
  ## A call will not open, or ended
7
6
 
8
- - **"Call failed"** shows the provider's reason. A refused key or no credit left is fixed in
9
- **Settings › API keys**; a model the key cannot use is changed in **Settings › Thursday › Models**.
10
- - **"One call at a time"**: another tab of the app has a spoken call on. Hang up there, or go on
11
- there; two lines at once were billed twice and said every update twice. A tab closed mid-call
12
- ends its call as it goes.
13
- - **She cannot be heard** on a call that opened by itself (she called back): the browser holds the
14
- sound until the page is touched. A tap anywhere lets it through.
15
- - **She does not hear them**: the browser asks for the microphone on the first call. If that was
16
- refused, it is allowed again from the site's settings in the address bar. The first run's
17
- microphone step says which it was: not allowed, no microphone found, one that would not start
18
- (another app may be using it), or the browser's own words for anything else.
19
- - **The call ended by itself**: the line under her face says why — *25s of quiet* (nothing was said
20
- for 25 seconds; the last 10 count down on screen, and an update she is reading is let finish
21
- first), *Thursday hung up*, *the call ran to Live's time limit*, *Live closed the call*, or *the
22
- connection dropped*. Only a dropped connection or a close Live gives no reason for shows as a
23
- failure; when Live's safety filter stops a call, a note says so. Work already handed to a bot is
24
- not affected.
7
+ - **"Call failed"** shows the provider's reason. A refused key or no credit is fixed in **Settings ›
8
+ API keys**; a model the key cannot use is changed in **Settings › Thursday**, under Models.
9
+ - **"One call at a time"**: another tab of the app has a spoken call on. Hang up there first.
10
+ - **She cannot be heard** on a call she opened herself: the browser holds sound until the page is
11
+ touched. A tap anywhere fixes it.
12
+ - **She does not hear them**: the microphone was refused, or another app is using it. Allow it again
13
+ from the site's settings in the address bar.
14
+ - **The call ended by itself**: the line under her face says why, such as *25s of quiet* (nothing
15
+ said for 25 seconds), *Thursday hung up* or *the connection dropped*.
25
16
 
26
17
  ## "Hey thursday" does nothing
27
18
 
28
- The wake phrase is off until it is switched on in **Settings › Thursday › Starting a call**, and it
29
- may have been rewritten there. It uses the browser's own speech recognition, which not every browser
30
- has, and needs the microphone while no call is open and the app's tab open. When it cannot start,
31
- the screen says "Wake word off" with the reason. Tapping her face always works, and so does the
32
- shortcut once it is switched on.
19
+ The wake phrase is off until it is switched on in **Settings › Thursday › Starting a call**, where
20
+ the phrase can also be changed. It needs a browser with speech recognition, the microphone, and the
21
+ app's tab open. When it cannot start, the screen says "Wake word off" with the reason. Tapping her
22
+ face always works.
33
23
 
34
24
  ## A job stopped
35
25
 
36
- A job never fails for good; it pauses and waits.
26
+ A job does not fail for good; it pauses and waits.
37
27
 
38
- - **It asked something**: the question is in its thread, in the corner at the bottom right and in
39
- the card above the pill. Answering it, on screen or through her, carries it on.
40
- - **The model broke or the provider refused**: a broken model call is tried once more by itself;
41
- after that the thread says why. Fix the key or pick another model on the bot's page, then
42
- **Continue**.
43
- - **The GPT Subscription ran out of its plan's usage**: the job stops and says when the plan resets;
44
- its row in **Settings › API keys** shows *N% used* or *Limit reached*, and when it resets.
45
- - **The server stopped while it was running** — the terminal was quit or the machine restarted: the
46
- job waits, and **Continue** picks it up. Closing every tab is not this: jobs run on with nothing
47
- open, and a machine that slept carries on when it wakes.
48
- - **It reached its step limit**: a long job stops to check in after many steps without word from the
49
- user. **Continue** gives it another run.
50
- - **They stopped it**: writing to the thread picks it up again.
28
+ - **It asked something**: the question is in its thread, in the corner at the bottom right.
29
+ Answering it, on screen or through her, carries it on.
30
+ - **The model failed or the provider refused**: the thread says why. Fix the key or pick another
31
+ model on the bot's page, then press **Continue**.
32
+ - **The GPT Subscription ran out**: the job says when the plan resets; its row in **Settings › API
33
+ keys** shows *Limit reached*.
34
+ - **The app stopped while it ran** (terminal closed, computer restarted), or **it reached its step
35
+ limit**: **Continue** picks it up. Closing the browser tab does not stop jobs.
36
+ - **They stopped it**: writing to the thread starts it again.
51
37
 
52
38
  ## A bot says it cannot do something
53
39
 
54
- - **Make an image, a video, a voice, or transcribe**: no model is picked for that kind. **Settings ›
55
- Models** has one slot for each, under Studio.
56
- - **Open a web page**: the bots' browser is downloaded in the background the first time the app
57
- starts, a few hundred megabytes. Until that finishes, a bot cannot browse. On Linux it also needs
58
- system libraries that a desktop usually has and a server or a container may not; without them it
59
- closes as soon as it opens. `npx playwright install-deps chromium`, run once with administrator
60
- rights, installs them.
61
- - **Use this Mac's apps and windows**: macOS has to allow it. The bot says which two permissions are
62
- missing, Screen Recording and Accessibility, and only the user can grant them in System Settings.
63
- - **Sign in or pay**: by design. The bot opens the page and waits for them. A sign-in is kept for
64
- next time (`setup.md`, Sites they signed in to); paying is always theirs to press. A site that asks
65
- again on every job although they signed in is refusing a sign-in carried between browsers: the
66
- same section says how a bot works in their own Chrome instead.
67
- - **Search the web**: only OpenAI, Claude, Gemini and xAI models search by themselves, and only on
68
- their own keys. A bot on anything else — the GPT Subscription and the Gateway included — opens
40
+ - **Make an image, a video, speech, or a transcript**: pick a model for it in **Settings › Models**,
41
+ under Studio.
42
+ - **Open a web page**: the bots' browser downloads in the background on first start, a few hundred
43
+ megabytes. On a Linux server it may also need `npx playwright install-deps chromium`, run once
44
+ with administrator rights.
45
+ - **Use this Mac's apps**: macOS must allow Screen Recording and Accessibility in System Settings.
46
+ - **Sign in or pay**: on purpose. The bot opens the page and waits; paying is always theirs to
47
+ press. A site that asks for a sign-in on every job can be used through their own Chrome
48
+ (`setup.md`, Sites they signed in to).
49
+ - **Search the web**: a bot on the Vercel AI Gateway or a provider without its own search opens
69
50
  pages instead. A search key (Exa) in **Settings › API keys** gives every bot search.
70
- - **Reach a connected service**: a server that needs signing in again turns red in **Settings ›
71
- Connectors**; **Reconnect** there signs in again. A server that does not let an app register
72
- itself for sign-in cannot be connected here at all: its error says so, then what the server
73
- answered.
51
+ - **Reach a connected service**: one that needs signing in again turns red in **Settings ›
52
+ Connectors**; **Reconnect** fixes it.
74
53
  - **Take a file**: at most 8 files go with one message, 25 MB each.
75
54
 
76
55
  ## Starting over
77
56
 
78
- Deleting a single call, thread or note is on its own screen. **Settings › Thursday › History ›
79
- Reset history** deletes every call, every job and everything she remembers, for good; keys, bots and
80
- connectors stay, and so does what each bot keeps for itself (its own memory and the skills it
81
- installed, which go only when that bot is deleted). Wiping everything, keys included, is removing the data folder (`setup.md` says
82
- where).
57
+ **Settings › Thursday › History › Reset history** deletes every call, every job and everything she
58
+ remembers, for good; keys, bots and connectors stay, and so does what each bot keeps for itself.
59
+ Wiping everything, keys included, means deleting the data folder (`setup.md`, Where the files are).
83
60
 
84
61
  ## Still stuck
85
62
 
86
- **Ask on Discord**, under community at the end of the Settings list, opens the app's community: a
87
- question there is answered by people who use and build the app. A bug that happens again the same
88
- way goes to **GitHub**, just below it, under Issues, with the steps that bring it back.
63
+ **Ask on Discord**, under community in the Settings list, opens the app's community. A bug that
64
+ happens again the same way goes to **GitHub**, just below it, as an issue with the steps that bring
65
+ it back.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thursday-agent",
3
- "version": "0.17.2",
3
+ "version": "0.18.0",
4
4
  "description": "A voice agent that runs on your own machine — talk to her, she hands the slow work to bots with a shell, a browser and skills.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -97,7 +97,7 @@ const out = join(
97
97
 
98
98
  const cur = trip.currency ? String(trip.currency).toUpperCase() : null;
99
99
  const lang = String(trip.lang ?? "en");
100
- // Built without them, a page in Korean came out with "Day by day" and "Before you go" on it,
100
+ // Built without them, a page in another language came out with "Day by day" and "Before you go" on it,
101
101
  // and the warning printed after the build was passed over
102
102
  if (!lang.startsWith("en") && !trip.labels)
103
103
  fail(