thursday-agent 0.1.2 → 0.3.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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +5 -5
- package/.next/routes-manifest.json +27 -3
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +2 -2
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +14 -14
- package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/artifact/route.js +3 -3
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/memory/files/route.js +10 -0
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/memory/files/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/memory/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/memory/route/build-manifest.json +12 -0
- package/.next/server/app/api/bot/memory/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/bot/memory/route.js +14 -0
- package/.next/server/app/api/bot/memory/route.js.map +5 -0
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/memory/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/route.js +7 -7
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/task/[id]/route.js +9 -9
- package/.next/server/app/api/bot/task/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/task/route.js +8 -8
- package/.next/server/app/api/bot/task/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js +6 -6
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/events/route.js +4 -5
- package/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/server/app/api/file/[...path]/route.js +3 -3
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/route.js +10 -9
- package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/credits/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/credits/route/build-manifest.json +12 -0
- package/.next/server/app/api/llm-model/credits/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/llm-model/credits/route.js +16 -0
- package/.next/server/app/api/llm-model/credits/route.js.map +5 -0
- package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/credits/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/llm-model/route.js +10 -8
- package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/subscription/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/subscription/route/build-manifest.json +12 -0
- package/.next/server/app/api/llm-model/subscription/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/llm-model/subscription/route.js +15 -0
- package/.next/server/app/api/llm-model/subscription/route.js.map +5 -0
- package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/subscription/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/mcp/[name]/route.js +5 -5
- package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth/callback/route.js +6 -6
- package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +5 -5
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/tools/route.js +5 -5
- package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/edit/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/edit/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/edit/route.js +24 -0
- package/.next/server/app/api/memory/edit/route.js.map +5 -0
- package/.next/server/app/api/memory/edit/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/{tidy → edit}/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/memory/route.js +7 -8
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js +3 -3
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +3 -3
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js +9 -7
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/skills/route.js +9 -7
- package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +16 -15
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/route.js +4 -5
- package/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
- package/.next/server/app/artifact/[...path]/page.js +5 -6
- package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/favicon.ico/route.js +3 -4
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/page/server-reference-manifest.json +66 -77
- package/.next/server/app/page.js +11 -11
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +5 -1
- package/.next/server/chunks/[externals]__0dzuk6_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01dkp4a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02va5wz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02xjoto._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04q--0f._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0bl-e63._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ce8nf8._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0ffbg85._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0j7z0r3._.js +12 -0
- package/.next/server/chunks/[root-of-the-server]__0jq4ohy._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0ls6_8y._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0pa2n68._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0q0vvt2._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1-ga0kh._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__11n256_._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__12cabg9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1339jnv._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__15bjnu5._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__18_teo8._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1anc1p9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1ccon1w._.js +10 -0
- package/.next/server/chunks/[root-of-the-server]__1fizn31._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1llj3-b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1orn-5b._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__1p8m3f4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wa1k7r._.js +8 -0
- package/.next/server/chunks/{_1hzrsvg._.js → _0-73of8._.js} +6 -6
- package/.next/server/chunks/{_1cbk7ms._.js → _0-fjql4._.js} +10 -10
- package/.next/server/chunks/_00xh_q0._.js +27 -0
- package/.next/server/chunks/{_0y8is-s._.js → _03a0897._.js} +1 -1
- package/.next/server/chunks/{_0pppbb5._.js → _03kp0jp._.js} +166 -35
- package/.next/server/chunks/_051qh8u._.js +3 -0
- package/.next/server/chunks/{node_modules_next_04q-o58._.js → _05dla15._.js} +2 -2
- package/.next/server/chunks/_05h2cii._.js +1 -1
- package/.next/server/chunks/_0c9j6rb._.js +49 -0
- package/.next/server/chunks/_0fzqt2y._.js +74 -44
- package/.next/server/chunks/{_0kl37zl._.js → _0ioz3nd._.js} +1 -1
- package/.next/server/chunks/_0iwfby5._.js +3 -0
- package/.next/server/chunks/{_0hin38_._.js → _0khihjk._.js} +5 -5
- package/.next/server/chunks/_0mecv0f._.js +26 -0
- package/.next/server/chunks/_0mh8j4m._.js +3 -0
- package/.next/server/chunks/{_1icgbi8._.js → _0n74zsf._.js} +2 -2
- package/.next/server/chunks/_0obojvv._.js +3 -0
- package/.next/server/chunks/_0recufk._.js +49 -0
- package/.next/server/chunks/{_1t8fv7b._.js → _0rnf-6n._.js} +2 -2
- package/.next/server/chunks/_0sb7tlz._.js +3 -0
- package/.next/server/chunks/{_0jgm3b8._.js → _0u10wmw._.js} +6 -6
- package/.next/server/chunks/{_12nr4xc._.js → _0u4aiy2._.js} +2 -2
- package/.next/server/chunks/_0wp4le3._.js +1 -1
- package/.next/server/chunks/_0y5fg-x._.js +1 -1
- package/.next/server/chunks/_1230wbx._.js +10 -0
- package/.next/server/chunks/_12nheja._.js +3 -0
- package/.next/server/chunks/_13510xh._.js +3 -0
- package/.next/server/chunks/_15hq89o._.js +1 -1
- package/.next/server/chunks/_17l5ygt._.js +49 -0
- package/.next/server/chunks/{_0ks6_sg._.js → _18-1wcc._.js} +6 -6
- package/.next/server/chunks/_1_5mnq4._.js +18 -0
- package/.next/server/chunks/{_0tzfesa._.js → _1_9mjx-._.js} +1 -1
- package/.next/server/chunks/_1d0j961._.js +6 -0
- package/.next/server/chunks/_1d5zmy8._.js +1 -1
- package/.next/server/chunks/_1drgfx4._.js +18 -0
- package/.next/server/chunks/{_1skgy7b._.js → _1e48czp._.js} +5 -5
- package/.next/server/chunks/_1f46eie._.js +3 -0
- package/.next/server/chunks/_1h5_8sk._.js +3 -0
- package/.next/server/chunks/_1hdnxb7._.js +3 -0
- package/.next/server/chunks/_1j8k_j5._.js +3 -0
- package/.next/server/chunks/{_10qam6o._.js → _1kg70wc._.js} +5 -5
- package/.next/server/chunks/_1krd9rf._.js +3 -0
- package/.next/server/chunks/_1nc0eui._.js +11 -0
- package/.next/server/chunks/_1nula3v._.js +3 -0
- package/.next/server/chunks/_1pf4qe-._.js +3 -0
- package/.next/server/chunks/_1php4eq._.js +1 -1
- package/.next/server/chunks/_1qxheoa._.js +3 -0
- package/.next/server/chunks/_1x6kd1r._.js +3 -0
- package/.next/server/chunks/_1yuv4vp._.js +1 -1
- package/.next/server/chunks/_1zjrdag._.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_memory_files_route_actions_1_xd_8f.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_memory_route_actions_1a8xfr7.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_credits_route_actions_0v424pb.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_subscription_route_actions_0-udcm5.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_edit_route_actions_02sfnmr.js +3 -0
- package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
- package/.next/server/chunks/features_0rpfxbk._.js +3 -0
- package/.next/server/chunks/features_1qf3cei._.js +3 -0
- package/.next/server/chunks/features_bot_0zt92oh._.js +3 -0
- package/.next/server/chunks/features_bot_bot_query_ts_12mgkl2._.js +1 -1
- package/.next/server/chunks/features_memory_1uqvksn._.js +6 -0
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0tf290y._.js → node_modules_consola_dist_chunks_prompt_mjs_0i7cvml._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0228f43._.js → node_modules_consola_dist_chunks_prompt_mjs_0icqaqw._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0ir-vo2._.js → node_modules_consola_dist_chunks_prompt_mjs_0j61-ma._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0otw8ef._.js → node_modules_consola_dist_chunks_prompt_mjs_0r28-sm._.js} +1 -1
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0v_7drq._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_11zjo-1._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1pycqsq._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1xoq2rl._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js +3 -0
- package/.next/server/chunks/ssr/[externals]__0dizgek._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09q9med._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0_69wqr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0i8ie7f._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0jsmmb-._.js → [root-of-the-server]__0mz33a7._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tbkdlx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0vnmv-s._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0f6s48x._.js → [root-of-the-server]__0xpcv9w._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xtssj3._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0zkv7z_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +57 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__15_uhip._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__16jc196._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1cyjywu._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1eh7hid._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1gtlw6v._.js +43 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1mzi-ju._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1ox7hbk._.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pduf5n._.js +3 -0
- package/.next/server/chunks/ssr/{_1mznrxk._.js → _001_ms1._.js} +3 -3
- package/.next/server/chunks/ssr/_01_6m32._.js +3 -0
- package/.next/server/chunks/ssr/_01n3o0m._.js +3 -0
- package/.next/server/chunks/ssr/_07uchnc._.js +3 -0
- package/.next/server/chunks/ssr/_0ap2fzn._.js +3 -0
- package/.next/server/chunks/ssr/_0c-ql2m._.js +3 -0
- package/.next/server/chunks/ssr/_0h42fze._.js +3 -0
- package/.next/server/chunks/ssr/_0h7zdni._.js +1 -1
- package/.next/server/chunks/ssr/_0i_6q1w._.js +41 -0
- package/.next/server/chunks/ssr/_0kbkmar._.js +3 -0
- package/.next/server/chunks/ssr/_0lu1n_x._.js +3 -0
- package/.next/server/chunks/ssr/{_077-g6s._.js → _0mb8zc8._.js} +3 -3
- package/.next/server/chunks/ssr/_0mo2w06._.js +3 -0
- package/.next/server/chunks/ssr/{_13punpm._.js → _0q0zan6._.js} +2 -2
- package/.next/server/chunks/ssr/{_0gd4vaa._.js → _0u2jv_x._.js} +94 -58
- package/.next/server/chunks/ssr/_0y0tiht._.js +4 -0
- package/.next/server/chunks/ssr/_0zhoc3r._.js +3 -0
- package/.next/server/chunks/ssr/_1-teee5._.js +3 -3
- package/.next/server/chunks/ssr/_13fke0x._.js +3 -0
- package/.next/server/chunks/ssr/{_0q_2f2x._.js → _13z3f85._.js} +2 -2
- package/.next/server/chunks/ssr/_14_lw10._.js +3 -0
- package/.next/server/chunks/ssr/_15j2_8f._.js +3 -0
- package/.next/server/chunks/ssr/{_0lc_7c8._.js → _1eoqg_g._.js} +2 -2
- package/.next/server/chunks/ssr/_1sji22n._.js +3 -0
- package/.next/server/chunks/ssr/_1spzm8z._.js +3 -0
- package/.next/server/chunks/ssr/{_19_o9d-._.js → _1vi_uo7._.js} +2 -2
- package/.next/server/chunks/ssr/_1vyd1ji._.js +3 -0
- package/.next/server/chunks/ssr/_1xvgn77._.js +3 -0
- package/.next/server/chunks/ssr/_20kd_n0._.js +42 -0
- package/.next/server/chunks/ssr/features_bot_1s_-2vj._.js +3 -0
- package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
- package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
- package/.next/server/chunks/ssr/lib_date-like_ts_02is0pw._.js +3 -0
- package/.next/server/chunks/ssr/lib_realtime_12wg_dd._.js +27 -0
- package/.next/server/chunks/ssr/lib_realtime_15h_v1v._.js +27 -0
- package/.next/server/chunks/ssr/{node_modules_1d-is1o._.js → node_modules_063xwpp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ub40gk._.js → node_modules_0bvraul._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1nhw9qg._.js → node_modules_0eu1va6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0xwx4u-._.js → node_modules_0h50b8n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_043-236._.js → node_modules_0h5hnr1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1t0y5jt._.js → node_modules_0h7u60n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1k29j1j._.js → node_modules_0lm7_vm._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_16i4o_3._.js → node_modules_0mwym0g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1y8_3vg._.js → node_modules_0rjg6t1._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_0x3-ply._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_108wd2o._.js → node_modules_0y_cded._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1jatz7w._.js → node_modules_0z5tsu8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ls96je._.js → node_modules_0zp9r92._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_06kvvuo._.js → node_modules_1-hc6uv._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1_588_4._.js → node_modules_113tz0l._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ipn1ho._.js → node_modules_124bue5._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_17bwo43._.js +55 -0
- package/.next/server/chunks/ssr/{node_modules_0_j7-g4._.js → node_modules_1_n3ztw._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_20ynonm._.js → node_modules_1bc7gu8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1hn_sd5._.js → node_modules_1bgb6-f._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0bue6gy._.js → node_modules_1h4a4pp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0fbw5-u._.js → node_modules_1i7u1ia._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ee8gav._.js → node_modules_1juq3hs._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0_fvxnt._.js → node_modules_1l0qtdu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13f2md6._.js → node_modules_1t9cyee._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0y2-av4._.js → node_modules_1uuj9x1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_00d6675._.js → node_modules_1vqb6po._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1v0077l._.js → node_modules_1xx28h1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_092s8nx._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0d3skpl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1nvexgu._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0i44kk5._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_@vercel_oidc_dist_0qe30a_._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_consola_dist_chunks_prompt_mjs_05cwqv2._.js +47 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_0w6mzq5._.js → node_modules_next_dist_0drixxt._.js} +4 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_1n3w9lb._.js +2 -2
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +67 -78
- package/.next/static/chunks/{31ttnjt6g35a0.js → 0ev4hyghq0mbb.js} +1 -1
- package/.next/static/chunks/0r5qcctujhxli.js +1 -0
- package/.next/static/chunks/0tmgrnlje14-s.js +3 -0
- package/.next/static/chunks/0x79tx04dxbpp.js +1 -0
- package/.next/static/chunks/0xzgvc0fkdb6t.js +1 -0
- package/.next/static/chunks/10teww7wt-f6h.js +1 -0
- package/.next/static/chunks/14hgtsjg-kael.css +1 -0
- package/.next/static/chunks/17donp69y4do7.js +40 -0
- package/.next/static/chunks/1dkjg87pxk0n9.js +28 -0
- package/.next/static/chunks/1ekc7ul556kbl.js +1 -0
- package/.next/static/chunks/{1khakdu_iuedc.js → 1grhjo7a5a0_-.js} +1 -1
- package/.next/static/chunks/1kq8h8wi_e0bc.js +53 -0
- package/.next/static/chunks/1okqiww3pnwka.js +1 -0
- package/.next/static/chunks/26-pr2c9ro222.js +1 -0
- package/.next/static/chunks/{2ihkf6l2jowo9.js → 280t0_e99i276.js} +3 -3
- package/.next/static/chunks/28cizcdaabd4h.js +1 -0
- package/.next/static/chunks/2a0k6jlq0_v1u.js +2 -0
- package/.next/static/chunks/2fzs9fm8yarvq.js +1 -0
- package/.next/static/chunks/2h0sd2vumhb15.js +1 -0
- package/.next/static/chunks/2hw2f6zmt7fmt.js +1 -0
- package/.next/static/chunks/2t4vhi3m8ahya.js +1 -0
- package/.next/static/chunks/2tigdtz3dpcy8.js +1 -0
- package/.next/static/chunks/3111pj5wnjgos.js +1 -0
- package/.next/static/chunks/3786h5vayt80-.js +28 -0
- package/.next/static/chunks/{3aquirz5h71da.js → 3agpgkwaa321p.js} +1 -1
- package/.next/static/chunks/3cfi_q6d_wtci.js +1 -0
- package/.next/static/chunks/3ok9_x74rip3v.js +1 -0
- package/.next/static/chunks/3xk7yqgomx7yq.js +1 -0
- package/.next/static/chunks/3xpbkl66ssib5.js +38 -0
- package/.next/static/media/favicon.37o1pjldwi2uc.ico +0 -0
- package/README.md +6 -4
- package/app/api/bot/memory/files/route.ts +14 -0
- package/app/api/bot/memory/route.ts +5 -0
- package/app/api/events/app-event.client.ts +24 -0
- package/app/api/events/app-event.server.ts +45 -0
- package/app/api/events/app-event.ts +42 -0
- package/app/api/llm-model/catalog/route.ts +12 -0
- package/app/api/llm-model/credits/route.ts +11 -0
- package/app/api/llm-model/route.ts +26 -0
- package/app/api/llm-model/subscription/route.ts +11 -0
- package/app/api/memory/edit/route.ts +7 -0
- package/app/api/memory/route.ts +21 -0
- package/app/api/query-key.ts +159 -0
- package/app/api/thursday/tool-call/route.ts +67 -0
- package/bin/thursday.mjs +3 -0
- package/components/ui/button-group.tsx +45 -0
- package/components/ui/custom-icon.tsx +259 -0
- package/components/ui/dropdown-menu.tsx +271 -0
- package/components/ui/folded-text.tsx +68 -0
- package/components/ui/input-group.tsx +157 -0
- package/components/ui/json-view.tsx +240 -0
- package/components/ui/shiny-text.tsx +55 -0
- package/components/ui/text-type.tsx +213 -0
- package/components/ui/theme-sync.tsx +9 -0
- package/database/migrations/{20260908030742_rainy_marvel_zombies → 20260910173049_numerous_spirit}/migration.sql +30 -33
- package/database/migrations/{20260908030742_rainy_marvel_zombies → 20260910173049_numerous_spirit}/snapshot.json +124 -145
- package/database/migrations/20260911030320_opposite_jack_power/migration.sql +1 -0
- package/database/migrations/20260911030320_opposite_jack_power/snapshot.json +1158 -0
- package/docs/how-it-works.md +59 -0
- package/docs/images/keeps-going.png +0 -0
- package/docs/images/task-thread.png +0 -0
- package/docs/images/two-minds.png +0 -0
- package/features/ai/chatgpt.ts +617 -0
- package/features/ai/components/chatgpt-sign-in.tsx +66 -0
- package/features/ai/components/model-picker.tsx +17 -1
- package/features/ai/components/provider-icon.tsx +1 -0
- package/features/ai/load-tools.ts +105 -39
- package/features/ai/model.schema.ts +232 -34
- package/features/ai/model.ts +169 -24
- package/features/ai/prompts/bot.prompt.ts +245 -59
- package/features/ai/prompts/memory-edit.prompt.ts +33 -0
- package/features/ai/prompts/prompt-helper.ts +75 -30
- package/features/ai/prompts/thursday.prompt.ts +42 -17
- package/features/ai/tools/bot.tool.ts +32 -30
- package/features/ai/tools/connected.ts +17 -4
- package/features/ai/tools/mcp.tool.ts +5 -5
- package/features/ai/tools/memory.tool.ts +142 -74
- package/features/ai/tools/search.tool.ts +136 -47
- package/features/ai/tools/studio.tool.ts +5 -5
- package/features/ai/tools/tool-name.ts +2 -3
- package/features/ai/tools/workspace.tool.ts +33 -4
- package/features/bot/bot.action.ts +24 -7
- package/features/bot/bot.memory.ts +89 -0
- package/features/bot/bot.query.ts +41 -6
- package/features/bot/bot.run.ts +516 -210
- package/features/bot/bot.runner.ts +463 -93
- package/features/bot/bot.schema.ts +84 -7
- package/features/bot/bot.seed.ts +89 -16
- package/features/bot/components/bot-mark.tsx +122 -20
- package/features/bot/components/bot-room.tsx +519 -391
- package/features/bot/components/bot-setting.tsx +832 -341
- package/features/bot/components/bot-tool.tsx +2 -6
- package/features/bot/components/mark-palette.tsx +54 -0
- package/features/bot/components/path-chips.tsx +1 -1
- package/features/bot/components/task-badge.tsx +26 -6
- package/features/bot/components/task-reply.tsx +22 -33
- package/features/bot/components/task-setting.tsx +20 -17
- package/features/bot/task.query.ts +233 -33
- package/features/bot/task.store.ts +53 -9
- package/features/config/components/config-setting.tsx +265 -34
- package/features/config/components/models-badge.tsx +42 -0
- package/features/config/config.action.ts +12 -0
- package/features/config/config.const.ts +38 -2
- package/features/connectors/mcp.manager.ts +10 -2
- package/features/intro/components/intro.tsx +47 -46
- package/features/memory/components/memory-edit.tsx +338 -0
- package/features/memory/components/memory-setting.tsx +86 -79
- package/features/memory/memory.action.ts +3 -43
- package/features/memory/memory.edit.ts +87 -0
- package/features/memory/memory.query.ts +33 -44
- package/features/memory/memory.schema.ts +50 -97
- package/features/settings/components/settings.tsx +2 -0
- package/features/settings/settings.alert.ts +3 -1
- package/features/skills/components/skills-setting.tsx +9 -1
- package/features/thursday/components/ascii-orb.tsx +106 -90
- package/features/thursday/components/boot.tsx +7 -0
- package/features/thursday/components/call-log.tsx +219 -92
- package/features/thursday/components/face.tsx +6 -4
- package/features/thursday/components/tab-state.tsx +97 -0
- package/features/thursday/components/thursday-mark.tsx +4 -1
- package/features/thursday/components/thursday-setting.tsx +17 -47
- package/features/thursday/components/thursday.tsx +208 -95
- package/features/thursday/thursday.action.ts +12 -17
- package/features/thursday/thursday.query.ts +61 -70
- package/features/thursday/thursday.schema.ts +20 -7
- package/features/thursday/tool-line.ts +85 -11
- package/features/thursday/use-thursday.ts +86 -59
- package/features/workspace/components/file-view.tsx +4 -2
- package/features/workspace/workspace.ts +230 -13
- package/hooks/use-draft.ts +37 -0
- package/hooks/use-hotkey.ts +105 -0
- package/hooks/use-object-state.ts +51 -0
- package/hooks/use-on-visible.ts +72 -0
- package/hooks/use-theme.ts +106 -0
- package/hooks/use-wake-word.ts +262 -0
- package/lib/limits.ts +1 -1
- package/lib/oauth-page.ts +27 -0
- package/lib/realtime/openai.ts +2 -2
- package/lib/realtime/realtime.driver.ts +34 -1
- package/lib/realtime/realtime.protocol.ts +7 -1
- package/lib/realtime/realtime.tap.ts +122 -0
- package/lib/sandbox.ts +60 -29
- package/lib/tokens.ts +19 -0
- package/package.json +1 -1
- package/skills/browser/SKILL.md +55 -34
- package/.next/server/app/api/memory/tidy/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/memory/tidy/route.js +0 -23
- package/.next/server/app/api/memory/tidy/route.js.nft.json +0 -1
- package/.next/server/chunks/[root-of-the-server]__019dx9f._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__02_2sm-._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__02kt8yn._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__05luceg._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__06t77t4._.js +0 -11
- package/.next/server/chunks/[root-of-the-server]__0bed6hu._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0dupqt7._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0h59di-._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0j_n5l3._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0le4d-p._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0m8ywyo._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__0nfuugi._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0phdgco._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0qjqtwo._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0t_dqaj._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0wvgrsl._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0yk6s3w._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0z3gelv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__10qshki._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__113fqg5._.js +0 -12
- package/.next/server/chunks/[root-of-the-server]__11w_7_3._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__16thabu._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__173nhwf._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1_0q_9w._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1_aoyr9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1bqhuh9._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1cqizfq._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1dow0bz._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1e-ci13._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1gmn1cs._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__1lr7j9t._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1mzp_el._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1txedx6._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1u_qvc7._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1zgpz1w._.js +0 -3
- package/.next/server/chunks/_012yhfm._.js +0 -39
- package/.next/server/chunks/_06mxlgn._.js +0 -3
- package/.next/server/chunks/_07rtlxv._.js +0 -3
- package/.next/server/chunks/_0a351g7._.js +0 -6
- package/.next/server/chunks/_0kjjmag._.js +0 -3
- package/.next/server/chunks/_0zmestz._.js +0 -55
- package/.next/server/chunks/_0zuzmt_._.js +0 -39
- package/.next/server/chunks/_12bbv5i._.js +0 -96
- package/.next/server/chunks/_15q1pig._.js +0 -3
- package/.next/server/chunks/_1drv2et._.js +0 -36
- package/.next/server/chunks/_1ic3bew._.js +0 -5
- package/.next/server/chunks/_1mxn_lb._.js +0 -3
- package/.next/server/chunks/_1uj4_io._.js +0 -10
- package/.next/server/chunks/_1x7p319._.js +0 -6
- package/.next/server/chunks/_1yldgo4._.js +0 -55
- package/.next/server/chunks/_2050gwn._.js +0 -255
- package/.next/server/chunks/_next-internal_server_app_api_memory_tidy_route_actions_0_cfuom.js +0 -3
- package/.next/server/chunks/features_0scmr4i._.js +0 -3
- package/.next/server/chunks/features_bot_task_query_ts_11xuzl3._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0vorg6w._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0ykklj0._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1ryg3wh._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1vmaq9f._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1vwbnq_._.js +0 -3
- package/.next/server/chunks/ssr/[externals]_node_crypto_1kn79-7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__01id-v3._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0b-0i32._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0dfwvr4._.js +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__0iuoa-r._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1-mnhyd._.js +0 -90
- package/.next/server/chunks/ssr/[root-of-the-server]__185grso._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1minz8_._.js +0 -3
- package/.next/server/chunks/ssr/_0-mc7ro._.js +0 -3
- package/.next/server/chunks/ssr/_01p5r6-._.js +0 -3
- package/.next/server/chunks/ssr/_09-0k3z._.js +0 -3
- package/.next/server/chunks/ssr/_0ay6b01._.js +0 -3
- package/.next/server/chunks/ssr/_0cvjbuz._.js +0 -3
- package/.next/server/chunks/ssr/_0fafgvl._.js +0 -3
- package/.next/server/chunks/ssr/_0j4v8of._.js +0 -3
- package/.next/server/chunks/ssr/_0l81bzy._.js +0 -3
- package/.next/server/chunks/ssr/_0nso8tp._.js +0 -3
- package/.next/server/chunks/ssr/_0sf1isi._.js +0 -3
- package/.next/server/chunks/ssr/_0ti51xc._.js +0 -3
- package/.next/server/chunks/ssr/_0y84qo6._.js +0 -3
- package/.next/server/chunks/ssr/_10uvw3l._.js +0 -3
- package/.next/server/chunks/ssr/_1dcxzqe._.js +0 -3
- package/.next/server/chunks/ssr/_1e-dgz0._.js +0 -4
- package/.next/server/chunks/ssr/_1fq7zgb._.js +0 -3
- package/.next/server/chunks/ssr/_1jbv7m1._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_components_bot-setting_tsx_01ajft6._.js +0 -4
- package/.next/server/chunks/ssr/features_config_components_14jqgy4._.js +0 -3
- package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +0 -4
- package/.next/server/chunks/ssr/lib_realtime_0aetuyp._.js +0 -24
- package/.next/server/chunks/ssr/lib_realtime_18k_aj-._.js +0 -24
- package/.next/server/chunks/ssr/node_modules_zod_v4_classic_errors_05xv7vp.js +0 -3
- package/.next/server/chunks/ssr/node_modules_zod_v4_classic_external_15fmmz3.js +0 -55
- package/.next/static/chunks/0f9sq-7q_yxyl.js +0 -1
- package/.next/static/chunks/0tydnn2kybibk.js +0 -1
- package/.next/static/chunks/0yysv1gzin17t.js +0 -1
- package/.next/static/chunks/1fr5m75pwtyic.js +0 -1
- package/.next/static/chunks/1gy3bbv7usnjo.js +0 -1
- package/.next/static/chunks/1keib_gt066gc.js +0 -1
- package/.next/static/chunks/1ytnip8wdng93.js +0 -1
- package/.next/static/chunks/21rk8w7bda-su.js +0 -1
- package/.next/static/chunks/247d-r95j8xs0.js +0 -1
- package/.next/static/chunks/28g42tw8tsvhd.js +0 -1
- package/.next/static/chunks/29gyb3nubj51j.js +0 -53
- package/.next/static/chunks/2cwjgkt_hoyhj.js +0 -22
- package/.next/static/chunks/2fq_86jvq9ymq.js +0 -2
- package/.next/static/chunks/2rbf1fpd8n80-.js +0 -22
- package/.next/static/chunks/2ukj8k69y89um.js +0 -1
- package/.next/static/chunks/2uxum7qbyeyxd.js +0 -1
- package/.next/static/chunks/2wngeetfnzxkp.js +0 -2
- package/.next/static/chunks/388-t2v72jh39.css +0 -1
- package/.next/static/chunks/3fqvc0cg-atq_.js +0 -1
- package/.next/static/chunks/3p4egvfjxpatb.js +0 -1
- package/.next/static/chunks/3qe1w1ei-huhl.js +0 -1
- package/.next/static/chunks/3xxa2j56-f3nm.js +0 -3
- package/.next/static/chunks/3y40riycdip-i.js +0 -1
- package/.next/static/chunks/45a6zbtkelph9.js +0 -1
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- package/features/ai/prompts/memory-tidy.prompt.ts +0 -123
- package/features/ai/tools/tidy.tool.ts +0 -22
- package/features/memory/components/memory-tidy.tsx +0 -395
- package/features/memory/memory.tidy.ts +0 -332
- package/features/memory/tidy.query.ts +0 -135
- package/features/thursday/use-call-title.ts +0 -31
- /package/.next/server/app/api/{memory/tidy → bot/memory/files}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/{memory/tidy → bot/memory/files}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/{memory/tidy → bot/memory/files}/route.js.map +0 -0
- /package/.next/static/{X34BUd9bfdH27ripuwwBm → x1cCqY0kWpR_VcYx_lWO5}/_buildManifest.js +0 -0
- /package/.next/static/{X34BUd9bfdH27ripuwwBm → x1cCqY0kWpR_VcYx_lWO5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{X34BUd9bfdH27ripuwwBm → x1cCqY0kWpR_VcYx_lWO5}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { type ComponentProps, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { Button } from "@/components/ui/button";
|
|
5
|
+
import { toast } from "@/components/ui/toast";
|
|
6
|
+
import { startChatGptSignInAction } from "@/features/config/config.action";
|
|
7
|
+
import { useServerAction } from "@/lib/protocol/use-server-action";
|
|
8
|
+
|
|
9
|
+
/** How often to look whether the sign-in window was closed, and how long to keep looking: as long as the server listens for its answer. */
|
|
10
|
+
const WINDOW_POLL_MS = 700;
|
|
11
|
+
const WINDOW_WATCH_MS = 10 * 60_000;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Opens ChatGPT's sign-in in a window of its own. The answer lands on the server, which keeps it
|
|
15
|
+
* and signals the screen (`config`); whoever draws this takes it away once signed in. Until then
|
|
16
|
+
* the button waits, and stops waiting when the window is closed without finishing.
|
|
17
|
+
*/
|
|
18
|
+
export function ChatGptSignIn({
|
|
19
|
+
variant,
|
|
20
|
+
}: {
|
|
21
|
+
variant?: ComponentProps<typeof Button>["variant"];
|
|
22
|
+
}) {
|
|
23
|
+
const [waiting, setWaiting] = useState(false);
|
|
24
|
+
const watch = useRef<ReturnType<typeof setInterval> | null>(null);
|
|
25
|
+
const stopWatching = () => {
|
|
26
|
+
if (watch.current) clearInterval(watch.current);
|
|
27
|
+
watch.current = null;
|
|
28
|
+
};
|
|
29
|
+
useEffect(() => stopWatching, []);
|
|
30
|
+
|
|
31
|
+
const [start, starting] = useServerAction(startChatGptSignInAction, {
|
|
32
|
+
onOk: (url) => {
|
|
33
|
+
const popup = window.open(
|
|
34
|
+
url,
|
|
35
|
+
"thursday-chatgpt",
|
|
36
|
+
"popup,width=520,height=720",
|
|
37
|
+
);
|
|
38
|
+
if (!popup) {
|
|
39
|
+
toast.add({
|
|
40
|
+
type: "error",
|
|
41
|
+
title: "The sign-in window was blocked",
|
|
42
|
+
description: "Allow pop-ups for this page, then try again",
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
setWaiting(true);
|
|
47
|
+
stopWatching();
|
|
48
|
+
const deadline = Date.now() + WINDOW_WATCH_MS;
|
|
49
|
+
watch.current = setInterval(() => {
|
|
50
|
+
if (!popup.closed && Date.now() < deadline) return;
|
|
51
|
+
stopWatching();
|
|
52
|
+
setWaiting(false);
|
|
53
|
+
}, WINDOW_POLL_MS);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<Button
|
|
59
|
+
variant={variant}
|
|
60
|
+
loading={starting || waiting}
|
|
61
|
+
onClick={() => start()}
|
|
62
|
+
>
|
|
63
|
+
Sign in with ChatGPT
|
|
64
|
+
</Button>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
@@ -22,6 +22,7 @@ import type {
|
|
|
22
22
|
TextModelProviderId,
|
|
23
23
|
} from "../model.schema";
|
|
24
24
|
import { canMakeKind, MEDIA_MODEL_PROVIDERS } from "../model.schema";
|
|
25
|
+
import { ChatGptSignIn } from "./chatgpt-sign-in";
|
|
25
26
|
import { ModelBrowser } from "./model-browser";
|
|
26
27
|
import { ProviderIcon } from "./provider-icon";
|
|
27
28
|
|
|
@@ -35,10 +36,13 @@ export function ModelPicker({
|
|
|
35
36
|
provider,
|
|
36
37
|
model,
|
|
37
38
|
kind,
|
|
39
|
+
unset,
|
|
38
40
|
onChange,
|
|
39
41
|
}: {
|
|
40
42
|
provider: TextModelProviderId | null;
|
|
41
43
|
model: string;
|
|
44
|
+
/** What no provider reads as, when the caller has no default to fall back to. */
|
|
45
|
+
unset?: string;
|
|
42
46
|
/** What the model makes. Absent means a text model (bots, calls); set, only providers and suggestions for that kind remain. */
|
|
43
47
|
kind?: MediaKind;
|
|
44
48
|
onChange: (next: { provider: TextModelProviderId; model: string }) => void;
|
|
@@ -90,7 +94,7 @@ export function ModelPicker({
|
|
|
90
94
|
// Unset is a value, not a blank: a text model falls back to the app
|
|
91
95
|
// default (model.ts resolveDefaultModel), a media kind is simply not offered
|
|
92
96
|
<span className="text-muted-foreground">
|
|
93
|
-
{kind ? "Not picked" : "App default"}
|
|
97
|
+
{unset ?? (kind ? "Not picked" : "App default")}
|
|
94
98
|
</span>
|
|
95
99
|
)}
|
|
96
100
|
<ChevronDown className="size-3.5 text-muted-foreground" />
|
|
@@ -177,6 +181,18 @@ export function AskForKey({
|
|
|
177
181
|
},
|
|
178
182
|
});
|
|
179
183
|
|
|
184
|
+
// Signed in to, not typed; the sign-in's `config` signal re-reads hasKey and this goes away
|
|
185
|
+
if (provider.signIn) {
|
|
186
|
+
return (
|
|
187
|
+
<div className="flex items-center justify-between gap-2">
|
|
188
|
+
<p className="px-1 font-mono text-[11px] text-muted-foreground">
|
|
189
|
+
Runs on your plan once you sign in
|
|
190
|
+
</p>
|
|
191
|
+
<ChatGptSignIn variant="outline" />
|
|
192
|
+
</div>
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
180
196
|
return (
|
|
181
197
|
<div className="flex gap-2">
|
|
182
198
|
<Input
|
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
import { type ToolSet, tool } from "ai";
|
|
1
|
+
import { asSchema, type ToolSet, tool } from "ai";
|
|
2
2
|
import { formatDistanceToNowStrict } from "date-fns";
|
|
3
|
+
import { IS_DEV } from "@/config";
|
|
3
4
|
import type { TextModel } from "@/features/ai/model";
|
|
4
|
-
import { tidying } from "@/features/ai/prompts/prompt-helper";
|
|
5
|
+
import { clockNow, tidying } from "@/features/ai/prompts/prompt-helper";
|
|
5
6
|
import {
|
|
7
|
+
answerTool,
|
|
6
8
|
askThursdayTool,
|
|
7
9
|
delegateSpec,
|
|
8
|
-
reportTool,
|
|
9
10
|
taskSpec,
|
|
10
11
|
} from "@/features/ai/tools/bot.tool";
|
|
11
12
|
import { CALL_TOOLS } from "@/features/ai/tools/call.tool";
|
|
12
13
|
import { createMcpTools } from "@/features/ai/tools/mcp.tool";
|
|
13
|
-
import {
|
|
14
|
-
botRememberTool,
|
|
15
|
-
createMemoryTools,
|
|
16
|
-
} from "@/features/ai/tools/memory.tool";
|
|
14
|
+
import { createMemoryTools } from "@/features/ai/tools/memory.tool";
|
|
17
15
|
import { createSearchTool } from "@/features/ai/tools/search.tool";
|
|
18
16
|
import { createSkillTools } from "@/features/ai/tools/skills.tool";
|
|
19
|
-
import { tidyDoneTool } from "@/features/ai/tools/tidy.tool";
|
|
20
17
|
import { TOOL_NAMES } from "@/features/ai/tools/tool-name";
|
|
21
18
|
import { createWorkspaceTools } from "@/features/ai/tools/workspace.tool";
|
|
22
19
|
import { taskActivity } from "@/features/bot/bot.schema";
|
|
@@ -25,8 +22,9 @@ import { loadSkills } from "@/features/skills/skills.discover";
|
|
|
25
22
|
import { readCallSkillsOn } from "@/features/thursday/thursday.query";
|
|
26
23
|
import { jobShellEnv, openWorkspace } from "@/features/workspace/workspace";
|
|
27
24
|
import { toDate } from "@/lib/date-like";
|
|
25
|
+
import { logger } from "@/lib/logger";
|
|
26
|
+
import { estimateTokens } from "@/lib/tokens";
|
|
28
27
|
import { clip } from "@/lib/utils";
|
|
29
|
-
import { resolveSearchModel } from "./model";
|
|
30
28
|
|
|
31
29
|
/**
|
|
32
30
|
* Which tools each runtime is handed; what it is told about them is the prompt's job.
|
|
@@ -38,7 +36,7 @@ import { resolveSearchModel } from "./model";
|
|
|
38
36
|
* when Settings › Thursday says so (thursday.query readCallSkillsOn).
|
|
39
37
|
*/
|
|
40
38
|
|
|
41
|
-
export type ToolTarget = "thursday" | "bot" | "
|
|
39
|
+
export type ToolTarget = "thursday" | "bot" | "memory-edit";
|
|
42
40
|
|
|
43
41
|
/** Which runtime is running, and what that run knows about itself. */
|
|
44
42
|
export type ToolRun =
|
|
@@ -51,13 +49,13 @@ export type ToolRun =
|
|
|
51
49
|
target: "bot";
|
|
52
50
|
/** This run's bot name, the key of the bot table. */
|
|
53
51
|
bot: string;
|
|
54
|
-
/**
|
|
55
|
-
|
|
56
|
-
/** The model this run already resolved (bot.run resolveModel); `web_search`
|
|
52
|
+
/** The browser session this run's shell drives (workspace.ts jobShellEnv): the job's, or a borrowed bot's own. */
|
|
53
|
+
session?: string | null;
|
|
54
|
+
/** The model this run already resolved (bot.run resolveModel); its own native search is what `web_search` uses when no Exa key is set (tools/search.tool). */
|
|
57
55
|
model?: TextModel | null;
|
|
58
56
|
}
|
|
59
|
-
/**
|
|
60
|
-
| { target: "
|
|
57
|
+
/** An edit from the memory screen (memory/memory.edit): memory's read and two writes, run as the model calls them. */
|
|
58
|
+
| { target: "memory-edit" };
|
|
61
59
|
|
|
62
60
|
/**
|
|
63
61
|
* Starting work and following it. bot.runner is imported dynamically to break a cycle
|
|
@@ -76,7 +74,9 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
76
74
|
"@/features/bot/bot.query"
|
|
77
75
|
);
|
|
78
76
|
const found = await findJobBot(bot);
|
|
79
|
-
|
|
77
|
+
// A switched-off bot resolves (a job it already has still resumes) but is
|
|
78
|
+
// not one to pick, so it fails here rather than in listJobBots.
|
|
79
|
+
if (!found || found.disabled) {
|
|
80
80
|
const names = (await listJobBots()).map((one) => one.name);
|
|
81
81
|
return `There is no bot called "${bot}". The bots are: ${names.join(", ")}. Nothing was handed over — call again with one of those.`;
|
|
82
82
|
}
|
|
@@ -88,7 +88,7 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
88
88
|
taskId: id,
|
|
89
89
|
// The label is the handle: without it in front of her, a follow-up
|
|
90
90
|
// becomes a second job instead of a word to the one running
|
|
91
|
-
note: `${found.name} has "${label}". Say so and keep talking — the result is put in front of you later. Everything further about it — an answer, a correction, carrying it on after it
|
|
91
|
+
note: `${found.name} has "${label}". Say so and keep talking — the result is put in front of you later. Everything further about it — an answer, a correction, carrying it on after it answers — is \`${TOOL_NAMES.task}\` with "${label}".`,
|
|
92
92
|
};
|
|
93
93
|
},
|
|
94
94
|
}),
|
|
@@ -109,12 +109,16 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
109
109
|
note: "The text in `answer` was not passed on — `status` only reads. Send it again as `answer` if the bot is meant to hear it.",
|
|
110
110
|
}
|
|
111
111
|
: {};
|
|
112
|
-
//
|
|
112
|
+
// The clock, because the one in the instructions is from when the call
|
|
113
|
+
// opened and a call can run for hours; `since` is measured against this.
|
|
114
|
+
const now = { now: clockNow() };
|
|
115
|
+
// A named job comes back whole; the list clips outcomes, and the model pads a clipped answer
|
|
113
116
|
if (task) {
|
|
114
117
|
const found = await resolveTask(task);
|
|
115
118
|
const one = found;
|
|
116
119
|
if (!one) return await noSuchJob(task);
|
|
117
120
|
return {
|
|
121
|
+
...now,
|
|
118
122
|
...dropped,
|
|
119
123
|
label: one.label,
|
|
120
124
|
bot: one.bot,
|
|
@@ -132,6 +136,7 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
132
136
|
// No threads — only as much as is worth reading out: what it is
|
|
133
137
|
// asking, the one line of what it is doing, or how it ended
|
|
134
138
|
return {
|
|
139
|
+
...now,
|
|
135
140
|
...dropped,
|
|
136
141
|
tasks: tasks.map((task) => ({
|
|
137
142
|
label: task.label,
|
|
@@ -152,10 +157,22 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
152
157
|
})),
|
|
153
158
|
};
|
|
154
159
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
160
|
+
// A name is how a job is taken, but the one that just moved is what
|
|
161
|
+
// "that one" means out loud, and making the model fetch a label it
|
|
162
|
+
// already heard is what sends it to `delegate` instead. Cancel still
|
|
163
|
+
// needs the name: it cannot be taken back.
|
|
164
|
+
const { listInboxTasks } = await import("@/features/bot/task.query");
|
|
165
|
+
const one = task
|
|
166
|
+
? await resolveTask(task)
|
|
167
|
+
: action === "answer"
|
|
168
|
+
? ((await listInboxTasks())[0] ?? null)
|
|
169
|
+
: null;
|
|
170
|
+
if (!one) {
|
|
171
|
+
if (task) return await noSuchJob(task);
|
|
172
|
+
return action === "answer"
|
|
173
|
+
? "No job has moved yet — say which one, or check `status` first."
|
|
174
|
+
: "Say which job — by its label. Call `status` with no job named to see them.";
|
|
175
|
+
}
|
|
159
176
|
|
|
160
177
|
const { answerTask, cancelTask } = await import(
|
|
161
178
|
"@/features/bot/bot.runner"
|
|
@@ -167,7 +184,10 @@ function createTaskTools(callId: string | null | undefined): ToolSet {
|
|
|
167
184
|
if (!answer?.trim()) return "Say what to pass on.";
|
|
168
185
|
await answerTask(one.id, answer.trim());
|
|
169
186
|
return {
|
|
187
|
+
// Named even when the model named it: with no job given this is the
|
|
188
|
+
// one that moved last, and saying which makes a wrong one obvious
|
|
170
189
|
label: one.label,
|
|
190
|
+
bot: one.bot,
|
|
171
191
|
status: "running",
|
|
172
192
|
note:
|
|
173
193
|
one.status === "running"
|
|
@@ -190,16 +210,58 @@ async function noSuchJob(ref: string): Promise<string> {
|
|
|
190
210
|
return `There is no job called "${ref}". The latest are: ${names}. Call again with one of those names.`;
|
|
191
211
|
}
|
|
192
212
|
|
|
213
|
+
/**
|
|
214
|
+
* What the set costs the model, beside the prompt's own line (prompts/prompt-helper
|
|
215
|
+
* logPromptSize). Descriptions and schemas are both counted because both are sent
|
|
216
|
+
* on every step. No budget here: the set is decided by the code, except for the MCP
|
|
217
|
+
* tools a bot is pinned to — those show up by name.
|
|
218
|
+
*/
|
|
219
|
+
async function logToolSize(target: ToolTarget, tools: ToolSet): Promise<void> {
|
|
220
|
+
const rows: { name: string; tokens: number }[] = [];
|
|
221
|
+
for (const [name, held] of Object.entries(tools)) {
|
|
222
|
+
const schema = await asSchema(held.inputSchema).jsonSchema;
|
|
223
|
+
// A description may be a function of the call's context; only a fixed one is counted
|
|
224
|
+
const said = typeof held.description === "string" ? held.description : "";
|
|
225
|
+
rows.push({
|
|
226
|
+
name,
|
|
227
|
+
tokens: estimateTokens(said) + estimateTokens(JSON.stringify(schema)),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
rows.sort((a, b) => b.tokens - a.tokens);
|
|
231
|
+
const total = rows.reduce((sum, row) => sum + row.tokens, 0);
|
|
232
|
+
logger.debug(
|
|
233
|
+
`${target} tools ${total} tokens over ${rows.length} — ${rows
|
|
234
|
+
.map((row) => `${row.name} ${row.tokens}`)
|
|
235
|
+
.join(", ")}`,
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
193
239
|
export async function loadTools(run: ToolRun): Promise<ToolSet> {
|
|
194
|
-
const
|
|
240
|
+
const tools = await buildTools(run);
|
|
241
|
+
// Measured only where the line would be printed: the schemas have to be built
|
|
242
|
+
// to be counted, and unlike a prompt this set does not grow with use.
|
|
243
|
+
if (IS_DEV) await logToolSize(run.target, tools);
|
|
244
|
+
return tools;
|
|
245
|
+
}
|
|
195
246
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
|
|
200
|
-
|
|
247
|
+
async function buildTools(run: ToolRun): Promise<ToolSet> {
|
|
248
|
+
if (run.target === "memory-edit") {
|
|
249
|
+
// Memory's own read and writes, in the user's hand: they asked for it on
|
|
250
|
+
// screen. Opening a note to change it is not a recall (memory.tool countReads)
|
|
251
|
+
const hand = createMemoryTools("user", null, { countReads: false });
|
|
252
|
+
return {
|
|
253
|
+
[TOOL_NAMES.memory_recall]: hand[TOOL_NAMES.memory_recall],
|
|
254
|
+
[TOOL_NAMES.memory_remember]: hand[TOOL_NAMES.memory_remember],
|
|
255
|
+
[TOOL_NAMES.memory_forget]: hand[TOOL_NAMES.memory_forget],
|
|
256
|
+
};
|
|
201
257
|
}
|
|
202
258
|
|
|
259
|
+
// The call's hand. A bot is handed only the reads from it (below).
|
|
260
|
+
const memory = createMemoryTools(
|
|
261
|
+
"call",
|
|
262
|
+
run.target === "thursday" ? (run.callId ?? null) : null,
|
|
263
|
+
);
|
|
264
|
+
|
|
203
265
|
const sandbox = await openWorkspace();
|
|
204
266
|
|
|
205
267
|
if (run.target === "thursday") {
|
|
@@ -227,26 +289,30 @@ export async function loadTools(run: ToolRun): Promise<ToolSet> {
|
|
|
227
289
|
|
|
228
290
|
// A bot works inside a job it did not open: it can pull another bot in but cannot start a job.
|
|
229
291
|
// `ask_bot` and `ask_back` are attached by the runner (bot.run), which swaps `ask_thursday`
|
|
230
|
-
// for `ask_back` in a borrowed bot. `
|
|
292
|
+
// for `ask_back` in a borrowed bot. `answer` ends every run.
|
|
231
293
|
const skills = await loadSkills(sandbox);
|
|
232
294
|
return {
|
|
233
|
-
// A bot reads memory
|
|
234
|
-
// (memory.tool botRememberTool), and there is no screen to show a note on
|
|
295
|
+
// A bot only reads memory: every write is the call's, and there is no screen to show a note on
|
|
235
296
|
[TOOL_NAMES.memory_recall]: memory[TOOL_NAMES.memory_recall],
|
|
236
|
-
[TOOL_NAMES.
|
|
237
|
-
//
|
|
238
|
-
//
|
|
239
|
-
...
|
|
240
|
-
// The browser rides in the shell: its session is this job's,
|
|
241
|
-
// server rather than typed by the model
|
|
297
|
+
[TOOL_NAMES.memory_conversation]: memory[TOOL_NAMES.memory_conversation],
|
|
298
|
+
// Exa when its key is set, else this bot's own model when it can search;
|
|
299
|
+
// absent when neither, and the browser is the way in (search.tool)
|
|
300
|
+
...(await createSearchTool(run.model, sandbox)),
|
|
301
|
+
// The browser rides in the shell: its session is this seat's — the job's, or
|
|
302
|
+
// a borrowed bot's own — set by the server rather than typed by the model
|
|
303
|
+
// (workspace.ts jobShellEnv)
|
|
242
304
|
...createWorkspaceTools(sandbox, {
|
|
243
305
|
write: true,
|
|
244
|
-
env: jobShellEnv(run.
|
|
306
|
+
env: jobShellEnv(run.session),
|
|
307
|
+
// What the shell is like and what this machine has, on the first command
|
|
308
|
+
// of the run only (workspace.tool shellGuide). The call gets no guide:
|
|
309
|
+
// one command is a glance, not a job to plan around
|
|
310
|
+
guide: true,
|
|
245
311
|
}),
|
|
246
312
|
// Pinned tools come with schemas; the rest sit behind `tool_search`, absent when nothing is left to find (mcp.tool)
|
|
247
313
|
...(await createMcpTools(run.bot, sandbox)),
|
|
248
314
|
...createSkillTools({ sandbox, skills }),
|
|
249
315
|
[TOOL_NAMES.ask_thursday]: askThursdayTool,
|
|
250
|
-
[TOOL_NAMES.
|
|
316
|
+
[TOOL_NAMES.answer]: answerTool,
|
|
251
317
|
};
|
|
252
318
|
}
|