@askalf/deepdive 0.6.0 → 0.8.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.
Files changed (55) hide show
  1. package/README.md +78 -0
  2. package/dist/agent.d.ts +9 -1
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +109 -11
  5. package/dist/agent.js.map +1 -1
  6. package/dist/browser.d.ts +4 -0
  7. package/dist/browser.d.ts.map +1 -1
  8. package/dist/browser.js +54 -0
  9. package/dist/browser.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +48 -1
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.d.ts +10 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +23 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/doctor.d.ts.map +1 -1
  18. package/dist/doctor.js +41 -1
  19. package/dist/doctor.js.map +1 -1
  20. package/dist/domain-filter.d.ts +10 -0
  21. package/dist/domain-filter.d.ts.map +1 -0
  22. package/dist/domain-filter.js +71 -0
  23. package/dist/domain-filter.js.map +1 -0
  24. package/dist/index.d.ts +5 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +5 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/llm-format.d.ts +81 -0
  29. package/dist/llm-format.d.ts.map +1 -0
  30. package/dist/llm-format.js +129 -0
  31. package/dist/llm-format.js.map +1 -0
  32. package/dist/llm-stream.d.ts.map +1 -1
  33. package/dist/llm-stream.js +19 -9
  34. package/dist/llm-stream.js.map +1 -1
  35. package/dist/llm.d.ts +2 -0
  36. package/dist/llm.d.ts.map +1 -1
  37. package/dist/llm.js +11 -8
  38. package/dist/llm.js.map +1 -1
  39. package/dist/local.d.ts +16 -0
  40. package/dist/local.d.ts.map +1 -0
  41. package/dist/local.js +160 -0
  42. package/dist/local.js.map +1 -0
  43. package/dist/pdf.d.ts +28 -0
  44. package/dist/pdf.d.ts.map +1 -0
  45. package/dist/pdf.js +195 -0
  46. package/dist/pdf.js.map +1 -0
  47. package/dist/plan.d.ts +5 -1
  48. package/dist/plan.d.ts.map +1 -1
  49. package/dist/plan.js +14 -1
  50. package/dist/plan.js.map +1 -1
  51. package/dist/pricing.d.ts +3 -0
  52. package/dist/pricing.d.ts.map +1 -1
  53. package/dist/pricing.js +20 -0
  54. package/dist/pricing.js.map +1 -1
  55. package/package.json +2 -1
package/README.md CHANGED
@@ -128,10 +128,39 @@ For each sentence with a citation, the verifier tokenizes the claim into content
128
128
 
129
129
  When something fails, deepdive prints a small `## Citation health` footer at the end of the answer and surfaces the offending sentences in `--verbose`. Clean runs stay clean: no footer, no noise. Use `--strict-cites` in scripts to fail the run with a non-zero exit code.
130
130
 
131
+ In `--deep` mode the verifier runs once per round, not just at the end: when intermediate rounds produce sentences with weak citations, those sentences are forwarded to the critic as top-priority gaps to fill in the next round of search. The critic and verifier close the loop — instead of "find more sources, hope they help," the next round explicitly hunts for authoritative support for the exact sentences that lack it.
132
+
131
133
  What this is not: a semantic judge. Lexical recall flags hallucinated names, numbers, and dates with high precision, but a paraphrased-but-truthful sentence can score below threshold and a topic-aligned-but-incorrect sentence can score above. Treat the report as a sanity check and a reading guide, not a proof of correctness. To dial the strictness, raise `--cite-min-recall` above the default `0.4`; to disable entirely, pass `--no-verify-cites`.
132
134
 
133
135
  ---
134
136
 
137
+ ## PDFs and local files
138
+
139
+ Two long-standing gaps closed in v0.7: real research questions hit PDFs constantly (academic papers, RFCs, standards docs), and the most useful sources are often already on your laptop (project notes, internal docs, exported chats). deepdive now reads both.
140
+
141
+ **PDFs** are detected by URL extension or `Content-Type` and routed through a separate extractor instead of the headless browser's DOM (Chromium's PDF viewer doesn't expose useful text). Page cap defaults to 50 (`--pdf-max-pages=<n>`); large papers are truncated rather than blowing the synth context.
142
+
143
+ PDF extraction uses [`pdfjs-dist`](https://github.com/mozilla/pdfjs-dist) — Mozilla's reference PDF.js library. To preserve deepdive's "one runtime dependency" guarantee on default installs, `pdfjs-dist` is **not** a runtime dep. The extractor is dynamically imported the first time a PDF is seen; if the library isn't installed, the source is skipped with a clear `pdf-no-extractor` event. Enable with one command:
144
+
145
+ ```bash
146
+ npm install -g pdfjs-dist
147
+ ```
148
+
149
+ `deepdive doctor` reports the install state under the `pdf` category.
150
+
151
+ **Local files** are ingested via `--include=<path>[,<path>]`. Each path may be a file or a directory (one level deep, supported extensions only). Files become pre-fetched sources at the head of the kept-sources list — they get the lowest `[N]` citation IDs, so they're most prominent to the synthesizer. Supported types: `.pdf` (needs `pdfjs-dist`), `.md`, `.txt`, `.html`.
152
+
153
+ ```bash
154
+ # Mix your project notes with web research:
155
+ deepdive "what's our policy on retroactive billing?" \
156
+ --include=~/notes/billing,./CONTRIBUTING.md \
157
+ --search=brave --deep
158
+ ```
159
+
160
+ This is the kind of thing hosted research tools cannot do — your notes don't leave your machine, and the resulting answer cites them as `file:///abs/path` URLs the user can click open.
161
+
162
+ ---
163
+
135
164
  ## Cost telemetry
136
165
 
137
166
  Every run prints a one-line summary on stderr at the end:
@@ -147,6 +176,50 @@ The "$0 on Claude Max via dario" hint only appears when `--base-url` matches dar
147
176
 
148
177
  ---
149
178
 
179
+ ## OpenAI-compatible endpoints
180
+
181
+ deepdive's wire format is Anthropic Messages by default — that's what dario speaks natively, and it's the format every Claude provider exposes. But the same pipeline works against any OpenAI Chat Completions endpoint via a built-in request/response adapter. Auto-detected from `--base-url`:
182
+
183
+ | URL pattern | Detected as |
184
+ |---|---|
185
+ | `api.openai.com/...` | `openai` |
186
+ | `localhost:11434` (Ollama default) | `openai` |
187
+ | `localhost:8000` (vLLM convention) | `openai` |
188
+ | anything else | `anthropic` |
189
+
190
+ Override with `--api-format=anthropic|openai` or `DEEPDIVE_API_FORMAT`. The adapter translates request shape, headers (Bearer for OpenAI, `x-api-key` + `anthropic-version` for Anthropic), the streaming SSE event format (`choices[].delta.content` ↔ `content_block_delta`), and the `usage` field (`prompt_tokens` / `completion_tokens` ↔ `input_tokens` / `output_tokens`).
191
+
192
+ ```bash
193
+ # Run against an Ollama-served local model:
194
+ deepdive "explain how X works" --base-url=http://localhost:11434 --model=llama3.1
195
+
196
+ # Run against OpenAI directly (auto-detected):
197
+ OPENAI_API_KEY=sk-... deepdive "..." \
198
+ --base-url=https://api.openai.com --api-key=$OPENAI_API_KEY --model=gpt-4o
199
+ ```
200
+
201
+ Cost telemetry still works for OpenAI-shape endpoints — you'll need to plug in the pricing yourself via `DEEPDIVE_PRICE_INPUT_PER_MTOK` / `DEEPDIVE_PRICE_OUTPUT_PER_MTOK` since the built-in price table only covers the Claude models.
202
+
203
+ ---
204
+
205
+ ## Domain allow / deny lists
206
+
207
+ When the planner picks URLs, you sometimes want to force-pin to authoritative sources or drop noisy ones. Two flags, hostname-suffix matching:
208
+
209
+ ```bash
210
+ # Drop low-signal sources:
211
+ deepdive "what's the difference between X and Y" \
212
+ --deny-domain=pinterest.com,quora.com,reddit.com
213
+
214
+ # Pin to authoritative sources for a sensitive question:
215
+ deepdive "what does Anthropic's TOS say about Y" \
216
+ --allow-domain=anthropic.com,docs.anthropic.com
217
+ ```
218
+
219
+ Patterns match exactly OR as a strict subdomain (`github.com` matches `github.com` and `api.github.com`, but not `githubcompany.com`). Filtered URLs surface as `fetch.skipped` events with reason `domain-deny` or `domain-not-allowed` in `--verbose`. Both flags can be combined: a URL must pass the allow list AND not match the deny list. Env equivalents: `DEEPDIVE_ALLOW_DOMAIN`, `DEEPDIVE_DENY_DOMAIN`.
220
+
221
+ ---
222
+
150
223
  ## Common flags
151
224
 
152
225
  Run `deepdive --help` for the full list. The ones you'll reach for:
@@ -162,6 +235,11 @@ Run `deepdive --help` for the full list. The ones you'll reach for:
162
235
  | `--cite-min-recall=<0..1>` | `0.4` | Citation-support threshold. Lower = more permissive. |
163
236
  | `--no-verify-cites` | off | Skip the citation-verification pass entirely. |
164
237
  | `--no-cost` | off | Suppress the end-of-run cost summary on stderr. |
238
+ | `--include=<paths>` | — | Comma-separated local files / dirs to ingest as sources (`.pdf`, `.md`, `.txt`, `.html`). |
239
+ | `--pdf-max-pages=<n>` | `50` | Per-PDF page cap. Larger PDFs are truncated. |
240
+ | `--allow-domain=<list>` | — | Comma-separated hostname suffixes — keep only matching URLs. |
241
+ | `--deny-domain=<list>` | — | Comma-separated hostname suffixes — drop matching URLs. |
242
+ | `--api-format=<anthropic\|openai>` | auto | Wire format for the LLM endpoint. Auto-detected from `--base-url`. |
165
243
  | `--json` | markdown | Emit `{question, plan, rounds, sources, answer, verification, cost, usage}` for piping. |
166
244
  | `--out=<path>` | — | Save to file. |
167
245
  | `--verbose`, `-v` | — | Stream plan / search / fetch / critique / verify events to stderr. |
package/dist/agent.d.ts CHANGED
@@ -5,6 +5,7 @@ import { type BrowserOptions, type FetchedPage } from "./browser.js";
5
5
  import { type Source } from "./citations.js";
6
6
  import { type VerificationReport } from "./verify.js";
7
7
  import { type CostEstimate } from "./pricing.js";
8
+ import { type DomainFilter } from "./domain-filter.js";
8
9
  import type { PageCache } from "./cache.js";
9
10
  import { type RobotsCache } from "./robots.js";
10
11
  export interface BrowserLike {
@@ -28,6 +29,9 @@ export interface AgentConfig {
28
29
  robotsCache?: RobotsCache;
29
30
  verifyCitations?: boolean;
30
31
  citeMinRecall?: number;
32
+ pdfMaxPages?: number;
33
+ include?: string[];
34
+ domainFilter?: DomainFilter;
31
35
  env?: Record<string, string | undefined>;
32
36
  onEvent?: (event: AgentEvent) => void;
33
37
  onSynthesizeToken?: (chunk: string, round: number) => void;
@@ -63,7 +67,11 @@ export type AgentEvent = {
63
67
  } | {
64
68
  type: "fetch.skipped";
65
69
  url: string;
66
- reason: "robots";
70
+ reason: "robots" | "pdf-no-extractor" | "domain-deny" | "domain-not-allowed";
71
+ } | {
72
+ type: "include.done";
73
+ ingested: number;
74
+ skipped: number;
67
75
  } | {
68
76
  type: "synthesize.start";
69
77
  sourceCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -15,6 +15,9 @@ import { buildSourceTable, renderAnswerMarkdown } from "./citations.js";
15
15
  import { synthesize } from "./synthesize.js";
16
16
  import { verifyCitations as runVerify, DEFAULT_CITE_MIN_RECALL, } from "./verify.js";
17
17
  import { estimateCost } from "./pricing.js";
18
+ import { extractPdfText, PdfExtractorMissingError, looksLikePdf, } from "./pdf.js";
19
+ import { ingestLocalPaths } from "./local.js";
20
+ import { classifyUrl } from "./domain-filter.js";
18
21
  import { runConcurrent } from "./concurrency.js";
19
22
  import { canFetch, DEFAULT_USER_AGENT, } from "./robots.js";
20
23
  export async function runAgent(question, config, signal) {
@@ -39,6 +42,26 @@ export async function runAgent(question, config, signal) {
39
42
  const allQueries = [];
40
43
  const keptSources = [];
41
44
  const rounds = [];
45
+ // Local file ingestion: pre-fetched sources are placed at the head of
46
+ // the kept-sources list so they get the lowest [N] citation ids and
47
+ // are most prominent to the synthesizer.
48
+ if (config.include && config.include.length > 0) {
49
+ const local = await ingestLocalPaths(config.include, {
50
+ pdfMaxPages: config.pdfMaxPages,
51
+ maxWordsPerSource: config.maxWordsPerSource,
52
+ });
53
+ for (const s of local.sources) {
54
+ if (keptSources.length >= config.maxSources)
55
+ break;
56
+ keptSources.push({ id: keptSources.length + 1, ...s });
57
+ seenUrls.add(s.url);
58
+ }
59
+ emit(config, {
60
+ type: "include.done",
61
+ ingested: local.sources.length,
62
+ skipped: local.skipped.length,
63
+ });
64
+ }
42
65
  let browser = null;
43
66
  let answer = "";
44
67
  const makeBrowser = config.browserFactory ?? ((opts) => new BrowserSession(opts));
@@ -66,16 +89,29 @@ export async function runAgent(question, config, signal) {
66
89
  emit(config, { type: "search.start", query });
67
90
  const results = await config.search.search(query, config.resultsPerQuery, signal);
68
91
  const fresh = dedupeByUrl(results).filter((r) => !seenUrls.has(r.url));
92
+ let kept = 0;
69
93
  for (const r of fresh) {
70
94
  seenUrls.add(r.url);
95
+ if (config.domainFilter) {
96
+ const verdict = classifyUrl(r.url, config.domainFilter);
97
+ if (verdict !== "allow") {
98
+ emit(config, {
99
+ type: "fetch.skipped",
100
+ url: r.url,
101
+ reason: verdict === "deny-listed" ? "domain-deny" : "domain-not-allowed",
102
+ });
103
+ continue;
104
+ }
105
+ }
71
106
  allCandidates.push({
72
107
  url: r.url,
73
108
  title: r.title,
74
109
  snippet: r.snippet,
75
110
  query,
76
111
  });
112
+ kept++;
77
113
  }
78
- emit(config, { type: "search.done", query, count: fresh.length });
114
+ emit(config, { type: "search.done", query, count: kept });
79
115
  }
80
116
  const candidatesFoundThisRound = allCandidates.length - candidatesBefore;
81
117
  const headroom = Math.max(0, config.maxSources - keptSources.length);
@@ -86,19 +122,56 @@ export async function runAgent(question, config, signal) {
86
122
  for (const f of fetched) {
87
123
  if (keptSources.length >= config.maxSources)
88
124
  break;
89
- if (f.page.status >= 200 && f.page.status < 400 && f.words > 50) {
90
- const sourceId = keptSources.length + 1;
125
+ if (!(f.page.status >= 200 && f.page.status < 400))
126
+ continue;
127
+ const isPdf = f.page.bytes !== undefined &&
128
+ looksLikePdf({
129
+ url: f.page.url,
130
+ finalUrl: f.page.finalUrl,
131
+ contentType: f.page.mimeType,
132
+ });
133
+ let content;
134
+ let title;
135
+ if (isPdf) {
136
+ try {
137
+ const result = await extractPdfText(f.page.bytes, {
138
+ maxPages: config.pdfMaxPages,
139
+ });
140
+ content = result.text;
141
+ title = f.candidate.title || basenameFromUrl(f.page.finalUrl || f.page.url);
142
+ }
143
+ catch (err) {
144
+ if (err instanceof PdfExtractorMissingError) {
145
+ emit(config, {
146
+ type: "fetch.skipped",
147
+ url: f.page.url,
148
+ reason: "pdf-no-extractor",
149
+ });
150
+ }
151
+ continue;
152
+ }
153
+ // Apply the same word cap as web sources.
154
+ const words = content.split(/\s+/).filter(Boolean);
155
+ if (words.length > config.maxWordsPerSource) {
156
+ content = words.slice(0, config.maxWordsPerSource).join(" ") + " …";
157
+ }
158
+ }
159
+ else {
160
+ if (f.words <= 50)
161
+ continue;
91
162
  const extracted = extractContent(f.page.text, f.page.title || f.candidate.title, config.maxWordsPerSource);
92
163
  if (extracted.text.length === 0)
93
164
  continue;
94
- keptSources.push({
95
- id: sourceId,
96
- url: f.page.finalUrl || f.page.url,
97
- title: f.page.title || f.candidate.title,
98
- fetchedAt: f.page.fetchedAt,
99
- content: extracted.text,
100
- });
165
+ content = extracted.text;
166
+ title = f.page.title || f.candidate.title;
101
167
  }
168
+ keptSources.push({
169
+ id: keptSources.length + 1,
170
+ url: f.page.finalUrl || f.page.url,
171
+ title,
172
+ fetchedAt: f.page.fetchedAt,
173
+ content,
174
+ });
102
175
  }
103
176
  emit(config, {
104
177
  type: "synthesize.start",
@@ -119,8 +192,23 @@ export async function runAgent(question, config, signal) {
119
192
  };
120
193
  const isLastPossibleRound = round === maxRoundsTotal - 1;
121
194
  if (!isLastPossibleRound && keptSources.length < config.maxSources) {
195
+ // Mid-loop citation verification — when enabled, surface weak
196
+ // cites to the critic so the next round's queries can target the
197
+ // exact sentences that lack authoritative support. The final
198
+ // verifier pass still runs after the loop exits and produces the
199
+ // user-facing report; this in-loop pass is purely advisory.
200
+ let weakCites = [];
201
+ if (config.verifyCitations !== false && answer) {
202
+ const inLoop = runVerify(answer, keptSources, {
203
+ threshold: config.citeMinRecall ?? DEFAULT_CITE_MIN_RECALL,
204
+ });
205
+ weakCites = inLoop.unsupported.map((c) => ({
206
+ sentence: c.sentence,
207
+ citedIds: c.citedIds,
208
+ }));
209
+ }
122
210
  emit(config, { type: "critique.start", round });
123
- const crit = await critique(question, answer, allQueries, config.llm, signal, usageSinkFor("critique", round));
211
+ const crit = await critique(question, answer, allQueries, config.llm, signal, usageSinkFor("critique", round), weakCites);
124
212
  emit(config, { type: "critique.done", round, critique: crit });
125
213
  roundTrace.critique = crit;
126
214
  rounds.push(roundTrace);
@@ -239,4 +327,14 @@ async function fetchOne(c, config, ensureBrowser) {
239
327
  function emit(config, event) {
240
328
  config.onEvent?.(event);
241
329
  }
330
+ function basenameFromUrl(url) {
331
+ try {
332
+ const u = new URL(url);
333
+ const last = u.pathname.split("/").filter(Boolean).pop();
334
+ return last ? decodeURIComponent(last) : u.host;
335
+ }
336
+ catch {
337
+ return url;
338
+ }
339
+ }
242
340
  //# sourceMappingURL=agent.js.map
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,uDAAuD;AACvD,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAI/E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAA4B,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAe,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,eAAe,IAAI,SAAS,EAC5B,uBAAuB,GAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AA6GrB,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,MAAmB,EACnB,MAAoB;IAEpB,MAAM,SAAS,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAChE,MAAM,YAAY,GAChB,CAAC,KAAoC,EAAE,KAAa,EAAE,EAAE,CACxD,CAAC,CAAkD,EAAE,EAAE;QACrD,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7C,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,EAAE,UAAU;YAChB,KAAK;YACL,KAAK;YACL,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;YAChC,YAAY,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC;SACnC,CAAC,CAAC;IACL,CAAC,CAAC;IAEJ,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,aAAa,GAAgB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,OAAO,GAAuB,IAAI,CAAC;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,WAAW,GACf,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhF,KAAK,UAAU,aAAa;QAC1B,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;QAEnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAExC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YACvE,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YAEpC,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;YAC9C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBACpC,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CACxC,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,MAAM,CACP,CAAC;gBACF,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,aAAa,CAAC,IAAI,CAAC;wBACjB,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,wBAAwB,GAAG,aAAa,CAAC,MAAM,GAAG,gBAAgB,CAAC;YAEzE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,aAAa;iBAC1B,KAAK,CAAC,gBAAgB,CAAC;iBACvB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC;YAE1D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAExE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU;oBAAE,MAAM;gBACnD,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;oBAChE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxC,MAAM,SAAS,GAAG,cAAc,CAC9B,CAAC,CAAC,IAAI,CAAC,IAAI,EACX,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EACjC,MAAM,CAAC,iBAAiB,CACzB,CAAC;oBACF,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;oBAC1C,WAAW,CAAC,IAAI,CAAC;wBACf,EAAE,EAAE,QAAQ;wBACZ,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;wBAClC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK;wBACxC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;wBAC3B,OAAO,EAAE,SAAS,CAAC,IAAI;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,WAAW,CAAC,MAAM;gBAC/B,KAAK;aACN,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB;gBACxC,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC5D,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,GAAG,MAAM,UAAU,CACvB,QAAQ,EACR,WAAW,EACX,MAAM,CAAC,GAAG,EACV,MAAM,EACN,SAAS,EACT,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAC7B,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;YAEjD,MAAM,UAAU,GAAe;gBAC7B,KAAK;gBACL,OAAO,EAAE,eAAe;gBACxB,eAAe,EAAE,wBAAwB;gBACzC,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,IAAI,EAAE,WAAW,CAAC,MAAM;aACzB,CAAC;YAEF,MAAM,mBAAmB,GAAG,KAAK,KAAK,cAAc,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,mBAAmB,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,QAAQ,EACR,MAAM,EACN,UAAU,EACV,MAAM,CAAC,GAAG,EACV,MAAM,EACN,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAChC,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/D,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;gBAClD,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAClC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CACjF,CAAC;IACF,0EAA0E;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAErE,IAAI,YAA4C,CAAC;IACjD,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/C,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE;YAC5C,SAAS,EAAE,MAAM,CAAC,aAAa,IAAI,uBAAuB;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnE,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,IAAI;QACJ,KAAK,EAAE;YACL,OAAO,EAAE,UAAU,CAAC,MAAM;YAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,IAAI,EAAE,WAAW,CAAC,MAAM;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;YAClC,cAAc,EAAE,YAAY,EAAE,cAAc,IAAI,CAAC;YACjD,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,IAAI,CAAC;YACzD,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE;YACrB,gBAAgB,EAAE,IAAI,CAAC,SAAS;SACjC;KACF,CAAC;AACJ,CAAC;AASD,KAAK,UAAU,SAAS,CACtB,UAAuB,EACvB,MAAmB,EACnB,aAAyC,EACzC,MAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,UAAU,EACV,MAAM,CAAC,WAAW,EAClB,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAC/C,MAAM,CACP,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,CAAY,EACZ,MAAmB,EACnB,aAAyC;IAEzC,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,IAAI,kBAAkB,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE;YACnC,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,WAAW;SAC1B,CAAC,CAAC;QACH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,EAAE,YAAY;gBAClB,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;gBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK;gBACL,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5D,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,EAAE,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;YACL,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,MAAmB,EAAE,KAAiB;IAClD,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/browser.d.ts CHANGED
@@ -6,6 +6,8 @@ export interface FetchedPage {
6
6
  text: string;
7
7
  html: string;
8
8
  fetchedAt: number;
9
+ mimeType?: string;
10
+ bytes?: Uint8Array;
9
11
  }
10
12
  export interface BrowserOptions {
11
13
  headless: boolean;
@@ -21,6 +23,8 @@ export declare class BrowserSession {
21
23
  constructor(opts: BrowserOptions);
22
24
  start(): Promise<void>;
23
25
  fetch(url: string): Promise<FetchedPage>;
26
+ private fetchPdf;
24
27
  close(): Promise<void>;
25
28
  }
29
+ export declare function extractMimeType(headerValue: string | undefined): string | undefined;
26
30
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,QAEuB,CAAC;AAYvD,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;gBAEjB,IAAI,EAAE,cAAc;IAE3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmCxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAKlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,QAEuB,CAAC;AAYvD,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;gBAEjB,IAAI,EAAE,cAAc;IAE3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAqDhC,QAAQ;IA4BhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B;AAID,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAInF"}
package/dist/browser.js CHANGED
@@ -1,7 +1,14 @@
1
1
  // Thin Playwright wrapper. One browser per agent run, one context, one page
2
2
  // re-used across fetches. Stealth-flavored Chrome args ported from the
3
3
  // substrate browser container.
4
+ //
5
+ // PDFs short-circuit Playwright entirely: Chromium's PDF viewer doesn't
6
+ // expose useful text content via the DOM, and `page.goto()` on a PDF can
7
+ // get stuck on `networkidle` waits. Instead we issue a plain HTTP GET via
8
+ // the request context, capture the bytes, and let src/pdf.ts handle
9
+ // extraction downstream.
4
10
  import { chromium } from "playwright";
11
+ import { looksLikePdf } from "./pdf.js";
5
12
  export const DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
6
13
  "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
7
14
  const STEALTH_ARGS = [
@@ -36,6 +43,12 @@ export class BrowserSession {
36
43
  async fetch(url) {
37
44
  if (!this.context)
38
45
  throw new Error("browser not started");
46
+ // PDFs: skip the page goto entirely. Use the context's request API
47
+ // for a plain GET so we get the raw bytes (Chromium's PDF viewer
48
+ // doesn't surface text through the DOM).
49
+ if (looksLikePdf({ url })) {
50
+ return await this.fetchPdf(url);
51
+ }
39
52
  const page = await this.context.newPage();
40
53
  try {
41
54
  const response = await page.goto(url, {
@@ -46,6 +59,14 @@ export class BrowserSession {
46
59
  await page
47
60
  .waitForLoadState("networkidle", { timeout: Math.min(5000, this.opts.timeoutMs) })
48
61
  .catch(() => undefined);
62
+ // If the response advertised a PDF content-type even though the
63
+ // URL didn't end in .pdf, redirect to the bytes path.
64
+ const headers = response?.headers() ?? {};
65
+ const ct = headers["content-type"] ?? "";
66
+ if (looksLikePdf({ contentType: ct })) {
67
+ await page.close().catch(() => undefined);
68
+ return await this.fetchPdf(url);
69
+ }
49
70
  const finalUrl = page.url();
50
71
  const status = response?.status() ?? 0;
51
72
  const title = await page.title().catch(() => "");
@@ -59,12 +80,37 @@ export class BrowserSession {
59
80
  text,
60
81
  html,
61
82
  fetchedAt: Date.now(),
83
+ mimeType: extractMimeType(ct),
62
84
  };
63
85
  }
64
86
  finally {
65
87
  await page.close().catch(() => undefined);
66
88
  }
67
89
  }
90
+ async fetchPdf(url) {
91
+ if (!this.context)
92
+ throw new Error("browser not started");
93
+ const response = await this.context.request.get(url, {
94
+ timeout: this.opts.timeoutMs,
95
+ maxRedirects: 5,
96
+ });
97
+ const status = response.status();
98
+ const buf = await response.body();
99
+ const bytes = new Uint8Array(buf.buffer, buf.byteOffset, Math.min(buf.byteLength, this.opts.maxBytes * 4));
100
+ const headers = response.headers();
101
+ const ct = headers["content-type"] ?? "application/pdf";
102
+ return {
103
+ url,
104
+ finalUrl: response.url(),
105
+ status,
106
+ title: "",
107
+ text: "", // populated by the PDF extractor downstream
108
+ html: "",
109
+ fetchedAt: Date.now(),
110
+ mimeType: extractMimeType(ct) ?? "application/pdf",
111
+ bytes,
112
+ };
113
+ }
68
114
  async close() {
69
115
  await this.context?.close().catch(() => undefined);
70
116
  await this.browser?.close().catch(() => undefined);
@@ -72,4 +118,12 @@ export class BrowserSession {
72
118
  this.browser = null;
73
119
  }
74
120
  }
121
+ // Exported for unit tests. Pulls the bare media type out of a content-type
122
+ // header value (e.g. "text/html; charset=utf-8" → "text/html").
123
+ export function extractMimeType(headerValue) {
124
+ if (!headerValue)
125
+ return undefined;
126
+ const semi = headerValue.indexOf(";");
127
+ return (semi === -1 ? headerValue : headerValue.slice(0, semi)).trim().toLowerCase();
128
+ }
75
129
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AA4DtB,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwHpD;AA4ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAIR;AAKD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,MAAM,CASR;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIrD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AA2EtB,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqJpD;AA8ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAIR;AAKD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,MAAM,CASR;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIrD"}
package/dist/cli.js CHANGED
@@ -50,6 +50,19 @@ Flags:
50
50
  --strict-cites Exit non-zero if any citation is unsupported
51
51
  --cite-min-recall=<0..1> Threshold for citation support. Default: 0.4
52
52
  --no-cost Suppress the end-of-run cost summary on stderr
53
+ --include=<paths> Comma-separated list of local files / dirs to
54
+ ingest as sources (.pdf, .md, .txt, .html).
55
+ PDFs require pdfjs-dist installed.
56
+ --pdf-max-pages=<n> Cap pages parsed per PDF. Default: 50
57
+ --allow-domain=<list> Comma-separated hostname suffixes to keep
58
+ exclusively (e.g. github.com,docs.anthropic.com).
59
+ --deny-domain=<list> Comma-separated hostname suffixes to drop
60
+ (e.g. pinterest.com,quora.com).
61
+ --api-format=<anthropic|openai>
62
+ Wire format for the LLM endpoint. Default:
63
+ auto-detected from --base-url (api.openai.com,
64
+ :11434 (Ollama), :8000 default to openai;
65
+ everything else to anthropic).
53
66
  --json Emit a JSON result to stdout instead of markdown
54
67
  --out=<path> Write the output (markdown or json) to a file too
55
68
  --verbose, -v Stream progress events to stderr
@@ -66,7 +79,9 @@ Environment:
66
79
  DEEPDIVE_CACHE_DIR, DEEPDIVE_CACHE_TTL_MS, DEEPDIVE_JSON, DEEPDIVE_VERBOSE,
67
80
  DEEPDIVE_LLM_TIMEOUT_MS, DEEPDIVE_LLM_ATTEMPTS,
68
81
  DEEPDIVE_NO_VERIFY_CITES, DEEPDIVE_STRICT_CITES, DEEPDIVE_CITE_MIN_RECALL,
69
- DEEPDIVE_NO_COST, DEEPDIVE_PRICE_INPUT_PER_MTOK, DEEPDIVE_PRICE_OUTPUT_PER_MTOK
82
+ DEEPDIVE_NO_COST, DEEPDIVE_PRICE_INPUT_PER_MTOK, DEEPDIVE_PRICE_OUTPUT_PER_MTOK,
83
+ DEEPDIVE_INCLUDE, DEEPDIVE_PDF_MAX_PAGES,
84
+ DEEPDIVE_ALLOW_DOMAIN, DEEPDIVE_DENY_DOMAIN, DEEPDIVE_API_FORMAT
70
85
  `;
71
86
  // Exported for unit tests.
72
87
  export function parseArgs(argv) {
@@ -165,6 +180,33 @@ export function parseArgs(argv) {
165
180
  case "cite-min-recall":
166
181
  flags.citeMinRecall = parseUnitFloat(value);
167
182
  break;
183
+ case "pdf-max-pages":
184
+ flags.pdfMaxPages = parsePositiveInt(value);
185
+ break;
186
+ case "include":
187
+ flags.include = value
188
+ .split(",")
189
+ .map((s) => s.trim())
190
+ .filter((s) => s.length > 0);
191
+ break;
192
+ case "allow-domain":
193
+ flags.allowDomain = value
194
+ .split(",")
195
+ .map((s) => s.trim())
196
+ .filter((s) => s.length > 0);
197
+ break;
198
+ case "deny-domain":
199
+ flags.denyDomain = value
200
+ .split(",")
201
+ .map((s) => s.trim())
202
+ .filter((s) => s.length > 0);
203
+ break;
204
+ case "api-format":
205
+ if (value !== "anthropic" && value !== "openai") {
206
+ throw new Error(`--api-format must be 'anthropic' or 'openai' (got: ${value})`);
207
+ }
208
+ flags.apiFormat = value;
209
+ break;
168
210
  case "out":
169
211
  outPath = value;
170
212
  break;
@@ -220,6 +262,8 @@ function renderEvent(e) {
220
262
  return ` ${e.ok ? "OK " : "!! "}${e.status} · ${e.words} words${e.cached ? " · cache" : ""}`;
221
263
  case "fetch.skipped":
222
264
  return ` fetch skipped (${e.reason}) ${e.url}`;
265
+ case "include.done":
266
+ return ` include ${e.ingested} ingested${e.skipped ? ` · ${e.skipped} skipped` : ""}`;
223
267
  case "synthesize.start":
224
268
  return ` synth round ${e.round} · ${e.sourceCount} source${e.sourceCount === 1 ? "" : "s"}`;
225
269
  case "synthesize.done":
@@ -346,6 +390,9 @@ async function main(argv) {
346
390
  respectRobots: config.respectRobots,
347
391
  verifyCitations: config.verifyCitations,
348
392
  citeMinRecall: config.citeMinRecall,
393
+ pdfMaxPages: config.pdfMaxPages,
394
+ include: config.include,
395
+ domainFilter: config.domainFilter,
349
396
  env: process.env,
350
397
  onEvent: (e) => {
351
398
  if (config.verbose)