gaoding-cli 1.0.0-alpha.10 → 1.0.0-alpha.11

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
@@ -7,12 +7,12 @@
7
7
  需要 Node.js 24 或更高版本。使用 npm 或 pnpm 全局安装:
8
8
 
9
9
  ```bash
10
- npm install --global gaoding-cli
10
+ npm install --global --allow-scripts=gaoding-cli gaoding-cli
11
11
  # 或
12
12
  pnpm add --global --allow-build=gaoding-cli gaoding-cli
13
13
  ```
14
14
 
15
- 全局安装和后续包升级会自动同步随包 `gd-cli` Agent Skill 到 canonical 目录,并连接已检测到的 Agent 宿主。pnpm 的 `--allow-build=gaoding-cli` 只允许本包执行安装脚本。若安装时使用了 `--ignore-scripts`,执行以下命令补齐:
15
+ 全局安装和后续包升级会自动同步随包 `gd-cli` Agent Skill 到 canonical 目录,并连接已检测到的 Agent 宿主。npm 的 `--allow-scripts=gaoding-cli` 与 pnpm 的 `--allow-build=gaoding-cli` 分别只允许本包执行安装脚本。若安装时使用了 `--ignore-scripts`,执行以下命令补齐:
16
16
 
17
17
  ```bash
18
18
  gd-cli update
@@ -116,11 +116,11 @@ async function inspectTarget(target, skill, canonical, platform) {
116
116
  if (!stat.isDirectory()) {
117
117
  return targetResult(target, "conflict", undefined, "canonical 路径不是目录");
118
118
  }
119
- const marker = await readMarker(target.path);
119
+ const marker = await readMarker(target.path, skill.skill);
120
120
  if (!marker || marker.skill !== skill.skill) {
121
121
  return targetResult(target, "conflict", undefined, "canonical 缺少合法 marker");
122
122
  }
123
- return targetResult(target, marker.version === skill.version ? "installed" : "outdated", "canonical");
123
+ return targetResult(target, marker.legacy || marker.version !== skill.version ? "outdated" : "installed", "canonical");
124
124
  }
125
125
  if (stat.isSymbolicLink()) {
126
126
  let resolved;
@@ -141,11 +141,11 @@ async function inspectTarget(target, skill, canonical, platform) {
141
141
  if (!stat.isDirectory()) {
142
142
  return targetResult(target, "conflict", undefined, "宿主路径不是目录或链接");
143
143
  }
144
- const marker = await readMarker(target.path);
144
+ const marker = await readMarker(target.path, skill.skill);
145
145
  if (!marker || marker.skill !== skill.skill) {
146
146
  return targetResult(target, "conflict", undefined, "宿主目录缺少合法 marker");
147
147
  }
148
- return targetResult(target, marker.version === skill.version ? "installed" : "outdated", "copy");
148
+ return targetResult(target, marker.legacy || marker.version !== skill.version ? "outdated" : "installed", "copy");
149
149
  }
150
150
  async function createLinkOrCopy(skill, target, canonical, options) {
151
151
  await mkdir(dirname(target.path), { recursive: true });
@@ -192,19 +192,25 @@ async function replaceManagedDirectory(skill, destination, replace) {
192
192
  await rm(stagingRoot, { recursive: true, force: true });
193
193
  }
194
194
  }
195
- async function readMarker(directory) {
195
+ async function readMarker(directory, expectedSkill) {
196
196
  try {
197
197
  const parsed = JSON.parse(await readFile(join(directory, ".gd-cli.json"), "utf8"));
198
198
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
199
199
  return undefined;
200
200
  const marker = parsed;
201
- if (Object.keys(marker).sort().join(",") !== "skill,version")
201
+ const keys = Object.keys(marker).sort().join(",");
202
+ if (keys === "version" && expectedSkill === "gd-cli") {
203
+ if (typeof marker.version !== "string" || !marker.version.trim())
204
+ return undefined;
205
+ return { skill: expectedSkill, version: marker.version, legacy: true };
206
+ }
207
+ if (keys !== "skill,version")
202
208
  return undefined;
203
209
  if (typeof marker.skill !== "string" || !marker.skill.trim())
204
210
  return undefined;
205
211
  if (typeof marker.version !== "string" || !marker.version.trim())
206
212
  return undefined;
207
- return { skill: marker.skill, version: marker.version };
213
+ return { skill: marker.skill, version: marker.version, legacy: false };
208
214
  }
209
215
  catch (error) {
210
216
  const code = error.code;
@@ -87,7 +87,7 @@ export function createUpdateService(options) {
87
87
  }
88
88
  const command = source.manager;
89
89
  const args = source.manager === "npm"
90
- ? ["install", "--global", `gaoding-cli@${latest}`]
90
+ ? ["install", "--global", "--allow-scripts=gaoding-cli", `gaoding-cli@${latest}`]
91
91
  : ["add", "--global", "--allow-build=gaoding-cli", `gaoding-cli@${latest}`];
92
92
  try {
93
93
  await runProcess(command, args, signal);
@@ -162,7 +162,7 @@ function spawnProcess(command, args, signal) {
162
162
  }
163
163
  function manualCommands(version) {
164
164
  return [
165
- `npm install --global gaoding-cli@${version}`,
165
+ `npm install --global --allow-scripts=gaoding-cli gaoding-cli@${version}`,
166
166
  `pnpm add --global --allow-build=gaoding-cli gaoding-cli@${version}`
167
167
  ];
168
168
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gaoding-cli",
3
- "version": "1.0.0-alpha.10",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Gaoding command-line interface for agents and people.",
5
5
  "type": "module",
6
6
  "license": "MIT",