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,166 @@
1
+ /**
2
+ * Web reader command using Z.AI WebReader MCP
3
+ */
4
+ import { ZaiMcpClient } from "../lib/mcp-client.js";
5
+ import { outputSuccess, getOutputMode } from "../lib/output.js";
6
+ import { formatErrorOutput, ValidationError } from "../lib/errors.js";
7
+ import { silenceConsole, restoreConsole } from "../lib/silence.js";
8
+ import { extract, isExtractMode } from "../lib/extract.js";
9
+ /**
10
+ * Rewrite rendered GitHub gist/file URLs to their raw form so Z.AI's reader
11
+ * returns pure file content instead of the rendered HTML page chrome
12
+ * (Sign in / Star / Fork / Embed / etc.).
13
+ *
14
+ * gist.github.com/<user>/<id> -> gist.github.com/<user>/<id>/raw
15
+ * gist.github.com/<user>/<id>#file-... -> gist.github.com/<user>/<id>/raw
16
+ *
17
+ * Leaves alone: URLs that already end in /raw, /raw/<rev>, or have a query string.
18
+ */
19
+ function maybeRewriteToRaw(url) {
20
+ // Already raw? Leave alone.
21
+ if (/\/raw(\/|$|\?|#)/.test(url))
22
+ return url;
23
+ // Only rewrite gist.github.com (not github.com/owner/repo — that's different)
24
+ const m = url.match(/^(https?:\/\/gist\.github\.com\/[^/]+\/[^/#?]+)(?:[/?#]|$)/);
25
+ if (!m)
26
+ return url;
27
+ const base = m[1];
28
+ // Append /raw, preserve any fragment (file anchor still meaningful)
29
+ const frag = url.indexOf("#") >= 0 ? url.slice(url.indexOf("#")) : "";
30
+ return `${base}/raw${frag}`;
31
+ }
32
+ /**
33
+ * Pull just the content string out of a Z.AI reader response. The full envelope
34
+ * (title, url, metadata, external) is rarely useful for agents — it just bloats
35
+ * output and makes truncation limits harder to reason about.
36
+ */
37
+ function extractContent(response) {
38
+ if (typeof response === "string")
39
+ return { content: response, original: response };
40
+ if (response && typeof response === "object") {
41
+ const obj = response;
42
+ if (typeof obj.content === "string") {
43
+ return { content: obj.content, original: response };
44
+ }
45
+ }
46
+ // Fallback: stringify whatever we got
47
+ return { content: JSON.stringify(response), original: response };
48
+ }
49
+ /**
50
+ * Truncate to max chars. Returns the (possibly truncated) content plus the
51
+ * original length so the caller can warn about truncation.
52
+ */
53
+ function truncate(content, max) {
54
+ const originalLen = content.length;
55
+ if (!max || max <= 0 || originalLen <= max) {
56
+ return { text: content, originalLen, truncated: false };
57
+ }
58
+ return { text: content.slice(0, max - 1).trimEnd() + "…", originalLen, truncated: true };
59
+ }
60
+ export async function read(url, options = {}) {
61
+ // Validate URL first (before silencing)
62
+ if (!url.startsWith("http://") && !url.startsWith("https://")) {
63
+ console.error(formatErrorOutput(new ValidationError("URL must start with http:// or https://")));
64
+ process.exit(1);
65
+ }
66
+ if (options.extract && !isExtractMode(options.extract)) {
67
+ console.error(formatErrorOutput(new ValidationError(`Invalid --extract mode: ${options.extract}. Use one of: code, links, tables, headings`)));
68
+ process.exit(1);
69
+ }
70
+ const finalUrl = maybeRewriteToRaw(url);
71
+ if (finalUrl !== url) {
72
+ process.stderr.write(`ℹ️ rewrote gist URL to raw form: ${finalUrl}\n`);
73
+ }
74
+ silenceConsole();
75
+ const client = new ZaiMcpClient({ enableVision: false, noCache: options.noCache });
76
+ try {
77
+ try {
78
+ const response = await client.webRead({
79
+ url: finalUrl,
80
+ format: options.format || "markdown",
81
+ retainImages: !options.noImages,
82
+ withLinksSummary: options.withLinks,
83
+ timeout: options.timeout,
84
+ noCache: options.noCache,
85
+ noGfm: options.noGfm,
86
+ keepImgDataUrl: options.keepImgDataUrl,
87
+ withImagesSummary: options.withImagesSummary,
88
+ });
89
+ const { content: rawContent } = extractContent(response);
90
+ // --extract short-circuits: returns the extracted slice as a JSON array,
91
+ // bypassing truncation and envelope logic.
92
+ if (options.extract) {
93
+ const extracted = extract(rawContent, options.extract);
94
+ process.stderr.write(`ℹ️ extracted ${extracted.length} ${options.extract}\n`);
95
+ outputSuccess(extracted);
96
+ return;
97
+ }
98
+ const { text, originalLen, truncated } = truncate(rawContent, options.maxChars);
99
+ if (truncated) {
100
+ process.stderr.write(`⚠️ content truncated from ${originalLen.toLocaleString()} to ${text.length.toLocaleString()} chars; use a higher --max-chars or omit it for full content\n`);
101
+ }
102
+ // Default: content-only (drops title/metadata/external envelope).
103
+ // --full-envelope or --output-format json/pretty keeps the structured object.
104
+ const wantEnvelope = options.fullEnvelope || getOutputMode() === "json" || getOutputMode() === "pretty";
105
+ if (wantEnvelope) {
106
+ const envelope = response && typeof response === "object"
107
+ ? { ...response, content: text }
108
+ : { content: text };
109
+ outputSuccess(envelope);
110
+ }
111
+ else {
112
+ outputSuccess(text);
113
+ }
114
+ }
115
+ finally {
116
+ await client.close().catch(() => { });
117
+ restoreConsole();
118
+ }
119
+ }
120
+ catch (error) {
121
+ console.error(formatErrorOutput(error));
122
+ process.exit(1);
123
+ }
124
+ }
125
+ // Help text
126
+ export const READ_HELP = `
127
+ Read Command - Fetch and parse web page content using Z.AI WebReader MCP
128
+
129
+ Usage: scoutline read <url> [options]
130
+
131
+ URL handling:
132
+ gist.github.com/<user>/<id> URLs are auto-rewritten to /raw so you get pure
133
+ file content instead of rendered HTML chrome (Sign in / Star / Fork / Embed).
134
+
135
+ Options:
136
+ --format <f> Output format: markdown (default), text
137
+ --no-images Remove images from output
138
+ --no-cache Disable server-side caching
139
+ --with-links Include links summary
140
+ --with-images-summary Include images summary
141
+ --no-gfm Disable GitHub Flavored Markdown
142
+ --keep-img-data-url Keep image data URLs in output
143
+ --timeout <s> Request timeout in seconds (default: 20)
144
+ --max-chars <n> Truncate content to <n> chars (warns on stderr when it kicks in)
145
+ --full-envelope Include title/url/metadata/external fields (default: content-only)
146
+ --extract <m> Pull a specific slice out as JSON array: code | links | tables | headings
147
+
148
+ By default the command outputs just the page content (string). Use --full-envelope
149
+ or --output-format json/pretty to get the full structured response object. Use
150
+ --extract to return only matching elements (e.g. all code blocks, all links).
151
+
152
+ Examples:
153
+ scoutline read https://docs.example.com/api
154
+ scoutline read https://github.com/owner/repo --format text
155
+ scoutline read https://gist.github.com/user/abc123 # auto-rewritten to /raw
156
+ scoutline read https://blog.example.com/post --no-images --with-links
157
+ scoutline read https://example.com/long-article --max-chars 2000
158
+ scoutline read https://react.dev/learn/hooks --extract code # just code blocks
159
+ scoutline read https://example.com/page --extract links # just URLs
160
+ scoutline read https://en.wikipedia.org/wiki/X --extract headings # section outline
161
+
162
+ Output format:
163
+ Content string by default; structured object with --full-envelope or -O json;
164
+ JSON array of extracted elements with --extract.
165
+ `.trim();
166
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Repo commands for GitHub repository exploration (ZRead)
3
+ */
4
+ export interface RepoSearchOptions {
5
+ language?: "en" | "zh";
6
+ maxChars?: number;
7
+ noCache?: boolean;
8
+ }
9
+ export interface RepoTreeOptions {
10
+ path?: string;
11
+ depth?: number;
12
+ noCache?: boolean;
13
+ }
14
+ export interface RepoReadOptions {
15
+ maxChars?: number;
16
+ noCache?: boolean;
17
+ }
18
+ export declare function repoSearch(repo: string, query: string, options?: RepoSearchOptions): Promise<void>;
19
+ export declare function repoTree(repo: string, options?: RepoTreeOptions): Promise<void>;
20
+ export declare function repoRead(repo: string, path: string, options?: RepoReadOptions): Promise<void>;
21
+ export declare const REPO_HELP: string;
22
+ //# sourceMappingURL=repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiFD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCzF;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAGD,eAAO,MAAM,SAAS,QA2Cd,CAAC"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Repo commands for GitHub repository exploration (ZRead)
3
+ */
4
+ import { ZReadMcpClient } from "../lib/mcp-client.js";
5
+ import { outputSuccess } from "../lib/output.js";
6
+ import { formatErrorOutput, ValidationError } from "../lib/errors.js";
7
+ import { silenceConsole, restoreConsole } from "../lib/silence.js";
8
+ import path from "node:path";
9
+ function validateRepo(repo) {
10
+ if (!repo.includes("/")) {
11
+ throw new ValidationError(`Invalid repository format: "${repo}". Use "owner/repo" format (e.g., "facebook/react")`);
12
+ }
13
+ }
14
+ function truncateText(text, max) {
15
+ if (!max || max <= 0 || text.length <= max)
16
+ return text;
17
+ return text.slice(0, max - 1).trimEnd() + "…";
18
+ }
19
+ function extractStructureBlock(structure) {
20
+ const match = structure.match(/<structure>\n([\s\S]*?)\n<\/structure>/);
21
+ const block = match ? match[1] : structure;
22
+ return block
23
+ .split("\n")
24
+ .map((line) => line.replace(/\r/g, ""))
25
+ .filter(Boolean);
26
+ }
27
+ function extractImmediateDirectories(structure, basePath) {
28
+ const lines = extractStructureBlock(structure);
29
+ const directories = [];
30
+ for (const line of lines) {
31
+ const match = line.match(/^([│\s]*)(├──|└──)\s(.+)$/);
32
+ if (!match)
33
+ continue;
34
+ const prefix = match[1] || "";
35
+ const name = (match[3] || "").trim();
36
+ const normalizedPrefix = prefix.replace(/│/g, " ");
37
+ const level = Math.floor(normalizedPrefix.length / 4);
38
+ if (level !== 0)
39
+ continue;
40
+ if (!name.endsWith("/"))
41
+ continue;
42
+ const dirName = name.slice(0, -1);
43
+ const fullPath = basePath ? path.posix.join(basePath, dirName) : dirName;
44
+ directories.push(fullPath);
45
+ }
46
+ return directories;
47
+ }
48
+ function normalizeDirPath(value) {
49
+ if (!value)
50
+ return undefined;
51
+ const trimmed = value.trim();
52
+ if (!trimmed || trimmed === "/" || trimmed === ".")
53
+ return undefined;
54
+ return trimmed.replace(/^\/+/, "").replace(/\/+$/, "");
55
+ }
56
+ async function collectTreeSnapshots(client, repo, basePath, depth) {
57
+ const snapshots = [];
58
+ const seen = new Set();
59
+ const queue = [{ path: basePath || "", level: 1 }];
60
+ while (queue.length > 0) {
61
+ const current = queue.shift();
62
+ const key = current.path;
63
+ if (seen.has(key))
64
+ continue;
65
+ seen.add(key);
66
+ const structure = await client.getRepoStructure(repo, current.path || undefined);
67
+ snapshots.push({ path: current.path || "/", structure });
68
+ if (current.level >= depth)
69
+ continue;
70
+ const children = extractImmediateDirectories(structure, current.path);
71
+ for (const child of children) {
72
+ queue.push({ path: child, level: current.level + 1 });
73
+ }
74
+ }
75
+ return snapshots;
76
+ }
77
+ export async function repoSearch(repo, query, options = {}) {
78
+ try {
79
+ validateRepo(repo);
80
+ if (options.language && options.language !== "en" && options.language !== "zh") {
81
+ throw new ValidationError('Language must be "en" or "zh"');
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error(formatErrorOutput(error));
86
+ process.exit(1);
87
+ }
88
+ silenceConsole();
89
+ const client = new ZReadMcpClient({ enableVision: false, noCache: options.noCache });
90
+ try {
91
+ try {
92
+ const language = options.language || "en";
93
+ const results = await client.searchDoc(repo, query, language);
94
+ outputSuccess(truncateText(results, options.maxChars));
95
+ }
96
+ finally {
97
+ await client.close().catch(() => { });
98
+ restoreConsole();
99
+ }
100
+ }
101
+ catch (error) {
102
+ console.error(formatErrorOutput(error));
103
+ process.exit(1);
104
+ }
105
+ }
106
+ export async function repoTree(repo, options = {}) {
107
+ try {
108
+ validateRepo(repo);
109
+ if (options.depth !== undefined) {
110
+ const depthValue = Number(options.depth);
111
+ if (!Number.isFinite(depthValue) || depthValue < 1) {
112
+ throw new ValidationError("Depth must be a positive integer");
113
+ }
114
+ }
115
+ }
116
+ catch (error) {
117
+ console.error(formatErrorOutput(error));
118
+ process.exit(1);
119
+ }
120
+ silenceConsole();
121
+ const client = new ZReadMcpClient({ enableVision: false, noCache: options.noCache });
122
+ try {
123
+ try {
124
+ const depth = Math.max(1, Math.floor(options.depth || 1));
125
+ const dirPath = normalizeDirPath(options.path);
126
+ if (depth === 1) {
127
+ const structure = await client.getRepoStructure(repo, dirPath);
128
+ outputSuccess(structure);
129
+ return;
130
+ }
131
+ const snapshots = await collectTreeSnapshots(client, repo, dirPath, depth);
132
+ outputSuccess({
133
+ repo,
134
+ depth,
135
+ basePath: dirPath || "/",
136
+ snapshots,
137
+ });
138
+ }
139
+ finally {
140
+ await client.close().catch(() => { });
141
+ restoreConsole();
142
+ }
143
+ }
144
+ catch (error) {
145
+ console.error(formatErrorOutput(error));
146
+ process.exit(1);
147
+ }
148
+ }
149
+ export async function repoRead(repo, path, options = {}) {
150
+ try {
151
+ validateRepo(repo);
152
+ }
153
+ catch (error) {
154
+ console.error(formatErrorOutput(error));
155
+ process.exit(1);
156
+ }
157
+ silenceConsole();
158
+ const client = new ZReadMcpClient({ enableVision: false, noCache: options.noCache });
159
+ try {
160
+ try {
161
+ const content = await client.readFile(repo, path);
162
+ outputSuccess(truncateText(content, options.maxChars));
163
+ }
164
+ finally {
165
+ await client.close().catch(() => { });
166
+ restoreConsole();
167
+ }
168
+ }
169
+ catch (error) {
170
+ console.error(formatErrorOutput(error));
171
+ process.exit(1);
172
+ }
173
+ }
174
+ // Help text
175
+ export const REPO_HELP = `
176
+ Repo Commands - Explore GitHub repositories using ZRead
177
+
178
+ Usage: scoutline repo <command> <owner/repo> [args]
179
+
180
+ Commands:
181
+ search <owner/repo> <query> Search docs and code in repository
182
+ tree <owner/repo> Get repository directory structure
183
+ read <owner/repo> <path> Read a file from repository
184
+
185
+ Search Options:
186
+ --language <lang> Result language: en (default) or zh
187
+ --max-chars <n> Truncate output to <n> chars
188
+
189
+ Tree Options:
190
+ --path <path> Directory path to inspect (default: repo root)
191
+ --depth <n> Expand subdirectory trees (default: 1)
192
+
193
+ Read Options:
194
+ --max-chars <n> Truncate file content to <n> chars
195
+
196
+ Examples:
197
+ scoutline repo search facebook/react "server components"
198
+ scoutline repo search facebook/react "server components" --language en --max-chars 2000
199
+ scoutline repo tree vercel/next.js
200
+ scoutline repo tree vercel/next.js --path packages --depth 2
201
+ scoutline repo read anthropics/anthropic-sdk-python src/anthropic/client.py
202
+ scoutline repo read facebook/react README.md --max-chars 3000
203
+
204
+ Notes:
205
+ - Repository must be public
206
+ - Use "owner/repo" format (e.g., "facebook/react")
207
+ - Paths are relative to repository root
208
+ - Depth >1 returns structured snapshots (use --output-format pretty for readability)
209
+
210
+ Output format (search):
211
+ Search results array
212
+
213
+ Output format (tree):
214
+ Repository structure object
215
+
216
+ Output format (read):
217
+ File contents
218
+ `.trim();
219
+ //# sourceMappingURL=repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Web search command using Z.AI WebSearchPrime MCP
3
+ */
4
+ type RecencyFilter = "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
5
+ export interface SearchOptions {
6
+ count?: number;
7
+ domain?: string;
8
+ recency?: RecencyFilter;
9
+ contentSize?: "medium" | "high";
10
+ location?: "cn" | "us";
11
+ maxSummary?: number;
12
+ fields?: string[];
13
+ noCache?: boolean;
14
+ merge?: boolean;
15
+ }
16
+ export declare function search(query: string, options?: SearchOptions): Promise<void>;
17
+ export declare const SEARCH_HELP: string;
18
+ export {};
19
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0FD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GtF;AAGD,eAAO,MAAM,WAAW,QA8ChB,CAAC"}