scoutline 0.1.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/LICENSE +21 -0
- package/README.md +146 -0
- package/bin/scoutline.js +17 -0
- package/dist/commands/code.d.ts +13 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +94 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +70 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/quota.d.ts +9 -0
- package/dist/commands/quota.d.ts.map +1 -0
- package/dist/commands/quota.js +77 -0
- package/dist/commands/quota.js.map +1 -0
- package/dist/commands/read.d.ts +20 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +166 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/repo.d.ts +22 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +219 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/search.d.ts +19 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +235 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/tools.d.ts +22 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +173 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/vision.d.ts +15 -0
- package/dist/commands/vision.d.ts.map +1 -0
- package/dist/commands/vision.js +168 -0
- package/dist/commands/vision.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +443 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +133 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +150 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/cache.d.ts +34 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +168 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/code-mode.d.ts +19 -0
- package/dist/lib/code-mode.d.ts.map +1 -0
- package/dist/lib/code-mode.js +83 -0
- package/dist/lib/code-mode.js.map +1 -0
- package/dist/lib/config.d.ts +21 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +59 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +29 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +69 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/extract.d.ts +37 -0
- package/dist/lib/extract.d.ts.map +1 -0
- package/dist/lib/extract.js +106 -0
- package/dist/lib/extract.js.map +1 -0
- package/dist/lib/image.d.ts +13 -0
- package/dist/lib/image.d.ts.map +1 -0
- package/dist/lib/image.js +102 -0
- package/dist/lib/image.js.map +1 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +10 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/mcp-client.d.ts +161 -0
- package/dist/lib/mcp-client.d.ts.map +1 -0
- package/dist/lib/mcp-client.js +494 -0
- package/dist/lib/mcp-client.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +24 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +129 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/monitor-client.d.ts +51 -0
- package/dist/lib/monitor-client.d.ts.map +1 -0
- package/dist/lib/monitor-client.js +115 -0
- package/dist/lib/monitor-client.js.map +1 -0
- package/dist/lib/output.d.ts +24 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +59 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/redact.d.ts +7 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +50 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/silence.d.ts +16 -0
- package/dist/lib/silence.d.ts.map +1 -0
- package/dist/lib/silence.js +56 -0
- package/dist/lib/silence.js.map +1 -0
- package/dist/lib/tty.d.ts +60 -0
- package/dist/lib/tty.d.ts.map +1 -0
- package/dist/lib/tty.js +103 -0
- package/dist/lib/tty.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web search command using Z.AI WebSearchPrime MCP
|
|
3
|
+
*/
|
|
4
|
+
import { ZaiMcpClient } from "../lib/mcp-client.js";
|
|
5
|
+
import { outputSuccess, getOutputMode } from "../lib/output.js";
|
|
6
|
+
import { formatErrorOutput } from "../lib/errors.js";
|
|
7
|
+
import { silenceConsole, restoreConsole } from "../lib/silence.js";
|
|
8
|
+
import { formatSearchResultsPretty } from "../lib/tty.js";
|
|
9
|
+
function truncate(text, max) {
|
|
10
|
+
if (!text)
|
|
11
|
+
return "";
|
|
12
|
+
if (!max || max <= 0 || text.length <= max)
|
|
13
|
+
return text;
|
|
14
|
+
return text.slice(0, max - 1).trimEnd() + "…";
|
|
15
|
+
}
|
|
16
|
+
function filterFields(result, fields) {
|
|
17
|
+
if (!fields || fields.length === 0)
|
|
18
|
+
return result;
|
|
19
|
+
const allowed = new Set(fields);
|
|
20
|
+
const filtered = {};
|
|
21
|
+
for (const [key, value] of Object.entries(result)) {
|
|
22
|
+
if (allowed.has(key)) {
|
|
23
|
+
filtered[key] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return filtered;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Merge results from N parallel sub-queries: dedupe by URL, rank by
|
|
30
|
+
* (occurrence count desc, then best position asc). First sub-query's
|
|
31
|
+
* title/summary wins for each URL (highest-priority query).
|
|
32
|
+
*/
|
|
33
|
+
function mergeResults(byQuery) {
|
|
34
|
+
const map = new Map();
|
|
35
|
+
for (const [qIdx, results] of byQuery.entries()) {
|
|
36
|
+
for (const r of results) {
|
|
37
|
+
const existing = map.get(r.url);
|
|
38
|
+
if (existing) {
|
|
39
|
+
existing.occurrences += 1;
|
|
40
|
+
existing.bestPos = Math.min(existing.bestPos, r.rank);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
map.set(r.url, {
|
|
44
|
+
...r,
|
|
45
|
+
occurrences: 1,
|
|
46
|
+
bestPos: r.rank,
|
|
47
|
+
// Keep title/summary from the EARLIEST sub-query that surfaced it.
|
|
48
|
+
// r already has those since we're iterating in order.
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// Suppress unused-var warning
|
|
52
|
+
void qIdx;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const merged = Array.from(map.values());
|
|
56
|
+
merged.sort((a, b) => {
|
|
57
|
+
if (b.occurrences !== a.occurrences)
|
|
58
|
+
return b.occurrences - a.occurrences;
|
|
59
|
+
return a.bestPos - b.bestPos;
|
|
60
|
+
});
|
|
61
|
+
// Re-rank
|
|
62
|
+
return merged.map((r, i) => {
|
|
63
|
+
const { bestPos: _bp, ...rest } = r;
|
|
64
|
+
void _bp;
|
|
65
|
+
return { ...rest, rank: i + 1 };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function renderTextFormat(results, mode) {
|
|
69
|
+
if (results.length === 0)
|
|
70
|
+
return "";
|
|
71
|
+
const lines = [];
|
|
72
|
+
for (const r of results) {
|
|
73
|
+
const occBadge = r.occurrences && r.occurrences > 1 ? ` ×${r.occurrences}` : "";
|
|
74
|
+
if (mode === "compact") {
|
|
75
|
+
lines.push(`${r.title}${occBadge} — ${r.url}`);
|
|
76
|
+
}
|
|
77
|
+
else if (mode === "markdown") {
|
|
78
|
+
lines.push(`${r.rank}. [${r.title}](${r.url})${occBadge}`);
|
|
79
|
+
if (r.summary)
|
|
80
|
+
lines.push(` ${r.summary}`);
|
|
81
|
+
}
|
|
82
|
+
else if (mode === "refs") {
|
|
83
|
+
lines.push(`[${r.rank}]${occBadge} ${r.title} — ${r.url}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return lines.join("\n");
|
|
87
|
+
}
|
|
88
|
+
export async function search(query, options = {}) {
|
|
89
|
+
silenceConsole();
|
|
90
|
+
// Split query on `|` if --merge is set. Empty fragments are dropped.
|
|
91
|
+
// A literal pipe in a single query can be escaped as `\|` (won't split).
|
|
92
|
+
let subQueries = [query];
|
|
93
|
+
if (options.merge) {
|
|
94
|
+
subQueries = query
|
|
95
|
+
.split(/(?<!\\)\|/)
|
|
96
|
+
.map((q) => q.replace(/\\\|/g, "|").trim())
|
|
97
|
+
.filter((q) => q.length > 0);
|
|
98
|
+
if (subQueries.length === 0) {
|
|
99
|
+
restoreConsole();
|
|
100
|
+
console.error(formatErrorOutput(new Error("--merge requires at least one non-empty query (split with '|')")));
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const isMerge = subQueries.length > 1;
|
|
105
|
+
try {
|
|
106
|
+
try {
|
|
107
|
+
// For merge, spawn one client per sub-query — the UTCP client isn't
|
|
108
|
+
// concurrency-safe so sharing one client across parallel calls corrupts
|
|
109
|
+
// responses. Single-query path keeps the cheaper shared-client flow.
|
|
110
|
+
let allResults;
|
|
111
|
+
if (isMerge) {
|
|
112
|
+
const clients = subQueries.map(() => new ZaiMcpClient({ enableVision: false, noCache: options.noCache }));
|
|
113
|
+
try {
|
|
114
|
+
allResults = await Promise.all(subQueries.map((q, i) => clients[i].webSearch({
|
|
115
|
+
query: q,
|
|
116
|
+
count: options.count,
|
|
117
|
+
domainFilter: options.domain,
|
|
118
|
+
recencyFilter: options.recency,
|
|
119
|
+
contentSize: options.contentSize,
|
|
120
|
+
location: options.location,
|
|
121
|
+
})));
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
await Promise.all(clients.map((c) => c.close().catch(() => { })));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const client = new ZaiMcpClient({ enableVision: false, noCache: options.noCache });
|
|
129
|
+
try {
|
|
130
|
+
allResults = [
|
|
131
|
+
await client.webSearch({
|
|
132
|
+
query: subQueries[0],
|
|
133
|
+
count: options.count,
|
|
134
|
+
domainFilter: options.domain,
|
|
135
|
+
recencyFilter: options.recency,
|
|
136
|
+
contentSize: options.contentSize,
|
|
137
|
+
location: options.location,
|
|
138
|
+
}),
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
await client.close().catch(() => { });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Format each sub-query's results, then merge if needed.
|
|
146
|
+
const perQueryFormatted = allResults.map((results) => Array.isArray(results)
|
|
147
|
+
? results.map((r, i) => ({
|
|
148
|
+
rank: i + 1,
|
|
149
|
+
title: r.title,
|
|
150
|
+
url: r.link,
|
|
151
|
+
summary: truncate(r.content, options.maxSummary),
|
|
152
|
+
...(r.media ? { source: r.media } : {}),
|
|
153
|
+
...(r.publish_date ? { date: r.publish_date } : {}),
|
|
154
|
+
}))
|
|
155
|
+
: []);
|
|
156
|
+
const formattedResults = isMerge
|
|
157
|
+
? mergeResults(perQueryFormatted)
|
|
158
|
+
: perQueryFormatted[0] || [];
|
|
159
|
+
if (isMerge) {
|
|
160
|
+
process.stderr.write(`ℹ️ merged ${subQueries.length} queries → ${formattedResults.length} unique results\n`);
|
|
161
|
+
}
|
|
162
|
+
restoreConsole();
|
|
163
|
+
const mode = getOutputMode();
|
|
164
|
+
if (mode === "tty") {
|
|
165
|
+
outputSuccess(formatSearchResultsPretty(formattedResults));
|
|
166
|
+
}
|
|
167
|
+
else if (mode === "compact" || mode === "markdown" || mode === "refs") {
|
|
168
|
+
outputSuccess(renderTextFormat(formattedResults, mode));
|
|
169
|
+
}
|
|
170
|
+
else if (options.fields && options.fields.length > 0) {
|
|
171
|
+
outputSuccess(formattedResults.map((r) => filterFields(r, options.fields)));
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
outputSuccess(formattedResults);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
restoreConsole();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
restoreConsole();
|
|
183
|
+
console.error(formatErrorOutput(error));
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Help text
|
|
188
|
+
export const SEARCH_HELP = `
|
|
189
|
+
Search Command - Real-time web search using Z.AI WebSearchPrime MCP
|
|
190
|
+
|
|
191
|
+
Usage: scoutline search <query> [options]
|
|
192
|
+
|
|
193
|
+
Options:
|
|
194
|
+
--domain <d> Limit to specific domain (e.g., github.com)
|
|
195
|
+
--recency <r> Filter by time: oneDay, oneWeek, oneMonth, oneYear, noLimit
|
|
196
|
+
--content-size <s> Content size: medium, high
|
|
197
|
+
--location <l> Location hint: cn, us
|
|
198
|
+
--count <n> Limit number of results
|
|
199
|
+
--max-summary <n> Truncate each result summary to <n> chars (JSON modes only)
|
|
200
|
+
--fields <a,b,c> Field allowlist for JSON output (e.g. title,url)
|
|
201
|
+
--merge Treat the query as multiple sub-queries split on '|'.
|
|
202
|
+
Runs them in parallel, dedupes by URL, ranks by how many
|
|
203
|
+
sub-queries surfaced each result. Escapes: '\\|' for literal pipe.
|
|
204
|
+
|
|
205
|
+
Output formats (--output-format / -O):
|
|
206
|
+
data JSON array (default, token-efficient)
|
|
207
|
+
json Envelope-wrapped JSON {success, data, timestamp}
|
|
208
|
+
pretty Pretty-printed json
|
|
209
|
+
compact "title — url" per line (no summaries)
|
|
210
|
+
markdown Numbered markdown list with summaries
|
|
211
|
+
refs "[N] title — url" per line (citation style)
|
|
212
|
+
|
|
213
|
+
Examples:
|
|
214
|
+
scoutline search "React 19 new features"
|
|
215
|
+
scoutline search "Node.js security" --domain nodejs.org
|
|
216
|
+
scoutline search "AI news" --recency oneWeek
|
|
217
|
+
scoutline search "x" -O compact # ultra-compact
|
|
218
|
+
scoutline search "x" -O markdown --max-summary 80 # chat-ready
|
|
219
|
+
scoutline search "x" --fields title,url # field-filtered JSON
|
|
220
|
+
scoutline search --merge "rust async|rust tokio|rust runtime" # multi-query merge
|
|
221
|
+
|
|
222
|
+
Default JSON shape:
|
|
223
|
+
[
|
|
224
|
+
{
|
|
225
|
+
"rank": 1,
|
|
226
|
+
"title": "Page title",
|
|
227
|
+
"url": "https://...",
|
|
228
|
+
"summary": "Page summary",
|
|
229
|
+
"source": "example.com",
|
|
230
|
+
"date": "2024-01-15",
|
|
231
|
+
"occurrences": 2 // only present with --merge when >1
|
|
232
|
+
}
|
|
233
|
+
]
|
|
234
|
+
`.trim();
|
|
235
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meta commands: tool discovery, schema inspection, and raw calls
|
|
3
|
+
*/
|
|
4
|
+
export interface ToolsOptions {
|
|
5
|
+
filter?: string;
|
|
6
|
+
full?: boolean;
|
|
7
|
+
typescript?: boolean;
|
|
8
|
+
enableVision?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function listTools(options?: ToolsOptions): Promise<void>;
|
|
11
|
+
export declare function showTool(name: string, options?: ToolsOptions): Promise<void>;
|
|
12
|
+
export interface CallToolOptions {
|
|
13
|
+
json?: string;
|
|
14
|
+
file?: string;
|
|
15
|
+
stdin?: boolean;
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
enableVision?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function callTool(toolName: string, options?: CallToolOptions): Promise<void>;
|
|
20
|
+
export declare const TOOLS_HELP: string;
|
|
21
|
+
export declare const CALL_HELP: string;
|
|
22
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCzE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtF;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAyBD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC7F;AAGD,eAAO,MAAM,UAAU,QAmBf,CAAC;AAET,eAAO,MAAM,SAAS,QAgBd,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meta commands: tool discovery, schema inspection, and raw calls
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import { ZaiMcpClient } from "../lib/mcp-client.js";
|
|
6
|
+
import { ZaiCodeModeClient } from "../lib/code-mode.js";
|
|
7
|
+
import { outputSuccess } from "../lib/output.js";
|
|
8
|
+
import { formatErrorOutput, ValidationError } from "../lib/errors.js";
|
|
9
|
+
import { silenceConsole, restoreConsole } from "../lib/silence.js";
|
|
10
|
+
import { redactTool } from "../lib/redact.js";
|
|
11
|
+
async function readStdin() {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
let data = "";
|
|
14
|
+
process.stdin.setEncoding("utf8");
|
|
15
|
+
process.stdin.on("data", (chunk) => (data += chunk));
|
|
16
|
+
process.stdin.on("end", () => resolve(data));
|
|
17
|
+
process.stdin.on("error", reject);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export async function listTools(options = {}) {
|
|
21
|
+
if (options.typescript) {
|
|
22
|
+
silenceConsole();
|
|
23
|
+
const codeClient = new ZaiCodeModeClient();
|
|
24
|
+
try {
|
|
25
|
+
const interfaces = await codeClient.getAllInterfaces();
|
|
26
|
+
outputSuccess(interfaces);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
restoreConsole();
|
|
30
|
+
console.error(formatErrorOutput(error));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
await codeClient.close().catch(() => { });
|
|
35
|
+
restoreConsole();
|
|
36
|
+
}
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
silenceConsole();
|
|
40
|
+
const client = new ZaiMcpClient({ enableVision: options.enableVision });
|
|
41
|
+
try {
|
|
42
|
+
const tools = await client.listTools();
|
|
43
|
+
const filtered = options.filter
|
|
44
|
+
? tools.filter((tool) => tool.name.toLowerCase().includes(options.filter.toLowerCase()))
|
|
45
|
+
: tools;
|
|
46
|
+
if (options.full) {
|
|
47
|
+
outputSuccess(filtered.map((tool) => redactTool(tool)));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
outputSuccess(filtered.map((tool) => tool.name));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
restoreConsole();
|
|
54
|
+
console.error(formatErrorOutput(error));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
await client.close().catch(() => { });
|
|
59
|
+
restoreConsole();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function showTool(name, options = {}) {
|
|
63
|
+
silenceConsole();
|
|
64
|
+
const client = new ZaiMcpClient({ enableVision: options.enableVision });
|
|
65
|
+
try {
|
|
66
|
+
const tool = await client.getTool(name);
|
|
67
|
+
if (!tool) {
|
|
68
|
+
restoreConsole();
|
|
69
|
+
throw new ValidationError(`Unknown tool: ${name}`);
|
|
70
|
+
}
|
|
71
|
+
outputSuccess(redactTool(tool));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
restoreConsole();
|
|
75
|
+
console.error(formatErrorOutput(error));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await client.close().catch(() => { });
|
|
80
|
+
restoreConsole();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function parseToolArgs(options) {
|
|
84
|
+
if (options.json) {
|
|
85
|
+
const raw = options.json.trim();
|
|
86
|
+
const value = raw.startsWith("@") ? await fs.readFile(raw.slice(1), "utf8") : raw;
|
|
87
|
+
return JSON.parse(value);
|
|
88
|
+
}
|
|
89
|
+
if (options.file) {
|
|
90
|
+
const value = await fs.readFile(options.file, "utf8");
|
|
91
|
+
return JSON.parse(value);
|
|
92
|
+
}
|
|
93
|
+
if (options.stdin || !process.stdin.isTTY) {
|
|
94
|
+
const value = await readStdin();
|
|
95
|
+
if (value.trim().length === 0) {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
return JSON.parse(value);
|
|
99
|
+
}
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
export async function callTool(toolName, options = {}) {
|
|
103
|
+
let args;
|
|
104
|
+
try {
|
|
105
|
+
args = await parseToolArgs(options);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (error instanceof SyntaxError) {
|
|
109
|
+
console.error(formatErrorOutput(new ValidationError(`Invalid JSON: ${error.message}`)));
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
silenceConsole();
|
|
115
|
+
const client = new ZaiMcpClient({ enableVision: options.enableVision });
|
|
116
|
+
try {
|
|
117
|
+
const resolved = await client.resolveToolName(toolName);
|
|
118
|
+
if (options.dryRun) {
|
|
119
|
+
outputSuccess({ tool: resolved, args });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const result = await client.callToolRaw(resolved, args);
|
|
123
|
+
outputSuccess(result);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
restoreConsole();
|
|
127
|
+
console.error(formatErrorOutput(error));
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
await client.close().catch(() => { });
|
|
132
|
+
restoreConsole();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Help text
|
|
136
|
+
export const TOOLS_HELP = `
|
|
137
|
+
Tools - Discover MCP tools and schemas
|
|
138
|
+
|
|
139
|
+
Usage:
|
|
140
|
+
scoutline tools [options]
|
|
141
|
+
scoutline tool <name>
|
|
142
|
+
|
|
143
|
+
Options:
|
|
144
|
+
--filter <text> Filter tools by name
|
|
145
|
+
--full Return full tool schemas
|
|
146
|
+
--typescript Output TypeScript interfaces (Code Mode)
|
|
147
|
+
--no-vision Skip vision MCP server (faster startup)
|
|
148
|
+
|
|
149
|
+
Examples:
|
|
150
|
+
scoutline tools
|
|
151
|
+
scoutline tools --filter vision
|
|
152
|
+
scoutline tools --full
|
|
153
|
+
scoutline tools --typescript
|
|
154
|
+
scoutline tool scoutline.zai.vision.analyze_image
|
|
155
|
+
`.trim();
|
|
156
|
+
export const CALL_HELP = `
|
|
157
|
+
Call - Invoke a tool by name with JSON arguments
|
|
158
|
+
|
|
159
|
+
Usage: scoutline call <tool> [options]
|
|
160
|
+
|
|
161
|
+
Options:
|
|
162
|
+
--json <json> Inline JSON args (prefix with @file to load)
|
|
163
|
+
--file <path> Read JSON args from file
|
|
164
|
+
--stdin Read JSON args from stdin
|
|
165
|
+
--dry-run Print resolved tool name + args without calling
|
|
166
|
+
--no-vision Skip vision MCP server (faster startup)
|
|
167
|
+
|
|
168
|
+
Examples:
|
|
169
|
+
scoutline call scoutline.zai.search.webSearchPrime --json '{"search_query":"LLM tools"}'
|
|
170
|
+
scoutline call scoutline.zai.reader.webReader --file ./args.json
|
|
171
|
+
echo '{"repo_name":"owner/repo"}' | scoutline call scoutline.zai.zread.get_repo_structure --stdin
|
|
172
|
+
`.trim();
|
|
173
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision commands using Z.AI Vision MCP server
|
|
3
|
+
*/
|
|
4
|
+
type OutputType = "code" | "prompt" | "spec" | "description";
|
|
5
|
+
export declare function analyze(imageSource: string, prompt?: string): Promise<void>;
|
|
6
|
+
export declare function uiToCode(imageSource: string, prompt?: string, outputType?: OutputType): Promise<void>;
|
|
7
|
+
export declare function extractText(imageSource: string, prompt?: string, language?: string): Promise<void>;
|
|
8
|
+
export declare function diagnoseError(imageSource: string, prompt?: string, context?: string): Promise<void>;
|
|
9
|
+
export declare function diagram(imageSource: string, prompt?: string, diagramType?: string): Promise<void>;
|
|
10
|
+
export declare function chart(imageSource: string, prompt?: string, focus?: string): Promise<void>;
|
|
11
|
+
export declare function diff(expectedSource: string, actualSource: string, prompt?: string): Promise<void>;
|
|
12
|
+
export declare function video(videoSource: string, prompt?: string): Promise<void>;
|
|
13
|
+
export declare const VISION_HELP: string;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=vision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vision.d.ts","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,KAAK,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC;AA4B7D,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAgC,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAiC,EACzC,UAAU,GAAE,UAAmB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAoC,EAC5C,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAsC,EAC9C,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAgC,EACxC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,KAAK,CACzB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAA8B,EACtC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,IAAI,CACxB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,MAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,KAAK,CACzB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAA8B,GACrC,OAAO,CAAC,IAAI,CAAC,CAWf;AAGD,eAAO,MAAM,WAAW,QAkChB,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision commands using Z.AI Vision MCP server
|
|
3
|
+
*/
|
|
4
|
+
import { ZaiMcpClient } from "../lib/mcp-client.js";
|
|
5
|
+
import { resolveImageSource, resolveVideoSource } from "../lib/image.js";
|
|
6
|
+
import { outputSuccess } from "../lib/output.js";
|
|
7
|
+
import { formatErrorOutput } from "../lib/errors.js";
|
|
8
|
+
import { silenceConsole, restoreConsole } from "../lib/silence.js";
|
|
9
|
+
const DEFAULT_PROMPTS = {
|
|
10
|
+
analyze: "Describe this image in detail.",
|
|
11
|
+
uiToCode: "Convert this UI to production-ready code.",
|
|
12
|
+
extractText: "Extract all text from this image.",
|
|
13
|
+
diagnoseError: "Diagnose this error and suggest fixes.",
|
|
14
|
+
diagram: "Explain this technical diagram.",
|
|
15
|
+
chart: "Analyze this data visualization.",
|
|
16
|
+
diff: "Compare these two UI screenshots and identify differences.",
|
|
17
|
+
video: "Analyze this video content.",
|
|
18
|
+
};
|
|
19
|
+
async function withClient(fn) {
|
|
20
|
+
silenceConsole();
|
|
21
|
+
const client = new ZaiMcpClient();
|
|
22
|
+
try {
|
|
23
|
+
const result = await fn(client);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
restoreConsole();
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await client.close().catch(() => { });
|
|
32
|
+
restoreConsole();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function analyze(imageSource, prompt = DEFAULT_PROMPTS.analyze) {
|
|
36
|
+
try {
|
|
37
|
+
const image = resolveImageSource(imageSource);
|
|
38
|
+
const result = await withClient((client) => client.visionAnalyze({ imageSource: image, prompt }));
|
|
39
|
+
outputSuccess(result);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error(formatErrorOutput(error));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function uiToCode(imageSource, prompt = DEFAULT_PROMPTS.uiToCode, outputType = "code") {
|
|
47
|
+
try {
|
|
48
|
+
const image = resolveImageSource(imageSource);
|
|
49
|
+
const result = await withClient((client) => client.visionUiToArtifact({ imageSource: image, outputType, prompt }));
|
|
50
|
+
outputSuccess(result);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(formatErrorOutput(error));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function extractText(imageSource, prompt = DEFAULT_PROMPTS.extractText, language) {
|
|
58
|
+
try {
|
|
59
|
+
const image = resolveImageSource(imageSource);
|
|
60
|
+
const result = await withClient((client) => client.visionExtractText({
|
|
61
|
+
imageSource: image,
|
|
62
|
+
prompt,
|
|
63
|
+
programmingLanguage: language,
|
|
64
|
+
}));
|
|
65
|
+
outputSuccess(result);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error(formatErrorOutput(error));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function diagnoseError(imageSource, prompt = DEFAULT_PROMPTS.diagnoseError, context) {
|
|
73
|
+
try {
|
|
74
|
+
const image = resolveImageSource(imageSource);
|
|
75
|
+
const result = await withClient((client) => client.visionDiagnoseError({ imageSource: image, prompt, context }));
|
|
76
|
+
outputSuccess(result);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(formatErrorOutput(error));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export async function diagram(imageSource, prompt = DEFAULT_PROMPTS.diagram, diagramType) {
|
|
84
|
+
try {
|
|
85
|
+
const image = resolveImageSource(imageSource);
|
|
86
|
+
const result = await withClient((client) => client.visionDiagram({ imageSource: image, prompt, diagramType }));
|
|
87
|
+
outputSuccess(result);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(formatErrorOutput(error));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function chart(imageSource, prompt = DEFAULT_PROMPTS.chart, focus) {
|
|
95
|
+
try {
|
|
96
|
+
const image = resolveImageSource(imageSource);
|
|
97
|
+
const result = await withClient((client) => client.visionChart({ imageSource: image, prompt, focus }));
|
|
98
|
+
outputSuccess(result);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(formatErrorOutput(error));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export async function diff(expectedSource, actualSource, prompt = DEFAULT_PROMPTS.diff) {
|
|
106
|
+
try {
|
|
107
|
+
const expectedImage = resolveImageSource(expectedSource);
|
|
108
|
+
const actualImage = resolveImageSource(actualSource);
|
|
109
|
+
const result = await withClient((client) => client.visionDiff({
|
|
110
|
+
expectedImageSource: expectedImage,
|
|
111
|
+
actualImageSource: actualImage,
|
|
112
|
+
prompt,
|
|
113
|
+
}));
|
|
114
|
+
outputSuccess(result);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error(formatErrorOutput(error));
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export async function video(videoSource, prompt = DEFAULT_PROMPTS.video) {
|
|
122
|
+
try {
|
|
123
|
+
const videoPath = resolveVideoSource(videoSource);
|
|
124
|
+
const result = await withClient((client) => client.visionVideo({ videoSource: videoPath, prompt }));
|
|
125
|
+
outputSuccess(result);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error(formatErrorOutput(error));
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Help text
|
|
133
|
+
export const VISION_HELP = `
|
|
134
|
+
Vision Commands - Analyze images and videos via Z.AI Vision MCP
|
|
135
|
+
|
|
136
|
+
Usage: scoutline vision <command> <source> [prompt] [options]
|
|
137
|
+
|
|
138
|
+
Commands:
|
|
139
|
+
analyze <image> [prompt] General image analysis
|
|
140
|
+
ui-to-code <image> [prompt] Convert UI screenshot to code
|
|
141
|
+
extract-text <image> [prompt] OCR for code, terminals, documents
|
|
142
|
+
diagnose-error <image> [prompt] Analyze error screenshots
|
|
143
|
+
diagram <image> [prompt] Interpret technical diagrams
|
|
144
|
+
chart <image> [prompt] Analyze data visualizations
|
|
145
|
+
diff <expected> <actual> [prompt] Compare two UI screenshots
|
|
146
|
+
video <video> [prompt] Analyze video content
|
|
147
|
+
|
|
148
|
+
Options:
|
|
149
|
+
--language <lang> Programming language hint (extract-text)
|
|
150
|
+
--context <ctx> Error context (diagnose-error)
|
|
151
|
+
--type <type> Diagram type hint (diagram)
|
|
152
|
+
--focus <focus> Analysis focus (chart)
|
|
153
|
+
--output <type> Output type for ui-to-code: code, prompt, spec, description
|
|
154
|
+
|
|
155
|
+
Constraints:
|
|
156
|
+
Images: ≤5MB, JPG/PNG/JPEG
|
|
157
|
+
Videos: ≤8MB, MP4/MOV/M4V (URLs supported)
|
|
158
|
+
|
|
159
|
+
Examples:
|
|
160
|
+
scoutline vision analyze ./screenshot.png "What's in this image?"
|
|
161
|
+
scoutline vision ui-to-code ./design.png --output code
|
|
162
|
+
scoutline vision extract-text ./code.png --language python
|
|
163
|
+
scoutline vision diagnose-error ./error.png --context "during npm install"
|
|
164
|
+
scoutline vision diagram ./arch.png --type architecture
|
|
165
|
+
scoutline vision diff ./expected.png ./actual.png "Check alignment"
|
|
166
|
+
scoutline vision video ./demo.mp4 "Summarize the key steps"
|
|
167
|
+
`.trim();
|
|
168
|
+
//# sourceMappingURL=vision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8eH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoExD"}
|