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
|
@@ -71,7 +71,7 @@ ${(0,f.botGuideLine)()}`};a.s(["buildThreadOpening",0,function(a){if(a.routine){
|
|
|
71
71
|
|
|
72
72
|
${a.request.trim()}`}]}let b="user"===a.from?"The user":"Thursday";return[{type:"text",text:`You are ${a.bot}. ${b} hands you this thread${"user"===a.from?" on screen":" during a call"}.`},{type:"text",text:`## ${b} → ${a.bot}: the job
|
|
73
73
|
|
|
74
|
-
${a.request.trim()}`}]},"loadBotPrompt",0,v]),c()}catch(a){c(a)}},!1),938934,a=>{"use strict";var b=a.i(12208),c=a.i(868468),d=a.i(569572),e=a.i(762008),f=a.i(626550),g=a.i(706210),h=a.i(176668),i=a.i(987674),j=a.i(182248);let k=(a=new Date)=>`${(0,b.format)(a,"yyyy-MM-dd (EEE) HH:mm")} ${Intl.DateTimeFormat().resolvedOptions().timeZone}`,l=(a=new Date)=>`**Now**: ${k(a)}`,m=a=>`${(0,b.format)(a,"yyyy-MM-dd (EEE) HH:mm")} (${(0,c.formatDistanceToNowStrict)(a,{addSuffix:!0})})`,n={[e.STUDIO_TOOLS.generate_image]:"images",[e.STUDIO_TOOLS.generate_speech]:"speech",[e.STUDIO_TOOLS.transcribe]:"transcription",[e.STUDIO_TOOLS.generate_video]:"video"};a.s(["botWorkHead",0,function(a,d){let e=(0,c.formatDistanceToNowStrict)(a.updatedAt,{addSuffix:!0}),f="running"===a.status?`running, last moved ${e}`:a.asking?`waiting on the user's answer since ${e}`:"waiting"===a.status?`stopped ${e}, not finished`:`${"done"===a.status?"ended":"stopped by the user"} ${(0,b.format)(a.updatedAt,"yyyy-MM-dd")}`;return`"${a.label}" — ${a.owner===d?"yours":`${a.owner}'s`} — ${f}`},"
|
|
74
|
+
${a.request.trim()}`}]},"loadBotPrompt",0,v]),c()}catch(a){c(a)}},!1),938934,a=>{"use strict";var b=a.i(12208),c=a.i(868468),d=a.i(569572),e=a.i(762008),f=a.i(626550),g=a.i(706210),h=a.i(176668),i=a.i(987674),j=a.i(182248);let k=(a=new Date)=>`${(0,b.format)(a,"yyyy-MM-dd (EEE) HH:mm")} ${Intl.DateTimeFormat().resolvedOptions().timeZone}`,l=(a=new Date)=>`**Now**: ${k(a)}`,m=a=>`${(0,b.format)(a,"yyyy-MM-dd (EEE) HH:mm")} (${(0,c.formatDistanceToNowStrict)(a,{addSuffix:!0})})`,n={[e.STUDIO_TOOLS.generate_image]:"images",[e.STUDIO_TOOLS.generate_speech]:"speech",[e.STUDIO_TOOLS.transcribe]:"transcription",[e.STUDIO_TOOLS.generate_video]:"video"};a.s(["botWorkHead",0,function(a,d){let e=(0,c.formatDistanceToNowStrict)(a.updatedAt,{addSuffix:!0}),f="running"===a.status?`running, last moved ${e}`:a.asking?`waiting on the user's answer since ${e}`:"waiting"===a.status?`stopped ${e}, not finished`:`${"done"===a.status?"ended":"stopped by the user"} ${(0,b.format)(a.updatedAt,"yyyy-MM-dd")}`;return`"${a.label}" — ${a.owner===d?"yours":`${a.owner}'s`} — ${f}`},"callStamp",0,m,"carriedLines",0,(a,b={})=>a.map(a=>`- ${a.text} \xb7 ${a.path}${!1===b.ids?"":` #${a.id}`}`).join("\n"),"clockNow",0,k,"conversationLines",0,a=>a.map(a=>"tool"===a.role?`you → ${a.tool??"tool"}`:`${"user"===a.role?"user":"you"}: ${a.text}`).join("\n"),"expandedFacts",0,function(a,b){let c=a.filter(a=>b.has(a.id)),e=a.filter(a=>!b.has(a.id)),f=Math.max(0,d.MEMORY_LIMITS.expanded-c.length),g=new Set([...c,...e.slice(Math.max(0,e.length-f))].map(a=>a.id)),h=a.filter(a=>g.has(a.id));return{shown:h,hidden:a.length-h.length}},"logPromptSize",0,function(a,b){let c=(0,i.sectionTokens)(b),e=c.reduce((a,b)=>a+b.tokens,0);h.logger.debug(`${a} prompt ${e} tokens — ${c.map(a=>`${a.name} ${a.tokens}`).join(", ")}`);let f=c[0];e>d.PROMPT_BUDGET&&f&&h.logger.warn(`${a} prompt is ${e} tokens, over ${d.PROMPT_BUDGET}: ${f.name} carries ${f.tokens} of it. Every call and every job pays this.`)},"mcpToolLines",0,function(a){let b=new Map;for(let c of a){let a=b.get(c.server);a?a.push(c.name):b.set(c.server,[c.name])}return[...b].map(([a,b])=>`- **${a}**: ${b.join(", ")}`).join("\n")},"noteLines",0,function(a,b=!1){return a.length?a.map(a=>{var c;let d,e=a.aliases?.length?` ${a.aliases.map(a=>`"${a}"`).join(" ")}`:"",f=b?` \xb7 ${c=a.lastSeenAt,(d=Math.floor((Date.now()-(0,g.toDate)(c).getTime())/864e5))>=365?`${Math.floor(d/365)}y`:d>=30?`${Math.floor(d/30)}mo`:`${Math.max(d,0)}d`}`:"";return`- ${a.path} — ${a.description?.trim()} (${a.factCount})${e}${f}`}).join("\n"):"(nothing saved yet)"},"nowLine",0,l,"reachNames",0,function(a,b){let c=b.map(a=>a.server===d.STUDIO_SERVER?n[a.name]??a.name:a.server);return[...new Set([...a.map(a=>a.name),...c])].join(", ")},"recentCallLines",0,function(a,b){let c=[],g=0;a:for(let h=a.length-1;h>=0;h--){let k=a[h];for(let a=k.turns.length-1;a>=0;a--){let h=function(a,b){if("tool"!==a.role)return`${"user"===a.role?"user":"you"}: ${a.text}`;let c=(0,f.searchOf)(a.tool,a.text);if(c){let b=[...new Set(c.sources.flatMap(a=>{try{return[new URL(a.url).hostname.replace(/^www\./,"")]}catch{return[]}}))];return`you → ${a.tool} "${(0,j.clip)(c.query??"",d.PROMPT_LINE.toolArgs)}"${b.length?` — ${b.join(", ")}`:""}`}let g=`you → ${a.tool??"tool"} ${(0,j.clip)(a.text,d.PROMPT_LINE.toolArgs)}`;if(a.tool!==e.TOOL_NAMES.thread_start)return g;let h=(0,f.startedLabel)(a.tool,a.text),i=h?b.jobs?.find(a=>a.label===h):void 0;if(!i)return g;let k=i.outcome?`: ${(0,j.clip)(i.outcome,d.PROMPT_LINE.jobOutcome)}`:"";return`you → ${a.tool} "${i.label}" (${i.id}) — ${i.status}${k}`}(k.turns[a],k),l=(0,i.estimateTokens)(h)+3;if(g+l>b&&c.length)break a;g+=l,c.push({call:k,line:h})}}c.reverse();let h=[],k=null;for(let{call:a,line:b}of c)a!==k&&(k=a,h.push(`### ${m(a.startedAt)}`)),h.push(b);return h.join("\n")},"saidStamp",0,a=>(0,b.format)(a,"yyyy-MM-dd (EEE) HH:mm"),"skillLines",0,(a,b={})=>a.map(a=>{var c;let e,f;return`- **${a.name}**: ${b.short?(c=a.description,e=d.PROMPT_LINE.skill,(f=c.trim().split(/(?<=[.。])\s|\n/)[0].trim()).length>e?`${f.slice(0,e).trim()}…`:f):a.description}`}).join("\n"),"thursdayIdentity",0,(a=new Date)=>`You are Thursday, this user's own personal assistant, on their side, modeled on Friday, the AI in *Iron Man*. ${l(a)}
|
|
75
75
|
|
|
76
76
|
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,a=>({crowded:a.reduce((a,b)=>a+b.factCount,0)>d.MEMORY_LIMITS.facts,heavy:a.filter(a=>a.factCount>d.MEMORY_LIMITS.factsPerNote)})])},978876,a=>a.a(async(b,c)=>{try{var d=a.i(527990),e=a.i(794219),f=a.i(569572),g=a.i(938934),h=a.i(762008),i=a.i(446957),j=a.i(109955),k=a.i(344853),l=a.i(182248),m=b([k]);[k]=m.then?(await m)():m;let o=e.string().describe("The thread, by its label or its id."),p={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:e.object({bot:e.string().describe("A name from the bot list."),request:e.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:e.string().describe("Two or three words naming the thread, in the user's language. Used on screen and said out loud.")})},q={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:e.object({thread:o,words:e.string().describe("What to tell its bot, in the user's language and words.")})},r={description:`Answer a question a bot asked the user. Only for a question that is waiting; anything else said to a thread is \`${h.TOOL_NAMES.thread_tell}\`.`,parameters:e.object({thread:o,bot:e.string().describe("The bot that asked."),answer:e.string().describe("The user's answer, in their words.")})},s={description:`Read threads as they are now. "all" lists up to ${f.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:e.object({thread:e.string().describe('"all", or one thread by its label or its id.')})},t={description:"Stop a thread for good. It cannot be taken back.",parameters:e.object({thread:o})},u={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:e.object({thread:o})},v={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:e.object({thread:o})},w={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:j.RoomMessageSchema.extend({kind:j.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:j.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:e.string().trim().min(1).describe("Choose a bot from the roster, or Thursday to reach the user."),text:e.string().trim().min(1).describe("Write the message and include the context the recipient needs."),replyTo:e.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.")})},x={description:"Open one of your other threads whole: what you were asked there and your last words in full.",parameters:e.object({id:e.string().describe("The id in brackets on its line under Your other threads.")})};async function n(a,b){let c=await (0,k.listBotWork)(a,b),e=[...c.open,...c.recent];if(!e.some(a=>a.cut))return{};let j=new Set;return{[h.TOOL_NAMES.thread_recall]:(0,d.tool)({description:x.description,inputSchema:x.parameters,execute:async({id:b})=>{let c=b.trim().replace(/^\[|\]$/g,"").toLowerCase(),d=e.find(a=>c.length>=4&&(a.id.startsWith(c)||a.label.toLowerCase()===c));if(!d)return`No thread "${b}" on your list. The ids there: ${e.filter(a=>a.cut).map(a=>(0,i.workHandle)(a.id)).join(", ")}.`;if(!d.cut)return"Its line already shows all of it.";if(j.has(d.id))return"Already opened above, this turn.";if(j.size>=f.BOT_WORK.reads)return`${f.BOT_WORK.reads} threads are open already this turn. Carry on with what you have.`;j.add(d.id);let h=await (0,k.readBotAsk)(a,d),m=d.said??"";return[(0,g.botWorkHead)(d,a),h?`You were asked: ${(0,l.clip)(h,f.BOT_WORK.asked)}`:"",`Your last words there:
|
|
77
77
|
${m.length>f.BOT_WORK.readChars?`${m.slice(0,f.BOT_WORK.readChars)}
|
|
@@ -97,10 +97,10 @@ Every command is a new shell: \`cd\`, exported variables and an activated venv a
|
|
|
97
97
|
|
|
98
98
|
Nothing is watching it. A command that stops to ask never gets an answer and is killed after ${e.EXEC_TIMEOUT_MS/1e3}s, so pass the flag that skips the question (\`-y\`, \`--yes\`, \`--no-input\`), and send anything genuinely long to the background with its output redirected to a file.
|
|
99
99
|
|
|
100
|
-
Keys are not in the environment: every variable named like a key, a token or a secret is removed before the shell starts. An empty one is not an unset one — say which it was, and ask for what a command needs.`;a.s(["createWorkspaceTools",0,(a,e)=>{let j=!0===e.guide,k=async a=>{let b=e.bot;if(!b)return{result:await a(),memory:null};let c=await (0,g.holdBotMemory)(b);return{result:await a(),memory:await (0,g.keepBotMemory)(b,c)}},l=(0,c.tool)({description:"Run a bash command.",inputSchema:d.default.object({command:d.default.string(),description:d.default.string().nullish().describe("One short line for the user: what this command does and why. Shown on their screen while it runs — not a restatement of the command.")}),execute:async({command:b},{abortSignal:c})=>{let{result:d,memory:f}=await k(()=>a.exec(b,{signal:c,env:e.env,timeoutMs:e.timeoutMs})),g=f?{...d,memory:f}:d;return j?(j=!1,{...g,guide:i}):g}});if(!e.write)return{[f.TOOL_NAMES.bash]:l};let m=(0,c.tool)({description:"Write a whole file — what was there is gone. Parent directories are created.",inputSchema:d.default.object({path:d.default.string().describe("Relative to the working directory — under one of its folders — or absolute"),content:d.default.string(),description:d.default.string().nullish().describe("One short line for the user: what this file is. Shown on their screen next to the path.")}),execute:async({path:c,content:d})=>{let f,g=a.resolve(c),i=(0,h.writeRefusal)(g,e.bot);if(i)return i;let{memory:j}=await k(()=>a.writeFile(c,d));return j??`Wrote ${(f=(0,b.relative)(a.cwd,g))&&!f.startsWith("..")?f:g} (${d.split("\n").length} lines)`}});return{[f.TOOL_NAMES.bash]:l,[f.TOOL_NAMES.write_file]:m}}])},641301,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(569572),e=a.i(821415);let f=a=>`${(0,e.botFolder)(a)}/memory`;async function g(a,b=d.BOT_MEMORY_LIMITS.files){let i=f(a),j=(0,c.join)(e.WORKSPACE,i),k=(await h(j)).sort((a,b)=>b.info.mtimeMs-a.info.mtimeMs),m=await Promise.all(k.slice(0,b).map(async({name:a,info:b})=>({file:a,path:`${i}/${a}`,line:await l((0,c.join)(j,a)),at:new Date(b.mtimeMs),bytes:b.size})));return{folder:i,entries:m,total:k.length}}async function h(a){let d=await (0,b.readdir)(a).catch(()=>[]);return(await Promise.all(d.filter(a=>!a.startsWith(".")).map(async d=>{let e=await (0,b.stat)((0,c.join)(a,d)).catch(()=>null);return e?.isFile()?{name:d,info:e}:null}))).filter(a=>null!==a)}async function i(a){let g=(0,c.join)(e.WORKSPACE,f(a)),i=new Map;return await Promise.all((await h(g)).map(async({name:a,info:e})=>{let f=e.size>4*d.BOT_MEMORY_LIMITS.chars?null:await (0,b.readFile)((0,c.join)(g,a),"utf8").catch(()=>null);i.set(a,{text:null!==f&&k(f)<=d.BOT_MEMORY_LIMITS.chars?f:null,size:e.size,mtimeMs:e.mtimeMs,atime:e.atime,mtime:e.mtime})})),i}async function j(a,g){let i=f(a),j=(0,c.join)(e.WORKSPACE,i),{files:l,chars:m}=d.BOT_MEMORY_LIMITS,n=[],o=[],p=0;for(let{name:a,info:d}of(await h(j))){p+=1;let e=g.get(a);if(e&&e.size===d.size&&e.mtimeMs===d.mtimeMs)continue;let f=(0,c.join)(j,a),h=k(await (0,b.readFile)(f,"utf8").catch(()=>""));if(h<=m){e||o.push(a);continue}let l=`${h.toLocaleString("en-US")} characters, past the ${m.toLocaleString("en-US")} a memory file holds`;e?null!==e.text?(await (0,b.writeFile)(f,e.text),await (0,b.utimes)(f,e.atime,e.mtime),n.push(`Not kept: \`${i}/${a}\` came to ${l}, so it is back as it was. Write it again shorter.`)):n.push(`\`${i}/${a}\` is ${l}. Shorten it.`):(await (0,b.rm)(f,{force:!0}),p-=1,n.push(`Not kept: \`${i}/${a}\` came to ${l}, so it was removed. Write it again shorter.`))}if(p>l&&o.length){await Promise.all(o.map(a=>(0,b.rm)((0,c.join)(j,a),{force:!0})));let a=o.map(a=>`\`${i}/${a}\``).join(", ");n.push(`Not kept: your memory holds ${l} files at most and this made ${p}, so ${a} ${1===o.length?"was":"were"} removed. Delete or merge files no longer worth keeping, then write it again.`)}return n.length?n.join("\n"):null}let k=a=>[...a.trim()].length;async function l(a){let c=await (0,b.open)(a,"r").catch(()=>null);if(!c)return"";try{let a=Buffer.alloc(1024),{bytesRead:b}=await c.read(a,0,1024,0),d=a.toString("utf8",0,b).split("\n").map(a=>a.trim()).filter(Boolean);if("---"===d[0]){let a=d.find(a=>a.startsWith("description:"));if(a)return a.slice(12).trim().replace(/^["']|["']$/g,"");let b=d.indexOf("---",1);return b>0?(d[b+1]??"").replace(/^#+\s*/,""):""}return(d[0]??"").replace(/^#+\s*/,"")}finally{await c.close()}}a.s(["botMemoryFolder",0,f,"holdBotMemory",0,i,"keepBotMemory",0,j,"listBotMemory",0,g])},654034,a=>a.a(async(b,c)=>{try{var d=a.i(47919),e=a.i(527990),f=a.i(569572),g=a.i(738131),h=a.i(875931),i=a.i(735502),j=a.i(978876),k=a.i(762008),l=a.i(446957),m=a.i(821415),n=a.i(176668),o=a.i(987674),p=a.i(221214),q=a.i(344853),r=b([g,h,i,j,p,q]);[g,h,i,j,p,q]=r.then?(await r)():r;let w=f.BOT_RUN.steps;async function s(a,b){var c,r;let s,v,y,z,A,B,C,D,E,F=b.parent??null,G=await (0,p.findJobBot)(a.bot.trim()),H=G?.name??a.bot.trim(),I=a=>b.emit({...a,bot:H,parent:F});if(!G)return void await I({type:"error",message:`No bot named "${a.bot}". Use a name from the list.`,retry:!1});let J=a.messages,K=await ((c=G).provider&&c.model?(0,h.getTextModel)({provider:c.provider,model:c.model}):(0,h.resolveDefaultModel)().then(h.getTextModel)),L=b.threadId?await (0,q.findThread)(b.threadId):null,[M,{own:N,artifacts:O}]=await Promise.all([b.threadId?(0,m.openJobScratch)(b.threadId,L?.label??"job"):null,(0,m.openBotFolders)(H)]),[P,Q]=await Promise.all([(0,i.loadBotPrompt)(H,G.systemPrompt,{thread:b.threadId??null,owner:b.owner,caller:b.caller,messageId:F},{scratch:M,own:N,artifacts:O}),(0,g.loadTools)({target:"bot",bot:H,thread:b.threadId??null,session:b.session??(b.threadId?(0,m.botBrowserSession)(b.threadId,H):null),model:K})]),R=Math.min(await (0,h.compactBudget)(K.ref,G.compactAt),b.contextBudget||1/0),S=!1,T={...Q,[k.TOOL_NAMES.send_message]:(0,e.tool)({description:j.sendMessageSpec.description,inputSchema:j.sendMessageSpec.parameters,execute:async(a,c)=>{let d=await b.send({...a,id:c.toolCallId});return"question"===a.kind&&(S=!0),d}})},U=new Set,V=(r=f.BOT_RUN.silenceMs,v=new AbortController,y=0,z=!1,A=()=>{clearTimeout(s),s=void 0,z||y>0||(s=setTimeout(()=>{v.abort(new DOMException(`The model sent nothing for ${Math.round(r/6e4)} minutes.`,"TimeoutError"))},r))},{signal:v.signal,touch:A,hold:()=>{y+=1,A()},release:()=>{y=Math.max(0,y-1),A()},end:()=>{z=!0,A()}});for(let[a,c]of Object.entries(T)){let d=c.execute;d&&(c.execute=(c,e)=>{let f=(async()=>{b.signal?.throwIfAborted(),await I({type:"tool",id:e.toolCallId,name:a,input:c}),V.hold();try{b.signal?.throwIfAborted();let f=await d(c,e);if(f&&"object"==typeof f&&Symbol.asyncIterator in f){let a;for await(let b of f)a=b;f=a}return await I({type:"tool-result",id:e.toolCallId,name:a,output:f}),f}catch(b){throw await I({type:"tool-result",id:e.toolCallId,name:a,output:(0,h.modelErrorToString)(b),error:!0}),b}finally{V.release()}})();return U.add(f),f.finally(()=>U.delete(f)).catch(()=>{}),f})}let W=Promise.resolve(),X=()=>{},Y=0,Z=new d.ToolLoopAgent({model:K.model,instructions:P.text,tools:T,stopWhen:[(0,d.stepCountIs)(w),()=>S],prepareStep:async({stepNumber:a,steps:c,messages:d})=>{await W,b.signal?.throwIfAborted();let e={},f=c.at(-1)?.usage.inputTokens??0,g=Math.max(f,d.reduce((a,b)=>a+(0,o.estimateTokens)("string"==typeof b.content?b.content:JSON.stringify(b.content))+4,0));Y=g;let h=d,i=b.compactNow?.()??!1;if((g>R||i)&&d.length>2){V.hold();let a=await u(K.model,T,d,{signal:b.signal,budget:R,instructions:P.text}).finally(V.release);n.logger.debug(`compacted ${d.length} messages at ${g} tokens (budget ${R})`);let c=`${a.text}${await t(L?.id??null,d,M)}`;await I({type:"compact",text:c,usage:a.usage,messages:d.length,tokens:g}),h=[d[0],{role:"user",content:c}]}let j=a>0?await b.notes?.()??[]:[];return(j.length&&(h=[...h,...j.map(a=>({role:"user",content:a}))]),h===d)?e:{...e,messages:h}}}),$=(B=[],C=[],D=!1,{push(a){let b=C.shift();b?b(a):B.push(a)},take(){let a=B.shift();return a?Promise.resolve(a):D?Promise.resolve(null):new Promise(a=>C.push(a))},end(){for(let a of(D=!0,C.splice(0)))a(null)}}),_=b.signal?AbortSignal.any([b.signal,V.signal]):V.signal;V.touch();let aa=new AbortController,ab=AbortSignal.any([_,aa.signal]);try{E=await Z.stream({messages:J,abortSignal:ab,onStepEnd:a=>{W=new Promise(a=>{X=a}),$.push({messages:a.response.messages,usage:x(a.usage)})}})}catch(a){throw V.end(),aa.abort(),await Promise.allSettled([...U]),a}let ac="",ad="",ae=null,af=a=>{n.logger.error(`${H}: the model run broke`,a);let b=(0,h.modelErrorToString)(a),c=!(0,h.isProviderRefusal)(a);if(!(0,h.isContextOverflow)(a))return{type:"error",message:b,retry:c};let d=Math.floor(Math.min(R,Y||R)*f.BOT_RUN.overflowShrink);return{type:"error",message:b,budget:Math.max(l.COMPACT_AT_MIN,d),retry:c}};_.addEventListener("abort",()=>{$.end(),X()},{once:!0});try{for await(let a of E.stream)switch(V.touch(),a.type){case"start-step":ad="",ac="";break;case"text-delta":ac+=a.text;break;case"text-end":{let a=ac.trim();if(ac="",!a)break;ad=[ad,a].filter(Boolean).join("\n\n"),await I({type:"text",text:a});break}case"tool-call":await I({type:"tool",id:a.toolCallId,name:a.toolName,input:a.input,providerExecuted:a.providerExecuted,providerOptions:a.providerMetadata});break;case"tool-result":await I({type:"tool-result",id:a.toolCallId,name:a.toolName,output:a.output});break;case"tool-error":await I({type:"tool-result",id:a.toolCallId,name:a.toolName,output:(0,h.modelErrorToString)(a.error),error:!0});break;case"finish-step":{ae=a.finishReason;let b=await $.take();b&&await I({type:"step",...b,budget:R}),X();break}case"abort":if(b.signal?.aborted)return;await I(af(a.reason??"The model stopped sending."));return;case"error":await I(af(a.error));return}}finally{aa.abort(),$.end(),V.end(),X(),await Promise.allSettled([...U])}try{await E.finalStep}catch(a){if(b.signal?.aborted)return;await I(af(a));return}"content-filter"===ae?await I({type:"error",message:"The provider's content filter stopped the response.",retry:!1}):await I({type:"turn-end",text:ad,stopped:!S&&("length"===ae||"error"===ae||"tool-calls"===ae)})}async function t(a,b,c){try{let d=a?await (0,q.listWrittenPaths)(a):(0,q.writtenPathsIn)(b.map(a=>a.content)),e=await (0,m.filesOnDisk)(d,c);if(!e.length)return"";let g=e.slice(-f.BOT_RUN.compactFiles),h=e.length-g.length,i=g.map(a=>`- ${a}`);return h&&i.unshift(`- …and ${h} older ones`),`
|
|
100
|
+
Keys are not in the environment: every variable named like a key, a token or a secret is removed before the shell starts. An empty one is not an unset one — say which it was, and ask for what a command needs.`;a.s(["createWorkspaceTools",0,(a,e)=>{let j=!0===e.guide,k=async a=>{let b=e.bot;if(!b)return{result:await a(),memory:null};let c=await (0,g.holdBotMemory)(b);return{result:await a(),memory:await (0,g.keepBotMemory)(b,c)}},l=(0,c.tool)({description:"Run a bash command.",inputSchema:d.default.object({command:d.default.string(),description:d.default.string().nullish().describe("One short line for the user: what this command does and why. Shown on their screen while it runs — not a restatement of the command.")}),execute:async({command:b},{abortSignal:c})=>{let{result:d,memory:f}=await k(()=>a.exec(b,{signal:c,env:e.env,timeoutMs:e.timeoutMs})),g=f?{...d,memory:f}:d;return j?(j=!1,{...g,guide:i}):g}});if(!e.write)return{[f.TOOL_NAMES.bash]:l};let m=(0,c.tool)({description:"Write a whole file — what was there is gone. Parent directories are created.",inputSchema:d.default.object({path:d.default.string().describe("Relative to the working directory — under one of its folders — or absolute"),content:d.default.string(),description:d.default.string().nullish().describe("One short line for the user: what this file is. Shown on their screen next to the path.")}),execute:async({path:c,content:d})=>{let f,g=a.resolve(c),i=(0,h.writeRefusal)(g,e.bot);if(i)return i;let{memory:j}=await k(()=>a.writeFile(c,d));return j??`Wrote ${(f=(0,b.relative)(a.cwd,g))&&!f.startsWith("..")?f:g} (${d.split("\n").length} lines)`}});return{[f.TOOL_NAMES.bash]:l,[f.TOOL_NAMES.write_file]:m}}])},641301,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(569572),e=a.i(821415);let f=a=>`${(0,e.botFolder)(a)}/memory`;async function g(a,b=d.BOT_MEMORY_LIMITS.files){let i=f(a),j=(0,c.join)(e.WORKSPACE,i),k=(await h(j)).sort((a,b)=>b.info.mtimeMs-a.info.mtimeMs),m=await Promise.all(k.slice(0,b).map(async({name:a,info:b})=>({file:a,path:`${i}/${a}`,line:await l((0,c.join)(j,a)),at:new Date(b.mtimeMs),bytes:b.size})));return{folder:i,entries:m,total:k.length}}async function h(a){let d=await (0,b.readdir)(a).catch(()=>[]);return(await Promise.all(d.filter(a=>!a.startsWith(".")).map(async d=>{let e=await (0,b.stat)((0,c.join)(a,d)).catch(()=>null);return e?.isFile()?{name:d,info:e}:null}))).filter(a=>null!==a)}async function i(a){let g=(0,c.join)(e.WORKSPACE,f(a)),i=new Map;return await Promise.all((await h(g)).map(async({name:a,info:e})=>{let f=e.size>4*d.BOT_MEMORY_LIMITS.chars?null:await (0,b.readFile)((0,c.join)(g,a),"utf8").catch(()=>null);i.set(a,{text:null!==f&&k(f)<=d.BOT_MEMORY_LIMITS.chars?f:null,size:e.size,mtimeMs:e.mtimeMs,atime:e.atime,mtime:e.mtime})})),i}async function j(a,g){let i=f(a),j=(0,c.join)(e.WORKSPACE,i),{files:l,chars:m}=d.BOT_MEMORY_LIMITS,n=[],o=[],p=0;for(let{name:a,info:d}of(await h(j))){p+=1;let e=g.get(a);if(e&&e.size===d.size&&e.mtimeMs===d.mtimeMs)continue;let f=(0,c.join)(j,a),h=k(await (0,b.readFile)(f,"utf8").catch(()=>""));if(h<=m){e||o.push(a);continue}let l=`${h.toLocaleString("en-US")} characters, past the ${m.toLocaleString("en-US")} a memory file holds`;e?null!==e.text?(await (0,b.writeFile)(f,e.text),await (0,b.utimes)(f,e.atime,e.mtime),n.push(`Not kept: \`${i}/${a}\` came to ${l}, so it is back as it was. Write it again shorter.`)):n.push(`\`${i}/${a}\` is ${l}. Shorten it.`):(await (0,b.rm)(f,{force:!0}),p-=1,n.push(`Not kept: \`${i}/${a}\` came to ${l}, so it was removed. Write it again shorter.`))}if(p>l&&o.length){await Promise.all(o.map(a=>(0,b.rm)((0,c.join)(j,a),{force:!0})));let a=o.map(a=>`\`${i}/${a}\``).join(", ");n.push(`Not kept: your memory holds ${l} files at most and this made ${p}, so ${a} ${1===o.length?"was":"were"} removed. Delete or merge files no longer worth keeping, then write it again.`)}return n.length?n.join("\n"):null}let k=a=>[...a.trim()].length;async function l(a){let c=await (0,b.open)(a,"r").catch(()=>null);if(!c)return"";try{let a=Buffer.alloc(1024),{bytesRead:b}=await c.read(a,0,1024,0),d=a.toString("utf8",0,b).split("\n").map(a=>a.trim()).filter(Boolean);if("---"===d[0]){let a=d.find(a=>a.startsWith("description:"));if(a)return a.slice(12).trim().replace(/^["']|["']$/g,"");let b=d.indexOf("---",1);return b>0?(d[b+1]??"").replace(/^#+\s*/,""):""}return(d[0]??"").replace(/^#+\s*/,"")}finally{await c.close()}}a.s(["botMemoryFolder",0,f,"holdBotMemory",0,i,"keepBotMemory",0,j,"listBotMemory",0,g])},654034,a=>a.a(async(b,c)=>{try{var d=a.i(47919),e=a.i(527990),f=a.i(569572),g=a.i(738131),h=a.i(875931),i=a.i(735502),j=a.i(978876),k=a.i(762008),l=a.i(446957),m=a.i(487591),n=a.i(821415),o=a.i(176668),p=a.i(987674),q=a.i(221214),r=a.i(344853),s=b([g,h,i,j,q,r]);[g,h,i,j,q,r]=s.then?(await s)():s;let x=f.BOT_RUN.steps;async function t(a,b){var c,s;let t,w,z,A,B,C,D,E,F,G=b.parent??null,H=await (0,q.findJobBot)(a.bot.trim()),I=H?.name??a.bot.trim(),J=a=>b.emit({...a,bot:I,parent:G});if(!H)return void await J({type:"error",message:`No bot named "${a.bot}". Use a name from the list.`,retry:!1});let K=a.messages,L=await ((c=H).provider&&c.model?(0,h.getTextModel)({provider:c.provider,model:c.model}):(0,h.resolveDefaultModel)().then(h.getTextModel)),M=b.threadId?await (0,r.findThread)(b.threadId):null,[N,{own:O,artifacts:P}]=await Promise.all([b.threadId?(0,n.openJobScratch)(b.threadId,M?.label??"job"):null,(0,n.openBotFolders)(I)]),Q=b.session??(b.threadId?(0,n.botBrowserSession)(b.threadId,I):null),[R,S]=await Promise.all([(0,i.loadBotPrompt)(I,H.systemPrompt,{thread:b.threadId??null,owner:b.owner,caller:b.caller,messageId:G},{scratch:N,own:O,artifacts:P}),(0,g.loadTools)({target:"bot",bot:I,thread:b.threadId??null,session:Q,model:L})]),T=Math.min(await (0,h.compactBudget)(L.ref,H.compactAt),b.contextBudget||1/0),U=!1,V={...S,[k.TOOL_NAMES.send_message]:(0,e.tool)({description:j.sendMessageSpec.description,inputSchema:j.sendMessageSpec.parameters,execute:async(a,c)=>{let d=await b.send({...a,id:c.toolCallId});return"question"===a.kind&&(U=!0),d}})},W=new Set,X=(s=f.BOT_RUN.silenceMs,w=new AbortController,z=0,A=!1,B=()=>{clearTimeout(t),t=void 0,A||z>0||(t=setTimeout(()=>{w.abort(new DOMException(`The model sent nothing for ${Math.round(s/6e4)} minutes.`,"TimeoutError"))},s))},{signal:w.signal,touch:B,hold:()=>{z+=1,B()},release:()=>{z=Math.max(0,z-1),B()},end:()=>{A=!0,B()}});for(let[a,c]of Object.entries(V)){let d=c.execute;d&&(c.execute=(c,e)=>{let f=(async()=>{b.signal?.throwIfAborted(),await J({type:"tool",id:e.toolCallId,name:a,input:c}),X.hold();try{b.signal?.throwIfAborted();let f=await d(c,e);if(f&&"object"==typeof f&&Symbol.asyncIterator in f){let a;for await(let b of f)a=b;f=a}return await J({type:"tool-result",id:e.toolCallId,name:a,output:f}),f}catch(b){throw await J({type:"tool-result",id:e.toolCallId,name:a,output:(0,h.modelErrorToString)(b),error:!0}),b}finally{X.release()}})();return W.add(f),f.finally(()=>W.delete(f)).catch(()=>{}),f})}let Y=Promise.resolve(),Z=()=>{},$=0,_=new d.ToolLoopAgent({model:L.model,instructions:R.text,tools:V,stopWhen:[(0,d.stepCountIs)(x),()=>U],prepareStep:async({stepNumber:a,steps:c,messages:d})=>{await Y,b.signal?.throwIfAborted();let e={},f=c.at(-1)?.usage.inputTokens??0,g=Math.max(f,d.reduce((a,b)=>a+(0,p.estimateTokens)("string"==typeof b.content?b.content:JSON.stringify(b.content))+4,0));$=g;let h=d,i=b.compactNow?.()??!1;if((g>T||i)&&d.length>2){X.hold();let a=await v(L.model,V,d,{signal:b.signal,budget:T,instructions:R.text}).finally(X.release);o.logger.debug(`compacted ${d.length} messages at ${g} tokens (budget ${T})`);let c=`${a.text}${await u(M?.id??null,d,N)}`;await J({type:"compact",text:c,usage:a.usage,messages:d.length,tokens:g}),h=[d[0],{role:"user",content:c}]}let j=a>0?await b.notes?.()??[]:[];return(j.length&&(h=[...h,...j.map(a=>({role:"user",content:a}))]),h===d)?e:{...e,messages:h}}}),aa=(C=[],D=[],E=!1,{push(a){let b=D.shift();b?b(a):C.push(a)},take(){let a=C.shift();return a?Promise.resolve(a):E?Promise.resolve(null):new Promise(a=>D.push(a))},end(){for(let a of(E=!0,D.splice(0)))a(null)}}),ab=b.signal?AbortSignal.any([b.signal,X.signal]):X.signal;X.touch();let ac=new AbortController,ad=AbortSignal.any([ab,ac.signal]);try{F=await _.stream({messages:K,abortSignal:ad,onStepEnd:a=>{Y=new Promise(a=>{Z=a}),aa.push({messages:a.response.messages,usage:y(a.usage)})}})}catch(a){throw X.end(),ac.abort(),await Promise.allSettled([...W]),a}let ae="",af="",ag=null,ah=a=>{o.logger.error(`${I}: the model run broke`,a);let b=(0,h.modelErrorToString)(a),c=!(0,h.isProviderRefusal)(a);if(!(0,h.isContextOverflow)(a))return{type:"error",message:b,retry:c};let d=Math.floor(Math.min(T,$||T)*f.BOT_RUN.overflowShrink);return{type:"error",message:b,budget:Math.max(l.COMPACT_AT_MIN,d),retry:c}};ab.addEventListener("abort",()=>{aa.end(),Z()},{once:!0});try{for await(let a of F.stream)switch(X.touch(),a.type){case"start-step":af="",ae="";break;case"text-delta":ae+=a.text;break;case"text-end":{let a=ae.trim();if(ae="",!a)break;af=[af,a].filter(Boolean).join("\n\n"),await J({type:"text",text:a});break}case"tool-call":await J({type:"tool",id:a.toolCallId,name:a.toolName,input:a.input,providerExecuted:a.providerExecuted,providerOptions:a.providerMetadata});break;case"tool-result":await J({type:"tool-result",id:a.toolCallId,name:a.toolName,output:a.output});break;case"tool-error":await J({type:"tool-result",id:a.toolCallId,name:a.toolName,output:(0,h.modelErrorToString)(a.error),error:!0});break;case"finish-step":{ag=a.finishReason;let b=await aa.take();b&&await J({type:"step",...b,budget:T}),Z();break}case"abort":if(b.signal?.aborted)return;await J(ah(a.reason??"The model stopped sending."));return;case"error":await J(ah(a.error));return}}finally{ac.abort(),aa.end(),X.end(),Z(),await Promise.allSettled([...W]),Q&&(0,m.renewSignIns)(Q).catch(a=>o.logger.warn(`${I}: kept sign-ins were not renewed`,a))}try{await F.finalStep}catch(a){if(b.signal?.aborted)return;await J(ah(a));return}"content-filter"===ag?await J({type:"error",message:"The provider's content filter stopped the response.",retry:!1}):await J({type:"turn-end",text:af,stopped:!U&&("length"===ag||"error"===ag||"tool-calls"===ag)})}async function u(a,b,c){try{let d=a?await (0,r.listWrittenPaths)(a):(0,r.writtenPathsIn)(b.map(a=>a.content)),e=await (0,n.filesOnDisk)(d,c);if(!e.length)return"";let g=e.slice(-f.BOT_RUN.compactFiles),h=e.length-g.length,i=g.map(a=>`- ${a}`);return h&&i.unshift(`- …and ${h} older ones`),`
|
|
101
101
|
|
|
102
102
|
Files this job has on disk now — open one rather than fetching again what is in it:
|
|
103
|
-
${i.join("\n")}`}catch(a){return
|
|
103
|
+
${i.join("\n")}`}catch(a){return o.logger.warn("files under the summary could not be listed",a),""}}async function v(a,b,c,e){let f;try{return await w(a,b,c,e)}catch(a){if(e.signal?.aborted)throw a;f=a}if((0,h.isContextOverflow)(f)){let g=(0,d.pruneMessages)({messages:c,toolCalls:"before-last-4-messages",emptyMessages:"remove"});try{return await w(a,b,g,e)}catch(a){if(e.signal?.aborted)throw a;f=a}}throw Error(`Could not compact the context (${(0,h.modelErrorToString)(f)}).`,{cause:f})}async function w(a,b,c,e){let g,{text:h,usage:i}=await (0,d.generateText)({model:a,instructions:e.instructions,tools:b,toolChoice:"none",messages:[...c,{role:"user",content:(g=(a=>{let{min:b,max:c,perTokens:d}=f.BOT_RUN.summaryWords;return Math.min(c,Math.max(b,Math.round(a/d)))})(e.budget),`Compact your context. The first message above — who handed you the job, and the job — stays exactly as it is. Everything after it is replaced by what you write now, and you carry on from that first message and this alone; nothing else above can be read again. Write it for a fresh copy of you that has your tools, your instructions and that first message, but has seen none of the rest.
|
|
104
104
|
|
|
105
105
|
Cover all of it, and prefer a fact over a description of a fact:
|
|
106
106
|
|
|
@@ -113,9 +113,11 @@ Cover all of it, and prefer a fact over a description of a fact:
|
|
|
113
113
|
|
|
114
114
|
Plain text, under ${g} words. No preamble, no headings about the summary itself, no account of how you have been going.`)}],abortSignal:e.signal,timeout:f.BOT_RUN.silenceMs}),j=h.trim();if(!j)throw Object.assign(Error("The summary of the context came back empty, so there is nothing to carry on from."),{isRetryable:!0});return{text:`Everything between the first message and here was compacted. Below is your own summary of it; carry on from the first message and this.
|
|
115
115
|
|
|
116
|
-
${j}`,usage:
|
|
116
|
+
${j}`,usage:y(i)}}let y=a=>({input:a.inputTokens??0,output:a.outputTokens??0});a.s(["resumeTranscript",0,function(a,b=new Map){let c=new Map,d=new Set;for(let b of a)if(("tool"===b.role||"assistant"===b.role)&&Array.isArray(b.content))for(let a of b.content)"tool-result"===a.type&&(c.has(a.toolCallId)||c.set(a.toolCallId,a),"assistant"===b.role&&d.add(a.toolCallId));let e=[],f=new Set;for(let g of a){if("tool"===g.role){let a=g.content.filter(a=>"tool-result"!==a.type);a.length&&e.push({...g,content:a});continue}if("assistant"!==g.role||"string"==typeof g.content){e.push(g);continue}let a=[],h=[];for(let e of g.content){if("tool-call"!==e.type){h.push(e);continue}if(f.has(e.toolCallId))continue;let g=e.input;if("string"==typeof g)try{g=JSON.parse(g)}catch{g=void 0}if(!e.toolCallId||void 0===g){h.push({type:"text",text:"A tool argument stream was interrupted before a complete call was recorded. Inspect the saved work before continuing."});continue}let i=e.toolName===k.TOOL_NAMES.send_message?b.get(e.toolCallId):void 0,j=c.get(e.toolCallId)??(i?{type:"tool-result",toolCallId:e.toolCallId,toolName:e.toolName,output:{type:"json",value:i}}:void 0);if(e.providerExecuted&&(!j||!d.has(e.toolCallId))){h.push({type:"text",text:j?`The provider operation ${e.toolName} returned this data before its native continuation was interrupted: ${JSON.stringify(j.output)}`:`The provider operation ${e.toolName} was interrupted without a recorded result. Its remote execution state is unknown.`});continue}f.add(e.toolCallId),h.push({...e,input:g}),d.has(e.toolCallId)||a.push(j??{type:"tool-result",toolCallId:e.toolCallId,toolName:e.toolName,output:{type:"text",value:"No result: execution was interrupted before a result was recorded. The outcome is unknown. Inspect the current state before repeating the action."}})}h.length&&e.push({...g,content:h}),a.length&&e.push({role:"tool",content:a})}return e},"runBot",0,t]),c()}catch(a){c(a)}},!1),674986,a=>a.a(async(b,c)=>{try{var d=a.i(136340),e=a.i(203469),f=a.i(569572),g=a.i(875931),h=a.i(735502),i=a.i(569549),j=a.i(684321),k=a.i(821415),l=a.i(956802),m=a.i(176668),n=a.i(293480),o=a.i(8412),p=a.i(182248),q=a.i(221214),r=a.i(654034),s=a.i(446957),t=a.i(839430),u=a.i(109955),v=a.i(344853),w=b([g,h,i,q,r,t,v]);[g,h,i,q,r,t,v]=w.then?(await w)():w;let L=globalThis.__roomRuns??=new Map,M=globalThis.__roomThreadLock??=(0,o.createKeyedLock)(),N=globalThis.__roomPausing??={current:Promise.resolve()},O=globalThis.__roomCompactAsked??=new Set,P=(a,b)=>`${a}
|
|
117
117
|
${b}`;async function x(a){let b=await (0,q.findJobBot)(a.bot);(!b||b.disabled)&&(0,n.publicError)("Choose an enabled bot.");let{from:c,routine:d,...e}={...a,bot:b.name},f=(0,h.buildThreadOpening)({bot:e.bot,request:e.request,from:c,routine:d}),g=await (0,v.insertThread)({...e,routineId:d?.id??null,opening:f});return await z(g.id),g.id}async function y(a,b,c="user",d,e){let f=null;return await M(a,async()=>{let g=await (0,v.findThread)(a);if(g||(0,n.publicError)("No such thread."),d){let b=(await (0,t.listRoomWork)(a)).find(a=>a.bot.toLowerCase()===d.trim().toLowerCase());b&&b.bot!==u.ROOM_THURSDAY||(0,n.publicError)("Choose a participant in this thread."),d=b.bot}b.trim()===s.THREAD_CONTINUE&&(0,s.isAppStop)(g.pending)?(await (0,t.resumeRoom)(a),(await (0,t.listRoomWork)(a)).some(a=>"queued"===a.state)||(f=await (0,t.tellRoom)(a,"Continue from the saved conversation.","user"===c?"The user":u.ROOM_THURSDAY,d,void 0,!1))):f=await (0,t.tellRoom)(a,b,"user"===c?"The user":u.ROOM_THURSDAY,d,e)}),await z(a),f}async function z(a){await M(a,async()=>{if(!e.presence.watching&&!await (0,q.readKeepWorkingOn)()){let b=await (0,v.findThread)(a);b?.status!=="running"||[...L.values()].some(b=>b.threadId===a)||await (0,t.pauseRoom)(a,"The app is not open. Work resumes when it returns.",!0);return}for(let b=0;b<2;b++){let b;for(;b=await (0,t.claimRoomWork)(a);)!function(a){let b,c=new AbortController,d=new Promise(a=>{b=a});L.set(a.id,{threadId:a.threadId,stop:c,done:d}),A(a,c.signal).catch(b=>m.logger.error(`thread ${a.threadId}: participant`,b)).finally(()=>{L.delete(a.id),b(),z(a.threadId).catch(b=>m.logger.error(`thread ${a.threadId}: scheduling`,b))})}(b);await (0,t.settleRoom)(a)}})}async function A(a,b){let c=await B(a,b);if(c?.failure?.retry&&!b.aborted&&(await (0,t.noteRoomBreak)(a,c.failure.message),await (0,d.setTimeout)(f.BOT_RUN.retryMs,void 0,{signal:b}).catch(()=>{}),b.aborted||(c=await B(a,b))),!c||b.aborted)return;let g=c.failure?.message,h=c.ending;if(g||!h||h.stopped){let b=g??"The turn was interrupted. Continue from the saved conversation.";M(a.threadId,async()=>{let c=(await (0,t.listRoomWork)(a.threadId)).find(b=>b.id===a.id);if(c?.state!=="running"||c.generation!==a.generation)return;let d=C(a.threadId);await (0,t.pauseRoom)(a.threadId,b),await d}).catch(b=>m.logger.error(`thread ${a.threadId}: pausing`,b));return}await (0,t.finishRoomWork)(a,h.text);let n=await (0,v.findThread)(a.threadId);if(n?.status==="done"){e.presence.watching||await (0,i.isAnyCallLive)()||(0,l.desktopNotify)(n.label,n.outcome??"");let a=await (0,k.filesOnDisk)((0,j.pathsIn)(n.outcome??""),null),b=a.findIndex(j.opensOnFinish);e.appEvents.emit({type:"finished",threadId:n.id,label:n.label,bot:n.bot,words:(0,p.plainText)(n.outcome??"").slice(0,f.FINISHED_NOTICE.words),paths:b>0?[a[b],...a.filter((a,c)=>c!==b)]:a})}}async function B(a,b){let c=new Q(a,b),d=null,e=null;try{let f=await (0,v.findThread)(a.threadId);if(!f)return null;(await (0,t.listParticipantTranscript)(a.threadId,a.bot)).length||await (0,t.appendRoomMessage)(a.threadId,{bot:a.bot,parent:a.id,role:"user",content:`Request: ${f.request}
|
|
118
|
-
Coordinator: ${f.bot}. Continue as ${a.bot} in this thread.`,hidden:!0}),await (0,t.consumeRoomInbox)(a);let g=await (0,t.listParticipantTranscript)(a.threadId,a.bot);await (0,r.runBot)({bot:a.bot,messages:(0,r.resumeTranscript)(g,await (0,t.listRoomReceipts)(a.threadId,a.bot,g))},{signal:b,threadId:a.threadId,parent:a.id,caller:a.caller,owner:f.bot,contextBudget:await (0,t.roomContextBudget)(a.threadId,a.bot),compactNow:()=>O.delete(P(a.threadId,a.bot)),session:(0,k.botBrowserSession)(a.threadId,a.bot),notes:()=>(0,t.consumeRoomInbox)(a),send:async c=>{b.throwIfAborted();let d=c.to.trim();if(d.toLowerCase()===u.ROOM_THURSDAY.toLowerCase())d=u.ROOM_THURSDAY;else{let a=await (0,q.findJobBot)(d);(!a||a.disabled)&&(0,n.publicError)(`No enabled bot named "${d}".`),d=a.name}let e=await (0,t.sendRoomMessage)(a,{...c,to:d});return z(a.threadId).catch(a=>m.logger.error("room message scheduling",a)),e},emit:async g=>{(!b.aborted||"tool-result"===g.type)&&(await c.on(g),"step"===g.type&&await (0,v.addThreadUsage)(a.threadId,g.usage,a.bot===f.bot?{tokens:g.usage.input,budget:g.budget}:null),"compact"===g.type&&await (0,v.addThreadUsage)(a.threadId,g.usage),"turn-end"===g.type&&(d=g),"error"===g.type&&(e={message:g.message,retry:g.retry},g.budget&&await (0,t.lowerRoomContextBudget)(a,g.budget)))}})}catch(c){b.aborted||(m.logger.error(`thread ${a.threadId}: ${a.bot} broke`,c),e={message:(0,g.modelErrorToString)(c),retry:!(0,n.isPublicError)(c)&&!(0,g.isProviderRefusal)(c)})}return{ending:d,failure:e}}class Q{work;signal;lane;assistant;tool;parts;calls;results;constructor(a,b){this.work=a,this.signal=b,this.lane=(0,p.PromiseChain)(),this.assistant=null,this.tool=null,this.parts={assistant:[],tool:[]},this.calls=new Set,this.results=new Set}async write(a,b,c=!1){let d={bot:this.work.bot,parent:this.work.id,role:b.role,content:b.content,compact:c,note:c};return null===a?(0,t.appendRoomMessage)(this.work.threadId,d):(await (0,v.upsertMessage)(this.work.threadId,a,d),a)}on(a){return this.lane(async()=>{if(!this.signal.aborted||"tool-result"===a.type)if("text"===a.type)this.parts.assistant.push({type:"text",text:a.text}),this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant});else if("tool"===a.type){if(this.calls.has(a.id)){let b=this.parts.assistant.find(b=>"tool-call"===b.type&&b.toolCallId===a.id);b&&"tool-call"===b.type&&a.providerOptions&&(b.providerOptions=a.providerOptions,this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant}));return}this.calls.add(a.id),this.parts.assistant.push({type:"tool-call",toolCallId:a.id,toolName:a.name,input:a.input,...a.providerExecuted?{providerExecuted:!0}:{},...a.providerOptions?{providerOptions:a.providerOptions}:{}}),this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant})}else if("tool-result"===a.type){if(this.results.has(a.id))return;this.results.add(a.id),this.parts.tool.push({type:"tool-result",toolCallId:a.id,toolName:a.name,output:a.error?{type:"error-text",value:String(a.output)}:"string"==typeof a.output?{type:"text",value:a.output}:{type:"json",value:a.output}}),this.tool=await this.write(this.tool,{role:"tool",content:this.parts.tool})}else if("step"===a.type){let b=[this.assistant,this.tool];for(let[c,d]of a.messages.entries())await this.write(b[c]??null,d);let c=b.slice(a.messages.length).filter(a=>null!==a);c.length&&await (0,v.deleteMessages)(this.work.threadId,c),this.assistant=this.tool=null,this.parts={assistant:[],tool:[]}}else"compact"===a.type&&await this.write(null,{role:"user",content:a.text},!0)})}}async function C(a){let b=[...L.values()].filter(b=>b.threadId===a);for(let a of b)a.stop.abort();await Promise.all(b.map(a=>a.done))}async function D(a){await M(a,async()=>{let b=await (0,v.findThread)(a);b||(0,n.publicError)("No such thread."),b.endedAt&&(0,n.publicError)("That thread has already ended."),await (0,t.cancelRoom)(a),await (0,v.updateThread)(a,{status:"cancelled",outcome:null,pending:null,seen:!0,endedAt:new Date}),await C(a),await (0,k.closeJobShell)(a)})}async function E(a){return M(a,()=>F(a))}async function F(a){let b=await (0,v.findThread)(a);await (0,t.cancelRoom)(a),await C(a),await (0,k.removeJobBrowsers)(a);let c=await (0,v.deleteThread)(a);return c&&b&&await (0,k.removeJobScratch)(a,b.label),c}async function G(){let a=0;for(let b of(await (0,v.listThreadFolders)()))("done"===b.status||"cancelled"===b.status)&&await M(b.id,async()=>{let c=await (0,v.findThread)(b.id);(c?.status==="done"||c?.status==="cancelled")&&await F(b.id)&&(a+=1)});return a}async function H(){let a=Date.now()-f.WORKSPACE_KEEP.forMs,b=b=>("done"===b.status||"cancelled"===b.status)&&(b.endedAt??b.updatedAt).getTime()<a,c=new Set(await (0,k.listScratchFolders)()),d=[];for(let a of(await (0,v.listThreadFolders)())){let e=(0,k.jobScratch)(a.id,a.label);c.delete(e)&&b(a)&&await M(a.id,async()=>{let c=await (0,v.findThread)(a.id);c&&b(c)&&(await (0,k.closeHiddenBrowser)(a.id),await (0,k.removeJobScratch)(a.id,a.label),d.push(e))})}return d.push(...await (0,k.removeUnchangedFolders)([...c])),await (0,k.pruneJobFiles)(),d.length&&m.logger.info(`cleared ${d.length} old job folder(s): ${d.join(", ")}`),d}async function I(){for(let a of(await (0,v.listRunningThreadIds)()))await M(a,async()=>{[...L.values()].some(b=>b.threadId===a)||(await (0,v.findThread)(a))?.status==="running"&&await (0,t.pauseRoom)(a,"The server restarted. Resume from the saved conversation.")})}async function J(a,b=!1){let c=(async()=>{let c=await (0,v.listRunningThreadIds)();await Promise.all(c.map(c=>M(c,async()=>{(await (0,v.findThread)(c))?.status==="running"&&(await C(c),await (0,t.pauseRoom)(c,a,b))})))})();N.current=c,await c}async function K(){if(await N.current,e.presence.watching)for(let a of(await (0,v.listAutoStoppedThreads)()))await M(a,async()=>{let b=await (0,v.findThread)(a);b?.status==="waiting"&&b.pending?.auto&&await (0,t.resumeRoom)(a,!1)}),await z(a)}a.s(["answerThread",0,y,"askCompact",0,function(a,b){O.add(P(a,b))},"cancelThread",0,D,"pauseThreads",0,J,"removeFinishedThreads",0,G,"removeThread",0,E,"resumeStoppedThreads",0,K,"startThread",0,x,"sweepJobFiles",0,H,"sweepThreads",0,I]),c()}catch(a){c(a)}},!1),317844,a=>a.a(async(b,c)=>{try{var d,e=a.i(106450),f=a.i(64203),g=a.i(569572),h=a.i(176668),i=a.i(182248),j=a.i(947950),k=a.i(899284),l=b([j]);[j]=l.then?(await l)():l;class m extends Error{serverName;authorizationUrl;constructor(a,b){super(`MCP server "${a}" requires authorization`),this.serverName=a,this.authorizationUrl=b,this.name="McpAuthRequiredError"}}class n{store;serverName;oauth;callbackUrl;clientName;staticClient;lastAuthorizationUrl;constructor(a,b,c,d,e,f){this.store=a,this.serverName=b,this.oauth=c,this.callbackUrl=d,this.clientName=e,this.staticClient=f}get redirectUrl(){return this.callbackUrl}get clientMetadata(){return{client_name:this.clientName,redirect_uris:[this.callbackUrl],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"client_secret_post"}}async persist(a){this.oauth={...this.oauth,...a},await this.store.saveOAuth(this.serverName,this.oauth)}clientInformation(){return this.staticClient??this.oauth.clientInformation}async saveClientInformation(a){await this.persist({clientInformation:a})}tokens(){return this.oauth.tokens}async saveTokens(a){await this.persist({tokens:a})}authorizationServerInformation(){return this.oauth.authorizationServer}async saveAuthorizationServerInformation(a){await this.persist({authorizationServer:a})}codeVerifier(){if(!this.oauth.codeVerifier)throw Error("No code verifier saved");return this.oauth.codeVerifier}async saveCodeVerifier(a){await this.persist({codeVerifier:a})}state(){return crypto.randomUUID()}async saveState(a){await this.persist({state:a})}storedState(){return this.oauth.state}redirectToAuthorization(a){this.lastAuthorizationUrl=a}async invalidateCredentials(a){let b={...this.oauth};("all"===a||"client"===a)&&(b.clientInformation=void 0),("all"===a||"tokens"===a)&&(b.tokens=void 0),("all"===a||"verifier"===a)&&(b.codeVerifier=void 0),this.oauth=b,await this.store.saveOAuth(this.serverName,b)}}let o=globalThis;o.__thursdayMcpManager&&o.__thursdayMcpManager.dispose(),d={callbackUrl:new URL("/api/mcp/oauth/callback",g.APP_URL).href,clientName:g.APP_NAME},o.__thursdayMcpManager=new class a{store;sessions;connecting;idleTtlMs;callbackUrl;clientName;constructor(a,b){this.store=a,this.sessions=new Map,this.connecting=new Map,this.callbackUrl=b.callbackUrl,this.idleTtlMs=b.idleTtlMs??18e5,this.clientName=b.clientName??g.APP_NAME}async connect(a){let b=this.connecting.get(a);if(b)return b;let c=this.doConnect(a).finally(()=>this.connecting.delete(a));return this.connecting.set(a,c),c}async callTool(a,b,c,d){let f=await this.ensureClient(a);try{let e=await f.callTool({name:b,arguments:c,options:d?{signal:d}:void 0});return this.touch(a),e}catch(b){if(b instanceof e.UnauthorizedError)throw await this.closeSession(a),new m(a);throw b}}async finishAuthorization(a){let b=a.get("state"),c=a.get("code");if(!b||!c)throw Error("OAuth callback is missing code or state");let d=await this.store.findByOAuthState(b);if(!d||!(0,k.isRemoteConfig)(d.config))throw Error("No server is waiting for this authorization");let f=this.providerFor(d),g=await (0,e.auth)(f,{serverUrl:d.config.url,authorizationCode:c,callbackState:b});if("AUTHORIZED"!==g)throw Error(`Token exchange ended in "${g}"`);return await f.invalidateCredentials("verifier"),await this.connect(d.name),d.name}async disconnect(a){await this.closeSession(a)}async dispose(){await Promise.all([...this.sessions.keys()].map(a=>this.closeSession(a)))}async doConnect(a){await this.closeSession(a);let b=await this.store.load(a);if(!b)throw Error(`Unknown MCP server "${a}"`);let c={};try{let d=await this.openClient(b,c),e=(await d.listTools()).tools.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema,outputSchema:a.outputSchema}));return this.adopt(a,d),await this.store.saveConnectionResult(a,{toolInfo:e,lastError:null}),h.logger.info(`mcp "${a}" connected — ${e.length} tools`),{status:"connected",tools:e}}catch(l){var d,f;let g;if(l instanceof e.UnauthorizedError||l?.cause instanceof e.UnauthorizedError){let b=c.href;if(b)return await this.store.saveConnectionResult(a,{toolInfo:[],lastError:"Authorization required — finish sign-in in the opened tab"}),{status:"auth_required",authorizationUrl:b}}let j=(d=l,f=b,g=(0,i.errorToString)(d),/\b40[13]\b/.test(g)&&/OAuth|register/i.test(g)&&(0,k.isRemoteConfig)(f.config)&&!f.config.oauthClient?"This server does not allow automatic client registration. Register an OAuth app with the provider and add its client ID and secret.":g);throw await this.store.saveConnectionResult(a,{toolInfo:[],lastError:j}),h.logger.warn(`mcp "${a}" failed — ${j}`),Error(j,{cause:l})}}async openClient(a,b={}){if((0,k.isRemoteConfig)(a.config)){let c=this.providerFor(a);try{return await (0,e.createMCPClient)({name:this.clientName,transport:{type:"http",url:a.config.url,headers:a.config.headers,authProvider:c,redirect:"follow"}})}finally{b.href=c.lastAuthorizationUrl?.href}}return(0,e.createMCPClient)({name:this.clientName,transport:new f.Experimental_StdioMCPTransport({command:a.config.command,args:a.config.args,env:a.config.env})})}providerFor(a){let b=(0,k.isRemoteConfig)(a.config)?a.config.oauthClient:void 0;return new n(this.store,a.name,a.oauth??{},this.callbackUrl,this.clientName,b&&{client_id:b.clientId,client_secret:b.clientSecret})}async ensureClient(a){let b=this.sessions.get(a);if(b)return b.client;let c=await this.connect(a);if("auth_required"===c.status)throw new m(a,c.authorizationUrl);let d=this.sessions.get(a);if(!d)throw Error(`Session for "${a}" vanished mid-connect`);return d.client}adopt(a,b){this.sessions.set(a,{client:b,idleTimer:this.armIdleTimer(a)})}touch(a){let b=this.sessions.get(a);b&&(clearTimeout(b.idleTimer),b.idleTimer=this.armIdleTimer(a))}armIdleTimer(a){let b=setTimeout(()=>{this.closeSession(a)},this.idleTtlMs);return b.unref?.(),b}async closeSession(a){let b=this.sessions.get(a);b&&(this.sessions.delete(a),clearTimeout(b.idleTimer),await b.client.close().catch(()=>{}))}}({load:a=>(0,j.findServer)(a),saveOAuth:(a,b)=>(0,j.saveOAuthData)(a,b),saveConnectionResult:(a,b)=>null===b.lastError?(0,j.syncServerTools)(a,b.toolInfo):(0,j.saveConnectionError)(a,b.lastError),findByOAuthState:a=>(0,j.findServerByOAuthState)(a)},d);let p=o.__thursdayMcpManager;a.s(["McpAuthRequiredError",0,m,"mcpManager",0,p]),c()}catch(a){c(a)}},!1),947950,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(351674),f=a.i(203469),g=a.i(184838),h=a.i(714428),i=a.i(899284),j=b([g]);async function k(a){var b;let[c]=await g.database.select({name:h.mcpServerTable.name,config:h.mcpServerTable.config,lastError:h.mcpServerTable.lastError,toolsSyncedAt:h.mcpServerTable.toolsSyncedAt}).from(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a));return c?{...c,config:(b=c.config,(0,i.isRemoteConfig)(b)?{url:b.url}:{command:b.command,args:b.args}),tools:await l(a)}:null}async function l(a){return g.database.select({id:h.mcpToolTable.id,name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema,outputSchema:h.mcpToolTable.outputSchema}).from(h.mcpToolTable).where((0,d.eq)(h.mcpToolTable.serverName,a)).orderBy(h.mcpToolTable.name)}async function m(a){let[b]=await g.database.select().from(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a));return b??null}[g]=j.then?(await j)():j;let u=()=>f.appEvents.emit({type:"mcp"});async function n(a){let[b]=await g.database.insert(h.mcpServerTable).values({...a,lastError:null}).onConflictDoUpdate({target:h.mcpServerTable.name,set:{config:a.config,lastError:null}}).returning();return u(),b}async function o(a,b){await g.database.transaction(async c=>{b.length&&await c.insert(h.mcpToolTable).values(b.map(b=>({...b,serverName:a}))).onConflictDoUpdate({target:[h.mcpToolTable.serverName,h.mcpToolTable.name],set:{description:p(h.mcpToolTable.description),inputSchema:p(h.mcpToolTable.inputSchema),outputSchema:p(h.mcpToolTable.outputSchema)}}),await c.delete(h.mcpToolTable).where(b.length?(0,d.and)((0,d.eq)(h.mcpToolTable.serverName,a),(0,d.notInArray)(h.mcpToolTable.name,b.map(a=>a.name))):(0,d.eq)(h.mcpToolTable.serverName,a)),await c.update(h.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,d.eq)(h.mcpServerTable.name,a))}),u()}function p(a){return e.sql.raw(`excluded."${a.name}"`)}async function q(a,b){await g.database.update(h.mcpServerTable).set({lastError:b}).where((0,d.eq)(h.mcpServerTable.name,a)),u()}async function r(a,b){await g.database.update(h.mcpServerTable).set({oauth:b}).where((0,d.eq)(h.mcpServerTable.name,a)),u()}async function s(a){let[b]=await g.database.select().from(h.mcpServerTable).where(e.sql`json_extract(${h.mcpServerTable.oauth}, '$.state') = ${a}`);return b??null}async function t(a){let b=await g.database.delete(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a)).returning();return b.length>0&&u(),b.length>0}a.s(["deleteServer",0,t,"findPinnedTools",0,function(a){return g.database.select({server:h.mcpToolTable.serverName,name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema}).from(h.botMcpToolTable).innerJoin(h.mcpToolTable,(0,d.eq)(h.botMcpToolTable.toolId,h.mcpToolTable.id)).where((0,d.eq)(h.botMcpToolTable.botName,a)).orderBy(h.mcpToolTable.serverName,h.mcpToolTable.name)},"findServer",0,m,"findServerByOAuthState",0,s,"findServerDetail",0,k,"findToolSchemas",0,function(a,b){return b.length?g.database.select({name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema}).from(h.mcpToolTable).where((0,d.and)((0,d.eq)(h.mcpToolTable.serverName,a),(0,d.inArray)(h.mcpToolTable.name,b))).orderBy(h.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return g.database.select({name:h.mcpServerTable.name}).from(h.mcpServerTable).orderBy(h.mcpServerTable.name)},"listToolNames",0,function(a){let b=g.database.select({server:h.mcpToolTable.serverName,name:h.mcpToolTable.name}).from(h.mcpToolTable);return a?b.where((0,d.eq)(h.mcpToolTable.serverName,a)).orderBy(h.mcpToolTable.name):b.orderBy(h.mcpToolTable.serverName,h.mcpToolTable.name)},"saveConnectionError",0,q,"saveOAuthData",0,r,"syncServerTools",0,o,"upsertServer",0,n]),c()}catch(a){c(a)}},!1),899284,a=>{"use strict";var b=a.i(53112),c=a.i(706210);let d=b.z.object({url:b.z.url(),headers:b.z.record(b.z.string(),b.z.string()).optional(),oauthClient:b.z.object({clientId:b.z.string().min(1),clientSecret:b.z.string().optional()}).optional()}),e=b.z.object({command:b.z.string().min(1),args:b.z.array(b.z.string()).optional(),env:b.z.record(b.z.string(),b.z.string()).optional()}),f=b.z.union([d,e]),g=b.z.object({name:b.z.string(),description:b.z.string().optional(),inputSchema:b.z.looseObject({}).optional(),outputSchema:b.z.looseObject({}).optional()});b.z.object({clientInformation:b.z.looseObject({}).optional(),tokens:b.z.looseObject({}).optional(),authorizationServer:b.z.looseObject({}).optional(),codeVerifier:b.z.string().optional(),state:b.z.string().optional()});let h=b.z.object({name:b.z.string().min(1).max(40),config:f,toolCount:b.z.number().int(),lastError:b.z.string().nullish()}),i=g.extend({id:b.z.number().int(),description:b.z.string().nullish()});h.omit({toolCount:!0}).extend({tools:i.array().default([]),toolsSyncedAt:c.DateLikeSchema});let j=b.z.object({name:b.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:f});b.z.union([b.z.object({mcpServers:b.z.record(b.z.string(),f)}),b.z.record(b.z.string(),f)]),a.s(["MCPServerFormSchema",0,j,"isRemoteConfig",0,function(a){return"url"in a}])},986743,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(351674),g=a.i(203469),h=a.i(569572),i=a.i(184838),j=a.i(714428),k=a.i(8412),l=a.i(661210),m=b([i]);[i]=m.then?(await m)():m;let E=(0,k.createKeyedLock)(),F=()=>g.appEvents.emit({type:"memory"});async function n(a,b,c={}){let[d]=await i.database.insert(j.memoryNoteTable).values({path:a,description:b,ownedByUser:c.ownedByUser??!1}).onConflictDoNothing({target:j.memoryNoteTable.path}).returning();return d&&F(),d??null}async function o(a,b){let[c]=await i.database.update(j.memoryNoteTable).set({...b,updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a)).returning();return c&&F(),c??null}async function p(a){let b=await i.database.delete(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,a)).returning({id:j.memoryNoteTable.id});return b.length>0&&F(),b.length>0}async function q(a,b){let[c]=await i.database.insert(j.memoryFactTable).values({noteId:a,text:b,source:"user"}).returning();return await t(a),F(),c}async function r(a,b,c){let e,f=await (e=()=>i.database.transaction(async e=>{let f=await e.update(j.memoryFactTable).set({isLatest:!1}).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))).returning({id:j.memoryFactTable.id});if(0===f.length)return null;let[g]=await e.insert(j.memoryFactTable).values({noteId:a,text:c,source:"user"}).returning();return await e.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a)),g}),E("memory",e));return f&&F(),f}async function s(a,b){let c=await i.database.delete(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a))).returning({id:j.memoryFactTable.id});return c.length>0&&(await t(a),F()),c.length>0}function t(a){return i.database.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a))}async function u(){for(let a of l.MEMORY_ALWAYS_LISTED){let b=l.MEMORY_PATHS.find(b=>b.path===a)?.of??a;await i.database.insert(j.memoryNoteTable).values({path:a,description:b}).onConflictDoUpdate({target:j.memoryNoteTable.path,set:{description:b}})}}async function v(a){let b=a.map(a=>a.trim()).filter(Boolean),c=[],e=[];if(!b.length)return{found:c,missing:e};let f={id:j.memoryNoteTable.id,path:j.memoryNoteTable.path,description:j.memoryNoteTable.description},g=await i.database.select(f).from(j.memoryNoteTable).where((0,d.inArray)(j.memoryNoteTable.path,b)),h=new Map(g.map(a=>[a.path.toLowerCase(),a]));if(b.some(a=>!h.has(a.toLowerCase()))){let a=await i.database.select({...f,aliases:j.memoryNoteTable.aliases}).from(j.memoryNoteTable),b=(a,b)=>{let c=a.trim().toLowerCase();c&&!h.has(c)&&h.set(c,b)};for(let c of a)b(c.path,c);for(let c of a)for(let a of(b(c.path.slice(c.path.indexOf("/")+1),c),c.aliases??[]))b(a,c)}let k=new Set;for(let a of b){let b=h.get(a.toLowerCase());if(!b){e.push(a);continue}k.has(b.id)||(k.add(b.id),c.push(b))}return{found:c,missing:e}}async function w(a){let{found:b}=await v([a]);return b[0]?.path??null}async function x(a,b={}){let{found:c,missing:g}=await v(a);if(!c.length)return{notes:[],missing:g};let h=c.map(a=>a.id),k=await i.database.select({id:j.memoryFactTable.id,noteId:j.memoryFactTable.noteId,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad,source:j.memoryFactTable.source,createdAt:j.memoryFactTable.createdAt,saidAt:j.callTable.startedAt}).from(j.memoryFactTable).leftJoin(j.callTable,(0,d.eq)(j.memoryFactTable.callId,j.callTable.id)).where((0,d.and)((0,d.eq)(j.memoryFactTable.isLatest,!0),(0,d.inArray)(j.memoryFactTable.noteId,h))).orderBy((0,e.asc)(j.memoryFactTable.id));return!1!==b.touch&&await i.database.update(j.memoryNoteTable).set({hits:f.sql`${j.memoryNoteTable.hits} + 1`,lastReadAt:new Date}).where((0,d.inArray)(j.memoryNoteTable.id,h)),{notes:c.map(a=>({path:a.path,description:a.description,facts:k.filter(b=>b.noteId===a.id).map(a=>({id:a.id,text:a.text,...a.saidAt?{saidAt:a.saidAt}:{}}))})),missing:g}}(0,d.inArray)(j.memoryNoteTable.path,l.MEMORY_ALWAYS_LISTED);let G=a=>a.toLowerCase().replace(/[\s.,!?…·'"`]/g,"");async function y(a,b,c=null){let e,g=[],k=[],l=[];await (e=()=>i.database.transaction(async e=>{let[i]=await e.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0))),m=h.MEMORY_LIMITS.carried-Number(i?.count??0),n=(a,b)=>!!a&&(m>0?(m-=1,!0):(l.push(b),!1));for(let f of a){let a,h=f.path.trim();if(!h)continue;k.push(h);let i=f.description?.trim(),l=f.aliases?.map(a=>a.trim()).filter(Boolean),o=(f.facts??[]).map(a=>({...a,text:a.text.trim()})).filter(a=>a.text),[p]=await e.select({id:j.memoryNoteTable.id}).from(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.path,h));if(p)a=p.id,(i||l)&&await e.update(j.memoryNoteTable).set({...i?{description:i}:{},...l?{aliases:l}:{},updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a));else{let[b]=await e.insert(j.memoryNoteTable).values({path:h,description:i??o[0]?.text.slice(0,80)??h,...l?{aliases:l}:{}}).returning({id:j.memoryNoteTable.id});a=b.id,i||g.push(h)}if(!o.length)continue;let q=await e.select({id:j.memoryFactTable.id,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))),r=new Map(q.map(a=>[G(a.text),a])),s=async(a,b,c)=>{if(b===a.alwaysLoad)return;let f=b?n(!0,c):(m+=1,!1);f!==a.alwaysLoad&&(await e.update(j.memoryFactTable).set({alwaysLoad:f}).where((0,d.eq)(j.memoryFactTable.id,a.id)),a.alwaysLoad=f)};for(let f of o){if(null!=f.replaces){let[g]=await e.select({id:j.memoryFactTable.id,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,f.replaces),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0)));if(g){if(G(g.text)===G(f.text)){await s(g,f.alwaysLoad??g.alwaysLoad,f.text),r.set(G(g.text),g);continue}await e.update(j.memoryFactTable).set({isLatest:!1}).where((0,d.eq)(j.memoryFactTable.id,g.id)),r.delete(G(g.text)),g.alwaysLoad&&(m+=1);let[h]=await e.insert(j.memoryFactTable).values({noteId:a,text:f.text,source:b,callId:c,alwaysLoad:n(f.alwaysLoad??g.alwaysLoad,f.text)}).returning({id:j.memoryFactTable.id,alwaysLoad:j.memoryFactTable.alwaysLoad});r.set(G(f.text),{...h,text:f.text});continue}}let g=r.get(G(f.text));if(g){null!=f.alwaysLoad&&await s(g,f.alwaysLoad,f.text);continue}let[h]=await e.insert(j.memoryFactTable).values({noteId:a,text:f.text,source:b,callId:c,alwaysLoad:n(!0===f.alwaysLoad,f.text)}).returning({id:j.memoryFactTable.id,alwaysLoad:j.memoryFactTable.alwaysLoad});r.set(G(f.text),{...h,text:f.text})}await e.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a))}}),E("memory",e));let{notes:m}=await x(k,{touch:!1});return F(),{notes:m,unnamed:g,notLoaded:l}}async function z(a,b,c){let e,g=await (e=()=>i.database.transaction(async e=>{if(c){let[a]=await e.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0)));if(Number(a?.count??0)>=h.MEMORY_LIMITS.carried)return"full"}let[g]=await e.update(j.memoryFactTable).set({alwaysLoad:c}).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))).returning({id:j.memoryFactTable.id});return g?"ok":"missing"}),E("memory",e));return"ok"===g&&F(),g}async function A(){let[a,b]=await Promise.all([i.database.select({id:j.memoryNoteTable.id,path:j.memoryNoteTable.path,description:j.memoryNoteTable.description,aliases:j.memoryNoteTable.aliases,hits:j.memoryNoteTable.hits,lastReadAt:j.memoryNoteTable.lastReadAt,createdAt:j.memoryNoteTable.createdAt}).from(j.memoryNoteTable),i.database.select({noteId:j.memoryFactTable.noteId,count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.isLatest,!0)).groupBy(j.memoryFactTable.noteId)]),c=new Map(b.map(a=>[a.noteId,a.count]));return a.filter(a=>(0,l.isAlwaysListed)(a.path)||(c.get(a.id)??0)>0).sort((a,b)=>Number((0,l.isAlwaysListed)(b.path))-Number((0,l.isAlwaysListed)(a.path))||(0,l.recallScore)(b)-(0,l.recallScore)(a)).map(a=>({path:a.path,description:a.description,aliases:a.aliases,factCount:c.get(a.id)??0,lastSeenAt:a.lastReadAt??a.createdAt}))}async function B(a){let b,c=await (b=()=>i.database.transaction(async b=>{let c=await b.delete(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.id,a)).returning({noteId:j.memoryFactTable.noteId});if(0===c.length)return null;let e=c[0].noteId,[g]=await b.select({path:j.memoryNoteTable.path,ownedByUser:j.memoryNoteTable.ownedByUser}).from(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,e)),[h]=await b.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.noteId,e),(0,d.eq)(j.memoryFactTable.isLatest,!0)));return h?.count!==0||!g||g.ownedByUser||(0,l.isAlwaysListed)(g.path)?(await b.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,e)),{path:g?.path??"",noteGone:!1}):(await b.delete(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,e)),{path:g.path,noteGone:!0})}),E("memory",b));return c&&F(),c}async function C(a){let[b]=await i.database.select({source:j.memoryFactTable.source,callId:j.memoryFactTable.callId}).from(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.id,a));return b??null}async function D(){let a=await i.database.delete(j.memoryNoteTable).returning({id:j.memoryNoteTable.id});return await u(),a.length>0&&F(),a.length}a.s(["addFact",0,q,"createNote",0,n,"deleteAllNotes",0,D,"deleteNote",0,p,"findFactCall",0,C,"forgetFact",0,s,"forgetFactById",0,B,"listAlwaysLoaded",0,function(){return i.database.select({id:j.memoryFactTable.id,path:j.memoryNoteTable.path,text:j.memoryFactTable.text}).from(j.memoryFactTable).innerJoin(j.memoryNoteTable,(0,d.eq)(j.memoryFactTable.noteId,j.memoryNoteTable.id)).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0))).orderBy((0,e.asc)(j.memoryNoteTable.path),(0,e.asc)(j.memoryFactTable.id)).limit(h.MEMORY_LIMITS.carried)},"listNoteIndex",0,A,"readNotes",0,x,"resolveNotePath",0,w,"reviseFact",0,r,"setFactAlwaysLoad",0,z,"updateNote",0,o,"writeNotes",0,y]),c()}catch(a){c(a)}},!1),661210,a=>{"use strict";var b=a.i(53112),c=a.i(706210);let d=b.z.enum(["user","call","bot"]),e=b.z.object({id:b.z.number(),text:b.z.string(),alwaysLoad:b.z.boolean(),source:d.nullish(),createdAt:c.DateLikeSchema});b.z.object({id:b.z.number(),path:b.z.string(),description:b.z.string(),aliases:b.z.string().array().nullish(),ownedByUser:b.z.boolean(),hits:b.z.number(),lastReadAt:c.DateLikeSchema.nullable(),createdAt:c.DateLikeSchema,updatedAt:c.DateLikeSchema,factCount:b.z.number(),facts:e.array()});let f=[{path:"profile",of:"The user themselves — their name, age, what they do, where they live, and whatever else says who they are"},{path:"preferences",of:"How they want things done, and said"},{path:"people/",of:"Someone in their life, and what matters about them"},{path:"projects/",of:"Something with an end — a trip, a purchase, a deadline, a thing being built"},{path:"topics/",of:"Something ongoing that keeps coming back"}],g=f.filter(a=>!a.path.endsWith("/")).map(a=>a.path),h=f.filter(a=>a.path.endsWith("/")).map(a=>a.path.slice(0,-1)),i=RegExp(`^(?:${g.join("|")}|(?:${h.join("|")})/.+)$`),j=["profile","preferences"];a.s(["MEMORY_ALWAYS_LISTED",0,j,"MEMORY_PATHS",0,f,"appNoteLine",0,a=>f.find(b=>b.path===a)?.of??null,"isAlwaysListed",0,a=>j.includes(a),"isMemoryPath",0,a=>i.test(a),"recallScore",0,function(a){let b=(0,c.toDate)(a.lastReadAt??a.createdAt),d=Math.max(0,(Date.now()-b.getTime())/864e5);return(a.hits+1)/(1+d)}])},780946,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(258261),f=a.i(530385),g=a.i(203469),h=a.i(569572),i=a.i(184838),j=a.i(714428),k=a.i(221214),l=a.i(293480),m=a.i(643020),n=b([i,k]);[i,k]=n.then?(await n)():n;let z=()=>g.appEvents.emit({type:"routines"});async function o(a,b){return i.database.select({id:j.threadTable.id,status:j.threadTable.status,outcome:j.threadTable.outcome,updatedAt:j.threadTable.updatedAt}).from(j.threadTable).where((0,d.eq)(j.threadTable.routineId,a)).orderBy((0,f.desc)(j.threadTable.createdAt)).limit(b)}let A=async a=>{let{createdAt:b,...c}=a;return{...c,runs:await o(a.id,h.ROUTINE.runsShown)}};async function p(){let a=await i.database.select().from(j.routineTable).orderBy(j.routineTable.createdAt);return Promise.all(a.map(A))}async function q(a){let[b]=await i.database.select().from(j.routineTable).where((0,d.eq)(j.routineTable.id,a));return b?A(b):null}async function r(a){let b=await q(a.trim());if(b)return b;let c=a.trim().toLowerCase(),d=(await p()).filter(a=>a.label.toLowerCase()===c);return 1===d.length?d[0]:null}async function s(a){let b=await (0,k.findJobBot)(a);return(!b||b.disabled)&&(0,l.publicError)("Choose an enabled bot."),b.name}function t(a,b){b&&"once"===a.kind&&(0,m.momentOf)(a.at)<=new Date&&(0,l.publicError)("That time has passed. Pick a later one.")}async function u(a){let[{total:b}]=await i.database.select({total:(0,e.count)()}).from(j.routineTable);b>=h.ROUTINE.max&&(0,l.publicError)(`There are already ${h.ROUTINE.max} routines. Delete one to make another.`),t(a.schedule,!0);let[c]=await i.database.insert(j.routineTable).values({id:crypto.randomUUID(),...a,bot:await s(a.bot),nextRunAt:(0,m.nextRun)(a.schedule,new Date)}).returning();return z(),A(c)}async function v(a,b){let[c]=await i.database.select().from(j.routineTable).where((0,d.eq)(j.routineTable.id,a));if(!c)return null;let e=b.schedule??c.schedule,f=!!b.schedule||b.enabled&&!c.enabled;f&&t(e,b.enabled??c.enabled);let[g]=await i.database.update(j.routineTable).set({...b,...b.bot?{bot:await s(b.bot)}:{},...f?{nextRunAt:(0,m.nextRun)(e,new Date)}:{}}).where((0,d.eq)(j.routineTable.id,a)).returning();return z(),A(g)}async function w(a){let b=await i.database.delete(j.routineTable).where((0,d.eq)(j.routineTable.id,a)).returning({id:j.routineTable.id});return b.length&&z(),b.length>0}async function x(a){return(await o(a,1))[0]??null}async function y(a){return(await i.database.select({id:j.threadTable.id}).from(j.threadTable).where((0,d.and)((0,d.eq)(j.threadTable.routineId,a),(0,d.eq)(j.threadTable.seen,!1),(0,d.inArray)(j.threadTable.status,["done","cancelled"])))).map(a=>a.id)}a.s(["createRoutine",0,u,"deleteRoutine",0,w,"findRoutine",0,q,"latestRun",0,x,"listRoutines",0,p,"listUnseenRunIds",0,y,"resolveRoutine",0,r,"updateRoutine",0,v]),c()}catch(a){c(a)}},!1),643020,a=>{"use strict";var b=a.i(723885),c=a.i(569572),d=a.i(706210);let e=b.default.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"A time is HH:MM, 00:00 to 23:59");function f(a){let[b,c]=a.split(" "),[d,e,f]=b.split("-").map(Number),[g,h]=c.split(":").map(Number);return new Date(d,e-1,f,g,h)}let g=/^\d{4}-\d\d-\d\d ([01]\d|2[0-3]):[0-5]\d$/,h=b.default.string().regex(g,'A moment is "YYYY-MM-DD HH:MM"').refine(a=>{if(!g.test(a))return!0;let b=f(a);return b.getMonth()===Number(a.slice(5,7))-1&&b.getDate()===Number(a.slice(8,10))},"There is no such day"),i=b.default.discriminatedUnion("kind",[b.default.object({kind:b.default.literal("once"),at:h}),b.default.object({kind:b.default.literal("daily"),time:e,days:b.default.array(b.default.number().int().min(1).max(7)).min(1,"Pick at least one day").transform(a=>[...new Set(a)].sort((a,b)=>a-b))}),b.default.object({kind:b.default.literal("every"),hours:b.default.number().int().min(c.ROUTINE.minHours,`No more often than every ${c.ROUTINE.minHours}h`).max(168)})]),j=b.default.object({bot:b.default.string().trim().min(1,"Pick a bot"),label:b.default.string().trim().min(1,"Give it a name").max(80),request:b.default.string().trim().min(1,"Say what it should do"),schedule:i}),k=b.default.object({id:b.default.string(),status:b.default.enum(["running","waiting","done","cancelled"]),outcome:b.default.string().nullable(),updatedAt:d.DateLikeSchema});j.extend({id:b.default.string(),enabled:b.default.boolean(),nextRunAt:d.DateLikeSchema,runs:b.default.array(k)});let l=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];a.s(["RoutineInputSchema",0,j,"RoutineScheduleSchema",0,i,"momentOf",0,f,"nextRun",0,function(a,b){if("once"===a.kind)return f(a.at);if("every"===a.kind)return new Date(b.getTime()+36e5*a.hours);let[c,d]=a.time.split(":").map(Number);for(let e=0;e<=7;e++){let f=new Date(b);f.setDate(f.getDate()+e),f.setHours(c,d,0,0);let g=0===f.getDay()?7:f.getDay();if(f>b&&a.days.includes(g))return f}return new Date(b.getTime()+864e5)},"scheduleText",0,function(a){if("once"===a.kind){let[b,c]=a.at.split(" "),[,d,e]=b.split("-").map(Number);return`Once \xb7 ${m[d-1]} ${e} ${c}`}if("every"===a.kind)return 1===a.hours?"Every hour":`Every ${a.hours} hours`;let{days:b,time:c}=a;if(7===b.length)return`Daily ${c}`;if(1===b.length)return`${l[b[0]-1]} ${c}`;let d=b.every((a,c)=>0===c||a===b[c-1]+1)?`${l[b[0]-1]}–${l[b.at(-1)-1]}`:b.map(a=>l[a-1]).join(" ");return`Daily ${c} \xb7 ${d}`}])},487591,422807,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(203469),e=a.i(569572);a.i(821415),a.i(176668);let f=a=>a.trim().toLowerCase().replace(/^[a-z]+:\/\//,"").replace(/^www\./,"").replace(/[/?#].*$/,"");a.s(["siteOf",0,f],422807);let g=(0,c.join)(e.DATA_DIR,e.PATHS.signIns),h=a=>(0,c.join)(g,`${encodeURIComponent(f(a))}.json`),i=()=>d.appEvents.emit({type:"signins"});async function j(a){try{return JSON.parse(await (0,b.readFile)(h(a),"utf8"))}catch{return null}}async function k(a){await (0,b.mkdir)(g,{recursive:!0}),await (0,b.writeFile)(h(a.site),JSON.stringify(a),{mode:384}),i()}async function l(){let a=await (0,b.readdir)(g).catch(()=>[]);return(await Promise.all(a.filter(a=>a.endsWith(".json")).map(a=>j(decodeURIComponent(a.slice(0,-5)))))).flatMap(a=>a?[(({state:a,...b})=>b)(a)]:[]).sort((a,b)=>a.site.localeCompare(b.site))}async function m(a){let b=f(a.site),c=await j(b),d={site:b,account:a.account.trim()||b,bots:[...new Set([...c?.bots??[],a.bot])],asking:(c?.asking??[]).filter(b=>b!==a.bot),keptAt:new Date().toISOString(),usedAt:c?.usedAt??null,state:a.state};return await k(d),(({state:a,...b})=>b)(d)}async function n(a,b){let c=await j(a);if(!c)return{kind:"none",kept:(await l()).map(a=>a.site)};if(!c.bots.includes(b))return c.asking.includes(b)||await k({...c,asking:[...c.asking,b]}),{kind:"ask",signIn:(({state:a,...b})=>b)(c)};let d={...c,usedAt:new Date().toISOString()};return await k(d),{kind:"state",signIn:(({state:a,...b})=>b)(d),state:c.state}}async function o(a,b,c){let d=await j(a);d&&await k({...d,bots:c?[...new Set([...d.bots,b])]:d.bots.filter(a=>a!==b),asking:d.asking.filter(a=>a!==b)})}async function p(a){await (0,b.rm)(h(a),{force:!0}),i()}a.s(["borrowSignIn",0,n,"keepSignIn",0,m,"removeSignIn",0,p,"setSignInBot",0,o],487591)},138100,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(569572),e=a.i(821415),f=a.i(176668),g=a.i(182248),h=a.i(762805);let i=(0,c.join)(d.APP_DIR,d.PATHS.skills.default),j=(0,c.join)(d.DATA_DIR,d.PATHS.skills.custom),k=a=>(0,c.join)(e.WORKSPACE,(0,e.botFolder)(a),d.PATHS.skills.own);async function l(a,e){let f=(0,c.join)(d.APP_DIR,d.PATHS.skills.seeds,a.toLowerCase());await (0,b.cp)(f,k(e),{recursive:!0,force:!1}).catch(a=>{if("ENOENT"!==a.code)throw a})}async function m(a,b){let c=[],d=new Set;for(let e of b){let b;try{b=await a.readdir(e,{withFileTypes:!0})}catch{continue}for(let i of b){let b,j;if(!i.isDirectory())continue;let k=`${e}/${i.name}`,l=`${k}/SKILL.md`;try{b=await a.readFile(l,"utf-8")}catch{continue}try{j=(0,h.parseFrontmatter)(b)}catch(a){f.logger.warn(`skill ${k}: SKILL.md front matter did not load — ${(0,g.errorToString)(a)}`);continue}!(!(0,h.runsHere)(j)||d.has(j.name))&&(d.add(j.name),j.disabled||c.push({name:j.name,description:j.description,path:k}))}}return c}a.s(["giveSeedSkills",0,l,"loadSkills",0,(a,b)=>m(a,b?[i,k(b),j]:[i,j])])},762805,951941,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(622650),e=a.i(569572),f=a.i(53112);let g=f.z.enum(["custom","default"]),h=f.z.string().trim().min(1,"Skill name is required").max(64,"Skill name is too long").regex(/^[a-z0-9][a-z0-9_-]*$/i,"Use letters, numbers, dashes and underscores only"),i=f.z.object({name:h,description:f.z.string().trim().min(1,"Description is required"),disabled:f.z.boolean().optional(),platforms:f.z.array(f.z.string()).optional()}),j=i.extend({content:f.z.string().trim().min(1,"Content is required")}),k=f.z.object({fileName:f.z.string().trim().min(1),base64:f.z.string().min(1)});a.s(["SkillDraftSchema",0,j,"SkillFrontmatterSchema",0,i,"SkillNameSchema",0,h,"SkillSourceSchema",0,g,"SkillUploadSchema",0,k],951941);var l=a.i(293480);let m={default:(0,c.resolve)(e.APP_DIR,e.PATHS.skills.default),custom:(0,c.resolve)(e.DATA_DIR,e.PATHS.skills.custom)};function n(a,b){let d=m[a],e=(0,c.resolve)(d,b),f=(0,c.relative)(d,e);return(!f||f.startsWith("..")||f.includes(c.sep)||"."===f)&&(0,l.publicError)("Skill not found"),e}function o(a){let b=a.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);if(!b)return{head:null,body:a.trim(),rest:a,fence:""};let c=a.slice(b[0].length);return{head:b[1]??null,body:c.trim(),rest:c,fence:b[0]}}function p(a){let b,{head:c}=o(a);c||(0,l.publicError)("SKILL.md needs a YAML block with name and description");try{b=(0,d.parse)(c)}catch{(0,l.publicError)("SKILL.md frontmatter is not valid YAML")}let e=i.safeParse(b);return e.success||(0,l.publicError)(`SKILL.md frontmatter: ${e.error.issues[0]?.message??"invalid"}`),e.data}let q=/^disabled[ \t]*:[^\n]*(\r?\n|$)/m;async function r(a,e,f){let g,h,i=(0,c.join)(n(a,e),"SKILL.md");try{g=await (0,b.readFile)(i,"utf-8")}catch{(0,l.publicError)("Skill not found")}let{head:j,rest:k,fence:m}=o(g);j||(0,l.publicError)("This SKILL.md has no frontmatter to write to");try{h=(0,d.parse)(j)}catch{(0,l.publicError)("SKILL.md frontmatter is not valid YAML")}(!h||"object"!=typeof h||Array.isArray(h))&&(0,l.publicError)("SKILL.md frontmatter is not a YAML mapping");let p=m.includes("\r\n")?"\r\n":"\n",r=f?q.test(j)?j.replace(q,"disabled: true$1"):`${j.replace(/\s+$/,"")}${p}disabled: true`:j.replace(q,"").replace(/\s+$/,"");await (0,b.writeFile)(i,`---${p}${r}${p}---${p}${k}`)}async function s(a,d){try{let e=await (0,b.readFile)((0,c.join)(m[a],d,"SKILL.md"),"utf-8");return{...p(e),source:a,dir:d}}catch{return null}}async function t(a,d){let e=n("custom",a),f=async a=>(0,b.stat)(a).then(()=>!0,()=>!1);await f(e)&&(0,l.publicError)(`A skill named "${a}" already exists`),await f(n("default",a))&&(0,l.publicError)(`"${a}" is a built-in skill — pick another name`),await (0,b.mkdir)(e,{recursive:!0});try{for(let[a,f]of d){let d=function(a,b){let d=(0,c.resolve)(a,b);return((0,c.relative)(a,d).startsWith("..")||(0,c.resolve)(d)!==d)&&(0,l.publicError)("File not found"),d}(e,a);await (0,b.mkdir)((0,c.resolve)(d,".."),{recursive:!0}),await (0,b.writeFile)(d,f)}}catch(a){throw await (0,b.rm)(e,{recursive:!0,force:!0}),a}let g=await s("custom",a);return g||(await (0,b.rm)(e,{recursive:!0,force:!0}),(0,l.publicError)("SKILL.md could not be read back")),g}async function u(a){let c=n("custom",a);await (0,b.stat)(c).then(()=>!0,()=>!1)||(0,l.publicError)("Skill not found"),await (0,b.rm)(c,{recursive:!0,force:!0})}a.s(["deleteCustomSkill",0,u,"parseFrontmatter",0,p,"renderSkillMarkdown",0,function(a,b){return`---
|
|
118
|
+
Coordinator: ${f.bot}. Continue as ${a.bot} in this thread.`,hidden:!0}),await (0,t.consumeRoomInbox)(a);let g=await (0,t.listParticipantTranscript)(a.threadId,a.bot);await (0,r.runBot)({bot:a.bot,messages:(0,r.resumeTranscript)(g,await (0,t.listRoomReceipts)(a.threadId,a.bot,g))},{signal:b,threadId:a.threadId,parent:a.id,caller:a.caller,owner:f.bot,contextBudget:await (0,t.roomContextBudget)(a.threadId,a.bot),compactNow:()=>O.delete(P(a.threadId,a.bot)),session:(0,k.botBrowserSession)(a.threadId,a.bot),notes:()=>(0,t.consumeRoomInbox)(a),send:async c=>{b.throwIfAborted();let d=c.to.trim();if(d.toLowerCase()===u.ROOM_THURSDAY.toLowerCase())d=u.ROOM_THURSDAY;else{let a=await (0,q.findJobBot)(d);(!a||a.disabled)&&(0,n.publicError)(`No enabled bot named "${d}".`),d=a.name}let e=await (0,t.sendRoomMessage)(a,{...c,to:d});return z(a.threadId).catch(a=>m.logger.error("room message scheduling",a)),e},emit:async g=>{(!b.aborted||"tool-result"===g.type)&&(await c.on(g),"step"===g.type&&await (0,v.addThreadUsage)(a.threadId,g.usage,a.bot===f.bot?{tokens:g.usage.input,budget:g.budget}:null),"compact"===g.type&&await (0,v.addThreadUsage)(a.threadId,g.usage),"turn-end"===g.type&&(d=g),"error"===g.type&&(e={message:g.message,retry:g.retry},g.budget&&await (0,t.lowerRoomContextBudget)(a,g.budget)))}})}catch(c){b.aborted||(m.logger.error(`thread ${a.threadId}: ${a.bot} broke`,c),e={message:(0,g.modelErrorToString)(c),retry:!(0,n.isPublicError)(c)&&!(0,g.isProviderRefusal)(c)})}return{ending:d,failure:e}}class Q{work;signal;lane;assistant;tool;parts;calls;results;constructor(a,b){this.work=a,this.signal=b,this.lane=(0,p.PromiseChain)(),this.assistant=null,this.tool=null,this.parts={assistant:[],tool:[]},this.calls=new Set,this.results=new Set}async write(a,b,c=!1){let d={bot:this.work.bot,parent:this.work.id,role:b.role,content:b.content,compact:c,note:c};return null===a?(0,t.appendRoomMessage)(this.work.threadId,d):(await (0,v.upsertMessage)(this.work.threadId,a,d),a)}on(a){return this.lane(async()=>{if(!this.signal.aborted||"tool-result"===a.type)if("text"===a.type)this.parts.assistant.push({type:"text",text:a.text}),this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant});else if("tool"===a.type){if(this.calls.has(a.id)){let b=this.parts.assistant.find(b=>"tool-call"===b.type&&b.toolCallId===a.id);b&&"tool-call"===b.type&&a.providerOptions&&(b.providerOptions=a.providerOptions,this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant}));return}this.calls.add(a.id),this.parts.assistant.push({type:"tool-call",toolCallId:a.id,toolName:a.name,input:a.input,...a.providerExecuted?{providerExecuted:!0}:{},...a.providerOptions?{providerOptions:a.providerOptions}:{}}),this.assistant=await this.write(this.assistant,{role:"assistant",content:this.parts.assistant})}else if("tool-result"===a.type){if(this.results.has(a.id))return;this.results.add(a.id),this.parts.tool.push({type:"tool-result",toolCallId:a.id,toolName:a.name,output:a.error?{type:"error-text",value:String(a.output)}:"string"==typeof a.output?{type:"text",value:a.output}:{type:"json",value:a.output}}),this.tool=await this.write(this.tool,{role:"tool",content:this.parts.tool})}else if("step"===a.type){let b=[this.assistant,this.tool];for(let[c,d]of a.messages.entries())await this.write(b[c]??null,d);let c=b.slice(a.messages.length).filter(a=>null!==a);c.length&&await (0,v.deleteMessages)(this.work.threadId,c),this.assistant=this.tool=null,this.parts={assistant:[],tool:[]}}else"compact"===a.type&&await this.write(null,{role:"user",content:a.text},!0)})}}async function C(a){let b=[...L.values()].filter(b=>b.threadId===a);for(let a of b)a.stop.abort();await Promise.all(b.map(a=>a.done))}async function D(a){await M(a,async()=>{let b=await (0,v.findThread)(a);b||(0,n.publicError)("No such thread."),b.endedAt&&(0,n.publicError)("That thread has already ended."),await (0,t.cancelRoom)(a),await (0,v.updateThread)(a,{status:"cancelled",outcome:null,pending:null,seen:!0,endedAt:new Date}),await C(a),await (0,k.closeJobShell)(a)})}async function E(a){return M(a,()=>F(a))}async function F(a){let b=await (0,v.findThread)(a);await (0,t.cancelRoom)(a),await C(a),await (0,k.removeJobBrowsers)(a);let c=await (0,v.deleteThread)(a);return c&&b&&await (0,k.removeJobScratch)(a,b.label),c}async function G(){let a=0;for(let b of(await (0,v.listThreadFolders)()))("done"===b.status||"cancelled"===b.status)&&await M(b.id,async()=>{let c=await (0,v.findThread)(b.id);(c?.status==="done"||c?.status==="cancelled")&&await F(b.id)&&(a+=1)});return a}async function H(){let a=Date.now()-f.WORKSPACE_KEEP.forMs,b=b=>("done"===b.status||"cancelled"===b.status)&&(b.endedAt??b.updatedAt).getTime()<a,c=new Set(await (0,k.listScratchFolders)()),d=[];for(let a of(await (0,v.listThreadFolders)())){let e=(0,k.jobScratch)(a.id,a.label);c.delete(e)&&b(a)&&await M(a.id,async()=>{let c=await (0,v.findThread)(a.id);c&&b(c)&&(await (0,k.closeHiddenBrowser)(a.id),await (0,k.removeJobScratch)(a.id,a.label),d.push(e))})}return d.push(...await (0,k.removeUnchangedFolders)([...c])),await (0,k.pruneJobFiles)(),d.length&&m.logger.info(`cleared ${d.length} old job folder(s): ${d.join(", ")}`),d}async function I(){for(let a of(await (0,v.listRunningThreadIds)()))await M(a,async()=>{[...L.values()].some(b=>b.threadId===a)||(await (0,v.findThread)(a))?.status==="running"&&await (0,t.pauseRoom)(a,"The server restarted. Resume from the saved conversation.")})}async function J(a,b=!1){let c=(async()=>{let c=await (0,v.listRunningThreadIds)();await Promise.all(c.map(c=>M(c,async()=>{(await (0,v.findThread)(c))?.status==="running"&&(await C(c),await (0,t.pauseRoom)(c,a,b))})))})();N.current=c,await c}async function K(){if(await N.current,e.presence.watching)for(let a of(await (0,v.listAutoStoppedThreads)()))await M(a,async()=>{let b=await (0,v.findThread)(a);b?.status==="waiting"&&b.pending?.auto&&await (0,t.resumeRoom)(a,!1)}),await z(a)}a.s(["answerThread",0,y,"askCompact",0,function(a,b){O.add(P(a,b))},"cancelThread",0,D,"pauseThreads",0,J,"removeFinishedThreads",0,G,"removeThread",0,E,"resumeStoppedThreads",0,K,"startThread",0,x,"sweepJobFiles",0,H,"sweepThreads",0,I]),c()}catch(a){c(a)}},!1),317844,a=>a.a(async(b,c)=>{try{var d,e=a.i(106450),f=a.i(64203),g=a.i(569572),h=a.i(176668),i=a.i(182248),j=a.i(947950),k=a.i(899284),l=b([j]);[j]=l.then?(await l)():l;class m extends Error{serverName;authorizationUrl;constructor(a,b){super(`MCP server "${a}" requires authorization`),this.serverName=a,this.authorizationUrl=b,this.name="McpAuthRequiredError"}}class n{store;serverName;oauth;callbackUrl;clientName;staticClient;lastAuthorizationUrl;constructor(a,b,c,d,e,f){this.store=a,this.serverName=b,this.oauth=c,this.callbackUrl=d,this.clientName=e,this.staticClient=f}get redirectUrl(){return this.callbackUrl}get clientMetadata(){return{client_name:this.clientName,redirect_uris:[this.callbackUrl],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"client_secret_post"}}async persist(a){this.oauth={...this.oauth,...a},await this.store.saveOAuth(this.serverName,this.oauth)}clientInformation(){return this.staticClient??this.oauth.clientInformation}async saveClientInformation(a){await this.persist({clientInformation:a})}tokens(){return this.oauth.tokens}async saveTokens(a){await this.persist({tokens:a})}authorizationServerInformation(){return this.oauth.authorizationServer}async saveAuthorizationServerInformation(a){await this.persist({authorizationServer:a})}codeVerifier(){if(!this.oauth.codeVerifier)throw Error("No code verifier saved");return this.oauth.codeVerifier}async saveCodeVerifier(a){await this.persist({codeVerifier:a})}state(){return crypto.randomUUID()}async saveState(a){await this.persist({state:a})}storedState(){return this.oauth.state}redirectToAuthorization(a){this.lastAuthorizationUrl=a}async invalidateCredentials(a){let b={...this.oauth};("all"===a||"client"===a)&&(b.clientInformation=void 0),("all"===a||"tokens"===a)&&(b.tokens=void 0),("all"===a||"verifier"===a)&&(b.codeVerifier=void 0),this.oauth=b,await this.store.saveOAuth(this.serverName,b)}}let o=globalThis;o.__thursdayMcpManager&&o.__thursdayMcpManager.dispose(),d={callbackUrl:new URL("/api/mcp/oauth/callback",g.APP_URL).href,clientName:g.APP_NAME},o.__thursdayMcpManager=new class a{store;sessions;connecting;idleTtlMs;callbackUrl;clientName;constructor(a,b){this.store=a,this.sessions=new Map,this.connecting=new Map,this.callbackUrl=b.callbackUrl,this.idleTtlMs=b.idleTtlMs??18e5,this.clientName=b.clientName??g.APP_NAME}async connect(a){let b=this.connecting.get(a);if(b)return b;let c=this.doConnect(a).finally(()=>this.connecting.delete(a));return this.connecting.set(a,c),c}async callTool(a,b,c,d){let f=await this.ensureClient(a);try{let e=await f.callTool({name:b,arguments:c,options:d?{signal:d}:void 0});return this.touch(a),e}catch(b){if(b instanceof e.UnauthorizedError)throw await this.closeSession(a),new m(a);throw b}}async finishAuthorization(a){let b=a.get("state"),c=a.get("code");if(!b||!c)throw Error("OAuth callback is missing code or state");let d=await this.store.findByOAuthState(b);if(!d||!(0,k.isRemoteConfig)(d.config))throw Error("No server is waiting for this authorization");let f=this.providerFor(d),g=await (0,e.auth)(f,{serverUrl:d.config.url,authorizationCode:c,callbackState:b});if("AUTHORIZED"!==g)throw Error(`Token exchange ended in "${g}"`);return await f.invalidateCredentials("verifier"),await this.connect(d.name),d.name}async disconnect(a){await this.closeSession(a)}async dispose(){await Promise.all([...this.sessions.keys()].map(a=>this.closeSession(a)))}async doConnect(a){await this.closeSession(a);let b=await this.store.load(a);if(!b)throw Error(`Unknown MCP server "${a}"`);let c={};try{let d=await this.openClient(b,c),e=(await d.listTools()).tools.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema,outputSchema:a.outputSchema}));return this.adopt(a,d),await this.store.saveConnectionResult(a,{toolInfo:e,lastError:null}),h.logger.info(`mcp "${a}" connected — ${e.length} tools`),{status:"connected",tools:e}}catch(l){var d,f;let g;if(l instanceof e.UnauthorizedError||l?.cause instanceof e.UnauthorizedError){let b=c.href;if(b)return await this.store.saveConnectionResult(a,{toolInfo:[],lastError:"Authorization required — finish sign-in in the opened tab"}),{status:"auth_required",authorizationUrl:b}}let j=(d=l,f=b,g=(0,i.errorToString)(d),/\b40[13]\b/.test(g)&&/OAuth|register/i.test(g)&&(0,k.isRemoteConfig)(f.config)&&!f.config.oauthClient?"This server does not allow automatic client registration. Register an OAuth app with the provider and add its client ID and secret.":g);throw await this.store.saveConnectionResult(a,{toolInfo:[],lastError:j}),h.logger.warn(`mcp "${a}" failed — ${j}`),Error(j,{cause:l})}}async openClient(a,b={}){if((0,k.isRemoteConfig)(a.config)){let c=this.providerFor(a);try{return await (0,e.createMCPClient)({name:this.clientName,transport:{type:"http",url:a.config.url,headers:a.config.headers,authProvider:c,redirect:"follow"}})}finally{b.href=c.lastAuthorizationUrl?.href}}return(0,e.createMCPClient)({name:this.clientName,transport:new f.Experimental_StdioMCPTransport({command:a.config.command,args:a.config.args,env:a.config.env})})}providerFor(a){let b=(0,k.isRemoteConfig)(a.config)?a.config.oauthClient:void 0;return new n(this.store,a.name,a.oauth??{},this.callbackUrl,this.clientName,b&&{client_id:b.clientId,client_secret:b.clientSecret})}async ensureClient(a){let b=this.sessions.get(a);if(b)return b.client;let c=await this.connect(a);if("auth_required"===c.status)throw new m(a,c.authorizationUrl);let d=this.sessions.get(a);if(!d)throw Error(`Session for "${a}" vanished mid-connect`);return d.client}adopt(a,b){this.sessions.set(a,{client:b,idleTimer:this.armIdleTimer(a)})}touch(a){let b=this.sessions.get(a);b&&(clearTimeout(b.idleTimer),b.idleTimer=this.armIdleTimer(a))}armIdleTimer(a){let b=setTimeout(()=>{this.closeSession(a)},this.idleTtlMs);return b.unref?.(),b}async closeSession(a){let b=this.sessions.get(a);b&&(this.sessions.delete(a),clearTimeout(b.idleTimer),await b.client.close().catch(()=>{}))}}({load:a=>(0,j.findServer)(a),saveOAuth:(a,b)=>(0,j.saveOAuthData)(a,b),saveConnectionResult:(a,b)=>null===b.lastError?(0,j.syncServerTools)(a,b.toolInfo):(0,j.saveConnectionError)(a,b.lastError),findByOAuthState:a=>(0,j.findServerByOAuthState)(a)},d);let p=o.__thursdayMcpManager;a.s(["McpAuthRequiredError",0,m,"mcpManager",0,p]),c()}catch(a){c(a)}},!1),947950,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(351674),f=a.i(203469),g=a.i(184838),h=a.i(714428),i=a.i(899284),j=b([g]);async function k(a){var b;let[c]=await g.database.select({name:h.mcpServerTable.name,config:h.mcpServerTable.config,lastError:h.mcpServerTable.lastError,toolsSyncedAt:h.mcpServerTable.toolsSyncedAt}).from(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a));return c?{...c,config:(b=c.config,(0,i.isRemoteConfig)(b)?{url:b.url}:{command:b.command,args:b.args}),tools:await l(a)}:null}async function l(a){return g.database.select({id:h.mcpToolTable.id,name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema,outputSchema:h.mcpToolTable.outputSchema}).from(h.mcpToolTable).where((0,d.eq)(h.mcpToolTable.serverName,a)).orderBy(h.mcpToolTable.name)}async function m(a){let[b]=await g.database.select().from(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a));return b??null}[g]=j.then?(await j)():j;let u=()=>f.appEvents.emit({type:"mcp"});async function n(a){let[b]=await g.database.insert(h.mcpServerTable).values({...a,lastError:null}).onConflictDoUpdate({target:h.mcpServerTable.name,set:{config:a.config,lastError:null}}).returning();return u(),b}async function o(a,b){await g.database.transaction(async c=>{b.length&&await c.insert(h.mcpToolTable).values(b.map(b=>({...b,serverName:a}))).onConflictDoUpdate({target:[h.mcpToolTable.serverName,h.mcpToolTable.name],set:{description:p(h.mcpToolTable.description),inputSchema:p(h.mcpToolTable.inputSchema),outputSchema:p(h.mcpToolTable.outputSchema)}}),await c.delete(h.mcpToolTable).where(b.length?(0,d.and)((0,d.eq)(h.mcpToolTable.serverName,a),(0,d.notInArray)(h.mcpToolTable.name,b.map(a=>a.name))):(0,d.eq)(h.mcpToolTable.serverName,a)),await c.update(h.mcpServerTable).set({lastError:null,toolsSyncedAt:new Date}).where((0,d.eq)(h.mcpServerTable.name,a))}),u()}function p(a){return e.sql.raw(`excluded."${a.name}"`)}async function q(a,b){await g.database.update(h.mcpServerTable).set({lastError:b}).where((0,d.eq)(h.mcpServerTable.name,a)),u()}async function r(a,b){await g.database.update(h.mcpServerTable).set({oauth:b}).where((0,d.eq)(h.mcpServerTable.name,a)),u()}async function s(a){let[b]=await g.database.select().from(h.mcpServerTable).where(e.sql`json_extract(${h.mcpServerTable.oauth}, '$.state') = ${a}`);return b??null}async function t(a){let b=await g.database.delete(h.mcpServerTable).where((0,d.eq)(h.mcpServerTable.name,a)).returning();return b.length>0&&u(),b.length>0}a.s(["deleteServer",0,t,"findPinnedTools",0,function(a){return g.database.select({server:h.mcpToolTable.serverName,name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema}).from(h.botMcpToolTable).innerJoin(h.mcpToolTable,(0,d.eq)(h.botMcpToolTable.toolId,h.mcpToolTable.id)).where((0,d.eq)(h.botMcpToolTable.botName,a)).orderBy(h.mcpToolTable.serverName,h.mcpToolTable.name)},"findServer",0,m,"findServerByOAuthState",0,s,"findServerDetail",0,k,"findToolSchemas",0,function(a,b){return b.length?g.database.select({name:h.mcpToolTable.name,description:h.mcpToolTable.description,inputSchema:h.mcpToolTable.inputSchema}).from(h.mcpToolTable).where((0,d.and)((0,d.eq)(h.mcpToolTable.serverName,a),(0,d.inArray)(h.mcpToolTable.name,b))).orderBy(h.mcpToolTable.name):Promise.resolve([])},"listServerNames",0,function(){return g.database.select({name:h.mcpServerTable.name}).from(h.mcpServerTable).orderBy(h.mcpServerTable.name)},"listToolNames",0,function(a){let b=g.database.select({server:h.mcpToolTable.serverName,name:h.mcpToolTable.name}).from(h.mcpToolTable);return a?b.where((0,d.eq)(h.mcpToolTable.serverName,a)).orderBy(h.mcpToolTable.name):b.orderBy(h.mcpToolTable.serverName,h.mcpToolTable.name)},"saveConnectionError",0,q,"saveOAuthData",0,r,"syncServerTools",0,o,"upsertServer",0,n]),c()}catch(a){c(a)}},!1),899284,a=>{"use strict";var b=a.i(53112),c=a.i(706210);let d=b.z.object({url:b.z.url(),headers:b.z.record(b.z.string(),b.z.string()).optional(),oauthClient:b.z.object({clientId:b.z.string().min(1),clientSecret:b.z.string().optional()}).optional()}),e=b.z.object({command:b.z.string().min(1),args:b.z.array(b.z.string()).optional(),env:b.z.record(b.z.string(),b.z.string()).optional()}),f=b.z.union([d,e]),g=b.z.object({name:b.z.string(),description:b.z.string().optional(),inputSchema:b.z.looseObject({}).optional(),outputSchema:b.z.looseObject({}).optional()});b.z.object({clientInformation:b.z.looseObject({}).optional(),tokens:b.z.looseObject({}).optional(),authorizationServer:b.z.looseObject({}).optional(),codeVerifier:b.z.string().optional(),state:b.z.string().optional()});let h=b.z.object({name:b.z.string().min(1).max(40),config:f,toolCount:b.z.number().int(),lastError:b.z.string().nullish()}),i=g.extend({id:b.z.number().int(),description:b.z.string().nullish()});h.omit({toolCount:!0}).extend({tools:i.array().default([]),toolsSyncedAt:c.DateLikeSchema});let j=b.z.object({name:b.z.string().min(1,"Name is required").max(40).regex(/^[a-zA-Z0-9_-]+$/,"Only letters, numbers, - and _ are allowed"),config:f});b.z.union([b.z.object({mcpServers:b.z.record(b.z.string(),f)}),b.z.record(b.z.string(),f)]),a.s(["MCPServerFormSchema",0,j,"isRemoteConfig",0,function(a){return"url"in a}])},986743,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(530385),f=a.i(351674),g=a.i(203469),h=a.i(569572),i=a.i(184838),j=a.i(714428),k=a.i(8412),l=a.i(661210),m=b([i]);[i]=m.then?(await m)():m;let E=(0,k.createKeyedLock)(),F=()=>g.appEvents.emit({type:"memory"});async function n(a,b,c={}){let[d]=await i.database.insert(j.memoryNoteTable).values({path:a,description:b,ownedByUser:c.ownedByUser??!1}).onConflictDoNothing({target:j.memoryNoteTable.path}).returning();return d&&F(),d??null}async function o(a,b){let[c]=await i.database.update(j.memoryNoteTable).set({...b,updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a)).returning();return c&&F(),c??null}async function p(a){let b=await i.database.delete(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,a)).returning({id:j.memoryNoteTable.id});return b.length>0&&F(),b.length>0}async function q(a,b){let[c]=await i.database.insert(j.memoryFactTable).values({noteId:a,text:b,source:"user"}).returning();return await t(a),F(),c}async function r(a,b,c){let e,f=await (e=()=>i.database.transaction(async e=>{let f=await e.update(j.memoryFactTable).set({isLatest:!1}).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))).returning({id:j.memoryFactTable.id});if(0===f.length)return null;let[g]=await e.insert(j.memoryFactTable).values({noteId:a,text:c,source:"user"}).returning();return await e.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a)),g}),E("memory",e));return f&&F(),f}async function s(a,b){let c=await i.database.delete(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a))).returning({id:j.memoryFactTable.id});return c.length>0&&(await t(a),F()),c.length>0}function t(a){return i.database.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a))}async function u(){for(let a of l.MEMORY_ALWAYS_LISTED){let b=l.MEMORY_PATHS.find(b=>b.path===a)?.of??a;await i.database.insert(j.memoryNoteTable).values({path:a,description:b}).onConflictDoUpdate({target:j.memoryNoteTable.path,set:{description:b}})}}async function v(a){let b=a.map(a=>a.trim()).filter(Boolean),c=[],e=[];if(!b.length)return{found:c,missing:e};let f={id:j.memoryNoteTable.id,path:j.memoryNoteTable.path,description:j.memoryNoteTable.description},g=await i.database.select(f).from(j.memoryNoteTable).where((0,d.inArray)(j.memoryNoteTable.path,b)),h=new Map(g.map(a=>[a.path.toLowerCase(),a]));if(b.some(a=>!h.has(a.toLowerCase()))){let a=await i.database.select({...f,aliases:j.memoryNoteTable.aliases}).from(j.memoryNoteTable),b=(a,b)=>{let c=a.trim().toLowerCase();c&&!h.has(c)&&h.set(c,b)};for(let c of a)b(c.path,c);for(let c of a)for(let a of(b(c.path.slice(c.path.indexOf("/")+1),c),c.aliases??[]))b(a,c)}let k=new Set;for(let a of b){let b=h.get(a.toLowerCase());if(!b){e.push(a);continue}k.has(b.id)||(k.add(b.id),c.push(b))}return{found:c,missing:e}}async function w(a){let{found:b}=await v([a]);return b[0]?.path??null}async function x(a,b={}){let{found:c,missing:g}=await v(a);if(!c.length)return{notes:[],missing:g};let h=c.map(a=>a.id),k=await i.database.select({id:j.memoryFactTable.id,noteId:j.memoryFactTable.noteId,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad,source:j.memoryFactTable.source,createdAt:j.memoryFactTable.createdAt,saidAt:j.callTable.startedAt}).from(j.memoryFactTable).leftJoin(j.callTable,(0,d.eq)(j.memoryFactTable.callId,j.callTable.id)).where((0,d.and)((0,d.eq)(j.memoryFactTable.isLatest,!0),(0,d.inArray)(j.memoryFactTable.noteId,h))).orderBy((0,e.asc)(j.memoryFactTable.id));return!1!==b.touch&&await i.database.update(j.memoryNoteTable).set({hits:f.sql`${j.memoryNoteTable.hits} + 1`,lastReadAt:new Date}).where((0,d.inArray)(j.memoryNoteTable.id,h)),{notes:c.map(a=>({path:a.path,description:a.description,facts:k.filter(b=>b.noteId===a.id).map(a=>({id:a.id,text:a.text,...a.saidAt?{saidAt:a.saidAt}:{}}))})),missing:g}}(0,d.inArray)(j.memoryNoteTable.path,l.MEMORY_ALWAYS_LISTED);let G=a=>a.toLowerCase().replace(/[\s.,!?…·'"`]/g,"");async function y(a,b,c=null){let e,g=[],k=[],l=[];await (e=()=>i.database.transaction(async e=>{let[i]=await e.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0))),m=h.MEMORY_LIMITS.carried-Number(i?.count??0),n=(a,b)=>!!a&&(m>0?(m-=1,!0):(l.push(b),!1));for(let f of a){let a,h=f.path.trim();if(!h)continue;k.push(h);let i=f.description?.trim(),l=f.aliases?.map(a=>a.trim()).filter(Boolean),o=(f.facts??[]).map(a=>({...a,text:a.text.trim()})).filter(a=>a.text),[p]=await e.select({id:j.memoryNoteTable.id}).from(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.path,h));if(p)a=p.id,(i||l)&&await e.update(j.memoryNoteTable).set({...i?{description:i}:{},...l?{aliases:l}:{},updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a));else{let[b]=await e.insert(j.memoryNoteTable).values({path:h,description:i??o[0]?.text.slice(0,80)??h,...l?{aliases:l}:{}}).returning({id:j.memoryNoteTable.id});a=b.id,i||g.push(h)}if(!o.length)continue;let q=await e.select({id:j.memoryFactTable.id,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))),r=new Map(q.map(a=>[G(a.text),a])),s=async(a,b,c)=>{if(b===a.alwaysLoad)return;let f=b?n(!0,c):(m+=1,!1);f!==a.alwaysLoad&&(await e.update(j.memoryFactTable).set({alwaysLoad:f}).where((0,d.eq)(j.memoryFactTable.id,a.id)),a.alwaysLoad=f)};for(let f of o){if(null!=f.replaces){let[g]=await e.select({id:j.memoryFactTable.id,text:j.memoryFactTable.text,alwaysLoad:j.memoryFactTable.alwaysLoad}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,f.replaces),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0)));if(g){if(G(g.text)===G(f.text)){await s(g,f.alwaysLoad??g.alwaysLoad,f.text),r.set(G(g.text),g);continue}await e.update(j.memoryFactTable).set({isLatest:!1}).where((0,d.eq)(j.memoryFactTable.id,g.id)),r.delete(G(g.text)),g.alwaysLoad&&(m+=1);let[h]=await e.insert(j.memoryFactTable).values({noteId:a,text:f.text,source:b,callId:c,alwaysLoad:n(f.alwaysLoad??g.alwaysLoad,f.text)}).returning({id:j.memoryFactTable.id,alwaysLoad:j.memoryFactTable.alwaysLoad});r.set(G(f.text),{...h,text:f.text});continue}}let g=r.get(G(f.text));if(g){null!=f.alwaysLoad&&await s(g,f.alwaysLoad,f.text);continue}let[h]=await e.insert(j.memoryFactTable).values({noteId:a,text:f.text,source:b,callId:c,alwaysLoad:n(!0===f.alwaysLoad,f.text)}).returning({id:j.memoryFactTable.id,alwaysLoad:j.memoryFactTable.alwaysLoad});r.set(G(f.text),{...h,text:f.text})}await e.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,a))}}),E("memory",e));let{notes:m}=await x(k,{touch:!1});return F(),{notes:m,unnamed:g,notLoaded:l}}async function z(a,b,c){let e,g=await (e=()=>i.database.transaction(async e=>{if(c){let[a]=await e.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0)));if(Number(a?.count??0)>=h.MEMORY_LIMITS.carried)return"full"}let[g]=await e.update(j.memoryFactTable).set({alwaysLoad:c}).where((0,d.and)((0,d.eq)(j.memoryFactTable.id,b),(0,d.eq)(j.memoryFactTable.noteId,a),(0,d.eq)(j.memoryFactTable.isLatest,!0))).returning({id:j.memoryFactTable.id});return g?"ok":"missing"}),E("memory",e));return"ok"===g&&F(),g}async function A(){let[a,b]=await Promise.all([i.database.select({id:j.memoryNoteTable.id,path:j.memoryNoteTable.path,description:j.memoryNoteTable.description,aliases:j.memoryNoteTable.aliases,hits:j.memoryNoteTable.hits,lastReadAt:j.memoryNoteTable.lastReadAt,createdAt:j.memoryNoteTable.createdAt}).from(j.memoryNoteTable),i.database.select({noteId:j.memoryFactTable.noteId,count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.isLatest,!0)).groupBy(j.memoryFactTable.noteId)]),c=new Map(b.map(a=>[a.noteId,a.count]));return a.filter(a=>(0,l.isAlwaysListed)(a.path)||(c.get(a.id)??0)>0).sort((a,b)=>Number((0,l.isAlwaysListed)(b.path))-Number((0,l.isAlwaysListed)(a.path))||(0,l.recallScore)(b)-(0,l.recallScore)(a)).map(a=>({path:a.path,description:a.description,aliases:a.aliases,factCount:c.get(a.id)??0,lastSeenAt:a.lastReadAt??a.createdAt}))}async function B(a){let b,c=await (b=()=>i.database.transaction(async b=>{let c=await b.delete(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.id,a)).returning({noteId:j.memoryFactTable.noteId});if(0===c.length)return null;let e=c[0].noteId,[g]=await b.select({path:j.memoryNoteTable.path,ownedByUser:j.memoryNoteTable.ownedByUser}).from(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,e)),[h]=await b.select({count:f.sql`count(*)`}).from(j.memoryFactTable).where((0,d.and)((0,d.eq)(j.memoryFactTable.noteId,e),(0,d.eq)(j.memoryFactTable.isLatest,!0)));return h?.count!==0||!g||g.ownedByUser||(0,l.isAlwaysListed)(g.path)?(await b.update(j.memoryNoteTable).set({updatedAt:new Date}).where((0,d.eq)(j.memoryNoteTable.id,e)),{path:g?.path??"",noteGone:!1}):(await b.delete(j.memoryNoteTable).where((0,d.eq)(j.memoryNoteTable.id,e)),{path:g.path,noteGone:!0})}),E("memory",b));return c&&F(),c}async function C(a){let[b]=await i.database.select({source:j.memoryFactTable.source,callId:j.memoryFactTable.callId}).from(j.memoryFactTable).where((0,d.eq)(j.memoryFactTable.id,a));return b??null}async function D(){let a=await i.database.delete(j.memoryNoteTable).returning({id:j.memoryNoteTable.id});return await u(),a.length>0&&F(),a.length}a.s(["addFact",0,q,"createNote",0,n,"deleteAllNotes",0,D,"deleteNote",0,p,"findFactCall",0,C,"forgetFact",0,s,"forgetFactById",0,B,"listAlwaysLoaded",0,function(){return i.database.select({id:j.memoryFactTable.id,path:j.memoryNoteTable.path,text:j.memoryFactTable.text}).from(j.memoryFactTable).innerJoin(j.memoryNoteTable,(0,d.eq)(j.memoryFactTable.noteId,j.memoryNoteTable.id)).where((0,d.and)((0,d.eq)(j.memoryFactTable.alwaysLoad,!0),(0,d.eq)(j.memoryFactTable.isLatest,!0))).orderBy((0,e.asc)(j.memoryNoteTable.path),(0,e.asc)(j.memoryFactTable.id)).limit(h.MEMORY_LIMITS.carried)},"listNoteIndex",0,A,"readNotes",0,x,"resolveNotePath",0,w,"reviseFact",0,r,"setFactAlwaysLoad",0,z,"updateNote",0,o,"writeNotes",0,y]),c()}catch(a){c(a)}},!1),661210,a=>{"use strict";var b=a.i(53112),c=a.i(706210);let d=b.z.enum(["user","call","bot"]),e=b.z.object({id:b.z.number(),text:b.z.string(),alwaysLoad:b.z.boolean(),source:d.nullish(),createdAt:c.DateLikeSchema});b.z.object({id:b.z.number(),path:b.z.string(),description:b.z.string(),aliases:b.z.string().array().nullish(),ownedByUser:b.z.boolean(),hits:b.z.number(),lastReadAt:c.DateLikeSchema.nullable(),createdAt:c.DateLikeSchema,updatedAt:c.DateLikeSchema,factCount:b.z.number(),facts:e.array()});let f=[{path:"profile",of:"The user themselves — their name, age, what they do, where they live, and whatever else says who they are"},{path:"preferences",of:"How they want things done, and said"},{path:"people/",of:"Someone in their life, and what matters about them"},{path:"projects/",of:"Something with an end — a trip, a purchase, a deadline, a thing being built"},{path:"topics/",of:"Something ongoing that keeps coming back"}],g=f.filter(a=>!a.path.endsWith("/")).map(a=>a.path),h=f.filter(a=>a.path.endsWith("/")).map(a=>a.path.slice(0,-1)),i=RegExp(`^(?:${g.join("|")}|(?:${h.join("|")})/.+)$`),j=["profile","preferences"];a.s(["MEMORY_ALWAYS_LISTED",0,j,"MEMORY_PATHS",0,f,"appNoteLine",0,a=>f.find(b=>b.path===a)?.of??null,"isAlwaysListed",0,a=>j.includes(a),"isMemoryPath",0,a=>i.test(a),"recallScore",0,function(a){let b=(0,c.toDate)(a.lastReadAt??a.createdAt),d=Math.max(0,(Date.now()-b.getTime())/864e5);return(a.hits+1)/(1+d)}])},780946,a=>a.a(async(b,c)=>{try{var d=a.i(93321),e=a.i(258261),f=a.i(530385),g=a.i(203469),h=a.i(569572),i=a.i(184838),j=a.i(714428),k=a.i(221214),l=a.i(293480),m=a.i(643020),n=b([i,k]);[i,k]=n.then?(await n)():n;let z=()=>g.appEvents.emit({type:"routines"});async function o(a,b){return i.database.select({id:j.threadTable.id,status:j.threadTable.status,outcome:j.threadTable.outcome,updatedAt:j.threadTable.updatedAt}).from(j.threadTable).where((0,d.eq)(j.threadTable.routineId,a)).orderBy((0,f.desc)(j.threadTable.createdAt)).limit(b)}let A=async a=>{let{createdAt:b,...c}=a;return{...c,runs:await o(a.id,h.ROUTINE.runsShown)}};async function p(){let a=await i.database.select().from(j.routineTable).orderBy(j.routineTable.createdAt);return Promise.all(a.map(A))}async function q(a){let[b]=await i.database.select().from(j.routineTable).where((0,d.eq)(j.routineTable.id,a));return b?A(b):null}async function r(a){let b=await q(a.trim());if(b)return b;let c=a.trim().toLowerCase(),d=(await p()).filter(a=>a.label.toLowerCase()===c);return 1===d.length?d[0]:null}async function s(a){let b=await (0,k.findJobBot)(a);return(!b||b.disabled)&&(0,l.publicError)("Choose an enabled bot."),b.name}function t(a,b){b&&"once"===a.kind&&(0,m.momentOf)(a.at)<=new Date&&(0,l.publicError)("That time has passed. Pick a later one.")}async function u(a){let[{total:b}]=await i.database.select({total:(0,e.count)()}).from(j.routineTable);b>=h.ROUTINE.max&&(0,l.publicError)(`There are already ${h.ROUTINE.max} routines. Delete one to make another.`),t(a.schedule,!0);let[c]=await i.database.insert(j.routineTable).values({id:crypto.randomUUID(),...a,bot:await s(a.bot),nextRunAt:(0,m.nextRun)(a.schedule,new Date)}).returning();return z(),A(c)}async function v(a,b){let[c]=await i.database.select().from(j.routineTable).where((0,d.eq)(j.routineTable.id,a));if(!c)return null;let e=b.schedule??c.schedule,f=!!b.schedule||b.enabled&&!c.enabled;f&&t(e,b.enabled??c.enabled);let[g]=await i.database.update(j.routineTable).set({...b,...b.bot?{bot:await s(b.bot)}:{},...f?{nextRunAt:(0,m.nextRun)(e,new Date)}:{}}).where((0,d.eq)(j.routineTable.id,a)).returning();return z(),A(g)}async function w(a){let b=await i.database.delete(j.routineTable).where((0,d.eq)(j.routineTable.id,a)).returning({id:j.routineTable.id});return b.length&&z(),b.length>0}async function x(a){return(await o(a,1))[0]??null}async function y(a){return(await i.database.select({id:j.threadTable.id}).from(j.threadTable).where((0,d.and)((0,d.eq)(j.threadTable.routineId,a),(0,d.eq)(j.threadTable.seen,!1),(0,d.inArray)(j.threadTable.status,["done","cancelled"])))).map(a=>a.id)}a.s(["createRoutine",0,u,"deleteRoutine",0,w,"findRoutine",0,q,"latestRun",0,x,"listRoutines",0,p,"listUnseenRunIds",0,y,"resolveRoutine",0,r,"updateRoutine",0,v]),c()}catch(a){c(a)}},!1),643020,a=>{"use strict";var b=a.i(723885),c=a.i(569572),d=a.i(706210);let e=b.default.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"A time is HH:MM, 00:00 to 23:59");function f(a){let[b,c]=a.split(" "),[d,e,f]=b.split("-").map(Number),[g,h]=c.split(":").map(Number);return new Date(d,e-1,f,g,h)}let g=/^\d{4}-\d\d-\d\d ([01]\d|2[0-3]):[0-5]\d$/,h=b.default.string().regex(g,'A moment is "YYYY-MM-DD HH:MM"').refine(a=>{if(!g.test(a))return!0;let b=f(a);return b.getMonth()===Number(a.slice(5,7))-1&&b.getDate()===Number(a.slice(8,10))},"There is no such day"),i=b.default.discriminatedUnion("kind",[b.default.object({kind:b.default.literal("once"),at:h}),b.default.object({kind:b.default.literal("daily"),time:e,days:b.default.array(b.default.number().int().min(1).max(7)).min(1,"Pick at least one day").transform(a=>[...new Set(a)].sort((a,b)=>a-b))}),b.default.object({kind:b.default.literal("every"),hours:b.default.number().int().min(c.ROUTINE.minHours,`No more often than every ${c.ROUTINE.minHours}h`).max(168)})]),j=b.default.object({bot:b.default.string().trim().min(1,"Pick a bot"),label:b.default.string().trim().min(1,"Give it a name").max(80),request:b.default.string().trim().min(1,"Say what it should do"),schedule:i}),k=b.default.object({id:b.default.string(),status:b.default.enum(["running","waiting","done","cancelled"]),outcome:b.default.string().nullable(),updatedAt:d.DateLikeSchema});j.extend({id:b.default.string(),enabled:b.default.boolean(),nextRunAt:d.DateLikeSchema,runs:b.default.array(k)});let l=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];a.s(["RoutineInputSchema",0,j,"RoutineScheduleSchema",0,i,"momentOf",0,f,"nextRun",0,function(a,b){if("once"===a.kind)return f(a.at);if("every"===a.kind)return new Date(b.getTime()+36e5*a.hours);let[c,d]=a.time.split(":").map(Number);for(let e=0;e<=7;e++){let f=new Date(b);f.setDate(f.getDate()+e),f.setHours(c,d,0,0);let g=0===f.getDay()?7:f.getDay();if(f>b&&a.days.includes(g))return f}return new Date(b.getTime()+864e5)},"scheduleText",0,function(a){if("once"===a.kind){let[b,c]=a.at.split(" "),[,d,e]=b.split("-").map(Number);return`Once \xb7 ${m[d-1]} ${e} ${c}`}if("every"===a.kind)return 1===a.hours?"Every hour":`Every ${a.hours} hours`;let{days:b,time:c}=a;if(7===b.length)return`Daily ${c}`;if(1===b.length)return`${l[b[0]-1]} ${c}`;let d=b.every((a,c)=>0===c||a===b[c-1]+1)?`${l[b[0]-1]}–${l[b.at(-1)-1]}`:b.map(a=>l[a-1]).join(" ");return`Daily ${c} \xb7 ${d}`}])},487591,422807,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(203469),e=a.i(569572),f=a.i(821415);a.i(176668);let g=a=>a.trim().toLowerCase().replace(/^[a-z]+:\/\//,"").replace(/^www\./,"").replace(/[/?#].*$/,"");a.s(["siteOf",0,g],422807);let h=(0,c.join)(e.DATA_DIR,e.PATHS.signIns),i=a=>(0,c.join)(h,`${encodeURIComponent(g(a))}.json`),j=()=>d.appEvents.emit({type:"signins"});async function k(a){try{return JSON.parse(await (0,b.readFile)(i(a),"utf8"))}catch{return null}}async function l(a){await (0,b.mkdir)(h,{recursive:!0}),await (0,b.writeFile)(i(a.site),JSON.stringify(a),{mode:384}),j()}async function m(){let a=await (0,b.readdir)(h).catch(()=>[]);return(await Promise.all(a.filter(a=>a.endsWith(".json")).map(a=>k(decodeURIComponent(a.slice(0,-5)))))).flatMap(a=>a?[(({state:a,...b})=>b)(a)]:[]).sort((a,b)=>a.site.localeCompare(b.site))}async function n(a){let b=g(a.site),c=await k(b),d={site:b,account:a.account.trim()||b,bots:[...new Set([...c?.bots??[],a.bot])],asking:(c?.asking??[]).filter(b=>b!==a.bot),keptAt:new Date().toISOString(),usedAt:c?.usedAt??null,state:a.state};return await l(d),(({state:a,...b})=>b)(d)}async function o(a,b){let c=await k(a);if(!c)return{kind:"none",kept:(await m()).map(a=>a.site)};if(!c.bots.includes(b))return c.asking.includes(b)||await l({...c,asking:[...c.asking,b]}),{kind:"ask",signIn:(({state:a,...b})=>b)(c)};let d={...c,usedAt:new Date().toISOString()};return await l(d),{kind:"state",signIn:(({state:a,...b})=>b)(d),state:c.state}}let p=a=>`${a.name}
|
|
119
|
+
${a.domain}
|
|
120
|
+
${a.path}`;async function q(a){let c,d=await (0,b.readdir)(h).catch(()=>[]);if(!d.some(a=>a.endsWith(".json")))return;let e=await (0,f.openWorkspace)(),g=(0,f.jobShellEnv)(a),{browsers:i}=JSON.parse((await e.exec("playwright-cli list --json",{env:g,timeoutMs:15e3})).stdout||"{}"),j=i?.find(a=>a.name===g.PLAYWRIGHT_CLI_SESSION);if(!j||j.attached)return;let m=`.playwright-cli/state-${crypto.randomUUID()}.json`;try{let a=await e.exec(`mkdir -p .playwright-cli && playwright-cli state-save ${m}`,{env:g,timeoutMs:3e4});if(0!==a.exitCode)return;let b=JSON.parse(await e.readFile(m,"utf-8"));c=new Map((b.cookies??[]).map(a=>[p(a),a]))}finally{await e.exec(`rm -f ${m}`)}for(let a of d){if(!a.endsWith(".json"))continue;let b=await k(decodeURIComponent(a.slice(0,-5))),d=b?.state;if(!b||!d?.cookies)continue;let e=!1,f=d.cookies.map(a=>{let b=c.get(p(a));return b&&JSON.stringify(b)!==JSON.stringify(a)?(e=!0,b):a});e&&await l({...b,state:{...d,cookies:f}})}}async function r(a,b,c){let d=await k(a);d&&await l({...d,bots:c?[...new Set([...d.bots,b])]:d.bots.filter(a=>a!==b),asking:d.asking.filter(a=>a!==b)})}async function s(a){await (0,b.rm)(i(a),{force:!0}),j()}a.s(["borrowSignIn",0,o,"keepSignIn",0,n,"removeSignIn",0,s,"renewSignIns",0,q,"setSignInBot",0,r],487591)},138100,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(569572),e=a.i(821415),f=a.i(176668),g=a.i(182248),h=a.i(762805);let i=(0,c.join)(d.APP_DIR,d.PATHS.skills.default),j=(0,c.join)(d.DATA_DIR,d.PATHS.skills.custom),k=a=>(0,c.join)(e.WORKSPACE,(0,e.botFolder)(a),d.PATHS.skills.own);async function l(a,e){let f=(0,c.join)(d.APP_DIR,d.PATHS.skills.seeds,a.toLowerCase());await (0,b.cp)(f,k(e),{recursive:!0,force:!1}).catch(a=>{if("ENOENT"!==a.code)throw a})}async function m(a,b){let c=[],d=new Set;for(let e of b){let b;try{b=await a.readdir(e,{withFileTypes:!0})}catch{continue}for(let i of b){let b,j;if(!i.isDirectory())continue;let k=`${e}/${i.name}`,l=`${k}/SKILL.md`;try{b=await a.readFile(l,"utf-8")}catch{continue}try{j=(0,h.parseFrontmatter)(b)}catch(a){f.logger.warn(`skill ${k}: SKILL.md front matter did not load — ${(0,g.errorToString)(a)}`);continue}!(!(0,h.runsHere)(j)||d.has(j.name))&&(d.add(j.name),j.disabled||c.push({name:j.name,description:j.description,path:k}))}}return c}a.s(["giveSeedSkills",0,l,"loadSkills",0,(a,b)=>m(a,b?[i,k(b),j]:[i,j])])},762805,951941,a=>{"use strict";var b=a.i(912714),c=a.i(750227),d=a.i(622650),e=a.i(569572),f=a.i(53112);let g=f.z.enum(["custom","default"]),h=f.z.string().trim().min(1,"Skill name is required").max(64,"Skill name is too long").regex(/^[a-z0-9][a-z0-9_-]*$/i,"Use letters, numbers, dashes and underscores only"),i=f.z.object({name:h,description:f.z.string().trim().min(1,"Description is required"),disabled:f.z.boolean().optional(),platforms:f.z.array(f.z.string()).optional()}),j=i.extend({content:f.z.string().trim().min(1,"Content is required")}),k=f.z.object({fileName:f.z.string().trim().min(1),base64:f.z.string().min(1)});a.s(["SkillDraftSchema",0,j,"SkillFrontmatterSchema",0,i,"SkillNameSchema",0,h,"SkillSourceSchema",0,g,"SkillUploadSchema",0,k],951941);var l=a.i(293480);let m={default:(0,c.resolve)(e.APP_DIR,e.PATHS.skills.default),custom:(0,c.resolve)(e.DATA_DIR,e.PATHS.skills.custom)};function n(a,b){let d=m[a],e=(0,c.resolve)(d,b),f=(0,c.relative)(d,e);return(!f||f.startsWith("..")||f.includes(c.sep)||"."===f)&&(0,l.publicError)("Skill not found"),e}function o(a){let b=a.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);if(!b)return{head:null,body:a.trim(),rest:a,fence:""};let c=a.slice(b[0].length);return{head:b[1]??null,body:c.trim(),rest:c,fence:b[0]}}function p(a){let b,{head:c}=o(a);c||(0,l.publicError)("SKILL.md needs a YAML block with name and description");try{b=(0,d.parse)(c)}catch{(0,l.publicError)("SKILL.md frontmatter is not valid YAML")}let e=i.safeParse(b);return e.success||(0,l.publicError)(`SKILL.md frontmatter: ${e.error.issues[0]?.message??"invalid"}`),e.data}let q=/^disabled[ \t]*:[^\n]*(\r?\n|$)/m;async function r(a,e,f){let g,h,i=(0,c.join)(n(a,e),"SKILL.md");try{g=await (0,b.readFile)(i,"utf-8")}catch{(0,l.publicError)("Skill not found")}let{head:j,rest:k,fence:m}=o(g);j||(0,l.publicError)("This SKILL.md has no frontmatter to write to");try{h=(0,d.parse)(j)}catch{(0,l.publicError)("SKILL.md frontmatter is not valid YAML")}(!h||"object"!=typeof h||Array.isArray(h))&&(0,l.publicError)("SKILL.md frontmatter is not a YAML mapping");let p=m.includes("\r\n")?"\r\n":"\n",r=f?q.test(j)?j.replace(q,"disabled: true$1"):`${j.replace(/\s+$/,"")}${p}disabled: true`:j.replace(q,"").replace(/\s+$/,"");await (0,b.writeFile)(i,`---${p}${r}${p}---${p}${k}`)}async function s(a,d){try{let e=await (0,b.readFile)((0,c.join)(m[a],d,"SKILL.md"),"utf-8");return{...p(e),source:a,dir:d}}catch{return null}}async function t(a,d){let e=n("custom",a),f=async a=>(0,b.stat)(a).then(()=>!0,()=>!1);await f(e)&&(0,l.publicError)(`A skill named "${a}" already exists`),await f(n("default",a))&&(0,l.publicError)(`"${a}" is a built-in skill — pick another name`),await (0,b.mkdir)(e,{recursive:!0});try{for(let[a,f]of d){let d=function(a,b){let d=(0,c.resolve)(a,b);return((0,c.relative)(a,d).startsWith("..")||(0,c.resolve)(d)!==d)&&(0,l.publicError)("File not found"),d}(e,a);await (0,b.mkdir)((0,c.resolve)(d,".."),{recursive:!0}),await (0,b.writeFile)(d,f)}}catch(a){throw await (0,b.rm)(e,{recursive:!0,force:!0}),a}let g=await s("custom",a);return g||(await (0,b.rm)(e,{recursive:!0,force:!0}),(0,l.publicError)("SKILL.md could not be read back")),g}async function u(a){let c=n("custom",a);await (0,b.stat)(c).then(()=>!0,()=>!1)||(0,l.publicError)("Skill not found"),await (0,b.rm)(c,{recursive:!0,force:!0})}a.s(["deleteCustomSkill",0,u,"parseFrontmatter",0,p,"renderSkillMarkdown",0,function(a,b){return`---
|
|
119
121
|
${(0,d.stringify)(a).trim()}
|
|
120
122
|
---
|
|
121
123
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[588237,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-9 px-2 text-left align-middle font-mono text-[11px] font-normal tracking-[0.1em] whitespace-nowrap text-muted-foreground uppercase [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b border-border/60 transition-colors data-[state=selected]:bg-muted hover:bg-muted/40",a),...d})}])},369768,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(707963),f=a.i(141146),g=a.i(168370),h=a.i(572131),i=a.i(767561),j=a.i(340695),k=a.i(965733),l=a.i(846991),m=a.i(950463),n=a.i(588237),o=a.i(287702),p=a.i(559553),q=a.i(576208),r=a.i(313237),s=a.i(497895),t=b([l]);[l]=t.then?(await t)():t;let D=new Set(["frame","image","audio","video"]),E=new Set(["image"]);function u(a){let b=(0,p.workspaceRelative)(a);if(!b)return{how:"os"};let c=(0,p.viewKindOf)(b);return E.has(c)?{how:"dialog",path:b}:D.has(c)?{how:"tab",path:b,href:i.queryKey.fileView(b)}:"none"===c?{how:"os"}:{how:"dialog",path:b}}let F=(0,h.createContext)(null),G={dialog:{prose:"px-5 py-4",block:"px-4 py-3"},page:{prose:"px-5 py-6 sm:px-8",block:"px-5 py-5"},inline:{prose:"pb-3",block:"pb-3"}};function v({kind:a,content:b,truncated:c,where:e="dialog"}){return(0,d.jsxs)(d.Fragment,{children:[null!=c&&(0,d.jsx)(w,{of:c}),(0,d.jsx)(x,{kind:a,content:b,where:e})]})}function w({of:a}){return(0,d.jsxs)("p",{className:"border-b border-border/60 px-5 py-2.5 font-mono text-[11px] text-muted-foreground",children:[`Showing the first ${(0,s.formatBytes)(o.WORKSPACE_VIEW.textMax)} of ${(0,s.formatBytes)(a)}. `,"Open the file itself for the rest."]})}function x({kind:a,content:b,where:c}){let e=G[c];switch(a){case"markdown":return(0,d.jsx)("div",{className:(0,s.cn)("min-w-0 text-sm leading-relaxed",e.prose),children:(0,d.jsx)(l.Markdown,{children:b})});case"csv":return(0,d.jsx)(C,{content:b,className:e.block});case"json":return(0,d.jsx)(B,{text:function(a){try{return JSON.stringify(JSON.parse(a),null,2)}catch{return a}}(b),className:e.block});default:return(0,d.jsx)(B,{text:b,className:e.block})}}function y(a){let[b,c]=(0,h.useState)(null),[d,e]=(0,h.useState)(null),[f,g]=(0,h.useState)(null);return(0,h.useEffect)(()=>{if(!a)return;c(null),e(null),g(null);let b=!1;return fetch(i.queryKey.file(a),{headers:{range:`bytes=0-${o.WORKSPACE_VIEW.textMax-1}`}}).then(async a=>{if(!a.ok)throw Error(await a.text());return{text:await a.text(),of:function(a){let b=a.headers.get("content-range")?.match(/^bytes \d+-(\d+)\/(\d+)$/);if(!b)return null;let[,c,d]=b.map(Number);return c+1<d?d:null}(a)}}).then(({text:a,of:d})=>{if(b)return;let e=null===d?a:a.slice(0,a.lastIndexOf("\n")+1||void 0);c(e),g(d)}).catch(a=>!b&&e((0,s.errorToString)(a))),()=>{b=!0}},[a]),{content:b,failure:d,truncated:f}}function z({path:a,bytes:b}){let[c,e]=(0,r.useServerAction)(q.openFileAction);return(0,d.jsxs)("div",{className:"space-y-4 p-8",children:[(0,d.jsxs)("p",{className:"max-w-lg text-sm leading-relaxed text-muted-foreground",children:[`This file is ${(0,s.formatBytes)(b)} — too big to draw here without `,"taking the window with it. Open it where it is instead."]}),(0,d.jsx)(j.Button,{variant:"outline",loading:e,onClick:()=>c(a),children:"Reveal in the file manager"})]})}function A({path:a,group:b=[],kind:c,onPath:h,onClose:l}){let n="image"===c,{content:o,failure:p,truncated:q}=y(n?null:a),r=a?.split("/").pop()??"",t=a?b.indexOf(a):-1,u=a=>{!(t<0)&&h&&h(b[(t+a+b.length)%b.length])};return(0,d.jsx)(k.Dialog,{open:null!==a,onOpenChange:a=>!a&&l(),children:(0,d.jsxs)(k.DialogContent,{onKeyDown:a=>{"ArrowLeft"===a.key&&u(-1),"ArrowRight"===a.key&&u(1)},className:"flex max-h-[calc(100vh-3rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-4xl",children:[(0,d.jsx)(k.DialogTitle,{className:"sr-only",children:r}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border/60 py-2 pr-12 pl-4",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[12px]",children:a}),t>=0&&b.length>1&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:[t+1," / ",b.length]}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Previous image",onClick:()=>u(-1),children:(0,d.jsx)(e.ChevronLeft,{})}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Next image",onClick:()=>u(1),children:(0,d.jsx)(f.ChevronRight,{})})]}),n&&a&&(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Open in a new tab",render:(0,d.jsx)("a",{href:i.queryKey.fileView(a),target:"_blank",rel:"noreferrer"}),children:(0,d.jsx)(g.ExternalLink,{})})]}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-auto",children:n&&a?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:r,className:"mx-auto max-h-[calc(100vh-11rem)] object-contain p-4"}):p?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:p}):null===o?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:o,truncated:q})}),n&&b.length>1&&(0,d.jsx)("div",{className:"flex shrink-0 justify-center gap-1.5 border-t border-border/60 p-2.5",children:b.map(b=>(0,d.jsx)("button",{type:"button","aria-label":b.split("/").pop(),onClick:()=>h?.(b),className:(0,s.cn)("size-11 shrink-0 overflow-hidden rounded-md outline-none focus-visible:ring-3 focus-visible:ring-ring/50",b===a?"ring-2 ring-foreground":"opacity-55"),children:(0,d.jsx)("img",{src:i.queryKey.file(b),alt:"",loading:"lazy",className:"size-full bg-muted object-cover"})},b))})]})})}function B({text:a,className:b}){return(0,d.jsx)("pre",{className:(0,s.cn)("overflow-x-auto font-mono text-[12px] leading-relaxed whitespace-pre-wrap text-foreground/90",b),children:a})}function C({content:a,className:b}){let[c,...e]=(0,h.useMemo)(()=>(function(a){let b=[],c=[],d="",e=!1;for(let f=0;f<a.length;f++){let g=a[f];e?'"'===g&&'"'===a[f+1]?(d+='"',f++):'"'===g?e=!1:d+=g:'"'===g?e=!0:","===g?(c.push(d),d=""):"\n"===g||"\r"===g?("\r"===g&&"\n"===a[f+1]&&f++,c.push(d),b.push(c),c=[],d=""):d+=g}return(d.length||c.length)&&(c.push(d),b.push(c)),b.filter(a=>a.some(a=>a.trim()))})(a),[a]);return c?(0,d.jsx)("div",{className:(0,s.cn)("overflow-x-auto",b),children:(0,d.jsxs)(n.Table,{children:[(0,d.jsx)(n.TableHeader,{children:(0,d.jsx)(n.TableRow,{children:c.map((a,b)=>(0,d.jsx)(n.TableHead,{className:"whitespace-nowrap",children:a},`${b}-${a}`))})}),(0,d.jsx)(n.TableBody,{children:e.map((a,b)=>(0,d.jsx)(n.TableRow,{children:c.map((c,e)=>(0,d.jsx)(n.TableCell,{className:"whitespace-nowrap",children:a[e]??""},`${b}-${e}`))},`${b}-${a[0]??""}`))})]})}):(0,d.jsx)(B,{text:a,className:b})}a.s(["FileBody",0,v,"FileLink",0,function({path:a,group:b,className:c,title:e,label:f,children:g}){let j=u(a),k=(0,h.useContext)(F),[l,m]=(0,r.useServerAction)(q.openFileAction);return"tab"===j.how?(0,d.jsx)("a",{href:j.href,target:"_blank",rel:"noreferrer",title:e??a,"aria-label":f,className:c,children:g}):(0,d.jsx)("button",{type:"button",disabled:m,title:e??a,"aria-label":f,className:c,onClick:()=>{"dialog"===j.how?k?k(j.path,b):window.open(i.queryKey.fileView(j.path),"_blank"):l(a)},children:g})},"FilePreview",0,function({path:a,bytes:b}){let c=(0,p.viewKindOf)(a),{content:e,failure:f,truncated:g}=y(D.has(c)?null:a);return("frame"===c||"image"===c)&&b>o.WORKSPACE_VIEW.elementMax?(0,d.jsx)(z,{path:a,bytes:b}):"frame"===c?(0,d.jsx)("iframe",{title:a,src:i.queryKey.file(a),allow:"clipboard-read; clipboard-write; fullscreen; autoplay",className:"h-full w-full bg-white"}):"image"===c?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:a,className:"mx-auto max-w-full p-6"}):"audio"===c||"video"===c?"audio"===c?(0,d.jsx)("audio",{controls:!0,src:i.queryKey.file(a),className:"w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):(0,d.jsx)("video",{controls:!0,src:i.queryKey.file(a),className:"max-w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):f?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:f}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:e,truncated:g})},"FileViewer",0,function({children:a}){let[b,c]=(0,h.useState)(null),e=(0,h.useCallback)((a,b=[])=>c({path:a,group:b}),[]);return(0,d.jsxs)(F,{value:e,children:[a,(0,d.jsx)(A,{path:b?.path??null,group:b?.group??[],kind:b?(0,p.viewKindOf)(b.path):"text",onPath:a=>c(b=>b&&{...b,path:a}),onClose:()=>c(null)})]})},"fileTarget",0,u,"useFileText",0,y,"useOpenFile",0,function(){let a=(0,h.useContext)(F);return(0,h.useCallback)((b,c=[])=>{let d=u(b);if("os"===d.how)return!1;if("dialog"===d.how&&a)return a(d.path,c),!0;let e="tab"===d.how?d.href:i.queryKey.fileView(d.path);return null!==window.open(e,"_blank")},[a])}]),c()}catch(a){c(a)}},!1),576208,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f284980eddf0dc50d6dc014ce41f10d9aaa77294a",b.callServer,void 0,b.findSourceMapURL,"openFileAction");a.s(["openFileAction",0,c])},559553,a=>{"use strict";var b=a.i(767561),c=a.i(287702);let d=a=>`text/${a}; charset=utf-8`,e={md:{kind:"markdown",mime:d("markdown")},markdown:{kind:"markdown",mime:d("markdown")},csv:{kind:"csv",mime:d("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:d("plain")},log:{kind:"text",mime:d("plain")},html:{kind:"frame",mime:d("html")},htm:{kind:"frame",mime:d("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:d("css")},js:{kind:"none",mime:d("javascript")},woff2:{kind:"none",mime:"font/woff2"}},f=a=>a.split(".").pop()?.toLowerCase()??"",g=Object.entries(e).filter(([,a])=>"none"!==a.kind).map(([a])=>a),h=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${g.join("|")})\b`,"giu"),i=`${c.PATHS.workspace}/`,j=b.queryKey.file("");function k(a){let b=function(a){if(!a.startsWith(j))return a;let b=a.slice(j.length);try{return decodeURIComponent(b)}catch{return b}}(a.trim()),c=b.indexOf(i);return c>=0?b.slice(c+i.length)||null:b.startsWith("/")||/^[A-Za-z]:/.test(b)||b.split("/").includes("..")?null:b||null}let l=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;a.s(["opensOnFinish",0,a=>a.startsWith(`${c.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(f(a)),"pathsIn",0,function(a){let b=a.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),c=new Set,d="",e=null;for(let a of b.matchAll(h)){let f=a[0],g=!f.includes("/"),h=function(a){let b=k(a);if(!b)return null;let[c,...d]=b.split("/");return d.length&&c.includes(".")?null:b}(g?d+f:f);if(g||(d=h?.slice(0,h.lastIndexOf("/")+1)??""),h){if(e&&l.test(b.slice(e.end,a.index)))for(let a of function(a,b){let c=/^(.*?)(\d+)(\D*)$/.exec(a),d=/^(.*?)(\d+)(\D*)$/.exec(b);if(!c||!d||c[1]!==d[1]||c[3]!==d[3])return[];let e=Number(c[2]),f=Number(d[2]);if(!(f-e>1)||f-e>12)return[];let g=c[2].startsWith("0")?c[2].length:0;return Array.from({length:f-e-1},(a,b)=>`${c[1]}${String(e+b+1).padStart(g,"0")}${c[3]}`)}(e.rel,h))c.add(a);c.add(h),e={rel:h,end:a.index+f.length}}}return[...c].slice(0,12)},"viewKindOf",0,a=>e[f(a)]?.kind??"none","workspaceRelative",0,k])},168370,a=>{"use strict";var b=a.i(164831);let c={name:"external-link",size:24,node:[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]};c.node;let d=(0,b.default)(c);a.s(["ExternalLink",0,d],168370)}];
|
|
1
|
+
module.exports=[588237,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-9 px-2 text-left align-middle font-mono text-[11px] font-normal tracking-[0.1em] whitespace-nowrap text-muted-foreground uppercase [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b border-border/60 transition-colors data-[state=selected]:bg-muted hover:bg-muted/40",a),...d})}])},369768,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(707963),f=a.i(141146),g=a.i(168370),h=a.i(572131),i=a.i(767561),j=a.i(340695),k=a.i(965733),l=a.i(846991),m=a.i(950463),n=a.i(588237),o=a.i(287702),p=a.i(559553),q=a.i(267514),r=a.i(313237),s=a.i(497895),t=b([l]);[l]=t.then?(await t)():t;let D=new Set(["frame","image","audio","video"]),E=new Set(["image"]);function u(a){let b=(0,p.workspaceRelative)(a);if(!b)return{how:"os"};let c=(0,p.viewKindOf)(b);return E.has(c)?{how:"dialog",path:b}:D.has(c)?{how:"tab",path:b,href:i.queryKey.fileView(b)}:"none"===c?{how:"os"}:{how:"dialog",path:b}}let F=(0,h.createContext)(null),G={dialog:{prose:"px-5 py-4",block:"px-4 py-3"},page:{prose:"px-5 py-6 sm:px-8",block:"px-5 py-5"},inline:{prose:"pb-3",block:"pb-3"}};function v({kind:a,content:b,truncated:c,where:e="dialog"}){return(0,d.jsxs)(d.Fragment,{children:[null!=c&&(0,d.jsx)(w,{of:c}),(0,d.jsx)(x,{kind:a,content:b,where:e})]})}function w({of:a}){return(0,d.jsxs)("p",{className:"border-b border-border/60 px-5 py-2.5 font-mono text-[11px] text-muted-foreground",children:[`Showing the first ${(0,s.formatBytes)(o.WORKSPACE_VIEW.textMax)} of ${(0,s.formatBytes)(a)}. `,"Open the file itself for the rest."]})}function x({kind:a,content:b,where:c}){let e=G[c];switch(a){case"markdown":return(0,d.jsx)("div",{className:(0,s.cn)("min-w-0 text-sm leading-relaxed",e.prose),children:(0,d.jsx)(l.Markdown,{children:b})});case"csv":return(0,d.jsx)(C,{content:b,className:e.block});case"json":return(0,d.jsx)(B,{text:function(a){try{return JSON.stringify(JSON.parse(a),null,2)}catch{return a}}(b),className:e.block});default:return(0,d.jsx)(B,{text:b,className:e.block})}}function y(a){let[b,c]=(0,h.useState)(null),[d,e]=(0,h.useState)(null),[f,g]=(0,h.useState)(null);return(0,h.useEffect)(()=>{if(!a)return;c(null),e(null),g(null);let b=!1;return fetch(i.queryKey.file(a),{headers:{range:`bytes=0-${o.WORKSPACE_VIEW.textMax-1}`}}).then(async a=>{if(!a.ok)throw Error(await a.text());return{text:await a.text(),of:function(a){let b=a.headers.get("content-range")?.match(/^bytes \d+-(\d+)\/(\d+)$/);if(!b)return null;let[,c,d]=b.map(Number);return c+1<d?d:null}(a)}}).then(({text:a,of:d})=>{if(b)return;let e=null===d?a:a.slice(0,a.lastIndexOf("\n")+1||void 0);c(e),g(d)}).catch(a=>!b&&e((0,s.errorToString)(a))),()=>{b=!0}},[a]),{content:b,failure:d,truncated:f}}function z({path:a,bytes:b}){let[c,e]=(0,r.useServerAction)(q.openFileAction);return(0,d.jsxs)("div",{className:"space-y-4 p-8",children:[(0,d.jsxs)("p",{className:"max-w-lg text-sm leading-relaxed text-muted-foreground",children:[`This file is ${(0,s.formatBytes)(b)} — too big to draw here without `,"taking the window with it. Open it where it is instead."]}),(0,d.jsx)(j.Button,{variant:"outline",loading:e,onClick:()=>c(a),children:"Reveal in the file manager"})]})}function A({path:a,group:b=[],kind:c,onPath:h,onClose:l}){let n="image"===c,{content:o,failure:p,truncated:q}=y(n?null:a),r=a?.split("/").pop()??"",t=a?b.indexOf(a):-1,u=a=>{!(t<0)&&h&&h(b[(t+a+b.length)%b.length])};return(0,d.jsx)(k.Dialog,{open:null!==a,onOpenChange:a=>!a&&l(),children:(0,d.jsxs)(k.DialogContent,{onKeyDown:a=>{"ArrowLeft"===a.key&&u(-1),"ArrowRight"===a.key&&u(1)},className:"flex max-h-[calc(100vh-3rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-4xl",children:[(0,d.jsx)(k.DialogTitle,{className:"sr-only",children:r}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border/60 py-2 pr-12 pl-4",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[12px]",children:a}),t>=0&&b.length>1&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:[t+1," / ",b.length]}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Previous image",onClick:()=>u(-1),children:(0,d.jsx)(e.ChevronLeft,{})}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Next image",onClick:()=>u(1),children:(0,d.jsx)(f.ChevronRight,{})})]}),n&&a&&(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Open in a new tab",render:(0,d.jsx)("a",{href:i.queryKey.fileView(a),target:"_blank",rel:"noreferrer"}),children:(0,d.jsx)(g.ExternalLink,{})})]}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-auto",children:n&&a?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:r,className:"mx-auto max-h-[calc(100vh-11rem)] object-contain p-4"}):p?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:p}):null===o?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:o,truncated:q})}),n&&b.length>1&&(0,d.jsx)("div",{className:"flex shrink-0 justify-center gap-1.5 border-t border-border/60 p-2.5",children:b.map(b=>(0,d.jsx)("button",{type:"button","aria-label":b.split("/").pop(),onClick:()=>h?.(b),className:(0,s.cn)("size-11 shrink-0 overflow-hidden rounded-md outline-none focus-visible:ring-3 focus-visible:ring-ring/50",b===a?"ring-2 ring-foreground":"opacity-55"),children:(0,d.jsx)("img",{src:i.queryKey.file(b),alt:"",loading:"lazy",className:"size-full bg-muted object-cover"})},b))})]})})}function B({text:a,className:b}){return(0,d.jsx)("pre",{className:(0,s.cn)("overflow-x-auto font-mono text-[12px] leading-relaxed whitespace-pre-wrap text-foreground/90",b),children:a})}function C({content:a,className:b}){let[c,...e]=(0,h.useMemo)(()=>(function(a){let b=[],c=[],d="",e=!1;for(let f=0;f<a.length;f++){let g=a[f];e?'"'===g&&'"'===a[f+1]?(d+='"',f++):'"'===g?e=!1:d+=g:'"'===g?e=!0:","===g?(c.push(d),d=""):"\n"===g||"\r"===g?("\r"===g&&"\n"===a[f+1]&&f++,c.push(d),b.push(c),c=[],d=""):d+=g}return(d.length||c.length)&&(c.push(d),b.push(c)),b.filter(a=>a.some(a=>a.trim()))})(a),[a]);return c?(0,d.jsx)("div",{className:(0,s.cn)("overflow-x-auto",b),children:(0,d.jsxs)(n.Table,{children:[(0,d.jsx)(n.TableHeader,{children:(0,d.jsx)(n.TableRow,{children:c.map((a,b)=>(0,d.jsx)(n.TableHead,{className:"whitespace-nowrap",children:a},`${b}-${a}`))})}),(0,d.jsx)(n.TableBody,{children:e.map((a,b)=>(0,d.jsx)(n.TableRow,{children:c.map((c,e)=>(0,d.jsx)(n.TableCell,{className:"whitespace-nowrap",children:a[e]??""},`${b}-${e}`))},`${b}-${a[0]??""}`))})]})}):(0,d.jsx)(B,{text:a,className:b})}a.s(["FileBody",0,v,"FileLink",0,function({path:a,group:b,className:c,title:e,label:f,children:g}){let j=u(a),k=(0,h.useContext)(F),[l,m]=(0,r.useServerAction)(q.openFileAction);return"tab"===j.how?(0,d.jsx)("a",{href:j.href,target:"_blank",rel:"noreferrer",title:e??a,"aria-label":f,className:c,children:g}):(0,d.jsx)("button",{type:"button",disabled:m,title:e??a,"aria-label":f,className:c,onClick:()=>{"dialog"===j.how?k?k(j.path,b):window.open(i.queryKey.fileView(j.path),"_blank"):l(a)},children:g})},"FilePreview",0,function({path:a,bytes:b}){let c=(0,p.viewKindOf)(a),{content:e,failure:f,truncated:g}=y(D.has(c)?null:a);return("frame"===c||"image"===c)&&b>o.WORKSPACE_VIEW.elementMax?(0,d.jsx)(z,{path:a,bytes:b}):"frame"===c?(0,d.jsx)("iframe",{title:a,src:i.queryKey.file(a),allow:"clipboard-read; clipboard-write; fullscreen; autoplay",className:"h-full w-full bg-white"}):"image"===c?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:a,className:"mx-auto max-w-full p-6"}):"audio"===c||"video"===c?"audio"===c?(0,d.jsx)("audio",{controls:!0,src:i.queryKey.file(a),className:"w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):(0,d.jsx)("video",{controls:!0,src:i.queryKey.file(a),className:"max-w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):f?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:f}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:e,truncated:g})},"FileViewer",0,function({children:a}){let[b,c]=(0,h.useState)(null),e=(0,h.useCallback)((a,b=[])=>c({path:a,group:b}),[]);return(0,d.jsxs)(F,{value:e,children:[a,(0,d.jsx)(A,{path:b?.path??null,group:b?.group??[],kind:b?(0,p.viewKindOf)(b.path):"text",onPath:a=>c(b=>b&&{...b,path:a}),onClose:()=>c(null)})]})},"fileTarget",0,u,"useFileText",0,y,"useOpenFile",0,function(){let a=(0,h.useContext)(F);return(0,h.useCallback)((b,c=[])=>{let d=u(b);if("os"===d.how)return!1;if("dialog"===d.how&&a)return a(d.path,c),!0;let e="tab"===d.how?d.href:i.queryKey.fileView(d.path);return null!==window.open(e,"_blank")},[a])}]),c()}catch(a){c(a)}},!1),267514,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f8d58bd1288271da847b9deff4bb67295444fd389",b.callServer,void 0,b.findSourceMapURL,"openFileAction");a.s(["openFileAction",0,c])},559553,a=>{"use strict";var b=a.i(767561),c=a.i(287702);let d=a=>`text/${a}; charset=utf-8`,e={md:{kind:"markdown",mime:d("markdown")},markdown:{kind:"markdown",mime:d("markdown")},csv:{kind:"csv",mime:d("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:d("plain")},log:{kind:"text",mime:d("plain")},html:{kind:"frame",mime:d("html")},htm:{kind:"frame",mime:d("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:d("css")},js:{kind:"none",mime:d("javascript")},woff2:{kind:"none",mime:"font/woff2"}},f=a=>a.split(".").pop()?.toLowerCase()??"",g=Object.entries(e).filter(([,a])=>"none"!==a.kind).map(([a])=>a),h=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${g.join("|")})\b`,"giu"),i=`${c.PATHS.workspace}/`,j=b.queryKey.file("");function k(a){let b=function(a){if(!a.startsWith(j))return a;let b=a.slice(j.length);try{return decodeURIComponent(b)}catch{return b}}(a.trim()),c=b.indexOf(i);return c>=0?b.slice(c+i.length)||null:b.startsWith("/")||/^[A-Za-z]:/.test(b)||b.split("/").includes("..")?null:b||null}let l=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;a.s(["opensOnFinish",0,a=>a.startsWith(`${c.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(f(a)),"pathsIn",0,function(a){let b=a.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),c=new Set,d="",e=null;for(let a of b.matchAll(h)){let f=a[0],g=!f.includes("/"),h=function(a){let b=k(a);if(!b)return null;let[c,...d]=b.split("/");return d.length&&c.includes(".")?null:b}(g?d+f:f);if(g||(d=h?.slice(0,h.lastIndexOf("/")+1)??""),h){if(e&&l.test(b.slice(e.end,a.index)))for(let a of function(a,b){let c=/^(.*?)(\d+)(\D*)$/.exec(a),d=/^(.*?)(\d+)(\D*)$/.exec(b);if(!c||!d||c[1]!==d[1]||c[3]!==d[3])return[];let e=Number(c[2]),f=Number(d[2]);if(!(f-e>1)||f-e>12)return[];let g=c[2].startsWith("0")?c[2].length:0;return Array.from({length:f-e-1},(a,b)=>`${c[1]}${String(e+b+1).padStart(g,"0")}${c[3]}`)}(e.rel,h))c.add(a);c.add(h),e={rel:h,end:a.index+f.length}}}return[...c].slice(0,12)},"viewKindOf",0,a=>e[f(a)]?.kind??"none","workspaceRelative",0,k])},168370,a=>{"use strict";var b=a.i(164831);let c={name:"external-link",size:24,node:[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]};c.node;let d=(0,b.default)(c);a.s(["ExternalLink",0,d],168370)}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_1kd843u._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[588237,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-9 px-2 text-left align-middle font-mono text-[11px] font-normal tracking-[0.1em] whitespace-nowrap text-muted-foreground uppercase [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b border-border/60 transition-colors data-[state=selected]:bg-muted hover:bg-muted/40",a),...d})}])},369768,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(707963),f=a.i(141146),g=a.i(168370),h=a.i(572131),i=a.i(767561),j=a.i(340695),k=a.i(965733),l=a.i(846991),m=a.i(950463),n=a.i(588237),o=a.i(287702),p=a.i(559553),q=a.i(576208),r=a.i(313237),s=a.i(497895),t=b([l]);[l]=t.then?(await t)():t;let D=new Set(["frame","image","audio","video"]),E=new Set(["image"]);function u(a){let b=(0,p.workspaceRelative)(a);if(!b)return{how:"os"};let c=(0,p.viewKindOf)(b);return E.has(c)?{how:"dialog",path:b}:D.has(c)?{how:"tab",path:b,href:i.queryKey.fileView(b)}:"none"===c?{how:"os"}:{how:"dialog",path:b}}let F=(0,h.createContext)(null),G={dialog:{prose:"px-5 py-4",block:"px-4 py-3"},page:{prose:"px-5 py-6 sm:px-8",block:"px-5 py-5"},inline:{prose:"pb-3",block:"pb-3"}};function v({kind:a,content:b,truncated:c,where:e="dialog"}){return(0,d.jsxs)(d.Fragment,{children:[null!=c&&(0,d.jsx)(w,{of:c}),(0,d.jsx)(x,{kind:a,content:b,where:e})]})}function w({of:a}){return(0,d.jsxs)("p",{className:"border-b border-border/60 px-5 py-2.5 font-mono text-[11px] text-muted-foreground",children:[`Showing the first ${(0,s.formatBytes)(o.WORKSPACE_VIEW.textMax)} of ${(0,s.formatBytes)(a)}. `,"Open the file itself for the rest."]})}function x({kind:a,content:b,where:c}){let e=G[c];switch(a){case"markdown":return(0,d.jsx)("div",{className:(0,s.cn)("min-w-0 text-sm leading-relaxed",e.prose),children:(0,d.jsx)(l.Markdown,{children:b})});case"csv":return(0,d.jsx)(C,{content:b,className:e.block});case"json":return(0,d.jsx)(B,{text:function(a){try{return JSON.stringify(JSON.parse(a),null,2)}catch{return a}}(b),className:e.block});default:return(0,d.jsx)(B,{text:b,className:e.block})}}function y(a){let[b,c]=(0,h.useState)(null),[d,e]=(0,h.useState)(null),[f,g]=(0,h.useState)(null);return(0,h.useEffect)(()=>{if(!a)return;c(null),e(null),g(null);let b=!1;return fetch(i.queryKey.file(a),{headers:{range:`bytes=0-${o.WORKSPACE_VIEW.textMax-1}`}}).then(async a=>{if(!a.ok)throw Error(await a.text());return{text:await a.text(),of:function(a){let b=a.headers.get("content-range")?.match(/^bytes \d+-(\d+)\/(\d+)$/);if(!b)return null;let[,c,d]=b.map(Number);return c+1<d?d:null}(a)}}).then(({text:a,of:d})=>{if(b)return;let e=null===d?a:a.slice(0,a.lastIndexOf("\n")+1||void 0);c(e),g(d)}).catch(a=>!b&&e((0,s.errorToString)(a))),()=>{b=!0}},[a]),{content:b,failure:d,truncated:f}}function z({path:a,bytes:b}){let[c,e]=(0,r.useServerAction)(q.openFileAction);return(0,d.jsxs)("div",{className:"space-y-4 p-8",children:[(0,d.jsxs)("p",{className:"max-w-lg text-sm leading-relaxed text-muted-foreground",children:[`This file is ${(0,s.formatBytes)(b)} — too big to draw here without `,"taking the window with it. Open it where it is instead."]}),(0,d.jsx)(j.Button,{variant:"outline",loading:e,onClick:()=>c(a),children:"Reveal in the file manager"})]})}function A({path:a,group:b=[],kind:c,onPath:h,onClose:l}){let n="image"===c,{content:o,failure:p,truncated:q}=y(n?null:a),r=a?.split("/").pop()??"",t=a?b.indexOf(a):-1,u=a=>{!(t<0)&&h&&h(b[(t+a+b.length)%b.length])};return(0,d.jsx)(k.Dialog,{open:null!==a,onOpenChange:a=>!a&&l(),children:(0,d.jsxs)(k.DialogContent,{onKeyDown:a=>{"ArrowLeft"===a.key&&u(-1),"ArrowRight"===a.key&&u(1)},className:"flex max-h-[calc(100vh-3rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-4xl",children:[(0,d.jsx)(k.DialogTitle,{className:"sr-only",children:r}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border/60 py-2 pr-12 pl-4",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[12px]",children:a}),t>=0&&b.length>1&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:[t+1," / ",b.length]}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Previous image",onClick:()=>u(-1),children:(0,d.jsx)(e.ChevronLeft,{})}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Next image",onClick:()=>u(1),children:(0,d.jsx)(f.ChevronRight,{})})]}),n&&a&&(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Open in a new tab",render:(0,d.jsx)("a",{href:i.queryKey.fileView(a),target:"_blank",rel:"noreferrer"}),children:(0,d.jsx)(g.ExternalLink,{})})]}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-auto",children:n&&a?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:r,className:"mx-auto max-h-[calc(100vh-11rem)] object-contain p-4"}):p?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:p}):null===o?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:o,truncated:q})}),n&&b.length>1&&(0,d.jsx)("div",{className:"flex shrink-0 justify-center gap-1.5 border-t border-border/60 p-2.5",children:b.map(b=>(0,d.jsx)("button",{type:"button","aria-label":b.split("/").pop(),onClick:()=>h?.(b),className:(0,s.cn)("size-11 shrink-0 overflow-hidden rounded-md outline-none focus-visible:ring-3 focus-visible:ring-ring/50",b===a?"ring-2 ring-foreground":"opacity-55"),children:(0,d.jsx)("img",{src:i.queryKey.file(b),alt:"",loading:"lazy",className:"size-full bg-muted object-cover"})},b))})]})})}function B({text:a,className:b}){return(0,d.jsx)("pre",{className:(0,s.cn)("overflow-x-auto font-mono text-[12px] leading-relaxed whitespace-pre-wrap text-foreground/90",b),children:a})}function C({content:a,className:b}){let[c,...e]=(0,h.useMemo)(()=>(function(a){let b=[],c=[],d="",e=!1;for(let f=0;f<a.length;f++){let g=a[f];e?'"'===g&&'"'===a[f+1]?(d+='"',f++):'"'===g?e=!1:d+=g:'"'===g?e=!0:","===g?(c.push(d),d=""):"\n"===g||"\r"===g?("\r"===g&&"\n"===a[f+1]&&f++,c.push(d),b.push(c),c=[],d=""):d+=g}return(d.length||c.length)&&(c.push(d),b.push(c)),b.filter(a=>a.some(a=>a.trim()))})(a),[a]);return c?(0,d.jsx)("div",{className:(0,s.cn)("overflow-x-auto",b),children:(0,d.jsxs)(n.Table,{children:[(0,d.jsx)(n.TableHeader,{children:(0,d.jsx)(n.TableRow,{children:c.map((a,b)=>(0,d.jsx)(n.TableHead,{className:"whitespace-nowrap",children:a},`${b}-${a}`))})}),(0,d.jsx)(n.TableBody,{children:e.map((a,b)=>(0,d.jsx)(n.TableRow,{children:c.map((c,e)=>(0,d.jsx)(n.TableCell,{className:"whitespace-nowrap",children:a[e]??""},`${b}-${e}`))},`${b}-${a[0]??""}`))})]})}):(0,d.jsx)(B,{text:a,className:b})}a.s(["FileBody",0,v,"FileLink",0,function({path:a,group:b,className:c,title:e,label:f,children:g}){let j=u(a),k=(0,h.useContext)(F),[l,m]=(0,r.useServerAction)(q.openFileAction);return"tab"===j.how?(0,d.jsx)("a",{href:j.href,target:"_blank",rel:"noreferrer",title:e??a,"aria-label":f,className:c,children:g}):(0,d.jsx)("button",{type:"button",disabled:m,title:e??a,"aria-label":f,className:c,onClick:()=>{"dialog"===j.how?k?k(j.path,b):window.open(i.queryKey.fileView(j.path),"_blank"):l(a)},children:g})},"FilePreview",0,function({path:a,bytes:b}){let c=(0,p.viewKindOf)(a),{content:e,failure:f,truncated:g}=y(D.has(c)?null:a);return("frame"===c||"image"===c)&&b>o.WORKSPACE_VIEW.elementMax?(0,d.jsx)(z,{path:a,bytes:b}):"frame"===c?(0,d.jsx)("iframe",{title:a,src:i.queryKey.file(a),allow:"clipboard-read; clipboard-write; fullscreen; autoplay",className:"h-full w-full bg-white"}):"image"===c?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:a,className:"mx-auto max-w-full p-6"}):"audio"===c||"video"===c?"audio"===c?(0,d.jsx)("audio",{controls:!0,src:i.queryKey.file(a),className:"w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):(0,d.jsx)("video",{controls:!0,src:i.queryKey.file(a),className:"max-w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):f?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:f}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:e,truncated:g})},"FileViewer",0,function({children:a}){let[b,c]=(0,h.useState)(null),e=(0,h.useCallback)((a,b=[])=>c({path:a,group:b}),[]);return(0,d.jsxs)(F,{value:e,children:[a,(0,d.jsx)(A,{path:b?.path??null,group:b?.group??[],kind:b?(0,p.viewKindOf)(b.path):"text",onPath:a=>c(b=>b&&{...b,path:a}),onClose:()=>c(null)})]})},"fileTarget",0,u,"useFileText",0,y,"useOpenFile",0,function(){let a=(0,h.useContext)(F);return(0,h.useCallback)((b,c=[])=>{let d=u(b);if("os"===d.how)return!1;if("dialog"===d.how&&a)return a(d.path,c),!0;let e="tab"===d.how?d.href:i.queryKey.fileView(d.path);return null!==window.open(e,"_blank")},[a])}]),c()}catch(a){c(a)}},!1),576208,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f284980eddf0dc50d6dc014ce41f10d9aaa77294a",b.callServer,void 0,b.findSourceMapURL,"openFileAction");a.s(["openFileAction",0,c])},559553,a=>{"use strict";var b=a.i(767561),c=a.i(287702);let d=a=>`text/${a}; charset=utf-8`,e={md:{kind:"markdown",mime:d("markdown")},markdown:{kind:"markdown",mime:d("markdown")},csv:{kind:"csv",mime:d("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:d("plain")},log:{kind:"text",mime:d("plain")},html:{kind:"frame",mime:d("html")},htm:{kind:"frame",mime:d("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:d("css")},js:{kind:"none",mime:d("javascript")},woff2:{kind:"none",mime:"font/woff2"}},f=a=>a.split(".").pop()?.toLowerCase()??"",g=Object.entries(e).filter(([,a])=>"none"!==a.kind).map(([a])=>a),h=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${g.join("|")})\b`,"giu"),i=`${c.PATHS.workspace}/`,j=b.queryKey.file("");function k(a){let b=function(a){if(!a.startsWith(j))return a;let b=a.slice(j.length);try{return decodeURIComponent(b)}catch{return b}}(a.trim()),c=b.indexOf(i);return c>=0?b.slice(c+i.length)||null:b.startsWith("/")||/^[A-Za-z]:/.test(b)||b.split("/").includes("..")?null:b||null}let l=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;a.s(["opensOnFinish",0,a=>a.startsWith(`${c.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(f(a)),"pathsIn",0,function(a){let b=a.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),c=new Set,d="",e=null;for(let a of b.matchAll(h)){let f=a[0],g=!f.includes("/"),h=function(a){let b=k(a);if(!b)return null;let[c,...d]=b.split("/");return d.length&&c.includes(".")?null:b}(g?d+f:f);if(g||(d=h?.slice(0,h.lastIndexOf("/")+1)??""),h){if(e&&l.test(b.slice(e.end,a.index)))for(let a of function(a,b){let c=/^(.*?)(\d+)(\D*)$/.exec(a),d=/^(.*?)(\d+)(\D*)$/.exec(b);if(!c||!d||c[1]!==d[1]||c[3]!==d[3])return[];let e=Number(c[2]),f=Number(d[2]);if(!(f-e>1)||f-e>12)return[];let g=c[2].startsWith("0")?c[2].length:0;return Array.from({length:f-e-1},(a,b)=>`${c[1]}${String(e+b+1).padStart(g,"0")}${c[3]}`)}(e.rel,h))c.add(a);c.add(h),e={rel:h,end:a.index+f.length}}}return[...c].slice(0,12)},"viewKindOf",0,a=>e[f(a)]?.kind??"none","workspaceRelative",0,k])},168370,a=>{"use strict";var b=a.i(164831);let c={name:"external-link",size:24,node:[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]};c.node;let d=(0,b.default)(c);a.s(["ExternalLink",0,d],168370)}];
|
|
1
|
+
module.exports=[588237,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-9 px-2 text-left align-middle font-mono text-[11px] font-normal tracking-[0.1em] whitespace-nowrap text-muted-foreground uppercase [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b border-border/60 transition-colors data-[state=selected]:bg-muted hover:bg-muted/40",a),...d})}])},369768,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(707963),f=a.i(141146),g=a.i(168370),h=a.i(572131),i=a.i(767561),j=a.i(340695),k=a.i(965733),l=a.i(846991),m=a.i(950463),n=a.i(588237),o=a.i(287702),p=a.i(559553),q=a.i(267514),r=a.i(313237),s=a.i(497895),t=b([l]);[l]=t.then?(await t)():t;let D=new Set(["frame","image","audio","video"]),E=new Set(["image"]);function u(a){let b=(0,p.workspaceRelative)(a);if(!b)return{how:"os"};let c=(0,p.viewKindOf)(b);return E.has(c)?{how:"dialog",path:b}:D.has(c)?{how:"tab",path:b,href:i.queryKey.fileView(b)}:"none"===c?{how:"os"}:{how:"dialog",path:b}}let F=(0,h.createContext)(null),G={dialog:{prose:"px-5 py-4",block:"px-4 py-3"},page:{prose:"px-5 py-6 sm:px-8",block:"px-5 py-5"},inline:{prose:"pb-3",block:"pb-3"}};function v({kind:a,content:b,truncated:c,where:e="dialog"}){return(0,d.jsxs)(d.Fragment,{children:[null!=c&&(0,d.jsx)(w,{of:c}),(0,d.jsx)(x,{kind:a,content:b,where:e})]})}function w({of:a}){return(0,d.jsxs)("p",{className:"border-b border-border/60 px-5 py-2.5 font-mono text-[11px] text-muted-foreground",children:[`Showing the first ${(0,s.formatBytes)(o.WORKSPACE_VIEW.textMax)} of ${(0,s.formatBytes)(a)}. `,"Open the file itself for the rest."]})}function x({kind:a,content:b,where:c}){let e=G[c];switch(a){case"markdown":return(0,d.jsx)("div",{className:(0,s.cn)("min-w-0 text-sm leading-relaxed",e.prose),children:(0,d.jsx)(l.Markdown,{children:b})});case"csv":return(0,d.jsx)(C,{content:b,className:e.block});case"json":return(0,d.jsx)(B,{text:function(a){try{return JSON.stringify(JSON.parse(a),null,2)}catch{return a}}(b),className:e.block});default:return(0,d.jsx)(B,{text:b,className:e.block})}}function y(a){let[b,c]=(0,h.useState)(null),[d,e]=(0,h.useState)(null),[f,g]=(0,h.useState)(null);return(0,h.useEffect)(()=>{if(!a)return;c(null),e(null),g(null);let b=!1;return fetch(i.queryKey.file(a),{headers:{range:`bytes=0-${o.WORKSPACE_VIEW.textMax-1}`}}).then(async a=>{if(!a.ok)throw Error(await a.text());return{text:await a.text(),of:function(a){let b=a.headers.get("content-range")?.match(/^bytes \d+-(\d+)\/(\d+)$/);if(!b)return null;let[,c,d]=b.map(Number);return c+1<d?d:null}(a)}}).then(({text:a,of:d})=>{if(b)return;let e=null===d?a:a.slice(0,a.lastIndexOf("\n")+1||void 0);c(e),g(d)}).catch(a=>!b&&e((0,s.errorToString)(a))),()=>{b=!0}},[a]),{content:b,failure:d,truncated:f}}function z({path:a,bytes:b}){let[c,e]=(0,r.useServerAction)(q.openFileAction);return(0,d.jsxs)("div",{className:"space-y-4 p-8",children:[(0,d.jsxs)("p",{className:"max-w-lg text-sm leading-relaxed text-muted-foreground",children:[`This file is ${(0,s.formatBytes)(b)} — too big to draw here without `,"taking the window with it. Open it where it is instead."]}),(0,d.jsx)(j.Button,{variant:"outline",loading:e,onClick:()=>c(a),children:"Reveal in the file manager"})]})}function A({path:a,group:b=[],kind:c,onPath:h,onClose:l}){let n="image"===c,{content:o,failure:p,truncated:q}=y(n?null:a),r=a?.split("/").pop()??"",t=a?b.indexOf(a):-1,u=a=>{!(t<0)&&h&&h(b[(t+a+b.length)%b.length])};return(0,d.jsx)(k.Dialog,{open:null!==a,onOpenChange:a=>!a&&l(),children:(0,d.jsxs)(k.DialogContent,{onKeyDown:a=>{"ArrowLeft"===a.key&&u(-1),"ArrowRight"===a.key&&u(1)},className:"flex max-h-[calc(100vh-3rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-4xl",children:[(0,d.jsx)(k.DialogTitle,{className:"sr-only",children:r}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border/60 py-2 pr-12 pl-4",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[12px]",children:a}),t>=0&&b.length>1&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground tabular-nums",children:[t+1," / ",b.length]}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Previous image",onClick:()=>u(-1),children:(0,d.jsx)(e.ChevronLeft,{})}),(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Next image",onClick:()=>u(1),children:(0,d.jsx)(f.ChevronRight,{})})]}),n&&a&&(0,d.jsx)(j.Button,{variant:"ghost",size:"icon-sm","aria-label":"Open in a new tab",render:(0,d.jsx)("a",{href:i.queryKey.fileView(a),target:"_blank",rel:"noreferrer"}),children:(0,d.jsx)(g.ExternalLink,{})})]}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-auto",children:n&&a?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:r,className:"mx-auto max-h-[calc(100vh-11rem)] object-contain p-4"}):p?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:p}):null===o?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:o,truncated:q})}),n&&b.length>1&&(0,d.jsx)("div",{className:"flex shrink-0 justify-center gap-1.5 border-t border-border/60 p-2.5",children:b.map(b=>(0,d.jsx)("button",{type:"button","aria-label":b.split("/").pop(),onClick:()=>h?.(b),className:(0,s.cn)("size-11 shrink-0 overflow-hidden rounded-md outline-none focus-visible:ring-3 focus-visible:ring-ring/50",b===a?"ring-2 ring-foreground":"opacity-55"),children:(0,d.jsx)("img",{src:i.queryKey.file(b),alt:"",loading:"lazy",className:"size-full bg-muted object-cover"})},b))})]})})}function B({text:a,className:b}){return(0,d.jsx)("pre",{className:(0,s.cn)("overflow-x-auto font-mono text-[12px] leading-relaxed whitespace-pre-wrap text-foreground/90",b),children:a})}function C({content:a,className:b}){let[c,...e]=(0,h.useMemo)(()=>(function(a){let b=[],c=[],d="",e=!1;for(let f=0;f<a.length;f++){let g=a[f];e?'"'===g&&'"'===a[f+1]?(d+='"',f++):'"'===g?e=!1:d+=g:'"'===g?e=!0:","===g?(c.push(d),d=""):"\n"===g||"\r"===g?("\r"===g&&"\n"===a[f+1]&&f++,c.push(d),b.push(c),c=[],d=""):d+=g}return(d.length||c.length)&&(c.push(d),b.push(c)),b.filter(a=>a.some(a=>a.trim()))})(a),[a]);return c?(0,d.jsx)("div",{className:(0,s.cn)("overflow-x-auto",b),children:(0,d.jsxs)(n.Table,{children:[(0,d.jsx)(n.TableHeader,{children:(0,d.jsx)(n.TableRow,{children:c.map((a,b)=>(0,d.jsx)(n.TableHead,{className:"whitespace-nowrap",children:a},`${b}-${a}`))})}),(0,d.jsx)(n.TableBody,{children:e.map((a,b)=>(0,d.jsx)(n.TableRow,{children:c.map((c,e)=>(0,d.jsx)(n.TableCell,{className:"whitespace-nowrap",children:a[e]??""},`${b}-${e}`))},`${b}-${a[0]??""}`))})]})}):(0,d.jsx)(B,{text:a,className:b})}a.s(["FileBody",0,v,"FileLink",0,function({path:a,group:b,className:c,title:e,label:f,children:g}){let j=u(a),k=(0,h.useContext)(F),[l,m]=(0,r.useServerAction)(q.openFileAction);return"tab"===j.how?(0,d.jsx)("a",{href:j.href,target:"_blank",rel:"noreferrer",title:e??a,"aria-label":f,className:c,children:g}):(0,d.jsx)("button",{type:"button",disabled:m,title:e??a,"aria-label":f,className:c,onClick:()=>{"dialog"===j.how?k?k(j.path,b):window.open(i.queryKey.fileView(j.path),"_blank"):l(a)},children:g})},"FilePreview",0,function({path:a,bytes:b}){let c=(0,p.viewKindOf)(a),{content:e,failure:f,truncated:g}=y(D.has(c)?null:a);return("frame"===c||"image"===c)&&b>o.WORKSPACE_VIEW.elementMax?(0,d.jsx)(z,{path:a,bytes:b}):"frame"===c?(0,d.jsx)("iframe",{title:a,src:i.queryKey.file(a),allow:"clipboard-read; clipboard-write; fullscreen; autoplay",className:"h-full w-full bg-white"}):"image"===c?(0,d.jsx)("img",{src:i.queryKey.file(a),alt:a,className:"mx-auto max-w-full p-6"}):"audio"===c||"video"===c?"audio"===c?(0,d.jsx)("audio",{controls:!0,src:i.queryKey.file(a),className:"w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):(0,d.jsx)("video",{controls:!0,src:i.queryKey.file(a),className:"max-w-full p-6",children:(0,d.jsx)("track",{kind:"captions"})}):f?(0,d.jsx)("p",{className:"p-5 font-mono text-xs text-destructive",children:f}):null===e?(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(m.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(m.Skeleton,{className:"h-4 w-5/6"})]}):(0,d.jsx)(v,{kind:c,content:e,truncated:g})},"FileViewer",0,function({children:a}){let[b,c]=(0,h.useState)(null),e=(0,h.useCallback)((a,b=[])=>c({path:a,group:b}),[]);return(0,d.jsxs)(F,{value:e,children:[a,(0,d.jsx)(A,{path:b?.path??null,group:b?.group??[],kind:b?(0,p.viewKindOf)(b.path):"text",onPath:a=>c(b=>b&&{...b,path:a}),onClose:()=>c(null)})]})},"fileTarget",0,u,"useFileText",0,y,"useOpenFile",0,function(){let a=(0,h.useContext)(F);return(0,h.useCallback)((b,c=[])=>{let d=u(b);if("os"===d.how)return!1;if("dialog"===d.how&&a)return a(d.path,c),!0;let e="tab"===d.how?d.href:i.queryKey.fileView(d.path);return null!==window.open(e,"_blank")},[a])}]),c()}catch(a){c(a)}},!1),267514,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f8d58bd1288271da847b9deff4bb67295444fd389",b.callServer,void 0,b.findSourceMapURL,"openFileAction");a.s(["openFileAction",0,c])},559553,a=>{"use strict";var b=a.i(767561),c=a.i(287702);let d=a=>`text/${a}; charset=utf-8`,e={md:{kind:"markdown",mime:d("markdown")},markdown:{kind:"markdown",mime:d("markdown")},csv:{kind:"csv",mime:d("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:d("plain")},log:{kind:"text",mime:d("plain")},html:{kind:"frame",mime:d("html")},htm:{kind:"frame",mime:d("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:d("css")},js:{kind:"none",mime:d("javascript")},woff2:{kind:"none",mime:"font/woff2"}},f=a=>a.split(".").pop()?.toLowerCase()??"",g=Object.entries(e).filter(([,a])=>"none"!==a.kind).map(([a])=>a),h=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])\/?(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${g.join("|")})\b`,"giu"),i=`${c.PATHS.workspace}/`,j=b.queryKey.file("");function k(a){let b=function(a){if(!a.startsWith(j))return a;let b=a.slice(j.length);try{return decodeURIComponent(b)}catch{return b}}(a.trim()),c=b.indexOf(i);return c>=0?b.slice(c+i.length)||null:b.startsWith("/")||/^[A-Za-z]:/.test(b)||b.split("/").includes("..")?null:b||null}let l=/^[\s`'"*_)]*(?:~|–|—|-|\.{2,}|…|to|through)[\s`'"*_(]*$/i;a.s(["opensOnFinish",0,a=>a.startsWith(`${c.PATHS.artifacts}/`)&&["md","markdown","html","htm"].includes(f(a)),"pathsIn",0,function(a){let b=a.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),c=new Set,d="",e=null;for(let a of b.matchAll(h)){let f=a[0],g=!f.includes("/"),h=function(a){let b=k(a);if(!b)return null;let[c,...d]=b.split("/");return d.length&&c.includes(".")?null:b}(g?d+f:f);if(g||(d=h?.slice(0,h.lastIndexOf("/")+1)??""),h){if(e&&l.test(b.slice(e.end,a.index)))for(let a of function(a,b){let c=/^(.*?)(\d+)(\D*)$/.exec(a),d=/^(.*?)(\d+)(\D*)$/.exec(b);if(!c||!d||c[1]!==d[1]||c[3]!==d[3])return[];let e=Number(c[2]),f=Number(d[2]);if(!(f-e>1)||f-e>12)return[];let g=c[2].startsWith("0")?c[2].length:0;return Array.from({length:f-e-1},(a,b)=>`${c[1]}${String(e+b+1).padStart(g,"0")}${c[3]}`)}(e.rel,h))c.add(a);c.add(h),e={rel:h,end:a.index+f.length}}}return[...c].slice(0,12)},"viewKindOf",0,a=>e[f(a)]?.kind??"none","workspaceRelative",0,k])},168370,a=>{"use strict";var b=a.i(164831);let c={name:"external-link",size:24,node:[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]};c.node;let d=(0,b.default)(c);a.s(["ExternalLink",0,d],168370)}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_1kq2ye_._.js.map
|