scoutline 0.6.4 → 0.9.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.
Files changed (148) hide show
  1. package/README.md +19 -12
  2. package/bin/scoutline.js +2 -3
  3. package/dist/capabilities/crawl.d.ts +93 -0
  4. package/dist/capabilities/crawl.d.ts.map +1 -0
  5. package/dist/capabilities/crawl.js +62 -0
  6. package/dist/capabilities/crawl.js.map +1 -0
  7. package/dist/capabilities/diagnostics.d.ts +45 -43
  8. package/dist/capabilities/diagnostics.d.ts.map +1 -1
  9. package/dist/capabilities/diagnostics.js +58 -71
  10. package/dist/capabilities/diagnostics.js.map +1 -1
  11. package/dist/capabilities/map.d.ts +81 -0
  12. package/dist/capabilities/map.d.ts.map +1 -0
  13. package/dist/capabilities/map.js +60 -0
  14. package/dist/capabilities/map.js.map +1 -0
  15. package/dist/capabilities/quota.d.ts +11 -0
  16. package/dist/capabilities/quota.d.ts.map +1 -1
  17. package/dist/capabilities/quota.js +1 -1
  18. package/dist/capabilities/quota.js.map +1 -1
  19. package/dist/capabilities/research.d.ts +98 -0
  20. package/dist/capabilities/research.d.ts.map +1 -0
  21. package/dist/capabilities/research.js +71 -0
  22. package/dist/capabilities/research.js.map +1 -0
  23. package/dist/capabilities/search.d.ts +19 -1
  24. package/dist/capabilities/search.d.ts.map +1 -1
  25. package/dist/commands/crawl.d.ts +46 -0
  26. package/dist/commands/crawl.d.ts.map +1 -0
  27. package/dist/commands/crawl.js +170 -0
  28. package/dist/commands/crawl.js.map +1 -0
  29. package/dist/commands/doctor.d.ts +7 -8
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +40 -34
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/map.d.ts +39 -0
  34. package/dist/commands/map.d.ts.map +1 -0
  35. package/dist/commands/map.js +121 -0
  36. package/dist/commands/map.js.map +1 -0
  37. package/dist/commands/quota.d.ts +23 -0
  38. package/dist/commands/quota.d.ts.map +1 -1
  39. package/dist/commands/quota.js +21 -4
  40. package/dist/commands/quota.js.map +1 -1
  41. package/dist/commands/read.d.ts.map +1 -1
  42. package/dist/commands/read.js +7 -1
  43. package/dist/commands/read.js.map +1 -1
  44. package/dist/commands/repo.js +1 -1
  45. package/dist/commands/research.d.ts +62 -0
  46. package/dist/commands/research.d.ts.map +1 -0
  47. package/dist/commands/research.js +314 -0
  48. package/dist/commands/research.js.map +1 -0
  49. package/dist/commands/search.d.ts +3 -1
  50. package/dist/commands/search.d.ts.map +1 -1
  51. package/dist/commands/search.js +26 -10
  52. package/dist/commands/search.js.map +1 -1
  53. package/dist/index.d.ts +45 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +291 -13
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/cache.d.ts +13 -0
  58. package/dist/lib/cache.d.ts.map +1 -1
  59. package/dist/lib/cache.js +15 -0
  60. package/dist/lib/cache.js.map +1 -1
  61. package/dist/lib/execution.d.ts +105 -1
  62. package/dist/lib/execution.d.ts.map +1 -1
  63. package/dist/lib/execution.js +73 -1
  64. package/dist/lib/execution.js.map +1 -1
  65. package/dist/lib/redact.d.ts +2 -1
  66. package/dist/lib/redact.d.ts.map +1 -1
  67. package/dist/lib/redact.js +14 -1
  68. package/dist/lib/redact.js.map +1 -1
  69. package/dist/lib/research-state.d.ts +104 -0
  70. package/dist/lib/research-state.d.ts.map +1 -0
  71. package/dist/lib/research-state.js +214 -0
  72. package/dist/lib/research-state.js.map +1 -0
  73. package/dist/lib/search-topic.d.ts +21 -0
  74. package/dist/lib/search-topic.d.ts.map +1 -0
  75. package/dist/lib/search-topic.js +36 -0
  76. package/dist/lib/search-topic.js.map +1 -0
  77. package/dist/providers/brave/adapter.d.ts +42 -0
  78. package/dist/providers/brave/adapter.d.ts.map +1 -0
  79. package/dist/providers/brave/adapter.js +504 -0
  80. package/dist/providers/brave/adapter.js.map +1 -0
  81. package/dist/providers/brave/client.d.ts +161 -0
  82. package/dist/providers/brave/client.d.ts.map +1 -0
  83. package/dist/providers/brave/client.js +297 -0
  84. package/dist/providers/brave/client.js.map +1 -0
  85. package/dist/providers/brave/credentials.d.ts +33 -0
  86. package/dist/providers/brave/credentials.d.ts.map +1 -0
  87. package/dist/providers/brave/credentials.js +55 -0
  88. package/dist/providers/brave/credentials.js.map +1 -0
  89. package/dist/providers/brave/diagnostics.d.ts +46 -0
  90. package/dist/providers/brave/diagnostics.d.ts.map +1 -0
  91. package/dist/providers/brave/diagnostics.js +76 -0
  92. package/dist/providers/brave/diagnostics.js.map +1 -0
  93. package/dist/providers/brave/quota.d.ts +86 -0
  94. package/dist/providers/brave/quota.d.ts.map +1 -0
  95. package/dist/providers/brave/quota.js +247 -0
  96. package/dist/providers/brave/quota.js.map +1 -0
  97. package/dist/providers/exa/adapter.d.ts +58 -0
  98. package/dist/providers/exa/adapter.d.ts.map +1 -0
  99. package/dist/providers/exa/adapter.js +892 -0
  100. package/dist/providers/exa/adapter.js.map +1 -0
  101. package/dist/providers/exa/client.d.ts +143 -0
  102. package/dist/providers/exa/client.d.ts.map +1 -0
  103. package/dist/providers/exa/client.js +328 -0
  104. package/dist/providers/exa/client.js.map +1 -0
  105. package/dist/providers/exa/credentials.d.ts +34 -0
  106. package/dist/providers/exa/credentials.d.ts.map +1 -0
  107. package/dist/providers/exa/credentials.js +56 -0
  108. package/dist/providers/exa/credentials.js.map +1 -0
  109. package/dist/providers/exa/diagnostics.d.ts +42 -0
  110. package/dist/providers/exa/diagnostics.d.ts.map +1 -0
  111. package/dist/providers/exa/diagnostics.js +69 -0
  112. package/dist/providers/exa/diagnostics.js.map +1 -0
  113. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  114. package/dist/providers/minimax/adapter.js +7 -2
  115. package/dist/providers/minimax/adapter.js.map +1 -1
  116. package/dist/providers/minimax/vision-conformance.d.ts +2 -2
  117. package/dist/providers/minimax/vision-conformance.js +2 -2
  118. package/dist/providers/registry.d.ts.map +1 -1
  119. package/dist/providers/registry.js +6 -0
  120. package/dist/providers/registry.js.map +1 -1
  121. package/dist/providers/tavily/adapter.d.ts +62 -0
  122. package/dist/providers/tavily/adapter.d.ts.map +1 -0
  123. package/dist/providers/tavily/adapter.js +975 -0
  124. package/dist/providers/tavily/adapter.js.map +1 -0
  125. package/dist/providers/tavily/client.d.ts +184 -0
  126. package/dist/providers/tavily/client.d.ts.map +1 -0
  127. package/dist/providers/tavily/client.js +486 -0
  128. package/dist/providers/tavily/client.js.map +1 -0
  129. package/dist/providers/tavily/credentials.d.ts +34 -0
  130. package/dist/providers/tavily/credentials.d.ts.map +1 -0
  131. package/dist/providers/tavily/credentials.js +56 -0
  132. package/dist/providers/tavily/credentials.js.map +1 -0
  133. package/dist/providers/tavily/diagnostics.d.ts +44 -0
  134. package/dist/providers/tavily/diagnostics.d.ts.map +1 -0
  135. package/dist/providers/tavily/diagnostics.js +70 -0
  136. package/dist/providers/tavily/diagnostics.js.map +1 -0
  137. package/dist/providers/tavily/quota.d.ts +60 -0
  138. package/dist/providers/tavily/quota.d.ts.map +1 -0
  139. package/dist/providers/tavily/quota.js +186 -0
  140. package/dist/providers/tavily/quota.js.map +1 -0
  141. package/dist/providers/types.d.ts +14 -2
  142. package/dist/providers/types.d.ts.map +1 -1
  143. package/dist/providers/types.js +1 -1
  144. package/dist/providers/types.js.map +1 -1
  145. package/dist/providers/zai/adapter.d.ts.map +1 -1
  146. package/dist/providers/zai/adapter.js +13 -2
  147. package/dist/providers/zai/adapter.js.map +1 -1
  148. package/package.json +1 -1
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Research command — thin handler over the Research Capability
3
+ * (tech-plan §2c, §3, §8).
4
+ *
5
+ * Research runs an asynchronous create→poll lifecycle server-side and
6
+ * costs 4-250 credits per request. The handler shows a wait disclaimer
7
+ * before invoke, sets up a Ctrl-C signal handler that prints the
8
+ * request_id + resume command, and applies `--max-chars` as a report
9
+ * projection after the cached normalized result is produced.
10
+ *
11
+ * The Adapter's `invoke()` owns the full lifecycle (state-file resume,
12
+ * POST, poll loop, completion/failure/404 handling); shared execution
13
+ * wraps it with cache + zero-retry.
14
+ *
15
+ * Provider selection, capability support, configuration, Adapter
16
+ * construction, and adapter.research agreement live in `src/index.ts`.
17
+ *
18
+ * Cache stores the full report; `--max-chars` is a handler projection.
19
+ */
20
+ import * as fs from "node:fs";
21
+ import path from "node:path";
22
+ import { executeCachedOperation } from "../lib/execution.js";
23
+ import { researchStateDir } from "../lib/cache.js";
24
+ import { computeResearchStateHash } from "../lib/research-state.js";
25
+ import { OUTPUT_MODES } from "../lib/output.js";
26
+ import { TimeoutError, ValidationError } from "../lib/errors.js";
27
+ // ---------------------------------------------------------------------------
28
+ // Parse-level validation
29
+ // ---------------------------------------------------------------------------
30
+ const VALID_MODES = ["mini", "pro", "auto"];
31
+ const VALID_OUTPUT_LENGTHS = ["short", "standard", "long"];
32
+ const VALID_CITATION_FORMATS = ["numbered", "mla", "apa", "chicago"];
33
+ export function validateModel(value) {
34
+ if (value === undefined || value === "")
35
+ return undefined;
36
+ if (value === true) {
37
+ throw new ValidationError("--model requires a value.", `Use one of: ${VALID_MODES.join(", ")}.`);
38
+ }
39
+ const str = String(value);
40
+ if (!VALID_MODES.includes(str)) {
41
+ throw new ValidationError(`Invalid --model value "${str}": must be one of ${VALID_MODES.join(", ")}`, `Use one of: ${VALID_MODES.join(", ")}.`);
42
+ }
43
+ return str;
44
+ }
45
+ export function validateOutputLength(value) {
46
+ if (value === undefined || value === "")
47
+ return undefined;
48
+ if (value === true) {
49
+ throw new ValidationError("--output-length requires a value.", `Use one of: ${VALID_OUTPUT_LENGTHS.join(", ")}.`);
50
+ }
51
+ const str = String(value);
52
+ if (!VALID_OUTPUT_LENGTHS.includes(str)) {
53
+ throw new ValidationError(`Invalid --output-length value "${str}": must be one of ${VALID_OUTPUT_LENGTHS.join(", ")}`, `Use one of: ${VALID_OUTPUT_LENGTHS.join(", ")}.`);
54
+ }
55
+ return str;
56
+ }
57
+ export function validateCitationFormat(value) {
58
+ if (value === undefined || value === "")
59
+ return undefined;
60
+ if (value === true) {
61
+ throw new ValidationError("--citation-format requires a value.", `Use one of: ${VALID_CITATION_FORMATS.join(", ")}.`);
62
+ }
63
+ const str = String(value);
64
+ if (!VALID_CITATION_FORMATS.includes(str)) {
65
+ throw new ValidationError(`Invalid --citation-format value "${str}": must be one of ${VALID_CITATION_FORMATS.join(", ")}`, `Use one of: ${VALID_CITATION_FORMATS.join(", ")}.`);
66
+ }
67
+ return str;
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // Interrupt message
71
+ // ---------------------------------------------------------------------------
72
+ /**
73
+ * Format the Ctrl-C interrupt message. Pure and exported so tests verify
74
+ * the request_id and resume command appear in the output without
75
+ * simulating a real SIGINT. The message goes to stderr.
76
+ */
77
+ export function formatInterruptMessage(requestId, resumeCommand) {
78
+ return [
79
+ "",
80
+ "Research interrupted.",
81
+ ` request_id: ${requestId}`,
82
+ " The task is still running server-side — no credits lost.",
83
+ " Re-run to resume polling and retrieve the result:",
84
+ ` ${resumeCommand}`,
85
+ "",
86
+ ].join("\n");
87
+ }
88
+ /**
89
+ * Read the requestId from the on-disk state file synchronously (SIGINT
90
+ * path must be sync). Returns "unknown" when the file is absent or
91
+ * corrupt — the resume command alone is enough guidance.
92
+ */
93
+ function readRequestIdSync(stateFilePath) {
94
+ try {
95
+ const raw = fs.readFileSync(stateFilePath, "utf8");
96
+ const parsed = JSON.parse(raw);
97
+ if (parsed && typeof parsed.requestId === "string" && parsed.requestId.length > 0) {
98
+ return parsed.requestId;
99
+ }
100
+ }
101
+ catch {
102
+ // File absent (task not yet persisted) or corrupt — fall back.
103
+ }
104
+ return "unknown";
105
+ }
106
+ /**
107
+ * Production SIGINT registrar. Reads the state file synchronously,
108
+ * formats the interrupt message, writes it to stderr, and exits 130
109
+ * (128 + SIGINT). Returns a cleanup that detaches the listener.
110
+ */
111
+ function createProductionInterruptRegistrar(stateFilePath, resumeCommand) {
112
+ return (print) => {
113
+ const handler = () => {
114
+ print();
115
+ process.exit(130);
116
+ };
117
+ process.on("SIGINT", handler);
118
+ return () => {
119
+ process.off("SIGINT", handler);
120
+ };
121
+ };
122
+ }
123
+ function buildResearchRequest(query, options) {
124
+ const request = { query };
125
+ if (options.model !== undefined)
126
+ request.model = options.model;
127
+ if (options.outputLength !== undefined)
128
+ request.outputLength = options.outputLength;
129
+ if (options.citationFormat !== undefined)
130
+ request.citationFormat = options.citationFormat;
131
+ if (options.domain !== undefined)
132
+ request.domain = options.domain;
133
+ return request;
134
+ }
135
+ function parseReportSections(report) {
136
+ const lines = report.split("\n");
137
+ const sections = [];
138
+ let currentHeading = "";
139
+ let currentBody = [];
140
+ for (const line of lines) {
141
+ const match = line.match(/^(#{1,6})\s+(.+)$/);
142
+ if (match) {
143
+ if (currentBody.some((l) => l.trim()) || currentHeading) {
144
+ sections.push({ heading: currentHeading, body: currentBody.join("\n").trim() });
145
+ }
146
+ currentHeading = match[2].trim();
147
+ currentBody = [];
148
+ }
149
+ else {
150
+ currentBody.push(line);
151
+ }
152
+ }
153
+ if (currentBody.some((l) => l.trim()) || currentHeading) {
154
+ sections.push({ heading: currentHeading, body: currentBody.join("\n").trim() });
155
+ }
156
+ return sections.filter((s) => !/^(sources?|references?|citations?)$/i.test(s.heading));
157
+ }
158
+ function buildResearchPresentations(sections, sources) {
159
+ const compact = sections.map((s) => s.body).join("\n\n");
160
+ const markdown = sections.map((s) => `## ${s.heading}\n\n${s.body}`).join("\n\n") +
161
+ (sources.length > 0
162
+ ? "\n\n---\n\n## Sources\n\n" +
163
+ sources
164
+ .map((s, i) => `${i + 1}. [${s.title ?? s.url ?? "Source"}](${s.url ?? ""})`)
165
+ .join("\n")
166
+ : "");
167
+ const refs = sources
168
+ .map((s) => s.url ?? "")
169
+ .filter((u) => u.length > 0)
170
+ .join("\n");
171
+ return { compact, markdown, refs, tty: markdown };
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Handler
175
+ // ---------------------------------------------------------------------------
176
+ const DEFAULT_POLL_TIMEOUT_SECONDS = 300;
177
+ export async function research(query, options = {}, deps, _context) {
178
+ if (typeof query !== "string" || query.trim() === "") {
179
+ throw new ValidationError("Research query must contain at least one non-whitespace character");
180
+ }
181
+ const request = buildResearchRequest(query, options);
182
+ // Compute the state-file path for the SIGINT handler. The identity
183
+ // hash uses the same formula as the adapter (CR3), so the file the
184
+ // handler reads is the one the adapter wrote.
185
+ const identity = deps.capability.run.cacheIdentity(request);
186
+ const identityHash = computeResearchStateHash({
187
+ provider: identity.provider,
188
+ capability: identity.capability,
189
+ credentialFingerprint: identity.credentialFingerprint,
190
+ request: identity.request,
191
+ });
192
+ const stateFilePath = path.join(researchStateDir(), `${identityHash}.json`);
193
+ const resumeCommand = `scoutline research "${query}"`;
194
+ // Register the Ctrl-C handler. Production reads the state file sync
195
+ // and exits 130; tests inject a recorder.
196
+ const register = deps.registerInterrupt ?? createProductionInterruptRegistrar(stateFilePath, resumeCommand);
197
+ const print = () => {
198
+ const requestId = readRequestIdSync(stateFilePath);
199
+ process.stderr.write(formatInterruptMessage(requestId, resumeCommand));
200
+ };
201
+ const cleanup = register(print);
202
+ try {
203
+ // Polling timeout: bounds the entire operation. The state file
204
+ // persists on timeout, so re-running resumes polling. On timeout we
205
+ // also abort the controller so the Adapter's poll loop stops early
206
+ // and its pending poll-interval timers are cleared — otherwise a
207
+ // lingering `setTimeout` keeps the event loop alive and the CLI
208
+ // appears frozen after the error is printed (JS promises can't be
209
+ // cancelled, so `Promise.race` leaves the loser running).
210
+ const timeoutSeconds = options.timeout ?? DEFAULT_POLL_TIMEOUT_SECONDS;
211
+ const timeoutMs = timeoutSeconds * 1000;
212
+ const controller = new AbortController();
213
+ let timeoutId;
214
+ const timeoutPromise = new Promise((_, reject) => {
215
+ timeoutId = setTimeout(() => {
216
+ controller.abort();
217
+ reject(new TimeoutError(timeoutMs, "Research polling timed out — re-run to resume"));
218
+ }, timeoutMs);
219
+ });
220
+ const opPromise = executeCachedOperation(deps.capability.run, request, { noCache: options.noCache === true, signal: controller.signal }, deps.execution);
221
+ // When the timeout wins the race, the Adapter poll loop is signalled
222
+ // to abort and opPromise rejects shortly after. Nobody is awaiting it
223
+ // by then, so attach a late-rejection guard to avoid an unhandled
224
+ // rejection. The canonical error surfaced to the user is the timeout
225
+ // rejection from the race, not this one.
226
+ opPromise.catch(() => { });
227
+ let result;
228
+ try {
229
+ result = await Promise.race([opPromise, timeoutPromise]);
230
+ }
231
+ finally {
232
+ if (timeoutId !== undefined)
233
+ clearTimeout(timeoutId);
234
+ }
235
+ const reportText = options.maxChars && options.maxChars > 0 && result.report.length > options.maxChars
236
+ ? result.report.slice(0, options.maxChars - 1).trimEnd() + "…"
237
+ : result.report;
238
+ const sections = parseReportSections(reportText);
239
+ const envelope = {
240
+ schemaVersion: result.schemaVersion,
241
+ query: result.query,
242
+ model: result.model,
243
+ sections,
244
+ sources: result.sources,
245
+ };
246
+ if (options.maxChars && options.maxChars > 0 && result.report.length > options.maxChars) {
247
+ envelope.reportTruncated = true;
248
+ envelope.originalReportLength = result.report.length;
249
+ }
250
+ return {
251
+ kind: "data",
252
+ data: envelope,
253
+ presentations: buildResearchPresentations(sections, result.sources),
254
+ };
255
+ }
256
+ finally {
257
+ cleanup();
258
+ }
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Help
262
+ // ---------------------------------------------------------------------------
263
+ const OUTPUT_MODE_LIST = OUTPUT_MODES.join(" | ");
264
+ export const RESEARCH_HELP = `
265
+ Research Command - Deep research with citations (Provider Capability)
266
+
267
+ Usage: scoutline research <query> [options]
268
+
269
+ Runs an asynchronous deep-research task: the Provider searches, reads,
270
+ and synthesizes a cited report. This is a CREDIT-INTENSIVE operation
271
+ (4-250 credits) that may take several minutes.
272
+
273
+ Ctrl-C safety: interrupting a research task does NOT lose credits. The
274
+ task keeps running server-side and its request_id is persisted to a state
275
+ file. Re-running the SAME command resumes polling instead of creating a
276
+ second task (no double charge).
277
+
278
+ Provider selection (precedence: --provider, then SCOUTLINE_PROVIDER,
279
+ then the configured default):
280
+ - Tavily advertises the research Capability and supplies the Adapter.
281
+ - Z.AI and MiniMax do NOT advertise research. Selecting them returns
282
+ UNSUPPORTED_CAPABILITY with no fallback.
283
+
284
+ Options:
285
+ --model <m> Research model: mini | pro | auto (default: auto)
286
+ --output-length <l> Report length: short | standard | long (default: standard)
287
+ --citation-format <f> Citations: numbered | mla | apa | chicago (default: numbered)
288
+ --domain <d> Restrict research to a single domain
289
+ --max-chars <n> Truncate the report text to <n> chars
290
+ (projection only; cache stores full report)
291
+ --timeout <s> Polling timeout in seconds (default: 300)
292
+ --no-cache Bypass the response cache for this invocation
293
+
294
+ Common Options:
295
+ --provider <id> Override the active Provider (zai | minimax | tavily | exa)
296
+ --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
297
+ -O <mode> Alias for --output-format
298
+
299
+ Output format (schema-version-1):
300
+ {
301
+ "schemaVersion": 1,
302
+ "query": "<your query>",
303
+ "model": "<model used>",
304
+ "sections": [{ "heading": "...", "body": "..." }],
305
+ "sources": [{ "title": "...", "url": "..." }]
306
+ }
307
+
308
+ Examples:
309
+ scoutline research "Compare React vs Svelte for enterprise apps"
310
+ scoutline research "State of carbon capture 2025" --model pro
311
+ scoutline research "Quantum computing benchmarks" --citation-format apa
312
+ scoutline --provider tavily research "Rust async runtime comparison"
313
+ `.trim();
314
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * execution and never enters an Adapter request or cache identity.
11
11
  */
12
12
  import type { CommandContext, CommandResult } from "../command-invocation.js";
13
- import type { SearchCapability } from "../capabilities/search.js";
13
+ import type { SearchCapability, SearchTopic, SearchType } from "../capabilities/search.js";
14
14
  import type { ResponseCache } from "../lib/cache.js";
15
15
  import type { RetryPolicy } from "../lib/execution.js";
16
16
  type RecencyFilter = "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
@@ -20,6 +20,8 @@ export interface SearchOptions {
20
20
  recency?: RecencyFilter;
21
21
  contentSize?: "medium" | "high";
22
22
  location?: "cn" | "us";
23
+ topic?: SearchTopic;
24
+ type?: SearchType;
23
25
  maxSummary?: number;
24
26
  fields?: string[];
25
27
  noCache?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AA6HD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,YAAK,EAC3B,IAAI,EAAE,2BAA2B,EACjC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,CA2DxB;AAGD,eAAO,MAAM,WAAW,QAuDhB,CAAC"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EACV,gBAAgB,EAIhB,WAAW,EACX,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AA+HD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,YAAK,EAC3B,IAAI,EAAE,2BAA2B,EACjC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,CA2DxB;AAGD,eAAO,MAAM,WAAW,QAmEhB,CAAC"}
@@ -45,6 +45,10 @@ function buildControls(options) {
45
45
  controls.contentSize = options.contentSize;
46
46
  if (options.location)
47
47
  controls.location = options.location;
48
+ if (options.topic)
49
+ controls.topic = options.topic;
50
+ if (options.type)
51
+ controls.type = options.type;
48
52
  return Object.keys(controls).length > 0 ? controls : undefined;
49
53
  }
50
54
  /**
@@ -169,23 +173,34 @@ export async function search(query, options = {}, deps, context) {
169
173
  }
170
174
  // Help text
171
175
  export const SEARCH_HELP = `
172
- Search Command - Real-time web search (Z.AI or MiniMax)
176
+ Search Command - Real-time web search (Z.AI, MiniMax, Tavily, Exa, or Brave)
173
177
 
174
178
  Usage: scoutline search <query> [options]
175
179
 
176
180
  Provider selection (precedence: explicit flag, then SCOUTLINE_PROVIDER, then zai):
177
- --provider <zai|minimax> Select the search provider (default: zai)
178
- SCOUTLINE_PROVIDER=<id> Fallback when --provider is not passed
181
+ --provider <zai|minimax|tavily|exa|brave> Select the search provider (default: zai)
182
+ SCOUTLINE_PROVIDER=<id> Fallback when --provider is not passed
179
183
 
180
- Note: --domain, --recency, --content-size, and --location are Z.AI-only
181
- controls. They are rejected (UNSUPPORTED_OPTION) before invocation when
182
- --provider minimax is selected.
184
+ Note: support for the optional controls below varies by provider AND by
185
+ control — a control accepted by one provider may be rejected
186
+ (UNSUPPORTED_OPTION) by another before invocation. Run
187
+ \`scoutline doctor\` for the live per-provider support matrix rather than
188
+ relying on a fixed list here.
183
189
 
184
190
  Options:
185
- --domain <d> Limit to specific domain (Z.AI only; e.g., github.com)
186
- --recency <r> Filter by time (Z.AI only): oneDay, oneWeek, oneMonth, oneYear, noLimit
187
- --content-size <s> Content size (Z.AI only): medium, high
188
- --location <l> Location hint (Z.AI only): cn, us
191
+ --topic <t> Search topic hint (all providers): general, news, finance
192
+ (default: general). Z.AI/MiniMax append a keyword to the
193
+ query; Tavily passes it natively; Exa maps it to a
194
+ category; Brave uses a news endpoint for \`news\`.
195
+ --type <video> Content-type axis; supported by Brave (\`video\`).
196
+ Mutually exclusive with --topic.
197
+ --domain <d> Limit to specific domain (provider support varies; e.g., github.com)
198
+ --recency <r> Filter by time (provider support varies): oneDay, oneWeek, oneMonth, oneYear, noLimit
199
+ --content-size <s> Depth/size. medium = default. high maps per provider:
200
+ Z.AI content_size; Tavily search_depth=advanced; Exa accepted;
201
+ Brave → LLM Context (extracted passages); MiniMax rejected
202
+ (UNSUPPORTED_OPTION).
203
+ --location <l> Location hint (provider support varies): cn, us
189
204
  --count <n> Limit number of results (applied after normalization)
190
205
  --max-summary <n> Truncate each result summary to <n> chars (JSON modes only)
191
206
  --fields <a,b,c> Field allowlist for JSON output (e.g. title,url)
@@ -206,6 +221,7 @@ Examples:
206
221
  scoutline search "Node.js security" --domain nodejs.org
207
222
  scoutline --provider minimax search "AI news"
208
223
  SCOUTLINE_PROVIDER=minimax scoutline search "AI news"
224
+ scoutline --provider tavily search "AI funding rounds" --topic news
209
225
  scoutline search "x" -O compact # ultra-compact
210
226
  scoutline search "x" -O markdown --max-summary 80 # chat-ready
211
227
  scoutline search "x" --fields title,url # field-filtered JSON
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -23,6 +23,21 @@ import type { ProviderDescriptor } from "./providers/types.js";
23
23
  * values today).
24
24
  */
25
25
  export declare function parseAndValidateCount(raw: unknown): number | undefined;
26
+ /**
27
+ * Validate the `--topic` flag value BEFORE Provider resolution, mirroring
28
+ * the `--count` parse-level gate (Fixup D — B11). An invalid value
29
+ * surfaces VALIDATION_ERROR regardless of which Provider would have been
30
+ * selected, because parse-level validation fires before the support /
31
+ * configuration gates. Exported for testing.
32
+ */
33
+ export declare function parseAndValidateTopic(raw: unknown): "general" | "news" | "finance" | undefined;
34
+ /**
35
+ * Validate the `--type` flag value BEFORE Provider resolution, mirroring
36
+ * `parseAndValidateTopic`. `type` is a content axis (not an editorial
37
+ * topic axis) and is mutually exclusive with `--topic` (checked in
38
+ * `handleSearch`). Exported for testing.
39
+ */
40
+ export declare function parseAndValidateType(raw: unknown): "video" | undefined;
26
41
  export interface MainDependencies {
27
42
  readonly invocation: CommandInvocationAdapter;
28
43
  readonly env: NodeJS.ProcessEnv;
@@ -61,6 +76,36 @@ export interface MainDependencies {
61
76
  readonly readerCache?: ResponseCache;
62
77
  readonly readerSleep?: (ms: number) => Promise<void>;
63
78
  readonly readerRandom?: () => number;
79
+ /**
80
+ * Injectable shared-Crawl execution dependencies (Tavily integration
81
+ * Ticket 05). Production defaults to the same on-disk cache and real
82
+ * sleep/random as Search/Repository/Reader; tests inject in-memory
83
+ * doubles so Crawl dispatch tests stay isolated. NOT a rename of any
84
+ * prior seam.
85
+ */
86
+ readonly crawlCache?: ResponseCache;
87
+ readonly crawlSleep?: (ms: number) => Promise<void>;
88
+ readonly crawlRandom?: () => number;
89
+ /**
90
+ * Injectable shared-Map execution dependencies (Tavily integration
91
+ * Ticket 06). Production defaults to the same on-disk cache and real
92
+ * sleep/random as Search/Repository/Reader/Crawl; tests inject
93
+ * in-memory doubles so Map dispatch tests stay isolated. NOT a rename
94
+ * of any prior seam.
95
+ */
96
+ readonly mapCache?: ResponseCache;
97
+ readonly mapSleep?: (ms: number) => Promise<void>;
98
+ readonly mapRandom?: () => number;
99
+ /**
100
+ * Injectable shared-Research execution dependencies (Tavily integration
101
+ * Ticket 07). Production defaults to the same on-disk cache and real
102
+ * sleep/random as Search/Repository/Reader/Crawl/Map; tests inject
103
+ * in-memory doubles so Research dispatch tests stay isolated. NOT a
104
+ * rename of any prior seam.
105
+ */
106
+ readonly researchCache?: ResponseCache;
107
+ readonly researchSleep?: (ms: number) => Promise<void>;
108
+ readonly researchRandom?: () => number;
64
109
  }
65
110
  export declare function main(args: readonly string[], dependencies: MainDependencies): Promise<number>;
66
111
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,OAAO,EAAiB,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI1E,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,sBAAsB,CAAC;AA8Z3E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAuBtE;AAuoBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC7D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAID,wBAAsB,IAAI,CACxB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,EAAE,gBAAgB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA4HjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsCH,OAAO,EAAiB,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI1E,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,sBAAsB,CAAC;AAmb3E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAuBtE;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAgB9F;AAID;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAatE;AAg7BD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC7D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC;CACxC;AAID,wBAAsB,IAAI,CACxB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,EAAE,gBAAgB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgKjB"}