@wrenautomation/birdwatch 0.31.1 → 0.32.1
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 +5 -2
- package/dist/app/engine-cli.js +19 -4
- package/dist/app/engine-cli.js.map +1 -1
- package/dist/engine/agent.d.ts +5 -0
- package/dist/engine/agent.js +9 -0
- package/dist/engine/agent.js.map +1 -1
- package/dist/engine/ports.d.ts +8 -1
- package/dist/engine/ports.js.map +1 -1
- package/dist/engine/steps.d.ts +3 -1
- package/dist/engine/steps.js +7 -4
- package/dist/engine/steps.js.map +1 -1
- package/dist/sources/index.d.ts +1 -0
- package/dist/sources/index.js +1 -0
- package/dist/sources/index.js.map +1 -1
- package/dist/sources/ladder.d.ts +3 -3
- package/dist/sources/ladder.js +3 -3
- package/dist/sources/ladder.js.map +1 -1
- package/dist/sources/linkedin.js +3 -4
- package/dist/sources/linkedin.js.map +1 -1
- package/dist/sources/youtube-api.d.ts +41 -0
- package/dist/sources/youtube-api.js +128 -0
- package/dist/sources/youtube-api.js.map +1 -0
- package/dist/sources/ytdlp.d.ts +24 -9
- package/dist/sources/ytdlp.js +87 -36
- package/dist/sources/ytdlp.js.map +1 -1
- package/package.json +3 -3
package/dist/sources/ytdlp.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* YouTube as a source. Hits: the Data API when there is a key (search, a channel's uploads,
|
|
3
|
+
* exact counts), else yt-dlp's listings. An open reads the captions with yt-dlp, no model (the
|
|
4
|
+
* API gives no captions for others' videos). `youtubeSee` reads what a video shows, only on the
|
|
5
|
+
* agent's ask. Other hosts' posts list through yt-dlp.
|
|
5
6
|
*/
|
|
6
|
-
import { flatPlaylist, pageInfo, readYoutube } from "@wrenautomation/read/video";
|
|
7
|
+
import { flatPlaylist, pageInfo, readYoutube, seeYoutube, } from "@wrenautomation/read/video";
|
|
7
8
|
import { youtubeId } from "../engine/canonical.js";
|
|
8
9
|
import { metricsOf } from "./metrics.js";
|
|
10
|
+
import { QuotaSpent } from "./youtube-api.js";
|
|
9
11
|
/** The model, with the sum of what its calls cost; undefined once a call came back unpriced. */
|
|
10
12
|
export function pricedOf(m) {
|
|
11
13
|
let sum = 0;
|
|
@@ -97,24 +99,24 @@ export function ytdlpSource(o) {
|
|
|
97
99
|
const list = o.list ?? flatPlaylist;
|
|
98
100
|
const read = o.read ?? readYoutube;
|
|
99
101
|
const info = o.info ?? pageInfo;
|
|
100
|
-
|
|
101
|
-
const videoModel = (make) => {
|
|
102
|
-
video ??= make();
|
|
103
|
-
return video;
|
|
104
|
-
};
|
|
102
|
+
const warn = o.warn ?? ((l) => console.error(l));
|
|
105
103
|
const pause = o.pause ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
let
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
104
|
+
const inLine = queue(pause);
|
|
105
|
+
// the day's quota spent: yt-dlp for the rest of this process
|
|
106
|
+
let api = o.api;
|
|
107
|
+
const viaApi = async (call) => {
|
|
108
|
+
if (!api)
|
|
109
|
+
return null;
|
|
110
|
+
try {
|
|
111
|
+
return await call(api);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (!(err instanceof QuotaSpent))
|
|
115
|
+
throw err;
|
|
116
|
+
warn(`${err.message}: yt-dlp lists YouTube from now on`);
|
|
117
|
+
api = undefined;
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
118
120
|
};
|
|
119
121
|
return {
|
|
120
122
|
name: "youtube",
|
|
@@ -123,12 +125,21 @@ export function ytdlpSource(o) {
|
|
|
123
125
|
// YouTube's own search knows no other site.
|
|
124
126
|
keeps: (site) => /(^|\.)(youtube\.com|youtu\.be)$/i.test(site),
|
|
125
127
|
async search(q) {
|
|
126
|
-
const
|
|
128
|
+
const n = o.n ?? 10;
|
|
129
|
+
const got = await viaApi((a) => a.search(q.terms, n));
|
|
130
|
+
if (got)
|
|
131
|
+
return got;
|
|
132
|
+
const entries = await list(o.ytDlp, `ytsearch${n}:${q.terms}`);
|
|
127
133
|
return entries.map((e) => entryHit(e)).filter((h) => h !== null);
|
|
128
134
|
},
|
|
129
135
|
follows: (as, url) => as === "posts" && postsOf(url) !== null,
|
|
130
136
|
async follow(_as, url, n) {
|
|
131
137
|
let at = postsOf(url);
|
|
138
|
+
if (at === "video" || at?.site === "youtube") {
|
|
139
|
+
const got = await viaApi((a) => a.uploads(url, n));
|
|
140
|
+
if (got)
|
|
141
|
+
return got;
|
|
142
|
+
}
|
|
132
143
|
if (at === "video") {
|
|
133
144
|
const v = await info(o.ytDlp, url);
|
|
134
145
|
const channel = [v.channel_url, v.uploader_url].find((x) => typeof x === "string");
|
|
@@ -148,20 +159,60 @@ export function ytdlpSource(o) {
|
|
|
148
159
|
.filter((h) => h !== null);
|
|
149
160
|
},
|
|
150
161
|
opens: isYoutube,
|
|
151
|
-
|
|
162
|
+
// captions only, free: what the screen shows is `youtubeSee`, on the agent's ask
|
|
163
|
+
open: (h) => inLine(async () => {
|
|
164
|
+
if (!isYoutube(h.url))
|
|
165
|
+
throw new Error(`youtube: not a YouTube page: ${h.url}`);
|
|
166
|
+
const doc = videoDocument(await read(h.url, { ytDlp: o.ytDlp }));
|
|
167
|
+
Object.defineProperty(doc, "usd", { value: 0, enumerable: false });
|
|
168
|
+
return doc;
|
|
169
|
+
}),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/** One call at a time, a gap between: the open step runs 4 at once. */
|
|
173
|
+
function queue(pause) {
|
|
174
|
+
let line = Promise.resolve();
|
|
175
|
+
let first = true;
|
|
176
|
+
return (fn) => {
|
|
177
|
+
const next = line.then(async () => {
|
|
178
|
+
if (!first)
|
|
179
|
+
await pause(OPEN_GAP_MS);
|
|
180
|
+
first = false;
|
|
181
|
+
return fn();
|
|
182
|
+
});
|
|
183
|
+
line = next.catch(() => undefined);
|
|
184
|
+
return next;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* What a YouTube video shows, on the agent's ask only (`open --see`): the video downloaded, every
|
|
189
|
+
* frame read by `eye` (Claude: its text and what it shows). A hit with no document gets its
|
|
190
|
+
* words too: the captions, else `ear` hears the audio. The eye's calls are priced; an ear's are
|
|
191
|
+
* not, so a heard read is unpriced.
|
|
192
|
+
*/
|
|
193
|
+
export function youtubeSee(o) {
|
|
194
|
+
const see = o.see ?? seeYoutube;
|
|
195
|
+
const inLine = queue(o.pause ?? ((ms) => new Promise((r) => setTimeout(r, ms))));
|
|
196
|
+
return {
|
|
197
|
+
name: "youtube-see",
|
|
198
|
+
kind: "open",
|
|
199
|
+
cost: "metered",
|
|
200
|
+
asked: true,
|
|
201
|
+
opens: isYoutube,
|
|
202
|
+
open: (h, opt) => inLine(async () => {
|
|
203
|
+
const priced = pricedOf(o.eye);
|
|
204
|
+
const r = await see(h.url, {
|
|
205
|
+
ytDlp: o.ytDlp,
|
|
206
|
+
eye: priced.model,
|
|
207
|
+
words: !opt?.read,
|
|
208
|
+
...(o.ear ? { ear: o.ear } : {}),
|
|
209
|
+
});
|
|
210
|
+
const doc = videoDocument(r);
|
|
211
|
+
const usd = r.heard ? undefined : priced.usd();
|
|
212
|
+
if (usd !== undefined)
|
|
213
|
+
Object.defineProperty(doc, "usd", { value: usd, enumerable: false });
|
|
214
|
+
return doc;
|
|
215
|
+
}),
|
|
152
216
|
};
|
|
153
|
-
async function openOne(h) {
|
|
154
|
-
if (!isYoutube(h.url))
|
|
155
|
-
throw new Error(`youtube: not a YouTube page: ${h.url}`);
|
|
156
|
-
const model = o.video ? await videoModel(o.video) : null;
|
|
157
|
-
const priced = model ? pricedOf(model) : null;
|
|
158
|
-
const doc = videoDocument(await read(h.url, { ytDlp: o.ytDlp, ...(priced ? { video: priced.model } : {}) }));
|
|
159
|
-
// captions: free; heard: the model's priced calls; an unpriced call leaves it unpriced
|
|
160
|
-
const usd = priced ? priced.usd() : 0;
|
|
161
|
-
// hidden: the spend reads it, the stored document never carries it
|
|
162
|
-
if (usd !== undefined)
|
|
163
|
-
Object.defineProperty(doc, "usd", { value: usd, enumerable: false });
|
|
164
|
-
return doc;
|
|
165
|
-
}
|
|
166
217
|
}
|
|
167
218
|
//# sourceMappingURL=ytdlp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ytdlp.js","sourceRoot":"","sources":["../../src/sources/ytdlp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ytdlp.js","sourceRoot":"","sources":["../../src/sources/ytdlp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrenautomation/birdwatch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.1",
|
|
4
4
|
"description": "Research from the open web, driven by an agent one step per command: plan, search, triage, open, extract behind a quote gate, check, review, every record in a ledger. The agent decides; the engine runs the fixed steps. The ask and plan files, the document side (Document, Finding, Proof, the claim extractor), the sources (SearXNG, Exa, Perplexity, Hacker News, Google, arXiv, YouTube, Reddit, LinkedIn, Facebook, the fetch ladder) and the ledger. One CLI, `birdwatch`, with the readers of @wrenautomation/read on it.",
|
|
5
5
|
"license": "PolyForm-Strict-1.0.0",
|
|
6
6
|
"repository": {
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"minisearch": "7.2.0",
|
|
55
55
|
"ulid": "3.0.2",
|
|
56
56
|
"zod": "4.6.5",
|
|
57
|
-
"@wrenautomation/models": "0.
|
|
58
|
-
"@wrenautomation/read": "0.
|
|
57
|
+
"@wrenautomation/models": "0.32.1",
|
|
58
|
+
"@wrenautomation/read": "0.32.1"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"typecheck": "tsc --noEmit",
|