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
package/app/api/query-key.ts
CHANGED
|
@@ -8,11 +8,15 @@ const encodePath = (path: string) =>
|
|
|
8
8
|
path.split("/").map(encodeURIComponent).join("/");
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Inverse of encodePath for
|
|
11
|
+
* Inverse of encodePath for route-handler segments. No decoding: Next already
|
|
12
12
|
* decodes segments, and decoding again throws on names containing `%`.
|
|
13
13
|
*/
|
|
14
14
|
export const decodePath = (segments: string[]) => segments.join("/");
|
|
15
15
|
|
|
16
|
+
/** Next.js page params retain URL encoding; decode once, including literal percent signs. */
|
|
17
|
+
export const decodePagePath = (segments: string[]) =>
|
|
18
|
+
segments.map(decodeURIComponent).join("/");
|
|
19
|
+
|
|
16
20
|
export const queryKey = {
|
|
17
21
|
/** MemoryNote[] first page: pinned first, then by warmth */
|
|
18
22
|
memory: "/api/memory",
|
|
@@ -49,7 +53,7 @@ export const queryKey = {
|
|
|
49
53
|
}),
|
|
50
54
|
|
|
51
55
|
/**
|
|
52
|
-
* Bot[]. `
|
|
56
|
+
* Bot[]. `threads` and `threadHistory` sit under this prefix, so editing a bot
|
|
53
57
|
* also revalidates the inbox and loaded history pages.
|
|
54
58
|
*/
|
|
55
59
|
bot: "/api/bot",
|
|
@@ -63,23 +67,23 @@ export const queryKey = {
|
|
|
63
67
|
}),
|
|
64
68
|
|
|
65
69
|
/**
|
|
66
|
-
* Inbox:
|
|
67
|
-
* the most recent finished few. Read by use-thursday only; the `
|
|
70
|
+
* Inbox: Thread[] newest first with their lines, everything running or asking plus
|
|
71
|
+
* the most recent finished few. Read by use-thursday only; the `threads` signal
|
|
68
72
|
* triggers revalidation, with a 30s poll as fallback.
|
|
69
73
|
*/
|
|
70
|
-
|
|
74
|
+
threads: "/api/bot/thread",
|
|
71
75
|
/**
|
|
72
|
-
* History page:
|
|
76
|
+
* History page: Thread[] newest first. `before` is the last page's final
|
|
73
77
|
* updatedAt (ISO), null for the first page.
|
|
74
78
|
*/
|
|
75
|
-
|
|
76
|
-
url: "/api/bot/
|
|
79
|
+
threadHistory: (before: string | null) => ({
|
|
80
|
+
url: "/api/bot/thread",
|
|
77
81
|
query: { history: 1, before },
|
|
78
82
|
}),
|
|
79
83
|
/** ResultPart[]: the full result of one tool call; lists carry only a few lines. */
|
|
80
|
-
toolResult: (
|
|
81
|
-
url: "/api/bot/
|
|
82
|
-
pathVariable: [
|
|
84
|
+
toolResult: (threadId: string | null, callId: string | null) => ({
|
|
85
|
+
url: "/api/bot/thread",
|
|
86
|
+
pathVariable: [threadId],
|
|
83
87
|
query: { call: callId },
|
|
84
88
|
}),
|
|
85
89
|
/**
|
|
@@ -91,20 +95,25 @@ export const queryKey = {
|
|
|
91
95
|
url: "/api/workspace",
|
|
92
96
|
query: { path: path || null, rows },
|
|
93
97
|
}),
|
|
98
|
+
/** PathChips: which of the paths one message names have no file. Under `workspace`, so it refreshes with it. */
|
|
99
|
+
workspaceMissing: (paths: string[]) => ({
|
|
100
|
+
url: "/api/workspace/missing",
|
|
101
|
+
query: { paths: JSON.stringify(paths) },
|
|
102
|
+
}),
|
|
94
103
|
|
|
95
104
|
/**
|
|
96
|
-
* ArtifactShelf:
|
|
97
|
-
* `artifactSet` opens one of those rows
|
|
98
|
-
* invalidating it refreshes an open set too.
|
|
105
|
+
* ArtifactShelf: every bot's folder in `artifacts/` and what is loose there,
|
|
106
|
+
* one row per artifact. `artifactSet` opens one of those rows by its path.
|
|
107
|
+
* The bare key is the menu, so invalidating it refreshes an open set too.
|
|
99
108
|
*/
|
|
100
109
|
artifacts: "/api/artifact",
|
|
101
110
|
artifactShelf: (rows: number) => ({
|
|
102
111
|
url: "/api/artifact",
|
|
103
112
|
query: { rows },
|
|
104
113
|
}),
|
|
105
|
-
artifactSet: (
|
|
114
|
+
artifactSet: (path: string, rows: number) => ({
|
|
106
115
|
url: "/api/artifact",
|
|
107
|
-
query: { set:
|
|
116
|
+
query: { set: path, rows },
|
|
108
117
|
}),
|
|
109
118
|
|
|
110
119
|
/** Raw workspace file, no Result envelope; for iframe, img and fetch, not SWR. */
|
package/bin/database.mjs
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// What both starters do when the server exits because it could not migrate the
|
|
2
|
+
// database. Plain JavaScript and no app imports: `thursday` (bin/thursday.mjs)
|
|
3
|
+
// and `pnpm dev` (scripts/dev.mts) load it before anything is built.
|
|
4
|
+
|
|
5
|
+
import { rmSync } from "node:fs";
|
|
6
|
+
import { createInterface } from "node:readline/promises";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* How boot exits when migrating fails (instrumentation-node.ts), so a starter
|
|
10
|
+
* can tell it from any other crash. Not 77: `next dev` restarts on that.
|
|
11
|
+
*/
|
|
12
|
+
export const MIGRATION_FAILED_EXIT = 65;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Asks to remove the database the server could not migrate. The server has
|
|
16
|
+
* already printed why and exited, so nothing holds the file. True once it is
|
|
17
|
+
* gone and the server can start again on an empty one. With no terminal there
|
|
18
|
+
* is nobody to ask, and the server's message already names the files.
|
|
19
|
+
*/
|
|
20
|
+
export async function askToRemoveDatabase(dbPath) {
|
|
21
|
+
if (!process.stdin.isTTY) return false;
|
|
22
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
23
|
+
// Raw mode: Ctrl+C arrives here as a key, not as a signal
|
|
24
|
+
rl.on("SIGINT", () => {
|
|
25
|
+
console.log();
|
|
26
|
+
process.exit(130);
|
|
27
|
+
});
|
|
28
|
+
const answer = await rl.question(" Remove it and start over? [y/N] ");
|
|
29
|
+
rl.close();
|
|
30
|
+
if (!/^y/i.test(answer.trim())) return false;
|
|
31
|
+
// WAL mode keeps two sidecars next to the file.
|
|
32
|
+
for (const file of [dbPath, `${dbPath}-wal`, `${dbPath}-shm`]) {
|
|
33
|
+
rmSync(file, { force: true });
|
|
34
|
+
}
|
|
35
|
+
console.log(" Removed. Starting again.\n");
|
|
36
|
+
return true;
|
|
37
|
+
}
|
package/bin/thursday.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import { existsSync, symlinkSync } from "node:fs";
|
|
|
8
8
|
import { readFile } from "node:fs/promises";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
import { join, resolve } from "node:path";
|
|
11
|
+
import { askToRemoveDatabase, MIGRATION_FAILED_EXIT } from "./database.mjs";
|
|
11
12
|
import { freePort } from "./port.mjs";
|
|
12
13
|
import { ROOT, toolPath } from "./tools.mjs";
|
|
13
14
|
|
|
@@ -54,6 +55,8 @@ const asked = flag("port") ?? process.env.PORT;
|
|
|
54
55
|
const port = String(await freePort(asked));
|
|
55
56
|
const home = resolve(flag("home") || process.env.THURSDAY_HOME || DEFAULT_HOME);
|
|
56
57
|
const url = `http://localhost:${port}`;
|
|
58
|
+
/** Where config.ts DB_FILE_NAME puts the database under the home. */
|
|
59
|
+
const database = join(home, "local.db");
|
|
57
60
|
|
|
58
61
|
/**
|
|
59
62
|
* The published package is the standalone tree itself (scripts/pack); a
|
|
@@ -92,40 +95,54 @@ if (APP !== ROOT) {
|
|
|
92
95
|
|
|
93
96
|
console.log(`\n ${name} ${version}\n ${url}\n data: ${home}\n`);
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
98
|
+
let child;
|
|
99
|
+
let opened = has("--no-open");
|
|
100
|
+
|
|
101
|
+
/** The server. Started again once a database it could not migrate is removed. */
|
|
102
|
+
function start() {
|
|
103
|
+
const server = spawn(process.execPath, [join(APP, "server.js")], {
|
|
104
|
+
stdio: "inherit",
|
|
105
|
+
env: {
|
|
106
|
+
...process.env,
|
|
107
|
+
// Set explicitly: the standalone server chdirs into its own folder, so
|
|
108
|
+
// neither root may be left to the cwd (config.ts)
|
|
109
|
+
THURSDAY_APP_DIR: APP,
|
|
110
|
+
THURSDAY_HOME: home,
|
|
111
|
+
THURSDAY_URL: url,
|
|
112
|
+
// Where a bot's shell finds playwright-cli (workspace.ts TOOL_PATH)
|
|
113
|
+
THURSDAY_TOOL_PATH: toolPath().join(":"),
|
|
114
|
+
PORT: port,
|
|
115
|
+
// This machine only. A voice agent with a shell is not a thing to expose.
|
|
116
|
+
HOSTNAME: process.env.HOSTNAME || "127.0.0.1",
|
|
117
|
+
NODE_ENV: "production",
|
|
118
|
+
// The server parks running jobs on a stop before it exits (instrumentation);
|
|
119
|
+
// without this, Next exits on the signal first
|
|
120
|
+
NEXT_MANUAL_SIG_HANDLE: "true",
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
child = server;
|
|
124
|
+
server.on("exit", async (code) => {
|
|
125
|
+
if (code === MIGRATION_FAILED_EXIT && (await askToRemoveDatabase(database)))
|
|
126
|
+
return start();
|
|
127
|
+
process.exit(code ?? 0);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
if (opened) return;
|
|
117
131
|
const open =
|
|
118
132
|
process.platform === "darwin"
|
|
119
133
|
? ["open", [url]]
|
|
120
134
|
: process.platform === "win32"
|
|
121
135
|
? ["cmd", ["/c", "start", "", url]]
|
|
122
136
|
: ["xdg-open", [url]];
|
|
123
|
-
// After the port is listening
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
137
|
+
// After the port is listening, and only on a server still up: one that could
|
|
138
|
+
// not migrate is asking in the terminal. A browser that will not open is not a failure
|
|
139
|
+
setTimeout(() => {
|
|
140
|
+
if (opened || server.exitCode !== null) return;
|
|
141
|
+
opened = true;
|
|
142
|
+
spawn(open[0], open[1], { stdio: "ignore" }).on("error", () => {});
|
|
143
|
+
}, 1500).unref();
|
|
128
144
|
}
|
|
145
|
+
start();
|
|
129
146
|
|
|
130
147
|
/**
|
|
131
148
|
* Ctrl+C reaches the whole process group, so the server normally hears it first
|
|
@@ -145,4 +162,3 @@ for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
|
145
162
|
setTimeout(() => child.kill("SIGKILL"), 4000).unref();
|
|
146
163
|
});
|
|
147
164
|
}
|
|
148
|
-
child.on("exit", (code) => process.exit(code ?? 0));
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
export function MCPIcon({ className }: { className?: string }) {
|
|
2
|
-
return (
|
|
3
|
-
<svg
|
|
4
|
-
aria-hidden="true"
|
|
5
|
-
viewBox="0 0 24 24"
|
|
6
|
-
version="1.1"
|
|
7
|
-
className={className}
|
|
8
|
-
data-view-component="true"
|
|
9
|
-
>
|
|
10
|
-
<path
|
|
11
|
-
fill="currentColor"
|
|
12
|
-
d="M15.688 2.343a2.588 2.588 0 00-3.61 0l-9.626 9.44a.863.863 0 01-1.203 0 .823.823 0 010-1.18l9.626-9.44a4.313 4.313 0 016.016 0 4.116 4.116 0 011.204 3.54 4.3 4.3 0 013.609 1.18l.05.05a4.115 4.115 0 010 5.9l-8.706 8.537a.274.274 0 000 .393l1.788 1.754a.823.823 0 010 1.18.863.863 0 01-1.203 0l-1.788-1.753a1.92 1.92 0 010-2.754l8.706-8.538a2.47 2.47 0 000-3.54l-.05-.049a2.588 2.588 0 00-3.607-.003l-7.172 7.034-.002.002-.098.097a.863.863 0 01-1.204 0 .823.823 0 010-1.18l7.273-7.133a2.47 2.47 0 00-.003-3.537z"
|
|
13
|
-
></path>
|
|
14
|
-
<path
|
|
15
|
-
fill="currentColor"
|
|
16
|
-
d="M14.485 4.703a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a4.115 4.115 0 000 5.9 4.314 4.314 0 006.016 0l7.12-6.982a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a2.588 2.588 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.982z"
|
|
17
|
-
></path>
|
|
18
|
-
</svg>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function DiscordIcon({ className }: { className?: string }) {
|
|
23
|
-
return (
|
|
24
|
-
<svg
|
|
25
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
26
|
-
width="16"
|
|
27
|
-
height="16"
|
|
28
|
-
fill="currentColor"
|
|
29
|
-
className={className}
|
|
30
|
-
viewBox="0 0 16 16"
|
|
31
|
-
>
|
|
32
|
-
<path d="M13.545 2.907a13.2 13.2 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.2 12.2 0 0 0-3.658 0 8 8 0 0 0-.412-.833.05.05 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.04.04 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032q.003.022.021.037a13.3 13.3 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019q.463-.63.818-1.329a.05.05 0 0 0-.01-.059l-.018-.011a9 9 0 0 1-1.248-.595.05.05 0 0 1-.02-.066l.015-.019q.127-.095.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.05.05 0 0 1 .053.007q.121.1.248.195a.05.05 0 0 1-.004.085 8 8 0 0 1-1.249.594.05.05 0 0 0-.03.03.05.05 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.2 13.2 0 0 0 4.001-2.02.05.05 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.03.03 0 0 0-.02-.019m-8.198 7.307c-.789 0-1.438-.724-1.438-1.612s.637-1.613 1.438-1.613c.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612m5.316 0c-.788 0-1.438-.724-1.438-1.612s.637-1.613 1.438-1.613c.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612" />
|
|
33
|
-
</svg>
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
1
|
export function GoogleIcon({ className }: { className?: string }) {
|
|
38
2
|
return (
|
|
39
3
|
<svg
|
|
@@ -213,30 +177,6 @@ export function ClaudeIcon({ className }: { className?: string }) {
|
|
|
213
177
|
);
|
|
214
178
|
}
|
|
215
179
|
|
|
216
|
-
export function ThemeIcon({ className }: { className?: string }) {
|
|
217
|
-
return (
|
|
218
|
-
<svg
|
|
219
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
220
|
-
width="24"
|
|
221
|
-
height="24"
|
|
222
|
-
viewBox="0 0 24 24"
|
|
223
|
-
fill="none"
|
|
224
|
-
stroke="currentColor"
|
|
225
|
-
strokeWidth="2"
|
|
226
|
-
strokeLinecap="round"
|
|
227
|
-
strokeLinejoin="round"
|
|
228
|
-
className={className}
|
|
229
|
-
>
|
|
230
|
-
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
|
231
|
-
<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"></path>
|
|
232
|
-
<path d="M12 3l0 18"></path>
|
|
233
|
-
<path d="M12 9l4.65 -4.65"></path>
|
|
234
|
-
<path d="M12 14.3l7.37 -7.37"></path>
|
|
235
|
-
<path d="M12 19.6l8.85 -8.85"></path>
|
|
236
|
-
</svg>
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
180
|
export function VercelIcon({ className }: { className?: string }) {
|
|
241
181
|
return (
|
|
242
182
|
<svg
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
4
|
+
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
5
|
+
import { cn } from "@/lib/utils";
|
|
6
|
+
|
|
7
|
+
function RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {
|
|
8
|
+
return (
|
|
9
|
+
<RadioGroupPrimitive
|
|
10
|
+
data-slot="radio-group"
|
|
11
|
+
className={cn("grid w-full gap-2", className)}
|
|
12
|
+
{...props}
|
|
13
|
+
/>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {
|
|
18
|
+
return (
|
|
19
|
+
<RadioPrimitive.Root
|
|
20
|
+
data-slot="radio-group-item"
|
|
21
|
+
className={cn(
|
|
22
|
+
"group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",
|
|
23
|
+
className,
|
|
24
|
+
)}
|
|
25
|
+
{...props}
|
|
26
|
+
>
|
|
27
|
+
<RadioPrimitive.Indicator
|
|
28
|
+
data-slot="radio-group-indicator"
|
|
29
|
+
className="flex size-4 items-center justify-center"
|
|
30
|
+
>
|
|
31
|
+
<span className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" />
|
|
32
|
+
</RadioPrimitive.Indicator>
|
|
33
|
+
</RadioPrimitive.Root>
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { RadioGroup, RadioGroupItem };
|
|
@@ -2,12 +2,22 @@ import type { CSSProperties } from "react";
|
|
|
2
2
|
import { cn, WAITING_INK } from "@/lib/utils";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* The resting ink
|
|
6
|
-
* toward the ink: a lighter band on light ground reads as the
|
|
5
|
+
* The resting ink, the ink under a passing band, and the band. On a light page
|
|
6
|
+
* the band moves toward the ink: a lighter band on light ground reads as the
|
|
7
|
+
* words fading out. A dark band over the full muted ink barely shows there, so
|
|
8
|
+
* the words under it rest lighter on a light page than they do still.
|
|
7
9
|
*/
|
|
8
10
|
const TONES = {
|
|
9
|
-
muted: {
|
|
10
|
-
|
|
11
|
+
muted: {
|
|
12
|
+
rest: "text-muted-foreground",
|
|
13
|
+
under: "text-muted-foreground/60 dark:text-muted-foreground",
|
|
14
|
+
band: "via-foreground",
|
|
15
|
+
},
|
|
16
|
+
waiting: {
|
|
17
|
+
rest: WAITING_INK,
|
|
18
|
+
under: "text-amber-700/60 dark:text-amber-400",
|
|
19
|
+
band: "via-amber-950 dark:via-amber-100",
|
|
20
|
+
},
|
|
11
21
|
} as const;
|
|
12
22
|
|
|
13
23
|
export type ShinyTone = keyof typeof TONES;
|
|
@@ -24,20 +34,37 @@ export type ShinyTone = keyof typeof TONES;
|
|
|
24
34
|
export function ShinyText({
|
|
25
35
|
text,
|
|
26
36
|
tone = "muted",
|
|
37
|
+
motion = "shine",
|
|
27
38
|
speed = 2.4,
|
|
28
39
|
className,
|
|
29
40
|
}: {
|
|
30
41
|
text: string;
|
|
31
42
|
tone?: ShinyTone;
|
|
43
|
+
/** How it says it is still moving: a band crossing the words, or the words easing out and back. */
|
|
44
|
+
motion?: "shine" | "pulse";
|
|
32
45
|
/** Seconds for the band to cross once. */
|
|
33
46
|
speed?: number;
|
|
34
47
|
className?: string;
|
|
35
48
|
}) {
|
|
36
|
-
const { rest, band } = TONES[tone];
|
|
49
|
+
const { rest, under, band } = TONES[tone];
|
|
50
|
+
if (motion === "pulse") {
|
|
51
|
+
return (
|
|
52
|
+
<span
|
|
53
|
+
data-slot="shiny-text"
|
|
54
|
+
className={cn(
|
|
55
|
+
"inline-block max-w-full animate-pulse motion-reduce:animate-none",
|
|
56
|
+
rest,
|
|
57
|
+
className,
|
|
58
|
+
)}
|
|
59
|
+
>
|
|
60
|
+
{text}
|
|
61
|
+
</span>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
37
64
|
return (
|
|
38
65
|
<span
|
|
39
66
|
data-slot="shiny-text"
|
|
40
|
-
className={cn("relative inline-block max-w-full",
|
|
67
|
+
className={cn("relative inline-block max-w-full", under, className)}
|
|
41
68
|
>
|
|
42
69
|
{text}
|
|
43
70
|
<span
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
CREATE TABLE
|
|
1
|
+
CREATE TABLE `bot_mcp_tool` (
|
|
2
2
|
`botName` text NOT NULL,
|
|
3
3
|
`tool_id` integer NOT NULL,
|
|
4
4
|
CONSTRAINT `bot_mcp_tool_pk` PRIMARY KEY(`botName`, `tool_id`),
|
|
@@ -6,13 +6,7 @@ CREATE TABLE IF NOT EXISTS `bot_mcp_tool` (
|
|
|
6
6
|
CONSTRAINT `fk_bot_mcp_tool_tool_id_mcp_tool_id_fk` FOREIGN KEY (`tool_id`) REFERENCES `mcp_tool`(`id`) ON DELETE CASCADE
|
|
7
7
|
);
|
|
8
8
|
--> statement-breakpoint
|
|
9
|
-
CREATE TABLE
|
|
10
|
-
`bot` text PRIMARY KEY,
|
|
11
|
-
`text` text NOT NULL,
|
|
12
|
-
`updated_at` integer NOT NULL
|
|
13
|
-
);
|
|
14
|
-
--> statement-breakpoint
|
|
15
|
-
CREATE TABLE IF NOT EXISTS `bot` (
|
|
9
|
+
CREATE TABLE `bot` (
|
|
16
10
|
`name` text PRIMARY KEY,
|
|
17
11
|
`description` text NOT NULL,
|
|
18
12
|
`system_prompt` text,
|
|
@@ -24,32 +18,46 @@ CREATE TABLE IF NOT EXISTS `bot` (
|
|
|
24
18
|
`created_at` integer NOT NULL
|
|
25
19
|
);
|
|
26
20
|
--> statement-breakpoint
|
|
27
|
-
CREATE TABLE
|
|
21
|
+
CREATE TABLE `call_message` (
|
|
28
22
|
`call_id` text NOT NULL,
|
|
29
23
|
`id` text NOT NULL,
|
|
30
24
|
`seq` integer NOT NULL,
|
|
31
25
|
`role` text NOT NULL,
|
|
32
26
|
`tool` text,
|
|
33
27
|
`text` text NOT NULL,
|
|
28
|
+
`fragments` text,
|
|
34
29
|
`at` integer NOT NULL,
|
|
35
30
|
CONSTRAINT `call_message_pk` PRIMARY KEY(`call_id`, `id`),
|
|
36
31
|
CONSTRAINT `fk_call_message_call_id_call_id_fk` FOREIGN KEY (`call_id`) REFERENCES `call`(`id`) ON DELETE CASCADE
|
|
37
32
|
);
|
|
38
33
|
--> statement-breakpoint
|
|
39
|
-
CREATE TABLE
|
|
34
|
+
CREATE TABLE `call` (
|
|
40
35
|
`id` text PRIMARY KEY,
|
|
41
36
|
`provider` text NOT NULL,
|
|
42
37
|
`model` text NOT NULL,
|
|
38
|
+
`backend_model` text,
|
|
43
39
|
`started_at` integer NOT NULL,
|
|
40
|
+
`ended_reason` text,
|
|
41
|
+
`seconds` integer,
|
|
44
42
|
`ended_at` integer
|
|
45
43
|
);
|
|
46
44
|
--> statement-breakpoint
|
|
47
|
-
CREATE TABLE
|
|
45
|
+
CREATE TABLE `call_thought` (
|
|
46
|
+
`call_id` text NOT NULL,
|
|
47
|
+
`id` text NOT NULL,
|
|
48
|
+
`seq` integer NOT NULL,
|
|
49
|
+
`text` text NOT NULL,
|
|
50
|
+
`at` integer NOT NULL,
|
|
51
|
+
CONSTRAINT `call_thought_pk` PRIMARY KEY(`call_id`, `id`),
|
|
52
|
+
CONSTRAINT `fk_call_thought_call_id_call_id_fk` FOREIGN KEY (`call_id`) REFERENCES `call`(`id`) ON DELETE CASCADE
|
|
53
|
+
);
|
|
54
|
+
--> statement-breakpoint
|
|
55
|
+
CREATE TABLE `config` (
|
|
48
56
|
`key` text PRIMARY KEY,
|
|
49
57
|
`value` text NOT NULL
|
|
50
58
|
);
|
|
51
59
|
--> statement-breakpoint
|
|
52
|
-
CREATE TABLE
|
|
60
|
+
CREATE TABLE `mcp_server` (
|
|
53
61
|
`name` text PRIMARY KEY,
|
|
54
62
|
`config` text NOT NULL,
|
|
55
63
|
`tools_synced_at` integer NOT NULL,
|
|
@@ -58,7 +66,7 @@ CREATE TABLE IF NOT EXISTS `mcp_server` (
|
|
|
58
66
|
`created_at` integer NOT NULL
|
|
59
67
|
);
|
|
60
68
|
--> statement-breakpoint
|
|
61
|
-
CREATE TABLE
|
|
69
|
+
CREATE TABLE `mcp_tool` (
|
|
62
70
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
63
71
|
`server_name` text NOT NULL,
|
|
64
72
|
`name` text NOT NULL,
|
|
@@ -69,7 +77,7 @@ CREATE TABLE IF NOT EXISTS `mcp_tool` (
|
|
|
69
77
|
CONSTRAINT `uq_mcp_tool_server_name` UNIQUE(`server_name`,`name`)
|
|
70
78
|
);
|
|
71
79
|
--> statement-breakpoint
|
|
72
|
-
CREATE TABLE
|
|
80
|
+
CREATE TABLE `memory_fact` (
|
|
73
81
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
74
82
|
`note_id` integer NOT NULL,
|
|
75
83
|
`text` text NOT NULL,
|
|
@@ -82,7 +90,7 @@ CREATE TABLE IF NOT EXISTS `memory_fact` (
|
|
|
82
90
|
CONSTRAINT `fk_memory_fact_call_id_call_id_fk` FOREIGN KEY (`call_id`) REFERENCES `call`(`id`) ON DELETE SET NULL
|
|
83
91
|
);
|
|
84
92
|
--> statement-breakpoint
|
|
85
|
-
CREATE TABLE
|
|
93
|
+
CREATE TABLE `memory_note` (
|
|
86
94
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
87
95
|
`path` text NOT NULL UNIQUE,
|
|
88
96
|
`description` text NOT NULL,
|
|
@@ -94,27 +102,56 @@ CREATE TABLE IF NOT EXISTS `memory_note` (
|
|
|
94
102
|
`updated_at` integer NOT NULL
|
|
95
103
|
);
|
|
96
104
|
--> statement-breakpoint
|
|
97
|
-
CREATE TABLE
|
|
105
|
+
CREATE TABLE `thread_delivery` (
|
|
106
|
+
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
107
|
+
`key` text NOT NULL UNIQUE,
|
|
108
|
+
`thread_id` text NOT NULL,
|
|
109
|
+
`work_id` text NOT NULL,
|
|
110
|
+
`speaker` text NOT NULL,
|
|
111
|
+
`text` text NOT NULL,
|
|
112
|
+
`visible` integer DEFAULT false NOT NULL,
|
|
113
|
+
`consumed` integer DEFAULT false NOT NULL,
|
|
114
|
+
CONSTRAINT `fk_thread_delivery_thread_id_thread_id_fk` FOREIGN KEY (`thread_id`) REFERENCES `thread`(`id`) ON DELETE CASCADE,
|
|
115
|
+
CONSTRAINT `fk_thread_delivery_work_id_thread_work_id_fk` FOREIGN KEY (`work_id`) REFERENCES `thread_work`(`id`) ON DELETE CASCADE
|
|
116
|
+
);
|
|
117
|
+
--> statement-breakpoint
|
|
118
|
+
CREATE TABLE `thread_message` (
|
|
98
119
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
99
|
-
`
|
|
120
|
+
`thread_id` text NOT NULL,
|
|
100
121
|
`seq` integer NOT NULL,
|
|
101
122
|
`bot` text,
|
|
102
123
|
`parent` text,
|
|
124
|
+
`hidden` integer DEFAULT false NOT NULL,
|
|
103
125
|
`role` text NOT NULL,
|
|
104
126
|
`content` text NOT NULL,
|
|
105
127
|
`compact` integer DEFAULT false NOT NULL,
|
|
106
128
|
`note` integer DEFAULT false NOT NULL,
|
|
107
129
|
`created_at` integer NOT NULL,
|
|
108
|
-
CONSTRAINT `
|
|
109
|
-
CONSTRAINT `
|
|
130
|
+
CONSTRAINT `fk_thread_message_thread_id_thread_id_fk` FOREIGN KEY (`thread_id`) REFERENCES `thread`(`id`) ON DELETE CASCADE,
|
|
131
|
+
CONSTRAINT `uq_thread_message_seq` UNIQUE(`thread_id`,`seq`)
|
|
132
|
+
);
|
|
133
|
+
--> statement-breakpoint
|
|
134
|
+
CREATE TABLE `thread_relay` (
|
|
135
|
+
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
136
|
+
`key` text NOT NULL UNIQUE,
|
|
137
|
+
`thread_id` text NOT NULL,
|
|
138
|
+
`bot` text NOT NULL,
|
|
139
|
+
`text` text NOT NULL,
|
|
140
|
+
`kind` text NOT NULL,
|
|
141
|
+
`message_id` text,
|
|
142
|
+
`accepted` integer DEFAULT false NOT NULL,
|
|
143
|
+
CONSTRAINT `fk_thread_relay_thread_id_thread_id_fk` FOREIGN KEY (`thread_id`) REFERENCES `thread`(`id`) ON DELETE CASCADE
|
|
110
144
|
);
|
|
111
145
|
--> statement-breakpoint
|
|
112
|
-
CREATE TABLE
|
|
146
|
+
CREATE TABLE `thread` (
|
|
113
147
|
`id` text PRIMARY KEY,
|
|
114
148
|
`bot` text NOT NULL,
|
|
115
149
|
`label` text NOT NULL,
|
|
116
150
|
`request` text NOT NULL,
|
|
117
151
|
`status` text NOT NULL,
|
|
152
|
+
`generation` integer DEFAULT 0 NOT NULL,
|
|
153
|
+
`turns` integer DEFAULT 0 NOT NULL,
|
|
154
|
+
`wrapped` integer DEFAULT false NOT NULL,
|
|
118
155
|
`outcome` text,
|
|
119
156
|
`pending` text,
|
|
120
157
|
`seen` integer DEFAULT false NOT NULL,
|
|
@@ -128,7 +165,26 @@ CREATE TABLE IF NOT EXISTS `task` (
|
|
|
128
165
|
`ended_at` integer
|
|
129
166
|
);
|
|
130
167
|
--> statement-breakpoint
|
|
131
|
-
CREATE
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
168
|
+
CREATE TABLE `thread_work` (
|
|
169
|
+
`id` text PRIMARY KEY,
|
|
170
|
+
`thread_id` text NOT NULL,
|
|
171
|
+
`bot` text NOT NULL,
|
|
172
|
+
`caller` text NOT NULL,
|
|
173
|
+
`parent_id` text,
|
|
174
|
+
`state` text NOT NULL,
|
|
175
|
+
`generation` integer DEFAULT 0 NOT NULL,
|
|
176
|
+
`context_budget` integer DEFAULT 0 NOT NULL,
|
|
177
|
+
`result` text,
|
|
178
|
+
`options` text DEFAULT '[]' NOT NULL,
|
|
179
|
+
`created_at` integer NOT NULL,
|
|
180
|
+
CONSTRAINT `fk_thread_work_thread_id_thread_id_fk` FOREIGN KEY (`thread_id`) REFERENCES `thread`(`id`) ON DELETE CASCADE
|
|
181
|
+
);
|
|
182
|
+
--> statement-breakpoint
|
|
183
|
+
CREATE INDEX `idx_call_message_call` ON `call_message` (`call_id`,`seq`);--> statement-breakpoint
|
|
184
|
+
CREATE INDEX `idx_memory_fact_note` ON `memory_fact` (`note_id`,`is_latest`);--> statement-breakpoint
|
|
185
|
+
CREATE INDEX `idx_memory_fact_always` ON `memory_fact` (`always_load`,`is_latest`);--> statement-breakpoint
|
|
186
|
+
CREATE INDEX `idx_memory_fact_call` ON `memory_fact` (`call_id`);--> statement-breakpoint
|
|
187
|
+
CREATE INDEX `idx_thread_delivery_inbox` ON `thread_delivery` (`work_id`,`consumed`,`id`);--> statement-breakpoint
|
|
188
|
+
CREATE INDEX `idx_thread_work_queue` ON `thread_work` (`thread_id`,`state`,`created_at`);--> statement-breakpoint
|
|
189
|
+
CREATE INDEX `idx_thread_work_parent` ON `thread_work` (`parent_id`);--> statement-breakpoint
|
|
190
|
+
CREATE UNIQUE INDEX `uq_thread_work_running_bot` ON `thread_work` (`thread_id`,`bot`) WHERE "thread_work"."state" = 'running';
|