thursday-agent 0.10.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/{_173siic._.js → _0btzccu._.js} +2 -2
- package/.next/server/chunks/ssr/_0fqhhwi._.js +1 -1
- package/.next/server/chunks/ssr/{_1ng831c._.js → _0hjzb5o._.js} +2 -2
- package/.next/server/chunks/ssr/_0ld9_qq._.js +1 -1
- package/.next/server/chunks/ssr/{_1doidrw._.js → _0ouzu9f._.js} +2 -2
- package/.next/server/chunks/ssr/{_1flsjeo._.js → _0u7ko71._.js} +2 -2
- package/.next/server/chunks/ssr/{_0hlxij-._.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/{_0bp-_fi._.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/{_0tg0vf8._.js → _19ps4p3._.js} +7 -7
- package/.next/server/chunks/ssr/{_1yk6yak._.js → _1bhy4yg._.js} +2 -2
- package/.next/server/chunks/ssr/_1d423aj._.js +7 -5
- package/.next/server/chunks/ssr/{_0s41irp._.js → _1kd843u._.js} +2 -2
- package/.next/server/chunks/ssr/{_0p9pmxe._.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/{_17v-33v._.js → _1q683w8._.js} +3 -3
- package/.next/server/chunks/ssr/_1tawxu2._.js +3 -0
- package/.next/server/chunks/ssr/{_05rxyf9._.js → _1w2oba6._.js} +2 -2
- package/.next/server/chunks/ssr/_1xoch6f._.js +1 -1
- package/.next/server/chunks/ssr/{_1u2jw0i._.js → _1ybo1hd._.js} +3 -3
- package/.next/server/chunks/ssr/{features_bot_1yr-_pm._.js → features_bot_0s11m4r._.js} +2 -2
- 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_04t200t._.js → node_modules_00pocul._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1dcbvfw._.js → node_modules_02zt4az._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0eb4rx7._.js → node_modules_05ojmcl._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_08g12f-._.js → node_modules_06i6bli._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1expacw._.js → node_modules_09dj429._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0wq4-ts._.js → node_modules_0auzgvx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_048wmmj._.js → node_modules_0evjwh1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1qehmwm._.js → node_modules_0gmdur8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ksh9gy._.js → node_modules_0j3te-1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1n0h9sf._.js → node_modules_0rbaymq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0511ha-._.js → node_modules_0tf8_1e._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_18woe20._.js → node_modules_0yqy-0b._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0zjqwz7._.js → node_modules_1-53ebx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zf46lp._.js → node_modules_1-y9aho._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xzo2wn._.js → node_modules_11bltzp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_11hbkuj._.js → node_modules_18jn2qo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zkpek5._.js → node_modules_1_te3bu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0cdu6jq._.js → node_modules_1c0pg3k._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0piws2a._.js → node_modules_1en2jx5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1m2ho33._.js → node_modules_1p-c8cr._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0pk6i-e._.js → node_modules_1qe-oxg._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0s1lwc9._.js → node_modules_1rjt833._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1_afpz7._.js → node_modules_1tzw5sn._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1cxc8kn._.js → node_modules_1x6uwvn._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0f2k5l0._.js → node_modules_1zqddke._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1_ban4u._.js → node_modules_211zgim._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0avl8-1._.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_14oslro._.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/{0oz3rs47yy3p8.js → 03-724sj0nk_z.js} +2 -2
- package/.next/static/chunks/{42890jqk049q1.js → 03bhu4mk8en2q.js} +1 -1
- package/.next/static/chunks/{3vynnr71ghvom.js → 04imzjhvzw65d.js} +2 -2
- package/.next/static/chunks/{1pjygp7hqib6j.js → 0gljzv9fz1g7d.js} +1 -1
- package/.next/static/chunks/{2d4z3er53ng8r.js → 0h0lythv1ql93.js} +1 -1
- package/.next/static/chunks/{2o4dndk0d68do.js → 0hzbj7f48cmx0.js} +1 -1
- package/.next/static/chunks/{2ky81z-jgvasc.js → 0lwunwbl7u7pt.js} +1 -1
- package/.next/static/chunks/{0u9ae9k_2g7k3.js → 0r6nwxg4dv83t.js} +1 -1
- package/.next/static/chunks/0rn9nbg6aif9f.js +17 -0
- package/.next/static/chunks/{19ojn4lomsk0r.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/{3exjsi8pfdvzj.js → 11tlxkr7a_rpc.js} +1 -1
- package/.next/static/chunks/{0o980477kfqez.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/{0w20wnnfrscq7.js → 22h9gvclqtx_2.js} +1 -1
- 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/{22shnca_6zfzs.js → 304q9p54tcgm1.js} +1 -1
- package/.next/static/chunks/{1u5i-jti87jbo.js → 35wdx3wt7cg4a.js} +1 -1
- package/.next/static/chunks/{1p764d75_0lhv.js → 37unh9460im7v.js} +2 -2
- package/.next/static/chunks/{01xjer0i_e5z5.js → 39gj5vxz1zpm_.js} +1 -1
- package/.next/static/chunks/{35kwn237o4wdn.js → 39vrqy1r_00jc.js} +1 -1
- package/.next/static/chunks/{09120tms63y21.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/{1mwee7xvitlp9.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 +1 -1
- package/app/api/thursday/tool-call/route.ts +1 -15
- 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/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/signins/signins.query.ts +66 -1
- package/features/thursday/components/side-captions.tsx +31 -8
- 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 +12 -2
- package/guide/calls.md +7 -5
- 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 +3 -4
- package/seed-skills/analyst/data-report/SKILL.md +5 -4
- package/seed-skills/insta/instagram/SKILL.md +5 -2
- package/seed-skills/insta/instagram/references/post.md +2 -2
- package/seed-skills/insta/instagram/scripts/compose.mjs +5 -1
- package/seed-skills/insta/instagram/scripts/inbox.mjs +5 -1
- package/seed-skills/insta/instagram/scripts/lib.mjs +12 -70
- package/seed-skills/insta/instagram/scripts/media.mjs +1 -1
- package/seed-skills/insta/instagram/scripts/profile.mjs +6 -2
- package/seed-skills/insta/instagram/scripts/read.mjs +5 -1
- package/seed-skills/insta/instagram/scripts/search.mjs +6 -2
- package/seed-skills/insta/instagram/scripts/sheet.mjs +31 -88
- package/seed-skills/insta/instagram/templates/carousel.html +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/{seed-skills/insta/instagram → skills/browser}/scripts/render.mjs +1 -1
- package/skills/browser/scripts/session.mjs +105 -0
- package/skills/browser/scripts/sheet.mjs +97 -0
- package/{seed-skills/insta/instagram → skills/browser}/scripts/webimage.mjs +1 -1
- package/skills/interactive-page/SKILL.md +4 -3
- package/{seed-skills/analyst/data-report → skills/interactive-page}/scripts/chart.mjs +3 -3
- 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]__0cxqzfc._.js +0 -103
- package/.next/server/chunks/ssr/[root-of-the-server]__1-d2tgh._.js +0 -3
- package/.next/server/chunks/ssr/_070nv1_._.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/_19n08g5._.js +0 -3
- package/.next/static/chunks/03kgfyrli_0gz.js +0 -1
- package/.next/static/chunks/24dst4mgurbsh.js +0 -1
- package/.next/static/chunks/25zq8gzhbdsr7.js +0 -1
- package/.next/static/chunks/2qod5tqlpz8b7.js +0 -17
- package/.next/static/chunks/30skcjexa57zn.js +0 -101
- package/.next/static/chunks/3qq4o8w2rv_e9.css +0 -1
- package/lib/probe.server.ts +0 -17
- package/lib/probe.ts +0 -55
- package/seed-skills/mail/mail/SKILL.md +0 -37
- package/seed-skills/mail/mail/recipes/gmail.mjs +0 -448
- package/seed-skills/mail/mail/references/recipes.md +0 -55
- package/seed-skills/mail/mail/scripts/mail.mjs +0 -202
- /package/.next/static/{Ar5V4kMdL4CE1trx8anrH → En1vUPazxcYjPjnnahcN5}/_buildManifest.js +0 -0
- /package/.next/static/{Ar5V4kMdL4CE1trx8anrH → En1vUPazxcYjPjnnahcN5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{Ar5V4kMdL4CE1trx8anrH → En1vUPazxcYjPjnnahcN5}/_ssgManifest.js +0 -0
- /package/{seed-skills/insta/instagram → skills/browser}/scripts/image-size.mjs +0 -0
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Mail by script, in the browser session this shell already has (PLAYWRIGHT_CLI_SESSION).
|
|
3
|
-
// Each command is one `playwright-cli run-code` call: the site's recipe runs inside that
|
|
4
|
-
// browser, rides its signed-in cookies, and hands back only the fields asked for.
|
|
5
|
-
//
|
|
6
|
-
// node mail.mjs <site> list [query] [--max N] [--json]
|
|
7
|
-
// node mail.mjs <site> unread [label] [--json]
|
|
8
|
-
// node mail.mjs <site> read <id> <file> [--head N]
|
|
9
|
-
// node mail.mjs <site> draft --to <a,b> [--cc <a>] [--subject <s>] (--body <text> | --body-file <f>)
|
|
10
|
-
// node mail.mjs <site> reply <id> (--body <text> | --body-file <f>) [--all]
|
|
11
|
-
//
|
|
12
|
-
// <site> names a file in ../recipes (gmail). Nothing here sends, archives, deletes or labels.
|
|
13
|
-
import { spawnSync } from "node:child_process";
|
|
14
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
|
-
import { dirname, join, resolve } from "node:path";
|
|
16
|
-
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
17
|
-
|
|
18
|
-
const RECIPES = resolve(
|
|
19
|
-
dirname(fileURLToPath(import.meta.url)),
|
|
20
|
-
"..",
|
|
21
|
-
"recipes",
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
function fail(message) {
|
|
25
|
-
console.error(message);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function parse(argv) {
|
|
30
|
-
const positional = [];
|
|
31
|
-
const flags = {};
|
|
32
|
-
for (let i = 0; i < argv.length; i++) {
|
|
33
|
-
const arg = argv[i];
|
|
34
|
-
if (!arg.startsWith("--")) {
|
|
35
|
-
positional.push(arg);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
const [key, inline] = arg.slice(2).split(/=(.*)/s);
|
|
39
|
-
if (inline !== undefined) flags[key] = inline;
|
|
40
|
-
else if (argv[i + 1] !== undefined && !argv[i + 1].startsWith("--"))
|
|
41
|
-
flags[key] = argv[++i];
|
|
42
|
-
else flags[key] = true;
|
|
43
|
-
}
|
|
44
|
-
return { positional, flags };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Runs `step` from the recipe inside the browser. Every function in `recipe.steps` is
|
|
49
|
-
* serialized with it, so a step reaches the others as `r.steps.<name>`; nothing else from
|
|
50
|
-
* this file crosses over.
|
|
51
|
-
*/
|
|
52
|
-
function inBrowser(recipe, step, args) {
|
|
53
|
-
// A method (`async list(page) {}`) prints as one; an arrow or a function needs its key.
|
|
54
|
-
const method = /^(async\s+)?(?!function\b|async\b)[\w$]+\s*\(/;
|
|
55
|
-
const steps = Object.entries(recipe.steps)
|
|
56
|
-
.map(([name, fn]) =>
|
|
57
|
-
method.test(fn.toString())
|
|
58
|
-
? fn.toString()
|
|
59
|
-
: `${JSON.stringify(name)}: ${fn.toString()}`,
|
|
60
|
-
)
|
|
61
|
-
.join(",\n");
|
|
62
|
-
const data = JSON.stringify({ ...recipe, steps: undefined });
|
|
63
|
-
const code = `async page => {
|
|
64
|
-
const r = ${data};
|
|
65
|
-
r.steps = {${steps}};
|
|
66
|
-
return r.steps[${JSON.stringify(step)}](page, ${JSON.stringify(args)}, r);
|
|
67
|
-
}`;
|
|
68
|
-
const ran = spawnSync("playwright-cli", ["--raw", "run-code", code], {
|
|
69
|
-
encoding: "utf8",
|
|
70
|
-
maxBuffer: 256 * 1024 * 1024,
|
|
71
|
-
});
|
|
72
|
-
if (ran.error) fail(`playwright-cli did not run: ${ran.error.message}`);
|
|
73
|
-
const out = `${ran.stdout ?? ""}${ran.stderr ?? ""}`.trim();
|
|
74
|
-
if (ran.status !== 0) {
|
|
75
|
-
if (/is not open/.test(out))
|
|
76
|
-
fail(
|
|
77
|
-
"No browser is open in this session. Run `playwright-cli open`, load the sign-in, and run this again.",
|
|
78
|
-
);
|
|
79
|
-
fail(out.replace(/^### Error\s*/, "").replace(/^Error:\s*/, ""));
|
|
80
|
-
}
|
|
81
|
-
if (!out) return null;
|
|
82
|
-
try {
|
|
83
|
-
return JSON.parse(out);
|
|
84
|
-
} catch {
|
|
85
|
-
fail(`Unexpected answer from the browser:\n${out.slice(0, 800)}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const oneLine = (s, n) => {
|
|
90
|
-
const t = String(s ?? "")
|
|
91
|
-
.replace(/\s+/g, " ")
|
|
92
|
-
.trim();
|
|
93
|
-
return t.length > n ? `${t.slice(0, n - 1)}…` : t;
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
function printRows(rows, flags) {
|
|
97
|
-
if (flags.json) {
|
|
98
|
-
console.log(JSON.stringify(rows));
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
for (const m of rows) {
|
|
102
|
-
const from = m.email ? `${m.from} <${m.email}>` : m.from;
|
|
103
|
-
const count = m.count > 1 ? ` (${m.count})` : "";
|
|
104
|
-
const snippet = m.snippet ? ` — ${oneLine(m.snippet, 120)}` : "";
|
|
105
|
-
console.log(
|
|
106
|
-
`${m.id} ${m.unread ? "*" : " "} ${m.date} | ${oneLine(from, 60)} | ${oneLine(m.subject, 90)}${count}${snippet}`,
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function bodyOf(flags) {
|
|
112
|
-
if (typeof flags["body-file"] === "string")
|
|
113
|
-
return readFileSync(flags["body-file"], "utf8");
|
|
114
|
-
if (typeof flags.body === "string") return flags.body.replace(/\\n/g, "\n");
|
|
115
|
-
fail("Give the text with --body-file <file> (or --body for one short line).");
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
const [site, command, ...rest] = process.argv.slice(2);
|
|
119
|
-
if (!site || !command)
|
|
120
|
-
fail(
|
|
121
|
-
"Usage: mail.mjs <site> list|unread|read|draft|reply … — see the skill's SKILL.md.",
|
|
122
|
-
);
|
|
123
|
-
const recipeFile = join(RECIPES, `${site}.mjs`);
|
|
124
|
-
if (!existsSync(recipeFile))
|
|
125
|
-
fail(
|
|
126
|
-
`No recipe for ${site} in ${RECIPES}. references/recipes.md says how to write one.`,
|
|
127
|
-
);
|
|
128
|
-
const recipe = (await import(pathToFileURL(recipeFile).href)).default;
|
|
129
|
-
const { positional, flags } = parse(rest);
|
|
130
|
-
|
|
131
|
-
switch (command) {
|
|
132
|
-
case "list": {
|
|
133
|
-
const max = Number(flags.max ?? 20);
|
|
134
|
-
const query = positional.join(" ") || recipe.defaultQuery;
|
|
135
|
-
const found = inBrowser(recipe, "list", { query, max });
|
|
136
|
-
if (!flags.json)
|
|
137
|
-
console.log(
|
|
138
|
-
`${found.rows.length} shown of ${found.total ?? "?"} for: ${query} (* unread)`,
|
|
139
|
-
);
|
|
140
|
-
printRows(found.rows, flags);
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
case "unread": {
|
|
144
|
-
const found = inBrowser(recipe, "unread", { label: positional[0] ?? "" });
|
|
145
|
-
if (!flags.json)
|
|
146
|
-
console.log(
|
|
147
|
-
`${found.total} unread${positional[0] ? ` in ${positional[0]}` : ""}; the newest ${found.rows.length} below`,
|
|
148
|
-
);
|
|
149
|
-
printRows(found.rows, flags);
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
case "read": {
|
|
153
|
-
const [id, file] = positional;
|
|
154
|
-
if (!id || !file)
|
|
155
|
-
fail("Usage: mail.mjs <site> read <id> <file> [--head N]");
|
|
156
|
-
const thread = inBrowser(recipe, "read", { id });
|
|
157
|
-
const lines = [`Subject: ${thread.subject}`, ""];
|
|
158
|
-
for (const m of thread.messages) {
|
|
159
|
-
lines.push(`From: ${m.from}`, `Date: ${m.date}`);
|
|
160
|
-
if (m.to) lines.push(m.to);
|
|
161
|
-
lines.push("", m.body.trim(), "");
|
|
162
|
-
if (m.links.length)
|
|
163
|
-
lines.push("Links:", ...m.links.map((l) => ` ${l}`), "");
|
|
164
|
-
lines.push("-----", "");
|
|
165
|
-
}
|
|
166
|
-
const text = lines.join("\n");
|
|
167
|
-
mkdirSync(dirname(resolve(file)), { recursive: true });
|
|
168
|
-
writeFileSync(file, text);
|
|
169
|
-
const head = Number(flags.head ?? 12);
|
|
170
|
-
console.log(
|
|
171
|
-
`${file}: ${thread.messages.length} message(s), ${text.split("\n").length} lines, ${text.length} chars`,
|
|
172
|
-
);
|
|
173
|
-
console.log(text.split("\n").slice(0, head).join("\n"));
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
case "draft": {
|
|
177
|
-
if (typeof flags.to !== "string")
|
|
178
|
-
fail("draft needs --to <address>[,<address>]");
|
|
179
|
-
const saved = inBrowser(recipe, "draft", {
|
|
180
|
-
to: flags.to,
|
|
181
|
-
cc: typeof flags.cc === "string" ? flags.cc : "",
|
|
182
|
-
subject: typeof flags.subject === "string" ? flags.subject : "",
|
|
183
|
-
body: bodyOf(flags),
|
|
184
|
-
});
|
|
185
|
-
console.log(saved);
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
case "reply": {
|
|
189
|
-
const [id] = positional;
|
|
190
|
-
if (!id)
|
|
191
|
-
fail("Usage: mail.mjs <site> reply <id> --body-file <file> [--all]");
|
|
192
|
-
const saved = inBrowser(recipe, "reply", {
|
|
193
|
-
id,
|
|
194
|
-
all: flags.all === true,
|
|
195
|
-
body: bodyOf(flags),
|
|
196
|
-
});
|
|
197
|
-
console.log(saved);
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
default:
|
|
201
|
-
fail(`Unknown command ${command}: list, unread, read, draft or reply.`);
|
|
202
|
-
}
|
|
File without changes
|
/package/.next/static/{Ar5V4kMdL4CE1trx8anrH → En1vUPazxcYjPjnnahcN5}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|