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 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/lib/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Z.AI Monitor API client — quota and usage endpoints.
|
|
3
|
+
*
|
|
4
|
+
* Distinct from the MCP/coding endpoints:
|
|
5
|
+
* - Base: https://api.z.ai (no /api/coding/paas/v4 prefix)
|
|
6
|
+
* - Auth quirk: try `Authorization: <key>` first; on 401 retry with `Bearer <key>`
|
|
7
|
+
*
|
|
8
|
+
* Reference: /run/media/vikas/devdrive/glm-usage-indicator/API.md
|
|
9
|
+
*/
|
|
10
|
+
export interface ToolUsage {
|
|
11
|
+
modelCode: string;
|
|
12
|
+
usage: number;
|
|
13
|
+
}
|
|
14
|
+
export interface TimeLimit {
|
|
15
|
+
type: "TIME_LIMIT";
|
|
16
|
+
unit: number;
|
|
17
|
+
number: number;
|
|
18
|
+
usage: number;
|
|
19
|
+
currentValue: number;
|
|
20
|
+
remaining: number;
|
|
21
|
+
percentage: number;
|
|
22
|
+
nextResetTime: number;
|
|
23
|
+
usageDetails: ToolUsage[];
|
|
24
|
+
}
|
|
25
|
+
export interface TokensLimit {
|
|
26
|
+
type: "TOKENS_LIMIT";
|
|
27
|
+
unit: number;
|
|
28
|
+
number: number;
|
|
29
|
+
percentage: number;
|
|
30
|
+
nextResetTime?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface QuotaLimit {
|
|
33
|
+
level: string;
|
|
34
|
+
limits: (TimeLimit | TokensLimit)[];
|
|
35
|
+
}
|
|
36
|
+
export interface ModelUsageTotal {
|
|
37
|
+
totalModelCallCount: number;
|
|
38
|
+
totalTokensUsage: number;
|
|
39
|
+
modelSummaryList?: Array<{
|
|
40
|
+
modelName: string;
|
|
41
|
+
totalTokens: number;
|
|
42
|
+
sortOrder: number;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export declare function getQuotaLimit(): Promise<QuotaLimit>;
|
|
46
|
+
export declare function getModelUsage(startTime: string, endTime: string): Promise<ModelUsageTotal>;
|
|
47
|
+
export declare function getTimeLimit(data: QuotaLimit): TimeLimit | undefined;
|
|
48
|
+
export declare function getTokensLimit(data: QuotaLimit): TokensLimit | undefined;
|
|
49
|
+
/** Human-readable "in 4h 23m" / "in 3d" / "now" from epoch-ms timestamp. */
|
|
50
|
+
export declare function formatResetTime(epochMs: number): string;
|
|
51
|
+
//# sourceMappingURL=monitor-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-client.d.ts","sourceRoot":"","sources":["../../src/lib/monitor-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AAgED,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAMzD;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAWhG;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAEpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAExE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Z.AI Monitor API client — quota and usage endpoints.
|
|
3
|
+
*
|
|
4
|
+
* Distinct from the MCP/coding endpoints:
|
|
5
|
+
* - Base: https://api.z.ai (no /api/coding/paas/v4 prefix)
|
|
6
|
+
* - Auth quirk: try `Authorization: <key>` first; on 401 retry with `Bearer <key>`
|
|
7
|
+
*
|
|
8
|
+
* Reference: /run/media/vikas/devdrive/glm-usage-indicator/API.md
|
|
9
|
+
*/
|
|
10
|
+
import { getApiKey } from "./config.js";
|
|
11
|
+
import { ApiError, AuthError, NetworkError, TimeoutError } from "./errors.js";
|
|
12
|
+
const MONITOR_BASE = process.env.ZAI_MONITOR_BASE_URL || "https://api.z.ai";
|
|
13
|
+
const TIMEOUT_MS = parseInt(process.env.Z_AI_TIMEOUT || "30000", 10);
|
|
14
|
+
async function fetchWithAuth(path, params) {
|
|
15
|
+
const apiKey = getApiKey();
|
|
16
|
+
const url = new URL(MONITOR_BASE + path);
|
|
17
|
+
if (params) {
|
|
18
|
+
for (const [k, v] of Object.entries(params))
|
|
19
|
+
url.searchParams.set(k, v);
|
|
20
|
+
}
|
|
21
|
+
// The monitor API accepts the key with OR without Bearer prefix.
|
|
22
|
+
// Try raw first; on 401, retry with Bearer.
|
|
23
|
+
for (const authValue of [apiKey, `Bearer ${apiKey}`]) {
|
|
24
|
+
const controller = new AbortController();
|
|
25
|
+
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
26
|
+
try {
|
|
27
|
+
const res = await fetch(url, {
|
|
28
|
+
method: "GET",
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: authValue,
|
|
31
|
+
"Accept-Language": "en-US,en",
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
},
|
|
34
|
+
signal: controller.signal,
|
|
35
|
+
});
|
|
36
|
+
clearTimeout(timeoutId);
|
|
37
|
+
if (res.status === 401 && authValue === apiKey) {
|
|
38
|
+
// Retry with Bearer prefix
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
const text = await res.text();
|
|
43
|
+
let msg = `HTTP ${res.status}: ${text}`;
|
|
44
|
+
try {
|
|
45
|
+
const j = JSON.parse(text);
|
|
46
|
+
msg = j.message || j.error?.message || msg;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// keep raw text
|
|
50
|
+
}
|
|
51
|
+
if (res.status === 401 || res.status === 403) {
|
|
52
|
+
throw new AuthError(`Monitor API auth failed: ${msg}`);
|
|
53
|
+
}
|
|
54
|
+
throw new ApiError(msg, res.status);
|
|
55
|
+
}
|
|
56
|
+
const body = (await res.json());
|
|
57
|
+
// Endpoint wraps responses in { data: {...} } — unwrap.
|
|
58
|
+
return body.data ?? body;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
clearTimeout(timeoutId);
|
|
62
|
+
if (err instanceof AuthError || err instanceof ApiError)
|
|
63
|
+
throw err;
|
|
64
|
+
if (err instanceof Error) {
|
|
65
|
+
if (err.name === "AbortError")
|
|
66
|
+
throw new TimeoutError(TIMEOUT_MS);
|
|
67
|
+
if (err.message.includes("fetch") || err.message.includes("ECONNREFUSED")) {
|
|
68
|
+
throw new NetworkError(err.message);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
throw new AuthError("Monitor API rejected both auth schemes");
|
|
75
|
+
}
|
|
76
|
+
export async function getQuotaLimit() {
|
|
77
|
+
const data = (await fetchWithAuth("/api/monitor/usage/quota/limit"));
|
|
78
|
+
return {
|
|
79
|
+
level: data.level || "unknown",
|
|
80
|
+
limits: data.limits || [],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function getModelUsage(startTime, endTime) {
|
|
84
|
+
const data = (await fetchWithAuth("/api/monitor/usage/model-usage", {
|
|
85
|
+
startTime,
|
|
86
|
+
endTime,
|
|
87
|
+
}));
|
|
88
|
+
return (data.totalUsage || {
|
|
89
|
+
totalModelCallCount: 0,
|
|
90
|
+
totalTokensUsage: 0,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// Convenience accessors with type narrowing
|
|
94
|
+
export function getTimeLimit(data) {
|
|
95
|
+
return data.limits.find((l) => l.type === "TIME_LIMIT");
|
|
96
|
+
}
|
|
97
|
+
export function getTokensLimit(data) {
|
|
98
|
+
return data.limits.find((l) => l.type === "TOKENS_LIMIT");
|
|
99
|
+
}
|
|
100
|
+
/** Human-readable "in 4h 23m" / "in 3d" / "now" from epoch-ms timestamp. */
|
|
101
|
+
export function formatResetTime(epochMs) {
|
|
102
|
+
const diff = epochMs - Date.now();
|
|
103
|
+
if (diff <= 0)
|
|
104
|
+
return "now";
|
|
105
|
+
const minutes = Math.floor(diff / 60_000);
|
|
106
|
+
if (minutes < 60)
|
|
107
|
+
return `${minutes}m`;
|
|
108
|
+
const hours = Math.floor(minutes / 60);
|
|
109
|
+
const mins = minutes % 60;
|
|
110
|
+
if (hours < 24)
|
|
111
|
+
return mins ? `${hours}h ${mins}m` : `${hours}h`;
|
|
112
|
+
const days = Math.floor(hours / 24);
|
|
113
|
+
return `${days}d`;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=monitor-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-client.js","sourceRoot":"","sources":["../../src/lib/monitor-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output formatting for Scoutline
|
|
3
|
+
*/
|
|
4
|
+
export interface SuccessResponse<T = unknown> {
|
|
5
|
+
success: true;
|
|
6
|
+
data: T;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ErrorResponse {
|
|
10
|
+
success: false;
|
|
11
|
+
error: string;
|
|
12
|
+
code?: string;
|
|
13
|
+
help?: string;
|
|
14
|
+
}
|
|
15
|
+
export type Response<T = unknown> = SuccessResponse<T> | ErrorResponse;
|
|
16
|
+
export type OutputMode = "data" | "json" | "pretty" | "compact" | "markdown" | "refs" | "tty";
|
|
17
|
+
export declare function setOutputMode(mode: OutputMode): void;
|
|
18
|
+
export declare function getOutputMode(): OutputMode;
|
|
19
|
+
export declare function success<T>(data: T): SuccessResponse<T>;
|
|
20
|
+
export declare function error(message: string, code?: string, help?: string): ErrorResponse;
|
|
21
|
+
export declare function output<T>(response: Response<T>): void;
|
|
22
|
+
export declare function outputSuccess<T>(data: T): void;
|
|
23
|
+
export declare function outputError(message: string, code?: string, help?: string): void;
|
|
24
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAI9F,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAGpD;AAED,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAMtD;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAOlF;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAGrD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAwB9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAI/E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output formatting for Scoutline
|
|
3
|
+
*/
|
|
4
|
+
let outputMode = process.env.ZAI_OUTPUT_MODE || "data";
|
|
5
|
+
export function setOutputMode(mode) {
|
|
6
|
+
outputMode = mode;
|
|
7
|
+
process.env.ZAI_OUTPUT_MODE = mode;
|
|
8
|
+
}
|
|
9
|
+
export function getOutputMode() {
|
|
10
|
+
return outputMode;
|
|
11
|
+
}
|
|
12
|
+
export function success(data) {
|
|
13
|
+
return {
|
|
14
|
+
success: true,
|
|
15
|
+
data,
|
|
16
|
+
timestamp: Date.now(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function error(message, code, help) {
|
|
20
|
+
return {
|
|
21
|
+
success: false,
|
|
22
|
+
error: message,
|
|
23
|
+
...(code && { code }),
|
|
24
|
+
...(help && { help }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function output(response) {
|
|
28
|
+
const pretty = outputMode === "pretty";
|
|
29
|
+
console.log(JSON.stringify(response, null, pretty ? 2 : 0));
|
|
30
|
+
}
|
|
31
|
+
export function outputSuccess(data) {
|
|
32
|
+
// Search-specific text formats; data is expected to be a pre-formatted string.
|
|
33
|
+
if (outputMode === "compact" ||
|
|
34
|
+
outputMode === "markdown" ||
|
|
35
|
+
outputMode === "refs" ||
|
|
36
|
+
outputMode === "tty") {
|
|
37
|
+
if (typeof data === "string") {
|
|
38
|
+
console.log(data);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
console.log(JSON.stringify(data, null, 0));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (outputMode === "data") {
|
|
45
|
+
if (typeof data === "string") {
|
|
46
|
+
console.log(data);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
console.log(JSON.stringify(data, null, 0));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
output(success(data));
|
|
53
|
+
}
|
|
54
|
+
export function outputError(message, code, help) {
|
|
55
|
+
const pretty = outputMode === "pretty";
|
|
56
|
+
console.error(JSON.stringify(error(message, code, help), null, pretty ? 2 : 0));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,IAAI,UAAU,GAAgB,OAAO,CAAC,GAAG,CAAC,eAA8B,IAAI,MAAM,CAAC;AAEnF,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,UAAU,GAAG,IAAI,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,IAAO;IAChC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,IAAa,EAAE,IAAa;IACjE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QACd,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,QAAqB;IAC7C,MAAM,MAAM,GAAG,UAAU,KAAK,QAAQ,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,IAAO;IACtC,+EAA+E;IAC/E,IACE,UAAU,KAAK,SAAS;QACxB,UAAU,KAAK,UAAU;QACzB,UAAU,KAAK,MAAM;QACrB,UAAU,KAAK,KAAK,EACpB,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,IAAa,EAAE,IAAa;IACvE,MAAM,MAAM,GAAG,UAAU,KAAK,QAAQ,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redact sensitive values from tool metadata (for output + caching).
|
|
3
|
+
*/
|
|
4
|
+
import type { Tool } from "@utcp/sdk";
|
|
5
|
+
export declare function redactSecrets(value: unknown, apiKey?: string): unknown;
|
|
6
|
+
export declare function redactTool(tool: Tool): Tool;
|
|
7
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAwBtC,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAoBtE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI3C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redact sensitive values from tool metadata (for output + caching).
|
|
3
|
+
*/
|
|
4
|
+
const REDACT_KEYS = new Set([
|
|
5
|
+
"authorization",
|
|
6
|
+
"Authorization",
|
|
7
|
+
"api_key",
|
|
8
|
+
"apiKey",
|
|
9
|
+
"access_token",
|
|
10
|
+
"token",
|
|
11
|
+
"Z_AI_API_KEY",
|
|
12
|
+
"ZAI_API_KEY",
|
|
13
|
+
]);
|
|
14
|
+
function redactString(value, apiKey) {
|
|
15
|
+
let result = value;
|
|
16
|
+
if (apiKey && result.includes(apiKey)) {
|
|
17
|
+
result = result.replaceAll(apiKey, "[REDACTED]");
|
|
18
|
+
}
|
|
19
|
+
if (/^Bearer\s+\S+/.test(result)) {
|
|
20
|
+
result = result.replace(/Bearer\s+\S+/, "Bearer [REDACTED]");
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export function redactSecrets(value, apiKey) {
|
|
25
|
+
if (typeof value === "string") {
|
|
26
|
+
return redactString(value, apiKey);
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(value)) {
|
|
29
|
+
return value.map((item) => redactSecrets(item, apiKey));
|
|
30
|
+
}
|
|
31
|
+
if (value && typeof value === "object") {
|
|
32
|
+
const obj = value;
|
|
33
|
+
const output = {};
|
|
34
|
+
for (const [key, child] of Object.entries(obj)) {
|
|
35
|
+
if (REDACT_KEYS.has(key)) {
|
|
36
|
+
output[key] = "[REDACTED]";
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
output[key] = redactSecrets(child, apiKey);
|
|
40
|
+
}
|
|
41
|
+
return output;
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
export function redactTool(tool) {
|
|
46
|
+
const apiKey = process.env.Z_AI_API_KEY || process.env.ZAI_API_KEY;
|
|
47
|
+
const clone = JSON.parse(JSON.stringify(tool));
|
|
48
|
+
return redactSecrets(clone, apiKey);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,eAAe;IACf,eAAe;IACf,SAAS;IACT,QAAQ;IACR,cAAc;IACd,OAAO;IACP,cAAc;IACd,aAAa;CACd,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,KAAa,EAAE,MAAe;IAClD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAe;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAS,CAAC;IACvD,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAS,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to suppress console output from noisy dependencies (UTCP SDK)
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Suppress console.log and console.error output
|
|
6
|
+
*/
|
|
7
|
+
export declare function silenceConsole(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Restore original console methods
|
|
10
|
+
*/
|
|
11
|
+
export declare function restoreConsole(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Run a function with console silenced
|
|
14
|
+
*/
|
|
15
|
+
export declare function withSilentConsole<T>(fn: () => Promise<T>): Promise<T>;
|
|
16
|
+
//# sourceMappingURL=silence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silence.d.ts","sourceRoot":"","sources":["../../src/lib/silence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO3E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to suppress console output from noisy dependencies (UTCP SDK)
|
|
3
|
+
*/
|
|
4
|
+
const originalConsoleLog = console.log;
|
|
5
|
+
const originalConsoleError = console.error;
|
|
6
|
+
let silenced = false;
|
|
7
|
+
/**
|
|
8
|
+
* Suppress console.log and console.error output
|
|
9
|
+
*/
|
|
10
|
+
export function silenceConsole() {
|
|
11
|
+
if (silenced)
|
|
12
|
+
return;
|
|
13
|
+
silenced = true;
|
|
14
|
+
console.log = (...args) => {
|
|
15
|
+
// Only suppress UTCP/MCP protocol logs
|
|
16
|
+
const msg = String(args[0] || "");
|
|
17
|
+
if (msg.includes("[McpCommunicationProtocol]") ||
|
|
18
|
+
msg.includes("UTCP Client") ||
|
|
19
|
+
msg.includes("Successfully registered manual") ||
|
|
20
|
+
msg.includes("Calling tool") ||
|
|
21
|
+
msg.includes("via protocol")) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
originalConsoleLog.apply(console, args);
|
|
25
|
+
};
|
|
26
|
+
console.error = (...args) => {
|
|
27
|
+
const msg = String(args[0] || "");
|
|
28
|
+
if (msg.includes("[McpCommunicationProtocol") || msg.includes("UTCP")) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
originalConsoleError.apply(console, args);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Restore original console methods
|
|
36
|
+
*/
|
|
37
|
+
export function restoreConsole() {
|
|
38
|
+
if (!silenced)
|
|
39
|
+
return;
|
|
40
|
+
silenced = false;
|
|
41
|
+
console.log = originalConsoleLog;
|
|
42
|
+
console.error = originalConsoleError;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run a function with console silenced
|
|
46
|
+
*/
|
|
47
|
+
export async function withSilentConsole(fn) {
|
|
48
|
+
silenceConsole();
|
|
49
|
+
try {
|
|
50
|
+
return await fn();
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
restoreConsole();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=silence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silence.js","sourceRoot":"","sources":["../../src/lib/silence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;AACvC,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC;AAE3C,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,QAAQ;QAAE,OAAO;IACrB,QAAQ,GAAG,IAAI,CAAC;IAEhB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACnC,uCAAuC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,IACE,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC1C,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC3B,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC9C,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC5B,CAAC;YACD,OAAO;QACT,CAAC;QACD,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,OAAO;QACT,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;IACjC,OAAO,CAAC,KAAK,GAAG,oBAAoB,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAI,EAAoB;IAC7D,cAAc,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,cAAc,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTY-aware pretty output.
|
|
3
|
+
*
|
|
4
|
+
* Agents always capture stdout (isTTY=false) → they get compact JSON unchanged.
|
|
5
|
+
* Humans running scoutline in a terminal (isTTY=true) get human-friendly output
|
|
6
|
+
* by default: colored search results, quota dashboards with progress bars.
|
|
7
|
+
*
|
|
8
|
+
* Force either way: --pretty-output (force human format) / --raw (force data).
|
|
9
|
+
*
|
|
10
|
+
* Honors NO_COLOR env var (https://no-color.org) — disables all ANSI codes.
|
|
11
|
+
*/
|
|
12
|
+
type ColorFn = (s: string) => string;
|
|
13
|
+
export declare const color: {
|
|
14
|
+
bold: ColorFn;
|
|
15
|
+
dim: ColorFn;
|
|
16
|
+
cyan: ColorFn;
|
|
17
|
+
green: ColorFn;
|
|
18
|
+
yellow: ColorFn;
|
|
19
|
+
red: ColorFn;
|
|
20
|
+
magenta: ColorFn;
|
|
21
|
+
gray: ColorFn;
|
|
22
|
+
};
|
|
23
|
+
export declare function isTTY(): boolean;
|
|
24
|
+
/** Resolve the effective output mode considering --raw / --pretty-output overrides. */
|
|
25
|
+
export declare function resolveTtyMode(explicitFormat: string | undefined, opts: {
|
|
26
|
+
forcePretty?: boolean;
|
|
27
|
+
forceRaw?: boolean;
|
|
28
|
+
}): "tty" | "non-tty";
|
|
29
|
+
interface SearchResultLike {
|
|
30
|
+
rank?: number;
|
|
31
|
+
title?: string;
|
|
32
|
+
url?: string;
|
|
33
|
+
summary?: string;
|
|
34
|
+
source?: string;
|
|
35
|
+
date?: string;
|
|
36
|
+
occurrences?: number;
|
|
37
|
+
}
|
|
38
|
+
export declare function formatSearchResultsPretty(results: SearchResultLike[]): string;
|
|
39
|
+
interface QuotaLike {
|
|
40
|
+
plan?: string;
|
|
41
|
+
timeWindow?: {
|
|
42
|
+
used?: number;
|
|
43
|
+
limit?: number;
|
|
44
|
+
remaining?: number;
|
|
45
|
+
percentage?: number;
|
|
46
|
+
windowHours?: number;
|
|
47
|
+
resetsIn?: string | null;
|
|
48
|
+
byTool?: Array<{
|
|
49
|
+
modelCode?: string;
|
|
50
|
+
usage?: number;
|
|
51
|
+
}>;
|
|
52
|
+
} | null;
|
|
53
|
+
tokens?: {
|
|
54
|
+
percentage?: number;
|
|
55
|
+
resetsIn?: string | null;
|
|
56
|
+
} | null;
|
|
57
|
+
}
|
|
58
|
+
export declare function formatQuotaPretty(q: QuotaLike): string;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=tty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty.d.ts","sourceRoot":"","sources":["../../src/lib/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAUrC,eAAO,MAAM,KAAK;IAChB,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,KAAK;IACL,MAAM;IACN,GAAG;IACH,OAAO;IACP,IAAI;CACL,CAAC;AAEF,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAClD,KAAK,GAAG,SAAS,CAKnB;AAED,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAe7E;AAED,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxD,GAAG,IAAI,CAAC;IACT,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE;AAUD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAqCtD"}
|
package/dist/lib/tty.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTY-aware pretty output.
|
|
3
|
+
*
|
|
4
|
+
* Agents always capture stdout (isTTY=false) → they get compact JSON unchanged.
|
|
5
|
+
* Humans running scoutline in a terminal (isTTY=true) get human-friendly output
|
|
6
|
+
* by default: colored search results, quota dashboards with progress bars.
|
|
7
|
+
*
|
|
8
|
+
* Force either way: --pretty-output (force human format) / --raw (force data).
|
|
9
|
+
*
|
|
10
|
+
* Honors NO_COLOR env var (https://no-color.org) — disables all ANSI codes.
|
|
11
|
+
*/
|
|
12
|
+
const NO_COLOR = "NO_COLOR" in process.env || process.env.NO_COLOR !== undefined;
|
|
13
|
+
const ANSI_ENABLED = !NO_COLOR;
|
|
14
|
+
function ansi(code) {
|
|
15
|
+
if (!ANSI_ENABLED)
|
|
16
|
+
return (s) => s;
|
|
17
|
+
return (s) => `\x1b[${code}m${s}\x1b[0m`;
|
|
18
|
+
}
|
|
19
|
+
export const color = {
|
|
20
|
+
bold: ansi("1"),
|
|
21
|
+
dim: ansi("2"),
|
|
22
|
+
cyan: ansi("36"),
|
|
23
|
+
green: ansi("32"),
|
|
24
|
+
yellow: ansi("33"),
|
|
25
|
+
red: ansi("31"),
|
|
26
|
+
magenta: ansi("35"),
|
|
27
|
+
gray: ansi("90"),
|
|
28
|
+
};
|
|
29
|
+
export function isTTY() {
|
|
30
|
+
return Boolean(process.stdout.isTTY);
|
|
31
|
+
}
|
|
32
|
+
/** Resolve the effective output mode considering --raw / --pretty-output overrides. */
|
|
33
|
+
export function resolveTtyMode(explicitFormat, opts) {
|
|
34
|
+
if (opts.forcePretty)
|
|
35
|
+
return "tty";
|
|
36
|
+
if (opts.forceRaw)
|
|
37
|
+
return "non-tty";
|
|
38
|
+
if (explicitFormat)
|
|
39
|
+
return "non-tty"; // user picked a specific -O mode
|
|
40
|
+
return isTTY() ? "tty" : "non-tty";
|
|
41
|
+
}
|
|
42
|
+
export function formatSearchResultsPretty(results) {
|
|
43
|
+
if (results.length === 0)
|
|
44
|
+
return color.dim("(no results)");
|
|
45
|
+
const lines = [];
|
|
46
|
+
for (const r of results) {
|
|
47
|
+
const badge = r.occurrences && r.occurrences > 1 ? ` ${color.yellow(`×${r.occurrences}`)}` : "";
|
|
48
|
+
const num = color.gray(`${r.rank}.`);
|
|
49
|
+
lines.push(`${num} ${color.bold(r.title || "(untitled)")}${badge}`);
|
|
50
|
+
lines.push(` ${color.cyan(r.url || "")}`);
|
|
51
|
+
if (r.summary)
|
|
52
|
+
lines.push(` ${color.dim(r.summary)}`);
|
|
53
|
+
const meta = [];
|
|
54
|
+
if (r.source)
|
|
55
|
+
meta.push(r.source);
|
|
56
|
+
if (r.date)
|
|
57
|
+
meta.push(r.date);
|
|
58
|
+
if (meta.length)
|
|
59
|
+
lines.push(` ${color.gray(meta.join(" · "))}`);
|
|
60
|
+
}
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
/** ASCII progress bar: 20 chars wide. */
|
|
64
|
+
function progressBar(pct) {
|
|
65
|
+
const filled = Math.round((pct / 100) * 20);
|
|
66
|
+
const bar = "█".repeat(filled) + "░".repeat(20 - filled);
|
|
67
|
+
const colorFn = pct >= 90 ? color.red : pct >= 70 ? color.yellow : color.green;
|
|
68
|
+
return colorFn(bar);
|
|
69
|
+
}
|
|
70
|
+
export function formatQuotaPretty(q) {
|
|
71
|
+
const lines = [];
|
|
72
|
+
lines.push("");
|
|
73
|
+
lines.push(` ${color.bold("Z.AI Coding Plan")} — ${color.magenta(q.plan || "unknown")} tier`);
|
|
74
|
+
lines.push("");
|
|
75
|
+
if (q.timeWindow) {
|
|
76
|
+
const tw = q.timeWindow;
|
|
77
|
+
const pct = tw.percentage ?? 0;
|
|
78
|
+
const resetTxt = tw.resetsIn ? `resets in ${color.dim(tw.resetsIn)}` : "";
|
|
79
|
+
lines.push(` ${color.bold(`Time window`)} ${color.gray(`(${tw.windowHours || 5}h rolling)`)} ${resetTxt}`);
|
|
80
|
+
lines.push("");
|
|
81
|
+
lines.push(` ${progressBar(pct)} ${tw.used ?? 0}/${tw.limit ?? 0} calls (${pct}%)`);
|
|
82
|
+
if (tw.remaining !== undefined) {
|
|
83
|
+
lines.push(` ${color.green(`${tw.remaining} remaining`)}`);
|
|
84
|
+
}
|
|
85
|
+
if (tw.byTool && tw.byTool.length > 0) {
|
|
86
|
+
lines.push("");
|
|
87
|
+
const sorted = [...tw.byTool].sort((a, b) => (b.usage || 0) - (a.usage || 0));
|
|
88
|
+
for (const t of sorted) {
|
|
89
|
+
lines.push(` ${color.gray("•")} ${t.modelCode}: ${t.usage || 0}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
lines.push("");
|
|
93
|
+
}
|
|
94
|
+
if (q.tokens) {
|
|
95
|
+
const pct = q.tokens.percentage ?? 0;
|
|
96
|
+
const resetTxt = q.tokens.resetsIn ? `resets in ${color.dim(q.tokens.resetsIn)}` : "";
|
|
97
|
+
lines.push(` ${color.bold("Token budget")} ${resetTxt}`);
|
|
98
|
+
lines.push(` ${progressBar(pct)} ${pct}% used`);
|
|
99
|
+
lines.push("");
|
|
100
|
+
}
|
|
101
|
+
return lines.join("\n");
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=tty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../src/lib/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC;AACjF,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC;AAE/B,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI,CAAC,YAAY;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACf,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAClB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAC5B,cAAkC,EAClC,IAAmD;IAEnD,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,cAAc;QAAE,OAAO,SAAS,CAAC,CAAC,iCAAiC;IACvE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACrC,CAAC;AAYD,MAAM,UAAU,yBAAyB,CAAC,OAA2B;IACnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAgBD,yCAAyC;AACzC,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAY;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CACjG,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QACtF,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|