thursday-agent 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +5 -2
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +5 -5
- package/.next/routes-manifest.json +24 -6
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +2 -2
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +14 -14
- package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/artifact/route.js +3 -3
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/memory/files/route.js +10 -0
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/memory/files/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/memory/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/memory/route.js +14 -0
- package/.next/server/app/api/bot/{notes → memory}/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/route.js +6 -6
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/task/[id]/route.js +8 -8
- package/.next/server/app/api/bot/task/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/task/route.js +8 -8
- package/.next/server/app/api/bot/task/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js +5 -5
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/events/route.js +4 -5
- package/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/server/app/api/file/[...path]/route.js +3 -3
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/route.js +9 -8
- package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/credits/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/credits/route/build-manifest.json +12 -0
- package/.next/server/app/api/llm-model/credits/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/llm-model/credits/route.js +16 -0
- package/.next/server/app/api/llm-model/credits/route.js.map +5 -0
- package/.next/server/app/api/llm-model/credits/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/credits/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/llm-model/route.js +10 -8
- package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/subscription/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/subscription/route/build-manifest.json +12 -0
- package/.next/server/app/api/llm-model/subscription/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/llm-model/subscription/route.js +15 -0
- package/.next/server/app/api/llm-model/subscription/route.js.map +5 -0
- package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/subscription/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/mcp/[name]/route.js +4 -4
- package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth/callback/route.js +5 -5
- package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +4 -4
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/tools/route.js +4 -4
- package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/edit/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/edit/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/edit/route.js +24 -0
- package/.next/server/app/api/memory/edit/route.js.map +5 -0
- package/.next/server/app/api/memory/edit/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/{tidy → edit}/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/memory/route.js +6 -7
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js +3 -3
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +3 -3
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js +9 -7
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/skills/route.js +9 -7
- package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +17 -15
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/route.js +4 -5
- package/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
- package/.next/server/app/artifact/[...path]/page.js +5 -6
- package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/favicon.ico/route.js +3 -4
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/page/server-reference-manifest.json +57 -90
- package/.next/server/app/page.js +10 -10
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +5 -2
- package/.next/server/chunks/[externals]__0dzuk6_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01dkp4a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02va5wz._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__02xjoto._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04q--0f._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0bl-e63._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ce8nf8._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0ffbg85._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0j7z0r3._.js +12 -0
- package/.next/server/chunks/[root-of-the-server]__0jq4ohy._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0ls6_8y._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0pa2n68._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0q0vvt2._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1-ga0kh._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__11n256_._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__12cabg9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1339jnv._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__15bjnu5._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__18_teo8._.js +8 -0
- package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1anc1p9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1ccon1w._.js +5 -5
- package/.next/server/chunks/[root-of-the-server]__1fizn31._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1llj3-b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1orn-5b._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__1p8m3f4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wa1k7r._.js +8 -0
- package/.next/server/chunks/_0-73of8._.js +5 -5
- package/.next/server/chunks/_0-fjql4._.js +26 -0
- package/.next/server/chunks/_00xh_q0._.js +27 -0
- package/.next/server/chunks/{_0pppbb5._.js → _03kp0jp._.js} +163 -36
- package/.next/server/chunks/_051qh8u._.js +3 -0
- package/.next/server/chunks/{node_modules_next_04q-o58._.js → _05dla15._.js} +2 -2
- package/.next/server/chunks/_05h2cii._.js +1 -1
- package/.next/server/chunks/_0c9j6rb._.js +49 -0
- package/.next/server/chunks/_0fzqt2y._.js +130 -0
- package/.next/server/chunks/{_0vnutv9._.js → _0ioz3nd._.js} +1 -1
- package/.next/server/chunks/_0iwfby5._.js +3 -0
- package/.next/server/chunks/_0mecv0f._.js +26 -0
- package/.next/server/chunks/_0mh8j4m._.js +3 -0
- package/.next/server/chunks/_0n74zsf._.js +4 -4
- package/.next/server/chunks/_0obojvv._.js +3 -0
- package/.next/server/chunks/_0recufk._.js +49 -0
- package/.next/server/chunks/_0rnf-6n._.js +4 -4
- package/.next/server/chunks/_0sb7tlz._.js +3 -0
- package/.next/server/chunks/_0u10wmw._.js +5 -5
- package/.next/server/chunks/_0u4aiy2._.js +3 -0
- package/.next/server/chunks/_0wp4le3._.js +1 -1
- package/.next/server/chunks/_0y5fg-x._.js +1 -1
- package/.next/server/chunks/_1230wbx._.js +10 -0
- package/.next/server/chunks/_12nheja._.js +3 -0
- package/.next/server/chunks/_13510xh._.js +3 -0
- package/.next/server/chunks/_15hq89o._.js +1 -1
- package/.next/server/chunks/_17l5ygt._.js +49 -0
- package/.next/server/chunks/_18-1wcc._.js +5 -5
- package/.next/server/chunks/_1_5mnq4._.js +4 -4
- package/.next/server/chunks/_1_9mjx-._.js +3 -0
- package/.next/server/chunks/_1d0j961._.js +6 -0
- package/.next/server/chunks/_1d5zmy8._.js +1 -1
- package/.next/server/chunks/_1drgfx4._.js +4 -4
- package/.next/server/chunks/_1f46eie._.js +3 -0
- package/.next/server/chunks/_1h5_8sk._.js +3 -0
- package/.next/server/chunks/_1hdnxb7._.js +3 -0
- package/.next/server/chunks/_1j8k_j5._.js +3 -0
- package/.next/server/chunks/_1krd9rf._.js +3 -0
- package/.next/server/chunks/_1nc0eui._.js +11 -0
- package/.next/server/chunks/_1nula3v._.js +3 -0
- package/.next/server/chunks/_1pf4qe-._.js +3 -0
- package/.next/server/chunks/_1php4eq._.js +1 -1
- package/.next/server/chunks/_1qxheoa._.js +3 -0
- package/.next/server/chunks/_1x6kd1r._.js +3 -0
- package/.next/server/chunks/_1yuv4vp._.js +1 -1
- package/.next/server/chunks/_1zjrdag._.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_memory_files_route_actions_1_xd_8f.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_bot_memory_route_actions_1a8xfr7.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_credits_route_actions_0v424pb.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_subscription_route_actions_0-udcm5.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_edit_route_actions_02sfnmr.js +3 -0
- package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
- package/.next/server/chunks/features_0rpfxbk._.js +3 -0
- package/.next/server/chunks/features_1qf3cei._.js +3 -0
- package/.next/server/chunks/features_bot_0zt92oh._.js +3 -0
- package/.next/server/chunks/features_bot_bot_query_ts_12mgkl2._.js +3 -0
- package/.next/server/chunks/features_memory_1uqvksn._.js +6 -0
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0a1rd09._.js → node_modules_consola_dist_chunks_prompt_mjs_0i7cvml._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_06067w6._.js → node_modules_consola_dist_chunks_prompt_mjs_0icqaqw._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_096ais_._.js → node_modules_consola_dist_chunks_prompt_mjs_0r28-sm._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_02s3hjt._.js → node_modules_consola_dist_chunks_prompt_mjs_0v_7drq._.js} +1 -1
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1xoq2rl._.js +3 -0
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0tvkfgh._.js → node_modules_consola_dist_chunks_prompt_mjs_1y49572._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__09q9med._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__1qfqvmg._.js → [root-of-the-server]__0_69wqr._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0i8ie7f._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0jsmmb-._.js → [root-of-the-server]__0mz33a7._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tbkdlx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0vnmv-s._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0f6s48x._.js → [root-of-the-server]__0xpcv9w._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xtssj3._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0zkv7z_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +57 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__15_uhip._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__16jc196._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__0m1b5ky._.js → [root-of-the-server]__1cyjywu._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1eh7hid._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1gtlw6v._.js +43 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1mzi-ju._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1ox7hbk._.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1pduf5n._.js +3 -0
- package/.next/server/chunks/ssr/{_1mznrxk._.js → _001_ms1._.js} +3 -3
- package/.next/server/chunks/ssr/_01_6m32._.js +3 -0
- package/.next/server/chunks/ssr/_01n3o0m._.js +3 -0
- package/.next/server/chunks/ssr/_07uchnc._.js +3 -0
- package/.next/server/chunks/ssr/_0ap2fzn._.js +3 -0
- package/.next/server/chunks/ssr/_0c-ql2m._.js +3 -0
- package/.next/server/chunks/ssr/_0h42fze._.js +3 -0
- package/.next/server/chunks/ssr/_0h7zdni._.js +1 -1
- package/.next/server/chunks/ssr/_0i_6q1w._.js +41 -0
- package/.next/server/chunks/ssr/_0kbkmar._.js +3 -0
- package/.next/server/chunks/ssr/{_077-g6s._.js → _0mb8zc8._.js} +3 -3
- package/.next/server/chunks/ssr/_0mo2w06._.js +3 -0
- package/.next/server/chunks/ssr/{_13punpm._.js → _0q0zan6._.js} +2 -2
- package/.next/server/chunks/ssr/{_040sk32._.js → _0u2jv_x._.js} +76 -82
- package/.next/server/chunks/ssr/_0y0tiht._.js +4 -0
- package/.next/server/chunks/ssr/_0zhoc3r._.js +3 -0
- package/.next/server/chunks/ssr/_1-teee5._.js +3 -3
- package/.next/server/chunks/ssr/_13fke0x._.js +3 -0
- package/.next/server/chunks/ssr/{_1lip4th._.js → _13z3f85._.js} +2 -2
- package/.next/server/chunks/ssr/_14_lw10._.js +3 -0
- package/.next/server/chunks/ssr/_15j2_8f._.js +3 -0
- package/.next/server/chunks/ssr/{_09ja_w1._.js → _1eoqg_g._.js} +2 -2
- package/.next/server/chunks/ssr/_1sji22n._.js +3 -0
- package/.next/server/chunks/ssr/_1spzm8z._.js +3 -0
- package/.next/server/chunks/ssr/{_0x_nu5e._.js → _1vi_uo7._.js} +2 -2
- package/.next/server/chunks/ssr/_1vyd1ji._.js +1 -1
- package/.next/server/chunks/ssr/{_1m3bsfr._.js → _1xvgn77._.js} +2 -2
- package/.next/server/chunks/ssr/_20kd_n0._.js +42 -0
- package/.next/server/chunks/ssr/features_bot_1s_-2vj._.js +3 -0
- package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
- package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
- package/.next/server/chunks/ssr/lib_date-like_ts_02is0pw._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_18_dk7_._.js → node_modules_063xwpp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_01qnv-a._.js → node_modules_0bvraul._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0n1kj4p._.js → node_modules_0eu1va6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0kl7-tn._.js → node_modules_0h50b8n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0_n241r._.js → node_modules_0h5hnr1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0lrjk5t._.js → node_modules_0h7u60n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ndvxub._.js → node_modules_0lm7_vm._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13r44jq._.js → node_modules_0mwym0g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_17lrt3y._.js → node_modules_0rjg6t1._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_0x3-ply._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_004qlr4._.js → node_modules_0y_cded._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0kxz4gt._.js → node_modules_0z5tsu8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0iz1rzd._.js → node_modules_0zp9r92._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_19dp7ko._.js → node_modules_1-hc6uv._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1q0p85z._.js → node_modules_113tz0l._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1toafc-._.js → node_modules_124bue5._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_17bwo43._.js +55 -0
- package/.next/server/chunks/ssr/{node_modules_08d8bke._.js → node_modules_1_n3ztw._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1dwguw_._.js → node_modules_1bc7gu8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_20yebtj._.js → node_modules_1bgb6-f._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1n5ygqe._.js → node_modules_1h4a4pp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_04n7mjs._.js → node_modules_1i7u1ia._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1hn8z1f._.js → node_modules_1juq3hs._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xyd7ov._.js → node_modules_1l0qtdu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m93zeg._.js → node_modules_1t9cyee._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_09xhur7._.js → node_modules_1uuj9x1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1hd-5tv._.js → node_modules_1vqb6po._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zu988w._.js → node_modules_1xx28h1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0m9a4y0._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0d3skpl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_13w_wy9._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0i44kk5._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_@vercel_oidc_dist_0qe30a_._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_0w6mzq5._.js → node_modules_next_dist_0drixxt._.js} +4 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_1n3w9lb._.js +2 -2
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +58 -91
- package/.next/static/chunks/{31ttnjt6g35a0.js → 0ev4hyghq0mbb.js} +1 -1
- package/.next/static/chunks/0r5qcctujhxli.js +1 -0
- package/.next/static/chunks/0tmgrnlje14-s.js +3 -0
- package/.next/static/chunks/0x79tx04dxbpp.js +1 -0
- package/.next/static/chunks/0xzgvc0fkdb6t.js +1 -0
- package/.next/static/chunks/10teww7wt-f6h.js +1 -0
- package/.next/static/chunks/14hgtsjg-kael.css +1 -0
- package/.next/static/chunks/17donp69y4do7.js +40 -0
- package/.next/static/chunks/{3_h9txt3tq8t8.js → 1dkjg87pxk0n9.js} +1 -1
- package/.next/static/chunks/1ekc7ul556kbl.js +1 -0
- package/.next/static/chunks/{3ard_noqapnw1.js → 1grhjo7a5a0_-.js} +1 -1
- package/.next/static/chunks/1kq8h8wi_e0bc.js +53 -0
- package/.next/static/chunks/1okqiww3pnwka.js +1 -0
- package/.next/static/chunks/26-pr2c9ro222.js +1 -0
- package/.next/static/chunks/{18vhba44l1fc9.js → 280t0_e99i276.js} +1 -1
- package/.next/static/chunks/28cizcdaabd4h.js +1 -0
- package/.next/static/chunks/2a0k6jlq0_v1u.js +2 -0
- package/.next/static/chunks/2fzs9fm8yarvq.js +1 -0
- package/.next/static/chunks/2h0sd2vumhb15.js +1 -0
- package/.next/static/chunks/2hw2f6zmt7fmt.js +1 -0
- package/.next/static/chunks/2t4vhi3m8ahya.js +1 -0
- package/.next/static/chunks/2tigdtz3dpcy8.js +1 -0
- package/.next/static/chunks/3111pj5wnjgos.js +1 -0
- package/.next/static/chunks/{07kl352c-lvcz.js → 3agpgkwaa321p.js} +1 -1
- package/.next/static/chunks/3cfi_q6d_wtci.js +1 -0
- package/.next/static/chunks/3ok9_x74rip3v.js +1 -0
- package/.next/static/chunks/3xk7yqgomx7yq.js +1 -0
- package/.next/static/chunks/3xpbkl66ssib5.js +38 -0
- package/.next/static/media/favicon.37o1pjldwi2uc.ico +0 -0
- package/README.md +6 -4
- package/app/api/bot/memory/files/route.ts +14 -0
- package/app/api/bot/memory/route.ts +5 -0
- package/app/api/events/app-event.ts +3 -5
- package/app/api/llm-model/credits/route.ts +11 -0
- package/app/api/llm-model/route.ts +6 -1
- package/app/api/llm-model/subscription/route.ts +11 -0
- package/app/api/memory/edit/route.ts +7 -0
- package/app/api/memory/route.ts +21 -0
- package/app/api/query-key.ts +19 -4
- package/bin/thursday.mjs +3 -0
- package/components/ui/shiny-text.tsx +48 -134
- package/database/migrations/{20260909060813_optimal_sabretooth → 20260910173049_numerous_spirit}/migration.sql +24 -34
- package/database/migrations/{20260909060813_optimal_sabretooth → 20260910173049_numerous_spirit}/snapshot.json +71 -145
- package/database/migrations/20260911030320_opposite_jack_power/migration.sql +1 -0
- package/database/migrations/{20260909063821_bitter_tenebrous → 20260911030320_opposite_jack_power}/snapshot.json +57 -184
- package/features/ai/chatgpt.ts +617 -0
- package/features/ai/components/chatgpt-sign-in.tsx +66 -0
- package/features/ai/components/model-picker.tsx +17 -1
- package/features/ai/components/provider-icon.tsx +1 -0
- package/features/ai/load-tools.ts +58 -42
- package/features/ai/model.schema.ts +232 -34
- package/features/ai/model.ts +169 -24
- package/features/ai/prompts/bot.prompt.ts +156 -65
- package/features/ai/prompts/memory-edit.prompt.ts +33 -0
- package/features/ai/prompts/prompt-helper.ts +45 -26
- package/features/ai/prompts/thursday.prompt.ts +40 -17
- package/features/ai/tools/bot.tool.ts +35 -52
- package/features/ai/tools/connected.ts +17 -4
- package/features/ai/tools/memory.tool.ts +133 -72
- package/features/ai/tools/search.tool.ts +136 -47
- package/features/ai/tools/tool-name.ts +2 -5
- package/features/ai/tools/workspace.tool.ts +2 -1
- package/features/bot/bot.action.ts +8 -18
- package/features/bot/bot.memory.ts +89 -0
- package/features/bot/bot.query.ts +37 -57
- package/features/bot/bot.run.ts +507 -241
- package/features/bot/bot.runner.ts +410 -114
- package/features/bot/bot.schema.ts +79 -19
- package/features/bot/bot.seed.ts +89 -16
- package/features/bot/components/bot-mark.tsx +122 -20
- package/features/bot/components/bot-room.tsx +159 -130
- package/features/bot/components/bot-setting.tsx +790 -402
- package/features/bot/components/bot-tool.tsx +2 -6
- package/features/bot/components/mark-palette.tsx +54 -0
- package/features/bot/components/path-chips.tsx +1 -1
- package/features/bot/components/task-badge.tsx +26 -6
- package/features/bot/components/task-reply.tsx +22 -33
- package/features/bot/components/task-setting.tsx +20 -17
- package/features/bot/task.query.ts +215 -28
- package/features/bot/task.store.ts +53 -9
- package/features/config/components/config-setting.tsx +265 -34
- package/features/config/components/models-badge.tsx +42 -0
- package/features/config/config.action.ts +12 -0
- package/features/config/config.const.ts +38 -2
- package/features/connectors/mcp.manager.ts +10 -2
- package/features/intro/components/intro.tsx +47 -46
- package/features/memory/components/memory-edit.tsx +338 -0
- package/features/memory/components/memory-setting.tsx +75 -77
- package/features/memory/memory.action.ts +3 -43
- package/features/memory/memory.edit.ts +87 -0
- package/features/memory/memory.query.ts +24 -42
- package/features/memory/memory.schema.ts +29 -106
- package/features/settings/components/settings.tsx +2 -0
- package/features/settings/settings.alert.ts +3 -1
- package/features/thursday/components/ascii-orb.tsx +106 -90
- package/features/thursday/components/boot.tsx +7 -0
- package/features/thursday/components/call-log.tsx +219 -92
- package/features/thursday/components/face.tsx +6 -4
- package/features/thursday/components/tab-state.tsx +97 -0
- package/features/thursday/components/thursday-mark.tsx +4 -1
- package/features/thursday/components/thursday-setting.tsx +17 -47
- package/features/thursday/components/thursday.tsx +208 -95
- package/features/thursday/thursday.action.ts +12 -17
- package/features/thursday/thursday.query.ts +61 -70
- package/features/thursday/thursday.schema.ts +20 -7
- package/features/thursday/tool-line.ts +85 -11
- package/features/thursday/use-thursday.ts +86 -59
- package/features/workspace/components/file-view.tsx +4 -2
- package/features/workspace/workspace.ts +110 -26
- package/lib/limits.ts +1 -1
- package/lib/oauth-page.ts +27 -0
- package/lib/realtime/openai.ts +2 -2
- package/lib/realtime/realtime.protocol.ts +1 -1
- package/lib/realtime/realtime.tap.ts +122 -0
- package/lib/sandbox.ts +59 -36
- package/package.json +1 -1
- package/skills/browser/SKILL.md +55 -34
- package/.next/server/app/api/bot/notes/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/bot/notes/route.js +0 -14
- package/.next/server/app/api/bot/notes/route_client-reference-manifest.js +0 -3
- package/.next/server/app/api/memory/tidy/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/memory/tidy/route.js +0 -22
- package/.next/server/app/api/memory/tidy/route.js.nft.json +0 -1
- package/.next/server/chunks/0d-b_next_dist_server_app-render_after-task-async-storage_external_0-exn7p.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0-npkh_._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__005var5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__019dx9f._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__02_2sm-._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__04_8spk._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__05luceg._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__06t77t4._.js +0 -11
- package/.next/server/chunks/[root-of-the-server]__0bed6hu._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0cro2dz._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0dupqt7._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0emr6go._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0le4d-p._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0m8ywyo._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__0nfuugi._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0p32jfz._.js +0 -12
- package/.next/server/chunks/[root-of-the-server]__0phdgco._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__0wvgrsl._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__10qshki._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__11j52t0._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1692zrv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__16thabu._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__173nhwf._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1_aoyr9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1bn73ih._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__1bqhuh9._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1cqizfq._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1e-ci13._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1fboj2j._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1lr7j9t._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1oli73c._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1txedx6._.js +0 -8
- package/.next/server/chunks/[root-of-the-server]__1untqv8._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1zgpz1w._.js +0 -3
- package/.next/server/chunks/_00_584r._.js +0 -293
- package/.next/server/chunks/_012yhfm._.js +0 -39
- package/.next/server/chunks/_06mxlgn._.js +0 -3
- package/.next/server/chunks/_07rtlxv._.js +0 -3
- package/.next/server/chunks/_0a351g7._.js +0 -6
- package/.next/server/chunks/_0kjjmag._.js +0 -3
- package/.next/server/chunks/_0nn99o2._.js +0 -3
- package/.next/server/chunks/_0zuzmt_._.js +0 -39
- package/.next/server/chunks/_106co2o._.js +0 -3
- package/.next/server/chunks/_12bbv5i._.js +0 -100
- package/.next/server/chunks/_15q1pig._.js +0 -3
- package/.next/server/chunks/_19wg5yn._.js +0 -138
- package/.next/server/chunks/_1bt95p9._.js +0 -55
- package/.next/server/chunks/_1cbk7ms._.js +0 -26
- package/.next/server/chunks/_1drv2et._.js +0 -40
- package/.next/server/chunks/_1ic3bew._.js +0 -5
- package/.next/server/chunks/_1mxn_lb._.js +0 -3
- package/.next/server/chunks/_1rysr-r._.js +0 -10
- package/.next/server/chunks/_1u3rwbr._.js +0 -3
- package/.next/server/chunks/_1x7p319._.js +0 -6
- package/.next/server/chunks/_next-internal_server_app_api_bot_notes_route_actions_0qcsyu7.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_memory_tidy_route_actions_0_cfuom.js +0 -3
- package/.next/server/chunks/features_bot_task_query_ts_11xuzl3._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0gzvgfv._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0vorg6w._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1tpvamf._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1vmaq9f._.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1y9-wcr._.js +0 -3
- package/.next/server/chunks/ssr/[externals]_node_crypto_1kn79-7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0iuoa-r._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0un-erv._.js +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__1-mnhyd._.js +0 -92
- package/.next/server/chunks/ssr/[root-of-the-server]__1bww500._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1vcdast._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1xwnu-h._.js +0 -3
- package/.next/server/chunks/ssr/_0-mc7ro._.js +0 -3
- package/.next/server/chunks/ssr/_01p5r6-._.js +0 -3
- package/.next/server/chunks/ssr/_03webdr._.js +0 -3
- package/.next/server/chunks/ssr/_09-0k3z._.js +0 -3
- package/.next/server/chunks/ssr/_0f_b_9s._.js +0 -3
- package/.next/server/chunks/ssr/_0fafgvl._.js +0 -3
- package/.next/server/chunks/ssr/_0sf1isi._.js +0 -3
- package/.next/server/chunks/ssr/_0su6_08._.js +0 -3
- package/.next/server/chunks/ssr/_0ti51xc._.js +0 -3
- package/.next/server/chunks/ssr/_0w5bgak._.js +0 -3
- package/.next/server/chunks/ssr/_0y84qo6._.js +0 -3
- package/.next/server/chunks/ssr/_1ciyoo3._.js +0 -3
- package/.next/server/chunks/ssr/_1e-dgz0._.js +0 -4
- package/.next/server/chunks/ssr/_1fq7zgb._.js +0 -3
- package/.next/server/chunks/ssr/_1g6l4uj._.js +0 -3
- package/.next/server/chunks/ssr/_1ruzehw._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_components_bot-setting_tsx_01ajft6._.js +0 -4
- package/.next/server/chunks/ssr/features_config_components_14jqgy4._.js +0 -3
- package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +0 -4
- package/.next/server/chunks/ssr/node_modules_zod_v4_classic_external_15fmmz3.js +0 -55
- package/.next/static/chunks/05b6nx_o3_f_n.js +0 -1
- package/.next/static/chunks/0dmns-gi0raa4.js +0 -1
- package/.next/static/chunks/0f9sq-7q_yxyl.js +0 -1
- package/.next/static/chunks/0oc4_xoia77dg.css +0 -1
- package/.next/static/chunks/0pheo8m3a-rzi.js +0 -1
- package/.next/static/chunks/19i8h2t-5evjx.js +0 -1
- package/.next/static/chunks/1c5fcj473025q.js +0 -1
- package/.next/static/chunks/1pi_hbmjw-f-z.js +0 -1
- package/.next/static/chunks/1twt6k09vg4np.js +0 -1
- package/.next/static/chunks/1ytnip8wdng93.js +0 -1
- package/.next/static/chunks/28gotuisldmom.js +0 -1
- package/.next/static/chunks/2998p0y7k1c8z.js +0 -3
- package/.next/static/chunks/29gyb3nubj51j.js +0 -53
- package/.next/static/chunks/2l233xfycjpd8.js +0 -1
- package/.next/static/chunks/2p5n7pa3c40t-.js +0 -2
- package/.next/static/chunks/2ru1q132af7h7.js +0 -1
- package/.next/static/chunks/2t8wqycwg3y04.js +0 -2
- package/.next/static/chunks/2uxum7qbyeyxd.js +0 -1
- package/.next/static/chunks/32z_ypgtchw48.js +0 -1
- package/.next/static/chunks/33pyjb3xd1iez.js +0 -1
- package/.next/static/chunks/3omud5xunrk1f.js +0 -1
- package/.next/static/chunks/42dnrkbph9e-1.js +0 -1
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- package/database/migrations/20260909063821_bitter_tenebrous/migration.sql +0 -1
- package/features/ai/prompts/memory-tidy.prompt.ts +0 -129
- package/features/ai/tools/tidy.tool.ts +0 -22
- package/features/bot/bot.notes.ts +0 -120
- package/features/memory/components/memory-tidy.tsx +0 -395
- package/features/memory/memory.tidy.ts +0 -332
- package/features/memory/tidy.query.ts +0 -135
- package/features/thursday/use-call-title.ts +0 -31
- /package/.next/server/app/api/bot/{notes → memory/files}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/bot/{notes → memory/files}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/bot/{notes → memory/files}/route.js.map +0 -0
- /package/.next/server/app/api/{memory/tidy → bot/memory}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/{memory/tidy → bot/memory}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/{memory/tidy → bot/memory}/route.js.map +0 -0
- /package/.next/static/{YR4NWcDDuzwLbTTU7U7Vr → x1cCqY0kWpR_VcYx_lWO5}/_buildManifest.js +0 -0
- /package/.next/static/{YR4NWcDDuzwLbTTU7U7Vr → x1cCqY0kWpR_VcYx_lWO5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{YR4NWcDDuzwLbTTU7U7Vr → x1cCqY0kWpR_VcYx_lWO5}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { readGatewayCredits } from "@/features/ai/model";
|
|
2
|
+
import type { GatewayCredits } from "@/features/ai/model.schema";
|
|
3
|
+
import { serverRoute } from "@/lib/protocol/server-route";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* What is left on the gateway key, null when none is set. Read by the gateway's
|
|
7
|
+
* row in Settings › Keys and its key dialog; the answer is built in ai/model.
|
|
8
|
+
*/
|
|
9
|
+
export const GET = serverRoute(
|
|
10
|
+
async (): Promise<GatewayCredits | null> => readGatewayCredits(),
|
|
11
|
+
);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readChatGptPlan } from "@/features/ai/chatgpt";
|
|
1
2
|
import {
|
|
2
3
|
type AiProvider,
|
|
3
4
|
TEXT_MODEL_PROVIDER_LIST,
|
|
@@ -5,7 +6,7 @@ import {
|
|
|
5
6
|
import { readConfig } from "@/features/config/config.query";
|
|
6
7
|
import { serverRoute } from "@/lib/protocol/server-route";
|
|
7
8
|
|
|
8
|
-
/** Callable providers
|
|
9
|
+
/** Callable providers, whether each one's key is set, and the plan a sign-in is on. */
|
|
9
10
|
export const GET = serverRoute(async () =>
|
|
10
11
|
Promise.all(
|
|
11
12
|
TEXT_MODEL_PROVIDER_LIST.map(
|
|
@@ -15,6 +16,10 @@ export const GET = serverRoute(async () =>
|
|
|
15
16
|
apiKeyName: item.apiKeyName,
|
|
16
17
|
suggestModels: item.suggestModels,
|
|
17
18
|
hasKey: Boolean(await readConfig(item.apiKeyName)),
|
|
19
|
+
...(item.signIn && {
|
|
20
|
+
signIn: true as const,
|
|
21
|
+
plan: await readChatGptPlan(),
|
|
22
|
+
}),
|
|
18
23
|
}),
|
|
19
24
|
),
|
|
20
25
|
),
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { readChatGptUsage } from "@/features/ai/chatgpt";
|
|
2
|
+
import type { SubscriptionUsage } from "@/features/ai/model.schema";
|
|
3
|
+
import { serverRoute } from "@/lib/protocol/server-route";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* How much of the GPT Subscription plan is used, null when nobody is signed in. Read by its
|
|
7
|
+
* row in Settings › Keys and its sign-in dialog; the answer is built in ai/chatgpt.
|
|
8
|
+
*/
|
|
9
|
+
export const GET = serverRoute(
|
|
10
|
+
async (): Promise<SubscriptionUsage | null> => readChatGptUsage(),
|
|
11
|
+
);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { streamMemoryEdit } from "@/features/memory/memory.edit";
|
|
2
|
+
import { serverRoute } from "@/lib/protocol/server-route";
|
|
3
|
+
|
|
4
|
+
/** An edit from the memory screen, streamed as it runs (memory.edit). */
|
|
5
|
+
export const POST = serverRoute(async (request) =>
|
|
6
|
+
streamMemoryEdit(await request.json(), request.signal),
|
|
7
|
+
);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { findAllNotes, findNoteByPath } from "@/features/memory/memory.query";
|
|
2
|
+
import { serverRoute } from "@/lib/protocol/server-route";
|
|
3
|
+
import { publicError } from "@/lib/public-error";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Read only; writes go through memory.action. One MemoryNote[] page, `?offset=`
|
|
7
|
+
* for the next. `?path=` returns one note: paths contain `/`, so not a segment.
|
|
8
|
+
*/
|
|
9
|
+
export const GET = serverRoute(async (request) => {
|
|
10
|
+
const params = new URL(request.url).searchParams;
|
|
11
|
+
|
|
12
|
+
const path = params.get("path");
|
|
13
|
+
if (path) {
|
|
14
|
+
const note = await findNoteByPath(path);
|
|
15
|
+
if (!note) publicError("Note not found");
|
|
16
|
+
return note;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const offset = Number(params.get("offset") ?? 0);
|
|
20
|
+
return findAllNotes({ offset: Number.isFinite(offset) ? offset : 0 });
|
|
21
|
+
});
|
package/app/api/query-key.ts
CHANGED
|
@@ -24,8 +24,6 @@ export const queryKey = {
|
|
|
24
24
|
/** One note with all facts, by path. Paths contain `/`, so it is a query, not a
|
|
25
25
|
* segment: pass the hook null instead of building this key when closed. */
|
|
26
26
|
notePath: (path: string) => ({ url: "/api/memory", query: { path } }),
|
|
27
|
-
/** MemoryTidyStatusView: settings, what is pending, the pass in progress and the last one. Under the memory prefix on purpose: a fact changing moves it too. */
|
|
28
|
-
memoryTidy: "/api/memory/tidy",
|
|
29
27
|
|
|
30
28
|
/** MCPServerSummary[] with tool counts, no tools */
|
|
31
29
|
mcp: "/api/mcp",
|
|
@@ -56,8 +54,13 @@ export const queryKey = {
|
|
|
56
54
|
*/
|
|
57
55
|
bot: "/api/bot",
|
|
58
56
|
|
|
59
|
-
/** boolean: whether bots keep their own
|
|
60
|
-
|
|
57
|
+
/** boolean: whether bots keep their own memory (Settings > Bots) */
|
|
58
|
+
botMemory: "/api/bot/memory",
|
|
59
|
+
/** BotMemory: one bot's own memory files, newest first (Settings > Bots) */
|
|
60
|
+
botMemoryFiles: (bot: string) => ({
|
|
61
|
+
url: "/api/bot/memory/files",
|
|
62
|
+
query: { bot },
|
|
63
|
+
}),
|
|
61
64
|
|
|
62
65
|
/**
|
|
63
66
|
* Inbox: Task[] newest first with threads, everything running or asking plus
|
|
@@ -136,9 +139,21 @@ export const queryKey = {
|
|
|
136
139
|
* {toolCallId, callId, name, input}; one JSON Result per call, abortable.
|
|
137
140
|
*/
|
|
138
141
|
toolCall: "/api/thursday/tool-call",
|
|
142
|
+
/** POST, an edit from the memory screen, streamed as it runs (memory.edit). */
|
|
143
|
+
memoryEdit: "/api/memory/edit",
|
|
139
144
|
|
|
140
145
|
/** Providers this app can call and whether each key is set */
|
|
141
146
|
llmModel: "/api/llm-model",
|
|
142
147
|
/** Models reachable with the AI Gateway key; gateway only */
|
|
143
148
|
modelCatalog: "/api/llm-model/catalog",
|
|
149
|
+
/**
|
|
150
|
+
* GatewayCredits | null: what is left on the gateway key, null without one.
|
|
151
|
+
* Under `llmModel`, so the key dialog's revalidate re-reads it after a save.
|
|
152
|
+
*/
|
|
153
|
+
gatewayCredits: "/api/llm-model/credits",
|
|
154
|
+
/**
|
|
155
|
+
* SubscriptionUsage | null: how much of the GPT Subscription plan is used, null when
|
|
156
|
+
* signed out. Under `llmModel`, so signing in or out re-reads it.
|
|
157
|
+
*/
|
|
158
|
+
subscriptionUsage: "/api/llm-model/subscription",
|
|
144
159
|
} as const;
|
package/bin/thursday.mjs
CHANGED
|
@@ -138,6 +138,9 @@ const child = spawn(process.execPath, [join(APP, "server.js")], {
|
|
|
138
138
|
// This machine only. A voice agent with a shell is not a thing to expose.
|
|
139
139
|
HOSTNAME: process.env.HOSTNAME || "127.0.0.1",
|
|
140
140
|
NODE_ENV: "production",
|
|
141
|
+
// The server parks running jobs on a stop before it exits (instrumentation);
|
|
142
|
+
// without this, Next exits on the signal first
|
|
143
|
+
NEXT_MANUAL_SIG_HANDLE: "true",
|
|
141
144
|
},
|
|
142
145
|
});
|
|
143
146
|
|
|
@@ -1,141 +1,55 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import { cn, WAITING_INK } from "@/lib/utils";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The resting ink and the band that crosses it. On a light page the band moves
|
|
6
|
+
* toward the ink: a lighter band on light ground reads as the words fading out.
|
|
7
|
+
*/
|
|
8
|
+
const TONES = {
|
|
9
|
+
muted: { rest: "text-muted-foreground", band: "via-foreground" },
|
|
10
|
+
waiting: { rest: WAITING_INK, band: "via-amber-950 dark:via-amber-100" },
|
|
11
|
+
} as const;
|
|
12
|
+
|
|
13
|
+
export type ShinyTone = keyof typeof TONES;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Words for something still moving. They are drawn once as plain text, so they
|
|
17
|
+
* cut short, wrap and select like any other; the sweep is a copy laid over them
|
|
18
|
+
* that carries only the band. A gradient clipped to the glyphs cannot draw the
|
|
19
|
+
* "…" a box truncates to, so the ellipsis belongs to the plain layer.
|
|
20
|
+
*
|
|
21
|
+
* Truncate on this component, not on a parent: it is an inline-block, and a
|
|
22
|
+
* parent cannot put an ellipsis inside one.
|
|
23
|
+
*/
|
|
24
|
+
export function ShinyText({
|
|
25
|
+
text,
|
|
26
|
+
tone = "muted",
|
|
27
|
+
speed = 2.4,
|
|
28
|
+
className,
|
|
29
|
+
}: {
|
|
10
30
|
text: string;
|
|
11
|
-
|
|
31
|
+
tone?: ShinyTone;
|
|
32
|
+
/** Seconds for the band to cross once. */
|
|
12
33
|
speed?: number;
|
|
13
34
|
className?: string;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
spread?: number;
|
|
17
|
-
yoyo?: boolean;
|
|
18
|
-
pauseOnHover?: boolean;
|
|
19
|
-
direction?: "left" | "right";
|
|
20
|
-
delay?: number;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const ShinyText: React.FC<ShinyTextProps> = ({
|
|
24
|
-
text,
|
|
25
|
-
disabled = false,
|
|
26
|
-
speed = 2,
|
|
27
|
-
className = "",
|
|
28
|
-
color = "#b5b5b5",
|
|
29
|
-
shineColor = "#ffffff",
|
|
30
|
-
spread = 120,
|
|
31
|
-
yoyo = false,
|
|
32
|
-
pauseOnHover = false,
|
|
33
|
-
direction = "left",
|
|
34
|
-
delay = 0,
|
|
35
|
-
}) => {
|
|
36
|
-
const [isPaused, setIsPaused] = useState(false);
|
|
37
|
-
const progress = useMotionValue(0);
|
|
38
|
-
const elapsedRef = useRef(0);
|
|
39
|
-
const lastTimeRef = useRef<number | null>(null);
|
|
40
|
-
const directionRef = useRef(direction === "left" ? 1 : -1);
|
|
41
|
-
|
|
42
|
-
const animationDuration = speed * 1000;
|
|
43
|
-
const delayDuration = delay * 1000;
|
|
44
|
-
|
|
45
|
-
useAnimationFrame((time) => {
|
|
46
|
-
if (disabled || isPaused) {
|
|
47
|
-
lastTimeRef.current = null;
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (lastTimeRef.current === null) {
|
|
52
|
-
lastTimeRef.current = time;
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const deltaTime = time - lastTimeRef.current;
|
|
57
|
-
lastTimeRef.current = time;
|
|
58
|
-
|
|
59
|
-
elapsedRef.current += deltaTime;
|
|
60
|
-
|
|
61
|
-
// Animation goes from 0 to 100
|
|
62
|
-
if (yoyo) {
|
|
63
|
-
const cycleDuration = animationDuration + delayDuration;
|
|
64
|
-
const fullCycle = cycleDuration * 2;
|
|
65
|
-
const cycleTime = elapsedRef.current % fullCycle;
|
|
66
|
-
|
|
67
|
-
if (cycleTime < animationDuration) {
|
|
68
|
-
// Forward animation: 0 -> 100
|
|
69
|
-
const p = (cycleTime / animationDuration) * 100;
|
|
70
|
-
progress.set(directionRef.current === 1 ? p : 100 - p);
|
|
71
|
-
} else if (cycleTime < cycleDuration) {
|
|
72
|
-
// Delay at end
|
|
73
|
-
progress.set(directionRef.current === 1 ? 100 : 0);
|
|
74
|
-
} else if (cycleTime < cycleDuration + animationDuration) {
|
|
75
|
-
// Reverse animation: 100 -> 0
|
|
76
|
-
const reverseTime = cycleTime - cycleDuration;
|
|
77
|
-
const p = 100 - (reverseTime / animationDuration) * 100;
|
|
78
|
-
progress.set(directionRef.current === 1 ? p : 100 - p);
|
|
79
|
-
} else {
|
|
80
|
-
// Delay at start
|
|
81
|
-
progress.set(directionRef.current === 1 ? 0 : 100);
|
|
82
|
-
}
|
|
83
|
-
} else {
|
|
84
|
-
const cycleDuration = animationDuration + delayDuration;
|
|
85
|
-
const cycleTime = elapsedRef.current % cycleDuration;
|
|
86
|
-
|
|
87
|
-
if (cycleTime < animationDuration) {
|
|
88
|
-
// Animation phase: 0 -> 100
|
|
89
|
-
const p = (cycleTime / animationDuration) * 100;
|
|
90
|
-
progress.set(directionRef.current === 1 ? p : 100 - p);
|
|
91
|
-
} else {
|
|
92
|
-
// Delay phase - hold at end (shine off-screen)
|
|
93
|
-
progress.set(directionRef.current === 1 ? 100 : 0);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
directionRef.current = direction === "left" ? 1 : -1;
|
|
100
|
-
elapsedRef.current = 0;
|
|
101
|
-
progress.set(0);
|
|
102
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
103
|
-
}, [direction]);
|
|
104
|
-
|
|
105
|
-
// Transform: p=0 -> 150% (shine off right), p=100 -> -50% (shine off left)
|
|
106
|
-
const backgroundPosition = useTransform(
|
|
107
|
-
progress,
|
|
108
|
-
(p) => `${150 - p * 2}% center`,
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
const handleMouseEnter = useCallback(() => {
|
|
112
|
-
if (pauseOnHover) setIsPaused(true);
|
|
113
|
-
}, [pauseOnHover]);
|
|
114
|
-
|
|
115
|
-
const handleMouseLeave = useCallback(() => {
|
|
116
|
-
if (pauseOnHover) setIsPaused(false);
|
|
117
|
-
}, [pauseOnHover]);
|
|
118
|
-
|
|
119
|
-
const gradientStyle: React.CSSProperties = {
|
|
120
|
-
backgroundImage: `linear-gradient(${spread}deg, ${color} 0%, ${color} 35%, ${shineColor} 50%, ${color} 65%, ${color} 100%)`,
|
|
121
|
-
backgroundSize: "200% auto",
|
|
122
|
-
WebkitBackgroundClip: "text",
|
|
123
|
-
backgroundClip: "text",
|
|
124
|
-
WebkitTextFillColor: "transparent",
|
|
125
|
-
};
|
|
126
|
-
|
|
35
|
+
}) {
|
|
36
|
+
const { rest, band } = TONES[tone];
|
|
127
37
|
return (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
className={`inline-block max-w-full ${className}`}
|
|
132
|
-
style={{ ...gradientStyle, backgroundPosition }}
|
|
133
|
-
onMouseEnter={handleMouseEnter}
|
|
134
|
-
onMouseLeave={handleMouseLeave}
|
|
38
|
+
<span
|
|
39
|
+
data-slot="shiny-text"
|
|
40
|
+
className={cn("relative inline-block max-w-full", rest, className)}
|
|
135
41
|
>
|
|
136
42
|
{text}
|
|
137
|
-
|
|
43
|
+
<span
|
|
44
|
+
aria-hidden
|
|
45
|
+
style={{ animationDuration: `${speed}s` } as CSSProperties}
|
|
46
|
+
className={cn(
|
|
47
|
+
"pointer-events-none absolute inset-0 animate-shine overflow-hidden bg-linear-120 from-transparent from-35% via-50% to-transparent to-65% bg-size-[200%_auto] bg-clip-text text-transparent p-[inherit] select-none [text-overflow:inherit] motion-reduce:hidden",
|
|
48
|
+
band,
|
|
49
|
+
)}
|
|
50
|
+
>
|
|
51
|
+
{text}
|
|
52
|
+
</span>
|
|
53
|
+
</span>
|
|
138
54
|
);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export default ShinyText;
|
|
55
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
CREATE TABLE `bot_mcp_tool` (
|
|
1
|
+
CREATE TABLE IF NOT EXISTS `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,23 +6,25 @@ CREATE TABLE `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 `bot_note` (
|
|
9
|
+
CREATE TABLE IF NOT EXISTS `bot_note` (
|
|
10
10
|
`bot` text PRIMARY KEY,
|
|
11
11
|
`text` text NOT NULL,
|
|
12
12
|
`updated_at` integer NOT NULL
|
|
13
13
|
);
|
|
14
14
|
--> statement-breakpoint
|
|
15
|
-
CREATE TABLE `bot` (
|
|
15
|
+
CREATE TABLE IF NOT EXISTS `bot` (
|
|
16
16
|
`name` text PRIMARY KEY,
|
|
17
17
|
`description` text NOT NULL,
|
|
18
18
|
`system_prompt` text,
|
|
19
19
|
`icon` text,
|
|
20
20
|
`provider` text,
|
|
21
21
|
`model` text,
|
|
22
|
+
`compact_at` integer,
|
|
23
|
+
`disabled` integer DEFAULT false NOT NULL,
|
|
22
24
|
`created_at` integer NOT NULL
|
|
23
25
|
);
|
|
24
26
|
--> statement-breakpoint
|
|
25
|
-
CREATE TABLE `call_message` (
|
|
27
|
+
CREATE TABLE IF NOT EXISTS `call_message` (
|
|
26
28
|
`call_id` text NOT NULL,
|
|
27
29
|
`id` text NOT NULL,
|
|
28
30
|
`seq` integer NOT NULL,
|
|
@@ -34,21 +36,20 @@ CREATE TABLE `call_message` (
|
|
|
34
36
|
CONSTRAINT `fk_call_message_call_id_call_id_fk` FOREIGN KEY (`call_id`) REFERENCES `call`(`id`) ON DELETE CASCADE
|
|
35
37
|
);
|
|
36
38
|
--> statement-breakpoint
|
|
37
|
-
CREATE TABLE `call` (
|
|
39
|
+
CREATE TABLE IF NOT EXISTS `call` (
|
|
38
40
|
`id` text PRIMARY KEY,
|
|
39
41
|
`provider` text NOT NULL,
|
|
40
42
|
`model` text NOT NULL,
|
|
41
43
|
`started_at` integer NOT NULL,
|
|
42
|
-
`ended_at` integer
|
|
43
|
-
`tidied_at` integer
|
|
44
|
+
`ended_at` integer
|
|
44
45
|
);
|
|
45
46
|
--> statement-breakpoint
|
|
46
|
-
CREATE TABLE `config` (
|
|
47
|
+
CREATE TABLE IF NOT EXISTS `config` (
|
|
47
48
|
`key` text PRIMARY KEY,
|
|
48
49
|
`value` text NOT NULL
|
|
49
50
|
);
|
|
50
51
|
--> statement-breakpoint
|
|
51
|
-
CREATE TABLE `mcp_server` (
|
|
52
|
+
CREATE TABLE IF NOT EXISTS `mcp_server` (
|
|
52
53
|
`name` text PRIMARY KEY,
|
|
53
54
|
`config` text NOT NULL,
|
|
54
55
|
`tools_synced_at` integer NOT NULL,
|
|
@@ -57,7 +58,7 @@ CREATE TABLE `mcp_server` (
|
|
|
57
58
|
`created_at` integer NOT NULL
|
|
58
59
|
);
|
|
59
60
|
--> statement-breakpoint
|
|
60
|
-
CREATE TABLE `mcp_tool` (
|
|
61
|
+
CREATE TABLE IF NOT EXISTS `mcp_tool` (
|
|
61
62
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
62
63
|
`server_name` text NOT NULL,
|
|
63
64
|
`name` text NOT NULL,
|
|
@@ -68,17 +69,20 @@ CREATE TABLE `mcp_tool` (
|
|
|
68
69
|
CONSTRAINT `uq_mcp_tool_server_name` UNIQUE(`server_name`,`name`)
|
|
69
70
|
);
|
|
70
71
|
--> statement-breakpoint
|
|
71
|
-
CREATE TABLE `memory_fact` (
|
|
72
|
+
CREATE TABLE IF NOT EXISTS `memory_fact` (
|
|
72
73
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
73
74
|
`note_id` integer NOT NULL,
|
|
74
75
|
`text` text NOT NULL,
|
|
75
76
|
`is_latest` integer DEFAULT true NOT NULL,
|
|
76
77
|
`always_load` integer DEFAULT false NOT NULL,
|
|
78
|
+
`source` text,
|
|
79
|
+
`call_id` text,
|
|
77
80
|
`created_at` integer NOT NULL,
|
|
78
|
-
CONSTRAINT `fk_memory_fact_note_id_memory_note_id_fk` FOREIGN KEY (`note_id`) REFERENCES `memory_note`(`id`) ON DELETE CASCADE
|
|
81
|
+
CONSTRAINT `fk_memory_fact_note_id_memory_note_id_fk` FOREIGN KEY (`note_id`) REFERENCES `memory_note`(`id`) ON DELETE CASCADE,
|
|
82
|
+
CONSTRAINT `fk_memory_fact_call_id_call_id_fk` FOREIGN KEY (`call_id`) REFERENCES `call`(`id`) ON DELETE SET NULL
|
|
79
83
|
);
|
|
80
84
|
--> statement-breakpoint
|
|
81
|
-
CREATE TABLE `memory_note` (
|
|
85
|
+
CREATE TABLE IF NOT EXISTS `memory_note` (
|
|
82
86
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
83
87
|
`path` text NOT NULL UNIQUE,
|
|
84
88
|
`description` text NOT NULL,
|
|
@@ -90,22 +94,7 @@ CREATE TABLE `memory_note` (
|
|
|
90
94
|
`updated_at` integer NOT NULL
|
|
91
95
|
);
|
|
92
96
|
--> statement-breakpoint
|
|
93
|
-
CREATE TABLE `
|
|
94
|
-
`id` text PRIMARY KEY,
|
|
95
|
-
`status` text NOT NULL,
|
|
96
|
-
`provider` text NOT NULL,
|
|
97
|
-
`model` text NOT NULL,
|
|
98
|
-
`call_ids` text NOT NULL,
|
|
99
|
-
`messages` integer DEFAULT 0 NOT NULL,
|
|
100
|
-
`changes` text DEFAULT '[]' NOT NULL,
|
|
101
|
-
`error` text,
|
|
102
|
-
`input_tokens` integer DEFAULT 0 NOT NULL,
|
|
103
|
-
`output_tokens` integer DEFAULT 0 NOT NULL,
|
|
104
|
-
`started_at` integer NOT NULL,
|
|
105
|
-
`ended_at` integer
|
|
106
|
-
);
|
|
107
|
-
--> statement-breakpoint
|
|
108
|
-
CREATE TABLE `task_message` (
|
|
97
|
+
CREATE TABLE IF NOT EXISTS `task_message` (
|
|
109
98
|
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
110
99
|
`task_id` text NOT NULL,
|
|
111
100
|
`seq` integer NOT NULL,
|
|
@@ -120,7 +109,7 @@ CREATE TABLE `task_message` (
|
|
|
120
109
|
CONSTRAINT `uq_task_message_seq` UNIQUE(`task_id`,`seq`)
|
|
121
110
|
);
|
|
122
111
|
--> statement-breakpoint
|
|
123
|
-
CREATE TABLE `task` (
|
|
112
|
+
CREATE TABLE IF NOT EXISTS `task` (
|
|
124
113
|
`id` text PRIMARY KEY,
|
|
125
114
|
`bot` text NOT NULL,
|
|
126
115
|
`label` text NOT NULL,
|
|
@@ -128,7 +117,7 @@ CREATE TABLE `task` (
|
|
|
128
117
|
`status` text NOT NULL,
|
|
129
118
|
`outcome` text,
|
|
130
119
|
`pending` text,
|
|
131
|
-
`
|
|
120
|
+
`seen` integer DEFAULT false NOT NULL,
|
|
132
121
|
`call_id` text,
|
|
133
122
|
`input_tokens` integer DEFAULT 0 NOT NULL,
|
|
134
123
|
`output_tokens` integer DEFAULT 0 NOT NULL,
|
|
@@ -139,6 +128,7 @@ CREATE TABLE `task` (
|
|
|
139
128
|
`ended_at` integer
|
|
140
129
|
);
|
|
141
130
|
--> statement-breakpoint
|
|
142
|
-
CREATE INDEX `idx_call_message_call` ON `call_message` (`call_id`,`seq`);--> statement-breakpoint
|
|
143
|
-
CREATE INDEX `idx_memory_fact_note` ON `memory_fact` (`note_id`,`is_latest`);--> statement-breakpoint
|
|
144
|
-
CREATE INDEX `idx_memory_fact_always` ON `memory_fact` (`always_load`,`is_latest`)
|
|
131
|
+
CREATE INDEX IF NOT EXISTS `idx_call_message_call` ON `call_message` (`call_id`,`seq`);--> statement-breakpoint
|
|
132
|
+
CREATE INDEX IF NOT EXISTS `idx_memory_fact_note` ON `memory_fact` (`note_id`,`is_latest`);--> statement-breakpoint
|
|
133
|
+
CREATE INDEX IF NOT EXISTS `idx_memory_fact_always` ON `memory_fact` (`always_load`,`is_latest`);--> statement-breakpoint
|
|
134
|
+
CREATE INDEX IF NOT EXISTS `idx_memory_fact_call` ON `memory_fact` (`call_id`);
|