thursday-agent 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +0 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +0 -6
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/keep-working/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/.next/server/app/api/llm-model/catalog/route.js.nft.json +1 -1
- package/.next/server/app/api/llm-model/credits/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.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.nft.json +1 -1
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/reach/route.js +13 -13
- package/.next/server/app/api/reach/route.js.nft.json +1 -1
- package/.next/server/app/api/routine/route.js.nft.json +1 -1
- package/.next/server/app/api/signins/route.js +1 -1
- package/.next/server/app/api/signins/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/text/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +14 -15
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/files/route.js.nft.json +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 +1 -1
- package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/page/server-reference-manifest.json +56 -56
- package/.next/server/app/page.js +4 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +0 -1
- package/.next/server/chunks/[root-of-the-server]__014ydvq._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0209ah4._.js +7 -5
- package/.next/server/chunks/[root-of-the-server]__04r4h-2._.js +4 -2
- package/.next/server/chunks/[root-of-the-server]__0542v_d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gewdg9._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0mrk2it._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1-swlkw._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__12iddfq._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1ai5lme._.js +3 -3
- package/.next/server/chunks/[root-of-the-server]__1cjxw0-._.js +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1fy2g82._.js → [root-of-the-server]__1k3j52n._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1kyjt5m._.js +3 -3
- package/.next/server/chunks/[root-of-the-server]__1ygplx1._.js +1 -1
- package/.next/server/chunks/_05v8k21._.js +3 -1
- package/.next/server/chunks/_0awtznl._.js +1 -1
- package/.next/server/chunks/_0na2fj1._.js +1 -1
- package/.next/server/chunks/_0x-ej3f._.js +17 -17
- package/.next/server/chunks/_12-amdu._.js +2 -2
- package/.next/server/chunks/_15740dw._.js +60 -0
- package/.next/server/chunks/_1dc_d1q._.js +3 -3
- package/.next/server/chunks/_1i350l5._.js +3 -1
- package/.next/server/chunks/_1jc5g4p._.js +2 -2
- package/.next/server/chunks/_1jn-aep._.js +4 -4
- package/.next/server/chunks/_1m88lkh._.js +11 -11
- package/.next/server/chunks/_1ogqovh._.js +4 -4
- package/.next/server/chunks/_1uuucy-._.js +1 -1
- package/.next/server/chunks/_1zxp-p6._.js +1 -1
- package/.next/server/chunks/features_0rfvely._.js +5 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__1se25x0._.js → [root-of-the-server]__0hpp3nw._.js} +29 -13
- package/.next/server/chunks/ssr/[root-of-the-server]__0m7u9j-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0tzekbl._.js +24 -60
- package/.next/server/chunks/ssr/[root-of-the-server]__1cz2rz5._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0tvavy9._.js → [root-of-the-server]__1iwyp1e._.js} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1w9hqq8._.js +1 -1
- package/.next/server/chunks/ssr/_097-ljd._.js +1 -1
- package/.next/server/chunks/ssr/{_1tmu8z-._.js → _0btzccu._.js} +2 -2
- package/.next/server/chunks/ssr/_0fqhhwi._.js +1 -1
- package/.next/server/chunks/ssr/_0hjzb5o._.js +3 -0
- package/.next/server/chunks/ssr/_0ld9_qq._.js +1 -1
- package/.next/server/chunks/ssr/{_0urj3mc._.js → _0ouzu9f._.js} +2 -2
- package/.next/server/chunks/ssr/{_1-zyvdb._.js → _0u7ko71._.js} +2 -2
- package/.next/server/chunks/ssr/{_0ltz2q5._.js → _0wd_o8-._.js} +2 -2
- package/.next/server/chunks/ssr/_0ya0cb0._.js +3 -0
- package/.next/server/chunks/ssr/_10yyqtk._.js +67 -0
- package/.next/server/chunks/ssr/{_1uy0xom._.js → _12eyown._.js} +3 -3
- package/.next/server/chunks/ssr/_12mijol._.js +11 -11
- package/.next/server/chunks/ssr/_132qkfz._.js +1 -1
- package/.next/server/chunks/ssr/_184327j._.js +1 -1
- package/.next/server/chunks/ssr/{_1z74dmq._.js → _19ps4p3._.js} +7 -7
- package/.next/server/chunks/ssr/{_1flbs77._.js → _1bhy4yg._.js} +2 -2
- package/.next/server/chunks/ssr/_1d423aj._.js +7 -5
- package/.next/server/chunks/ssr/{_1a-nuxx._.js → _1kd843u._.js} +2 -2
- package/.next/server/chunks/ssr/{_0ital-2._.js → _1kq2ye_._.js} +2 -2
- package/.next/server/chunks/ssr/_1mqn9mc._.js +1 -1
- package/.next/server/chunks/ssr/_1neoj22._.js +1 -1
- package/.next/server/chunks/ssr/_1p8xorg._.js +3 -0
- package/.next/server/chunks/ssr/{_1x-kojb._.js → _1q683w8._.js} +3 -3
- package/.next/server/chunks/ssr/_1tawxu2._.js +3 -0
- package/.next/server/chunks/ssr/{_0scf7xy._.js → _1w2oba6._.js} +2 -2
- package/.next/server/chunks/ssr/_1xoch6f._.js +1 -1
- package/.next/server/chunks/ssr/{_0kjj5ts._.js → _1ybo1hd._.js} +3 -3
- package/.next/server/chunks/ssr/features_bot_0s11m4r._.js +3 -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_workspace_00jz2hu._.js +1 -1
- package/.next/server/chunks/ssr/{node_modules_1af3w91._.js → node_modules_00pocul._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0th357h._.js → node_modules_02zt4az._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0jljel9._.js → node_modules_05ojmcl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0wnlddw._.js → node_modules_06i6bli._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_06bb4q8._.js → node_modules_09dj429._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_068ws5v._.js → node_modules_0auzgvx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ogczzz._.js → node_modules_0evjwh1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13kwejm._.js → node_modules_0gmdur8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1s-gb-1._.js → node_modules_0j3te-1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1bucjlk._.js → node_modules_0rbaymq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1wbkzl9._.js → node_modules_0tf8_1e._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_12et8d5._.js → node_modules_0yqy-0b._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1lkix61._.js → node_modules_1-53ebx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_03d0rfz._.js → node_modules_1-y9aho._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0x630an._.js → node_modules_11bltzp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0uyh_vb._.js → node_modules_18jn2qo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0dzm4um._.js → node_modules_1_te3bu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_07rs_p2._.js → node_modules_1c0pg3k._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0sgy-dc._.js → node_modules_1en2jx5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0ubdtk-._.js → node_modules_1p-c8cr._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1z1lrbk._.js → node_modules_1qe-oxg._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_04_sbbc._.js → node_modules_1rjt833._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0yvz9e0._.js → node_modules_1tzw5sn._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1uwg-gz._.js → node_modules_1x6uwvn._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0t_ez6-._.js → node_modules_1zqddke._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_05ybmta._.js → node_modules_211zgim._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0r443fh._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0y51bqj._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_10wnlbk._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1sc114e._.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 +57 -57
- package/.next/static/chunks/{13ixzheqw7o-w.js → 03-724sj0nk_z.js} +2 -2
- package/.next/static/chunks/03bhu4mk8en2q.js +1 -0
- package/.next/static/chunks/{3h2e-xv1zxh_f.js → 04imzjhvzw65d.js} +2 -2
- package/.next/static/chunks/{27tvv1i-smrck.js → 0gljzv9fz1g7d.js} +1 -1
- package/.next/static/chunks/{37j27b3e1gt7r.js → 0h0lythv1ql93.js} +1 -1
- package/.next/static/chunks/{2o4dndk0d68do.js → 0hzbj7f48cmx0.js} +1 -1
- package/.next/static/chunks/0lwunwbl7u7pt.js +1 -0
- package/.next/static/chunks/{0u9ae9k_2g7k3.js → 0r6nwxg4dv83t.js} +1 -1
- package/.next/static/chunks/0rn9nbg6aif9f.js +17 -0
- package/.next/static/chunks/{3bbzsitgiltnt.js → 0x_w4shtvrrfg.js} +1 -1
- package/.next/static/chunks/{2sdwbfs1x5skp.js → 0ympuji_ufypd.js} +1 -1
- package/.next/static/chunks/{3t9huugh-5_ps.js → 0zmrz4zfzm4dt.js} +1 -1
- package/.next/static/chunks/{0qmd8n52hp-6v.js → 11tlxkr7a_rpc.js} +1 -1
- package/.next/static/chunks/{2c64drdevdla3.js → 12scesro428m7.js} +2 -2
- package/.next/static/chunks/16s2fx3890_jd.js +65 -0
- package/.next/static/chunks/{0oyz95sujd2c7.js → 1qzfgplyo18tc.js} +1 -1
- package/.next/static/chunks/{04e-e--5lk26x.js → 1r4zajz14jp9-.js} +1 -1
- package/.next/static/chunks/1s6m4cmbn7htf.js +1 -0
- package/.next/static/chunks/1wl9t1-3i-q8p.css +1 -0
- package/.next/static/chunks/2-asot3p1j3yg.js +1 -0
- package/.next/static/chunks/{0u3ktztrzu1fa.js → 2-jn4xscbm-i2.js} +1 -1
- package/.next/static/chunks/22h9gvclqtx_2.js +1 -0
- package/.next/static/chunks/{337g9g_ux2gj-.js → 26-eblxwnykck.js} +1 -1
- package/.next/static/chunks/{43q9cgbuw8krx.js → 2kzwhbuobpkw3.js} +2 -2
- package/.next/static/chunks/2m6jd3586ijb-.js +1 -0
- package/.next/static/chunks/{0_awn8tucznxc.js → 304q9p54tcgm1.js} +1 -1
- package/.next/static/chunks/{1u5i-jti87jbo.js → 35wdx3wt7cg4a.js} +1 -1
- package/.next/static/chunks/37unh9460im7v.js +18 -0
- package/.next/static/chunks/{01xjer0i_e5z5.js → 39gj5vxz1zpm_.js} +1 -1
- package/.next/static/chunks/{427qsc6kahxyo.js → 39vrqy1r_00jc.js} +1 -1
- package/.next/static/chunks/{245hb85nsy6j4.js → 3dipmu0mptqum.js} +1 -1
- package/.next/static/chunks/3gki-squw28yu.js +1 -0
- package/.next/static/chunks/{3obf9n3cxj99k.js → 3jvldk2wvwbge.js} +1 -1
- package/.next/static/chunks/{38301ji-85i30.js → 3nnzdl_te20hv.js} +1 -1
- package/.next/static/chunks/{2m267diam_vib.js → 3tz4dr0_8pq1-.js} +1 -1
- package/.next/static/chunks/{2gocl3dq0_h1s.js → 3x6pggb-2kyrk.js} +1 -1
- package/.next/static/chunks/{025bmrgeukcb2.js → 4440mws9jz3mt.js} +1 -1
- package/README.md +4 -0
- package/app/api/thursday/tool-call/route.ts +1 -15
- package/components/ui/radio-group.tsx +2 -2
- package/docs/images/demo-still.jpg +0 -0
- package/docs/live-calls.md +19 -11
- package/features/ai/prompts/live.prompt.ts +51 -26
- package/features/ai/prompts/prompt-helper.ts +1 -9
- package/features/ai/prompts/thursday.prompt.ts +8 -2
- package/features/bot/bot.run.ts +9 -3
- package/features/bot/bot.seed.ts +35 -91
- package/features/bot/components/bot-room.tsx +0 -6
- package/features/bot/components/bot-setting.tsx +4 -4
- package/features/bot/components/room-pill.tsx +4 -2
- package/features/bot/seed-bots.ts +2 -2
- package/features/intro/components/intro.tsx +2 -3
- package/features/reach/reach.ts +2 -2
- package/features/routine/components/routine-setting.tsx +1 -1
- package/features/signins/signins.query.ts +66 -1
- package/features/thursday/components/side-captions.tsx +31 -8
- package/features/thursday/components/thursday-setting.tsx +5 -5
- package/features/thursday/components/thursday.tsx +97 -39
- package/features/thursday/components/write-line.tsx +28 -17
- package/features/thursday/thursday.action.ts +4 -20
- package/features/thursday/thursday.schema.ts +0 -9
- package/features/thursday/thursday.store.ts +11 -15
- package/features/thursday/thursday.text.ts +10 -8
- package/features/thursday/tool-line.ts +17 -6
- package/features/thursday/use-call-ring.ts +1 -5
- package/features/thursday/use-text-call.ts +37 -21
- package/features/thursday/use-thursday.ts +14 -44
- package/features/workspace/workspace.ts +4 -2
- package/guide/bots.md +13 -3
- package/guide/calls.md +7 -5
- package/knip.json +1 -0
- package/lib/live/live.session.ts +0 -39
- package/package.json +1 -1
- package/scripts/live-session.test.mts +19 -26
- package/seed-skills/analyst/README.md +18 -0
- package/seed-skills/analyst/data-report/SKILL.md +60 -0
- package/seed-skills/analyst/data-report/references/brief.md +31 -0
- package/seed-skills/analyst/data-report/references/company.md +41 -0
- package/seed-skills/analyst/data-report/references/comparison.md +42 -0
- package/seed-skills/analyst/data-report/references/decision.md +28 -0
- package/seed-skills/analyst/data-report/references/market-size.md +49 -0
- package/seed-skills/analyst/data-report/references/price-check.md +33 -0
- package/seed-skills/analyst/data-report/references/sources.md +51 -0
- package/seed-skills/analyst/data-report/references/trend.md +39 -0
- package/seed-skills/analyst/data-report/scripts/fetch.mjs +521 -0
- package/seed-skills/insta/instagram/SKILL.md +36 -0
- package/seed-skills/insta/instagram/references/dm.md +49 -0
- package/seed-skills/insta/instagram/references/post.md +74 -0
- package/seed-skills/insta/instagram/scripts/compose.mjs +333 -0
- package/seed-skills/insta/instagram/scripts/inbox.mjs +163 -0
- package/seed-skills/insta/instagram/scripts/lib.mjs +33 -0
- package/seed-skills/insta/instagram/scripts/media.mjs +104 -0
- package/seed-skills/insta/instagram/scripts/profile.mjs +143 -0
- package/seed-skills/insta/instagram/scripts/read.mjs +244 -0
- package/seed-skills/insta/instagram/scripts/search.mjs +137 -0
- package/seed-skills/insta/instagram/scripts/selectors.mjs +56 -0
- package/seed-skills/insta/instagram/scripts/sheet.mjs +43 -0
- package/seed-skills/insta/instagram/templates/carousel.html +62 -0
- package/seed-skills/marketer/README.md +6 -4
- package/seed-skills/marketer/copywriting/SKILL.md +1 -1
- package/seed-skills/marketer/emails/SKILL.md +1 -1
- package/seed-skills/marketer/launch/SKILL.md +1 -1
- package/seed-skills/marketer/product-marketing/SKILL.md +5 -5
- package/seed-skills/marketer/seo-audit/SKILL.md +1 -1
- package/seed-skills/marketer/social/SKILL.md +1 -1
- package/seed-skills/tutor/picture-book/SKILL.md +16 -0
- package/seed-skills/tutor/picture-book/book/book.css +181 -0
- package/seed-skills/tutor/picture-book/book/book.html +33 -0
- package/seed-skills/tutor/picture-book/book/book.js +60 -0
- package/seed-skills/tutor/picture-book/references/picture-book.md +104 -0
- package/seed-skills/tutor/picture-book/scripts/book-video.mjs +177 -0
- package/seed-skills/tutor/picture-book/scripts/book.mjs +98 -0
- package/skills/browser/SKILL.md +13 -4
- package/skills/browser/references/scripts.md +55 -0
- package/skills/browser/scripts/image-size.mjs +30 -0
- package/skills/browser/scripts/render.mjs +126 -0
- package/skills/browser/scripts/session.mjs +105 -0
- package/skills/browser/scripts/sheet.mjs +97 -0
- package/skills/browser/scripts/webimage.mjs +105 -0
- package/skills/interactive-page/SKILL.md +4 -3
- package/skills/interactive-page/scripts/chart.mjs +679 -0
- package/skills/interactive-page/scripts/page.mjs +1 -0
- package/.next/server/app/api/probe/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/probe/route/build-manifest.json +0 -12
- package/.next/server/app/api/probe/route/server-reference-manifest.json +0 -4
- package/.next/server/app/api/probe/route.js +0 -10
- package/.next/server/app/api/probe/route.js.map +0 -5
- package/.next/server/app/api/probe/route.js.nft.json +0 -1
- package/.next/server/app/api/probe/route_client-reference-manifest.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__012s2o8._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0z0hc1f._.js +0 -4
- package/.next/server/chunks/[root-of-the-server]__1v7-zke._.js +0 -5
- package/.next/server/chunks/_0whlpyi._.js +0 -4
- package/.next/server/chunks/_next-internal_server_app_api_probe_route_actions_0cqd30j.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0oo-wlv._.js +0 -103
- package/.next/server/chunks/ssr/[root-of-the-server]__0zuns7e._.js +0 -3
- package/.next/server/chunks/ssr/_070nv1_._.js +0 -3
- package/.next/server/chunks/ssr/_0dshsh4._.js +0 -3
- package/.next/server/chunks/ssr/_0l_mcfz._.js +0 -3
- package/.next/server/chunks/ssr/_0u5xv6g._.js +0 -3
- package/.next/server/chunks/ssr/_157yfrk._.js +0 -3
- package/.next/server/chunks/ssr/features_bot_1nr94ks._.js +0 -3
- package/.next/static/chunks/06nt9tatr-dug.js +0 -1
- package/.next/static/chunks/0ge-hx0ed83a1.js +0 -1
- package/.next/static/chunks/0pda_vf-abwvx.js +0 -1
- package/.next/static/chunks/0rowp9rx3qbxu.js +0 -18
- package/.next/static/chunks/1grkt5gr8pbg1.js +0 -17
- package/.next/static/chunks/1yugpvvi8qrbu.js +0 -101
- package/.next/static/chunks/27lkanxvtdn09.js +0 -1
- package/.next/static/chunks/3fec-aeteddr-.js +0 -1
- package/.next/static/chunks/3go3hwp1z2_h2.css +0 -1
- package/.next/static/chunks/3h2bun3hcggg8.js +0 -1
- package/.next/static/chunks/3j1y335o95mj7.js +0 -1
- package/lib/probe.server.ts +0 -17
- package/lib/probe.ts +0 -55
- /package/.next/static/{u8kJqShUAa49vY7BxAWsw → En1vUPazxcYjPjnnahcN5}/_buildManifest.js +0 -0
- /package/.next/static/{u8kJqShUAa49vY7BxAWsw → En1vUPazxcYjPjnnahcN5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{u8kJqShUAa49vY7BxAWsw → En1vUPazxcYjPjnnahcN5}/_ssgManifest.js +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module.exports=[380690,e=>{"use strict";let t,a,r,n,l,o;var i,s=e.i(687388),c=e.i(640911);let u={threads:!0,routines:!0,memory:!0,mcp:!0,config:!0,reach:!0,signins:!0},d=globalThis,m=d.__appEvents??=(t=new Set,{emit(e){for(let a of[...t])try{a(e)}catch(e){console.error("event listener failed",e)}},subscribe:e=>(t.add(e),()=>{t.delete(e)})}),p=d.__presence??=(i=s.BROWSER_GONE_MS,a=!1,r=null,n=new Set,l=new Set,o=e=>{for(let t of[...e])try{t()}catch(e){console.error("presence listener failed",e)}},{get watching(){return a},track(e){if(e>0){r&&clearTimeout(r),r=null,a||(a=!0,o(l));return}!r&&a&&(r=setTimeout(()=>{r=null,a=!1,o(n)},i))},onGone:e=>(n.add(e),()=>n.delete(e)),onBack:e=>(l.add(e),()=>l.delete(e))}),f=d.__appEventStream??=function(e,t={}){let a=new TextEncoder,r=t.heartbeatMs??2e4,n=0;return{respond:(l,o)=>{let i=()=>{};return new Response(new ReadableStream({async start(s){let u=!1,d=new Map,m=[],p=e=>{if(!u)try{s.enqueue(a.encode(e))}catch{i()}},f=e=>p(`data: ${JSON.stringify(e)}
|
|
2
2
|
|
|
3
|
-
`),b=e=>{let a=t.coalesce?.keyOf(e)??null;if(null===a)return f(e);let r=d.get(a);r&&clearTimeout(r),d.set(a,setTimeout(()=>{d.delete(a),f(e)},t.coalesce?.ms))},h=e.subscribe(e=>m?m.push(e):b(e)),T=setInterval(()=>p(": ping\n\n"),r);n+=1,t.onWatchers?.(n),i=()=>{if(!u){for(let e of(u=!0,n-=1,t.onWatchers?.(n),h(),clearInterval(T),d.values()))clearTimeout(e);try{s.close()}catch{}}},l.addEventListener("abort",i);try{for(let e of await o?.()??[])f(e)}catch(e){c.logger.error("event stream opening failed",e),i();return}let g=m;for(let e of(m=null,g))b(e)},cancel(){i()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return n}}}(m,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:p.track}),b=d.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,b,"appEventStream",0,f,"appEvents",0,m,"presence",0,p],380690)},393189,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(687388),n=e.i(786025);let l=e=>`${(0,n.botFolder)(e)}/memory`;async function o(e,t=r.BOT_MEMORY_LIMITS.files){let s=l(e),c=(0,a.join)(n.WORKSPACE,s),u=(await i(c)).sort((e,t)=>t.info.mtimeMs-e.info.mtimeMs),m=await Promise.all(u.slice(0,t).map(async({name:e,info:t})=>({file:e,path:`${s}/${e}`,line:await d((0,a.join)(c,e)),at:new Date(t.mtimeMs),bytes:t.size})));return{folder:s,entries:m,total:u.length}}async function i(e){let r=await (0,t.readdir)(e).catch(()=>[]);return(await Promise.all(r.filter(e=>!e.startsWith(".")).map(async r=>{let n=await (0,t.stat)((0,a.join)(e,r)).catch(()=>null);return n?.isFile()?{name:r,info:n}:null}))).filter(e=>null!==e)}async function s(e){let o=(0,a.join)(n.WORKSPACE,l(e)),s=new Map;return await Promise.all((await i(o)).map(async({name:e,info:n})=>{let l=n.size>4*r.BOT_MEMORY_LIMITS.chars?null:await (0,t.readFile)((0,a.join)(o,e),"utf8").catch(()=>null);s.set(e,{text:null!==l&&u(l)<=r.BOT_MEMORY_LIMITS.chars?l:null,size:n.size,mtimeMs:n.mtimeMs,atime:n.atime,mtime:n.mtime})})),s}async function c(e,o){let s=l(e),c=(0,a.join)(n.WORKSPACE,s),{files:d,chars:m}=r.BOT_MEMORY_LIMITS,p=[],f=[],b=0;for(let{name:e,info:r}of(await i(c))){b+=1;let n=o.get(e);if(n&&n.size===r.size&&n.mtimeMs===r.mtimeMs)continue;let l=(0,a.join)(c,e),i=u(await (0,t.readFile)(l,"utf8").catch(()=>""));if(i<=m){n||f.push(e);continue}let d=`${i.toLocaleString("en-US")} characters, past the ${m.toLocaleString("en-US")} a memory file holds`;n?null!==n.text?(await (0,t.writeFile)(l,n.text),await (0,t.utimes)(l,n.atime,n.mtime),p.push(`Not kept: \`${s}/${e}\` came to ${d}, so it is back as it was. Write it again shorter.`)):p.push(`\`${s}/${e}\` is ${d}. Shorten it.`):(await (0,t.rm)(l,{force:!0}),b-=1,p.push(`Not kept: \`${s}/${e}\` came to ${d}, so it was removed. Write it again shorter.`))}if(b>d&&f.length){await Promise.all(f.map(e=>(0,t.rm)((0,a.join)(c,e),{force:!0})));let e=f.map(e=>`\`${s}/${e}\``).join(", ");p.push(`Not kept: your memory holds ${d} files at most and this made ${b}, so ${e} ${1===f.length?"was":"were"} removed. Delete or merge files no longer worth keeping, then write it again.`)}return p.length?p.join("\n"):null}let u=e=>[...e.trim()].length;async function d(e){let a=await (0,t.open)(e,"r").catch(()=>null);if(!a)return"";try{let e=Buffer.alloc(1024),{bytesRead:t}=await a.read(e,0,1024,0),r=e.toString("utf8",0,t).split("\n").map(e=>e.trim()).filter(Boolean);if("---"===r[0]){let e=r.find(e=>e.startsWith("description:"));if(e)return e.slice(12).trim().replace(/^["']|["']$/g,"");let t=r.indexOf("---",1);return t>0?(r[t+1]??"").replace(/^#+\s*/,""):""}return(r[0]??"").replace(/^#+\s*/,"")}finally{await a.close()}}e.s(["botMemoryFolder",0,l,"holdBotMemory",0,s,"keepBotMemory",0,c,"listBotMemory",0,o])},148831,e=>e.a(async(t,a)=>{try{var r=e.i(875225),n=e.i(260338),l=e.i(518899),o=e.i(380690),i=e.i(528790),s=e.i(613240),c=e.i(441963),u=t([i]);function d(e){return(0,c.isRemoteConfig)(e)?{url:e.url}:{command:e.command,args:e.args}}async function m(){return(await i.database.select({name:s.mcpServerTable.name,config:s.mcpServerTable.config,lastError:s.mcpServerTable.lastError,toolCount:(0,n.count)(s.mcpToolTable.id)}).from(s.mcpServerTable).leftJoin(s.mcpToolTable,(0,r.eq)(s.mcpToolTable.serverName,s.mcpServerTable.name)).groupBy(s.mcpServerTable.name)).map(e=>({...e,config:d(e.config)}))}async function p(e){let[t]=await i.database.select({name:s.mcpServerTable.name,config:s.mcpServerTable.config,lastError:s.mcpServerTable.lastError,toolsSyncedAt:s.mcpServerTable.toolsSyncedAt}).from(s.mcpServerTable).where((0,r.eq)(s.mcpServerTable.name,e));return t?{...t,config:d(t.config),tools:await f(e)}:null}async function f(e){return i.database.select({id:s.mcpToolTable.id,name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema,outputSchema:s.mcpToolTable.outputSchema}).from(s.mcpToolTable).where((0,r.eq)(s.mcpToolTable.serverName,e)).orderBy(s.mcpToolTable.name)}async function b(e){let[t]=await i.database.select().from(s.mcpServerTable).where((0,r.eq)(s.mcpServerTable.name,e));return t??null}[i]=u.then?(await u)():u;let v=()=>o.appEvents.emit({type:"mcp"});async function h(e,t){await i.database.transaction(async a=>{t.length&&await a.insert(s.mcpToolTable).values(t.map(t=>({...t,serverName:e}))).onConflictDoUpdate({target:[s.mcpToolTable.serverName,s.mcpToolTable.name],set:{description:T(s.mcpToolTable.description),inputSchema:T(s.mcpToolTable.inputSchema),outputSchema:T(s.mcpToolTable.outputSchema)}}),await a.delete(s.mcpToolTable).where(t.length?(0,r.and)((0,r.eq)(s.mcpToolTable.serverName,e),(0,r.notInArray)(s.mcpToolTable.name,t.map(e=>e.name))):(0,r.eq)(s.mcpToolTable.serverName,e)),await a.update(s.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,r.eq)(s.mcpServerTable.name,e))}),v()}function T(e){return l.sql.raw(`excluded."${e.name}"`)}async function g(e,t){await i.database.update(s.mcpServerTable).set({lastError:t}).where((0,r.eq)(s.mcpServerTable.name,e)),v()}async function y(e,t){await i.database.update(s.mcpServerTable).set({oauth:t}).where((0,r.eq)(s.mcpServerTable.name,e)),v()}async function w(e){let[t]=await i.database.select().from(s.mcpServerTable).where(l.sql`json_extract(${s.mcpServerTable.oauth}, '$.state') = ${e}`);return t??null}e.s(["findAllServers",0,m,"findAllTools",0,function(){return i.database.select({id:s.mcpToolTable.id,name:s.mcpToolTable.name,serverName:s.mcpToolTable.serverName,description:s.mcpToolTable.description}).from(s.mcpToolTable).orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"findPinnedTools",0,function(e){return i.database.select({server:s.mcpToolTable.serverName,name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema}).from(s.botMcpToolTable).innerJoin(s.mcpToolTable,(0,r.eq)(s.botMcpToolTable.toolId,s.mcpToolTable.id)).where((0,r.eq)(s.botMcpToolTable.botName,e)).orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"findServer",0,b,"findServerByOAuthState",0,w,"findServerDetail",0,p,"findToolSchemas",0,function(e,t){return t.length?i.database.select({name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema}).from(s.mcpToolTable).where((0,r.and)((0,r.eq)(s.mcpToolTable.serverName,e),(0,r.inArray)(s.mcpToolTable.name,t))).orderBy(s.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return i.database.select({name:s.mcpServerTable.name}).from(s.mcpServerTable).orderBy(s.mcpServerTable.name)},"listToolNames",0,function(e){let t=i.database.select({server:s.mcpToolTable.serverName,name:s.mcpToolTable.name}).from(s.mcpToolTable);return e?t.where((0,r.eq)(s.mcpToolTable.serverName,e)).orderBy(s.mcpToolTable.name):t.orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"saveConnectionError",0,g,"saveOAuthData",0,y,"syncServerTools",0,h]),a()}catch(e){a(e)}},!1),441963,e=>{"use strict";var t=e.i(469719),a=e.i(704161);let r=t.z.object({url:t.z.url(),headers:t.z.record(t.z.string(),t.z.string()).optional(),oauthClient:t.z.object({clientId:t.z.string().min(1),clientSecret:t.z.string().optional()}).optional()}),n=t.z.object({command:t.z.string().min(1),args:t.z.array(t.z.string()).optional(),env:t.z.record(t.z.string(),t.z.string()).optional()}),l=t.z.union([r,n]),o=t.z.object({name:t.z.string(),description:t.z.string().optional(),inputSchema:t.z.looseObject({}).optional(),outputSchema:t.z.looseObject({}).optional()});t.z.object({clientInformation:t.z.looseObject({}).optional(),tokens:t.z.looseObject({}).optional(),authorizationServer:t.z.looseObject({}).optional(),codeVerifier:t.z.string().optional(),state:t.z.string().optional()});let i=t.z.object({name:t.z.string().min(1).max(40),config:l,toolCount:t.z.number().int(),lastError:t.z.string().nullish()}),s=o.extend({id:t.z.number().int(),description:t.z.string().nullish()});i.omit({toolCount:!0}).extend({tools:s.array().default([]),toolsSyncedAt:a.DateLikeSchema}),t.z.object({name:t.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:l}),t.z.union([t.z.object({mcpServers:t.z.record(t.z.string(),l)}),t.z.record(t.z.string(),l)]),e.s(["isRemoteConfig",0,function(e){return"url"in e}])},963219,e=>e.a(async(t,a)=>{try{var r=e.i(260338),n=e.i(349129),l=e.i(875225),o=e.i(380690),i=e.i(687388),s=e.i(528790),c=e.i(613240),u=e.i(265143),d=e.i(53748),m=e.i(473139),p=t([s,u]);[s,u]=p.then?(await p)():p;let S=()=>o.appEvents.emit({type:"routines"});async function f(e,t){return s.database.select({id:c.threadTable.id,status:c.threadTable.status,outcome:c.threadTable.outcome,updatedAt:c.threadTable.updatedAt}).from(c.threadTable).where((0,l.eq)(c.threadTable.routineId,e)).orderBy((0,n.desc)(c.threadTable.createdAt)).limit(t)}let O=async e=>{let{createdAt:t,...a}=e;return{...a,runs:await f(e.id,i.ROUTINE.runsShown)}};async function b(){let e=await s.database.select().from(c.routineTable).orderBy(c.routineTable.createdAt);return Promise.all(e.map(O))}async function h(e){let[t]=await s.database.select().from(c.routineTable).where((0,l.eq)(c.routineTable.id,e));return t?O(t):null}async function T(e){let t=await h(e.trim());if(t)return t;let a=e.trim().toLowerCase(),r=(await b()).filter(e=>e.label.toLowerCase()===a);return 1===r.length?r[0]:null}async function g(e){let t=await (0,u.findJobBot)(e);return(!t||t.disabled)&&(0,d.publicError)("Choose an enabled bot."),t.name}function y(e,t){t&&"once"===e.kind&&(0,m.momentOf)(e.at)<=new Date&&(0,d.publicError)("That time has passed. Pick a later one.")}async function w(e){let[{total:t}]=await s.database.select({total:(0,r.count)()}).from(c.routineTable);t>=i.ROUTINE.max&&(0,d.publicError)(`There are already ${i.ROUTINE.max} routines. Delete one to make another.`),y(e.schedule,!0);let[a]=await s.database.insert(c.routineTable).values({id:crypto.randomUUID(),...e,bot:await g(e.bot),nextRunAt:(0,m.nextRun)(e.schedule,new Date)}).returning();return S(),O(a)}async function v(e,t){let[a]=await s.database.select().from(c.routineTable).where((0,l.eq)(c.routineTable.id,e));if(!a)return null;let r=t.schedule??a.schedule,n=!!t.schedule||t.enabled&&!a.enabled;n&&y(r,t.enabled??a.enabled);let[o]=await s.database.update(c.routineTable).set({...t,...t.bot?{bot:await g(t.bot)}:{},...n?{nextRunAt:(0,m.nextRun)(r,new Date)}:{}}).where((0,l.eq)(c.routineTable.id,e)).returning();return S(),O(o)}async function k(e){let t=await s.database.delete(c.routineTable).where((0,l.eq)(c.routineTable.id,e)).returning({id:c.routineTable.id});return t.length&&S(),t.length>0}e.s(["createRoutine",0,w,"deleteRoutine",0,k,"listRoutines",0,b,"resolveRoutine",0,T,"updateRoutine",0,v]),a()}catch(e){a(e)}},!1),473139,e=>{"use strict";var t=e.i(105249),a=e.i(687388),r=e.i(704161);let n=t.default.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"A time is HH:MM, 00:00 to 23:59");function l(e){let[t,a]=e.split(" "),[r,n,l]=t.split("-").map(Number),[o,i]=a.split(":").map(Number);return new Date(r,n-1,l,o,i)}let o=/^\d{4}-\d\d-\d\d ([01]\d|2[0-3]):[0-5]\d$/,i=t.default.string().regex(o,'A moment is "YYYY-MM-DD HH:MM"').refine(e=>{if(!o.test(e))return!0;let t=l(e);return t.getMonth()===Number(e.slice(5,7))-1&&t.getDate()===Number(e.slice(8,10))},"There is no such day"),s=t.default.discriminatedUnion("kind",[t.default.object({kind:t.default.literal("once"),at:i}),t.default.object({kind:t.default.literal("daily"),time:n,days:t.default.array(t.default.number().int().min(1).max(7)).min(1,"Pick at least one day").transform(e=>[...new Set(e)].sort((e,t)=>e-t))}),t.default.object({kind:t.default.literal("every"),hours:t.default.number().int().min(a.ROUTINE.minHours,`No more often than every ${a.ROUTINE.minHours}h`).max(168)})]),c=t.default.object({bot:t.default.string().trim().min(1,"Pick a bot"),label:t.default.string().trim().min(1,"Give it a name").max(80),request:t.default.string().trim().min(1,"Say what it should do"),schedule:s}),u=t.default.object({id:t.default.string(),status:t.default.enum(["running","waiting","done","cancelled"]),outcome:t.default.string().nullable(),updatedAt:r.DateLikeSchema});c.extend({id:t.default.string(),enabled:t.default.boolean(),nextRunAt:r.DateLikeSchema,runs:t.default.array(u)});let d=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];e.s(["RoutineInputSchema",0,c,"RoutineScheduleSchema",0,s,"momentOf",0,l,"nextRun",0,function(e,t){if("once"===e.kind)return l(e.at);if("every"===e.kind)return new Date(t.getTime()+36e5*e.hours);let[a,r]=e.time.split(":").map(Number);for(let n=0;n<=7;n++){let l=new Date(t);l.setDate(l.getDate()+n),l.setHours(a,r,0,0);let o=0===l.getDay()?7:l.getDay();if(l>t&&e.days.includes(o))return l}return new Date(t.getTime()+864e5)},"scheduleText",0,function(e){if("once"===e.kind){let[t,a]=e.at.split(" "),[,r,n]=t.split("-").map(Number);return`Once \xb7 ${m[r-1]} ${n} ${a}`}if("every"===e.kind)return 1===e.hours?"Every hour":`Every ${e.hours} hours`;let{days:t,time:a}=e;if(7===t.length)return`Daily ${a}`;if(1===t.length)return`${d[t[0]-1]} ${a}`;let r=t.every((e,a)=>0===a||e===t[a-1]+1)?`${d[t[0]-1]}–${d[t.at(-1)-1]}`:t.map(e=>d[e-1]).join(" ");return`Daily ${a} \xb7 ${r}`}])},527608,824664,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(380690),n=e.i(687388);e.i(786025),e.i(640911);let l=e=>e.trim().toLowerCase().replace(/^[a-z]+:\/\//,"").replace(/^www\./,"").replace(/[/?#].*$/,"");e.s(["siteOf",0,l],824664);let o=(0,a.join)(n.DATA_DIR,n.PATHS.signIns),i=e=>(0,a.join)(o,`${encodeURIComponent(l(e))}.json`);async function s(e){try{return JSON.parse(await (0,t.readFile)(i(e),"utf8"))}catch{return null}}async function c(e){await (0,t.mkdir)(o,{recursive:!0}),await (0,t.writeFile)(i(e.site),JSON.stringify(e),{mode:384}),r.appEvents.emit({type:"signins"})}async function u(){let e=await (0,t.readdir)(o).catch(()=>[]);return(await Promise.all(e.filter(e=>e.endsWith(".json")).map(e=>s(decodeURIComponent(e.slice(0,-5)))))).flatMap(e=>e?[(({state:e,...t})=>t)(e)]:[]).sort((e,t)=>e.site.localeCompare(t.site))}async function d(e){let t=l(e.site),a=await s(t),r={site:t,account:e.account.trim()||t,bots:[...new Set([...a?.bots??[],e.bot])],asking:(a?.asking??[]).filter(t=>t!==e.bot),keptAt:new Date().toISOString(),usedAt:a?.usedAt??null,state:e.state};return await c(r),(({state:e,...t})=>t)(r)}async function m(e,t){let a=await s(e);if(!a)return{kind:"none",kept:(await u()).map(e=>e.site)};if(!a.bots.includes(t))return a.asking.includes(t)||await c({...a,asking:[...a.asking,t]}),{kind:"ask",signIn:(({state:e,...t})=>t)(a)};let r={...a,usedAt:new Date().toISOString()};return await c(r),{kind:"state",signIn:(({state:e,...t})=>t)(r),state:a.state}}e.s(["borrowSignIn",0,m,"keepSignIn",0,d,"listSignIns",0,u],527608)},22676,e=>e.a(async(t,a)=>{try{var r=e.i(349129),n=e.i(875225),l=e.i(518899),o=e.i(687388),i=e.i(528790),s=e.i(613240),c=e.i(378884),u=e.i(340698),d=e.i(134344),m=t([i,c,u]);async function p(){return(0,d.isSkillsOn)(await (0,u.readConfig)(d.THURSDAY_KEYS.skills))}async function f(e,t){for(let a of t)await i.database.insert(s.callMessageTable).values({callId:e,...a,fragments:a.fragments??null}).onConflictDoUpdate({target:[s.callMessageTable.callId,s.callMessageTable.id],set:{text:a.text,role:a.role,tool:a.tool??null,fragments:a.fragments??null}})}async function b(e){let[t]=await i.database.select({seq:l.sql`max(${s.callMessageTable.seq})`}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e));return t?.seq==null?0:Number(t.seq)+1}async function h(e,t){await i.database.insert(s.callThoughtTable).values({callId:e,...t}).onConflictDoNothing()}async function T(e){let t=await i.database.select({callId:s.callMessageTable.callId,startedAt:s.callTable.startedAt,role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text,seq:s.callMessageTable.seq}).from(s.callMessageTable).innerJoin(s.callTable,(0,n.eq)(s.callMessageTable.callId,s.callTable.id)).orderBy((0,r.desc)(s.callTable.startedAt),(0,r.desc)(s.callMessageTable.seq)).limit(e),a=new Map;for(let e of t){let t=a.get(e.callId)??{callId:e.callId,startedAt:e.startedAt,turns:[]};t.turns.push({role:e.role,tool:e.tool,text:e.text,seq:e.seq}),a.set(e.callId,t)}return[...a.values()].reverse().map(e=>({...e,turns:e.turns.reverse()}))}async function g(e,t,a){let[o]=await i.database.select({startedAt:s.callTable.startedAt}).from(s.callTable).where((0,n.eq)(s.callTable.id,e));if(!o)return null;let[c]=await i.database.select({total:l.sql`count(*)`}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e)),u=await i.database.select({role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e)).orderBy((0,r.asc)(s.callMessageTable.seq)).limit(a).offset((t-1)*a);return{startedAt:o.startedAt,total:Number(c?.total??0),turns:u}}async function y(){return(await i.database.select({id:s.callTable.id}).from(s.callTable).where((0,n.isNull)(s.callTable.endedAt)).limit(1)).length>0}async function w(e){let t=e.limit??o.CALL_HISTORY_PAGE,a=await i.database.select({id:s.callTable.id,provider:s.callTable.provider,model:s.callTable.model,backendModel:s.callTable.backendModel,startedAt:s.callTable.startedAt,endedAt:s.callTable.endedAt,endedReason:s.callTable.endedReason,seconds:s.callTable.seconds}).from(s.callTable).innerJoin(s.callMessageTable,(0,n.eq)(s.callMessageTable.callId,s.callTable.id)).where(e.before?(0,n.lt)(s.callTable.startedAt,e.before):void 0).groupBy(s.callTable.id).orderBy((0,r.desc)(s.callTable.startedAt)).limit(t);if(0===a.length)return[];let l=await i.database.select({callId:s.callMessageTable.callId,id:s.callMessageTable.id,role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text,seq:s.callMessageTable.seq,fragments:s.callMessageTable.fragments,at:s.callMessageTable.at}).from(s.callMessageTable).where((0,n.inArray)(s.callMessageTable.callId,a.map(e=>e.id))).orderBy((0,r.asc)(s.callMessageTable.callId),(0,r.asc)(s.callMessageTable.seq)),u=new Map;for(let e of l){let{callId:t,...a}=e,r=u.get(t);r?r.push(a):u.set(t,[a])}let d=await (0,c.listCallJobs)(a.map(e=>e.id));return a.map(e=>({...e,turns:u.get(e.id)??[],jobs:d.filter(t=>t.callId===e.id).map(e=>({id:e.id,label:e.label,status:e.status,outcome:e.outcome}))}))}[i,c,u]=m.then?(await m)():m,e.s(["isAnyCallLive",0,y,"listCallHistory",0,w,"listRecentTurns",0,T,"nextTurnSeq",0,b,"readCallConversation",0,g,"readCallSkillsOn",0,p,"saveThought",0,h,"saveTurns",0,f]),a()}catch(e){a(e)}},!1),134344,e=>{"use strict";var t=e.i(105249),a=e.i(687388),r=e.i(911757),n=e.i(264079),l=e.i(904309);let o=r.LiveSettingsSchema.extend({locale:t.default.string().max(35).nullish()}),i=[{id:"chatgpt",...n.TEXT_MODEL_PROVIDERS.chatgpt},{id:"openai",...n.TEXT_MODEL_PROVIDERS.openai}];t.default.object({charset:t.default.enum(["ascii","emoji","emojiOnly"]).default(a.ASCII_FACE.charset),fontSize:t.default.number().min(a.ASCII_FACE.fontSize.min).max(a.ASCII_FACE.fontSize.max).default(a.ASCII_FACE.fontSize.default),density:t.default.number().min(a.ASCII_FACE.density.min).max(a.ASCII_FACE.density.max).default(a.ASCII_FACE.density.default)}).parse({});t.default.object({enabled:t.default.boolean(),phrase:t.default.string().trim().min(3).max(32)}),t.default.object({enabled:t.default.boolean(),combo:t.default.string().trim().min(1).max(64)}),t.default.enum(["off","waiting","any"]),t.default.enum(["center","sides"]),t.default.object({id:t.default.string().min(1),role:t.default.enum(["user","assistant","tool"]),tool:t.default.string().nullish(),text:t.default.string(),seq:t.default.number().int().min(0),fragments:t.default.array(l.LiveFragmentSchema).nullish()}),t.default.object({id:t.default.string().min(1),text:t.default.string(),seq:t.default.number().int().min(0)}),e.s(["TEXT_CALL_PROVIDERS",0,i,"THURSDAY_KEYS",0,{skills:"THURSDAY_SKILLS"},"ThursdaySettingsSchema",0,o,"isSkillsOn",0,e=>e?.trim()==="on","textCallRunsOn",0,e=>i.find(t=>e(t.apiKeyName))?.id??null],134344)},629668,175936,e=>{"use strict";let t=e=>e.split("/").map(encodeURIComponent).join("/"),a={memory:"/api/memory",memoryPage:e=>({url:"/api/memory",query:{offset:e||null}}),notePath:e=>({url:"/api/memory",query:{path:e}}),mcp:"/api/mcp",mcpServer:e=>({url:"/api/mcp",pathVariable:[e]}),mcpTools:"/api/mcp/tools",skills:"/api/skills",skillNode:(e,t,a)=>({url:"/api/skills",pathVariable:[e,t],query:{path:a}}),bot:"/api/bot",botMemory:"/api/bot/memory",botKeepWorking:"/api/bot/keep-working",botMemoryFiles:e=>({url:"/api/bot/memory/files",query:{bot:e}}),routines:"/api/routine",threads:"/api/bot/thread",threadHistory:e=>({url:"/api/bot/thread",query:{history:1,before:e}}),thread:e=>({url:"/api/bot/thread",query:{id:e}}),toolResult:(e,t)=>({url:"/api/bot/thread",pathVariable:[e],query:{call:t}}),workspace:"/api/workspace",workspaceFolder:(e,t)=>({url:"/api/workspace",query:{path:e||null,rows:t}}),workspaceFiles:e=>({url:"/api/workspace/files",query:{paths:JSON.stringify(e)}}),artifacts:"/api/artifact",artifactShelf:e=>({url:"/api/artifact",query:{rows:e}}),artifactSet:(e,t)=>({url:"/api/artifact",query:{set:e,rows:t}}),file:e=>`/api/file/${t(e)}`,favicon:e=>`/api/favicon/${encodeURIComponent(e)}`,fileView:e=>`/artifact/${t(e)}`,events:"/api/events",config:"/api/config",callHistory:e=>({url:"/api/thursday/call",query:{before:e}}),callSkills:"/api/thursday/skills",toolCall:"/api/thursday/tool-call",signIns:"/api/signins",reach:"/api/reach",textCall:"/api/thursday/text",memoryEdit:"/api/memory/edit",llmModel:"/api/llm-model",modelCatalog:"/api/llm-model/catalog",gatewayCredits:"/api/llm-model/credits",subscriptionUsage:"/api/llm-model/subscription"};e.s(["decodePath",0,e=>e.join("/"),"queryKey",0,a],175936);var r=e.i(687388);let n=e=>`text/${e}; charset=utf-8`,l={md:{kind:"markdown",mime:n("markdown")},markdown:{kind:"markdown",mime:n("markdown")},csv:{kind:"csv",mime:n("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:n("plain")},log:{kind:"text",mime:n("plain")},html:{kind:"frame",mime:n("html")},htm:{kind:"frame",mime:n("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},css:{kind:"none",mime:n("css")},js:{kind:"none",mime:n("javascript")},woff2:{kind:"none",mime:"font/woff2"}},o=e=>e.split(".").pop()?.toLowerCase()??"",i=new Set(["node_modules","__pycache__"]),s=Object.entries(l).filter(([,e])=>"none"!==e.kind).map(([e])=>e),c=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${s.join("|")})\b`,"giu"),u=`${r.PATHS.workspace}/`,d=a.file(""),m=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!i.has(e),"mimeOf",0,e=>l[o(e)]?.mime??"application/octet-stream","opensOnFinish",0,e=>e.startsWith(`${r.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(o(e)),"pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),a=new Set,r="",n=null;for(let e of t.matchAll(c)){let l=e[0],o=!l.includes("/"),i=function(e){let t,a,r=(a=(t=function(e){if(!e.startsWith(d))return e;let t=e.slice(d.length);try{return decodeURIComponent(t)}catch{return t}}(e.trim())).indexOf(u))>=0?t.slice(a+u.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!r)return null;let[n,...l]=r.split("/");return l.length&&n.includes(".")?null:r}(o?r+l:l);if(o||(r=i?.slice(0,i.lastIndexOf("/")+1)??""),i){if(n&&m.test(t.slice(n.end,e.index)))for(let e of function(e,t){let a=/^(.*?)(\d+)(\D*)$/.exec(e),r=/^(.*?)(\d+)(\D*)$/.exec(t);if(!a||!r||a[1]!==r[1]||a[3]!==r[3])return[];let n=Number(a[2]),l=Number(r[2]);if(!(l-n>1)||l-n>12)return[];let o=a[2].startsWith("0")?a[2].length:0;return Array.from({length:l-n-1},(e,t)=>`${a[1]}${String(n+t+1).padStart(o,"0")}${a[3]}`)}(n.rel,i))a.add(e);a.add(i),n={rel:i,end:e.index+l.length}}}return[...a].slice(0,12)},"viewKindOf",0,e=>l[o(e)]?.kind??"none"],629668)},268486,e=>{"use strict";var t=e.i(41444);e.s(["createKeyedLock",0,function(){let e=new Map,a=new Map;return function(r,n){let l=e.get(r);l||(l=(0,t.PromiseChain)(),e.set(r,l)),a.set(r,(a.get(r)??0)+1);let o=()=>{let t=(a.get(r)??1)-1;t>0?a.set(r,t):(a.delete(r),e.delete(r))};return l(n).then(e=>(o(),e),e=>{throw o(),e})}}])},78997,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={isValidAccessToken:()=>w,readAuthConfig:()=>g,writeAuthConfig:()=>y};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(522734)),b=u(e.r(814747)),h=e.r(783697);function T(){let e=(0,h.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return b.join(e,"auth.json")}function g(){try{let e=T();if(!f.existsSync(e))return null;let t=f.readFileSync(e,"utf8");if(!t)return null;return JSON.parse(t)}catch(e){return null}}function y(e){let t=T(),a=b.dirname(t);f.existsSync(a)||f.mkdirSync(a,{mode:504,recursive:!0}),f.writeFileSync(t,JSON.stringify(e,null,2),{mode:384})}function w(e,t=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let a=Math.floor(Date.now()/1e3);return e.expiresAt>=a+t/1e3}},452005,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={AccessTokenMissingError:()=>u,RefreshAccessTokenFailedError:()=>d};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);class u extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class d extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},394853,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={processTokenResponse:()=>b,refreshTokenRequest:()=>f};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);var u=e.r(446786);let d=`@vercel/oidc node-${process.version} ${(0,u.platform)()} (${(0,u.arch)()}) ${(0,u.hostname)()}`,m=null;async function p(){if(m)return m;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":d}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let t=await e.json();if(!t||"string"!=typeof t.token_endpoint)throw Error("Invalid OAuth discovery response");let a=t.token_endpoint;return m=a,a}async function f(e){let t=await p();return await fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":d},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function b(e){let t=await e.json();return e.ok?"object"!=typeof t||null===t?[Error("Invalid token response")]:"string"!=typeof t.access_token?[Error("Missing access_token in response")]:"Bearer"!==t.token_type?[Error("Invalid token_type in response")]:"number"!=typeof t.expires_in?[Error("Missing expires_in in response")]:[null,t]:[Error("object"==typeof t&&t&&"error"in t?String(t.error):"Token refresh failed")]}},484199,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={VercelOidcTokenError:()=>u};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);class u extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},1791,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={findRootDir:()=>g,getUserDataDir:()=>y};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(814747)),b=u(e.r(522734)),h=u(e.r(446786)),T=e.r(484199);function g(){try{let e=process.cwd();for(;e!==f.default.dirname(e);){let t=f.default.join(e,".vercel");if(b.default.existsSync(t))return e;e=f.default.dirname(e)}}catch(e){throw new T.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function y(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(h.default.platform()){case"darwin":return f.default.join(h.default.homedir(),"Library/Application Support");case"linux":return f.default.join(h.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},783697,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={assertVercelOidcTokenResponse:()=>O,findProjectInfo:()=>j,getTokenPayload:()=>x,getVercelDataDir:()=>v,getVercelOidcToken:()=>S,getVercelToken:()=>k,isExpired:()=>I,loadToken:()=>M,saveToken:()=>A};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(814747)),b=u(e.r(522734)),h=e.r(484199),T=e.r(1791),g=e.r(78997),y=e.r(394853),w=e.r(452005);function v(){let e=(0,T.getUserDataDir)();return e?f.join(e,"com.vercel.cli"):null}async function k(e){let t=(0,g.readAuthConfig)();if(!t?.token)throw new w.AccessTokenMissingError;if((0,g.isValidAccessToken)(t,e?.expirationBufferMs))return t.token;if(!t.refreshToken)throw(0,g.writeAuthConfig)({}),new w.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,y.refreshTokenRequest)({refresh_token:t.refreshToken}),[a,r]=await (0,y.processTokenResponse)(e);if(a||!r)throw(0,g.writeAuthConfig)({}),new w.RefreshAccessTokenFailedError(a);let n={token:r.access_token,expiresAt:Math.floor(Date.now()/1e3)+r.expires_in};return r.refresh_token&&(n.refreshToken=r.refresh_token),(0,g.writeAuthConfig)(n),n.token}catch(e){if((0,g.writeAuthConfig)({}),e instanceof w.AccessTokenMissingError||e instanceof w.RefreshAccessTokenFailedError)throw e;throw new w.RefreshAccessTokenFailedError(e)}}async function S(e,t,a){let r=`https://api.vercel.com/v1/projects/${t}/token?source=vercel-oidc-refresh${a?`&teamId=${a}`:""}`,n=await fetch(r,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!n.ok)throw new h.VercelOidcTokenError(`Failed to refresh OIDC token: ${n.statusText}`);let l=await n.json();return O(l),l}function O(e){if(!e||"object"!=typeof e)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in e)||"string"!=typeof e.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function j(){let e=(0,T.findRootDir)();if(!e)throw new h.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let t=f.join(e,".vercel","project.json");if(!b.existsSync(t))throw new h.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let a=JSON.parse(b.readFileSync(t,"utf8"));if("string"!=typeof a.projectId&&"string"!=typeof a.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:a.projectId,teamId:a.orgId}}function A(e,t){let a=(0,T.getUserDataDir)();if(!a)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let r=f.join(a,"com.vercel.token",`${t}.json`),n=JSON.stringify(e);b.mkdirSync(f.dirname(r),{mode:504,recursive:!0}),b.writeFileSync(r,n),b.chmodSync(r,432)}function M(e){let t=(0,T.getUserDataDir)();if(!t)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let a=f.join(t,"com.vercel.token",`${e}.json`);if(!b.existsSync(a))return null;let r=JSON.parse(b.readFileSync(a,"utf8"));return O(r),r}function x(e){let t=e.split(".");if(3!==t.length)throw new h.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let a=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=a.padEnd(a.length+(4-a.length%4)%4,"=");return JSON.parse(Buffer.from(r,"base64").toString("utf8"))}function I(e,t=0){return 1e3*e.exp<Date.now()+t}},260338,e=>{"use strict";var t=e.i(518899),a=e.i(844988),r=e.i(156325);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,a.is)(e,r.Column)?e:String)}])}];
|
|
3
|
+
`),b=e=>{let a=t.coalesce?.keyOf(e)??null;if(null===a)return f(e);let r=d.get(a);r&&clearTimeout(r),d.set(a,setTimeout(()=>{d.delete(a),f(e)},t.coalesce?.ms))},h=e.subscribe(e=>m?m.push(e):b(e)),T=setInterval(()=>p(": ping\n\n"),r);n+=1,t.onWatchers?.(n),i=()=>{if(!u){for(let e of(u=!0,n-=1,t.onWatchers?.(n),h(),clearInterval(T),d.values()))clearTimeout(e);try{s.close()}catch{}}},l.addEventListener("abort",i);try{for(let e of await o?.()??[])f(e)}catch(e){c.logger.error("event stream opening failed",e),i();return}let g=m;for(let e of(m=null,g))b(e)},cancel(){i()}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store","X-Accel-Buffering":"no"}})},get watchers(){return n}}}(m,{coalesce:{ms:150,keyOf:e=>e.type in u?e.type:null},onWatchers:p.track}),b=d.__bootId??=crypto.randomUUID();e.s(["BOOT_ID",0,b,"appEventStream",0,f,"appEvents",0,m,"presence",0,p],380690)},393189,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(687388),n=e.i(786025);let l=e=>`${(0,n.botFolder)(e)}/memory`;async function o(e,t=r.BOT_MEMORY_LIMITS.files){let s=l(e),c=(0,a.join)(n.WORKSPACE,s),u=(await i(c)).sort((e,t)=>t.info.mtimeMs-e.info.mtimeMs),m=await Promise.all(u.slice(0,t).map(async({name:e,info:t})=>({file:e,path:`${s}/${e}`,line:await d((0,a.join)(c,e)),at:new Date(t.mtimeMs),bytes:t.size})));return{folder:s,entries:m,total:u.length}}async function i(e){let r=await (0,t.readdir)(e).catch(()=>[]);return(await Promise.all(r.filter(e=>!e.startsWith(".")).map(async r=>{let n=await (0,t.stat)((0,a.join)(e,r)).catch(()=>null);return n?.isFile()?{name:r,info:n}:null}))).filter(e=>null!==e)}async function s(e){let o=(0,a.join)(n.WORKSPACE,l(e)),s=new Map;return await Promise.all((await i(o)).map(async({name:e,info:n})=>{let l=n.size>4*r.BOT_MEMORY_LIMITS.chars?null:await (0,t.readFile)((0,a.join)(o,e),"utf8").catch(()=>null);s.set(e,{text:null!==l&&u(l)<=r.BOT_MEMORY_LIMITS.chars?l:null,size:n.size,mtimeMs:n.mtimeMs,atime:n.atime,mtime:n.mtime})})),s}async function c(e,o){let s=l(e),c=(0,a.join)(n.WORKSPACE,s),{files:d,chars:m}=r.BOT_MEMORY_LIMITS,p=[],f=[],b=0;for(let{name:e,info:r}of(await i(c))){b+=1;let n=o.get(e);if(n&&n.size===r.size&&n.mtimeMs===r.mtimeMs)continue;let l=(0,a.join)(c,e),i=u(await (0,t.readFile)(l,"utf8").catch(()=>""));if(i<=m){n||f.push(e);continue}let d=`${i.toLocaleString("en-US")} characters, past the ${m.toLocaleString("en-US")} a memory file holds`;n?null!==n.text?(await (0,t.writeFile)(l,n.text),await (0,t.utimes)(l,n.atime,n.mtime),p.push(`Not kept: \`${s}/${e}\` came to ${d}, so it is back as it was. Write it again shorter.`)):p.push(`\`${s}/${e}\` is ${d}. Shorten it.`):(await (0,t.rm)(l,{force:!0}),b-=1,p.push(`Not kept: \`${s}/${e}\` came to ${d}, so it was removed. Write it again shorter.`))}if(b>d&&f.length){await Promise.all(f.map(e=>(0,t.rm)((0,a.join)(c,e),{force:!0})));let e=f.map(e=>`\`${s}/${e}\``).join(", ");p.push(`Not kept: your memory holds ${d} files at most and this made ${b}, so ${e} ${1===f.length?"was":"were"} removed. Delete or merge files no longer worth keeping, then write it again.`)}return p.length?p.join("\n"):null}let u=e=>[...e.trim()].length;async function d(e){let a=await (0,t.open)(e,"r").catch(()=>null);if(!a)return"";try{let e=Buffer.alloc(1024),{bytesRead:t}=await a.read(e,0,1024,0),r=e.toString("utf8",0,t).split("\n").map(e=>e.trim()).filter(Boolean);if("---"===r[0]){let e=r.find(e=>e.startsWith("description:"));if(e)return e.slice(12).trim().replace(/^["']|["']$/g,"");let t=r.indexOf("---",1);return t>0?(r[t+1]??"").replace(/^#+\s*/,""):""}return(r[0]??"").replace(/^#+\s*/,"")}finally{await a.close()}}e.s(["botMemoryFolder",0,l,"holdBotMemory",0,s,"keepBotMemory",0,c,"listBotMemory",0,o])},148831,e=>e.a(async(t,a)=>{try{var r=e.i(875225),n=e.i(260338),l=e.i(518899),o=e.i(380690),i=e.i(528790),s=e.i(613240),c=e.i(441963),u=t([i]);function d(e){return(0,c.isRemoteConfig)(e)?{url:e.url}:{command:e.command,args:e.args}}async function m(){return(await i.database.select({name:s.mcpServerTable.name,config:s.mcpServerTable.config,lastError:s.mcpServerTable.lastError,toolCount:(0,n.count)(s.mcpToolTable.id)}).from(s.mcpServerTable).leftJoin(s.mcpToolTable,(0,r.eq)(s.mcpToolTable.serverName,s.mcpServerTable.name)).groupBy(s.mcpServerTable.name)).map(e=>({...e,config:d(e.config)}))}async function p(e){let[t]=await i.database.select({name:s.mcpServerTable.name,config:s.mcpServerTable.config,lastError:s.mcpServerTable.lastError,toolsSyncedAt:s.mcpServerTable.toolsSyncedAt}).from(s.mcpServerTable).where((0,r.eq)(s.mcpServerTable.name,e));return t?{...t,config:d(t.config),tools:await f(e)}:null}async function f(e){return i.database.select({id:s.mcpToolTable.id,name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema,outputSchema:s.mcpToolTable.outputSchema}).from(s.mcpToolTable).where((0,r.eq)(s.mcpToolTable.serverName,e)).orderBy(s.mcpToolTable.name)}async function b(e){let[t]=await i.database.select().from(s.mcpServerTable).where((0,r.eq)(s.mcpServerTable.name,e));return t??null}[i]=u.then?(await u)():u;let v=()=>o.appEvents.emit({type:"mcp"});async function h(e,t){await i.database.transaction(async a=>{t.length&&await a.insert(s.mcpToolTable).values(t.map(t=>({...t,serverName:e}))).onConflictDoUpdate({target:[s.mcpToolTable.serverName,s.mcpToolTable.name],set:{description:T(s.mcpToolTable.description),inputSchema:T(s.mcpToolTable.inputSchema),outputSchema:T(s.mcpToolTable.outputSchema)}}),await a.delete(s.mcpToolTable).where(t.length?(0,r.and)((0,r.eq)(s.mcpToolTable.serverName,e),(0,r.notInArray)(s.mcpToolTable.name,t.map(e=>e.name))):(0,r.eq)(s.mcpToolTable.serverName,e)),await a.update(s.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,r.eq)(s.mcpServerTable.name,e))}),v()}function T(e){return l.sql.raw(`excluded."${e.name}"`)}async function g(e,t){await i.database.update(s.mcpServerTable).set({lastError:t}).where((0,r.eq)(s.mcpServerTable.name,e)),v()}async function y(e,t){await i.database.update(s.mcpServerTable).set({oauth:t}).where((0,r.eq)(s.mcpServerTable.name,e)),v()}async function w(e){let[t]=await i.database.select().from(s.mcpServerTable).where(l.sql`json_extract(${s.mcpServerTable.oauth}, '$.state') = ${e}`);return t??null}e.s(["findAllServers",0,m,"findAllTools",0,function(){return i.database.select({id:s.mcpToolTable.id,name:s.mcpToolTable.name,serverName:s.mcpToolTable.serverName,description:s.mcpToolTable.description}).from(s.mcpToolTable).orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"findPinnedTools",0,function(e){return i.database.select({server:s.mcpToolTable.serverName,name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema}).from(s.botMcpToolTable).innerJoin(s.mcpToolTable,(0,r.eq)(s.botMcpToolTable.toolId,s.mcpToolTable.id)).where((0,r.eq)(s.botMcpToolTable.botName,e)).orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"findServer",0,b,"findServerByOAuthState",0,w,"findServerDetail",0,p,"findToolSchemas",0,function(e,t){return t.length?i.database.select({name:s.mcpToolTable.name,description:s.mcpToolTable.description,inputSchema:s.mcpToolTable.inputSchema}).from(s.mcpToolTable).where((0,r.and)((0,r.eq)(s.mcpToolTable.serverName,e),(0,r.inArray)(s.mcpToolTable.name,t))).orderBy(s.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return i.database.select({name:s.mcpServerTable.name}).from(s.mcpServerTable).orderBy(s.mcpServerTable.name)},"listToolNames",0,function(e){let t=i.database.select({server:s.mcpToolTable.serverName,name:s.mcpToolTable.name}).from(s.mcpToolTable);return e?t.where((0,r.eq)(s.mcpToolTable.serverName,e)).orderBy(s.mcpToolTable.name):t.orderBy(s.mcpToolTable.serverName,s.mcpToolTable.name)},"saveConnectionError",0,g,"saveOAuthData",0,y,"syncServerTools",0,h]),a()}catch(e){a(e)}},!1),441963,e=>{"use strict";var t=e.i(469719),a=e.i(704161);let r=t.z.object({url:t.z.url(),headers:t.z.record(t.z.string(),t.z.string()).optional(),oauthClient:t.z.object({clientId:t.z.string().min(1),clientSecret:t.z.string().optional()}).optional()}),n=t.z.object({command:t.z.string().min(1),args:t.z.array(t.z.string()).optional(),env:t.z.record(t.z.string(),t.z.string()).optional()}),l=t.z.union([r,n]),o=t.z.object({name:t.z.string(),description:t.z.string().optional(),inputSchema:t.z.looseObject({}).optional(),outputSchema:t.z.looseObject({}).optional()});t.z.object({clientInformation:t.z.looseObject({}).optional(),tokens:t.z.looseObject({}).optional(),authorizationServer:t.z.looseObject({}).optional(),codeVerifier:t.z.string().optional(),state:t.z.string().optional()});let i=t.z.object({name:t.z.string().min(1).max(40),config:l,toolCount:t.z.number().int(),lastError:t.z.string().nullish()}),s=o.extend({id:t.z.number().int(),description:t.z.string().nullish()});i.omit({toolCount:!0}).extend({tools:s.array().default([]),toolsSyncedAt:a.DateLikeSchema}),t.z.object({name:t.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:l}),t.z.union([t.z.object({mcpServers:t.z.record(t.z.string(),l)}),t.z.record(t.z.string(),l)]),e.s(["isRemoteConfig",0,function(e){return"url"in e}])},963219,e=>e.a(async(t,a)=>{try{var r=e.i(260338),n=e.i(349129),l=e.i(875225),o=e.i(380690),i=e.i(687388),s=e.i(528790),c=e.i(613240),u=e.i(265143),d=e.i(53748),m=e.i(473139),p=t([s,u]);[s,u]=p.then?(await p)():p;let S=()=>o.appEvents.emit({type:"routines"});async function f(e,t){return s.database.select({id:c.threadTable.id,status:c.threadTable.status,outcome:c.threadTable.outcome,updatedAt:c.threadTable.updatedAt}).from(c.threadTable).where((0,l.eq)(c.threadTable.routineId,e)).orderBy((0,n.desc)(c.threadTable.createdAt)).limit(t)}let O=async e=>{let{createdAt:t,...a}=e;return{...a,runs:await f(e.id,i.ROUTINE.runsShown)}};async function b(){let e=await s.database.select().from(c.routineTable).orderBy(c.routineTable.createdAt);return Promise.all(e.map(O))}async function h(e){let[t]=await s.database.select().from(c.routineTable).where((0,l.eq)(c.routineTable.id,e));return t?O(t):null}async function T(e){let t=await h(e.trim());if(t)return t;let a=e.trim().toLowerCase(),r=(await b()).filter(e=>e.label.toLowerCase()===a);return 1===r.length?r[0]:null}async function g(e){let t=await (0,u.findJobBot)(e);return(!t||t.disabled)&&(0,d.publicError)("Choose an enabled bot."),t.name}function y(e,t){t&&"once"===e.kind&&(0,m.momentOf)(e.at)<=new Date&&(0,d.publicError)("That time has passed. Pick a later one.")}async function w(e){let[{total:t}]=await s.database.select({total:(0,r.count)()}).from(c.routineTable);t>=i.ROUTINE.max&&(0,d.publicError)(`There are already ${i.ROUTINE.max} routines. Delete one to make another.`),y(e.schedule,!0);let[a]=await s.database.insert(c.routineTable).values({id:crypto.randomUUID(),...e,bot:await g(e.bot),nextRunAt:(0,m.nextRun)(e.schedule,new Date)}).returning();return S(),O(a)}async function v(e,t){let[a]=await s.database.select().from(c.routineTable).where((0,l.eq)(c.routineTable.id,e));if(!a)return null;let r=t.schedule??a.schedule,n=!!t.schedule||t.enabled&&!a.enabled;n&&y(r,t.enabled??a.enabled);let[o]=await s.database.update(c.routineTable).set({...t,...t.bot?{bot:await g(t.bot)}:{},...n?{nextRunAt:(0,m.nextRun)(r,new Date)}:{}}).where((0,l.eq)(c.routineTable.id,e)).returning();return S(),O(o)}async function k(e){let t=await s.database.delete(c.routineTable).where((0,l.eq)(c.routineTable.id,e)).returning({id:c.routineTable.id});return t.length&&S(),t.length>0}e.s(["createRoutine",0,w,"deleteRoutine",0,k,"listRoutines",0,b,"resolveRoutine",0,T,"updateRoutine",0,v]),a()}catch(e){a(e)}},!1),473139,e=>{"use strict";var t=e.i(105249),a=e.i(687388),r=e.i(704161);let n=t.default.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"A time is HH:MM, 00:00 to 23:59");function l(e){let[t,a]=e.split(" "),[r,n,l]=t.split("-").map(Number),[o,i]=a.split(":").map(Number);return new Date(r,n-1,l,o,i)}let o=/^\d{4}-\d\d-\d\d ([01]\d|2[0-3]):[0-5]\d$/,i=t.default.string().regex(o,'A moment is "YYYY-MM-DD HH:MM"').refine(e=>{if(!o.test(e))return!0;let t=l(e);return t.getMonth()===Number(e.slice(5,7))-1&&t.getDate()===Number(e.slice(8,10))},"There is no such day"),s=t.default.discriminatedUnion("kind",[t.default.object({kind:t.default.literal("once"),at:i}),t.default.object({kind:t.default.literal("daily"),time:n,days:t.default.array(t.default.number().int().min(1).max(7)).min(1,"Pick at least one day").transform(e=>[...new Set(e)].sort((e,t)=>e-t))}),t.default.object({kind:t.default.literal("every"),hours:t.default.number().int().min(a.ROUTINE.minHours,`No more often than every ${a.ROUTINE.minHours}h`).max(168)})]),c=t.default.object({bot:t.default.string().trim().min(1,"Pick a bot"),label:t.default.string().trim().min(1,"Give it a name").max(80),request:t.default.string().trim().min(1,"Say what it should do"),schedule:s}),u=t.default.object({id:t.default.string(),status:t.default.enum(["running","waiting","done","cancelled"]),outcome:t.default.string().nullable(),updatedAt:r.DateLikeSchema});c.extend({id:t.default.string(),enabled:t.default.boolean(),nextRunAt:r.DateLikeSchema,runs:t.default.array(u)});let d=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];e.s(["RoutineInputSchema",0,c,"RoutineScheduleSchema",0,s,"momentOf",0,l,"nextRun",0,function(e,t){if("once"===e.kind)return l(e.at);if("every"===e.kind)return new Date(t.getTime()+36e5*e.hours);let[a,r]=e.time.split(":").map(Number);for(let n=0;n<=7;n++){let l=new Date(t);l.setDate(l.getDate()+n),l.setHours(a,r,0,0);let o=0===l.getDay()?7:l.getDay();if(l>t&&e.days.includes(o))return l}return new Date(t.getTime()+864e5)},"scheduleText",0,function(e){if("once"===e.kind){let[t,a]=e.at.split(" "),[,r,n]=t.split("-").map(Number);return`Once \xb7 ${m[r-1]} ${n} ${a}`}if("every"===e.kind)return 1===e.hours?"Every hour":`Every ${e.hours} hours`;let{days:t,time:a}=e;if(7===t.length)return`Daily ${a}`;if(1===t.length)return`${d[t[0]-1]} ${a}`;let r=t.every((e,a)=>0===a||e===t[a-1]+1)?`${d[t[0]-1]}–${d[t.at(-1)-1]}`:t.map(e=>d[e-1]).join(" ");return`Daily ${a} \xb7 ${r}`}])},527608,824664,e=>{"use strict";var t=e.i(912714),a=e.i(750227),r=e.i(380690),n=e.i(687388),l=e.i(786025);e.i(640911);let o=e=>e.trim().toLowerCase().replace(/^[a-z]+:\/\//,"").replace(/^www\./,"").replace(/[/?#].*$/,"");e.s(["siteOf",0,o],824664);let i=(0,a.join)(n.DATA_DIR,n.PATHS.signIns),s=e=>(0,a.join)(i,`${encodeURIComponent(o(e))}.json`);async function c(e){try{return JSON.parse(await (0,t.readFile)(s(e),"utf8"))}catch{return null}}async function u(e){await (0,t.mkdir)(i,{recursive:!0}),await (0,t.writeFile)(s(e.site),JSON.stringify(e),{mode:384}),r.appEvents.emit({type:"signins"})}async function d(){let e=await (0,t.readdir)(i).catch(()=>[]);return(await Promise.all(e.filter(e=>e.endsWith(".json")).map(e=>c(decodeURIComponent(e.slice(0,-5)))))).flatMap(e=>e?[(({state:e,...t})=>t)(e)]:[]).sort((e,t)=>e.site.localeCompare(t.site))}async function m(e){let t=o(e.site),a=await c(t),r={site:t,account:e.account.trim()||t,bots:[...new Set([...a?.bots??[],e.bot])],asking:(a?.asking??[]).filter(t=>t!==e.bot),keptAt:new Date().toISOString(),usedAt:a?.usedAt??null,state:e.state};return await u(r),(({state:e,...t})=>t)(r)}async function p(e,t){let a=await c(e);if(!a)return{kind:"none",kept:(await d()).map(e=>e.site)};if(!a.bots.includes(t))return a.asking.includes(t)||await u({...a,asking:[...a.asking,t]}),{kind:"ask",signIn:(({state:e,...t})=>t)(a)};let r={...a,usedAt:new Date().toISOString()};return await u(r),{kind:"state",signIn:(({state:e,...t})=>t)(r),state:a.state}}let f=e=>`${e.name}
|
|
4
|
+
${e.domain}
|
|
5
|
+
${e.path}`;async function b(e){let a,r=await (0,t.readdir)(i).catch(()=>[]);if(!r.some(e=>e.endsWith(".json")))return;let n=await (0,l.openWorkspace)(),o=(0,l.jobShellEnv)(e),{browsers:s}=JSON.parse((await n.exec("playwright-cli list --json",{env:o,timeoutMs:15e3})).stdout||"{}"),d=s?.find(e=>e.name===o.PLAYWRIGHT_CLI_SESSION);if(!d||d.attached)return;let m=`.playwright-cli/state-${crypto.randomUUID()}.json`;try{let e=await n.exec(`mkdir -p .playwright-cli && playwright-cli state-save ${m}`,{env:o,timeoutMs:3e4});if(0!==e.exitCode)return;let t=JSON.parse(await n.readFile(m,"utf-8"));a=new Map((t.cookies??[]).map(e=>[f(e),e]))}finally{await n.exec(`rm -f ${m}`)}for(let e of r){if(!e.endsWith(".json"))continue;let t=await c(decodeURIComponent(e.slice(0,-5))),r=t?.state;if(!t||!r?.cookies)continue;let n=!1,l=r.cookies.map(e=>{let t=a.get(f(e));return t&&JSON.stringify(t)!==JSON.stringify(e)?(n=!0,t):e});n&&await u({...t,state:{...r,cookies:l}})}}e.s(["borrowSignIn",0,p,"keepSignIn",0,m,"listSignIns",0,d,"renewSignIns",0,b],527608)},22676,e=>e.a(async(t,a)=>{try{var r=e.i(349129),n=e.i(875225),l=e.i(518899),o=e.i(687388),i=e.i(528790),s=e.i(613240),c=e.i(378884),u=e.i(340698),d=e.i(134344),m=t([i,c,u]);async function p(){return(0,d.isSkillsOn)(await (0,u.readConfig)(d.THURSDAY_KEYS.skills))}async function f(e,t){for(let a of t)await i.database.insert(s.callMessageTable).values({callId:e,...a,fragments:a.fragments??null}).onConflictDoUpdate({target:[s.callMessageTable.callId,s.callMessageTable.id],set:{text:a.text,role:a.role,tool:a.tool??null,fragments:a.fragments??null}})}async function b(e){let[t]=await i.database.select({seq:l.sql`max(${s.callMessageTable.seq})`}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e));return t?.seq==null?0:Number(t.seq)+1}async function h(e,t){await i.database.insert(s.callThoughtTable).values({callId:e,...t}).onConflictDoNothing()}async function T(e){let t=await i.database.select({callId:s.callMessageTable.callId,startedAt:s.callTable.startedAt,role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text,seq:s.callMessageTable.seq}).from(s.callMessageTable).innerJoin(s.callTable,(0,n.eq)(s.callMessageTable.callId,s.callTable.id)).orderBy((0,r.desc)(s.callTable.startedAt),(0,r.desc)(s.callMessageTable.seq)).limit(e),a=new Map;for(let e of t){let t=a.get(e.callId)??{callId:e.callId,startedAt:e.startedAt,turns:[]};t.turns.push({role:e.role,tool:e.tool,text:e.text,seq:e.seq}),a.set(e.callId,t)}return[...a.values()].reverse().map(e=>({...e,turns:e.turns.reverse()}))}async function g(e,t,a){let[o]=await i.database.select({startedAt:s.callTable.startedAt}).from(s.callTable).where((0,n.eq)(s.callTable.id,e));if(!o)return null;let[c]=await i.database.select({total:l.sql`count(*)`}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e)),u=await i.database.select({role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text}).from(s.callMessageTable).where((0,n.eq)(s.callMessageTable.callId,e)).orderBy((0,r.asc)(s.callMessageTable.seq)).limit(a).offset((t-1)*a);return{startedAt:o.startedAt,total:Number(c?.total??0),turns:u}}async function y(){return(await i.database.select({id:s.callTable.id}).from(s.callTable).where((0,n.isNull)(s.callTable.endedAt)).limit(1)).length>0}async function w(e){let t=e.limit??o.CALL_HISTORY_PAGE,a=await i.database.select({id:s.callTable.id,provider:s.callTable.provider,model:s.callTable.model,backendModel:s.callTable.backendModel,startedAt:s.callTable.startedAt,endedAt:s.callTable.endedAt,endedReason:s.callTable.endedReason,seconds:s.callTable.seconds}).from(s.callTable).innerJoin(s.callMessageTable,(0,n.eq)(s.callMessageTable.callId,s.callTable.id)).where(e.before?(0,n.lt)(s.callTable.startedAt,e.before):void 0).groupBy(s.callTable.id).orderBy((0,r.desc)(s.callTable.startedAt)).limit(t);if(0===a.length)return[];let l=await i.database.select({callId:s.callMessageTable.callId,id:s.callMessageTable.id,role:s.callMessageTable.role,tool:s.callMessageTable.tool,text:s.callMessageTable.text,seq:s.callMessageTable.seq,fragments:s.callMessageTable.fragments,at:s.callMessageTable.at}).from(s.callMessageTable).where((0,n.inArray)(s.callMessageTable.callId,a.map(e=>e.id))).orderBy((0,r.asc)(s.callMessageTable.callId),(0,r.asc)(s.callMessageTable.seq)),u=new Map;for(let e of l){let{callId:t,...a}=e,r=u.get(t);r?r.push(a):u.set(t,[a])}let d=await (0,c.listCallJobs)(a.map(e=>e.id));return a.map(e=>({...e,turns:u.get(e.id)??[],jobs:d.filter(t=>t.callId===e.id).map(e=>({id:e.id,label:e.label,status:e.status,outcome:e.outcome}))}))}[i,c,u]=m.then?(await m)():m,e.s(["isAnyCallLive",0,y,"listCallHistory",0,w,"listRecentTurns",0,T,"nextTurnSeq",0,b,"readCallConversation",0,g,"readCallSkillsOn",0,p,"saveThought",0,h,"saveTurns",0,f]),a()}catch(e){a(e)}},!1),134344,e=>{"use strict";var t=e.i(105249),a=e.i(687388),r=e.i(264079),n=e.i(904309);let l=[{id:"chatgpt",...r.TEXT_MODEL_PROVIDERS.chatgpt},{id:"openai",...r.TEXT_MODEL_PROVIDERS.openai}];t.default.object({charset:t.default.enum(["ascii","emoji","emojiOnly"]).default(a.ASCII_FACE.charset),fontSize:t.default.number().min(a.ASCII_FACE.fontSize.min).max(a.ASCII_FACE.fontSize.max).default(a.ASCII_FACE.fontSize.default),density:t.default.number().min(a.ASCII_FACE.density.min).max(a.ASCII_FACE.density.max).default(a.ASCII_FACE.density.default)}).parse({});t.default.object({enabled:t.default.boolean(),phrase:t.default.string().trim().min(3).max(32)}),t.default.object({enabled:t.default.boolean(),combo:t.default.string().trim().min(1).max(64)}),t.default.enum(["off","waiting","any"]),t.default.enum(["center","sides"]),t.default.object({id:t.default.string().min(1),role:t.default.enum(["user","assistant","tool"]),tool:t.default.string().nullish(),text:t.default.string(),seq:t.default.number().int().min(0),fragments:t.default.array(n.LiveFragmentSchema).nullish()}),t.default.object({id:t.default.string().min(1),text:t.default.string(),seq:t.default.number().int().min(0)}),e.s(["TEXT_CALL_PROVIDERS",0,l,"THURSDAY_KEYS",0,{skills:"THURSDAY_SKILLS"},"isSkillsOn",0,e=>e?.trim()==="on","textCallRunsOn",0,e=>l.find(t=>e(t.apiKeyName))?.id??null],134344)},629668,175936,e=>{"use strict";let t=e=>e.split("/").map(encodeURIComponent).join("/"),a={memory:"/api/memory",memoryPage:e=>({url:"/api/memory",query:{offset:e||null}}),notePath:e=>({url:"/api/memory",query:{path:e}}),mcp:"/api/mcp",mcpServer:e=>({url:"/api/mcp",pathVariable:[e]}),mcpTools:"/api/mcp/tools",skills:"/api/skills",skillNode:(e,t,a)=>({url:"/api/skills",pathVariable:[e,t],query:{path:a}}),bot:"/api/bot",botMemory:"/api/bot/memory",botKeepWorking:"/api/bot/keep-working",botMemoryFiles:e=>({url:"/api/bot/memory/files",query:{bot:e}}),routines:"/api/routine",threads:"/api/bot/thread",threadHistory:e=>({url:"/api/bot/thread",query:{history:1,before:e}}),thread:e=>({url:"/api/bot/thread",query:{id:e}}),toolResult:(e,t)=>({url:"/api/bot/thread",pathVariable:[e],query:{call:t}}),workspace:"/api/workspace",workspaceFolder:(e,t)=>({url:"/api/workspace",query:{path:e||null,rows:t}}),workspaceFiles:e=>({url:"/api/workspace/files",query:{paths:JSON.stringify(e)}}),artifacts:"/api/artifact",artifactShelf:e=>({url:"/api/artifact",query:{rows:e}}),artifactSet:(e,t)=>({url:"/api/artifact",query:{set:e,rows:t}}),file:e=>`/api/file/${t(e)}`,favicon:e=>`/api/favicon/${encodeURIComponent(e)}`,fileView:e=>`/artifact/${t(e)}`,events:"/api/events",config:"/api/config",callHistory:e=>({url:"/api/thursday/call",query:{before:e}}),callSkills:"/api/thursday/skills",toolCall:"/api/thursday/tool-call",signIns:"/api/signins",reach:"/api/reach",textCall:"/api/thursday/text",memoryEdit:"/api/memory/edit",llmModel:"/api/llm-model",modelCatalog:"/api/llm-model/catalog",gatewayCredits:"/api/llm-model/credits",subscriptionUsage:"/api/llm-model/subscription"};e.s(["decodePath",0,e=>e.join("/"),"queryKey",0,a],175936);var r=e.i(687388);let n=e=>`text/${e}; charset=utf-8`,l={md:{kind:"markdown",mime:n("markdown")},markdown:{kind:"markdown",mime:n("markdown")},csv:{kind:"csv",mime:n("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:n("plain")},log:{kind:"text",mime:n("plain")},html:{kind:"frame",mime:n("html")},htm:{kind:"frame",mime:n("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},css:{kind:"none",mime:n("css")},js:{kind:"none",mime:n("javascript")},woff2:{kind:"none",mime:"font/woff2"}},o=e=>e.split(".").pop()?.toLowerCase()??"",i=new Set(["node_modules","__pycache__"]),s=Object.entries(l).filter(([,e])=>"none"!==e.kind).map(([e])=>e),c=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${s.join("|")})\b`,"giu"),u=`${r.PATHS.workspace}/`,d=a.file(""),m=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!i.has(e),"mimeOf",0,e=>l[o(e)]?.mime??"application/octet-stream","opensOnFinish",0,e=>e.startsWith(`${r.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(o(e)),"pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),a=new Set,r="",n=null;for(let e of t.matchAll(c)){let l=e[0],o=!l.includes("/"),i=function(e){let t,a,r=(a=(t=function(e){if(!e.startsWith(d))return e;let t=e.slice(d.length);try{return decodeURIComponent(t)}catch{return t}}(e.trim())).indexOf(u))>=0?t.slice(a+u.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!r)return null;let[n,...l]=r.split("/");return l.length&&n.includes(".")?null:r}(o?r+l:l);if(o||(r=i?.slice(0,i.lastIndexOf("/")+1)??""),i){if(n&&m.test(t.slice(n.end,e.index)))for(let e of function(e,t){let a=/^(.*?)(\d+)(\D*)$/.exec(e),r=/^(.*?)(\d+)(\D*)$/.exec(t);if(!a||!r||a[1]!==r[1]||a[3]!==r[3])return[];let n=Number(a[2]),l=Number(r[2]);if(!(l-n>1)||l-n>12)return[];let o=a[2].startsWith("0")?a[2].length:0;return Array.from({length:l-n-1},(e,t)=>`${a[1]}${String(n+t+1).padStart(o,"0")}${a[3]}`)}(n.rel,i))a.add(e);a.add(i),n={rel:i,end:e.index+l.length}}}return[...a].slice(0,12)},"viewKindOf",0,e=>l[o(e)]?.kind??"none"],629668)},268486,e=>{"use strict";var t=e.i(41444);e.s(["createKeyedLock",0,function(){let e=new Map,a=new Map;return function(r,n){let l=e.get(r);l||(l=(0,t.PromiseChain)(),e.set(r,l)),a.set(r,(a.get(r)??0)+1);let o=()=>{let t=(a.get(r)??1)-1;t>0?a.set(r,t):(a.delete(r),e.delete(r))};return l(n).then(e=>(o(),e),e=>{throw o(),e})}}])},78997,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={isValidAccessToken:()=>w,readAuthConfig:()=>g,writeAuthConfig:()=>y};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(522734)),b=u(e.r(814747)),h=e.r(783697);function T(){let e=(0,h.getVercelDataDir)();if(!e)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return b.join(e,"auth.json")}function g(){try{let e=T();if(!f.existsSync(e))return null;let t=f.readFileSync(e,"utf8");if(!t)return null;return JSON.parse(t)}catch(e){return null}}function y(e){let t=T(),a=b.dirname(t);f.existsSync(a)||f.mkdirSync(a,{mode:504,recursive:!0}),f.writeFileSync(t,JSON.stringify(e,null,2),{mode:384})}function w(e,t=0){if(!e.token)return!1;if("number"!=typeof e.expiresAt)return!0;let a=Math.floor(Date.now()/1e3);return e.expiresAt>=a+t/1e3}},452005,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={AccessTokenMissingError:()=>u,RefreshAccessTokenFailedError:()=>d};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);class u extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}}class d extends Error{constructor(e){super("Failed to refresh authentication token.",{cause:e}),this.name="RefreshAccessTokenFailedError"}}},394853,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={processTokenResponse:()=>b,refreshTokenRequest:()=>f};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);var u=e.r(446786);let d=`@vercel/oidc node-${process.version} ${(0,u.platform)()} (${(0,u.arch)()}) ${(0,u.hostname)()}`,m=null;async function p(){if(m)return m;let e=await fetch("https://vercel.com/.well-known/openid-configuration",{headers:{"user-agent":d}});if(!e.ok)throw Error("Failed to discover OAuth endpoints");let t=await e.json();if(!t||"string"!=typeof t.token_endpoint)throw Error("Invalid OAuth discovery response");let a=t.token_endpoint;return m=a,a}async function f(e){let t=await p();return await fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":d},body:new URLSearchParams({client_id:"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",grant_type:"refresh_token",...e})})}async function b(e){let t=await e.json();return e.ok?"object"!=typeof t||null===t?[Error("Invalid token response")]:"string"!=typeof t.access_token?[Error("Missing access_token in response")]:"Bearer"!==t.token_type?[Error("Invalid token_type in response")]:"number"!=typeof t.expires_in?[Error("Missing expires_in in response")]:[null,t]:[Error("object"==typeof t&&t&&"error"in t?String(t.error):"Token refresh failed")]}},484199,(e,t,a)=>{"use strict";var r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={},s={VercelOidcTokenError:()=>u};for(var c in s)r(i,c,{get:s[c],enumerable:!0});t.exports=((e,t,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of l(t))o.call(e,i)||void 0===i||r(e,i,{get:()=>t[i],enumerable:!(a=n(t,i))||a.enumerable});return e})(r({},"__esModule",{value:!0}),i);class u extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},1791,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={findRootDir:()=>g,getUserDataDir:()=>y};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(814747)),b=u(e.r(522734)),h=u(e.r(446786)),T=e.r(484199);function g(){try{let e=process.cwd();for(;e!==f.default.dirname(e);){let t=f.default.join(e,".vercel");if(b.default.existsSync(t))return e;e=f.default.dirname(e)}}catch(e){throw new T.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function y(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(h.default.platform()){case"darwin":return f.default.join(h.default.homedir(),"Library/Application Support");case"linux":return f.default.join(h.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}},783697,(e,t,a)=>{"use strict";var r=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of o(t))s.call(e,i)||i===a||n(e,i,{get:()=>t[i],enumerable:!(r=l(t,i))||r.enumerable});return e},u=(e,t,a)=>(a=null!=e?r(i(e)):{},c(!t&&e&&e.__esModule?a:n(a,"default",{value:e,enumerable:!0}),e)),d={},m={assertVercelOidcTokenResponse:()=>O,findProjectInfo:()=>j,getTokenPayload:()=>x,getVercelDataDir:()=>v,getVercelOidcToken:()=>S,getVercelToken:()=>k,isExpired:()=>I,loadToken:()=>M,saveToken:()=>A};for(var p in m)n(d,p,{get:m[p],enumerable:!0});t.exports=c(n({},"__esModule",{value:!0}),d);var f=u(e.r(814747)),b=u(e.r(522734)),h=e.r(484199),T=e.r(1791),g=e.r(78997),y=e.r(394853),w=e.r(452005);function v(){let e=(0,T.getUserDataDir)();return e?f.join(e,"com.vercel.cli"):null}async function k(e){let t=(0,g.readAuthConfig)();if(!t?.token)throw new w.AccessTokenMissingError;if((0,g.isValidAccessToken)(t,e?.expirationBufferMs))return t.token;if(!t.refreshToken)throw(0,g.writeAuthConfig)({}),new w.RefreshAccessTokenFailedError("No refresh token available");try{let e=await (0,y.refreshTokenRequest)({refresh_token:t.refreshToken}),[a,r]=await (0,y.processTokenResponse)(e);if(a||!r)throw(0,g.writeAuthConfig)({}),new w.RefreshAccessTokenFailedError(a);let n={token:r.access_token,expiresAt:Math.floor(Date.now()/1e3)+r.expires_in};return r.refresh_token&&(n.refreshToken=r.refresh_token),(0,g.writeAuthConfig)(n),n.token}catch(e){if((0,g.writeAuthConfig)({}),e instanceof w.AccessTokenMissingError||e instanceof w.RefreshAccessTokenFailedError)throw e;throw new w.RefreshAccessTokenFailedError(e)}}async function S(e,t,a){let r=`https://api.vercel.com/v1/projects/${t}/token?source=vercel-oidc-refresh${a?`&teamId=${a}`:""}`,n=await fetch(r,{method:"POST",headers:{Authorization:`Bearer ${e}`}});if(!n.ok)throw new h.VercelOidcTokenError(`Failed to refresh OIDC token: ${n.statusText}`);let l=await n.json();return O(l),l}function O(e){if(!e||"object"!=typeof e)throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in e)||"string"!=typeof e.token)throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function j(){let e=(0,T.findRootDir)();if(!e)throw new h.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let t=f.join(e,".vercel","project.json");if(!b.existsSync(t))throw new h.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let a=JSON.parse(b.readFileSync(t,"utf8"));if("string"!=typeof a.projectId&&"string"!=typeof a.orgId)throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:a.projectId,teamId:a.orgId}}function A(e,t){let a=(0,T.getUserDataDir)();if(!a)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let r=f.join(a,"com.vercel.token",`${t}.json`),n=JSON.stringify(e);b.mkdirSync(f.dirname(r),{mode:504,recursive:!0}),b.writeFileSync(r,n),b.chmodSync(r,432)}function M(e){let t=(0,T.getUserDataDir)();if(!t)throw new h.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let a=f.join(t,"com.vercel.token",`${e}.json`);if(!b.existsSync(a))return null;let r=JSON.parse(b.readFileSync(a,"utf8"));return O(r),r}function x(e){let t=e.split(".");if(3!==t.length)throw new h.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let a=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=a.padEnd(a.length+(4-a.length%4)%4,"=");return JSON.parse(Buffer.from(r,"base64").toString("utf8"))}function I(e,t=0){return 1e3*e.exp<Date.now()+t}},260338,e=>{"use strict";var t=e.i(518899),a=e.i(844988),r=e.i(156325);e.s(["count",0,function(e){return t.sql`count(${e||t.sql.raw("*")})`.mapWith(Number)},"max",0,function(e){return t.sql`max(${e})`.mapWith((0,a.is)(e,r.Column)?e:String)}])}];
|
|
4
6
|
|
|
5
7
|
//# sourceMappingURL=_05v8k21._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[159479,e=>e.a(async(t,a)=>{try{var i=e.i(847841),n=e.i(983477),r=e.i(687388),o=e.i(386075),s=e.i(54282),l=e.i(316172),h=e.i(349047),c=e.i(170801),d=e.i(926435),u=e.i(770639),m=e.i(418919),p=e.i(489956),w=e.i(205863),f=e.i(41181),g=e.i(353885),y=e.i(123203),b=e.i(944971),S=e.i(636882),T=e.i(22676),O=e.i(786025),$=e.i(704161),_=e.i(640911),k=e.i(53748),v=e.i(388439),M=e.i(41444),A=t([o,l,d,u,m,p,T]);async function E(t){let{listThreadOverview:a}=await e.A(866938),i=await a();if(!i.length)return"No thread has been started yet.";let n=i.map(e=>`"${e.label}" (${e.bot}, ${e.status})`).join(", ");return`There is no thread called "${t}". The latest are: ${n}. Call again with one of those labels.`}async function N(e,t){let a=[];for(let[e,n]of Object.entries(t)){let t=await (0,i.asSchema)(n.inputSchema).jsonSchema,r="string"==typeof n.description?n.description:"";a.push({name:e,tokens:(0,v.estimateTokens)(r)+(0,v.estimateTokens)(JSON.stringify(t))})}a.sort((e,t)=>t.tokens-e.tokens);let n=a.reduce((e,t)=>e+t.tokens,0);_.logger.debug(`${e} tools ${n} tokens over ${a.length} — ${a.map(e=>`${e.name} ${e.tokens}`).join(", ")}`)}async function L(e){let t=await x(e);return r.IS_DEV&&await N(e.target,t),t}async function x(t){if("memory-edit"===t.target){let e=(0,u.createMemoryTools)("user",null,{countReads:!1});return{[g.TOOL_NAMES.memory_recall]:e[g.TOOL_NAMES.memory_recall],[g.TOOL_NAMES.memory_remember]:e[g.TOOL_NAMES.memory_remember],[g.TOOL_NAMES.memory_forget]:e[g.TOOL_NAMES.memory_forget]}}let{[g.TOOL_NAMES.memory_conversation]:a,..._}=(0,u.createMemoryTools)("call","thursday"===t.target?t.callId??null:null),v={[g.TOOL_NAMES.memory_conversation]:a},A=await (0,O.openWorkspace)();if("thursday"===t.target){var N;let a,o,d=await (0,T.readCallSkillsOn)()?(0,f.createSkillTools)({sandbox:A,skills:await (0,S.loadSkills)(A)}):{};return{..._,...v,...d,...(0,y.createWorkspaceTools)(A,{write:!1,timeoutMs:r.CALL_EXEC_TIMEOUT_MS}),...!1===t.webSearch?{}:await (0,p.createCallSearchTool)(A),...(N=t.callId,a=async t=>{let{resolveThread:a}=await e.A(866938);return(t.trim()?await a(t.trim()):null)??await E(t)},o=async(t,a,i)=>{let n=await e.A(994193);try{return await n.answerThread(t,a,"thursday",i)}catch(e){if((0,k.isPublicError)(e))return e.message;throw e}},{[g.TOOL_NAMES.thread_start]:(0,i.tool)({description:l.threadStartSpec.description,inputSchema:l.threadStartSpec.parameters,execute:async({bot:t,request:a,label:i})=>{let{findJobBot:n,listJobBots:r}=await e.A(814317),o=await n(t);if(!o||o.disabled){let e=(await r()).map(e=>e.name);return`There is no bot called "${t}". The bots are: ${e.join(", ")}. Nothing was started — call again with one of those.`}let{startThread:s}=await e.A(994193);return{threadId:await s({bot:o.name,request:a,label:i,callId:N,from:"thursday"}),note:`${o.name} has "${i}". Its updates reach the conversation on their own. Anything further about this work — a correction, the next step once it finishes — is \`${g.TOOL_NAMES.thread_tell}\` with "${i}"; a question it asks is answered with \`${g.TOOL_NAMES.thread_answer}\`.`}}}),[g.TOOL_NAMES.thread_tell]:(0,i.tool)({description:l.threadTellSpec.description,inputSchema:l.threadTellSpec.parameters,execute:async({thread:e,words:t})=>{let i=await a(e);if("string"==typeof i)return i;if(!t.trim())return"Say what to pass on.";let n=await o(i.id,t.trim());return"string"==typeof n?n:n?.answered?{label:i.label,answered:n.answered,note:`${n.answered.bot} was waiting on a question, and took this as its answer.`}:{label:i.label,bot:n?.to??i.bot,status:"running",note:"running"===i.status?"The bot reads it before its next step.":"The bot picks the thread back up from there."}}}),[g.TOOL_NAMES.thread_answer]:(0,i.tool)({description:l.threadAnswerSpec.description,inputSchema:l.threadAnswerSpec.parameters,execute:async({thread:t,bot:i,answer:n})=>{let r=await a(t);if("string"==typeof r)return r;if(!n.trim())return"Say what the answer is.";let{findThreadView:s}=await e.A(866938),l=(await s(r.id))?.room.questions??[],h=l.find(e=>e.bot.toLowerCase()===i.trim().toLowerCase());if(!h)return l.length?`${i} is not asking anything in "${r.label}". Waiting there: ${l.map(e=>e.bot).join(", ")}. Call again with that bot.`:`No question is waiting in "${r.label}". To say something else to it, use \`${g.TOOL_NAMES.thread_tell}\`.`;let c=await o(r.id,n.trim(),h.bot);return"string"==typeof c?c:{label:r.label,answered:c?.answered??{bot:h.bot,question:h.text},note:`${h.bot} has the answer to its question and goes on from it.`}}}),[g.TOOL_NAMES.thread_status]:(0,i.tool)({description:l.threadStatusSpec.description,inputSchema:l.threadStatusSpec.parameters,execute:async({thread:t})=>{let{listThreadOverview:i,findThreadView:r}=await e.A(866938),o={now:(0,s.clockNow)()},l=e=>(0,n.formatDistanceToNowStrict)((0,$.toDate)(e),{addSuffix:!0});if(!(!t.trim()||"all"===t.trim().toLowerCase())){let e=await a(t);if("string"==typeof e)return e;let i=(await r(e.id))?.room;return{...o,label:e.label,id:e.id,bot:e.bot,participants:i?.participants??[],questions:i?.questions??[],status:e.status,since:l(e.updatedAt),outcome:e.outcome,..."waiting"===e.status&&e.pending?.options.length?{options:e.pending.options}:{}}}let h=await i();return h.length?{...o,threads:h.map(e=>({id:e.id,label:e.label,bot:e.bot,status:e.status,participants:e.room.participants,questions:e.room.questions.map(e=>({...e,text:(0,M.clip)(e.text,200)})),since:l(e.updatedAt),...e.ask?{asking:e.ask.question,options:e.ask.options}:{},..."running"===e.status?{now:(0,b.threadActivity)(e.lines)}:{},...e.outcome&&"waiting"!==e.status?{outcome:(0,M.clip)(e.outcome,200)}:{}}))}:"No thread has been started yet."}}),[g.TOOL_NAMES.thread_cancel]:(0,i.tool)({description:l.threadCancelSpec.description,inputSchema:l.threadCancelSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{cancelThread:n}=await e.A(994193);return await n(i.id),{label:i.label,status:"cancelled"}}}),[g.TOOL_NAMES.thread_show]:(0,i.tool)({description:l.threadShowSpec.description,inputSchema:l.threadShowSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{appEvents:n}=await e.A(522275),{filesOnDisk:r}=await e.A(149325),{opensOnFinish:o,pathsIn:s}=await e.A(628124),l=await r(s(i.outcome??""),null);if(!l.length)return n.emit({type:"showThread",threadId:i.id}),{label:i.label,showing:"the thread"};let h=Math.max(0,l.findIndex(o));n.emit({type:"showFile",paths:[l[h],...l.filter((e,t)=>t!==h)]});let{markSeen:c}=await e.A(866938);return await c([i.id]),{label:i.label,showing:l[h]}}}),[g.TOOL_NAMES.thread_seen]:(0,i.tool)({description:l.threadSeenSpec.description,inputSchema:l.threadSeenSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{markSeen:n}=await e.A(866938);return await n([i.id]),{label:i.label,seen:!0}}})}),...(0,m.createRoutineTools)(),...t.written?(0,c.createLookTool)():(0,h.callTools)()}}let L=await (0,S.loadSkills)(A,t.bot);return{[g.TOOL_NAMES.memory_recall]:_[g.TOOL_NAMES.memory_recall],...v,...await (0,p.createSearchTool)(t.model,A),...(0,y.createWorkspaceTools)(A,{write:!0,env:{...(0,O.jobShellEnv)(t.session),...(0,O.botShellEnv)(t.bot)},guide:!0,bot:t.bot}),...await (0,d.createMcpTools)(t.bot,A),...(0,f.createSkillTools)({sandbox:A,skills:L,bot:t.bot}),...t.model&&(0,o.seesToolImages)(t.model.ref)?(0,c.createLookTool)():{},...(0,w.createSignInTools)(A,t.bot,(0,O.jobShellEnv)(t.session)),...await (0,l.createThreadRecallTool)(t.bot,t.thread??null)}}[o,l,d,u,m,p,T]=A.then?(await A)():A,e.s(["loadTools",0,L]),a()}catch(e){a(e)}},!1),54282,e=>{"use strict";var t=e.i(343747),a=e.i(983477),i=e.i(687388),n=e.i(353885);n.TOOL_NAMES.memory_recall,n.TOOL_NAMES.memory_remember,n.TOOL_NAMES.memory_forget,n.TOOL_NAMES.memory_conversation,n.TOOL_NAMES.bash,n.TOOL_NAMES.web_search,n.TOOL_NAMES.load_skill,n.TOOL_NAMES.look_at,n.TOOL_NAMES.end_call,n.TOOL_NAMES.routine,n.TOOL_NAMES.thread_tell,n.TOOL_NAMES.thread_answer,n.TOOL_NAMES.thread_status,n.TOOL_NAMES.thread_show,n.TOOL_NAMES.thread_cancel,n.TOOL_NAMES.thread_seen;var r=e.i(704161),o=e.i(640911),s=e.i(388439),l=e.i(41444);let h=(e=new Date)=>`${(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm")} ${Intl.DateTimeFormat().resolvedOptions().timeZone}`,c=(e=new Date)=>`**Now**: ${h(e)}`,d=e=>`${(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm")} (${(0,a.formatDistanceToNowStrict)(e,{addSuffix:!0})})`,u={[n.STUDIO_TOOLS.generate_image]:"images",[n.STUDIO_TOOLS.generate_speech]:"speech",[n.STUDIO_TOOLS.transcribe]:"transcription",[n.STUDIO_TOOLS.generate_video]:"video"};e.s(["botWorkHead",0,function(e,i){let n=(0,a.formatDistanceToNowStrict)(e.updatedAt,{addSuffix:!0}),r="running"===e.status?`running, last moved ${n}`:e.asking?`waiting on the user's answer since ${n}`:"waiting"===e.status?`stopped ${n}, not finished`:`${"done"===e.status?"ended":"stopped by the user"} ${(0,t.format)(e.updatedAt,"yyyy-MM-dd")}`;return`"${e.label}" — ${e.owner===i?"yours":`${e.owner}'s`} — ${r}`},"callEnding",0,()=>`IMPORTANT — always follow this: when the user wants the call to end, however they say it, forget every other task, answer yes in one word of their language, then immediately, without thinking, use the ${n.TOOL_NAMES.end_call} tool.`,"callStamp",0,d,"carriedLines",0,(e,t={})=>e.map(e=>`- ${e.text} \xb7 ${e.path}${!1===t.ids?"":` #${e.id}`}`).join("\n"),"clockNow",0,h,"conversationLines",0,e=>e.map(e=>"tool"===e.role?`you → ${e.tool??"tool"}`:`${"user"===e.role?"user":"you"}: ${e.text}`).join("\n"),"expandedFacts",0,function(e,t){let a=e.filter(e=>t.has(e.id)),n=e.filter(e=>!t.has(e.id)),r=Math.max(0,i.MEMORY_LIMITS.expanded-a.length),o=new Set([...a,...n.slice(Math.max(0,n.length-r))].map(e=>e.id)),s=e.filter(e=>o.has(e.id));return{shown:s,hidden:e.length-s.length}},"logPromptSize",0,function(e,t){let a=(0,s.sectionTokens)(t),n=a.reduce((e,t)=>e+t.tokens,0);o.logger.debug(`${e} prompt ${n} tokens — ${a.map(e=>`${e.name} ${e.tokens}`).join(", ")}`);let r=a[0];n>i.PROMPT_BUDGET&&r&&o.logger.warn(`${e} prompt is ${n} tokens, over ${i.PROMPT_BUDGET}: ${r.name} carries ${r.tokens} of it. Every call and every job pays this.`)},"mcpToolLines",0,function(e){let t=new Map;for(let a of e){let e=t.get(a.server);e?e.push(a.name):t.set(a.server,[a.name])}return[...t].map(([e,t])=>`- **${e}**: ${t.join(", ")}`).join("\n")},"noteLines",0,function(e,t=!1){return e.length?e.map(e=>{var a;let i,n=e.aliases?.length?` ${e.aliases.map(e=>`"${e}"`).join(" ")}`:"",o=t?` \xb7 ${a=e.lastSeenAt,(i=Math.floor((Date.now()-(0,r.toDate)(a).getTime())/864e5))>=365?`${Math.floor(i/365)}y`:i>=30?`${Math.floor(i/30)}mo`:`${Math.max(i,0)}d`}`:"";return`- ${e.path} — ${e.description?.trim()} (${e.factCount})${n}${o}`}).join("\n"):"(nothing saved yet)"},"nowLine",0,c,"reachNames",0,function(e,t){let a=t.map(e=>e.server===i.STUDIO_SERVER?u[e.name]??e.name:e.server);return[...new Set([...e.map(e=>e.name),...a])].join(", ")},"recentCallLines",0,function(e,t){let a=[],r=0;e:for(let o=e.length-1;o>=0;o--){let h=e[o];for(let e=h.turns.length-1;e>=0;e--){let o=function(e,t){if("tool"!==e.role)return`${"user"===e.role?"user":"you"}: ${e.text}`;let a=function(e,t){if(e!==n.TOOL_NAMES.web_search)return null;try{let e=JSON.parse(t),a=Array.isArray(e.sources)?e.sources.flatMap(e=>e&&"object"==typeof e&&"string"==typeof e.url?[e]:[]):[];return{query:"string"==typeof e.query?e.query:null,sources:a}}catch{return null}}(e.tool,e.text);if(a){let t=[...new Set(a.sources.flatMap(e=>{try{return[new URL(e.url).hostname.replace(/^www\./,"")]}catch{return[]}}))];return`you → ${e.tool} "${(0,l.clip)(a.query??"",i.PROMPT_LINE.toolArgs)}"${t.length?` — ${t.join(", ")}`:""}`}let r=`you → ${e.tool??"tool"} ${(0,l.clip)(e.text,i.PROMPT_LINE.toolArgs)}`;if(e.tool!==n.TOOL_NAMES.thread_start)return r;let o=function(e,t){if(e!==n.TOOL_NAMES.thread_start)return null;try{let e=JSON.parse(t);return"string"==typeof e.label?e.label:null}catch{return null}}(e.tool,e.text),s=o?t.jobs?.find(e=>e.label===o):void 0;if(!s)return r;let h=s.outcome?`: ${(0,l.clip)(s.outcome,i.PROMPT_LINE.jobOutcome)}`:"";return`you → ${e.tool} "${s.label}" (${s.id}) — ${s.status}${h}`}(h.turns[e],h),c=(0,s.estimateTokens)(o)+3;if(r+c>t&&a.length)break e;r+=c,a.push({call:h,line:o})}}a.reverse();let o=[],h=null;for(let{call:e,line:t}of a)e!==h&&(h=e,o.push(`### ${d(e.startedAt)}`)),o.push(t);return o.join("\n")},"saidStamp",0,e=>(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm"),"skillLines",0,(e,t={})=>e.map(e=>{var a;let n,r;return`- **${e.name}**: ${t.short?(a=e.description,n=i.PROMPT_LINE.skill,(r=a.trim().split(/(?<=[.。])\s|\n/)[0].trim()).length>n?`${r.slice(0,n).trim()}…`:r):e.description}`}).join("\n"),"thursdayIdentity",0,(e=new Date)=>`You are Thursday, this user's own personal assistant, on their side, modeled on Friday, the AI in *Iron Man*. ${c(e)}
|
|
1
|
+
module.exports=[159479,e=>e.a(async(t,a)=>{try{var i=e.i(847841),n=e.i(983477),r=e.i(687388),o=e.i(386075),s=e.i(54282),l=e.i(316172),h=e.i(349047),c=e.i(170801),d=e.i(926435),u=e.i(770639),m=e.i(418919),p=e.i(489956),w=e.i(205863),f=e.i(41181),g=e.i(353885),y=e.i(123203),b=e.i(944971),S=e.i(636882),T=e.i(22676),O=e.i(786025),$=e.i(704161),_=e.i(640911),k=e.i(53748),v=e.i(388439),M=e.i(41444),A=t([o,l,d,u,m,p,T]);async function E(t){let{listThreadOverview:a}=await e.A(866938),i=await a();if(!i.length)return"No thread has been started yet.";let n=i.map(e=>`"${e.label}" (${e.bot}, ${e.status})`).join(", ");return`There is no thread called "${t}". The latest are: ${n}. Call again with one of those labels.`}async function N(e,t){let a=[];for(let[e,n]of Object.entries(t)){let t=await (0,i.asSchema)(n.inputSchema).jsonSchema,r="string"==typeof n.description?n.description:"";a.push({name:e,tokens:(0,v.estimateTokens)(r)+(0,v.estimateTokens)(JSON.stringify(t))})}a.sort((e,t)=>t.tokens-e.tokens);let n=a.reduce((e,t)=>e+t.tokens,0);_.logger.debug(`${e} tools ${n} tokens over ${a.length} — ${a.map(e=>`${e.name} ${e.tokens}`).join(", ")}`)}async function x(e){let t=await L(e);return r.IS_DEV&&await N(e.target,t),t}async function L(t){if("memory-edit"===t.target){let e=(0,u.createMemoryTools)("user",null,{countReads:!1});return{[g.TOOL_NAMES.memory_recall]:e[g.TOOL_NAMES.memory_recall],[g.TOOL_NAMES.memory_remember]:e[g.TOOL_NAMES.memory_remember],[g.TOOL_NAMES.memory_forget]:e[g.TOOL_NAMES.memory_forget]}}let{[g.TOOL_NAMES.memory_conversation]:a,..._}=(0,u.createMemoryTools)("call","thursday"===t.target?t.callId??null:null),v={[g.TOOL_NAMES.memory_conversation]:a},A=await (0,O.openWorkspace)();if("thursday"===t.target){var N;let a,o,d=await (0,T.readCallSkillsOn)()?(0,f.createSkillTools)({sandbox:A,skills:await (0,S.loadSkills)(A)}):{};return{..._,...v,...d,...(0,y.createWorkspaceTools)(A,{write:!1,timeoutMs:r.CALL_EXEC_TIMEOUT_MS}),...!1===t.webSearch?{}:await (0,p.createCallSearchTool)(A),...(N=t.callId,a=async t=>{let{resolveThread:a}=await e.A(866938);return(t.trim()?await a(t.trim()):null)??await E(t)},o=async(t,a,i)=>{let n=await e.A(994193);try{return await n.answerThread(t,a,"thursday",i)}catch(e){if((0,k.isPublicError)(e))return e.message;throw e}},{[g.TOOL_NAMES.thread_start]:(0,i.tool)({description:l.threadStartSpec.description,inputSchema:l.threadStartSpec.parameters,execute:async({bot:t,request:a,label:i})=>{let{findJobBot:n,listJobBots:r}=await e.A(814317),o=await n(t);if(!o||o.disabled){let e=(await r()).map(e=>e.name);return`There is no bot called "${t}". The bots are: ${e.join(", ")}. Nothing was started — call again with one of those.`}let{startThread:s}=await e.A(994193);return{threadId:await s({bot:o.name,request:a,label:i,callId:N,from:"thursday"}),note:`${o.name} has "${i}". Its updates reach the conversation on their own. Anything further about this work — a correction, the next step once it finishes — is \`${g.TOOL_NAMES.thread_tell}\` with "${i}"; a question it asks is answered with \`${g.TOOL_NAMES.thread_answer}\`.`}}}),[g.TOOL_NAMES.thread_tell]:(0,i.tool)({description:l.threadTellSpec.description,inputSchema:l.threadTellSpec.parameters,execute:async({thread:e,words:t})=>{let i=await a(e);if("string"==typeof i)return i;if(!t.trim())return"Say what to pass on.";let n=await o(i.id,t.trim());return"string"==typeof n?n:n?.answered?{label:i.label,answered:n.answered,note:`${n.answered.bot} was waiting on a question, and took this as its answer.`}:{label:i.label,bot:n?.to??i.bot,status:"running",note:"running"===i.status?"The bot reads it before its next step.":"The bot picks the thread back up from there."}}}),[g.TOOL_NAMES.thread_answer]:(0,i.tool)({description:l.threadAnswerSpec.description,inputSchema:l.threadAnswerSpec.parameters,execute:async({thread:t,bot:i,answer:n})=>{let r=await a(t);if("string"==typeof r)return r;if(!n.trim())return"Say what the answer is.";let{findThreadView:s}=await e.A(866938),l=(await s(r.id))?.room.questions??[],h=l.find(e=>e.bot.toLowerCase()===i.trim().toLowerCase());if(!h)return l.length?`${i} is not asking anything in "${r.label}". Waiting there: ${l.map(e=>e.bot).join(", ")}. Call again with that bot.`:`No question is waiting in "${r.label}". To say something else to it, use \`${g.TOOL_NAMES.thread_tell}\`.`;let c=await o(r.id,n.trim(),h.bot);return"string"==typeof c?c:{label:r.label,answered:c?.answered??{bot:h.bot,question:h.text},note:`${h.bot} has the answer to its question and goes on from it.`}}}),[g.TOOL_NAMES.thread_status]:(0,i.tool)({description:l.threadStatusSpec.description,inputSchema:l.threadStatusSpec.parameters,execute:async({thread:t})=>{let{listThreadOverview:i,findThreadView:r}=await e.A(866938),o={now:(0,s.clockNow)()},l=e=>(0,n.formatDistanceToNowStrict)((0,$.toDate)(e),{addSuffix:!0});if(!(!t.trim()||"all"===t.trim().toLowerCase())){let e=await a(t);if("string"==typeof e)return e;let i=(await r(e.id))?.room;return{...o,label:e.label,id:e.id,bot:e.bot,participants:i?.participants??[],questions:i?.questions??[],status:e.status,since:l(e.updatedAt),outcome:e.outcome,..."waiting"===e.status&&e.pending?.options.length?{options:e.pending.options}:{}}}let h=await i();return h.length?{...o,threads:h.map(e=>({id:e.id,label:e.label,bot:e.bot,status:e.status,participants:e.room.participants,questions:e.room.questions.map(e=>({...e,text:(0,M.clip)(e.text,200)})),since:l(e.updatedAt),...e.ask?{asking:e.ask.question,options:e.ask.options}:{},..."running"===e.status?{now:(0,b.threadActivity)(e.lines)}:{},...e.outcome&&"waiting"!==e.status?{outcome:(0,M.clip)(e.outcome,200)}:{}}))}:"No thread has been started yet."}}),[g.TOOL_NAMES.thread_cancel]:(0,i.tool)({description:l.threadCancelSpec.description,inputSchema:l.threadCancelSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{cancelThread:n}=await e.A(994193);return await n(i.id),{label:i.label,status:"cancelled"}}}),[g.TOOL_NAMES.thread_show]:(0,i.tool)({description:l.threadShowSpec.description,inputSchema:l.threadShowSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{appEvents:n}=await e.A(522275),{filesOnDisk:r}=await e.A(149325),{opensOnFinish:o,pathsIn:s}=await e.A(628124),l=await r(s(i.outcome??""),null);if(!l.length)return n.emit({type:"showThread",threadId:i.id}),{label:i.label,showing:"the thread"};let h=Math.max(0,l.findIndex(o));n.emit({type:"showFile",paths:[l[h],...l.filter((e,t)=>t!==h)]});let{markSeen:c}=await e.A(866938);return await c([i.id]),{label:i.label,showing:l[h]}}}),[g.TOOL_NAMES.thread_seen]:(0,i.tool)({description:l.threadSeenSpec.description,inputSchema:l.threadSeenSpec.parameters,execute:async({thread:t})=>{let i=await a(t);if("string"==typeof i)return i;let{markSeen:n}=await e.A(866938);return await n([i.id]),{label:i.label,seen:!0}}})}),...(0,m.createRoutineTools)(),...t.written?(0,c.createLookTool)():(0,h.callTools)()}}let x=await (0,S.loadSkills)(A,t.bot);return{[g.TOOL_NAMES.memory_recall]:_[g.TOOL_NAMES.memory_recall],...v,...await (0,p.createSearchTool)(t.model,A),...(0,y.createWorkspaceTools)(A,{write:!0,env:{...(0,O.jobShellEnv)(t.session),...(0,O.botShellEnv)(t.bot)},guide:!0,bot:t.bot}),...await (0,d.createMcpTools)(t.bot,A),...(0,f.createSkillTools)({sandbox:A,skills:x,bot:t.bot}),...t.model&&(0,o.seesToolImages)(t.model.ref)?(0,c.createLookTool)():{},...(0,w.createSignInTools)(A,t.bot,(0,O.jobShellEnv)(t.session)),...await (0,l.createThreadRecallTool)(t.bot,t.thread??null)}}[o,l,d,u,m,p,T]=A.then?(await A)():A,e.s(["loadTools",0,x]),a()}catch(e){a(e)}},!1),54282,e=>{"use strict";var t=e.i(343747),a=e.i(983477),i=e.i(687388),n=e.i(353885);n.TOOL_NAMES.memory_recall,n.TOOL_NAMES.memory_remember,n.TOOL_NAMES.memory_forget,n.TOOL_NAMES.memory_conversation,n.TOOL_NAMES.bash,n.TOOL_NAMES.web_search,n.TOOL_NAMES.load_skill,n.TOOL_NAMES.look_at,n.TOOL_NAMES.end_call,n.TOOL_NAMES.routine,n.TOOL_NAMES.thread_tell,n.TOOL_NAMES.thread_answer,n.TOOL_NAMES.thread_status,n.TOOL_NAMES.thread_show,n.TOOL_NAMES.thread_cancel,n.TOOL_NAMES.thread_seen;var r=e.i(704161),o=e.i(640911),s=e.i(388439),l=e.i(41444);let h=(e=new Date)=>`${(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm")} ${Intl.DateTimeFormat().resolvedOptions().timeZone}`,c=(e=new Date)=>`**Now**: ${h(e)}`,d=e=>`${(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm")} (${(0,a.formatDistanceToNowStrict)(e,{addSuffix:!0})})`,u={[n.STUDIO_TOOLS.generate_image]:"images",[n.STUDIO_TOOLS.generate_speech]:"speech",[n.STUDIO_TOOLS.transcribe]:"transcription",[n.STUDIO_TOOLS.generate_video]:"video"};e.s(["botWorkHead",0,function(e,i){let n=(0,a.formatDistanceToNowStrict)(e.updatedAt,{addSuffix:!0}),r="running"===e.status?`running, last moved ${n}`:e.asking?`waiting on the user's answer since ${n}`:"waiting"===e.status?`stopped ${n}, not finished`:`${"done"===e.status?"ended":"stopped by the user"} ${(0,t.format)(e.updatedAt,"yyyy-MM-dd")}`;return`"${e.label}" — ${e.owner===i?"yours":`${e.owner}'s`} — ${r}`},"callStamp",0,d,"carriedLines",0,(e,t={})=>e.map(e=>`- ${e.text} \xb7 ${e.path}${!1===t.ids?"":` #${e.id}`}`).join("\n"),"clockNow",0,h,"conversationLines",0,e=>e.map(e=>"tool"===e.role?`you → ${e.tool??"tool"}`:`${"user"===e.role?"user":"you"}: ${e.text}`).join("\n"),"expandedFacts",0,function(e,t){let a=e.filter(e=>t.has(e.id)),n=e.filter(e=>!t.has(e.id)),r=Math.max(0,i.MEMORY_LIMITS.expanded-a.length),o=new Set([...a,...n.slice(Math.max(0,n.length-r))].map(e=>e.id)),s=e.filter(e=>o.has(e.id));return{shown:s,hidden:e.length-s.length}},"logPromptSize",0,function(e,t){let a=(0,s.sectionTokens)(t),n=a.reduce((e,t)=>e+t.tokens,0);o.logger.debug(`${e} prompt ${n} tokens — ${a.map(e=>`${e.name} ${e.tokens}`).join(", ")}`);let r=a[0];n>i.PROMPT_BUDGET&&r&&o.logger.warn(`${e} prompt is ${n} tokens, over ${i.PROMPT_BUDGET}: ${r.name} carries ${r.tokens} of it. Every call and every job pays this.`)},"mcpToolLines",0,function(e){let t=new Map;for(let a of e){let e=t.get(a.server);e?e.push(a.name):t.set(a.server,[a.name])}return[...t].map(([e,t])=>`- **${e}**: ${t.join(", ")}`).join("\n")},"noteLines",0,function(e,t=!1){return e.length?e.map(e=>{var a;let i,n=e.aliases?.length?` ${e.aliases.map(e=>`"${e}"`).join(" ")}`:"",o=t?` \xb7 ${a=e.lastSeenAt,(i=Math.floor((Date.now()-(0,r.toDate)(a).getTime())/864e5))>=365?`${Math.floor(i/365)}y`:i>=30?`${Math.floor(i/30)}mo`:`${Math.max(i,0)}d`}`:"";return`- ${e.path} — ${e.description?.trim()} (${e.factCount})${n}${o}`}).join("\n"):"(nothing saved yet)"},"nowLine",0,c,"reachNames",0,function(e,t){let a=t.map(e=>e.server===i.STUDIO_SERVER?u[e.name]??e.name:e.server);return[...new Set([...e.map(e=>e.name),...a])].join(", ")},"recentCallLines",0,function(e,t){let a=[],r=0;e:for(let o=e.length-1;o>=0;o--){let h=e[o];for(let e=h.turns.length-1;e>=0;e--){let o=function(e,t){if("tool"!==e.role)return`${"user"===e.role?"user":"you"}: ${e.text}`;let a=function(e,t){if(e!==n.TOOL_NAMES.web_search)return null;try{let e=JSON.parse(t),a=Array.isArray(e.sources)?e.sources.flatMap(e=>e&&"object"==typeof e&&"string"==typeof e.url?[e]:[]):[];return{query:"string"==typeof e.query?e.query:null,sources:a}}catch{return null}}(e.tool,e.text);if(a){let t=[...new Set(a.sources.flatMap(e=>{try{return[new URL(e.url).hostname.replace(/^www\./,"")]}catch{return[]}}))];return`you → ${e.tool} "${(0,l.clip)(a.query??"",i.PROMPT_LINE.toolArgs)}"${t.length?` — ${t.join(", ")}`:""}`}let r=`you → ${e.tool??"tool"} ${(0,l.clip)(e.text,i.PROMPT_LINE.toolArgs)}`;if(e.tool!==n.TOOL_NAMES.thread_start)return r;let o=function(e,t){if(e!==n.TOOL_NAMES.thread_start)return null;try{let e=JSON.parse(t);return"string"==typeof e.label?e.label:null}catch{return null}}(e.tool,e.text),s=o?t.jobs?.find(e=>e.label===o):void 0;if(!s)return r;let h=s.outcome?`: ${(0,l.clip)(s.outcome,i.PROMPT_LINE.jobOutcome)}`:"";return`you → ${e.tool} "${s.label}" (${s.id}) — ${s.status}${h}`}(h.turns[e],h),c=(0,s.estimateTokens)(o)+3;if(r+c>t&&a.length)break e;r+=c,a.push({call:h,line:o})}}a.reverse();let o=[],h=null;for(let{call:e,line:t}of a)e!==h&&(h=e,o.push(`### ${d(e.startedAt)}`)),o.push(t);return o.join("\n")},"saidStamp",0,e=>(0,t.format)(e,"yyyy-MM-dd (EEE) HH:mm"),"skillLines",0,(e,t={})=>e.map(e=>{var a;let n,r;return`- **${e.name}**: ${t.short?(a=e.description,n=i.PROMPT_LINE.skill,(r=a.trim().split(/(?<=[.。])\s|\n/)[0].trim()).length>n?`${r.slice(0,n).trim()}…`:r):e.description}`}).join("\n"),"thursdayIdentity",0,(e=new Date)=>`You are Thursday, this user's own personal assistant, on their side, modeled on Friday, the AI in *Iron Man*. ${c(e)}
|
|
2
2
|
|
|
3
3
|
What they tell you is kept, so you know them better over time, and whatever they want done can be done for them in the background.`,"tidying",0,e=>({crowded:e.reduce((e,t)=>e+t.factCount,0)>i.MEMORY_LIMITS.facts,heavy:e.filter(e=>e.factCount>i.MEMORY_LIMITS.factsPerNote)})],54282)},316172,e=>e.a(async(t,a)=>{try{var i=e.i(847841),n=e.i(907855),r=e.i(687388),o=e.i(54282),s=e.i(353885),l=e.i(944971),h=e.i(889034),c=e.i(378884),d=e.i(41444),u=t([c]);[c]=u.then?(await u)():u;let p=n.string().describe("The thread, by its label or its id."),w={description:"Start a new thread: hand work to a bot. Returns a receipt at once; the work runs in the background and its updates reach the conversation on their own.",parameters:n.object({bot:n.string().describe("A name from the bot list."),request:n.string().describe("The whole of the work. The bot cannot hear the call, so everything it needs goes here — names, paths, what the user actually asked for — in their own language and their own words: it is the only language the bot has, and whatever it writes comes back to them. **Their request, never your reading of it**: a condition, a caution or a smaller goal they did not say is how work comes back as the wrong thing. When their words leave a real choice open, ask them on the call and put the answer here."),label:n.string().describe("Two or three words naming the thread, in the user's language. Used on screen and said out loud.")})},f={description:"Say something to a thread that exists: a correction while it runs, the next step once it has finished, or to go on after it stopped. Its bot reads it with everything the thread already holds.",parameters:n.object({thread:p,words:n.string().describe("What to tell its bot, in the user's language and words.")})},g={description:`Answer a question a bot asked the user. Only for a question that is waiting; anything else said to a thread is \`${s.TOOL_NAMES.thread_tell}\`.`,parameters:n.object({thread:p,bot:n.string().describe("The bot that asked."),answer:n.string().describe("The user's answer, in their words.")})},y={description:`Read threads as they are now. "all" lists up to ${r.THREAD_STATUS_LIMIT}, running and waiting work before recent endings; a label or an id reads that one whole, with its result and any question waiting.`,parameters:n.object({thread:n.string().describe('"all", or one thread by its label or its id.')})},b={description:"Stop a thread for good. It cannot be taken back.",parameters:n.object({thread:p})},S={description:"Put a thread in front of the user on their screen: the file it made, or the thread itself when it made none. Showing it also counts as them having seen its result.",parameters:n.object({thread:p})},T={description:"Mark a thread's result as seen by the user, once they have heard it and have nothing more to ask about it. It leaves the work waiting on them.",parameters:n.object({thread:p})},O={description:"Send a message to a participant or Thursday and receive a delivery receipt immediately. Mark a question for Thursday to request user input; ordinary messages to Thursday are notifications and need no answer.",parameters:h.RoomMessageSchema.extend({kind:h.RoomMessageSchema.shape.kind.describe("Use question only when Thursday must obtain an answer from the user: it ends your turn, and you continue when the answer arrives. Use message for bot collaboration, progress updates and reports."),options:h.RoomMessageSchema.shape.options.describe("With a question, offer concise answer choices when useful. Omit for an open-ended question; the user can always type their own answer."),to:n.string().trim().min(1).describe("Choose a bot from the roster, or Thursday to reach the user."),text:n.string().trim().min(1).describe("Write the message and include the context the recipient needs."),replyTo:n.string().nullish().describe("Use an incoming message ID to send an explicit reply; omit to start a new exchange. Your ordinary final text already replies to your current correspondent.")})},$={description:"Open one of your other threads whole: what you were asked there and your last words in full.",parameters:n.object({id:n.string().describe("The id in brackets on its line under Your other threads.")})};async function m(e,t){let a=await (0,c.listBotWork)(e,t),n=[...a.open,...a.recent];if(!n.some(e=>e.cut))return{};let h=new Set;return{[s.TOOL_NAMES.thread_recall]:(0,i.tool)({description:$.description,inputSchema:$.parameters,execute:async({id:t})=>{let a=t.trim().replace(/^\[|\]$/g,"").toLowerCase(),i=n.find(e=>a.length>=4&&(e.id.startsWith(a)||e.label.toLowerCase()===a));if(!i)return`No thread "${t}" on your list. The ids there: ${n.filter(e=>e.cut).map(e=>(0,l.workHandle)(e.id)).join(", ")}.`;if(!i.cut)return"Its line already shows all of it.";if(h.has(i.id))return"Already opened above, this turn.";if(h.size>=r.BOT_WORK.reads)return`${r.BOT_WORK.reads} threads are open already this turn. Carry on with what you have.`;h.add(i.id);let s=await (0,c.readBotAsk)(e,i),u=i.said??"";return[(0,o.botWorkHead)(i,e),s?`You were asked: ${(0,d.clip)(s,r.BOT_WORK.asked)}`:"",`Your last words there:
|
|
4
4
|
${u.length>r.BOT_WORK.readChars?`${u.slice(0,r.BOT_WORK.readChars)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[323625,e=>e.a(async(t,a)=>{try{var n=e.i(201356),i=e.i(91264),s=t([n]);[n]=s.then?(await s)():s;let r=(0,i.serverRoute)(()=>(0,n.readReachStatus)());e.s(["GET",0,r]),a()}catch(e){a(e)}},!1),996575,e=>{"use strict";var t=e.i(747909),a=e.i(174017),n=e.i(996250),i=e.i(759756),s=e.i(561916),r=e.i(174677),o=e.i(869741),l=e.i(316795),c=e.i(487718),d=e.i(995169),u=e.i(47587),p=e.i(666012),h=e.i(570101),f=e.i(626937),m=e.i(10372),g=e.i(193695);e.i(52474);var w=e.i(600220);let y=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/reach/route",pathname:"/api/reach",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/reach/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(323625),...{}}),{workAsyncStorage:v,workUnitAsyncStorage:_,serverHooks:b}=y;async function k(e,t,n){n.requestMeta&&(0,i.setRequestMeta)(e,n.requestMeta),y.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/reach/route";v=v.replace(/\/index$/,"")||"/";let _=await y.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!_)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:b,deploymentId:k,params:R,nextConfig:E,parsedUrl:S,isDraftMode:$,prerenderManifest:x,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:A,resolvedPathname:O,clientReferenceManifest:P,serverActionsManifest:N}=_,I=(0,o.normalizeAppPath)(v),q=!!(x.dynamicRoutes[I]||x.routes[O]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,S,!1):t.end("This page could not be found"),null);if(q&&!$){let e=!!x.routes[O],t=x.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await D();throw new g.NoFallbackError}}let M=null;!q||y.isDev||$||(M="/index"===(M=O)?"/":M);let L=!0===y.isDev||!q,H=q&&!L;N&&P&&(0,r.setManifestsSingleton)({page:v,clientReferenceManifest:P,serverActionsManifest:N});let U=e.method||"GET",j=(0,s.getTracer)(),F=j.getActiveScopeSpan(),B=!!(null==C?void 0:C.isWrappedByNextServer),K=!!(0,i.getRequestMeta)(e,"minimalMode"),G=(0,i.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,E,x,K);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let J={params:R,previewProps:x.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts,useCacheTimeout:E.experimental.useCacheTimeout},cacheComponents:!!E.cacheComponents,validationLevel:E.experimental.instantInsights.validationLevel,supportsDynamicResponse:L,incrementalCache:G,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:E.cacheLife,staticPageGenerationTimeout:E.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,n,i)=>y.onRequestError(e,t,n,i,C)},sharedContext:{buildId:b,deploymentId:k}},W=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),Y=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t)),V=async({previousCacheEntry:a})=>{try{if(!K&&T&&A&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await y.handle(Y,J);e.fetchMetrics=J.renderOpts.fetchMetrics;let s=J.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let r=J.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(W,z,i,s),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);r&&(t[m.NEXT_CACHE_TAGS_HEADER]=r),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,n=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==a&&a>0?E.expireTime:void 0:J.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==a?void 0:a.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),t}},X=async(i,r)=>{try{var o,l;let i=await y.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:A,responseGenerator:V,waitUntil:n.waitUntil,isMinimalMode:K});if(!q)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",T?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),$&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);K&&q||s.delete(m.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(W,z,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),q)throw t;await (0,p.sendResponse)(W,z,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route")||I,o=`${U} ${n}`;i.setAttributes({"next.route":n,"http.route":n,"next.span_name":o}),i.updateName(o),r&&r!==i&&(r.setAttribute("http.route",n),r.updateName(o))})()}};if(B&&F)await X(F,void 0);else{let t=j.getActiveScopeSpan();await j.withPropagatedContext(e.headers,()=>j.trace(d.BaseServerSpan.handleRequest,{spanName:`${U} ${v}`,kind:s.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},e=>X(e,t)),void 0,!B)}}e.s(["handler",0,k,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:v,workUnitAsyncStorage:_})},"routeModule",0,y,"serverHooks",0,b,"workAsyncStorage",0,v,"workUnitAsyncStorage",0,_])},864064,e=>{"use strict";e.s(["ChannelRefusal",0,class extends Error{}])},407723,e=>{"use strict";e.s(["inPieces",0,function(e,t){let a=[],n=e;for(;n.length>t;){let e=n.slice(0,t),i=Math.max(e.lastIndexOf("\n\n"),e.lastIndexOf("\n")),s=i>t/2?i:t;a.push(n.slice(0,s).trim()),n=n.slice(s).trim()}return n&&a.push(n),a},"runSocket",0,function(e,t,a){return new Promise((n,i)=>{let s=new WebSocket(e),r=e=>{s.readyState===WebSocket.OPEN&&s.send(JSON.stringify(e))},o=()=>s.close(1e3);a.addEventListener("abort",o,{once:!0}),s.addEventListener("message",e=>{try{t.message(JSON.parse(String(e.data)),r)}catch{}}),s.addEventListener("error",()=>{s.readyState!==WebSocket.OPEN&&i(Error(`Could not connect to ${new URL(e).host}`))}),s.addEventListener("close",e=>{a.removeEventListener("abort",o),n({code:e.code,reason:e.reason})})})}])},440219,e=>{"use strict";var t=e.i(864064),a=e.i(407723);let n={4004:"Discord did not take the bot token.",4013:"Discord refused the intents this bot asked for.",4014:"Discord refused an intent this bot is not allowed — check the bot's page."};e.s(["createDiscord",0,function(e){async function i(a,n,i){let s=i instanceof FormData,r=await fetch(`https://discord.com/api/v10${n}`,{method:a,headers:{authorization:`Bot ${e}`,...s||!i?{}:{"content-type":"application/json"}},body:s?i:i?JSON.stringify(i):void 0});if(r.ok)return 204===r.status?null:await r.json();let o=await r.json().catch(()=>null),l=o?.message??`Discord answered ${r.status}`;throw 401===r.status?new t.ChannelRefusal(l):Error(l)}let s=e=>{let t=e.length<=5?1:5,a=[];for(let n=0;n<e.length&&a.length<5;n+=t)a.push({type:1,components:e.slice(n,n+t).map(e=>({type:2,style:2,label:e.text.slice(0,80),custom_id:e.data}))});return a};return{async listen(s,r){let o,l=null;try{let c=await (0,a.runSocket)("wss://gateway.discord.gg/?v=10&encoding=json",{message(t,a){let{op:n,d:r,s:c,t:d}=t;if(null!==c&&(l=c),10===n){let t=r.heartbeat_interval;o=setInterval(()=>a({op:1,d:l}),t),a({op:2,d:{token:e,intents:4096,properties:{os:process.platform,browser:"thursday",device:"thursday"}}})}else if(1===n)a({op:1,d:l});else if(0===n&&"READY"===d)s.ready(r.user.username);else if(0===n&&d){var u,p;let e=(u=d,p=r,"MESSAGE_CREATE"===u?p.guild_id||p.author.bot?null:{kind:"message",chat:p.channel_id,name:p.author.global_name||p.author.username,words:p.content.trim(),files:(p.attachments??[]).map(e=>({name:e.filename,fetch:async()=>{let t=await fetch(e.url);if(!t.ok)throw Error(`Discord answered ${t.status} for the file`);return new File([await t.arrayBuffer()],e.filename,{type:e.content_type??""})}})),unreadable:!1}:"INTERACTION_CREATE"===u?3!==p.type||p.guild_id?null:(i("POST",`/interactions/${p.id}/${p.token}/callback`,{type:6}).catch(()=>{}),{kind:"press",chat:p.channel_id,data:p.data?.custom_id??"",under:p.message?{id:p.message.id,text:p.message.content}:null}):null);e&&s.incoming(e)}}},r),d=n[c.code];if(d)throw new t.ChannelRefusal(d);if(!r.aborted)throw Error(`Discord closed the connection (${c.code})`)}finally{clearInterval(o)}},async say(e,t,n){let r=(0,a.inPieces)(t,1900);for(let[t,a]of r.entries())await i("POST",`/channels/${e}/messages`,{content:a,...n?.length&&t===r.length-1?{components:s(n)}:{}})},async typing(e){await i("POST",`/channels/${e}/typing`).catch(()=>{})},async settle(e,t,a){await i("PATCH",`/channels/${e}/messages/${t}`,{content:a.slice(0,1900),components:[]}).catch(()=>{})},async sendFile(e,t,a){let n=new FormData;n.set("payload_json",JSON.stringify({attachments:[{id:0,filename:a}]})),n.set("files[0]",new Blob([t]),a),await i("POST",`/channels/${e}/messages`,n)}}}])},480604,e=>{"use strict";var t=e.i(864064),a=e.i(407723);let n="https://slack.com/api",i=new Set(["invalid_auth","not_authed","account_inactive","token_revoked","not_allowed_token_type","missing_scope"]);e.s(["createSlack",0,function(e,s){async function r(e,a,o=s){let l=await fetch(`${n}/${e}`,{method:"POST",headers:{authorization:`Bearer ${o}`,"content-type":"application/json; charset=utf-8"},body:JSON.stringify(a)}),c=await l.json().catch(()=>null);if(c?.ok)return c;let d=c?.error??`http_${l.status}`,u="missing_scope"===d?`Slack says the app lacks a permission (${c?.needed??"a scope"}) — make it from the manifest in the guide.`:`Slack answered ${d} to ${e}`;throw i.has(d)?new t.ChannelRefusal(u):Error(u)}let o=new Map;async function l(e){let t=o.get(e);if(t)return t;let a=await r("users.info",{user:e}).then(t=>t.user?.real_name||t.user?.name||e).catch(()=>e);return o.set(e,a),a}async function c(e,t){if("events_api"===e){let e=t.event??{},a=!e.subtype||"file_share"===e.subtype;return"message"===e.type&&"im"===e.channel_type&&a&&!e.bot_id&&e.user&&e.channel?{kind:"message",chat:e.channel,name:await l(e.user),words:(e.text??"").trim(),files:(e.files??[]).flatMap(e=>{let t=e.url_private_download;if(!t)return[];let a=e.name??"file";return[{name:a,fetch:async()=>{let n=await fetch(t,{headers:{authorization:`Bearer ${s}`}});if(!n.ok)throw Error(`Slack answered ${n.status} for the file`);return new File([await n.arrayBuffer()],a,{type:e.mimetype??""})}}]}),unreadable:!1}:null}return"interactive"===e&&"block_actions"===t.type?t.channel?.id?{kind:"press",chat:t.channel.id,data:t.actions?.[0]?.value??"",under:t.message?.ts&&t.message.text?{id:t.message.ts,text:t.message.text}:null}:null:null}return{async listen(t,n){let i=await r("auth.test",{}),{url:s}=await r("apps.connections.open",{},e);t.ready(i.user?`@${i.user}`:"the app");let o=await (0,a.runSocket)(s,{message(e,a){let{type:n,envelope_id:i,payload:s}=e;i&&a({envelope_id:i}),n&&s&&c(n,s).then(e=>{e&&t.incoming(e)})}},n);if(!n.aborted)throw Error(`Slack closed the connection (${o.code})`)},async say(e,t,n){let i=(0,a.inPieces)(t,2900);for(let[t,a]of i.entries()){let s=n?.length&&t===i.length-1;await r("chat.postMessage",{channel:e,text:a,unfurl_links:!1,...s?{blocks:[{type:"section",text:{type:"plain_text",text:a}},{type:"actions",elements:n.slice(0,25).map((e,t)=>({type:"button",action_id:`choice_${t}`,text:{type:"plain_text",text:e.text.slice(0,75)},value:e.data}))}]}:{}})}},async typing(){},async settle(e,t,a){await r("chat.update",{channel:e,ts:t,text:a.slice(0,2900),blocks:[]}).catch(()=>{})},async sendFile(e,t,a){let i=new URLSearchParams({filename:a,length:String(t.byteLength)}),o=await fetch(`${n}/files.getUploadURLExternal`,{method:"POST",headers:{authorization:`Bearer ${s}`},body:i}),l=await o.json();if(!l.ok||!l.upload_url||!l.file_id)throw Error(`Slack answered ${l.error??o.status} to the upload`);await fetch(l.upload_url,{method:"POST",body:new Blob([t])}),await r("files.completeUploadExternal",{files:[{id:l.file_id,title:a}],channel_id:e})}}}])},377858,e=>{"use strict";var t=e.i(687388),a=e.i(864064);let n="https://api.telegram.org";e.s(["createTelegram",0,function(e){async function i(t,i,s){let r=i instanceof FormData,o=await fetch(`${n}/bot${e}/${t}`,{method:"POST",signal:s,...r?{body:i}:{headers:{"content-type":"application/json"},body:JSON.stringify(i??{})}}),l=await o.json().catch(()=>null);if(l?.ok)return l.result;let c=l?.description??`Telegram answered ${o.status}`;throw 401===o.status?new a.ChannelRefusal(c):Error(c)}async function s(t,a,s){let{file_path:r}=await i("getFile",{file_id:t});if(!r)throw Error("Telegram did not say where the file is");let o=await fetch(`${n}/file/bot${e}/${r}`);if(!o.ok)throw Error(`Telegram answered ${o.status} for the file`);let l=r.includes(".")?r.slice(r.lastIndexOf(".")):"";return new File([await o.arrayBuffer()],a.includes(".")?a:`${a}${l}`,s?{type:s}:void 0)}return{async listen(e,a){let n=await i("getMe",void 0,a);e.ready(n.username?`@${n.username}`:n.first_name??"the bot");let r=0;for(;!a.aborted;)for(let n of(await i("getUpdates",{offset:r,timeout:t.REACH.pollSeconds,allowed_updates:["message","callback_query"]},AbortSignal.any([a,AbortSignal.timeout((t.REACH.pollSeconds+15)*1e3)])))){r=n.update_id+1;let t=function(e){let t,a=e.callback_query;if(a)return i("answerCallbackQuery",{callback_query_id:a.id}).catch(()=>{}),{kind:"press",chat:String(a.from.id),data:a.data??"",under:a.message?.text?{id:String(a.message.message_id),text:a.message.text}:null};let n=e.message;if(!n?.from||"private"!==n.chat.type)return null;let r=n.photo?.at(-1),o=n.document?{id:n.document.file_id,name:n.document.file_name??"file",type:n.document.mime_type}:r?{id:r.file_id,name:`photo-${n.message_id}`,type:""}:null;return{kind:"message",chat:String(n.chat.id),name:(t=n.from,[t?.first_name,t?.last_name].filter(Boolean).join(" ")||(t?.username?`@${t.username}`:"Someone")),words:(n.text??n.caption??"").trim(),files:o?[{name:o.name,fetch:()=>s(o.id,o.name,o.type)}]:[],unreadable:!!(n.voice||n.audio||n.video)}}(n);t&&e.incoming(t)}},async say(e,t,a){await i("sendMessage",{chat_id:e,text:t,link_preview_options:{is_disabled:!0},...a?.length?{reply_markup:{inline_keyboard:a.map(e=>[{text:e.text,callback_data:e.data}])}}:{}})},async typing(e){await i("sendChatAction",{chat_id:e,action:"typing"}).catch(()=>{})},async settle(e,t,a){await i("editMessageText",{chat_id:e,message_id:Number(t),text:a,link_preview_options:{is_disabled:!0}}).catch(()=>{})},async sendFile(e,t,a,n){let s=new FormData;s.set("chat_id",e),s.set(n?"photo":"document",new Blob([t]),a),await i(n?"sendPhoto":"sendDocument",s)}}}])},201356,e=>e.a(async(t,a)=>{try{e.i(912714),e.i(380690),e.i(687388);var n=e.i(386075),i=e.i(39803),s=e.i(742712),r=e.i(378884),o=e.i(340698);e.i(15538);var l=e.i(22676);e.i(134344);var c=e.i(97334);e.i(629668),e.i(786025),e.i(440998),e.i(640911),e.i(440219);var d=e.i(834332);e.i(480604),e.i(377858);var u=t([n,i,s,r,o,l,c]);[n,i,s,r,o,l,c]=u.then?(await u)():u;let f=globalThis,m=f.__reach??={live:new Map,last:null,told:new Set,due:new Map,choices:new Map,listening:null,looking:null};async function p(e){let t=await (0,o.readConfig)((0,d.reachPersonKey)(e));if(!t)return null;try{let e=JSON.parse(t);return"string"==typeof e.chat&&"string"==typeof e.name?{chat:e.chat,name:e.name}:null}catch{return null}}async function h(){return{channels:await Promise.all([...m.live.values()].map(async e=>({name:e.name,bot:e.bot,allowed:await p(e.name),asking:e.asking,problem:e.problem})))}}e.s(["readReachStatus",0,h]),a()}catch(e){a(e)}},!1),15538,e=>{"use strict";var t=e.i(687388),a=e.i(944971),n=e.i(704161);let i={message:"says",question:"asks",report:"reports",interrupted:"was cut off"},s={question:0,stopped:1,done:2,progress:3};function r(e){let a=e.trim();if(a.length<=t.CALL_RELAY.chars)return a;let n=a.slice(0,t.CALL_RELAY.chars),i=Math.max(n.lastIndexOf("\n\n"),n.lastIndexOf(". "),n.lastIndexOf(".\n"),n.lastIndexOf("。")),s=(i>t.CALL_RELAY.chars/3?n.slice(0,i+1):n).trim();return`${s}
|
|
1
|
+
module.exports=[323625,e=>e.a(async(t,a)=>{try{var n=e.i(201356),i=e.i(91264),s=t([n]);[n]=s.then?(await s)():s;let r=(0,i.serverRoute)(()=>(0,n.readReachStatus)());e.s(["GET",0,r]),a()}catch(e){a(e)}},!1),996575,e=>{"use strict";var t=e.i(747909),a=e.i(174017),n=e.i(996250),i=e.i(759756),s=e.i(561916),r=e.i(174677),o=e.i(869741),l=e.i(316795),c=e.i(487718),d=e.i(995169),u=e.i(47587),p=e.i(666012),h=e.i(570101),f=e.i(626937),m=e.i(10372),g=e.i(193695);e.i(52474);var w=e.i(600220);let y=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/reach/route",pathname:"/api/reach",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/reach/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(323625),...{}}),{workAsyncStorage:_,workUnitAsyncStorage:v,serverHooks:b}=y;async function k(e,t,n){n.requestMeta&&(0,i.setRequestMeta)(e,n.requestMeta),y.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let _="/api/reach/route";_=_.replace(/\/index$/,"")||"/";let v=await y.prepare(e,t,{srcPage:_,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:b,deploymentId:k,params:R,nextConfig:E,parsedUrl:S,isDraftMode:$,prerenderManifest:x,routerServerContext:C,isOnDemandRevalidate:T,revalidateOnlyGenerated:A,resolvedPathname:O,clientReferenceManifest:P,serverActionsManifest:N}=v,I=(0,o.normalizeAppPath)(_),q=!!(x.dynamicRoutes[I]||x.routes[O]),D=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,S,!1):t.end("This page could not be found"),null);if(q&&!$){let e=!!x.routes[O],t=x.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await D();throw new g.NoFallbackError}}let M=null;!q||y.isDev||$||(M="/index"===(M=O)?"/":M);let L=!0===y.isDev||!q,H=q&&!L;N&&P&&(0,r.setManifestsSingleton)({page:_,clientReferenceManifest:P,serverActionsManifest:N});let U=e.method||"GET",j=(0,s.getTracer)(),F=j.getActiveScopeSpan(),B=!!(null==C?void 0:C.isWrappedByNextServer),K=!!(0,i.getRequestMeta)(e,"minimalMode"),G=(0,i.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,E,x,K);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let J={params:R,previewProps:x.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts,useCacheTimeout:E.experimental.useCacheTimeout},cacheComponents:!!E.cacheComponents,validationLevel:E.experimental.instantInsights.validationLevel,supportsDynamicResponse:L,incrementalCache:G,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:E.cacheLife,staticPageGenerationTimeout:E.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,n,i)=>y.onRequestError(e,t,n,i,C)},sharedContext:{buildId:b,deploymentId:k}},W=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),Y=c.NextRequestAdapter.fromNodeNextRequest(W,(0,c.signalFromNodeResponse)(t)),V=async({previousCacheEntry:a})=>{try{if(!K&&T&&A&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await y.handle(Y,J);e.fetchMetrics=J.renderOpts.fetchMetrics;let s=J.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let r=J.renderOpts.collectedTags;if(!q)return await (0,p.sendResponse)(W,z,i,s),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);r&&(t[m.NEXT_CACHE_TAGS_HEADER]=r),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,n=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==a&&a>0?E.expireTime:void 0:J.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==a?void 0:a.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),t}},X=async(i,r)=>{try{var o,l;let i=await y.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:A,responseGenerator:V,waitUntil:n.waitUntil,isMinimalMode:K});if(!q)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",T?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),$&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);K&&q||s.delete(m.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(W,z,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:T})},!1,C),q)throw t;await (0,p.sendResponse)(W,z,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route")||I,o=`${U} ${n}`;i.setAttributes({"next.route":n,"http.route":n,"next.span_name":o}),i.updateName(o),r&&r!==i&&(r.setAttribute("http.route",n),r.updateName(o))})()}};if(B&&F)await X(F,void 0);else{let t=j.getActiveScopeSpan();await j.withPropagatedContext(e.headers,()=>j.trace(d.BaseServerSpan.handleRequest,{spanName:`${U} ${_}`,kind:s.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},e=>X(e,t)),void 0,!B)}}e.s(["handler",0,k,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:v})},"routeModule",0,y,"serverHooks",0,b,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,v])},864064,e=>{"use strict";e.s(["ChannelRefusal",0,class extends Error{}])},407723,e=>{"use strict";e.s(["inPieces",0,function(e,t){let a=[],n=e;for(;n.length>t;){let e=n.slice(0,t),i=Math.max(e.lastIndexOf("\n\n"),e.lastIndexOf("\n")),s=i>t/2?i:t;a.push(n.slice(0,s).trim()),n=n.slice(s).trim()}return n&&a.push(n),a},"runSocket",0,function(e,t,a){return new Promise((n,i)=>{let s=new WebSocket(e),r=e=>{s.readyState===WebSocket.OPEN&&s.send(JSON.stringify(e))},o=()=>s.close(1e3);a.addEventListener("abort",o,{once:!0}),s.addEventListener("message",e=>{try{t.message(JSON.parse(String(e.data)),r)}catch{}}),s.addEventListener("error",()=>{s.readyState!==WebSocket.OPEN&&i(Error(`Could not connect to ${new URL(e).host}`))}),s.addEventListener("close",e=>{a.removeEventListener("abort",o),n({code:e.code,reason:e.reason})})})}])},440219,e=>{"use strict";var t=e.i(864064),a=e.i(407723);let n={4004:"Discord did not take the bot token.",4013:"Discord refused the intents this bot asked for.",4014:"Discord refused an intent this bot is not allowed — check the bot's page."};e.s(["createDiscord",0,function(e){async function i(a,n,i){let s=i instanceof FormData,r=await fetch(`https://discord.com/api/v10${n}`,{method:a,headers:{authorization:`Bot ${e}`,...s||!i?{}:{"content-type":"application/json"}},body:s?i:i?JSON.stringify(i):void 0});if(r.ok)return 204===r.status?null:await r.json();let o=await r.json().catch(()=>null),l=o?.message??`Discord answered ${r.status}`;throw 401===r.status?new t.ChannelRefusal(l):Error(l)}let s=e=>{let t=e.length<=5?1:5,a=[];for(let n=0;n<e.length&&a.length<5;n+=t)a.push({type:1,components:e.slice(n,n+t).map(e=>({type:2,style:2,label:e.text.slice(0,80),custom_id:e.data}))});return a};return{async listen(s,r){let o,l=null;try{let c=await (0,a.runSocket)("wss://gateway.discord.gg/?v=10&encoding=json",{message(t,a){let{op:n,d:r,s:c,t:d}=t;if(null!==c&&(l=c),10===n){let t=r.heartbeat_interval;o=setInterval(()=>a({op:1,d:l}),t),a({op:2,d:{token:e,intents:4096,properties:{os:process.platform,browser:"thursday",device:"thursday"}}})}else if(1===n)a({op:1,d:l});else if(0===n&&"READY"===d)s.ready(r.user.username);else if(0===n&&d){var u,p;let e=(u=d,p=r,"MESSAGE_CREATE"===u?p.guild_id||p.author.bot?null:{kind:"message",chat:p.channel_id,name:p.author.global_name||p.author.username,words:p.content.trim(),files:(p.attachments??[]).map(e=>({name:e.filename,fetch:async()=>{let t=await fetch(e.url);if(!t.ok)throw Error(`Discord answered ${t.status} for the file`);return new File([await t.arrayBuffer()],e.filename,{type:e.content_type??""})}})),unreadable:!1}:"INTERACTION_CREATE"===u?3!==p.type||p.guild_id?null:(i("POST",`/interactions/${p.id}/${p.token}/callback`,{type:6}).catch(()=>{}),{kind:"press",chat:p.channel_id,data:p.data?.custom_id??"",under:p.message?{id:p.message.id,text:p.message.content}:null}):null);e&&s.incoming(e)}}},r),d=n[c.code];if(d)throw new t.ChannelRefusal(d);if(!r.aborted)throw Error(`Discord closed the connection (${c.code})`)}finally{clearInterval(o)}},async say(e,t,n){let r=(0,a.inPieces)(t,1900);for(let[t,a]of r.entries())await i("POST",`/channels/${e}/messages`,{content:a,...n?.length&&t===r.length-1?{components:s(n)}:{}})},async typing(e){await i("POST",`/channels/${e}/typing`).catch(()=>{})},async settle(e,t,a){await i("PATCH",`/channels/${e}/messages/${t}`,{content:a.slice(0,1900),components:[]}).catch(()=>{})},async sendFile(e,t,a){let n=new FormData;n.set("payload_json",JSON.stringify({attachments:[{id:0,filename:a}]})),n.set("files[0]",new Blob([t]),a),await i("POST",`/channels/${e}/messages`,n)}}}])},480604,e=>{"use strict";var t=e.i(864064),a=e.i(407723);let n="https://slack.com/api",i=new Set(["invalid_auth","not_authed","account_inactive","token_revoked","not_allowed_token_type","missing_scope"]);e.s(["createSlack",0,function(e,s){async function r(e,a,o=s){let l=await fetch(`${n}/${e}`,{method:"POST",headers:{authorization:`Bearer ${o}`,"content-type":"application/json; charset=utf-8"},body:JSON.stringify(a)}),c=await l.json().catch(()=>null);if(c?.ok)return c;let d=c?.error??`http_${l.status}`,u="missing_scope"===d?`Slack says the app lacks a permission (${c?.needed??"a scope"}) — make it from the manifest in the guide.`:`Slack answered ${d} to ${e}`;throw i.has(d)?new t.ChannelRefusal(u):Error(u)}let o=new Map;async function l(e){let t=o.get(e);if(t)return t;let a=await r("users.info",{user:e}).then(t=>t.user?.real_name||t.user?.name||e).catch(()=>e);return o.set(e,a),a}async function c(e,t){if("events_api"===e){let e=t.event??{},a=!e.subtype||"file_share"===e.subtype;return"message"===e.type&&"im"===e.channel_type&&a&&!e.bot_id&&e.user&&e.channel?{kind:"message",chat:e.channel,name:await l(e.user),words:(e.text??"").trim(),files:(e.files??[]).flatMap(e=>{let t=e.url_private_download;if(!t)return[];let a=e.name??"file";return[{name:a,fetch:async()=>{let n=await fetch(t,{headers:{authorization:`Bearer ${s}`}});if(!n.ok)throw Error(`Slack answered ${n.status} for the file`);return new File([await n.arrayBuffer()],a,{type:e.mimetype??""})}}]}),unreadable:!1}:null}return"interactive"===e&&"block_actions"===t.type?t.channel?.id?{kind:"press",chat:t.channel.id,data:t.actions?.[0]?.value??"",under:t.message?.ts&&t.message.text?{id:t.message.ts,text:t.message.text}:null}:null:null}return{async listen(t,n){let i=await r("auth.test",{}),{url:s}=await r("apps.connections.open",{},e);t.ready(i.user?`@${i.user}`:"the app");let o=await (0,a.runSocket)(s,{message(e,a){let{type:n,envelope_id:i,payload:s}=e;i&&a({envelope_id:i}),n&&s&&c(n,s).then(e=>{e&&t.incoming(e)})}},n);if(!n.aborted)throw Error(`Slack closed the connection (${o.code})`)},async say(e,t,n){let i=(0,a.inPieces)(t,2900);for(let[t,a]of i.entries()){let s=n?.length&&t===i.length-1;await r("chat.postMessage",{channel:e,text:a,unfurl_links:!1,...s?{blocks:[{type:"section",text:{type:"plain_text",text:a}},{type:"actions",elements:n.slice(0,25).map((e,t)=>({type:"button",action_id:`choice_${t}`,text:{type:"plain_text",text:e.text.slice(0,75)},value:e.data}))}]}:{}})}},async typing(){},async settle(e,t,a){await r("chat.update",{channel:e,ts:t,text:a.slice(0,2900),blocks:[]}).catch(()=>{})},async sendFile(e,t,a){let i=new URLSearchParams({filename:a,length:String(t.byteLength)}),o=await fetch(`${n}/files.getUploadURLExternal`,{method:"POST",headers:{authorization:`Bearer ${s}`},body:i}),l=await o.json();if(!l.ok||!l.upload_url||!l.file_id)throw Error(`Slack answered ${l.error??o.status} to the upload`);await fetch(l.upload_url,{method:"POST",body:new Blob([t])}),await r("files.completeUploadExternal",{files:[{id:l.file_id,title:a}],channel_id:e})}}}])},377858,e=>{"use strict";var t=e.i(687388),a=e.i(864064);let n="https://api.telegram.org";e.s(["createTelegram",0,function(e){async function i(t,i,s){let r=i instanceof FormData,o=await fetch(`${n}/bot${e}/${t}`,{method:"POST",signal:s,...r?{body:i}:{headers:{"content-type":"application/json"},body:JSON.stringify(i??{})}}),l=await o.json().catch(()=>null);if(l?.ok)return l.result;let c=l?.description??`Telegram answered ${o.status}`;throw 401===o.status?new a.ChannelRefusal(c):Error(c)}async function s(t,a,s){let{file_path:r}=await i("getFile",{file_id:t});if(!r)throw Error("Telegram did not say where the file is");let o=await fetch(`${n}/file/bot${e}/${r}`);if(!o.ok)throw Error(`Telegram answered ${o.status} for the file`);let l=r.includes(".")?r.slice(r.lastIndexOf(".")):"";return new File([await o.arrayBuffer()],a.includes(".")?a:`${a}${l}`,s?{type:s}:void 0)}return{async listen(e,a){let n=await i("getMe",void 0,a);e.ready(n.username?`@${n.username}`:n.first_name??"the bot");let r=0;for(;!a.aborted;)for(let n of(await i("getUpdates",{offset:r,timeout:t.REACH.pollSeconds,allowed_updates:["message","callback_query"]},AbortSignal.any([a,AbortSignal.timeout((t.REACH.pollSeconds+15)*1e3)])))){r=n.update_id+1;let t=function(e){let t,a=e.callback_query;if(a)return i("answerCallbackQuery",{callback_query_id:a.id}).catch(()=>{}),{kind:"press",chat:String(a.from.id),data:a.data??"",under:a.message?.text?{id:String(a.message.message_id),text:a.message.text}:null};let n=e.message;if(!n?.from||"private"!==n.chat.type)return null;let r=n.photo?.at(-1),o=n.document?{id:n.document.file_id,name:n.document.file_name??"file",type:n.document.mime_type}:r?{id:r.file_id,name:`photo-${n.message_id}`,type:""}:null;return{kind:"message",chat:String(n.chat.id),name:(t=n.from,[t?.first_name,t?.last_name].filter(Boolean).join(" ")||(t?.username?`@${t.username}`:"Someone")),words:(n.text??n.caption??"").trim(),files:o?[{name:o.name,fetch:()=>s(o.id,o.name,o.type)}]:[],unreadable:!!(n.voice||n.audio||n.video)}}(n);t&&e.incoming(t)}},async say(e,t,a){await i("sendMessage",{chat_id:e,text:t,link_preview_options:{is_disabled:!0},...a?.length?{reply_markup:{inline_keyboard:a.map(e=>[{text:e.text,callback_data:e.data}])}}:{}})},async typing(e){await i("sendChatAction",{chat_id:e,action:"typing"}).catch(()=>{})},async settle(e,t,a){await i("editMessageText",{chat_id:e,message_id:Number(t),text:a,link_preview_options:{is_disabled:!0}}).catch(()=>{})},async sendFile(e,t,a,n){let s=new FormData;s.set("chat_id",e),s.set(n?"photo":"document",new Blob([t]),a),await i(n?"sendPhoto":"sendDocument",s)}}}])},201356,e=>e.a(async(t,a)=>{try{e.i(912714),e.i(380690),e.i(687388),e.i(911757);var n=e.i(386075),i=e.i(39803),s=e.i(742712),r=e.i(378884),o=e.i(340698);e.i(15538);var l=e.i(22676),c=e.i(97334);e.i(629668),e.i(786025),e.i(440998),e.i(640911),e.i(440219);var d=e.i(834332);e.i(480604),e.i(377858);var u=t([n,i,s,r,o,l,c]);[n,i,s,r,o,l,c]=u.then?(await u)():u;let f=globalThis,m=f.__reach??={live:new Map,last:null,told:new Set,due:new Map,choices:new Map,listening:null,looking:null};async function p(e){let t=await (0,o.readConfig)((0,d.reachPersonKey)(e));if(!t)return null;try{let e=JSON.parse(t);return"string"==typeof e.chat&&"string"==typeof e.name?{chat:e.chat,name:e.name}:null}catch{return null}}async function h(){return{channels:await Promise.all([...m.live.values()].map(async e=>({name:e.name,bot:e.bot,allowed:await p(e.name),asking:e.asking,problem:e.problem})))}}e.s(["readReachStatus",0,h]),a()}catch(e){a(e)}},!1),15538,e=>{"use strict";var t=e.i(687388),a=e.i(944971),n=e.i(704161);let i={message:"says",question:"asks",report:"reports",interrupted:"was cut off"},s={question:0,stopped:1,done:2,progress:3};function r(e){let a=e.trim();if(a.length<=t.CALL_RELAY.chars)return a;let n=a.slice(0,t.CALL_RELAY.chars),i=Math.max(n.lastIndexOf("\n\n"),n.lastIndexOf(". "),n.lastIndexOf(".\n"),n.lastIndexOf("。")),s=(i>t.CALL_RELAY.chars/3?n.slice(0,i+1):n).trim();return`${s}
|
|
2
2
|
[The message goes on; the rest is in its thread on screen.]`}e.s(["openWork",0,function(e){let t=[];for(let o of e){let{relays:e,questions:l}=o.room,c=(0,n.toDate)(o.updatedAt).getTime(),d=(e,t)=>`[${e} → Thursday, thread "${o.label}" (${o.id}), ${t}.]`,u=(e,t)=>({kind:"relay",name:o.label,line:t,done:!0,bot:e});for(let a of l){let n=a.options?.length?` Options: ${a.options.join(" / ")}.`:"";t.push({rank:s.question,key:`question:${a.id}`,kind:"question",line:`${d(a.bot,"question")}
|
|
3
3
|
${r(a.text)}${n}`,relayIds:e.filter(e=>e.messageId===a.id).map(e=>e.id),show:u(a.bot,`${a.bot} asks`)})}let p=e.filter(e=>!l.some(t=>t.id===e.messageId)),h="done"===o.status,f="waiting"===o.status&&(0,a.isAppStop)(o.ask)&&!o.ask?.auto;if(h||f){if(o.seen)continue;let e=f?"stopped":"done",a="stopped"===e?`It stopped before finishing. Where it got to: ${r(o.ask?.question??o.outcome??"")}`:`Done. Its answer: ${r(o.outcome??"")}`;t.push({rank:s[e],key:`${e}:${o.id}@${c}`,kind:"ending",line:`${d(o.bot,e)}
|
|
4
4
|
${a}`,relayIds:p.map(e=>e.id),show:u(o.bot,"stopped"===e?`${o.bot} stopped`:`${o.bot} finished`)});continue}for(let e of p)t.push({rank:s.progress,key:`progress:${e.id}`,kind:"progress",line:`${d(e.bot,e.kind)}
|