thursday-agent 0.2.0 → 0.4.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 +12 -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 +25 -0
- 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 +134 -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/{_0pppbb5._.js → _1c78vw5._.js} +166 -37
- 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]__092knlj._.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]__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]__0s9dq5u._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0m1b5ky._.js → [root-of-the-server]__0s9l2sv._.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]__0xsog8n._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xtssj3._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__10-dz5o._.js +61 -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]__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]__1qfqvmg._.js → [root-of-the-server]__202p40z._.js} +2 -2
- package/.next/server/chunks/ssr/{_1mznrxk._.js → _001_ms1._.js} +3 -3
- package/.next/server/chunks/ssr/_01n3o0m._.js +3 -0
- package/.next/server/chunks/ssr/_0ap2fzn._.js +3 -0
- package/.next/server/chunks/ssr/_0fz4mf_._.js +3 -0
- package/.next/server/chunks/ssr/_0gb4gmf._.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/_0ilna52._.js +42 -0
- package/.next/server/chunks/ssr/_0n3toaw._.js +3 -0
- package/.next/server/chunks/ssr/{_13punpm._.js → _0q0zan6._.js} +2 -2
- package/.next/server/chunks/ssr/{_077-g6s._.js → _0s99bgb._.js} +3 -3
- package/.next/server/chunks/ssr/_0zcjrbg._.js +3 -0
- package/.next/server/chunks/ssr/_0zhoc3r._.js +3 -0
- package/.next/server/chunks/ssr/{_1lip4th._.js → _1-_etts._.js} +2 -2
- package/.next/server/chunks/ssr/_1-teee5._.js +3 -3
- package/.next/server/chunks/ssr/_13fke0x._.js +3 -0
- package/.next/server/chunks/ssr/_15j2_8f._.js +3 -0
- package/.next/server/chunks/ssr/_1b2mjwr._.js +3 -0
- package/.next/server/chunks/ssr/{_09ja_w1._.js → _1f-dg-6._.js} +2 -2
- package/.next/server/chunks/ssr/_1fojd41._.js +4 -0
- package/.next/server/chunks/ssr/_1gd8q8l._.js +3 -0
- package/.next/server/chunks/ssr/{_1m3bsfr._.js → _1h0rw11._.js} +2 -2
- package/.next/server/chunks/ssr/_1jhd09t._.js +3 -0
- package/.next/server/chunks/ssr/{_040sk32._.js → _1lz_cq2._.js} +84 -88
- package/.next/server/chunks/ssr/_1nnsk7z._.js +3 -0
- package/.next/server/chunks/ssr/_1sji22n._.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/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/{node_modules_0kxz4gt._.js → node_modules_00etblx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_18_dk7_._.js → node_modules_04jf_m8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0_n241r._.js → node_modules_08dhkiq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0n1kj4p._.js → node_modules_0940ns5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_17lrt3y._.js → node_modules_09q35v_._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1toafc-._.js → node_modules_0_-_a--._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0lrjk5t._.js → node_modules_0arus10._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_04n7mjs._.js → node_modules_0b__sgl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0iz1rzd._.js → node_modules_0cxaxk9._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ndvxub._.js → node_modules_0g7fzk3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0kl7-tn._.js → node_modules_0had7xd._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_19dp7ko._.js → node_modules_0pvd7q-._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_0x3-ply._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_1dwguw_._.js → node_modules_0yugy6m._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_004qlr4._.js → node_modules_14om4ar._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1q0p85z._.js → node_modules_14q6g4n._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_17bwo43._.js +55 -0
- package/.next/server/chunks/ssr/{node_modules_1hd-5tv._.js → node_modules_198nmll._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m93zeg._.js → node_modules_1_pc9kq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1n5ygqe._.js → node_modules_1aaxuef._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_01qnv-a._.js → node_modules_1cx_ql6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zu988w._.js → node_modules_1cz2hle._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xyd7ov._.js → node_modules_1efrqxi._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13r44jq._.js → node_modules_1eg7m6c._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_08d8bke._.js → node_modules_1gdh31p._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1hn8z1f._.js → node_modules_1hpopmo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_20yebtj._.js → node_modules_1qpjvy5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_09xhur7._.js → node_modules_1vh5ntv._.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_1b748ic._.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_1z4hm5e._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_@vercel_oidc_dist_06mk8id._.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/00rd4-v8r7axp.js +1 -0
- package/.next/static/chunks/08qe4as2q428z.js +3 -0
- package/.next/static/chunks/{31ttnjt6g35a0.js → 0ev4hyghq0mbb.js} +1 -1
- package/.next/static/chunks/0fl3gwe4-l6tz.js +1 -0
- package/.next/static/chunks/0gnqdjn2lvdad.js +2 -0
- package/.next/static/chunks/0hwap1-p0m5sa.js +1 -0
- package/.next/static/chunks/0r5qcctujhxli.js +1 -0
- package/.next/static/chunks/0w52rrrmuj9r9.js +1 -0
- package/.next/static/chunks/{07kl352c-lvcz.js → 0wcprt5ot5she.js} +1 -1
- package/.next/static/chunks/10teww7wt-f6h.js +1 -0
- package/.next/static/chunks/15m575979un5f.js +38 -0
- package/.next/static/chunks/17p6tk6k88dq6.js +1 -0
- package/.next/static/chunks/{3_h9txt3tq8t8.js → 1dkjg87pxk0n9.js} +1 -1
- package/.next/static/chunks/1jd09sxcjddu1.js +1 -0
- package/.next/static/chunks/1kq8h8wi_e0bc.js +53 -0
- package/.next/static/chunks/{18vhba44l1fc9.js → 1w73ece_6bheu.js} +1 -1
- package/.next/static/chunks/{3ard_noqapnw1.js → 214ya3n5gxeih.js} +1 -1
- package/.next/static/chunks/22_zkas21rpna.js +1 -0
- package/.next/static/chunks/2h0sd2vumhb15.js +1 -0
- package/.next/static/chunks/2t4vhi3m8ahya.js +1 -0
- package/.next/static/chunks/2tigdtz3dpcy8.js +1 -0
- package/.next/static/chunks/2u7xt6mxg44lf.js +1 -0
- package/.next/static/chunks/39j0fvpybzabl.js +40 -0
- package/.next/static/chunks/3akmqm77muj4-.js +1 -0
- package/.next/static/chunks/3cq5g494yuke8.css +1 -0
- package/.next/static/chunks/3woj-xd7ki5_i.js +1 -0
- package/.next/static/chunks/3xk7yqgomx7yq.js +1 -0
- package/.next/static/chunks/3zmcsnuo25zvq.js +1 -0
- package/.next/static/media/favicon.37o1pjldwi2uc.ico +0 -0
- package/README.md +47 -22
- 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 -7
- 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/port.mjs +65 -0
- package/bin/thursday.mjs +5 -33
- 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/docs/how-it-works.md +11 -7
- package/docs/images/face-dark.png +0 -0
- package/docs/images/face-light.png +0 -0
- package/docs/images/keeps-going.png +0 -0
- package/features/ai/chatgpt.ts +639 -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 +78 -56
- package/features/ai/model.schema.ts +232 -34
- package/features/ai/model.ts +169 -24
- package/features/ai/prompts/bot.prompt.ts +207 -114
- 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 +57 -27
- package/features/ai/tools/bot.tool.ts +35 -52
- package/features/ai/tools/connected.ts +17 -4
- package/features/ai/tools/memory.tool.ts +181 -117
- package/features/ai/tools/search.tool.ts +136 -47
- package/features/ai/tools/tool-name.ts +2 -6
- package/features/ai/tools/workspace.tool.ts +5 -1
- package/features/bot/bot.action.ts +14 -19
- package/features/bot/bot.memory.ts +89 -0
- package/features/bot/bot.query.ts +37 -57
- package/features/bot/bot.run.ts +512 -242
- package/features/bot/bot.runner.ts +434 -120
- package/features/bot/bot.schema.ts +104 -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 +214 -132
- package/features/bot/components/bot-setting.tsx +790 -402
- package/features/bot/components/bot-tool.tsx +2 -7
- 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 +240 -34
- package/features/bot/task.store.ts +76 -13
- 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 +340 -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 -98
- 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 -12
- package/features/thursday/use-thursday.ts +87 -60
- 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/components/memory-view.tsx +0 -84
- 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 → kaTO0UHqF1bMnWgCDik2f}/_buildManifest.js +0 -0
- /package/.next/static/{YR4NWcDDuzwLbTTU7U7Vr → kaTO0UHqF1bMnWgCDik2f}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{YR4NWcDDuzwLbTTU7U7Vr → kaTO0UHqF1bMnWgCDik2f}/_ssgManifest.js +0 -0
|
@@ -131,3 +131,125 @@ export function createAudioTap(): RealtimeAudio & {
|
|
|
131
131
|
},
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
|
+
|
|
135
|
+
/** What a face moves with on one frame (createVoiceFollower). */
|
|
136
|
+
export type VoiceFrame = {
|
|
137
|
+
/** How far into its own range the voice is now, 0..1; 0 in silence. */
|
|
138
|
+
level: number;
|
|
139
|
+
/** `level` over about half a second: the phrase rather than the syllable. */
|
|
140
|
+
phrase: number;
|
|
141
|
+
/** Strength of a syllable that started on this frame; 0 when none did. */
|
|
142
|
+
onset: number;
|
|
143
|
+
/** Each band inside its own range, low to high; one the voice never reaches stays 0. */
|
|
144
|
+
bands: number[];
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/** Seconds, except where a line says otherwise. */
|
|
148
|
+
const FOLLOW = {
|
|
149
|
+
/** A band's ceiling jumps to a new peak and sinks back over `ceilRelease`. */
|
|
150
|
+
ceilAttack: 0.03,
|
|
151
|
+
ceilRelease: 2.5,
|
|
152
|
+
/** Its floor drops to the quiet between syllables and creeps back up over `floorRise`. */
|
|
153
|
+
floorFall: 0.12,
|
|
154
|
+
floorRise: 3,
|
|
155
|
+
/** A band whose range is narrower than this (0..1) carries no shape. */
|
|
156
|
+
minSpan: 0.12,
|
|
157
|
+
/** Mean band level (0..1) across which silence turns into voice. */
|
|
158
|
+
quietBelow: 0.03,
|
|
159
|
+
voicedAbove: 0.12,
|
|
160
|
+
fast: 0.05,
|
|
161
|
+
mid: 0.22,
|
|
162
|
+
phrase: 0.45,
|
|
163
|
+
/** A syllable: the fast level rises this far over the mid one, past `onsetMin`, at most once per `onsetGap`. */
|
|
164
|
+
onsetRise: 0.1,
|
|
165
|
+
onsetMin: 0.3,
|
|
166
|
+
onsetGap: 0.12,
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Reads the voice's bands the way a face needs them. A voice is loud and narrow:
|
|
171
|
+
* its bands sit near the top and lean the same way for a whole sentence, so a
|
|
172
|
+
* face driven by them directly stays swollen and still. Here each band is
|
|
173
|
+
* followed inside its own recent range — the quiet between syllables is its
|
|
174
|
+
* floor, the syllables its ceiling — so the face moves with the words whatever
|
|
175
|
+
* the voice or its volume. One per face; it keeps state between frames.
|
|
176
|
+
*/
|
|
177
|
+
export function createVoiceFollower() {
|
|
178
|
+
const ceil = new Array<number>(SPECTRUM_BANDS).fill(0);
|
|
179
|
+
const floor = new Array<number>(SPECTRUM_BANDS).fill(0);
|
|
180
|
+
const frame: VoiceFrame = {
|
|
181
|
+
level: 0,
|
|
182
|
+
phrase: 0,
|
|
183
|
+
onset: 0,
|
|
184
|
+
bands: new Array<number>(SPECTRUM_BANDS).fill(0),
|
|
185
|
+
};
|
|
186
|
+
let fast = 0;
|
|
187
|
+
let mid = 0;
|
|
188
|
+
let sinceOnset = Number.POSITIVE_INFINITY;
|
|
189
|
+
|
|
190
|
+
const toward = (from: number, to: number, seconds: number, dt: number) =>
|
|
191
|
+
from + (to - from) * Math.min(1, dt / seconds);
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
/** Call once per frame with the seconds since the last call. The frame returned is reused. */
|
|
195
|
+
read(input: ArrayLike<number>, dt: number): VoiceFrame {
|
|
196
|
+
let total = 0;
|
|
197
|
+
let within = 0;
|
|
198
|
+
let ranged = 0;
|
|
199
|
+
for (let k = 0; k < SPECTRUM_BANDS; k++) {
|
|
200
|
+
const x = input[k] ?? 0;
|
|
201
|
+
total += x;
|
|
202
|
+
ceil[k] = toward(
|
|
203
|
+
ceil[k],
|
|
204
|
+
x,
|
|
205
|
+
x > ceil[k] ? FOLLOW.ceilAttack : FOLLOW.ceilRelease,
|
|
206
|
+
dt,
|
|
207
|
+
);
|
|
208
|
+
floor[k] = toward(
|
|
209
|
+
floor[k],
|
|
210
|
+
x,
|
|
211
|
+
x < floor[k] ? FOLLOW.floorFall : FOLLOW.floorRise,
|
|
212
|
+
dt,
|
|
213
|
+
);
|
|
214
|
+
const span = ceil[k] - floor[k];
|
|
215
|
+
const at =
|
|
216
|
+
span > FOLLOW.minSpan
|
|
217
|
+
? Math.min(1, Math.max(0, (x - floor[k]) / span))
|
|
218
|
+
: 0;
|
|
219
|
+
frame.bands[k] = at;
|
|
220
|
+
if (span > FOLLOW.minSpan) {
|
|
221
|
+
within += at;
|
|
222
|
+
ranged++;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const mean = total / SPECTRUM_BANDS;
|
|
227
|
+
const edge = Math.min(
|
|
228
|
+
1,
|
|
229
|
+
Math.max(
|
|
230
|
+
0,
|
|
231
|
+
(mean - FOLLOW.quietBelow) / (FOLLOW.voicedAbove - FOLLOW.quietBelow),
|
|
232
|
+
),
|
|
233
|
+
);
|
|
234
|
+
const voiced = edge * edge * (3 - 2 * edge);
|
|
235
|
+
for (let k = 0; k < SPECTRUM_BANDS; k++) frame.bands[k] *= voiced;
|
|
236
|
+
|
|
237
|
+
frame.level = (ranged ? within / ranged : 0) * voiced;
|
|
238
|
+
fast = toward(fast, frame.level, FOLLOW.fast, dt);
|
|
239
|
+
mid = toward(mid, frame.level, FOLLOW.mid, dt);
|
|
240
|
+
frame.phrase = toward(frame.phrase, frame.level, FOLLOW.phrase, dt);
|
|
241
|
+
|
|
242
|
+
sinceOnset += dt;
|
|
243
|
+
frame.onset = 0;
|
|
244
|
+
if (
|
|
245
|
+
fast > mid + FOLLOW.onsetRise &&
|
|
246
|
+
fast > FOLLOW.onsetMin &&
|
|
247
|
+
sinceOnset > FOLLOW.onsetGap
|
|
248
|
+
) {
|
|
249
|
+
sinceOnset = 0;
|
|
250
|
+
frame.onset = Math.min(1, fast);
|
|
251
|
+
}
|
|
252
|
+
return frame;
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
package/lib/sandbox.ts
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join, resolve as pathResolve, relative, sep } from "node:path";
|
|
4
|
+
import { EXEC_KILL_GRACE_MS, EXEC_TIMEOUT_MS } from "@/config";
|
|
4
5
|
|
|
5
6
|
export type ExecResult = { stdout: string; stderr: string; exitCode: number };
|
|
6
7
|
|
|
7
|
-
/**
|
|
8
|
-
* How long one command may run before its process group is killed. Nobody is
|
|
9
|
-
* watching the shell, so a command waiting on a prompt would otherwise hang
|
|
10
|
-
* the job; anything that legitimately runs longer belongs in the background.
|
|
11
|
-
* Named because the shell guide states it to the model (ai/tools/workspace.tool).
|
|
12
|
-
*/
|
|
13
|
-
export const EXEC_TIMEOUT_MS = 180_000;
|
|
14
|
-
|
|
15
8
|
export interface Sandbox {
|
|
16
9
|
/** Absolute. Relative paths resolve from here */
|
|
17
10
|
readonly cwd: string;
|
|
@@ -61,6 +54,25 @@ const IGNORE = new Set([
|
|
|
61
54
|
"coverage",
|
|
62
55
|
]);
|
|
63
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Every file under `dir`, skipping dot entries and the folders a build or a
|
|
59
|
+
* package manager fills (IGNORE). A folder that cannot be read yields nothing.
|
|
60
|
+
*/
|
|
61
|
+
export async function* walkFiles(dir: string): AsyncGenerator<string> {
|
|
62
|
+
let entries;
|
|
63
|
+
try {
|
|
64
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
65
|
+
} catch {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
for (const e of entries) {
|
|
69
|
+
if (IGNORE.has(e.name) || e.name.startsWith(".")) continue;
|
|
70
|
+
const full = join(dir, e.name);
|
|
71
|
+
if (e.isDirectory()) yield* walkFiles(full);
|
|
72
|
+
else if (e.isFile()) yield full;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
64
76
|
/**
|
|
65
77
|
* Environment for every shell the agent runs: nobody watches it, so no pager
|
|
66
78
|
* may stall it, and secrets do not travel to children. playwright-cli runs
|
|
@@ -108,21 +120,6 @@ export const createSandBox = ({
|
|
|
108
120
|
const res = (p: string) =>
|
|
109
121
|
p.startsWith("/") || /^[A-Za-z]:/.test(p) ? p : pathResolve(cwd, p);
|
|
110
122
|
|
|
111
|
-
async function* walk(dir: string): AsyncGenerator<string> {
|
|
112
|
-
let entries;
|
|
113
|
-
try {
|
|
114
|
-
entries = await readdir(dir, { withFileTypes: true });
|
|
115
|
-
} catch {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
for (const e of entries) {
|
|
119
|
-
if (IGNORE.has(e.name) || e.name.startsWith(".")) continue;
|
|
120
|
-
const full = join(dir, e.name);
|
|
121
|
-
if (e.isDirectory()) yield* walk(full);
|
|
122
|
-
else if (e.isFile()) yield full;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
123
|
// A very simple glob → regex. Only **/, * and ? are supported
|
|
127
124
|
const globToRe = (g: string) =>
|
|
128
125
|
new RegExp(
|
|
@@ -155,7 +152,7 @@ export const createSandBox = ({
|
|
|
155
152
|
const root = res(path);
|
|
156
153
|
const re = globToRe(pattern);
|
|
157
154
|
const out: string[] = [];
|
|
158
|
-
for await (const f of
|
|
155
|
+
for await (const f of walkFiles(root)) {
|
|
159
156
|
const rel = relative(root, f).split(sep).join("/");
|
|
160
157
|
if (re.test(rel) || re.test(f)) out.push(f);
|
|
161
158
|
if (out.length >= limit) break;
|
|
@@ -180,28 +177,26 @@ export const createSandBox = ({
|
|
|
180
177
|
child.stdout?.on("data", (d) => (stdout += d));
|
|
181
178
|
child.stderr?.on("data", (d) => (stderr += d));
|
|
182
179
|
|
|
183
|
-
const
|
|
184
|
-
stderr += `\n[${why}]`;
|
|
180
|
+
const group = (name: NodeJS.Signals) => {
|
|
185
181
|
try {
|
|
186
182
|
// A negative pid means the group: the shell and everything under it
|
|
187
|
-
if (child.pid) process.kill(-child.pid,
|
|
183
|
+
if (child.pid) process.kill(-child.pid, name);
|
|
188
184
|
} catch {
|
|
189
185
|
// Already gone, or no process groups on this platform
|
|
190
|
-
child.kill(
|
|
186
|
+
child.kill(name);
|
|
191
187
|
}
|
|
192
188
|
};
|
|
193
189
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
const onAbort = () => stop("Aborted");
|
|
200
|
-
if (signal?.aborted) onAbort();
|
|
201
|
-
else signal?.addEventListener("abort", onAbort, { once: true });
|
|
190
|
+
let settled = false;
|
|
191
|
+
let killing: ReturnType<typeof setTimeout> | undefined;
|
|
192
|
+
let letGo: ReturnType<typeof setTimeout> | undefined;
|
|
202
193
|
|
|
203
194
|
const done = async (result: ExecResult) => {
|
|
195
|
+
if (settled) return;
|
|
196
|
+
settled = true;
|
|
204
197
|
clearTimeout(timer);
|
|
198
|
+
clearTimeout(killing);
|
|
199
|
+
clearTimeout(letGo);
|
|
205
200
|
signal?.removeEventListener("abort", onAbort);
|
|
206
201
|
resolve({
|
|
207
202
|
...result,
|
|
@@ -210,6 +205,34 @@ export const createSandBox = ({
|
|
|
210
205
|
});
|
|
211
206
|
};
|
|
212
207
|
|
|
208
|
+
const stop = (why: string) => {
|
|
209
|
+
if (killing || settled) return;
|
|
210
|
+
stderr += `\n[${why}]`;
|
|
211
|
+
group("SIGTERM");
|
|
212
|
+
// A command that ignores SIGTERM would hold its step, and everything
|
|
213
|
+
// waiting on the job, for good (config EXEC_KILL_GRACE_MS)
|
|
214
|
+
killing = setTimeout(() => {
|
|
215
|
+
stderr += "\n[Killed: it did not exit on SIGTERM]";
|
|
216
|
+
group("SIGKILL");
|
|
217
|
+
// Output held open by a process that left the group never closes;
|
|
218
|
+
// what arrived by now is the result
|
|
219
|
+
letGo = setTimeout(() => {
|
|
220
|
+
child.stdout?.destroy();
|
|
221
|
+
child.stderr?.destroy();
|
|
222
|
+
void done({ stdout, stderr, exitCode: -1 });
|
|
223
|
+
}, 1_000);
|
|
224
|
+
}, EXEC_KILL_GRACE_MS);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const timer = setTimeout(
|
|
228
|
+
() => stop(`Timed out after ${timeoutMs}ms`),
|
|
229
|
+
timeoutMs,
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
const onAbort = () => stop("Aborted");
|
|
233
|
+
if (signal?.aborted) onAbort();
|
|
234
|
+
else signal?.addEventListener("abort", onAbort, { once: true });
|
|
235
|
+
|
|
213
236
|
child.on("close", (code) =>
|
|
214
237
|
done({ stdout, stderr, exitCode: code ?? -1 }),
|
|
215
238
|
);
|
package/package.json
CHANGED
package/skills/browser/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: browser
|
|
3
|
-
description: "Any browser and anything on the web — a page, a click, a form, a sign-in, a tab. Open a page and read it, fill a form, sign in, download, screenshot, print a page or an HTML file to PDF.
|
|
3
|
+
description: "Any browser and anything on the web — a page, a click, a form, a sign-in, a tab. Open a page and read it, fill a form, sign in, download, screenshot, print a page or an HTML file to PDF. It can put a real window on their screen to show them the thing itself — an order at checkout, a map, a page — and it is how a browser is reached even when one is already running on their Mac (`attach`) — a browser is never driven by clicking it through the machine. A page that wants a sign-in is still this skill's job: a kept session, the browser they are already in, or the window this opens in front of them."
|
|
4
4
|
allowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -15,8 +15,8 @@ Everything the app has to say about the browser is here; the prompts do not
|
|
|
15
15
|
repeat it.
|
|
16
16
|
|
|
17
17
|
**Every browser goes through here.** A job that names a browser, a site, a URL,
|
|
18
|
-
a sign-in or a tab is this one's.
|
|
19
|
-
one on their screen — they can watch it and type into it. Never drive Chrome by
|
|
18
|
+
a sign-in or a tab is this one's. With `--headed` the window `playwright-cli`
|
|
19
|
+
opens is a real one on their screen — they can watch it and type into it. Never drive Chrome by
|
|
20
20
|
clicking it through the machine (`osascript`, `peekaboo`, System Events): that
|
|
21
21
|
window cannot be snapshotted or acted on by ref. For the browser they already
|
|
22
22
|
have open — a tab they left, a profile they are signed into — attach instead:
|
|
@@ -24,13 +24,27 @@ have open — a tab they left, a profile they are signed into — attach instead
|
|
|
24
24
|
|
|
25
25
|
**Your browser is this job's own.** Its session is already in your shell
|
|
26
26
|
(`PLAYWRIGHT_CLI_SESSION`): never pass `-s=`, never `close-all` or `kill-all` —
|
|
27
|
-
other jobs are running theirs.
|
|
28
|
-
|
|
29
|
-
**Headless
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
other jobs are running theirs.
|
|
28
|
+
|
|
29
|
+
**Headless is yours; headed is theirs.** A browser opens headless: nobody sees
|
|
30
|
+
it, and the app closes it when the job ends. `--headed` puts a real window on
|
|
31
|
+
their screen, and that window outlives the job — the app never closes it, they
|
|
32
|
+
do. So you can show them the thing itself instead of describing it: the order
|
|
33
|
+
sitting at checkout for them to confirm, the map with the pin dropped, the page
|
|
34
|
+
they asked to watch, a sign-in for them to finish. Open it `--headed`, leave it
|
|
35
|
+
open, and say in your answer that it is on their screen. A window you opened
|
|
36
|
+
headed only to get past a wall and are done with, `close` yourself. Only a job
|
|
37
|
+
they cancel or delete takes its windows with it.
|
|
38
|
+
|
|
39
|
+
**A payment is theirs to press.** Take a purchase, a top-up or a subscription
|
|
40
|
+
as far as the last screen before money moves, open it `--headed`, and answer
|
|
41
|
+
with what it buys, for how much, and that the pay button is on their screen.
|
|
42
|
+
That is the job done, not stopped — never press it yourself, whatever the
|
|
43
|
+
request said.
|
|
44
|
+
|
|
45
|
+
A site that will want a session before it shows you anything — a shop, a
|
|
46
|
+
console, a dashboard, an account page — starts `--headed --persistent` rather
|
|
47
|
+
than finding out headless and starting over.
|
|
34
48
|
|
|
35
49
|
**Blocked, not broken.** A 403, an "access denied" page, a wall about automated
|
|
36
50
|
traffic is refusing the headless browser, not the job. `close`, then
|
|
@@ -39,29 +53,36 @@ most of it, and is worth trying before you conclude anything about the site.
|
|
|
39
53
|
Still refused after that, the wall is real: say so in your report, with the url
|
|
40
54
|
and whatever you did bring back.
|
|
41
55
|
|
|
42
|
-
**A sign-in is not a wall.**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
**A sign-in is a fork, not a wall.** Four ways through, and which one fits is
|
|
57
|
+
yours to read off the job:
|
|
58
|
+
|
|
59
|
+
- **A session you already kept.** `ls <your folder>/.auth/`, then `state-load`
|
|
60
|
+
that file and `goto` the site — cookies without a reload leave the signed-out
|
|
61
|
+
page that was already drawn, which reads as an expired session when it is not.
|
|
62
|
+
Cheapest when it works, so look before anything else.
|
|
63
|
+
- **The browser they are already in.** `attach --cdp=chrome` carries their own
|
|
64
|
+
profile and whatever it is signed into.
|
|
65
|
+
- **They sign in themselves.** `open <the login url> --headed --persistent` —
|
|
66
|
+
the login page, not the front door — then `ask_thursday` in one line saying
|
|
67
|
+
what to sign into and that the window is open, options `Signed in` / `Not
|
|
68
|
+
now`, and stop. The window stays open while the job waits; continue from a
|
|
69
|
+
fresh `snapshot` when the answer comes. A captcha is the same move. Not
|
|
70
|
+
`show` — it blocks waiting for annotations nobody will send.
|
|
71
|
+
- **You have the credentials.** Ask before you use them: `ask_thursday` in one
|
|
72
|
+
line naming the account, options `Sign in with it` / `I'll do it`, and on the
|
|
73
|
+
second take the fork above. An answer to your own sign-in question is the
|
|
74
|
+
exception — credentials given there are already the yes, so type them.
|
|
75
|
+
|
|
76
|
+
The line is where the secret comes from, not what kind it is: never guess,
|
|
77
|
+
invent, or go looking for one somewhere they did not point you at. An email or
|
|
78
|
+
username they gave you is not a secret — fill it and press next. `memory_recall`
|
|
79
|
+
the note for that site when you are missing the address they use.
|
|
80
|
+
|
|
81
|
+
**Keep a sign-in for the next job.** `mkdir -p <your folder>/.auth` and
|
|
82
|
+
`state-save` into it after one succeeds — your own folder, the one your
|
|
83
|
+
instructions name, because a session is yours across jobs and the workspace root
|
|
84
|
+
is nobody's. Say that you kept it: it signs every later job in as them, which is
|
|
85
|
+
theirs to want or not. These files never go in a report.
|
|
65
86
|
|
|
66
87
|
**Reading a page.** Every command writes a snapshot file and prints its path.
|
|
67
88
|
`find "Create Key"` returns only the matching nodes with a few lines around
|
|
@@ -87,7 +108,7 @@ A click that seems to do nothing may have opened a tab: `tab-list`,
|
|
|
87
108
|
`goto http://127.0.0.1:48800/<file>.html`; `pdf --filename=out.pdf` prints
|
|
88
109
|
it. Kill the server when done.
|
|
89
110
|
|
|
90
|
-
Snapshots land in `.playwright-cli/` and are cleared after
|
|
111
|
+
Snapshots land in `.playwright-cli/` and are cleared after a few days. A file you
|
|
91
112
|
name — `--filename=`, a `pdf`, a download — goes under `scratch/`, or
|
|
92
113
|
`artifacts/` when it is the result.
|
|
93
114
|
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/bot/notes/route.js")
|
|
2
|
-
R.c("server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02s3hjt._.js")
|
|
3
|
-
R.c("server/chunks/_106co2o._.js")
|
|
4
|
-
R.c("server/chunks/_1php4eq._.js")
|
|
5
|
-
R.c("server/chunks/[root-of-the-server]__005var5._.js")
|
|
6
|
-
R.c("server/chunks/[root-of-the-server]__0-npkh_._.js")
|
|
7
|
-
R.c("server/chunks/[root-of-the-server]__02_2sm-._.js")
|
|
8
|
-
R.c("server/chunks/lib_logger_ts_1exwjut._.js")
|
|
9
|
-
R.c("server/chunks/_1_5mnq4._.js")
|
|
10
|
-
R.c("server/chunks/node_modules_next_dist_0r-70fd._.js")
|
|
11
|
-
R.c("server/chunks/node_modules_zod_v4_1cha_bw._.js")
|
|
12
|
-
R.c("server/chunks/_next-internal_server_app_api_bot_notes_route_actions_0qcsyu7.js")
|
|
13
|
-
R.m(956206)
|
|
14
|
-
module.exports=R.m(956206).exports
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
|
2
|
-
globalThis.__RSC_MANIFEST["/api/bot/notes/route"] = {"moduleLoading":{"prefix":""},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}};
|
|
3
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/memory/tidy/route.js")
|
|
2
|
-
R.c("server/chunks/[root-of-the-server]__0emr6go._.js")
|
|
3
|
-
R.c("server/chunks/[root-of-the-server]__0bed6hu._.js")
|
|
4
|
-
R.c("server/chunks/_0a351g7._.js")
|
|
5
|
-
R.c("server/chunks/[root-of-the-server]__0-npkh_._.js")
|
|
6
|
-
R.c("server/chunks/_1d5zmy8._.js")
|
|
7
|
-
R.c("server/chunks/_1php4eq._.js")
|
|
8
|
-
R.c("server/chunks/[root-of-the-server]__005var5._.js")
|
|
9
|
-
R.c("server/chunks/node_modules_next_dist_0r-70fd._.js")
|
|
10
|
-
R.c("server/chunks/[root-of-the-server]__1untqv8._.js")
|
|
11
|
-
R.c("server/chunks/_1_5mnq4._.js")
|
|
12
|
-
R.c("server/chunks/_0zuzmt_._.js")
|
|
13
|
-
R.c("server/chunks/lib_logger_ts_1exwjut._.js")
|
|
14
|
-
R.c("server/chunks/node_modules_zod_v4_0ubdflj._.js")
|
|
15
|
-
R.c("server/chunks/[root-of-the-server]__02_2sm-._.js")
|
|
16
|
-
R.c("server/chunks/_07rtlxv._.js")
|
|
17
|
-
R.c("server/chunks/_1drv2et._.js")
|
|
18
|
-
R.c("server/chunks/node_modules_@ai-sdk_1o5ydf6._.js")
|
|
19
|
-
R.c("server/chunks/_1v9r2ke._.js")
|
|
20
|
-
R.c("server/chunks/_next-internal_server_app_api_memory_tidy_route_actions_0_cfuom.js")
|
|
21
|
-
R.m(245204)
|
|
22
|
-
module.exports=R.m(245204).exports
|