@agentearth.ai/cli 0.1.0-beta.0 → 0.1.0-beta.2

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 CHANGED
@@ -24,7 +24,7 @@ ae login --api-key-stdin
24
24
 
25
25
  `ae login --api-key-stdin` verifies the API key and saves it to the CLI credentials file. After login, read the JSON `skill.source` field and install or reference that skill in the agent before calling tools.
26
26
 
27
- `--api-key` and `AGENT_EARTH_API_KEY` are supported for compatibility and debugging, but `--api-key-stdin` is the recommended install path because it avoids putting the key in command arguments.
27
+ `--api-key` and `AGENTEARTH_API_KEY` are supported for compatibility and debugging, but `--api-key-stdin` is the recommended install path because it avoids putting the key in command arguments.
28
28
 
29
29
  ## Agent Workflows
30
30
 
@@ -34,6 +34,16 @@ Use `ae list` when the task category is already clear:
34
34
  list -> detail -> execute
35
35
  ```
36
36
 
37
+ For filtered list queries, agents should write the query JSON to a file and pass it with `@query.json`:
38
+
39
+ ```json
40
+ {"keyword":"image","page":1,"page_size":20}
41
+ ```
42
+
43
+ ```text
44
+ ae list @query.json
45
+ ```
46
+
37
47
  Use `ae recommend` when the agent is not sure which tool category fits the task:
38
48
 
39
49
  ```text
@@ -44,7 +54,7 @@ The agent should use `tool_name` from `ae list` or `ae recommend`, then call:
44
54
 
45
55
  ```text
46
56
  ae detail <tool_name>
47
- ae execute <tool_name> '<json>'
57
+ ae execute <tool_name> @params.json
48
58
  ```
49
59
 
50
60
  ## Output Contract
@@ -20,7 +20,7 @@ export async function runExecute(context, args) {
20
20
  const rawParams = args[1];
21
21
  // 少参数或多参数都拒绝,避免继续兼容旧的 recommend_id + index 语法。
22
22
  if (!toolName || args.length !== 2) {
23
- throw usageError("Missing or invalid execute arguments.", "Run ae execute <tool_name> '<json>'.");
23
+ throw usageError("Missing or invalid execute arguments.", "Run ae execute <tool_name> @params.json.");
24
24
  }
25
25
  // 把 agent 传入的 params 来源解析成 JS 值,准备放进请求体。
26
26
  const params = await readParams(rawParams, toolName);
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * 可以接收一个可选 JSON object,把其中的一层标量字段转成 URL query 参数。
6
6
  * 这样后端以后新增筛选字段时,CLI 不需要马上改命令语法。
7
7
  */
8
+ import { readFile, stat } from "node:fs/promises";
8
9
  import { TOOLS_LIST_PATH } from "../constants.js";
9
10
  import { mapBackendError } from "../core/backendErrors.js";
10
11
  import { CliError, usageError } from "../core/errors.js";
@@ -12,13 +13,15 @@ import { getJson } from "../core/http.js";
12
13
  import { resolveApiKey } from "../storage/credentials.js";
13
14
  import { writeSession } from "../storage/session.js";
14
15
  import { readUpdateHint } from "./updateHint.js";
16
+ // 和 execute 的 @file/stdin 参数体保持一致,避免 agent 误传超大查询文件。
17
+ const MAX_LIST_QUERY_BYTES = 1024 * 1024;
15
18
  export async function runList(context, args) {
16
19
  // list 最多接收一个 JSON 参数;多了就说明 agent 用法不对。
17
20
  if (args.length > 1) {
18
- throw usageError("Missing or invalid list arguments.", "Run ae list or ae list '<json>'.");
21
+ throw usageError("Missing or invalid list arguments.", "Run ae list or ae list @query.json.");
19
22
  }
20
- // 没传 JSON 时使用默认分页;传了 JSON 时解析成 query。
21
- const query = parseListQuery(args[0]);
23
+ // 没传 JSON 时使用默认分页;传了 JSON/@file/stdin 时解析成 query。
24
+ const query = await readListQuery(args[0]);
22
25
  // list 是后端业务请求,需要 API key。
23
26
  const apiKey = await resolveApiKey(context.options);
24
27
  // GET 请求会把 query 中的字段拼到 URL 后面。
@@ -54,26 +57,75 @@ export async function runList(context, args) {
54
57
  }
55
58
  return result;
56
59
  }
57
- function parseListQuery(raw) {
60
+ async function readListQuery(raw) {
58
61
  // 没有传筛选条件时,默认请求第一页,每页 20 条。
59
62
  if (raw === undefined) {
60
63
  return { page: 1, page_size: 20 };
61
64
  }
65
+ const jsonText = await readListQueryText(raw);
66
+ return parseListQuery(jsonText);
67
+ }
68
+ async function readListQueryText(raw) {
62
69
  // agent 一旦传了 list 参数,该参数就必须是非空 JSON object,否则属于命令用法错误。
63
70
  if (!raw.trim()) {
64
- throw usageError("List query must be valid JSON.", "Run ae list '{\"page\":1,\"page_size\":20}'.");
71
+ throw invalidListQueryError();
72
+ }
73
+ if (raw.startsWith("@")) {
74
+ return readListQueryFile(raw.slice(1));
75
+ }
76
+ if (raw === "-") {
77
+ return readStdin();
78
+ }
79
+ return raw;
80
+ }
81
+ async function readListQueryFile(filePath) {
82
+ try {
83
+ const fileStat = await stat(filePath);
84
+ if (fileStat.size > MAX_LIST_QUERY_BYTES) {
85
+ throw invalidListQueryError();
86
+ }
87
+ return await readFile(filePath, "utf8");
88
+ }
89
+ catch (error) {
90
+ if (error instanceof CliError) {
91
+ throw error;
92
+ }
93
+ throw invalidListQueryError();
65
94
  }
95
+ }
96
+ async function readStdin() {
97
+ const chunks = [];
98
+ let totalBytes = 0;
99
+ try {
100
+ for await (const chunk of process.stdin) {
101
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
102
+ totalBytes += buffer.byteLength;
103
+ if (totalBytes > MAX_LIST_QUERY_BYTES) {
104
+ throw invalidListQueryError();
105
+ }
106
+ chunks.push(buffer);
107
+ }
108
+ }
109
+ catch (error) {
110
+ if (error instanceof CliError) {
111
+ throw error;
112
+ }
113
+ throw invalidListQueryError();
114
+ }
115
+ return Buffer.concat(chunks).toString("utf8");
116
+ }
117
+ function parseListQuery(raw) {
66
118
  let value;
67
119
  try {
68
120
  // raw 必须是 JSON 字符串,例如 {"page":1,"page_size":20}。
69
121
  value = JSON.parse(raw);
70
122
  }
71
123
  catch {
72
- throw usageError("List query must be valid JSON.", "Run ae list '{\"page\":1,\"page_size\":20}'.");
124
+ throw invalidListQueryError();
73
125
  }
74
126
  // list 参数必须是 object,不能是数组、字符串或数字。
75
127
  if (!isRecord(value)) {
76
- throw usageError("List query must be a JSON object.", "Run ae list '{\"page\":1,\"page_size\":20}'.");
128
+ throw usageError("List query must be a JSON object.", "Run ae list @query.json.");
77
129
  }
78
130
  const query = {};
79
131
  for (const [key, fieldValue] of Object.entries(value)) {
@@ -81,12 +133,15 @@ function parseListQuery(raw) {
81
133
  if (typeof fieldValue !== "string"
82
134
  && typeof fieldValue !== "number"
83
135
  && typeof fieldValue !== "boolean") {
84
- throw usageError("List query only supports first-level scalar fields.", "Use string, number, or boolean values in ae list '<json>'.");
136
+ throw usageError("List query only supports first-level scalar fields.", "Use string, number, or boolean values in ae list @query.json.");
85
137
  }
86
138
  query[key] = fieldValue;
87
139
  }
88
140
  return query;
89
141
  }
142
+ function invalidListQueryError() {
143
+ return usageError("List query must be valid JSON.", "Run ae list @query.json.");
144
+ }
90
145
  function isRecord(value) {
91
146
  // TypeScript 里 object 也包含数组,所以这里显式排除 Array。
92
147
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * `ae login` 命令实现。
3
3
  *
4
4
  * login 只负责第一次安装或用户主动换 key 时的本地初始化:
5
- * 1. 从 `--api-key-stdin`、`--api-key`、`AGENT_EARTH_API_KEY` 或 TTY 隐藏输入读取 API key;
5
+ * 1. 从 `--api-key-stdin`、`--api-key`、`AGENTEARTH_API_KEY` 或 TTY 隐藏输入读取 API key;
6
6
  * 2. 调用 recommend 接口做一次轻量验证;
7
7
  * 3. 验证成功后,把 key 写入本机 credentials.json。
8
8
  * 4. 输出 npm 包内置 skill 的 source,让 agent 知道如何安装或引用使用说明。
@@ -70,7 +70,7 @@ async function resolveLoginApiKeyForLogin(context) {
70
70
  return apiKey;
71
71
  }
72
72
  try {
73
- // 非 stdin 模式优先沿用原有来源:--api-key 或 AGENT_EARTH_API_KEY
73
+ // 非 stdin 模式优先沿用原有来源:--api-key 或 AGENTEARTH_API_KEY
74
74
  return resolveLoginApiKey(context.options);
75
75
  }
76
76
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -28,12 +28,12 @@ export async function runUpdate(context) {
28
28
  };
29
29
  }
30
30
  const startedAt = Date.now();
31
- // cache 已经来自 npm view;这里执行固定 npm install latest,不让 agent 拼包名或平台命令。
31
+ // cache 已经来自 npm view;这里执行固定 npm install -g @latest,不让 agent 拼包名或平台命令。
32
32
  const npmCommand = buildNpmInstallLatestCommand();
33
33
  const npmResult = await runProcess(npmCommand.command, npmCommand.args);
34
34
  if (npmResult.exitCode !== 0) {
35
35
  context.telemetry.updateResult = "failed";
36
- throw new CliError("update_failed", "npm install latest failed.", "Retry later or check npm global package permissions.");
36
+ throw new CliError("update_failed", "npm install -g @agentearth.ai/cli@latest failed.", "Retry later or check npm global package permissions.");
37
37
  }
38
38
  // npm 返回成功后必须重新读取 ae --version,确认当前 PATH 下的 ae 是否真的更新。
39
39
  const versionCommand = buildCliVersionCommand();
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,14 @@
7
7
  */
8
8
  export declare const PACKAGE_NAME = "@agentearth.ai/cli";
9
9
  export declare const UPDATE_COMMAND_TEXT = "npm install -g @agentearth.ai/cli@latest";
10
- export declare const CLI_VERSION = "0.1.0";
10
+ export declare const CLI_VERSION = "0.1.0-beta.2";
11
11
  export declare const DEFAULT_BASE_URL = "https://agentearth.ai";
12
+ export declare const DEFAULT_TELEMETRY_BASE_URL = "https://dev05.agentearth.ai";
12
13
  export declare const RECOMMEND_PATH = "/agent-api/v1/tool/recommend";
13
- export declare const TOOLS_LIST_PATH = "/agent-api/v1/tools/list";
14
+ export declare const TOOLS_LIST_PATH = "/agent-api/v1/tool/list";
14
15
  export declare const TOOL_DETAIL_PATH = "/agent-api/v1/tool/detail";
15
16
  export declare const EXECUTE_PATH = "/agent-api/v1/tool/execute";
16
- export declare const TELEMETRY_PATH = "/agent-api/v1/cli/events";
17
+ export declare const TELEMETRY_PATH = "/api/client/cli/logs";
17
18
  export declare const DEFAULT_TIMEOUT_MS = 30000;
18
19
  export declare const TOOL_CACHE_LIMIT = 200;
19
20
  export declare const TELEMETRY_QUEUE_MAX_LINES = 1000;
package/dist/constants.js CHANGED
@@ -10,19 +10,22 @@ export const PACKAGE_NAME = "@agentearth.ai/cli";
10
10
  // 固定更新命令;ae update 实际执行也使用这个命令。
11
11
  export const UPDATE_COMMAND_TEXT = `npm install -g ${PACKAGE_NAME}@latest`;
12
12
  // CLI 自身版本号;login 输出、埋点字段和 --version 都会用到它。
13
- export const CLI_VERSION = "0.1.0";
14
- // 默认后端域名;调试时可以通过 --base-url 或 AGENT_EARTH_BASE_URL 覆盖。
13
+ export const CLI_VERSION = "0.1.0-beta.2";
14
+ // 默认业务后端域名;调试时可以通过 --base-url 或 AGENT_EARTH_BASE_URL 覆盖。
15
15
  export const DEFAULT_BASE_URL = "https://agentearth.ai";
16
+ // 默认 CLI 埋点上传域名;当前日志上传接口只在测试环境可用。
17
+ // 生产日志接口上线后,把这里切回 DEFAULT_BASE_URL 即可。
18
+ export const DEFAULT_TELEMETRY_BASE_URL = "https://dev05.agentearth.ai";
16
19
  // recommend 接口:agent 不确定工具类别时,用自然语言任务让后端推荐工具。
17
20
  export const RECOMMEND_PATH = "/agent-api/v1/tool/recommend";
18
21
  // list 接口:agent 已经知道大致工具类别时,读取工具市场/工具列表。
19
- export const TOOLS_LIST_PATH = "/agent-api/v1/tools/list";
22
+ export const TOOLS_LIST_PATH = "/agent-api/v1/tool/list";
20
23
  // detail 接口:agent 在 execute 前读取某个工具的参数契约和详情。
21
24
  export const TOOL_DETAIL_PATH = "/agent-api/v1/tool/detail";
22
25
  // execute 标准接口路径:实际请求使用后端返回的完整 tool_url,埋点只记录这个标准 path。
23
26
  export const EXECUTE_PATH = "/agent-api/v1/tool/execute";
24
27
  // CLI 埋点上传接口:只上传后端不知道的本地行为和本地错误。
25
- export const TELEMETRY_PATH = "/agent-api/v1/cli/events";
28
+ export const TELEMETRY_PATH = "/api/client/cli/logs";
26
29
  // HTTP 默认超时时间,单位是毫秒;这里是 30 秒。
27
30
  export const DEFAULT_TIMEOUT_MS = 30_000;
28
31
  // 本地最多缓存 200 个工具,防止高频 recommend/list/detail 把磁盘撑大。
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wCAAwC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,gCAAgC;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,YAAY,SAAS,CAAC;AAE3E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAE7D,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,iCAAiC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAEzD,8BAA8B;AAC9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEzC,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,uCAAuC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,mDAAmD;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wCAAwC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,gCAAgC;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,YAAY,SAAS,CAAC;AAE3E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAE1C,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD,kCAAkC;AAClC,uCAAuC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAExE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAE7D,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAEzD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,iCAAiC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD,8BAA8B;AAC9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEzC,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,uCAAuC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,mDAAmD;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC"}
package/dist/core/args.js CHANGED
@@ -7,18 +7,22 @@
7
7
  *
8
8
  * 当前项目没有引入第三方参数解析库,所以这里是一个小型手写解析器。
9
9
  */
10
- import { DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MS } from "../constants.js";
10
+ import { DEFAULT_BASE_URL, DEFAULT_TELEMETRY_BASE_URL, DEFAULT_TIMEOUT_MS } from "../constants.js";
11
11
  import { usageError } from "./errors.js";
12
12
  export function parseArgs(argv) {
13
13
  // positionals 收集不以 -- 开头的普通参数。
14
14
  // 第一个普通参数稍后会被当成命令名。
15
15
  const positionals = [];
16
+ const envBaseUrl = readNonBlankEnv("AGENT_EARTH_BASE_URL");
17
+ const envTelemetryBaseUrl = readNonBlankEnv("AGENT_EARTH_TELEMETRY_BASE_URL");
16
18
  // options 先填默认值;遇到命令行参数时再覆盖。
17
19
  const options = {
18
20
  apiKey: undefined,
19
21
  apiKeyStdin: false,
20
22
  // baseUrl 可由环境变量覆盖,方便本地联调或测试 mock server。
21
- baseUrl: resolveBaseUrl(),
23
+ baseUrl: envBaseUrl ?? DEFAULT_BASE_URL,
24
+ // telemetryBaseUrl 默认走 dev05;本地/mock 调试时跟随 AGENT_EARTH_BASE_URL 或 --base-url。
25
+ telemetryBaseUrl: envTelemetryBaseUrl ?? envBaseUrl ?? DEFAULT_TELEMETRY_BASE_URL,
22
26
  json: false,
23
27
  noColor: process.env.NO_COLOR === "1",
24
28
  noTelemetry: process.env.AE_NO_TELEMETRY === "1",
@@ -43,7 +47,11 @@ export function parseArgs(argv) {
43
47
  }
44
48
  else if (arg === "--base-url") {
45
49
  // 调试时可以把请求打到 mock server 或测试环境。
46
- options.baseUrl = readNonBlankOptionValue(argv, ++index, "--base-url");
50
+ const baseUrl = readNonBlankOptionValue(argv, ++index, "--base-url");
51
+ options.baseUrl = baseUrl;
52
+ if (!envTelemetryBaseUrl) {
53
+ options.telemetryBaseUrl = baseUrl;
54
+ }
47
55
  }
48
56
  else if (arg === "--timeout") {
49
57
  // 用户传入的是秒;内部统一换成毫秒。
@@ -102,9 +110,9 @@ function readNonBlankOptionValue(argv, index, optionName) {
102
110
  }
103
111
  return value;
104
112
  }
105
- function resolveBaseUrl() {
106
- // 空环境变量常见于 shell/CI 占位,不能覆盖默认线上地址。
107
- const envBaseUrl = process.env.AGENT_EARTH_BASE_URL?.trim();
108
- return envBaseUrl || DEFAULT_BASE_URL;
113
+ function readNonBlankEnv(name) {
114
+ // 空环境变量常见于 shell/CI 占位,不能覆盖默认地址。
115
+ const value = process.env[name]?.trim();
116
+ return value || undefined;
109
117
  }
110
118
  //# sourceMappingURL=args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/core/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/core/args.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,29 @@ export interface HttpOptions {
6
6
  export type QueryValue = string | number | boolean;
7
7
  export declare function postJson<TResponse>(pathOrUrl: string, body: unknown, options: HttpOptions): Promise<TResponse>;
8
8
  export declare function postJsonNoResponse(pathOrUrl: string, body: unknown, options: HttpOptions): Promise<void>;
9
+ export type TelemetryPostResult = {
10
+ kind: "success";
11
+ status: number;
12
+ } | {
13
+ kind: "permanent_failure";
14
+ status: number;
15
+ } | {
16
+ kind: "auth_failed";
17
+ status: 401 | 403;
18
+ } | {
19
+ kind: "payload_too_large";
20
+ status: 413;
21
+ } | {
22
+ kind: "rate_limited";
23
+ status: 429;
24
+ retryAfterMs?: number;
25
+ } | {
26
+ kind: "server_error";
27
+ status: number;
28
+ } | {
29
+ kind: "network_error";
30
+ } | {
31
+ kind: "timeout";
32
+ };
33
+ export declare function postTelemetryJson(pathOrUrl: string, body: unknown, options: HttpOptions): Promise<TelemetryPostResult>;
9
34
  export declare function getJson<TResponse>(pathOrUrl: string, query: Record<string, QueryValue>, options: HttpOptions): Promise<TResponse>;
package/dist/core/http.js CHANGED
@@ -25,6 +25,50 @@ export async function postJsonNoResponse(pathOrUrl, body, options) {
25
25
  body: JSON.stringify(body)
26
26
  });
27
27
  }
28
+ export async function postTelemetryJson(pathOrUrl, body, options) {
29
+ const controller = new AbortController();
30
+ const timeout = setTimeout(() => controller.abort(), options.timeoutMs);
31
+ try {
32
+ const response = await fetch(resolveUrl(pathOrUrl, options.baseUrl), {
33
+ method: "POST",
34
+ headers: {
35
+ "Content-Type": "application/json",
36
+ "X-Api-Key": options.apiKey
37
+ },
38
+ body: JSON.stringify(body),
39
+ signal: controller.signal
40
+ });
41
+ if (response.ok) {
42
+ return { kind: "success", status: response.status };
43
+ }
44
+ if (response.status === 401 || response.status === 403) {
45
+ return { kind: "auth_failed", status: response.status };
46
+ }
47
+ if (response.status === 413) {
48
+ return { kind: "payload_too_large", status: 413 };
49
+ }
50
+ if (response.status === 429) {
51
+ return {
52
+ kind: "rate_limited",
53
+ status: 429,
54
+ retryAfterMs: parseRetryAfterMs(response.headers.get("retry-after"))
55
+ };
56
+ }
57
+ if (response.status >= 500) {
58
+ return { kind: "server_error", status: response.status };
59
+ }
60
+ return { kind: "permanent_failure", status: response.status };
61
+ }
62
+ catch (error) {
63
+ if (error instanceof Error && error.name === "AbortError") {
64
+ return { kind: "timeout" };
65
+ }
66
+ return { kind: "network_error" };
67
+ }
68
+ finally {
69
+ clearTimeout(timeout);
70
+ }
71
+ }
28
72
  export async function getJson(pathOrUrl, query, options) {
29
73
  // GET 请求没有 body,参数统一拼到 URL 的 query string 上。
30
74
  return requestJson(appendQuery(pathOrUrl, query, options.baseUrl), options, {
@@ -137,6 +181,20 @@ function resolveUrl(pathOrUrl, baseUrl) {
137
181
  // 其他接口通常传相对 path,这里和 baseUrl 拼起来,并处理多余斜杠。
138
182
  return `${baseUrl.replace(/\/$/, "")}/${pathOrUrl.replace(/^\//, "")}`;
139
183
  }
184
+ function parseRetryAfterMs(value) {
185
+ if (!value) {
186
+ return undefined;
187
+ }
188
+ const seconds = Number(value);
189
+ if (Number.isFinite(seconds) && seconds >= 0) {
190
+ return Math.floor(seconds * 1000);
191
+ }
192
+ const retryAt = Date.parse(value);
193
+ if (!Number.isFinite(retryAt)) {
194
+ return undefined;
195
+ }
196
+ return Math.max(0, retryAt - Date.now());
197
+ }
140
198
  function isRecord(value) {
141
199
  // object 会包含数组;响应 payload 的顶层必须是普通对象才可能有 error_no 字段。
142
200
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -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;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB,EACjB,IAAa,EACb,OAAoB;IAEpB,0BAA0B;IAC1B,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE;QAC1C,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;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAiB,EACjB,KAAiC,EACjC,OAAoB;IAEpB,6CAA6C;IAC7C,OAAO,WAAW,CAAY,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QACrF,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAY,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;IACpI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YACnE,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,qBAAqB,EAAE,kDAAkD,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACjJ,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,2BAA2B,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,CAAC;QAED,6CAA6C;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0BAA0B;QAC1B,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,iDAAiD;QACjD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;QACtE,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,0CAA0C,EAAE,0BAA0B,CAAC,CAAC;IAC9G,CAAC;YAAS,CAAC;QACT,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAY,QAAkB;IAC5D,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAe,CAAC;QAEnD,qEAAqE;QACrE,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,gDAAgD,EAAE,cAAc,CAAC,CAAC;QACnH,CAAC;QAED,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpI,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpI,CAAC;QAED,oCAAoC;QACpC,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,2CAA2C,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,CAAC,CAAC;IAChI,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,mEAAmE;IACnE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,+DAA+D;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC;AACtG,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,KAAiC,EAAE,OAAe;IACxF,kCAAkC;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,uCAAuC;QACvC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,OAAe;IACpD,6CAA6C;IAC7C,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,0CAA0C;IAC1C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,sDAAsD;IACtD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
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;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB,EACjB,IAAa,EACb,OAAoB;IAEpB,0BAA0B;IAC1B,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE;QAC1C,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;AAYD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,IAAa,EACb,OAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1D,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;aACrE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAiB,EACjB,KAAiC,EACjC,OAAoB;IAEpB,6CAA6C;IAC7C,OAAO,WAAW,CAAY,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QACrF,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAY,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;IACpI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,SAAiB,EACjB,OAAoB,EACpB,IAAiB;IAEjB,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YACnE,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,qBAAqB,EAAE,kDAAkD,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACjJ,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,2BAA2B,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,CAAC;QAED,6CAA6C;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0BAA0B;QAC1B,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,iDAAiD;QACjD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;QACtE,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,0CAA0C,EAAE,0BAA0B,CAAC,CAAC;IAC9G,CAAC;YAAS,CAAC;QACT,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAY,QAAkB;IAC5D,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAe,CAAC;QAEnD,qEAAqE;QACrE,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,gDAAgD,EAAE,cAAc,CAAC,CAAC;QACnH,CAAC;QAED,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpI,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,yBAAyB,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpI,CAAC;QAED,oCAAoC;QACpC,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,2CAA2C,QAAQ,CAAC,MAAM,GAAG,EAAE,cAAc,CAAC,CAAC;IAChI,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,mEAAmE;IACnE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,+DAA+D;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC;AACtG,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,KAAiC,EAAE,OAAe;IACxF,kCAAkC;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,uCAAuC;QACvC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,OAAe;IACpD,6CAA6C;IAC7C,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,0CAA0C;IAC1C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,sDAAsD;IACtD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
package/dist/main.js CHANGED
@@ -124,9 +124,9 @@ Usage:
124
124
  ae login --api-key-stdin [--json]
125
125
  ae login --api-key <key> [--json]
126
126
  ae recommend "<query>"
127
- ae list ['<json>']
127
+ ae list [@query.json|-|'<json>']
128
128
  ae detail <tool_name>
129
- ae execute <tool_name> '<json>'
129
+ ae execute <tool_name> @params.json
130
130
  ae update
131
131
 
132
132
  Global options:
@@ -4,7 +4,7 @@
4
4
  * `ae login` 会把验证通过的 API key 写入 credentials.json。
5
5
  * 后续业务命令读取 key 的优先级是:
6
6
  * 1. 当前命令的 `--api-key`;
7
- * 2. 环境变量 `AGENT_EARTH_API_KEY`;
7
+ * 2. 环境变量 `AGENTEARTH_API_KEY`;
8
8
  * 3. 本地 credentials.json。
9
9
  *
10
10
  * 本文件只负责本地读写和优先级选择,不负责后端验证。
@@ -47,7 +47,7 @@ export async function resolveApiKey(options) {
47
47
  return optionApiKey;
48
48
  }
49
49
  // 2. 环境变量适合 CI 或不希望落盘的运行环境。
50
- const envApiKey = normalizeApiKey(process.env.AGENT_EARTH_API_KEY);
50
+ const envApiKey = normalizeApiKey(process.env.AGENTEARTH_API_KEY);
51
51
  if (envApiKey) {
52
52
  return envApiKey;
53
53
  }
@@ -61,7 +61,7 @@ export async function resolveApiKey(options) {
61
61
  }
62
62
  export function resolveLoginApiKey(options) {
63
63
  // login 是“写入新 key”的命令,所以不能读取旧 credentials。
64
- const apiKey = normalizeApiKey(options.apiKey) ?? normalizeApiKey(process.env.AGENT_EARTH_API_KEY);
64
+ const apiKey = normalizeApiKey(options.apiKey) ?? normalizeApiKey(process.env.AGENTEARTH_API_KEY);
65
65
  if (!apiKey) {
66
66
  throw new CliError("auth_missing", "No API key provided.", "Pipe the API key into ae login --api-key-stdin.");
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/storage/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/storage/credentials.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ export declare function getAgentEarthDir(): string;
2
2
  export declare function getCredentialsPath(): string;
3
3
  export declare function getSessionPath(): string;
4
4
  export declare function getTelemetryQueuePath(): string;
5
+ export declare function getTelemetryUploadStatePath(): string;
5
6
  export declare function getUpdateCachePath(): string;
6
7
  export declare function ensureAgentEarthDir(): Promise<void>;
@@ -38,6 +38,9 @@ export function getTelemetryQueuePath() {
38
38
  // events.jsonl 一行一个埋点事件,上传成功后从队头删除。
39
39
  return path.join(getAgentEarthDir(), "events.jsonl");
40
40
  }
41
+ export function getTelemetryUploadStatePath() {
42
+ return path.join(getAgentEarthDir(), "telemetry-upload-state.json");
43
+ }
41
44
  export function getUpdateCachePath() {
42
45
  // update-cache 保存版本检查结果,不保存 API key。
43
46
  return path.join(getAgentEarthDir(), "update-cache.json");
@@ -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,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,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"}
@@ -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,68 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile, unlink, writeFile } from "node:fs/promises";
3
+ import { ensureAgentEarthDir, getTelemetryUploadStatePath } from "./paths.js";
4
+ export async function readTelemetryUploadState() {
5
+ try {
6
+ const raw = await readFile(getTelemetryUploadStatePath(), "utf8");
7
+ return normalizeTelemetryUploadState(JSON.parse(raw));
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ export async function writeTelemetryUploadState(state) {
14
+ await ensureAgentEarthDir();
15
+ await writeFile(getTelemetryUploadStatePath(), `${JSON.stringify(state, null, 2)}\n`, {
16
+ encoding: "utf8",
17
+ mode: 0o600
18
+ });
19
+ }
20
+ export async function clearTelemetryUploadState() {
21
+ try {
22
+ await unlink(getTelemetryUploadStatePath());
23
+ }
24
+ catch {
25
+ // Missing or locked state files should not affect the user command.
26
+ }
27
+ }
28
+ export function createApiKeyFingerprint(apiKey) {
29
+ return createHash("sha256").update(apiKey).digest("hex").slice(0, 16);
30
+ }
31
+ export function isTelemetryUploadPaused(state, now = new Date()) {
32
+ const suspendedUntil = Date.parse(state.suspended_until);
33
+ return Number.isFinite(suspendedUntil) && suspendedUntil > now.getTime();
34
+ }
35
+ export function createTelemetryUploadState(reason, delayMs, apiKeyFingerprint, previousState, now = new Date()) {
36
+ return {
37
+ suspended_until: new Date(now.getTime() + Math.max(0, delayMs)).toISOString(),
38
+ reason,
39
+ api_key_fingerprint: apiKeyFingerprint,
40
+ retry_count: previousState?.reason === reason ? previousState.retry_count + 1 : 1
41
+ };
42
+ }
43
+ function normalizeTelemetryUploadState(value) {
44
+ if (!isRecord(value)) {
45
+ return null;
46
+ }
47
+ if (value.reason !== "auth_failed"
48
+ && value.reason !== "rate_limited"
49
+ && value.reason !== "temporary_failure") {
50
+ return null;
51
+ }
52
+ if (typeof value.suspended_until !== "string" || !Number.isFinite(Date.parse(value.suspended_until))) {
53
+ return null;
54
+ }
55
+ const retryCount = typeof value.retry_count === "number" && Number.isInteger(value.retry_count) && value.retry_count >= 0
56
+ ? value.retry_count
57
+ : 0;
58
+ return {
59
+ suspended_until: value.suspended_until,
60
+ reason: value.reason,
61
+ api_key_fingerprint: typeof value.api_key_fingerprint === "string" ? value.api_key_fingerprint : undefined,
62
+ retry_count: retryCount
63
+ };
64
+ }
65
+ function isRecord(value) {
66
+ return typeof value === "object" && value !== null && !Array.isArray(value);
67
+ }
68
+ //# 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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"}
@@ -1,46 +1,89 @@
1
- /**
2
- * CLI 埋点上传模块。
3
- *
4
- * 本模块从本地 events.jsonl 读取待上传日志,调用后端 CLI 埋点接口。
5
- * 上传成功只以 HTTP 200 为准,不解析响应体。上传失败时保留本地队列,
6
- * 等下一次 CLI 命令结束后再尝试。
7
- *
8
- * 重要原则:埋点失败绝不能改变当前业务命令的输出和退出码。
9
- */
10
1
  import { TELEMETRY_PATH } from "../constants.js";
11
- import { postJsonNoResponse } from "../core/http.js";
2
+ import { postTelemetryJson } from "../core/http.js";
12
3
  import { resolveApiKey } from "../storage/credentials.js";
13
4
  import { dropTelemetryQueueHead, readTelemetryQueueBatch } from "../storage/telemetryQueue.js";
5
+ import { clearTelemetryUploadState, createApiKeyFingerprint, createTelemetryUploadState, isTelemetryUploadPaused, readTelemetryUploadState, writeTelemetryUploadState } from "../storage/telemetryUploadState.js";
6
+ const DEFAULT_BATCH_SIZE = 20;
7
+ const AUTH_PAUSE_MS = 24 * 60 * 60 * 1000;
8
+ const RATE_LIMIT_PAUSE_MS = 5 * 60 * 1000;
9
+ const TEMPORARY_FAILURE_PAUSE_MS = 60 * 1000;
14
10
  export async function flushTelemetry(options) {
15
- // 用户或测试可以关闭埋点。
16
11
  if (options.noTelemetry) {
17
12
  return;
18
13
  }
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
14
  try {
31
- // 埋点接口也需要 API key,后端用它识别用户。
32
15
  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);
16
+ const apiKeyFingerprint = createApiKeyFingerprint(apiKey);
17
+ const existingState = await readTelemetryUploadState();
18
+ if (await shouldSkipUpload(existingState, apiKeyFingerprint)) {
19
+ return;
20
+ }
21
+ let batchLimit = DEFAULT_BATCH_SIZE;
22
+ while (batchLimit >= 1) {
23
+ const batch = await readTelemetryQueueBatch(batchLimit);
24
+ const events = batch.events;
25
+ if (events.length === 0) {
26
+ if (batch.consumedLineCount > 0) {
27
+ await dropTelemetryQueueHead(batch.consumedLineCount);
28
+ }
29
+ return;
30
+ }
31
+ const result = await postTelemetryJson(TELEMETRY_PATH, { events }, {
32
+ apiKey,
33
+ baseUrl: options.telemetryBaseUrl || options.baseUrl,
34
+ timeoutMs: options.timeoutMs
35
+ });
36
+ if (result.kind === "success") {
37
+ await dropTelemetryQueueHead(batch.consumedLineCount);
38
+ await clearTelemetryUploadState();
39
+ return;
40
+ }
41
+ if (result.kind === "permanent_failure") {
42
+ await dropTelemetryQueueHead(batch.consumedLineCount);
43
+ return;
44
+ }
45
+ if (result.kind === "auth_failed") {
46
+ await pauseUpload("auth_failed", AUTH_PAUSE_MS, apiKeyFingerprint, existingState);
47
+ return;
48
+ }
49
+ if (result.kind === "payload_too_large") {
50
+ if (events.length > 1) {
51
+ batchLimit = Math.max(1, Math.floor(events.length / 2));
52
+ continue;
53
+ }
54
+ await dropTelemetryQueueHead(batch.consumedLineCount);
55
+ return;
56
+ }
57
+ if (result.kind === "rate_limited") {
58
+ await pauseUpload("rate_limited", result.retryAfterMs ?? RATE_LIMIT_PAUSE_MS, apiKeyFingerprint, existingState);
59
+ return;
60
+ }
61
+ await pauseUpload("temporary_failure", TEMPORARY_FAILURE_PAUSE_MS, apiKeyFingerprint, existingState);
62
+ return;
63
+ }
41
64
  }
42
65
  catch {
43
- // 任何上传失败都静默处理,队列保留,等待后续重试。
66
+ // Telemetry is best-effort and must never change command output or exit code.
44
67
  }
45
68
  }
69
+ async function shouldSkipUpload(state, apiKeyFingerprint) {
70
+ if (!state) {
71
+ return false;
72
+ }
73
+ if (!isTelemetryUploadPaused(state)) {
74
+ await clearTelemetryUploadState();
75
+ return false;
76
+ }
77
+ if (state.reason !== "auth_failed") {
78
+ return true;
79
+ }
80
+ if (state.api_key_fingerprint === apiKeyFingerprint) {
81
+ return true;
82
+ }
83
+ await clearTelemetryUploadState();
84
+ return false;
85
+ }
86
+ async function pauseUpload(reason, delayMs, apiKeyFingerprint, previousState) {
87
+ await writeTelemetryUploadState(createTelemetryUploadState(reason, delayMs, apiKeyFingerprint, previousState));
88
+ }
46
89
  //# 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.0",
3
+ "version": "0.1.0-beta.2",
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": {
@@ -5,9 +5,10 @@ Use AgentEarth CLI when the user asks you to discover, inspect, or execute Agent
5
5
  ## Commands
6
6
 
7
7
  - Use `ae list` when the user task clearly belongs to a known tool category, such as image generation, video generation, or PPT editing.
8
+ - For filtered list queries, write the query JSON to `query.json` and run `ae list @query.json`; do not hand-write inline JSON in PowerShell.
8
9
  - Use `ae recommend "<query>"` when the user task is ambiguous and you are not sure which tool category should be used.
9
10
  - Use `ae detail <tool_name>` before execution to read the tool input schema.
10
- - Use `ae execute <tool_name> '<json>'` or `ae execute <tool_name> @params.json` to execute the selected tool.
11
+ - Use `ae execute <tool_name> @params.json` to execute the selected tool.
11
12
  - Use `ae update` only after the user confirms they want to update the CLI.
12
13
 
13
14
  ## Rules
@@ -17,13 +18,20 @@ Use AgentEarth CLI when the user asks you to discover, inspect, or execute Agent
17
18
  - Do not use `tool_url` as an argument.
18
19
  - Do not call the removed `ae schema` command.
19
20
  - Do not pass API keys to normal tool commands; `ae login` stores credentials for later use.
21
+ - If login is required, read the API key only from the caller-provided `AGENTEARTH_API_KEY` environment variable and pipe it to `ae login --api-key-stdin`; do not search the filesystem for API keys.
20
22
 
21
23
  ## Typical Flows
22
24
 
23
25
  Known category:
24
26
 
27
+ Create `query.json`:
28
+
29
+ ```json
30
+ {"keyword":"image"}
31
+ ```
32
+
25
33
  ```text
26
- ae list '{"keyword":"image"}'
34
+ ae list @query.json
27
35
  ae detail <tool_name>
28
36
  ae execute <tool_name> @params.json
29
37
  ```