@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
package/README.md CHANGED
@@ -22,7 +22,7 @@ npm install -g @agentearth.ai/cli
22
22
  ae login --api-key-stdin
23
23
  ```
24
24
 
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.
25
+ `ae login --api-key-stdin` verifies the API key and saves it to the CLI credentials file. After login, follow the CLI JSON output: `next_action` tells the agent what to do, and `skill.source_dir` points to the bundled AgentEarth skill directory to install into the current agent before calling tools.
26
26
 
27
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
 
@@ -6,6 +6,7 @@
6
6
  * `{ params }`。这样 agent 不需要知道 tool_url、recommend_id 或其他内部细节。
7
7
  */
8
8
  import { readFile, stat } from "node:fs/promises";
9
+ import { EXECUTE_PATH } from "../constants.js";
9
10
  import { mapBackendError } from "../core/backendErrors.js";
10
11
  import { CliError, usageError } from "../core/errors.js";
11
12
  import { postJson } from "../core/http.js";
@@ -30,7 +31,8 @@ export async function runExecute(context, args) {
30
31
  const tool = await readToolByName(toolName);
31
32
  // 读取 API key;execute 请求必须鉴权。
32
33
  const apiKey = await resolveApiKey(context.options);
33
- // 注意这里用的是缓存中的完整 tool_url,不自己用 tool_name 拼 URL。
34
+ // 保留“执行后端返回的完整 tool_url”的契约,但发送 X-Api-Key 前要先校验可信边界。
35
+ assertTrustedToolUrl(tool.tool_url, toolName, context.options.baseUrl);
34
36
  const response = await postJson(tool.tool_url, { params }, {
35
37
  apiKey,
36
38
  baseUrl: context.options.baseUrl,
@@ -51,6 +53,27 @@ export async function runExecute(context, args) {
51
53
  agentearth_suggestion: response.agentearth_suggestion
52
54
  };
53
55
  }
56
+ function assertTrustedToolUrl(toolUrl, toolName, baseUrl) {
57
+ let parsedToolUrl;
58
+ let parsedBaseUrl;
59
+ try {
60
+ parsedToolUrl = new URL(toolUrl);
61
+ parsedBaseUrl = new URL(baseUrl);
62
+ }
63
+ catch {
64
+ throw new CliError("backend_response_invalid", "Cached tool URL is invalid.", "Run ae recommend, ae list, or ae detail again.");
65
+ }
66
+ // 本地 mock 使用 http://127.0.0.1,线上 baseUrl 是 https;这里校验“与 baseUrl 一致”,而不是硬编码协议。
67
+ if (parsedToolUrl.protocol !== parsedBaseUrl.protocol
68
+ || parsedToolUrl.origin !== parsedBaseUrl.origin
69
+ || parsedToolUrl.pathname !== EXECUTE_PATH) {
70
+ throw new CliError("backend_response_invalid", "Cached tool URL is not trusted.", "Run ae recommend, ae list, or ae detail again.");
71
+ }
72
+ // origin/path 证明 URL 属于当前后端,tool_name 再证明缓存记录和 URL 指向的是同一个工具。
73
+ if (parsedToolUrl.searchParams.get("tool_name") !== toolName) {
74
+ throw new CliError("tool_name_invalid", "Tool name is invalid or not cached.", "Run ae recommend, ae list, or ae detail and use a returned tool_name.");
75
+ }
76
+ }
54
77
  async function readParams(raw, toolName) {
55
78
  try {
56
79
  // 先按 inline/@file/stdin 三种形式取到 JSON 文本。
@@ -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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"}
@@ -71,19 +71,24 @@ async function readListQueryText(raw) {
71
71
  throw invalidListQueryError();
72
72
  }
73
73
  if (raw.startsWith("@")) {
74
+ // @query.json 表示从文件读取 JSON,适合避开 PowerShell inline JSON 转义问题。
74
75
  return readListQueryFile(raw.slice(1));
75
76
  }
76
77
  if (raw === "-") {
78
+ // 单独的 - 表示从 stdin 读取,方便 agent 用管道把 JSON 传进来。
77
79
  return readStdin();
78
80
  }
81
+ // 其他情况按 inline JSON 字符串处理。
79
82
  return raw;
80
83
  }
81
84
  async function readListQueryFile(filePath) {
82
85
  try {
86
+ // 先 stat 看文件大小,避免把超大文件读进内存。
83
87
  const fileStat = await stat(filePath);
84
88
  if (fileStat.size > MAX_LIST_QUERY_BYTES) {
85
89
  throw invalidListQueryError();
86
90
  }
91
+ // 通过大小检查后再按 UTF-8 读取文件内容。
87
92
  return await readFile(filePath, "utf8");
88
93
  }
89
94
  catch (error) {
@@ -97,8 +102,11 @@ async function readStdin() {
97
102
  const chunks = [];
98
103
  let totalBytes = 0;
99
104
  try {
105
+ // process.stdin 是异步可迭代对象;for await 会一块一块读取用户输入。
100
106
  for await (const chunk of process.stdin) {
107
+ // stdin chunk 在 Node 里通常是 Buffer;这里兼容字符串 chunk。
101
108
  const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
109
+ // 边读边累计大小,超过上限立刻报 usage_error。
102
110
  totalBytes += buffer.byteLength;
103
111
  if (totalBytes > MAX_LIST_QUERY_BYTES) {
104
112
  throw invalidListQueryError();
@@ -112,6 +120,7 @@ async function readStdin() {
112
120
  }
113
121
  throw invalidListQueryError();
114
122
  }
123
+ // Buffer.concat 把多块 stdin 拼回完整文本,再按 UTF-8 转成字符串。
115
124
  return Buffer.concat(chunks).toString("utf8");
116
125
  }
117
126
  function parseListQuery(raw) {
@@ -128,6 +137,7 @@ function parseListQuery(raw) {
128
137
  throw usageError("List query must be a JSON object.", "Run ae list @query.json.");
129
138
  }
130
139
  const query = {};
140
+ // Object.entries 会把对象变成 [key, value] 列表,方便逐字段校验。
131
141
  for (const [key, fieldValue] of Object.entries(value)) {
132
142
  // 为了避免复杂对象序列化歧义,只允许一层 string/number/boolean。
133
143
  if (typeof fieldValue !== "string"
@@ -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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"}
@@ -5,7 +5,7 @@
5
5
  * 1. 从 `--api-key-stdin`、`--api-key`、`AGENTEARTH_API_KEY` 或 TTY 隐藏输入读取 API key;
6
6
  * 2. 调用 recommend 接口做一次轻量验证;
7
7
  * 3. 验证成功后,把 key 写入本机 credentials.json。
8
- * 4. 输出 npm 包内置 skill source,让 agent 知道如何安装或引用使用说明。
8
+ * 4. 输出 npm 包内置 skill 的安装任务单,让 agent 知道如何安装当前 agent skill。
9
9
  *
10
10
  * 注意:这里不生成普通 config,也不生成机器身份 ID。后续命令会自动读取
11
11
  * credentials.json,agent 不需要每次自己携带 API key。
@@ -18,8 +18,8 @@ import { readHiddenInput } from "../core/hiddenInput.js";
18
18
  import { postJson } from "../core/http.js";
19
19
  import { resolveLoginApiKey, writeCredentials } from "../storage/credentials.js";
20
20
  // 编译后本文件位于 dist/commands/login.js,向上两级就是 npm 包根目录。
21
- // skill 文件不复制进 dist,而是作为 package files 中的独立资源发布。
22
- const SKILL_SOURCE = fileURLToPath(new URL("../../skills/agentearth/SKILL.md", import.meta.url));
21
+ // skill 目录不复制进 dist,而是作为 package files 中的独立资源发布。
22
+ const SKILL_SOURCE_DIR = fileURLToPath(new URL("../../skills/agentearth", import.meta.url));
23
23
  export async function runLogin(context) {
24
24
  // login 不读旧 credentials,必须拿到本次传入的新 key。
25
25
  const apiKey = await resolveLoginApiKeyForLogin(context);
@@ -43,16 +43,22 @@ export async function runLogin(context) {
43
43
  // credentials 写失败是后端看不到的本地错误,需要用专门错误码。
44
44
  throw new CliError("credentials_write_failed", "Failed to write local credentials.", "Check write permission for AgentEarth credentials directory.");
45
45
  }
46
- // 成功输出不包含 key,也不包含本地路径,只返回 agent/用户需要知道的信息。
46
+ // 成功输出不包含 key,只返回 agent 安装当前 skill 所需的结构化任务单。
47
47
  return {
48
48
  version: CLI_VERSION,
49
+ next_action: "install_agent_skill",
49
50
  skill: {
50
51
  required: true,
51
- phase: 1,
52
- source: SKILL_SOURCE,
53
- message: "Install this skill into your agent before using AgentEarth CLI."
52
+ name: "agentearth",
53
+ source_dir: SKILL_SOURCE_DIR,
54
+ entry_file: "SKILL.md",
55
+ install_scope: "current_agent_only",
56
+ instructions: [
57
+ "Copy the entire source_dir directory into the current agent skills directory as agentearth.",
58
+ "Verify that agentearth/SKILL.md exists in the target skills directory.",
59
+ "Follow the current agent's restart or reload requirements before using the skill."
60
+ ]
54
61
  },
55
- next: "Install the skill, then run ae list or ae recommend.",
56
62
  message: "AgentEarth CLI login succeeded."
57
63
  };
58
64
  }
@@ -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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"}
@@ -19,6 +19,7 @@ export async function runUpdate(context) {
19
19
  throw new CliError("version_check_failed", "npm registry version check failed.", "Retry later or check npm registry/network access.");
20
20
  }
21
21
  if (!cache.has_update) {
22
+ // 没有新版本也是一次成功的 update 命令,埋点里记录 no_update。
22
23
  context.telemetry.updateResult = "no_update";
23
24
  return {
24
25
  updated: false,
@@ -44,13 +45,16 @@ export async function runUpdate(context) {
44
45
  throw new CliError("update_verify_failed", "Updated CLI version could not be verified.", "Run ae --version and check that the updated ae command is on PATH.");
45
46
  }
46
47
  if (updatedVersion === CLI_VERSION) {
48
+ // npm install 成功但版本没变,通常是 PATH 指向了另一份 ae,或者全局安装位置不一致。
47
49
  context.telemetry.updateResult = "failed";
48
50
  throw new CliError("update_not_applied", "Update command completed but CLI version did not change.", "There may be multiple ae installations. Check PATH and npm global prefix.");
49
51
  }
50
52
  if (updatedVersion !== cache.latest_version) {
53
+ // 版本变了但不是缓存里的 latest,说明 registry/cache/PATH 之间存在不一致,不能报告 updated=true。
51
54
  context.telemetry.updateResult = "failed";
52
55
  throw new CliError("update_verify_failed", "Updated CLI version does not match the expected latest version.", "Run ae update again after refreshing the version cache.");
53
56
  }
57
+ // 走到这里才说明 npm 安装和 ae --version 双重验证都通过。
54
58
  context.telemetry.updateResult = "updated";
55
59
  const result = {
56
60
  updated: true,
@@ -58,6 +62,7 @@ export async function runUpdate(context) {
58
62
  to_version: updatedVersion,
59
63
  duration_ms: Date.now() - startedAt
60
64
  };
65
+ // release_notes 是可选字段;只有缓存里确实是数组且非空时才输出。
61
66
  const releaseNotes = Array.isArray(cache.release_notes) ? cache.release_notes : [];
62
67
  if (releaseNotes.length > 0) {
63
68
  result.release_notes = releaseNotes;
@@ -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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"}
@@ -1,21 +1,24 @@
1
1
  /**
2
2
  * npm registry 版本检查模块。
3
3
  *
4
- * list/recommend 成功后会走这里做轻量检查:先复用 fresh update-cache,
5
- * 缓存不存在或过期时再执行 npm view。工具发现主流程不能被更新检查阻断,
6
- * ae update 会把检查失败映射成稳定 version_check_failed。
4
+ * 主动 npm 查询只属于 ae update。工具发现命令只读取 fresh update-cache,
5
+ * 不通过这里刷新 registry,避免 recommend/list 被 npm、代理或网络拖慢。
6
+ * ae update 会把检查失败映射成稳定 version_check_failed。
7
7
  */
8
8
  import { CLI_VERSION, UPDATE_COMMAND_TEXT } from "../constants.js";
9
9
  import { CliError } from "../core/errors.js";
10
10
  import { readUpdateCache, writeUpdateCache } from "../storage/updateCache.js";
11
11
  import { buildNpmViewVersionCommand, runProcess } from "./updateNpm.js";
12
12
  export async function readOrRefreshUpdateCache(options = {}) {
13
+ // 第一优先级永远是 fresh cache,避免每次 list/recommend 都联网查 npm。
13
14
  const cache = await readUpdateCache();
14
15
  if (cache) {
15
16
  return cache;
16
17
  }
18
+ // env 默认使用真实 process.env;测试可以传入假的 env 控制 AE_SKIP_UPDATE_CHECK。
17
19
  const env = options.env ?? process.env;
18
20
  if (isUpdateCheckSkipped(env) && !options.throwOnFailure) {
21
+ // 后台提示可以跳过检查;返回 null 表示“本轮没有可用更新信息”,不是命令失败。
19
22
  return null;
20
23
  }
21
24
  try {
@@ -23,14 +26,19 @@ export async function readOrRefreshUpdateCache(options = {}) {
23
26
  }
24
27
  catch (error) {
25
28
  if (options.throwOnFailure) {
29
+ // ae update 是显式更新命令,必须把检查失败暴露给用户。
26
30
  throw error;
27
31
  }
32
+ // list/recommend 的后台提示失败不能打断主命令,所以降级成 null。
28
33
  return null;
29
34
  }
30
35
  }
31
36
  export async function refreshUpdateCacheFromNpm(env = process.env) {
37
+ // npm registry 是当前唯一版本来源;这里不查后端,也不查 GitHub release。
32
38
  const latestVersion = await readLatestVersionFromNpm(env);
39
+ // compareVersions 返回 1 表示 registry 版本比当前 CLI 新。
33
40
  const hasUpdate = compareVersions(latestVersion, CLI_VERSION) > 0;
41
+ // 把检查结果落到缓存,后续 list/recommend 可以直接读取,不必频繁访问 npm。
34
42
  return writeUpdateCache({
35
43
  current_version: CLI_VERSION,
36
44
  latest_version: latestVersion,
@@ -42,11 +50,14 @@ export async function refreshUpdateCacheFromNpm(env = process.env) {
42
50
  });
43
51
  }
44
52
  export async function readLatestVersionFromNpm(env = process.env) {
53
+ // buildNpmViewVersionCommand 会按平台选择 npm/npm.cmd。
45
54
  const command = buildNpmViewVersionCommand();
55
+ // runProcess 只负责执行外部 npm 命令;这里根据退出码决定是否可信。
46
56
  const result = await runProcess(command.command, command.args, env);
47
57
  if (result.exitCode !== 0) {
48
58
  throw versionCheckFailed();
49
59
  }
60
+ // npm stdout 必须能解析出合法版本号,否则按 registry 查询失败处理。
50
61
  const version = parseNpmViewVersionOutput(result.stdout);
51
62
  if (!version) {
52
63
  throw versionCheckFailed();
@@ -54,6 +65,7 @@ export async function readLatestVersionFromNpm(env = process.env) {
54
65
  return version;
55
66
  }
56
67
  export function parseNpmViewVersionOutput(stdout) {
68
+ // npm view ... --json 正常输出是一个 JSON 字符串,例如 "0.1.0"。
57
69
  try {
58
70
  const parsed = JSON.parse(stdout.trim());
59
71
  if (typeof parsed === "string" && isVersionString(parsed)) {
@@ -66,11 +78,13 @@ export function parseNpmViewVersionOutput(stdout) {
66
78
  }
67
79
  }
68
80
  export function compareVersions(left, right) {
81
+ // 当前只比较 major/minor/patch 三段数字;预发布后缀不会影响三段比较。
69
82
  const leftParts = parseVersionParts(left);
70
83
  const rightParts = parseVersionParts(right);
71
84
  if (!leftParts || !rightParts) {
72
85
  return 0;
73
86
  }
87
+ // 依次比较 major、minor、patch;任意一段分出大小后就可以返回。
74
88
  for (let index = 0; index < 3; index += 1) {
75
89
  if (leftParts[index] > rightParts[index])
76
90
  return 1;
@@ -80,12 +94,15 @@ export function compareVersions(left, right) {
80
94
  return 0;
81
95
  }
82
96
  function isUpdateCheckSkipped(env) {
97
+ // 这个环境变量主要给测试和离线调试使用;ae update 自身会忽略它并要求检查失败时抛错。
83
98
  return env.AE_SKIP_UPDATE_CHECK === "1" || env.AE_SKIP_UPDATE_CHECK === "true";
84
99
  }
85
100
  function isVersionString(value) {
101
+ // 允许 1.2.3、1.2.3-beta.1、1.2.3+build 这类 npm 常见版本字符串。
86
102
  return /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/u.test(value);
87
103
  }
88
104
  function parseVersionParts(value) {
105
+ // 只截取开头三段数字,后面的 -beta.1 或 +build 不进入大小比较。
89
106
  const match = /^(\d+)\.(\d+)\.(\d+)/u.exec(value);
90
107
  if (!match) {
91
108
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/commands/updateCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/commands/updateCheck.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
1
  /**
2
2
  * 工具发现阶段的更新提示 helper。
3
3
  *
4
- * 这里优先消费 fresh update-cache;缓存失效时尝试 npm view 刷新。
5
- * npm registry 检查失败不会影响工具发现主流程,只是不输出 update 字段。
4
+ * 这里只消费 fresh update-cache,不主动执行 npm view
5
+ * npm registry 查询只属于 ae update,避免工具发现主流程被 npm、代理或网络拖慢。
6
6
  */
7
- import { readOrRefreshUpdateCache } from "./updateCheck.js";
7
+ import { readUpdateCache } from "../storage/updateCache.js";
8
8
  export async function readUpdateHint() {
9
- const cache = await readOrRefreshUpdateCache();
9
+ // list/recommend 调用它时只读取本地 fresh cache;没有缓存就不输出 update 字段。
10
+ const cache = await readUpdateCache();
10
11
  if (!cache || !cache.has_update) {
11
12
  return undefined;
12
13
  }
14
+ // 输出给 agent 的 command 固定是 ae update,不暴露 npm install 细节。
13
15
  const hint = {
14
16
  has_update: true,
15
17
  current_version: cache.current_version,
@@ -1 +1 @@
1
- {"version":3,"file":"updateHint.js","sourceRoot":"","sources":["../../src/commands/updateHint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAW5D,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAe;QACvB,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,qCAAqC;QAC/D,OAAO,EAAE,WAAW;KACrB,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"updateHint.js","sourceRoot":"","sources":["../../src/commands/updateHint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAW5D,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,2DAA2D;IAC3D,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,wDAAwD;IACxD,MAAM,IAAI,GAAe;QACvB,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,qCAAqC;QAC/D,OAAO,EAAE,WAAW;KACrB,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -9,24 +9,28 @@ import { spawn } from "node:child_process";
9
9
  import { platform as currentPlatform } from "node:os";
10
10
  import { PACKAGE_NAME } from "../constants.js";
11
11
  export function buildNpmViewVersionCommand(platform = currentPlatform()) {
12
+ // npm view 只读取 registry 元数据,不安装包。
12
13
  return {
13
14
  command: platform === "win32" ? "npm.cmd" : "npm",
14
15
  args: ["view", PACKAGE_NAME, "version", "--json"]
15
16
  };
16
17
  }
17
18
  export function buildNpmInstallLatestCommand(platform = currentPlatform()) {
19
+ // 当前产品没有 beta 用户通道,ae update 固定安装 latest。
18
20
  return {
19
21
  command: platform === "win32" ? "npm.cmd" : "npm",
20
22
  args: ["install", "-g", `${PACKAGE_NAME}@latest`]
21
23
  };
22
24
  }
23
25
  export function buildCliVersionCommand(platform = currentPlatform()) {
26
+ // 安装完成后重新调用 ae --version,验证 PATH 上实际生效的是新版本。
24
27
  return {
25
28
  command: platform === "win32" ? "ae.cmd" : "ae",
26
29
  args: ["--version"]
27
30
  };
28
31
  }
29
32
  export async function runProcess(command, args, env = process.env) {
33
+ // spawn 是 Node 创建子进程的 API;这里包成 Promise,方便 update.ts 用 await 编排。
30
34
  return new Promise((resolve) => {
31
35
  let stdout = "";
32
36
  let stderr = "";
@@ -37,6 +41,7 @@ export async function runProcess(command, args, env = process.env) {
37
41
  windowsHide: true,
38
42
  stdio: ["ignore", "pipe", "pipe"]
39
43
  });
44
+ // stdout/stderr 都按流分块到达,所以要逐块拼接。
40
45
  child.stdout.on("data", (chunk) => {
41
46
  stdout += chunk.toString();
42
47
  });
@@ -44,6 +49,7 @@ export async function runProcess(command, args, env = process.env) {
44
49
  stderr += chunk.toString();
45
50
  });
46
51
  child.on("error", (error) => {
52
+ // 无法启动子进程,例如 npm 不在 PATH 上。
47
53
  resolve({ exitCode: -1, stdout, stderr: error.message });
48
54
  });
49
55
  child.on("close", (code) => {
@@ -56,6 +62,7 @@ function commandLine(command, args) {
56
62
  return [command, ...args].map(quoteCmdArg).join(" ");
57
63
  }
58
64
  function quoteCmdArg(value) {
65
+ // cmd.exe 中包含空格或双引号的参数需要包一层双引号。
59
66
  if (!/[\s"]/u.test(value)) {
60
67
  return value;
61
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"updateNpm.js","sourceRoot":"","sources":["../../src/commands/updateNpm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updateNpm.js","sourceRoot":"","sources":["../../src/commands/updateNpm.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-beta.1";
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
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,9 +10,12 @@ 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-beta.1";
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 已经知道大致工具类别时,读取工具市场/工具列表。
@@ -22,7 +25,7 @@ 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,cAAc,CAAC;AAE1C,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,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,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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"}