@askalf/deepdive 0.16.0 → 0.18.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 +25 -2
- package/dist/agent.d.ts +3 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +23 -0
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +191 -21
- package/dist/cli.js.map +1 -1
- package/dist/config-file.d.ts.map +1 -1
- package/dist/config-file.js +3 -0
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/search/multi.d.ts +9 -0
- package/dist/search/multi.d.ts.map +1 -0
- package/dist/search/multi.js +61 -0
- package/dist/search/multi.js.map +1 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +18 -0
- package/dist/search.js.map +1 -1
- package/dist/sessions.d.ts +5 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +40 -1
- package/dist/sessions.js.map +1 -1
- package/dist/similarity.d.ts +5 -0
- package/dist/similarity.d.ts.map +1 -0
- package/dist/similarity.js +53 -0
- package/dist/similarity.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -194,6 +194,8 @@ Two signals that help you read a report at a glance.
|
|
|
194
194
|
deepdive "best way to deploy a node app in 2026" --since=365d --deep
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
+
**Near-duplicate dedup.** The same article syndicated across hosts (wire stories, mirrors, AMP copies) survives URL-level dedupe but wastes a source slot and pads the synth context with repeated text. deepdive drops a fetched source whose extracted content is ≥ 90% shingle-similar (word 5-gram Jaccard) to one already kept — `near-duplicate` in `--verbose`. The 0.9 default only fires on genuine copies; two different articles on the same topic typically score under 0.3. Tune with `--dedupe-threshold=<0..1>` or turn it off with `--no-dedupe` (`DEEPDIVE_NO_DEDUPE=1`). Sources you brought deliberately (`--include`, `continue`) are never dropped — they act as dedupe anchors instead, so a re-search can't re-add a copy of what you already have.
|
|
198
|
+
|
|
197
199
|
**Confidence.** After each run, alongside the cost line, deepdive prints a one-line coverage read:
|
|
198
200
|
|
|
199
201
|
```
|
|
@@ -429,6 +431,14 @@ One adapter per backend. Default (DuckDuckGo) needs no key.
|
|
|
429
431
|
| PubMed | `--search=pubmed` | nothing | Biomedical literature via NCBI E-utilities. Kept sources are abstract pages; snippet shows authors/journal/date. |
|
|
430
432
|
| Semantic Scholar | `--search=semanticscholar` (`s2`) | `DEEPDIVE_S2_KEY` (recommended) | Academic paper search. Keyless works but is heavily rate-limited (frequent 429s); a free API key makes it reliable. Snippet shows citations/year/authors. |
|
|
431
433
|
| OpenAlex | `--search=openalex` | nothing | ~250M scholarly works, all disciplines. Keyless; set `DEEPDIVE_OPENALEX_MAILTO` to join the faster "polite pool". Sources are landing pages / DOIs. |
|
|
434
|
+
| Multi | `--search=multi:<a>,<b>[,...]` | whatever the parts need | Fan-out: queries every listed adapter concurrently, interleaves results round-robin, dedupes by URL. A throttled backend doesn't sink the round — it throws only if *all* fail. |
|
|
435
|
+
|
|
436
|
+
The fan-out is how the adapter fleet composes: one general-web engine plus one or two domain engines gives the planner a source pool no single backend returns.
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
deepdive "are transformer alternatives viable in 2026" \
|
|
440
|
+
--search=multi:duckduckgo,arxiv,semanticscholar --deep
|
|
441
|
+
```
|
|
432
442
|
|
|
433
443
|
Adding a new adapter is ~30 lines: implement `SearchAdapter` in `src/search/*.ts`, register in `src/search.ts`. The full contract + a copy-paste scaffold live in [docs/search-adapter.md](docs/search-adapter.md).
|
|
434
444
|
|
|
@@ -500,8 +510,11 @@ session 2026-05-07_134509_5959f102 (deepdive resume 2026-05-07_134509_5959f102
|
|
|
500
510
|
Four subcommands operate on saved sessions:
|
|
501
511
|
|
|
502
512
|
```bash
|
|
503
|
-
deepdive sessions ls [<filter>] # newest first; optional
|
|
513
|
+
deepdive sessions ls [<filter>] # newest first; optional question filter; --tag=<t> filters by tag
|
|
514
|
+
deepdive sessions tag <id> client-x,audit # retro-label a session (tags also settable at run time: --tag)
|
|
515
|
+
deepdive sessions untag <id> audit # remove labels
|
|
504
516
|
deepdive stats # totals: cost, sources, rounds, per-model breakdown, date span
|
|
517
|
+
deepdive stats --tag=client-x # same, scoped to one tag — e.g. per-client research spend
|
|
505
518
|
deepdive sessions rm <id> [<id>...] # delete one or more sessions
|
|
506
519
|
deepdive sessions prune --older-than=30d # delete old sessions (and/or --keep=N; --dry-run to preview)
|
|
507
520
|
deepdive show <id> # re-print the original markdown answer
|
|
@@ -517,6 +530,8 @@ deepdive diff <id-a> <id-b> # how the answer + sources changed
|
|
|
517
530
|
|
|
518
531
|
IDs are timestamp-prefixed (`YYYY-MM-DD_HHMMSS_<8-hex>`), so they sort chronologically and you can pass a unique prefix instead of typing the full id (`deepdive resume 2026-05-07_134509`).
|
|
519
532
|
|
|
533
|
+
**Tags** organize the corpus. Label a run as you make it (`deepdive "..." --tag=client-x,audit`, or `DEEPDIVE_TAGS` / a config-file `tags` default), or after the fact with `sessions tag`. Tags are normalized lowercase, render as `#client-x` in listings, and scope both `sessions ls --tag=<t>` and `stats --tag=<t>` — so "what has research for client X cost this month" is one command. The `--tag` *filter* only ever comes from the explicit flag; a config-file default tag labels new runs but never silently hides sessions from listings.
|
|
534
|
+
|
|
520
535
|
`prune` keeps your local corpus from growing unbounded. `--older-than` takes a duration (`30d`, `12h`, `90m`, `2w`, or a bare integer = days); `--keep=N` always retains the newest N regardless of age; pass both and a session is removed only when it's past the keep-newest set *and* older than the cutoff. `--dry-run` prints exactly what would go without deleting anything. With neither flag, `prune` refuses to run — it will never wipe your history by default.
|
|
521
536
|
|
|
522
537
|
Disable with `--no-sessions` or `DEEPDIVE_NO_SESSIONS=1`. Change the dir with `DEEPDIVE_SESSIONS_DIR`.
|
|
@@ -563,7 +578,15 @@ diff 2026-05-07_120000_aaaaaaaa → 2026-06-01_120000_bbbbbbbb
|
|
|
563
578
|
+ the 5-hour bucket resets at a fixed UTC boundary [2]
|
|
564
579
|
```
|
|
565
580
|
|
|
566
|
-
The source-set delta (added / removed / shared) is keyed on the normalized URL, and the answer diff is a deterministic line diff with collapsed unchanged context. Add `--narrate` for a one-shot LLM summary of what *substantively* changed — new claims, dropped claims, reversals — instead of reading the line diff yourself. `--json` emits the structured diff (and narration) for piping.
|
|
581
|
+
The source-set delta (added / removed / shared) is keyed on the normalized URL, and the answer diff is a deterministic line diff with collapsed unchanged context. Add `--narrate` for a one-shot LLM summary of what *substantively* changed — new claims, dropped claims, reversals — instead of reading the line diff yourself. `--json` emits the structured diff (and narration) for piping.
|
|
582
|
+
|
|
583
|
+
**Or do the whole loop in one command.** `deepdive rerun <id>` re-runs a saved session's question **fresh** — new search, new fetches, deliberately *not* seeded with the parent's sources (that's `continue`), so the two runs are independent snapshots — saves the result as a new session linked via `parentId` with the parent's tags inherited, and then prints the diff automatically:
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
deepdive rerun 2026-05-07 --narrate # monthly check on a fast-moving topic
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
`rerun` vs `continue`: `continue` *extends* a corpus (keeps the parent's sources, adds pages — answer quality compounds). `rerun` *re-measures* (fresh corpus — what does the web say now?). Use `continue` to go deeper, `rerun` to track change over time.
|
|
567
590
|
|
|
568
591
|
---
|
|
569
592
|
|
package/dist/agent.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export interface AgentConfig {
|
|
|
42
42
|
env?: Record<string, string | undefined>;
|
|
43
43
|
tldr?: boolean;
|
|
44
44
|
sinceMs?: number;
|
|
45
|
+
dedupeNearDupes?: boolean;
|
|
46
|
+
nearDupeThreshold?: number;
|
|
45
47
|
onEvent?: (event: AgentEvent) => void;
|
|
46
48
|
onSynthesizeToken?: (chunk: string, round: number) => void;
|
|
47
49
|
}
|
|
@@ -76,7 +78,7 @@ export type AgentEvent = {
|
|
|
76
78
|
} | {
|
|
77
79
|
type: "fetch.skipped";
|
|
78
80
|
url: string;
|
|
79
|
-
reason: "robots" | "pdf-no-extractor" | "pdf-extract-error" | "domain-deny" | "domain-not-allowed" | "stale";
|
|
81
|
+
reason: "robots" | "pdf-no-extractor" | "pdf-extract-error" | "domain-deny" | "domain-not-allowed" | "stale" | "near-duplicate";
|
|
80
82
|
} | {
|
|
81
83
|
type: "include.done";
|
|
82
84
|
ingested: number;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAUA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAyB,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAkB,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGrF,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -20,6 +20,7 @@ import { enforceBudget } from "./budget.js";
|
|
|
20
20
|
import { extractPdfText, PdfExtractorMissingError, looksLikePdf, } from "./pdf.js";
|
|
21
21
|
import { ingestLocalPaths } from "./local.js";
|
|
22
22
|
import { extractPublishedDate } from "./dates.js";
|
|
23
|
+
import { contentShingles, findNearDuplicate, DEFAULT_NEAR_DUPE_THRESHOLD, } from "./similarity.js";
|
|
23
24
|
import { classifyUrl } from "./domain-filter.js";
|
|
24
25
|
import { runConcurrent } from "./concurrency.js";
|
|
25
26
|
import { canFetch, DEFAULT_USER_AGENT, } from "./robots.js";
|
|
@@ -82,6 +83,10 @@ export async function runAgent(question, config, signal) {
|
|
|
82
83
|
const allCandidates = [];
|
|
83
84
|
const allQueries = [];
|
|
84
85
|
const keptSources = [];
|
|
86
|
+
// Shingle sets for near-dup detection, lazily synced to keptSources so
|
|
87
|
+
// include[]/preKept entries (pushed below without touching this array)
|
|
88
|
+
// still participate as dedupe anchors.
|
|
89
|
+
const keptShingles = [];
|
|
85
90
|
const rounds = [];
|
|
86
91
|
// Local file ingestion: pre-fetched sources are placed at the head of
|
|
87
92
|
// the kept-sources list so they get the lowest [N] citation ids and
|
|
@@ -254,6 +259,24 @@ export async function runAgent(question, config, signal) {
|
|
|
254
259
|
});
|
|
255
260
|
continue;
|
|
256
261
|
}
|
|
262
|
+
// Near-duplicate dedup: drop a source whose content is shingle-
|
|
263
|
+
// similar to one already kept (syndicated copy on another host).
|
|
264
|
+
if (config.dedupeNearDupes !== false) {
|
|
265
|
+
while (keptShingles.length < keptSources.length) {
|
|
266
|
+
keptShingles.push(contentShingles(keptSources[keptShingles.length].content));
|
|
267
|
+
}
|
|
268
|
+
const candidateShingles = contentShingles(content);
|
|
269
|
+
const dupOf = findNearDuplicate(candidateShingles, keptShingles, config.nearDupeThreshold ?? DEFAULT_NEAR_DUPE_THRESHOLD);
|
|
270
|
+
if (dupOf !== -1) {
|
|
271
|
+
emit(config, {
|
|
272
|
+
type: "fetch.skipped",
|
|
273
|
+
url: f.page.finalUrl || f.page.url,
|
|
274
|
+
reason: "near-duplicate",
|
|
275
|
+
});
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
keptShingles.push(candidateShingles);
|
|
279
|
+
}
|
|
257
280
|
keptSources.push({
|
|
258
281
|
id: keptSources.length + 1,
|
|
259
282
|
url: f.page.finalUrl || f.page.url,
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.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":";AAgBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ3D,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ3D,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAoLtB,UAAU,UAAU;IAIlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAqBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyOpD;AA8ED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,OAAO,cAAc,EAAE,sBAAsB,EACnD,OAAO,EAAE,MAAM,GACd,MAAM,CAgBR;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
|
@@ -23,7 +23,7 @@ import { renderSourcesMarkdown, renderAnswerMarkdown } from "./citations.js";
|
|
|
23
23
|
import { synthesize } from "./synthesize.js";
|
|
24
24
|
import { verifyCitations as runVerify } from "./verify.js";
|
|
25
25
|
import { formatCostLine, looksLikeDario, estimateCost, } from "./pricing.js";
|
|
26
|
-
import { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, deleteSession, pruneSessions, parseDuration, loadAllSessions, } from "./sessions.js";
|
|
26
|
+
import { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, deleteSession, pruneSessions, parseDuration, loadAllSessions, tagSession, untagSession, } from "./sessions.js";
|
|
27
27
|
import { aggregateSessionStats, renderStats } from "./stats.js";
|
|
28
28
|
import { renderHtmlReport } from "./html-export.js";
|
|
29
29
|
import { assessConfidence, formatConfidenceLine } from "./confidence.js";
|
|
@@ -39,14 +39,21 @@ const USAGE = `deepdive — local research agent
|
|
|
39
39
|
Usage:
|
|
40
40
|
deepdive "<question>" [flags] Run the research agent
|
|
41
41
|
deepdive doctor [flags] Health check — paste the output when filing issues
|
|
42
|
-
deepdive sessions ls [<filter>] List saved sessions (optional question substring
|
|
42
|
+
deepdive sessions ls [<filter>] List saved sessions (optional question substring;
|
|
43
|
+
--tag=<t> filters by tag)
|
|
44
|
+
deepdive sessions tag <id> <tags> Add comma-separated tags to a saved session
|
|
45
|
+
deepdive sessions untag <id> <tags> Remove tags from a saved session
|
|
43
46
|
deepdive stats Aggregate cost / sources / models across sessions
|
|
47
|
+
(--tag=<t> scopes to tagged sessions)
|
|
44
48
|
deepdive show <id> Print a saved session's markdown answer
|
|
45
49
|
deepdive resume <id> [<question>] Re-synthesize against a saved session's
|
|
46
50
|
sources (cheap iteration; no re-fetching)
|
|
47
51
|
deepdive continue <id> [<question>] Full agent run seeded with the saved session's
|
|
48
52
|
sources (plans + searches + fetches new pages;
|
|
49
53
|
saved as a new session linked via parentId)
|
|
54
|
+
deepdive rerun <id> [--narrate] Re-run a saved question fresh (new search +
|
|
55
|
+
fetches), save as a new linked session, and
|
|
56
|
+
print what changed vs the original
|
|
50
57
|
deepdive export <id> [--format=html|md] Render a saved session as a shareable artifact
|
|
51
58
|
(--out=report.html). Format inferred from --out.
|
|
52
59
|
deepdive diff <id-a> <id-b> [--narrate] Show how the answer + source set changed between
|
|
@@ -76,12 +83,15 @@ Flags:
|
|
|
76
83
|
--max-tokens=<n> Output max tokens per LLM call. Default: 4096
|
|
77
84
|
--search=<adapter> Search adapter: duckduckgo | searxng | brave | tavily | exa |
|
|
78
85
|
auto | wikipedia | arxiv | github | hackernews |
|
|
79
|
-
stackexchange | pubmed | semanticscholar | openalex
|
|
86
|
+
stackexchange | pubmed | semanticscholar | openalex |
|
|
87
|
+
multi:<a>,<b>[,...]
|
|
80
88
|
Default: duckduckgo (no key required). wikipedia, arxiv,
|
|
81
89
|
hackernews, stackexchange, pubmed, semanticscholar, and
|
|
82
90
|
openalex need no key; github works keyless
|
|
83
91
|
(DEEPDIVE_GITHUB_TOKEN raises the limit). 'auto' runs DDG
|
|
84
|
-
first, Brave fallback (if DEEPDIVE_BRAVE_KEY).
|
|
92
|
+
first, Brave fallback (if DEEPDIVE_BRAVE_KEY). multi:
|
|
93
|
+
fans out to several adapters concurrently and interleaves
|
|
94
|
+
results (e.g. multi:duckduckgo,wikipedia,arxiv).
|
|
85
95
|
--results-per-query=<n> Results per sub-query. Default: 5
|
|
86
96
|
--max-sources=<n> Total sources to fetch. Default: 12
|
|
87
97
|
--max-words-per-source=<n> Per-source content cap before synthesis. Default: 2000
|
|
@@ -118,12 +128,18 @@ Flags:
|
|
|
118
128
|
date (2024, 2024-06, 2024-06-15) or a duration
|
|
119
129
|
(30d, 12h, 2w = that long ago). Sources with no
|
|
120
130
|
detectable date are kept. Env: DEEPDIVE_SINCE.
|
|
131
|
+
--no-dedupe Keep near-duplicate sources (syndicated copies of
|
|
132
|
+
the same article). Default: drop them.
|
|
133
|
+
--dedupe-threshold=<0..1> Similarity above which a source counts as a
|
|
134
|
+
duplicate. Default: 0.9. Env: DEEPDIVE_DEDUPE_THRESHOLD.
|
|
121
135
|
--api-format=<anthropic|openai>
|
|
122
136
|
Wire format for the LLM endpoint. Default:
|
|
123
137
|
auto-detected from --base-url (api.openai.com,
|
|
124
138
|
:11434 (Ollama), :8000 default to openai;
|
|
125
139
|
everything else to anthropic).
|
|
126
140
|
--tldr Lead the answer with a one-paragraph TL;DR (env: DEEPDIVE_TLDR)
|
|
141
|
+
--tag=<name>[,<name>] Label this run's saved session (env: DEEPDIVE_TAGS). On
|
|
142
|
+
sessions ls / stats, filters by tag instead.
|
|
127
143
|
--json Emit a JSON result to stdout instead of markdown
|
|
128
144
|
--out=<path> Write the output (markdown or json) to a file too
|
|
129
145
|
--format=<html|md> export: output format (default: inferred from --out, else html)
|
|
@@ -151,6 +167,7 @@ Environment:
|
|
|
151
167
|
DEEPDIVE_NO_COST, DEEPDIVE_PRICE_INPUT_PER_MTOK, DEEPDIVE_PRICE_OUTPUT_PER_MTOK,
|
|
152
168
|
DEEPDIVE_INCLUDE, DEEPDIVE_PDF_MAX_PAGES,
|
|
153
169
|
DEEPDIVE_ALLOW_DOMAIN, DEEPDIVE_DENY_DOMAIN, DEEPDIVE_SINCE, DEEPDIVE_API_FORMAT,
|
|
170
|
+
DEEPDIVE_NO_DEDUPE, DEEPDIVE_DEDUPE_THRESHOLD, DEEPDIVE_TAGS,
|
|
154
171
|
DEEPDIVE_NO_SESSIONS, DEEPDIVE_SESSIONS_DIR, DEEPDIVE_CONFIG
|
|
155
172
|
|
|
156
173
|
Config file:
|
|
@@ -174,6 +191,7 @@ const SUBCOMMAND_VERBS = new Set([
|
|
|
174
191
|
"search",
|
|
175
192
|
"open",
|
|
176
193
|
"stats",
|
|
194
|
+
"rerun",
|
|
177
195
|
]);
|
|
178
196
|
// Exported for unit tests.
|
|
179
197
|
export function parseArgs(argv) {
|
|
@@ -227,6 +245,10 @@ export function parseArgs(argv) {
|
|
|
227
245
|
flags.tldr = true;
|
|
228
246
|
continue;
|
|
229
247
|
}
|
|
248
|
+
if (a === "--no-dedupe") {
|
|
249
|
+
flags.noDedupe = true;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
230
252
|
if (a === "--narrate") {
|
|
231
253
|
flags.narrate = true;
|
|
232
254
|
continue;
|
|
@@ -310,6 +332,15 @@ export function parseArgs(argv) {
|
|
|
310
332
|
case "cite-min-recall":
|
|
311
333
|
flags.citeMinRecall = parseUnitFloat(value);
|
|
312
334
|
break;
|
|
335
|
+
case "dedupe-threshold":
|
|
336
|
+
{
|
|
337
|
+
const parsed = parseUnitFloat(value);
|
|
338
|
+
if (parsed === undefined) {
|
|
339
|
+
throw new Error(`--dedupe-threshold must be a number in [0, 1] (got: ${value})`);
|
|
340
|
+
}
|
|
341
|
+
flags.dedupeThreshold = parsed;
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
313
344
|
case "pdf-max-pages":
|
|
314
345
|
flags.pdfMaxPages = parsePositiveInt(value);
|
|
315
346
|
break;
|
|
@@ -319,6 +350,12 @@ export function parseArgs(argv) {
|
|
|
319
350
|
.map((s) => s.trim())
|
|
320
351
|
.filter((s) => s.length > 0);
|
|
321
352
|
break;
|
|
353
|
+
case "tag":
|
|
354
|
+
flags.tag = value
|
|
355
|
+
.split(",")
|
|
356
|
+
.map((s) => s.trim())
|
|
357
|
+
.filter((s) => s.length > 0);
|
|
358
|
+
break;
|
|
322
359
|
case "allow-domain":
|
|
323
360
|
flags.allowDomain = value
|
|
324
361
|
.split(",")
|
|
@@ -569,12 +606,15 @@ async function main(argv) {
|
|
|
569
606
|
if (parsed.question === "stats") {
|
|
570
607
|
return await statsCommand(parsed);
|
|
571
608
|
}
|
|
609
|
+
if (parsed.question === "rerun") {
|
|
610
|
+
return await rerunCommand(parsed);
|
|
611
|
+
}
|
|
572
612
|
if (!parsed.question) {
|
|
573
613
|
process.stderr.write(`deepdive: missing question.\n\n${USAGE}`);
|
|
574
614
|
return 2;
|
|
575
615
|
}
|
|
576
616
|
const config = resolveConfig(parsed.flags, process.env);
|
|
577
|
-
return await runResearch({ question: parsed.question, parsed, config });
|
|
617
|
+
return (await runResearch({ question: parsed.question, parsed, config })).code;
|
|
578
618
|
}
|
|
579
619
|
// Layer config-file base + selected-profile settings into process.env, filling
|
|
580
620
|
// only keys the real environment hasn't already set — so the effective
|
|
@@ -705,6 +745,9 @@ async function openCommand(parsed) {
|
|
|
705
745
|
return 1;
|
|
706
746
|
}
|
|
707
747
|
}
|
|
748
|
+
// Returns the exit code plus the persisted session id (when sessions are
|
|
749
|
+
// enabled and the save succeeded) so callers like `rerun` can post-process
|
|
750
|
+
// the new record — e.g. diff it against its parent.
|
|
708
751
|
async function runResearch(opts) {
|
|
709
752
|
const { question, parsed, config, preKept, parentId } = opts;
|
|
710
753
|
// A --since value that was supplied but didn't parse is a user error — fail
|
|
@@ -712,7 +755,7 @@ async function runResearch(opts) {
|
|
|
712
755
|
if (config.sinceRaw && config.sinceMs === undefined) {
|
|
713
756
|
process.stderr.write(`deepdive: --since must be a date (2024, 2024-06, 2024-06-15) or a duration ` +
|
|
714
757
|
`(30d, 12h, 2w); got: ${config.sinceRaw}\n`);
|
|
715
|
-
return 2;
|
|
758
|
+
return { code: 2 };
|
|
716
759
|
}
|
|
717
760
|
const search = await resolveSearchAdapter(config.searchAdapter, process.env);
|
|
718
761
|
const cache = config.cache.enabled
|
|
@@ -758,6 +801,8 @@ async function runResearch(opts) {
|
|
|
758
801
|
domainFilter: config.domainFilter,
|
|
759
802
|
tldr: config.tldr,
|
|
760
803
|
sinceMs: config.sinceMs,
|
|
804
|
+
dedupeNearDupes: config.dedupeNearDupes,
|
|
805
|
+
nearDupeThreshold: config.nearDupeThreshold,
|
|
761
806
|
env: process.env,
|
|
762
807
|
onEvent: (e) => {
|
|
763
808
|
if (config.verbose)
|
|
@@ -788,7 +833,7 @@ async function runResearch(opts) {
|
|
|
788
833
|
let sessionId;
|
|
789
834
|
if (config.sessions.enabled) {
|
|
790
835
|
try {
|
|
791
|
-
sessionId = await persistSession(question, result, config, parentId);
|
|
836
|
+
sessionId = await persistSession(question, result, config, parentId, opts.tags);
|
|
792
837
|
}
|
|
793
838
|
catch (err) {
|
|
794
839
|
// Persistence failure is non-fatal — surface a warning to stderr
|
|
@@ -832,7 +877,7 @@ async function runResearch(opts) {
|
|
|
832
877
|
process.stderr.write(confidenceLine + "\n");
|
|
833
878
|
if (sessionId)
|
|
834
879
|
writeSessionHint(sessionId);
|
|
835
|
-
return strictFail ? 1 : 0;
|
|
880
|
+
return { code: strictFail ? 1 : 0, sessionId };
|
|
836
881
|
}
|
|
837
882
|
const output = config.jsonOutput
|
|
838
883
|
? JSON.stringify({
|
|
@@ -867,7 +912,7 @@ async function runResearch(opts) {
|
|
|
867
912
|
process.stderr.write(confidenceLine + "\n");
|
|
868
913
|
if (sessionId)
|
|
869
914
|
writeSessionHint(sessionId);
|
|
870
|
-
return strictFail ? 1 : 0;
|
|
915
|
+
return { code: strictFail ? 1 : 0, sessionId };
|
|
871
916
|
}
|
|
872
917
|
catch (err) {
|
|
873
918
|
// v0.11.0 — distinct exit code for "we deliberately stopped because
|
|
@@ -875,10 +920,10 @@ async function runResearch(opts) {
|
|
|
875
920
|
// (cap) vs `=== 1` (real error).
|
|
876
921
|
if (err instanceof BudgetExceededError) {
|
|
877
922
|
process.stderr.write(`deepdive: ${err.message}\n`);
|
|
878
|
-
return 2;
|
|
923
|
+
return { code: 2 };
|
|
879
924
|
}
|
|
880
925
|
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n`);
|
|
881
|
-
return 1;
|
|
926
|
+
return { code: 1 };
|
|
882
927
|
}
|
|
883
928
|
finally {
|
|
884
929
|
process.off("SIGINT", sigint);
|
|
@@ -888,8 +933,9 @@ async function runResearch(opts) {
|
|
|
888
933
|
// Persist a finished agent run as a session record. Returns the new id.
|
|
889
934
|
// v0.12.0 — pass `parentId` to record the lineage when this run was
|
|
890
935
|
// invoked via `deepdive continue <id>`.
|
|
891
|
-
async function persistSession(question, result, config, parentId) {
|
|
936
|
+
async function persistSession(question, result, config, parentId, tagsOverride) {
|
|
892
937
|
const id = generateSessionId();
|
|
938
|
+
const tags = tagsOverride ?? config.tags;
|
|
893
939
|
const record = {
|
|
894
940
|
schema: 1,
|
|
895
941
|
id,
|
|
@@ -903,6 +949,7 @@ async function persistSession(question, result, config, parentId) {
|
|
|
903
949
|
cost: result.cost,
|
|
904
950
|
llm: { baseUrl: config.llm.baseUrl, model: config.llm.model },
|
|
905
951
|
...(parentId ? { parentId } : {}),
|
|
952
|
+
...(tags.length > 0 ? { tags } : {}),
|
|
906
953
|
};
|
|
907
954
|
await saveSession(record, { dir: config.sessions.dir });
|
|
908
955
|
return id;
|
|
@@ -915,29 +962,78 @@ async function sessionsCommand(parsed) {
|
|
|
915
962
|
const sub = parsed.extras[0] ?? "ls";
|
|
916
963
|
switch (sub) {
|
|
917
964
|
case "ls":
|
|
918
|
-
return await sessionsLs(config, parsed.extras[1]);
|
|
965
|
+
return await sessionsLs(config, parsed.extras[1], tagFilterFrom(parsed));
|
|
919
966
|
case "rm":
|
|
920
967
|
return await sessionsRm(parsed, config);
|
|
921
968
|
case "prune":
|
|
922
969
|
return await sessionsPrune(parsed, config);
|
|
970
|
+
case "tag":
|
|
971
|
+
return await sessionsTag(parsed, config, "tag");
|
|
972
|
+
case "untag":
|
|
973
|
+
return await sessionsTag(parsed, config, "untag");
|
|
923
974
|
default:
|
|
924
|
-
process.stderr.write(`deepdive: unknown sessions sub-command: ${sub} (try: ls | rm | prune)\n`);
|
|
975
|
+
process.stderr.write(`deepdive: unknown sessions sub-command: ${sub} (try: ls | rm | prune | tag | untag)\n`);
|
|
925
976
|
return 2;
|
|
926
977
|
}
|
|
927
978
|
}
|
|
928
|
-
|
|
979
|
+
// `deepdive sessions tag <id> <tag>[,<tag>...]` / `sessions untag <id> <tags>`
|
|
980
|
+
// — retro-label a saved session ("oh, that run was for client X").
|
|
981
|
+
async function sessionsTag(parsed, config, mode) {
|
|
982
|
+
const idArg = parsed.extras[1];
|
|
983
|
+
const tagArg = parsed.extras[2];
|
|
984
|
+
if (!idArg || !tagArg) {
|
|
985
|
+
process.stderr.write(`deepdive: sessions ${mode} requires a session id and a comma-separated tag list\n` +
|
|
986
|
+
` e.g. deepdive sessions ${mode} 2026-06-09 client-x,audit\n`);
|
|
987
|
+
return 2;
|
|
988
|
+
}
|
|
989
|
+
const tags = tagArg
|
|
990
|
+
.split(",")
|
|
991
|
+
.map((s) => s.trim())
|
|
992
|
+
.filter((s) => s.length > 0);
|
|
993
|
+
try {
|
|
994
|
+
const dir = { dir: config.sessions.dir };
|
|
995
|
+
const id = await resolveSessionId(idArg, dir);
|
|
996
|
+
const result = mode === "tag" ? await tagSession(id, tags, dir) : await untagSession(id, tags, dir);
|
|
997
|
+
process.stdout.write(`${id} ${result.length > 0 ? result.map((t) => `#${t}`).join(" ") : "(no tags)"}\n`);
|
|
998
|
+
return 0;
|
|
999
|
+
}
|
|
1000
|
+
catch (err) {
|
|
1001
|
+
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n`);
|
|
1002
|
+
return 1;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
// The ls/stats tag FILTER comes only from the explicit --tag flag. config.tags
|
|
1006
|
+
// also absorbs DEEPDIVE_TAGS / the config-file `tags` key, but those mean
|
|
1007
|
+
// "label my new runs by default" — using them as a filter would make a
|
|
1008
|
+
// config-file default silently hide sessions from listings.
|
|
1009
|
+
function tagFilterFrom(parsed) {
|
|
1010
|
+
return (parsed.flags.tag ?? [])
|
|
1011
|
+
.map((t) => t.trim().replace(/^#/, "").toLowerCase())
|
|
1012
|
+
.filter((t) => t.length > 0);
|
|
1013
|
+
}
|
|
1014
|
+
async function sessionsLs(config, filter, tagFilter = []) {
|
|
929
1015
|
const { sessions, bad } = await listSessions({ dir: config.sessions.dir });
|
|
930
|
-
// Optional case-insensitive substring filter on the question text
|
|
1016
|
+
// Optional case-insensitive substring filter on the question text, plus an
|
|
1017
|
+
// optional tag filter (--tag=x — a session must carry EVERY listed tag).
|
|
931
1018
|
const needle = filter?.toLowerCase();
|
|
932
|
-
|
|
1019
|
+
let shown = needle
|
|
933
1020
|
? sessions.filter((s) => s.question.toLowerCase().includes(needle))
|
|
934
1021
|
: sessions;
|
|
1022
|
+
if (tagFilter.length > 0) {
|
|
1023
|
+
shown = shown.filter((s) => tagFilter.every((t) => (s.tags ?? []).includes(t)));
|
|
1024
|
+
}
|
|
935
1025
|
if (config.jsonOutput) {
|
|
936
1026
|
process.stdout.write(JSON.stringify({ sessions: shown, bad }, null, 2) + "\n");
|
|
937
1027
|
return 0;
|
|
938
1028
|
}
|
|
939
|
-
if (needle && shown.length === 0) {
|
|
940
|
-
|
|
1029
|
+
if ((needle || tagFilter.length > 0) && shown.length === 0) {
|
|
1030
|
+
const what = [
|
|
1031
|
+
needle ? `"${filter}"` : "",
|
|
1032
|
+
tagFilter.length > 0 ? tagFilter.map((t) => `#${t}`).join(" ") : "",
|
|
1033
|
+
]
|
|
1034
|
+
.filter(Boolean)
|
|
1035
|
+
.join(" + ");
|
|
1036
|
+
process.stdout.write(`(no sessions match ${what})\n`);
|
|
941
1037
|
return 0;
|
|
942
1038
|
}
|
|
943
1039
|
process.stdout.write(renderSessionsList(shown) + "\n");
|
|
@@ -952,7 +1048,13 @@ async function sessionsLs(config, filter) {
|
|
|
952
1048
|
async function statsCommand(parsed) {
|
|
953
1049
|
const config = resolveConfig(parsed.flags, process.env);
|
|
954
1050
|
const { records, bad } = await loadAllSessions({ dir: config.sessions.dir });
|
|
955
|
-
|
|
1051
|
+
// --tag=x restricts the aggregation to sessions carrying every listed tag
|
|
1052
|
+
// (explicit flag only — see tagFilterFrom).
|
|
1053
|
+
const tagFilter = tagFilterFrom(parsed);
|
|
1054
|
+
const scoped = tagFilter.length > 0
|
|
1055
|
+
? records.filter((r) => tagFilter.every((t) => (r.tags ?? []).includes(t)))
|
|
1056
|
+
: records;
|
|
1057
|
+
const stats = aggregateSessionStats(scoped);
|
|
956
1058
|
if (config.jsonOutput) {
|
|
957
1059
|
process.stdout.write(JSON.stringify({ stats, bad }, null, 2) + "\n");
|
|
958
1060
|
return 0;
|
|
@@ -1222,13 +1324,81 @@ async function continueCommand(parsed) {
|
|
|
1222
1324
|
// type just `deepdive continue <id>` to run again from where they
|
|
1223
1325
|
// left off with new search results.
|
|
1224
1326
|
const newQuestion = parsed.extras[1] ?? record.question;
|
|
1225
|
-
return await runResearch({
|
|
1327
|
+
return (await runResearch({
|
|
1226
1328
|
question: newQuestion,
|
|
1227
1329
|
parsed,
|
|
1228
1330
|
config,
|
|
1229
1331
|
preKept: record.sources,
|
|
1230
1332
|
parentId: id,
|
|
1333
|
+
})).code;
|
|
1334
|
+
}
|
|
1335
|
+
// `deepdive rerun <id> [--narrate]` — the longitudinal workflow in one
|
|
1336
|
+
// command: re-run a saved session's question FRESH (new search, new fetches —
|
|
1337
|
+
// unlike `continue`, the parent's sources are deliberately not seeded, so the
|
|
1338
|
+
// two runs are independent snapshots), save it as a new session linked via
|
|
1339
|
+
// parentId, then print how the answer and source set changed. Tags are
|
|
1340
|
+
// inherited from the parent unless --tag overrides. `--narrate` adds the
|
|
1341
|
+
// one-shot LLM summary of the substantive changes.
|
|
1342
|
+
async function rerunCommand(parsed) {
|
|
1343
|
+
const config = resolveConfig(parsed.flags, process.env);
|
|
1344
|
+
const idArg = parsed.extras[0];
|
|
1345
|
+
if (!idArg) {
|
|
1346
|
+
process.stderr.write(`deepdive: rerun requires a session id (try \`deepdive sessions ls\`)\n`);
|
|
1347
|
+
return 2;
|
|
1348
|
+
}
|
|
1349
|
+
if (!config.sessions.enabled) {
|
|
1350
|
+
process.stderr.write(`deepdive: rerun needs session persistence to diff against the parent — drop --no-sessions\n`);
|
|
1351
|
+
return 2;
|
|
1352
|
+
}
|
|
1353
|
+
const dir = { dir: config.sessions.dir };
|
|
1354
|
+
let parent;
|
|
1355
|
+
try {
|
|
1356
|
+
const id = await resolveSessionId(idArg, dir);
|
|
1357
|
+
parent = await loadSession(id, dir);
|
|
1358
|
+
}
|
|
1359
|
+
catch (err) {
|
|
1360
|
+
process.stderr.write(`deepdive: ${safeErrorMessage(err)}\n`);
|
|
1361
|
+
return 1;
|
|
1362
|
+
}
|
|
1363
|
+
const { code, sessionId } = await runResearch({
|
|
1364
|
+
question: parent.question,
|
|
1365
|
+
parsed,
|
|
1366
|
+
config,
|
|
1367
|
+
parentId: parent.id,
|
|
1368
|
+
// Inherit the parent's tags so the lineage stays organized, unless the
|
|
1369
|
+
// user explicitly re-tagged this run.
|
|
1370
|
+
tags: config.tags.length > 0 ? config.tags : parent.tags ?? [],
|
|
1231
1371
|
});
|
|
1372
|
+
if (code !== 0 || !sessionId)
|
|
1373
|
+
return code;
|
|
1374
|
+
// Post-run: show what changed. In --json mode stdout already carries the
|
|
1375
|
+
// run's JSON envelope — keep it a single document and point at `diff` for
|
|
1376
|
+
// the structured delta instead.
|
|
1377
|
+
if (config.jsonOutput) {
|
|
1378
|
+
process.stderr.write(`rerun ${parent.id} → ${sessionId} (deepdive diff ${parent.id} ${sessionId} --json)\n`);
|
|
1379
|
+
return code;
|
|
1380
|
+
}
|
|
1381
|
+
try {
|
|
1382
|
+
const fresh = await loadSession(sessionId, dir);
|
|
1383
|
+
const diff = diffSessions(parent, fresh);
|
|
1384
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
1385
|
+
process.stdout.write(`\n---\n\n## What changed since ${isoDayOf(parent.createdAt)}\n\n` +
|
|
1386
|
+
renderDiffText(diff, { color: useColor }) +
|
|
1387
|
+
"\n");
|
|
1388
|
+
if (parsed.flags.narrate) {
|
|
1389
|
+
const { text } = await callLLM([{ role: "user", content: buildDiffNarrateUser(parent, fresh) }], DIFF_NARRATE_SYSTEM, config.llm);
|
|
1390
|
+
process.stdout.write(`\n## What changed (narrated)\n\n${text.trim()}\n`);
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
catch (err) {
|
|
1394
|
+
// The run itself succeeded — a diff failure shouldn't fail the command.
|
|
1395
|
+
process.stderr.write(`deepdive: warning: could not diff against parent (${safeErrorMessage(err)})\n`);
|
|
1396
|
+
}
|
|
1397
|
+
return code;
|
|
1398
|
+
}
|
|
1399
|
+
function isoDayOf(ms) {
|
|
1400
|
+
const d = new Date(ms);
|
|
1401
|
+
return Number.isNaN(d.getTime()) ? "?" : d.toISOString().slice(0, 10);
|
|
1232
1402
|
}
|
|
1233
1403
|
// Only run main() when invoked as a script, not when imported (e.g. by tests
|
|
1234
1404
|
// that exercise `parseArgs` in isolation).
|