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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-report
|
|
3
|
+
description: "Answers and reports built on real numbers: the form each kind of question wants (a brief, a comparison with a pick, a market size, a trend, a company snapshot, a price check, a buy-or-wait decision), scripts that fetch a published series into CSV with its source, and one that draws a CSV into a page as a cited chart."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Data report
|
|
7
|
+
|
|
8
|
+
## The form comes from the question
|
|
9
|
+
|
|
10
|
+
Pick one form and read only its file in `references/` before collecting anything: it says what to
|
|
11
|
+
collect, what the final text holds, and when a page earns its place.
|
|
12
|
+
|
|
13
|
+
| The question | Form |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Anything else with numbers in it | `brief.md` |
|
|
16
|
+
| Which of these (products, plans, places, companies)? | `comparison.md` |
|
|
17
|
+
| How big is this market, how much could we sell? | `market-size.md` |
|
|
18
|
+
| How has X moved, and why? | `trend.md` |
|
|
19
|
+
| How is this company doing, how were its results? | `company.md` |
|
|
20
|
+
| Where is it cheapest to buy X right now? | `price-check.md` |
|
|
21
|
+
| Should I buy / sign / switch — or wait? | `decision.md` |
|
|
22
|
+
|
|
23
|
+
Every form opens with the answer and its two or three numbers; a reader who stops after the first
|
|
24
|
+
lines has what they asked for. A title says the finding ("Rent rose faster than pay"), not the topic.
|
|
25
|
+
|
|
26
|
+
## Numbers by script, not by hand
|
|
27
|
+
|
|
28
|
+
The skill's scripts are in `scripts/` of this skill's folder. `node` runs them; nothing to install.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
S=<this skill's folder>/scripts
|
|
32
|
+
# A series into CSV, with its source written into the file. It prints the rows' shape and both ends.
|
|
33
|
+
node $S/fetch.mjs fred DGS10,MORTGAGE30US --from 2020 --out <scratch>/rates.csv
|
|
34
|
+
node $S/fetch.mjs yahoo 005930.KS,^KS11 --from 2025-01 --interval 1wk --label Samsung,KOSPI --out <scratch>/px.csv
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`references/sources.md` says which source holds what, the series ids worth knowing, and what the
|
|
38
|
+
scripts cannot reach. A CSV you build from a page or a file you were given takes the same shape: a
|
|
39
|
+
`# source: <url>` line (and `# fetched: YYYY-MM-DD`) above a header row.
|
|
40
|
+
|
|
41
|
+
## A page: the quick page, with charts drawn into it
|
|
42
|
+
|
|
43
|
+
When the form calls for a page, start it as a quick page from your Skills list (one styled HTML file
|
|
44
|
+
in your folder under `artifacts/`) and write its words by hand. It arrives styled: replace the title
|
|
45
|
+
and the lede line and write below them, and leave its `<head>` as it is. Never write chart SVG or a
|
|
46
|
+
data table by hand: leave an empty `<figure id="…"></figure>` where each chart goes, then fill every
|
|
47
|
+
one in one bash call. The chart script ships with the app:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
C="$THURSDAY_SKILLS/interactive-page/scripts/chart.mjs"
|
|
51
|
+
node $C "$THURSDAY_ARTIFACTS/<page>.html" rates <scratch>/rates.csv \
|
|
52
|
+
--title "Mortgage rates followed the 10-year down" --unit "%" --mark "2024-09=First Fed cut" --locale ko
|
|
53
|
+
node $C "$THURSDAY_ARTIFACTS/<page>.html" px <scratch>/px.csv --index --title "…"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Each figure carries its source link, the fetch date and the rows behind it with a CSV download, so
|
|
57
|
+
the page needs no separate data section. A line for dates, bars for categories (largest first,
|
|
58
|
+
`--highlight` the one that matters); `--index` when series in different units are compared;
|
|
59
|
+
`--mark` for each dated event the text explains. Run it again to replace a figure.
|
|
60
|
+
`node $C` with no arguments lists every option.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Brief
|
|
2
|
+
|
|
3
|
+
The default form: a question with numbers in it that no other form fits. Most answers end here,
|
|
4
|
+
as final text, with no page.
|
|
5
|
+
|
|
6
|
+
## Collect
|
|
7
|
+
|
|
8
|
+
The one to three figures that answer the question, each from the page or file that publishes it,
|
|
9
|
+
with that page's date. A figure you work out (a share, a change, a per-person cost) shows its
|
|
10
|
+
arithmetic in one line.
|
|
11
|
+
|
|
12
|
+
## Final text
|
|
13
|
+
|
|
14
|
+
1. The answer in one sentence, carrying its number.
|
|
15
|
+
2. Up to three lines, one reason each, each with its figure and source.
|
|
16
|
+
3. What is not solid: an estimate, a source older than the question, two sources that disagree
|
|
17
|
+
(give both).
|
|
18
|
+
|
|
19
|
+
A page is worth making only when the reasons need a chart or a table longer than five rows; then
|
|
20
|
+
the page is these same lines on top, the chart or table under them.
|
|
21
|
+
|
|
22
|
+
## Example (illustrative numbers)
|
|
23
|
+
|
|
24
|
+
> Q: How much has the price of a subway ride gone up in this city?
|
|
25
|
+
>
|
|
26
|
+
> Up 39% in ten years: ₩1,050 in 2015 to ₩1,450 now (city transit site, fares page, 2026).
|
|
27
|
+
> - The last rise was ₩1,250 → ₩1,400 in 2023, then ₩1,550 planned for next year was cut to
|
|
28
|
+
> ₩1,450 (city press release, 2025-06).
|
|
29
|
+
> - Consumer prices rose 24% over the same years (national statistics office CPI, 2015 = 100 → 124),
|
|
30
|
+
> so the fare grew faster than prices.
|
|
31
|
+
> - Not solid: the planned rise for next year is a proposal, not a decision.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Company snapshot
|
|
2
|
+
|
|
3
|
+
How a company is doing, or how its latest results went, in the terms investors and employees use.
|
|
4
|
+
|
|
5
|
+
## Collect
|
|
6
|
+
|
|
7
|
+
- The latest quarter and the same quarter a year earlier: revenue, operating income, net income,
|
|
8
|
+
margin; the full-year figures for context. From the company's own filing or results release —
|
|
9
|
+
a US filer through `fetch.mjs sec`, a Korean one from its DART filing or IR page.
|
|
10
|
+
- What management said it expects next (guidance), in their words, with the date.
|
|
11
|
+
- Consensus estimates, only from a page that shows them, with that page's name and date; the
|
|
12
|
+
beat or miss is actual against that.
|
|
13
|
+
- The share price reaction: `fetch.mjs yahoo`, the close before the release against the close
|
|
14
|
+
after, and against the market index over the same days.
|
|
15
|
+
- Valuation when asked: price ÷ earnings per share over the last four quarters, with both inputs.
|
|
16
|
+
|
|
17
|
+
## Final text
|
|
18
|
+
|
|
19
|
+
The headline in one sentence (grew or shrank, by how much, beat or missed), the one number
|
|
20
|
+
behind the reaction, and what to watch next quarter.
|
|
21
|
+
|
|
22
|
+
## Page
|
|
23
|
+
|
|
24
|
+
1. Title: the result as a finding. Lede: the headline and its cause.
|
|
25
|
+
2. A results table: this quarter, a year ago, change; estimates beside it when you have them.
|
|
26
|
+
3. Revenue and operating income by quarter, two years (`--quarterly`), as a line or bars.
|
|
27
|
+
4. The price around the release against the index (`--index`), marked at the release.
|
|
28
|
+
5. Three things to watch, each with the level that would matter.
|
|
29
|
+
|
|
30
|
+
## Example (illustrative numbers)
|
|
31
|
+
|
|
32
|
+
> **Northwind grew 18% but guided below what the market expected**
|
|
33
|
+
>
|
|
34
|
+
> | (₩ billion) | Q2 2026 | Q2 2025 | Change |
|
|
35
|
+
> |---|---|---|---|
|
|
36
|
+
> | Revenue | 1,240 | 1,051 | +18% |
|
|
37
|
+
> | Operating income | 161 | 147 | +10% |
|
|
38
|
+
> | Operating margin | 13.0% | 14.0% | −1.0 pt |
|
|
39
|
+
>
|
|
40
|
+
> Shares fell 6.2% the day after (index −0.4%): Q3 revenue guidance of ₩1,260–1,290 billion sat
|
|
41
|
+
> under the ₩1,330 billion consensus (brokerage summary on a finance portal, 2026-07-28).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Comparison with a pick
|
|
2
|
+
|
|
3
|
+
Options side by side — products, plans, cities, schools, companies — ending in one pick for what
|
|
4
|
+
the user said matters.
|
|
5
|
+
|
|
6
|
+
## Collect
|
|
7
|
+
|
|
8
|
+
- The options: the ones the user named, exactly those. Asked to choose them, three to five that a
|
|
9
|
+
person shopping today would really consider, and say why those.
|
|
10
|
+
- The criteria: what the user said matters first, then what decides this kind of choice (price
|
|
11
|
+
over the time it is owned, not only the sticker; the spec people regret skipping).
|
|
12
|
+
- Every cell from a page you opened, all on the same basis: the same period, the same definition,
|
|
13
|
+
one currency (say the exchange rate and its date). A cell you could not fill is "—" with the
|
|
14
|
+
reason in a note, never blank and never a guess.
|
|
15
|
+
|
|
16
|
+
## Final text
|
|
17
|
+
|
|
18
|
+
The pick and the one number that decides it, then the runner-up and when it wins instead
|
|
19
|
+
("Take B; if you fly more than twice a year, A pays for itself"). The page's path.
|
|
20
|
+
|
|
21
|
+
## Page
|
|
22
|
+
|
|
23
|
+
1. Title: the pick as a finding. Lede: the pick, its deciding number, and who should choose
|
|
24
|
+
otherwise.
|
|
25
|
+
2. The matrix: options as columns (or rows, when there are more than four), criteria as rows,
|
|
26
|
+
units in the row label, the best cell in each row marked, the pick's column marked. A photo
|
|
27
|
+
of each option when people choose it partly by how it looks.
|
|
28
|
+
3. One bar chart for the criterion that decides it (`--highlight` the pick).
|
|
29
|
+
4. Per option, two lines: what it is best at, what it gives up.
|
|
30
|
+
5. Sources and the date checked.
|
|
31
|
+
|
|
32
|
+
## Example (illustrative numbers)
|
|
33
|
+
|
|
34
|
+
> **Plan B costs the least for a family of four** — ₩118,000 a month against ₩131,000 and ₩146,000.
|
|
35
|
+
>
|
|
36
|
+
> | | Plan A | **Plan B** | Plan C |
|
|
37
|
+
> |---|---|---|---|
|
|
38
|
+
> | Monthly, 4 lines (₩) | 131,000 | **118,000** | 146,000 |
|
|
39
|
+
> | Data per line (GB) | 30 | 25 | **unlimited** |
|
|
40
|
+
> | Contract (months) | 24 | **none** | 24 |
|
|
41
|
+
>
|
|
42
|
+
> Plan C wins only if two or more of you use more than 25 GB most months.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Buy, sign, switch — or wait
|
|
2
|
+
|
|
3
|
+
A yes or no the user has to make, answered with the numbers it turns on.
|
|
4
|
+
|
|
5
|
+
## Collect
|
|
6
|
+
|
|
7
|
+
- The full cost of each path over the time it runs: price, running costs, what is lost by
|
|
8
|
+
leaving (a penalty, a resale value), what the money would earn otherwise.
|
|
9
|
+
- The break-even: the point (months, uses, a price, a rate) where the answer flips.
|
|
10
|
+
- What is known about the future that bears on it, from a source: a model launch date, a
|
|
11
|
+
scheduled rate decision, a seasonal sale, a published price increase.
|
|
12
|
+
|
|
13
|
+
## Final text
|
|
14
|
+
|
|
15
|
+
The verdict first — **Yes**, **No**, or **Wait until <when or what>** — with the number that
|
|
16
|
+
decides it, then the condition that would flip it. No verdict without a number under it.
|
|
17
|
+
|
|
18
|
+
## Page
|
|
19
|
+
|
|
20
|
+
Only when the costs need a table: each path's costs over time, the break-even as a line chart
|
|
21
|
+
(both paths' cumulative cost, crossing at the break-even), then what would change the verdict.
|
|
22
|
+
|
|
23
|
+
## Example (illustrative numbers)
|
|
24
|
+
|
|
25
|
+
> **Wait until November.** The current model costs ₩1,390,000; its successor is announced for
|
|
26
|
+
> 10-28 (maker's event page), and the current model dropped 18% within six weeks of the last
|
|
27
|
+
> launch (comparison site's price history, 2025). Buy now only if you need it before November:
|
|
28
|
+
> waiting is worth about ₩250,000.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Market size
|
|
2
|
+
|
|
3
|
+
How big a market is and how much of it is reachable: TAM, SAM, SOM, each with its arithmetic in
|
|
4
|
+
the open, so a reader can change one input and see the rest move.
|
|
5
|
+
|
|
6
|
+
## Collect
|
|
7
|
+
|
|
8
|
+
- A published total, when one exists: who measured it, for which year, what it counts (sales or
|
|
9
|
+
spending, which countries, which products). Two publishers usually disagree; take both.
|
|
10
|
+
- Bottom-up inputs, each with its source: how many buyers (a census, a registry, a company's
|
|
11
|
+
own count), what share of them buy, how often, at what price.
|
|
12
|
+
- Growth: the series itself (`fetch.mjs`), or the publisher's rate with its years.
|
|
13
|
+
|
|
14
|
+
## The arithmetic
|
|
15
|
+
|
|
16
|
+
Build it both ways and show both:
|
|
17
|
+
|
|
18
|
+
- **Top-down**: published total × the share that fits the question (region, segment) = SAM.
|
|
19
|
+
- **Bottom-up**: buyers × share who buy × purchases a year × price = SAM.
|
|
20
|
+
|
|
21
|
+
Each is a table of drivers, one row each: the value, its unit, its source. The result is a range
|
|
22
|
+
(low and high inputs), never one point. When the two ways differ by more than about 2×, say which
|
|
23
|
+
input is most likely wrong. SOM is SAM × a share you state and justify (what the leader holds,
|
|
24
|
+
what a new entrant took in its first years), never a share picked to look good.
|
|
25
|
+
|
|
26
|
+
## Final text
|
|
27
|
+
|
|
28
|
+
SAM as a range in one currency and year, the SOM that follows from the share you assumed, and the
|
|
29
|
+
input the answer depends on most.
|
|
30
|
+
|
|
31
|
+
## Page
|
|
32
|
+
|
|
33
|
+
Title: the size as a finding. Then the two driver tables, a bar chart of TAM / SAM / SOM, the
|
|
34
|
+
growth series as a line when there is one, and the assumptions the user may want to change.
|
|
35
|
+
|
|
36
|
+
## Example (illustrative numbers)
|
|
37
|
+
|
|
38
|
+
> **Home coffee subscriptions here: ₩180–260 billion a year (2025)**
|
|
39
|
+
>
|
|
40
|
+
> | Bottom-up driver | Value | Source |
|
|
41
|
+
> |---|---|---|
|
|
42
|
+
> | Households | 22.3 M | Statistics office, 2025 |
|
|
43
|
+
> | Buy beans online at least monthly | 4–6% | Industry survey, 2024 (n = 3,000) |
|
|
44
|
+
> | Orders a year | 10 | same survey |
|
|
45
|
+
> | Average order | ₩19,000 | median of 12 shops' listings, checked 2026-09 |
|
|
46
|
+
> | **SAM** | **₩170–255 billion** | 22.3 M × 4–6% × 10 × ₩19,000 |
|
|
47
|
+
>
|
|
48
|
+
> Top-down: ₩1.9 trillion coffee retail (market report, 2025) × 12% online bean share = ₩228 billion.
|
|
49
|
+
> SOM at 2% of SAM (what the third-largest shop holds): ₩3.4–5.1 billion.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Price check
|
|
2
|
+
|
|
3
|
+
Where one exact thing is cheapest to buy right now, and whether now is a good time.
|
|
4
|
+
|
|
5
|
+
## Collect
|
|
6
|
+
|
|
7
|
+
- The exact item: model number, size, color, condition (new, refurbished, used). Two listings of
|
|
8
|
+
"the same" thing often differ here; a cheaper one that is not the same item is left out or
|
|
9
|
+
said to differ.
|
|
10
|
+
- From each seller: the price the user pays at the door — item, shipping, tax or duty, any fee —
|
|
11
|
+
delivery date, return terms, and the listing's link. Open each listing; a search result's price
|
|
12
|
+
is often stale.
|
|
13
|
+
- Price history when a price tracker or comparison site shows it: the lowest and usual price over
|
|
14
|
+
months, so "cheapest now" can be told from "cheap".
|
|
15
|
+
- Imports: duty and tax at the user's border, and the exchange rate with its date.
|
|
16
|
+
|
|
17
|
+
## Final text
|
|
18
|
+
|
|
19
|
+
Where to buy and the total paid, how much it saves against the next best, and whether the price
|
|
20
|
+
is low, usual or high against its recent history. The time you checked.
|
|
21
|
+
|
|
22
|
+
## Page
|
|
23
|
+
|
|
24
|
+
Only when there are more than about five sellers or the history matters: a table sorted by total
|
|
25
|
+
paid (the pick marked), a bar chart of totals (`--highlight` the pick), the history as a line when
|
|
26
|
+
there is one.
|
|
27
|
+
|
|
28
|
+
## Example (illustrative numbers)
|
|
29
|
+
|
|
30
|
+
> Cheapest now: Shop B, ₩389,000 delivered by Friday — ₩24,000 under the next best (Shop A,
|
|
31
|
+
> ₩413,000 with ₩3,000 shipping). The lowest in the last six months was ₩372,000 (a comparison
|
|
32
|
+
> site's history, 2026-05); ₩389,000 is near the low end of its usual ₩385,000–420,000.
|
|
33
|
+
> Checked 2026-09-19 14:10.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Where the numbers are
|
|
2
|
+
|
|
3
|
+
Take a figure from whoever publishes it, not from an article quoting it. When two sources
|
|
4
|
+
disagree, the order of trust is: a filing or an official statistic; the company's own release or
|
|
5
|
+
call; an industry body's report; a research firm's estimate; news.
|
|
6
|
+
|
|
7
|
+
## What `fetch.mjs` reaches (no key)
|
|
8
|
+
|
|
9
|
+
| Source | For | Command |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| FRED | US economy, rates, markets; many OECD and BIS series for other countries | `fred <ID,…>` |
|
|
12
|
+
| World Bank | Every country, yearly: GDP, population, inflation, trade | `worldbank <ISO2,…> <INDICATOR>` |
|
|
13
|
+
| Yahoo Finance | Stocks, ETFs, indices, crypto, futures; any exchange | `yahoo <TICKER,…> [--interval 1d\|1wk\|1mo]` |
|
|
14
|
+
| ECB reference rates | Exchange rates, about 30 currencies, since 1999 | `fx <BASE> <QUOTE,…>` |
|
|
15
|
+
| SEC XBRL | US-listed companies' reported figures, yearly or quarterly | `sec <TICKER> --find <word>`, then `sec <TICKER> <CONCEPT,…>` |
|
|
16
|
+
| Wikipedia pageviews | Public interest in a topic, monthly (a stand-in for search trends) | `pageviews <ARTICLE,…> [--wiki ko]` |
|
|
17
|
+
|
|
18
|
+
Ids worth knowing, all checked to be current:
|
|
19
|
+
|
|
20
|
+
- FRED, US: `CPIAUCSL` consumer prices, `UNRATE` unemployment, `FEDFUNDS` policy rate, `DGS10`
|
|
21
|
+
10-year Treasury, `MORTGAGE30US` 30-year mortgage, `SP500`, `NASDAQCOM`, `DCOILWTICO` oil.
|
|
22
|
+
- FRED, Korea: `IRSTCI01KRM156N` overnight rate, `IRLTLT01KRM156N` 10-year bond,
|
|
23
|
+
`LRHUTTTTKRM156S` unemployment, `DEXKOUS` won per dollar (daily), `QSKR628BIS` house prices.
|
|
24
|
+
Korea's monthly consumer prices are no longer on FRED; the yearly rate is World Bank
|
|
25
|
+
`FP.CPI.TOTL.ZG`, the monthly index is on the Bank of Korea and KOSIS sites.
|
|
26
|
+
- World Bank: `NY.GDP.MKTP.CD` GDP in dollars, `NY.GDP.MKTP.KD.ZG` real growth, `NY.GDP.PCAP.CD`
|
|
27
|
+
GDP per person, `SP.POP.TOTL` population, `FP.CPI.TOTL.ZG` inflation.
|
|
28
|
+
- Yahoo tickers: Korean listings end in `.KS` (KOSPI) or `.KQ` (KOSDAQ), Tokyo `.T`, Hong Kong
|
|
29
|
+
`.HK`; indices start with `^` (`^GSPC`, `^IXIC`, `^KS11`, `^N225`); `BTC-USD`; `KRW=X` is won per
|
|
30
|
+
dollar.
|
|
31
|
+
- SEC concepts: revenue is `Revenues` for some companies and
|
|
32
|
+
`RevenueFromContractWithCustomerExcludingAssessedTax` for others, and a company can switch —
|
|
33
|
+
`--find` shows which one it uses now. Others: `OperatingIncomeLoss`, `NetIncomeLoss`,
|
|
34
|
+
`EarningsPerShareDiluted`, `Assets`, `StockholdersEquity`. A fourth quarter is not filed on its
|
|
35
|
+
own; the script works it out as the year less three quarters and says so in the file.
|
|
36
|
+
|
|
37
|
+
## What it does not reach
|
|
38
|
+
|
|
39
|
+
- **Korean official statistics** — the Bank of Korea (ECOS) and KOSIS APIs, and company filings
|
|
40
|
+
through OpenDART, need a free key the user signs up for. Without one, read the table on the
|
|
41
|
+
site (ecos.bok.or.kr, kosis.kr, dart.fss.or.kr) and write the rows into a CSV with a `# source:`
|
|
42
|
+
line.
|
|
43
|
+
- **Prices in shops, rents, listings** — pages, not APIs: open them in the browser, one listing at
|
|
44
|
+
a time, and record each with its link and the time you saw it.
|
|
45
|
+
- **Search trends** — Google Trends has no open API; Wikipedia pageviews or a site's own published
|
|
46
|
+
counts stand in, and say that they do.
|
|
47
|
+
- **Market-size totals** — research firms publish the headline figure in a press release and sell
|
|
48
|
+
the rest. Take the headline with its year and what it counts; never the paywalled detail
|
|
49
|
+
quoted secondhand.
|
|
50
|
+
|
|
51
|
+
A source that does not answer twice in a row is down, not empty: say so and use another.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Trend
|
|
2
|
+
|
|
3
|
+
How something moved and what moved it: the series itself, from its source, with the events
|
|
4
|
+
that explain its turns marked on it.
|
|
5
|
+
|
|
6
|
+
## Collect
|
|
7
|
+
|
|
8
|
+
- The series from the publisher (`fetch.mjs`, or a table on its site), over a window at least
|
|
9
|
+
three times as long as the period asked about, so "recently" can be seen against normal.
|
|
10
|
+
- A comparison series when it tells the story: the same measure elsewhere, the thing it is
|
|
11
|
+
usually compared with (rent against pay, a stock against its index). Different units:
|
|
12
|
+
`--index`.
|
|
13
|
+
- For each turn the text explains, a dated event from a source: a rate decision, a policy, a
|
|
14
|
+
launch, a shock. A turn with no sourced cause is said to be unexplained.
|
|
15
|
+
|
|
16
|
+
## Final text
|
|
17
|
+
|
|
18
|
+
The level now and its date; the change over the period asked about, as a number and a percent;
|
|
19
|
+
the one or two things that moved it. Missing or revised points are said.
|
|
20
|
+
|
|
21
|
+
## Page
|
|
22
|
+
|
|
23
|
+
1. Title: the movement as a finding. Lede: level now, change, main cause.
|
|
24
|
+
2. The line chart, with a `--mark` for each event the text names.
|
|
25
|
+
3. A small table: now, one year ago, three or five years ago, the high and low with dates.
|
|
26
|
+
4. What moved it, one short paragraph per mark, each with its source.
|
|
27
|
+
5. What to watch: the next release date, and the level that would change the story.
|
|
28
|
+
|
|
29
|
+
## Example (illustrative numbers)
|
|
30
|
+
|
|
31
|
+
> **Mortgage rates fell a full point in a year, following the 10-year bond**
|
|
32
|
+
>
|
|
33
|
+
> The 30-year rate is 6.1% (2026-09-17), down from 7.1% a year earlier; the 10-year Treasury
|
|
34
|
+
> fell from 4.6% to 3.9% over the same weeks.
|
|
35
|
+
>
|
|
36
|
+
> [chart: both lines since 2020, marks at the first rate cut and the jobs report that followed]
|
|
37
|
+
>
|
|
38
|
+
> Watch: the next inflation release on 10-14; a monthly core reading above 0.3% has pushed the
|
|
39
|
+
> 10-year up each time this year.
|