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.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/bin/scoutline.js +17 -0
  4. package/dist/commands/code.d.ts +13 -0
  5. package/dist/commands/code.d.ts.map +1 -0
  6. package/dist/commands/code.js +94 -0
  7. package/dist/commands/code.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +10 -0
  9. package/dist/commands/doctor.d.ts.map +1 -0
  10. package/dist/commands/doctor.js +70 -0
  11. package/dist/commands/doctor.js.map +1 -0
  12. package/dist/commands/quota.d.ts +9 -0
  13. package/dist/commands/quota.d.ts.map +1 -0
  14. package/dist/commands/quota.js +77 -0
  15. package/dist/commands/quota.js.map +1 -0
  16. package/dist/commands/read.d.ts +20 -0
  17. package/dist/commands/read.d.ts.map +1 -0
  18. package/dist/commands/read.js +166 -0
  19. package/dist/commands/read.js.map +1 -0
  20. package/dist/commands/repo.d.ts +22 -0
  21. package/dist/commands/repo.d.ts.map +1 -0
  22. package/dist/commands/repo.js +219 -0
  23. package/dist/commands/repo.js.map +1 -0
  24. package/dist/commands/search.d.ts +19 -0
  25. package/dist/commands/search.d.ts.map +1 -0
  26. package/dist/commands/search.js +235 -0
  27. package/dist/commands/search.js.map +1 -0
  28. package/dist/commands/tools.d.ts +22 -0
  29. package/dist/commands/tools.d.ts.map +1 -0
  30. package/dist/commands/tools.js +173 -0
  31. package/dist/commands/tools.js.map +1 -0
  32. package/dist/commands/vision.d.ts +15 -0
  33. package/dist/commands/vision.d.ts.map +1 -0
  34. package/dist/commands/vision.js +168 -0
  35. package/dist/commands/vision.js.map +1 -0
  36. package/dist/index.d.ts +5 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +443 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lib/api-client.d.ts +133 -0
  41. package/dist/lib/api-client.d.ts.map +1 -0
  42. package/dist/lib/api-client.js +150 -0
  43. package/dist/lib/api-client.js.map +1 -0
  44. package/dist/lib/cache.d.ts +34 -0
  45. package/dist/lib/cache.d.ts.map +1 -0
  46. package/dist/lib/cache.js +168 -0
  47. package/dist/lib/cache.js.map +1 -0
  48. package/dist/lib/code-mode.d.ts +19 -0
  49. package/dist/lib/code-mode.d.ts.map +1 -0
  50. package/dist/lib/code-mode.js +83 -0
  51. package/dist/lib/code-mode.js.map +1 -0
  52. package/dist/lib/config.d.ts +21 -0
  53. package/dist/lib/config.d.ts.map +1 -0
  54. package/dist/lib/config.js +59 -0
  55. package/dist/lib/config.js.map +1 -0
  56. package/dist/lib/errors.d.ts +29 -0
  57. package/dist/lib/errors.d.ts.map +1 -0
  58. package/dist/lib/errors.js +69 -0
  59. package/dist/lib/errors.js.map +1 -0
  60. package/dist/lib/extract.d.ts +37 -0
  61. package/dist/lib/extract.d.ts.map +1 -0
  62. package/dist/lib/extract.js +106 -0
  63. package/dist/lib/extract.js.map +1 -0
  64. package/dist/lib/image.d.ts +13 -0
  65. package/dist/lib/image.d.ts.map +1 -0
  66. package/dist/lib/image.js +102 -0
  67. package/dist/lib/image.js.map +1 -0
  68. package/dist/lib/index.d.ts +10 -0
  69. package/dist/lib/index.d.ts.map +1 -0
  70. package/dist/lib/index.js +10 -0
  71. package/dist/lib/index.js.map +1 -0
  72. package/dist/lib/mcp-client.d.ts +161 -0
  73. package/dist/lib/mcp-client.d.ts.map +1 -0
  74. package/dist/lib/mcp-client.js +494 -0
  75. package/dist/lib/mcp-client.js.map +1 -0
  76. package/dist/lib/mcp-config.d.ts +24 -0
  77. package/dist/lib/mcp-config.d.ts.map +1 -0
  78. package/dist/lib/mcp-config.js +129 -0
  79. package/dist/lib/mcp-config.js.map +1 -0
  80. package/dist/lib/monitor-client.d.ts +51 -0
  81. package/dist/lib/monitor-client.d.ts.map +1 -0
  82. package/dist/lib/monitor-client.js +115 -0
  83. package/dist/lib/monitor-client.js.map +1 -0
  84. package/dist/lib/output.d.ts +24 -0
  85. package/dist/lib/output.d.ts.map +1 -0
  86. package/dist/lib/output.js +59 -0
  87. package/dist/lib/output.js.map +1 -0
  88. package/dist/lib/redact.d.ts +7 -0
  89. package/dist/lib/redact.d.ts.map +1 -0
  90. package/dist/lib/redact.js +50 -0
  91. package/dist/lib/redact.js.map +1 -0
  92. package/dist/lib/silence.d.ts +16 -0
  93. package/dist/lib/silence.d.ts.map +1 -0
  94. package/dist/lib/silence.js +56 -0
  95. package/dist/lib/silence.js.map +1 -0
  96. package/dist/lib/tty.d.ts +60 -0
  97. package/dist/lib/tty.d.ts.map +1 -0
  98. package/dist/lib/tty.js +103 -0
  99. package/dist/lib/tty.js.map +1 -0
  100. 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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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * scoutline - CLI for Z.AI capabilities
3
+ */
4
+ export declare function main(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}