@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/dist/pdf.js ADDED
@@ -0,0 +1,195 @@
1
+ // PDF text extraction — optional path, lazy-loaded.
2
+ //
3
+ // Real research questions hit PDFs constantly (academic papers, RFCs,
4
+ // standards bodies). Without this module, deepdive returns near-empty
5
+ // content for those URLs because the headless browser only extracts the
6
+ // rendered viewer chrome.
7
+ //
8
+ // Architectural choice: pdfjs-dist is NOT a runtime dependency of
9
+ // deepdive. It is dynamically imported the first time a PDF is fetched,
10
+ // and a clear "install pdfjs-dist to enable PDF support" message is
11
+ // surfaced if it's missing. This keeps the headline "one runtime
12
+ // dependency" accurate for default installs while making the feature
13
+ // available to anyone who wants it via:
14
+ //
15
+ // npm install -g pdfjs-dist
16
+ //
17
+ // `deepdive doctor` reports the install state.
18
+ export class PdfExtractorMissingError extends Error {
19
+ constructor() {
20
+ super("pdfjs-dist not installed — install with `npm install -g pdfjs-dist` to enable PDF source support");
21
+ this.name = "PdfExtractorMissingError";
22
+ }
23
+ }
24
+ // Lazy resolver for pdfjs-dist. Cached after the first call so we don't
25
+ // re-resolve on every PDF in a multi-PDF run. Returns null if the module
26
+ // is not installed; the caller is expected to surface a clear message.
27
+ let pdfjsCache = undefined;
28
+ async function loadPdfjs() {
29
+ if (pdfjsCache !== undefined)
30
+ return pdfjsCache;
31
+ try {
32
+ // The legacy build is the only one that runs cleanly in Node without
33
+ // configuring a worker. Keep this import path as a string literal so
34
+ // bundlers / tsc don't try to resolve it at compile time.
35
+ const mod = await import(
36
+ /* @vite-ignore */ "pdfjs-dist/legacy/build/pdf.mjs");
37
+ pdfjsCache = mod;
38
+ return mod;
39
+ }
40
+ catch {
41
+ pdfjsCache = null;
42
+ return null;
43
+ }
44
+ }
45
+ // True iff pdfjs-dist is importable. Exported for doctor.
46
+ export async function isPdfExtractorAvailable() {
47
+ return (await loadPdfjs()) !== null;
48
+ }
49
+ // Resets the cache. Exported for tests; not used in production.
50
+ export function _resetPdfjsCache() {
51
+ pdfjsCache = undefined;
52
+ }
53
+ export async function extractPdfText(bytes, opts = {}) {
54
+ const pdfjs = (await loadPdfjs());
55
+ if (!pdfjs)
56
+ throw new PdfExtractorMissingError();
57
+ // pdfjs-dist's legacy build for Node still wants a worker source path
58
+ // even when `disableWorker: true` is set — it uses it to dynamically
59
+ // import the worker module for the "fake worker" inline path. Resolving
60
+ // the bundled worker file once and assigning its URL satisfies that
61
+ // requirement without spawning a real Worker thread.
62
+ if (pdfjs.GlobalWorkerOptions && !pdfjs.GlobalWorkerOptions.workerSrc) {
63
+ try {
64
+ const { createRequire } = await import("node:module");
65
+ const req = createRequire(import.meta.url);
66
+ pdfjs.GlobalWorkerOptions.workerSrc = req.resolve("pdfjs-dist/legacy/build/pdf.worker.mjs");
67
+ }
68
+ catch {
69
+ // Best-effort — if resolution fails, the getDocument call below
70
+ // will throw a clearer error with the original message.
71
+ }
72
+ }
73
+ const maxPages = Math.max(1, opts.maxPages ?? 50);
74
+ // pdfjs-dist mutates the buffer it parses; pass a copy so cache
75
+ // round-trips don't corrupt across uses.
76
+ const buf = bytes.slice();
77
+ const doc = await pdfjs
78
+ .getDocument({
79
+ data: buf,
80
+ disableWorker: true,
81
+ isEvalSupported: false,
82
+ useSystemFonts: false,
83
+ })
84
+ .promise;
85
+ const pageCount = doc.numPages;
86
+ const parsedPages = Math.min(pageCount, maxPages);
87
+ const pageTexts = [];
88
+ for (let i = 1; i <= parsedPages; i++) {
89
+ const page = await doc.getPage(i);
90
+ const content = await page.getTextContent();
91
+ pageTexts.push(joinTextItems(content.items));
92
+ }
93
+ await doc.destroy().catch(() => undefined);
94
+ const text = dedupeRunningHeadersFooters(pageTexts).join("\n\n");
95
+ return {
96
+ text,
97
+ pageCount,
98
+ parsedPages,
99
+ truncated: parsedPages < pageCount,
100
+ };
101
+ }
102
+ // Exported for unit tests. Joins a page's text-content items into
103
+ // readable prose, emitting a single space between items unless the item
104
+ // signals a hard line break via `hasEOL`.
105
+ export function joinTextItems(items) {
106
+ const out = [];
107
+ for (const item of items) {
108
+ const s = item.str ?? "";
109
+ if (!s && !item.hasEOL)
110
+ continue;
111
+ if (item.hasEOL) {
112
+ out.push(s);
113
+ out.push("\n");
114
+ }
115
+ else {
116
+ out.push(s);
117
+ out.push(" ");
118
+ }
119
+ }
120
+ return collapseWhitespace(out.join(""));
121
+ }
122
+ // Exported for unit tests. Drops lines that appear on >= 60% of pages
123
+ // (running headers / footers / page numbers). Frequency-based — does
124
+ // nothing on single-page PDFs.
125
+ export function dedupeRunningHeadersFooters(pages) {
126
+ if (pages.length < 3)
127
+ return pages;
128
+ const lineCounts = new Map();
129
+ for (const page of pages) {
130
+ const seenInPage = new Set();
131
+ for (const line of page.split(/\n+/)) {
132
+ const norm = normalizeForDedup(line);
133
+ if (!norm)
134
+ continue;
135
+ if (seenInPage.has(norm))
136
+ continue;
137
+ seenInPage.add(norm);
138
+ lineCounts.set(norm, (lineCounts.get(norm) ?? 0) + 1);
139
+ }
140
+ }
141
+ const cutoff = Math.ceil(pages.length * 0.6);
142
+ const drop = new Set();
143
+ for (const [line, count] of lineCounts) {
144
+ if (count >= cutoff)
145
+ drop.add(line);
146
+ }
147
+ if (drop.size === 0)
148
+ return pages;
149
+ return pages.map((p) => p
150
+ .split(/\n+/)
151
+ .filter((line) => !drop.has(normalizeForDedup(line)))
152
+ .join("\n"));
153
+ }
154
+ function normalizeForDedup(line) {
155
+ // Treat "Page 5" and "Page 12" as different (they correctly count
156
+ // distinctly) but ignore leading/trailing whitespace.
157
+ return line.trim().replace(/\s+/g, " ").toLowerCase();
158
+ }
159
+ function collapseWhitespace(s) {
160
+ // Per-line normalization avoids the polynomial backtracking that
161
+ // ` *\n */g` would do on inputs with long horizontal whitespace
162
+ // runs and no newlines (CodeQL flagged the earlier form). Every
163
+ // operation here is single-pass linear: split → trim → filter.
164
+ const lines = s.split(/\r?\n/).map((line) => line.replace(/[ \t\f\v]+/g, " ").trim());
165
+ const out = [];
166
+ let blanks = 0;
167
+ for (const line of lines) {
168
+ if (line === "") {
169
+ blanks++;
170
+ if (blanks <= 1)
171
+ out.push("");
172
+ }
173
+ else {
174
+ blanks = 0;
175
+ out.push(line);
176
+ }
177
+ }
178
+ return out.join("\n").trim();
179
+ }
180
+ // Returns true when the URL or content-type plausibly points at a PDF.
181
+ // Exported for unit tests and for browser.ts integration.
182
+ export function looksLikePdf(args) {
183
+ const ct = (args.contentType ?? "").toLowerCase();
184
+ if (ct.startsWith("application/pdf"))
185
+ return true;
186
+ for (const u of [args.finalUrl, args.url]) {
187
+ if (!u)
188
+ continue;
189
+ const lower = u.toLowerCase().split(/[?#]/)[0];
190
+ if (lower.endsWith(".pdf"))
191
+ return true;
192
+ }
193
+ return false;
194
+ }
195
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"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"}
package/dist/plan.d.ts CHANGED
@@ -11,6 +11,10 @@ export interface Critique {
11
11
  }
12
12
  export declare function planQueries(question: string, config: LLMConfig, signal?: AbortSignal, onUsage?: UsageSink): Promise<Plan>;
13
13
  export declare function parsePlan(raw: string): Plan;
14
- export declare function critique(question: string, draftAnswer: string, priorQueries: string[], config: LLMConfig, signal?: AbortSignal, onUsage?: UsageSink): Promise<Critique>;
14
+ export interface WeakCite {
15
+ sentence: string;
16
+ citedIds: number[];
17
+ }
18
+ export declare function critique(question: string, draftAnswer: string, priorQueries: string[], config: LLMConfig, signal?: AbortSignal, onUsage?: UsageSink, weakCites?: WeakCite[]): Promise<Critique>;
15
19
  export declare function parseCritique(raw: string): Critique;
16
20
  //# sourceMappingURL=plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAaD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiB3C;AAqBD,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,QAAQ,CAAC,CAenB;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsBnD"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAaD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiB3C;AAuBD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,EACnB,SAAS,GAAE,QAAQ,EAAO,GACzB,OAAO,CAAC,QAAQ,CAAC,CA0BnB;AAQD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsBnD"}
package/dist/plan.js CHANGED
@@ -48,6 +48,7 @@ You will receive:
48
48
  1. The original question.
49
49
  2. The current draft answer with inline [N] citations.
50
50
  3. The list of search queries already run.
51
+ 4. (Optional) A list of sentences whose [N] citations are weakly supported by their cited source — these are top-priority gaps to fill in the next round.
51
52
 
52
53
  Your job: identify the most important gaps in the draft answer — aspects of the question not answered, answered weakly, or answered with insufficient sourcing — and propose 0 to 3 additional search queries that would fill those gaps in the next round.
53
54
 
@@ -56,21 +57,33 @@ Rules:
56
57
  - Do not repeat queries similar to ones already searched. The list of prior queries is provided.
57
58
  - Queries must be concrete, search-engine-shaped phrases a user would type.
58
59
  - Prefer queries targeting specific unanswered facts over generic re-searches.
60
+ - When weakly-supported sentences are flagged, prioritize queries that would find authoritative sources for those exact claims.
59
61
  - Keep the number of new queries minimal — fewer, sharper queries beat more, vaguer ones.
60
62
 
61
63
  Output FORMAT (strict): one JSON object, no prose before or after, matching:
62
64
  {"done": bool, "reasoning": "<1-2 sentences>", "queries": ["q1", "q2", ...]}`;
63
- export async function critique(question, draftAnswer, priorQueries, config, signal, onUsage) {
65
+ export async function critique(question, draftAnswer, priorQueries, config, signal, onUsage, weakCites = []) {
66
+ const weakSection = weakCites.length > 0
67
+ ? `\n\nSentences with weak citations (top-priority gaps):\n` +
68
+ weakCites
69
+ .map((w) => `- "${truncateForPrompt(w.sentence)}" — cited [${w.citedIds.join(", ")}]`)
70
+ .join("\n")
71
+ : "";
64
72
  const userMessage = `Question: ${question}\n\n` +
65
73
  `Draft answer:\n${draftAnswer}\n\n` +
66
74
  `Queries already run (${priorQueries.length}):\n` +
67
75
  priorQueries.map((q) => `- ${q}`).join("\n") +
76
+ weakSection +
68
77
  `\n\nReview the draft and propose follow-up queries if needed.`;
69
78
  const { text, usage } = await callLLM([{ role: "user", content: userMessage }], CRITIC_SYSTEM, config, signal);
70
79
  if (usage && onUsage)
71
80
  onUsage(usage);
72
81
  return parseCritique(text);
73
82
  }
83
+ function truncateForPrompt(s) {
84
+ const trimmed = s.trim().replace(/\s+/g, " ");
85
+ return trimmed.length <= 200 ? trimmed : trimmed.slice(0, 197) + "…";
86
+ }
74
87
  // Exported for unit tests.
75
88
  export function parseCritique(raw) {
76
89
  const json = extractFirstJsonObject(raw);
package/dist/plan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
package/dist/pricing.d.ts CHANGED
@@ -14,6 +14,8 @@ export interface CostEstimate {
14
14
  calls: number;
15
15
  }
16
16
  export declare const PRICE_TABLE: Record<string, ModelPrice>;
17
+ export declare const PRICE_TABLE_VERIFIED_AT = "2026-05-05";
18
+ export declare const PRICE_TABLE_STALE_AFTER_DAYS = 90;
17
19
  export declare const DARIO_DEFAULT_BASE_URL = "http://localhost:3456";
18
20
  export declare function priceFor(model: string, env?: Record<string, string | undefined>): ModelPrice | undefined;
19
21
  export declare function estimateCost(usage: TokenUsage & {
@@ -23,4 +25,5 @@ export declare function formatCostLine(estimate: CostEstimate, model: string): s
23
25
  export declare function looksLikeDario(baseUrl: string): boolean;
24
26
  export declare function formatUsd(amount: number): string;
25
27
  export declare function formatTokens(n: number): string;
28
+ export declare function daysAgo(isoDate: string, now?: number): number;
26
29
  //# sourceMappingURL=pricing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAIlD,CAAC;AAKF,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAK9D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU,GAAG,SAAS,CAUxB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,YAAY,CAqBd;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAIlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAIpD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAK/C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAK9D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU,GAAG,SAAS,CAUxB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,YAAY,CAqBd;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAMzE"}
package/dist/pricing.js CHANGED
@@ -12,11 +12,20 @@
12
12
  // running unknown models can override via env vars.
13
13
  // Anthropic public list pricing as of release. Verify against
14
14
  // docs.anthropic.com/en/docs/about-claude/pricing before bumping.
15
+ //
16
+ // PRICE_TABLE_VERIFIED_AT records when the table was last spot-checked.
17
+ // `deepdive doctor` warns when the table is more than ~90 days stale,
18
+ // keeping the maintainer honest about audit cadence — drift is intentional
19
+ // (a PR is the right way to update prices), but undeclared drift is not.
15
20
  export const PRICE_TABLE = {
16
21
  "claude-sonnet-4-6": { inputPerMTok: 3, outputPerMTok: 15 },
17
22
  "claude-opus-4-7": { inputPerMTok: 15, outputPerMTok: 75 },
18
23
  "claude-haiku-4-5": { inputPerMTok: 0.8, outputPerMTok: 4 },
19
24
  };
25
+ export const PRICE_TABLE_VERIFIED_AT = "2026-05-05";
26
+ // Threshold in days at which doctor flips the pricing check from "ok"
27
+ // to "warn". Exposed so tests can override.
28
+ export const PRICE_TABLE_STALE_AFTER_DAYS = 90;
20
29
  // dario's default listening port — auto-detected to print the
21
30
  // "$0 on Claude Max via dario" hint without claiming it for unrelated
22
31
  // endpoints.
@@ -104,6 +113,17 @@ export function formatTokens(n) {
104
113
  return (n / 1000).toFixed(1) + "k";
105
114
  return (n / 1_000_000).toFixed(2) + "M";
106
115
  }
116
+ // Whole-day delta between an ISO date string ("YYYY-MM-DD") and `now`.
117
+ // Returns NaN for malformed input. Exported for tests.
118
+ export function daysAgo(isoDate, now = Date.now()) {
119
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(isoDate);
120
+ if (!m)
121
+ return NaN;
122
+ const t = Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]));
123
+ if (!Number.isFinite(t))
124
+ return NaN;
125
+ return Math.floor((now - t) / 86_400_000);
126
+ }
107
127
  function parseDollars(s) {
108
128
  if (!s)
109
129
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0CAA0C;AAC1C,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,8DAA8D;AAC9D,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,sEAAsE;AACtE,oDAAoD;AAoBpD,8DAA8D;AAC9D,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAA+B;IACrD,mBAAmB,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;IAC3D,iBAAiB,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;IAC1D,kBAAkB,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE;CAC5D,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAEpD,sEAAsE;AACtE,4CAA4C;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C,8DAA8D;AAC9D,sEAAsE;AACtE,aAAa;AACb,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D,wEAAwE;AACxE,0EAA0E;AAC1E,uCAAuC;AACvC,MAAM,UAAU,QAAQ,CACtB,KAAa,EACb,GAAwC;IAExC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,6BAA6B,CAAC;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,8BAA8B,CAAC;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAqC,EACrC,KAAa,EACb,GAAwC;IAExC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS;QACpD,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IACzD,OAAO;QACL,SAAS;QACT,UAAU,EAAE,KAAK,IAAI,WAAW;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,oEAAoE;AACpE,4DAA4D;AAC5D,4DAA4D;AAC5D,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAC,QAAsB,EAAE,KAAa;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC;QACxD,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,YAAY,CAAC;IACvF,OAAO,GAAG,IAAI,MAAM,GAAG,SAAS,IAAI,UAAU,UAAU,MAAM,KAAK,EAAE,CAAC;AACxE,CAAC;AAED,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,sBAAsB,CAAC;AAClD,CAAC;AAED,SAAS,IAAI,CAAC,CAAS;IACrB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,EAAE,CAAC;IAC5C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI;QAAE,OAAO,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACnD,IAAI,CAAC,GAAG,SAAS;QAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACtD,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1C,CAAC;AAED,uEAAuE;AACvE,uDAAuD;AACvD,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC/D,MAAM,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,CAAqB;IACzC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askalf/deepdive",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "A local research agent. One command, cited answer. Routes every LLM call through your own proxy (dario, Anthropic-compat, OpenAI-compat). Headless browser + pluggable search + multi-provider LLM — zero hosted dependencies.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -62,6 +62,7 @@
62
62
  },
63
63
  "devDependencies": {
64
64
  "@types/node": "^25.6.0",
65
+ "pdfjs-dist": "^5.7.284",
65
66
  "tsx": "^4.19.0",
66
67
  "typescript": "^5.7.0"
67
68
  }