@xyit/wellspring 1.0.0 → 1.1.0

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
@@ -295,13 +295,36 @@ if (other) {
295
295
  ```bash
296
296
  node src/index.ts plugin new my-plugin --dir ./plugins
297
297
  node src/index.ts plugin link ./plugins/my-plugin # 开发时链接(只改文件,不启动插件)
298
- node src/index.ts plugin install ./plugins/my-plugin # 或目录 / zip(只改文件)
298
+ node src/index.ts plugin install ./plugins/my-plugin # 目录或 zip;有依赖会按 packageManager 自动安装
299
299
  node src/index.ts plugin remove <name> # 被依赖时拒绝;加 --ignore 强制删除
300
300
  node src/index.ts plugin list
301
301
  ```
302
302
 
303
303
  仓库自带官方插件:[plugins/wellspring-core](plugins/wellspring-core)、[plugins/wellspring-web](plugins/wellspring-web)、[plugins/wellspring-http](plugins/wellspring-http)、[plugins/wellspring-code](plugins/wellspring-code)。
304
304
 
305
+ ### 插件依赖与 zip 分发
306
+
307
+ 插件自己的 `package.json` 用标准 `packageManager` 字段声明包管理器,并正常写 `dependencies`:
308
+
309
+ ```json
310
+ {
311
+ "name": "my-plugin",
312
+ "version": "0.1.0",
313
+ "packageManager": "npm@11.20.0",
314
+ "dependencies": {
315
+ "some-package": "^1.0.0"
316
+ }
317
+ }
318
+ ```
319
+
320
+ - `plugin install` 安装目录或 zip 时,如果声明了 `dependencies` / `optionalDependencies`,会按
321
+ `packageManager` 自动执行 `npm install` / `pnpm install` / `yarn install` / `bun install`;
322
+ - 没写 `packageManager` 时按目录里的 `package-lock.json` / `pnpm-lock.yaml` / `yarn.lock` / `bun.lock` 推断,
323
+ 仍无法确定则拒绝安装,避免在错误的插件目录里跑错包管理器;
324
+ - 版本号(如 `npm@11.20.0`)只作声明,实际使用 PATH 中的同名命令,不经过 corepack;
325
+ - 自动安装会执行依赖包的生命周期脚本,只安装可信来源的插件;
326
+ - 网页 `/plugins` 上传 zip 走同一条安装逻辑,单个 zip 上限 10 MB;安装依赖需要网络,耗时取决于依赖大小。
327
+
305
328
  ### 入口与生命周期
306
329
 
307
330
  ```ts
@@ -675,7 +698,8 @@ wellspring start
675
698
  (未缓存输入 / 缓存读取 / 缓存写入 / 输出 / 推理 / 合计);每条回复下方的「用量」按钮显示本轮用量与缓存命中,
676
699
  点开看该轮明细。缓存命中来自供应商返回的 `prompt_cache_hit_tokens` / `prompt_tokens_details.cached_tokens`,
677
700
  供应商不返回缓存用量时只显示输入与输出
678
- - 网页端插件管理(`/plugins`):列表、启用/禁用、卸载(先禁用后即时生效)、上传 zip 安装(重启生效);
701
+ - 网页端插件管理(`/plugins`):列表、启用/禁用、卸载(先禁用后即时生效)、上传 zip 安装
702
+ (按插件 `packageManager` 自动安装依赖;重启生效);
679
703
  禁用 `wellspring-web` 需二次确认且重启后生效
680
704
  - 思考链与工具调用:Agent 的思考内容默认折叠成一行「思考」(只显示摘要,流式时跟随最后一个完成段落),
681
705
  工具调用折叠成一行「读取文件 / 执行命令 …」(参数摘要 + 运行中 / 完成 / 失败);点开看完整内容。
@@ -31,6 +31,10 @@ export interface HostPluginMutationResult {
31
31
  readonly changed?: boolean;
32
32
  /** 依赖目标插件的其它插件;禁用/卸载时要提示 */
33
33
  readonly dependents?: readonly string[];
34
+ /** 安装时实际使用的包管理器(没有安装依赖时为 null) */
35
+ readonly packageManager?: string | null;
36
+ /** 安装时是否自动安装了依赖 */
37
+ readonly dependenciesInstalled?: boolean;
34
38
  readonly error?: string;
35
39
  }
36
40
  export interface HostPluginsApi {
@@ -145,7 +145,9 @@ export async function runPluginCommand(ctx, argv) {
145
145
  return failure(`${USAGE_CODES.missingValue}:path`);
146
146
  }
147
147
  const installed = await installPlugin(source, ctx.paths, { force });
148
- ctx.elog.info(`已安装插件 ${installed.id}`);
148
+ ctx.elog.info(installed.dependenciesInstalled
149
+ ? `已安装插件 ${installed.id},已用 ${installed.packageManager ?? "包管理器"} 安装依赖`
150
+ : `已安装插件 ${installed.id}`);
149
151
  return success(installed);
150
152
  }
151
153
  case "link": {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,15 @@ export interface InstallPluginOptions {
3
3
  readonly force?: boolean;
4
4
  /** 解析出插件名后、写入磁盘前调用;返回非空字符串表示拒绝安装 */
5
5
  readonly validateId?: (id: string) => string | null;
6
+ /** 测试注入;默认使用真实包管理器安装依赖 */
7
+ readonly runInstall?: typeof import("./package-manager.js").runPackageInstall;
6
8
  }
7
9
  export interface InstallPluginResult {
8
10
  readonly id: string;
9
11
  readonly target: string;
12
+ /** 实际使用的包管理器(带声明版本,例如 npm@11.20.0);没有安装依赖时为 null */
13
+ readonly packageManager: string | null;
14
+ readonly dependenciesInstalled: boolean;
10
15
  }
11
16
  /** 安装本地插件目录或 zip 包 */
12
17
  export declare function installPlugin(sourcePath: string, paths?: ResolvedPaths, options?: InstallPluginOptions): Promise<InstallPluginResult>;
@@ -1,11 +1,15 @@
1
1
  /*
2
2
  * 本地插件安装:目录或 zip 包。
3
3
  * zip 在插件根目录下的临时目录解压,校验后再搬到 plugins/<name>。
4
+ *
5
+ * 插件 package.json 可以用 packageManager 声明包管理器;声明了 dependencies 时
6
+ * 安装阶段会调用它自动安装依赖(没有声明则按 lockfile 推断,仍没有则报错)。
4
7
  */
5
8
  import { cp, readFile, readdir, rename, stat } from "node:fs/promises";
6
9
  import { basename, extname, join, resolve } from "node:path";
7
10
  import { ensureDir, readJsonIfExists, removePath, statIfExists } from "../platform/file.js";
8
11
  import { getPaths } from "../platform/path.js";
12
+ import { hasPluginDependencies, installPluginDependencies, packageManagerLabel, } from "./package-manager.js";
9
13
  import { PLUGIN_NAME, pluginsRoot } from "./paths.js";
10
14
  import { extractZip } from "./zip.js";
11
15
  const ENTRIES = ["index.ts", "index.js", "index.mjs", "index.mts"];
@@ -56,6 +60,14 @@ async function resolveSourceName(source, sourceDir, temp) {
56
60
  const candidate = basename(source, extname(source));
57
61
  return temp ? candidate : basename(sourceDir);
58
62
  }
63
+ /** 复制插件目录到暂存区;node_modules 不复制,交给包管理器装 */
64
+ async function copyToStage(source, stage) {
65
+ await cp(source, stage, {
66
+ recursive: true,
67
+ force: true,
68
+ filter: (path) => basename(path) !== "node_modules",
69
+ });
70
+ }
59
71
  /** 安装本地插件目录或 zip 包 */
60
72
  export async function installPlugin(sourcePath, paths = getPaths(), options = {}) {
61
73
  const source = resolve(sourcePath);
@@ -76,6 +88,8 @@ export async function installPlugin(sourcePath, paths = getPaths(), options = {}
76
88
  sourceDir = await normalizeExtracted(temp);
77
89
  fromArchive = true;
78
90
  }
91
+ let stage = null;
92
+ let moved = false;
79
93
  try {
80
94
  if (!(await hasEntry(sourceDir))) {
81
95
  throw new Error("插件缺少入口(index.ts/js/mjs/mts 或 package.json main)");
@@ -90,25 +104,60 @@ export async function installPlugin(sourcePath, paths = getPaths(), options = {}
90
104
  }
91
105
  const target = join(root, name);
92
106
  const existing = await statIfExists(target);
107
+ if (existing !== null && options.force !== true) {
108
+ throw new Error(`插件已存在:${name}`);
109
+ }
110
+ const pkg = await readJsonIfExists(join(sourceDir, "package.json"));
111
+ const needsInstall = pkg !== null && hasPluginDependencies(pkg);
112
+ let installDir = sourceDir;
113
+ if (needsInstall && !fromArchive) {
114
+ /*
115
+ * 目录安装不能碰源目录:复制到暂存区后再安装依赖,
116
+ * node_modules 不复制,避免把开发目录里的依赖带进去。
117
+ */
118
+ stage = join(root, `.install-stage-${process.pid}-${Date.now().toString(36)}`);
119
+ await removePath(stage);
120
+ await copyToStage(sourceDir, stage);
121
+ installDir = stage;
122
+ }
123
+ let dependencies = {
124
+ manager: null,
125
+ installed: false,
126
+ reason: null,
127
+ };
128
+ if (needsInstall) {
129
+ dependencies = await installPluginDependencies(installDir, pkg, {
130
+ ...(options.runInstall === undefined ? {} : { run: options.runInstall }),
131
+ });
132
+ }
93
133
  if (existing !== null) {
94
- if (options.force !== true) {
95
- throw new Error(`插件已存在:${name}`);
96
- }
97
134
  await removePath(target);
98
135
  }
99
136
  if (fromArchive) {
100
137
  // 与临时目录同根,rename 保持原子
101
138
  await rename(sourceDir, target);
102
139
  }
140
+ else if (stage !== null) {
141
+ await rename(stage, target);
142
+ moved = true;
143
+ }
103
144
  else {
104
145
  await cp(sourceDir, target, { recursive: true, force: true });
105
146
  }
106
- return { id: name, target };
147
+ return {
148
+ id: name,
149
+ target,
150
+ packageManager: dependencies.manager === null ? null : packageManagerLabel(dependencies.manager),
151
+ dependenciesInstalled: dependencies.installed,
152
+ };
107
153
  }
108
154
  finally {
109
155
  if (fromArchive) {
110
156
  await removePath(temp);
111
157
  }
158
+ if (stage !== null && !moved) {
159
+ await removePath(stage);
160
+ }
112
161
  }
113
162
  }
114
163
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/plugin/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/plugin/install.ts"],"names":[],"mappings":"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"}
@@ -134,11 +134,17 @@ export function createHostPluginManager(options) {
134
134
  ? "不能通过网页安装或覆盖 wellspring-web,请用 CLI 安装"
135
135
  : null,
136
136
  });
137
- logger.info({ id: installed.id }, "已安装插件");
137
+ logger.info({
138
+ id: installed.id,
139
+ packageManager: installed.packageManager,
140
+ dependenciesInstalled: installed.dependenciesInstalled,
141
+ }, "已安装插件");
138
142
  return {
139
143
  ok: true,
140
144
  id: installed.id,
141
145
  restartRequired: true,
146
+ packageManager: installed.packageManager,
147
+ dependenciesInstalled: installed.dependenciesInstalled,
142
148
  };
143
149
  }
144
150
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../src/plugin/manage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../src/plugin/manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export type PluginPackageManagerName = "npm" | "pnpm" | "yarn" | "bun";
2
+ export interface PluginPackageManager {
3
+ readonly name: PluginPackageManagerName;
4
+ readonly version: string | null;
5
+ }
6
+ export interface PluginPackageJsonLike {
7
+ readonly packageManager?: unknown;
8
+ readonly dependencies?: Record<string, unknown> | null;
9
+ readonly optionalDependencies?: Record<string, unknown> | null;
10
+ }
11
+ export interface PluginDependencyInstallResult {
12
+ readonly manager: PluginPackageManager | null;
13
+ readonly installed: boolean;
14
+ readonly reason: string | null;
15
+ }
16
+ /** 解析 "npm@11.20.0" / "pnpm" 这类声明;不合法返回 null */
17
+ export declare function parsePackageManager(value: unknown): PluginPackageManager | null;
18
+ /** 没声明 packageManager 时按 lockfile 推断,兼容旧插件 */
19
+ export declare function lockfilePackageManager(files: readonly string[]): PluginPackageManager | null;
20
+ export declare function hasPluginDependencies(pkg: PluginPackageJsonLike): boolean;
21
+ /** 实际执行的命令;Windows 下 .cmd 需要 shell */
22
+ export declare function pluginInstallCommand(manager: PluginPackageManager): {
23
+ readonly command: string;
24
+ readonly args: readonly string[];
25
+ };
26
+ export interface RunPackageInstallOptions {
27
+ readonly timeoutMs?: number;
28
+ }
29
+ /** 在插件目录里执行包管理器安装;失败时抛出带输出尾部的错误 */
30
+ export declare function runPackageInstall(directory: string, manager: PluginPackageManager, options?: RunPackageInstallOptions): Promise<void>;
31
+ export interface InstallPluginDependenciesOptions {
32
+ /** 插件目录里的文件名;默认读目录,用于 lockfile 推断 */
33
+ readonly files?: readonly string[];
34
+ /** 测试注入;默认 runPackageInstall */
35
+ readonly run?: typeof runPackageInstall;
36
+ readonly timeoutMs?: number;
37
+ }
38
+ /**
39
+ * 安装插件依赖。
40
+ *
41
+ * - 没有 dependencies / optionalDependencies:直接跳过
42
+ * - 有依赖但没有 packageManager:先用 lockfile 推断;仍没有则报错
43
+ * (不允许猜 npm,避免在错误的目录里跑错包管理器)
44
+ */
45
+ export declare function installPluginDependencies(directory: string, pkg: PluginPackageJsonLike, options?: InstallPluginDependenciesOptions): Promise<PluginDependencyInstallResult>;
46
+ export declare function packageManagerLabel(manager: PluginPackageManager): string;
@@ -0,0 +1,148 @@
1
+ /*
2
+ * 插件依赖安装:插件自己的 package.json 用 packageManager 字段声明包管理器。
3
+ *
4
+ * 只认白名单命令(npm / pnpm / yarn / bun),字段不会变成任意命令执行;
5
+ * 版本号只作声明,实际使用 PATH 里的同名命令(不安装新版本,也不走 corepack)。
6
+ */
7
+ import { spawn } from "node:child_process";
8
+ import { readdir } from "node:fs/promises";
9
+ const MANAGERS = new Map([
10
+ ["npm", { binary: "npm", args: ["install", "--no-audit", "--no-fund", "--omit=dev"] }],
11
+ ["pnpm", { binary: "pnpm", args: ["install", "--prod"] }],
12
+ ["yarn", { binary: "yarn", args: ["install", "--production"] }],
13
+ ["bun", { binary: "bun", args: ["install", "--production"] }],
14
+ ]);
15
+ const INSTALL_TIMEOUT_MS = 5 * 60 * 1000;
16
+ const MAX_OUTPUT_CHARS = 4000;
17
+ function isManagerName(value) {
18
+ return MANAGERS.has(value);
19
+ }
20
+ /** 解析 "npm@11.20.0" / "pnpm" 这类声明;不合法返回 null */
21
+ export function parsePackageManager(value) {
22
+ if (typeof value !== "string") {
23
+ return null;
24
+ }
25
+ const trimmed = value.trim();
26
+ const match = /^([A-Za-z][A-Za-z0-9-]*)(?:@(.+))?$/.exec(trimmed);
27
+ if (match === null) {
28
+ return null;
29
+ }
30
+ const name = (match[1] ?? "").toLowerCase();
31
+ if (!isManagerName(name)) {
32
+ return null;
33
+ }
34
+ const version = match[2] ?? null;
35
+ // 允许 corepack 常见的 "pnpm@10.0.0+sha512..." 形式
36
+ if (version !== null && !/^[0-9A-Za-z][0-9A-Za-z.+-]*$/.test(version)) {
37
+ return null;
38
+ }
39
+ return { name, version };
40
+ }
41
+ /** 没声明 packageManager 时按 lockfile 推断,兼容旧插件 */
42
+ export function lockfilePackageManager(files) {
43
+ if (files.includes("pnpm-lock.yaml")) {
44
+ return { name: "pnpm", version: null };
45
+ }
46
+ if (files.includes("yarn.lock")) {
47
+ return { name: "yarn", version: null };
48
+ }
49
+ if (files.includes("bun.lockb") || files.includes("bun.lock")) {
50
+ return { name: "bun", version: null };
51
+ }
52
+ if (files.includes("package-lock.json")) {
53
+ return { name: "npm", version: null };
54
+ }
55
+ return null;
56
+ }
57
+ export function hasPluginDependencies(pkg) {
58
+ return (Object.keys(pkg.dependencies ?? {}).length > 0 ||
59
+ Object.keys(pkg.optionalDependencies ?? {}).length > 0);
60
+ }
61
+ /** 实际执行的命令;Windows 下 .cmd 需要 shell */
62
+ export function pluginInstallCommand(manager) {
63
+ const spec = MANAGERS.get(manager.name);
64
+ if (spec === undefined) {
65
+ throw new Error(`不支持的包管理器:${manager.name}`);
66
+ }
67
+ const command = process.platform === "win32" ? `${spec.binary}.cmd` : spec.binary;
68
+ return { command, args: spec.args };
69
+ }
70
+ /** 在插件目录里执行包管理器安装;失败时抛出带输出尾部的错误 */
71
+ export async function runPackageInstall(directory, manager, options = {}) {
72
+ const { command, args } = pluginInstallCommand(manager);
73
+ const timeoutMs = options.timeoutMs ?? INSTALL_TIMEOUT_MS;
74
+ await new Promise((resolvePromise, rejectPromise) => {
75
+ let output = "";
76
+ let settled = false;
77
+ const append = (chunk) => {
78
+ if (output.length >= MAX_OUTPUT_CHARS) {
79
+ return;
80
+ }
81
+ output += chunk.toString("utf8");
82
+ };
83
+ const child = spawn(command, [...args], {
84
+ cwd: directory,
85
+ env: process.env,
86
+ stdio: ["ignore", "pipe", "pipe"],
87
+ // Windows 的 npm.cmd / pnpm.cmd 必须经 shell 才能启动;args 都是固定白名单
88
+ shell: process.platform === "win32",
89
+ });
90
+ const timer = setTimeout(() => {
91
+ if (settled)
92
+ return;
93
+ settled = true;
94
+ child.kill("SIGKILL");
95
+ rejectPromise(new Error(`${manager.name} 安装依赖超时(${Math.round(timeoutMs / 1000)}s)`));
96
+ }, timeoutMs);
97
+ child.stdout?.on("data", append);
98
+ child.stderr?.on("data", append);
99
+ child.once("error", (error) => {
100
+ if (settled)
101
+ return;
102
+ settled = true;
103
+ clearTimeout(timer);
104
+ rejectPromise(new Error(`无法运行 ${manager.name}:${error.message}`));
105
+ });
106
+ child.once("close", (code) => {
107
+ if (settled)
108
+ return;
109
+ settled = true;
110
+ clearTimeout(timer);
111
+ if (code === 0) {
112
+ resolvePromise();
113
+ return;
114
+ }
115
+ const tail = output.trim().slice(-MAX_OUTPUT_CHARS);
116
+ rejectPromise(new Error(`${manager.name} 安装依赖失败(退出码 ${String(code)})` +
117
+ (tail === "" ? "" : `:${tail}`)));
118
+ });
119
+ });
120
+ }
121
+ /**
122
+ * 安装插件依赖。
123
+ *
124
+ * - 没有 dependencies / optionalDependencies:直接跳过
125
+ * - 有依赖但没有 packageManager:先用 lockfile 推断;仍没有则报错
126
+ * (不允许猜 npm,避免在错误的目录里跑错包管理器)
127
+ */
128
+ export async function installPluginDependencies(directory, pkg, options = {}) {
129
+ if (!hasPluginDependencies(pkg)) {
130
+ return { manager: null, installed: false, reason: null };
131
+ }
132
+ const declared = parsePackageManager(pkg.packageManager);
133
+ if (declared === null && pkg.packageManager !== undefined) {
134
+ throw new Error('package.json 的 packageManager 不合法,支持 "npm@11"、"pnpm@10"、"yarn@1"、"bun@1"');
135
+ }
136
+ const files = options.files ?? (await readdir(directory).catch(() => []));
137
+ const manager = declared ?? lockfilePackageManager(files);
138
+ if (manager === null) {
139
+ throw new Error('插件声明了 dependencies,但 package.json 缺少 packageManager(例如 "npm@11.20.0")');
140
+ }
141
+ const run = options.run ?? runPackageInstall;
142
+ await run(directory, manager, { timeoutMs: options.timeoutMs ?? INSTALL_TIMEOUT_MS });
143
+ return { manager, installed: true, reason: null };
144
+ }
145
+ export function packageManagerLabel(manager) {
146
+ return manager.version === null ? manager.name : `${manager.name}@${manager.version}`;
147
+ }
148
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/plugin/package-manager.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,11 @@ function readmeTemplate(pluginName, commandName) {
73
73
  "",
74
74
  "运行时不需要链接:通过 `wellspring plugin link <this-dir>` 加载时,平台会解析宿主 API。",
75
75
  "",
76
+ "## 依赖",
77
+ "",
78
+ "`package.json` 的 `packageManager` 声明插件使用哪个包管理器(`npm@11.20.0`、`pnpm@10` 等)。",
79
+ "安装 zip 或目录时,有 `dependencies` 会按这个声明自动安装;没有声明时按 lockfile 推断。",
80
+ "",
76
81
  "## 加载",
77
82
  "",
78
83
  "```bash",
@@ -102,6 +107,7 @@ export async function scaffoldPlugin(options) {
102
107
  await writeJsonAtomic(join(dir, "package.json"), {
103
108
  name,
104
109
  version: "0.1.0",
110
+ packageManager: "npm@11.20.0",
105
111
  type: "module",
106
112
  main: "index.ts",
107
113
  wellspring: { apiVersion: 1 },
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/plugin/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/plugin/scaffold.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EACH,SAAS,EACT,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAcxC,kCAAkC;AAClC,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC5C,IAAI,IAAI,GAAG,UAAU;SAChB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,OAAO,CAAA;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,UAAkB,EAAE,WAAmB;IACrD,OAAO;QACH,8EAA8E;QAC9E,sEAAsE;QACtE,EAAE;QACF,uCAAuC;QACvC,oCAAoC;QACpC,oEAAoE;QACpE,IAAI;QACJ,EAAE;QACF,2BAA2B;QAC3B,oBAAoB;QACpB,iCAAiC;QACjC,QAAQ;QACR,wBAAwB;QACxB,mCAAmC;QACnC,QAAQ;QACR,EAAE;QACF,sBAAsB;QACtB,eAAe,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;QAC5C,iBAAiB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;QAC9C,2BAA2B;QAC3B,uBAAuB;QACvB,mBAAmB;QACnB,qBAAqB;QACrB,eAAe;QACf,yBAAyB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG;QACvD,4BAA4B,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,OAAO,CAAC,GAAG;QACnE,iCAAiC;QACjC,mEAAmE;QACnE,8BAA8B;QAC9B,oBAAoB;QACpB,gBAAgB;QAChB,YAAY;QACZ,kCAAkC;QAClC,EAAE;QACF,mBAAmB;QACnB,GAAG;QACH,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,WAAmB;IAC3D,OAAO;QACH,KAAK,UAAU,EAAE;QACjB,EAAE;QACF,OAAO;QACP,EAAE;QACF,mEAAmE;QACnE,EAAE;QACF,SAAS;QACT,+BAA+B;QAC/B,8CAA8C;QAC9C,wBAAwB;QACxB,KAAK;QACL,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,OAAO;QACP,EAAE;QACF,4EAA4E;QAC5E,6DAA6D;QAC7D,EAAE;QACF,OAAO;QACP,EAAE;QACF,SAAS;QACT,iCAAiC;QACjC,wBAAwB;QACxB,cAAc,WAAW,EAAE;QAC3B,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,OAA8B;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;IAEpB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE;QAC7C,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE,aAAa;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;KAChC,CAAC,CAAA;IACF,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;IACzE,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE;QAC9C,eAAe,EAAE;YACb,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,UAAU;YAClB,gBAAgB,EAAE,UAAU;YAC5B,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,0BAA0B,EAAE,IAAI;YAChC,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,CAAC,MAAM,CAAC;SAClB;QACD,OAAO,EAAE,CAAC,UAAU,CAAC;KACxB,CAAC,CAAA;IACF,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;IAChF,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAA;AAC/B,CAAC"}
@@ -7,7 +7,7 @@ export interface RpcTimeouts {
7
7
  readonly agentStream: number | null;
8
8
  /** 拉取供应商模型列表:要等网络超时与重试 */
9
9
  readonly modelsFetch: number;
10
- /** 安装插件:写文件与解压 */
10
+ /** 安装插件:解压、写文件,以及按插件声明的包管理器自动安装依赖(最多 5 分钟) */
11
11
  readonly pluginsInstall: number;
12
12
  /**
13
13
  * 调用插件提供的 Agent 工具
@@ -7,7 +7,7 @@ export const RPC_TIMEOUT_MS = {
7
7
  agentChat: 180_000,
8
8
  agentStream: null,
9
9
  modelsFetch: 120_000,
10
- pluginsInstall: 180_000,
10
+ pluginsInstall: 660_000,
11
11
  /* 比 exec 的最长上限(600s)再留一点余量;不设 null,避免坏插件把宿主永久挂住 */
12
12
  agentTool: 660_000,
13
13
  sandboxExec: 660_000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyit/wellspring",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Wellspring 源泉 —— 插件式 Agent 平台与 CLI(Plugin-based AI agent platform and CLI)",
5
5
  "keywords": [
6
6
  "agent",
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "scripts": {
43
43
  "start": "node src/index.ts",
44
- "test": "node --test test",
44
+ "test": "node scripts/run-tests.mjs",
45
45
  "typecheck": "tsc --noEmit",
46
46
  "format": "oxfmt",
47
47
  "format:check": "oxfmt --check",
@@ -0,0 +1,41 @@
1
+ /*
2
+ * 跨平台的测试入口:显式列出 test/ 下的 *.test.ts / *.test.mjs。
3
+ *
4
+ * 不用 `node --test test`:Node 24 不接受目录参数;
5
+ * 也不用 `node --test` 的默认发现规则:不同 Node 版本对 .ts 的发现范围不一致。
6
+ */
7
+
8
+ import { spawnSync } from "node:child_process"
9
+ import { readdirSync } from "node:fs"
10
+ import { join } from "node:path"
11
+ import { fileURLToPath } from "node:url"
12
+
13
+ const TEST_ROOT = fileURLToPath(new URL("../test/", import.meta.url))
14
+
15
+ function collect(dir) {
16
+ const files = []
17
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
18
+ const path = join(dir, entry.name)
19
+ if (entry.isDirectory()) {
20
+ files.push(...collect(path))
21
+ } else if (entry.name.endsWith(".test.ts") || entry.name.endsWith(".test.mjs")) {
22
+ files.push(path)
23
+ }
24
+ }
25
+ return files
26
+ }
27
+
28
+ const files = collect(TEST_ROOT).sort()
29
+ if (files.length === 0) {
30
+ console.error("没有找到测试文件")
31
+ process.exit(1)
32
+ }
33
+ /*
34
+ * 串行跑测试文件:GitHub 的 4 核 runner 上并发跑插件 sandbox 相关文件时,
35
+ * Node 24 会在 InternalCallbackScope 里触发原生断言(异步上下文 id 非 0)。
36
+ * 串行更稳,代价只是几十秒。
37
+ */
38
+ const result = spawnSync(process.execPath, ["--test", "--test-concurrency=1", ...files], {
39
+ stdio: "inherit",
40
+ })
41
+ process.exit(result.status ?? 1)
@@ -40,6 +40,10 @@ export interface HostPluginMutationResult {
40
40
  readonly changed?: boolean
41
41
  /** 依赖目标插件的其它插件;禁用/卸载时要提示 */
42
42
  readonly dependents?: readonly string[]
43
+ /** 安装时实际使用的包管理器(没有安装依赖时为 null) */
44
+ readonly packageManager?: string | null
45
+ /** 安装时是否自动安装了依赖 */
46
+ readonly dependenciesInstalled?: boolean
43
47
  readonly error?: string
44
48
  }
45
49
 
@@ -172,7 +172,11 @@ export async function runPluginCommand(
172
172
  return failure(`${USAGE_CODES.missingValue}:path`)
173
173
  }
174
174
  const installed = await installPlugin(source, ctx.paths, { force })
175
- ctx.elog.info(`已安装插件 ${installed.id}`)
175
+ ctx.elog.info(
176
+ installed.dependenciesInstalled
177
+ ? `已安装插件 ${installed.id},已用 ${installed.packageManager ?? "包管理器"} 安装依赖`
178
+ : `已安装插件 ${installed.id}`,
179
+ )
176
180
  return success(installed)
177
181
  }
178
182
  case "link": {
@@ -1,6 +1,9 @@
1
1
  /*
2
2
  * 本地插件安装:目录或 zip 包。
3
3
  * zip 在插件根目录下的临时目录解压,校验后再搬到 plugins/<name>。
4
+ *
5
+ * 插件 package.json 可以用 packageManager 声明包管理器;声明了 dependencies 时
6
+ * 安装阶段会调用它自动安装依赖(没有声明则按 lockfile 推断,仍没有则报错)。
4
7
  */
5
8
 
6
9
  import { cp, readFile, readdir, rename, stat } from "node:fs/promises"
@@ -8,6 +11,13 @@ import { basename, extname, join, resolve } from "node:path"
8
11
 
9
12
  import { ensureDir, readJsonIfExists, removePath, statIfExists } from "../platform/file.ts"
10
13
  import { getPaths, type ResolvedPaths } from "../platform/path.ts"
14
+ import {
15
+ hasPluginDependencies,
16
+ installPluginDependencies,
17
+ packageManagerLabel,
18
+ type PluginDependencyInstallResult,
19
+ type PluginPackageJsonLike,
20
+ } from "./package-manager.ts"
11
21
  import { PLUGIN_NAME, pluginsRoot } from "./paths.ts"
12
22
  import { extractZip } from "./zip.ts"
13
23
 
@@ -17,14 +27,19 @@ export interface InstallPluginOptions {
17
27
  readonly force?: boolean
18
28
  /** 解析出插件名后、写入磁盘前调用;返回非空字符串表示拒绝安装 */
19
29
  readonly validateId?: (id: string) => string | null
30
+ /** 测试注入;默认使用真实包管理器安装依赖 */
31
+ readonly runInstall?: typeof import("./package-manager.ts").runPackageInstall
20
32
  }
21
33
 
22
34
  export interface InstallPluginResult {
23
35
  readonly id: string
24
36
  readonly target: string
37
+ /** 实际使用的包管理器(带声明版本,例如 npm@11.20.0);没有安装依赖时为 null */
38
+ readonly packageManager: string | null
39
+ readonly dependenciesInstalled: boolean
25
40
  }
26
41
 
27
- interface PackageManifest {
42
+ interface PackageManifest extends PluginPackageJsonLike {
28
43
  readonly name?: unknown
29
44
  readonly main?: unknown
30
45
  readonly wellspring?: {
@@ -86,6 +101,15 @@ async function resolveSourceName(
86
101
  return temp ? candidate : basename(sourceDir)
87
102
  }
88
103
 
104
+ /** 复制插件目录到暂存区;node_modules 不复制,交给包管理器装 */
105
+ async function copyToStage(source: string, stage: string): Promise<void> {
106
+ await cp(source, stage, {
107
+ recursive: true,
108
+ force: true,
109
+ filter: (path) => basename(path) !== "node_modules",
110
+ })
111
+ }
112
+
89
113
  /** 安装本地插件目录或 zip 包 */
90
114
  export async function installPlugin(
91
115
  sourcePath: string,
@@ -112,6 +136,8 @@ export async function installPlugin(
112
136
  fromArchive = true
113
137
  }
114
138
 
139
+ let stage: string | null = null
140
+ let moved = false
115
141
  try {
116
142
  if (!(await hasEntry(sourceDir))) {
117
143
  throw new Error("插件缺少入口(index.ts/js/mjs/mts 或 package.json main)")
@@ -127,23 +153,61 @@ export async function installPlugin(
127
153
 
128
154
  const target = join(root, name)
129
155
  const existing = await statIfExists(target)
156
+ if (existing !== null && options.force !== true) {
157
+ throw new Error(`插件已存在:${name}`)
158
+ }
159
+
160
+ const pkg = await readJsonIfExists<PackageManifest>(join(sourceDir, "package.json"))
161
+ const needsInstall = pkg !== null && hasPluginDependencies(pkg)
162
+
163
+ let installDir = sourceDir
164
+ if (needsInstall && !fromArchive) {
165
+ /*
166
+ * 目录安装不能碰源目录:复制到暂存区后再安装依赖,
167
+ * node_modules 不复制,避免把开发目录里的依赖带进去。
168
+ */
169
+ stage = join(root, `.install-stage-${process.pid}-${Date.now().toString(36)}`)
170
+ await removePath(stage)
171
+ await copyToStage(sourceDir, stage)
172
+ installDir = stage
173
+ }
174
+
175
+ let dependencies: PluginDependencyInstallResult = {
176
+ manager: null,
177
+ installed: false,
178
+ reason: null,
179
+ }
180
+ if (needsInstall) {
181
+ dependencies = await installPluginDependencies(installDir, pkg, {
182
+ ...(options.runInstall === undefined ? {} : { run: options.runInstall }),
183
+ })
184
+ }
185
+
130
186
  if (existing !== null) {
131
- if (options.force !== true) {
132
- throw new Error(`插件已存在:${name}`)
133
- }
134
187
  await removePath(target)
135
188
  }
136
-
137
189
  if (fromArchive) {
138
190
  // 与临时目录同根,rename 保持原子
139
191
  await rename(sourceDir, target)
192
+ } else if (stage !== null) {
193
+ await rename(stage, target)
194
+ moved = true
140
195
  } else {
141
196
  await cp(sourceDir, target, { recursive: true, force: true })
142
197
  }
143
- return { id: name, target }
198
+ return {
199
+ id: name,
200
+ target,
201
+ packageManager:
202
+ dependencies.manager === null ? null : packageManagerLabel(dependencies.manager),
203
+ dependenciesInstalled: dependencies.installed,
204
+ }
144
205
  } finally {
145
206
  if (fromArchive) {
146
207
  await removePath(temp)
147
208
  }
209
+ if (stage !== null && !moved) {
210
+ await removePath(stage)
211
+ }
148
212
  }
149
213
  }
@@ -204,11 +204,20 @@ export function createHostPluginManager(options: HostPluginManagerOptions): Host
204
204
  ? "不能通过网页安装或覆盖 wellspring-web,请用 CLI 安装"
205
205
  : null,
206
206
  })
207
- logger.info({ id: installed.id }, "已安装插件")
207
+ logger.info(
208
+ {
209
+ id: installed.id,
210
+ packageManager: installed.packageManager,
211
+ dependenciesInstalled: installed.dependenciesInstalled,
212
+ },
213
+ "已安装插件",
214
+ )
208
215
  return {
209
216
  ok: true,
210
217
  id: installed.id,
211
218
  restartRequired: true,
219
+ packageManager: installed.packageManager,
220
+ dependenciesInstalled: installed.dependenciesInstalled,
212
221
  }
213
222
  } finally {
214
223
  await removePath(tempFile)
@@ -0,0 +1,214 @@
1
+ /*
2
+ * 插件依赖安装:插件自己的 package.json 用 packageManager 字段声明包管理器。
3
+ *
4
+ * 只认白名单命令(npm / pnpm / yarn / bun),字段不会变成任意命令执行;
5
+ * 版本号只作声明,实际使用 PATH 里的同名命令(不安装新版本,也不走 corepack)。
6
+ */
7
+
8
+ import { spawn } from "node:child_process"
9
+ import { readdir } from "node:fs/promises"
10
+
11
+ export type PluginPackageManagerName = "npm" | "pnpm" | "yarn" | "bun"
12
+
13
+ export interface PluginPackageManager {
14
+ readonly name: PluginPackageManagerName
15
+ readonly version: string | null
16
+ }
17
+
18
+ export interface PluginPackageJsonLike {
19
+ readonly packageManager?: unknown
20
+ readonly dependencies?: Record<string, unknown> | null
21
+ readonly optionalDependencies?: Record<string, unknown> | null
22
+ }
23
+
24
+ export interface PluginDependencyInstallResult {
25
+ readonly manager: PluginPackageManager | null
26
+ readonly installed: boolean
27
+ readonly reason: string | null
28
+ }
29
+
30
+ interface ManagerCommand {
31
+ readonly binary: string
32
+ readonly args: readonly string[]
33
+ }
34
+
35
+ const MANAGERS: ReadonlyMap<PluginPackageManagerName, ManagerCommand> = new Map([
36
+ ["npm", { binary: "npm", args: ["install", "--no-audit", "--no-fund", "--omit=dev"] }],
37
+ ["pnpm", { binary: "pnpm", args: ["install", "--prod"] }],
38
+ ["yarn", { binary: "yarn", args: ["install", "--production"] }],
39
+ ["bun", { binary: "bun", args: ["install", "--production"] }],
40
+ ])
41
+
42
+ const INSTALL_TIMEOUT_MS = 5 * 60 * 1000
43
+ const MAX_OUTPUT_CHARS = 4000
44
+
45
+ function isManagerName(value: string): value is PluginPackageManagerName {
46
+ return MANAGERS.has(value as PluginPackageManagerName)
47
+ }
48
+
49
+ /** 解析 "npm@11.20.0" / "pnpm" 这类声明;不合法返回 null */
50
+ export function parsePackageManager(value: unknown): PluginPackageManager | null {
51
+ if (typeof value !== "string") {
52
+ return null
53
+ }
54
+ const trimmed = value.trim()
55
+ const match = /^([A-Za-z][A-Za-z0-9-]*)(?:@(.+))?$/.exec(trimmed)
56
+ if (match === null) {
57
+ return null
58
+ }
59
+ const name = (match[1] ?? "").toLowerCase()
60
+ if (!isManagerName(name)) {
61
+ return null
62
+ }
63
+ const version = match[2] ?? null
64
+ // 允许 corepack 常见的 "pnpm@10.0.0+sha512..." 形式
65
+ if (version !== null && !/^[0-9A-Za-z][0-9A-Za-z.+-]*$/.test(version)) {
66
+ return null
67
+ }
68
+ return { name, version }
69
+ }
70
+
71
+ /** 没声明 packageManager 时按 lockfile 推断,兼容旧插件 */
72
+ export function lockfilePackageManager(files: readonly string[]): PluginPackageManager | null {
73
+ if (files.includes("pnpm-lock.yaml")) {
74
+ return { name: "pnpm", version: null }
75
+ }
76
+ if (files.includes("yarn.lock")) {
77
+ return { name: "yarn", version: null }
78
+ }
79
+ if (files.includes("bun.lockb") || files.includes("bun.lock")) {
80
+ return { name: "bun", version: null }
81
+ }
82
+ if (files.includes("package-lock.json")) {
83
+ return { name: "npm", version: null }
84
+ }
85
+ return null
86
+ }
87
+
88
+ export function hasPluginDependencies(pkg: PluginPackageJsonLike): boolean {
89
+ return (
90
+ Object.keys(pkg.dependencies ?? {}).length > 0 ||
91
+ Object.keys(pkg.optionalDependencies ?? {}).length > 0
92
+ )
93
+ }
94
+
95
+ /** 实际执行的命令;Windows 下 .cmd 需要 shell */
96
+ export function pluginInstallCommand(manager: PluginPackageManager): {
97
+ readonly command: string
98
+ readonly args: readonly string[]
99
+ } {
100
+ const spec = MANAGERS.get(manager.name)
101
+ if (spec === undefined) {
102
+ throw new Error(`不支持的包管理器:${manager.name}`)
103
+ }
104
+ const command = process.platform === "win32" ? `${spec.binary}.cmd` : spec.binary
105
+ return { command, args: spec.args }
106
+ }
107
+
108
+ export interface RunPackageInstallOptions {
109
+ readonly timeoutMs?: number
110
+ }
111
+
112
+ /** 在插件目录里执行包管理器安装;失败时抛出带输出尾部的错误 */
113
+ export async function runPackageInstall(
114
+ directory: string,
115
+ manager: PluginPackageManager,
116
+ options: RunPackageInstallOptions = {},
117
+ ): Promise<void> {
118
+ const { command, args } = pluginInstallCommand(manager)
119
+ const timeoutMs = options.timeoutMs ?? INSTALL_TIMEOUT_MS
120
+ await new Promise<void>((resolvePromise, rejectPromise) => {
121
+ let output = ""
122
+ let settled = false
123
+ const append = (chunk: Buffer): void => {
124
+ if (output.length >= MAX_OUTPUT_CHARS) {
125
+ return
126
+ }
127
+ output += chunk.toString("utf8")
128
+ }
129
+ const child = spawn(command, [...args], {
130
+ cwd: directory,
131
+ env: process.env,
132
+ stdio: ["ignore", "pipe", "pipe"],
133
+ // Windows 的 npm.cmd / pnpm.cmd 必须经 shell 才能启动;args 都是固定白名单
134
+ shell: process.platform === "win32",
135
+ })
136
+ const timer = setTimeout(() => {
137
+ if (settled) return
138
+ settled = true
139
+ child.kill("SIGKILL")
140
+ rejectPromise(
141
+ new Error(`${manager.name} 安装依赖超时(${Math.round(timeoutMs / 1000)}s)`),
142
+ )
143
+ }, timeoutMs)
144
+ child.stdout?.on("data", append)
145
+ child.stderr?.on("data", append)
146
+ child.once("error", (error) => {
147
+ if (settled) return
148
+ settled = true
149
+ clearTimeout(timer)
150
+ rejectPromise(new Error(`无法运行 ${manager.name}:${error.message}`))
151
+ })
152
+ child.once("close", (code) => {
153
+ if (settled) return
154
+ settled = true
155
+ clearTimeout(timer)
156
+ if (code === 0) {
157
+ resolvePromise()
158
+ return
159
+ }
160
+ const tail = output.trim().slice(-MAX_OUTPUT_CHARS)
161
+ rejectPromise(
162
+ new Error(
163
+ `${manager.name} 安装依赖失败(退出码 ${String(code)})` +
164
+ (tail === "" ? "" : `:${tail}`),
165
+ ),
166
+ )
167
+ })
168
+ })
169
+ }
170
+
171
+ export interface InstallPluginDependenciesOptions {
172
+ /** 插件目录里的文件名;默认读目录,用于 lockfile 推断 */
173
+ readonly files?: readonly string[]
174
+ /** 测试注入;默认 runPackageInstall */
175
+ readonly run?: typeof runPackageInstall
176
+ readonly timeoutMs?: number
177
+ }
178
+
179
+ /**
180
+ * 安装插件依赖。
181
+ *
182
+ * - 没有 dependencies / optionalDependencies:直接跳过
183
+ * - 有依赖但没有 packageManager:先用 lockfile 推断;仍没有则报错
184
+ * (不允许猜 npm,避免在错误的目录里跑错包管理器)
185
+ */
186
+ export async function installPluginDependencies(
187
+ directory: string,
188
+ pkg: PluginPackageJsonLike,
189
+ options: InstallPluginDependenciesOptions = {},
190
+ ): Promise<PluginDependencyInstallResult> {
191
+ if (!hasPluginDependencies(pkg)) {
192
+ return { manager: null, installed: false, reason: null }
193
+ }
194
+ const declared = parsePackageManager(pkg.packageManager)
195
+ if (declared === null && pkg.packageManager !== undefined) {
196
+ throw new Error(
197
+ 'package.json 的 packageManager 不合法,支持 "npm@11"、"pnpm@10"、"yarn@1"、"bun@1"',
198
+ )
199
+ }
200
+ const files = options.files ?? (await readdir(directory).catch(() => []))
201
+ const manager = declared ?? lockfilePackageManager(files)
202
+ if (manager === null) {
203
+ throw new Error(
204
+ '插件声明了 dependencies,但 package.json 缺少 packageManager(例如 "npm@11.20.0")',
205
+ )
206
+ }
207
+ const run = options.run ?? runPackageInstall
208
+ await run(directory, manager, { timeoutMs: options.timeoutMs ?? INSTALL_TIMEOUT_MS })
209
+ return { manager, installed: true, reason: null }
210
+ }
211
+
212
+ export function packageManagerLabel(manager: PluginPackageManager): string {
213
+ return manager.version === null ? manager.name : `${manager.name}@${manager.version}`
214
+ }
@@ -96,6 +96,11 @@ function readmeTemplate(pluginName: string, commandName: string): string {
96
96
  "",
97
97
  "运行时不需要链接:通过 `wellspring plugin link <this-dir>` 加载时,平台会解析宿主 API。",
98
98
  "",
99
+ "## 依赖",
100
+ "",
101
+ "`package.json` 的 `packageManager` 声明插件使用哪个包管理器(`npm@11.20.0`、`pnpm@10` 等)。",
102
+ "安装 zip 或目录时,有 `dependencies` 会按这个声明自动安装;没有声明时按 lockfile 推断。",
103
+ "",
99
104
  "## 加载",
100
105
  "",
101
106
  "```bash",
@@ -129,6 +134,7 @@ export async function scaffoldPlugin(
129
134
  await writeJsonAtomic(join(dir, "package.json"), {
130
135
  name,
131
136
  version: "0.1.0",
137
+ packageManager: "npm@11.20.0",
132
138
  type: "module",
133
139
  main: "index.ts",
134
140
  wellspring: { apiVersion: 1 },
@@ -12,7 +12,7 @@ export interface RpcTimeouts {
12
12
  readonly agentStream: number | null
13
13
  /** 拉取供应商模型列表:要等网络超时与重试 */
14
14
  readonly modelsFetch: number
15
- /** 安装插件:写文件与解压 */
15
+ /** 安装插件:解压、写文件,以及按插件声明的包管理器自动安装依赖(最多 5 分钟) */
16
16
  readonly pluginsInstall: number
17
17
  /**
18
18
  * 调用插件提供的 Agent 工具
@@ -36,7 +36,7 @@ export const RPC_TIMEOUT_MS: RpcTimeouts = {
36
36
  agentChat: 180_000,
37
37
  agentStream: null,
38
38
  modelsFetch: 120_000,
39
- pluginsInstall: 180_000,
39
+ pluginsInstall: 660_000,
40
40
  /* 比 exec 的最长上限(600s)再留一点余量;不设 null,避免坏插件把宿主永久挂住 */
41
41
  agentTool: 660_000,
42
42
  sandboxExec: 660_000,