@askalf/deepdive 0.1.0 → 0.4.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 +177 -52
- package/dist/agent.d.ts +48 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +178 -65
- package/dist/agent.js.map +1 -1
- package/dist/cache.d.ts +16 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +62 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +164 -18
- package/dist/cli.js.map +1 -1
- package/dist/concurrency.d.ts +2 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +38 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +64 -3
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +44 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +533 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/llm-stream.d.ts +27 -0
- package/dist/llm-stream.d.ts.map +1 -0
- package/dist/llm-stream.js +173 -0
- package/dist/llm-stream.js.map +1 -0
- package/dist/llm.d.ts +10 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +96 -20
- package/dist/llm.js.map +1 -1
- package/dist/plan.d.ts +7 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +51 -0
- package/dist/plan.js.map +1 -1
- package/dist/retry.d.ts +18 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +70 -0
- package/dist/retry.js.map +1 -0
- package/dist/robots.d.ts +26 -0
- package/dist/robots.d.ts.map +1 -0
- package/dist/robots.js +183 -0
- package/dist/robots.js.map +1 -0
- package/dist/search/duckduckgo.d.ts +2 -0
- package/dist/search/duckduckgo.d.ts.map +1 -1
- package/dist/search/duckduckgo.js +38 -13
- package/dist/search/duckduckgo.js.map +1 -1
- package/dist/search/exa.d.ts +17 -0
- package/dist/search/exa.d.ts.map +1 -0
- package/dist/search/exa.js +62 -0
- package/dist/search/exa.js.map +1 -0
- package/dist/search/searxng.d.ts.map +1 -1
- package/dist/search/searxng.js +2 -1
- package/dist/search/searxng.js.map +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -1
- package/dist/search.js.map +1 -1
- package/dist/synthesize.d.ts +1 -1
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +11 -2
- package/dist/synthesize.js.map +1 -1
- package/dist/url-util.d.ts +4 -0
- package/dist/url-util.d.ts.map +1 -0
- package/dist/url-util.js +24 -0
- package/dist/url-util.js.map +1 -0
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -3,41 +3,63 @@
|
|
|
3
3
|
//
|
|
4
4
|
// deepdive "how does claude's rate limiter work"
|
|
5
5
|
// deepdive "..." --model=claude-opus-4-7 --search=brave --out=report.md
|
|
6
|
+
// deepdive "..." --deep=2 --concurrency=6 --json
|
|
6
7
|
// deepdive --help
|
|
7
8
|
//
|
|
8
|
-
// Prints the cited markdown report to stdout
|
|
9
|
-
// when --verbose is set or DEEPDIVE_VERBOSE=1.
|
|
9
|
+
// Prints the cited markdown report to stdout (or JSON with --json). Progress
|
|
10
|
+
// events go to stderr when --verbose is set or DEEPDIVE_VERBOSE=1.
|
|
10
11
|
import { writeFileSync } from "node:fs";
|
|
11
12
|
import { resolve } from "node:path";
|
|
12
13
|
import { fileURLToPath } from "node:url";
|
|
13
14
|
import { resolveConfig } from "./config.js";
|
|
14
15
|
import { resolveSearchAdapter } from "./search.js";
|
|
15
16
|
import { runAgent } from "./agent.js";
|
|
17
|
+
import { createCache } from "./cache.js";
|
|
18
|
+
import { renderSourcesMarkdown } from "./citations.js";
|
|
19
|
+
import { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, } from "./doctor.js";
|
|
16
20
|
const USAGE = `deepdive — local research agent
|
|
17
21
|
|
|
18
22
|
Usage:
|
|
19
|
-
deepdive "<question>" [flags]
|
|
23
|
+
deepdive "<question>" [flags] Run the research agent
|
|
24
|
+
deepdive doctor [flags] Health check — paste the output when filing issues
|
|
25
|
+
deepdive --help Show this help
|
|
20
26
|
|
|
21
27
|
Flags:
|
|
22
28
|
--base-url=<url> LLM endpoint. Default: http://localhost:3456 (dario)
|
|
23
29
|
--api-key=<key> LLM API key. Default: dario
|
|
24
30
|
--model=<name> Model to use. Default: claude-sonnet-4-6
|
|
25
31
|
--max-tokens=<n> Output max tokens per LLM call. Default: 4096
|
|
26
|
-
--search=<adapter> Search adapter: duckduckgo | searxng | brave | tavily
|
|
32
|
+
--search=<adapter> Search adapter: duckduckgo | searxng | brave | tavily | exa
|
|
27
33
|
Default: duckduckgo (no key required)
|
|
28
34
|
--results-per-query=<n> Results per sub-query. Default: 5
|
|
29
35
|
--max-sources=<n> Total sources to fetch. Default: 12
|
|
30
36
|
--max-words-per-source=<n> Per-source content cap before synthesis. Default: 2000
|
|
31
|
-
--timeout-ms=<ms> Per-fetch timeout. Default: 30000
|
|
32
|
-
--
|
|
37
|
+
--timeout-ms=<ms> Per-fetch (browser) timeout. Default: 30000
|
|
38
|
+
--llm-timeout-ms=<ms> Per-LLM-call timeout. Default: 120000 (2 min)
|
|
39
|
+
--llm-attempts=<n> Max LLM attempts per call (with exponential
|
|
40
|
+
backoff on 5xx/429/network errors). Default: 3
|
|
41
|
+
--deep[=<n>] Iterative research: run N additional critic-driven
|
|
42
|
+
rounds after the first synthesis. Default when
|
|
43
|
+
bare: 2. No deep pass when flag absent.
|
|
44
|
+
--concurrency=<n> Parallel fetches. Default: 4
|
|
45
|
+
--no-cache Disable the on-disk page cache (default: enabled)
|
|
46
|
+
--cache-ttl-ms=<ms> Page cache TTL. Default: 3600000 (1 hour)
|
|
47
|
+
--ignore-robots Bypass robots.txt checks (default: respect them)
|
|
48
|
+
--json Emit a JSON result to stdout instead of markdown
|
|
49
|
+
--out=<path> Write the output (markdown or json) to a file too
|
|
33
50
|
--verbose, -v Stream progress events to stderr
|
|
51
|
+
--no-stream Buffer the final answer instead of streaming
|
|
52
|
+
tokens to stdout (auto-off for --json, deep
|
|
53
|
+
mode, and non-TTY stdout)
|
|
34
54
|
--help, -h Show this help
|
|
35
55
|
|
|
36
56
|
Environment:
|
|
37
57
|
DEEPDIVE_BASE_URL, DEEPDIVE_API_KEY, DEEPDIVE_MODEL, DEEPDIVE_SEARCH,
|
|
38
|
-
DEEPDIVE_SEARXNG_URL, DEEPDIVE_BRAVE_KEY, DEEPDIVE_TAVILY_KEY,
|
|
58
|
+
DEEPDIVE_SEARXNG_URL, DEEPDIVE_BRAVE_KEY, DEEPDIVE_TAVILY_KEY, DEEPDIVE_EXA_KEY,
|
|
39
59
|
DEEPDIVE_MAX_SOURCES, DEEPDIVE_FETCH_TIMEOUT_MS, DEEPDIVE_HEADED,
|
|
40
|
-
|
|
60
|
+
DEEPDIVE_DEEP_ROUNDS, DEEPDIVE_CONCURRENCY, DEEPDIVE_NO_CACHE,
|
|
61
|
+
DEEPDIVE_CACHE_DIR, DEEPDIVE_CACHE_TTL_MS, DEEPDIVE_JSON, DEEPDIVE_VERBOSE,
|
|
62
|
+
DEEPDIVE_LLM_TIMEOUT_MS, DEEPDIVE_LLM_ATTEMPTS
|
|
41
63
|
`;
|
|
42
64
|
// Exported for unit tests.
|
|
43
65
|
export function parseArgs(argv) {
|
|
@@ -54,6 +76,26 @@ export function parseArgs(argv) {
|
|
|
54
76
|
flags.verbose = true;
|
|
55
77
|
continue;
|
|
56
78
|
}
|
|
79
|
+
if (a === "--no-cache") {
|
|
80
|
+
flags.noCache = true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (a === "--ignore-robots") {
|
|
84
|
+
flags.ignoreRobots = true;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (a === "--json") {
|
|
88
|
+
flags.json = true;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (a === "--no-stream") {
|
|
92
|
+
flags.noStream = true;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (a === "--deep") {
|
|
96
|
+
flags.deepRounds = 2;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
57
99
|
const m = /^--([a-z0-9-]+)=(.*)$/.exec(a);
|
|
58
100
|
if (m) {
|
|
59
101
|
const [, key, rawValue] = m;
|
|
@@ -86,6 +128,21 @@ export function parseArgs(argv) {
|
|
|
86
128
|
case "timeout-ms":
|
|
87
129
|
flags.timeoutMs = parsePositiveInt(value);
|
|
88
130
|
break;
|
|
131
|
+
case "llm-timeout-ms":
|
|
132
|
+
flags.llmTimeoutMs = parsePositiveInt(value);
|
|
133
|
+
break;
|
|
134
|
+
case "llm-attempts":
|
|
135
|
+
flags.llmAttempts = parsePositiveInt(value);
|
|
136
|
+
break;
|
|
137
|
+
case "deep":
|
|
138
|
+
flags.deepRounds = parseNonNegativeInt(value);
|
|
139
|
+
break;
|
|
140
|
+
case "concurrency":
|
|
141
|
+
flags.concurrency = parsePositiveInt(value);
|
|
142
|
+
break;
|
|
143
|
+
case "cache-ttl-ms":
|
|
144
|
+
flags.cacheTtlMs = parsePositiveInt(value);
|
|
145
|
+
break;
|
|
89
146
|
case "out":
|
|
90
147
|
outPath = value;
|
|
91
148
|
break;
|
|
@@ -111,53 +168,104 @@ function parsePositiveInt(s) {
|
|
|
111
168
|
const n = Number(s);
|
|
112
169
|
return Number.isFinite(n) && n > 0 ? n : undefined;
|
|
113
170
|
}
|
|
171
|
+
function parseNonNegativeInt(s) {
|
|
172
|
+
if (!/^\d+$/.test(s))
|
|
173
|
+
return undefined;
|
|
174
|
+
const n = Number(s);
|
|
175
|
+
return Number.isFinite(n) && n >= 0 ? n : undefined;
|
|
176
|
+
}
|
|
114
177
|
function renderEvent(e) {
|
|
115
178
|
switch (e.type) {
|
|
116
179
|
case "plan.start":
|
|
117
180
|
return ` plan planning sub-queries for: ${ellipsize(e.question, 60)}`;
|
|
118
181
|
case "plan.done":
|
|
119
182
|
return ` plan ${e.plan.queries.length} sub-queries`;
|
|
183
|
+
case "round.start":
|
|
184
|
+
return ` round ${e.round === 0 ? "initial" : "deep " + e.round} · ${e.queries.length} quer${e.queries.length === 1 ? "y" : "ies"}`;
|
|
120
185
|
case "search.start":
|
|
121
186
|
return ` search ${e.query}`;
|
|
122
187
|
case "search.done":
|
|
123
188
|
return ` ${e.count} result${e.count === 1 ? "" : "s"}`;
|
|
124
189
|
case "fetch.start":
|
|
125
|
-
return ` fetch ${e.url}`;
|
|
190
|
+
return ` fetch ${e.cached ? "(cached) " : ""}${e.url}`;
|
|
126
191
|
case "fetch.done":
|
|
127
|
-
return ` ${e.ok ? "OK " : "!! "}${e.status} · ${e.words} words`;
|
|
192
|
+
return ` ${e.ok ? "OK " : "!! "}${e.status} · ${e.words} words${e.cached ? " · cache" : ""}`;
|
|
193
|
+
case "fetch.skipped":
|
|
194
|
+
return ` fetch skipped (${e.reason}) ${e.url}`;
|
|
128
195
|
case "synthesize.start":
|
|
129
|
-
return ` synth
|
|
196
|
+
return ` synth round ${e.round} · ${e.sourceCount} source${e.sourceCount === 1 ? "" : "s"}`;
|
|
130
197
|
case "synthesize.done":
|
|
131
|
-
return ` synth done`;
|
|
198
|
+
return ` synth round ${e.round} done`;
|
|
199
|
+
case "critique.start":
|
|
200
|
+
return ` critic reviewing round ${e.round}`;
|
|
201
|
+
case "critique.done":
|
|
202
|
+
return e.critique.done
|
|
203
|
+
? ` critic answer complete (${e.critique.reasoning || "no reasoning given"})`
|
|
204
|
+
: ` critic ${e.critique.queries.length} follow-up quer${e.critique.queries.length === 1 ? "y" : "ies"}`;
|
|
132
205
|
}
|
|
133
206
|
}
|
|
134
207
|
function ellipsize(s, max) {
|
|
135
208
|
return s.length <= max ? s : s.slice(0, max - 1) + "…";
|
|
136
209
|
}
|
|
210
|
+
// Exported for unit tests. User-facing error rendering at the CLI boundary.
|
|
211
|
+
// Runs the error message through scrubPath so the user's home directory can
|
|
212
|
+
// never end up in a bug report.
|
|
213
|
+
export function safeErrorMessage(err) {
|
|
214
|
+
const raw = err instanceof Error ? err.message : String(err ?? "unknown error");
|
|
215
|
+
return scrubPath(raw);
|
|
216
|
+
}
|
|
217
|
+
// Matches the escaping used by renderAnswerMarkdown for the H1 heading — keep
|
|
218
|
+
// the streaming header identical to the buffered one so users can diff them.
|
|
219
|
+
function escapeHeader(s) {
|
|
220
|
+
return s.replace(/[\r\n]+/g, " ").replace(/\[/g, "(").replace(/\]/g, ")");
|
|
221
|
+
}
|
|
137
222
|
async function main(argv) {
|
|
138
223
|
let parsed;
|
|
139
224
|
try {
|
|
140
225
|
parsed = parseArgs(argv);
|
|
141
226
|
}
|
|
142
227
|
catch (err) {
|
|
143
|
-
process.stderr.write(`deepdive: ${err
|
|
228
|
+
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n\n${USAGE}`);
|
|
144
229
|
return 2;
|
|
145
230
|
}
|
|
146
231
|
if (parsed.help) {
|
|
147
232
|
process.stdout.write(USAGE);
|
|
148
233
|
return 0;
|
|
149
234
|
}
|
|
235
|
+
if (parsed.question === "doctor") {
|
|
236
|
+
const config = resolveConfig(parsed.flags, process.env);
|
|
237
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
238
|
+
const report = await runDoctor({ config, env: process.env });
|
|
239
|
+
const out = config.jsonOutput
|
|
240
|
+
? renderDoctorJson(report)
|
|
241
|
+
: renderDoctorText(report, { color: useColor }) + "\n";
|
|
242
|
+
process.stdout.write(out);
|
|
243
|
+
return exitCodeFor(report);
|
|
244
|
+
}
|
|
150
245
|
if (!parsed.question) {
|
|
151
246
|
process.stderr.write(`deepdive: missing question.\n\n${USAGE}`);
|
|
152
247
|
return 2;
|
|
153
248
|
}
|
|
154
249
|
const config = resolveConfig(parsed.flags, process.env);
|
|
155
250
|
const search = await resolveSearchAdapter(config.searchAdapter, process.env);
|
|
251
|
+
const cache = config.cache.enabled
|
|
252
|
+
? createCache({ dir: config.cache.dir, ttlMs: config.cache.ttlMs })
|
|
253
|
+
: undefined;
|
|
156
254
|
const ac = new AbortController();
|
|
157
255
|
const sigint = () => ac.abort();
|
|
158
256
|
process.on("SIGINT", sigint);
|
|
159
257
|
process.on("SIGTERM", sigint);
|
|
258
|
+
// Live-streaming requires an attached TTY: escape sequences, partial line
|
|
259
|
+
// writes, and interactive buffering behave weirdly when stdout is a pipe.
|
|
260
|
+
// Env-var-only: tests can set FORCE_TTY=1 to exercise the streaming path
|
|
261
|
+
// without a real terminal.
|
|
262
|
+
const streaming = config.streamEnabled &&
|
|
263
|
+
(process.stdout.isTTY || process.env.DEEPDIVE_FORCE_STREAM === "1");
|
|
264
|
+
let streamed = false;
|
|
160
265
|
try {
|
|
266
|
+
if (streaming) {
|
|
267
|
+
process.stdout.write(`# ${escapeHeader(parsed.question)}\n\n`);
|
|
268
|
+
}
|
|
161
269
|
const result = await runAgent(parsed.question, {
|
|
162
270
|
llm: config.llm,
|
|
163
271
|
search,
|
|
@@ -165,23 +273,61 @@ async function main(argv) {
|
|
|
165
273
|
resultsPerQuery: config.resultsPerQuery,
|
|
166
274
|
maxSources: config.maxSources,
|
|
167
275
|
maxWordsPerSource: config.maxWordsPerSource,
|
|
276
|
+
deepRounds: config.deepRounds,
|
|
277
|
+
concurrency: config.concurrency,
|
|
278
|
+
cache,
|
|
279
|
+
respectRobots: config.respectRobots,
|
|
168
280
|
onEvent: (e) => {
|
|
169
281
|
if (config.verbose)
|
|
170
282
|
process.stderr.write(renderEvent(e) + "\n");
|
|
171
283
|
},
|
|
284
|
+
onSynthesizeToken: streaming
|
|
285
|
+
? (chunk) => {
|
|
286
|
+
streamed = true;
|
|
287
|
+
process.stdout.write(chunk);
|
|
288
|
+
}
|
|
289
|
+
: undefined,
|
|
172
290
|
}, ac.signal);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
291
|
+
if (streaming && streamed) {
|
|
292
|
+
// Streaming mode already wrote the header + answer tokens. Close with
|
|
293
|
+
// the sources block and (if requested) write the full markdown to the
|
|
294
|
+
// output file too.
|
|
295
|
+
const tail = "\n\n" + renderSourcesMarkdown(result.sources);
|
|
296
|
+
process.stdout.write(tail);
|
|
297
|
+
if (!tail.endsWith("\n"))
|
|
298
|
+
process.stdout.write("\n");
|
|
299
|
+
if (parsed.outPath) {
|
|
300
|
+
const path = resolve(parsed.outPath);
|
|
301
|
+
writeFileSync(path, result.markdown, "utf-8");
|
|
302
|
+
process.stderr.write(`\nwrote ${path}\n`);
|
|
303
|
+
}
|
|
304
|
+
return 0;
|
|
305
|
+
}
|
|
306
|
+
const output = config.jsonOutput
|
|
307
|
+
? JSON.stringify({
|
|
308
|
+
question: result.question,
|
|
309
|
+
plan: result.plan,
|
|
310
|
+
rounds: result.rounds,
|
|
311
|
+
sources: result.sources.map((s) => ({
|
|
312
|
+
id: s.id,
|
|
313
|
+
url: s.url,
|
|
314
|
+
title: s.title,
|
|
315
|
+
fetchedAt: s.fetchedAt,
|
|
316
|
+
})),
|
|
317
|
+
answer: result.answer,
|
|
318
|
+
usage: result.usage,
|
|
319
|
+
}, null, 2) + "\n"
|
|
320
|
+
: result.markdown + (result.markdown.endsWith("\n") ? "" : "\n");
|
|
321
|
+
process.stdout.write(output);
|
|
176
322
|
if (parsed.outPath) {
|
|
177
323
|
const path = resolve(parsed.outPath);
|
|
178
|
-
writeFileSync(path,
|
|
324
|
+
writeFileSync(path, output, "utf-8");
|
|
179
325
|
process.stderr.write(`\nwrote ${path}\n`);
|
|
180
326
|
}
|
|
181
327
|
return 0;
|
|
182
328
|
}
|
|
183
329
|
catch (err) {
|
|
184
|
-
process.stderr.write(`deepdive: ${err
|
|
330
|
+
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n`);
|
|
185
331
|
return 1;
|
|
186
332
|
}
|
|
187
333
|
finally {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,sBAAsB;AACtB,EAAE;AACF,mDAAmD;AACnD,0EAA0E;AAC1E,oBAAoB;AACpB,EAAE;AACF,2EAA2E;AAC3E,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AAEvD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC;AASF,2BAA2B;AAC3B,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAA4B,CAAC;IACjC,IAAI,OAA2B,CAAC;IAChC,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,UAAU;oBACb,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;oBACtB,MAAM;gBACR,KAAK,SAAS;oBACZ,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,QAAQ;oBACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM;gBACR,KAAK,mBAAmB;oBACtB,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,sBAAsB;oBACzB,KAAK,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,KAAK;oBACR,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,2CAA2C,CAAC,gBAAgB,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,CAAa;IAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,uCAAuC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5E,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,cAAc,CAAC;QAC1D,KAAK,cAAc;YACjB,OAAO,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAClE,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,KAAK,QAAQ,CAAC;QAC3E,KAAK,kBAAkB;YACrB,OAAO,+BAA+B,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAChG,KAAK,iBAAiB;YACpB,OAAO,gBAAgB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,GAAW;IACvC,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAc,GAAa,CAAC,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,MAAM,CAAC,QAAQ,EACf;YACE,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACb,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAClE,CAAC;SACF,EACD,EAAE,CAAC,MAAM,CACV,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAc,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,2CAA2C;AAC3C,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IAC7B,CAAC,GAAG,EAAE;QACJ,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AAEP,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../src/concurrency.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,EAAE,CAAC,CA6Bd"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Minimal worker-pool concurrency helper. Runs `fn` across `items` with at
|
|
2
|
+
// most `concurrency` in flight at once. Preserves input order in the result
|
|
3
|
+
// array. Aborts early if `signal` fires, rejecting with the abort reason.
|
|
4
|
+
//
|
|
5
|
+
// Kept separate from agent.ts so it's reusable and trivially testable.
|
|
6
|
+
export async function runConcurrent(items, concurrency, fn, signal) {
|
|
7
|
+
if (concurrency < 1)
|
|
8
|
+
throw new Error(`concurrency must be >= 1 (got ${concurrency})`);
|
|
9
|
+
if (items.length === 0)
|
|
10
|
+
return [];
|
|
11
|
+
const results = new Array(items.length);
|
|
12
|
+
let next = 0;
|
|
13
|
+
let aborted = false;
|
|
14
|
+
const abortCheck = () => {
|
|
15
|
+
if (signal?.aborted)
|
|
16
|
+
aborted = true;
|
|
17
|
+
};
|
|
18
|
+
async function worker() {
|
|
19
|
+
while (true) {
|
|
20
|
+
abortCheck();
|
|
21
|
+
if (aborted)
|
|
22
|
+
return;
|
|
23
|
+
const i = next++;
|
|
24
|
+
if (i >= items.length)
|
|
25
|
+
return;
|
|
26
|
+
results[i] = await fn(items[i], i);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const workers = [];
|
|
30
|
+
const n = Math.min(concurrency, items.length);
|
|
31
|
+
for (let i = 0; i < n; i++)
|
|
32
|
+
workers.push(worker());
|
|
33
|
+
await Promise.all(workers);
|
|
34
|
+
if (aborted)
|
|
35
|
+
throw new Error("aborted");
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../src/concurrency.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAU,EACV,WAAmB,EACnB,EAA0C,EAC1C,MAAoB;IAEpB,IAAI,WAAW,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,WAAW,GAAG,CAAC,CAAC;IACtF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC;IACtC,CAAC,CAAC;IAEF,KAAK,UAAU,MAAM;QACnB,OAAO,IAAI,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAC9B,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3B,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -7,6 +7,16 @@ export interface RuntimeConfig {
|
|
|
7
7
|
resultsPerQuery: number;
|
|
8
8
|
maxSources: number;
|
|
9
9
|
maxWordsPerSource: number;
|
|
10
|
+
deepRounds: number;
|
|
11
|
+
concurrency: number;
|
|
12
|
+
cache: {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
dir: string;
|
|
15
|
+
ttlMs: number;
|
|
16
|
+
};
|
|
17
|
+
respectRobots: boolean;
|
|
18
|
+
jsonOutput: boolean;
|
|
19
|
+
streamEnabled: boolean;
|
|
10
20
|
verbose: boolean;
|
|
11
21
|
}
|
|
12
22
|
export interface CLIFlags {
|
|
@@ -19,8 +29,18 @@ export interface CLIFlags {
|
|
|
19
29
|
maxSources?: number;
|
|
20
30
|
maxWordsPerSource?: number;
|
|
21
31
|
timeoutMs?: number;
|
|
32
|
+
llmTimeoutMs?: number;
|
|
33
|
+
llmAttempts?: number;
|
|
34
|
+
deepRounds?: number;
|
|
35
|
+
concurrency?: number;
|
|
36
|
+
noCache?: boolean;
|
|
37
|
+
cacheTtlMs?: number;
|
|
38
|
+
ignoreRobots?: boolean;
|
|
39
|
+
json?: boolean;
|
|
40
|
+
noStream?: boolean;
|
|
22
41
|
verbose?: boolean;
|
|
23
42
|
}
|
|
24
43
|
export declare function resolveConfig(flags: CLIFlags, env: Record<string, string | undefined>): RuntimeConfig;
|
|
25
44
|
export declare function parsePositiveInt(s: string | undefined): number | undefined;
|
|
45
|
+
export declare function parseNonNegativeInt(s: string | undefined): number | undefined;
|
|
26
46
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,aAAa,CAyGf;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO1E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO7E"}
|
package/dist/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Config resolution — merges CLI flags, env vars, and defaults.
|
|
2
|
-
//
|
|
3
|
-
|
|
2
|
+
// Env vars are prefixed DEEPDIVE_* to avoid collisions in the user's shell.
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
4
5
|
const DEFAULTS = {
|
|
5
6
|
baseUrl: "http://localhost:3456",
|
|
6
7
|
apiKey: "dario",
|
|
@@ -12,6 +13,11 @@ const DEFAULTS = {
|
|
|
12
13
|
maxWordsPerSource: 2000,
|
|
13
14
|
timeoutMs: 30000,
|
|
14
15
|
maxBytesPerFetch: 2_000_000,
|
|
16
|
+
deepRounds: 0,
|
|
17
|
+
concurrency: 4,
|
|
18
|
+
cacheTtlMs: 60 * 60 * 1000, // 1 hour
|
|
19
|
+
llmTimeoutMs: 120_000, // 2 minutes per LLM call
|
|
20
|
+
llmAttempts: 3,
|
|
15
21
|
};
|
|
16
22
|
export function resolveConfig(flags, env) {
|
|
17
23
|
const baseUrl = flags.baseUrl ?? env.DEEPDIVE_BASE_URL ?? DEFAULTS.baseUrl;
|
|
@@ -33,9 +39,46 @@ export function resolveConfig(flags, env) {
|
|
|
33
39
|
const timeoutMs = flags.timeoutMs ??
|
|
34
40
|
parsePositiveInt(env.DEEPDIVE_FETCH_TIMEOUT_MS) ??
|
|
35
41
|
DEFAULTS.timeoutMs;
|
|
42
|
+
const llmTimeoutMs = flags.llmTimeoutMs ??
|
|
43
|
+
parsePositiveInt(env.DEEPDIVE_LLM_TIMEOUT_MS) ??
|
|
44
|
+
DEFAULTS.llmTimeoutMs;
|
|
45
|
+
const llmAttempts = flags.llmAttempts ??
|
|
46
|
+
parsePositiveInt(env.DEEPDIVE_LLM_ATTEMPTS) ??
|
|
47
|
+
DEFAULTS.llmAttempts;
|
|
48
|
+
const deepRounds = flags.deepRounds ??
|
|
49
|
+
parseNonNegativeInt(env.DEEPDIVE_DEEP_ROUNDS) ??
|
|
50
|
+
DEFAULTS.deepRounds;
|
|
51
|
+
const concurrency = flags.concurrency ??
|
|
52
|
+
parsePositiveInt(env.DEEPDIVE_CONCURRENCY) ??
|
|
53
|
+
DEFAULTS.concurrency;
|
|
54
|
+
const cacheEnabled = flags.noCache === true
|
|
55
|
+
? false
|
|
56
|
+
: env.DEEPDIVE_NO_CACHE === "1"
|
|
57
|
+
? false
|
|
58
|
+
: true;
|
|
59
|
+
const cacheDir = env.DEEPDIVE_CACHE_DIR ?? join(homedir(), ".deepdive", "cache");
|
|
60
|
+
const cacheTtlMs = flags.cacheTtlMs ??
|
|
61
|
+
parsePositiveInt(env.DEEPDIVE_CACHE_TTL_MS) ??
|
|
62
|
+
DEFAULTS.cacheTtlMs;
|
|
63
|
+
const respectRobots = !(flags.ignoreRobots ?? env.DEEPDIVE_IGNORE_ROBOTS === "1");
|
|
64
|
+
const jsonOutput = flags.json ?? env.DEEPDIVE_JSON === "1";
|
|
65
|
+
const streamOptOut = flags.noStream ?? env.DEEPDIVE_NO_STREAM === "1";
|
|
66
|
+
// Streaming is on by default but gets auto-disabled for:
|
|
67
|
+
// - JSON output (we buffer into the JSON envelope)
|
|
68
|
+
// - Deep mode (intermediate rounds would print multiple full drafts back-to-back)
|
|
69
|
+
// - Explicit --no-stream
|
|
70
|
+
// CLI can further require stdout.isTTY before enabling.
|
|
71
|
+
const streamEnabled = !streamOptOut && !jsonOutput && deepRounds === 0;
|
|
36
72
|
const verbose = flags.verbose ?? env.DEEPDIVE_VERBOSE === "1";
|
|
37
73
|
return {
|
|
38
|
-
llm: {
|
|
74
|
+
llm: {
|
|
75
|
+
baseUrl,
|
|
76
|
+
apiKey,
|
|
77
|
+
model,
|
|
78
|
+
maxTokens,
|
|
79
|
+
timeoutMs: llmTimeoutMs,
|
|
80
|
+
maxAttempts: llmAttempts,
|
|
81
|
+
},
|
|
39
82
|
browser: {
|
|
40
83
|
headless: env.DEEPDIVE_HEADED === "1" ? false : true,
|
|
41
84
|
timeoutMs,
|
|
@@ -45,6 +88,12 @@ export function resolveConfig(flags, env) {
|
|
|
45
88
|
resultsPerQuery,
|
|
46
89
|
maxSources,
|
|
47
90
|
maxWordsPerSource,
|
|
91
|
+
deepRounds,
|
|
92
|
+
concurrency,
|
|
93
|
+
cache: { enabled: cacheEnabled, dir: cacheDir, ttlMs: cacheTtlMs },
|
|
94
|
+
respectRobots,
|
|
95
|
+
jsonOutput,
|
|
96
|
+
streamEnabled,
|
|
48
97
|
verbose,
|
|
49
98
|
};
|
|
50
99
|
}
|
|
@@ -60,4 +109,16 @@ export function parsePositiveInt(s) {
|
|
|
60
109
|
return undefined;
|
|
61
110
|
return n;
|
|
62
111
|
}
|
|
112
|
+
// Exported for unit tests.
|
|
113
|
+
export function parseNonNegativeInt(s) {
|
|
114
|
+
if (!s)
|
|
115
|
+
return undefined;
|
|
116
|
+
const trimmed = s.trim();
|
|
117
|
+
if (!/^\d+$/.test(trimmed))
|
|
118
|
+
return undefined;
|
|
119
|
+
const n = Number(trimmed);
|
|
120
|
+
if (!Number.isFinite(n) || n < 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
return n;
|
|
123
|
+
}
|
|
63
124
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { RuntimeConfig } from "./config.js";
|
|
2
|
+
export type CheckStatus = "ok" | "warn" | "fail" | "info";
|
|
3
|
+
export interface CheckResult {
|
|
4
|
+
id: string;
|
|
5
|
+
category: string;
|
|
6
|
+
status: CheckStatus;
|
|
7
|
+
label: string;
|
|
8
|
+
detail: string;
|
|
9
|
+
durationMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface DoctorReport {
|
|
12
|
+
version: string;
|
|
13
|
+
generatedAt: number;
|
|
14
|
+
checks: CheckResult[];
|
|
15
|
+
summary: {
|
|
16
|
+
total: number;
|
|
17
|
+
ok: number;
|
|
18
|
+
warn: number;
|
|
19
|
+
fail: number;
|
|
20
|
+
info: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface DoctorOptions {
|
|
24
|
+
config: RuntimeConfig;
|
|
25
|
+
env: Record<string, string | undefined>;
|
|
26
|
+
skipLLM?: boolean;
|
|
27
|
+
skipSearch?: boolean;
|
|
28
|
+
skipBrowser?: boolean;
|
|
29
|
+
skipCache?: boolean;
|
|
30
|
+
fetchImpl?: typeof fetch;
|
|
31
|
+
now?: () => number;
|
|
32
|
+
}
|
|
33
|
+
export declare function runDoctor(opts: DoctorOptions): Promise<DoctorReport>;
|
|
34
|
+
export declare function renderDoctorText(report: DoctorReport, opts?: {
|
|
35
|
+
color?: boolean;
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function renderDoctorJson(report: DoctorReport): string;
|
|
38
|
+
export declare function exitCodeFor(report: DoctorReport): number;
|
|
39
|
+
export declare function nodeMeetsMinimum(versionString: string): boolean;
|
|
40
|
+
export declare function formatBytes(n: number): string;
|
|
41
|
+
export declare function formatDuration(ms: number): string;
|
|
42
|
+
export declare function classifyFetchError(err: unknown): string;
|
|
43
|
+
export declare function scrubPath(s: string): string;
|
|
44
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAClF;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAqB1E;AAyTD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CA+B7F;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE7D;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAExD;AAcD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAI/D;AA+CD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAGD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASjD;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAUvD;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
|