thursday-agent 0.22.0 → 0.23.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/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +4 -4
- 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 +6 -6
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route.js +5 -4
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route.js +9 -9
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/route.js +9 -9
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/[id]/route.js +2 -2
- package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/file/route.js +12 -12
- package/.next/server/app/api/bot/thread/file/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/route.js +2 -2
- package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js +2 -2
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- 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 +3 -3
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/automatic/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/[provider]/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/credits/[provider]/route.js.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/mcp/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route.js +13 -13
- 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 +11 -11
- package/.next/server/app/api/reach/route.js.nft.json +1 -1
- package/.next/server/app/api/routine/route.js +9 -9
- package/.next/server/app/api/routine/route.js.nft.json +1 -1
- package/.next/server/app/api/running/route.js.nft.json +1 -1
- package/.next/server/app/api/signins/route.js +7 -6
- package/.next/server/app/api/signins/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js +8 -8
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js +8 -8
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/end/route.js +6 -6
- package/.next/server/app/api/thursday/call/end/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/plan/route.js +16 -16
- package/.next/server/app/api/thursday/call/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js +6 -6
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/settings/route.js +6 -6
- package/.next/server/app/api/thursday/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/text/route.js +16 -16
- package/.next/server/app/api/thursday/text/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +10 -10
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/files/route.js +1 -1
- package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/route.js +1 -1
- package/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +11 -11
- package/.next/server/app/artifact/[...path]/page.js +5 -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/react-loadable-manifest.json +2 -2
- package/.next/server/app/page/server-reference-manifest.json +162 -162
- package/.next/server/app/page.js +7 -7
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__019e1fy._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__01jpmcj._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__03bjojd._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__03vunn6._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__06kxzw-._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0atwstu._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__005onk_._.js → [root-of-the-server]__0cfv4rq._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0d-dfqm._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1-i6lgn._.js → [root-of-the-server]__0d00o4_._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0itmdqy._.js → [root-of-the-server]__0e8y4ok._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1tyftcr._.js → [root-of-the-server]__0eem_66._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0xn7a8p._.js → [root-of-the-server]__0jn2qbf._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__08922kg._.js → [root-of-the-server]__0l563r8._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0mh1tgg._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0mq0qmk._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ncs9uu._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1a7rgvy._.js → [root-of-the-server]__0pp2355._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1g08s7l._.js → [root-of-the-server]__0r77huw._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__10_v9ml._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__13hng6h._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1478lu3._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__16xao_p._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__17kdjf6._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__17m7ag9._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__17yv6lg._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__19aqyg-._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__19imprr._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1_04mcf._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__1ceammd._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1fhule0._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1hing45._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0mttntm._.js → [root-of-the-server]__1ivfglf._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1jcu_e9._.js +5 -0
- package/.next/server/chunks/{[root-of-the-server]__0m0qglo._.js → [root-of-the-server]__1kb-dkn._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0eluax8._.js → [root-of-the-server]__1mowvzz._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1ndi14y._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1o7z93z._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1onvx8x._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1q_d6dj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1u_6dhy._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1_wtn0q._.js → [root-of-the-server]__1yiqjfx._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1yr_vvq._.js +3 -0
- package/.next/server/chunks/_0-mqt2w._.js +3 -0
- package/.next/server/chunks/_0-qt5if._.js +1 -1
- package/.next/server/chunks/{_0fau3ya._.js → _00aztuo._.js} +2 -2
- package/.next/server/chunks/_021kabv._.js +53 -0
- package/.next/server/chunks/_032k4m6._.js +3 -0
- package/.next/server/chunks/_03p6r2-._.js +1 -1
- package/.next/server/chunks/_06b5b4-._.js +2 -2
- package/.next/server/chunks/_06u9yo-._.js +1 -1
- package/.next/server/chunks/_07mczew._.js +3 -0
- package/.next/server/chunks/_07pkeds._.js +1 -1
- package/.next/server/chunks/_08354bn._.js +22 -22
- package/.next/server/chunks/_083t_nr._.js +5 -0
- package/.next/server/chunks/_0c-s0ei._.js +3 -0
- package/.next/server/chunks/_0cq69mm._.js +1 -1
- package/.next/server/chunks/_0gifi_2._.js +7 -0
- package/.next/server/chunks/_0gxz_1b._.js +1 -1
- package/.next/server/chunks/{_1tjwvoz._.js → _0la8s6t._.js} +2 -2
- package/.next/server/chunks/_0p27in2._.js +1 -1
- package/.next/server/chunks/{_09rtyfn._.js → _0rn3c_0._.js} +24 -26
- package/.next/server/chunks/_0ue8nq-._.js +5 -1
- package/.next/server/chunks/{_1uu4wjr._.js → _0wkhub3._.js} +2 -2
- package/.next/server/chunks/_0wyh244._.js +22 -22
- package/.next/server/chunks/_0ynjnhl._.js +5 -0
- package/.next/server/chunks/_1-wp0r0._.js +1 -1
- package/.next/server/chunks/{_201k0ah._.js → _12-7atf._.js} +2 -2
- package/.next/server/chunks/{_02mn8d7._.js → _124q1p2._.js} +2 -2
- package/.next/server/chunks/{_14xuq46._.js → _13qoxq9._.js} +24 -26
- package/.next/server/chunks/{_11y8h29._.js → _15-_mie._.js} +2 -2
- package/.next/server/chunks/_1823_7a._.js +1 -1
- package/.next/server/chunks/{_0uir6hb._.js → _186uku9._.js} +2 -2
- package/.next/server/chunks/{_0ggqpiz._.js → _18sj4xf._.js} +2 -2
- package/.next/server/chunks/_19kea1l._.js +12 -12
- package/.next/server/chunks/_1ac33qw._.js +2 -2
- package/.next/server/chunks/{_18z965x._.js → _1chy-lk._.js} +2 -2
- package/.next/server/chunks/_1cw6-rv._.js +1 -1
- package/.next/server/chunks/_1evvnbp._.js +1 -1
- package/.next/server/chunks/_1f_x75d._.js +3 -0
- package/.next/server/chunks/_1gn2r2q._.js +7 -9
- package/.next/server/chunks/_1icgbi8._.js +1 -1
- package/.next/server/chunks/{_1ozcb6o._.js → _1k6bmez._.js} +2 -2
- package/.next/server/chunks/_1ko5shz._.js +1 -1
- package/.next/server/chunks/_1ksyu6r._.js +1 -1
- package/.next/server/chunks/_1kwmzab._.js +3 -0
- package/.next/server/chunks/_1lg0lsu._.js +1 -1
- package/.next/server/chunks/_1pv6xbq._.js +5 -0
- package/.next/server/chunks/_1q42187._.js +2 -2
- package/.next/server/chunks/_1q6e56i._.js +7 -9
- package/.next/server/chunks/_1t43w6q._.js +1 -1
- package/.next/server/chunks/_1t8fv7b._.js +1 -1
- package/.next/server/chunks/_1ufbxe1._.js +1 -1
- package/.next/server/chunks/_1wgae1c._.js +1 -1
- package/.next/server/chunks/_1xps4ob._.js +1 -1
- package/.next/server/chunks/_1znrlca._.js +3 -0
- package/.next/server/chunks/config_ts_1g4sz5o._.js +1 -1
- package/.next/server/chunks/features_14kex_m._.js +11 -11
- package/.next/server/chunks/features_bot_08z387_._.js +2 -2
- package/.next/server/chunks/features_bot_1d6ghh5._.js +41 -0
- package/.next/server/chunks/features_bot_1dfrdsb._.js +10 -6
- package/.next/server/chunks/{node_modules_consola_dist_chunks_prompt_mjs_0yd5xa0._.js → node_modules_consola_dist_chunks_prompt_mjs_0k--vqs._.js} +1 -1
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_0ufuc3s._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05qiosr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0y03pu0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zt_au4._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0eloa6y._.js → [root-of-the-server]__17yeveo._.js} +5 -5
- package/.next/server/chunks/ssr/[root-of-the-server]__1867koj._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1t38-p_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1u42eh0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__203utm3._.js +1 -1
- package/.next/server/chunks/ssr/{_0xurp8n._.js → _0-s7ria._.js} +2 -2
- package/.next/server/chunks/ssr/_03vw3u5._.js +3 -0
- package/.next/server/chunks/ssr/_088qe9a._.js +162 -0
- package/.next/server/chunks/ssr/_09a6bpd._.js +1 -1
- package/.next/server/chunks/ssr/{_0u43zjx._.js → _0a_pedm._.js} +2 -2
- package/.next/server/chunks/ssr/_0ali_i8._.js +3 -0
- package/.next/server/chunks/ssr/_0cd6g3l._.js +3 -3
- package/.next/server/chunks/ssr/{_1nwey7a._.js → _0eprrig._.js} +2 -2
- package/.next/server/chunks/ssr/_0flnog5._.js +3 -0
- package/.next/server/chunks/ssr/_0iuvjnw._.js +1 -1
- package/.next/server/chunks/ssr/{_0t_e9rd._.js → _0k-gl8l._.js} +2 -2
- package/.next/server/chunks/ssr/_0kmldic._.js +41 -0
- package/.next/server/chunks/ssr/_0ks03l-._.js +3 -0
- package/.next/server/chunks/ssr/_0mng-y8._.js +6 -0
- package/.next/server/chunks/ssr/_0tg3o37._.js +1 -1
- package/.next/server/chunks/ssr/_0ugzm_0._.js +3 -0
- package/.next/server/chunks/ssr/{_0ntol64._.js → _0wnv6c0._.js} +2 -2
- package/.next/server/chunks/ssr/{_0-y08rv._.js → _0z9zkd-._.js} +2 -2
- package/.next/server/chunks/ssr/_11l9kc0._.js +1 -1
- package/.next/server/chunks/ssr/_12_ail7._.js +3 -0
- package/.next/server/chunks/ssr/_16_7zeo._.js +1 -1
- package/.next/server/chunks/ssr/_16wjbs2._.js +3 -0
- package/.next/server/chunks/ssr/{_16o81mn._.js → _18rmqqu._.js} +2 -2
- package/.next/server/chunks/ssr/_1bfrntd._.js +2 -2
- package/.next/server/chunks/ssr/{_0gn_i4s._.js → _1ckje8g._.js} +2 -2
- package/.next/server/chunks/ssr/_1crszf7._.js +1 -1
- package/.next/server/chunks/ssr/_1h3qetc._.js +3 -0
- package/.next/server/chunks/ssr/{_1gz4ov7._.js → _1kpvfmn._.js} +3 -3
- package/.next/server/chunks/ssr/{_12hdw8x._.js → _1l-3enz._.js} +26 -28
- package/.next/server/chunks/ssr/_1neoj22._.js +1 -1
- package/.next/server/chunks/ssr/_1soynbw._.js +2 -2
- package/.next/server/chunks/ssr/{_0ux4i2m._.js → _1v1pcoh._.js} +2 -2
- package/.next/server/chunks/ssr/features_ai_components_model-picker_tsx_0ucb1y9._.js +1 -1
- package/.next/server/chunks/ssr/{features_bot_06n7hmd._.js → features_bot_0-7flc-._.js} +2 -2
- package/.next/server/chunks/ssr/features_bot_0tb4ui-._.js +1 -1
- package/.next/server/chunks/ssr/features_bot_1stfytf._.js +41 -0
- package/.next/server/chunks/ssr/features_config_10xs4l1._.js +20 -0
- 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_thursday_0cf9y0b._.js +1 -1
- package/.next/server/chunks/ssr/features_thursday_components_here-globe_tsx_055duhw._.js +1 -1
- package/.next/server/chunks/ssr/lib_utils_ts_0_f1xvm._.js +1 -1
- package/.next/server/chunks/ssr/{node_modules_1i-g3bz._.js → node_modules_00mh9o-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1bvw77g._.js → node_modules_04f_uw2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_16tn8xu._.js → node_modules_07udd3z._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ksqeyy._.js → node_modules_08-pj-2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0e398ts._.js → node_modules_098h6h5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_19r9vjv._.js → node_modules_0_7yfem._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_01v7ybp._.js → node_modules_0ayoorn._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0_zk6yd._.js → node_modules_0bp3vfu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m-dnm-._.js → node_modules_0ch5hqr._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0536cp2._.js → node_modules_0e-hyim._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0yn2z6s._.js → node_modules_0ffm9w3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1jf8aik._.js → node_modules_0jzyuwk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m2oth3._.js → node_modules_0ln4iwf._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1dlue-g._.js → node_modules_0my2hph._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0cpegwf._.js → node_modules_0y_k4h5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13dwal5._.js → node_modules_10bzndo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ctm_ju._.js → node_modules_1b5rxw5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_01fukqn._.js → node_modules_1b_h09q._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_12hh0bx._.js → node_modules_1e83j9e._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_08m1gvh._.js → node_modules_1e9ugfy._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_06n6ruk._.js → node_modules_1hd66k0._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zdz2zf._.js → node_modules_1inwr2m._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zalmtr._.js → node_modules_1j9xx1k._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1kfbdfo._.js → node_modules_1k8kypa._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_056xgci._.js → node_modules_1oeu85h._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ie8g6a._.js → node_modules_1r2ghv5._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_1fqgrh0._.js → node_modules_1ttpnib._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0nj1l8f._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0ir6p7s._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_17ok98u._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1ejf5ye._.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 +163 -163
- package/.next/static/chunks/02lze_e5sagjn.js +1 -0
- package/.next/static/chunks/{3866u-edsoyj3.js → 081kl7k8r6f8z.js} +1 -1
- package/.next/static/chunks/0_s4z70lx1tgs.js +1 -0
- package/.next/static/chunks/0fklfoj8o_msg.js +18 -0
- package/.next/static/chunks/0ve2gb0hw3wkq.js +1 -0
- package/.next/static/chunks/11c3uijgqik4m.js +39 -0
- package/.next/static/chunks/{0go5_9zqag7l0.js → 125lh2zzxk3r2.js} +1 -1
- package/.next/static/chunks/{3zv4wiqjl5kex.js → 166v36614ycsf.js} +1 -1
- package/.next/static/chunks/16np6727e61io.js +1 -0
- package/.next/static/chunks/18amidjlaqexf.js +1 -0
- package/.next/static/chunks/{35ehi-okrfot5.js → 1ettmta9iet7b.js} +1 -1
- package/.next/static/chunks/{1dy5xaxjdsy11.js → 1j4rndg17wgfk.js} +1 -1
- package/.next/static/chunks/{01r1uco3ikisc.js → 1mpz4epyg-7pz.js} +1 -1
- package/.next/static/chunks/{05blzta_1i7c2.js → 1oh4hbusfz97l.js} +1 -1
- package/.next/static/chunks/{3qfhjwd9yuijo.js → 1x1-44qmhu437.js} +1 -1
- package/.next/static/chunks/{0hpx0--bh7vld.js → 22jb4s3-8ckup.js} +1 -1
- package/.next/static/chunks/236le5kv_yj6a.css +1 -0
- package/.next/static/chunks/24op50z6sqi_5.js +1 -0
- package/.next/static/chunks/2eczs-lporqt6.js +1 -0
- package/.next/static/chunks/{2nbj2t9yp8ke9.js → 2sxclirl-c-um.js} +1 -1
- package/.next/static/chunks/2yfmmo4qr_f-m.js +1 -0
- package/.next/static/chunks/2z4sodeldj_86.js +1 -0
- package/.next/static/chunks/{3tyacy8fh5_18.js → 2zhiqxw61qowv.js} +2 -2
- package/.next/static/chunks/338dt83llhu5m.js +1 -0
- package/.next/static/chunks/3ezjz93yvzmop.js +4 -0
- package/.next/static/chunks/3h6rqjx92wva9.js +1 -0
- package/.next/static/chunks/3ph9u-51x6jhe.js +15 -0
- package/.next/static/chunks/{052u13mcoxt87.js → 3uf32hp_g9stz.js} +1 -1
- package/.next/static/chunks/3w7zt3xzyjn86.js +3 -0
- package/.next/static/chunks/3xkx7vqefm7on.js +2 -0
- package/.next/static/chunks/3ygk41pgsw7nv.js +1 -0
- package/.next/static/chunks/{3146sccz1j76i.js → 411uyd0is9u5s.js} +1 -1
- package/.next/static/chunks/4384atd5zerir.js +1 -0
- package/README.md +1 -1
- package/database/migrations/20260929121448_thread_started_by/migration.sql +1 -0
- package/database/migrations/20260929121448_thread_started_by/snapshot.json +1969 -0
- package/guide/bots.md +89 -44
- package/guide/calls.md +41 -25
- package/guide/index.md +5 -2
- package/guide/phone.md +7 -4
- package/guide/setup.md +12 -6
- package/guide/trouble.md +3 -2
- package/package.json +1 -1
- package/public/voices/intro/mic-b17ca82d.ogg +0 -0
- package/seed-skills/concierge/travel/SKILL.md +2 -1
- package/seed-skills/concierge/travel/page/itinerary.css +1009 -257
- package/seed-skills/concierge/travel/references/itinerary.md +95 -35
- package/seed-skills/concierge/travel/references/plan.md +11 -4
- package/seed-skills/concierge/travel/scripts/itinerary.mjs +754 -138
- package/skills/README.md +7 -4
- package/skills/artifact/SKILL.md +17 -13
- package/skills/artifact/references/canvas.md +4 -5
- package/skills/artifact/references/deck.md +93 -2
- package/skills/artifact/runtime/app/kit/src/index.css +35 -0
- package/skills/artifact/runtime/app/kit/tailwind.config.js +6 -0
- package/skills/artifact/runtime/deck/data.mjs +21 -0
- package/skills/artifact/runtime/deck/deck.css +254 -4
- package/skills/artifact/runtime/deck/deck.html +3 -0
- package/skills/artifact/runtime/deck/deck.js +88 -5
- package/skills/artifact/runtime/deck/deck.mjs +1 -17
- package/skills/artifact/runtime/document/quick.css +264 -89
- package/skills/artifact/runtime/document/quick.html +16 -7
- package/skills/artifact/runtime/document/quick.js +377 -98
- package/skills/artifact/runtime/render.mjs +52 -6
- package/skills/artifact/runtime/sheet/sheet.css +29 -21
- package/skills/artifact/runtime/shell/drafts.js +25 -0
- package/skills/artifact/runtime/shell/fonts/Geist-latin-ext.woff2 +0 -0
- package/skills/artifact/runtime/shell/fonts/Geist-latin.woff2 +0 -0
- package/skills/artifact/runtime/shell/fonts/GeistMono-latin-ext.woff2 +0 -0
- package/skills/artifact/runtime/shell/fonts/GeistMono-latin.woff2 +0 -0
- package/skills/artifact/runtime/shell/fonts/OFL.txt +93 -0
- package/skills/artifact/runtime/shell/head.html +27 -2
- package/skills/artifact/runtime/shell/shell.css +88 -8
- package/skills/artifact/runtime/shell/shell.js +318 -22
- package/skills/artifact/runtime/shell/wear.mjs +114 -12
- package/skills/artifact/scripts/app.mjs +5 -0
- package/skills/artifact/scripts/chart.mjs +20 -19
- package/skills/artifact/scripts/deck.mjs +276 -0
- package/skills/artifact/scripts/document.mjs +55 -2
- package/skills/artifact/scripts/media.mjs +1 -1
- package/skills/artifact/templates/boards/direction.html +55 -2
- package/skills/browser/SKILL.md +1 -1
- package/skills/browser/references/scripts.md +1 -1
- package/skills/daily-brief/SKILL.md +2 -0
- package/skills/daily-brief/page/brief.css +460 -302
- package/skills/daily-brief/references/brief.md +33 -7
- package/skills/daily-brief/scripts/page.mjs +241 -48
- package/skills/media-digest/SKILL.md +1 -0
- package/skills/media-digest/scripts/digest.mjs +57 -43
- package/.next/server/chunks/[root-of-the-server]__00f051a._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__0340k46._.js +0 -7
- package/.next/server/chunks/[root-of-the-server]__0ndw2yj._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__16y0k92._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__18e65_-._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1a0xgyh._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1dth047._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1huywqp._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__1ij4h2a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1q1s4ls._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1qa67zs._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1t-mfa4._.js +0 -5
- package/.next/server/chunks/[root-of-the-server]__20ofm9t._.js +0 -3
- package/.next/server/chunks/_0483t_f._.js +0 -5
- package/.next/server/chunks/_0lcthk8._.js +0 -3
- package/.next/server/chunks/_0uv1gs1._.js +0 -3
- package/.next/server/chunks/_17fjc-7._.js +0 -5
- package/.next/server/chunks/_1dcbwn-._.js +0 -3
- package/.next/server/chunks/_1mgzs18._.js +0 -3
- package/.next/server/chunks/_20qn224._.js +0 -3
- package/.next/server/chunks/features_bot_0zy_q8y._.js +0 -37
- package/.next/server/chunks/ssr/[root-of-the-server]__04upd5v._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0dy20eb._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0yyxgt2._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__14j8gxy._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__20t_4l2._.js +0 -3
- package/.next/server/chunks/ssr/_00buy3i._.js +0 -162
- package/.next/server/chunks/ssr/_014_wjp._.js +0 -3
- package/.next/server/chunks/ssr/_07m4ii5._.js +0 -3
- package/.next/server/chunks/ssr/_0cv9tmv._.js +0 -3
- package/.next/server/chunks/ssr/_0j6rtjm._.js +0 -6
- package/.next/server/chunks/ssr/_0ogkeu-._.js +0 -3
- package/.next/server/chunks/ssr/_10sc7ab._.js +0 -3
- package/.next/server/chunks/ssr/_14nwim3._.js +0 -37
- package/.next/server/chunks/ssr/_1e01b-_._.js +0 -3
- package/.next/server/chunks/ssr/_1nfv27b._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_1c56lew._.js +0 -37
- package/.next/server/chunks/ssr/features_bot_1knyan7._.js +0 -3
- package/.next/server/chunks/ssr/features_config_09wq1s9._.js +0 -20
- package/.next/static/chunks/01gkq9y6_xk4a.js +0 -1
- package/.next/static/chunks/09kwsjbmr_z1w.js +0 -1
- package/.next/static/chunks/0ynv7zu_bguve.js +0 -1
- package/.next/static/chunks/0zi59tghmg1lu.js +0 -18
- package/.next/static/chunks/1_ftsgxa-sia_.js +0 -1
- package/.next/static/chunks/1cg3torc90q5t.js +0 -1
- package/.next/static/chunks/1qnx1h5c8f93b.js +0 -1
- package/.next/static/chunks/1rwn3d9ji5w35.js +0 -1
- package/.next/static/chunks/1so3f5fi7e5g9.js +0 -35
- package/.next/static/chunks/1ya41wxfmp4s8.js +0 -1
- package/.next/static/chunks/27rwkfu7_xvs1.js +0 -4
- package/.next/static/chunks/2hueh8masqd91.js +0 -15
- package/.next/static/chunks/2jrt_752fqz2f.js +0 -1
- package/.next/static/chunks/2ogme4qydxnaq.js +0 -3
- package/.next/static/chunks/2r2tocw2rpvm2.js +0 -1
- package/.next/static/chunks/2t4kimg1lt-p7.js +0 -2
- package/.next/static/chunks/2w6y71o27my_z.js +0 -1
- package/.next/static/chunks/31_am8rtmk_tv.css +0 -1
- package/.next/static/chunks/337g9g_ux2gj-.js +0 -1
- package/public/voices/intro/heard-1f12cd45.ogg +0 -0
- package/public/voices/intro/mic-e561372a.ogg +0 -0
- package/skills/artifact/references/book.md +0 -163
- package/skills/artifact/runtime/book/book.css +0 -256
- package/skills/artifact/runtime/book/book.html +0 -38
- package/skills/artifact/runtime/book/book.js +0 -81
- package/skills/artifact/scripts/book-pdf.mjs +0 -73
- package/skills/artifact/scripts/book-video.mjs +0 -168
- package/skills/artifact/scripts/book.mjs +0 -291
- /package/.next/static/{8exfHAtcoebYtxjUC4ugl → 6tIYlzfG_5P4sIxxgmucO}/_buildManifest.js +0 -0
- /package/.next/static/{8exfHAtcoebYtxjUC4ugl → 6tIYlzfG_5P4sIxxgmucO}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{8exfHAtcoebYtxjUC4ugl → 6tIYlzfG_5P4sIxxgmucO}/_ssgManifest.js +0 -0
- /package/seed-skills/{marketer → writer}/marketing/LICENSE +0 -0
- /package/seed-skills/{marketer → writer}/marketing/SKILL.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/copywriting-copy-frameworks.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/copywriting-natural-transitions.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/copywriting.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/emails-copy-guidelines.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/emails-email-types.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/emails-sequence-templates.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/emails.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/launch.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/product-marketing.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/seo-audit-ai-writing-detection.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/seo-audit-international-seo.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/seo-audit.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-carousel-frameworks.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-platform-limits.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-platforms.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-post-templates.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-reverse-engineering.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social-short-form-video.md +0 -0
- /package/seed-skills/{marketer → writer}/marketing/references/social.md +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module.exports=[56802,e=>e.a(async(t,a)=>{try{e.i(687388);var
|
|
1
|
+
module.exports=[56802,e=>e.a(async(t,a)=>{try{e.i(687388);var n=e.i(378884);e.i(704161),e.i(41444);var o=t([n]);[n]=o.then?(await o)():o,e.s([]),a()}catch(e){a(e)}},!1),962072,e=>e.a(async(t,a)=>{try{var n=e.i(687388),o=e.i(186304),r=e.i(353885),s=e.i(265143),i=e.i(944971),l=e.i(378884),h=e.i(619898),d=e.i(453569),u=e.i(636882),c=e.i(22676),w=e.i(786025),y=e.i(660948),p=e.i(899352),m=e.i(54282),f=t([s,l,h,u,c,y]);async function g(e){var t,a,f,g,v,T,$,O;let E,{backendPrompt:S,written:_=!1,phone:L=!1,readSkills:A}=e,M=await (0,w.openWorkspace)(),[x,I,C,N,R,q,P]=await Promise.all([(0,u.loadSkills)(M),(0,h.listNoteIndex)(),(0,h.readNotes)(d.MEMORY_ALWAYS_LISTED,{touch:!1}),(0,y.listConnectedToolNames)(),(0,s.listJobBots)(),(0,c.listRecentTurns)(n.RECENT_CALL.rows,e.callId),(0,s.readBotMemoryOn)()]),W=await (0,l.listCallJobs)(q.map(e=>e.callId)),U=[(0,m.thursdayIdentity)(new Date,e.where),_?(0,p.personaLines)(e.persona):"",_?(0,m.styleLines)(e.stylePrompt):"",function(e,t){let{crowded:a,heavy:n}=(0,m.tidying)(e),o=[...n].sort((e,t)=>t.factCount-e.factCount).slice(0,3).map(e=>e.path),s=a||n.length?`
|
|
2
2
|
|
|
3
|
-
Saved memory has grown past what it holds well${
|
|
3
|
+
Saved memory has grown past what it holds well${o.length?` (${o.join(", ")})`:""}: say so once in what you return, go through what looks out of date with the user, and forget only what they name.`:"",i=new Set(t.map(e=>e.path)),l=`## Memory
|
|
4
4
|
|
|
5
5
|
What you have kept from talking with this user — the only thing that survives a call, and what lets you know them.`,h=`Who they are, and how they want things done and said — follow what is under preferences. The #id is what \`replaces\` and \`${r.TOOL_NAMES.memory_forget}\` take:
|
|
6
6
|
|
|
7
7
|
${t.map(b).join("\n\n")}`,u=`Every other note — path — what it is about (facts):
|
|
8
8
|
|
|
9
|
-
${(0,
|
|
9
|
+
${(0,m.noteLines)(e.filter(e=>!i.has(e.path)),a)}${s}
|
|
10
10
|
|
|
11
11
|
Open a note before answering out of it; a topic not listed is one you know nothing about. A fact marked \`said\` came from a call.
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ Keep what the user tells you as it comes up, with \`${r.TOOL_NAMES.memory_rememb
|
|
|
14
14
|
|
|
15
15
|
**Keep memory clean as you write.** A fact that repeats, narrows or changes one already in the note replaces it, merged into one line, rather than sitting beside it. A later call finds a note only by its path and its line: give something new its own path below, and when a line no longer says what its note is about, \`${r.TOOL_NAMES.memory_describe}\` puts it right.
|
|
16
16
|
|
|
17
|
-
${d.MEMORY_PATHS.map(e=>`- ${e.path} — ${e.of}`).join("\n")}`;return[l,h,u].join("\n\n")}(
|
|
17
|
+
${d.MEMORY_PATHS.map(e=>`- ${e.path} — ${e.of}`).join("\n")}`;return[l,h,u].join("\n\n")}(I,C.notes),(t=R,a=(0,m.reachNames)(A?[]:x,N),f=P,g=L,0===t.length?"":`## Background work
|
|
18
18
|
|
|
19
19
|
Who you hand work to — the names \`${r.TOOL_NAMES.thread_start}\` takes.
|
|
20
20
|
|
|
@@ -28,32 +28,32 @@ What bots can reach for: ${a}.`:""}
|
|
|
28
28
|
|
|
29
29
|
**Work that should start by itself — every morning, every few hours — is a routine.** \`${r.TOOL_NAMES.routine}\` makes one from a bot, the work in the user's own words, and when; from then on it starts a thread for it each time without being asked, and the result reaches the user like any thread's. Ask once for whichever of those they left out, and read the ones that exist before making, changing or deleting one.
|
|
30
30
|
|
|
31
|
-
Updates and questions from threads reach the conversation by themselves, naming their thread and the bot that asks; they come from bots, not the user, and a question is answered with \`${r.TOOL_NAMES.thread_answer}\`. ${g?"When the user wants to see what a thread made, name its files by their path in your answer: they are sent along with it.":`When the user wants to see what a thread made, \`${r.TOOL_NAMES.thread_show}\` puts it on their screen.`} Once you have told them how a thread ended, or when they ask you to clear what is finished, mark it with \`${r.TOOL_NAMES.thread_seen}\`.`),(v=M.cwd,T=
|
|
31
|
+
Updates and questions from threads reach the conversation by themselves, naming their thread and the bot that asks; they come from bots, not the user, and a question is answered with \`${r.TOOL_NAMES.thread_answer}\`. ${g?"When the user wants to see what a thread made, name its files by their path in your answer: they are sent along with it.":`When the user wants to see what a thread made, \`${r.TOOL_NAMES.thread_show}\` puts it on their screen.`} Once you have told them how a thread ended, or when they ask you to clear what is finished, mark it with \`${r.TOOL_NAMES.thread_seen}\`.`),(v=M.cwd,T=A?x:[],E=`## This computer
|
|
32
32
|
|
|
33
33
|
Current Cwd: ${v}
|
|
34
34
|
Platform: ${process.platform}
|
|
35
35
|
|
|
36
|
-
Where \`${r.TOOL_NAMES.bash}\` runs, and what the paths you get back are relative to. Each command is cut off after ${Math.round(
|
|
36
|
+
Where \`${r.TOOL_NAMES.bash}\` runs, and what the paths you get back are relative to. Each command is cut off after ${Math.round(n.CALL_EXEC_TIMEOUT_MS/1e3)} seconds; anything longer is a bot's.
|
|
37
37
|
|
|
38
|
-
${(0,
|
|
38
|
+
${(0,o.guideLine)()}`,0===T.length?E:`${E}
|
|
39
39
|
|
|
40
40
|
Skills are written-down ways of doing things here. \`${r.TOOL_NAMES.load_skill}\` opens one, and what it says goes for you too: read one when it covers what was asked and the doing is a glance. Anything longer it describes is still work to hand over, with what the skill said.
|
|
41
41
|
|
|
42
|
-
${(0,
|
|
42
|
+
${(0,m.skillLines)(T,{short:!0})}`),_?`## Answer in writing
|
|
43
43
|
|
|
44
44
|
This call is in writing: there is no voice, and what you write is what the user reads, so answer them directly, in their language. Say the relevant facts, whether the task is complete, and what comes next — for work you handed over, who has it and whether it carries an earlier thread on or starts a new one — or the one question they have to answer first. Use confirmed values from tool results and the notes above, and never invent a successful action. Keep it short and plain. News from a bot comes in the middle of whatever you were talking about: say whose work it is and which job before what it says.`:`## Return the result
|
|
45
45
|
|
|
46
|
-
Return the relevant facts, whether the task is complete, and what comes next — for work you handed over, who has it and whether it carries an earlier thread on or starts a new one — or the one question the user has to answer first. Use confirmed values from tool results and the notes above, and never invent a successful action. What you return is said aloud: keep it short and plain, and carry what they do not know yet — never a confirmation this conversation has already given them. When all the turn did was keep what they told you about themselves, return only that it was kept: the voice is already answering them.`,(
|
|
46
|
+
Return the relevant facts, whether the task is complete, and what comes next — for work you handed over, who has it and whether it carries an earlier thread on or starts a new one — or the one question the user has to answer first. Use confirmed values from tool results and the notes above, and never invent a successful action. What you return is said aloud: keep it short and plain, and carry what they do not know yet — never a confirmation this conversation has already given them. When all the turn did was keep what they told you about themselves, return only that it was kept: the voice is already answering them.`,($=q,O=W,$.some(e=>e.turns.length>0)?`## Earlier calls
|
|
47
47
|
|
|
48
48
|
What was said on the last calls, verbatim, newest last. It is the past: pick it up when the user does, and never answer it as a new request.
|
|
49
49
|
|
|
50
50
|
A \`${r.TOOL_NAMES.thread_start}\` line carries the thread's handle and how it ended; the handle is for the thread tools, never said aloud. What they ask for now is often one of these carried further.
|
|
51
51
|
|
|
52
|
-
${(0,
|
|
52
|
+
${(0,m.recentCallLines)($.map(e=>({...e,jobs:O.filter(t=>t.callId===e.callId)})),n.RECENT_CALL.tokens)}`:""),k(S)].filter(Boolean).join("\n\n");return(0,m.logPromptSize)("thursday",U),U}[s,l,h,u,c,y]=f.then?(await f)():f;let k=e=>e?.trim()?`## Additional instructions
|
|
53
53
|
|
|
54
54
|
Written by the user. Follow them together with everything above.
|
|
55
55
|
|
|
56
56
|
${e.trim()}`:"";function b(e){let t=e.facts.map(e=>`- ${e.text} #${e.id}`);return`${e.path} — ${e.description}
|
|
57
|
-
${t.length?t.join("\n"):"- (nothing yet)"}`}e.s(["loadThursdayPrompt",0,g]),a()}catch(e){a(e)}},!1),97334,e=>e.a(async(t,a)=>{try{var o=e.i(68356),
|
|
57
|
+
${t.length?t.join("\n"):"- (nothing yet)"}`}e.s(["loadThursdayPrompt",0,g]),a()}catch(e){a(e)}},!1),97334,e=>e.a(async(t,a)=>{try{var n=e.i(912714),o=e.i(68356),r=e.i(469719),s=e.i(175936),i=e.i(687388),l=e.i(911757),h=e.i(159479),d=e.i(386075),u=e.i(264079),c=e.i(56802),w=e.i(962072),y=e.i(170801),p=e.i(353885),m=e.i(279041),f=e.i(340698),g=e.i(629668),b=e.i(878498),k=e.i(640911),v=e.i(120219),T=e.i(53748),$=e.i(41444),O=e.i(22676),E=e.i(134344),S=t([h,d,c,w,f,O]);async function _(){let e=await Promise.all(E.TEXT_CALL_PROVIDERS.map(async e=>await (0,f.readConfig)(e.apiKeyName)?e.apiKeyName:null));return(0,E.textCallRunsOn)(t=>e.includes(t))}async function L(e,t){if(t)return t;let a=await _();return a||(0,T.publicError)(B),{provider:a,model:e.backendModel}}async function A(e,t){if("chatgpt"!==e.provider||!(0,d.isPlanSpent)(t)||!await (0,f.readConfig)(l.LIVE_PROVIDER.apiKeyName))return null;let a=(await (0,O.readLiveSettings)()).backendModel,n=u.TEXT_MODEL_PROVIDERS.openai.suggestModels.find(e=>e.id===a)?.label??a,o=t instanceof Error?t.message:String(t);return{ref:{provider:"openai",model:a},why:o,line:`${o} Answering on your OpenAI key (${n}) until it resets.`}}[h,d,c,w,f,O]=S.then?(await S)():S;let R=r.z.object({callId:r.z.string().min(1),standing:r.z.string().nullish(),runsOn:u.textModelRefSchema.nullish(),turn:r.z.string().min(1),messages:r.z.array(r.z.unknown()).min(1),where:r.z.unknown().optional()}),q=globalThis.__textCallTurns??=new Map;async function M(e,t){var a;let n,r,s,l=null,h=[],u=()=>{l&&q.delete(l)};try{let a=R.parse(e);l=a.turn,q.set(l,{callId:a.callId,notes:h}),t.addEventListener("abort",u,{once:!0}),t.aborted&&u(),s=await N(a)}catch(a){u();let{status:e,message:t}=(0,v.startError)(a,"Could not reach her");return new Response(t,{status:e})}let c=(a=s.callId,n=s.seq,{step:async e=>{for(let t of e.content)if("tool-call"===t.type){let o=e.content.find(e=>"tool-result"===e.type&&e.toolCallId===t.toolCallId);await (0,O.saveTurns)(a,[{id:t.toolCallId,role:"tool",tool:t.toolName,text:t.toolName===p.TOOL_NAMES.web_search?function(e,t){let a=t??{},n=[(e??{}).query,a.action?.query].find(e=>"string"==typeof e&&!!e.trim()),o=Array.isArray(a.sources)?a.sources.flatMap(e=>e&&"object"==typeof e&&"url"in e&&"string"==typeof e.url?[{url:e.url,..."title"in e&&"string"==typeof e.title?{title:e.title}:{}}]:[]):[];return JSON.stringify({query:n??null,sources:o})}(t.input,o?.type==="tool-result"?o.output:null):JSON.stringify(t.input??{}),seq:n++}])}else"text"===t.type&&t.text.trim()?await (0,O.saveTurns)(a,[{id:crypto.randomUUID(),role:"assistant",text:t.text.trim(),seq:n++}]):"reasoning"===t.type&&t.text.trim()&&await (0,O.saveThought)(a,{id:crypto.randomUUID(),text:t.text.trim(),seq:n})},said:(e,t=crypto.randomUUID())=>(0,O.saveTurns)(a,[{id:t,role:"user",text:e,seq:n++}])}),w=new Map,y=async e=>(0,o.streamText)({model:e.model,instructions:e.system,messages:await I(s.messages,e.ref),allowSystemInMessages:!0,tools:e.tools,providerOptions:e.providerOptions,stopWhen:(0,o.stepCountIs)(i.TEXT_CALL.maxSteps),abortSignal:t,prepareStep:async({stepNumber:t,messages:a})=>{let n=h.splice(0);if(n.length){for(let e of n)e.said&&await c.said(e.text,e.id);return w.set(t,n),{messages:await I([...a,...n.map(e=>({role:"user",content:j(e.text,e.pictures)}))],e.ref)}}},onStepEnd:c.step}),m=null,f=s.ref.provider,g=null,b=(r=async function*(){let e=[],t=!1,a=null;for await(let n of(await y(s)).stream){if(!t&&"error"===n.type&&(a=await A(s.ref,n.error)))break;if(!t&&("start"===n.type||"start-step"===n.type)){e.push(n);continue}t=!0,yield*e.splice(0),yield n}if(!a)return yield*e;k.logger.info(`text call ${s.callId}: ${a.line}`),m={why:a.why,line:a.line},f=a.ref.provider,h.unshift(...w.get(0)??[]),w.delete(0);try{yield*(await y(await C(s.callId,a.ref))).stream}catch(e){yield{type:"error",error:e}}}(),new ReadableStream({async pull(e){let t=await r.next();t.done?e.close():e.enqueue(t.value)},async cancel(){await r.return(void 0)}})),T=-1,$=new TransformStream({transform(e,t){if("start-step"===e.type)for(let e of(T+=1,w.get(T)??[]))t.enqueue({type:`data-${E.TEXT_CALL_NOTE}`,id:e.id,data:e});"error"===e.type&&g&&t.enqueue({type:`data-${E.TEXT_CALL_REFUSED}`,data:g,transient:!0}),t.enqueue(e),"start"===e.type&&m&&t.enqueue({type:`data-${E.TEXT_CALL_MOVED}`,data:m,transient:!0})},flush:u});return(0,o.createUIMessageStreamResponse)({stream:(0,o.toUIMessageStream)({stream:b,tools:s.tools,onError:e=>((0,d.isKeyRefused)(e)&&(g={provider:f}),(0,d.modelErrorToString)(e))}).pipeThrough($)})}let P="workspace:",W=e=>({type:"file",mediaType:(0,g.mimeOf)(e),filename:e,data:{type:"url",url:new URL(`${P}${encodeURIComponent(e)}`)}}),U=e=>{let t=e.data,a=t instanceof URL?t:t?.type==="url"?t.url:null;return a instanceof URL&&a.protocol===P?decodeURIComponent(a.pathname):null},j=(e,t)=>t?.length?[{type:"text",text:e},...t.map(W)]:e,K=s.queryKey.file(""),D=new WeakMap;async function x(e,t,a){if(t)return{missed:`${e} is a picture, and ${t} cannot see pictures, so it was not sent to you.`};let o=await (0,y.checkPicture)(e);if("missing"in o)return{missed:`There is no file at ${e} in the workspace, so no picture was sent to you.`};if("notPicture"in o)return{missed:`${e} is not a png, jpg, webp or gif, so it was not sent to you as a picture.`};if("tooBig"in o)return{missed:`${(0,y.tooBigToSee)(e,o.tooBig)} It was not sent to you.`};if(o.bytes>a)return{missed:`${e} is a picture not sent with this message: the pictures after it fill the ${(0,$.formatBytes)(i.LOOK.perRequest)} one message to you carries. Look at it with look_at to see it.`};let r=await (0,n.readFile)(o.full).catch(()=>null);return r?{data:r.toString("base64"),mediaType:o.mediaType,bytes:r.length}:{missed:`${e} could not be read, so no picture was sent to you.`}}async function I(e,t){let a=(0,d.seesToolImages)(t)?null:t.model,n=i.LOOK.perRequest-e.reduce((e,t)=>e+function(e){if("user"!==e.role||"string"==typeof e.content)return 0;let t=0;for(let a of e.content){if("file"!==a.type)continue;let e=a.data,n=e?.type==="data"?e.data:e;"string"==typeof n?t+=Math.floor(3*n.length/4):(n instanceof Uint8Array||n instanceof ArrayBuffer)&&(t+=n.byteLength)}return t}(t),0),o=[...e];for(let e=o.length-1;e>=0;e-=1){let t=o[e];if("user"!==t.role||"string"==typeof t.content||!t.content.some(e=>"file"===e.type&&null!==U(e)))continue;let r=[];for(let e of[...t.content].reverse()){let t="file"===e.type?U(e):null;if(!t){r.unshift(e);continue}let o=await x(t,a,n);if("missed"in o){r.unshift({type:"text",text:o.missed});continue}n-=o.bytes,r.unshift({type:"text",text:`${t}, as an image:`},{type:"file",mediaType:o.mediaType,data:{type:"data",data:o.data}})}let s={role:"user",content:r};D.set(s,t),o[e]=s}return o}async function C(e,t,a=!1,n){let o=await (0,O.readLiveSettings)(),r=await L(o,t),s="openai"===r.provider||"chatgpt"===r.provider,[i,u,c,y,g]=await Promise.all([(0,d.getTextModel)(r),(0,w.loadThursdayPrompt)({backendPrompt:o.backendPrompt,written:!0,callId:e,phone:a,persona:o.persona,stylePrompt:o.stylePrompt,readSkills:o.readSkills,where:n}),(0,h.loadTools)({target:"thursday",callId:e,webSearch:o.webSearch,readSkills:o.readSkills,written:!0,model:r,phone:a}),(0,f.readConfig)(m.EXA_API_KEY),(0,f.readConfig)(l.LIVE_PROVIDER.apiKeyName)]),k=i.searchTools&&Object.values(i.searchTools)[0],v={...c,...o.webSearch&&!y&&k?{[p.TOOL_NAMES.web_search]:k}:{}},T=s?g?await (0,b.acceptedReasoning)({apiKey:g,model:r.model,effort:o.reasoningEffort}):(0,b.wantedReasoning)(o.reasoningEffort):null;return{ref:r,model:i.model,system:u,tools:v,providerOptions:{openai:{...T?.effort?{reasoningEffort:T.effort}:{},...T&&"summary"in T&&T.summary?{reasoningSummary:T.summary}:{}}}}}async function N({callId:e,standing:t,runsOn:a,messages:n,where:r}){let[s,i,l]=await Promise.all([C(e,a,!1,function(e){if(null==e)return null;let t=E.WhereSchema.safeParse(e);return t.success?t.data:(k.logger.warn(`The call goes on without where the user is: ${t.error.issues[0]?.message}`),null)}(r)),(0,o.validateUIMessages)({messages:n,dataSchemas:{[E.TEXT_CALL_NOTE]:E.TextCallNoteSchema}}),(0,O.nextTurnSeq)(e)]),h=i.at(-1)?.role;"user"!==h&&"assistant"!==h&&(0,T.publicError)("The conversation must end with your words or hers.");let d=l,u=i.findLastIndex(e=>"assistant"===e.role);for(let t of i.slice(u+1)){for(let a of(0,E.notesIn)([t]))a.said&&await (0,O.saveTurns)(e,[{id:a.id,role:"user",text:a.text,seq:d++}]);let a=X(t);a&&await (0,O.saveTurns)(e,[{id:t.id,role:"user",text:a,seq:d++}])}return{...s,callId:e,seq:d,messages:[...t?[{role:"system",content:t}]:[],...await (0,o.convertToModelMessages)(i.flatMap(e=>{let t=[],a=[],n=()=>{a.length&&t.push({...e,id:`${e.id}:${t.length}`,parts:a}),a=[]};for(let o of e.parts){let e=(0,E.noteOf)(o);if(!e){a.push(o);continue}n(),t.push({id:e.id,role:"user",parts:[{type:"text",text:e.text},...(e.pictures??[]).map(E.picturePart)]})}return n(),t}).map(e=>e.parts.some(e=>"file"===e.type)?{...e,parts:e.parts.map(e=>{if("file"!==e.type)return e;let t=e.url.startsWith(K)?(0,g.workspaceRelative)(e.url):null;return t?{...e,url:`${P}${encodeURIComponent(t)}`}:{type:"text",text:`${e.filename??"A file"} is not in the workspace, so nothing of it was sent to you.`}})}:e),{ignoreIncompleteToolCalls:!0})]}}let B="Writing to Thursday needs a GPT subscription sign-in or an OpenAI key — Settings › API keys.",X=e=>e.parts.flatMap(e=>"text"===e.type?e.text:[]).join("\n").trim();e.s(["streamTextCall",0,M]),a()}catch(e){a(e)}},!1)];
|
|
58
58
|
|
|
59
59
|
//# sourceMappingURL=features_14kex_m._.js.map
|
|
@@ -2,11 +2,11 @@ module.exports=[742712,e=>e.a(async(t,a)=>{try{var r=e.i(666680),d=e.i(875225),n
|
|
|
2
2
|
|
|
3
3
|
${r.result}`:`## ${a}
|
|
4
4
|
|
|
5
|
-
${a} stopped without an answer.`})}let ea=(e,t,a,r)=>[a,...x(e,t,r)].join("\n\n");function O(e,t){let a={messageId:t,to:e.bot};return e.bot===p.ROOM_THURSDAY?a:ee(e)?{...a,note:`Held: it goes to ${e.bot} with ${et(e.waitsFor)} attached, when you end the turn in which you have read ${e.waitsFor.length>1?"them":"it"}. There is nothing to do for it until then.`}:e.id!==t?{...a,note:`${e.bot} is already working for you and reads this before its next step. Its one answer covers both.`}:{...a,note:`${e.bot} has it now, and their answer starts your next turn: until then, do not research, build, guess or report their part yourself, or watch their folder. Work that needs their answer goes out now with \`after: ["${e.bot}"]\`, and the app hands it on with that answer attached. A fact only the user has is asked for now, not after. Otherwise end your turn; the thread stays open.`}}async function M(e,t){let a=await e.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,t.threadId)).orderBy(i.sql`${u.threadWorkTable}.rowid`),r=a.filter(e=>e.caller===t.bot&&e.waitsFor.length>0&&"cancelled"!==e.state);if(!r.length||await y(e,t.threadId,t.bot))return;let n=await D(e,t);for(let l of r)l.waitsFor.some(e=>Q(a,t.bot,e)||n.has(e))||(await R(e,{key:`after:${l.id}`,threadId:t.threadId,workId:l.id,speaker:t.bot,text:x(a,t.bot,l.waitsFor).join("\n\n")}),await e.update(u.threadWorkTable).set({waitsFor:[]}).where((0,d.eq)(u.threadWorkTable.id,l.id)))}function $(e,t){let a=new Set(e.map(e=>e.bot).filter(e=>e!==p.ROOM_THURSDAY));t!==p.ROOM_THURSDAY&&!a.has(t)&&a.size>=s.BOT_RUN.participants&&(0,c.publicError)("This thread has reached its participant limit."),e.filter(e=>!G(e.state)).length>=s.BOT_RUN.queuedMessages&&(0,c.publicError)("This thread has reached its pending message limit.")}async function S(e,t){await e.update(u.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,t))}async function _(e,t){let a={...p.RoomMessageSchema.parse(t),id:t.id};"question"===a.kind&&a.to!==p.ROOM_THURSDAY&&(0,c.publicError)("Address user questions to Thursday; use a message to contact another bot."),a.options?.length&&"question"!==a.kind&&(0,c.publicError)("Offer answer choices only with a user question."),a.to===p.ROOM_THURSDAY&&"question"!==a.kind&&(0,c.publicError)("Send Thursday only a question for the user. The user already sees who is working, and your result reaches them as the last words of your turn."),a.to===p.ROOM_THURSDAY&&a.after?.length&&(0,c.publicError)("`after` is for work handed to a bot, not for a question."),a.to===e.bot&&(0,c.publicError)("Continue your own work directly; choose another recipient.");let r=await h.database.transaction(async t=>{await W(t,e);let r=X(e.threadId,e.bot,a.id),n=await t.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e.threadId)),[l]=await t.select({workId:u.threadDeliveryTable.workId}).from(u.threadDeliveryTable).where((0,d.eq)(u.threadDeliveryTable.key,r)),i=n.find(e=>e.id===(l?.workId??r));if(i)return O(i,r);if(a.to===p.ROOM_THURSDAY)return $(n,a.to),await t.insert(u.threadWorkTable).values({id:r,threadId:e.threadId,bot:p.ROOM_THURSDAY,caller:e.bot,parentId:e.id,state:"external",result:a.text,options:[...new Set(a.options??[])]}),await t.insert(u.threadRelayTable).values({key:r,threadId:e.threadId,bot:e.bot,text:a.text,kind:"question",messageId:r}),await S(t,e.threadId),{messageId:r,to:p.ROOM_THURSDAY};let o=function(e,t,a,r){let d=new Map(e.filter(e=>e.caller===t&&e.bot!==p.ROOM_THURSDAY).map(e=>[e.bot.toLowerCase(),e.bot])),n=[];for(let e of r){e.toLowerCase()===a.toLowerCase()&&(0,c.publicError)(`${a} cannot wait on its own answer; leave it out of after.`);let t=d.get(e.toLowerCase());t||(0,c.publicError)(`${e} has no work from you to wait on: hand ${e} its part first, or leave it out of after.`),n.includes(t)||n.push(t)}return n}(n,e.bot,a.to,a.after??[]),s=await D(t,e),h=o.filter(t=>Q(n,e.bot,t)||s.has(t)),b=n.filter(t=>t.bot===a.to&&t.caller===e.bot&&!G(t.state)),T=b.find(ee),w=b.find(e=>"running"===e.state)??b.find(e=>!ee(e));if(T&&(h.length||!w)){await t.insert(u.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:T.id,speaker:e.bot,text:a.text});let n=[...new Set([...T.waitsFor,...o])];return await t.update(u.threadWorkTable).set({waitsFor:n}).where((0,d.eq)(u.threadWorkTable.id,T.id)),await S(t,e.threadId),O({...T,waitsFor:n},r)}if(w&&!h.length)return await R(t,{key:r,threadId:e.threadId,workId:w.id,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await S(t,e.threadId),O(w,r);$(n,a.to);let[f]=await t.insert(u.threadWorkTable).values({id:r,threadId:e.threadId,bot:a.to,caller:e.bot,parentId:e.id,state:h.length?"waiting":"queued",waitsFor:h.length?o:[]}).returning();return h.length?await t.insert(u.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:a.text}):await R(t,{key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await S(t,e.threadId),O(f,r)});return V(),r}async function E(e){let t=!1,a=await h.database.transaction(async a=>{let[r]=await a.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));if(!r||"running"!==r.status)return null;let n=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e)).orderBy(i.sql`${u.threadWorkTable}.rowid`),l=new Set(n.filter(e=>"external"===e.state).map(e=>e.caller));for(let e of n)"queued"===e.state&&l.has(e.bot)&&(await a.update(u.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(u.threadWorkTable.id,e.id)),e.state="waiting",t=!0);let o=n.filter(e=>"running"===e.state);if(o.length>=s.BOT_RUN.concurrent)return null;let h=n.find(e=>"queued"===e.state&&!o.some(t=>t.bot===e.bot));if(!h)return null;if(r.turns>=s.BOT_RUN.turns)return await a.update(u.threadWorkTable).set({state:"paused"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"queued"))),null;let[b]=await a.update(u.threadWorkTable).set({state:"running",generation:h.generation+1}).where((0,d.eq)(u.threadWorkTable.id,h.id)).returning();return await a.update(u.threadTable).set({turns:r.turns+1}).where((0,d.eq)(u.threadTable.id,e)),b});return(a||t)&&V(),a}async function U(e){let t=await h.database.transaction(async t=>{await W(t,e);let a=await t.select().from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.id),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).orderBy(u.threadDeliveryTable.id);for(let r of a){let a=C(r);await m(t,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:a,hidden:!r.visible}),await t.update(u.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(u.threadDeliveryTable.id,r.id))}return a.map(C)});return t.length&&V(),t}async function
|
|
5
|
+
${a} stopped without an answer.`})}let ea=(e,t,a,r)=>[a,...x(e,t,r)].join("\n\n");function O(e,t){let a={messageId:t,to:e.bot};return e.bot===p.ROOM_THURSDAY?a:ee(e)?{...a,note:`Held: it goes to ${e.bot} with ${et(e.waitsFor)} attached, when you end the turn in which you have read ${e.waitsFor.length>1?"them":"it"}. There is nothing to do for it until then.`}:e.id!==t?{...a,note:`${e.bot} is already working for you and reads this before its next step. Its one answer covers both.`}:{...a,note:`${e.bot} has it now, and their answer starts your next turn: until then, do not research, build, guess or report their part yourself, or watch their folder. Work that needs their answer goes out now with \`after: ["${e.bot}"]\`, and the app hands it on with that answer attached. A fact only the user has is asked for now, not after. Otherwise end your turn; the thread stays open.`}}async function M(e,t){let a=await e.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,t.threadId)).orderBy(i.sql`${u.threadWorkTable}.rowid`),r=a.filter(e=>e.caller===t.bot&&e.waitsFor.length>0&&"cancelled"!==e.state);if(!r.length||await y(e,t.threadId,t.bot))return;let n=await D(e,t);for(let l of r)l.waitsFor.some(e=>Q(a,t.bot,e)||n.has(e))||(await R(e,{key:`after:${l.id}`,threadId:t.threadId,workId:l.id,speaker:t.bot,text:x(a,t.bot,l.waitsFor).join("\n\n")}),await e.update(u.threadWorkTable).set({waitsFor:[]}).where((0,d.eq)(u.threadWorkTable.id,l.id)))}function $(e,t){let a=new Set(e.map(e=>e.bot).filter(e=>e!==p.ROOM_THURSDAY));t!==p.ROOM_THURSDAY&&!a.has(t)&&a.size>=s.BOT_RUN.participants&&(0,c.publicError)("This thread has reached its participant limit."),e.filter(e=>!G(e.state)).length>=s.BOT_RUN.queuedMessages&&(0,c.publicError)("This thread has reached its pending message limit.")}async function S(e,t){await e.update(u.threadTable).set({wrapped:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,t))}async function _(e,t){let a={...p.RoomMessageSchema.parse(t),id:t.id};"question"===a.kind&&a.to!==p.ROOM_THURSDAY&&(0,c.publicError)("Address user questions to Thursday; use a message to contact another bot."),a.options?.length&&"question"!==a.kind&&(0,c.publicError)("Offer answer choices only with a user question."),a.to===p.ROOM_THURSDAY&&"question"!==a.kind&&(0,c.publicError)("Send Thursday only a question for the user. The user already sees who is working, and your result reaches them as the last words of your turn."),a.to===p.ROOM_THURSDAY&&a.after?.length&&(0,c.publicError)("`after` is for work handed to a bot, not for a question."),a.to===e.bot&&(0,c.publicError)("Continue your own work directly; choose another recipient.");let r=await h.database.transaction(async t=>{await W(t,e);let r=X(e.threadId,e.bot,a.id),n=await t.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e.threadId)),[l]=await t.select({workId:u.threadDeliveryTable.workId}).from(u.threadDeliveryTable).where((0,d.eq)(u.threadDeliveryTable.key,r)),i=n.find(e=>e.id===(l?.workId??r));if(i)return O(i,r);if(a.to===p.ROOM_THURSDAY)return $(n,a.to),await t.insert(u.threadWorkTable).values({id:r,threadId:e.threadId,bot:p.ROOM_THURSDAY,caller:e.bot,parentId:e.id,state:"external",result:a.text,options:[...new Set(a.options??[])]}),await t.insert(u.threadRelayTable).values({key:r,threadId:e.threadId,bot:e.bot,text:a.text,kind:"question",messageId:r}),await S(t,e.threadId),{messageId:r,to:p.ROOM_THURSDAY};let o=function(e,t,a,r){let d=new Map(e.filter(e=>e.caller===t&&e.bot!==p.ROOM_THURSDAY).map(e=>[e.bot.toLowerCase(),e.bot])),n=[];for(let e of r){e.toLowerCase()===a.toLowerCase()&&(0,c.publicError)(`${a} cannot wait on its own answer; leave it out of after.`);let t=d.get(e.toLowerCase());t||(0,c.publicError)(`${e} has no work from you to wait on: hand ${e} its part first, or leave it out of after.`),n.includes(t)||n.push(t)}return n}(n,e.bot,a.to,a.after??[]),s=await D(t,e),h=o.filter(t=>Q(n,e.bot,t)||s.has(t)),b=n.filter(t=>t.bot===a.to&&t.caller===e.bot&&!G(t.state)),T=b.find(ee),w=b.find(e=>"running"===e.state)??b.find(e=>!ee(e));if(T&&(h.length||!w)){await t.insert(u.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:T.id,speaker:e.bot,text:a.text});let n=[...new Set([...T.waitsFor,...o])];return await t.update(u.threadWorkTable).set({waitsFor:n}).where((0,d.eq)(u.threadWorkTable.id,T.id)),await S(t,e.threadId),O({...T,waitsFor:n},r)}if(w&&!h.length)return await R(t,{key:r,threadId:e.threadId,workId:w.id,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await S(t,e.threadId),O(w,r);$(n,a.to);let[f]=await t.insert(u.threadWorkTable).values({id:r,threadId:e.threadId,bot:a.to,caller:e.bot,parentId:e.id,state:h.length?"waiting":"queued",waitsFor:h.length?o:[]}).returning();return h.length?await t.insert(u.threadDeliveryTable).values({key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:a.text}):await R(t,{key:r,threadId:e.threadId,workId:r,speaker:e.bot,text:ea(n,e.bot,a.text,o)}),await S(t,e.threadId),O(f,r)});return V(),r}async function E(e){let t=!1,a=await h.database.transaction(async a=>{let[r]=await a.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));if(!r||"running"!==r.status)return null;let n=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e)).orderBy(i.sql`${u.threadWorkTable}.rowid`),l=new Set(n.filter(e=>"external"===e.state).map(e=>e.caller));for(let e of n)"queued"===e.state&&l.has(e.bot)&&(await a.update(u.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(u.threadWorkTable.id,e.id)),e.state="waiting",t=!0);let o=n.filter(e=>"running"===e.state);if(o.length>=s.BOT_RUN.concurrent)return null;let h=n.find(e=>"queued"===e.state&&!o.some(t=>t.bot===e.bot));if(!h)return null;if(r.turns>=s.BOT_RUN.turns)return await a.update(u.threadWorkTable).set({state:"paused"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"queued"))),null;let[b]=await a.update(u.threadWorkTable).set({state:"running",generation:h.generation+1}).where((0,d.eq)(u.threadWorkTable.id,h.id)).returning();return await a.update(u.threadTable).set({turns:r.turns+1}).where((0,d.eq)(u.threadTable.id,e)),b});return(a||t)&&V(),a}async function U(e){let t=await h.database.transaction(async t=>{await W(t,e);let a=await t.select().from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.id),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).orderBy(u.threadDeliveryTable.id);for(let r of a){let a=C(r);await m(t,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:a,hidden:!r.visible}),await t.update(u.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(u.threadDeliveryTable.id,r.id))}return a.map(C)});return t.length&&V(),t}async function B(e,t){await h.database.transaction(async a=>{await W(a,e);let[r]=await a.select().from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.id),(0,d.eq)(u.threadDeliveryTable.consumed,!1),(0,d.eq)(u.threadDeliveryTable.visible,!1),(0,d.eq)(u.threadDeliveryTable.speaker,e.caller))).orderBy(u.threadDeliveryTable.id).limit(1);await m(a,e.threadId,{bot:e.bot,parent:e.id,role:"user",content:t(r?{from:r.speaker,text:r.text}:null),hidden:!0}),r&&await a.update(u.threadDeliveryTable).set({consumed:!0}).where((0,d.eq)(u.threadDeliveryTable.id,r.id))}),V()}async function N(e){let t=await h.database.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e.threadId)).orderBy(u.threadWorkTable.createdAt),a=t.filter(t=>t.parentId===e.id&&t.bot!==p.ROOM_THURSDAY);if(!a.length)return null;let r=a.filter(e=>!G(e.state)||"done"===e.state&&e.waitsFor.length>0);if(!r.length)return"Everything you handed out is back.";let n=new Map,l=new Set;for(let e of(await h.database.select({workId:u.threadDeliveryTable.workId,key:u.threadDeliveryTable.key,text:u.threadDeliveryTable.text,visible:u.threadDeliveryTable.visible}).from(u.threadDeliveryTable).where((0,d.inArray)(u.threadDeliveryTable.workId,r.map(e=>e.id))).orderBy(u.threadDeliveryTable.id)))n.has(e.workId)||n.set(e.workId,e),e.key===`after:${e.workId}`&&l.add(e.workId);let i=Date.now(),o=e=>{let a=Math.max(0,Math.round((i-e.createdAt.getTime())/6e4)),r=(n.get(e.id)?.text??"").split("\n")[0].trim();return`- ${e.bot}, ${function(e,t,a){let r=t.waitsFor.filter(a=>Q(e,t.caller,a)),d=r.length?`once ${r.join(" and ")} ${r.length>1?"are":"is"} back`:"when you end this turn";if(ee(t))return r.length?`waits for ${r.join(" and ")}`:`goes out with ${et(t.waitsFor)} ${d}`;let n="running"===t.state?"working":"queued"===t.state?"about to start":"paused"===t.state?"paused":"done"===t.state?"done for now":"waiting",l=t.waitsFor.length?`; ${et(t.waitsFor)} follows ${d}`:"";return`${n}${a?", with the answers it waited for":""}${l}`}(t,e,l.has(e.id))} (${a} min): "${(0,T.clip)(r,s.PROMPT_LINE.boardAsk)}"`},b=r.filter(e=>!n.get(e.id)?.visible),c=r.filter(e=>n.get(e.id)?.visible);return[b.length?`What you handed out that is not back yet:
|
|
6
6
|
${b.map(o).join("\n")}`:"Everything you handed out is back.",...c.length?[`The user wrote to these bots directly; their answers come to you:
|
|
7
7
|
${c.map(o).join("\n")}`]:[]].join("\n\n")}function C(e){return e.visible?(0,w.tagSpeaker)(e.speaker===p.ROOM_USER?"user":"thursday",e.text):`${e.speaker}:
|
|
8
8
|
|
|
9
|
-
${e.text}`}async function L(e,t){await h.database.transaction(async a=>{await W(a,e),await M(a,e);let r=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.parentId,e.id)),n=await a.select({id:u.threadDeliveryTable.id}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.id),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).limit(1),l=await y(a,e.threadId,e.bot),i=n.length&&!l?"queued":n.length||r.some(e=>!G(e.state))?"waiting":"done";if(await a.update(u.threadWorkTable).set({state:i,result:t}).where((0,d.eq)(u.threadWorkTable.id,e.id)),"done"!==i)return;if(e.parentId){let[r]=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.id,e.parentId)),[n]=t?[]:await a.select({id:u.threadDeliveryTable.id}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.parentId),(0,d.eq)(u.threadDeliveryTable.speaker,e.bot),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).limit(1);r&&"cancelled"!==r.state&&!n&&await R(a,{key:`return:${e.id}:${e.generation}`,threadId:e.threadId,workId:r.id,speaker:e.bot,text:t||"This turn ended without a message."})}let[o]=await a.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e.threadId)),s=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e.threadId));o&&e.bot===o.bot&&!e.parentId&&s.every(e=>G(e.state))&&(await a.update(u.threadTable).set({status:t?"done":"waiting",outcome:t||"The room is idle. Send a message to continue.",pending:t?null:{options:[w.THREAD_CONTINUE]},wrapped:!0,endedAt:t?new Date:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e.threadId)),t&&await a.insert(u.threadRelayTable).values({key:`report:${e.threadId}:${o.generation}`,threadId:e.threadId,bot:e.bot,text:t,kind:"report"}).onConflictDoNothing())}),V()}async function H(e){await h.database.transaction(async t=>{let[a]=await t.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));if(!a||"running"!==a.status)return;let r=await t.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e));if(r.some(e=>"queued"===e.state||"running"===e.state))return;let n=r.find(e=>"external"===e.state);if(n)return void await t.update(u.threadTable).set({status:"waiting",outcome:n.result,pending:{options:n.options,messageId:n.id,bot:n.caller},updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e));if(r.some(e=>!G(e.state))||a.wrapped)return void await t.update(u.threadTable).set({status:"waiting",outcome:a.turns>=s.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:[w.THREAD_CONTINUE]},updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e));let l=crypto.randomUUID();await t.insert(u.threadWorkTable).values({id:l,threadId:e,bot:a.bot,caller:p.ROOM_THURSDAY,state:"queued"}),await R(t,{key:l,threadId:e,workId:l,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await t.update(u.threadTable).set({wrapped:!0}).where((0,d.eq)(u.threadTable.id,e))}),V()}async function j(e,t){await h.database.transaction(async a=>{let r=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e));for(let n of r.filter(e=>"running"===e.state||"queued"===e.state))await a.update(u.threadWorkTable).set({state:"paused",generation:n.generation+1}).where((0,d.eq)(u.threadWorkTable.id,n.id)),await m(a,e,Z(n,t));await a.update(u.threadTable).set({status:"waiting",outcome:t,pending:{options:[w.THREAD_CONTINUE]},seen:!1,endedAt:null,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await a.insert(u.threadRelayTable).values({key:crypto.randomUUID(),threadId:e,bot:r.find(e=>!e.parentId)?.bot??"Bot",text:t,kind:"interrupted"})}),V()}async function F(e){await h.database.transaction(async t=>{await t.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"paused"))),await t.update(u.threadTable).set({status:"running",generation:i.sql`${u.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await t.update(u.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(u.threadRelayTable.threadId,e),(0,d.eq)(u.threadRelayTable.kind,"interrupted")))}),V()}async function Y(e,t,a){let r=e.select({workId:u.threadDeliveryTable.workId}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.threadId,t),(0,d.eq)(u.threadDeliveryTable.consumed,!1)));await e.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,t),(0,d.eq)(u.threadWorkTable.bot,a),(0,d.inArray)(u.threadWorkTable.state,["waiting","done"]),(0,d.inArray)(u.threadWorkTable.id,r)))}async function K(e,t,a,r,n,l=!0){let o=await h.database.transaction(async o=>{let[s]=await o.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));s||(0,c.publicError)("No such thread.");let h=await o.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e)).orderBy(u.threadWorkTable.createdAt),b=h.filter(e=>"external"===e.state),T=n?[b.find(e=>e.id===n)??(0,c.publicError)("That question is no longer waiting for an answer.")]:l?function(e,t){let a=t?e.filter(e=>e.caller===t):e;if(new Set(a.map(e=>e.caller)).size<=1)return a;(0,c.publicError)(`Several bots are waiting for an answer: ${a.map(e=>`${e.caller} (replyTo ${e.id}): “${(e.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by naming its bot or by its replyTo.`)}(b,r):[],w=T[0],f=w?.caller??r??s.bot,g=w?h.find(e=>e.id===w.parentId):h.find(e=>e.bot===f&&"running"===e.state)??h.find(e=>e.bot===f&&!G(e.state)&&"external"!==e.state);for(let e of T)await o.update(u.threadWorkTable).set({state:"done",result:t}).where((0,d.eq)(u.threadWorkTable.id,e.id)),await o.update(u.threadRelayTable).set({accepted:!0}).where((0,d.eq)(u.threadRelayTable.messageId,e.id));if(!g){let t=null;if(f!==s.bot){let a=h.findLast(e=>e.bot===s.bot&&!e.parentId&&"cancelled"!==e.state);a?"done"===a.state&&await o.update(u.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(u.threadWorkTable.id,a.id)):a=(await o.insert(u.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:s.bot,caller:p.ROOM_THURSDAY,state:"waiting"}).returning())[0],t=a.id}g=(await o.insert(u.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:f,caller:t?s.bot:p.ROOM_THURSDAY,parentId:t,state:"queued"}).returning())[0]}w&&await R(o,{key:`answer:${w.id}`,threadId:e,workId:g.id,speaker:"Thread activity",text:T.length>1?`The next message answers your questions to the user: ${T.map(e=>`“${e.result??""}”`).join(", ")}`:`The next message answers your question to the user: “${w.result??""}”`});let m=crypto.randomUUID();return await R(o,{key:m,threadId:e,workId:g.id,speaker:a,text:t,visible:!0}),w&&!await y(o,e,f)&&await Y(o,e,f),await o.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"paused"))),await o.update(u.threadTable).set({status:"running",generation:i.sql`${u.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await o.update(u.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(u.threadRelayTable.threadId,e),(0,d.inArray)(u.threadRelayTable.kind,["interrupted","report"]))),{key:m,to:f,answered:w?{bot:w.caller,question:T.map(e=>e.result??"").join(" · ")}:null}});return V(),o}async function P(e){await h.database.transaction(async t=>{await t.update(u.threadWorkTable).set({state:"cancelled",generation:i.sql`${u.threadWorkTable.generation} + 1`}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.inArray)(u.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await t.update(u.threadRelayTable).set({accepted:!0}).where((0,d.eq)(u.threadRelayTable.threadId,e))}),V()}async function J(e,t){let[a]=await h.database.select({bot:u.threadTable.bot}).from(u.threadTable).where((0,d.eq)(u.threadTable.id,e)),r=await h.database.select().from(u.threadMessageTable).where((0,d.and)((0,d.eq)(u.threadMessageTable.threadId,e),(0,d.or)((0,d.eq)(u.threadMessageTable.bot,t),a?.bot===t?i.sql`${u.threadMessageTable.bot} is null AND ${u.threadMessageTable.parent} is null`:void 0))).orderBy(u.threadMessageTable.seq),n=r.findLastIndex(e=>e.compact);return(n>0?[r[0],...r.slice(n)]:r).map(e=>({role:e.role,content:e.content}))}async function z(e){return h.database.select({threadId:u.threadRelayTable.threadId,text:u.threadRelayTable.text}).from(u.threadRelayTable).where((0,d.and)((0,d.eq)(u.threadRelayTable.kind,"report"),i.sql`instr(${u.threadRelayTable.text}, ${e}) > 0`)).orderBy((0,n.desc)(u.threadRelayTable.id))}e.s(["appendRoomMessage",0,I,"cancelRoom",0,P,"claimRoomWork",0,E,"consumeRoomInbox",0,U,"finishRoomWork",0,L,"joinRoom",0,N,"listParticipantTranscript",0,J,"listReportsNaming",0,z,"listRoomReceipts",0,g,"listRoomWork",0,q,"lowerRoomContextBudget",0,A,"messageKey",0,X,"noteRoomBreak",0,k,"pauseRoom",0,j,"resumeRoom",0,F,"roomBoard",0,B,"roomContextBudget",0,v,"sendRoomMessage",0,_,"settleRoom",0,H,"tellRoom",0,K]),a()}catch(e){a(e)}},!1),378884,e=>e.a(async(t,a)=>{try{var r=e.i(875225),d=e.i(349129),n=e.i(518899),l=e.i(380690),i=e.i(175936),o=e.i(687388),s=e.i(528790),h=e.i(613240),u=e.i(353885),b=e.i(41444),c=e.i(944971),T=e.i(742712),w=e.i(889034),p=t([s,T]);[s,T]=p.then?(await p)():p;let K=()=>l.appEvents.emit({type:"threads"}),P={id:h.threadTable.id,bot:h.threadTable.bot,label:h.threadTable.label,request:h.threadTable.request,status:h.threadTable.status,outcome:h.threadTable.outcome,pending:h.threadTable.pending,seen:h.threadTable.seen,routineId:h.threadTable.routineId,inputTokens:h.threadTable.inputTokens,outputTokens:h.threadTable.outputTokens,contextTokens:h.threadTable.contextTokens,contextBudget:h.threadTable.contextBudget,createdAt:h.threadTable.createdAt,updatedAt:h.threadTable.updatedAt};async function f(e){let{opening:t,...a}=e,r=await s.database.transaction(async e=>{let[r]=await e.insert(h.threadTable).values({id:crypto.randomUUID(),status:"running",...a}).returning();return await e.insert(h.threadMessageTable).values({threadId:r.id,seq:0,bot:null,parent:null,role:"user",content:t,compact:!1,note:!1}),await e.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:r.id,bot:r.bot,caller:w.ROOM_THURSDAY,state:"queued"}),r});return K(),r}async function y(e,t){await s.database.update(h.threadTable).set({...t,updatedAt:new Date}).where((0,r.eq)(h.threadTable.id,e)),K()}async function g(e){0!==e.length&&(await s.database.transaction(async t=>{await t.update(h.threadTable).set({seen:!0}).where((0,r.inArray)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,r.inArray)(h.threadRelayTable.threadId,e))}),K())}async function m(e,t,a=null){(t.input||t.output||null!==a)&&(await s.database.update(h.threadTable).set({inputTokens:n.sql`${h.threadTable.inputTokens} + ${t.input}`,outputTokens:n.sql`${h.threadTable.outputTokens} + ${t.output}`,cacheReadTokens:n.sql`${h.threadTable.cacheReadTokens} + ${t.cacheRead}`,cacheWriteTokens:n.sql`${h.threadTable.cacheWriteTokens} + ${t.cacheWrite}`,...null===a?{}:{contextTokens:a.tokens,contextBudget:a.budget}}).where((0,r.eq)(h.threadTable.id,e)),K())}async function k(e){let[t]=await s.database.select(P).from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));if(!t)return null;let[a]=await N([t]);return a??null}async function I(e){let[t]=await s.database.select().from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));return t??null}let J=e=>"running"===e||"waiting"===e;async function q(){let[e,t,a,n]=await Promise.all([s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["running","waiting"])).orderBy((0,d.desc)(h.threadTable.updatedAt)),s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_FINISHED),s.database.select(P).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.eq)(h.threadTable.seen,!1))),s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadRelayTable.threadId}).from(h.threadRelayTable).where((0,r.eq)(h.threadRelayTable.accepted,!1))))]),l=[...new Map([...e,...t,...a,...n].map(e=>[e.id,e])).values()].sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime());return N(l,e=>J(e.status))}async function v(){let e=await s.database.select(P).from(h.threadTable).orderBy(n.sql`case when ${h.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,d.desc)(h.threadTable.updatedAt),(0,d.desc)(h.threadTable.id)).limit(o.THREAD_STATUS_LIMIT);return N(e)}async function A(e={}){let t=await s.database.select(P).from(h.threadTable).where(e.before?(0,r.lt)(h.threadTable.updatedAt,e.before):void 0).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(e.limit??o.PAGE_SIZE);return N(t,e=>J(e.status))}async function W(e){return e.length?await s.database.select({id:h.threadTable.id,callId:h.threadTable.callId,label:h.threadTable.label,status:h.threadTable.status,outcome:h.threadTable.outcome}).from(h.threadTable).where((0,r.inArray)(h.threadTable.callId,e)).orderBy(h.threadTable.createdAt):[]}async function R(e,t){let a=(a,n)=>s.database.select({id:h.threadTable.id,owner:h.threadTable.bot,label:h.threadTable.label,status:h.threadTable.status,pending:h.threadTable.pending,updatedAt:h.threadTable.updatedAt}).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,a),t?(0,r.ne)(h.threadTable.id,t):void 0,(0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadWorkTable.threadId}).from(h.threadWorkTable).where((0,r.eq)(h.threadWorkTable.bot,e))))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(n),[n,l]=await Promise.all([a(["running","waiting"],o.BOT_WORK.open),a(["done","cancelled"],o.BOT_WORK.recent)]),i=[...n,...l].map(e=>e.id);if(!i.length)return{open:[],recent:[]};let u=await s.database.select({id:h.threadWorkTable.id,threadId:h.threadWorkTable.threadId,result:h.threadWorkTable.result}).from(h.threadWorkTable).where((0,r.and)((0,r.eq)(h.threadWorkTable.bot,e),(0,r.inArray)(h.threadWorkTable.threadId,i),(0,r.isNotNull)(h.threadWorkTable.result))).orderBy((0,d.desc)(h.threadWorkTable.createdAt)),b=new Map;for(let{id:e,threadId:t,result:a}of u)a?.trim()&&!b.has(t)&&b.set(t,{workId:e,words:a});let c=({pending:e,...t})=>{let a=b.get(t.id);return{...t,workId:a?.workId??null,asking:"waiting"===t.status&&!!e?.messageId,said:a?.words??null,cut:!!a&&a.words.replace(/\s+/g," ").trim().length>o.BOT_WORK.said}};return{open:n.map(c),recent:l.map(c)}}async function D(e,t){if(t.owner===e){let[e]=await s.database.select({request:h.threadTable.request}).from(h.threadTable).where((0,r.eq)(h.threadTable.id,t.id));return e?.request??""}return t.workId?(await s.database.select({text:h.threadDeliveryTable.text}).from(h.threadDeliveryTable).where((0,r.eq)(h.threadDeliveryTable.workId,t.workId)).orderBy(h.threadDeliveryTable.id)).map(e=>e.text).join("\n\n"):""}async function x(e){let t=await s.database.delete(h.threadTable).where((0,r.eq)(h.threadTable.id,e)).returning({id:h.threadTable.id});return t.length&&K(),t.length>0}async function O(){return(await s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.eq)(h.threadTable.status,"running"))).map(e=>e.id)}async function M(){return await s.database.select({id:h.threadTable.id,label:h.threadTable.label,status:h.threadTable.status,endedAt:h.threadTable.endedAt,updatedAt:h.threadTable.updatedAt}).from(h.threadTable)}function $(e){let t=new Set;for(let a of e)if(Array.isArray(a))for(let e of a){if("tool-call"!==e.type||e.toolName!==u.TOOL_NAMES.write_file)continue;let a=e.input?.path;"string"==typeof a&&a.trim()&&(t.delete(a.trim()),t.add(a.trim()))}return[...t]}async function S(e){let t=await s.database.select({content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.eq)(h.threadMessageTable.role,"assistant"))).orderBy(h.threadMessageTable.seq);return $(t.map(e=>e.content))}async function _(e){let t=e.trim();if(!t)return null;let a=await I(t);if(a)return a;let r=t.toLowerCase();return(await s.database.select().from(h.threadTable).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.THREAD_LABEL_REACH)).find(e=>e.label.toLowerCase()===r)??null}async function E(e,t,a){await s.database.insert(h.threadMessageTable).values({threadId:e,seq:t,...a,compact:a.compact??!1,note:a.note??!1}).onConflictDoUpdate({target:[h.threadMessageTable.threadId,h.threadMessageTable.seq],set:{role:a.role,content:a.content,compact:a.compact??!1,note:a.note??!1}}),K()}async function U(e,t){t.length&&(await s.database.delete(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.seq,t))),K())}async function N(e,t=()=>!0){if(0===e.length)return[];let a=e.filter(t).map(e=>e.id),d=a.length?await s.database.select().from(h.threadMessageTable).where((0,r.inArray)(h.threadMessageTable.threadId,a)).orderBy(h.threadMessageTable.seq):[],l=e.map(e=>e.id),[i,o,p]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,r.inArray)(h.threadWorkTable.threadId,l)).orderBy(n.sql`${h.threadWorkTable}.rowid`),s.database.select().from(h.threadDeliveryTable).where((0,r.and)((0,r.inArray)(h.threadDeliveryTable.threadId,l),(0,r.eq)(h.threadDeliveryTable.visible,!0))),s.database.select().from(h.threadRelayTable).where((0,r.and)((0,r.inArray)(h.threadRelayTable.threadId,l),(0,r.eq)(h.threadRelayTable.accepted,!1)))]),f=new Map(e.map(e=>[e.id,e.bot])),y=new Map(i.map(e=>[e.id,e.caller])),g=new Map;for(let e of d){let t=g.get(e.threadId)??[];t.push(...function(e,t){if(e.hidden)return[];let a={seq:e.seq,bot:e.bot,parent:e.parent,to:"user"===e.role?e.bot:t,at:e.createdAt},r=t=>`${e.id}-${t}`,d=e.content;if("user"===e.role){if(0===e.seq)return[];let t="string"==typeof d?d:d.flatMap(e=>"text"===e.type&&e.text?[e.text]:[]).join("\n").trim();if(!t)return[];if(e.compact)return[{...a,id:r(0),kind:"note",text:t}];if(e.note){let e=t.endsWith(w.RESUME_CHECK)?t.slice(0,-w.RESUME_CHECK.length).trimEnd():t;return[{...a,id:r(0),kind:"stop",text:e}]}return[{...a,id:r(0),kind:"user",text:(0,c.untagSpeaker)(t)}]}if("assistant"===e.role){let t=e.content;if("string"==typeof t)return t.trim()?[{...a,id:r(0),kind:"text",text:t.trim()}]:[];let d=[];return t.forEach((t,n)=>{if("text"===t.type){let e=t.text.trim();e&&d.push({...a,id:r(n),kind:"text",text:e});return}if("tool-result"===t.type)return void d.push(j(a,r(n),t));if("tool-call"!==t.type)return;let l=t.input??{};if(t.toolName===u.TOOL_NAMES.send_message){let i;d.push({...a,id:r(n),kind:"ask",callId:t.toolCallId,to:(i=String(l.to??"").trim()).toLowerCase()===w.ROOM_THURSDAY.toLowerCase()?w.ROOM_THURSDAY:i,text:String(l.text??""),question:"question"===l.kind,..."question"===l.kind&&e.bot?{questionId:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...e.bot?{exchange:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...Array.isArray(l.after)&&l.after.length?{after:l.after.map(String)}:{}})}else t.toolName===u.TOOL_NAMES.bash?d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:(0,b.clip)(String(l.command??""),120),note:B(l)}):d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:C(t.toolName,l),note:B(l),path:t.toolName===u.TOOL_NAMES.write_file?V(l,"path")??null:null})}),d}if("tool"===e.role){let t=[];return e.content.forEach((e,d)=>{"tool-result"!==e.type||(e.toolName!==u.TOOL_NAMES.send_message||"error-text"===e.output.type)&&t.push(j(a,r(d),e))}),t}return[]}(e,(e.parent?y.get(e.parent):null)??f.get(e.threadId)??"")),g.set(e.threadId,t)}return e.map(e=>{let a=i.filter(t=>t.threadId===e.id),r=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(a.map(e=>e.bot))].filter(e=>e!==w.ROOM_THURSDAY).map(e=>({bot:e,state:a.filter(t=>t.bot===e).sort((e,t)=>r.indexOf(e.state)-r.indexOf(t.state))[0].state}));return{...function(e,t){let{pending:a,inputTokens:r,outputTokens:d,...n}=e;return{...n,ask:"waiting"===e.status?{question:e.outcome??"",options:a?.options??[],messageId:a?.messageId,bot:a?.bot}:null,tokens:{input:r,output:d},lines:t}}(e,g.get(e.id)??[]),room:{participants:d,questions:a.filter(e=>"external"===e.state).map(e=>({id:e.id,bot:e.caller,text:e.result??"",options:e.options})),deliveries:o.filter(t=>t.threadId===e.id).map(t=>({id:t.key,bot:a.find(e=>e.id===t.workId)?.bot??e.bot,text:t.text,delivered:t.consumed})),relays:p.filter(t=>t.threadId===e.id),exchanges:t(e)?a.map(e=>({id:e.id,bot:e.bot,caller:e.caller,state:e.state,waitsFor:e.waitsFor})):[]}}})}let z=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],V=(e,t)=>{let a=e[t];return"string"==typeof a&&a.trim()?a:null};function B(e){let t=V(e,"description");return t?(0,b.clip)(t,120):null}function C(e,t){let a=t??{};if("object"!=typeof a||Array.isArray(a))return(0,b.clip)(String(t??""),120);if(e===u.TOOL_NAMES.bash)return B(a)??(0,b.clip)(String(a.command??""),120);if(e===u.TOOL_NAMES.tool_call||e===u.TOOL_NAMES.tool_search){let e=Array.isArray(a.tools)?a.tools.map(String).join(", "):String(a.tool??""),t=a.args??null,r=t&&"object"==typeof t?String(a.server??"")===o.STUDIO_SERVER?L(t):JSON.stringify(t):"";return(0,b.clip)([String(a.server??""),e,r].filter(Boolean).join(" "),120)}let r=L(a);return r?(0,b.clip)(r,120):Object.keys(a).length?(0,b.clip)(JSON.stringify(a),120):""}function L(e){for(let t of z){let a=V(e,t);if(a)return a}for(let t of Object.keys(e)){let a=V(e,t);if(a)return a}return""}async function H(e,t){for(let a of(await s.database.select({role:h.threadMessageTable.role,content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.role,["tool","assistant"])))))if("string"!=typeof a.content){for(let e of a.content)if("tool-result"===e.type&&e.toolCallId===t)return F(e.output,o.FULL_RESULT_LINES,!0)}return null}let G=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,X=" — ";function j(e,t,a){let r=a.toolName===u.TOOL_NAMES.web_search,d=F(a.output,r?o.FULL_RESULT_LINES:5),n=d.flatMap(e=>"text"===e.type?[e.text]:[]),l=r?n.filter(e=>G.test(e)):[],i=(l.length?l:n).slice(0,4);return{...e,id:t,kind:"tool-result",callId:a.toolCallId,name:a.toolName,results:i.map(e=>({type:"text",text:l.length?function(e){let t=e.replace(/\s+/g," ").trim(),a=G.exec(t);if(!a||t.length<=200)return(0,b.clip)(t,200);let r=a[0].trim(),d=t.slice(0,a.index).replace(/[\s—-]+$/,""),n=200-r.length-X.length;return d&&n>1?`${(0,b.clip)(d,n)}${X}${r}`:r}(e):(0,b.clip)(e,200)})),more:n.length>i.length||d.length>n.length||i.some(e=>e.length>200)}}function F(e,t,a=!1){var r;if(null==e)return[];if("string"==typeof e)return Y(e,t,a);if("object"!=typeof e)return Y(String(e),t,a);switch(e.type){case"text":case"error-text":return Y(String(e.value??""),t,a);case"json":case"error-json":return F(e.value,t,a);case"execution-denied":return Y("Denied.",t,a);case"content":{if(!Array.isArray(e.value))return[];let r=[];for(let d of e.value){if("text"===d.type&&"string"==typeof d.text){r.push(...Y(d.text,t,a));continue}let e=function(e){let t=String(e.mediaType??"");if(!t.startsWith("image/"))return null;let a=e.data;return"string"==typeof a?`data:${t};base64,${a}`:a?.type==="url"&&a.url?a.url:a?.type==="data"&&"string"==typeof a.data?`data:${t};base64,${a.data}`:null}(d);e&&r.push({type:"image",src:e})}return r}}return"string"==typeof e.path&&String(e.mediaType??"").startsWith("image/")?[{type:"text",text:e.path},{type:"image",src:i.queryKey.file(e.path)}]:Array.isArray(e.sources)?e.sources.map(e=>String(e?.title??"")).filter(Boolean).slice(0,t).map(e=>({type:"text",text:e})):"string"==typeof e.stdout?Y(e.stdout||String(e.stderr??""),t,a):"string"==typeof e.answer?Y(e.answer,t,a):Y(a?(r=e,Array.isArray(r)?JSON.stringify(r,null,2):Object.entries(r).map(([e,t])=>"string"==typeof t&&t.includes("\n")?`${e}:
|
|
9
|
+
${e.text}`}async function L(e,t){await h.database.transaction(async a=>{await W(a,e),await M(a,e);let r=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.parentId,e.id)),n=await a.select({id:u.threadDeliveryTable.id}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.id),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).limit(1),l=await y(a,e.threadId,e.bot),i=n.length&&!l?"queued":n.length||r.some(e=>!G(e.state))?"waiting":"done";if(await a.update(u.threadWorkTable).set({state:i,result:t}).where((0,d.eq)(u.threadWorkTable.id,e.id)),"done"!==i)return;if(e.parentId){let[r]=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.id,e.parentId)),[n]=t?[]:await a.select({id:u.threadDeliveryTable.id}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.workId,e.parentId),(0,d.eq)(u.threadDeliveryTable.speaker,e.bot),(0,d.eq)(u.threadDeliveryTable.consumed,!1))).limit(1);r&&"cancelled"!==r.state&&!n&&await R(a,{key:`return:${e.id}:${e.generation}`,threadId:e.threadId,workId:r.id,speaker:e.bot,text:t||"This turn ended without a message."})}let[o]=await a.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e.threadId)),s=await a.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e.threadId));o&&e.bot===o.bot&&!e.parentId&&s.every(e=>G(e.state))&&(await a.update(u.threadTable).set({status:t?"done":"waiting",outcome:t||"The room is idle. Send a message to continue.",pending:t?null:{options:[w.THREAD_CONTINUE]},wrapped:!0,endedAt:t?new Date:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e.threadId)),t&&await a.insert(u.threadRelayTable).values({key:`report:${e.threadId}:${o.generation}`,threadId:e.threadId,bot:e.bot,text:t,kind:"report"}).onConflictDoNothing())}),V()}async function H(e){await h.database.transaction(async t=>{let[a]=await t.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));if(!a||"running"!==a.status)return;let r=await t.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e));if(r.some(e=>"queued"===e.state||"running"===e.state))return;let n=r.find(e=>"external"===e.state);if(n)return void await t.update(u.threadTable).set({status:"waiting",outcome:n.result,pending:{options:n.options,messageId:n.id,bot:n.caller},updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e));if(r.some(e=>!G(e.state))||a.wrapped)return void await t.update(u.threadTable).set({status:"waiting",outcome:a.turns>=s.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:[w.THREAD_CONTINUE]},updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e));let l=crypto.randomUUID();await t.insert(u.threadWorkTable).values({id:l,threadId:e,bot:a.bot,caller:p.ROOM_THURSDAY,state:"queued"}),await R(t,{key:l,threadId:e,workId:l,speaker:"Thread activity",text:"The participants have finished their current turns. Bring together the results you received for Thursday, including anything still unresolved."}),await t.update(u.threadTable).set({wrapped:!0}).where((0,d.eq)(u.threadTable.id,e))}),V()}async function j(e,t,a){await h.database.transaction(async r=>{let n=await r.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e));for(let a of n.filter(e=>"running"===e.state||"queued"===e.state))await r.update(u.threadWorkTable).set({state:"paused",generation:a.generation+1}).where((0,d.eq)(u.threadWorkTable.id,a.id)),await m(r,e,Z(a,t));await r.update(u.threadTable).set({status:"waiting",outcome:t,pending:{options:[w.THREAD_CONTINUE],...a?{refused:a}:{}},seen:!1,endedAt:null,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await r.insert(u.threadRelayTable).values({key:crypto.randomUUID(),threadId:e,bot:n.find(e=>!e.parentId)?.bot??"Bot",text:t,kind:"interrupted"})}),V()}async function F(e){await h.database.transaction(async t=>{await t.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"paused"))),await t.update(u.threadTable).set({status:"running",generation:i.sql`${u.threadTable.generation} + 1`,turns:0,pending:null,outcome:null,endedAt:null,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await t.update(u.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(u.threadRelayTable.threadId,e),(0,d.eq)(u.threadRelayTable.kind,"interrupted")))}),V()}async function Y(e,t,a){let r=e.select({workId:u.threadDeliveryTable.workId}).from(u.threadDeliveryTable).where((0,d.and)((0,d.eq)(u.threadDeliveryTable.threadId,t),(0,d.eq)(u.threadDeliveryTable.consumed,!1)));await e.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,t),(0,d.eq)(u.threadWorkTable.bot,a),(0,d.inArray)(u.threadWorkTable.state,["waiting","done"]),(0,d.inArray)(u.threadWorkTable.id,r)))}async function K(e,t,a,r,n,l=!0){let o=await h.database.transaction(async o=>{let[s]=await o.select().from(u.threadTable).where((0,d.eq)(u.threadTable.id,e));s||(0,c.publicError)("No such thread.");let h=await o.select().from(u.threadWorkTable).where((0,d.eq)(u.threadWorkTable.threadId,e)).orderBy(u.threadWorkTable.createdAt),b=h.filter(e=>"external"===e.state),T=n?[b.find(e=>e.id===n)??(0,c.publicError)("That question is no longer waiting for an answer.")]:l?function(e,t){let a=t?e.filter(e=>e.caller===t):e;if(new Set(a.map(e=>e.caller)).size<=1)return a;(0,c.publicError)(`Several bots are waiting for an answer: ${a.map(e=>`${e.caller} (replyTo ${e.id}): “${(e.result??"").slice(0,160)}”`).join("; ")}. Answer one of them by naming its bot or by its replyTo.`)}(b,r):[],w=T[0],f=w?.caller??r??s.bot,g=w?h.find(e=>e.id===w.parentId):h.find(e=>e.bot===f&&"running"===e.state)??h.find(e=>e.bot===f&&!G(e.state)&&"external"!==e.state);for(let e of T)await o.update(u.threadWorkTable).set({state:"done",result:t}).where((0,d.eq)(u.threadWorkTable.id,e.id)),await o.update(u.threadRelayTable).set({accepted:!0}).where((0,d.eq)(u.threadRelayTable.messageId,e.id));if(!g){let t=null;if(f!==s.bot){let a=h.findLast(e=>e.bot===s.bot&&!e.parentId&&"cancelled"!==e.state);a?"done"===a.state&&await o.update(u.threadWorkTable).set({state:"waiting"}).where((0,d.eq)(u.threadWorkTable.id,a.id)):a=(await o.insert(u.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:s.bot,caller:p.ROOM_THURSDAY,state:"waiting"}).returning())[0],t=a.id}g=(await o.insert(u.threadWorkTable).values({id:crypto.randomUUID(),threadId:e,bot:f,caller:t?s.bot:p.ROOM_THURSDAY,parentId:t,state:"queued"}).returning())[0]}w&&await R(o,{key:`answer:${w.id}`,threadId:e,workId:g.id,speaker:"Thread activity",text:T.length>1?`The next message answers your questions to the user: ${T.map(e=>`“${e.result??""}”`).join(", ")}`:`The next message answers your question to the user: “${w.result??""}”`});let m=crypto.randomUUID();return await R(o,{key:m,threadId:e,workId:g.id,speaker:a,text:t,visible:!0}),w&&!await y(o,e,f)&&await Y(o,e,f),await o.update(u.threadWorkTable).set({state:"queued"}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.eq)(u.threadWorkTable.state,"paused"))),await o.update(u.threadTable).set({status:"running",generation:i.sql`${u.threadTable.generation} + 1`,turns:0,wrapped:!1,pending:null,outcome:null,endedAt:null,seen:!1,updatedAt:new Date}).where((0,d.eq)(u.threadTable.id,e)),await o.update(u.threadRelayTable).set({accepted:!0}).where((0,d.and)((0,d.eq)(u.threadRelayTable.threadId,e),(0,d.inArray)(u.threadRelayTable.kind,["interrupted","report"]))),{key:m,to:f,answered:w?{bot:w.caller,question:T.map(e=>e.result??"").join(" · ")}:null}});return V(),o}async function P(e){await h.database.transaction(async t=>{await t.update(u.threadWorkTable).set({state:"cancelled",generation:i.sql`${u.threadWorkTable.generation} + 1`}).where((0,d.and)((0,d.eq)(u.threadWorkTable.threadId,e),(0,d.inArray)(u.threadWorkTable.state,["queued","running","waiting","external","paused"]))),await t.update(u.threadRelayTable).set({accepted:!0}).where((0,d.eq)(u.threadRelayTable.threadId,e))}),V()}async function J(e,t){let[a]=await h.database.select({bot:u.threadTable.bot}).from(u.threadTable).where((0,d.eq)(u.threadTable.id,e)),r=await h.database.select().from(u.threadMessageTable).where((0,d.and)((0,d.eq)(u.threadMessageTable.threadId,e),(0,d.or)((0,d.eq)(u.threadMessageTable.bot,t),a?.bot===t?i.sql`${u.threadMessageTable.bot} is null AND ${u.threadMessageTable.parent} is null`:void 0))).orderBy(u.threadMessageTable.seq),n=r.findLastIndex(e=>e.compact);return(n>0?[r[0],...r.slice(n)]:r).map(e=>({role:e.role,content:e.content}))}async function z(e){return h.database.select({threadId:u.threadRelayTable.threadId,text:u.threadRelayTable.text}).from(u.threadRelayTable).where((0,d.and)((0,d.eq)(u.threadRelayTable.kind,"report"),i.sql`instr(${u.threadRelayTable.text}, ${e}) > 0`)).orderBy((0,n.desc)(u.threadRelayTable.id))}e.s(["appendRoomMessage",0,I,"cancelRoom",0,P,"claimRoomWork",0,E,"consumeRoomInbox",0,U,"finishRoomWork",0,L,"joinRoom",0,B,"listParticipantTranscript",0,J,"listReportsNaming",0,z,"listRoomReceipts",0,g,"listRoomWork",0,q,"lowerRoomContextBudget",0,A,"messageKey",0,X,"noteRoomBreak",0,k,"pauseRoom",0,j,"resumeRoom",0,F,"roomBoard",0,N,"roomContextBudget",0,v,"sendRoomMessage",0,_,"settleRoom",0,H,"tellRoom",0,K]),a()}catch(e){a(e)}},!1),378884,e=>e.a(async(t,a)=>{try{var r=e.i(875225),d=e.i(349129),n=e.i(518899),l=e.i(380690),i=e.i(175936),o=e.i(687388),s=e.i(528790),h=e.i(613240),u=e.i(353885),b=e.i(41444),c=e.i(944971),T=e.i(742712),w=e.i(889034),p=t([s,T]);[s,T]=p.then?(await p)():p;let K=()=>l.appEvents.emit({type:"threads"}),P={id:h.threadTable.id,bot:h.threadTable.bot,label:h.threadTable.label,request:h.threadTable.request,status:h.threadTable.status,outcome:h.threadTable.outcome,pending:h.threadTable.pending,seen:h.threadTable.seen,routineId:h.threadTable.routineId,startedBy:h.threadTable.startedBy,inputTokens:h.threadTable.inputTokens,outputTokens:h.threadTable.outputTokens,contextTokens:h.threadTable.contextTokens,contextBudget:h.threadTable.contextBudget,createdAt:h.threadTable.createdAt,updatedAt:h.threadTable.updatedAt};async function f(e){let{opening:t,...a}=e,r=await s.database.transaction(async e=>{let[r]=await e.insert(h.threadTable).values({id:crypto.randomUUID(),status:"running",...a}).returning();return await e.insert(h.threadMessageTable).values({threadId:r.id,seq:0,bot:null,parent:null,role:"user",content:t,compact:!1,note:!1}),await e.insert(h.threadWorkTable).values({id:crypto.randomUUID(),threadId:r.id,bot:r.bot,caller:w.ROOM_THURSDAY,state:"queued"}),r});return K(),r}async function y(e,t){await s.database.update(h.threadTable).set({...t,updatedAt:new Date}).where((0,r.eq)(h.threadTable.id,e)),K()}async function g(e){0!==e.length&&(await s.database.transaction(async t=>{await t.update(h.threadTable).set({seen:!0}).where((0,r.inArray)(h.threadTable.id,e)),await t.update(h.threadRelayTable).set({accepted:!0}).where((0,r.inArray)(h.threadRelayTable.threadId,e))}),K())}async function m(e,t,a=null){(t.input||t.output||null!==a)&&(await s.database.update(h.threadTable).set({inputTokens:n.sql`${h.threadTable.inputTokens} + ${t.input}`,outputTokens:n.sql`${h.threadTable.outputTokens} + ${t.output}`,cacheReadTokens:n.sql`${h.threadTable.cacheReadTokens} + ${t.cacheRead}`,cacheWriteTokens:n.sql`${h.threadTable.cacheWriteTokens} + ${t.cacheWrite}`,...null===a?{}:{contextTokens:a.tokens,contextBudget:a.budget}}).where((0,r.eq)(h.threadTable.id,e)),K())}async function k(e){let[t]=await s.database.select(P).from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));if(!t)return null;let[a]=await B([t]);return a??null}async function I(e){let[t]=await s.database.select().from(h.threadTable).where((0,r.eq)(h.threadTable.id,e));return t??null}let J=e=>"running"===e||"waiting"===e;async function q(){let[e,t,a,n]=await Promise.all([s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["running","waiting"])).orderBy((0,d.desc)(h.threadTable.updatedAt)),s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.status,["done","cancelled"])).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.INBOX_FINISHED),s.database.select(P).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,["done","cancelled"]),(0,r.eq)(h.threadTable.seen,!1))),s.database.select(P).from(h.threadTable).where((0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadRelayTable.threadId}).from(h.threadRelayTable).where((0,r.eq)(h.threadRelayTable.accepted,!1))))]),l=[...new Map([...e,...t,...a,...n].map(e=>[e.id,e])).values()].sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime());return B(l,e=>J(e.status))}async function v(){let e=await s.database.select(P).from(h.threadTable).orderBy(n.sql`case when ${h.threadTable.status} in ('running', 'waiting') then 0 else 1 end`,(0,d.desc)(h.threadTable.updatedAt),(0,d.desc)(h.threadTable.id)).limit(o.THREAD_STATUS_LIMIT);return B(e)}async function A(e={}){let t=await s.database.select(P).from(h.threadTable).where(e.before?(0,r.lt)(h.threadTable.updatedAt,e.before):void 0).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(e.limit??o.PAGE_SIZE);return B(t,e=>J(e.status))}async function W(e){return e.length?await s.database.select({id:h.threadTable.id,callId:h.threadTable.callId,label:h.threadTable.label,status:h.threadTable.status,outcome:h.threadTable.outcome}).from(h.threadTable).where((0,r.inArray)(h.threadTable.callId,e)).orderBy(h.threadTable.createdAt):[]}async function R(e,t){let a=(a,n)=>s.database.select({id:h.threadTable.id,owner:h.threadTable.bot,label:h.threadTable.label,status:h.threadTable.status,pending:h.threadTable.pending,updatedAt:h.threadTable.updatedAt}).from(h.threadTable).where((0,r.and)((0,r.inArray)(h.threadTable.status,a),t?(0,r.ne)(h.threadTable.id,t):void 0,(0,r.inArray)(h.threadTable.id,s.database.select({id:h.threadWorkTable.threadId}).from(h.threadWorkTable).where((0,r.eq)(h.threadWorkTable.bot,e))))).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(n),[n,l]=await Promise.all([a(["running","waiting"],o.BOT_WORK.open),a(["done","cancelled"],o.BOT_WORK.recent)]),i=[...n,...l].map(e=>e.id);if(!i.length)return{open:[],recent:[]};let u=await s.database.select({id:h.threadWorkTable.id,threadId:h.threadWorkTable.threadId,result:h.threadWorkTable.result}).from(h.threadWorkTable).where((0,r.and)((0,r.eq)(h.threadWorkTable.bot,e),(0,r.inArray)(h.threadWorkTable.threadId,i),(0,r.isNotNull)(h.threadWorkTable.result))).orderBy((0,d.desc)(h.threadWorkTable.createdAt)),b=new Map;for(let{id:e,threadId:t,result:a}of u)a?.trim()&&!b.has(t)&&b.set(t,{workId:e,words:a});let c=({pending:e,...t})=>{let a=b.get(t.id);return{...t,workId:a?.workId??null,asking:"waiting"===t.status&&!!e?.messageId,said:a?.words??null,cut:!!a&&a.words.replace(/\s+/g," ").trim().length>o.BOT_WORK.said}};return{open:n.map(c),recent:l.map(c)}}async function D(e,t){if(t.owner===e){let[e]=await s.database.select({request:h.threadTable.request}).from(h.threadTable).where((0,r.eq)(h.threadTable.id,t.id));return e?.request??""}return t.workId?(await s.database.select({text:h.threadDeliveryTable.text}).from(h.threadDeliveryTable).where((0,r.eq)(h.threadDeliveryTable.workId,t.workId)).orderBy(h.threadDeliveryTable.id)).map(e=>e.text).join("\n\n"):""}async function x(e){let t=await s.database.delete(h.threadTable).where((0,r.eq)(h.threadTable.id,e)).returning({id:h.threadTable.id});return t.length&&K(),t.length>0}async function O(){return(await s.database.select({id:h.threadTable.id}).from(h.threadTable).where((0,r.eq)(h.threadTable.status,"running"))).map(e=>e.id)}async function M(){return await s.database.select({id:h.threadTable.id,label:h.threadTable.label,status:h.threadTable.status,endedAt:h.threadTable.endedAt,updatedAt:h.threadTable.updatedAt}).from(h.threadTable)}function $(e){let t=new Set;for(let a of e)if(Array.isArray(a))for(let e of a){if("tool-call"!==e.type||e.toolName!==u.TOOL_NAMES.write_file)continue;let a=e.input?.path;"string"==typeof a&&a.trim()&&(t.delete(a.trim()),t.add(a.trim()))}return[...t]}async function S(e){let t=await s.database.select({content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.eq)(h.threadMessageTable.role,"assistant"))).orderBy(h.threadMessageTable.seq);return $(t.map(e=>e.content))}async function _(e){let t=e.trim();if(!t)return null;let a=await I(t);if(a)return a;let r=t.toLowerCase();return(await s.database.select().from(h.threadTable).orderBy((0,d.desc)(h.threadTable.updatedAt)).limit(o.THREAD_LABEL_REACH)).find(e=>e.label.toLowerCase()===r)??null}async function E(e,t,a){await s.database.insert(h.threadMessageTable).values({threadId:e,seq:t,...a,compact:a.compact??!1,note:a.note??!1}).onConflictDoUpdate({target:[h.threadMessageTable.threadId,h.threadMessageTable.seq],set:{role:a.role,content:a.content,compact:a.compact??!1,note:a.note??!1}}),K()}async function U(e,t){t.length&&(await s.database.delete(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.seq,t))),K())}async function B(e,t=()=>!0){if(0===e.length)return[];let a=e.filter(t).map(e=>e.id),d=a.length?await s.database.select().from(h.threadMessageTable).where((0,r.inArray)(h.threadMessageTable.threadId,a)).orderBy(h.threadMessageTable.seq):[],l=e.map(e=>e.id),[i,o,p]=await Promise.all([s.database.select().from(h.threadWorkTable).where((0,r.inArray)(h.threadWorkTable.threadId,l)).orderBy(n.sql`${h.threadWorkTable}.rowid`),s.database.select().from(h.threadDeliveryTable).where((0,r.and)((0,r.inArray)(h.threadDeliveryTable.threadId,l),(0,r.eq)(h.threadDeliveryTable.visible,!0))),s.database.select().from(h.threadRelayTable).where((0,r.and)((0,r.inArray)(h.threadRelayTable.threadId,l),(0,r.eq)(h.threadRelayTable.accepted,!1)))]),f=new Map(e.map(e=>[e.id,e.bot])),y=new Map(i.map(e=>[e.id,e.caller])),g=new Map;for(let e of d){let t=g.get(e.threadId)??[];t.push(...function(e,t){if(e.hidden)return[];let a={seq:e.seq,bot:e.bot,parent:e.parent,to:"user"===e.role?e.bot:t,at:e.createdAt},r=t=>`${e.id}-${t}`,d=e.content;if("user"===e.role){if(0===e.seq)return[];let t="string"==typeof d?d:d.flatMap(e=>"text"===e.type&&e.text?[e.text]:[]).join("\n").trim();if(!t)return[];if(e.compact)return[{...a,id:r(0),kind:"note",text:t}];if(e.note){let e=t.endsWith(w.RESUME_CHECK)?t.slice(0,-w.RESUME_CHECK.length).trimEnd():t;return[{...a,id:r(0),kind:"stop",text:e}]}return[{...a,id:r(0),kind:"user",text:(0,c.untagSpeaker)(t),by:(0,c.speakerOf)(t)}]}if("assistant"===e.role){let t=e.content;if("string"==typeof t)return t.trim()?[{...a,id:r(0),kind:"text",text:t.trim()}]:[];let d=[];return t.forEach((t,n)=>{if("text"===t.type){let e=t.text.trim();e&&d.push({...a,id:r(n),kind:"text",text:e});return}if("tool-result"===t.type)return void d.push(j(a,r(n),t));if("tool-call"!==t.type)return;let l=t.input??{};if(t.toolName===u.TOOL_NAMES.send_message){let i;d.push({...a,id:r(n),kind:"ask",callId:t.toolCallId,to:(i=String(l.to??"").trim()).toLowerCase()===w.ROOM_THURSDAY.toLowerCase()?w.ROOM_THURSDAY:i,text:String(l.text??""),question:"question"===l.kind,..."question"===l.kind&&e.bot?{questionId:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...e.bot?{exchange:(0,T.messageKey)(e.threadId,e.bot,t.toolCallId)}:{},...Array.isArray(l.after)&&l.after.length?{after:l.after.map(String)}:{}})}else t.toolName===u.TOOL_NAMES.bash?d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:(0,b.clip)(String(l.command??""),120),note:N(l)}):d.push({...a,id:r(n),kind:"tool",callId:t.toolCallId,name:t.toolName,input:C(t.toolName,l),note:N(l),path:t.toolName===u.TOOL_NAMES.write_file?V(l,"path")??null:null})}),d}if("tool"===e.role){let t=[];return e.content.forEach((e,d)=>{"tool-result"!==e.type||(e.toolName!==u.TOOL_NAMES.send_message||"error-text"===e.output.type)&&t.push(j(a,r(d),e))}),t}return[]}(e,(e.parent?y.get(e.parent):null)??f.get(e.threadId)??"")),g.set(e.threadId,t)}return e.map(e=>{let a=i.filter(t=>t.threadId===e.id),r=["running","queued","paused","waiting","done","cancelled"],d=[...new Set(a.map(e=>e.bot))].filter(e=>e!==w.ROOM_THURSDAY).map(e=>({bot:e,state:a.filter(t=>t.bot===e).sort((e,t)=>r.indexOf(e.state)-r.indexOf(t.state))[0].state}));return{...function(e,t){let{pending:a,inputTokens:r,outputTokens:d,...n}=e;return{...n,ask:"waiting"===e.status?{question:e.outcome??"",options:a?.options??[],messageId:a?.messageId,bot:a?.bot,refused:a?.refused}:null,tokens:{input:r,output:d},lines:t}}(e,g.get(e.id)??[]),room:{participants:d,questions:a.filter(e=>"external"===e.state).map(e=>({id:e.id,bot:e.caller,text:e.result??"",options:e.options})),deliveries:o.filter(t=>t.threadId===e.id).map(t=>({id:t.key,bot:a.find(e=>e.id===t.workId)?.bot??e.bot,text:t.text,delivered:t.consumed})),relays:p.filter(t=>t.threadId===e.id),exchanges:t(e)?a.map(e=>({id:e.id,bot:e.bot,caller:e.caller,state:e.state,waitsFor:e.waitsFor})):[]}}})}let z=["query","command","prompt","url","path","pattern","request","question","title","name","thread","text"],V=(e,t)=>{let a=e[t];return"string"==typeof a&&a.trim()?a:null};function N(e){let t=V(e,"description");return t?(0,b.clip)(t,120):null}function C(e,t){let a=t??{};if("object"!=typeof a||Array.isArray(a))return(0,b.clip)(String(t??""),120);if(e===u.TOOL_NAMES.bash)return N(a)??(0,b.clip)(String(a.command??""),120);if(e===u.TOOL_NAMES.tool_call||e===u.TOOL_NAMES.tool_search){let e=Array.isArray(a.tools)?a.tools.map(String).join(", "):String(a.tool??""),t=a.args??null,r=t&&"object"==typeof t?String(a.server??"")===o.STUDIO_SERVER?L(t):JSON.stringify(t):"";return(0,b.clip)([String(a.server??""),e,r].filter(Boolean).join(" "),120)}let r=L(a);return r?(0,b.clip)(r,120):Object.keys(a).length?(0,b.clip)(JSON.stringify(a),120):""}function L(e){for(let t of z){let a=V(e,t);if(a)return a}for(let t of Object.keys(e)){let a=V(e,t);if(a)return a}return""}async function H(e,t){for(let a of(await s.database.select({role:h.threadMessageTable.role,content:h.threadMessageTable.content}).from(h.threadMessageTable).where((0,r.and)((0,r.eq)(h.threadMessageTable.threadId,e),(0,r.inArray)(h.threadMessageTable.role,["tool","assistant"])))))if("string"!=typeof a.content){for(let e of a.content)if("tool-result"===e.type&&e.toolCallId===t)return F(e.output,o.FULL_RESULT_LINES,!0)}return null}let G=/https?:\/\/\S+(?: · \d{4}-\d{2}-\d{2})?\s*$/,X=" — ";function j(e,t,a){let r=a.toolName===u.TOOL_NAMES.web_search,d=F(a.output,r?o.FULL_RESULT_LINES:5),n=d.flatMap(e=>"text"===e.type?[e.text]:[]),l=r?n.filter(e=>G.test(e)):[],i=(l.length?l:n).slice(0,4);return{...e,id:t,kind:"tool-result",callId:a.toolCallId,name:a.toolName,results:i.map(e=>({type:"text",text:l.length?function(e){let t=e.replace(/\s+/g," ").trim(),a=G.exec(t);if(!a||t.length<=200)return(0,b.clip)(t,200);let r=a[0].trim(),d=t.slice(0,a.index).replace(/[\s—-]+$/,""),n=200-r.length-X.length;return d&&n>1?`${(0,b.clip)(d,n)}${X}${r}`:r}(e):(0,b.clip)(e,200)})),more:n.length>i.length||d.length>n.length||i.some(e=>e.length>200)}}function F(e,t,a=!1){var r;if(null==e)return[];if("string"==typeof e)return Y(e,t,a);if("object"!=typeof e)return Y(String(e),t,a);switch(e.type){case"text":case"error-text":return Y(String(e.value??""),t,a);case"json":case"error-json":return F(e.value,t,a);case"execution-denied":return Y("Denied.",t,a);case"content":{if(!Array.isArray(e.value))return[];let r=[];for(let d of e.value){if("text"===d.type&&"string"==typeof d.text){r.push(...Y(d.text,t,a));continue}let e=function(e){let t=String(e.mediaType??"");if(!t.startsWith("image/"))return null;let a=e.data;return"string"==typeof a?`data:${t};base64,${a}`:a?.type==="url"&&a.url?a.url:a?.type==="data"&&"string"==typeof a.data?`data:${t};base64,${a.data}`:null}(d);e&&r.push({type:"image",src:e})}return r}}return"string"==typeof e.path&&String(e.mediaType??"").startsWith("image/")?[{type:"text",text:e.path},{type:"image",src:i.queryKey.file(e.path)}]:Array.isArray(e.sources)?e.sources.map(e=>String(e?.title??"")).filter(Boolean).slice(0,t).map(e=>({type:"text",text:e})):"string"==typeof e.stdout?Y(e.stdout||String(e.stderr??""),t,a):"string"==typeof e.answer?Y(e.answer,t,a):Y(a?(r=e,Array.isArray(r)?JSON.stringify(r,null,2):Object.entries(r).map(([e,t])=>"string"==typeof t&&t.includes("\n")?`${e}:
|
|
10
10
|
${t}`:`${e}: ${JSON.stringify(t,null,2)}`).join("\n")):JSON.stringify(e),t,a)}function Y(e,t,a=!1){if(a){let a=e.split("\n"),r=a.slice(0,t);a.length>t&&r.push(`… ${a.length-t} more lines`);let d=r.join("\n").trimEnd();return d?[{type:"text",text:d}]:[]}return e.split("\n").map(e=>e.trim()).filter(Boolean).slice(0,t).map(e=>({type:"text",text:e}))}e.s(["addThreadUsage",0,m,"argumentLine",0,C,"deleteMessages",0,U,"deleteThread",0,x,"findThread",0,I,"findThreadView",0,k,"insertThread",0,f,"listBotWork",0,R,"listCallJobs",0,W,"listInboxThreads",0,q,"listRunningThreadIds",0,O,"listThreadFolders",0,M,"listThreadHistory",0,A,"listThreadOverview",0,v,"listWrittenPaths",0,S,"markSeen",0,g,"readBotAsk",0,D,"readToolResult",0,H,"resolveThread",0,_,"updateThread",0,y,"upsertMessage",0,E,"writtenPathsIn",0,$]),a()}catch(e){a(e)}},!1)];
|
|
11
11
|
|
|
12
12
|
//# sourceMappingURL=features_bot_08z387_._.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module.exports=[265143,e=>e.a(async(a,t)=>{try{e.i(666680);var o=e.i(875225),s=e.i(518899),i=e.i(380690);e.i(687388);var n=e.i(528790),r=e.i(613240),d=e.i(340698);e.i(786025);var c=e.i(944971);e.i(438188),e.i(732395);var h=a([n,d]);[n,d]=h.then?(await h)():h;let g=e=>({name:e.name,description:e.description,ownLine:e.ownLine?.line??null,systemPrompt:e.systemPrompt,icon:e.icon,provider:e.provider,model:e.model,disabled:e.disabled,compactAt:e.compactAt,effort:e.effort});async function l(){let e=await n.database.select().from(r.botTable).orderBy(r.botTable.createdAt);return e.length?e.filter(e=>!e.disabled).map(g):[c.DEFAULT_BOT]}async function f(e){let a=await u(e);if(a)return g(a);let t=e.trim().toLowerCase(),[i]=await n.database.select().from(r.botTable).where((0,o.eq)(s.sql`lower(${r.botTable.name})`,t));if(i)return g(i);if(c.DEFAULT_BOT.name.toLowerCase()!==t)return null;let[d]=await n.database.select({name:r.botTable.name}).from(r.botTable).limit(1);return d?null:c.DEFAULT_BOT}async function b(){let[e,a,t]=await Promise.all([n.database.select().from(r.botTable).orderBy(r.botTable.createdAt),n.database.select({botName:r.botMcpToolTable.botName,id:r.mcpToolTable.id,name:r.mcpToolTable.name,serverName:r.mcpToolTable.serverName}).from(r.botMcpToolTable).innerJoin(r.mcpToolTable,(0,o.eq)(r.botMcpToolTable.toolId,r.mcpToolTable.id)),n.database.select({bot:r.threadTable.bot,input:s.sql`coalesce(sum(${r.threadTable.inputTokens}), 0)`,output:s.sql`coalesce(sum(${r.threadTable.outputTokens}), 0)`,lastJobAt:s.sql`max(${r.threadTable.updatedAt})`}).from(r.threadTable).groupBy(r.threadTable.bot)]),i=new Map;for(let{botName:e,...t}of a){let a=i.get(e)??[];a.push(t),i.set(e,a)}let d=new Map(t.map(e=>[e.bot,{input:Number(e.input),output:Number(e.output)}])),c=new Map(t.flatMap(e=>null==e.lastJobAt?[]:[[e.bot,new Date(1e3*Number(e.lastJobAt))]]));return e.map(e=>({...e,tools:i.get(e.name)??[],tokens:d.get(e.name)??{input:0,output:0},lastJobAt:c.get(e.name)??null}))}async function m(){return(0,c.isBotMemoryOn)(await (0,d.readConfig)(c.BOT_MEMORY_KEY))}async function u(e){let[a]=await n.database.select().from(r.botTable).where((0,o.eq)(r.botTable.name,e));return a??null}async function p(e){let a=await u(e);return!a||a.descriptionLocked?null:{line:a.ownLine?.line??null}}async function w(e,a,t){let s=await u(e);if(!s||s.descriptionLocked)return;let d=s.ownLine?.line??null;return d===a||(await n.database.update(r.botTable).set({ownLine:{line:a,reason:t,at:Date.now()}}).where((0,o.eq)(r.botTable.name,s.name)),i.appEvents.emit({type:"bots"})),{was:d}}async function y(){let e=await n.database.select({name:r.botTable.name}).from(r.botTable);return[...new Set([...e.map(e=>e.name),c.DEFAULT_BOT.name])]}e.s(["findAllBots",0,b,"findJobBot",0,f,"listBotNames",0,y,"listJobBots",0,l,"ownLineOf",0,p,"readBotMemoryOn",0,m,"writeOwnLine",0,w]),t()}catch(e){t(e)}},!1),732395,e=>{"use strict";var a=e.i(666680);let t={Analyst:["2ecfa3bc73c72f027ec35f3c0a9484e4eb6a481acf6692ce1f8003f9f6fa45e0","42b09da7559494b0bdd475c947fb9d185706e8ccaf75875d64cffe496175aa27","5efcd3baeaf8597f66206da925ac1c32ca397198c554c5674dbf367752a7f49e","7fe705163e387936fb1c2c7e74b6fabbdeb4c20baa6a79b59f8754ea947f65fd","99a16fca83539629b01ec4eabca96c239da7f2104810eda9b4a7b866ac7a6e7f","9ad27da4b3e31445c6d5e9f756e2335f18db002a436a1fe379db5c1d816509ec","a34d00a7c55924d29751fbe00add8add48c18cdf9e2defbdc7d5d30dc53833ea","a804cc98c41152743d6a30c426d5446b29d9959dd96c0fa3ec29f78de2a8d556","ac4cb54a355704d05a007af2fd7c883db941db0ca0fb594aafcc1f7acf8a9038","b461b7e117bcd6a16fe0312e61bcd93a05a079898252400c4109e575b197b20e"],Concierge:["0702d68f06738940f98ed6cfbab41715e87590fb5af1466fd30d6aec47270fd0","a7b3aa7f71319fc4884bca24b00fcb05c4e552824ac97ecfdd14be0409e77ce6"],Designer:["41f33cca88277e694d851c30aad3feadbf298db5865d55addbb9c099e2c31c46","bc38b9ebdb47b1997276a8c01540f75ee630ee9e62476b1cf28cbcc14a8a79e6"],Jarvis:["51bf694bcd2f55f283f24dae6210c9a18c69fb2c44beacbda0b925f798e8ea35","80bf400fb3e2572cb6c4f101577f6f4d44fcd711f4c3330a75de2a7a81795cdc","c8ea86b600576cce7e97bc0e249bd13c779a1ef6598bdaa7a75556ef35b80e7b","d4af22b54f71da38146f15b1ea465362c411634485eb80c80e08fb845068f22d","d911d8abf3d2d252e3556026b8bc258027342c017d1a065f056a3e0c7d4d794a"],Tutor:["1761c048db262a2864d3cd6e3d338f52a370b65efd9f61555970008defd66277","341a3aa83a61e767d66e3ec3daf17f80d5ebe462f0342665cfcc2afa37b56fda","e2da41b01905031d1bb1e246c81bfa4c36a6efc14dd58a1e03a977d47941d72b","eacf69e58573b8414fb0936ea0aa7e3d6290a53c4e8dd2a562252bf0352cbadc"]},o={Marketer:["48ac45457c2f1756e0adc439478e94cdd314b535ba8d84eba6b3a043119b5f55","6e0bf4b5821da96d9ee080bb5981191fc2584e7f90027cdd86d5d5073c5a15eb","845e74d57daf14c00a5b47ee73b7094cecd13756721b46ff6e31980ba72efe36","b610e11935754fd46387cb28b1b1e72b971c6e7f91f3cda56085709321f23aa3","b8880b433456f5d66821575f463b8bef3bb9652c6f752886577486f709461340","b8cf680316e888d1192471c6ef103381adbcb32731fb38badc08a4cf49e940ca","d532807b2e69bce7836b005e18b5f78437c5c44dabc7839b45f6e2549866da3a"]};e.s(["wasSeedRole",0,function(e,s){let i=(0,a.createHash)("sha256").update(s.trim()).digest("hex");return!!(t[e]?.includes(i)||o[e]?.includes(i))}])},438188,e=>{"use strict";var a=e.i(687388),t=e.i(353885),o=e.i(944971),s=e.i(554199);let i=[{name:o.DEFAULT_BOT.name,description:o.DEFAULT_BOT.description,hint:"Takes whatever nobody else is for",systemPrompt:"",icon:o.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:s.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:s.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:s.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, \`${a.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, short films",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 short film for a birthday or a thank-you, a document someone reads. You build it in \`${a.ARTIFACT_SKILL}\` (a canvas of options side by side or anything at its exact size, a document): 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 \`${t.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 \`${a.ARTIFACT_SKILL}\` too, with steps of its own, and so is a short film: one film made for the one it is for, never options.
|
|
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 — a picture at a time, read aloud if asked, a study guide, a diagram",hint:"Explains anything, a picture at a time",icon:{color:s.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. Load \`${a.ARTIFACT_SKILL}\` before any step. What they asked for is what you make; when they did not say, it is slides that explain the way a picture book does, one picture and a line or two a slide, made with \`${t.TOOL_NAMES.make_deck}\` in your folder under \`artifacts/\` — not a question. A PDF of them, or a video that reads them aloud, is made from the same deck when they ask; a one-page guide to study from, and a diagram of how something works, are in \`${a.ARTIFACT_SKILL}\` too.
|
|
28
|
+
|
|
29
|
+
**Simple, never wrong.** Read what you explain from where it is stated before the first slide. 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 slides — dated, so the next lesson starts where they are.`},{name:"Writer",description:"Writes what goes out in their name — mail replies, letters, posts, page copy, a launch plan",hint:"Drafts it in their voice, ready to send",icon:{color:s.MARK_INK.pink,shape:"poly"},systemPrompt:`Anything written for someone else to read is yours — their mail read and answered, a letter, a post, page copy, a launch plan — and it ends as the thing itself, ready to send, paste or post: a draft where it will be sent from, or a file in your folder under \`artifacts/\`. Marketing a product has a skill of your own, \`${a.MARKETING_SKILL}\`, with the method for its positioning, page copy, launch, social posts, email sequences and SEO audit: load it before any step of one.
|
|
32
|
+
|
|
33
|
+
**Their mail.** A connected mail service is the quick way in; without one, their mail is open in their own browser. Read what came since you last looked, tell what needs an answer from what is only to know, and leave each answer as a draft in their mailbox. Sending is theirs unless they told you to send: work they asked to have mailed, to them or to someone they named, goes out, and your answer says where it went.
|
|
34
|
+
|
|
35
|
+
**Their voice, not yours.** Read what they wrote before — the thread you answer, a post of theirs — and write the way they do. A name, a date or a figure you were not given is a visible blank, never a plausible one.
|
|
36
|
+
|
|
37
|
+
**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.
|
|
38
|
+
|
|
39
|
+
**What you keep.** How they write and sign off, who they write to and how, one brief per product — dated, so the next job starts from it.`}];e.s(["findBotSeed",0,e=>i.find(a=>a.name===e)??null])}];
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=features_bot_1d6ghh5._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[
|
|
1
|
+
module.exports=[799791,e=>e.a(async(a,t)=>{try{var o=e.i(666680),s=e.i(336763),i=e.i(533102),d=e.i(232347);e.i(333925);var r=e.i(876393),n=e.i(220376),c=e.i(724185);e.i(871096);var f=e.i(951056),b=e.i(776857),h=e.i(352985),l=a([r,c]);[r,c]=l.then?(await l)():l;let T=e=>({name:e.name,description:e.description,ownLine:e.ownLine?.line??null,systemPrompt:e.systemPrompt,icon:e.icon,provider:e.provider,model:e.model,disabled:e.disabled,compactAt:e.compactAt,effort:e.effort});async function m(){let e=await r.database.select().from(n.botTable).orderBy(n.botTable.createdAt);return e.length?e.filter(e=>!e.disabled).map(T):[f.DEFAULT_BOT]}async function u(e){let a=await w(e);if(a)return T(a);let t=e.trim().toLowerCase(),[o]=await r.database.select().from(n.botTable).where((0,s.eq)(i.sql`lower(${n.botTable.name})`,t));if(o)return T(o);if(f.DEFAULT_BOT.name.toLowerCase()!==t)return null;let[d]=await r.database.select({name:n.botTable.name}).from(n.botTable).limit(1);return d?null:f.DEFAULT_BOT}async function p(){return(0,f.isBotMemoryOn)(await (0,c.readConfig)(f.BOT_MEMORY_KEY))}async function w(e){let[a]=await r.database.select().from(n.botTable).where((0,s.eq)(n.botTable.name,e));return a??null}async function y(e){let a=await w(e);return!a||a.descriptionLocked?null:{line:a.ownLine?.line??null}}async function g(e,a,t){let o=await w(e);if(!o||o.descriptionLocked)return;let i=o.ownLine?.line??null;return i===a||(await r.database.update(n.botTable).set({ownLine:{line:a,reason:t,at:Date.now()}}).where((0,s.eq)(n.botTable.name,o.name)),d.appEvents.emit({type:"bots"})),{was:i}}let v=e=>(0,o.createHash)("sha256").update(e.trim()).digest("hex");async function k(){let e=await r.database.select().from(n.botTable),a=h.SEED_WORDS.before,t=0;for(let o of e){let e=(0,b.findBotSeed)(o.name);if(!e)continue;let i=null!==o.systemPrompt&&a.roles[o.name]?.includes(v(o.systemPrompt)),d=a.descriptions[o.name]?.includes(v(o.description));(i||d)&&(await r.database.update(n.botTable).set({...i?{systemPrompt:e.systemPrompt}:{},...d?{description:e.description}:{}}).where((0,s.eq)(n.botTable.name,o.name)),t++)}return t}e.s(["findJobBot",0,u,"listJobBots",0,m,"ownLineOf",0,y,"readBotMemoryOn",0,p,"refreshSeedWords",0,k,"writeOwnLine",0,g]),t()}catch(e){t(e)}},!1),352985,e=>{"use strict";var a=e.i(666680);let t={now:{Analyst:{role:"9ad6d2bd53d0c4c4b4b119698b14ef7373a91413139b1b73c851202c3bb89356",description:"91a2082411b972f26dfed77e9d60fa9b00dcf2c8973e7a6daf498443b734afd4"},Concierge:{role:"901d153d3f3eab90922a942e98cb64cf10d5d732ab7df9e688af5455f131a08c",description:"2f2b87874441a3add5523dcae8b3bcb152e8eef5766b2d254202507e19b449d6"},Curator:{role:"f27106ba3c414bc357b99d55329866a0c983082466a95b018dce6c0ae385b76b",description:"34a40602b63070cf8fffb472d80ca953ba4970df79efea8994c9ddada1e40852"},Designer:{role:"c4871108bd180d7cf72b4acaaa61104bab2fc5a1d074007417bf581ad028fd37",description:"c0f80c16fb292da454862bdda221f18371cbb5586df8b0804330b9f7990a75b9"},Jarvis:{role:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",description:"64df098cccbd120689eba7a7e5e6eca7c57952ebef8de04f166769ddec26edca"},Tutor:{role:"55c0b1264bb177f052a0048b3c1909ffca36b7c1a33e61dc8b9536ca4e3bbc59",description:"c5a2326c5db43a12527d185a5e017b97b6872334aa6941b524117eb234a0f2eb"},Writer:{role:"988acc75013760a2ba515bec06b4edcecb82b9fda2e7ee2584e3790f4cb83224",description:"7d06574dc1112687082f15f6dec88f0074f3baaf7d791c17f62cfb8d749ad815"}},before:{roles:{Analyst:["2ecfa3bc73c72f027ec35f3c0a9484e4eb6a481acf6692ce1f8003f9f6fa45e0","42b09da7559494b0bdd475c947fb9d185706e8ccaf75875d64cffe496175aa27","5efcd3baeaf8597f66206da925ac1c32ca397198c554c5674dbf367752a7f49e","7fe705163e387936fb1c2c7e74b6fabbdeb4c20baa6a79b59f8754ea947f65fd","99a16fca83539629b01ec4eabca96c239da7f2104810eda9b4a7b866ac7a6e7f","9ad27da4b3e31445c6d5e9f756e2335f18db002a436a1fe379db5c1d816509ec","a34d00a7c55924d29751fbe00add8add48c18cdf9e2defbdc7d5d30dc53833ea","a804cc98c41152743d6a30c426d5446b29d9959dd96c0fa3ec29f78de2a8d556","ac4cb54a355704d05a007af2fd7c883db941db0ca0fb594aafcc1f7acf8a9038","b461b7e117bcd6a16fe0312e61bcd93a05a079898252400c4109e575b197b20e"],Concierge:["0702d68f06738940f98ed6cfbab41715e87590fb5af1466fd30d6aec47270fd0","a7b3aa7f71319fc4884bca24b00fcb05c4e552824ac97ecfdd14be0409e77ce6"],Designer:["41f33cca88277e694d851c30aad3feadbf298db5865d55addbb9c099e2c31c46","bc38b9ebdb47b1997276a8c01540f75ee630ee9e62476b1cf28cbcc14a8a79e6"],Jarvis:["51bf694bcd2f55f283f24dae6210c9a18c69fb2c44beacbda0b925f798e8ea35","80bf400fb3e2572cb6c4f101577f6f4d44fcd711f4c3330a75de2a7a81795cdc","c8ea86b600576cce7e97bc0e249bd13c779a1ef6598bdaa7a75556ef35b80e7b","d4af22b54f71da38146f15b1ea465362c411634485eb80c80e08fb845068f22d","d911d8abf3d2d252e3556026b8bc258027342c017d1a065f056a3e0c7d4d794a"],Tutor:["1761c048db262a2864d3cd6e3d338f52a370b65efd9f61555970008defd66277","341a3aa83a61e767d66e3ec3daf17f80d5ebe462f0342665cfcc2afa37b56fda","e2da41b01905031d1bb1e246c81bfa4c36a6efc14dd58a1e03a977d47941d72b","eacf69e58573b8414fb0936ea0aa7e3d6290a53c4e8dd2a562252bf0352cbadc"]},descriptions:{Analyst:["234b352c85876ad828aaf50ed4e9c4aa890fc6700e8aea2037eddd4ae496fdb4","543b28dacc6fa6dbecb7ec138f898acf4b9a96ec4ceca877b16367352a5c9abb","5a6f1f4b9d2f9c39332e6bc6067cbfdc8f2d5ac4d457d0a50a51abf03e41e44b"],Designer:["c7e32c06db49c5705d7df5cc7c4d0107c5833329b6fda26d9f357bc2e7629724"],Jarvis:["0cf6188509b3e35ee354dea80502917e7d88e81bbe412be8890c6c4caa10c0ec","2f1c7c26704774ac6ab850720ad589795403679fbac74eac1096a2d4d63322b2","36a96d89634ddc4f072e709a210838cacd498b1c3613e43a4175092487013e98","b5bd73e04eea0054ff6994c92a8135ae0a20381c303c7691e01a1b717cbd1c09","c31d7da13ecd60a2dc68feee4030fa3930aba4c5ee0b94a36bb405b1ce4646eb","ed80dc597d2b15e3f5390318fd53413ef246e6a71a5cc1513472d1efd7860927"],Tutor:["21e0c69699688b77609c91bdc1387c0545b3e899404d07347ce6f21713573a1f","9c0b79b91390f79e38c43f3c9f396acaba8e0709c86a1097d2aa150823272481","dd3d35e733da1496a7161b01f1b297d0f715ef4ca30cf79d303e68727f585a17","f3356e55e33626d633bd890c30c2472c324105a57b0504084ee135c4f4fe5f36"]}},retired:{roles:{Marketer:["48ac45457c2f1756e0adc439478e94cdd314b535ba8d84eba6b3a043119b5f55","6e0bf4b5821da96d9ee080bb5981191fc2584e7f90027cdd86d5d5073c5a15eb","845e74d57daf14c00a5b47ee73b7094cecd13756721b46ff6e31980ba72efe36","b610e11935754fd46387cb28b1b1e72b971c6e7f91f3cda56085709321f23aa3","b8880b433456f5d66821575f463b8bef3bb9652c6f752886577486f709461340","b8cf680316e888d1192471c6ef103381adbcb32731fb38badc08a4cf49e940ca","d532807b2e69bce7836b005e18b5f78437c5c44dabc7839b45f6e2549866da3a"]}}};e.s(["SEED_WORDS",0,t,"wasSeedRole",0,function(e,o){let s=(0,a.createHash)("sha256").update(o.trim()).digest("hex"),i=t.before.roles,d=t.retired.roles;return!!(i[e]?.includes(s)||d[e]?.includes(s))}])},776857,e=>{"use strict";var a=e.i(333925),t=e.i(51083),o=e.i(951056),s=e.i(746565);let i=[{name:o.DEFAULT_BOT.name,description:o.DEFAULT_BOT.description,hint:"Takes whatever nobody else is for",systemPrompt:"",icon:o.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:s.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
2
|
|
|
3
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
4
|
|
|
@@ -16,7 +16,7 @@ module.exports=[352985,e=>{"use strict";e.s(["SEED_WORDS",0,{now:{Analyst:{role:
|
|
|
16
16
|
|
|
17
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
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
|
|
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, short films",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 short film for a birthday or a thank-you, a document someone reads. You build it in \`${a.ARTIFACT_SKILL}\` (a canvas of options side by side or anything at its exact size, a document): 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 \`${t.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 \`${a.ARTIFACT_SKILL}\` too, with steps of its own, and so is a short film: one film made for the one it is for, never options.
|
|
20
20
|
|
|
21
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
22
|
|
|
@@ -24,14 +24,18 @@ module.exports=[352985,e=>{"use strict";e.s(["SEED_WORDS",0,{now:{Analyst:{role:
|
|
|
24
24
|
|
|
25
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
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
|
|
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 — a picture at a time, read aloud if asked, a study guide, a diagram",hint:"Explains anything, a picture at a time",icon:{color:s.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. Load \`${a.ARTIFACT_SKILL}\` before any step. What they asked for is what you make; when they did not say, it is slides that explain the way a picture book does, one picture and a line or two a slide, made with \`${t.TOOL_NAMES.make_deck}\` in your folder under \`artifacts/\` — not a question. A PDF of them, or a video that reads them aloud, is made from the same deck when they ask; a one-page guide to study from, and a diagram of how something works, are in \`${a.ARTIFACT_SKILL}\` too.
|
|
28
28
|
|
|
29
|
-
**Simple, never wrong.** Read what you explain from where it is stated before the first
|
|
29
|
+
**Simple, never wrong.** Read what you explain from where it is stated before the first slide. 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
30
|
|
|
31
|
-
**What you keep.** What the user already knows and how they liked being taught — the level, a picture style, how many
|
|
31
|
+
**What you keep.** What the user already knows and how they liked being taught — the level, a picture style, how many slides — dated, so the next lesson starts where they are.`},{name:"Writer",description:"Writes what goes out in their name — mail replies, letters, posts, page copy, a launch plan",hint:"Drafts it in their voice, ready to send",icon:{color:s.MARK_INK.pink,shape:"poly"},systemPrompt:`Anything written for someone else to read is yours — their mail read and answered, a letter, a post, page copy, a launch plan — and it ends as the thing itself, ready to send, paste or post: a draft where it will be sent from, or a file in your folder under \`artifacts/\`. Marketing a product has a skill of your own, \`${a.MARKETING_SKILL}\`, with the method for its positioning, page copy, launch, social posts, email sequences and SEO audit: load it before any step of one.
|
|
32
|
+
|
|
33
|
+
**Their mail.** A connected mail service is the quick way in; without one, their mail is open in their own browser. Read what came since you last looked, tell what needs an answer from what is only to know, and leave each answer as a draft in their mailbox. Sending is theirs unless they told you to send: work they asked to have mailed, to them or to someone they named, goes out, and your answer says where it went.
|
|
34
|
+
|
|
35
|
+
**Their voice, not yours.** Read what they wrote before — the thread you answer, a post of theirs — and write the way they do. A name, a date or a figure you were not given is a visible blank, never a plausible one.
|
|
32
36
|
|
|
33
37
|
**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
38
|
|
|
35
|
-
**What you keep.**
|
|
39
|
+
**What you keep.** How they write and sign off, who they write to and how, one brief per product — dated, so the next job starts from it.`}];e.s(["findBotSeed",0,e=>i.find(a=>a.name===e)??null])}];
|
|
36
40
|
|
|
37
41
|
//# sourceMappingURL=features_bot_1dfrdsb._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[329280,e=>{e.v(s=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(s=>e.l(s))).then(()=>s(781937)))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=node_modules_consola_dist_chunks_prompt_mjs_0k--vqs._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[329280,e=>{e.v(s=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(s=>e.l(s))).then(()=>s(781937)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_consola_dist_chunks_prompt_mjs_0ufuc3s._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[418520,a=>a.a(async(b,c)=>{try{var d=await a.y("@libsql/client-6da938047d5fc1cd");a.n(d),c()}catch(a){c(a)}},!0),500874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},874533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},902157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},912714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},347299,(a,b,c)=>{b.exports=a.x("node:http",()=>require("node:http"))},660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},59639,(a,b,c)=>{b.exports=a.x("node:process",()=>require("node:process"))},136340,(a,b,c)=>{b.exports=a.x("node:timers/promises",()=>require("node:timers/promises"))},509656,(a,b,c)=>{b.exports=a.x("node:tty",()=>require("node:tty"))},812057,(a,b,c)=>{b.exports=a.x("node:util",()=>require("node:util"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},605365,(a,b,c)=>{b.exports=a.x("process",()=>require("process"))},941981,a=>a.a(async(b,c)=>{try{var d=a.i(874533),e=a.i(666680),f=a.i(912714),g=a.i(750227),h=a.i(812057),i=a.i(569572),j=a.i(344853),k=a.i(293480);a.i(684321);var l=a.i(821415),m=b([j]);async function n(a){let b=await (0,l.openWorkspace)(),c=new Set(await (0,f.readdir)((0,g.join)(l.WORKSPACE,i.GIVEN_FILES.dir)).catch(()=>[])),d=[];for(let e of a){let a=e.name.normalize("NFC").replace(/[^\p{L}\p{N}._-]+/gu,"-").replace(/^[-.]+|-+$/g,"")||"file",f=a.lastIndexOf("."),g=f>0?a.slice(0,f):a,h=f>0?a.slice(f):"",j=a;for(let a=2;c.has(j);a++)j=`${g}-${a}${h}`;c.add(j);let k=`${i.GIVEN_FILES.dir}/${j}`;await b.writeFile(k,Buffer.from(await e.arrayBuffer())),d.push(k)}return d}async function o(a){let b=await (0,l.insideWorkspace)(a);b||(0,k.publicError)("Outside the workspace");let c=await (0,f.stat)(b).catch(()=>null);c||(0,k.publicError)("File not found"),c.isFile()||(0,k.publicError)("That is a folder, not a file"),await (0,f.rm)(b)}[j]=m.then?(await m)():m;let s=/<meta name="revision" content="([^"]*)">/,t=/<meta name="sheet-xlsx" content="[0-9a-f]*"/,u=(0,g.join)(i.APP_DIR,i.PATHS.skills.default,"artifact","scripts","spreadsheet.mjs"),v=(0,h.promisify)(d.execFile);async function p(a,b){return v(process.execPath,[u,"sync",a,"--page",b],{env:{NODE_ENV:"production",PATH:process.env.PATH??""},maxBuffer:4194304}).then(()=>!0,a=>{if(3===a.code)return!1;(0,k.publicError)(a.stderr?.trim().split("\n").at(-1)||"The Excel file could not be written.")})}async function q(a,b,c){let d,g;/\.html?$/i.test(a)||(0,k.publicError)("Only a page keeps its own edits");let h=await (0,l.insideWorkspace)(a);h||(0,k.publicError)("Outside the workspace");let j=await (0,f.stat)(h).catch(()=>null);j?.isFile()||(0,k.publicError)("File not found"),Buffer.byteLength(b)>i.WORKSPACE_VIEW.elementMax&&(0,k.publicError)(`Larger than ${Math.round(i.WORKSPACE_VIEW.elementMax/1024/1024)} MB`);let m=await (0,f.readFile)(h,"utf8");if((s.exec(m)?.[1]??"")!==c)return{changed:!0};let n=s.test(b)?(0,e.randomBytes)(6).toString("hex"):"",o=n?b.replace(s,`<meta name="revision" content="${n}">`):b,q=`${h}.${crypto.randomUUID()}.saving`;try{if(await (0,f.writeFile)(q,o),t.test(m)&&!await p(q,h))return await (0,f.rm)(q,{force:!0}),{changed:!0};await (0,f.rename)(q,h)}catch(a){throw await (0,f.rm)(q,{force:!0}),a}return{changed:!1,revision:n,version:(d=n||null,g=await (0,f.stat)(h),`${d??""}:${g.size.toString(16)}-${g.mtimeMs.toString(16)}`)}}async function r(){let a=(0,g.join)(l.WORKSPACE,i.PATHS.scratch),b=new Set((await (0,j.listThreadFolders)()).filter(a=>"running"===a.status||"waiting"===a.status).map(a=>(0,l.jobScratch)(a.id,a.label).split("/").pop()));for(let c of(await (0,f.readdir)(a).catch(()=>[])))b.has(c)||await (0,f.rm)((0,g.join)(a,c),{recursive:!0,force:!0})}a.s(["deleteWorkspaceFile",0,o,"emptyScratch",0,r,"keepGivenFiles",0,n,"savePage",0,q]),c()}catch(a){c(a)}},!1),422842,a=>{"use strict";a.i(570396);var b=a.i(673727),c=a.i(975160),d=a.i(176668),e=a.i(293480),f=a.i(505762);async function g(a){try{return(0,f.flattenResult)(f.result.ok(await a()))}catch(a){if((0,b.unstable_rethrow)(a),(0,e.isPublicError)(a))return f.result.error(a.message);if(a instanceof c.ZodError)return f.result.error(a.issues[0]?.message);if((0,f.isResultError)(a))return a;return d.logger.error(a),f.result.error()}}a.s(["toResult",0,g])},484261,(a,b,c)=>{"use strict";var d=Object.create,e=Object.defineProperty,f=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,h=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,j=(a,b,c,d)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of g(b))i.call(a,h)||h===c||e(a,h,{get:()=>b[h],enumerable:!(d=f(b,h))||d.enumerable});return a},k=(a,b,c)=>(c=null!=a?d(h(a)):{},j(!b&&a&&a.__esModule?c:e(c,"default",{value:a,enumerable:!0}),a)),l={},m={isValidAccessToken:()=>u,readAuthConfig:()=>s,writeAuthConfig:()=>t};for(var n in m)e(l,n,{get:m[n],enumerable:!0});b.exports=j(e({},"__esModule",{value:!0}),l);var o=k(a.r(522734)),p=k(a.r(814747)),q=a.r(72918);function r(){let a=(0,q.getVercelDataDir)();if(!a)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return p.join(a,"auth.json")}function s(){try{let a=r();if(!o.existsSync(a))return null;let b=o.readFileSync(a,"utf8");if(!b)return null;return JSON.parse(b)}catch(a){return null}}function t(a){let b=r(),c=p.dirname(b);o.existsSync(c)||o.mkdirSync(c,{mode:504,recursive:!0}),o.writeFileSync(b,JSON.stringify(a,null,2),{mode:384})}function u(a,b=0){if(!a.token)return!1;if("number"!=typeof a.expiresAt)return!0;let c=Math.floor(Date.now()/1e3);return a.expiresAt>=c+b/1e3}},351275,(a,b,c)=>{"use strict";var d=Object.defineProperty,e=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,h={},i={AccessTokenMissingError:()=>k,RefreshAccessTokenFailedError:()=>l};for(var j in i)d(h,j,{get:i[j],enumerable:!0});b.exports=((a,b,c)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of f(b))g.call(a,h)||void 0===h||d(a,h,{get:()=>b[h],enumerable:!(c=e(b,h))||c.enumerable});return a})(d({},"__esModule",{value:!0}),h);class k extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class l extends Error{constructor(a){super("Failed to refresh authentication token.",{cause:a}),this.name="RefreshAccessTokenFailedError"}}},719472,(a,b,c)=>{"use strict";var d=Object.defineProperty,e=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,h={},i={processTokenResponse:()=>p,refreshTokenRequest:()=>o};for(var j in i)d(h,j,{get:i[j],enumerable:!0});b.exports=((a,b,c)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of f(b))g.call(a,h)||void 0===h||d(a,h,{get:()=>b[h],enumerable:!(c=e(b,h))||c.enumerable});return a})(d({},"__esModule",{value:!0}),h);var k=a.r(446786);let l=`@vercel/oidc node-${process.version} ${(0,k.platform)()} (${(0,k.arch)()}) ${(0,k.hostname)()}`,m=null;async function n(){if(m)return m;let a=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":l}});if(!a.ok)throw Error("Failed to discover OAuth endpoints");let b=await a.json();if(!b||"string"!=typeof b.token_endpoint)throw Error("Invalid OAuth discovery response");let c=b.token_endpoint;return m=c,c}async function o(a){let b=await n();return await fetch(b,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":l},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...a})})}async function p(a){let b=await a.json();return a.ok?"object"!=typeof b||null===b?[Error("Invalid token response")]:"string"!=typeof b.access_token?[Error("Missing access_token in response")]:"Bearer"!==b.token_type?[Error("Invalid token_type in response")]:"number"!=typeof b.expires_in?[Error("Missing expires_in in response")]:[null,b]:[Error("object"==typeof b&&b&&"error"in b?String(b.error):"Token refresh failed")]}},580949,(a,b,c)=>{"use strict";var d=Object.defineProperty,e=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,h={},i={VercelOidcTokenError:()=>k};for(var j in i)d(h,j,{get:i[j],enumerable:!0});b.exports=((a,b,c)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of f(b))g.call(a,h)||void 0===h||d(a,h,{get:()=>b[h],enumerable:!(c=e(b,h))||c.enumerable});return a})(d({},"__esModule",{value:!0}),h);class k extends Error{constructor(a,b){super(a),this.name="VercelOidcTokenError",this.cause=b}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},50067,(a,b,c)=>{"use strict";var d=Object.create,e=Object.defineProperty,f=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,h=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,j=(a,b,c,d)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of g(b))i.call(a,h)||h===c||e(a,h,{get:()=>b[h],enumerable:!(d=f(b,h))||d.enumerable});return a},k=(a,b,c)=>(c=null!=a?d(h(a)):{},j(!b&&a&&a.__esModule?c:e(c,"default",{value:a,enumerable:!0}),a)),l={},m={findRootDir:()=>s,getUserDataDir:()=>t};for(var n in m)e(l,n,{get:m[n],enumerable:!0});b.exports=j(e({},"__esModule",{value:!0}),l);var o=k(a.r(814747)),p=k(a.r(522734)),q=k(a.r(446786)),r=a.r(580949);function s(){try{let a=process.cwd();for(;a!==o.default.dirname(a);){let b=o.default.join(a,".vercel");if(p.default.existsSync(b))return a;a=o.default.dirname(a)}}catch(a){throw new r.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function t(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(q.default.platform()){case"darwin":return o.default.join(q.default.homedir(),"Library/Application Support");case"linux":return o.default.join(q.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},72918,(a,b,c)=>{"use strict";var d=Object.create,e=Object.defineProperty,f=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,h=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,j=(a,b,c,d)=>{if(b&&"object"==typeof b||"function"==typeof b)for(let h of g(b))i.call(a,h)||h===c||e(a,h,{get:()=>b[h],enumerable:!(d=f(b,h))||d.enumerable});return a},k=(a,b,c)=>(c=null!=a?d(h(a)):{},j(!b&&a&&a.__esModule?c:e(c,"default",{value:a,enumerable:!0}),a)),l={},m={assertVercelOidcTokenResponse:()=>y,findProjectInfo:()=>z,getTokenPayload:()=>C,getVercelDataDir:()=>v,getVercelOidcToken:()=>x,getVercelToken:()=>w,isExpired:()=>D,loadToken:()=>B,saveToken:()=>A};for(var n in m)e(l,n,{get:m[n],enumerable:!0});b.exports=j(e({},"__esModule",{value:!0}),l);var o=k(a.r(814747)),p=k(a.r(522734)),q=a.r(580949),r=a.r(50067),s=a.r(484261),t=a.r(719472),u=a.r(351275);function v(){let a=(0,r.getUserDataDir)();return a?o.join(a,"com.vercel.cli"):null}async function w(a){let b=(0,s.readAuthConfig)();if(!b?.token)throw new u.AccessTokenMissingError;if((0,s.isValidAccessToken)(b,a?.expirationBufferMs))return b.token;if(!b.refreshToken)throw(0,s.writeAuthConfig)({}),new u.RefreshAccessTokenFailedError("No refresh token available");try{let a=await (0,t.refreshTokenRequest)({refresh_token:b.refreshToken}),[c,d]=await (0,t.processTokenResponse)(a);if(c||!d)throw(0,s.writeAuthConfig)({}),new u.RefreshAccessTokenFailedError(c);let e={token:d.access_token,expiresAt:Math.floor(Date.now()/1e3)+d.expires_in};return d.refresh_token&&(e.refreshToken=d.refresh_token),(0,s.writeAuthConfig)(e),e.token}catch(a){if((0,s.writeAuthConfig)({}),a instanceof u.AccessTokenMissingError||a instanceof u.RefreshAccessTokenFailedError)throw a;throw new u.RefreshAccessTokenFailedError(a)}}async function x(a,b,c){let d=`https://api.vercel.com/v1/projects/${b}/token?source=vercel-oidc-refresh${c?`&teamId=${c}`:""}`,e=await fetch(d,{method:"POST",headers:{Authorization:`Bearer ${a}`}});if(!e.ok)throw new q.VercelOidcTokenError(`Failed to refresh OIDC token: ${e.statusText}`);let f=await e.json();return y(f),f}function y(a){if(!a||"object"!=typeof a)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in a)||"string"!=typeof a.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function z(){let a=(0,r.findRootDir)();if(!a)throw new q.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let b=o.join(a,".vercel","project.json");if(!p.existsSync(b))throw new q.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let c=JSON.parse(p.readFileSync(b,"utf8"));if("string"!=typeof c.projectId&&"string"!=typeof c.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:c.projectId,teamId:c.orgId}}function A(a,b){let c=(0,r.getUserDataDir)();if(!c)throw new q.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let d=o.join(c,"com.vercel.token",`${b}.json`),e=JSON.stringify(a);p.mkdirSync(o.dirname(d),{mode:504,recursive:!0}),p.writeFileSync(d,e),p.chmodSync(d,432)}function B(a){let b=(0,r.getUserDataDir)();if(!b)throw new q.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let c=o.join(b,"com.vercel.token",`${a}.json`);if(!p.existsSync(c))return null;let d=JSON.parse(p.readFileSync(c,"utf8"));return y(d),d}function C(a){let b=a.split(".");if(3!==b.length)throw new q.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let c=b[1].replace(/-/g,"+").replace(/_/g,"/"),d=c.padEnd(c.length+(4-c.length%4)%4,"=");return JSON.parse(Buffer.from(d,"base64").toString("utf8"))}function D(a,b=0){return 1e3*a.exp<Date.now()+b}}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__05qiosr._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[70729,a=>{a.v(a=>Promise.resolve().then(()=>a(666680)))},133300,a=>{a.v(a=>Promise.resolve().then(()=>a(203469)))},572457,a=>{a.v(a=>Promise.resolve().then(()=>a(652619)))},276307,a=>{a.v(a=>Promise.resolve().then(()=>a(221214)))},763543,a=>{a.v(a=>Promise.resolve().then(()=>a(674986)))},343064,a=>{a.v(a=>Promise.resolve().then(()=>a(344853)))},756984,a=>a.a(async(b,c)=>{try{var d=a.i(725466),e=b([d]);[d]=e.then?(await e)():e;let h="INTRO_PASSED";async function f(){return await (0,d.readConfig)(h)==="on"}async function g(){await (0,d.writeConfig)(h,"on")}a.s(["hasPassedIntro",0,f,"markIntroPassed",0,g]),c()}catch(a){c(a)}},!1),453556,a=>{a.v(a=>Promise.resolve().then(()=>a(233398)))},394298,a=>{a.v(a=>Promise.resolve().then(()=>a(684321)))},122690,a=>{a.v(a=>Promise.resolve().then(()=>a(821415)))},682672,a=>{a.v(a=>Promise.resolve().then(()=>a(72918)))},966249,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_@vercel_oidc_dist_token_16gdpgb.js"].map(b=>a.l(b))).then(()=>b(860544)))},832030,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_readline_1u65a-m._.js","server/chunks/ssr/node_modules_consola_dist_chunks_prompt_mjs_1j4x-_j._.js"].map(b=>a.l(b))).then(()=>b(322479)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__0y03pu0._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[70729,a=>{a.v(a=>Promise.resolve().then(()=>a(666680)))},748567,a=>a.a(async(b,c)=>{try{var d=a.i(910350);a.i(69999);var e=a.i(451208),f=b([d,e]);[d,e]=f.then?(await f)():f,a.s([]),c()}catch(a){c(a)}},!1),957977,a=>a.a(async(b,c)=>{try{var d=a.i(748567),e=a.i(910350),f=a.i(69999),g=a.i(451208),h=b([d,e,g]);[d,e,g]=h.then?(await h)():h,a.s(["7f2c03ef978ece4af4c45f31f27774a9a769a1bfac",()=>e.markSeenAction,"7f309ae063e87c26a97799f88691408f2f53cf70aa",()=>e.answerThreadAction,"7f329c6ce9546b9bbe43207116dfc1130f75e5a292",()=>f.setSignInBotAction,"7f42e2daa2da92f125dd934414c999ea8cddaf2441",()=>g.revealFileAction,"7f487e023794e32d1f38f84888eee4bedb8ec7669b",()=>e.withdrawStepInAction,"7f56ed84c09474fd0592fe62f3aa4a809ab9b53563",()=>e.cancelThreadAction,"7f6a1f4250ace49f37f97878708026883aabdf97de",()=>e.handFileAction,"7fa7dfd6d414554348a0b2ca6d9b9523082950cc07",()=>e.tellFileThreadAction,"7fb8c7f9db25756a8e9046115c1417c21586b0b359",()=>g.savePageAction,"7fcbd6568a4eb8a342cb55bff2c269c3391c25574f",()=>g.openFileAction,"7ff5c9c6eb174c2cb72ff218342df8a8537032d267",()=>g.giveFilesAction]),c()}catch(a){c(a)}},!1),133300,a=>{a.v(a=>Promise.resolve().then(()=>a(203469)))},572457,a=>{a.v(a=>Promise.resolve().then(()=>a(652619)))},276307,a=>{a.v(a=>Promise.resolve().then(()=>a(221214)))},763543,a=>{a.v(a=>Promise.resolve().then(()=>a(674986)))},343064,a=>{a.v(a=>Promise.resolve().then(()=>a(344853)))},394298,a=>{a.v(a=>Promise.resolve().then(()=>a(684321)))},122690,a=>{a.v(a=>Promise.resolve().then(()=>a(821415)))},682672,a=>{a.v(a=>Promise.resolve().then(()=>a(72918)))},966249,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_@vercel_oidc_dist_token_16gdpgb.js"].map(b=>a.l(b))).then(()=>b(860544)))},832030,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_readline_1u65a-m._.js","server/chunks/ssr/node_modules_consola_dist_chunks_prompt_mjs_1j4x-_j._.js"].map(b=>a.l(b))).then(()=>b(322479)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__0zt_au4._.js.map
|