@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 +26 -2
- package/dist/api/host/plugins.d.ts +4 -0
- package/dist/commands/plugin.js +3 -1
- package/dist/commands/plugin.js.map +1 -1
- package/dist/plugin/install.d.ts +5 -0
- package/dist/plugin/install.js +53 -4
- package/dist/plugin/install.js.map +1 -1
- package/dist/plugin/manage.js +7 -1
- package/dist/plugin/manage.js.map +1 -1
- package/dist/plugin/package-manager.d.ts +46 -0
- package/dist/plugin/package-manager.js +148 -0
- package/dist/plugin/package-manager.js.map +1 -0
- package/dist/plugin/scaffold.js +6 -0
- package/dist/plugin/scaffold.js.map +1 -1
- package/dist/sandbox/rpc-timeouts.d.ts +1 -1
- package/dist/sandbox/rpc-timeouts.js +1 -1
- package/package.json +2 -2
- package/scripts/run-tests.mjs +41 -0
- package/src/api/host/plugins.ts +4 -0
- package/src/commands/plugin.ts +5 -1
- package/src/plugin/install.ts +70 -6
- package/src/plugin/manage.ts +10 -1
- package/src/plugin/package-manager.ts +214 -0
- package/src/plugin/scaffold.ts +6 -0
- package/src/sandbox/rpc-timeouts.ts +2 -2
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 #
|
|
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 {
|
package/dist/commands/plugin.js
CHANGED
|
@@ -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(
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAA4C,MAAM,aAAa,CAAA;AAUxF,0DAA0D;AAC1D,KAAK,UAAU,cAAc,CAAC,KAAoB;IAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7C,IAAI,KAAe,CAAA;IACnB,IAAI,CAAC;QACD,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClD,IAAI,IAAI,GAAG,OAAO,CAAA;QAClB,IAAI,OAAO,GAAG,OAAO,CAAA;QACrB,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAGvE,CAAA;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE;gBAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;YACpE,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE;gBAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QACpF,CAAC;QAAC,MAAM,CAAC;YACL,2BAA2B;QAC/B,CAAC;QACD,IAAI,IAAI,GAAa,EAAE,CAAA;QACvB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;YAC5D,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAC1D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAC1B,CAAA;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,mBAAmB;QACvB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACT,OAAO;YACP,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;SACzC,CAAC,CAAA;IACN,CAAC;IACD,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,qBAAqB;AACrB,SAAS,YAAY,CACjB,OAAiC,EACjC,OAAe,EACf,UAAkB;IAElB,OAAO,OAAO;SACT,MAAM,CACH,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,OAAO,KAAK,OAAO;QAC1B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAC1E;SACA,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,GAAmB,EACnB,IAAuB;IAEvB,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC1B,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAU,MAAM,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAA;IAC1F,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAElD,IAAI,CAAC;QACD,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,MAAM,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACnE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;oBACtD,GAAG,CAAC,IAAI,CAAC,KAAK,CACV,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,UAAU,IAAI,EAAE,CACjF,CAAA;gBACL,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;YACD,KAAK,KAAK,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACrB,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;oBACjC,IAAI;oBACJ,SAAS,EACL,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC3E,KAAK;iBACR,CAAC,CAAA;gBACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC7C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACtB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;gBACzD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;gBAC1C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;gBACrD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBACtD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACrB,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC/C,MAAM,KAAK,GACP,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;gBAClD,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;gBACjD,IAAI,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACrC,OAAO,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;gBAC9C,CAAC;gBACD,MAAM,OAAO,GAAG,UAAU,KAAK,QAAQ,CAAA;gBACvC,MAAM,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;gBACnD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,OAAO,UAAU,CAAC,CAAA;gBAChE,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YAC5C,CAAC;YACD,KAAK,SAAS,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;gBACnE,GAAG,CAAC,IAAI,CAAC,IAAI,CACT,SAAS,CAAC,qBAAqB;oBAC3B,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC,cAAc,IAAI,MAAM,OAAO;oBACvE,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,EAAE,CAChC,CAAA;gBACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAA;YAC7B,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;gBAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;gBAC9B,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YAChC,CAAC;YACD,KAAK,QAAQ,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;gBAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACrB,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,YAAY,OAAO,CAAC,CAAA;gBACtD,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC/C,MAAM,MAAM,GACR,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;gBAClD,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAC5D,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,CAAA;gBAC1E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACnC,GAAG,CAAC,IAAI,CAAC,KAAK,CACV,MAAM,OAAO,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;wBAC7C,oBAAoB,CAC3B,CAAA;oBACD,OAAO,OAAO,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACnE,CAAC;gBACD,MAAM,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;gBACtC,GAAG,CAAC,IAAI,CAAC,IAAI,CACT,SAAS,OAAO,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACvE,CAAA;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;YACnC,CAAC;YACD;gBACI,OAAO,OAAO,CAAC,GAAG,WAAW,CAAC,iBAAiB,WAAW,UAAU,IAAI,EAAE,EAAE,CAAC,CAAA;QACrF,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,OAAO,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC;AACL,CAAC"}
|
package/dist/plugin/install.d.ts
CHANGED
|
@@ -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>;
|
package/dist/plugin/install.js
CHANGED
|
@@ -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 {
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/plugin/install.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/manage.js
CHANGED
|
@@ -134,11 +134,17 @@ export function createHostPluginManager(options) {
|
|
|
134
134
|
? "不能通过网页安装或覆盖 wellspring-web,请用 CLI 安装"
|
|
135
135
|
: null,
|
|
136
136
|
});
|
|
137
|
-
logger.info({
|
|
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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"}
|
package/dist/plugin/scaffold.js
CHANGED
|
@@ -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":"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"}
|
|
@@ -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 工具
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyit/wellspring",
|
|
3
|
-
"version": "1.
|
|
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
|
|
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)
|
package/src/api/host/plugins.ts
CHANGED
|
@@ -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
|
|
package/src/commands/plugin.ts
CHANGED
|
@@ -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(
|
|
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": {
|
package/src/plugin/install.ts
CHANGED
|
@@ -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 {
|
|
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
|
}
|
package/src/plugin/manage.ts
CHANGED
|
@@ -204,11 +204,20 @@ export function createHostPluginManager(options: HostPluginManagerOptions): Host
|
|
|
204
204
|
? "不能通过网页安装或覆盖 wellspring-web,请用 CLI 安装"
|
|
205
205
|
: null,
|
|
206
206
|
})
|
|
207
|
-
logger.info(
|
|
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
|
+
}
|
package/src/plugin/scaffold.ts
CHANGED
|
@@ -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:
|
|
39
|
+
pluginsInstall: 660_000,
|
|
40
40
|
/* 比 exec 的最长上限(600s)再留一点余量;不设 null,避免坏插件把宿主永久挂住 */
|
|
41
41
|
agentTool: 660_000,
|
|
42
42
|
sandboxExec: 660_000,
|