scoutline 0.6.4 → 0.7.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 +8 -9
- package/bin/scoutline.js +2 -3
- package/dist/capabilities/crawl.d.ts +93 -0
- package/dist/capabilities/crawl.d.ts.map +1 -0
- package/dist/capabilities/crawl.js +62 -0
- package/dist/capabilities/crawl.js.map +1 -0
- package/dist/capabilities/diagnostics.d.ts +45 -43
- package/dist/capabilities/diagnostics.d.ts.map +1 -1
- package/dist/capabilities/diagnostics.js +58 -71
- package/dist/capabilities/diagnostics.js.map +1 -1
- package/dist/capabilities/map.d.ts +81 -0
- package/dist/capabilities/map.d.ts.map +1 -0
- package/dist/capabilities/map.js +60 -0
- package/dist/capabilities/map.js.map +1 -0
- package/dist/capabilities/quota.js +1 -1
- package/dist/capabilities/quota.js.map +1 -1
- package/dist/capabilities/research.d.ts +98 -0
- package/dist/capabilities/research.d.ts.map +1 -0
- package/dist/capabilities/research.js +71 -0
- package/dist/capabilities/research.js.map +1 -0
- package/dist/capabilities/search.d.ts +9 -1
- package/dist/capabilities/search.d.ts.map +1 -1
- package/dist/commands/crawl.d.ts +46 -0
- package/dist/commands/crawl.d.ts.map +1 -0
- package/dist/commands/crawl.js +170 -0
- package/dist/commands/crawl.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -8
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +37 -34
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/map.d.ts +39 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +121 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +7 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/research.d.ts +62 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +314 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/search.d.ts +2 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +11 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +260 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/cache.d.ts +13 -0
- package/dist/lib/cache.d.ts.map +1 -1
- package/dist/lib/cache.js +15 -0
- package/dist/lib/cache.js.map +1 -1
- package/dist/lib/execution.d.ts +105 -1
- package/dist/lib/execution.d.ts.map +1 -1
- package/dist/lib/execution.js +73 -1
- package/dist/lib/execution.js.map +1 -1
- package/dist/lib/redact.d.ts +2 -1
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +8 -1
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/research-state.d.ts +104 -0
- package/dist/lib/research-state.d.ts.map +1 -0
- package/dist/lib/research-state.js +214 -0
- package/dist/lib/research-state.js.map +1 -0
- package/dist/lib/search-topic.d.ts +21 -0
- package/dist/lib/search-topic.d.ts.map +1 -0
- package/dist/lib/search-topic.js +36 -0
- package/dist/lib/search-topic.js.map +1 -0
- package/dist/providers/minimax/adapter.d.ts.map +1 -1
- package/dist/providers/minimax/adapter.js +6 -1
- package/dist/providers/minimax/adapter.js.map +1 -1
- package/dist/providers/minimax/vision-conformance.d.ts +2 -2
- package/dist/providers/minimax/vision-conformance.js +2 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/tavily/adapter.d.ts +62 -0
- package/dist/providers/tavily/adapter.d.ts.map +1 -0
- package/dist/providers/tavily/adapter.js +970 -0
- package/dist/providers/tavily/adapter.js.map +1 -0
- package/dist/providers/tavily/client.d.ts +184 -0
- package/dist/providers/tavily/client.d.ts.map +1 -0
- package/dist/providers/tavily/client.js +486 -0
- package/dist/providers/tavily/client.js.map +1 -0
- package/dist/providers/tavily/credentials.d.ts +34 -0
- package/dist/providers/tavily/credentials.d.ts.map +1 -0
- package/dist/providers/tavily/credentials.js +56 -0
- package/dist/providers/tavily/credentials.js.map +1 -0
- package/dist/providers/tavily/diagnostics.d.ts +44 -0
- package/dist/providers/tavily/diagnostics.d.ts.map +1 -0
- package/dist/providers/tavily/diagnostics.js +70 -0
- package/dist/providers/tavily/diagnostics.js.map +1 -0
- package/dist/providers/tavily/quota.d.ts +60 -0
- package/dist/providers/tavily/quota.d.ts.map +1 -0
- package/dist/providers/tavily/quota.js +186 -0
- package/dist/providers/tavily/quota.js.map +1 -0
- package/dist/providers/types.d.ts +14 -2
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/zai/adapter.d.ts.map +1 -1
- package/dist/providers/zai/adapter.js +6 -1
- package/dist/providers/zai/adapter.js.map +1 -1
- 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)
|
|
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 } 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,7 @@ export interface SearchOptions {
|
|
|
20
20
|
recency?: RecencyFilter;
|
|
21
21
|
contentSize?: "medium" | "high";
|
|
22
22
|
location?: "cn" | "us";
|
|
23
|
+
topic?: SearchTopic;
|
|
23
24
|
maxSummary?: number;
|
|
24
25
|
fields?: string[];
|
|
25
26
|
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,
|
|
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,EACZ,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,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;AA8HD,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,QA4DhB,CAAC"}
|
package/dist/commands/search.js
CHANGED
|
@@ -45,6 +45,8 @@ 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;
|
|
48
50
|
return Object.keys(controls).length > 0 ? controls : undefined;
|
|
49
51
|
}
|
|
50
52
|
/**
|
|
@@ -169,19 +171,23 @@ export async function search(query, options = {}, deps, context) {
|
|
|
169
171
|
}
|
|
170
172
|
// Help text
|
|
171
173
|
export const SEARCH_HELP = `
|
|
172
|
-
Search Command - Real-time web search (Z.AI or
|
|
174
|
+
Search Command - Real-time web search (Z.AI, MiniMax, or Tavily)
|
|
173
175
|
|
|
174
176
|
Usage: scoutline search <query> [options]
|
|
175
177
|
|
|
176
178
|
Provider selection (precedence: explicit flag, then SCOUTLINE_PROVIDER, then zai):
|
|
177
|
-
--provider <zai|minimax> Select the search provider (default: zai)
|
|
178
|
-
SCOUTLINE_PROVIDER=<id>
|
|
179
|
+
--provider <zai|minimax|tavily> Select the search provider (default: zai)
|
|
180
|
+
SCOUTLINE_PROVIDER=<id> Fallback when --provider is not passed
|
|
179
181
|
|
|
180
182
|
Note: --domain, --recency, --content-size, and --location are Z.AI-only
|
|
181
183
|
controls. They are rejected (UNSUPPORTED_OPTION) before invocation when
|
|
182
|
-
--provider minimax is selected.
|
|
184
|
+
--provider minimax or tavily is selected. --topic is accepted by all
|
|
185
|
+
providers.
|
|
183
186
|
|
|
184
187
|
Options:
|
|
188
|
+
--topic <t> Search topic hint (all providers): general, news, finance
|
|
189
|
+
(default: general). Z.AI/MiniMax append a keyword to the
|
|
190
|
+
query; Tavily passes it natively.
|
|
185
191
|
--domain <d> Limit to specific domain (Z.AI only; e.g., github.com)
|
|
186
192
|
--recency <r> Filter by time (Z.AI only): oneDay, oneWeek, oneMonth, oneYear, noLimit
|
|
187
193
|
--content-size <s> Content size (Z.AI only): medium, high
|
|
@@ -206,6 +212,7 @@ Examples:
|
|
|
206
212
|
scoutline search "Node.js security" --domain nodejs.org
|
|
207
213
|
scoutline --provider minimax search "AI news"
|
|
208
214
|
SCOUTLINE_PROVIDER=minimax scoutline search "AI news"
|
|
215
|
+
scoutline --provider tavily search "AI funding rounds" --topic news
|
|
209
216
|
scoutline search "x" -O compact # ultra-compact
|
|
210
217
|
scoutline search "x" -O markdown --max-summary 80 # chat-ready
|
|
211
218
|
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":"AAAA;;;;;;;;;;GAUG;
|
|
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,14 @@ 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;
|
|
26
34
|
export interface MainDependencies {
|
|
27
35
|
readonly invocation: CommandInvocationAdapter;
|
|
28
36
|
readonly env: NodeJS.ProcessEnv;
|
|
@@ -61,6 +69,36 @@ export interface MainDependencies {
|
|
|
61
69
|
readonly readerCache?: ResponseCache;
|
|
62
70
|
readonly readerSleep?: (ms: number) => Promise<void>;
|
|
63
71
|
readonly readerRandom?: () => number;
|
|
72
|
+
/**
|
|
73
|
+
* Injectable shared-Crawl execution dependencies (Tavily integration
|
|
74
|
+
* Ticket 05). Production defaults to the same on-disk cache and real
|
|
75
|
+
* sleep/random as Search/Repository/Reader; tests inject in-memory
|
|
76
|
+
* doubles so Crawl dispatch tests stay isolated. NOT a rename of any
|
|
77
|
+
* prior seam.
|
|
78
|
+
*/
|
|
79
|
+
readonly crawlCache?: ResponseCache;
|
|
80
|
+
readonly crawlSleep?: (ms: number) => Promise<void>;
|
|
81
|
+
readonly crawlRandom?: () => number;
|
|
82
|
+
/**
|
|
83
|
+
* Injectable shared-Map execution dependencies (Tavily integration
|
|
84
|
+
* Ticket 06). Production defaults to the same on-disk cache and real
|
|
85
|
+
* sleep/random as Search/Repository/Reader/Crawl; tests inject
|
|
86
|
+
* in-memory doubles so Map dispatch tests stay isolated. NOT a rename
|
|
87
|
+
* of any prior seam.
|
|
88
|
+
*/
|
|
89
|
+
readonly mapCache?: ResponseCache;
|
|
90
|
+
readonly mapSleep?: (ms: number) => Promise<void>;
|
|
91
|
+
readonly mapRandom?: () => number;
|
|
92
|
+
/**
|
|
93
|
+
* Injectable shared-Research execution dependencies (Tavily integration
|
|
94
|
+
* Ticket 07). Production defaults to the same on-disk cache and real
|
|
95
|
+
* sleep/random as Search/Repository/Reader/Crawl/Map; tests inject
|
|
96
|
+
* in-memory doubles so Research dispatch tests stay isolated. NOT a
|
|
97
|
+
* rename of any prior seam.
|
|
98
|
+
*/
|
|
99
|
+
readonly researchCache?: ResponseCache;
|
|
100
|
+
readonly researchSleep?: (ms: number) => Promise<void>;
|
|
101
|
+
readonly researchRandom?: () => number;
|
|
64
102
|
}
|
|
65
103
|
export declare function main(args: readonly string[], dependencies: MainDependencies): Promise<number>;
|
|
66
104
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
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;AAkb3E;;;;;;;;;;;;;;;;;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;AAk6BD,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"}
|