@askalf/deepdive 0.13.2 → 0.14.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 +118 -1
- package/dist/agent.d.ts +2 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +36 -13
- package/dist/agent.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +22 -2
- package/dist/cache.js.map +1 -1
- package/dist/citations.d.ts +1 -0
- package/dist/citations.d.ts.map +1 -1
- package/dist/citations.js +4 -1
- package/dist/citations.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +307 -17
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +3 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +110 -0
- package/dist/completion.js.map +1 -0
- package/dist/confidence.d.ts +17 -0
- package/dist/confidence.d.ts.map +1 -0
- package/dist/confidence.js +41 -0
- package/dist/confidence.js.map +1 -0
- package/dist/config-file.d.ts +13 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +149 -0
- package/dist/config-file.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/dates.d.ts +8 -0
- package/dist/dates.d.ts.map +1 -0
- package/dist/dates.js +195 -0
- package/dist/dates.js.map +1 -0
- package/dist/diff.d.ts +46 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +227 -0
- package/dist/diff.js.map +1 -0
- package/dist/html-export.d.ts +6 -0
- package/dist/html-export.d.ts.map +1 -0
- package/dist/html-export.js +146 -0
- package/dist/html-export.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +7 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +232 -0
- package/dist/markdown.js.map +1 -0
- package/dist/profiles.d.ts +5 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +38 -0
- package/dist/profiles.js.map +1 -0
- package/dist/robots.d.ts +1 -0
- package/dist/robots.d.ts.map +1 -1
- package/dist/robots.js +4 -7
- package/dist/robots.js.map +1 -1
- package/dist/search/arxiv.d.ts +7 -0
- package/dist/search/arxiv.d.ts.map +1 -0
- package/dist/search/arxiv.js +81 -0
- package/dist/search/arxiv.js.map +1 -0
- package/dist/search/brave.d.ts +1 -1
- package/dist/search/brave.d.ts.map +1 -1
- package/dist/search/brave.js +2 -1
- package/dist/search/brave.js.map +1 -1
- package/dist/search/duckduckgo.d.ts +1 -1
- package/dist/search/duckduckgo.d.ts.map +1 -1
- package/dist/search/duckduckgo.js +2 -1
- package/dist/search/duckduckgo.js.map +1 -1
- package/dist/search/github.d.ts +16 -0
- package/dist/search/github.d.ts.map +1 -0
- package/dist/search/github.js +59 -0
- package/dist/search/github.js.map +1 -0
- package/dist/search/searxng.d.ts +1 -1
- 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/wikipedia.d.ts +16 -0
- package/dist/search/wikipedia.d.ts.map +1 -0
- package/dist/search/wikipedia.js +56 -0
- package/dist/search/wikipedia.js.map +1 -0
- package/dist/search.d.ts +1 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +26 -0
- package/dist/search.js.map +1 -1
- package/dist/sessions.d.ts +15 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +67 -0
- package/dist/sessions.js.map +1 -1
- package/dist/synthesize.d.ts +6 -1
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +14 -5
- package/dist/synthesize.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-export.js","sourceRoot":"","sources":["../src/html-export.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,19 +3,27 @@ export { planQueries, parsePlan, critique, parseCritique, type Plan, type Critiq
|
|
|
3
3
|
export { resolveSearchAdapter, dedupeByUrl, type SearchAdapter, type SearchResult, } from "./search.js";
|
|
4
4
|
export { BrowserSession, type BrowserOptions, type FetchedPage } from "./browser.js";
|
|
5
5
|
export { extractContent, type ExtractedContent } from "./extract.js";
|
|
6
|
-
export { synthesize, type SourceWithContent } from "./synthesize.js";
|
|
6
|
+
export { synthesize, type SourceWithContent, type SynthesizeOptions } from "./synthesize.js";
|
|
7
|
+
export { extractPublishedDate, metaTags, jsonLdDates, toEpoch, } from "./dates.js";
|
|
8
|
+
export { assessConfidence, formatConfidenceLine, type ConfidenceLevel, type ConfidenceInput, type ConfidenceAssessment, } from "./confidence.js";
|
|
7
9
|
export { buildSourceTable, renderAnswerMarkdown, renderSourcesMarkdown, type Source, } from "./citations.js";
|
|
8
10
|
export { callLLM, LLMError, DEFAULT_LLM_TIMEOUT_MS, DEFAULT_LLM_ATTEMPTS, type LLMConfig, type LLMMessage, type LLMResult, } from "./llm.js";
|
|
9
11
|
export { callLLMStream, parseBlocks, parseSSE, type StreamOptions } from "./llm-stream.js";
|
|
10
12
|
export { retry, backoffDelay, type RetryOptions } from "./retry.js";
|
|
11
13
|
export { resolveConfig, type RuntimeConfig, type CLIFlags } from "./config.js";
|
|
14
|
+
export { loadConfigFile, fileConfigToEnv, knownConfigKeys, defaultConfigPath, type FileConfig, type ParsedConfigFile, } from "./config-file.js";
|
|
15
|
+
export { BUILTIN_PROFILES, resolveProfile, listProfiles } from "./profiles.js";
|
|
16
|
+
export { completionScript, type Shell } from "./completion.js";
|
|
12
17
|
export { createCache, cacheKey, type PageCache, type CacheOptions } from "./cache.js";
|
|
13
18
|
export { runConcurrent } from "./concurrency.js";
|
|
14
19
|
export { priceFor, estimateCost, formatCostLine, formatUsd, formatTokens, looksLikeDario, daysAgo, PRICE_TABLE, PRICE_TABLE_VERIFIED_AT, PRICE_TABLE_STALE_AFTER_DAYS, DARIO_DEFAULT_BASE_URL, type ModelPrice, type TokenUsage, type CostEstimate, } from "./pricing.js";
|
|
15
20
|
export { extractPdfText, isPdfExtractorAvailable, looksLikePdf, joinTextItems, dedupeRunningHeadersFooters, PdfExtractorMissingError, type PdfExtractOptions, type PdfExtractResult, } from "./pdf.js";
|
|
16
21
|
export { ingestLocalPaths, expandPaths, stripTags, type LocalIngestOptions, type LocalIngestResult, } from "./local.js";
|
|
17
22
|
export { classifyUrl, matchesAny, normalizePattern, parseDomainList, type DomainFilter, type DomainVerdict, } from "./domain-filter.js";
|
|
18
|
-
export { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, defaultSessionsDir, humanDuration, type SessionRecord, type SessionMeta, type SessionStorageOptions, } from "./sessions.js";
|
|
23
|
+
export { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, defaultSessionsDir, humanDuration, deleteSession, pruneSessions, selectSessionsToPrune, parseDuration, type SessionRecord, type SessionMeta, type SessionStorageOptions, type PruneCriteria, } from "./sessions.js";
|
|
24
|
+
export { markdownToHtml, renderInline, escapeHtml, type MarkdownToHtmlOptions, } from "./markdown.js";
|
|
25
|
+
export { renderHtmlReport, type HtmlReportOptions, } from "./html-export.js";
|
|
26
|
+
export { diffSessions, diffSources, diffLines, renderDiffText, buildDiffNarrateUser, DIFF_NARRATE_SYSTEM, type SessionDiff, type SourceRef, type DiffLine, type LineKind, type SessionSide, type RenderDiffOptions, } from "./diff.js";
|
|
19
27
|
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";
|
|
20
28
|
export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, type CitationCheck, type VerificationReport, type VerifyOptions, } from "./verify.js";
|
|
21
29
|
export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,KAAK,IAAI,EACT,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,18 +5,26 @@ export { resolveSearchAdapter, dedupeByUrl, } from "./search.js";
|
|
|
5
5
|
export { BrowserSession } from "./browser.js";
|
|
6
6
|
export { extractContent } from "./extract.js";
|
|
7
7
|
export { synthesize } from "./synthesize.js";
|
|
8
|
+
export { extractPublishedDate, metaTags, jsonLdDates, toEpoch, } from "./dates.js";
|
|
9
|
+
export { assessConfidence, formatConfidenceLine, } from "./confidence.js";
|
|
8
10
|
export { buildSourceTable, renderAnswerMarkdown, renderSourcesMarkdown, } from "./citations.js";
|
|
9
11
|
export { callLLM, LLMError, DEFAULT_LLM_TIMEOUT_MS, DEFAULT_LLM_ATTEMPTS, } from "./llm.js";
|
|
10
12
|
export { callLLMStream, parseBlocks, parseSSE } from "./llm-stream.js";
|
|
11
13
|
export { retry, backoffDelay } from "./retry.js";
|
|
12
14
|
export { resolveConfig } from "./config.js";
|
|
15
|
+
export { loadConfigFile, fileConfigToEnv, knownConfigKeys, defaultConfigPath, } from "./config-file.js";
|
|
16
|
+
export { BUILTIN_PROFILES, resolveProfile, listProfiles } from "./profiles.js";
|
|
17
|
+
export { completionScript } from "./completion.js";
|
|
13
18
|
export { createCache, cacheKey } from "./cache.js";
|
|
14
19
|
export { runConcurrent } from "./concurrency.js";
|
|
15
20
|
export { priceFor, estimateCost, formatCostLine, formatUsd, formatTokens, looksLikeDario, daysAgo, PRICE_TABLE, PRICE_TABLE_VERIFIED_AT, PRICE_TABLE_STALE_AFTER_DAYS, DARIO_DEFAULT_BASE_URL, } from "./pricing.js";
|
|
16
21
|
export { extractPdfText, isPdfExtractorAvailable, looksLikePdf, joinTextItems, dedupeRunningHeadersFooters, PdfExtractorMissingError, } from "./pdf.js";
|
|
17
22
|
export { ingestLocalPaths, expandPaths, stripTags, } from "./local.js";
|
|
18
23
|
export { classifyUrl, matchesAny, normalizePattern, parseDomainList, } from "./domain-filter.js";
|
|
19
|
-
export { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, defaultSessionsDir, humanDuration, } from "./sessions.js";
|
|
24
|
+
export { generateSessionId, saveSession, loadSession, listSessions, resolveSessionId, renderSessionsList, defaultSessionsDir, humanDuration, deleteSession, pruneSessions, selectSessionsToPrune, parseDuration, } from "./sessions.js";
|
|
25
|
+
export { markdownToHtml, renderInline, escapeHtml, } from "./markdown.js";
|
|
26
|
+
export { renderHtmlReport, } from "./html-export.js";
|
|
27
|
+
export { diffSessions, diffSources, diffLines, renderDiffText, buildDiffNarrateUser, DIFF_NARRATE_SYSTEM, } from "./diff.js";
|
|
20
28
|
export { detectApiFormat, toOpenAIRequest, fromOpenAIResponse, openaiSSEToAnthropic, authHeadersFor, pathFor, } from "./llm-format.js";
|
|
21
29
|
export { verifyCitations, splitSentences, extractCiteIds, contentTokens, recall, stripSourcesBlock, DEFAULT_CITE_MIN_RECALL, } from "./verify.js";
|
|
22
30
|
export { trimTrailingSlashes, stripHashFragment, dedupeKey } from "./url-util.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACL,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,GAGd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface MarkdownToHtmlOptions {
|
|
2
|
+
citationAnchorPrefix?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare function markdownToHtml(md: string, opts?: MarkdownToHtmlOptions): string;
|
|
5
|
+
export declare function renderInline(text: string, opts?: MarkdownToHtmlOptions): string;
|
|
6
|
+
export declare function escapeHtml(s: string): string;
|
|
7
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,qBAAqB;IAIpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AASD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,MAAM,CA6GnF;AAmED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,MAAM,CA+CnF;AASD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5C"}
|
package/dist/markdown.js
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// Minimal, hand-rolled Markdown → HTML renderer.
|
|
2
|
+
//
|
|
3
|
+
// deepdive's "one runtime dependency" rule (see CLAUDE.md) rules out a
|
|
4
|
+
// markdown library, but the HTML export (`deepdive export <id> --format=html`)
|
|
5
|
+
// needs to turn the synthesizer's GitHub-flavored markdown into a polished,
|
|
6
|
+
// shareable document. This covers exactly the subset the synthesizer emits:
|
|
7
|
+
// ATX headings, paragraphs, bold/italic, inline + fenced code, links,
|
|
8
|
+
// ordered/unordered lists, GFM tables, blockquotes, horizontal rules, and the
|
|
9
|
+
// inline `[N]` citation markers (turned into superscript anchors so a reader
|
|
10
|
+
// can jump to the source).
|
|
11
|
+
//
|
|
12
|
+
// Pure over strings; no DOM, no deps. If the synthesizer starts emitting a
|
|
13
|
+
// construct this doesn't handle, the text falls through as an escaped
|
|
14
|
+
// paragraph rather than breaking — fail soft, since this is presentation, not
|
|
15
|
+
// data.
|
|
16
|
+
// Private-use sentinels that cannot occur in escaped source text. Used to
|
|
17
|
+
// "park" already-generated HTML so later inline passes never touch it.
|
|
18
|
+
const PARK_OPEN = String.fromCharCode(0xe000);
|
|
19
|
+
const PARK_CLOSE = String.fromCharCode(0xe001);
|
|
20
|
+
// Render a markdown document to an HTML fragment (no <html>/<body> wrapper —
|
|
21
|
+
// the caller owns the document shell). Block-level first, inline second.
|
|
22
|
+
export function markdownToHtml(md, opts = {}) {
|
|
23
|
+
const lines = md.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
|
|
24
|
+
const blocks = [];
|
|
25
|
+
let i = 0;
|
|
26
|
+
while (i < lines.length) {
|
|
27
|
+
const line = lines[i];
|
|
28
|
+
// Blank line — skip; blocks are separated structurally.
|
|
29
|
+
if (line.trim() === "") {
|
|
30
|
+
i++;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// Fenced code block: ``` or ~~~ (optional language hint, which we ignore).
|
|
34
|
+
const fence = /^(```+|~~~+)(.*)$/.exec(line.trim());
|
|
35
|
+
if (fence) {
|
|
36
|
+
const marker = fence[1];
|
|
37
|
+
const body = [];
|
|
38
|
+
i++;
|
|
39
|
+
while (i < lines.length && lines[i].trim() !== marker) {
|
|
40
|
+
body.push(lines[i]);
|
|
41
|
+
i++;
|
|
42
|
+
}
|
|
43
|
+
i++; // consume closing fence (or run off the end)
|
|
44
|
+
blocks.push(`<pre><code>${escapeHtml(body.join("\n"))}</code></pre>`);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// Horizontal rule.
|
|
48
|
+
if (/^(\s*[-*_])(\s*\1){2,}\s*$/.test(line)) {
|
|
49
|
+
blocks.push("<hr>");
|
|
50
|
+
i++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// ATX heading (# … ######).
|
|
54
|
+
const heading = /^(#{1,6})\s+(.*)$/.exec(line);
|
|
55
|
+
if (heading) {
|
|
56
|
+
const level = heading[1].length;
|
|
57
|
+
blocks.push(`<h${level}>${renderInline(heading[2].trim(), opts)}</h${level}>`);
|
|
58
|
+
i++;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// GFM table: a header row of `| … |` immediately followed by a
|
|
62
|
+
// separator row of dashes/colons.
|
|
63
|
+
if (isTableRow(line) && i + 1 < lines.length && isTableSeparator(lines[i + 1])) {
|
|
64
|
+
const tableLines = [line, lines[i + 1]];
|
|
65
|
+
i += 2;
|
|
66
|
+
while (i < lines.length && isTableRow(lines[i])) {
|
|
67
|
+
tableLines.push(lines[i]);
|
|
68
|
+
i++;
|
|
69
|
+
}
|
|
70
|
+
blocks.push(renderTable(tableLines, opts));
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Blockquote: one or more consecutive `> ` lines.
|
|
74
|
+
if (/^\s*>\s?/.test(line)) {
|
|
75
|
+
const quoted = [];
|
|
76
|
+
while (i < lines.length && /^\s*>\s?/.test(lines[i])) {
|
|
77
|
+
quoted.push(lines[i].replace(/^\s*>\s?/, ""));
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
blocks.push(`<blockquote>${markdownToHtml(quoted.join("\n"), opts)}</blockquote>`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Lists: a run of ordered (`1.`) or unordered (`-`/`*`/`+`) items.
|
|
84
|
+
if (isListItem(line)) {
|
|
85
|
+
const ordered = isOrderedItem(line);
|
|
86
|
+
const items = [];
|
|
87
|
+
while (i < lines.length && isListItem(lines[i]) && isOrderedItem(lines[i]) === ordered) {
|
|
88
|
+
// Gather continuation lines (non-blank, non-item) into the same <li>
|
|
89
|
+
// so wrapped list text stays together.
|
|
90
|
+
let item = lines[i].replace(LIST_ITEM_RE, "");
|
|
91
|
+
i++;
|
|
92
|
+
while (i < lines.length &&
|
|
93
|
+
lines[i].trim() !== "" &&
|
|
94
|
+
!isListItem(lines[i]) &&
|
|
95
|
+
!/^#{1,6}\s/.test(lines[i])) {
|
|
96
|
+
item += " " + lines[i].trim();
|
|
97
|
+
i++;
|
|
98
|
+
}
|
|
99
|
+
items.push(`<li>${renderInline(item.trim(), opts)}</li>`);
|
|
100
|
+
}
|
|
101
|
+
const tag = ordered ? "ol" : "ul";
|
|
102
|
+
blocks.push(`<${tag}>\n${items.join("\n")}\n</${tag}>`);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Paragraph: consume until a blank line or a line that starts a new block.
|
|
106
|
+
const para = [line];
|
|
107
|
+
i++;
|
|
108
|
+
while (i < lines.length &&
|
|
109
|
+
lines[i].trim() !== "" &&
|
|
110
|
+
!startsNewBlock(lines[i], lines[i + 1])) {
|
|
111
|
+
para.push(lines[i]);
|
|
112
|
+
i++;
|
|
113
|
+
}
|
|
114
|
+
blocks.push(`<p>${renderInline(para.join(" ").trim(), opts)}</p>`);
|
|
115
|
+
}
|
|
116
|
+
return blocks.join("\n");
|
|
117
|
+
}
|
|
118
|
+
const LIST_ITEM_RE = /^\s*(?:[-*+]|\d+[.)])\s+/;
|
|
119
|
+
function isListItem(line) {
|
|
120
|
+
return LIST_ITEM_RE.test(line);
|
|
121
|
+
}
|
|
122
|
+
function isOrderedItem(line) {
|
|
123
|
+
return /^\s*\d+[.)]\s+/.test(line);
|
|
124
|
+
}
|
|
125
|
+
function isTableRow(line) {
|
|
126
|
+
const t = line.trim();
|
|
127
|
+
return t.startsWith("|") && t.endsWith("|") && t.length >= 2;
|
|
128
|
+
}
|
|
129
|
+
function isTableSeparator(line) {
|
|
130
|
+
const t = line.trim();
|
|
131
|
+
if (!t.startsWith("|"))
|
|
132
|
+
return false;
|
|
133
|
+
return /^\|?(\s*:?-{1,}:?\s*\|)+\s*$/.test(t);
|
|
134
|
+
}
|
|
135
|
+
function startsNewBlock(line, next) {
|
|
136
|
+
if (/^#{1,6}\s/.test(line))
|
|
137
|
+
return true;
|
|
138
|
+
if (/^(```+|~~~+)/.test(line.trim()))
|
|
139
|
+
return true;
|
|
140
|
+
if (/^(\s*[-*_])(\s*\1){2,}\s*$/.test(line))
|
|
141
|
+
return true;
|
|
142
|
+
if (/^\s*>\s?/.test(line))
|
|
143
|
+
return true;
|
|
144
|
+
if (isListItem(line))
|
|
145
|
+
return true;
|
|
146
|
+
if (isTableRow(line) && next !== undefined && isTableSeparator(next))
|
|
147
|
+
return true;
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
function renderTable(tableLines, opts) {
|
|
151
|
+
const splitRow = (row) => row
|
|
152
|
+
.trim()
|
|
153
|
+
.replace(/^\|/, "")
|
|
154
|
+
.replace(/\|$/, "")
|
|
155
|
+
.split("|")
|
|
156
|
+
.map((c) => c.trim());
|
|
157
|
+
const header = splitRow(tableLines[0]);
|
|
158
|
+
const bodyRows = tableLines.slice(2).map(splitRow);
|
|
159
|
+
const thead = "<thead><tr>" +
|
|
160
|
+
header.map((c) => `<th>${renderInline(c, opts)}</th>`).join("") +
|
|
161
|
+
"</tr></thead>";
|
|
162
|
+
const tbody = "<tbody>" +
|
|
163
|
+
bodyRows
|
|
164
|
+
.map((cells) => "<tr>" +
|
|
165
|
+
cells.map((c) => `<td>${renderInline(c, opts)}</td>`).join("") +
|
|
166
|
+
"</tr>")
|
|
167
|
+
.join("") +
|
|
168
|
+
"</tbody>";
|
|
169
|
+
return `<table>${thead}${tbody}</table>`;
|
|
170
|
+
}
|
|
171
|
+
// Inline rendering. Escape HTML once up front, then layer markup back on via
|
|
172
|
+
// sentinel-parked placeholders so we never re-process generated tags. Order
|
|
173
|
+
// matters: code spans and links are extracted first (their contents must not
|
|
174
|
+
// be touched by later passes), then citations, then emphasis.
|
|
175
|
+
export function renderInline(text, opts = {}) {
|
|
176
|
+
let out = escapeHtml(text);
|
|
177
|
+
const stash = [];
|
|
178
|
+
const park = (html) => {
|
|
179
|
+
stash.push(html);
|
|
180
|
+
return `${PARK_OPEN}${stash.length - 1}${PARK_CLOSE}`;
|
|
181
|
+
};
|
|
182
|
+
// Inline code: `code` — content is literal, no further processing.
|
|
183
|
+
out = out.replace(/`([^`]+)`/g, (_m, code) => park(`<code>${code}</code>`));
|
|
184
|
+
// Links: [text](url). The text is already escaped; the url is escaped too.
|
|
185
|
+
// Only http(s), mailto, file, and in-doc (#) targets are allowed — anything
|
|
186
|
+
// else (javascript:, data:) renders as plain text to avoid injection in the
|
|
187
|
+
// exported HTML.
|
|
188
|
+
out = out.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (m, label, url) => {
|
|
189
|
+
if (!isSafeHref(url))
|
|
190
|
+
return m;
|
|
191
|
+
return park(`<a href="${url}" rel="noopener noreferrer">${label}</a>`);
|
|
192
|
+
});
|
|
193
|
+
// Citations: a `[N]` (or `[N][M]…`) run NOT immediately followed by `(`
|
|
194
|
+
// (which would make it a link we failed to parse). Each [N] becomes a
|
|
195
|
+
// superscript anchor (when a prefix is set) or a plain bracketed superscript.
|
|
196
|
+
out = out.replace(/(?:\[\d+\])+(?!\()/g, (run) => {
|
|
197
|
+
const ids = run.match(/\d+/g) ?? [];
|
|
198
|
+
const sups = ids
|
|
199
|
+
.map((id) => opts.citationAnchorPrefix
|
|
200
|
+
? `<a href="#${opts.citationAnchorPrefix}${id}">${id}</a>`
|
|
201
|
+
: `[${id}]`)
|
|
202
|
+
.join("");
|
|
203
|
+
return park(`<sup class="cite">${sups}</sup>`);
|
|
204
|
+
});
|
|
205
|
+
// Bold then italic. **x** / __x__ first so the single-char rules don't eat
|
|
206
|
+
// the markers.
|
|
207
|
+
out = out.replace(/\*\*([^*]+)\*\*/g, (_m, x) => `<strong>${x}</strong>`);
|
|
208
|
+
out = out.replace(/__([^_]+)__/g, (_m, x) => `<strong>${x}</strong>`);
|
|
209
|
+
out = out.replace(/(^|[^*])\*([^*\s][^*]*?)\*(?!\*)/g, (_m, pre, x) => `${pre}<em>${x}</em>`);
|
|
210
|
+
out = out.replace(/(^|[^_])_([^_\s][^_]*?)_(?!_)/g, (_m, pre, x) => `${pre}<em>${x}</em>`);
|
|
211
|
+
// Restore parked spans.
|
|
212
|
+
const restoreRe = new RegExp(`${PARK_OPEN}(\\d+)${PARK_CLOSE}`, "g");
|
|
213
|
+
out = out.replace(restoreRe, (_m, n) => stash[Number(n)]);
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
function isSafeHref(url) {
|
|
217
|
+
if (url.startsWith("#"))
|
|
218
|
+
return true;
|
|
219
|
+
if (url.startsWith("/") || url.startsWith("./") || url.startsWith("../"))
|
|
220
|
+
return true;
|
|
221
|
+
return /^(https?:|mailto:|file:)/i.test(url);
|
|
222
|
+
}
|
|
223
|
+
// Exported for unit tests. Escapes the five HTML-significant characters.
|
|
224
|
+
export function escapeHtml(s) {
|
|
225
|
+
return s
|
|
226
|
+
.replace(/&/g, "&")
|
|
227
|
+
.replace(/</g, "<")
|
|
228
|
+
.replace(/>/g, ">")
|
|
229
|
+
.replace(/"/g, """)
|
|
230
|
+
.replace(/'/g, "'");
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FileConfig } from "./config-file.js";
|
|
2
|
+
export declare const BUILTIN_PROFILES: Record<string, FileConfig>;
|
|
3
|
+
export declare function resolveProfile(name: string, userProfiles?: Record<string, FileConfig>): FileConfig;
|
|
4
|
+
export declare function listProfiles(userProfiles?: Record<string, FileConfig>): string[];
|
|
5
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAgBvD,CAAC;AAKF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,GAC5C,UAAU,CASZ;AAGD,wBAAgB,YAAY,CAC1B,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,GAC5C,MAAM,EAAE,CAIV"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Named profiles — reusable bundles of settings selected with --profile=<name>.
|
|
2
|
+
// Built-ins cover the common modes; a user's config file can add or override
|
|
3
|
+
// profiles of the same name. Selecting a profile is equivalent to setting its
|
|
4
|
+
// keys as defaults (below env + CLI flags) for that run.
|
|
5
|
+
// Built-in profiles. Values use the same friendly keys as the config file.
|
|
6
|
+
export const BUILTIN_PROFILES = {
|
|
7
|
+
// Iterate harder: 3 critic rounds.
|
|
8
|
+
deep: { deep: 3 },
|
|
9
|
+
// Maximum diligence: deeper loop, wider source net, strict citations.
|
|
10
|
+
thorough: { deep: 4, maxSources: 20, strictCites: true },
|
|
11
|
+
// Lowest latency: high fetch concurrency, single-pass.
|
|
12
|
+
fast: { concurrency: 8, deep: 0 },
|
|
13
|
+
// Spend less: cheap models for the structurally-simple plan/critic stages,
|
|
14
|
+
// keep the quality model for synthesis.
|
|
15
|
+
cheap: {
|
|
16
|
+
planModel: "claude-haiku-4-5",
|
|
17
|
+
criticModel: "claude-haiku-4-5",
|
|
18
|
+
synthModel: "claude-sonnet-4-6",
|
|
19
|
+
},
|
|
20
|
+
// Fail the run on any weakly-supported citation; raise the recall bar.
|
|
21
|
+
strict: { strictCites: true, citeMinRecall: 0.5 },
|
|
22
|
+
};
|
|
23
|
+
// Resolve a profile name to its config. A user profile of the same name
|
|
24
|
+
// overrides the built-in (its keys win on top of the built-in's). Throws with
|
|
25
|
+
// the list of available profiles when the name is unknown.
|
|
26
|
+
export function resolveProfile(name, userProfiles = {}) {
|
|
27
|
+
const builtin = BUILTIN_PROFILES[name];
|
|
28
|
+
const user = userProfiles[name];
|
|
29
|
+
if (!builtin && !user) {
|
|
30
|
+
throw new Error(`unknown profile: ${name} (available: ${listProfiles(userProfiles).join(", ")})`);
|
|
31
|
+
}
|
|
32
|
+
return { ...(builtin ?? {}), ...(user ?? {}) };
|
|
33
|
+
}
|
|
34
|
+
// All selectable profile names — built-ins plus any from the config file.
|
|
35
|
+
export function listProfiles(userProfiles = {}) {
|
|
36
|
+
return Array.from(new Set([...Object.keys(BUILTIN_PROFILES), ...Object.keys(userProfiles)])).sort();
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6EAA6E;AAC7E,8EAA8E;AAC9E,yDAAyD;AAIzD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,mCAAmC;IACnC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACjB,sEAAsE;IACtE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;IACxD,uDAAuD;IACvD,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IACjC,2EAA2E;IAC3E,wCAAwC;IACxC,KAAK,EAAE;QACL,SAAS,EAAE,kBAAkB;QAC7B,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,mBAAmB;KAChC;IACD,uEAAuE;IACvE,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;CAClD,CAAC;AAEF,wEAAwE;AACxE,8EAA8E;AAC9E,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,eAA2C,EAAE;IAE7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,gBAAgB,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAC1B,eAA2C,EAAE;IAE7C,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAC1E,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
|
package/dist/robots.d.ts
CHANGED
package/dist/robots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAG3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,wBAAgB,iBAAiB,IAAI,WAAW,CAM/C;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAqB5B;AAiCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAG3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,wBAAgB,iBAAiB,IAAI,WAAW,CAM/C;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAqB5B;AAiCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA+CzD;AAGD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CA+BT"}
|
package/dist/robots.js
CHANGED
|
@@ -107,18 +107,15 @@ export function parseRobotsTxt(text) {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
return {
|
|
110
|
-
|
|
110
|
+
// Full rules in file order, each carrying its user-agent. isPathAllowed
|
|
111
|
+
// reads these directly (longest-match per RFC 9309).
|
|
112
|
+
rules: grouped,
|
|
111
113
|
crawlDelaySec: crawlDelay,
|
|
112
|
-
// We stash the grouping by keeping a hidden field. But since we want a
|
|
113
|
-
// clean exported type, bake agent-matching in: we'll re-do the parse at
|
|
114
|
-
// check time. Simpler: re-parse cheaply or store a bigger structure.
|
|
115
|
-
// Actually let's just store the grouped form and compute at check time:
|
|
116
|
-
...{ _grouped: grouped },
|
|
117
114
|
};
|
|
118
115
|
}
|
|
119
116
|
// Exported for unit tests.
|
|
120
117
|
export function isPathAllowed(parsed, path, userAgent) {
|
|
121
|
-
const grouped = parsed.
|
|
118
|
+
const grouped = parsed.rules;
|
|
122
119
|
if (grouped.length === 0)
|
|
123
120
|
return true;
|
|
124
121
|
const ua = userAgent.toLowerCase();
|
package/dist/robots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,sEAAsE;AACtE,gEAAgE;
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type SearchAdapter, type SearchResult } from "../search.js";
|
|
2
|
+
export declare class ArxivSearch implements SearchAdapter {
|
|
3
|
+
readonly name = "arxiv";
|
|
4
|
+
search(query: string, limit: number, signal?: AbortSignal): Promise<SearchResult[]>;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseArxivAtom(xml: string, limit: number): SearchResult[];
|
|
7
|
+
//# sourceMappingURL=arxiv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arxiv.d.ts","sourceRoot":"","sources":["../../src/search/arxiv.ts"],"names":[],"mappings":"AAWA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1F,qBAAa,WAAY,YAAW,aAAa;IAC/C,QAAQ,CAAC,IAAI,WAAW;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAc1F;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAoBzE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// arXiv search adapter. No API key. Uses the arXiv Atom API
|
|
2
|
+
// (export.arxiv.org/api/query), which returns an Atom feed of matching
|
|
3
|
+
// papers. A fit for research-paper / preprint questions where the planner's
|
|
4
|
+
// sub-queries name a method, model, or result.
|
|
5
|
+
//
|
|
6
|
+
// The response is XML; we parse <entry> blocks with a hand-rolled regex (the
|
|
7
|
+
// same "fix the parser if it breaks, don't reach for a dep" stance the DDG
|
|
8
|
+
// adapter takes). The abstract page URL (<id>) is the kept source; deepdive's
|
|
9
|
+
// fetch step pulls the abstract page, and the PDF path handles the linked PDF
|
|
10
|
+
// if the planner picks it.
|
|
11
|
+
import { searchTimeoutSignal } from "../search.js";
|
|
12
|
+
import { decodeHtmlEntities } from "./duckduckgo.js";
|
|
13
|
+
export class ArxivSearch {
|
|
14
|
+
name = "arxiv";
|
|
15
|
+
async search(query, limit, signal) {
|
|
16
|
+
const url = new URL("https://export.arxiv.org/api/query");
|
|
17
|
+
url.searchParams.set("search_query", `all:${query}`);
|
|
18
|
+
url.searchParams.set("start", "0");
|
|
19
|
+
url.searchParams.set("max_results", String(Math.min(Math.max(limit, 1), 50)));
|
|
20
|
+
url.searchParams.set("sortBy", "relevance");
|
|
21
|
+
const res = await fetch(url, {
|
|
22
|
+
headers: { "user-agent": "deepdive (+https://github.com/askalf/deepdive)" },
|
|
23
|
+
signal: searchTimeoutSignal(signal),
|
|
24
|
+
});
|
|
25
|
+
if (!res.ok)
|
|
26
|
+
throw new Error(`arxiv ${res.status} ${res.statusText}`);
|
|
27
|
+
const xml = await res.text();
|
|
28
|
+
return parseArxivAtom(xml, limit);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Exported for unit tests. Pure Atom-feed parser. Pulls title / abstract URL /
|
|
32
|
+
// summary from each <entry>; collapses the whitespace arXiv wraps titles and
|
|
33
|
+
// abstracts with.
|
|
34
|
+
export function parseArxivAtom(xml, limit) {
|
|
35
|
+
const results = [];
|
|
36
|
+
const entryRe = /<entry\b[^>]*>([\s\S]*?)<\/entry>/g;
|
|
37
|
+
let m;
|
|
38
|
+
let rank = 0;
|
|
39
|
+
while ((m = entryRe.exec(xml)) !== null) {
|
|
40
|
+
const entry = m[1];
|
|
41
|
+
const id = tag(entry, "id");
|
|
42
|
+
const url = normalizeAbsUrl(id);
|
|
43
|
+
if (!url)
|
|
44
|
+
continue;
|
|
45
|
+
rank++;
|
|
46
|
+
results.push({
|
|
47
|
+
url,
|
|
48
|
+
title: clean(tag(entry, "title")),
|
|
49
|
+
snippet: clean(tag(entry, "summary")),
|
|
50
|
+
rank,
|
|
51
|
+
});
|
|
52
|
+
if (results.length >= limit)
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
function tag(xml, name) {
|
|
58
|
+
const m = new RegExp(`<${name}\\b[^>]*>([\\s\\S]*?)<\\/${name}>`).exec(xml);
|
|
59
|
+
return m ? m[1] : "";
|
|
60
|
+
}
|
|
61
|
+
function clean(s) {
|
|
62
|
+
return decodeHtmlEntities(s).replace(/\s+/g, " ").trim();
|
|
63
|
+
}
|
|
64
|
+
// arXiv <id> is the abstract URL (http://arxiv.org/abs/...). Force https and
|
|
65
|
+
// reject anything that isn't an arxiv.org abstract link.
|
|
66
|
+
function normalizeAbsUrl(id) {
|
|
67
|
+
const raw = id.trim();
|
|
68
|
+
if (!raw)
|
|
69
|
+
return null;
|
|
70
|
+
try {
|
|
71
|
+
const u = new URL(raw);
|
|
72
|
+
if (!/(^|\.)arxiv\.org$/.test(u.hostname))
|
|
73
|
+
return null;
|
|
74
|
+
u.protocol = "https:";
|
|
75
|
+
return u.toString();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=arxiv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arxiv.js","sourceRoot":"","sources":["../../src/search/arxiv.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,uEAAuE;AACvE,4EAA4E;AAC5E,+CAA+C;AAC/C,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,2BAA2B;AAE3B,OAAO,EAAE,mBAAmB,EAAyC,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,OAAO,CAAC;IAExB,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,KAAa,EAAE,MAAoB;QAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE,YAAY,EAAE,gDAAgD,EAAE;YAC3E,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,kBAAkB;AAClB,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAa;IACvD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,oCAAoC,CAAC;IACrD,IAAI,CAAyB,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,OAAO,CAAC,IAAI,CAAC;YACX,GAAG;YACH,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI;SACL,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;IACrC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,IAAY;IACpC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,4BAA4B,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,6EAA6E;AAC7E,yDAAyD;AACzD,SAAS,eAAe,CAAC,EAAU;IACjC,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACtB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/search/brave.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brave.d.ts","sourceRoot":"","sources":["../../src/search/brave.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"brave.d.ts","sourceRoot":"","sources":["../../src/search/brave.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1F,qBAAa,WAAY,YAAW,aAAa;IAEnC,OAAO,CAAC,QAAQ,CAAC,GAAG;IADhC,QAAQ,CAAC,IAAI,WAAW;gBACK,GAAG,EAAE,MAAM;IAElC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAuB1F"}
|