thursday-agent 0.5.0 → 0.7.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 +3 -2
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +8 -1
- package/.next/routes-manifest.json +18 -6
- 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 +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- 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 +13 -13
- package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
- 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 +10 -6
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route.js +5 -4
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route.js +8 -8
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/route.js +8 -8
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/thread/[id]/route.js +15 -0
- package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/thread/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/thread/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/thread/route.js +15 -0
- package/.next/server/app/api/bot/thread/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/thread/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/config/route.js +7 -7
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/events/route.js +3 -3
- package/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/server/app/api/file/[...path]/route.js +4 -4
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/route.js +8 -8
- package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/credits/route.js +8 -8
- package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/route.js +8 -8
- package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/subscription/route.js +8 -8
- package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/[name]/route.js +6 -6
- package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth/callback/route.js +4 -4
- package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +6 -6
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/tools/route.js +6 -6
- package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route.js +15 -15
- package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/route.js +7 -6
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js +6 -6
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +6 -6
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js +10 -11
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/skills/route.js +9 -10
- package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +15 -15
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/missing/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/workspace/missing/route/build-manifest.json +12 -0
- package/.next/server/app/api/workspace/missing/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/workspace/missing/route.js +12 -0
- package/.next/server/app/api/workspace/missing/route.js.map +5 -0
- package/.next/server/app/api/workspace/missing/route.js.nft.json +1 -0
- package/.next/server/app/api/workspace/missing/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/workspace/route.js +5 -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 +4 -3
- 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.nft.json +1 -1
- package/.next/server/app/page/server-reference-manifest.json +67 -45
- package/.next/server/app/page.js +11 -9
- 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 +3 -2
- package/.next/server/chunks/[root-of-the-server]__0-06t3f._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__02846fb._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__05luceg._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__06--3q3._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__06l05n_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07bnah_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08eae20._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0_ue8oe._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0btqrct._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0c9fgca._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0h_x6q6._.js +5 -0
- package/.next/server/chunks/{[root-of-the-server]__0pa2n68._.js → [root-of-the-server]__0kxrvxf._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0q0vvt2._.js → [root-of-the-server]__0ov3iir._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0qwtlmx._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0sm5xvm._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0zp35ul._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__144u9d_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__18-2tsq._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1e-ci13._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1e2365e._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__1fix932._.js +8 -0
- package/.next/server/chunks/{[root-of-the-server]__0ce8nf8._.js → [root-of-the-server]__1g3t7vn._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__1kp-83u._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1kv8p3e._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1orn-5b._.js +2 -3
- package/.next/server/chunks/_02szwk8._.js +5 -0
- package/.next/server/chunks/_05h2cii._.js +1 -1
- package/.next/server/chunks/_06c9kie._.js +216 -0
- package/.next/server/chunks/{_1x6kd1r._.js → _07y2gj-._.js} +1 -1
- package/.next/server/chunks/_0a43a-0._.js +3 -0
- package/.next/server/chunks/_0bujjey._.js +5 -0
- package/.next/server/chunks/_0c9j6rb._.js +1 -1
- package/.next/server/chunks/_0dkd549._.js +3 -0
- package/.next/server/chunks/_0ej1kvv._.js +3 -0
- package/.next/server/chunks/_0f6ts7z._.js +3 -0
- package/.next/server/chunks/_0gm9hyv._.js +55 -0
- package/.next/server/chunks/_0i55en5._.js +25 -0
- package/.next/server/chunks/_0k50n27._.js +18 -0
- package/.next/server/chunks/_0khihjk._.js +3 -3
- package/.next/server/chunks/_0n74zsf._.js +5 -5
- package/.next/server/chunks/_0nvm9ef._.js +3 -0
- package/.next/server/chunks/_0p56fn0._.js +3 -0
- package/.next/server/chunks/_0recufk._.js +1 -1
- package/.next/server/chunks/_0xbkz10._.js +3 -0
- package/.next/server/chunks/_10tkr26._.js +3 -0
- package/.next/server/chunks/{_0ioz3nd._.js → _11u2kp7._.js} +1 -1
- package/.next/server/chunks/_11ujpya._.js +3 -0
- package/.next/server/chunks/_127nx_p._.js +5 -0
- package/.next/server/chunks/_17l5ygt._.js +1 -1
- package/.next/server/chunks/_19uauj6._.js +3 -0
- package/.next/server/chunks/_1_5mnq4._.js +5 -5
- package/.next/server/chunks/_1abl6t9._.js +55 -0
- package/.next/server/chunks/_1d0j961._.js +3 -3
- package/.next/server/chunks/_1dbixxz._.js +3 -0
- package/.next/server/chunks/_1dc_d1q._.js +98 -0
- package/.next/server/chunks/_1drgfx4._.js +5 -5
- package/.next/server/chunks/_1e48czp._.js +3 -3
- package/.next/server/chunks/_1f31u5x._.js +5 -0
- package/.next/server/chunks/_1gnjfli._.js +3 -0
- package/.next/server/chunks/_1kg70wc._.js +3 -3
- package/.next/server/chunks/_1klbcft._.js +5 -0
- package/.next/server/chunks/_1krd9rf._.js +4 -1
- package/.next/server/chunks/_1kwmzab._.js +3 -0
- package/.next/server/chunks/{_1pf4qe-._.js → _1oxj9fa._.js} +1 -1
- package/.next/server/chunks/{_1f46eie._.js → _1pcmdbb._.js} +1 -1
- package/.next/server/chunks/_1qgix-j._.js +3 -0
- package/.next/server/chunks/{lib_logger_ts_1exwjut._.js → _1rpchta._.js} +5 -5
- package/.next/server/chunks/_1vsej-s._.js +5 -0
- package/.next/server/chunks/_1yx0p_s._.js +5 -0
- package/.next/server/chunks/{_0rnf-6n._.js → _20fsr_z._.js} +6 -6
- package/.next/server/chunks/_2128hkj._.js +5 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_thread_[id]_route_actions_1fstjn2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_thread_route_actions_003ccso.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_workspace_missing_route_actions_1fidi6p.js +3 -0
- package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
- package/.next/server/chunks/features_0-cnt0l._.js +4 -0
- package/.next/server/chunks/features_0hdaci0._.js +4 -0
- package/.next/server/chunks/features_1e39j7-._.js +8 -0
- package/.next/server/chunks/features_bot_bot_query_ts_12mgkl2._.js +1 -1
- package/.next/server/chunks/features_memory_1uqvksn._.js +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0v_7drq._.js → node_modules_consola_dist_chunks_prompt_mjs_0a7-pbw._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_17k8irj._.js → node_modules_consola_dist_chunks_prompt_mjs_0gzvgfv._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0i7cvml._.js → node_modules_consola_dist_chunks_prompt_mjs_107pxfn._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0icqaqw._.js → node_modules_consola_dist_chunks_prompt_mjs_15hbel8._.js} +1 -1
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_18i-23e._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1bewgf3._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1nlww1m._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1q77nfx._.js +3 -0
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1xqdzx_._.js +3 -0
- package/.next/server/chunks/{node_modules_zod_v4_1801ax7._.js → node_modules_zod_v4_0lkux5-._.js} +2 -2
- package/.next/server/chunks/{node_modules_zod_v4_1cha_bw._.js → node_modules_zod_v4_1jmr9cq._.js} +2 -2
- package/.next/server/chunks/{node_modules_zod_v4_0ubdflj._.js → node_modules_zod_v4_1yrxmek._.js} +2 -2
- package/.next/server/chunks/node_modules_zod_v4_classic_errors_0tp0y-q.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0-e011f._.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]__0lyi8i2._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0pd8yr7._.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]__18dthbp._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__18e68w8._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1mzi-ju._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1nygfik._.js +5 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1sdphb0._.js +8 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1vdmfbe._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1waa3rc._.js +85 -0
- package/.next/server/chunks/ssr/_0-2qsxo._.js +3 -0
- package/.next/server/chunks/ssr/_00rehl_._.js +3 -0
- package/.next/server/chunks/ssr/{_1lz_cq2._.js → _02oc_h5._.js} +76 -97
- package/.next/server/chunks/ssr/_05yghx6._.js +3 -0
- package/.next/server/chunks/ssr/_07nbwap._.js +3 -0
- package/.next/server/chunks/ssr/_08c4z-9._.js +3 -0
- package/.next/server/chunks/ssr/_0_qfdlw._.js +4 -0
- package/.next/server/chunks/ssr/{_0m2lsd1._.js → _0b6_jv-._.js} +2 -2
- package/.next/server/chunks/ssr/_0evkpto._.js +3 -0
- package/.next/server/chunks/ssr/_0geg212._.js +3 -0
- package/.next/server/chunks/ssr/{_1jdgjv9._.js → _0hxt2ul._.js} +2 -2
- package/.next/server/chunks/ssr/_0i_6q1w._.js +2 -2
- package/.next/server/chunks/ssr/_0lu1n_x._.js +1 -1
- package/.next/server/chunks/ssr/_0no7i1o._.js +3 -0
- package/.next/server/chunks/ssr/_0tzg--b._.js +3 -0
- package/.next/server/chunks/ssr/{_15j2_8f._.js → _0wzaht-._.js} +2 -2
- package/.next/server/chunks/ssr/_0z-g0uy._.js +3 -0
- package/.next/server/chunks/ssr/_114ylv7._.js +7 -0
- package/.next/server/chunks/ssr/_123y-ah._.js +3 -0
- package/.next/server/chunks/ssr/_12c-iwh._.js +3 -0
- package/.next/server/chunks/ssr/_12w42gi._.js +3 -0
- package/.next/server/chunks/ssr/_161kqav._.js +3 -0
- package/.next/server/chunks/ssr/_167hchk._.js +3 -0
- package/.next/server/chunks/ssr/{_0ap2fzn._.js → _16c6_xm._.js} +2 -2
- package/.next/server/chunks/ssr/_18opah7._.js +3 -0
- package/.next/server/chunks/ssr/_1_krfph._.js +3 -0
- package/.next/server/chunks/ssr/{_0rzucul._.js → _1_x5spz._.js} +3 -3
- package/.next/server/chunks/ssr/_1a61fc9._.js +3 -0
- package/.next/server/chunks/ssr/_1ey7qn-._.js +70 -0
- package/.next/server/chunks/ssr/_1g9vs7q._.js +3 -0
- package/.next/server/chunks/ssr/_1jmz33w._.js +3 -0
- package/.next/server/chunks/ssr/_1rgtxhr._.js +5 -0
- package/.next/server/chunks/ssr/_1slp25y._.js +3 -0
- package/.next/server/chunks/ssr/_1w_t7h7._.js +101 -0
- package/.next/server/chunks/ssr/{_0s99bgb._.js → _1wyfaq_._.js} +9 -3
- package/.next/server/chunks/ssr/_200gt-m._.js +102 -0
- package/.next/server/chunks/ssr/components_ui_tabs_tsx_0ej40b4._.js +3 -0
- package/.next/server/chunks/ssr/features_bot_thread_query_ts_023eklt._.js +4 -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/features_workspace_00jz2hu._.js +8 -0
- package/.next/server/chunks/ssr/{_1-teee5._.js → lib_logger_ts_0-olsze._.js} +2 -7
- package/.next/server/chunks/ssr/{node_modules_05-n6dz._.js → node_modules_02ai7br._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1chvq5f._.js → node_modules_02deexj._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m383r2._.js → node_modules_07za262._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_07dsgkx._.js → node_modules_0_s9get._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1a0kmjl._.js → node_modules_0n3c7h0._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0zeg3x_._.js → node_modules_0od6jwr._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1y79i83._.js → node_modules_0rdt7pk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_17bwo43._.js → node_modules_0tusx4d._.js} +3 -3
- package/.next/server/chunks/ssr/{node_modules_04sksn9._.js → node_modules_0w1z7kz._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1uyk91w._.js → node_modules_0wdupfz._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ifp389._.js → node_modules_1720w0a._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0u9da1h._.js → node_modules_18lsg7d._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1k6n600._.js → node_modules_1b94fxf._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_20c28js._.js → node_modules_1ecdo1s._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0fkeku3._.js → node_modules_1fa9ag7._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1j8j4pt._.js → node_modules_1fv-_si._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0-dr_o7._.js → node_modules_1hf461g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1lz0oxc._.js → node_modules_1m71ta-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1t77e4n._.js → node_modules_1n93n-g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_16mkxuo._.js → node_modules_1n9lqu9._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1k7z2j6._.js → node_modules_1npnsvd._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_056qgf-._.js → node_modules_1rn2r0n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0x3-ply._.js → node_modules_1seuurl._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0bvopy2._.js → node_modules_1vq-mfk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0iur59s._.js → node_modules_1vzyw1t._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1k8j8n0._.js → node_modules_1w359w4._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1x0ztf4._.js → node_modules_1yajbl6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1-y7nni._.js → node_modules_20eqhy8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0bkwd0u._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_019sbis._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0p9a9su._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0s6piq3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@vercel_oidc_dist_1o553h-._.js → node_modules_@vercel_oidc_dist_05itbb1._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_trash_mjs_0px2gzr._.js +3 -0
- 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 +68 -46
- package/.next/static/chunks/07vqbk_9t4em4.js +2 -0
- package/.next/static/chunks/08krja1zx7nqg.js +1 -0
- package/.next/static/chunks/0g4b348l0pve7.js +1 -0
- package/.next/static/chunks/0qcuwdk132jjt.js +1 -0
- package/.next/static/chunks/0vlgzqo9ka90v.js +1 -0
- package/.next/static/chunks/{11r2yp_yh9_qn.js → 0z69gvysmave7.js} +1 -1
- package/.next/static/chunks/0zrupxgci5gqc.js +1 -0
- package/.next/static/chunks/12fvz1w5ows75.js +1 -0
- package/.next/static/chunks/14t03ned286iu.js +1 -0
- package/.next/static/chunks/156xxbkrz5lzu.js +18 -0
- package/.next/static/chunks/1fz14reod4lft.js +1 -0
- package/.next/static/chunks/1g23dbabl-vkr.js +1 -0
- package/.next/static/chunks/1ohslk4568tm3.js +1 -0
- package/.next/static/chunks/1qy_rc3oxfxok.js +1 -0
- package/.next/static/chunks/1sbmwswc9k2-1.js +1 -0
- package/.next/static/chunks/1vqezbhjm3goq.js +1 -0
- package/.next/static/chunks/1zea7qdl-7365.js +1 -0
- package/.next/static/chunks/1zvqumkg7kmo0.css +1 -0
- package/.next/static/chunks/26hpqt3y6bogl.js +12 -0
- package/.next/static/chunks/2_j5mqm6d-z18.js +99 -0
- package/.next/static/chunks/2dt6tu7a22svs.js +1 -0
- package/.next/static/chunks/2h5ls3d86kya6.js +1 -0
- package/.next/static/chunks/2wc6y1ht6dfuy.js +1 -0
- package/.next/static/chunks/{435atsnhs7ksu.js → 2xr0zpll7thyi.js} +2 -2
- package/.next/static/chunks/31jztc-yq30m7.js +1 -0
- package/.next/static/chunks/391af0i8eljzk.js +1 -0
- package/.next/static/chunks/3bfwpww3m3x4u.js +1 -0
- package/.next/static/chunks/{38gweqdo4jpfj.js → 3izg0a3k87q1-.js} +5 -5
- package/.next/static/chunks/3p2s2cjokx1aa.js +5 -0
- package/.next/static/chunks/{408ueu4hfvcg7.js → 41s3fml5oivsa.js} +1 -1
- package/README.md +45 -193
- package/app/api/events/app-event.ts +6 -4
- package/app/api/query-key.ts +25 -16
- package/bin/database.mjs +37 -0
- package/bin/thursday.mjs +44 -28
- package/components/ui/custom-icon.tsx +0 -60
- package/components/ui/radio-group.tsx +37 -0
- package/components/ui/shiny-text.tsx +33 -6
- package/database/migrations/{20260910173049_numerous_spirit → 20260916145701_clever_multiple_man}/migration.sql +80 -24
- package/database/migrations/{20260910173049_numerous_spirit → 20260916145701_clever_multiple_man}/snapshot.json +689 -110
- package/database/migrations/20260916160713_thread_cancelled/migration.sql +2 -0
- package/database/migrations/{20260911030320_opposite_jack_power → 20260916160713_thread_cancelled}/snapshot.json +706 -84
- package/docs/how-it-works.md +40 -35
- package/docs/images/keeps-going.png +0 -0
- package/docs/images/two-minds.png +0 -0
- package/docs/live-calls.md +236 -0
- package/docs/thread-rooms.md +71 -0
- package/features/ai/chatgpt.ts +1 -2
- package/features/ai/live.schema.ts +128 -0
- package/features/ai/load-tools.ts +152 -79
- package/features/ai/model.schema.ts +2 -120
- package/features/ai/model.ts +52 -88
- package/features/ai/prompts/bot.prompt.ts +91 -214
- package/features/ai/prompts/live.prompt.ts +169 -0
- package/features/ai/prompts/prompt-helper.ts +92 -32
- package/features/ai/prompts/thursday.prompt.ts +164 -190
- package/features/ai/tools/bot.tool.ts +38 -145
- package/features/ai/tools/call.tool.ts +33 -5
- package/features/ai/tools/connected.ts +5 -3
- package/features/ai/tools/mcp.tool.ts +7 -4
- package/features/ai/tools/memory.tool.ts +35 -31
- package/features/ai/tools/skills.tool.ts +11 -6
- package/features/ai/tools/studio.tool.ts +26 -21
- package/features/ai/tools/tool-name.ts +3 -5
- package/features/ai/tools/workspace.tool.ts +33 -10
- package/features/artifact/artifact.action.ts +2 -2
- package/features/artifact/artifact.query.ts +112 -61
- package/features/artifact/artifact.schema.ts +8 -6
- package/features/artifact/components/artifact-setting.tsx +83 -33
- package/features/bot/bot.action.ts +43 -36
- package/features/bot/bot.memory.ts +137 -20
- package/features/bot/bot.query.ts +28 -11
- package/features/bot/bot.run.ts +296 -744
- package/features/bot/bot.runner.ts +463 -864
- package/features/bot/bot.schema.ts +93 -82
- package/features/bot/bot.seed.ts +141 -64
- package/features/bot/components/bot-mark.tsx +324 -232
- package/features/bot/components/bot-room.tsx +1613 -697
- package/features/bot/components/bot-roster.tsx +8 -13
- package/features/bot/components/bot-setting.tsx +58 -42
- package/features/bot/components/bot-tool.tsx +55 -87
- package/features/bot/components/mark-palette.tsx +35 -32
- package/features/bot/components/path-chips.tsx +33 -3
- package/features/bot/components/thread-badge.tsx +34 -0
- package/features/bot/components/thread-reply.tsx +639 -0
- package/features/bot/components/thread-setting.tsx +674 -0
- package/features/bot/mark.const.ts +79 -31
- package/features/bot/room.query.ts +889 -0
- package/features/bot/room.schema.ts +64 -0
- package/features/bot/seed-bots.ts +2 -1
- package/features/bot/thread.query.ts +971 -0
- package/features/bot/thread.store.ts +587 -0
- package/features/config/components/voice-key.tsx +113 -88
- package/features/config/config.const.ts +5 -9
- package/features/connectors/mcp.schema.ts +0 -2
- package/features/intro/components/intro.tsx +169 -139
- package/features/memory/components/memory-setting.tsx +2 -7
- package/features/memory/memory.schema.ts +14 -23
- package/features/settings/components/setting-ui.tsx +0 -44
- package/features/settings/components/settings.tsx +12 -12
- package/features/settings/settings.alert.ts +3 -3
- package/features/settings/settings.store.ts +1 -1
- package/features/skills/skills.schema.ts +0 -2
- package/features/thursday/ascii.const.ts +74 -0
- package/features/thursday/components/ascii-field.tsx +24 -44
- package/features/thursday/components/ascii-orb.tsx +525 -381
- package/features/thursday/components/call-log.tsx +46 -44
- package/features/thursday/components/face.tsx +40 -10
- package/features/thursday/components/side-captions.tsx +273 -0
- package/features/thursday/components/tab-state.tsx +14 -6
- package/features/thursday/components/thursday-mark.tsx +1 -0
- package/features/thursday/components/thursday-setting.tsx +633 -333
- package/features/thursday/components/thursday.tsx +315 -274
- package/features/thursday/components/voice-picker.tsx +255 -0
- package/features/thursday/face.store.ts +5 -0
- package/features/thursday/thursday.action.ts +96 -72
- package/features/thursday/thursday.query.ts +49 -30
- package/features/thursday/thursday.schema.ts +37 -35
- package/features/thursday/thursday.store.ts +14 -7
- package/features/thursday/tool-call.ts +3 -3
- package/features/thursday/tool-line.ts +5 -3
- package/features/thursday/use-thursday.ts +801 -457
- package/features/workspace/file-kind.ts +9 -0
- package/features/workspace/workspace.query.ts +17 -0
- package/features/workspace/workspace.ts +82 -36
- package/hooks/use-hotkey.ts +3 -2
- package/lib/live/live.schema.ts +26 -0
- package/lib/live/live.server.ts +153 -0
- package/lib/live/live.session.ts +574 -0
- package/lib/{realtime/realtime.tap.ts → live/live.tap.ts} +41 -12
- package/lib/live/live.transport.ts +152 -0
- package/lib/protocol/use-server-pages.ts +9 -5
- package/lib/utils.ts +21 -20
- package/package.json +2 -2
- package/public/voices/alloy.ogg +0 -0
- package/public/voices/ash.ogg +0 -0
- package/public/voices/ballad.ogg +0 -0
- package/public/voices/beacon.ogg +0 -0
- package/public/voices/bossa.ogg +0 -0
- package/public/voices/cedar.ogg +0 -0
- package/public/voices/cinder.ogg +0 -0
- package/public/voices/coral.ogg +0 -0
- package/public/voices/delta.ogg +0 -0
- package/public/voices/echo.ogg +0 -0
- package/public/voices/gleam.ogg +0 -0
- package/public/voices/marin.ogg +0 -0
- package/public/voices/meridian.ogg +0 -0
- package/public/voices/quartz.ogg +0 -0
- package/public/voices/ripple.ogg +0 -0
- package/public/voices/sage.ogg +0 -0
- package/public/voices/shimmer.ogg +0 -0
- package/public/voices/stone.ogg +0 -0
- package/public/voices/tempo.ogg +0 -0
- package/public/voices/verse.ogg +0 -0
- package/public/voices/vesper.ogg +0 -0
- package/public/voices/willow.ogg +0 -0
- package/scripts/artifact-paths.test.mts +38 -0
- package/scripts/bot-context.test.mts +1408 -0
- package/scripts/live-history.test.mts +115 -0
- package/scripts/live-session.test.mts +938 -0
- package/server.js +1 -1
- package/skills/browser/SKILL.md +11 -1
- package/skills/computer/SKILL.md +1 -1
- package/skills/find-skills/SKILL.md +3 -8
- package/skills/interactive-page/SKILL.md +12 -7
- package/skills/interactive-page/references/diagram.md +89 -0
- package/skills/interactive-page/scripts/archify/LICENSE +22 -0
- package/skills/interactive-page/scripts/archify/README.md +25 -0
- package/skills/interactive-page/scripts/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/interactive-page/scripts/archify/assets/template.html +14934 -0
- package/skills/interactive-page/scripts/archify/bin/archify.mjs +2126 -0
- package/skills/interactive-page/scripts/archify/bin/open-artifact.mjs +86 -0
- package/skills/interactive-page/scripts/archify/bin/preview.mjs +653 -0
- package/skills/interactive-page/scripts/archify/bin/visual-check.mjs +829 -0
- package/skills/interactive-page/scripts/archify/delta/architecture-delta.mjs +1223 -0
- package/skills/interactive-page/scripts/archify/examples/agent-run.lifecycle.json +60 -0
- package/skills/interactive-page/scripts/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/interactive-page/scripts/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/interactive-page/scripts/archify/examples/cache-miss-request.sequence.json +82 -0
- package/skills/interactive-page/scripts/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/interactive-page/scripts/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/interactive-page/scripts/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/interactive-page/scripts/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/interactive-page/scripts/archify/examples/incident-response.workflow.json +64 -0
- package/skills/interactive-page/scripts/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/interactive-page/scripts/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/interactive-page/scripts/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/interactive-page/scripts/archify/examples/web-app.architecture.json +46 -0
- package/skills/interactive-page/scripts/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/interactive-page/scripts/archify/recipes/scenarios.mjs +284 -0
- package/skills/interactive-page/scripts/archify/references/authoring-contract.md +243 -0
- package/skills/interactive-page/scripts/archify/references/delivery-contract.md +120 -0
- package/skills/interactive-page/scripts/archify/references/viewer-runtime.md +45 -0
- package/skills/interactive-page/scripts/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/interactive-page/scripts/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/interactive-page/scripts/archify/renderers/dataflow/README.md +104 -0
- package/skills/interactive-page/scripts/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/interactive-page/scripts/archify/renderers/lifecycle/README.md +115 -0
- package/skills/interactive-page/scripts/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/interactive-page/scripts/archify/renderers/sequence/README.md +114 -0
- package/skills/interactive-page/scripts/archify/renderers/sequence/render-sequence.mjs +464 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/cli.mjs +218 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/diagnostics.mjs +127 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/generated-brand-marks.mjs +3 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/i18n.mjs +595 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/legend.mjs +217 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/output-path.mjs +340 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/repository-evidence.mjs +238 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/repository-location.mjs +58 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/utils.mjs +232 -0
- package/skills/interactive-page/scripts/archify/renderers/shared/validator.mjs +86 -0
- package/skills/interactive-page/scripts/archify/renderers/workflow/README.md +223 -0
- package/skills/interactive-page/scripts/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/interactive-page/scripts/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/interactive-page/scripts/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/interactive-page/scripts/archify/schemas/README.md +211 -0
- package/skills/interactive-page/scripts/archify/schemas/architecture.schema.json +178 -0
- package/skills/interactive-page/scripts/archify/schemas/common.schema.json +115 -0
- package/skills/interactive-page/scripts/archify/schemas/dataflow.schema.json +243 -0
- package/skills/interactive-page/scripts/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/interactive-page/scripts/archify/schemas/sequence.schema.json +223 -0
- package/skills/interactive-page/scripts/archify/schemas/workflow.schema.json +428 -0
- package/skills/interactive-page/scripts/archify/scripts/check-render-output.mjs +916 -0
- package/skills/interactive-page/scripts/archify/scripts/render-examples.mjs +26 -0
- package/skills/interactive-page/scripts/bundle-artifact.sh +9 -8
- package/skills/skill-creator/SKILL.md +4 -5
- package/.next/server/app/api/bot/task/[id]/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/bot/task/[id]/route.js +0 -16
- package/.next/server/app/api/bot/task/[id]/route.js.nft.json +0 -1
- package/.next/server/app/api/bot/task/[id]/route_client-reference-manifest.js +0 -3
- package/.next/server/app/api/bot/task/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/bot/task/route.js +0 -16
- package/.next/server/app/api/bot/task/route.js.nft.json +0 -1
- package/.next/server/app/api/bot/task/route_client-reference-manifest.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__026u77e._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__02va5wz._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__050zri4._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0bg9710._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ffbg85._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0in-d5s._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0pa9k-f._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0qi_m0e._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0tq0m_k._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0xep6j_._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1-ga0kh._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__11n256_._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__144l7qt._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1anc1p9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1fizn31._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1jg8t86._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1lldzy9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1llj3-b._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1p8m3f4._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1peqvsi._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1w8gm5h._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__1xt39nn._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1zb8mfo._.js +0 -8
- package/.next/server/chunks/_0-73of8._.js +0 -55
- package/.next/server/chunks/_0-fjql4._.js +0 -31
- package/.next/server/chunks/_00xh_q0._.js +0 -25
- package/.next/server/chunks/_051qh8u._.js +0 -3
- package/.next/server/chunks/_05sovvj._.js +0 -3
- package/.next/server/chunks/_091bi8d._.js +0 -3
- package/.next/server/chunks/_0fzqt2y._.js +0 -142
- package/.next/server/chunks/_0lr92vd._.js +0 -3
- package/.next/server/chunks/_0mecv0f._.js +0 -31
- package/.next/server/chunks/_0mh8j4m._.js +0 -3
- package/.next/server/chunks/_0sb7tlz._.js +0 -3
- package/.next/server/chunks/_0si7xzn._.js +0 -3
- package/.next/server/chunks/_0u10wmw._.js +0 -55
- package/.next/server/chunks/_0wp4le3._.js +0 -3
- package/.next/server/chunks/_0y5fg-x._.js +0 -3
- package/.next/server/chunks/_1230wbx._.js +0 -10
- package/.next/server/chunks/_12nheja._.js +0 -3
- package/.next/server/chunks/_13510xh._.js +0 -3
- package/.next/server/chunks/_15hq89o._.js +0 -3
- package/.next/server/chunks/_18-1wcc._.js +0 -55
- package/.next/server/chunks/_18d7-5p._.js +0 -3
- package/.next/server/chunks/_1c78vw5._.js +0 -237
- package/.next/server/chunks/_1h5_8sk._.js +0 -3
- package/.next/server/chunks/_1hdnxb7._.js +0 -3
- package/.next/server/chunks/_1j8k_j5._.js +0 -3
- package/.next/server/chunks/_1nula3v._.js +0 -3
- package/.next/server/chunks/_1php4eq._.js +0 -3
- package/.next/server/chunks/_1yuv4vp._.js +0 -3
- package/.next/server/chunks/_1zkfbaa._.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_bot_task_[id]_route_actions_1_k_8u3.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_bot_task_route_actions_0xln6ra.js +0 -3
- package/.next/server/chunks/features_0rpfxbk._.js +0 -3
- package/.next/server/chunks/features_1qf3cei._.js +0 -8
- package/.next/server/chunks/features_bot_0zt92oh._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1jidylq._.js +0 -3
- package/.next/server/chunks/ssr/[externals]__0dizgek._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0-nob52._.js +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__092knlj._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0mz33a7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0s4wb56._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0s9dq5u._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0sd3izg._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0vnmv-s._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1-13tcn._.js +0 -43
- package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +0 -61
- package/.next/server/chunks/ssr/[root-of-the-server]__1zidpfl._.js +0 -3
- package/.next/server/chunks/ssr/_001_ms1._.js +0 -33
- package/.next/server/chunks/ssr/_01n3o0m._.js +0 -3
- package/.next/server/chunks/ssr/_04z2c7b._.js +0 -3
- package/.next/server/chunks/ssr/_06tssji._.js +0 -3
- package/.next/server/chunks/ssr/_0fk4c7d._.js +0 -3
- package/.next/server/chunks/ssr/_0h42fze._.js +0 -3
- package/.next/server/chunks/ssr/_0h7zdni._.js +0 -3
- package/.next/server/chunks/ssr/_0mggveb._.js +0 -3
- package/.next/server/chunks/ssr/_0nbpc_8._.js +0 -3
- package/.next/server/chunks/ssr/_0q0zan6._.js +0 -70
- package/.next/server/chunks/ssr/_0zcjrbg._.js +0 -3
- package/.next/server/chunks/ssr/_0zhoc3r._.js +0 -3
- package/.next/server/chunks/ssr/_11j92tu._.js +0 -3
- package/.next/server/chunks/ssr/_13fke0x._.js +0 -3
- package/.next/server/chunks/ssr/_18cymkq._.js +0 -3
- package/.next/server/chunks/ssr/_1ebxla1._.js +0 -3
- package/.next/server/chunks/ssr/_1nj4niv._.js +0 -42
- package/.next/server/chunks/ssr/_1ov37if._.js +0 -3
- package/.next/server/chunks/ssr/_1ovmc9s._.js +0 -3
- package/.next/server/chunks/ssr/_1sji22n._.js +0 -3
- package/.next/server/chunks/ssr/_1vi_uo7._.js +0 -3
- package/.next/server/chunks/ssr/_1vyd1ji._.js +0 -3
- package/.next/server/chunks/ssr/_1xx4zlb._.js +0 -3
- package/.next/server/chunks/ssr/components_ui_1y1l7yj._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_1s_-2vj._.js +0 -3
- package/.next/server/chunks/ssr/lib_realtime_12wg_dd._.js +0 -27
- package/.next/server/chunks/ssr/lib_realtime_15h_v1v._.js +0 -27
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_0npjf8-._.js +0 -3
- package/.next/static/chunks/0n3jle9kbqfr2.js +0 -40
- package/.next/static/chunks/0r5qcctujhxli.js +0 -1
- package/.next/static/chunks/10teww7wt-f6h.js +0 -1
- package/.next/static/chunks/126fj4pga_72k.js +0 -1
- package/.next/static/chunks/159udiexf6dom.js +0 -2
- package/.next/static/chunks/18a96rkhi4_yd.js +0 -1
- package/.next/static/chunks/18gi7o2ibrgh8.js +0 -3
- package/.next/static/chunks/1dkjg87pxk0n9.js +0 -28
- package/.next/static/chunks/1q9z1tohil7xn.js +0 -1
- package/.next/static/chunks/1sjgfets224re.js +0 -1
- package/.next/static/chunks/1wszsr83t01gh.js +0 -1
- package/.next/static/chunks/22_zkas21rpna.js +0 -1
- package/.next/static/chunks/2fh4-3z_q8b_w.js +0 -1
- package/.next/static/chunks/2h0sd2vumhb15.js +0 -1
- package/.next/static/chunks/2szintyibu0s5.js +0 -1
- package/.next/static/chunks/2t4vhi3m8ahya.js +0 -1
- package/.next/static/chunks/2tigdtz3dpcy8.js +0 -1
- package/.next/static/chunks/3-b6b7entqazs.js +0 -1
- package/.next/static/chunks/3786h5vayt80-.js +0 -28
- package/.next/static/chunks/3cq5g494yuke8.css +0 -1
- package/.next/static/chunks/3dmbhsv2u_8kj.js +0 -1
- package/.next/static/chunks/3hibbjnt85-k6.js +0 -1
- package/.next/static/chunks/3i0a5px-oufgc.js +0 -1
- package/.next/static/chunks/3wexk9qo8zuj3.js +0 -18
- package/.next/static/chunks/3xk7yqgomx7yq.js +0 -1
- package/.next/static/chunks/3xre8bu_pk1p_.js +0 -1
- package/.next/static/chunks/3zv6t3i77xhr_.js +0 -1
- package/database/migrations/20260911030320_opposite_jack_power/migration.sql +0 -1
- package/docs/images/task-thread.png +0 -0
- package/features/bot/components/task-badge.tsx +0 -42
- package/features/bot/components/task-reply.tsx +0 -328
- package/features/bot/components/task-setting.tsx +0 -524
- package/features/bot/task.query.ts +0 -1079
- package/features/bot/task.store.ts +0 -487
- package/lib/realtime/client-secret.ts +0 -86
- package/lib/realtime/open-session.ts +0 -31
- package/lib/realtime/openai.ts +0 -35
- package/lib/realtime/realtime.audio.ts +0 -196
- package/lib/realtime/realtime.driver.ts +0 -489
- package/lib/realtime/realtime.protocol.ts +0 -393
- package/lib/realtime/realtime.schema.ts +0 -37
- package/lib/realtime/realtime.session.ts +0 -106
- package/lib/realtime/realtime.transport.ts +0 -384
- package/lib/realtime/xai.ts +0 -39
- /package/.next/server/app/api/bot/{task → thread}/[id]/route/build-manifest.json +0 -0
- /package/.next/server/app/api/bot/{task → thread}/[id]/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/bot/{task → thread}/[id]/route.js.map +0 -0
- /package/.next/server/app/api/bot/{task → thread}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/bot/{task → thread}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/bot/{task → thread}/route.js.map +0 -0
- /package/.next/static/{G6-gNoyGDEcgAsq-L4PE1 → yyRVBc0xxYQsh3GpbQX9b}/_buildManifest.js +0 -0
- /package/.next/static/{G6-gNoyGDEcgAsq-L4PE1 → yyRVBc0xxYQsh3GpbQX9b}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{G6-gNoyGDEcgAsq-L4PE1 → yyRVBc0xxYQsh3GpbQX9b}/_ssgManifest.js +0 -0
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import type { BotRef } from "../
|
|
3
|
+
import type { BotRef } from "../thread.store";
|
|
4
4
|
import { BotMark } from "./bot-mark";
|
|
5
5
|
|
|
6
6
|
/** Faces drawn before the count carries the rest. */
|
|
7
7
|
const SHOWN = 3;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* Who was in this room. A
|
|
10
|
+
* Who was in this room. A thread that never left its own bot draws nothing: the
|
|
11
11
|
* row already shows that bot's face, and a stack of one says less than none.
|
|
12
12
|
*/
|
|
13
|
-
export function BotRoster({
|
|
14
|
-
bots,
|
|
15
|
-
taskId,
|
|
16
|
-
}: {
|
|
17
|
-
bots: BotRef[];
|
|
18
|
-
taskId: string;
|
|
19
|
-
}) {
|
|
13
|
+
export function BotRoster({ bots }: { bots: BotRef[] }) {
|
|
20
14
|
if (bots.length < 2) return null;
|
|
21
15
|
|
|
22
16
|
return (
|
|
@@ -24,19 +18,20 @@ export function BotRoster({
|
|
|
24
18
|
className="flex shrink-0 items-center gap-1.5"
|
|
25
19
|
title={bots.map((bot) => bot.name).join(", ")}
|
|
26
20
|
>
|
|
27
|
-
<span className="flex items-center">
|
|
21
|
+
<span className="flex items-center gap-0.5">
|
|
28
22
|
{bots.slice(0, SHOWN).map((bot) => (
|
|
29
|
-
//
|
|
23
|
+
// Side by side, not shingled: parting overlapped faces takes a ring, and
|
|
24
|
+
// a ring around a shape that is not a circle covers its neighbour.
|
|
30
25
|
<BotMark
|
|
31
26
|
key={bot.name}
|
|
32
27
|
size={18}
|
|
33
28
|
seed={bot.name}
|
|
34
|
-
vary={taskId}
|
|
35
29
|
color={bot.icon?.color}
|
|
36
30
|
shape={bot.icon?.shape}
|
|
37
31
|
outline={bot.icon?.outline}
|
|
32
|
+
paint={bot.icon?.paint}
|
|
38
33
|
notify={false}
|
|
39
|
-
className="-
|
|
34
|
+
className="shrink-0"
|
|
40
35
|
/>
|
|
41
36
|
))}
|
|
42
37
|
</span>
|
|
@@ -57,12 +57,12 @@ import {
|
|
|
57
57
|
type BotMemoryFile,
|
|
58
58
|
MAX_PINNED_TOOLS,
|
|
59
59
|
randomBotIcon,
|
|
60
|
-
type
|
|
60
|
+
type Thread,
|
|
61
61
|
} from "@/features/bot/bot.schema";
|
|
62
62
|
import {
|
|
63
63
|
BOT_SEEDS,
|
|
64
64
|
type BotSeed,
|
|
65
|
-
|
|
65
|
+
rollSeedIcons,
|
|
66
66
|
} from "@/features/bot/bot.seed";
|
|
67
67
|
import { BotMark } from "@/features/bot/components/bot-mark";
|
|
68
68
|
import { MarkPalette } from "@/features/bot/components/mark-palette";
|
|
@@ -105,19 +105,21 @@ import { MARK_SHAPES, MARK_SYSTEM } from "../mark.const";
|
|
|
105
105
|
export function BotSetting() {
|
|
106
106
|
const { data, isLoading, error } = useServerRoute<Bot[]>(queryKey.bot);
|
|
107
107
|
const bots = data ?? [];
|
|
108
|
-
// First page of history, not the inbox: the inbox keeps only a few finished
|
|
109
|
-
const { data: history } = useServerRoute<
|
|
108
|
+
// First page of history, not the inbox: the inbox keeps only a few finished threads.
|
|
109
|
+
const { data: history } = useServerRoute<Thread[]>(
|
|
110
|
+
queryKey.threadHistory(null),
|
|
111
|
+
);
|
|
110
112
|
const jobs = history ?? [];
|
|
111
113
|
/** Picked roster entry: a bot name, NEW, or null for the first bot. */
|
|
112
114
|
const [picked, setPicked] = useState<string | null>(null);
|
|
113
115
|
|
|
114
116
|
/**
|
|
115
117
|
* One roll for this screen, in BOT_SEEDS order. The faces on the invite, in the
|
|
116
|
-
* picker and on the bot that gets created are then the same
|
|
117
|
-
* `createSeedBotsAction` takes it (bot.seed
|
|
118
|
+
* picker and on the bot that gets created are then the same, because
|
|
119
|
+
* `createSeedBotsAction` takes it (bot.seed rollSeedIcons rolls per install so
|
|
118
120
|
* no two rosters look alike; a seed itself carries none).
|
|
119
121
|
*/
|
|
120
|
-
const [
|
|
122
|
+
const [faces] = useState(rollSeedIcons);
|
|
121
123
|
|
|
122
124
|
if (isLoading) return <SettingPanesSkeleton />;
|
|
123
125
|
if (error) return <SettingError message={error.message} />;
|
|
@@ -155,7 +157,7 @@ export function BotSetting() {
|
|
|
155
157
|
{bots.length > 0 && missing.length > 0 && (
|
|
156
158
|
<SeedInvite
|
|
157
159
|
missing={missing}
|
|
158
|
-
|
|
160
|
+
faces={faces}
|
|
159
161
|
have={have}
|
|
160
162
|
onDone={(name) => setPicked(name)}
|
|
161
163
|
/>
|
|
@@ -204,7 +206,7 @@ export function BotSetting() {
|
|
|
204
206
|
// hold, so it fills it rather than sitting in a dialog nobody opened
|
|
205
207
|
<SeedPackage
|
|
206
208
|
have={have}
|
|
207
|
-
|
|
209
|
+
faces={faces}
|
|
208
210
|
onDone={(name) => setPicked(name)}
|
|
209
211
|
/>
|
|
210
212
|
) : (
|
|
@@ -239,7 +241,7 @@ function RosterRow({
|
|
|
239
241
|
}: {
|
|
240
242
|
bot: Bot;
|
|
241
243
|
/** Latest job if it is on the first history page; `bot.lastJobAt` covers the rest. */
|
|
242
|
-
job:
|
|
244
|
+
job: Thread | null;
|
|
243
245
|
active: boolean;
|
|
244
246
|
onPick: () => void;
|
|
245
247
|
}) {
|
|
@@ -258,6 +260,7 @@ function RosterRow({
|
|
|
258
260
|
{...markProps(bot.name, bot.icon)}
|
|
259
261
|
state={job?.status === "running" ? "thinking" : "idle"}
|
|
260
262
|
notify={job?.status === "waiting"}
|
|
263
|
+
crossed={job?.status === "cancelled"}
|
|
261
264
|
className={cn("shrink-0", bot.disabled && "opacity-45")}
|
|
262
265
|
/>
|
|
263
266
|
<span
|
|
@@ -296,7 +299,7 @@ function RosterRow({
|
|
|
296
299
|
* was is the words' job, not the colour's.
|
|
297
300
|
*/
|
|
298
301
|
function liveLine(
|
|
299
|
-
job:
|
|
302
|
+
job: Thread | null,
|
|
300
303
|
lastJobAt: Bot["lastJobAt"],
|
|
301
304
|
disabled: boolean,
|
|
302
305
|
): {
|
|
@@ -354,7 +357,7 @@ function unmetLine(
|
|
|
354
357
|
*/
|
|
355
358
|
function useSeedPicks(
|
|
356
359
|
have: Set<string>,
|
|
357
|
-
|
|
360
|
+
faces: BotIcon[],
|
|
358
361
|
onDone: (name: string | null) => void,
|
|
359
362
|
) {
|
|
360
363
|
const [off, setOff] = useState<Set<string>>(new Set());
|
|
@@ -390,7 +393,7 @@ function useSeedPicks(
|
|
|
390
393
|
add(
|
|
391
394
|
wanted.map((seed) => ({
|
|
392
395
|
name: seed.name,
|
|
393
|
-
|
|
396
|
+
icon: faces[BOT_SEEDS.indexOf(seed)],
|
|
394
397
|
})),
|
|
395
398
|
),
|
|
396
399
|
};
|
|
@@ -399,11 +402,11 @@ function useSeedPicks(
|
|
|
399
402
|
/** The rows themselves. Both wrappers draw these and supply their own chrome. */
|
|
400
403
|
function SeedRows({
|
|
401
404
|
have,
|
|
402
|
-
|
|
405
|
+
faces,
|
|
403
406
|
picks,
|
|
404
407
|
}: {
|
|
405
408
|
have: Set<string>;
|
|
406
|
-
|
|
409
|
+
faces: BotIcon[];
|
|
407
410
|
picks: ReturnType<typeof useSeedPicks>;
|
|
408
411
|
}) {
|
|
409
412
|
return (
|
|
@@ -433,8 +436,7 @@ function SeedRows({
|
|
|
433
436
|
>
|
|
434
437
|
<BotMark
|
|
435
438
|
size={28}
|
|
436
|
-
{...markProps(seed.name,
|
|
437
|
-
color={inks[at]}
|
|
439
|
+
{...markProps(seed.name, faces[at])}
|
|
438
440
|
className={cn(
|
|
439
441
|
"shrink-0 transition-opacity",
|
|
440
442
|
!on && "opacity-35",
|
|
@@ -517,15 +519,15 @@ function SeedActions({
|
|
|
517
519
|
*/
|
|
518
520
|
function SeedPackage({
|
|
519
521
|
have,
|
|
520
|
-
|
|
522
|
+
faces,
|
|
521
523
|
onDone,
|
|
522
524
|
}: {
|
|
523
525
|
/** Names already on the roster. */
|
|
524
526
|
have: Set<string>;
|
|
525
|
-
|
|
527
|
+
faces: BotIcon[];
|
|
526
528
|
onDone: (name: string | null) => void;
|
|
527
529
|
}) {
|
|
528
|
-
const picks = useSeedPicks(have,
|
|
530
|
+
const picks = useSeedPicks(have, faces, onDone);
|
|
529
531
|
|
|
530
532
|
return (
|
|
531
533
|
<div className="flex min-h-full flex-col">
|
|
@@ -545,7 +547,7 @@ function SeedPackage({
|
|
|
545
547
|
</div>
|
|
546
548
|
|
|
547
549
|
<div className="px-8 pt-4">
|
|
548
|
-
<SeedRows have={have}
|
|
550
|
+
<SeedRows have={have} faces={faces} picks={picks} />
|
|
549
551
|
</div>
|
|
550
552
|
|
|
551
553
|
<div className="mt-auto flex items-center gap-3 border-t border-border/60 px-8 py-4">
|
|
@@ -563,14 +565,14 @@ function SeedPackage({
|
|
|
563
565
|
/** The same offer in a dialog, which brings its own padding and its own footer. */
|
|
564
566
|
function SeedDialog({
|
|
565
567
|
have,
|
|
566
|
-
|
|
568
|
+
faces,
|
|
567
569
|
onDone,
|
|
568
570
|
}: {
|
|
569
571
|
have: Set<string>;
|
|
570
|
-
|
|
572
|
+
faces: BotIcon[];
|
|
571
573
|
onDone: (name: string | null) => void;
|
|
572
574
|
}) {
|
|
573
|
-
const picks = useSeedPicks(have,
|
|
575
|
+
const picks = useSeedPicks(have, faces, onDone);
|
|
574
576
|
|
|
575
577
|
return (
|
|
576
578
|
<SettingDialogContent
|
|
@@ -578,7 +580,7 @@ function SeedDialog({
|
|
|
578
580
|
description="Each one is a starting point — rename it, re-prompt it, give it a model of its own. What a bot needs before it can work stands on its row."
|
|
579
581
|
footer={<SeedActions picks={picks} onCancel={() => onDone(null)} />}
|
|
580
582
|
>
|
|
581
|
-
<SeedRows have={have}
|
|
583
|
+
<SeedRows have={have} faces={faces} picks={picks} />
|
|
582
584
|
</SettingDialogContent>
|
|
583
585
|
);
|
|
584
586
|
}
|
|
@@ -591,12 +593,12 @@ function SeedDialog({
|
|
|
591
593
|
*/
|
|
592
594
|
function SeedInvite({
|
|
593
595
|
missing,
|
|
594
|
-
|
|
596
|
+
faces,
|
|
595
597
|
have,
|
|
596
598
|
onDone,
|
|
597
599
|
}: {
|
|
598
600
|
missing: BotSeed[];
|
|
599
|
-
|
|
601
|
+
faces: BotIcon[];
|
|
600
602
|
have: Set<string>;
|
|
601
603
|
onDone: (name: string | null) => void;
|
|
602
604
|
}) {
|
|
@@ -611,7 +613,7 @@ function SeedInvite({
|
|
|
611
613
|
renderer: ({ close }) => (
|
|
612
614
|
<SeedDialog
|
|
613
615
|
have={have}
|
|
614
|
-
|
|
616
|
+
faces={faces}
|
|
615
617
|
onDone={(name) => {
|
|
616
618
|
close();
|
|
617
619
|
onDone(name);
|
|
@@ -634,8 +636,7 @@ function SeedInvite({
|
|
|
634
636
|
>
|
|
635
637
|
<BotMark
|
|
636
638
|
size={20}
|
|
637
|
-
{...markProps(seed.name, seed
|
|
638
|
-
color={inks[BOT_SEEDS.indexOf(seed)]}
|
|
639
|
+
{...markProps(seed.name, faces[BOT_SEEDS.indexOf(seed)])}
|
|
639
640
|
notify={false}
|
|
640
641
|
/>
|
|
641
642
|
</span>
|
|
@@ -654,6 +655,7 @@ function markProps(name: string, icon?: BotIcon | null) {
|
|
|
654
655
|
color: icon?.color,
|
|
655
656
|
shape: icon?.shape,
|
|
656
657
|
outline: icon?.outline,
|
|
658
|
+
paint: icon?.paint,
|
|
657
659
|
};
|
|
658
660
|
}
|
|
659
661
|
|
|
@@ -670,7 +672,7 @@ function BotPage({
|
|
|
670
672
|
}: {
|
|
671
673
|
bot?: Bot;
|
|
672
674
|
/** Recent jobs for this bot (RECENT); empty for a new bot. */
|
|
673
|
-
jobs:
|
|
675
|
+
jobs: Thread[];
|
|
674
676
|
/** Created or deleted; where the roster should look next. */
|
|
675
677
|
onDone: (name: string | null) => void;
|
|
676
678
|
/** New bot only: folds the form. */
|
|
@@ -1201,8 +1203,8 @@ function Row({ label, children }: { label: string; children: ReactNode }) {
|
|
|
1201
1203
|
);
|
|
1202
1204
|
}
|
|
1203
1205
|
|
|
1204
|
-
/** This bot's recent jobs; the full list is in Settings >
|
|
1205
|
-
function Recent({ jobs }: { jobs:
|
|
1206
|
+
/** This bot's recent jobs; the full list is in Settings > Threads. */
|
|
1207
|
+
function Recent({ jobs }: { jobs: Thread[] }) {
|
|
1206
1208
|
return (
|
|
1207
1209
|
<div className="pt-1">
|
|
1208
1210
|
<div className="flex h-6 items-center">
|
|
@@ -1210,7 +1212,7 @@ function Recent({ jobs }: { jobs: Task[] }) {
|
|
|
1210
1212
|
<span className="flex-1" />
|
|
1211
1213
|
<button
|
|
1212
1214
|
type="button"
|
|
1213
|
-
onClick={() => openSettings("
|
|
1215
|
+
onClick={() => openSettings("threads")}
|
|
1214
1216
|
className="flex items-center gap-1 rounded-md px-1.5 py-1 font-mono text-[11px] text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring/50"
|
|
1215
1217
|
>
|
|
1216
1218
|
<History className="size-3" />
|
|
@@ -1253,14 +1255,14 @@ function Recent({ jobs }: { jobs: Task[] }) {
|
|
|
1253
1255
|
);
|
|
1254
1256
|
}
|
|
1255
1257
|
|
|
1256
|
-
function jobState(job:
|
|
1258
|
+
function jobState(job: Thread): { text: string; tone: string } {
|
|
1257
1259
|
switch (job.status) {
|
|
1258
1260
|
case "waiting":
|
|
1259
1261
|
return { text: "waiting on you", tone: WAITING_INK };
|
|
1260
1262
|
case "running":
|
|
1261
1263
|
return { text: "working", tone: "text-muted-foreground" };
|
|
1262
|
-
case "
|
|
1263
|
-
return { text: "
|
|
1264
|
+
case "cancelled":
|
|
1265
|
+
return { text: "stopped", tone: "text-muted-foreground" };
|
|
1264
1266
|
default:
|
|
1265
1267
|
return { text: "done", tone: "text-muted-foreground" };
|
|
1266
1268
|
}
|
|
@@ -1285,13 +1287,27 @@ function MarkPicker({
|
|
|
1285
1287
|
<BotMark size={112} {...markProps(name, icon)} className="shrink-0" />
|
|
1286
1288
|
|
|
1287
1289
|
{/* MARK_SYSTEM is an explicit "follow the theme ink", distinct from no
|
|
1288
|
-
colour; picking the colour already on it goes back to none.
|
|
1290
|
+
colour; picking the colour already on it goes back to none. A paint
|
|
1291
|
+
covers the colour without clearing it; picking a colour takes it off. */}
|
|
1289
1292
|
<MarkPalette
|
|
1290
|
-
color={icon.color}
|
|
1291
|
-
themePicked={icon.color === MARK_SYSTEM}
|
|
1292
|
-
onTheme={() =>
|
|
1293
|
+
color={icon.paint ? undefined : icon.color}
|
|
1294
|
+
themePicked={!icon.paint && icon.color === MARK_SYSTEM}
|
|
1295
|
+
onTheme={() =>
|
|
1296
|
+
onChange({ ...icon, paint: undefined, color: MARK_SYSTEM })
|
|
1297
|
+
}
|
|
1293
1298
|
onPick={(color) =>
|
|
1294
|
-
onChange({
|
|
1299
|
+
onChange({
|
|
1300
|
+
...icon,
|
|
1301
|
+
paint: undefined,
|
|
1302
|
+
color: !icon.paint && icon.color === color ? undefined : color,
|
|
1303
|
+
})
|
|
1304
|
+
}
|
|
1305
|
+
paint={icon.paint}
|
|
1306
|
+
onPaint={(paint) =>
|
|
1307
|
+
onChange({
|
|
1308
|
+
...icon,
|
|
1309
|
+
paint: icon.paint === paint ? undefined : paint,
|
|
1310
|
+
})
|
|
1295
1311
|
}
|
|
1296
1312
|
/>
|
|
1297
1313
|
|
|
@@ -5,13 +5,11 @@ import {
|
|
|
5
5
|
ChevronDown,
|
|
6
6
|
ExternalLink,
|
|
7
7
|
FilePen,
|
|
8
|
-
Flag,
|
|
9
|
-
Globe,
|
|
10
|
-
Image as ImageIcon,
|
|
11
8
|
ListChecks,
|
|
12
9
|
Loader2,
|
|
13
10
|
type LucideIcon,
|
|
14
11
|
MessageSquare,
|
|
12
|
+
PhoneOff,
|
|
15
13
|
Search,
|
|
16
14
|
Send,
|
|
17
15
|
Terminal,
|
|
@@ -21,6 +19,7 @@ import { type ComponentType, type ReactNode, useState } from "react";
|
|
|
21
19
|
import { queryKey } from "@/app/api/query-key";
|
|
22
20
|
import { ShinyText } from "@/components/ui/shiny-text";
|
|
23
21
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
22
|
+
import { TOOL_NAMES } from "@/features/ai/tools/tool-name";
|
|
24
23
|
import type { ResultPart } from "@/features/bot/bot.schema";
|
|
25
24
|
import { McpMark } from "@/features/connectors/components/mcp-mark";
|
|
26
25
|
import { MemoryMark } from "@/features/memory/components/memory-mark";
|
|
@@ -28,51 +27,47 @@ import { SkillsMark } from "@/features/skills/components/skills-mark";
|
|
|
28
27
|
import { FileLink } from "@/features/workspace/components/file-view";
|
|
29
28
|
import { useServerRoute } from "@/lib/protocol/use-server-route";
|
|
30
29
|
import { cn } from "@/lib/utils";
|
|
31
|
-
import type { ToolUse } from "../
|
|
30
|
+
import type { ToolUse } from "../thread.store";
|
|
32
31
|
|
|
33
32
|
/*
|
|
34
33
|
* Tool calls rendered per tool: TOOL_VIEWS by name, GenericTool for the rest. Results
|
|
35
|
-
* arrive
|
|
34
|
+
* arrive as a glance (thread.query RESULT_LINES, each line clipped); "Everything"
|
|
35
|
+
* fetches the whole output, and only once it is opened.
|
|
36
36
|
*/
|
|
37
37
|
|
|
38
38
|
type ToolProps = {
|
|
39
39
|
tool: ToolUse;
|
|
40
40
|
/** Half of the key for fetching the full result. */
|
|
41
|
-
|
|
41
|
+
threadId?: string;
|
|
42
42
|
/** Start folded to the title line. A running tool is always expanded regardless. */
|
|
43
43
|
collapsed?: boolean;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
web_search: WebSearchTool,
|
|
48
|
-
bash: ShellTool,
|
|
49
|
-
|
|
50
|
-
write_file: (props) => <FileTool icon={FilePen} {...props} />,
|
|
51
|
-
generate_image: DrawnTool,
|
|
46
|
+
const TOOL_VIEWS: Partial<Record<string, ComponentType<ToolProps>>> = {
|
|
47
|
+
[TOOL_NAMES.web_search]: WebSearchTool,
|
|
48
|
+
[TOOL_NAMES.bash]: ShellTool,
|
|
49
|
+
[TOOL_NAMES.write_file]: (props) => <FileTool icon={FilePen} {...props} />,
|
|
52
50
|
};
|
|
53
51
|
|
|
54
52
|
/**
|
|
55
53
|
* Icon per tool, for views with room for one glyph. A tool that belongs to a
|
|
56
54
|
* domain draws that domain's own mark, so the pill and the nav never disagree.
|
|
57
55
|
*/
|
|
58
|
-
const TOOL_ICONS: Record<string, LucideIcon
|
|
59
|
-
web_search: Search,
|
|
60
|
-
bash: Terminal,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
ask_back: MessageSquare,
|
|
74
|
-
ask_thursday: MessageSquare,
|
|
75
|
-
answer: Flag,
|
|
56
|
+
const TOOL_ICONS: Partial<Record<string, LucideIcon>> = {
|
|
57
|
+
[TOOL_NAMES.web_search]: Search,
|
|
58
|
+
[TOOL_NAMES.bash]: Terminal,
|
|
59
|
+
[TOOL_NAMES.write_file]: FilePen,
|
|
60
|
+
[TOOL_NAMES.memory_recall]: MemoryMark,
|
|
61
|
+
[TOOL_NAMES.memory_remember]: MemoryMark,
|
|
62
|
+
[TOOL_NAMES.memory_forget]: MemoryMark,
|
|
63
|
+
[TOOL_NAMES.memory_conversation]: MemoryMark,
|
|
64
|
+
[TOOL_NAMES.load_skill]: SkillsMark,
|
|
65
|
+
[TOOL_NAMES.tool_search]: McpMark,
|
|
66
|
+
[TOOL_NAMES.tool_call]: McpMark,
|
|
67
|
+
[TOOL_NAMES.delegate]: Send,
|
|
68
|
+
[TOOL_NAMES.thread]: ListChecks,
|
|
69
|
+
[TOOL_NAMES.send_message]: MessageSquare,
|
|
70
|
+
[TOOL_NAMES.end_call]: PhoneOff,
|
|
76
71
|
};
|
|
77
72
|
|
|
78
73
|
export const toolIcon = (name: string): LucideIcon =>
|
|
@@ -83,10 +78,10 @@ export function BotTool(props: ToolProps) {
|
|
|
83
78
|
return <View {...props} />;
|
|
84
79
|
}
|
|
85
80
|
|
|
86
|
-
function WebSearchTool({ tool,
|
|
81
|
+
function WebSearchTool({ tool, threadId, collapsed }: ToolProps) {
|
|
87
82
|
const hits = texts(tool.results);
|
|
88
83
|
return (
|
|
89
|
-
<Frame tool={tool}
|
|
84
|
+
<Frame tool={tool} threadId={threadId} icon={Search} collapsed={collapsed}>
|
|
90
85
|
<p className="px-3 pt-1 pb-1.5 text-[13px] leading-snug break-keep">
|
|
91
86
|
“{tool.input}”
|
|
92
87
|
</p>
|
|
@@ -107,10 +102,15 @@ function WebSearchTool({ tool, taskId, collapsed }: ToolProps) {
|
|
|
107
102
|
);
|
|
108
103
|
}
|
|
109
104
|
|
|
110
|
-
function ShellTool({ tool,
|
|
105
|
+
function ShellTool({ tool, threadId, collapsed }: ToolProps) {
|
|
111
106
|
const out = texts(tool.results);
|
|
112
107
|
return (
|
|
113
|
-
<Frame
|
|
108
|
+
<Frame
|
|
109
|
+
tool={tool}
|
|
110
|
+
threadId={threadId}
|
|
111
|
+
icon={Terminal}
|
|
112
|
+
collapsed={collapsed}
|
|
113
|
+
>
|
|
114
114
|
<pre className="mx-3 overflow-x-auto rounded-lg bg-foreground/5 px-2.5 py-1.5 font-mono text-[11px] leading-relaxed scrollbar-none dark:bg-black/25">
|
|
115
115
|
<span className="text-muted-foreground/60">$ </span>
|
|
116
116
|
{tool.input}
|
|
@@ -122,39 +122,22 @@ function ShellTool({ tool, taskId, collapsed }: ToolProps) {
|
|
|
122
122
|
);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
/** A path or url and what was read from it. */
|
|
126
|
-
function MonoTool({
|
|
127
|
-
icon,
|
|
128
|
-
tool,
|
|
129
|
-
taskId,
|
|
130
|
-
collapsed,
|
|
131
|
-
}: ToolProps & { icon: LucideIcon }) {
|
|
132
|
-
return (
|
|
133
|
-
<Frame tool={tool} taskId={taskId} icon={icon} collapsed={collapsed}>
|
|
134
|
-
<p className="truncate px-3 pt-1 pb-1.5 font-mono text-[11px]">
|
|
135
|
-
{tool.input}
|
|
136
|
-
</p>
|
|
137
|
-
<Lines lines={texts(tool.results)} mono />
|
|
138
|
-
</Frame>
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
125
|
const OPEN_BUTTON =
|
|
143
126
|
"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground outline-none transition-colors hover:bg-background hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50";
|
|
144
127
|
|
|
145
128
|
/**
|
|
146
129
|
* A file the bot read or wrote, with an Open link. Opens `tool.path`: `input` is folded
|
|
147
|
-
* to one line, and a truncated path is a 404 (
|
|
130
|
+
* to one line, and a truncated path is a 404 (thread.query LINE_MAX).
|
|
148
131
|
*/
|
|
149
132
|
function FileTool({
|
|
150
133
|
icon,
|
|
151
134
|
tool,
|
|
152
|
-
|
|
135
|
+
threadId,
|
|
153
136
|
collapsed,
|
|
154
137
|
}: ToolProps & { icon: LucideIcon }) {
|
|
155
138
|
const path = tool.path ?? tool.input;
|
|
156
139
|
return (
|
|
157
|
-
<Frame tool={tool}
|
|
140
|
+
<Frame tool={tool} threadId={threadId} icon={icon} collapsed={collapsed}>
|
|
158
141
|
<div className="flex items-center gap-2 px-3 pt-1 pb-1.5">
|
|
159
142
|
<span className="min-w-0 flex-1 truncate font-mono text-[11px]">
|
|
160
143
|
{tool.input}
|
|
@@ -169,35 +152,12 @@ function FileTool({
|
|
|
169
152
|
);
|
|
170
153
|
}
|
|
171
154
|
|
|
172
|
-
/** A generated image. The path is the first result line, not the input: the name is made while generating. */
|
|
173
|
-
function DrawnTool({ tool, taskId, collapsed }: ToolProps) {
|
|
174
|
-
const [path] = texts(tool.results);
|
|
175
|
-
return (
|
|
176
|
-
<Frame tool={tool} taskId={taskId} icon={ImageIcon} collapsed={collapsed}>
|
|
177
|
-
<p className="px-3 pt-1 text-[12px] leading-snug break-keep">
|
|
178
|
-
{tool.input}
|
|
179
|
-
</p>
|
|
180
|
-
{path && (
|
|
181
|
-
<div className="flex items-center gap-2 px-3 pt-1 pb-1.5">
|
|
182
|
-
<span className="min-w-0 flex-1 truncate font-mono text-[11px] text-muted-foreground">
|
|
183
|
-
{path}
|
|
184
|
-
</span>
|
|
185
|
-
<FileLink path={path} label={`Open ${path}`} className={OPEN_BUTTON}>
|
|
186
|
-
<ExternalLink className="size-3" />
|
|
187
|
-
Open
|
|
188
|
-
</FileLink>
|
|
189
|
-
</div>
|
|
190
|
-
)}
|
|
191
|
-
</Frame>
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
155
|
/** Anything without a view of its own, MCP tools included. */
|
|
196
|
-
function GenericTool({ tool,
|
|
156
|
+
function GenericTool({ tool, threadId, collapsed }: ToolProps) {
|
|
197
157
|
return (
|
|
198
158
|
<Frame
|
|
199
159
|
tool={tool}
|
|
200
|
-
|
|
160
|
+
threadId={threadId}
|
|
201
161
|
icon={toolIcon(tool.name)}
|
|
202
162
|
collapsed={collapsed}
|
|
203
163
|
>
|
|
@@ -211,12 +171,12 @@ function GenericTool({ tool, taskId, collapsed }: ToolProps) {
|
|
|
211
171
|
|
|
212
172
|
/**
|
|
213
173
|
* The shell every tool view sits in: a one-line step (icon, label, call, tool name,
|
|
214
|
-
* state) with the body below it. A running tool is always expanded; a
|
|
215
|
-
*
|
|
174
|
+
* state) with the body below it. A running tool is always expanded; a finished one
|
|
175
|
+
* that returned anything gets "Everything" at the bottom.
|
|
216
176
|
*/
|
|
217
177
|
function Frame({
|
|
218
178
|
tool,
|
|
219
|
-
|
|
179
|
+
threadId,
|
|
220
180
|
icon: Icon,
|
|
221
181
|
collapsed = false,
|
|
222
182
|
children,
|
|
@@ -224,7 +184,9 @@ function Frame({
|
|
|
224
184
|
const running = tool.results === undefined;
|
|
225
185
|
const [open, setOpen] = useState(!collapsed);
|
|
226
186
|
const shown = open || running;
|
|
227
|
-
|
|
187
|
+
// The glance is text only and clipped, so any output can be opened whole
|
|
188
|
+
const whole =
|
|
189
|
+
threadId && tool.callId && ((tool.results?.length ?? 0) > 0 || tool.more);
|
|
228
190
|
|
|
229
191
|
return (
|
|
230
192
|
<div
|
|
@@ -294,8 +256,8 @@ function Frame({
|
|
|
294
256
|
{shown && (
|
|
295
257
|
<div className="pb-1.5 pl-[1.625rem]">
|
|
296
258
|
{children}
|
|
297
|
-
{
|
|
298
|
-
<Everything
|
|
259
|
+
{whole && (
|
|
260
|
+
<Everything threadId={threadId} callId={tool.callId as string} />
|
|
299
261
|
)}
|
|
300
262
|
</div>
|
|
301
263
|
)}
|
|
@@ -304,10 +266,16 @@ function Frame({
|
|
|
304
266
|
}
|
|
305
267
|
|
|
306
268
|
/** The rest of a truncated result, fetched only when opened. */
|
|
307
|
-
function Everything({
|
|
269
|
+
function Everything({
|
|
270
|
+
threadId,
|
|
271
|
+
callId,
|
|
272
|
+
}: {
|
|
273
|
+
threadId: string;
|
|
274
|
+
callId: string;
|
|
275
|
+
}) {
|
|
308
276
|
const [open, setOpen] = useState(false);
|
|
309
277
|
const { data, isLoading } = useServerRoute<ResultPart[]>(
|
|
310
|
-
open ? queryKey.toolResult(
|
|
278
|
+
open ? queryKey.toolResult(threadId, callId) : null,
|
|
311
279
|
);
|
|
312
280
|
|
|
313
281
|
return (
|