@koda-sl/baker-cli 0.410.0 → 0.412.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/README.md CHANGED
@@ -1873,6 +1873,37 @@ baker research fetch "https://competitor.com" --format html --whole-page
1873
1873
  - Each URL is cached server-side for 24 hours, so a follow-up `--full` call costs no extra credit.
1874
1874
  - Failures carry `error.fix` with `action: "continue_without"` for pages that will not open — finish the rest of the job and report the gap rather than retrying.
1875
1875
 
1876
+
1877
+ A Reddit thread link is not sent to Firecrawl (which refuses Reddit): it is read by the Reddit reader below and returned as the thread written out as a page, with `"provider": "reddit"`. Any other Reddit page is refused with a pointer to `baker research reddit`.
1878
+
1879
+ ---
1880
+
1881
+ ### `baker research reddit subreddits` / `search` / `thread`
1882
+
1883
+ Read Reddit verbatim. Reddit refuses ordinary web reads, Firecrawl, and datacenter addresses, so these commands read it through a ladder of sources — Reddit's own API (when the backend holds `REDDIT_CLIENT_ID` / `REDDIT_CLIENT_SECRET`), the Arctic Shift public archive, then Reddit's public JSON through the proxy tiers — and report which one answered.
1884
+
1885
+ ```bash
1886
+ baker research reddit subreddits "amazon flex uk"
1887
+ baker research reddit search "agency never paid" --subreddit couriersofreddit,AmazonFlexUK --kind comments
1888
+ baker research reddit search "visa" --subreddit UberEATS --kind comments --since 2025-01-01 --limit 10
1889
+ baker research reddit thread "https://www.reddit.com/r/AmazonFlexUK/comments/1abc2de/agency_still_hasnt_paid_me/"
1890
+ baker research reddit thread "https://www.reddit.com/r/running/s/3TzXiyxaMD" --comments 100
1891
+ ```
1892
+
1893
+ | Flag | Description |
1894
+ |------|-------------|
1895
+ | `--subreddit` | Subreddits (up to 10), comma-separated or the flag repeated. Required for `--kind comments`, and for any search when the Reddit API is not configured |
1896
+ | `--kind` | `posts` (default) or `comments` |
1897
+ | `--since` | Only things written on or after `YYYY-MM-DD`; results then come newest first instead of best match first |
1898
+ | `--limit` | Search results, 1-50 (default 25) |
1899
+ | `--limit` (subreddits) | Subreddits to return, 1-25 (default 10) |
1900
+ | `--comments` | Thread comments, 0-200 (default 40), best conversations first |
1901
+ | `--full` | Whole texts instead of 1,500-character previews |
1902
+
1903
+ `subreddits` returns `name`, `subscribers` (size, not activity), `access` (`public` / `restricted` / `private`) and `description` — use it instead of guessing subreddit names. Cached 24h.
1904
+
1905
+ Every search or thread item carries verbatim `text`, `author`, `score`, `created` and a `permalink` built from the ids the source returned. `thread` refuses a link whose post lives in a different subreddit than the link names (`NOT_FOUND`, `fix.action: "reject"`) — the shape of a link invented by a summary. `source` is `reddit_api`, `reddit_web` or `archive`; archive points on posts under ~36h old are as first captured. A link to one comment opens the thread at that comment; a post on a user's profile (`/user/<name>/comments/<id>`) reads like any other thread. Cached 6h; an empty search is not cached.
1906
+
1876
1907
  ---
1877
1908
 
1878
1909
  ### `baker research advertisers "keyword"`
@@ -2948,6 +2979,8 @@ baker videos search "product demo"
2948
2979
  baker videos search "tutorial" --tags explainer,ugc --limit 5
2949
2980
  ```
2950
2981
 
2982
+ Each hit carries `format` (e.g. `testimonial`, `trend-skit`), `tone` (`sincere` … `parody`) and `productClaims`: what the clip says about the offer. Hints name any parody result, and any clip catalogued before these fields existed.
2983
+
2951
2984
  ### `baker videos get <id>`
2952
2985
 
2953
2986
  Get a single video by ID. `--full` includes the auto-generated **transcript** (Baker transcribes every upload with speech-to-text), a `transcript_segment_count`, and the titled/timestamped **scene breakdown** — so you can read what a clip says and shows without watching it. Default JSON also returns the raw `transcript` + timed `transcriptSegments`; `--full` is what surfaces them in `--output md`/`files` too.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  debugLogHttp,
3
3
  readBodyForLog
4
- } from "./chunk-ISJOVAJP.js";
4
+ } from "./chunk-EXFQDO6T.js";
5
5
  import {
6
6
  API_KEY_FORMAT_MESSAGE,
7
7
  DIRECT_ROUTE,
@@ -18,7 +18,7 @@ import {
18
18
  refuseNonPublicUrl,
19
19
  requireConnection,
20
20
  shouldEscalate
21
- } from "./chunk-ISCXDKWB.js";
21
+ } from "./chunk-ASON7WRD.js";
22
22
 
23
23
  // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
24
24
  var require_safe_stable_stringify = __commonJS({
@@ -11630,4 +11630,4 @@ export {
11630
11630
  defaultRegistry,
11631
11631
  createEngineFromEnv
11632
11632
  };
11633
- //# sourceMappingURL=chunk-KTMFHBN6.js.map
11633
+ //# sourceMappingURL=chunk-4Q7EDLEC.js.map
@@ -823,6 +823,13 @@ function imageNormalizer(record, full) {
823
823
  }
824
824
  return compactImage(record);
825
825
  }
826
+ function sellingFacts(analysis) {
827
+ return {
828
+ format: typeof analysis.format === "string" ? analysis.format : null,
829
+ tone: typeof analysis.tone === "string" ? analysis.tone : null,
830
+ productClaims: Array.isArray(analysis.productClaims) ? analysis.productClaims : null
831
+ };
832
+ }
826
833
  function compactVideo(video) {
827
834
  const analysis = asRecord(video.analysis);
828
835
  const sceneCount = typeof video.sceneCount === "number" ? video.sceneCount : Array.isArray(video.scenes) ? video.scenes.length : 0;
@@ -841,6 +848,7 @@ function compactVideo(video) {
841
848
  people: peopleLines(analysis.people),
842
849
  spokenLanguages: Array.isArray(analysis.spokenLanguages) ? analysis.spokenLanguages : [],
843
850
  hook: typeof analysis.hook === "string" ? analysis.hook : null,
851
+ ...sellingFacts(analysis),
844
852
  sceneCount,
845
853
  group: groupSummary(video)
846
854
  };
@@ -1356,4 +1364,4 @@ export {
1356
1364
  captureVimeoCookie,
1357
1365
  childEnvWith
1358
1366
  };
1359
- //# sourceMappingURL=chunk-ISCXDKWB.js.map
1367
+ //# sourceMappingURL=chunk-ASON7WRD.js.map