@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.
- package/README.md +78 -0
- package/dist/agent.d.ts +9 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +109 -11
- package/dist/agent.js.map +1 -1
- package/dist/browser.d.ts +4 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +54 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +48 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +41 -1
- package/dist/doctor.js.map +1 -1
- package/dist/domain-filter.d.ts +10 -0
- package/dist/domain-filter.d.ts.map +1 -0
- package/dist/domain-filter.js +71 -0
- package/dist/domain-filter.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/llm-format.d.ts +81 -0
- package/dist/llm-format.d.ts.map +1 -0
- package/dist/llm-format.js +129 -0
- package/dist/llm-format.js.map +1 -0
- package/dist/llm-stream.d.ts.map +1 -1
- package/dist/llm-stream.js +19 -9
- package/dist/llm-stream.js.map +1 -1
- package/dist/llm.d.ts +2 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +11 -8
- package/dist/llm.js.map +1 -1
- package/dist/local.d.ts +16 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +160 -0
- package/dist/local.js.map +1 -0
- package/dist/pdf.d.ts +28 -0
- package/dist/pdf.d.ts.map +1 -0
- package/dist/pdf.js +195 -0
- package/dist/pdf.js.map +1 -0
- package/dist/plan.d.ts +5 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +14 -1
- package/dist/plan.js.map +1 -1
- package/dist/pricing.d.ts +3 -0
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +20 -0
- package/dist/pricing.js.map +1 -1
- 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
|
package/dist/pdf.js.map
ADDED
|
@@ -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
|
|
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
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -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;
|
|
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":"AAAA,2EAA2E;AAC3E,4DAA4D;AAC5D,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,0DAA0D;AAE1D,OAAO,EAAE,OAAO,EAAkC,MAAM,UAAU,CAAC;AAenE,MAAM,cAAc,GAAG;;;;;;;;;qFAS8D,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,MAAiB,EACjB,MAAoB,EACpB,OAAmB;IAEnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CACnC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EACrC,cAAc,EACd,MAAM,EACN,MAAM,CACP,CAAC;IACF,IAAI,KAAK,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;IAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5E,OAAO;QACL,OAAO;QACP,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG
|
|
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
|
package/dist/pricing.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
package/dist/pricing.js.map
CHANGED
|
@@ -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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askalf/deepdive",
|
|
3
|
-
"version": "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
|
}
|