@agentearth.ai/cli 0.1.0-beta.1 → 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.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/execute.js +24 -1
  3. package/dist/commands/execute.js.map +1 -1
  4. package/dist/commands/list.js +10 -0
  5. package/dist/commands/list.js.map +1 -1
  6. package/dist/commands/login.js +14 -8
  7. package/dist/commands/login.js.map +1 -1
  8. package/dist/commands/update.js +5 -0
  9. package/dist/commands/update.js.map +1 -1
  10. package/dist/commands/updateCheck.js +20 -3
  11. package/dist/commands/updateCheck.js.map +1 -1
  12. package/dist/commands/updateHint.js +6 -4
  13. package/dist/commands/updateHint.js.map +1 -1
  14. package/dist/commands/updateNpm.js +7 -0
  15. package/dist/commands/updateNpm.js.map +1 -1
  16. package/dist/constants.d.ts +3 -2
  17. package/dist/constants.js +6 -3
  18. package/dist/constants.js.map +1 -1
  19. package/dist/core/args.js +15 -7
  20. package/dist/core/args.js.map +1 -1
  21. package/dist/core/backendErrors.js +3 -0
  22. package/dist/core/backendErrors.js.map +1 -1
  23. package/dist/core/errors.js +3 -0
  24. package/dist/core/errors.js.map +1 -1
  25. package/dist/core/hiddenInput.js +10 -0
  26. package/dist/core/hiddenInput.js.map +1 -1
  27. package/dist/core/http.d.ts +25 -1
  28. package/dist/core/http.js +71 -16
  29. package/dist/core/http.js.map +1 -1
  30. package/dist/core/output.js +3 -1
  31. package/dist/core/output.js.map +1 -1
  32. package/dist/storage/credentials.d.ts +5 -1
  33. package/dist/storage/credentials.js +18 -6
  34. package/dist/storage/credentials.js.map +1 -1
  35. package/dist/storage/fileProtection.js +4 -0
  36. package/dist/storage/fileProtection.js.map +1 -1
  37. package/dist/storage/paths.d.ts +1 -0
  38. package/dist/storage/paths.js +6 -0
  39. package/dist/storage/paths.js.map +1 -1
  40. package/dist/storage/session.js +91 -23
  41. package/dist/storage/session.js.map +1 -1
  42. package/dist/storage/telemetryQueue.js +6 -0
  43. package/dist/storage/telemetryQueue.js.map +1 -1
  44. package/dist/storage/telemetryUploadState.d.ts +13 -0
  45. package/dist/storage/telemetryUploadState.js +84 -0
  46. package/dist/storage/telemetryUploadState.js.map +1 -0
  47. package/dist/storage/updateCache.js +2 -2
  48. package/dist/telemetry/uploader.js +104 -29
  49. package/dist/telemetry/uploader.js.map +1 -1
  50. package/dist/types/cli.d.ts +1 -0
  51. package/package.json +1 -1
@@ -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
- const sessionPath = getSessionPath();
47
- // 已存在的 session.json 会保留首次创建时收紧的 ACL,避免高频写入反复调用 Windows icacls。
48
- const sessionFileExists = await pathExists(sessionPath);
49
- // mode=0o600 尽量限制当前用户读写;这里虽然不存 key,但包含内部 tool_url。
50
- await writeFile(sessionPath, `${JSON.stringify(nextStore, null, 2)}\n`, { mode: 0o600 });
51
- if (!sessionFileExists) {
52
- await protectSessionFile(sessionPath, options.fileProtection);
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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAoC,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgCjE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAgB,EAAE,UAA+B,EAAE;IACpF,IAAI,CAAC;QACH,eAAe;QACf,MAAM,mBAAmB,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,qCAAqC,EACrC,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,8CAA8C;IAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACnE,wBAAwB;IACxB,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjE,0BAA0B;IAC1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClF,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE/C,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK;QAClC,gBAAgB;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,sBAAsB;SACrB,MAAM,CAAC,oBAAoB,CAAC;QAC7B,8BAA8B;SAC7B,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAqB;QAClC,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,+DAA+D;QAC/D,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QACxD,mDAAmD;QACnD,MAAM,SAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,mCAAmC,EACnC,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAAqC;IAErC,uDAAuD;IACvD,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,0CAA0C;IAC1C,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;IAE/E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,qCAAqC,EACrC,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,8BAA8B;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,kDAAkD;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChE,aAAa;QACb,OAAO,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAa,EAAE,QAAgB;IACnD,wCAAwC;IACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,QAAQ,CAChB,wBAAwB,EACxB,iDAAiD,EACjD,cAAc,CACf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,QAAQ;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAmB;IAC/C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,8BAA8B;QAC9B,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9F,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,gCAAgC;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9F,0BAA0B;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,iCAAiC;IACjC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,iCAAiC;IACjC,wDAAwD;IACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;WACf,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;WACnC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;WAClC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,6BAA6B;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
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":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAuB,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAoC,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAqB,EAAE,UAAmC,EAAE;IACjG,kBAAkB;IAClB,MAAM,mBAAmB,EAAE,CAAC;IAE5B,yBAAyB;IACzB,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,wCAAwC;IACxC,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,UAAU,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,gCAAgC;IAChC,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5D,0DAA0D;IAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB,EAAE,cAA4C;IAC/F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,YAAY,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,yBAAyB,EAAE,CAAC;YACxG,OAAO;QACT,CAAC;QAED,MAAM,wBAAwB,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAe;IAC/C,yCAAyC;IACzC,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAE1D,6CAA6C;IAC7C,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,wBAAwB,CAAC,WAAW,CAAC,GAAG,yBAAyB,EAAE,CAAC;QACnG,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAe;IAC/C,wCAAwC;IACxC,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,SAAiB,EACjB,KAAe,EACf,cAA4C;IAE5C,8BAA8B;IAC9B,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/G,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,yBAAyB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,OAAqC;IAErC,qDAAqD;IACrD,MAAM,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAK,GAAG,EAAE;IACjD,iCAAiC;IACjC,OAAO,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAK,GAAG,EAAE;IACtD,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG;YACf,0CAA0C;aACzC,KAAK,CAAC,OAAO,CAAC;YACf,qBAAqB;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,MAAM;YACR,CAAC;YAED,iBAAiB,IAAI,CAAC,CAAC;YAEvB,IAAI,CAAC;gBACH,gDAAgD;gBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;gBAC1C,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAa;IACxD,wBAAwB;IACxB,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,2CAA2C;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/D,4BAA4B;QAC5B,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;QAC1C,mBAAmB;QACnB,MAAM,wBAAwB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,yDAAyD;IACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,KAAK,kBAAkB;WACvC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC;WACnD,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;WACpC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;WAC9B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAClC,0DAA0D;WACvD,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;WACnC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;WAC/B,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC;QACvD,qCAAqC;WAClC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;WACrC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;WACnC,KAAK,CAAC,WAAW,IAAI,CAAC;WACtB,KAAK,CAAC,GAAG,KAAK,aAAa;WAC3B,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;WACnC,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;WACtC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;WACrC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;WACnC,sBAAsB,CAAC,KAAK,CAAC,YAAY,CAAC;WAC1C,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;WACtC,wBAAwB,CAAC,KAAK,CAAC;WAC/B,4BAA4B,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,wBAAwB,CAAC,KAA8B;IAC9D,6CAA6C;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAA8B;IAClE,IAAI,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAC5B,6BAA6B;QAC7B,OAAO,KAAK,CAAC,KAAK,KAAK,MAAM;eACxB,KAAK,CAAC,WAAW,KAAK,CAAC;eACvB,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,0CAA0C;IAC1C,OAAO,KAAK,CAAC,KAAK,KAAK,OAAO;WACzB,KAAK,CAAC,WAAW,KAAK,CAAC;WACvB,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;WACpC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;WAC3B,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;WACnC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,uCAAuC;IACvC,OAAO,KAAK,KAAK,OAAO;WACnB,KAAK,KAAK,WAAW;WACrB,KAAK,KAAK,MAAM;WAChB,KAAK,KAAK,QAAQ;WAClB,KAAK,KAAK,SAAS;WACnB,KAAK,KAAK,QAAQ,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,oDAAoD;IACpD,OAAO,KAAK,KAAK,SAAS;WACrB,KAAK,KAAK,OAAO;WACjB,KAAK,KAAK,OAAO;WACjB,KAAK,KAAK,SAAS,CAAC;AAC3B,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,sDAAsD;IACtD,OAAO,KAAK,KAAK,YAAY;WACxB,KAAK,KAAK,KAAK;WACf,KAAK,KAAK,MAAM;WAChB,KAAK,KAAK,KAAK;WACf,KAAK,KAAK,SAAS,CAAC;AAC3B,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,8CAA8C;IAC9C,OAAO,KAAK,KAAK,EAAE;WACd,KAAK,KAAK,aAAa;WACvB,KAAK,KAAK,eAAe;WACzB,KAAK,KAAK,SAAS;WACnB,KAAK,KAAK,0BAA0B;WACpC,KAAK,KAAK,sBAAsB;WAChC,KAAK,KAAK,wBAAwB;WAClC,KAAK,KAAK,gBAAgB;WAC1B,KAAK,KAAK,mBAAmB;WAC7B,KAAK,KAAK,gBAAgB;WAC1B,KAAK,KAAK,0BAA0B;WACpC,KAAK,KAAK,sBAAsB;WAChC,KAAK,KAAK,eAAe;WACzB,KAAK,KAAK,sBAAsB;WAChC,KAAK,KAAK,oBAAoB;QACjC,4CAA4C;WACzC,KAAK,KAAK,SAAS,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,+CAA+C;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACnF,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;QAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC;eAClB,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;eAChC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;eACpC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;eACvB,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,yCAAyC;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type TelemetryUploadPauseReason = "auth_failed" | "rate_limited" | "temporary_failure";
2
+ export interface TelemetryUploadState {
3
+ suspended_until: string;
4
+ reason: TelemetryUploadPauseReason;
5
+ api_key_fingerprint?: string;
6
+ retry_count: number;
7
+ }
8
+ export declare function readTelemetryUploadState(): Promise<TelemetryUploadState | null>;
9
+ export declare function writeTelemetryUploadState(state: TelemetryUploadState): Promise<void>;
10
+ export declare function clearTelemetryUploadState(): Promise<void>;
11
+ export declare function createApiKeyFingerprint(apiKey: string): string;
12
+ export declare function isTelemetryUploadPaused(state: TelemetryUploadState, now?: Date): boolean;
13
+ export declare function createTelemetryUploadState(reason: TelemetryUploadPauseReason, delayMs: number, apiKeyFingerprint: string | undefined, previousState: TelemetryUploadState | null, now?: Date): TelemetryUploadState;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 埋点上传暂停状态模块。
3
+ *
4
+ * telemetry uploader 遇到 401、429、5xx、网络错误或超时时,不应该每次命令结束都立刻重试。
5
+ * 本文件把“暂停到什么时候、为什么暂停、对应哪个 API key”写入本地状态文件。
6
+ * 注意这里永远不保存完整 API key,只保存短 hash 指纹,用来判断用户是否已经换了 key。
7
+ */
8
+ import { createHash } from "node:crypto";
9
+ import { readFile, unlink, writeFile } from "node:fs/promises";
10
+ import { ensureAgentEarthDir, getTelemetryUploadStatePath } from "./paths.js";
11
+ export async function readTelemetryUploadState() {
12
+ // 读取失败、文件不存在或结构损坏都返回 null;埋点状态不能影响主命令。
13
+ try {
14
+ const raw = await readFile(getTelemetryUploadStatePath(), "utf8");
15
+ return normalizeTelemetryUploadState(JSON.parse(raw));
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ export async function writeTelemetryUploadState(state) {
22
+ // 写状态前确保 AgentEarth 本地数据目录存在。
23
+ await ensureAgentEarthDir();
24
+ await writeFile(getTelemetryUploadStatePath(), `${JSON.stringify(state, null, 2)}\n`, {
25
+ encoding: "utf8",
26
+ mode: 0o600
27
+ });
28
+ }
29
+ export async function clearTelemetryUploadState() {
30
+ // 上传成功或 key 变化后清掉暂停状态,让后续命令可以继续正常冲刷队列。
31
+ try {
32
+ await unlink(getTelemetryUploadStatePath());
33
+ }
34
+ catch {
35
+ // Missing or locked state files should not affect the user command.
36
+ }
37
+ }
38
+ export function createApiKeyFingerprint(apiKey) {
39
+ // sha256 是单向 hash;slice(0, 16) 足够做本地变化判断,又避免保存完整 key。
40
+ return createHash("sha256").update(apiKey).digest("hex").slice(0, 16);
41
+ }
42
+ export function isTelemetryUploadPaused(state, now = new Date()) {
43
+ // suspended_until 解析失败时不暂停,避免坏状态文件让上传永久停住。
44
+ const suspendedUntil = Date.parse(state.suspended_until);
45
+ return Number.isFinite(suspendedUntil) && suspendedUntil > now.getTime();
46
+ }
47
+ // uploader 根据 HTTP 分类结果调用这里生成下一次暂停状态。
48
+ export function createTelemetryUploadState(reason, delayMs, apiKeyFingerprint, previousState, now = new Date()) {
49
+ // delayMs 小于 0 时按 0 处理,避免写出过去时间。
50
+ return {
51
+ suspended_until: new Date(now.getTime() + Math.max(0, delayMs)).toISOString(),
52
+ reason,
53
+ api_key_fingerprint: apiKeyFingerprint,
54
+ retry_count: previousState?.reason === reason ? previousState.retry_count + 1 : 1
55
+ };
56
+ }
57
+ function normalizeTelemetryUploadState(value) {
58
+ // 本地文件可被用户手动修改,所以每个字段都要运行时校验。
59
+ if (!isRecord(value)) {
60
+ return null;
61
+ }
62
+ if (value.reason !== "auth_failed"
63
+ && value.reason !== "rate_limited"
64
+ && value.reason !== "temporary_failure") {
65
+ return null;
66
+ }
67
+ if (typeof value.suspended_until !== "string" || !Number.isFinite(Date.parse(value.suspended_until))) {
68
+ return null;
69
+ }
70
+ const retryCount = typeof value.retry_count === "number" && Number.isInteger(value.retry_count) && value.retry_count >= 0
71
+ ? value.retry_count
72
+ : 0;
73
+ return {
74
+ suspended_until: value.suspended_until,
75
+ reason: value.reason,
76
+ api_key_fingerprint: typeof value.api_key_fingerprint === "string" ? value.api_key_fingerprint : undefined,
77
+ retry_count: retryCount
78
+ };
79
+ }
80
+ function isRecord(value) {
81
+ // JavaScript 里数组也是 object;这里排除数组,确保后面能按字段名读取。
82
+ return typeof value === "object" && value !== null && !Array.isArray(value);
83
+ }
84
+ //# sourceMappingURL=telemetryUploadState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetryUploadState.js","sourceRoot":"","sources":["../../src/storage/telemetryUploadState.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  * 更新检查缓存模块。
3
3
  *
4
4
  * list/recommend 会读取这个文件展示 fresh 更新提示。
5
- * 缓存失效时,CLI 通过 npm view 查询 npm registry,并把检查结果写回这里,
6
- * 避免每次工具发现都请求 registry。
5
+ * 缓存失效时,工具发现命令不主动刷新;ae update 会通过 npm view 查询
6
+ * npm registry,并把检查结果写回这里,避免工具发现链路请求 registry
7
7
  */
8
8
  import { readFile, writeFile } from "node:fs/promises";
9
9
  import { pathExists, protectSensitiveFile } from "./fileProtection.js";
@@ -1,46 +1,121 @@
1
1
  /**
2
- * CLI 埋点上传模块。
2
+ * CLI 埋点上传器。
3
3
  *
4
- * 本模块从本地 events.jsonl 读取待上传日志,调用后端 CLI 埋点接口。
5
- * 上传成功只以 HTTP 200 为准,不解析响应体。上传失败时保留本地队列,
6
- * 等下一次 CLI 命令结束后再尝试。
7
- *
8
- * 重要原则:埋点失败绝不能改变当前业务命令的输出和退出码。
4
+ * main.ts 每次命令结束后都会调用 flushTelemetry。它会读取本地 events.jsonl 队列,
5
+ * 尝试把一批事件 POST 到日志接口。上传失败不能影响主命令,所以本模块内部会吞掉异常,
6
+ * 并根据 HTTP 分类决定保留队列、删除坏批次、拆小批次或写入暂停状态。
9
7
  */
10
8
  import { TELEMETRY_PATH } from "../constants.js";
11
- import { postJsonNoResponse } from "../core/http.js";
9
+ import { postTelemetryJson } from "../core/http.js";
12
10
  import { resolveApiKey } from "../storage/credentials.js";
13
11
  import { dropTelemetryQueueHead, readTelemetryQueueBatch } from "../storage/telemetryQueue.js";
12
+ import { clearTelemetryUploadState, createApiKeyFingerprint, createTelemetryUploadState, isTelemetryUploadPaused, readTelemetryUploadState, writeTelemetryUploadState } from "../storage/telemetryUploadState.js";
13
+ // 默认每次最多上传 20 条,避免单次请求体过大。
14
+ const DEFAULT_BATCH_SIZE = 20;
15
+ // API key 失败通常需要用户重新登录,不要每次命令都刷同一批 401。
16
+ const AUTH_PAUSE_MS = 24 * 60 * 60 * 1000;
17
+ // 当前后端不设计专门 429,但如果网关返回,CLI 仍按短退避处理。
18
+ const RATE_LIMIT_PAUSE_MS = 5 * 60 * 1000;
19
+ // 5xx、网络失败、超时属于临时失败,保留队列并稍后再试。
20
+ const TEMPORARY_FAILURE_PAUSE_MS = 60 * 1000;
14
21
  export async function flushTelemetry(options) {
15
- // 用户或测试可以关闭埋点。
22
+ // 用户显式关闭埋点时,本轮既不读队列也不上传。
16
23
  if (options.noTelemetry) {
17
24
  return;
18
25
  }
19
- // 默认最多读取队头 20 条,具体限制在 readTelemetryQueueBatch 内部。
20
- const batch = await readTelemetryQueueBatch();
21
- const events = batch.events;
22
- if (events.length === 0) {
23
- if (batch.consumedLineCount > 0) {
24
- // 队头只有损坏行时,不请求后端,直接清理这些无法上传的本地坏数据。
25
- await dropTelemetryQueueHead(batch.consumedLineCount);
26
- }
27
- // 没有待上传事件时不请求后端。
28
- return;
29
- }
30
26
  try {
31
- // 埋点接口也需要 API key,后端用它识别用户。
27
+ // 上传接口也需要 X-Api-Key;如果本地没有 key,resolveApiKey 会抛错并被外层吞掉。
32
28
  const apiKey = await resolveApiKey(options);
33
- // 后端契约是 POST { events },成功只要求 HTTP 200
34
- await postJsonNoResponse(TELEMETRY_PATH, { events }, {
35
- apiKey,
36
- baseUrl: options.baseUrl,
37
- timeoutMs: options.timeoutMs
38
- });
39
- // 上传成功后,删除本次实际消费过的队头原始行;其中可能包含被跳过的损坏行。
40
- await dropTelemetryQueueHead(batch.consumedLineCount);
29
+ // 只保存 hash 指纹到暂停状态,避免把真实 key 写入 telemetry-upload-state.json
30
+ const apiKeyFingerprint = createApiKeyFingerprint(apiKey);
31
+ // existingState 记录上一次失败后的暂停窗口和原因。
32
+ const existingState = await readTelemetryUploadState();
33
+ if (await shouldSkipUpload(existingState, apiKeyFingerprint)) {
34
+ return;
35
+ }
36
+ // batchLimit 可能因为 413 被逐步减半,所以用 while 而不是固定读取一次。
37
+ let batchLimit = DEFAULT_BATCH_SIZE;
38
+ while (batchLimit >= 1) {
39
+ // 每轮都重新读队头,因为上一轮可能已经删除了成功/坏数据。
40
+ const batch = await readTelemetryQueueBatch(batchLimit);
41
+ const events = batch.events;
42
+ if (events.length === 0) {
43
+ // 没有有效事件但消费过坏行时,说明队头是损坏数据,直接清理掉。
44
+ if (batch.consumedLineCount > 0) {
45
+ await dropTelemetryQueueHead(batch.consumedLineCount);
46
+ }
47
+ return;
48
+ }
49
+ const result = await postTelemetryJson(TELEMETRY_PATH, { events }, {
50
+ apiKey,
51
+ // 日志上传可以和业务接口使用不同 host;未配置时才回退到业务 baseUrl。
52
+ baseUrl: options.telemetryBaseUrl || options.baseUrl,
53
+ timeoutMs: options.timeoutMs
54
+ });
55
+ if (result.kind === "success") {
56
+ // 后端确认接收后才能删除队头;同时清掉历史暂停状态。
57
+ await dropTelemetryQueueHead(batch.consumedLineCount);
58
+ await clearTelemetryUploadState();
59
+ return;
60
+ }
61
+ if (result.kind === "permanent_failure") {
62
+ // 400/415 等永久错误说明这批数据结构不被接受,继续重试只会卡住队列。
63
+ await dropTelemetryQueueHead(batch.consumedLineCount);
64
+ return;
65
+ }
66
+ if (result.kind === "auth_failed") {
67
+ // 鉴权失败不删除队列;等用户换 key 后可以继续上传旧事件。
68
+ await pauseUpload("auth_failed", AUTH_PAUSE_MS, apiKeyFingerprint, existingState);
69
+ return;
70
+ }
71
+ if (result.kind === "payload_too_large") {
72
+ // 413 时先拆小批次;如果单条都太大,只能丢弃该事件避免永久卡队头。
73
+ if (events.length > 1) {
74
+ // 减半后 continue 回 while 顶部,重新按更小 batchLimit 读取同一个队头。
75
+ batchLimit = Math.max(1, Math.floor(events.length / 2));
76
+ continue;
77
+ }
78
+ await dropTelemetryQueueHead(batch.consumedLineCount);
79
+ return;
80
+ }
81
+ if (result.kind === "rate_limited") {
82
+ // 如果后端或网关给 Retry-After,就优先使用服务端建议的暂停时长。
83
+ await pauseUpload("rate_limited", result.retryAfterMs ?? RATE_LIMIT_PAUSE_MS, apiKeyFingerprint, existingState);
84
+ return;
85
+ }
86
+ // 剩下的 network_error、timeout、server_error 都属于临时失败:保留队列并短暂停。
87
+ await pauseUpload("temporary_failure", TEMPORARY_FAILURE_PAUSE_MS, apiKeyFingerprint, existingState);
88
+ return;
89
+ }
41
90
  }
42
91
  catch {
43
- // 任何上传失败都静默处理,队列保留,等待后续重试。
92
+ // 这里故意不再抛出:埋点只是辅助数据,不能改变 ae 命令本身的输出和退出码。
44
93
  }
45
94
  }
95
+ // 根据暂停状态判断本轮是否应该跳过上传。
96
+ async function shouldSkipUpload(state, apiKeyFingerprint) {
97
+ if (!state) {
98
+ return false;
99
+ }
100
+ if (!isTelemetryUploadPaused(state)) {
101
+ // 暂停时间过期后清理状态,让本轮继续上传。
102
+ await clearTelemetryUploadState();
103
+ return false;
104
+ }
105
+ if (state.reason !== "auth_failed") {
106
+ // 非鉴权类暂停只看时间窗口,没到期就跳过。
107
+ return true;
108
+ }
109
+ if (state.api_key_fingerprint === apiKeyFingerprint) {
110
+ // 同一个 key 已经失败过,继续重试没有意义。
111
+ return true;
112
+ }
113
+ // key 指纹变了,说明用户可能重新 login,本轮允许恢复上传。
114
+ await clearTelemetryUploadState();
115
+ return false;
116
+ }
117
+ // 统一写入暂停状态,避免各分支重复计算 suspended_until/retry_count。
118
+ async function pauseUpload(reason, delayMs, apiKeyFingerprint, previousState) {
119
+ await writeTelemetryUploadState(createTelemetryUploadState(reason, delayMs, apiKeyFingerprint, previousState));
120
+ }
46
121
  //# sourceMappingURL=uploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../src/telemetry/uploader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAsB;IACzD,eAAe;IACf,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,kDAAkD;IAClD,MAAM,KAAK,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAChC,mCAAmC;YACnC,MAAM,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxD,CAAC;QACD,iBAAiB;QACjB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAE5C,wCAAwC;QACxC,MAAM,kBAAkB,CACtB,cAAc,EACd,EAAE,MAAM,EAAE,EACV;YACE,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CACF,CAAC;QAEF,uCAAuC;QACvC,MAAM,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../src/telemetry/uploader.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface GlobalOptions {
10
10
  apiKey?: string;
11
11
  apiKeyStdin: boolean;
12
12
  baseUrl: string;
13
+ telemetryBaseUrl: string;
13
14
  json: boolean;
14
15
  noColor: boolean;
15
16
  noTelemetry: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentearth.ai/cli",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
4
4
  "description": "Agent-first CLI that helps AI agents discover, inspect, and execute AgentEarth tools from any shell.",
5
5
  "type": "module",
6
6
  "bin": {