@agentearth.ai/cli 0.1.0-beta.2 → 0.1.0-beta.3
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/README.md +1 -1
- package/dist/commands/execute.js +24 -1
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/list.js +10 -0
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +14 -8
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/update.js +5 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/updateCheck.js +20 -3
- package/dist/commands/updateCheck.js.map +1 -1
- package/dist/commands/updateHint.js +6 -4
- package/dist/commands/updateHint.js.map +1 -1
- package/dist/commands/updateNpm.js +7 -0
- package/dist/commands/updateNpm.js.map +1 -1
- package/dist/core/backendErrors.js +3 -0
- package/dist/core/backendErrors.js.map +1 -1
- package/dist/core/errors.js +3 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/hiddenInput.js +10 -0
- package/dist/core/hiddenInput.js.map +1 -1
- package/dist/core/http.d.ts +0 -1
- package/dist/core/http.js +14 -17
- package/dist/core/http.js.map +1 -1
- package/dist/core/output.js +3 -1
- package/dist/core/output.js.map +1 -1
- package/dist/storage/credentials.d.ts +5 -1
- package/dist/storage/credentials.js +18 -6
- package/dist/storage/credentials.js.map +1 -1
- package/dist/storage/fileProtection.js +4 -0
- package/dist/storage/fileProtection.js.map +1 -1
- package/dist/storage/paths.js +3 -0
- package/dist/storage/paths.js.map +1 -1
- package/dist/storage/session.js +91 -23
- package/dist/storage/session.js.map +1 -1
- package/dist/storage/telemetryQueue.js +6 -0
- package/dist/storage/telemetryQueue.js.map +1 -1
- package/dist/storage/telemetryUploadState.js +16 -0
- package/dist/storage/telemetryUploadState.js.map +1 -1
- package/dist/storage/updateCache.js +2 -2
- package/dist/telemetry/uploader.js +33 -1
- package/dist/telemetry/uploader.js.map +1 -1
- package/package.json +1 -1
package/dist/core/http.js
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 业务接口和埋点接口的响应规则不同:
|
|
5
5
|
* - recommend/list/detail/execute 这类业务接口需要返回 JSON,命令模块会读取 error_no。
|
|
6
|
-
* - CLI
|
|
6
|
+
* - CLI 埋点上传接口按 HTTP 状态分类,不要求响应体。
|
|
7
7
|
*
|
|
8
8
|
* 因此这里提供两类 helper:`postJson/getJson` 用于业务接口,
|
|
9
|
-
* `
|
|
9
|
+
* `postTelemetryJson` 用于埋点上传。
|
|
10
10
|
*/
|
|
11
11
|
import { CliError } from "./errors.js";
|
|
12
12
|
export async function postJson(pathOrUrl, body, options) {
|
|
@@ -17,18 +17,13 @@ export async function postJson(pathOrUrl, body, options) {
|
|
|
17
17
|
body: JSON.stringify(body)
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
export async function postJsonNoResponse(pathOrUrl, body, options) {
|
|
21
|
-
// 埋点上传只看 HTTP 状态码,不读取响应体。
|
|
22
|
-
await requestNoResponse(pathOrUrl, options, {
|
|
23
|
-
method: "POST",
|
|
24
|
-
headers: { "Content-Type": "application/json" },
|
|
25
|
-
body: JSON.stringify(body)
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
20
|
export async function postTelemetryJson(pathOrUrl, body, options) {
|
|
21
|
+
// AbortController 是 Node/fetch 的标准超时写法:到点后主动取消请求。
|
|
29
22
|
const controller = new AbortController();
|
|
23
|
+
// setTimeout 返回的 timer 后面必须 clear,避免 CLI 命令结束后进程还被 timer 挂住。
|
|
30
24
|
const timeout = setTimeout(() => controller.abort(), options.timeoutMs);
|
|
31
25
|
try {
|
|
26
|
+
// 埋点接口和业务接口共用 X-Api-Key;body 在这里统一序列化,调用方不直接碰 fetch 细节。
|
|
32
27
|
const response = await fetch(resolveUrl(pathOrUrl, options.baseUrl), {
|
|
33
28
|
method: "POST",
|
|
34
29
|
headers: {
|
|
@@ -38,15 +33,19 @@ export async function postTelemetryJson(pathOrUrl, body, options) {
|
|
|
38
33
|
body: JSON.stringify(body),
|
|
39
34
|
signal: controller.signal
|
|
40
35
|
});
|
|
36
|
+
// response.ok 表示 HTTP 2xx,不要求必须是 200;后端未来返回 202 也会被视为成功。
|
|
41
37
|
if (response.ok) {
|
|
42
38
|
return { kind: "success", status: response.status };
|
|
43
39
|
}
|
|
40
|
+
// 当前后端第一版主要返回 401;保留 403 是为了兼容未来权限细分。
|
|
44
41
|
if (response.status === 401 || response.status === 403) {
|
|
45
42
|
return { kind: "auth_failed", status: response.status };
|
|
46
43
|
}
|
|
44
|
+
// 413 表示请求体超过后端限制,uploader.ts 会尝试把批次拆小。
|
|
47
45
|
if (response.status === 413) {
|
|
48
46
|
return { kind: "payload_too_large", status: 413 };
|
|
49
47
|
}
|
|
48
|
+
// 429 如果出现,优先尊重 Retry-After;没有该头时交给调用方用默认退避。
|
|
50
49
|
if (response.status === 429) {
|
|
51
50
|
return {
|
|
52
51
|
kind: "rate_limited",
|
|
@@ -54,9 +53,11 @@ export async function postTelemetryJson(pathOrUrl, body, options) {
|
|
|
54
53
|
retryAfterMs: parseRetryAfterMs(response.headers.get("retry-after"))
|
|
55
54
|
};
|
|
56
55
|
}
|
|
56
|
+
// 5xx 通常是后端临时问题,队列应该保留,等待之后重试。
|
|
57
57
|
if (response.status >= 500) {
|
|
58
58
|
return { kind: "server_error", status: response.status };
|
|
59
59
|
}
|
|
60
|
+
// 走到这里的是 4xx 里没有单独处理的永久错误,例如 400 或未来可能的 415。
|
|
60
61
|
return { kind: "permanent_failure", status: response.status };
|
|
61
62
|
}
|
|
62
63
|
catch (error) {
|
|
@@ -80,13 +81,6 @@ async function requestJson(pathOrUrl, options, init) {
|
|
|
80
81
|
const response = await request(pathOrUrl, options, init);
|
|
81
82
|
return parseJsonResponse(response);
|
|
82
83
|
}
|
|
83
|
-
async function requestNoResponse(pathOrUrl, options, init) {
|
|
84
|
-
// 先发请求,再只判断 HTTP 状态码。
|
|
85
|
-
const response = await request(pathOrUrl, options, init);
|
|
86
|
-
if (!response.ok) {
|
|
87
|
-
throw new CliError("backend_error", `Backend returned HTTP ${response.status}.`, "Retry later.", 1, { telemetryEligible: false });
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
84
|
async function request(pathOrUrl, options, init) {
|
|
91
85
|
// AbortController 用来在 timeoutMs 后主动取消 fetch。
|
|
92
86
|
const controller = new AbortController();
|
|
@@ -182,13 +176,16 @@ function resolveUrl(pathOrUrl, baseUrl) {
|
|
|
182
176
|
return `${baseUrl.replace(/\/$/, "")}/${pathOrUrl.replace(/^\//, "")}`;
|
|
183
177
|
}
|
|
184
178
|
function parseRetryAfterMs(value) {
|
|
179
|
+
// Retry-After 既可能是秒数,也可能是 HTTP 日期;两种格式都要兼容。
|
|
185
180
|
if (!value) {
|
|
186
181
|
return undefined;
|
|
187
182
|
}
|
|
183
|
+
// 第一种格式:Retry-After: 120,表示 120 秒后重试。
|
|
188
184
|
const seconds = Number(value);
|
|
189
185
|
if (Number.isFinite(seconds) && seconds >= 0) {
|
|
190
186
|
return Math.floor(seconds * 1000);
|
|
191
187
|
}
|
|
188
|
+
// 第二种格式:Retry-After: Wed, 21 Oct 2015 07:28:00 GMT。
|
|
192
189
|
const retryAt = Date.parse(value);
|
|
193
190
|
if (!Number.isFinite(retryAt)) {
|
|
194
191
|
return undefined;
|
package/dist/core/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAcvC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,SAAiB,EACjB,IAAa,EACb,OAAoB;IAEpB,8CAA8C;IAC9C,OAAO,WAAW,CAAY,SAAS,EAAE,OAAO,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
|
package/dist/core/output.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export function writeSuccess(result, json) {
|
|
2
|
+
// result 已经由具体 command 组装好,这里不再判断字段含义,只负责选择输出形式。
|
|
2
3
|
// json=true 时,直接输出完整 JSON,方便 agent 解析字段。
|
|
3
4
|
if (json) {
|
|
4
5
|
// null, 2 表示格式化缩进 2 个空格;这不影响 JSON 可解析性。
|
|
@@ -16,6 +17,7 @@ export function writeSuccess(result, json) {
|
|
|
16
17
|
export function writeError(error, json) {
|
|
17
18
|
// 失败结构固定为 { error: { code, message, hint } }。
|
|
18
19
|
// 不再输出布尔 success 字段,失败由非 0 exit code 表示。
|
|
20
|
+
// payload 是 stderr 的最终 JSON 形状;所有失败都必须长成这个样子。
|
|
19
21
|
const payload = {
|
|
20
22
|
error: {
|
|
21
23
|
code: error.code,
|
|
@@ -23,7 +25,7 @@ export function writeError(error, json) {
|
|
|
23
25
|
hint: error.hint
|
|
24
26
|
}
|
|
25
27
|
};
|
|
26
|
-
// agent
|
|
28
|
+
// agent 模式保留完整 JSON;人类模式只显示 code/message/hint,减少终端噪音。
|
|
27
29
|
const output = json
|
|
28
30
|
? JSON.stringify(payload, null, 2)
|
|
29
31
|
: `${error.code}: ${error.message}\nHint: ${error.hint}`;
|
package/dist/core/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,IAAa;IAChE,yCAAyC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,wCAAwC;QACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,IAAa;IACvD,8CAA8C;IAC9C,yCAAyC;IACzC,MAAM,OAAO,GAAmB;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB;KACF,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,IAAa;IAChE,iDAAiD;IACjD,yCAAyC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,wCAAwC;QACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,IAAa;IACvD,8CAA8C;IAC9C,yCAAyC;IACzC,8CAA8C;IAC9C,MAAM,OAAO,GAAmB;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB;KACF,CAAC;IAEF,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI;QACjB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;IAE3D,qCAAqC;IACrC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { GlobalOptions } from "../types/cli.js";
|
|
2
|
+
import { type ProtectSensitiveFileOptions } from "./fileProtection.js";
|
|
2
3
|
export interface AgentEarthCredentials {
|
|
3
4
|
api_key: string;
|
|
4
5
|
saved_at: string;
|
|
5
6
|
}
|
|
7
|
+
export interface WriteCredentialsOptions {
|
|
8
|
+
fileProtection?: ProtectSensitiveFileOptions;
|
|
9
|
+
}
|
|
6
10
|
export declare function readCredentials(): Promise<AgentEarthCredentials | null>;
|
|
7
|
-
export declare function writeCredentials(apiKey: string): Promise<void>;
|
|
11
|
+
export declare function writeCredentials(apiKey: string, options?: WriteCredentialsOptions): Promise<void>;
|
|
8
12
|
export declare function resolveApiKey(options: GlobalOptions): Promise<string>;
|
|
9
13
|
export declare function resolveLoginApiKey(options: GlobalOptions): string;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 本文件只负责本地读写和优先级选择,不负责后端验证。
|
|
11
11
|
*/
|
|
12
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
12
|
+
import { readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
13
13
|
import { CliError } from "../core/errors.js";
|
|
14
14
|
import { protectSensitiveFile } from "./fileProtection.js";
|
|
15
15
|
import { ensureAgentEarthDir, getCredentialsPath } from "./paths.js";
|
|
@@ -25,7 +25,7 @@ export async function readCredentials() {
|
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
export async function writeCredentials(apiKey) {
|
|
28
|
+
export async function writeCredentials(apiKey, options = {}) {
|
|
29
29
|
// 写文件前先确保数据目录存在。
|
|
30
30
|
await ensureAgentEarthDir();
|
|
31
31
|
// 进入落盘前再做一次 trim,确保 credentials.json 不保存前后空白。
|
|
@@ -35,10 +35,19 @@ export async function writeCredentials(apiKey) {
|
|
|
35
35
|
saved_at: new Date().toISOString()
|
|
36
36
|
};
|
|
37
37
|
const filePath = getCredentialsPath();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
const temporaryPath = makeTemporaryCredentialsPath(filePath);
|
|
39
|
+
try {
|
|
40
|
+
// 临时文件里已经包含 API key,所以必须先保护临时文件,再发布成正式 credentials.json。
|
|
41
|
+
await writeFile(temporaryPath, `${JSON.stringify(credentials, null, 2)}\n`, { mode: 0o600 });
|
|
42
|
+
// 如果权限收紧失败,rename 不会发生,用户不会得到一个“登录失败但 key 已发布”的状态。
|
|
43
|
+
await protectSensitiveFile(temporaryPath, options.fileProtection);
|
|
44
|
+
await rename(temporaryPath, filePath);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
// 临时文件里包含 API key;任何失败都要 best-effort 删除。
|
|
48
|
+
await rm(temporaryPath, { force: true }).catch(() => undefined);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
42
51
|
}
|
|
43
52
|
export async function resolveApiKey(options) {
|
|
44
53
|
// 1. 命令行临时 key 优先级最高,适合调试或一次性覆盖。
|
|
@@ -75,6 +84,9 @@ function normalizeApiKey(value) {
|
|
|
75
84
|
}
|
|
76
85
|
return normalized;
|
|
77
86
|
}
|
|
87
|
+
function makeTemporaryCredentialsPath(filePath) {
|
|
88
|
+
return `${filePath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
|
|
89
|
+
}
|
|
78
90
|
function normalizeCredentials(value) {
|
|
79
91
|
// 只有非空字符串 api_key 才能作为真实凭据;损坏结构一律当作没有本地凭据。
|
|
80
92
|
if (!isRecord(value) || typeof value.api_key !== "string") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/storage/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/storage/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { execFile } from "node:child_process";
|
|
|
8
8
|
import { chmod, stat } from "node:fs/promises";
|
|
9
9
|
import { platform as currentPlatform } from "node:os";
|
|
10
10
|
import { promisify } from "node:util";
|
|
11
|
+
// promisify 把 Node 回调风格的 execFile 转成 Promise,方便 async/await 调用。
|
|
11
12
|
const execFileAsync = promisify(execFile);
|
|
12
13
|
export async function pathExists(filePath) {
|
|
13
14
|
// 写入前只需要区分“是否已经有这个文件”,用于避免重复执行昂贵的 ACL 命令。
|
|
@@ -20,6 +21,7 @@ export async function pathExists(filePath) {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
export async function protectSensitiveFile(filePath, options = {}) {
|
|
24
|
+
// 没有传测试 platform 时,使用 Node 的 os.platform() 判断真实系统。
|
|
23
25
|
const targetPlatform = options.platform ?? currentPlatform();
|
|
24
26
|
if (targetPlatform === "win32") {
|
|
25
27
|
await protectWindowsSensitiveFile(filePath, options.runner ?? runCommand);
|
|
@@ -39,9 +41,11 @@ async function protectWindowsSensitiveFile(filePath, runner) {
|
|
|
39
41
|
await runner("icacls", [filePath, "/inheritance:r", "/grant:r", `*${sid}:F`]);
|
|
40
42
|
}
|
|
41
43
|
export function parseWindowsUserSid(output) {
|
|
44
|
+
// whoami /user /fo csv 的输出里会包含 S-1-... 形式的 SID,这里只抽取 SID 本身。
|
|
42
45
|
return output.match(/S-\d-\d+(?:-\d+)+/)?.[0] ?? null;
|
|
43
46
|
}
|
|
44
47
|
async function runCommand(command, args) {
|
|
48
|
+
// execFile 不经过 shell,参数作为数组传入,比拼接命令字符串更安全。
|
|
45
49
|
const result = await execFileAsync(command, [...args], { encoding: "utf8", windowsHide: true });
|
|
46
50
|
return {
|
|
47
51
|
stdout: String(result.stdout),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileProtection.js","sourceRoot":"","sources":["../../src/storage/fileProtection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fileProtection.js","sourceRoot":"","sources":["../../src/storage/fileProtection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,gEAAgE;AAChE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAmB1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAgB,EAAE,UAAuC,EAAE;IACpG,mDAAmD;IACnD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;IAE7D,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,QAAgB,EAAE,MAAmC;IAC9F,mCAAmC;IACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,mDAAmD;IACnD,qDAAqD;IACrD,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,6DAA6D;IAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,IAAuB;IAChE,2CAA2C;IAC3C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAChG,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/storage/paths.js
CHANGED
|
@@ -22,6 +22,7 @@ export function getAgentEarthDir() {
|
|
|
22
22
|
return path.join(homedir(), ".config", "agentearth");
|
|
23
23
|
}
|
|
24
24
|
function resolveLocalAppData() {
|
|
25
|
+
// process.env 是 Node 读取环境变量的方式;?.trim() 表示变量不存在时不报错。
|
|
25
26
|
const localAppData = process.env.LOCALAPPDATA?.trim();
|
|
26
27
|
// LOCALAPPDATA 为空白时不能作为目录,否则 credentials 可能落到当前工作目录。
|
|
27
28
|
return localAppData || path.join(homedir(), "AppData", "Local");
|
|
@@ -39,6 +40,7 @@ export function getTelemetryQueuePath() {
|
|
|
39
40
|
return path.join(getAgentEarthDir(), "events.jsonl");
|
|
40
41
|
}
|
|
41
42
|
export function getTelemetryUploadStatePath() {
|
|
43
|
+
// telemetry-upload-state 保存上传暂停窗口和 key 指纹,不保存完整 API key。
|
|
42
44
|
return path.join(getAgentEarthDir(), "telemetry-upload-state.json");
|
|
43
45
|
}
|
|
44
46
|
export function getUpdateCachePath() {
|
|
@@ -46,6 +48,7 @@ export function getUpdateCachePath() {
|
|
|
46
48
|
return path.join(getAgentEarthDir(), "update-cache.json");
|
|
47
49
|
}
|
|
48
50
|
export async function ensureAgentEarthDir() {
|
|
51
|
+
// 所有本地文件写入前都先调用这里,避免各模块重复 mkdir 逻辑。
|
|
49
52
|
const dir = getAgentEarthDir();
|
|
50
53
|
// recursive=true 表示父目录不存在时一起创建。
|
|
51
54
|
// mode=0o700 表示当前用户可读写执行,其他用户无权限;Windows 上会部分依赖 ACL。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,gBAAgB;IAC9B,4DAA4D;IAC5D,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,kCAAkC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,0CAA0C;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACtD,qDAAqD;IACrD,OAAO,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,8BAA8B;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,gCAAgC;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,oCAAoC;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,6BAA6B,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,qCAAqC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAE/B,gCAAgC;IAChC,qDAAqD;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,uDAAuD;IACvD,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,gBAAgB;IAC9B,4DAA4D;IAC5D,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,kCAAkC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,0CAA0C;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB;IAC1B,qDAAqD;IACrD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACtD,qDAAqD;IACrD,OAAO,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,8BAA8B;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,gCAAgC;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,oCAAoC;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,yDAAyD;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,6BAA6B,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,qCAAqC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,oCAAoC;IACpC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAE/B,gCAAgC;IAChC,qDAAqD;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,uDAAuD;IACvD,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
package/dist/storage/session.js
CHANGED
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 这个缓存不保存 API key,也不输出 tool_url 给 agent。
|
|
9
9
|
*/
|
|
10
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
10
|
+
import { open, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
11
11
|
import { TOOL_CACHE_LIMIT } from "../constants.js";
|
|
12
12
|
import { CliError } from "../core/errors.js";
|
|
13
13
|
import { pathExists, protectSensitiveFile } from "./fileProtection.js";
|
|
14
14
|
import { ensureAgentEarthDir, getSessionPath } from "./paths.js";
|
|
15
|
+
const SESSION_LOCK_TIMEOUT_MS = 5_000;
|
|
16
|
+
const SESSION_LOCK_RETRY_MS = 25;
|
|
15
17
|
export async function writeSession(tools, options = {}) {
|
|
16
18
|
try {
|
|
17
19
|
// 写缓存前先确保目录存在。
|
|
@@ -28,29 +30,30 @@ export async function writeSession(tools, options = {}) {
|
|
|
28
30
|
const dedupedIncomingTools = keepLatestToolByName(incomingTools);
|
|
29
31
|
// 记录本批工具名,用于从旧缓存里删除同名旧记录。
|
|
30
32
|
const incomingNames = new Set(dedupedIncomingTools.map((tool) => tool.tool_name));
|
|
31
|
-
// 读取旧缓存;文件不存在或损坏时会返回空缓存。
|
|
32
|
-
const currentStore = await readStoreForWrite();
|
|
33
|
-
const nextTools = currentStore.tools
|
|
34
|
-
// 先移除被本批覆盖的旧工具。
|
|
35
|
-
.filter((tool) => !incomingNames.has(tool.tool_name))
|
|
36
|
-
// 再把本批工具追加到末尾,表示它们更新。
|
|
37
|
-
.concat(dedupedIncomingTools)
|
|
38
|
-
// 只保留最新 200 个,防止高频使用导致文件无限增长。
|
|
39
|
-
.slice(-TOOL_CACHE_LIMIT);
|
|
40
|
-
const nextStore = {
|
|
41
|
-
version: 3,
|
|
42
|
-
updated_at: now,
|
|
43
|
-
tools: nextTools
|
|
44
|
-
};
|
|
45
33
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
34
|
+
await withSessionWriteLock(async () => {
|
|
35
|
+
// 读取旧缓存必须发生在锁内,否则并发 writeSession 仍会互相覆盖。
|
|
36
|
+
const currentStore = await readStoreForWrite();
|
|
37
|
+
const nextTools = currentStore.tools
|
|
38
|
+
// 先移除被本批覆盖的旧工具。
|
|
39
|
+
.filter((tool) => !incomingNames.has(tool.tool_name))
|
|
40
|
+
// 再把本批工具追加到末尾,表示它们更新。
|
|
41
|
+
.concat(dedupedIncomingTools)
|
|
42
|
+
// 只保留最新 200 个,防止高频使用导致文件无限增长。
|
|
43
|
+
.slice(-TOOL_CACHE_LIMIT);
|
|
44
|
+
const nextStore = {
|
|
45
|
+
version: 3,
|
|
46
|
+
updated_at: now,
|
|
47
|
+
tools: nextTools
|
|
48
|
+
};
|
|
49
|
+
const sessionPath = getSessionPath();
|
|
50
|
+
// 只在首次创建时显式收紧 ACL;后续写入走 0o600 临时文件 + rename,避免高频工具发现反复调用 icacls。
|
|
51
|
+
const sessionFileExists = await pathExists(sessionPath);
|
|
52
|
+
await writeSessionFileAtomically(sessionPath, `${JSON.stringify(nextStore, null, 2)}\n`);
|
|
53
|
+
if (!sessionFileExists) {
|
|
54
|
+
await protectSessionFile(sessionPath, options.fileProtection);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
54
57
|
}
|
|
55
58
|
catch {
|
|
56
59
|
throw new CliError("session_write_failed", "Failed to write local tool cache.", "Check write permission for the AgentEarth data directory.");
|
|
@@ -58,6 +61,71 @@ export async function writeSession(tools, options = {}) {
|
|
|
58
61
|
// 返回本批写入的工具,而不是完整缓存;命令输出只展示本次后端返回内容。
|
|
59
62
|
return dedupedIncomingTools;
|
|
60
63
|
}
|
|
64
|
+
async function withSessionWriteLock(work) {
|
|
65
|
+
// 锁必须覆盖“读旧缓存 -> 合并 -> 写回”整个区间,否则并发 recommend/list/detail 仍会互相覆盖。
|
|
66
|
+
const lockPath = `${getSessionPath()}.lock`;
|
|
67
|
+
const lock = await acquireFileLock(lockPath, SESSION_LOCK_TIMEOUT_MS);
|
|
68
|
+
try {
|
|
69
|
+
return await work();
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
await lock.release();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function acquireFileLock(lockPath, timeoutMs) {
|
|
76
|
+
const startedAt = Date.now();
|
|
77
|
+
while (true) {
|
|
78
|
+
let handle;
|
|
79
|
+
try {
|
|
80
|
+
// open(..., "wx") 在文件已存在时会失败,可以作为跨进程的轻量互斥原语。
|
|
81
|
+
handle = await open(lockPath, "wx", 0o600);
|
|
82
|
+
await handle.writeFile(`${process.pid}\n`);
|
|
83
|
+
return {
|
|
84
|
+
release: async () => {
|
|
85
|
+
// 释放锁也要 best-effort;真正的写入失败会在锁内逻辑里抛出。
|
|
86
|
+
await handle?.close().catch(() => undefined);
|
|
87
|
+
await rm(lockPath, { force: true }).catch(() => undefined);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
await handle?.close().catch(() => undefined);
|
|
93
|
+
if (getErrorCode(error) !== "EEXIST") {
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
if (Date.now() - startedAt > timeoutMs) {
|
|
97
|
+
throw new Error("Timed out waiting for session cache lock.");
|
|
98
|
+
}
|
|
99
|
+
await sleep(SESSION_LOCK_RETRY_MS);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function writeSessionFileAtomically(sessionPath, contents) {
|
|
104
|
+
const temporaryPath = makeTemporarySessionPath(sessionPath);
|
|
105
|
+
try {
|
|
106
|
+
// 先写完整临时文件再 rename,避免进程中断时留下半截 JSON。
|
|
107
|
+
await writeFile(temporaryPath, contents, { mode: 0o600 });
|
|
108
|
+
await rename(temporaryPath, sessionPath);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// 临时文件包含内部 tool_url,失败后不应长期留在本地目录。
|
|
112
|
+
await rm(temporaryPath, { force: true }).catch(() => undefined);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function makeTemporarySessionPath(sessionPath) {
|
|
117
|
+
return `${sessionPath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
|
|
118
|
+
}
|
|
119
|
+
function sleep(ms) {
|
|
120
|
+
return new Promise((resolve) => {
|
|
121
|
+
setTimeout(resolve, ms);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function getErrorCode(error) {
|
|
125
|
+
return typeof error === "object" && error !== null && "code" in error
|
|
126
|
+
? String(error.code)
|
|
127
|
+
: undefined;
|
|
128
|
+
}
|
|
61
129
|
export async function protectSessionFile(filePath, options) {
|
|
62
130
|
// session.json 不保存 API key,但包含内部 tool_url,按当前用户私有文件处理。
|
|
63
131
|
await protectSensitiveFile(filePath, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/storage/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/storage/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,7 @@ function keepLatestTelemetryLines(lines) {
|
|
|
49
49
|
return latestLines;
|
|
50
50
|
}
|
|
51
51
|
function telemetryLinesByteLength(lines) {
|
|
52
|
+
// 队列文件实际写入时每行后面都有换行,所以计算字节数时也补上最后一个 \n。
|
|
52
53
|
return Buffer.byteLength(lines.length > 0 ? `${lines.join("\n")}\n` : "", "utf8");
|
|
53
54
|
}
|
|
54
55
|
async function writeTelemetryQueueLines(queuePath, lines, fileProtection) {
|
|
@@ -64,6 +65,7 @@ export async function protectTelemetryQueueFile(queuePath, options) {
|
|
|
64
65
|
await protectSensitiveFile(queuePath, options);
|
|
65
66
|
}
|
|
66
67
|
export async function readTelemetryQueue(limit = 20) {
|
|
68
|
+
// 旧测试和少量调用方只关心事件数组,所以这里保留一个简化包装。
|
|
67
69
|
return (await readTelemetryQueueBatch(limit)).events;
|
|
68
70
|
}
|
|
69
71
|
export async function readTelemetryQueueBatch(limit = 20) {
|
|
@@ -180,6 +182,7 @@ function hasConsistentTelemetryStatus(value) {
|
|
|
180
182
|
&& value.error_msg.length > 0;
|
|
181
183
|
}
|
|
182
184
|
function isTelemetryMethod(value) {
|
|
185
|
+
// method 只能是 CLI 已知子命令;否则后端日志维度会被脏值污染。
|
|
183
186
|
return value === "login"
|
|
184
187
|
|| value === "recommend"
|
|
185
188
|
|| value === "list"
|
|
@@ -188,12 +191,14 @@ function isTelemetryMethod(value) {
|
|
|
188
191
|
|| value === "update";
|
|
189
192
|
}
|
|
190
193
|
function isTelemetryPlatform(value) {
|
|
194
|
+
// platform 来自 process.platform 的归一化结果,只允许文档中约定的几种值。
|
|
191
195
|
return value === "windows"
|
|
192
196
|
|| value === "macos"
|
|
193
197
|
|| value === "linux"
|
|
194
198
|
|| value === "unknown";
|
|
195
199
|
}
|
|
196
200
|
function isTelemetryShellFamily(value) {
|
|
201
|
+
// shell_family 只是粗分类,用于排查 Windows/PowerShell 这类兼容性问题。
|
|
197
202
|
return value === "powershell"
|
|
198
203
|
|| value === "cmd"
|
|
199
204
|
|| value === "bash"
|
|
@@ -221,6 +226,7 @@ function isTelemetryErrorCode(value) {
|
|
|
221
226
|
|| value === "unknown";
|
|
222
227
|
}
|
|
223
228
|
function isIsoDateTimeString(value) {
|
|
229
|
+
// occurred_at 必须是 ISO 时间字符串,方便后端和日志系统按时间排序、检索。
|
|
224
230
|
if (typeof value !== "string") {
|
|
225
231
|
return false;
|
|
226
232
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetryQueue.js","sourceRoot":"","sources":["../../src/storage/telemetryQueue.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"telemetryQueue.js","sourceRoot":"","sources":["../../src/storage/telemetryQueue.ts"],"names":[],"mappings":"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"}
|