Skip to content

Commit c5f84f3

Browse files
committed
fix: support npm 12 upgrade metadata
1 parent b2c46bd commit c5f84f3

3 files changed

Lines changed: 14 additions & 7 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "opencode-supertask",
3-
"version": "0.1.27",
3+
"version": "0.1.28",
44
"description": "AI Agent 任务调度系统 — OpenCode 插件 + CLI + Gateway 常驻进程",
55
"type": "module",
66
"main": "dist/plugin/supertask.js",

src/daemon/update.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,22 @@ function latestVersion(): string {
9191
throw new Error(`[supertask] 查询 npm latest 失败: ${detail || `退出码 ${result.status}`}`);
9292
}
9393

94-
let version: unknown;
94+
let response: unknown;
9595
try {
96-
version = JSON.parse(output);
96+
response = JSON.parse(output);
9797
} catch {
9898
throw new Error(`[supertask] npm latest 返回无法解析: ${output || '(empty)'}`);
9999
}
100-
if (typeof version !== 'string' || !isSemanticVersion(version)) {
101-
throw new Error(`[supertask] npm latest 版本无效: ${String(version)}`);
100+
const versions = typeof response === 'string'
101+
? [response]
102+
: Array.isArray(response) && response.every((value) => typeof value === 'string')
103+
? response
104+
: [];
105+
const uniqueVersions = [...new Set(versions)];
106+
if (uniqueVersions.length !== 1 || !isSemanticVersion(uniqueVersions[0])) {
107+
throw new Error(`[supertask] npm latest 版本无效: ${String(response)}`);
102108
}
103-
return version;
109+
return uniqueVersions[0];
104110
}
105111

106112
function resolveInstalledVersion(expectedVersion: string): InstalledPlugin {

tests/update.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ describe('OpenCode 插件升级', () => {
7676
writeFileSync(fakeOpencode, `#!/usr/bin/env bun
7777
await Bun.write(${JSON.stringify(argsLog)}, JSON.stringify(Bun.argv.slice(2)));
7878
`);
79-
writeFileSync(fakeNpm, '#!/usr/bin/env bun\nconsole.log(JSON.stringify("0.1.23"));\n');
79+
// npm 12 在部分 registry 响应中会把单个 dist-tag 包成数组。
80+
writeFileSync(fakeNpm, '#!/usr/bin/env bun\nconsole.log(JSON.stringify(["0.1.23"]));\n');
8081
chmodSync(fakeOpencode, 0o755);
8182
chmodSync(fakeNpm, 0o755);
8283
process.env.SUPERTASK_OPENCODE_BIN = fakeOpencode;

0 commit comments

Comments
 (0)