thursday-agent 0.17.2 → 0.19.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 +4 -2
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +28 -12
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +12 -12
- package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/artifact/route.js +7 -7
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route.js +4 -4
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route.js +4 -4
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/route.js +4 -4
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/[id]/route.js +1 -1
- package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/file/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/bot/thread/file/route.js +29 -0
- package/.next/server/app/api/bot/thread/file/route.js.nft.json +1 -0
- package/.next/server/app/api/bot/thread/file/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/bot/thread/route.js +1 -1
- package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js +1 -1
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/events/route.js +2 -2
- package/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/server/app/api/favicon/[host]/route.js.nft.json +1 -1
- package/.next/server/app/api/file/[...path]/route.js +4 -4
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/automatic/route.js +3 -3
- package/.next/server/app/api/llm-model/automatic/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/[provider]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/catalog/{route.js → [provider]/route.js} +8 -8
- package/.next/server/app/api/llm-model/catalog/[provider]/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/catalog/[provider]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/llm-model/credits/[provider]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/llm-model/credits/[provider]/route/build-manifest.json +12 -0
- package/.next/server/app/api/llm-model/credits/[provider]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/llm-model/credits/{route.js → [provider]/route.js} +8 -8
- package/.next/server/app/api/llm-model/credits/[provider]/route.js.map +5 -0
- package/.next/server/app/api/llm-model/credits/[provider]/route.js.nft.json +1 -0
- package/.next/server/app/api/llm-model/credits/[provider]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/llm-model/route.js +1 -1
- package/.next/server/app/api/llm-model/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/subscription/route.js +1 -1
- package/.next/server/app/api/llm-model/subscription/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/[name]/route.js +1 -1
- package/.next/server/app/api/mcp/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth/callback/route.js +2 -2
- package/.next/server/app/api/mcp/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +1 -1
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/tools/route.js +1 -1
- package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route.js +12 -12
- package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/route.js +1 -1
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/reach/route.js +17 -17
- package/.next/server/app/api/reach/route.js.nft.json +1 -1
- package/.next/server/app/api/routine/route.js +6 -6
- package/.next/server/app/api/routine/route.js.nft.json +1 -1
- package/.next/server/app/api/running/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/running/route/build-manifest.json +12 -0
- package/.next/server/app/api/running/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/running/route.js +10 -0
- package/.next/server/app/api/running/route.js.map +5 -0
- package/.next/server/app/api/running/route.js.nft.json +1 -0
- package/.next/server/app/api/running/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/signins/route.js +4 -4
- package/.next/server/app/api/signins/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js +7 -7
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +6 -6
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/end/route.js +1 -1
- package/.next/server/app/api/thursday/call/end/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js +1 -1
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/settings/route.js +1 -1
- package/.next/server/app/api/thursday/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/text/route.js +12 -12
- package/.next/server/app/api/thursday/text/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +13 -13
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/files/route.js +7 -7
- package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/route.js +6 -6
- package/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +94 -6
- package/.next/server/app/artifact/[...path]/page.js +9 -5
- package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/page/server-reference-manifest.json +161 -128
- package/.next/server/app/page.js +10 -9
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +4 -2
- package/.next/server/chunks/[root-of-the-server]__00qyw01._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__02ra64t._.js +5 -0
- package/.next/server/chunks/{[root-of-the-server]__05dp5tr._.js → [root-of-the-server]__06ky9of._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0b565-x._.js +7 -0
- package/.next/server/chunks/[root-of-the-server]__0bmtib_._.js +7 -0
- package/.next/server/chunks/[root-of-the-server]__0bqveex._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0brmiv2._.js +7 -0
- package/.next/server/chunks/[root-of-the-server]__0eivkvk._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0f7m79q._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0g38-aj._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0gvdr2h._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0h656y-._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0hm3tiq._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0hzdqnv._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0kzmxpg._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0mgyt8p._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0mrk2it._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0o5s5-o._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0p80i1n._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0qdoc_9._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__0qzho69._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0sm5xvm._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0v_kuor._.js +5 -0
- package/.next/server/chunks/{[root-of-the-server]__061o2_x._.js → [root-of-the-server]__0ypkfbu._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1-18_pz._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__13hng6h._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__01k3vi3._.js → [root-of-the-server]__14iga7p._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__16gn7zn._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__18e65_-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__1_cgawk._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1ceammd._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1ckt1yj._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1cu5f3z._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1dth047._.js +5 -0
- package/.next/server/chunks/{[root-of-the-server]__1k2qs1m._.js → [root-of-the-server]__1fc6v12._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1hviq62._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__1ksm9m-._.js +12 -0
- package/.next/server/chunks/[root-of-the-server]__1m1q6u5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1m_dmf6._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1mys2c3._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1ndi14y._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1p0njle._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1p47fbb._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__1pugoq0._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0ts7ai0._.js → [root-of-the-server]__1trns9g._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1ygplx1._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1zn039k._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__20w_g71._.js +3 -0
- package/.next/server/chunks/_01c32w9._.js +1 -1
- package/.next/server/chunks/_02bov6_._.js +1 -1
- package/.next/server/chunks/_06hnfi8._.js +2 -2
- package/.next/server/chunks/_06u9yo-._.js +1 -1
- package/.next/server/chunks/_08354bn._.js +12 -11
- package/.next/server/chunks/_08_-9ay._.js +7 -0
- package/.next/server/chunks/_08s4vft._.js +1 -1
- package/.next/server/chunks/_0bgjf07._.js +5 -0
- package/.next/server/chunks/_0c49lmw._.js +1 -1
- package/.next/server/chunks/_0fb6dvr._.js +1 -1
- package/.next/server/chunks/_0hgvg55._.js +1 -1
- package/.next/server/chunks/_0iw19ig._.js +1 -1
- package/.next/server/chunks/_0poi1t2._.js +1 -1
- package/.next/server/chunks/_0s8ao8z._.js +1 -1
- package/.next/server/chunks/_0t_7gji._.js +1 -1
- package/.next/server/chunks/_0ucx1jv._.js +1 -1
- package/.next/server/chunks/_0uzj57i._.js +1 -1
- package/.next/server/chunks/_0wyh244._.js +112 -0
- package/.next/server/chunks/_1-sk_q4._.js +1 -1
- package/.next/server/chunks/_108gsm8._.js +2 -2
- package/.next/server/chunks/_136j09a._.js +5 -5
- package/.next/server/chunks/_15negpy._.js +2 -2
- package/.next/server/chunks/_1d7og_q._.js +1 -1
- package/.next/server/chunks/_1dxq827._.js +2 -2
- package/.next/server/chunks/_1e54wxa._.js +1 -1
- package/.next/server/chunks/_1frcwj1._.js +1 -1
- package/.next/server/chunks/_1gn2r2q._.js +8 -6
- package/.next/server/chunks/_1gxankq._.js +2 -2
- package/.next/server/chunks/_1i3uucm._.js +1 -1
- package/.next/server/chunks/_1jvy78-._.js +5 -0
- package/.next/server/chunks/_1lg0lsu._.js +53 -0
- package/.next/server/chunks/_1njolhx._.js +294 -0
- package/.next/server/chunks/_1q6e56i._.js +8 -6
- package/.next/server/chunks/_1qgix-j._.js +1 -1
- package/.next/server/chunks/_1wtb-77._.js +294 -0
- package/.next/server/chunks/_1wwl_7o._.js +1 -1
- package/.next/server/chunks/_1y8w80a._.js +5 -5
- package/.next/server/chunks/_1yx285_._.js +3 -0
- package/.next/server/chunks/_20qn224._.js +3 -0
- package/.next/server/chunks/_211dn2c._.js +1 -1
- package/.next/server/chunks/_next-internal_server_app_api_bot_thread_file_route_actions_0q3be0o.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_catalog_[provider]_route_actions_1i0449q.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_credits_[provider]_route_actions_0iui9hz.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_running_route_actions_0o1g-aw.js +3 -0
- package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
- package/.next/server/chunks/features_bot_08z387_._.js +3 -3
- package/.next/server/chunks/features_bot_0zy_q8y._.js +7 -7
- package/.next/server/chunks/features_bot_1dfrdsb._.js +7 -7
- package/.next/server/chunks/features_workspace_workspace_ts_13h82gv._.js +3 -3
- package/.next/server/chunks/features_workspace_workspace_ts_1iyjroj._.js +3 -3
- package/.next/server/chunks/{node_modules_1rosz79._.js → node_modules_035o7ku._.js} +1 -1
- package/.next/server/chunks/{node_modules_1er1u8w._.js → node_modules_0tn5t13._.js} +1 -1
- package/.next/server/chunks/{node_modules_103lpef._.js → node_modules_12oq3hr._.js} +1 -1
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0g87zst._.js → node_modules_consola_dist_chunks_prompt_mjs_0yd5xa0._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__04upd5v._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0p0mv2u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0sk5enu._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xyaud4._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1-gi9sm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__16nn3pe._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1867koj._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1c8-7cw._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__1d7usu0._.js → [root-of-the-server]__1qn0axo._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__1tb5vve._.js +47 -0
- package/.next/server/chunks/ssr/_02cm0fr._.js +5 -0
- package/.next/server/chunks/ssr/{features_bot_1knyan7._.js → _07nmtxo._.js} +2 -2
- package/.next/server/chunks/ssr/_088vzgn._.js +1 -1
- package/.next/server/chunks/ssr/{_1dfv66y._.js → _0bg1u1j._.js} +2 -2
- package/.next/server/chunks/ssr/_0cv9tmv._.js +1 -1
- package/.next/server/chunks/ssr/{_10-_awu._.js → _0f9hx5p._.js} +2 -2
- package/.next/server/chunks/ssr/_0g9ula_._.js +3 -0
- package/.next/server/chunks/ssr/{_1aqjk-1._.js → _0irozu9._.js} +2 -2
- package/.next/server/chunks/ssr/{_123y-ah._.js → _0is8m6y._.js} +2 -2
- package/.next/server/chunks/ssr/_0iwsdp7._.js +3 -0
- package/.next/server/chunks/ssr/_0l7rjg5._.js +1 -1
- package/.next/server/chunks/ssr/{lib_logger_ts_0-olsze._.js → _0mfgsk-._.js} +4 -2
- package/.next/server/chunks/ssr/{_0fo4552._.js → _0nk80t6._.js} +53 -13
- package/.next/server/chunks/ssr/_0p6w0ef._.js +3 -0
- package/.next/server/chunks/ssr/_0pbav_w._.js +3 -0
- package/.next/server/chunks/ssr/{_0vo_oym._.js → _0q-mdwv._.js} +8 -8
- package/.next/server/chunks/ssr/_0s5_ahb._.js +3 -0
- package/.next/server/chunks/ssr/{_0e2fnvg._.js → _0t5f2c3._.js} +2 -2
- package/.next/server/chunks/ssr/_0v9r8g2._.js +1 -1
- package/.next/server/chunks/ssr/_0x8ophf._.js +1 -1
- package/.next/server/chunks/ssr/_0x9f717._.js +60 -0
- package/.next/server/chunks/ssr/_107vtdk._.js +162 -0
- package/.next/server/chunks/ssr/{_17a4qyk._.js → _12lql1x._.js} +3 -3
- package/.next/server/chunks/ssr/{_163dr78._.js → _165wnr4._.js} +2 -2
- package/.next/server/chunks/ssr/_16_7zeo._.js +3 -0
- package/.next/server/chunks/ssr/_17komoi._.js +3 -0
- package/.next/server/chunks/ssr/_190hjys._.js +3 -0
- package/.next/server/chunks/ssr/_1bfrntd._.js +6 -0
- package/.next/server/chunks/ssr/{_01al00i._.js → _1booff4._.js} +2 -2
- package/.next/server/chunks/ssr/{_0xfafez._.js → _1ew1j7l._.js} +2 -2
- package/.next/server/chunks/ssr/_1i2swyr._.js +3 -0
- package/.next/server/chunks/ssr/_1neoj22._.js +1 -1
- package/.next/server/chunks/ssr/_1qsa25k._.js +3 -0
- package/.next/server/chunks/ssr/_1soynbw._.js +6 -0
- package/.next/server/chunks/ssr/_1vc2xmu._.js +3 -0
- package/.next/server/chunks/ssr/{_14oirtb._.js → _1wq90j8._.js} +2 -2
- package/.next/server/chunks/ssr/_1xwtbdz._.js +3 -0
- package/.next/server/chunks/ssr/_1zrhkf0._.js +310 -0
- package/.next/server/chunks/ssr/_21awrs2._.js +5 -0
- package/.next/server/chunks/ssr/features_0796o8r._.js +1 -1
- package/.next/server/chunks/ssr/features_bot_0tb4ui-._.js +2 -2
- package/.next/server/chunks/ssr/features_bot_1c56lew._.js +37 -0
- package/.next/server/chunks/ssr/features_bot_1fn_grf._.js +3 -0
- package/.next/server/chunks/ssr/{features_config_09n-q9q._.js → features_config_05zi68v._.js} +3 -3
- package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
- package/.next/server/chunks/ssr/features_memory_components_memory-setting_tsx_0oa43sw._.js +1 -1
- package/.next/server/chunks/ssr/features_routine_components_routine-setting_tsx_055fknz._.js +1 -1
- package/.next/server/chunks/ssr/features_workspace_workspace_ts_1wc7_u_._.js +4 -4
- package/.next/server/chunks/ssr/{node_modules_1k5i-_9._.js → node_modules_0-sux1a._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0msrhxf._.js → node_modules_01oezhb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1gq3ght._.js → node_modules_04m6ebg._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0nmkv-v._.js → node_modules_067jfov._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0gd9hbz._.js → node_modules_06ugby3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0d6j33x._.js → node_modules_07p51j3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_10_fv2a._.js → node_modules_0995xyq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1lmyts8._.js → node_modules_0_uecwx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_04x5wyv._.js → node_modules_0dsyc90._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0__0tvm._.js → node_modules_0hli6s2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0k8-y89._.js → node_modules_0m-bde_._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1p_6sq7._.js → node_modules_0oqfdbr._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_0qd7p5f._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_13g-d25._.js → node_modules_0tgy5s5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1_8-jcj._.js → node_modules_1-kjmls._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m73b88._.js → node_modules_1-l3ka5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_113l3e5._.js → node_modules_1-w3ayh._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0q-klni._.js → node_modules_133exgm._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xb-ndg._.js → node_modules_17xc5_k._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_021lid9._.js → node_modules_1_i_w30._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ri_eip._.js → node_modules_1a2cjfk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13bqv6i._.js → node_modules_1k752fe._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1qstb1x._.js → node_modules_1lie7z8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_096up6a._.js → node_modules_1mv70-y._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_156kv_t._.js → node_modules_1r611t2._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules_1vfd8dz._.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_0cjnmzp._.js → node_modules_1yaowd7._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0nw5jz7._.js → node_modules_20a1wpo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0amkw0b._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1r8pxbe._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0zq3l45._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1siiu4h._.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 +205 -132
- package/.next/static/chunks/{0obogzscwwekj.js → 088d3w5qxu19g.js} +2 -2
- package/.next/static/chunks/0_s4z70lx1tgs.js +1 -0
- package/.next/static/chunks/0bxekp4hnuk1g.js +1 -0
- package/.next/static/chunks/{1cglo3a2mbeou.js → 0fw4u_s974j24.js} +1 -1
- package/.next/static/chunks/0hy2x7qhk8wgx.css +1 -0
- package/.next/static/chunks/{2zbl41hed17g3.js → 0n_eshmn_7wfn.js} +2 -2
- package/.next/static/chunks/0q9b2n6l4flqb.js +1 -0
- package/.next/static/chunks/0ulcp_u_y1u0b.js +15 -0
- package/.next/static/chunks/0vj93zo0yvix9.js +35 -0
- package/.next/static/chunks/{166smhw8v-s3j.js → 10f98bh4hdmhe.js} +1 -1
- package/.next/static/chunks/1b8bce_z_act0.js +1 -0
- package/.next/static/chunks/1c32d2azsjaj_.js +1 -0
- package/.next/static/chunks/{1xv4g10m-cl1s.js → 1fs829mz69pxz.js} +1 -1
- package/.next/static/chunks/1lwlh4mo_vv8d.js +1 -0
- package/.next/static/chunks/{0p2f6uv4xytfm.js → 1po8fkg40peu-.js} +1 -1
- package/.next/static/chunks/{0uxq_vs6uxi-b.js → 1rg6b9l5fm1hj.js} +1 -1
- package/.next/static/chunks/{3b96xy59nl_gd.js → 26g3iwfuad-7p.js} +1 -1
- package/.next/static/chunks/2bjnmtke_q43c.js +1 -0
- package/.next/static/chunks/2c86k0o-1p9_w.js +1 -0
- package/.next/static/chunks/2gf4t0d76bvyv.js +1 -0
- package/.next/static/chunks/2rj3q_ahctv19.js +1 -0
- package/.next/static/chunks/{2lhc74urf3acr.js → 2x6-fpctvucte.js} +1 -1
- package/.next/static/chunks/2yicf7bky866n.js +3 -0
- package/.next/static/chunks/337g9g_ux2gj-.js +1 -0
- package/.next/static/chunks/350ws7svim7ij.js +58 -0
- package/.next/static/chunks/{0o7o0eb7ihxi6.js → 396enq-m0sss5.js} +1 -1
- package/.next/static/chunks/3e1w_nwfb39j-.js +1 -0
- package/.next/static/chunks/3v3ooretb54ag.js +1 -0
- package/.next/static/chunks/40re_3ukjulg9.js +1 -0
- package/.next/static/chunks/{3gsxnqqqphh-1.js → 44bcbnmup71so.js} +1 -1
- package/.next/static/chunks/{2qgkbdshzpq1c.js → 458dtbsemx996.js} +1 -1
- package/README.md +5 -5
- package/bin/background.mjs +995 -0
- package/bin/lock.mjs +121 -5
- package/bin/thursday.mjs +126 -30
- package/bin/tools.mjs +72 -1
- package/database/migrations/20260926021847_thread_cache_tokens/migration.sql +2 -0
- package/database/migrations/20260926021847_thread_cache_tokens/snapshot.json +1949 -0
- package/guide/bots.md +173 -317
- package/guide/calls.md +106 -146
- package/guide/index.md +2 -2
- package/guide/memory.md +14 -18
- package/guide/phone.md +86 -133
- package/guide/setup.md +141 -172
- package/guide/trouble.md +42 -65
- package/package.json +1 -1
- package/seed-skills/concierge/travel/references/itinerary.md +1 -1
- package/seed-skills/concierge/travel/scripts/itinerary.mjs +8 -3
- package/skills/artifact/references/book.md +3 -3
- package/skills/artifact/runtime/shell/shell.js +32 -3
- package/.next/server/app/api/llm-model/catalog/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/llm-model/catalog/route.js.nft.json +0 -1
- package/.next/server/app/api/llm-model/catalog/route_client-reference-manifest.js +0 -3
- package/.next/server/app/api/llm-model/credits/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/llm-model/credits/route.js.nft.json +0 -1
- package/.next/server/app/api/llm-model/credits/route_client-reference-manifest.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__01ypm_z._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__021dkui._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__03xamry._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__09gdscj._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__0ljizgj._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0nmust6._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__0svzjwa._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__1-rmal0._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__10xnb7e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1_h4hf9._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__1c2kwku._.js +0 -12
- package/.next/server/chunks/[root-of-the-server]__1t02-1p._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1t0jj1j._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1v7x5ym._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1vlxv19._.js +0 -5
- package/.next/server/chunks/_07nxi75._.js +0 -254
- package/.next/server/chunks/_08btiir._.js +0 -7
- package/.next/server/chunks/_0j0-gq6._.js +0 -5
- package/.next/server/chunks/_0p6v1fr._.js +0 -5
- package/.next/server/chunks/_0srlnvd._.js +0 -16
- package/.next/server/chunks/_0xygcxs._.js +0 -254
- package/.next/server/chunks/_1ic3bew._.js +0 -5
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_catalog_route_actions_1eu2y41.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_llm-model_credits_route_actions_0v424pb.js +0 -3
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_04oxl25._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0-af_o7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__09f39cp._.js +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__0ouu4qp._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0q9g9ea._.js +0 -5
- package/.next/server/chunks/ssr/[root-of-the-server]__17h1ggo._.js +0 -46
- package/.next/server/chunks/ssr/[root-of-the-server]__1jyeu61._.js +0 -5
- package/.next/server/chunks/ssr/_0afrpci._.js +0 -3
- package/.next/server/chunks/ssr/_0bgse1c._.js +0 -162
- package/.next/server/chunks/ssr/_0jstvlg._.js +0 -39
- package/.next/server/chunks/ssr/_0qsmpcu._.js +0 -3
- package/.next/server/chunks/ssr/_0z38nha._.js +0 -3
- package/.next/server/chunks/ssr/_1-41lck._.js +0 -3
- package/.next/server/chunks/ssr/_10_ph1t._.js +0 -3
- package/.next/server/chunks/ssr/_116lfdc._.js +0 -3
- package/.next/server/chunks/ssr/_14dfh7a._.js +0 -4
- package/.next/server/chunks/ssr/_17qtuv7._.js +0 -3
- package/.next/server/chunks/ssr/_19jez1a._.js +0 -3
- package/.next/server/chunks/ssr/_1_5xof_._.js +0 -3
- package/.next/server/chunks/ssr/_1alxym6._.js +0 -3
- package/.next/server/chunks/ssr/_1ou5sj0._.js +0 -3
- package/.next/server/chunks/ssr/_1tmw842._.js +0 -5
- package/.next/server/chunks/ssr/_1uij_rj._.js +0 -3
- package/.next/server/chunks/ssr/_1w9w1ok._.js +0 -3
- package/.next/server/chunks/ssr/_20gq_24._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_0ouemw8._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_@base-ui_react_1j9i1ho._.js +0 -3
- package/.next/static/chunks/01l7kw74vfp32.js +0 -1
- package/.next/static/chunks/0a5_-jqhaktjj.js +0 -1
- package/.next/static/chunks/0npvak0wpgagb.js +0 -1
- package/.next/static/chunks/19l81deo_pyoc.js +0 -1
- package/.next/static/chunks/1bnhw-5fj7aiz.js +0 -1
- package/.next/static/chunks/1in6nxpu33iab.js +0 -1
- package/.next/static/chunks/1u7kg91f9qy3g.js +0 -1
- package/.next/static/chunks/2ajs12-fcdwzm.js +0 -1
- package/.next/static/chunks/2i7qtmxc1kuqg.js +0 -1
- package/.next/static/chunks/2kz1f6r59nky0.js +0 -3
- package/.next/static/chunks/31kn4_h2rvf6k.css +0 -1
- package/.next/static/chunks/35jj-5u4te56r.js +0 -1
- package/.next/static/chunks/37ixzapa06xlo.js +0 -1
- package/.next/static/chunks/3jtcieuk1l6tw.js +0 -1
- package/.next/static/chunks/3k1d8y03t5nax.js +0 -58
- package/.next/static/chunks/3sla-dm1puqd1.js +0 -35
- package/.next/static/chunks/3t2c76awm9k_p.js +0 -1
- package/.next/static/chunks/3vrmcm31ih7gb.js +0 -1
- package/.next/static/chunks/3yiqr95d7ybeq.js +0 -15
- package/bin/autostart.mjs +0 -162
- /package/.next/server/app/api/{llm-model/catalog → bot/thread/file}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/{llm-model/catalog → bot/thread/file}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/{llm-model/catalog → bot/thread/file}/route.js.map +0 -0
- /package/.next/server/app/api/llm-model/{credits → catalog/[provider]}/route/build-manifest.json +0 -0
- /package/.next/server/app/api/llm-model/{credits → catalog/[provider]}/route/server-reference-manifest.json +0 -0
- /package/.next/server/app/api/llm-model/{credits → catalog/[provider]}/route.js.map +0 -0
- /package/.next/static/{8I2hKtciyA9LXvd8txuOz → YhaRHJqObuAcXZe5VLFs0}/_buildManifest.js +0 -0
- /package/.next/static/{8I2hKtciyA9LXvd8txuOz → YhaRHJqObuAcXZe5VLFs0}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{8I2hKtciyA9LXvd8txuOz → YhaRHJqObuAcXZe5VLFs0}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
module.exports=[839430,a=>a.a(async(b,c)=>{try{var d=a.i(666680),e=a.i(93321),f=a.i(
|
|
1
|
+
module.exports=[839430,a=>a.a(async(b,c)=>{try{var d=a.i(666680),e=a.i(93321),f=a.i(530385),g=a.i(258261),h=a.i(351674),i=a.i(203469),j=a.i(569572),k=a.i(184838),l=a.i(714428),m=a.i(762008),n=a.i(293480),o=a.i(446957),p=a.i(109955),q=b([k]);[k]=q.then?(await q)():q;let Q=()=>i.appEvents.emit({type:"threads"}),R=a=>"done"===a||"cancelled"===a,S=(a,b,c)=>`message:${(0,d.createHash)("sha256").update(JSON.stringify([a,b,c])).digest("hex")}`;async function r(a,b,c){let[d]=await a.select({id:l.threadWorkTable.id}).from(l.threadWorkTable).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,b),(0,e.eq)(l.threadWorkTable.state,"external"),(0,e.eq)(l.threadWorkTable.caller,c))).limit(1);return!!d}async function s(a,b,c){let d=c.flatMap(a=>"assistant"===a.role&&Array.isArray(a.content)?a.content.flatMap(a=>"tool-call"===a.type&&a.toolName===m.TOOL_NAMES.send_message?[a.toolCallId]:[]):[]),f=d.map(c=>S(a,b,c)),g=new Map;if(!f.length)return g;let[h,i]=await Promise.all([k.database.select({key:l.threadWorkTable.id,to:l.threadWorkTable.bot}).from(l.threadWorkTable).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.inArray)(l.threadWorkTable.id,f))),k.database.select({key:l.threadDeliveryTable.key,to:l.threadWorkTable.bot}).from(l.threadDeliveryTable).innerJoin(l.threadWorkTable,(0,e.eq)(l.threadWorkTable.id,l.threadDeliveryTable.workId)).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.threadId,a),(0,e.inArray)(l.threadDeliveryTable.key,f)))]),j=new Map([...h,...i].map(a=>[a.key,a.to]));for(let[a,b]of d.entries()){let c=j.get(f[a]);c&&g.set(b,{messageId:f[a],to:c})}return g}async function t(a,b,c){let[d]=await a.select({seq:(0,g.max)(l.threadMessageTable.seq)}).from(l.threadMessageTable).where((0,e.eq)(l.threadMessageTable.threadId,b)),f=(d?.seq??-1)+1;return await a.insert(l.threadMessageTable).values({threadId:b,seq:f,...c}),f}let T=(a,b)=>({bot:a.bot,parent:a.id,role:"user",content:`${b} ${p.RESUME_CHECK}`,note:!0});async function u(a,b){await v(a.threadId,T(a,b))}async function v(a,b){let c=await k.database.transaction(c=>t(c,a,b));return Q(),c}async function w(a){return k.database.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a)).orderBy(l.threadWorkTable.createdAt,l.threadWorkTable.id)}async function x(a,b){let[c]=await k.database.select({budget:h.sql`min(nullif(${l.threadWorkTable.contextBudget}, 0))`}).from(l.threadWorkTable).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.eq)(l.threadWorkTable.bot,b)));return c?.budget??void 0}async function y(a,b){await k.database.transaction(async c=>{await z(c,a),await c.update(l.threadWorkTable).set({contextBudget:b}).where((0,e.eq)(l.threadWorkTable.id,a.id))}),Q()}async function z(a,b){let[c]=await a.select().from(l.threadWorkTable).where((0,e.and)((0,e.eq)(l.threadWorkTable.id,b.id),(0,e.eq)(l.threadWorkTable.generation,b.generation),(0,e.eq)(l.threadWorkTable.state,"running")));return c||(0,n.publicError)("This turn is no longer running."),c}async function A(a,b){await a.insert(l.threadDeliveryTable).values(b).onConflictDoNothing();let[c]=await a.select({bot:l.threadWorkTable.bot}).from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.id,b.workId));c&&await r(a,b.threadId,c.bot)||await a.update(l.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(l.threadWorkTable.id,b.workId),(0,e.inArray)(l.threadWorkTable.state,["waiting","done"])))}async function B(a,b){let c={...p.RoomMessageSchema.parse(b),id:b.id};"question"===c.kind&&c.to!==p.ROOM_THURSDAY&&(0,n.publicError)("Address user questions to Thursday; use a message to contact another bot."),c.options?.length&&"question"!==c.kind&&(0,n.publicError)("Offer answer choices only with a user question.");let d=await k.database.transaction(async b=>{await z(b,a);let d=S(a.threadId,a.bot,c.id),[f]=await b.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.id,d));if(f)return{messageId:d,to:f.bot};let[g]=await b.select({to:l.threadWorkTable.bot}).from(l.threadDeliveryTable).innerJoin(l.threadWorkTable,(0,e.eq)(l.threadWorkTable.id,l.threadDeliveryTable.workId)).where((0,e.eq)(l.threadDeliveryTable.key,d));if(g)return{messageId:d,to:g.to};c.to===a.bot&&(0,n.publicError)("Continue your own work directly; choose another recipient."),c.to!==p.ROOM_THURSDAY&&c.to===a.caller&&(0,n.publicError)(`${c.to} is who you are answering. End your turn and your final text goes to ${c.to}: the answer, or the question you need settled first.`);let h=await b.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a.threadId)),i=h.filter(b=>b.bot===c.to&&b.caller===a.bot&&c.to!==p.ROOM_THURSDAY&&!R(b.state)),k=i.find(a=>"running"===a.state)??i[0];if(k){let f=await r(b,a.threadId,c.to);return await A(b,{key:d,threadId:a.threadId,workId:k.id,speaker:a.bot,text:c.text}),await b.update(l.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a.threadId)),{messageId:d,to:c.to,note:f?`${c.to} is waiting for the user's answer and reads this after it.`:`${c.to} is already working for you and reads this before its next step. Its one answer covers both.`}}let m=new Set(h.map(a=>a.bot).filter(a=>a!==p.ROOM_THURSDAY));c.to!==p.ROOM_THURSDAY&&!m.has(c.to)&&m.size>=j.BOT_RUN.participants&&(0,n.publicError)("This thread has reached its participant limit."),h.filter(a=>!R(a.state)).length>=j.BOT_RUN.queuedMessages&&(0,n.publicError)("This thread has reached its pending message limit.");let o=c.to!==p.ROOM_THURSDAY&&await r(b,a.threadId,c.to);return await b.insert(l.threadWorkTable).values({id:d,threadId:a.threadId,bot:c.to,caller:a.bot,parentId:a.id,state:c.to===p.ROOM_THURSDAY?"question"===c.kind?"external":"done":o?"waiting":"queued",result:c.to===p.ROOM_THURSDAY?c.text:null,options:[...new Set(c.options??[])]}),c.to===p.ROOM_THURSDAY?await b.insert(l.threadRelayTable).values({key:d,threadId:a.threadId,bot:a.bot,text:c.text,kind:c.kind,messageId:"question"===c.kind?d:null}):await A(b,{key:d,threadId:a.threadId,workId:d,speaker:a.bot,text:c.text}),await b.update(l.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a.threadId)),{messageId:d,to:c.to,...o?{note:`${c.to} is waiting for the user's answer and reads this after it.`}:{}}});return Q(),d}async function C(a){let b=!1,c=await k.database.transaction(async c=>{let[d]=await c.select().from(l.threadTable).where((0,e.eq)(l.threadTable.id,a));if(!d||"running"!==d.status)return null;let f=await c.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a)).orderBy(h.sql`${l.threadWorkTable}.rowid`),g=new Set(f.filter(a=>"external"===a.state).map(a=>a.caller));for(let a of f)"queued"===a.state&&g.has(a.bot)&&(await c.update(l.threadWorkTable).set({state:"waiting"}).where((0,e.eq)(l.threadWorkTable.id,a.id)),a.state="waiting",b=!0);let i=f.filter(a=>"running"===a.state);if(i.length>=j.BOT_RUN.concurrent)return null;let k=f.find(a=>"queued"===a.state&&!i.some(b=>b.bot===a.bot));if(!k)return null;if(d.turns>=j.BOT_RUN.turns)return await c.update(l.threadWorkTable).set({state:"paused"}).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.eq)(l.threadWorkTable.state,"queued"))),null;let[m]=await c.update(l.threadWorkTable).set({state:"running",generation:k.generation+1}).where((0,e.eq)(l.threadWorkTable.id,k.id)).returning();return await c.update(l.threadTable).set({turns:d.turns+1}).where((0,e.eq)(l.threadTable.id,a)),m});return(c||b)&&Q(),c}async function D(a,b){let c=await k.database.transaction(async c=>{let[d]=await c.select({id:l.threadDeliveryTable.id}).from(l.threadDeliveryTable).innerJoin(l.threadWorkTable,(0,e.eq)(l.threadWorkTable.id,l.threadDeliveryTable.workId)).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.key,b),(0,e.eq)(l.threadDeliveryTable.threadId,a),(0,e.eq)(l.threadDeliveryTable.visible,!0),(0,e.eq)(l.threadDeliveryTable.consumed,!1),(0,e.eq)(l.threadWorkTable.state,"running")));return!!d&&(await c.delete(l.threadDeliveryTable).where((0,e.eq)(l.threadDeliveryTable.id,d.id)),!0)});return c&&Q(),c}async function E(a){let b=await k.database.transaction(async b=>{await z(b,a);let c=await b.select().from(l.threadDeliveryTable).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.workId,a.id),(0,e.eq)(l.threadDeliveryTable.consumed,!1))).orderBy(l.threadDeliveryTable.id);for(let d of c){let c=F(d);await t(b,a.threadId,{bot:a.bot,parent:a.id,role:"user",content:c,hidden:!d.visible}),await b.update(l.threadDeliveryTable).set({consumed:!0}).where((0,e.eq)(l.threadDeliveryTable.id,d.id))}return c.map(F)});return b.length&&Q(),b}function F(a){return a.visible?(0,o.tagSpeaker)(a.speaker===p.ROOM_USER?"user":"thursday",a.text):`${a.speaker}:
|
|
2
2
|
|
|
3
|
-
${a.text}`}async function F(a,b){await j.database.transaction(async c=>{await y(c,a);let d=await c.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.parentId,a.id)),f=await c.select({id:k.threadDeliveryTable.id}).from(k.threadDeliveryTable).where((0,e.and)((0,e.eq)(k.threadDeliveryTable.workId,a.id),(0,e.eq)(k.threadDeliveryTable.consumed,!1))).limit(1),g=await q(c,a.threadId,a.bot),h=f.length&&!g?"queued":f.length||d.some(a=>!P(a.state))?"waiting":"done";if(await c.update(k.threadWorkTable).set({state:h,result:b}).where((0,e.eq)(k.threadWorkTable.id,a.id)),"done"!==h)return;if(a.parentId){let[d]=await c.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.id,a.parentId)),[f]=b?[]:await c.select({id:k.threadDeliveryTable.id}).from(k.threadDeliveryTable).where((0,e.and)((0,e.eq)(k.threadDeliveryTable.workId,a.parentId),(0,e.eq)(k.threadDeliveryTable.speaker,a.bot),(0,e.eq)(k.threadDeliveryTable.consumed,!1))).limit(1);d&&"cancelled"!==d.state&&!f&&await z(c,{key:`return:${a.id}:${a.generation}`,threadId:a.threadId,workId:d.id,speaker:a.bot,text:b||"This turn ended without a message."})}let[i]=await c.select().from(k.threadTable).where((0,e.eq)(k.threadTable.id,a.threadId)),j=await c.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.threadId,a.threadId));i&&a.bot===i.bot&&!a.parentId&&j.every(a=>P(a.state))&&(await c.update(k.threadTable).set({status:b?"done":"waiting",outcome:b||"The room is idle. Send a message to continue.",pending:b?null:{options:[n.THREAD_CONTINUE]},wrapped:!0,endedAt:b?new Date:null,seen:!1,updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a.threadId)),b&&await c.insert(k.threadRelayTable).values({key:`report:${a.threadId}:${i.generation}`,threadId:a.threadId,bot:a.bot,text:b,kind:"report"}).onConflictDoNothing())}),O()}async function G(a){await j.database.transaction(async b=>{let[c]=await b.select().from(k.threadTable).where((0,e.eq)(k.threadTable.id,a));if(!c||"running"!==c.status)return;let d=await b.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.threadId,a));if(d.some(a=>"queued"===a.state||"running"===a.state))return;let f=d.find(a=>"external"===a.state);if(f)return void await b.update(k.threadTable).set({status:"waiting",outcome:f.result,pending:{options:f.options,messageId:f.id,bot:f.caller},updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a));if(d.some(a=>!P(a.state))||c.wrapped)return void await b.update(k.threadTable).set({status:"waiting",outcome:c.turns>=i.BOT_RUN.turns?"The room reached its automatic turn limit. Continue from the saved conversation.":"Work is paused. Continue from the saved conversation.",pending:{options:[n.THREAD_CONTINUE]},updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a));let g=crypto.randomUUID();await b.insert(k.threadWorkTable).values({id:g,threadId:a,bot:c.bot,caller:o.ROOM_THURSDAY,state:"queued"}),await z(b,{key:g,threadId:a,workId:g,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await b.update(k.threadTable).set({wrapped:!0}).where((0,e.eq)(k.threadTable.id,a))}),O()}async function H(a,b){await j.database.transaction(async c=>{let d=await c.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.threadId,a));for(let f of d.filter(a=>"running"===a.state||"queued"===a.state))await c.update(k.threadWorkTable).set({state:"paused",generation:f.generation+1}).where((0,e.eq)(k.threadWorkTable.id,f.id)),await s(c,a,R(f,b));await c.update(k.threadTable).set({status:"waiting",outcome:b,pending:{options:[n.THREAD_CONTINUE]},seen:!1,endedAt:null,updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a)),await c.insert(k.threadRelayTable).values({key:crypto.randomUUID(),threadId:a,bot:d.find(a=>!a.parentId)?.bot??"Bot",text:b,kind:"interrupted"})}),O()}async function I(a){await j.database.transaction(async b=>{await b.update(k.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(k.threadWorkTable.threadId,a),(0,e.eq)(k.threadWorkTable.state,"paused"))),await b.update(k.threadTable).set({status:"running",generation:g.sql`${k.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a)),await b.update(k.threadRelayTable).set({accepted:!0}).where((0,e.and)((0,e.eq)(k.threadRelayTable.threadId,a),(0,e.eq)(k.threadRelayTable.kind,"interrupted")))}),O()}async function J(a,b,c){let d=a.select({workId:k.threadDeliveryTable.workId}).from(k.threadDeliveryTable).where((0,e.and)((0,e.eq)(k.threadDeliveryTable.threadId,b),(0,e.eq)(k.threadDeliveryTable.consumed,!1)));await a.update(k.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(k.threadWorkTable.threadId,b),(0,e.eq)(k.threadWorkTable.bot,c),(0,e.inArray)(k.threadWorkTable.state,["waiting","done"]),(0,e.inArray)(k.threadWorkTable.id,d)))}async function K(a,b,c,d,f,h=!0){let i=await j.database.transaction(async i=>{let[j]=await i.select().from(k.threadTable).where((0,e.eq)(k.threadTable.id,a));j||(0,m.publicError)("No such thread.");let l=await i.select().from(k.threadWorkTable).where((0,e.eq)(k.threadWorkTable.threadId,a)).orderBy(k.threadWorkTable.createdAt),n=l.filter(a=>"external"===a.state),p=f?n.find(a=>a.id===f)??(0,m.publicError)("That question is no longer waiting for an answer."):h?function(a,b){let c=b?a.filter(a=>a.caller===b):a;if(c.length<=1)return c[0];(0,m.publicError)(`Several questions are waiting for an answer: ${c.map(a=>`${a.caller} (replyTo ${a.id}): “${(a.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by its replyTo.`)}(n,d):void 0,r=p?.caller??d??j.bot,s=p?l.find(a=>a.id===p.parentId):l.find(a=>a.bot===r&&"running"===a.state)??l.find(a=>a.bot===r&&!P(a.state)&&"external"!==a.state);if(p&&(await i.update(k.threadWorkTable).set({state:"done",result:b}).where((0,e.eq)(k.threadWorkTable.id,p.id)),await i.update(k.threadRelayTable).set({accepted:!0}).where((0,e.eq)(k.threadRelayTable.messageId,p.id))),!s){let b=null;if(r!==j.bot){let c=l.findLast(a=>a.bot===j.bot&&!a.parentId&&"cancelled"!==a.state);c?"done"===c.state&&await i.update(k.threadWorkTable).set({state:"waiting"}).where((0,e.eq)(k.threadWorkTable.id,c.id)):c=(await i.insert(k.threadWorkTable).values({id:crypto.randomUUID(),threadId:a,bot:j.bot,caller:o.ROOM_THURSDAY,state:"waiting"}).returning())[0],b=c.id}s=(await i.insert(k.threadWorkTable).values({id:crypto.randomUUID(),threadId:a,bot:r,caller:b?j.bot:o.ROOM_THURSDAY,parentId:b,state:"queued"}).returning())[0]}p&&await z(i,{key:`answer:${p.id}`,threadId:a,workId:s.id,speaker:"Thread activity",text:`The next message answers your question to the user: “${p.result??""}”`});let t=crypto.randomUUID();return await z(i,{key:t,threadId:a,workId:s.id,speaker:c,text:b,visible:!0}),p&&!await q(i,a,r)&&await J(i,a,r),await i.update(k.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(k.threadWorkTable.threadId,a),(0,e.eq)(k.threadWorkTable.state,"paused"))),await i.update(k.threadTable).set({status:"running",generation:g.sql`${k.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,e.eq)(k.threadTable.id,a)),await i.update(k.threadRelayTable).set({accepted:!0}).where((0,e.and)((0,e.eq)(k.threadRelayTable.threadId,a),(0,e.inArray)(k.threadRelayTable.kind,["interrupted","report"]))),{key:t,to:r,answered:p?{bot:p.caller,question:p.result??""}:null}});return O(),i}async function L(a){await j.database.transaction(async b=>{await b.update(k.threadWorkTable).set({state:"cancelled",generation:g.sql`${k.threadWorkTable.generation} + 1`}).where((0,e.and)((0,e.eq)(k.threadWorkTable.threadId,a),(0,e.inArray)(k.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await b.update(k.threadRelayTable).set({accepted:!0}).where((0,e.eq)(k.threadRelayTable.threadId,a))}),O()}async function M(a,b){let[c]=await j.database.select({bot:k.threadTable.bot}).from(k.threadTable).where((0,e.eq)(k.threadTable.id,a)),d=await j.database.select().from(k.threadMessageTable).where((0,e.and)((0,e.eq)(k.threadMessageTable.threadId,a),(0,e.or)((0,e.eq)(k.threadMessageTable.bot,b),c?.bot===b?g.sql`${k.threadMessageTable.bot} is null AND ${k.threadMessageTable.parent} is null`:void 0))).orderBy(k.threadMessageTable.seq),f=d.findLastIndex(a=>a.compact);return(f>0?[d[0],...d.slice(f)]:d).map(a=>({role:a.role,content:a.content}))}async function N(a){a.length&&(await j.database.update(k.threadRelayTable).set({accepted:!0}).where((0,e.inArray)(k.threadRelayTable.id,a)),O())}a.s(["acceptRoomRelays",0,N,"appendRoomMessage",0,u,"cancelRoom",0,L,"claimRoomWork",0,B,"consumeRoomInbox",0,D,"finishRoomWork",0,F,"listParticipantTranscript",0,M,"listRoomReceipts",0,r,"listRoomWork",0,v,"lowerRoomContextBudget",0,x,"messageKey",0,Q,"noteRoomBreak",0,t,"pauseRoom",0,H,"resumeRoom",0,I,"roomContextBudget",0,w,"sendRoomMessage",0,A,"settleRoom",0,G,"tellRoom",0,K,"withdrawDelivery",0,C]),c()}catch(a){c(a)}},!1),344853,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(351674),g=a.i(203469),h=a.i(148016),i=a.i(569572),j=a.i(184838),k=a.i(714428),l=a.i(762008),m=a.i(182248),n=a.i(446957),o=a.i(839430),p=a.i(109955),q=b([j,o]);[j,o]=q.then?(await q)():q;let R=()=>g.appEvents.emit({type:"threads"}),S={id:k.threadTable.id,bot:k.threadTable.bot,label:k.threadTable.label,request:k.threadTable.request,status:k.threadTable.status,outcome:k.threadTable.outcome,pending:k.threadTable.pending,seen:k.threadTable.seen,routineId:k.threadTable.routineId,inputTokens:k.threadTable.inputTokens,outputTokens:k.threadTable.outputTokens,contextTokens:k.threadTable.contextTokens,contextBudget:k.threadTable.contextBudget,createdAt:k.threadTable.createdAt,updatedAt:k.threadTable.updatedAt};async function r(a){let{opening:b,...c}=a,d=await j.database.transaction(async a=>{let[d]=await a.insert(k.threadTable).values({id:crypto.randomUUID(),status:"running",...c}).returning();return await a.insert(k.threadMessageTable).values({threadId:d.id,seq:0,bot:null,parent:null,role:"user",content:b,compact:!1,note:!1}),await a.insert(k.threadWorkTable).values({id:crypto.randomUUID(),threadId:d.id,bot:d.bot,caller:p.ROOM_THURSDAY,state:"queued"}),d});return R(),d}async function s(a,b){await j.database.update(k.threadTable).set({...b,updatedAt:new Date}).where((0,d.eq)(k.threadTable.id,a)),R()}async function t(a){0!==a.length&&(await j.database.transaction(async b=>{await b.update(k.threadTable).set({seen:!0}).where((0,d.inArray)(k.threadTable.id,a)),await b.update(k.threadRelayTable).set({accepted:!0}).where((0,d.inArray)(k.threadRelayTable.threadId,a))}),R())}async function u(a,b,c=null){(b.input||b.output||null!==c)&&(await j.database.update(k.threadTable).set({inputTokens:f.sql`${k.threadTable.inputTokens} + ${b.input}`,outputTokens:f.sql`${k.threadTable.outputTokens} + ${b.output}`,...null===c?{}:{contextTokens:c.tokens,contextBudget:c.budget}}).where((0,d.eq)(k.threadTable.id,a)),R())}async function v(a){let[b]=await j.database.select(S).from(k.threadTable).where((0,d.eq)(k.threadTable.id,a));if(!b)return null;let[c]=await L([b]);return c??null}async function w(a){let[b]=await j.database.select().from(k.threadTable).where((0,d.eq)(k.threadTable.id,a));return b??null}async function x(){let[a,b,c,f]=await Promise.all([j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.status,["running","waiting"])).orderBy((0,e.desc)(k.threadTable.updatedAt)),j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.status,["done","cancelled"])).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(i.INBOX_FINISHED),j.database.select(S).from(k.threadTable).where((0,d.and)((0,d.inArray)(k.threadTable.status,["done","cancelled"]),(0,d.eq)(k.threadTable.seen,!1))),j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.id,j.database.select({id:k.threadRelayTable.threadId}).from(k.threadRelayTable).where((0,d.eq)(k.threadRelayTable.accepted,!1))))]),g=[...new Map([...a,...b,...c,...f].map(a=>[a.id,a])).values()].sort((a,b)=>b.updatedAt.getTime()-a.updatedAt.getTime());return L(g,a=>{let b;return b=a.status,"running"===b||"waiting"===b})}async function y(){let a=await j.database.select(S).from(k.threadTable).orderBy(f.sql`case when ${k.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,e.desc)(k.threadTable.updatedAt),(0,e.desc)(k.threadTable.id)).limit(i.THREAD_STATUS_LIMIT);return L(a)}async function z(a){return a.length?await j.database.select({id:k.threadTable.id,callId:k.threadTable.callId,label:k.threadTable.label,status:k.threadTable.status,outcome:k.threadTable.outcome}).from(k.threadTable).where((0,d.inArray)(k.threadTable.callId,a)).orderBy(k.threadTable.createdAt):[]}async function A(a,b){let c=(c,f)=>j.database.select({id:k.threadTable.id,owner:k.threadTable.bot,label:k.threadTable.label,status:k.threadTable.status,pending:k.threadTable.pending,updatedAt:k.threadTable.updatedAt}).from(k.threadTable).where((0,d.and)((0,d.inArray)(k.threadTable.status,c),b?(0,d.ne)(k.threadTable.id,b):void 0,(0,d.inArray)(k.threadTable.id,j.database.select({id:k.threadWorkTable.threadId}).from(k.threadWorkTable).where((0,d.eq)(k.threadWorkTable.bot,a))))).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(f),[f,g]=await Promise.all([c(["running","waiting"],i.BOT_WORK.open),c(["done","cancelled"],i.BOT_WORK.recent)]),h=[...f,...g].map(a=>a.id);if(!h.length)return{open:[],recent:[]};let l=await j.database.select({id:k.threadWorkTable.id,threadId:k.threadWorkTable.threadId,result:k.threadWorkTable.result}).from(k.threadWorkTable).where((0,d.and)((0,d.eq)(k.threadWorkTable.bot,a),(0,d.inArray)(k.threadWorkTable.threadId,h),(0,d.isNotNull)(k.threadWorkTable.result))).orderBy((0,e.desc)(k.threadWorkTable.createdAt)),m=new Map;for(let{id:a,threadId:b,result:c}of l)c?.trim()&&!m.has(b)&&m.set(b,{workId:a,words:c});let n=({pending:a,...b})=>{let c=m.get(b.id);return{...b,workId:c?.workId??null,asking:"waiting"===b.status&&!!a?.messageId,said:c?.words??null,cut:!!c&&c.words.replace(/\s+/g," ").trim().length>i.BOT_WORK.said}};return{open:f.map(n),recent:g.map(n)}}async function B(a,b){if(b.owner===a){let[a]=await j.database.select({request:k.threadTable.request}).from(k.threadTable).where((0,d.eq)(k.threadTable.id,b.id));return a?.request??""}return b.workId?(await j.database.select({text:k.threadDeliveryTable.text}).from(k.threadDeliveryTable).where((0,d.eq)(k.threadDeliveryTable.workId,b.workId)).orderBy(k.threadDeliveryTable.id)).map(a=>a.text).join("\n\n"):""}async function C(a){let b=await j.database.delete(k.threadTable).where((0,d.eq)(k.threadTable.id,a)).returning({id:k.threadTable.id});return b.length&&R(),b.length>0}async function D(){return(await j.database.select({id:k.threadTable.id}).from(k.threadTable).orderBy((0,e.desc)(k.threadTable.createdAt))).map(a=>a.id)}async function E(){return(await j.database.select({id:k.threadTable.id}).from(k.threadTable).where((0,d.eq)(k.threadTable.status,"running"))).map(a=>a.id)}async function F(){return await j.database.select({id:k.threadTable.id,label:k.threadTable.label,status:k.threadTable.status,endedAt:k.threadTable.endedAt,updatedAt:k.threadTable.updatedAt}).from(k.threadTable)}function G(a){let b=new Set;for(let c of a)if(Array.isArray(c))for(let a of c){if("tool-call"!==a.type||a.toolName!==l.TOOL_NAMES.write_file)continue;let c=a.input?.path;"string"==typeof c&&c.trim()&&(b.delete(c.trim()),b.add(c.trim()))}return[...b]}async function H(a){let b=await j.database.select({content:k.threadMessageTable.content}).from(k.threadMessageTable).where((0,d.and)((0,d.eq)(k.threadMessageTable.threadId,a),(0,d.eq)(k.threadMessageTable.role,"assistant"))).orderBy(k.threadMessageTable.seq);return G(b.map(a=>a.content))}async function I(a){let b=a.trim();if(!b)return null;let c=await w(b);if(c)return c;let d=b.toLowerCase();return(await j.database.select().from(k.threadTable).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(i.THREAD_LABEL_REACH)).find(a=>a.label.toLowerCase()===d)??null}async function J(a,b,c){await j.database.insert(k.threadMessageTable).values({threadId:a,seq:b,...c,compact:c.compact??!1,note:c.note??!1}).onConflictDoUpdate({target:[k.threadMessageTable.threadId,k.threadMessageTable.seq],set:{role:c.role,content:c.content,compact:c.compact??!1,note:c.note??!1}}),R()}async function K(a,b){b.length&&(await j.database.delete(k.threadMessageTable).where((0,d.and)((0,d.eq)(k.threadMessageTable.threadId,a),(0,d.inArray)(k.threadMessageTable.seq,b))),R())}async function L(a,b=()=>!0){if(0===a.length)return[];let c=a.filter(b).map(a=>a.id),e=c.length?await j.database.select().from(k.threadMessageTable).where((0,d.inArray)(k.threadMessageTable.threadId,c)).orderBy(k.threadMessageTable.seq):[],f=a.map(a=>a.id),[g,h,i]=await Promise.all([j.database.select().from(k.threadWorkTable).where((0,d.inArray)(k.threadWorkTable.threadId,f)),j.database.select().from(k.threadDeliveryTable).where((0,d.and)((0,d.inArray)(k.threadDeliveryTable.threadId,f),(0,d.eq)(k.threadDeliveryTable.visible,!0))),j.database.select().from(k.threadRelayTable).where((0,d.and)((0,d.inArray)(k.threadRelayTable.threadId,f),(0,d.eq)(k.threadRelayTable.accepted,!1)))]),q=new Map(a.map(a=>[a.id,a.bot])),r=new Map(g.map(a=>[a.id,a.caller])),s=new Map;for(let a of e){let b=s.get(a.threadId)??[];b.push(...function(a,b){if(a.hidden)return[];let c={seq:a.seq,bot:a.bot,parent:a.parent,to:"user"===a.role?a.bot:b,at:a.createdAt},d=b=>`${a.id}-${b}`,e=a.content;if("user"===a.role){if(0===a.seq)return[];let b="string"==typeof e?e:e.flatMap(a=>"text"===a.type&&a.text?[a.text]:[]).join("\n").trim();if(!b)return[];if(a.compact)return[{...c,id:d(0),kind:"note",text:b}];if(a.note){let a=b.endsWith(p.RESUME_CHECK)?b.slice(0,-p.RESUME_CHECK.length).trimEnd():b;return[{...c,id:d(0),kind:"stop",text:a}]}return[{...c,id:d(0),kind:"user",text:(0,n.untagSpeaker)(b)}]}if("assistant"===a.role){let b=a.content;if("string"==typeof b)return b.trim()?[{...c,id:d(0),kind:"text",text:b.trim()}]:[];let e=[];return b.forEach((b,f)=>{if("text"===b.type){let a=b.text.trim();a&&e.push({...c,id:d(f),kind:"text",text:a});return}if("tool-result"===b.type)return void e.push(P(c,d(f),b));if("tool-call"!==b.type)return;let g=b.input??{};if(b.toolName===l.TOOL_NAMES.send_message){let h;e.push({...c,id:d(f),kind:"ask",callId:b.toolCallId,to:(h=String(g.to??"").trim()).toLowerCase()===p.ROOM_THURSDAY.toLowerCase()?p.ROOM_THURSDAY:h,text:String(g.text??""),question:"question"===g.kind,..."question"===g.kind&&a.bot?{questionId:(0,o.messageKey)(a.threadId,a.bot,b.toolCallId)}:{}})}else b.toolName===l.TOOL_NAMES.bash?e.push({...c,id:d(f),kind:"tool",callId:b.toolCallId,name:b.toolName,input:(0,m.clip)(String(g.command??""),120),note:M(g)}):e.push({...c,id:d(f),kind:"tool",callId:b.toolCallId,name:b.toolName,input:N(b.toolName,g),note:M(g),path:b.toolName===l.TOOL_NAMES.write_file?U(g,"path")??null:null})}),e}if("tool"===a.role){let b=[];return a.content.forEach((a,e)=>{"tool-result"!==a.type||(a.toolName!==l.TOOL_NAMES.send_message||"error-text"===a.output.type)&&b.push(P(c,d(e),a))}),b}return[]}(a,(a.parent?r.get(a.parent):null)??q.get(a.threadId)??"")),s.set(a.threadId,b)}return a.map(a=>{let b=g.filter(b=>b.threadId===a.id),c=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(b.map(a=>a.bot))].filter(a=>a!==p.ROOM_THURSDAY).map(a=>({bot:a,state:b.filter(b=>b.bot===a).sort((a,b)=>c.indexOf(a.state)-c.indexOf(b.state))[0].state}));return{...function(a,b){let{pending:c,inputTokens:d,outputTokens:e,...f}=a;return{...f,ask:"waiting"===a.status?{question:a.outcome??"",options:c?.options??[],messageId:c?.messageId,bot:c?.bot}:null,tokens:{input:d,output:e},lines:b}}(a,s.get(a.id)??[]),room:{participants:d,questions:b.filter(a=>"external"===a.state).map(a=>({id:a.id,bot:a.caller,text:a.result??"",options:a.options})),deliveries:h.filter(b=>b.threadId===a.id).map(c=>({id:c.key,bot:b.find(a=>a.id===c.workId)?.bot??a.bot,text:c.text,delivered:c.consumed})),relays:i.filter(b=>b.threadId===a.id)}}})}let T=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],U=(a,b)=>{let c=a[b];return"string"==typeof c&&c.trim()?c:null};function M(a){let b=U(a,"description");return b?(0,m.clip)(b,120):null}function N(a,b){let c=b??{};if("object"!=typeof c||Array.isArray(c))return(0,m.clip)(String(b??""),120);if(a===l.TOOL_NAMES.bash)return M(c)??(0,m.clip)(String(c.command??""),120);if(a===l.TOOL_NAMES.tool_call||a===l.TOOL_NAMES.tool_search){let a=Array.isArray(c.tools)?c.tools.map(String).join(", "):String(c.tool??""),b=c.args??null,d=b&&"object"==typeof b?String(c.server??"")===i.STUDIO_SERVER?O(b):JSON.stringify(b):"";return(0,m.clip)([String(c.server??""),a,d].filter(Boolean).join(" "),120)}let d=O(c);return d?(0,m.clip)(d,120):Object.keys(c).length?(0,m.clip)(JSON.stringify(c),120):""}function O(a){for(let b of T){let c=U(a,b);if(c)return c}for(let b of Object.keys(a)){let c=U(a,b);if(c)return c}return""}let V=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,W=" — ";function P(a,b,c){let d=c.toolName===l.TOOL_NAMES.web_search,e=function a(b,c,d=!1){var e;if(null==b)return[];if("string"==typeof b)return Q(b,c,d);if("object"!=typeof b)return Q(String(b),c,d);switch(b.type){case"text":case"error-text":return Q(String(b.value??""),c,d);case"json":case"error-json":return a(b.value,c,d);case"execution-denied":return Q("Denied.",c,d);case"content":{if(!Array.isArray(b.value))return[];let a=[];for(let e of b.value){if("text"===e.type&&"string"==typeof e.text){a.push(...Q(e.text,c,d));continue}let b=function(a){let b=String(a.mediaType??"");if(!b.startsWith("image/"))return null;let c=a.data;return"string"==typeof c?`data:${b};base64,${c}`:c?.type==="url"&&c.url?c.url:c?.type==="data"&&"string"==typeof c.data?`data:${b};base64,${c.data}`:null}(e);b&&a.push({type:"image",src:b})}return a}}return"string"==typeof b.path&&String(b.mediaType??"").startsWith("image/")?[{type:"text",text:b.path},{type:"image",src:h.queryKey.file(b.path)}]:Array.isArray(b.sources)?b.sources.map(a=>String(a?.title??"")).filter(Boolean).slice(0,c).map(a=>({type:"text",text:a})):"string"==typeof b.stdout?Q(b.stdout||String(b.stderr??""),c,d):"string"==typeof b.answer?Q(b.answer,c,d):Q(d?(e=b,Array.isArray(e)?JSON.stringify(e,null,2):Object.entries(e).map(([a,b])=>"string"==typeof b&&b.includes("\n")?`${a}:
|
|
3
|
+
${a.text}`}async function G(a,b){await k.database.transaction(async c=>{await z(c,a);let d=await c.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.parentId,a.id)),f=await c.select({id:l.threadDeliveryTable.id}).from(l.threadDeliveryTable).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.workId,a.id),(0,e.eq)(l.threadDeliveryTable.consumed,!1))).limit(1),g=await r(c,a.threadId,a.bot),h=f.length&&!g?"queued":f.length||d.some(a=>!R(a.state))?"waiting":"done";if(await c.update(l.threadWorkTable).set({state:h,result:b}).where((0,e.eq)(l.threadWorkTable.id,a.id)),"done"!==h)return;if(a.parentId){let[d]=await c.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.id,a.parentId)),[f]=b?[]:await c.select({id:l.threadDeliveryTable.id}).from(l.threadDeliveryTable).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.workId,a.parentId),(0,e.eq)(l.threadDeliveryTable.speaker,a.bot),(0,e.eq)(l.threadDeliveryTable.consumed,!1))).limit(1);d&&"cancelled"!==d.state&&!f&&await A(c,{key:`return:${a.id}:${a.generation}`,threadId:a.threadId,workId:d.id,speaker:a.bot,text:b||"This turn ended without a message."})}let[i]=await c.select().from(l.threadTable).where((0,e.eq)(l.threadTable.id,a.threadId)),j=await c.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a.threadId));i&&a.bot===i.bot&&!a.parentId&&j.every(a=>R(a.state))&&(await c.update(l.threadTable).set({status:b?"done":"waiting",outcome:b||"The room is idle. Send a message to continue.",pending:b?null:{options:[o.THREAD_CONTINUE]},wrapped:!0,endedAt:b?new Date:null,seen:!1,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a.threadId)),b&&await c.insert(l.threadRelayTable).values({key:`report:${a.threadId}:${i.generation}`,threadId:a.threadId,bot:a.bot,text:b,kind:"report"}).onConflictDoNothing())}),Q()}async function H(a){await k.database.transaction(async b=>{let[c]=await b.select().from(l.threadTable).where((0,e.eq)(l.threadTable.id,a));if(!c||"running"!==c.status)return;let d=await b.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a));if(d.some(a=>"queued"===a.state||"running"===a.state))return;let f=d.find(a=>"external"===a.state);if(f)return void await b.update(l.threadTable).set({status:"waiting",outcome:f.result,pending:{options:f.options,messageId:f.id,bot:f.caller},updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a));if(d.some(a=>!R(a.state))||c.wrapped)return void await b.update(l.threadTable).set({status:"waiting",outcome:c.turns>=j.BOT_RUN.turns?"The room reached its automatic turn limit. Continue from the saved conversation.":"Work is paused. Continue from the saved conversation.",pending:{options:[o.THREAD_CONTINUE]},updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a));let g=crypto.randomUUID();await b.insert(l.threadWorkTable).values({id:g,threadId:a,bot:c.bot,caller:p.ROOM_THURSDAY,state:"queued"}),await A(b,{key:g,threadId:a,workId:g,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await b.update(l.threadTable).set({wrapped:!0}).where((0,e.eq)(l.threadTable.id,a))}),Q()}async function I(a,b){await k.database.transaction(async c=>{let d=await c.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a));for(let f of d.filter(a=>"running"===a.state||"queued"===a.state))await c.update(l.threadWorkTable).set({state:"paused",generation:f.generation+1}).where((0,e.eq)(l.threadWorkTable.id,f.id)),await t(c,a,T(f,b));await c.update(l.threadTable).set({status:"waiting",outcome:b,pending:{options:[o.THREAD_CONTINUE]},seen:!1,endedAt:null,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a)),await c.insert(l.threadRelayTable).values({key:crypto.randomUUID(),threadId:a,bot:d.find(a=>!a.parentId)?.bot??"Bot",text:b,kind:"interrupted"})}),Q()}async function J(a){await k.database.transaction(async b=>{await b.update(l.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.eq)(l.threadWorkTable.state,"paused"))),await b.update(l.threadTable).set({status:"running",generation:h.sql`${l.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a)),await b.update(l.threadRelayTable).set({accepted:!0}).where((0,e.and)((0,e.eq)(l.threadRelayTable.threadId,a),(0,e.eq)(l.threadRelayTable.kind,"interrupted")))}),Q()}async function K(a,b,c){let d=a.select({workId:l.threadDeliveryTable.workId}).from(l.threadDeliveryTable).where((0,e.and)((0,e.eq)(l.threadDeliveryTable.threadId,b),(0,e.eq)(l.threadDeliveryTable.consumed,!1)));await a.update(l.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,b),(0,e.eq)(l.threadWorkTable.bot,c),(0,e.inArray)(l.threadWorkTable.state,["waiting","done"]),(0,e.inArray)(l.threadWorkTable.id,d)))}async function L(a,b,c,d,f,g=!0){let i=await k.database.transaction(async i=>{let[j]=await i.select().from(l.threadTable).where((0,e.eq)(l.threadTable.id,a));j||(0,n.publicError)("No such thread.");let k=await i.select().from(l.threadWorkTable).where((0,e.eq)(l.threadWorkTable.threadId,a)).orderBy(l.threadWorkTable.createdAt),m=k.filter(a=>"external"===a.state),o=f?m.find(a=>a.id===f)??(0,n.publicError)("That question is no longer waiting for an answer."):g?function(a,b){let c=b?a.filter(a=>a.caller===b):a;if(c.length<=1)return c[0];(0,n.publicError)(`Several questions are waiting for an answer: ${c.map(a=>`${a.caller} (replyTo ${a.id}): “${(a.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by its replyTo.`)}(m,d):void 0,q=o?.caller??d??j.bot,s=o?k.find(a=>a.id===o.parentId):k.find(a=>a.bot===q&&"running"===a.state)??k.find(a=>a.bot===q&&!R(a.state)&&"external"!==a.state);if(o&&(await i.update(l.threadWorkTable).set({state:"done",result:b}).where((0,e.eq)(l.threadWorkTable.id,o.id)),await i.update(l.threadRelayTable).set({accepted:!0}).where((0,e.eq)(l.threadRelayTable.messageId,o.id))),!s){let b=null;if(q!==j.bot){let c=k.findLast(a=>a.bot===j.bot&&!a.parentId&&"cancelled"!==a.state);c?"done"===c.state&&await i.update(l.threadWorkTable).set({state:"waiting"}).where((0,e.eq)(l.threadWorkTable.id,c.id)):c=(await i.insert(l.threadWorkTable).values({id:crypto.randomUUID(),threadId:a,bot:j.bot,caller:p.ROOM_THURSDAY,state:"waiting"}).returning())[0],b=c.id}s=(await i.insert(l.threadWorkTable).values({id:crypto.randomUUID(),threadId:a,bot:q,caller:b?j.bot:p.ROOM_THURSDAY,parentId:b,state:"queued"}).returning())[0]}o&&await A(i,{key:`answer:${o.id}`,threadId:a,workId:s.id,speaker:"Thread activity",text:`The next message answers your question to the user: “${o.result??""}”`});let t=crypto.randomUUID();return await A(i,{key:t,threadId:a,workId:s.id,speaker:c,text:b,visible:!0}),o&&!await r(i,a,q)&&await K(i,a,q),await i.update(l.threadWorkTable).set({state:"queued"}).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.eq)(l.threadWorkTable.state,"paused"))),await i.update(l.threadTable).set({status:"running",generation:h.sql`${l.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,e.eq)(l.threadTable.id,a)),await i.update(l.threadRelayTable).set({accepted:!0}).where((0,e.and)((0,e.eq)(l.threadRelayTable.threadId,a),(0,e.inArray)(l.threadRelayTable.kind,["interrupted","report"]))),{key:t,to:q,answered:o?{bot:o.caller,question:o.result??""}:null}});return Q(),i}async function M(a){await k.database.transaction(async b=>{await b.update(l.threadWorkTable).set({state:"cancelled",generation:h.sql`${l.threadWorkTable.generation} + 1`}).where((0,e.and)((0,e.eq)(l.threadWorkTable.threadId,a),(0,e.inArray)(l.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await b.update(l.threadRelayTable).set({accepted:!0}).where((0,e.eq)(l.threadRelayTable.threadId,a))}),Q()}async function N(a,b){let[c]=await k.database.select({bot:l.threadTable.bot}).from(l.threadTable).where((0,e.eq)(l.threadTable.id,a)),d=await k.database.select().from(l.threadMessageTable).where((0,e.and)((0,e.eq)(l.threadMessageTable.threadId,a),(0,e.or)((0,e.eq)(l.threadMessageTable.bot,b),c?.bot===b?h.sql`${l.threadMessageTable.bot} is null AND ${l.threadMessageTable.parent} is null`:void 0))).orderBy(l.threadMessageTable.seq),f=d.findLastIndex(a=>a.compact);return(f>0?[d[0],...d.slice(f)]:d).map(a=>({role:a.role,content:a.content}))}async function O(a){return k.database.select({threadId:l.threadRelayTable.threadId,text:l.threadRelayTable.text}).from(l.threadRelayTable).where((0,e.and)((0,e.eq)(l.threadRelayTable.kind,"report"),h.sql`instr(${l.threadRelayTable.text}, ${a}) > 0`)).orderBy((0,f.desc)(l.threadRelayTable.id))}async function P(a){a.length&&(await k.database.update(l.threadRelayTable).set({accepted:!0}).where((0,e.inArray)(l.threadRelayTable.id,a)),Q())}a.s(["acceptRoomRelays",0,P,"appendRoomMessage",0,v,"cancelRoom",0,M,"claimRoomWork",0,C,"consumeRoomInbox",0,E,"finishRoomWork",0,G,"listParticipantTranscript",0,N,"listReportsNaming",0,O,"listRoomReceipts",0,s,"listRoomWork",0,w,"lowerRoomContextBudget",0,y,"messageKey",0,S,"noteRoomBreak",0,u,"pauseRoom",0,I,"resumeRoom",0,J,"roomContextBudget",0,x,"sendRoomMessage",0,B,"settleRoom",0,H,"tellRoom",0,L,"withdrawDelivery",0,D]),c()}catch(a){c(a)}},!1),344853,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(351674),g=a.i(203469),h=a.i(148016),i=a.i(569572),j=a.i(184838),k=a.i(714428),l=a.i(762008),m=a.i(182248),n=a.i(446957),o=a.i(839430),p=a.i(109955),q=b([j,o]);[j,o]=q.then?(await q)():q;let R=()=>g.appEvents.emit({type:"threads"}),S={id:k.threadTable.id,bot:k.threadTable.bot,label:k.threadTable.label,request:k.threadTable.request,status:k.threadTable.status,outcome:k.threadTable.outcome,pending:k.threadTable.pending,seen:k.threadTable.seen,routineId:k.threadTable.routineId,inputTokens:k.threadTable.inputTokens,outputTokens:k.threadTable.outputTokens,contextTokens:k.threadTable.contextTokens,contextBudget:k.threadTable.contextBudget,createdAt:k.threadTable.createdAt,updatedAt:k.threadTable.updatedAt};async function r(a){let{opening:b,...c}=a,d=await j.database.transaction(async a=>{let[d]=await a.insert(k.threadTable).values({id:crypto.randomUUID(),status:"running",...c}).returning();return await a.insert(k.threadMessageTable).values({threadId:d.id,seq:0,bot:null,parent:null,role:"user",content:b,compact:!1,note:!1}),await a.insert(k.threadWorkTable).values({id:crypto.randomUUID(),threadId:d.id,bot:d.bot,caller:p.ROOM_THURSDAY,state:"queued"}),d});return R(),d}async function s(a,b){await j.database.update(k.threadTable).set({...b,updatedAt:new Date}).where((0,d.eq)(k.threadTable.id,a)),R()}async function t(a){0!==a.length&&(await j.database.transaction(async b=>{await b.update(k.threadTable).set({seen:!0}).where((0,d.inArray)(k.threadTable.id,a)),await b.update(k.threadRelayTable).set({accepted:!0}).where((0,d.inArray)(k.threadRelayTable.threadId,a))}),R())}async function u(a,b,c=null){(b.input||b.output||null!==c)&&(await j.database.update(k.threadTable).set({inputTokens:f.sql`${k.threadTable.inputTokens} + ${b.input}`,outputTokens:f.sql`${k.threadTable.outputTokens} + ${b.output}`,cacheReadTokens:f.sql`${k.threadTable.cacheReadTokens} + ${b.cacheRead}`,cacheWriteTokens:f.sql`${k.threadTable.cacheWriteTokens} + ${b.cacheWrite}`,...null===c?{}:{contextTokens:c.tokens,contextBudget:c.budget}}).where((0,d.eq)(k.threadTable.id,a)),R())}async function v(a){let[b]=await j.database.select(S).from(k.threadTable).where((0,d.eq)(k.threadTable.id,a));if(!b)return null;let[c]=await L([b]);return c??null}async function w(a){let[b]=await j.database.select().from(k.threadTable).where((0,d.eq)(k.threadTable.id,a));return b??null}async function x(){let[a,b,c,f]=await Promise.all([j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.status,["running","waiting"])).orderBy((0,e.desc)(k.threadTable.updatedAt)),j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.status,["done","cancelled"])).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(i.INBOX_FINISHED),j.database.select(S).from(k.threadTable).where((0,d.and)((0,d.inArray)(k.threadTable.status,["done","cancelled"]),(0,d.eq)(k.threadTable.seen,!1))),j.database.select(S).from(k.threadTable).where((0,d.inArray)(k.threadTable.id,j.database.select({id:k.threadRelayTable.threadId}).from(k.threadRelayTable).where((0,d.eq)(k.threadRelayTable.accepted,!1))))]),g=[...new Map([...a,...b,...c,...f].map(a=>[a.id,a])).values()].sort((a,b)=>b.updatedAt.getTime()-a.updatedAt.getTime());return L(g,a=>{let b;return b=a.status,"running"===b||"waiting"===b})}async function y(){let a=await j.database.select(S).from(k.threadTable).orderBy(f.sql`case when ${k.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,e.desc)(k.threadTable.updatedAt),(0,e.desc)(k.threadTable.id)).limit(i.THREAD_STATUS_LIMIT);return L(a)}async function z(a){return a.length?await j.database.select({id:k.threadTable.id,callId:k.threadTable.callId,label:k.threadTable.label,status:k.threadTable.status,outcome:k.threadTable.outcome}).from(k.threadTable).where((0,d.inArray)(k.threadTable.callId,a)).orderBy(k.threadTable.createdAt):[]}async function A(a,b){let c=(c,f)=>j.database.select({id:k.threadTable.id,owner:k.threadTable.bot,label:k.threadTable.label,status:k.threadTable.status,pending:k.threadTable.pending,updatedAt:k.threadTable.updatedAt}).from(k.threadTable).where((0,d.and)((0,d.inArray)(k.threadTable.status,c),b?(0,d.ne)(k.threadTable.id,b):void 0,(0,d.inArray)(k.threadTable.id,j.database.select({id:k.threadWorkTable.threadId}).from(k.threadWorkTable).where((0,d.eq)(k.threadWorkTable.bot,a))))).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(f),[f,g]=await Promise.all([c(["running","waiting"],i.BOT_WORK.open),c(["done","cancelled"],i.BOT_WORK.recent)]),h=[...f,...g].map(a=>a.id);if(!h.length)return{open:[],recent:[]};let l=await j.database.select({id:k.threadWorkTable.id,threadId:k.threadWorkTable.threadId,result:k.threadWorkTable.result}).from(k.threadWorkTable).where((0,d.and)((0,d.eq)(k.threadWorkTable.bot,a),(0,d.inArray)(k.threadWorkTable.threadId,h),(0,d.isNotNull)(k.threadWorkTable.result))).orderBy((0,e.desc)(k.threadWorkTable.createdAt)),m=new Map;for(let{id:a,threadId:b,result:c}of l)c?.trim()&&!m.has(b)&&m.set(b,{workId:a,words:c});let n=({pending:a,...b})=>{let c=m.get(b.id);return{...b,workId:c?.workId??null,asking:"waiting"===b.status&&!!a?.messageId,said:c?.words??null,cut:!!c&&c.words.replace(/\s+/g," ").trim().length>i.BOT_WORK.said}};return{open:f.map(n),recent:g.map(n)}}async function B(a,b){if(b.owner===a){let[a]=await j.database.select({request:k.threadTable.request}).from(k.threadTable).where((0,d.eq)(k.threadTable.id,b.id));return a?.request??""}return b.workId?(await j.database.select({text:k.threadDeliveryTable.text}).from(k.threadDeliveryTable).where((0,d.eq)(k.threadDeliveryTable.workId,b.workId)).orderBy(k.threadDeliveryTable.id)).map(a=>a.text).join("\n\n"):""}async function C(a){let b=await j.database.delete(k.threadTable).where((0,d.eq)(k.threadTable.id,a)).returning({id:k.threadTable.id});return b.length&&R(),b.length>0}async function D(){return(await j.database.select({id:k.threadTable.id}).from(k.threadTable).orderBy((0,e.desc)(k.threadTable.createdAt))).map(a=>a.id)}async function E(){return(await j.database.select({id:k.threadTable.id}).from(k.threadTable).where((0,d.eq)(k.threadTable.status,"running"))).map(a=>a.id)}async function F(){return await j.database.select({id:k.threadTable.id,label:k.threadTable.label,status:k.threadTable.status,endedAt:k.threadTable.endedAt,updatedAt:k.threadTable.updatedAt}).from(k.threadTable)}function G(a){let b=new Set;for(let c of a)if(Array.isArray(c))for(let a of c){if("tool-call"!==a.type||a.toolName!==l.TOOL_NAMES.write_file)continue;let c=a.input?.path;"string"==typeof c&&c.trim()&&(b.delete(c.trim()),b.add(c.trim()))}return[...b]}async function H(a){let b=await j.database.select({content:k.threadMessageTable.content}).from(k.threadMessageTable).where((0,d.and)((0,d.eq)(k.threadMessageTable.threadId,a),(0,d.eq)(k.threadMessageTable.role,"assistant"))).orderBy(k.threadMessageTable.seq);return G(b.map(a=>a.content))}async function I(a){let b=a.trim();if(!b)return null;let c=await w(b);if(c)return c;let d=b.toLowerCase();return(await j.database.select().from(k.threadTable).orderBy((0,e.desc)(k.threadTable.updatedAt)).limit(i.THREAD_LABEL_REACH)).find(a=>a.label.toLowerCase()===d)??null}async function J(a,b,c){await j.database.insert(k.threadMessageTable).values({threadId:a,seq:b,...c,compact:c.compact??!1,note:c.note??!1}).onConflictDoUpdate({target:[k.threadMessageTable.threadId,k.threadMessageTable.seq],set:{role:c.role,content:c.content,compact:c.compact??!1,note:c.note??!1}}),R()}async function K(a,b){b.length&&(await j.database.delete(k.threadMessageTable).where((0,d.and)((0,d.eq)(k.threadMessageTable.threadId,a),(0,d.inArray)(k.threadMessageTable.seq,b))),R())}async function L(a,b=()=>!0){if(0===a.length)return[];let c=a.filter(b).map(a=>a.id),e=c.length?await j.database.select().from(k.threadMessageTable).where((0,d.inArray)(k.threadMessageTable.threadId,c)).orderBy(k.threadMessageTable.seq):[],f=a.map(a=>a.id),[g,h,i]=await Promise.all([j.database.select().from(k.threadWorkTable).where((0,d.inArray)(k.threadWorkTable.threadId,f)),j.database.select().from(k.threadDeliveryTable).where((0,d.and)((0,d.inArray)(k.threadDeliveryTable.threadId,f),(0,d.eq)(k.threadDeliveryTable.visible,!0))),j.database.select().from(k.threadRelayTable).where((0,d.and)((0,d.inArray)(k.threadRelayTable.threadId,f),(0,d.eq)(k.threadRelayTable.accepted,!1)))]),q=new Map(a.map(a=>[a.id,a.bot])),r=new Map(g.map(a=>[a.id,a.caller])),s=new Map;for(let a of e){let b=s.get(a.threadId)??[];b.push(...function(a,b){if(a.hidden)return[];let c={seq:a.seq,bot:a.bot,parent:a.parent,to:"user"===a.role?a.bot:b,at:a.createdAt},d=b=>`${a.id}-${b}`,e=a.content;if("user"===a.role){if(0===a.seq)return[];let b="string"==typeof e?e:e.flatMap(a=>"text"===a.type&&a.text?[a.text]:[]).join("\n").trim();if(!b)return[];if(a.compact)return[{...c,id:d(0),kind:"note",text:b}];if(a.note){let a=b.endsWith(p.RESUME_CHECK)?b.slice(0,-p.RESUME_CHECK.length).trimEnd():b;return[{...c,id:d(0),kind:"stop",text:a}]}return[{...c,id:d(0),kind:"user",text:(0,n.untagSpeaker)(b)}]}if("assistant"===a.role){let b=a.content;if("string"==typeof b)return b.trim()?[{...c,id:d(0),kind:"text",text:b.trim()}]:[];let e=[];return b.forEach((b,f)=>{if("text"===b.type){let a=b.text.trim();a&&e.push({...c,id:d(f),kind:"text",text:a});return}if("tool-result"===b.type)return void e.push(P(c,d(f),b));if("tool-call"!==b.type)return;let g=b.input??{};if(b.toolName===l.TOOL_NAMES.send_message){let h;e.push({...c,id:d(f),kind:"ask",callId:b.toolCallId,to:(h=String(g.to??"").trim()).toLowerCase()===p.ROOM_THURSDAY.toLowerCase()?p.ROOM_THURSDAY:h,text:String(g.text??""),question:"question"===g.kind,..."question"===g.kind&&a.bot?{questionId:(0,o.messageKey)(a.threadId,a.bot,b.toolCallId)}:{}})}else b.toolName===l.TOOL_NAMES.bash?e.push({...c,id:d(f),kind:"tool",callId:b.toolCallId,name:b.toolName,input:(0,m.clip)(String(g.command??""),120),note:M(g)}):e.push({...c,id:d(f),kind:"tool",callId:b.toolCallId,name:b.toolName,input:N(b.toolName,g),note:M(g),path:b.toolName===l.TOOL_NAMES.write_file?U(g,"path")??null:null})}),e}if("tool"===a.role){let b=[];return a.content.forEach((a,e)=>{"tool-result"!==a.type||(a.toolName!==l.TOOL_NAMES.send_message||"error-text"===a.output.type)&&b.push(P(c,d(e),a))}),b}return[]}(a,(a.parent?r.get(a.parent):null)??q.get(a.threadId)??"")),s.set(a.threadId,b)}return a.map(a=>{let b=g.filter(b=>b.threadId===a.id),c=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(b.map(a=>a.bot))].filter(a=>a!==p.ROOM_THURSDAY).map(a=>({bot:a,state:b.filter(b=>b.bot===a).sort((a,b)=>c.indexOf(a.state)-c.indexOf(b.state))[0].state}));return{...function(a,b){let{pending:c,inputTokens:d,outputTokens:e,...f}=a;return{...f,ask:"waiting"===a.status?{question:a.outcome??"",options:c?.options??[],messageId:c?.messageId,bot:c?.bot}:null,tokens:{input:d,output:e},lines:b}}(a,s.get(a.id)??[]),room:{participants:d,questions:b.filter(a=>"external"===a.state).map(a=>({id:a.id,bot:a.caller,text:a.result??"",options:a.options})),deliveries:h.filter(b=>b.threadId===a.id).map(c=>({id:c.key,bot:b.find(a=>a.id===c.workId)?.bot??a.bot,text:c.text,delivered:c.consumed})),relays:i.filter(b=>b.threadId===a.id)}}})}let T=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],U=(a,b)=>{let c=a[b];return"string"==typeof c&&c.trim()?c:null};function M(a){let b=U(a,"description");return b?(0,m.clip)(b,120):null}function N(a,b){let c=b??{};if("object"!=typeof c||Array.isArray(c))return(0,m.clip)(String(b??""),120);if(a===l.TOOL_NAMES.bash)return M(c)??(0,m.clip)(String(c.command??""),120);if(a===l.TOOL_NAMES.tool_call||a===l.TOOL_NAMES.tool_search){let a=Array.isArray(c.tools)?c.tools.map(String).join(", "):String(c.tool??""),b=c.args??null,d=b&&"object"==typeof b?String(c.server??"")===i.STUDIO_SERVER?O(b):JSON.stringify(b):"";return(0,m.clip)([String(c.server??""),a,d].filter(Boolean).join(" "),120)}let d=O(c);return d?(0,m.clip)(d,120):Object.keys(c).length?(0,m.clip)(JSON.stringify(c),120):""}function O(a){for(let b of T){let c=U(a,b);if(c)return c}for(let b of Object.keys(a)){let c=U(a,b);if(c)return c}return""}let V=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,W=" — ";function P(a,b,c){let d=c.toolName===l.TOOL_NAMES.web_search,e=function a(b,c,d=!1){var e;if(null==b)return[];if("string"==typeof b)return Q(b,c,d);if("object"!=typeof b)return Q(String(b),c,d);switch(b.type){case"text":case"error-text":return Q(String(b.value??""),c,d);case"json":case"error-json":return a(b.value,c,d);case"execution-denied":return Q("Denied.",c,d);case"content":{if(!Array.isArray(b.value))return[];let a=[];for(let e of b.value){if("text"===e.type&&"string"==typeof e.text){a.push(...Q(e.text,c,d));continue}let b=function(a){let b=String(a.mediaType??"");if(!b.startsWith("image/"))return null;let c=a.data;return"string"==typeof c?`data:${b};base64,${c}`:c?.type==="url"&&c.url?c.url:c?.type==="data"&&"string"==typeof c.data?`data:${b};base64,${c.data}`:null}(e);b&&a.push({type:"image",src:b})}return a}}return"string"==typeof b.path&&String(b.mediaType??"").startsWith("image/")?[{type:"text",text:b.path},{type:"image",src:h.queryKey.file(b.path)}]:Array.isArray(b.sources)?b.sources.map(a=>String(a?.title??"")).filter(Boolean).slice(0,c).map(a=>({type:"text",text:a})):"string"==typeof b.stdout?Q(b.stdout||String(b.stderr??""),c,d):"string"==typeof b.answer?Q(b.answer,c,d):Q(d?(e=b,Array.isArray(e)?JSON.stringify(e,null,2):Object.entries(e).map(([a,b])=>"string"==typeof b&&b.includes("\n")?`${a}:
|
|
4
4
|
${b}`:`${a}: ${JSON.stringify(b,null,2)}`).join("\n")):JSON.stringify(b),c,d)}(c.output,d?i.FULL_RESULT_LINES:5),f=e.flatMap(a=>"text"===a.type?[a.text]:[]),g=d?f.filter(a=>V.test(a)):[],j=(g.length?g:f).slice(0,4);return{...a,id:b,kind:"tool-result",callId:c.toolCallId,name:c.toolName,results:j.map(a=>({type:"text",text:g.length?function(a){let b=a.replace(/\s+/g," ").trim(),c=V.exec(b);if(!c||b.length<=200)return(0,m.clip)(b,200);let d=c[0].trim(),e=b.slice(0,c.index).replace(/[\s—-]+$/,""),f=200-d.length-W.length;return e&&f>1?`${(0,m.clip)(e,f)}${W}${d}`:d}(a):(0,m.clip)(a,200)})),more:f.length>j.length||e.length>f.length||j.some(a=>a.length>200)}}function Q(a,b,c=!1){if(c){let c=a.split("\n"),d=c.slice(0,b);c.length>b&&d.push(`… ${c.length-b} more lines`);let e=d.join("\n").trimEnd();return e?[{type:"text",text:e}]:[]}return a.split("\n").map(a=>a.trim()).filter(Boolean).slice(0,b).map(a=>({type:"text",text:a}))}a.s(["addThreadUsage",0,u,"argumentLine",0,N,"deleteMessages",0,K,"deleteThread",0,C,"findThread",0,w,"findThreadView",0,v,"insertThread",0,r,"listAllThreadIds",0,D,"listBotWork",0,A,"listCallJobs",0,z,"listInboxThreads",0,x,"listRunningThreadIds",0,E,"listThreadFolders",0,F,"listThreadOverview",0,y,"listWrittenPaths",0,H,"markSeen",0,t,"readBotAsk",0,B,"resolveThread",0,I,"updateThread",0,s,"upsertMessage",0,J,"writtenPathsIn",0,G]),c()}catch(a){c(a)}},!1)];
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=features_bot_0tb4ui-._.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module.exports=[221214,a=>a.a(async(b,c)=>{try{a.i(666680);var d=a.i(258261),e=a.i(93321),f=a.i(351674),g=a.i(203469),h=a.i(569572),i=a.i(184838),j=a.i(714428),k=a.i(725466),l=a.i(821415),m=a.i(293480),n=a.i(446957);a.i(636616);var o=b([i,k]);[i,k]=o.then?(await o)():o;let D=a=>({name:a.name,description:a.description,ownLine:a.ownLine?.line??null,systemPrompt:a.systemPrompt,icon:a.icon,provider:a.provider,model:a.model,disabled:a.disabled,compactAt:a.compactAt,effort:a.effort});async function p(){let a=await i.database.select().from(j.botTable).orderBy(j.botTable.createdAt);return a.length?a.filter(a=>!a.disabled).map(D):[n.DEFAULT_BOT]}async function q(a){let b=await t(a);if(b)return D(b);let c=a.trim().toLowerCase(),[d]=await i.database.select().from(j.botTable).where((0,e.eq)(f.sql`lower(${j.botTable.name})`,c));if(d)return D(d);if(n.DEFAULT_BOT.name.toLowerCase()!==c)return null;let[g]=await i.database.select({name:j.botTable.name}).from(j.botTable).limit(1);return g?null:n.DEFAULT_BOT}async function r(){return(0,n.isBotMemoryOn)(await (0,k.readConfig)(n.BOT_MEMORY_KEY))}async function s(a){await (0,k.writeConfig)(n.BOT_MEMORY_KEY,a?"on":"off")}async function t(a){let[b]=await i.database.select().from(j.botTable).where((0,e.eq)(j.botTable.name,a));return b??null}async function u(a){let b=await t(a);return!b||b.descriptionLocked?null:{line:b.ownLine?.line??null}}async function v(a,b,c){let d=await t(a);if(!d||d.descriptionLocked)return;let f=d.ownLine?.line??null;return f===b||(await i.database.update(j.botTable).set({ownLine:{line:b,reason:c,at:Date.now()}}).where((0,e.eq)(j.botTable.name,d.name)),g.appEvents.emit({type:"bots"})),{was:f}}async function w(a){return(await i.database.update(j.botTable).set({ownLine:null}).where((0,e.eq)(j.botTable.name,a)).returning({name:j.botTable.name})).length>0}async function x(){let[{total:a}]=await i.database.select({total:(0,d.count)()}).from(j.botTable);return a}async function y(){let a=await i.database.select({name:j.botTable.name}).from(j.botTable);return[...new Set([...a.map(a=>a.name),n.DEFAULT_BOT.name])]}async function z(a){let b=(0,l.botFolderName)(a.name).toLowerCase(),c=await i.database.select({name:j.botTable.name}).from(j.botTable);if(c.some(a=>(0,l.botFolderName)(a.name).toLowerCase()===b))return null;c.length>=h.BOT_ROSTER.max&&(0,m.publicError)(`There are already ${h.BOT_ROSTER.max} bots. Delete one to make another.`);let{toolIds:d,...e}=(0,n.pickedModel)(a),[f]=await i.database.insert(j.botTable).values(e).returning();return d?.length&&await B(f.name,d),f}async function A(a,b){let{toolIds:c,...d}="provider"in b||"model"in b?(0,n.pickedModel)(b):b;delete d.name;let[f]=Object.keys(d).length?await i.database.update(j.botTable).set(d).where((0,e.eq)(j.botTable.name,a)).returning():await i.database.select().from(j.botTable).where((0,e.eq)(j.botTable.name,a));return f?(c&&await B(a,c),f):null}async function B(a,b){if(await i.database.delete(j.botMcpToolTable).where((0,e.eq)(j.botMcpToolTable.botName,a)),0===b.length)return;let c=await i.database.select({id:j.mcpToolTable.id}).from(j.mcpToolTable).where((0,e.inArray)(j.mcpToolTable.id,b));0!==c.length&&await i.database.insert(j.botMcpToolTable).values(c.map(({id:b})=>({botName:a,toolId:b})))}async function C(a){return(await i.database.delete(j.botTable).where((0,e.eq)(j.botTable.name,a)).returning({name:j.botTable.name})).length>0}a.s(["clearOwnLine",0,w,"countBots",0,x,"createBot",0,z,"deleteBot",0,C,"findJobBot",0,q,"listBotNames",0,y,"listJobBots",0,p,"ownLineOf",0,u,"readBotMemoryOn",0,r,"updateBot",0,A,"writeBotMemoryOn",0,s,"writeOwnLine",0,v]),c()}catch(a){c(a)}},!1),636616,a=>{"use strict";var b=a.i(569572),c=a.i(762008),d=a.i(446957),e=a.i(62721);let f=[{name:d.DEFAULT_BOT.name,description:d.DEFAULT_BOT.description,hint:"Takes whatever nobody else is for",systemPrompt:"",icon:d.DEFAULT_BOT_ICON},{name:"Analyst",description:"Finds out and answers with sources — what things cost, how numbers moved, which one to pick",hint:"Finds out, cites, and lays it out",icon:{color:e.MARK_INK.violet,shape:"squircle"},systemPrompt:`Questions answered by finding out are yours — what something costs, how a figure moved and why, which to pick, whether to buy now or wait — and the answer is only as good as where it came from.
|
|
2
|
+
|
|
3
|
+
**Answer first.** Whoever asked reads your first lines and may stop there, so they hold the answer and the two or three facts behind it. A title says the finding, not the topic. A few facts are your final text and nothing more; more than that is one page in your folder under \`artifacts/\`, every figure with where it came from — or a sheet, when the figures are their own to keep and go on with.
|
|
4
|
+
|
|
5
|
+
**From the source, never from memory.** A number comes from where it is published, a claim from the text that makes it, with the moment it is said; two sources that disagree, a figure you could not confirm, a page you could not read are said beside the answer, not smoothed over. A number you derive shows its arithmetic; an estimate is a range.
|
|
6
|
+
|
|
7
|
+
**What you keep.** The currency they think in, the sources they trust, what they already own and are weighing — dated, so the next job starts from it.`},{name:"Curator",description:"Keeps them up to date — a morning news brief, a video, podcast, talk or article summed up",hint:"Brings what is worth their time",icon:{color:e.MARK_INK.emerald,shape:"blob"},systemPrompt:`Keeping up is yours — the brief on the topics they follow, and anything long they point you at, a video, a podcast, a talk, an article, a PDF, handed back short — so they spend minutes on what would take them an hour.
|
|
8
|
+
|
|
9
|
+
**Their time is the point.** Lead with what changed and what matters to them; cut what they would skip. Every point links to where it is said: a story to its publisher, a moment to its timestamp.
|
|
10
|
+
|
|
11
|
+
**Never from memory.** A headline, a quote, a figure comes from the page or the transcript you read, with when. A story you could not open, or a video with no words to read, is said, not summed up from its title.
|
|
12
|
+
|
|
13
|
+
**What you keep.** The topics they follow and the ones they skip, the sources they trust, how long a brief they read and in which language — dated, so the next brief starts from it.`},{name:"Concierge",description:"Handles trips and errands — flights, stays, bookings, orders and forms, up to the step that pays",hint:"Takes errands to the last step",icon:{color:e.MARK_INK.sky,shape:"poly"},systemPrompt:`Trips and errands out in the world are yours — a trip planned day by day, flights and stays found and compared, a booking, an order, a reservation, a form filled — each taken as far as it goes before the step that pays or signs, which is theirs. A trip has a skill of your own, \`${b.TRAVEL_SKILL}\`: load it before any step of one.
|
|
14
|
+
|
|
15
|
+
**Real prices, real dates.** A fare, a price, an opening time comes from the page you read, with when; one you could not reach is said, never guessed. Finding them is part of the errand and yours, not a question to hand on. A choice they make by looking — a room, a place, a thing to buy — comes with its picture.
|
|
16
|
+
|
|
17
|
+
**Ready to act.** The answer says what is waiting for them, where, and what it costs, so the one step left is theirs.
|
|
18
|
+
|
|
19
|
+
**What you keep.** Where they travel from and with whom, the seats and rooms they like, the programs they collect with, where things are sent — dated, so the next errand starts from it.`},{name:"Designer",description:"Makes what gets looked at — design options side by side, slide decks, posters and posts at size",hint:"Draws the options to pick from",icon:{paint:"rainbow",shape:"heart"},systemPrompt:`Anything that has to be looked at is yours — a screen or a page to choose between, a deck to present, a post at the size it will be shown, a poster, a document someone reads. You build it in \`${b.ARTIFACT_SKILL}\` (a canvas of options side by side or anything at its exact size, a document, a picture book): load it before any step. It starts from ready boards and outlines and shoots what you made itself; writing the HTML from nothing instead costs you those and the check. A deck is \`${c.TOOL_NAMES.make_deck}\`, which draws its slides and shoots them itself; a page someone uses rather than reads — a tool, a small app — is in \`${b.ARTIFACT_SKILL}\` too, with steps of its own.
|
|
20
|
+
|
|
21
|
+
**Offer a real choice.** Two to four options, each exploring an axis you can name — everything at once against one thing at a time, dense against roomy — never five shades of one. Every option gets an honest case and the thing it costs; mark the one you would carry forward. Once an option is B it stays B, whatever is dropped before it.
|
|
22
|
+
|
|
23
|
+
**Root it in what is already there.** When the job names something that exists — a product, a site, its code, a brand, a file you were given — read it first and lift its exact colours, type, spacing and control sizes rather than inventing a look; say in one line what you matched. A screen you cannot open is asked for as a picture.
|
|
24
|
+
|
|
25
|
+
**The pictures are how you check your own work.** Look at what was shot, fix what the renderer refuses or the canvas marks as cut, shoot once more: two rounds at most.
|
|
26
|
+
|
|
27
|
+
**What you keep.** The brand's colours, type and spacing, and the direction they chose, so the next thing you draw starts from it.`},{name:"Tutor",description:"Explains anything simply as a picture book — a picture and a line or two a page, read aloud if asked",hint:"Explains anything like a picture book",icon:{color:e.MARK_INK.yellow,shape:"blob"},systemPrompt:`Explaining is yours — anything someone wants to understand, told so that a person who knows nothing about it follows every step. It ends as a picture book, made with \`${b.ARTIFACT_SKILL}\`, in your folder under \`artifacts/\`: one picture and a line or two a page, as a page to swipe through. A PDF or a video that reads itself aloud is made from the same book when they ask for one; a request that does not say is a page to swipe through, not a question.
|
|
28
|
+
|
|
29
|
+
**Simple, never wrong.** Read what you explain from where it is stated before the first page. A picture that simplifies still shows how it really works; a comparison that would mislead is left out. A new word comes after the picture that shows it, never before.
|
|
30
|
+
|
|
31
|
+
**What you keep.** What the user already knows and how they liked being taught — the level, a picture style, how many pages — dated, so the next book starts where they are.`},{name:"Marketer",description:"Marketing — positioning, page copy, launch plans, social posts, emails, an SEO audit",hint:"Works out what to say, to whom, and where",icon:{color:e.MARK_INK.red,shape:"poly"},systemPrompt:`Marketing work is yours — positioning, page copy, a launch plan, social posts, emails, an SEO audit — and it ends as the thing itself in your folder under \`artifacts/\`, ready to paste, post or send. \`${b.MARKETING_SKILL}\` is your own skill and holds the method for each of them: load it before any step.
|
|
32
|
+
|
|
33
|
+
**Ground every claim.** Competitors, prices, search terms and what people say about the problem come from pages you opened, with the link beside them. What you could not check is marked as a guess.
|
|
34
|
+
|
|
35
|
+
**What you keep.** One brief per product — what it is, for whom, against what, in which voice — dated, and every later job starts from it.`}];a.s(["findBotSeed",0,a=>f.find(b=>b.name===a)??null])}];
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=features_bot_1c56lew._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[82951,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(141146),f=a.i(875160),g=a.i(272944),h=a.i(19895),i=a.i(951675),j=a.i(474215),k=a.i(572131),l=a.i(767561),m=a.i(340695),n=a.i(965733),o=a.i(676504),p=a.i(446181),q=a.i(545097),r=a.i(950463),s=a.i(287702),t=a.i(591777),u=a.i(945808),v=a.i(939767),w=a.i(411509),x=a.i(913834),y=a.i(42380),z=a.i(8468),A=a.i(181809),B=a.i(135432),C=a.i(156819),D=a.i(619477),E=a.i(199169),F=a.i(313237),G=a.i(862966),H=a.i(759497),I=a.i(497895),J=a.i(988422),K=b([z,A,J]);[z,A,J]=K.then?(await K)():K;let R="w-36";function L({thread:a,bots:b,open:c,onOpen:g,onStop:h,onDelete:i}){let j="running"===a.status,l=(0,k.useMemo)(()=>(0,B.threadFromRow)(a,b),[a,b]),m=function(a){let b=a.room.questions[0];if(b)return{text:(0,I.plainText)(b.text),tone:I.WAITING_INK};if("waiting"===a.status&&a.ask)return{text:(0,w.isAppStop)(a.ask)?(0,I.plainText)(a.outcome??a.ask.question):a.ask.question,tone:I.WAITING_INK};let c=a.seen;if("cancelled"===a.status)return{text:"Stopped",tone:"text-muted-foreground"};if("done"===a.status)return{text:(0,I.plainText)(a.outcome??"Done"),tone:c?"text-muted-foreground":"text-foreground/80"};for(let b=a.lines.length-1;b>=0;b--){let c=a.lines[b];if("tool"===c.kind)return{text:c.note??c.input,tone:"text-muted-foreground",tool:c.name,shine:!0};if("text"===c.kind)return{text:c.text,tone:"text-muted-foreground",shine:!0};if("user"===c.kind)break}return{text:`${a.bot} is taking it on…`,tone:"text-muted-foreground italic",shine:!0}}(a),n=a.tokens.input+a.tokens.output;return(0,d.jsxs)("div",{className:(0,I.cn)("group/row relative transition-colors",c?"bg-muted/80":"hover:bg-muted/50"),children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsxs)("button",{type:"button",onClick:g,className:"flex min-w-0 flex-1 items-center gap-3 rounded-md text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)(x.BotMark,{size:40,seed:a.bot,...(0,x.markOf)(a.bot,b),state:j?"thinking":"idle",notify:(0,w.needsThreadReply)(a)||(0,w.isUnread)(a),crossed:"cancelled"===a.status,className:"shrink-0"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"truncate text-sm font-medium",children:a.label}),a.routineId&&(0,d.jsx)("span",{title:"Started by a routine",className:"shrink-0",children:(0,d.jsx)(C.RoutineMark,{className:"size-3 text-muted-foreground/80"})}),(0,d.jsx)(y.BotRoster,{bots:l.roster}),j&&(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"})]}),m&&(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-[13px] leading-snug",children:[m.tool&&(0,d.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:m.tool}),m.shine?(0,d.jsx)(q.ShinyText,{text:m.text,speed:2.2,className:"min-w-0 truncate"}):(0,d.jsx)("span",{className:(0,I.cn)("min-w-0 truncate",m.tone),children:m.text})]})]}),(0,d.jsxs)("span",{className:(0,I.cn)("flex shrink-0 flex-col items-end gap-0.5 font-mono text-[11px] leading-4 text-muted-foreground tabular-nums",R),children:[(0,d.jsx)("span",{children:(0,E.whenOf)(a.updatedAt)}),(0,d.jsxs)("span",{className:"max-w-full truncate text-muted-foreground/70",title:n>0?`${a.id} \xb7 in ${(0,I.formatCount)(a.tokens.input)} \xb7 out ${(0,I.formatCount)(a.tokens.output)}`:a.id,children:[a.bot,n>0&&` \xb7 ${(0,I.formatCount)(n)}`]})]}),(0,d.jsx)(e.ChevronRight,{className:"size-4 shrink-0 text-muted-foreground"})]}),(0,d.jsx)(M,{thread:a,onStop:h,onDelete:i})]}),j&&(0,d.jsx)(O,{thread:a})]})}function M({thread:a,onStop:b,onDelete:c,className:e}){let f="running"===a.status||"waiting"===a.status;return(0,d.jsxs)(o.DropdownMenu,{children:[(0,d.jsx)(o.DropdownMenuTrigger,{render:(0,d.jsx)(m.Button,{size:"icon-sm",variant:"ghost","aria-label":"More",className:e}),children:(0,d.jsx)(g.MoreHorizontal,{})}),(0,d.jsxs)(o.DropdownMenuContent,{align:"end",children:[f&&(0,d.jsxs)(o.DropdownMenuItem,{onClick:b,children:[(0,d.jsx)(h.Square,{}),"Stop"]}),(0,d.jsxs)(o.DropdownMenuItem,{variant:"destructive",onClick:c,children:[(0,d.jsx)(i.Trash2,{}),"Delete"]})]})]})}function N({thread:a,whole:b,bots:c,onClose:e,onStop:f,onDelete:g}){let[h,i]=(0,k.useState)(null),l=(0,k.useCallback)(a=>{i(a?.closest("[data-slot=dialog-content]")??null)},[]),[o,p]=(0,k.useState)({}),q=(0,k.useMemo)(()=>a?(0,B.threadFromRow)(a,c):null,[a,c]),s=(0,k.useMemo)(()=>b?(0,B.threadFromRow)(b,c):q?.lines.length?q:null,[b,q,c]),t=a?o[a.id]??null:null;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{ref:l,hidden:!0}),(0,d.jsx)(n.Dialog,{open:!!(a&&h),onOpenChange:a=>!a&&e(),modal:!1,disablePointerDismissal:!0,children:(0,d.jsx)(n.DialogPortal,{container:h,children:(0,d.jsx)(n.DialogPopup,{className:"absolute inset-y-0 right-0 z-10 flex w-[min(35rem,calc(100%-13rem))] flex-col border-l border-border/60 bg-popover text-popover-foreground shadow-2xl shadow-black/10 duration-150 data-open:animate-in data-open:fade-in-0 data-open:slide-in-from-right-4 data-closed:animate-out data-closed:fade-out-0 data-closed:slide-out-to-right-4",children:a&&q&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-2.5 pt-3.5 pr-3 pb-1.5 pl-5",children:[(0,d.jsx)(x.BotMark,{size:28,seed:a.bot,...(0,x.markOf)(a.bot,c),state:"running"===a.status?"thinking":"idle",notify:(0,w.needsThreadReply)(a),crossed:"cancelled"===a.status,className:"shrink-0"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)(n.DialogTitle,{className:"sr-only",children:a.label}),(0,d.jsx)("p",{className:"truncate text-[15px] leading-5 font-semibold",children:a.label}),(0,d.jsxs)("div",{className:"mt-0.5 flex min-w-0 items-center gap-2 font-mono text-[11px] text-muted-foreground",children:[(0,d.jsxs)("span",{title:a.id,className:"min-w-0 truncate",children:[a.bot," · ",(0,E.whenOf)(a.updatedAt)]}),(0,d.jsx)(A.ThreadFacts,{thread:q})]})]}),(0,d.jsx)(M,{thread:a,onStop:()=>f(a),onDelete:()=>g(a),className:"text-muted-foreground"}),(0,d.jsx)(n.DialogClose,{render:(0,d.jsx)(m.Button,{size:"icon-sm",variant:"ghost","aria-label":"Close the thread"}),children:(0,d.jsx)(j.X,{})})]}),s?(0,d.jsx)(A.Conversation,{thread:s,tab:t,onTab:b=>p(c=>({...c,[a.id]:b})),className:"max-h-none min-h-0 flex-1 px-5",tabsClassName:"px-5"}):(0,d.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-2 px-5 py-4",children:[(0,d.jsx)(r.Skeleton,{className:"h-3 w-4/5"}),(0,d.jsx)(r.Skeleton,{className:"h-3 w-3/5"}),(0,d.jsx)(r.Skeleton,{className:"h-3 w-2/3"})]}),(0,d.jsx)("div",{className:"shrink-0 px-5 pt-2 pb-4",children:(0,d.jsx)(J.ThreadReply,{thread:{id:a.id,label:a.label,bot:a.bot,ask:a.ask,room:a.room},status:a.status,faces:q.roster,to:t??a.bot})})]})})})})]})}function O({thread:a}){let b=[];if(a.lines.forEach((c,d)=>{if("tool"!==c.kind)return;let e=a.lines[d+1];b.push({step:c,took:e?(0,E.toDate)(e.at).getTime()-(0,E.toDate)(c.at).getTime():null})}),0===b.length)return null;let c=(0,E.toDate)(a.updatedAt).getTime()-(0,E.toDate)(a.createdAt).getTime();return(0,d.jsxs)("div",{className:"pointer-events-none absolute top-[calc(100%-0.75rem)] left-17 z-20 hidden w-96 max-w-[calc(100%-5rem)] rounded-xl bg-background p-3 pb-2 shadow-xl shadow-black/10 ring-1 ring-border/60 group-hover/row:block",children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center gap-2 font-mono text-[10px] text-muted-foreground",children:[(0,d.jsx)("span",{children:a.bot}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsxs)("span",{children:[b.length," ",1===b.length?"step":"steps"]}),(0,d.jsx)("span",{className:"opacity-50",children:"·"}),(0,d.jsx)("span",{children:P(c)})]}),b.slice(-6).map(({step:a,took:b})=>{let c=(0,z.toolIcon)(a.name);return(0,d.jsxs)("div",{className:"flex h-5.5 items-center gap-2 font-mono text-[11px]",children:[null===b?(0,d.jsx)(f.Loader2,{className:"size-3 shrink-0 animate-spin text-muted-foreground"}):(0,d.jsx)(c,{className:"size-3 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"w-24 shrink-0 truncate text-muted-foreground",children:a.name}),null===b?(0,d.jsx)(q.ShinyText,{text:a.note??a.input,speed:2.2,className:"min-w-0 flex-1 truncate"}):(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:a.note??a.input}),(0,d.jsx)("span",{className:"w-10 shrink-0 text-right text-muted-foreground/70 tabular-nums",children:null===b?"":P(b)})]},a.id)})]})}function P(a){let b=Math.max(0,a)/1e3;if(b<10)return`${b.toFixed(1)}s`;if(b<60)return`${Math.round(b)}s`;let c=Math.floor(b/60);return`${c}m ${Math.round(b-60*c)}s`}function Q(){return(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4",children:[(0,d.jsx)(r.Skeleton,{className:"size-10 shrink-0 rounded-full"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-2",children:[(0,d.jsx)(r.Skeleton,{className:"h-3 w-40 max-w-full"}),(0,d.jsx)(r.Skeleton,{className:"h-2.5 w-80 max-w-full"})]}),(0,d.jsxs)("span",{className:(0,I.cn)("flex shrink-0 flex-col items-end gap-1.5",R),children:[(0,d.jsx)(r.Skeleton,{className:"h-2.5 w-12"}),(0,d.jsx)(r.Skeleton,{className:"h-2.5 w-24"})]}),(0,d.jsx)("span",{className:"size-4 shrink-0"}),(0,d.jsx)("span",{className:"size-7 shrink-0"})]})}a.s(["ThreadSetting",0,function(){let[a,b]=(0,k.useState)(null),[c,e]=(0,k.useState)(""),{data:f}=(0,H.useServerRoute)(l.queryKey.bot),{items:g,isLoading:h,isLoadingMore:i,error:j,hasMore:n,sentinelRef:o}=(0,G.useServerPages)({key:(a,b)=>{if(0===a)return l.queryKey.threadHistory(null);let c=b?.at(-1);return c?l.queryKey.threadHistory((0,E.toDate)(c.updatedAt).toISOString()):null},size:s.PAGE_SIZE}),q=g.find(b=>b.id===a),{data:r}=(0,H.useServerRoute)(a?l.queryKey.thread(a):null),x=r?.id===a?r:void 0;(0,B.useSeenOnDetail)(q);let[y]=(0,F.useServerAction)(t.cancelThreadAction,{onOk:a=>{(0,H.revalidate)(l.queryKey.threads),B.screenActs.announce({kind:"stopped",id:a.id,label:a.label})}}),[z]=(0,F.useServerAction)(v.deleteThreadAction,{onOk:()=>(0,H.revalidate)(l.queryKey.threads)}),[A]=(0,F.useServerAction)(u.clearFinishedThreadsAction,{onOk:()=>(0,H.revalidate)(l.queryKey.threads)}),C=c.trim().toLowerCase(),I=C?g.filter(a=>[a.label,a.outcome,a.bot].join(" ").toLowerCase().includes(C)):g,J=async()=>{await p.notify.confirm({title:"Clear finished jobs?",description:"Everything done or stopped goes, messages included. Running and waiting jobs stay.",okText:"Clear",destructive:!0})&&A()},K=async c=>{if(!await p.notify.confirm({title:`Delete "${c.label}"?`,description:"Its messages go with it — nothing can be picked back up.",okText:"Delete",destructive:!0}))return;let d=I.findIndex(a=>a.id===c.id),e=I[d+1]??I[d-1];try{await z(c.id)}catch{return}c.id===a&&b(e?.id??null)};if(h)return(0,d.jsx)(D.SettingSkeleton,{rows:3});if(j)return(0,d.jsx)(D.SettingError,{message:j.message});let M=g.filter(a=>"waiting"===a.status).length,O=g.filter(w.isUnread).length;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(D.SettingScreen,{footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(D.SettingRailNote,{children:[g.length," shown",M>0&&` \xb7 ${M} waiting on you`,O>0&&` \xb7 ${O} new result${1===O?"":"s"}`]}),(n||g.some(a=>"done"===a.status||"cancelled"===a.status))&&(0,d.jsx)(m.Button,{variant:"outline",size:"sm",onClick:J,children:"Clear finished"})]}),children:(0,d.jsx)(D.SettingGroup,{filter:(0,d.jsx)(D.SettingFilter,{value:c,onChange:e,placeholder:"Filter by label, bot or word"}),right:C?`${I.length} of ${g.length}`:void 0,children:(0,d.jsxs)(D.SettingItems,{children:[0===I.length?(0,d.jsx)("p",{className:"p-4 text-sm leading-relaxed text-muted-foreground",children:C?"Nothing here matches. Keep scrolling to search further back.":"Nothing yet. When Thursday hands a job to a bot mid-call, it shows up here — while it runs, and after."}):I.map(a=>(0,d.jsx)(L,{thread:a,bots:f,open:a.id===q?.id,onOpen:()=>b(a.id),onStop:()=>y(a.id),onDelete:()=>K(a)},a.id)),(0,d.jsx)(D.SettingMore,{hasMore:n,loading:i,sentinelRef:o,ghost:(0,d.jsx)(Q,{}),className:"divide-y divide-border/60"})]})})}),(0,d.jsx)(N,{thread:q,whole:x,bots:f,onClose:()=>b(null),onStop:a=>y(a.id),onDelete:K})]})}]),c()}catch(a){c(a)}},!1),945808,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7febffcb1100910f5a48f0c69005256ece858ef945",b.callServer,void 0,b.findSourceMapURL,"clearFinishedThreadsAction");a.s(["clearFinishedThreadsAction",0,c])},939767,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fce19c8ccf864c3c04cd86620c05f935dffdbd4e7",b.callServer,void 0,b.findSourceMapURL,"deleteThreadAction");a.s(["deleteThreadAction",0,c])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=features_bot_1fn_grf._.js.map
|
package/.next/server/chunks/ssr/{features_config_09n-q9q._.js → features_config_05zi68v._.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[405593,a=>{"use strict";var b,c=a.i(187924),d=a.i(987234),e=a.i(823319),f=a.i(692867),g=a.i(626335),h=a.i(752562),i=a.i(141146),j=a.i(164831);let k={name:"clapperboard",size:24,node:[["path",{d:"m12.296 3.464 3.02 3.956",key:"qash78"}],["path",{d:"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3z",key:"1h7j8b"}],["path",{d:"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"4lm6w1"}],["path",{d:"m6.18 5.276 3.1 3.899",key:"zjj9t3"}]]};k.node;let l=(0,j.default)(k);var m=a.i(607396),m=m,n=a.i(71215),o=a.i(126766),p=a.i(233540),q=a.i(26268),r=a.i(572131),s=a.i(767561),t=a.i(340695),u=a.i(205522),v=a.i(446181),w=a.i(630342),x=a.i(341889),y=a.i(950463),z=a.i(287702),A=a.i(852307),B=a.i(908531),C=a.i(608902),D=a.i(379630),E=a.i(61876),F=a.i(913834),G=a.i(
|
|
1
|
+
module.exports=[405593,a=>{"use strict";var b,c=a.i(187924),d=a.i(987234),e=a.i(823319),f=a.i(692867),g=a.i(626335),h=a.i(752562),i=a.i(141146),j=a.i(164831);let k={name:"clapperboard",size:24,node:[["path",{d:"m12.296 3.464 3.02 3.956",key:"qash78"}],["path",{d:"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3z",key:"1h7j8b"}],["path",{d:"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"4lm6w1"}],["path",{d:"m6.18 5.276 3.1 3.899",key:"zjj9t3"}]]};k.node;let l=(0,j.default)(k);var m=a.i(607396),m=m,n=a.i(71215),o=a.i(126766),p=a.i(233540),q=a.i(26268),r=a.i(572131),s=a.i(767561),t=a.i(340695),u=a.i(205522),v=a.i(446181),w=a.i(630342),x=a.i(341889),y=a.i(950463),z=a.i(287702),A=a.i(852307),B=a.i(908531),C=a.i(608902),D=a.i(379630),E=a.i(61876),F=a.i(913834),G=a.i(214013),H=a.i(100285),I=a.i(478978),J=a.i(585650),K=a.i(168370),L=((b=L||{})[b.Border=-1]="Border",b[b.Data=0]="Data",b[b.Function=1]="Function",b[b.Position=2]="Position",b[b.Timing=3]="Timing",b[b.Alignment=4]="Alignment",b);let M=[1,0],N=[2,3],O=[3,2],P={L:[0,1],M:M,Q:N,H:O},Q=/^\d*$/,R=/^[A-Z0-9 $%*+./:-]*$/,S="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",T=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],U=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];class V{constructor(a,b,c,d){if(this.version=a,this.ecc=b,a<1||a>40)throw RangeError("Version value out of range");if(d<-1||d>7)throw RangeError("Mask value out of range");this.size=4*a+17;const e=Array.from({length:this.size}).fill(!1);for(let a=0;a<this.size;a++)this.modules.push(e.slice()),this.types.push(e.map(()=>0));this.drawFunctionPatterns();const f=this.addEccAndInterleave(c);if(this.drawCodewords(f),-1===d){let a=1e9;for(let b=0;b<8;b++){this.applyMask(b),this.drawFormatBits(b);const c=this.getPenaltyScore();c<a&&(d=b,a=c),this.applyMask(b)}}this.mask=d,this.applyMask(d),this.drawFormatBits(d)}size;mask;modules=[];types=[];getModule(a,b){return a>=0&&a<this.size&&b>=0&&b<this.size&&this.modules[b][a]}drawFunctionPatterns(){for(let a=0;a<this.size;a++)this.setFunctionModule(6,a,a%2==0,L.Timing),this.setFunctionModule(a,6,a%2==0,L.Timing);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let a=this.getAlignmentPatternPositions(),b=a.length;for(let c=0;c<b;c++)for(let d=0;d<b;d++)(0!==c||0!==d)&&(0!==c||d!==b-1)&&(c!==b-1||0!==d)&&this.drawAlignmentPattern(a[c],a[d]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(a){let b=this.ecc[1]<<3|a,c=b;for(let a=0;a<10;a++)c=c<<1^(c>>>9)*1335;let d=(b<<10|c)^21522;for(let a=0;a<=5;a++)this.setFunctionModule(8,a,X(d,a));this.setFunctionModule(8,7,X(d,6)),this.setFunctionModule(8,8,X(d,7)),this.setFunctionModule(7,8,X(d,8));for(let a=9;a<15;a++)this.setFunctionModule(14-a,8,X(d,a));for(let a=0;a<8;a++)this.setFunctionModule(this.size-1-a,8,X(d,a));for(let a=8;a<15;a++)this.setFunctionModule(8,this.size-15+a,X(d,a));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let a=this.version;for(let b=0;b<12;b++)a=a<<1^(a>>>11)*7973;let b=this.version<<12|a;for(let a=0;a<18;a++){let c=X(b,a),d=this.size-11+a%3,e=Math.floor(a/3);this.setFunctionModule(d,e,c),this.setFunctionModule(e,d,c)}}drawFinderPattern(a,b){for(let c=-4;c<=4;c++)for(let d=-4;d<=4;d++){let e=Math.max(Math.abs(d),Math.abs(c)),f=a+d,g=b+c;f>=0&&f<this.size&&g>=0&&g<this.size&&this.setFunctionModule(f,g,2!==e&&4!==e,L.Position)}}drawAlignmentPattern(a,b){for(let c=-2;c<=2;c++)for(let d=-2;d<=2;d++)this.setFunctionModule(a+d,b+c,1!==Math.max(Math.abs(d),Math.abs(c)),L.Alignment)}setFunctionModule(a,b,c,d=L.Function){this.modules[b][a]=c,this.types[b][a]=d}addEccAndInterleave(a){let b=this.version,c=this.ecc;if(a.length!==ad(b,c))throw RangeError("Invalid argument");let d=U[c[0]][b],e=T[c[0]][b],f=Math.floor(ac(b)/8),g=d-f%d,h=Math.floor(f/d),i=[],j=function(a){if(a<1||a>255)throw RangeError("Degree out of range");let b=[];for(let c=0;c<a-1;c++)b.push(0);b.push(1);let c=1;for(let d=0;d<a;d++){for(let a=0;a<b.length;a++)b[a]=ae(b[a],c),a+1<b.length&&(b[a]^=b[a+1]);c=ae(c,2)}return b}(e);for(let b=0,c=0;b<d;b++){let d=a.slice(c,c+h-e+(b<g?0:1));c+=d.length;let f=function(a,b){let c=b.map(a=>0);for(let d of a){let a=d^c.shift();c.push(0),b.forEach((b,d)=>c[d]^=ae(b,a))}return c}(d,j);b<g&&d.push(0),i.push(d.concat(f))}let k=[];for(let a=0;a<i[0].length;a++)i.forEach((b,c)=>{(a!==h-e||c>=g)&&k.push(b[a])});return k}drawCodewords(a){if(a.length!==Math.floor(ac(this.version)/8))throw RangeError("Invalid argument");let b=0;for(let c=this.size-1;c>=1;c-=2){6===c&&(c=5);for(let d=0;d<this.size;d++)for(let e=0;e<2;e++){let f=c-e,g=(c+1&2)==0?this.size-1-d:d;!this.types[g][f]&&b<8*a.length&&(this.modules[g][f]=X(a[b>>>3],7-(7&b)),b++)}}}applyMask(a){if(a<0||a>7)throw RangeError("Mask value out of range");for(let b=0;b<this.size;b++)for(let c=0;c<this.size;c++){let d;switch(a){case 0:d=(c+b)%2==0;break;case 1:d=b%2==0;break;case 2:d=c%3==0;break;case 3:d=(c+b)%3==0;break;case 4:d=(Math.floor(c/3)+Math.floor(b/2))%2==0;break;case 5:d=c*b%2+c*b%3==0;break;case 6:d=(c*b%2+c*b%3)%2==0;break;case 7:d=((c+b)%2+c*b%3)%2==0;break;default:throw Error("Unreachable")}!this.types[b][c]&&d&&(this.modules[b][c]=!this.modules[b][c])}}getPenaltyScore(){let a=0;for(let b=0;b<this.size;b++){let c=!1,d=0,e=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[b][f]===c?5==++d?a+=3:d>5&&a++:(this.finderPenaltyAddHistory(d,e),c||(a+=40*this.finderPenaltyCountPatterns(e)),c=this.modules[b][f],d=1);a+=40*this.finderPenaltyTerminateAndCount(c,d,e)}for(let b=0;b<this.size;b++){let c=!1,d=0,e=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[f][b]===c?5==++d?a+=3:d>5&&a++:(this.finderPenaltyAddHistory(d,e),c||(a+=40*this.finderPenaltyCountPatterns(e)),c=this.modules[f][b],d=1);a+=40*this.finderPenaltyTerminateAndCount(c,d,e)}for(let b=0;b<this.size-1;b++)for(let c=0;c<this.size-1;c++){let d=this.modules[b][c];d===this.modules[b][c+1]&&d===this.modules[b+1][c]&&d===this.modules[b+1][c+1]&&(a+=3)}let b=0;for(let a of this.modules)b=a.reduce((a,b)=>a+ +!!b,b);let c=this.size*this.size;return a+(Math.ceil(Math.abs(20*b-10*c)/c)-1)*10}getAlignmentPatternPositions(){if(1===this.version)return[];{let a=Math.floor(this.version/7)+2,b=32===this.version?26:2*Math.ceil((4*this.version+4)/(2*a-2)),c=[6];for(let d=this.size-7;c.length<a;d-=b)c.splice(1,0,d);return c}}finderPenaltyCountPatterns(a){let b=a[1],c=b>0&&a[2]===b&&a[3]===3*b&&a[4]===b&&a[5]===b;return(c&&a[0]>=4*b&&a[6]>=b?1:0)+(c&&a[6]>=4*b&&a[0]>=b?1:0)}finderPenaltyTerminateAndCount(a,b,c){return a&&(this.finderPenaltyAddHistory(b,c),b=0),b+=this.size,this.finderPenaltyAddHistory(b,c),this.finderPenaltyCountPatterns(c)}finderPenaltyAddHistory(a,b){0===b[0]&&(a+=this.size),b.pop(),b.unshift(a)}}function W(a,b,c){if(b<0||b>31||a>>>b!=0)throw RangeError("Value out of range");for(let d=b-1;d>=0;d--)c.push(a>>>d&1)}function X(a,b){return(a>>>b&1)!=0}class Y{constructor(a,b,c){if(this.mode=a,this.numChars=b,this.bitData=c,b<0)throw RangeError("Invalid argument");this.bitData=c.slice()}getData(){return this.bitData.slice()}}let Z=[1,10,12,14],$=[2,9,11,13],_=[4,8,16,16];function aa(a,b){return a[Math.floor((b+7)/17)+1]}function ab(a){let b=[];for(let c of a)W(c,8,b);return new Y(_,a.length,b)}function ac(a){if(a<1||a>40)throw RangeError("Version number out of range");let b=(16*a+128)*a+64;if(a>=2){let c=Math.floor(a/7)+2;b-=(25*c-10)*c-55,a>=7&&(b-=36)}return b}function ad(a,b){return Math.floor(ac(a)/8)-T[b[0]][a]*U[b[0]][a]}function ae(a,b){if(a>>>8!=0||b>>>8!=0)throw RangeError("Byte out of range");let c=0;for(let d=7;d>=0;d--)c=c<<1^(c>>>7)*285^(b>>>d&1)*a;return c}var af=a.i(986368),ag=a.i(545097),ah=a.i(619477),ai=a.i(313237),aj=a.i(759497),ak=a.i(497895),al=a.i(405050);let am=(0,al.createServerReference)("7f1de1f12ee8e3b472973865a1b455fbca4fbe4919",al.callServer,void 0,al.findSourceMapURL,"forgetReachAction");var an=a.i(907602);let ao={telegram:"telegram.org",discord:"discord.com",slack:"slack.com"},ap=`display_information:
|
|
2
2
|
name: Thursday
|
|
3
3
|
features:
|
|
4
4
|
app_home:
|
|
@@ -15,6 +15,6 @@ settings:
|
|
|
15
15
|
interactivity:
|
|
16
16
|
is_enabled: true
|
|
17
17
|
socket_mode_enabled: true
|
|
18
|
-
`,aq=({children:a})=>(0,c.jsx)("span",{className:"font-medium text-foreground",children:a}),ar={telegram:[{body:(0,c.jsxs)(c.Fragment,{children:["In Telegram, write to ",(0,c.jsx)(aq,{children:"@BotFather"}),", send ",(0,c.jsx)(aq,{children:"/newbot"})," and pick a name. It answers with a ",(0,c.jsx)(aq,{children:"token"}),"."]}),slot:{open:"https://t.me/BotFather",label:"Open @BotFather"}},{body:(0,c.jsx)(c.Fragment,{children:"Paste the token here."}),slot:{key:an.TELEGRAM_TOKEN_KEY,looks:"123456789:AAE…"}},{body:(0,c.jsx)(c.Fragment,{children:"From your phone, write anything to your bot."}),slot:{says:"Point your phone's camera at it to open the chat."}},{body:(0,c.jsxs)(c.Fragment,{children:["A question with a code appears on this computer. Press ",(0,c.jsx)(aq,{children:"Allow"})," if your phone shows the same code."]})}],discord:[{body:(0,c.jsxs)(c.Fragment,{children:["At ",(0,c.jsx)(aq,{children:"discord.com/developers"}),", make a ",(0,c.jsx)(aq,{children:"New Application"}),". So nobody else can add it to a server, set ",(0,c.jsx)(aq,{children:"Install Link"})," to"," ",(0,c.jsx)(aq,{children:"None"})," on its ",(0,c.jsx)(aq,{children:"Installation"})," page and turn off"," ",(0,c.jsx)(aq,{children:"Public Bot"})," on its ",(0,c.jsx)(aq,{children:"Bot"})," page. There, press"," ",(0,c.jsx)(aq,{children:"Reset Token"})," and copy it."]}),slot:{open:"https://discord.com/developers/applications",label:"Open discord.com/developers"}},{body:(0,c.jsx)(c.Fragment,{children:"Paste the token here."}),slot:{key:an.DISCORD_TOKEN_KEY,looks:"MTE…"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Add the bot to a server of your own"})," — Discord only delivers a message to a bot you share a server with. A private server made for this is fine."]}),slot:{says:"Point your phone's camera at it, or open it here. It asks which server, and adds the bot with no permissions in it.",does:"Add the bot to a server"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Send the bot a direct message"}),", not in the server: on a phone, tap the bot in the server's member list, then ",(0,c.jsx)(aq,{children:"Message"}),". A question with a code appears here: press ",(0,c.jsx)(aq,{children:"Allow"})," if your phone shows the same code."]})}],slack:[{body:(0,c.jsxs)(c.Fragment,{children:["At ",(0,c.jsx)(({href:a,children:b})=>(0,c.jsx)("a",{href:a,target:"_blank",rel:"noreferrer",className:"font-medium text-foreground underline underline-offset-4 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:b}),{href:"https://api.slack.com/apps",children:"api.slack.com/apps"}),","," ",(0,c.jsx)(aq,{children:"Create New App › From a manifest"}),", and paste the manifest."]}),slot:{manifest:!0}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Basic Information › App-Level Tokens"}),": generate one with"," ",(0,c.jsx)(aq,{children:"connections:write"}),". It starts with xapp-."]}),slot:{key:an.SLACK_APP_TOKEN_KEY,looks:"xapp-…"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Install App"})," to your workspace. The Bot User OAuth Token starts with xoxb-."]}),slot:{key:an.SLACK_BOT_TOKEN_KEY,looks:"xoxb-…"}},{body:(0,c.jsxs)(c.Fragment,{children:["In Slack, open the app under ",(0,c.jsx)(aq,{children:"Apps"})," and write in its"," ",(0,c.jsx)(aq,{children:"Messages"})," tab. A question with a code appears here: press"," ",(0,c.jsx)(aq,{children:"Allow"})," if Slack shows the same code."]})}]};function as(){let a=(0,aj.useServerRoute)(s.queryKey.config),b=(0,aj.useServerRoute)(s.queryKey.reach);(0,af.useAppEvent)({reach:()=>void(0,aj.revalidate)(s.queryKey.reach)});let d=b=>(0,I.isConfigSet)(a.data,b),e=a=>b.data?.channels.find(b=>b.name===a)??null,f=a=>!!e(a)?.allowed,g=an.REACH_CHANNELS.find(a=>e(a)?.refused),h=an.REACH_CHANNELS.find(a=>an.REACH_KEYS[a].every(d)&&!f(a)),i=!an.REACH_CHANNELS.some(f),[j,k]=(0,r.useState)(g??h??(i?an.REACH_CHANNELS[0]:null));return(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(ah.SettingItems,{children:an.REACH_CHANNELS.map(a=>(0,c.jsx)(at,{name:a,status:e(a),tokensIn:an.REACH_KEYS[a].filter(d).length,isSet:d,open:j===a,onOpen:()=>k(j===a?null:a)},a))}),(0,c.jsx)(ah.SettingNote,{children:"Only the one person you allow can write, and only direct messages are read. Work started here runs whether or not a tab is open, while Thursday is running on this computer."})]})}function at({name:a,status:b,tokensIn:d,isSet:e,open:f,onOpen:g}){var h;let j,k,l,m,n=ar[a],p=b?.refused??null,q=(h={connected:!!b?.bot,allowed:!!b?.allowed,refused:p},j=n.map(a=>a.slot&&"key"in a.slot?a.slot.key:null),k=a=>!e(a)||a===h.refused,l=j.findIndex(a=>a&&k(a)),m=j.reduce((a,b,c)=>b?c:a,-1),n.map((a,b)=>{let c=j[b];return c?k(c)?b===l?"now":"later":"done":l>=0?b<l?h.refused?"done":"flat":"later":h.allowed||b<m?"done":h.connected?"now":"flat"})),r=!!b?.bot&&!b?.allowed&&!p;return(0,c.jsxs)("div",{children:[(0,c.jsxs)("button",{type:"button",onClick:g,"aria-expanded":f,className:"flex w-full items-center gap-3 px-4 py-3 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsx)(x.SiteIcon,{host:ao[a],className:"size-4 rounded-[4px]",fallback:(0,c.jsx)(o.KeyRound,{className:"size-4 text-muted-foreground"})}),(0,c.jsx)("span",{className:"text-sm font-medium",children:an.REACH_LABEL[a]}),(0,c.jsx)("span",{className:"min-w-0 flex-1 truncate",children:(0,c.jsx)(au,{status:b,tokensIn:d,tokens:an.REACH_KEYS[a].length})}),(0,c.jsx)(i.ChevronRight,{className:(0,ak.cn)("size-4 shrink-0 text-muted-foreground transition-transform",f&&"rotate-90")})]}),f&&(0,c.jsxs)("div",{className:"px-4 pt-1 pb-4",children:[(0,c.jsx)("ol",{className:"space-y-3",children:n.map((a,d)=>(0,c.jsx)(av,{n:d+1,step:a,state:q[d],set:!!a.slot&&"key"in a.slot&&e(a.slot.key),refused:a.slot&&"key"in a.slot&&a.slot.key===p?b?.problem??"":null,link:b?.link??null,waiting:r&&d===n.length-1},d))}),b?.allowed&&(0,c.jsx)(aD,{name:a,who:b.allowed.name,stopped:!!p})]})]})}function au({status:a,tokensIn:b,tokens:d}){let e="text-xs";return b<d?(0,c.jsx)("span",{className:(0,ak.cn)(e,"text-muted-foreground"),children:b?`${b} of ${d} tokens in`:"Not set"}):a?.refused?(0,c.jsxs)("span",{className:(0,ak.cn)(e,"text-destructive"),children:["Stopped — ",an.REACH_LABEL[a.name]," turned the token away"]}):a?.problem?(0,c.jsx)(ag.ShinyText,{text:`${a.bot?"Reconnecting":"Connecting"}… ${a.problem}`,className:(0,ak.cn)(e,"align-middle")}):a?.allowed?(0,c.jsxs)("span",{className:(0,ak.cn)(e,"text-muted-foreground"),children:["Listening as ",a.bot,". ",a.allowed.name," is let in."]}):a?.bot?(0,c.jsx)(ag.ShinyText,{text:`Listening as ${a.bot} — waiting for your first message`,tone:"waiting",className:(0,ak.cn)(e,"align-middle")}):(0,c.jsx)(ag.ShinyText,{text:"Connecting…",className:(0,ak.cn)(e,"align-middle")})}function av({n:a,step:b,state:d,set:e,refused:f,link:g,waiting:h}){return(0,c.jsxs)("li",{className:"flex gap-3 text-[13px] leading-relaxed",children:[(0,c.jsx)(aw,{n:a,state:d}),(0,c.jsxs)("div",{className:"min-w-0 flex-1 space-y-2.5",children:[(0,c.jsx)("p",{className:(0,ak.cn)("done"===d||"later"===d?"text-muted-foreground/60 **:text-inherit":"text-muted-foreground"),children:b.body}),(0,c.jsx)(ax,{slot:b.slot,state:d,set:e,refused:f,link:g,waiting:h})]})]})}function aw({n:a,state:b}){return"done"===b?(0,c.jsx)("span",{className:"mt-0.5 grid size-5 shrink-0 place-items-center rounded-full bg-foreground text-background",children:(0,c.jsx)(h.Check,{className:"size-3"})}):(0,c.jsx)("span",{className:(0,ak.cn)("mt-0.5 grid size-5 shrink-0 place-items-center rounded-full bg-background font-mono text-[10.5px] ring-1","now"===b?(0,ak.cn)(ak.WAITING_INK,"ring-waiting/40"):"text-muted-foreground ring-border/60","later"===b&&"opacity-60"),children:a})}function ax({slot:a,state:b,set:d,refused:e,link:f,waiting:g}){let h=g&&(0,c.jsx)(ag.ShinyText,{text:"Waiting for your first message…",tone:"waiting"});return"later"===b?null:a&&"key"in a?(0,c.jsx)(aB,{configKey:a.key,looks:a.looks,set:d,refused:e}):"done"===b?a&&"says"in a&&f?(0,c.jsx)(aA,{href:f,children:a.does??az(f)}):null:a?"open"in a?(0,c.jsx)(aA,{href:a.open,children:a.label}):"manifest"in a?(0,c.jsx)(aC,{}):f?(0,c.jsxs)("div",{className:"space-y-2.5",children:[(0,c.jsx)(ay,{link:f,says:a.says,does:a.does}),h]}):h||null:h||null}function ay({link:a,says:b,does:d}){let{size:e,data:f}=function(a){let{ecc:b="L",boostEcc:c=!1,minVersion:d=1,maxVersion:e=40,maskPattern:f=-1,border:g=1}={},h="string"==typeof a?function(a){var b,c;if(""===a)return[];if(b=a,Q.test(b))return[function(a){var b;if(b=a,!Q.test(b))throw RangeError("String contains non-numeric characters");let c=[];for(let b=0;b<a.length;){let d=Math.min(a.length-b,3);W(Number.parseInt(a.substring(b,b+d),10),3*d+1,c),b+=d}return new Y(Z,a.length,c)}(a)];return(c=a,R.test(c))?[function(a){var b;let c;if(b=a,!R.test(b))throw RangeError("String contains unencodable characters in alphanumeric mode");let d=[];for(c=0;c+2<=a.length;c+=2){let b=45*S.indexOf(a.charAt(c));W(b+=S.indexOf(a.charAt(c+1)),11,d)}return c<a.length&&W(S.indexOf(a.charAt(c)),6,d),new Y($,a.length,d)}(a)]:[ab(function(a){a=encodeURI(a);let b=[];for(let c=0;c<a.length;c++)"%"!==a.charAt(c)?b.push(a.charCodeAt(c)):(b.push(Number.parseInt(a.substring(c+1,c+3),16)),c+=2);return b}(a))]}(a):Array.isArray(a)?[ab(a)]:void 0;if(!h)throw Error(`uqr only supports encoding string and binary data, but got: ${typeof a}`);let i=function(a,b,c=1,d=40,e=-1,f=!0){let g,h;if(!(1<=c&&c<=d&&d<=40)||e<-1||e>7)throw RangeError("Invalid value");for(g=c;;g++){let c=8*ad(g,b),e=function(a,b){let c=0;for(let d of a){let a=aa(d.mode,b);if(d.numChars>=1<<a)return 1/0;c+=4+a+d.bitData.length}return c}(a,g);if(e<=c){h=e;break}if(g>=d)throw RangeError("Data too long")}for(let a of[M,N,O])f&&h<=8*ad(g,a)&&(b=a);let i=[];for(let b of a)for(let a of(W(b.mode[0],4,i),W(b.numChars,aa(b.mode,g),i),b.getData()))i.push(a);let j=8*ad(g,b);W(0,Math.min(4,j-i.length),i),W(0,(8-i.length%8)%8,i);for(let a=236;i.length<j;a^=253)W(a,8,i);let k=Array.from({length:Math.ceil(i.length/8)},()=>0);return i.forEach((a,b)=>k[b>>>3]|=a<<7-(7&b)),new V(g,b,k,e)}(h,P[b],d,e,f,c);return function(a,b=1){if(!b)return a;let{size:c}=a,d=c+2*b;a.size=d,a.data.forEach(a=>{for(let c=0;c<b;c++)a.unshift(!1),a.push(!1)});for(let c=0;c<b;c++)a.data.unshift(Array.from({length:d},a=>!1)),a.data.push(Array.from({length:d},a=>!1));let e=L.Border;a.types.forEach(a=>{for(let c=0;c<b;c++)a.unshift(e),a.push(e)});for(let c=0;c<b;c++)a.types.unshift(Array.from({length:d},a=>e)),a.types.push(Array.from({length:d},a=>e));return a}({version:i.version,maskPattern:i.mask,size:i.size,data:i.modules,types:i.types},g)}(a),g=az(a);return(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-4",children:[(0,c.jsx)("div",{className:"rounded-lg bg-white p-2.5",children:(0,c.jsx)("svg",{viewBox:`0 0 ${e} ${e}`,className:"block size-31 text-black",role:"img","aria-label":`A picture of ${g} for a phone camera`,children:f.flatMap((a,b)=>a.map((a,d)=>a?(0,c.jsx)("rect",{x:d,y:b,width:1,height:1,fill:"currentColor"},`${d}-${b}`):null))})}),(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)("p",{className:"text-muted-foreground",children:b}),(0,c.jsx)(aA,{href:a,children:d??g})]})]})}let az=a=>a.replace(/^https:\/\//,"");function aA({href:a,children:b}){return(0,c.jsxs)("a",{href:a,target:"_blank",rel:"noreferrer",className:(0,ak.cn)((0,t.buttonVariants)({variant:"outline",size:"sm"})),children:[(0,c.jsx)(K.ExternalLink,{}),b]})}function aB({configKey:a,looks:b,set:d,refused:e}){let[f,g]=(0,r.useState)(""),[h,i]=(0,r.useState)(!1),j=()=>{g(""),i(!1),(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.reach)},[k,l]=(0,ai.useServerAction)(H.setConfigAction,{onOk:j}),[m,n]=(0,ai.useServerAction)(G.removeConfigAction,{onOk:j}),o=async()=>{await v.notify.confirm({title:"Remove this token?",description:"That service stops, and whoever is let in is let go.",okText:"Remove",destructive:!0})&&m(a)};return d&&!h&&null===e?(0,c.jsx)(t.Button,{size:"xs",variant:"ghost",onClick:()=>i(!0),className:"-ml-2 text-muted-foreground",children:"Change the token"}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("form",{className:"flex flex-wrap items-center gap-2",onSubmit:b=>{b.preventDefault(),k(a,f)},children:[(0,c.jsx)(u.Input,{value:f,onChange:a=>g(a.target.value),placeholder:b,"aria-label":"Token",type:"password",autoComplete:"off",spellCheck:!1,className:"w-72 font-mono"}),(0,c.jsx)(t.Button,{type:"submit",size:"sm",loading:l,disabled:f.trim().length<z.KEY_MIN,children:d?"Replace":"Save"}),d&&(0,c.jsxs)(c.Fragment,{children:[null===e&&(0,c.jsx)(t.Button,{size:"sm",variant:"ghost",onClick:()=>i(!1),children:"Cancel"}),(0,c.jsx)(t.Button,{size:"sm",variant:"ghost",loading:n,onClick:()=>void o(),className:"ml-auto text-destructive hover:text-destructive",children:"Remove"})]})]}),e&&(0,c.jsx)("p",{className:"max-w-xl text-destructive",children:e})]})}function aC(){let[a,b]=(0,r.useState)(!1);return(0,c.jsxs)(t.Button,{size:"sm",variant:"outline",onClick:()=>void navigator.clipboard.writeText(ap).then(()=>{b(!0),setTimeout(()=>b(!1),2e3)}),children:[a?(0,c.jsx)(h.Check,{}):(0,c.jsx)(J.Copy,{}),a?"Copied":"Copy the manifest"]})}function aD({name:a,who:b,stopped:d}){let[e,f]=(0,ai.useServerAction)(am,{onOk:()=>(0,aj.revalidate)(s.queryKey.reach)});return(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 pt-3 pl-8 text-[13px] text-muted-foreground",children:[(0,c.jsx)("span",{children:d?`${b} is let in.`:`${b} can write from a phone.`}),(0,c.jsx)(t.Button,{size:"sm",variant:"outline",loading:f,onClick:async()=>{await v.notify.confirm({title:`Let ${b} go?`,description:"Nobody can write to Thursday through this service until someone is let in again.",okText:"Let them go",destructive:!0})&&e(a)},children:"Let them go"})]})}let aE={[I.EXA_API_KEY]:p.Search},aF={image:n.Image,video:l,speech:f.AudioLines,transcription:g.Captions},aG={keys:["voice","easy","text","search"],models:["bots","studio"]};function aH({screen:a}){let{data:b,isLoading:d,error:e}=(0,aj.useServerRoute)(s.queryKey.config);if(d)return(0,c.jsx)(ah.SettingSkeleton,{rows:4});if(e)return(0,c.jsx)(ah.SettingError,{message:e.message});let f=a=>(0,I.isConfigSet)(b,a),g=a=>b?.find(b=>b.key===a)?.value,h=aG[a].flatMap(a=>I.CONFIG_GROUPS.find(b=>b.id===a)??[]),i=h.filter(a=>"keys"===a.section).flatMap(a=>a.entries);return(0,c.jsx)(ah.SettingScreen,{footer:(0,c.jsx)(ah.SettingRailNote,{children:"models"===a?"Her own voice and backend models are in Thursday. A bot can pick its own on its page.":`${i.filter(a=>f(a.key)).length} of ${i.length} set${h.some(a=>!(0,I.groupSatisfied)(a,f))?" · a call needs one voice key":" · your keys stay on this machine"}`}),children:h.map(a=>(0,c.jsx)(ah.SettingGroup,{label:a.title,hint:a.hint,right:(0,c.jsx)(aJ,{group:a,isSet:f}),children:"easy"===a.id?(0,c.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:a.entries.map(a=>(0,c.jsx)(aK,{card:!0,entry:a,set:f(a.key),needed:!1},a.key))}):"text"===a.id?(0,c.jsx)("div",{className:"flex flex-wrap gap-x-1.5 gap-y-3.5",children:a.entries.map(a=>(0,c.jsx)(aI,{entry:a,set:f(a.key)},a.key))}):(0,c.jsx)(ah.SettingItems,{children:a.entries.map(b=>b.effortOf?null:b.choices?(0,c.jsx)(aT,{entry:b,choices:b.choices,value:g(b.key),effort:aU(a,b.key),effortValue:g(I.DEFAULT_EFFORT_KEY)},b.key):(0,c.jsx)(aK,{entry:b,set:f(b.key),needed:!(0,I.groupSatisfied)(a,f)},b.key))})},a.id))})}function aI({entry:a,set:b}){return(0,c.jsxs)("button",{type:"button",onClick:()=>aW(a,b),"aria-label":`${a.label}: ${b?"set":"not set"}`,className:"group flex w-17 flex-col items-center gap-1.5 rounded-xl py-1 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsxs)("span",{className:"relative grid size-10.5 place-items-center rounded-[13px] bg-muted/60 transition-colors group-hover:bg-muted",children:[(0,c.jsx)(aS,{entry:a}),b&&(0,c.jsx)("span",{className:"absolute -top-1 -right-1 grid size-4 place-items-center rounded-full bg-primary text-primary-foreground ring-2 ring-background",children:(0,c.jsx)(h.Check,{className:"size-2.5"})})]}),(0,c.jsx)("span",{className:(0,ak.cn)("max-w-full truncate text-[11px]",b?"text-foreground":"text-muted-foreground"),children:a.label})]})}function aJ({group:a,isSet:b}){return"none"===a.require?null:(0,I.groupSatisfied)(a,b)?(0,c.jsxs)("span",{className:"flex items-center gap-1 font-mono text-[11px] text-muted-foreground",children:[(0,c.jsx)(h.Check,{className:"size-3"}),"ready"]}):(0,c.jsxs)("span",{className:(0,ak.cn)("flex items-center gap-1 font-mono text-[11px]",ak.WAITING_INK),children:[(0,c.jsx)(q.TriangleAlert,{className:"size-3"}),a.note??"Required"]})}function aK({entry:a,set:b,needed:d,card:e=!1,narrow:f=!1}){let g=aN(a,b),j=aP(a,b),k=aO(a,b),l=j.data?aQ(j.data):aM(b,d,g.data,a.signIn),m=g.isLoading||j.isLoading,n=(0,c.jsxs)("span",{className:(0,ak.cn)("flex shrink-0 items-center gap-1.5 font-mono text-xs",l.ink),children:[l.warn?(0,c.jsx)(q.TriangleAlert,{className:"size-3"}):b&&(0,c.jsx)(h.Check,{className:"size-3"}),l.text]});return(0,c.jsxs)("button",{type:"button",onClick:()=>{var d;return a.signIn?(d=a,v.notify.component({className:"sm:max-w-md",renderer:({close:a})=>(0,c.jsx)(aV,{entry:d,onDone:a})})):aW(a,b)},className:(0,ak.cn)("group flex w-full items-center gap-3 p-4 text-left outline-none transition-colors hover:bg-muted/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",e&&"rounded-xl border border-border/60"),children:[(0,c.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg bg-muted/60",children:(0,c.jsx)(aS,{entry:a})}),(0,c.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,c.jsxs)("span",{className:"flex items-center gap-2 truncate text-sm font-medium",children:[a.label,a.recommended&&(0,c.jsx)("span",{className:"rounded-full px-1.5 font-mono text-[9.5px] leading-4 font-normal text-muted-foreground ring-1 ring-border ring-inset",children:"recommended"})]}),f?m?(0,c.jsx)(y.Skeleton,{className:"h-3 w-20"}):n:(0,c.jsx)("span",{className:"block truncate font-mono text-xs text-muted-foreground",children:a.signIn?b?aR(j.data,k):"sign in with your account":a.key})]}),f?null:m?(0,c.jsx)(y.Skeleton,{className:"h-3 w-20 shrink-0"}):n,(0,c.jsx)(i.ChevronRight,{className:"size-4 shrink-0 text-muted-foreground/60 transition-colors group-hover:text-foreground"})]})}let aL=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"});function aM(a,b,c,d){return a?c?"refused"in c?{text:"Key refused",ink:"text-destructive",warn:!0}:{text:`${aL.format(c.balance)} left`,ink:c.low?ak.WAITING_INK:"text-muted-foreground",warn:c.low}:{text:d?"Signed in":"Set",ink:"text-muted-foreground",warn:!1}:b?{text:"Needed",ink:ak.WAITING_INK,warn:!0}:{text:d?"Signed out":"Not set",ink:"text-muted-foreground/60",warn:!1}}function aN(a,b){return(0,aj.useServerRoute)(b&&"vercel-ai-gateway"===a.provider?s.queryKey.gatewayCredits:null)}function aO(a,b){let{data:c}=(0,aj.useServerRoute)(b&&a.signIn?s.queryKey.llmModel:null);return c?.find(b=>b.id===a.provider)?.plan??null}function aP(a,b){return(0,aj.useServerRoute)(b&&a.signIn?s.queryKey.subscriptionUsage:null)}function aQ(a){return"refused"in a?{text:"Sign-in refused",ink:"text-destructive",warn:!0}:{text:a.spent?"Limit reached":`${a.usedPercent}% used`,ink:a.high?ak.WAITING_INK:"text-muted-foreground",warn:a.high}}function aR(a,b){let c=!a||"refused"in a?null:a,e=`${c?.plan??b??"unknown"} plan`;return c?.resetsAt?`${e} \xb7 resets in ${(0,d.formatDistanceToNowStrict)(new Date(c.resetsAt))}`:e}function aS({entry:a}){if(a.provider)return(0,c.jsx)(D.ProviderIcon,{provider:a.provider,className:"size-4"});let b=aE[a.key]??o.KeyRound,d=(0,c.jsx)(b,{className:"size-4 text-muted-foreground"});return a.site?(0,c.jsx)(x.SiteIcon,{host:a.site,className:"size-4 rounded-[4px]",fallback:d}):d}function aT({entry:a,choices:b,value:d,effort:e,effortValue:f}){let g=a.text?(0,E.parseTextModel)(d):(0,E.parseMediaModel)(d),{data:h}=(0,aj.useServerRoute)(a.text&&!d&&s.queryKey.automaticModel),i=a.kind?aF[a.kind]:F.BotsMark,[j]=(0,ai.useServerAction)(H.setConfigAction,{onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.automaticModel)}}),[k]=(0,ai.useServerAction)(G.removeConfigAction,{onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.automaticModel)}});return(0,c.jsxs)("div",{className:"flex w-full items-start gap-3 p-4",children:[(0,c.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg bg-muted/60",children:(0,c.jsx)(i,{className:"size-4 text-muted-foreground"})}),(0,c.jsxs)("div",{className:"min-w-0 flex-1 space-y-2",children:[(0,c.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 pt-1.5",children:[(0,c.jsx)("span",{className:"truncate text-sm font-medium",children:a.label}),!d&&(0,c.jsx)("span",{className:(0,ak.cn)("shrink-0 rounded-[5px] border border-border/60 px-1 font-mono text-[10px]",a.kind?ak.WAITING_INK:"text-muted-foreground"),children:a.kind?"off":"auto"})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,c.jsx)("div",{className:"min-w-0",children:(0,c.jsx)(C.ModelPicker,{kind:a.kind,provider:g?.provider??null,model:g?.model??"",unset:a.kind?"Not offered to bots until you pick one":function(a,b){if(!a)return"Automatic";if(!a.ref)return a.problem;let{provider:c,model:d}=a.ref,e=b.find(a=>a.value===`${c}/${d}`);return`Automatic \xb7 ${e?.label??d}`}(h,b),onChange:b=>j(a.key,`${b.provider}/${b.model.trim()}`),onUnset:d?()=>{k(a.key),e&&f&&k(e.key)}:void 0})}),e&&g&&(0,c.jsxs)("div",{className:"flex items-start gap-3 pt-0.5",children:[(0,c.jsx)("span",{className:"w-12 shrink-0 pt-1.5 font-mono text-[11px] text-muted-foreground",children:"effort"}),(0,c.jsx)(B.EffortSwitch,{provider:g.provider,model:g.model,value:E.effortSchema.safeParse(f).data??null,onChange:a=>a?j(e.key,a):k(e.key)})]})]})]})]})}let aU=(a,b)=>a.entries.find(a=>a.effortOf===b);function aV({entry:a,onDone:b}){let{data:d}=(0,aj.useServerRoute)(s.queryKey.config),e=(0,I.isConfigSet)(d,a.key),f=aO(a,e),g=aP(a,e),h=g.data?aQ(g.data):null,[i,j]=(0,ai.useServerAction)(G.removeConfigAction,{okMessage:`Signed out of ${a.label}`,onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.llmModel),b()}});return(0,c.jsx)(ah.SettingDialogContent,{title:a.label,description:e?(0,c.jsxs)(c.Fragment,{children:["Signed in ·"," ",(0,c.jsx)("span",{className:"font-mono",children:aR(g.data,f)}),h&&(0,c.jsxs)(c.Fragment,{children:[" · ",(0,c.jsx)("span",{className:(0,ak.cn)("font-mono",h.ink),children:h.text})]})]}):"Sign in with your ChatGPT account instead of a key",footer:(0,c.jsxs)(c.Fragment,{children:[e&&(0,c.jsx)(t.Button,{variant:"ghost",loading:j,onClick:async()=>{await v.notify.confirm({title:`Sign out of ${a.label}?`,description:"Nothing runs on your plan until you sign in again.",okText:"Sign out",destructive:!0})&&i(a.key)},children:"Sign out"}),(0,c.jsx)(t.Button,{variant:"ghost",onClick:b,children:e?"Close":"Cancel"}),!e&&(0,c.jsx)(A.ChatGptSignIn,{})]}),children:(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(ah.SettingNote,{children:e?"Bots on this subscription spend your plan's usage, not a key. When it runs out, the job stops and says when it resets.":"The sign-in opens in its own window. Approve it there, and this turns to signed in by itself."}),g.data&&"refused"in g.data&&(0,c.jsx)(ah.SettingNote,{className:"wrap-break-word text-destructive",children:g.data.refused})]})})}function aW(a,b){return v.notify.component({className:"sm:max-w-md",renderer:({close:d})=>(0,c.jsx)(aX,{entry:a,set:b,onDone:d})})}function aX({entry:a,set:b,onDone:d}){let[f,g]=(0,r.useState)(""),{data:h}=aN(a,b),i=h?aM(b,!1,h):null,j=()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.llmModel)},[k,l]=(0,ai.useServerAction)(H.setConfigAction,{okMessage:`${a.label} key saved`,onOk:()=>{j(),d()}}),[m,n]=(0,ai.useServerAction)(G.removeConfigAction,{okMessage:`${a.label} key removed`,onOk:()=>{j(),d()}}),o=async()=>{await v.notify.confirm({title:`Remove the ${a.label} key?`,description:"It is deleted from this computer, and nothing runs on it until a key is pasted again.",okText:"Remove",destructive:!0})&&m(a.key)};return(0,c.jsx)(ah.SettingDialogContent,{title:a.label,description:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"font-mono",children:a.key}),a.hint&&(0,c.jsxs)(c.Fragment,{children:[" · ",a.hint]}),i&&(0,c.jsxs)(c.Fragment,{children:[" · ",(0,c.jsx)("span",{className:(0,ak.cn)("font-mono",i.ink),children:i.text})]})]}),footer:(0,c.jsxs)(c.Fragment,{children:[b&&(0,c.jsx)(t.Button,{variant:"ghost",loading:n,onClick:()=>void o(),className:"mr-auto text-destructive hover:text-destructive",children:"Remove"}),(0,c.jsx)(t.Button,{variant:"ghost",onClick:d,children:"Cancel"}),(0,c.jsx)(t.Button,{loading:l,disabled:f.trim().length<z.KEY_MIN,onClick:()=>k(a.key,f),children:b?"Replace":"Save"})]}),children:(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(u.Input,{value:f,onChange:a=>g(a.target.value),onKeyDown:b=>{"Enter"===b.key&&f.trim().length>=z.KEY_MIN&&k(a.key,f)},placeholder:b?"New value — replaces the current key":a.keyLooks??"Paste the key",spellCheck:!1,type:"password",autoFocus:!0}),!b&&a.keysAt&&(0,c.jsxs)("a",{href:a.keysAt,target:"_blank",rel:"noreferrer",className:"flex w-fit items-center gap-1 px-0.5 text-[13px] text-foreground underline underline-offset-3 hover:text-foreground/80",children:["Get a key at ",new URL(a.keysAt).host,(0,c.jsx)(e.ArrowUpRight,{className:"size-3.5"})]}),h&&"refused"in h&&(0,c.jsx)(ah.SettingNote,{className:"wrap-break-word text-destructive",children:h.refused})]})})}a.s(["AccountsSetup",0,function({withoutVoice:a=!1}){let{data:b}=(0,aj.useServerRoute)(s.queryKey.config),d=a=>(0,I.isConfigSet)(b,a),e=a=>I.CONFIG_GROUPS.find(b=>b.id===a)?.entries??[],[f,g]=(0,r.useState)(!1),h=e("voice"),i=[...h,...e("text")],j=i.filter((b,c)=>(c<4||d(b.key))&&!(a&&h.includes(b))),k=i.filter(b=>!j.includes(b)&&!(a&&h.includes(b)));return(0,c.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,c.jsx)("div",{className:"flex flex-col gap-2",children:e("easy").map(a=>(0,c.jsx)(aK,{card:!0,narrow:!0,entry:a,set:d(a.key),needed:!1},a.key))}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-y-2.5",children:[j.map(a=>(0,c.jsx)(aI,{entry:a,set:d(a.key)},a.key)),k.length>0&&(0,c.jsxs)(w.Popover,{open:f,onOpenChange:g,children:[(0,c.jsxs)(w.PopoverTrigger,{"aria-label":`${k.length} more providers`,className:"group flex w-17 flex-col items-center gap-1.5 rounded-xl py-1 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsx)("span",{className:"grid size-10.5 place-items-center rounded-[13px] bg-muted/60 text-muted-foreground transition-colors group-hover:bg-muted",children:(0,c.jsx)(m.default,{className:"size-4"})}),(0,c.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"More"})]}),(0,c.jsx)(w.PopoverContent,{align:"end",className:"w-78 flex-row flex-wrap gap-0 gap-y-2.5 rounded-2xl p-2.5",onClick:()=>g(!1),children:k.map(a=>(0,c.jsx)(aI,{entry:a,set:d(a.key)},a.key))})]})]}),e("search").map(a=>(0,c.jsx)(aK,{card:!0,narrow:!0,entry:a,set:d(a.key),needed:!1},a.key))]})},"KeysSetting",0,()=>(0,c.jsx)(aH,{screen:"keys"}),"ModelsSetting",0,()=>(0,c.jsx)(aH,{screen:"models"}),"PhoneSetting",0,()=>(0,c.jsx)(ah.SettingScreen,{footer:(0,c.jsx)(ah.SettingRailNote,{children:"Nothing on this computer is opened to the internet: the app asks the chat service what was written."}),children:(0,c.jsx)(as,{})})],405593)},639210,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f3f3b22bfb9a472c1fae485a22c29fc1facae95d4",b.callServer,void 0,b.findSourceMapURL,"removeConfigAction");a.s(["removeConfigAction",0,c])}];
|
|
18
|
+
`,aq=({children:a})=>(0,c.jsx)("span",{className:"font-medium text-foreground",children:a}),ar={telegram:[{body:(0,c.jsxs)(c.Fragment,{children:["In Telegram, write to ",(0,c.jsx)(aq,{children:"@BotFather"}),", send ",(0,c.jsx)(aq,{children:"/newbot"})," and pick a name. It answers with a ",(0,c.jsx)(aq,{children:"token"}),"."]}),slot:{open:"https://t.me/BotFather",label:"Open @BotFather"}},{body:(0,c.jsx)(c.Fragment,{children:"Paste the token here."}),slot:{key:an.TELEGRAM_TOKEN_KEY,looks:"123456789:AAE…"}},{body:(0,c.jsx)(c.Fragment,{children:"From your phone, write anything to your bot."}),slot:{says:"Point your phone's camera at it to open the chat."}},{body:(0,c.jsxs)(c.Fragment,{children:["A question with a code appears on this computer. Press ",(0,c.jsx)(aq,{children:"Allow"})," if your phone shows the same code."]})}],discord:[{body:(0,c.jsxs)(c.Fragment,{children:["At ",(0,c.jsx)(aq,{children:"discord.com/developers"}),", make a ",(0,c.jsx)(aq,{children:"New Application"}),". So nobody else can add it to a server, set ",(0,c.jsx)(aq,{children:"Install Link"})," to"," ",(0,c.jsx)(aq,{children:"None"})," on its ",(0,c.jsx)(aq,{children:"Installation"})," page and turn off"," ",(0,c.jsx)(aq,{children:"Public Bot"})," on its ",(0,c.jsx)(aq,{children:"Bot"})," page. There, press"," ",(0,c.jsx)(aq,{children:"Reset Token"})," and copy it."]}),slot:{open:"https://discord.com/developers/applications",label:"Open discord.com/developers"}},{body:(0,c.jsx)(c.Fragment,{children:"Paste the token here."}),slot:{key:an.DISCORD_TOKEN_KEY,looks:"MTE…"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Add the bot to a server of your own"})," — Discord only delivers a message to a bot you share a server with. A private server made for this is fine."]}),slot:{says:"Point your phone's camera at it, or open it here. It asks which server, and adds the bot with no permissions in it.",does:"Add the bot to a server"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Send the bot a direct message"}),", not in the server: on a phone, tap the bot in the server's member list, then ",(0,c.jsx)(aq,{children:"Message"}),". A question with a code appears here: press ",(0,c.jsx)(aq,{children:"Allow"})," if your phone shows the same code."]})}],slack:[{body:(0,c.jsxs)(c.Fragment,{children:["At ",(0,c.jsx)(({href:a,children:b})=>(0,c.jsx)("a",{href:a,target:"_blank",rel:"noreferrer",className:"font-medium text-foreground underline underline-offset-4 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:b}),{href:"https://api.slack.com/apps",children:"api.slack.com/apps"}),","," ",(0,c.jsx)(aq,{children:"Create New App › From a manifest"}),", and paste the manifest."]}),slot:{manifest:!0}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Basic Information › App-Level Tokens"}),": generate one with"," ",(0,c.jsx)(aq,{children:"connections:write"}),". It starts with xapp-."]}),slot:{key:an.SLACK_APP_TOKEN_KEY,looks:"xapp-…"}},{body:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aq,{children:"Install App"})," to your workspace. The Bot User OAuth Token starts with xoxb-."]}),slot:{key:an.SLACK_BOT_TOKEN_KEY,looks:"xoxb-…"}},{body:(0,c.jsxs)(c.Fragment,{children:["In Slack, open the app under ",(0,c.jsx)(aq,{children:"Apps"})," and write in its"," ",(0,c.jsx)(aq,{children:"Messages"})," tab. A question with a code appears here: press"," ",(0,c.jsx)(aq,{children:"Allow"})," if Slack shows the same code."]})}]};function as(){let a=(0,aj.useServerRoute)(s.queryKey.config),b=(0,aj.useServerRoute)(s.queryKey.reach);(0,af.useAppEvent)({reach:()=>void(0,aj.revalidate)(s.queryKey.reach)});let d=b=>(0,I.isConfigSet)(a.data,b),e=a=>b.data?.channels.find(b=>b.name===a)??null,f=a=>!!e(a)?.allowed,g=an.REACH_CHANNELS.find(a=>e(a)?.refused),h=an.REACH_CHANNELS.find(a=>an.REACH_KEYS[a].every(d)&&!f(a)),i=!an.REACH_CHANNELS.some(f),[j,k]=(0,r.useState)(g??h??(i?an.REACH_CHANNELS[0]:null));return(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(ah.SettingItems,{children:an.REACH_CHANNELS.map(a=>(0,c.jsx)(at,{name:a,status:e(a),tokensIn:an.REACH_KEYS[a].filter(d).length,isSet:d,open:j===a,onOpen:()=>k(j===a?null:a)},a))}),(0,c.jsx)(ah.SettingNote,{children:"Only the one person you allow can write, and only direct messages are read. Work started here runs whether or not a tab is open, while Thursday is running on this computer."})]})}function at({name:a,status:b,tokensIn:d,isSet:e,open:f,onOpen:g}){var h;let j,k,l,m,n=ar[a],p=b?.refused??null,q=(h={connected:!!b?.bot,allowed:!!b?.allowed,refused:p},j=n.map(a=>a.slot&&"key"in a.slot?a.slot.key:null),k=a=>!e(a)||a===h.refused,l=j.findIndex(a=>a&&k(a)),m=j.reduce((a,b,c)=>b?c:a,-1),n.map((a,b)=>{let c=j[b];return c?k(c)?b===l?"now":"later":"done":l>=0?b<l?h.refused?"done":"flat":"later":h.allowed||b<m?"done":h.connected?"now":"flat"})),r=!!b?.bot&&!b?.allowed&&!p;return(0,c.jsxs)("div",{children:[(0,c.jsxs)("button",{type:"button",onClick:g,"aria-expanded":f,className:"flex w-full items-center gap-3 px-4 py-3 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsx)(x.SiteIcon,{host:ao[a],className:"size-4 rounded-[4px]",fallback:(0,c.jsx)(o.KeyRound,{className:"size-4 text-muted-foreground"})}),(0,c.jsx)("span",{className:"text-sm font-medium",children:an.REACH_LABEL[a]}),(0,c.jsx)("span",{className:"min-w-0 flex-1 truncate",children:(0,c.jsx)(au,{status:b,tokensIn:d,tokens:an.REACH_KEYS[a].length})}),(0,c.jsx)(i.ChevronRight,{className:(0,ak.cn)("size-4 shrink-0 text-muted-foreground transition-transform",f&&"rotate-90")})]}),f&&(0,c.jsxs)("div",{className:"px-4 pt-1 pb-4",children:[(0,c.jsx)("ol",{className:"space-y-3",children:n.map((a,d)=>(0,c.jsx)(av,{n:d+1,step:a,state:q[d],set:!!a.slot&&"key"in a.slot&&e(a.slot.key),refused:a.slot&&"key"in a.slot&&a.slot.key===p?b?.problem??"":null,link:b?.link??null,waiting:r&&d===n.length-1},d))}),b?.allowed&&(0,c.jsx)(aD,{name:a,who:b.allowed.name,stopped:!!p})]})]})}function au({status:a,tokensIn:b,tokens:d}){let e="text-xs";return b<d?(0,c.jsx)("span",{className:(0,ak.cn)(e,"text-muted-foreground"),children:b?`${b} of ${d} tokens in`:"Not set"}):a?.refused?(0,c.jsxs)("span",{className:(0,ak.cn)(e,"text-destructive"),children:["Stopped — ",an.REACH_LABEL[a.name]," turned the token away"]}):a?.problem?(0,c.jsx)(ag.ShinyText,{text:`${a.bot?"Reconnecting":"Connecting"}… ${a.problem}`,className:(0,ak.cn)(e,"align-middle")}):a?.allowed?(0,c.jsxs)("span",{className:(0,ak.cn)(e,"text-muted-foreground"),children:["Listening as ",a.bot,". ",a.allowed.name," is let in."]}):a?.bot?(0,c.jsx)(ag.ShinyText,{text:`Listening as ${a.bot} — waiting for your first message`,tone:"waiting",className:(0,ak.cn)(e,"align-middle")}):(0,c.jsx)(ag.ShinyText,{text:"Connecting…",className:(0,ak.cn)(e,"align-middle")})}function av({n:a,step:b,state:d,set:e,refused:f,link:g,waiting:h}){return(0,c.jsxs)("li",{className:"flex gap-3 text-[13px] leading-relaxed",children:[(0,c.jsx)(aw,{n:a,state:d}),(0,c.jsxs)("div",{className:"min-w-0 flex-1 space-y-2.5",children:[(0,c.jsx)("p",{className:(0,ak.cn)("done"===d||"later"===d?"text-muted-foreground/60 **:text-inherit":"text-muted-foreground"),children:b.body}),(0,c.jsx)(ax,{slot:b.slot,state:d,set:e,refused:f,link:g,waiting:h})]})]})}function aw({n:a,state:b}){return"done"===b?(0,c.jsx)("span",{className:"mt-0.5 grid size-5 shrink-0 place-items-center rounded-full bg-foreground text-background",children:(0,c.jsx)(h.Check,{className:"size-3"})}):(0,c.jsx)("span",{className:(0,ak.cn)("mt-0.5 grid size-5 shrink-0 place-items-center rounded-full bg-background font-mono text-[10.5px] ring-1","now"===b?(0,ak.cn)(ak.WAITING_INK,"ring-waiting/40"):"text-muted-foreground ring-border/60","later"===b&&"opacity-60"),children:a})}function ax({slot:a,state:b,set:d,refused:e,link:f,waiting:g}){let h=g&&(0,c.jsx)(ag.ShinyText,{text:"Waiting for your first message…",tone:"waiting"});return"later"===b?null:a&&"key"in a?(0,c.jsx)(aB,{configKey:a.key,looks:a.looks,set:d,refused:e}):"done"===b?a&&"says"in a&&f?(0,c.jsx)(aA,{href:f,children:a.does??az(f)}):null:a?"open"in a?(0,c.jsx)(aA,{href:a.open,children:a.label}):"manifest"in a?(0,c.jsx)(aC,{}):f?(0,c.jsxs)("div",{className:"space-y-2.5",children:[(0,c.jsx)(ay,{link:f,says:a.says,does:a.does}),h]}):h||null:h||null}function ay({link:a,says:b,does:d}){let{size:e,data:f}=function(a){let{ecc:b="L",boostEcc:c=!1,minVersion:d=1,maxVersion:e=40,maskPattern:f=-1,border:g=1}={},h="string"==typeof a?function(a){var b,c;if(""===a)return[];if(b=a,Q.test(b))return[function(a){var b;if(b=a,!Q.test(b))throw RangeError("String contains non-numeric characters");let c=[];for(let b=0;b<a.length;){let d=Math.min(a.length-b,3);W(Number.parseInt(a.substring(b,b+d),10),3*d+1,c),b+=d}return new Y(Z,a.length,c)}(a)];return(c=a,R.test(c))?[function(a){var b;let c;if(b=a,!R.test(b))throw RangeError("String contains unencodable characters in alphanumeric mode");let d=[];for(c=0;c+2<=a.length;c+=2){let b=45*S.indexOf(a.charAt(c));W(b+=S.indexOf(a.charAt(c+1)),11,d)}return c<a.length&&W(S.indexOf(a.charAt(c)),6,d),new Y($,a.length,d)}(a)]:[ab(function(a){a=encodeURI(a);let b=[];for(let c=0;c<a.length;c++)"%"!==a.charAt(c)?b.push(a.charCodeAt(c)):(b.push(Number.parseInt(a.substring(c+1,c+3),16)),c+=2);return b}(a))]}(a):Array.isArray(a)?[ab(a)]:void 0;if(!h)throw Error(`uqr only supports encoding string and binary data, but got: ${typeof a}`);let i=function(a,b,c=1,d=40,e=-1,f=!0){let g,h;if(!(1<=c&&c<=d&&d<=40)||e<-1||e>7)throw RangeError("Invalid value");for(g=c;;g++){let c=8*ad(g,b),e=function(a,b){let c=0;for(let d of a){let a=aa(d.mode,b);if(d.numChars>=1<<a)return 1/0;c+=4+a+d.bitData.length}return c}(a,g);if(e<=c){h=e;break}if(g>=d)throw RangeError("Data too long")}for(let a of[M,N,O])f&&h<=8*ad(g,a)&&(b=a);let i=[];for(let b of a)for(let a of(W(b.mode[0],4,i),W(b.numChars,aa(b.mode,g),i),b.getData()))i.push(a);let j=8*ad(g,b);W(0,Math.min(4,j-i.length),i),W(0,(8-i.length%8)%8,i);for(let a=236;i.length<j;a^=253)W(a,8,i);let k=Array.from({length:Math.ceil(i.length/8)},()=>0);return i.forEach((a,b)=>k[b>>>3]|=a<<7-(7&b)),new V(g,b,k,e)}(h,P[b],d,e,f,c);return function(a,b=1){if(!b)return a;let{size:c}=a,d=c+2*b;a.size=d,a.data.forEach(a=>{for(let c=0;c<b;c++)a.unshift(!1),a.push(!1)});for(let c=0;c<b;c++)a.data.unshift(Array.from({length:d},a=>!1)),a.data.push(Array.from({length:d},a=>!1));let e=L.Border;a.types.forEach(a=>{for(let c=0;c<b;c++)a.unshift(e),a.push(e)});for(let c=0;c<b;c++)a.types.unshift(Array.from({length:d},a=>e)),a.types.push(Array.from({length:d},a=>e));return a}({version:i.version,maskPattern:i.mask,size:i.size,data:i.modules,types:i.types},g)}(a),g=az(a);return(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-4",children:[(0,c.jsx)("div",{className:"rounded-lg bg-white p-2.5",children:(0,c.jsx)("svg",{viewBox:`0 0 ${e} ${e}`,className:"block size-31 text-black",role:"img","aria-label":`A picture of ${g} for a phone camera`,children:f.flatMap((a,b)=>a.map((a,d)=>a?(0,c.jsx)("rect",{x:d,y:b,width:1,height:1,fill:"currentColor"},`${d}-${b}`):null))})}),(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)("p",{className:"text-muted-foreground",children:b}),(0,c.jsx)(aA,{href:a,children:d??g})]})]})}let az=a=>a.replace(/^https:\/\//,"");function aA({href:a,children:b}){return(0,c.jsxs)("a",{href:a,target:"_blank",rel:"noreferrer",className:(0,ak.cn)((0,t.buttonVariants)({variant:"outline",size:"sm"})),children:[(0,c.jsx)(K.ExternalLink,{}),b]})}function aB({configKey:a,looks:b,set:d,refused:e}){let[f,g]=(0,r.useState)(""),[h,i]=(0,r.useState)(!1),j=()=>{g(""),i(!1),(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.reach)},[k,l]=(0,ai.useServerAction)(H.setConfigAction,{onOk:j}),[m,n]=(0,ai.useServerAction)(G.removeConfigAction,{onOk:j}),o=async()=>{await v.notify.confirm({title:"Remove this token?",description:"That service stops, and whoever is let in is let go.",okText:"Remove",destructive:!0})&&m(a)};return d&&!h&&null===e?(0,c.jsx)(t.Button,{size:"xs",variant:"ghost",onClick:()=>i(!0),className:"-ml-2 text-muted-foreground",children:"Change the token"}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("form",{className:"flex flex-wrap items-center gap-2",onSubmit:b=>{b.preventDefault(),k(a,f)},children:[(0,c.jsx)(u.Input,{value:f,onChange:a=>g(a.target.value),placeholder:b,"aria-label":"Token",type:"password",autoComplete:"off",spellCheck:!1,className:"w-72 font-mono"}),(0,c.jsx)(t.Button,{type:"submit",size:"sm",loading:l,disabled:f.trim().length<z.KEY_MIN,children:d?"Replace":"Save"}),d&&(0,c.jsxs)(c.Fragment,{children:[null===e&&(0,c.jsx)(t.Button,{size:"sm",variant:"ghost",onClick:()=>i(!1),children:"Cancel"}),(0,c.jsx)(t.Button,{size:"sm",variant:"ghost",loading:n,onClick:()=>void o(),className:"ml-auto text-destructive hover:text-destructive",children:"Remove"})]})]}),e&&(0,c.jsx)("p",{className:"max-w-xl text-destructive",children:e})]})}function aC(){let[a,b]=(0,r.useState)(!1);return(0,c.jsxs)(t.Button,{size:"sm",variant:"outline",onClick:()=>void navigator.clipboard.writeText(ap).then(()=>{b(!0),setTimeout(()=>b(!1),2e3)}),children:[a?(0,c.jsx)(h.Check,{}):(0,c.jsx)(J.Copy,{}),a?"Copied":"Copy the manifest"]})}function aD({name:a,who:b,stopped:d}){let[e,f]=(0,ai.useServerAction)(am,{onOk:()=>(0,aj.revalidate)(s.queryKey.reach)});return(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 pt-3 pl-8 text-[13px] text-muted-foreground",children:[(0,c.jsx)("span",{children:d?`${b} is let in.`:`${b} can write from a phone.`}),(0,c.jsx)(t.Button,{size:"sm",variant:"outline",loading:f,onClick:async()=>{await v.notify.confirm({title:`Let ${b} go?`,description:"Nobody can write to Thursday through this service until someone is let in again.",okText:"Let them go",destructive:!0})&&e(a)},children:"Let them go"})]})}let aE={[I.EXA_API_KEY]:p.Search},aF={image:n.Image,video:l,speech:f.AudioLines,transcription:g.Captions},aG={keys:["voice","easy","text","search"],models:["bots","studio"]};function aH({screen:a}){let{data:b,isLoading:d,error:e}=(0,aj.useServerRoute)(s.queryKey.config);if(d)return(0,c.jsx)(ah.SettingSkeleton,{rows:4});if(e)return(0,c.jsx)(ah.SettingError,{message:e.message});let f=a=>(0,I.isConfigSet)(b,a),g=a=>b?.find(b=>b.key===a)?.value,h=aG[a].flatMap(a=>I.CONFIG_GROUPS.find(b=>b.id===a)??[]),i=h.filter(a=>"keys"===a.section).flatMap(a=>a.entries);return(0,c.jsx)(ah.SettingScreen,{footer:(0,c.jsx)(ah.SettingRailNote,{children:"models"===a?"Her own voice and backend models are in Thursday. A bot can pick its own on its page.":`${i.filter(a=>f(a.key)).length} of ${i.length} set${h.some(a=>!(0,I.groupSatisfied)(a,f))?" · a call needs one voice key":" · your keys stay on this machine"}`}),children:h.map(a=>(0,c.jsx)(ah.SettingGroup,{label:a.title,hint:a.hint,right:(0,c.jsx)(aJ,{group:a,isSet:f}),children:"easy"===a.id?(0,c.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:a.entries.map(a=>(0,c.jsx)(aK,{card:!0,entry:a,set:f(a.key),needed:!1},a.key))}):"text"===a.id?(0,c.jsx)("div",{className:"flex flex-wrap gap-x-1.5 gap-y-3.5",children:a.entries.map(a=>(0,c.jsx)(aI,{entry:a,set:f(a.key)},a.key))}):(0,c.jsx)(ah.SettingItems,{children:a.entries.map(b=>b.effortOf?null:b.choices?(0,c.jsx)(aT,{entry:b,choices:b.choices,value:g(b.key),effort:aU(a,b.key),effortValue:g(I.DEFAULT_EFFORT_KEY)},b.key):(0,c.jsx)(aK,{entry:b,set:f(b.key),needed:!(0,I.groupSatisfied)(a,f)},b.key))})},a.id))})}function aI({entry:a,set:b}){return(0,c.jsxs)("button",{type:"button",onClick:()=>aW(a,b),"aria-label":`${a.label}: ${b?"set":"not set"}`,className:"group flex w-17 flex-col items-center gap-1.5 rounded-xl py-1 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsxs)("span",{className:"relative grid size-10.5 place-items-center rounded-[13px] bg-muted/60 transition-colors group-hover:bg-muted",children:[(0,c.jsx)(aS,{entry:a}),b&&(0,c.jsx)("span",{className:"absolute -top-1 -right-1 grid size-4 place-items-center rounded-full bg-primary text-primary-foreground ring-2 ring-background",children:(0,c.jsx)(h.Check,{className:"size-2.5"})})]}),(0,c.jsx)("span",{className:(0,ak.cn)("max-w-full truncate text-[11px]",b?"text-foreground":"text-muted-foreground"),children:a.label})]})}function aJ({group:a,isSet:b}){return"none"===a.require?null:(0,I.groupSatisfied)(a,b)?(0,c.jsxs)("span",{className:"flex items-center gap-1 font-mono text-[11px] text-muted-foreground",children:[(0,c.jsx)(h.Check,{className:"size-3"}),"ready"]}):(0,c.jsxs)("span",{className:(0,ak.cn)("flex items-center gap-1 font-mono text-[11px]",ak.WAITING_INK),children:[(0,c.jsx)(q.TriangleAlert,{className:"size-3"}),a.note??"Required"]})}function aK({entry:a,set:b,needed:d,card:e=!1,narrow:f=!1}){let g=aN(a,b),j=aP(a,b),k=aO(a,b),l=j.data?aQ(j.data):aM(b,d,g.data,a.signIn),m=g.isLoading||j.isLoading,n=(0,c.jsxs)("span",{className:(0,ak.cn)("flex shrink-0 items-center gap-1.5 font-mono text-xs",l.ink),children:[l.warn?(0,c.jsx)(q.TriangleAlert,{className:"size-3"}):b&&(0,c.jsx)(h.Check,{className:"size-3"}),l.text]});return(0,c.jsxs)("button",{type:"button",onClick:()=>{var d;return a.signIn?(d=a,v.notify.component({className:"sm:max-w-md",renderer:({close:a})=>(0,c.jsx)(aV,{entry:d,onDone:a})})):aW(a,b)},className:(0,ak.cn)("group flex w-full items-center gap-3 p-4 text-left outline-none transition-colors hover:bg-muted/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",e&&"rounded-xl border border-border/60"),children:[(0,c.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg bg-muted/60",children:(0,c.jsx)(aS,{entry:a})}),(0,c.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,c.jsxs)("span",{className:"flex items-center gap-2 truncate text-sm font-medium",children:[a.label,a.recommended&&(0,c.jsx)("span",{className:"rounded-full px-1.5 font-mono text-[9.5px] leading-4 font-normal text-muted-foreground ring-1 ring-border ring-inset",children:"recommended"})]}),f?m?(0,c.jsx)(y.Skeleton,{className:"h-3 w-20"}):n:(0,c.jsx)("span",{className:"block truncate font-mono text-xs text-muted-foreground",children:a.signIn?b?aR(j.data,k):"sign in with your account":a.key})]}),f?null:m?(0,c.jsx)(y.Skeleton,{className:"h-3 w-20 shrink-0"}):n,(0,c.jsx)(i.ChevronRight,{className:"size-4 shrink-0 text-muted-foreground/60 transition-colors group-hover:text-foreground"})]})}let aL=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"});function aM(a,b,c,d){return a?c?"refused"in c?{text:"Key refused",ink:"text-destructive",warn:!0}:{text:`${aL.format(c.balance)} left`,ink:c.low?ak.WAITING_INK:"text-muted-foreground",warn:c.low}:{text:d?"Signed in":"Set",ink:"text-muted-foreground",warn:!1}:b?{text:"Needed",ink:ak.WAITING_INK,warn:!0}:{text:d?"Signed out":"Not set",ink:"text-muted-foreground/60",warn:!1}}function aN(a,b){return(0,aj.useServerRoute)(b&&(0,E.isCatalogProvider)(a.provider)?s.queryKey.keyCredits(a.provider):null)}function aO(a,b){let{data:c}=(0,aj.useServerRoute)(b&&a.signIn?s.queryKey.llmModel:null);return c?.find(b=>b.id===a.provider)?.plan??null}function aP(a,b){return(0,aj.useServerRoute)(b&&a.signIn?s.queryKey.subscriptionUsage:null)}function aQ(a){return"refused"in a?{text:"Sign-in refused",ink:"text-destructive",warn:!0}:{text:a.spent?"Limit reached":`${a.usedPercent}% used`,ink:a.high?ak.WAITING_INK:"text-muted-foreground",warn:a.high}}function aR(a,b){let c=!a||"refused"in a?null:a,e=`${c?.plan??b??"unknown"} plan`;return c?.resetsAt?`${e} \xb7 resets in ${(0,d.formatDistanceToNowStrict)(new Date(c.resetsAt))}`:e}function aS({entry:a}){if(a.provider)return(0,c.jsx)(D.ProviderIcon,{provider:a.provider,className:"size-4"});let b=aE[a.key]??o.KeyRound,d=(0,c.jsx)(b,{className:"size-4 text-muted-foreground"});return a.site?(0,c.jsx)(x.SiteIcon,{host:a.site,className:"size-4 rounded-[4px]",fallback:d}):d}function aT({entry:a,choices:b,value:d,effort:e,effortValue:f}){let g=a.text?(0,E.parseTextModel)(d):(0,E.parseMediaModel)(d),{data:h}=(0,aj.useServerRoute)(a.text&&!d&&s.queryKey.automaticModel),i=a.kind?aF[a.kind]:F.BotsMark,[j]=(0,ai.useServerAction)(H.setConfigAction,{onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.automaticModel)}}),[k]=(0,ai.useServerAction)(G.removeConfigAction,{onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.automaticModel)}});return(0,c.jsxs)("div",{className:"flex w-full items-start gap-3 p-4",children:[(0,c.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg bg-muted/60",children:(0,c.jsx)(i,{className:"size-4 text-muted-foreground"})}),(0,c.jsxs)("div",{className:"min-w-0 flex-1 space-y-2",children:[(0,c.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 pt-1.5",children:[(0,c.jsx)("span",{className:"truncate text-sm font-medium",children:a.label}),!d&&(0,c.jsx)("span",{className:(0,ak.cn)("shrink-0 rounded-[5px] border border-border/60 px-1 font-mono text-[10px]",a.kind?ak.WAITING_INK:"text-muted-foreground"),children:a.kind?"off":"auto"})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,c.jsx)("div",{className:"min-w-0",children:(0,c.jsx)(C.ModelPicker,{kind:a.kind,provider:g?.provider??null,model:g?.model??"",unset:a.kind?"Not offered to bots until you pick one":function(a,b){if(!a)return"Automatic";if(!a.ref)return a.problem;let{provider:c,model:d}=a.ref,e=b.find(a=>a.value===`${c}/${d}`);return`Automatic \xb7 ${e?.label??d}`}(h,b),onChange:b=>j(a.key,`${b.provider}/${b.model.trim()}`),onUnset:d?()=>{k(a.key),e&&f&&k(e.key)}:void 0})}),e&&g&&(0,c.jsxs)("div",{className:"flex items-start gap-3 pt-0.5",children:[(0,c.jsx)("span",{className:"w-12 shrink-0 pt-1.5 font-mono text-[11px] text-muted-foreground",children:"effort"}),(0,c.jsx)(B.EffortSwitch,{provider:g.provider,model:g.model,value:E.effortSchema.safeParse(f).data??null,onChange:a=>a?j(e.key,a):k(e.key)})]})]})]})]})}let aU=(a,b)=>a.entries.find(a=>a.effortOf===b);function aV({entry:a,onDone:b}){let{data:d}=(0,aj.useServerRoute)(s.queryKey.config),e=(0,I.isConfigSet)(d,a.key),f=aO(a,e),g=aP(a,e),h=g.data?aQ(g.data):null,[i,j]=(0,ai.useServerAction)(G.removeConfigAction,{okMessage:`Signed out of ${a.label}`,onOk:()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.llmModel),b()}});return(0,c.jsx)(ah.SettingDialogContent,{title:a.label,description:e?(0,c.jsxs)(c.Fragment,{children:["Signed in ·"," ",(0,c.jsx)("span",{className:"font-mono",children:aR(g.data,f)}),h&&(0,c.jsxs)(c.Fragment,{children:[" · ",(0,c.jsx)("span",{className:(0,ak.cn)("font-mono",h.ink),children:h.text})]})]}):"Sign in with your ChatGPT account instead of a key",footer:(0,c.jsxs)(c.Fragment,{children:[e&&(0,c.jsx)(t.Button,{variant:"ghost",loading:j,onClick:async()=>{await v.notify.confirm({title:`Sign out of ${a.label}?`,description:"Nothing runs on your plan until you sign in again.",okText:"Sign out",destructive:!0})&&i(a.key)},children:"Sign out"}),(0,c.jsx)(t.Button,{variant:"ghost",onClick:b,children:e?"Close":"Cancel"}),!e&&(0,c.jsx)(A.ChatGptSignIn,{})]}),children:(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(ah.SettingNote,{children:e?"Bots on this subscription spend your plan's usage, not a key. When it runs out, the job stops and says when it resets.":"The sign-in opens in its own window. Approve it there, and this turns to signed in by itself."}),g.data&&"refused"in g.data&&(0,c.jsx)(ah.SettingNote,{className:"wrap-break-word text-destructive",children:g.data.refused})]})})}function aW(a,b){return v.notify.component({className:"sm:max-w-md",renderer:({close:d})=>(0,c.jsx)(aX,{entry:a,set:b,onDone:d})})}function aX({entry:a,set:b,onDone:d}){let[f,g]=(0,r.useState)(""),{data:h}=aN(a,b),i=h?aM(b,!1,h):null,j=()=>{(0,aj.revalidate)(s.queryKey.config),(0,aj.revalidate)(s.queryKey.llmModel)},[k,l]=(0,ai.useServerAction)(H.setConfigAction,{okMessage:`${a.label} key saved`,onOk:()=>{j(),d()}}),[m,n]=(0,ai.useServerAction)(G.removeConfigAction,{okMessage:`${a.label} key removed`,onOk:()=>{j(),d()}}),o=async()=>{await v.notify.confirm({title:`Remove the ${a.label} key?`,description:"It is deleted from this computer, and nothing runs on it until a key is pasted again.",okText:"Remove",destructive:!0})&&m(a.key)};return(0,c.jsx)(ah.SettingDialogContent,{title:a.label,description:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"font-mono",children:a.key}),a.hint&&(0,c.jsxs)(c.Fragment,{children:[" · ",a.hint]}),i&&(0,c.jsxs)(c.Fragment,{children:[" · ",(0,c.jsx)("span",{className:(0,ak.cn)("font-mono",i.ink),children:i.text})]})]}),footer:(0,c.jsxs)(c.Fragment,{children:[b&&(0,c.jsx)(t.Button,{variant:"ghost",loading:n,onClick:()=>void o(),className:"mr-auto text-destructive hover:text-destructive",children:"Remove"}),(0,c.jsx)(t.Button,{variant:"ghost",onClick:d,children:"Cancel"}),(0,c.jsx)(t.Button,{loading:l,disabled:f.trim().length<z.KEY_MIN,onClick:()=>k(a.key,f),children:b?"Replace":"Save"})]}),children:(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)(u.Input,{value:f,onChange:a=>g(a.target.value),onKeyDown:b=>{"Enter"===b.key&&f.trim().length>=z.KEY_MIN&&k(a.key,f)},placeholder:b?"New value — replaces the current key":a.keyLooks??"Paste the key",spellCheck:!1,type:"password",autoFocus:!0}),!b&&a.keysAt&&(0,c.jsxs)("a",{href:a.keysAt,target:"_blank",rel:"noreferrer",className:"flex w-fit items-center gap-1 px-0.5 text-[13px] text-foreground underline underline-offset-3 hover:text-foreground/80",children:["Get a key at ",new URL(a.keysAt).host,(0,c.jsx)(e.ArrowUpRight,{className:"size-3.5"})]}),h&&"refused"in h&&(0,c.jsx)(ah.SettingNote,{className:"wrap-break-word text-destructive",children:h.refused})]})})}a.s(["AccountsSetup",0,function({withoutVoice:a=!1}){let{data:b}=(0,aj.useServerRoute)(s.queryKey.config),d=a=>(0,I.isConfigSet)(b,a),e=a=>I.CONFIG_GROUPS.find(b=>b.id===a)?.entries??[],[f,g]=(0,r.useState)(!1),h=e("voice"),i=[...h,...e("text")],j=i.filter((b,c)=>(c<4||d(b.key))&&!(a&&h.includes(b))),k=i.filter(b=>!j.includes(b)&&!(a&&h.includes(b)));return(0,c.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,c.jsx)("div",{className:"flex flex-col gap-2",children:e("easy").map(a=>(0,c.jsx)(aK,{card:!0,narrow:!0,entry:a,set:d(a.key),needed:!1},a.key))}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-y-2.5",children:[j.map(a=>(0,c.jsx)(aI,{entry:a,set:d(a.key)},a.key)),k.length>0&&(0,c.jsxs)(w.Popover,{open:f,onOpenChange:g,children:[(0,c.jsxs)(w.PopoverTrigger,{"aria-label":`${k.length} more providers`,className:"group flex w-17 flex-col items-center gap-1.5 rounded-xl py-1 outline-none focus-visible:ring-3 focus-visible:ring-ring/50",children:[(0,c.jsx)("span",{className:"grid size-10.5 place-items-center rounded-[13px] bg-muted/60 text-muted-foreground transition-colors group-hover:bg-muted",children:(0,c.jsx)(m.default,{className:"size-4"})}),(0,c.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"More"})]}),(0,c.jsx)(w.PopoverContent,{align:"end",className:"w-78 flex-row flex-wrap gap-0 gap-y-2.5 rounded-2xl p-2.5",onClick:()=>g(!1),children:k.map(a=>(0,c.jsx)(aI,{entry:a,set:d(a.key)},a.key))})]})]}),e("search").map(a=>(0,c.jsx)(aK,{card:!0,narrow:!0,entry:a,set:d(a.key),needed:!1},a.key))]})},"KeysSetting",0,()=>(0,c.jsx)(aH,{screen:"keys"}),"ModelsSetting",0,()=>(0,c.jsx)(aH,{screen:"models"}),"PhoneSetting",0,()=>(0,c.jsx)(ah.SettingScreen,{footer:(0,c.jsx)(ah.SettingRailNote,{children:"Nothing on this computer is opened to the internet: the app asks the chat service what was written."}),children:(0,c.jsx)(as,{})})],405593)},214013,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fc5ad2ca5f880c272d3b36234f095644501ad4300",b.callServer,void 0,b.findSourceMapURL,"removeConfigAction");a.s(["removeConfigAction",0,c])}];
|
|
19
19
|
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=features_config_05zi68v._.js.map
|