@askalf/deepdive 0.22.0 → 0.23.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 CHANGED
@@ -463,12 +463,12 @@ One command, aggregated health report. Paste the output when filing issues.
463
463
 
464
464
  ```bash
465
465
  $ deepdive doctor
466
- deepdive doctor — v0.22.0
466
+ deepdive doctor — v0.23.0
467
467
 
468
468
  # environment
469
469
  OK Node v22.21.1
470
470
  --- Platform win32 x64
471
- --- deepdive v0.22.0
471
+ --- deepdive v0.23.0
472
472
 
473
473
  # cache
474
474
  --- dir ~/.deepdive/cache
package/dist/index.d.ts CHANGED
@@ -31,5 +31,6 @@ export { diffSessions, diffSources, diffLines, renderDiffText, buildDiffNarrateU
31
31
  export { detectApiFormat, toOpenAIRequest, fromOpenAIResponse, openaiSSEToAnthropic, authHeadersFor, pathFor, type ApiFormat, type AnthropicRequestBody, type OpenAIRequestBody, type AnthropicResponseShape, type OpenAIResponseShape, type AnthropicSSEEvent, type OpenAIStreamEvent, } from "./llm-format.js";
32
32
  export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, type CitationCheck, type VerificationReport, type VerifyOptions, } from "./verify.js";
33
33
  export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
34
+ export { extractKeywords, keywordLadder } from "./query-keywords.js";
34
35
  export { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, formatBytes, formatDuration, classifyFetchError, nodeMeetsMinimum, type CheckResult, type CheckStatus, type DoctorReport, type DoctorOptions, } from "./doctor.js";
35
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -32,5 +32,6 @@ export { diffSessions, diffSources, diffLines, renderDiffText, buildDiffNarrateU
32
32
  export { detectApiFormat, toOpenAIRequest, fromOpenAIResponse, openaiSSEToAnthropic, authHeadersFor, pathFor, } from "./llm-format.js";
33
33
  export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, } from "./verify.js";
34
34
  export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
35
+ export { extractKeywords, keywordLadder } from "./query-keywords.js";
35
36
  export { runDoctor, renderDoctorText, renderDoctorJson, exitCodeFor, scrubPath, formatBytes, formatDuration, classifyFetchError, nodeMeetsMinimum, } from "./doctor.js";
36
37
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function extractKeywords(query: string): string[];
2
+ export declare function keywordLadder(query: string): string[];
3
+ //# sourceMappingURL=query-keywords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keywords.d.ts","sourceRoot":"","sources":["../src/query-keywords.ts"],"names":[],"mappings":"AA2DA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASvD;AAOD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrD"}
@@ -0,0 +1,88 @@
1
+ // Keyword reduction for encyclopedia-style search backends (#86).
2
+ //
3
+ // The planner writes queries tuned for general-web engines — long, natural
4
+ // language, error strings, "how to fix" phrasing. MediaWiki-style search
5
+ // matches article titles/text and returns ZERO for most of them, which made
6
+ // wikipedia nearly useless as the default fallback exactly when it was
7
+ // needed. These helpers reduce a query to its key terms so an encyclopedia
8
+ // can be asked progressively simpler versions ("nginx fastcgi_buffer_size
9
+ // upstream sent too big header php-fpm fix" → … → "nginx").
10
+ //
11
+ // Pure: no I/O, deterministic, unit-tested with the real bench queries that
12
+ // failed in the wild.
13
+ // Grammar words that carry no topical signal.
14
+ const STOPWORDS = new Set([
15
+ "a", "an", "and", "are", "as", "at", "be", "been", "between", "but", "by",
16
+ "can", "could", "did", "do", "does", "down", "each", "for", "from", "had",
17
+ "has", "have", "how", "i", "if", "in", "into", "is", "it", "its", "last",
18
+ "may", "might", "more", "most", "my", "no", "not", "of", "on", "or",
19
+ "our", "over", "should", "since", "so", "some", "than", "that", "the",
20
+ "their", "them", "then", "there", "these", "they", "this", "to", "too", "under",
21
+ "until", "up", "use", "used", "using", "versus", "vs", "was", "we", "were",
22
+ "what", "when", "where", "which", "while", "who", "why", "will", "with",
23
+ "without", "would", "you", "your",
24
+ ]);
25
+ // Generic instruction / filler words common in planner queries but useless
26
+ // (or harmful) as encyclopedia search terms.
27
+ const GENERIC_WORDS = new Set([
28
+ "best", "break", "breaks", "broken", "cause", "caused", "causes", "common",
29
+ "compare", "compared", "comparison", "configuration", "current", "day",
30
+ "days", "error", "errors", "example", "examples", "explain", "explained",
31
+ "explanation", "fix", "fixed", "fixes", "fixing", "guide", "issue",
32
+ "issues", "latest", "month", "months", "new", "notable", "overview",
33
+ "practice", "practices", "problem", "problems", "recent", "released",
34
+ "solution", "solutions", "solve", "solved", "tip", "tips", "today",
35
+ "tutorial", "week", "weeks", "work", "working", "works", "year", "years",
36
+ ]);
37
+ // Single-character class tests — applied per position by trimPunctuation's
38
+ // linear index walk, never with a quantifier over library input (CodeQL
39
+ // js/polynomial-redos: `X+$`-style trim regexes backtrack quadratically on
40
+ // adversarial tokens; an index walk can't).
41
+ const WORD_CHAR = /[\p{L}\p{N}]/u;
42
+ const WORD_TAIL_CHAR = /[\p{L}\p{N}+#]/u; // C++ / C# keep their suffix
43
+ // Trim surrounding punctuation from one whitespace-split token, preserving
44
+ // internal structure (HTTP/3, php-fpm, fastcgi_buffer_size) and trailing
45
+ // +/# (C++, C#).
46
+ function trimPunctuation(token) {
47
+ let start = 0;
48
+ while (start < token.length && !WORD_CHAR.test(token[start]))
49
+ start++;
50
+ let end = token.length - 1;
51
+ while (end >= start && !WORD_TAIL_CHAR.test(token[end]))
52
+ end--;
53
+ return token.slice(start, end + 1);
54
+ }
55
+ // Ordered content tokens of a query: whitespace-split, surrounding
56
+ // punctuation trimmed, stopwords and generic words dropped.
57
+ export function extractKeywords(query) {
58
+ return query
59
+ .split(/\s+/)
60
+ .map(trimPunctuation)
61
+ .filter((t) => t.length > 0)
62
+ .filter((t) => {
63
+ const low = t.toLowerCase();
64
+ return !STOPWORDS.has(low) && !GENERIC_WORDS.has(low);
65
+ });
66
+ }
67
+ // Progressively shorter keyword variants of a query, longest first
68
+ // (4 → 2 → 1 leading keywords), deduplicated, and excluding anything equal
69
+ // to the original query — callers try the original first, then walk the
70
+ // ladder until a variant returns results. Empty when the query has no
71
+ // content tokens (nothing better to try).
72
+ export function keywordLadder(query) {
73
+ const keywords = extractKeywords(query);
74
+ if (keywords.length === 0)
75
+ return [];
76
+ const original = query.trim();
77
+ const out = [];
78
+ for (const cap of [4, 2, 1]) {
79
+ const variant = keywords.slice(0, cap).join(" ");
80
+ if (variant === original)
81
+ continue;
82
+ if (out.includes(variant))
83
+ continue;
84
+ out.push(variant);
85
+ }
86
+ return out;
87
+ }
88
+ //# sourceMappingURL=query-keywords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keywords.js","sourceRoot":"","sources":["../src/query-keywords.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export declare class WikipediaSearch implements SearchAdapter {
9
9
  readonly name = "wikipedia";
10
10
  constructor(lang?: string);
11
11
  search(query: string, limit: number, signal?: AbortSignal): Promise<SearchResult[]>;
12
+ private searchRaw;
12
13
  }
13
14
  export declare function mapWikipediaResults(items: WikiSearchItem[], lang: string, limit: number): SearchResult[];
14
15
  export declare function wikipediaArticleUrl(lang: string, title: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"wikipedia.d.ts","sourceRoot":"","sources":["../../src/search/wikipedia.ts"],"names":[],"mappings":"AAUA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1F,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAgB,YAAW,aAAa;IAEvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IADjC,QAAQ,CAAC,IAAI,eAAe;gBACC,IAAI,GAAE,MAAa;IAE1C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAmB1F;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,YAAY,EAAE,CAOhB;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvE"}
1
+ {"version":3,"file":"wikipedia.d.ts","sourceRoot":"","sources":["../../src/search/wikipedia.ts"],"names":[],"mappings":"AAUA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAI1F,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAgB,YAAW,aAAa;IAEvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IADjC,QAAQ,CAAC,IAAI,eAAe;gBACC,IAAI,GAAE,MAAa;IAE1C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAgB3E,SAAS;CAuBxB;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,YAAY,EAAE,CAOhB;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvE"}
@@ -8,6 +8,7 @@
8
8
  // content is left to deepdive's normal fetch step (the article URL), keeping
9
9
  // the downstream extract/synthesis path identical across adapters.
10
10
  import { searchTimeoutSignal } from "../search.js";
11
+ import { keywordLadder } from "../query-keywords.js";
11
12
  import { stripTags, decodeHtmlEntities } from "./duckduckgo.js";
12
13
  export class WikipediaSearch {
13
14
  lang;
@@ -16,6 +17,23 @@ export class WikipediaSearch {
16
17
  this.lang = lang;
17
18
  }
18
19
  async search(query, limit, signal) {
20
+ // MediaWiki search matches article titles/text, so the planner's long
21
+ // natural-language queries routinely return zero (#86 — this hollowed
22
+ // out wikipedia's value as the default fallback). When the verbatim
23
+ // query finds nothing, walk progressively shorter keyword variants
24
+ // (4 → 2 → 1 leading keywords) until one hits. At most 3 extra calls
25
+ // against a keyless API, and only on the would-have-been-empty path.
26
+ const verbatim = await this.searchRaw(query, limit, signal);
27
+ if (verbatim.length > 0)
28
+ return verbatim;
29
+ for (const variant of keywordLadder(query)) {
30
+ const results = await this.searchRaw(variant, limit, signal);
31
+ if (results.length > 0)
32
+ return results;
33
+ }
34
+ return [];
35
+ }
36
+ async searchRaw(query, limit, signal) {
19
37
  const url = new URL(`https://${this.lang}.wikipedia.org/w/api.php`);
20
38
  url.searchParams.set("action", "query");
21
39
  url.searchParams.set("list", "search");
@@ -1 +1 @@
1
- {"version":3,"file":"wikipedia.js","sourceRoot":"","sources":["../../src/search/wikipedia.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wikipedia.js","sourceRoot":"","sources":["../../src/search/wikipedia.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.22.0",
3
+ "version": "0.23.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": {