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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Numman Ali
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ <h1 align="center">Scoutline</h1>
2
+
3
+ <p align="center">
4
+ A command-line field kit for investigating web, repository, and visual sources.
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/scoutline"><img src="https://img.shields.io/npm/v/scoutline.svg" alt="npm version"></a>
9
+ <a href="https://github.com/vikasagarwal101/scoutline/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a>
10
+ </p>
11
+
12
+ > Independently maintained by Vikas Agarwal. See [CREDITS.md](https://github.com/vikasagarwal101/scoutline/blob/main/CREDITS.md) for project attribution.
13
+
14
+ ---
15
+
16
+ ## Features
17
+
18
+ - **Vision** - Analyze images, screenshots, diagrams, charts, videos using GLM-4.6V
19
+ - **Search** - Real-time web search with domain and recency filtering
20
+ - **Reader** - Fetch and parse web pages to markdown
21
+ - **Repo** - Search and read GitHub repository code via ZRead
22
+ - **Tools** - MCP tool discovery, schemas, and raw calls
23
+ - **Code Mode** - TypeScript tool chaining for agent automation
24
+
25
+ ## Quick Start
26
+
27
+ ```bash
28
+ export Z_AI_API_KEY="your-api-key"
29
+
30
+ npx scoutline --help
31
+ npx scoutline vision analyze ./screenshot.png "What errors do you see?"
32
+ npx scoutline search "React 19 new features" --count 5
33
+ ```
34
+
35
+ Get your API key at: https://z.ai/manage-apikey/apikey-list
36
+
37
+ ## Installation
38
+
39
+ ### As an Agent Skill
40
+
41
+ **OpenSkills** (universal - works with any AI coding agent):
42
+
43
+ ```bash
44
+ npx openskills install vikasagarwal101/scoutline
45
+ ```
46
+
47
+ **Claude Code** (native skill marketplace):
48
+
49
+ ```bash
50
+ claude skill install vikasagarwal101/scoutline --skill scoutline
51
+ ```
52
+
53
+ ### As a CLI Tool
54
+
55
+ ```bash
56
+ npm i -g scoutline
57
+ scoutline --help
58
+ ```
59
+
60
+ Or use directly with npx:
61
+
62
+ ```bash
63
+ npx scoutline --help
64
+ ```
65
+
66
+ ## Usage
67
+
68
+ The CLI is self-documenting. Use `--help` at any level:
69
+
70
+ ```bash
71
+ scoutline --help # All commands
72
+ scoutline vision --help # Vision commands
73
+ scoutline search --help # Search options
74
+ scoutline repo --help # GitHub repo commands
75
+ ```
76
+
77
+ ### Examples
78
+
79
+ ```bash
80
+ # Vision - analyze images
81
+ scoutline vision analyze ./image.png "Describe this"
82
+ scoutline vision ui-to-code ./design.png --output code
83
+ scoutline vision extract-text ./screenshot.png --language python
84
+ scoutline vision diagnose-error ./error.png
85
+
86
+ # Search - web search
87
+ scoutline search "TypeScript best practices" --count 10
88
+ scoutline search "security news" --recency oneDay
89
+
90
+ # Reader - fetch web content
91
+ scoutline read https://docs.example.com/api
92
+ scoutline read https://blog.example.com --format text
93
+
94
+ # Repo - GitHub exploration
95
+ scoutline repo tree facebook/react
96
+ scoutline repo search vercel/next.js "app router"
97
+ scoutline repo read anthropics/anthropic-sdk-python README.md
98
+ scoutline repo search openai/codex "config" --language en
99
+ scoutline repo tree openai/codex --path codex-rs --depth 2
100
+
101
+ # Doctor - check setup
102
+ scoutline doctor
103
+ scoutline doctor --no-vision
104
+ ```
105
+
106
+ ## Output Format
107
+
108
+ Default output is **data-only** for token efficiency. Use `--output-format json` for structured responses:
109
+
110
+ ```json
111
+ {
112
+ "success": true,
113
+ "data": "...",
114
+ "timestamp": 1234567890
115
+ }
116
+ ```
117
+
118
+ ## Notes
119
+
120
+ - `repo search` defaults to English results. Use `--language zh` for Chinese.
121
+ - `repo tree` supports `--path` (directory scope) and `--depth` (expand subtrees).
122
+ - `tools`, `tool`, `call`, `doctor` accept `--no-vision` to speed startup when vision tools are not needed.
123
+ - `read` supports `--with-images-summary`, `--no-gfm`, and `--keep-img-data-url` for richer parsing control.
124
+ - Vision tool calls automatically retry transient 5xx/network errors (default: 2 retries). Configure with `ZAI_MCP_VISION_RETRY_COUNT` (or `ZAI_MCP_RETRY_COUNT` for all tools).
125
+ - Tool discovery can be cached to speed `tools`/`tool`/`doctor` (default: on, 24h TTL). Configure with `ZAI_MCP_TOOL_CACHE`, `ZAI_MCP_TOOL_CACHE_TTL_MS`, `ZAI_MCP_CACHE_DIR`.
126
+
127
+ ## Contributing
128
+
129
+ See [CONTRIBUTING.md](https://github.com/vikasagarwal101/scoutline/blob/main/CONTRIBUTING.md) for development setup and guidelines.
130
+
131
+ ## Performance
132
+
133
+ Benchmark tool discovery (cache on/off):
134
+
135
+ ```bash
136
+ node scripts/bench-tools.mjs
137
+ ```
138
+
139
+ ## License
140
+
141
+ MIT - see [LICENSE](https://github.com/vikasagarwal101/scoutline/blob/main/LICENSE).
142
+
143
+ ## Links
144
+
145
+ - [GitHub Repository](https://github.com/vikasagarwal101/scoutline)
146
+ - [Documentation](https://github.com/vikasagarwal101/scoutline/tree/main/docs)
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+
3
+ import("../dist/index.js").catch((err) => {
4
+ console.error(
5
+ JSON.stringify(
6
+ {
7
+ success: false,
8
+ error: err.message,
9
+ code: "LOAD_ERROR",
10
+ help: 'Make sure to run "npm run build" before running scoutline',
11
+ },
12
+ null,
13
+ 2,
14
+ ),
15
+ );
16
+ process.exit(1);
17
+ });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Code Mode commands for tool chaining
3
+ */
4
+ export interface CodeRunOptions {
5
+ timeout?: number;
6
+ includeLogs?: boolean;
7
+ }
8
+ export declare function runCodeFile(filePath: string, options?: CodeRunOptions): Promise<void>;
9
+ export declare function evalCode(code: string, options?: CodeRunOptions): Promise<void>;
10
+ export declare function printInterfaces(): Promise<void>;
11
+ export declare function printPromptTemplate(): void;
12
+ export declare const CODE_HELP: string;
13
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxF;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAGD,eAAO,MAAM,SAAS,QAkBd,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Code Mode commands for tool chaining
3
+ */
4
+ import * as fs from "node:fs/promises";
5
+ import { ZaiCodeModeClient } from "../lib/code-mode.js";
6
+ import { outputSuccess } from "../lib/output.js";
7
+ import { formatErrorOutput } from "../lib/errors.js";
8
+ import { silenceConsole, restoreConsole } from "../lib/silence.js";
9
+ export async function runCodeFile(filePath, options = {}) {
10
+ const code = await fs.readFile(filePath, "utf8");
11
+ silenceConsole();
12
+ const codeClient = new ZaiCodeModeClient();
13
+ try {
14
+ const result = await codeClient.callToolChain(code, options.timeout);
15
+ if (options.includeLogs) {
16
+ outputSuccess(result);
17
+ }
18
+ else {
19
+ outputSuccess(result.result);
20
+ }
21
+ }
22
+ catch (error) {
23
+ restoreConsole();
24
+ console.error(formatErrorOutput(error));
25
+ process.exit(1);
26
+ }
27
+ finally {
28
+ await codeClient.close().catch(() => { });
29
+ restoreConsole();
30
+ }
31
+ }
32
+ export async function evalCode(code, options = {}) {
33
+ silenceConsole();
34
+ const codeClient = new ZaiCodeModeClient();
35
+ try {
36
+ const result = await codeClient.callToolChain(code, options.timeout);
37
+ if (options.includeLogs) {
38
+ outputSuccess(result);
39
+ }
40
+ else {
41
+ outputSuccess(result.result);
42
+ }
43
+ }
44
+ catch (error) {
45
+ restoreConsole();
46
+ console.error(formatErrorOutput(error));
47
+ process.exit(1);
48
+ }
49
+ finally {
50
+ await codeClient.close().catch(() => { });
51
+ restoreConsole();
52
+ }
53
+ }
54
+ export async function printInterfaces() {
55
+ silenceConsole();
56
+ const codeClient = new ZaiCodeModeClient();
57
+ try {
58
+ const interfaces = await codeClient.getAllInterfaces();
59
+ outputSuccess(interfaces);
60
+ }
61
+ catch (error) {
62
+ restoreConsole();
63
+ console.error(formatErrorOutput(error));
64
+ process.exit(1);
65
+ }
66
+ finally {
67
+ await codeClient.close().catch(() => { });
68
+ restoreConsole();
69
+ }
70
+ }
71
+ export function printPromptTemplate() {
72
+ outputSuccess(ZaiCodeModeClient.getPromptTemplate());
73
+ }
74
+ // Help text
75
+ export const CODE_HELP = `
76
+ Code Mode - Execute TypeScript tool chains
77
+
78
+ Usage:
79
+ scoutline code run <file> [options]
80
+ scoutline code eval <code> [options]
81
+ scoutline code interfaces
82
+ scoutline code prompt
83
+
84
+ Options:
85
+ --timeout <ms> Execution timeout (default: 30000)
86
+ --logs Include console logs in output
87
+
88
+ Examples:
89
+ scoutline code run ./chain.ts
90
+ scoutline code eval "const r = await scoutline.zai.search.webSearchPrime({search_query:'ZAI'}); return r;"
91
+ scoutline code interfaces
92
+ scoutline code prompt
93
+ `.trim();
94
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Doctor command for environment and MCP diagnostics
3
+ */
4
+ export interface DoctorOptions {
5
+ noTools?: boolean;
6
+ enableVision?: boolean;
7
+ }
8
+ export declare function doctor(options?: DoctorOptions): Promise<void>;
9
+ export declare const DOCTOR_HELP: string;
10
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CvE;AAED,eAAO,MAAM,WAAW,QAYhB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Doctor command for environment and MCP diagnostics
3
+ */
4
+ import { ZaiMcpClient } from "../lib/mcp-client.js";
5
+ import { outputSuccess } from "../lib/output.js";
6
+ import { formatErrorOutput } from "../lib/errors.js";
7
+ import { silenceConsole, restoreConsole } from "../lib/silence.js";
8
+ function getNodeMajor() {
9
+ const [major] = process.versions.node.split(".");
10
+ return parseInt(major, 10);
11
+ }
12
+ export async function doctor(options = {}) {
13
+ const apiKey = process.env.Z_AI_API_KEY || process.env.ZAI_API_KEY;
14
+ const mode = (process.env.Z_AI_MODE || process.env.PLATFORM_MODE || "ZAI").toUpperCase();
15
+ const nodeMajor = getNodeMajor();
16
+ const report = {
17
+ env: {
18
+ apiKeyPresent: Boolean(apiKey),
19
+ mode,
20
+ baseUrl: process.env.Z_AI_BASE_URL || undefined,
21
+ },
22
+ node: {
23
+ version: process.versions.node,
24
+ visionMcpCompatible: nodeMajor >= 22,
25
+ },
26
+ };
27
+ if (options.noTools || !apiKey) {
28
+ outputSuccess(report);
29
+ return;
30
+ }
31
+ silenceConsole();
32
+ const client = new ZaiMcpClient({ enableVision: options.enableVision });
33
+ try {
34
+ const tools = await client.listTools();
35
+ const byServer = tools.reduce((acc, tool) => {
36
+ const parts = tool.name.split(".");
37
+ const server = parts.length >= 2 ? parts[1] : "unknown";
38
+ acc[server] = (acc[server] || 0) + 1;
39
+ return acc;
40
+ }, {});
41
+ report.mcp = {
42
+ toolCount: tools.length,
43
+ servers: byServer,
44
+ };
45
+ outputSuccess(report);
46
+ }
47
+ catch (error) {
48
+ restoreConsole();
49
+ console.error(formatErrorOutput(error));
50
+ process.exit(1);
51
+ }
52
+ finally {
53
+ await client.close().catch(() => { });
54
+ restoreConsole();
55
+ }
56
+ }
57
+ export const DOCTOR_HELP = `
58
+ Doctor - Check environment and MCP connectivity
59
+
60
+ Usage: scoutline doctor [options]
61
+
62
+ Options:
63
+ --no-tools Skip tool discovery (env-only check)
64
+ --no-vision Skip vision MCP server (faster startup)
65
+
66
+ Examples:
67
+ scoutline doctor
68
+ scoutline doctor --no-tools
69
+ `.trim();
70
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Quota command — authoritative Z.AI Coding Plan usage from the monitor API.
3
+ */
4
+ export interface QuotaOptions {
5
+ window?: "current";
6
+ }
7
+ export declare function quota(_options?: QuotaOptions): Promise<void>;
8
+ export declare const QUOTA_HELP: string;
9
+ //# sourceMappingURL=quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/commands/quota.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAsB,KAAK,CAAC,QAAQ,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CtE;AAED,eAAO,MAAM,UAAU,QAwBf,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Quota command — authoritative Z.AI Coding Plan usage from the monitor API.
3
+ */
4
+ import { getQuotaLimit, getTimeLimit, getTokensLimit, formatResetTime, } from "../lib/monitor-client.js";
5
+ import { outputSuccess, getOutputMode } from "../lib/output.js";
6
+ import { formatErrorOutput } from "../lib/errors.js";
7
+ import { formatQuotaPretty } from "../lib/tty.js";
8
+ export async function quota(_options = {}) {
9
+ try {
10
+ const data = await getQuotaLimit();
11
+ const timeLimit = getTimeLimit(data);
12
+ const tokensLimit = getTokensLimit(data);
13
+ const formatted = {
14
+ plan: data.level,
15
+ timeWindow: timeLimit
16
+ ? {
17
+ used: timeLimit.currentValue,
18
+ limit: timeLimit.usage,
19
+ remaining: timeLimit.remaining,
20
+ percentage: timeLimit.percentage,
21
+ windowHours: timeLimit.unit,
22
+ resetsAt: timeLimit.nextResetTime
23
+ ? new Date(timeLimit.nextResetTime).toISOString()
24
+ : null,
25
+ resetsIn: timeLimit.nextResetTime ? formatResetTime(timeLimit.nextResetTime) : null,
26
+ byTool: timeLimit.usageDetails,
27
+ }
28
+ : null,
29
+ tokens: tokensLimit
30
+ ? {
31
+ percentage: tokensLimit.percentage,
32
+ resetsAt: tokensLimit.nextResetTime
33
+ ? new Date(tokensLimit.nextResetTime).toISOString()
34
+ : null,
35
+ resetsIn: tokensLimit.nextResetTime ? formatResetTime(tokensLimit.nextResetTime) : null,
36
+ }
37
+ : null,
38
+ };
39
+ const mode = getOutputMode();
40
+ if (mode === "tty") {
41
+ outputSuccess(formatQuotaPretty(formatted));
42
+ }
43
+ else {
44
+ outputSuccess(formatted);
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.error(formatErrorOutput(error));
49
+ process.exit(1);
50
+ }
51
+ }
52
+ export const QUOTA_HELP = `
53
+ Quota Command - Authoritative Z.AI Coding Plan usage from the monitor API
54
+
55
+ Usage: scoutline quota [options]
56
+
57
+ Hits GET https://api.z.ai/api/monitor/usage/quota/limit directly (NOT the MCP
58
+ endpoint) to return real-time plan usage, including:
59
+ - Plan tier (pro / lite / max)
60
+ - 5-hour rolling window: calls used / limit / remaining / reset time
61
+ - Per-tool breakdown (search-prime, web-reader, zread)
62
+ - Token budget percentage + reset time
63
+
64
+ Options:
65
+ (none yet — future versions may add --history for 24h/7d/30d windows)
66
+
67
+ Examples:
68
+ scoutline quota
69
+ scoutline quota -O pretty # human-readable with progress bars
70
+ scoutline quota -O json # envelope-wrapped for scripts
71
+
72
+ Notes:
73
+ - This call hits a different endpoint than search/read/repo and is not
74
+ cached by the local response cache.
75
+ - Auth: tries raw API key first, falls back to Bearer prefix on 401.
76
+ `.trim();
77
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/commands/quota.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMlD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,QAAQ,GAAiB,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,UAAU,EAAE,SAAS;gBACnB,CAAC,CAAC;oBACE,IAAI,EAAE,SAAS,CAAC,YAAY;oBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;oBAChC,WAAW,EAAE,SAAS,CAAC,IAAI;oBAC3B,QAAQ,EAAE,SAAS,CAAC,aAAa;wBAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;wBACjD,CAAC,CAAC,IAAI;oBACR,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;oBACnF,MAAM,EAAE,SAAS,CAAC,YAAY;iBAC/B;gBACH,CAAC,CAAC,IAAI;YACR,MAAM,EAAE,WAAW;gBACjB,CAAC,CAAC;oBACE,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,QAAQ,EAAE,WAAW,CAAC,aAAa;wBACjC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;wBACnD,CAAC,CAAC,IAAI;oBACR,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;iBACxF;gBACH,CAAC,CAAC,IAAI;SACT,CAAC;QAEF,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,aAAa,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBzB,CAAC,IAAI,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Web reader command using Z.AI WebReader MCP
3
+ */
4
+ import { type ExtractMode } from "../lib/extract.js";
5
+ export interface ReadOptions {
6
+ format?: "markdown" | "text";
7
+ noImages?: boolean;
8
+ withLinks?: boolean;
9
+ timeout?: number;
10
+ noCache?: boolean;
11
+ noGfm?: boolean;
12
+ keepImgDataUrl?: boolean;
13
+ withImagesSummary?: boolean;
14
+ maxChars?: number;
15
+ fullEnvelope?: boolean;
16
+ extract?: ExtractMode;
17
+ }
18
+ export declare function read(url: string, options?: ReadOptions): Promise<void>;
19
+ export declare const READ_HELP: string;
20
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAwDD,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiFhF;AAGD,eAAO,MAAM,SAAS,QAuCd,CAAC"}