@aalis/plugin-webui-server 0.4.2 → 0.5.1

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.
@@ -1,47 +1,29 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { resolve } from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
- // 纯 npm 路线:npm registry 的 keyword 检索即天然索引(约定 keyword aalis-plugin),
5
- // 无自建服务器、无静态索引。分发走 package-manager 的 npm pack。
4
+ // 纯 npm 路线:npm registry 的 keyword 检索即天然索引,无自建服务器、无静态索引。
5
+ // 分发走 package-manager 的 npm pack。
6
6
  // 注:npm 的 search API 并非所有镜像都支持(淘宝等国内源不支持),故 registry
7
7
  // 基址可配置(marketplaceRegistry),默认官方源;国内用户可配代理/支持 search 的镜像。
8
8
  const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
9
- const AALIS_KEYWORD = 'aalis-plugin';
9
+ // 市场收录四类:功能插件 aalis-plugin / 工具库 aalis-util / 契约 aalis-api / 前端 aalis-interface。
10
+ // npm search 的 keywords: 逗号分隔 = 任一命中(核心/工具链不带任何类型词,自然不进市场)。
11
+ const AALIS_KEYWORDS = ['aalis-plugin', 'aalis-util', 'aalis-api', 'aalis-interface'];
10
12
  const SEARCH_TIMEOUT_MS = 8000;
11
13
  // 合法 npm 包名(可选 scope)+ 可选 @version 后缀(支持指定版本安装)
12
14
  const PKG_NAME_RE = /^(@[a-z0-9\-_.]+\/)?[a-z0-9\-_.]+(@[a-z0-9.-]+)?$/i;
13
15
  /**
14
- * 核心 / 契约 / WebUI 基础设施包:禁止从市场卸载(删了会连锁崩或把当前 WebUI
15
- * 自己干掉)。`*-api` 契约包被大量插件依赖;webui-server/client 是你正用的控制台;
16
- * package-manager 是卸载引擎本身;core===true 是 manifest 标记的核心插件。纯函数,便于单测。
16
+ * 按**类型关键词**分类(npm search 直接返回 keywords,与加载约定的类型词 1:1,可靠)。
17
+ * 市场搜索已保证结果只含 aalis-plugin/util/api/interface 之一,无需再靠包名猜测。纯函数,便于单测。
17
18
  */
18
- const PROTECTED_EXACT = new Set([
19
- '@aalis/core',
20
- '@aalis/plugin-package-manager',
21
- '@aalis/plugin-webui-server',
22
- '@aalis/plugin-webui-client',
23
- ]);
24
- export function isProtectedPackage(name, entry) {
25
- if (PROTECTED_EXACT.has(name))
26
- return true;
27
- const short = name.replace(/^@[^/]+\//, '');
28
- if (/-api$/.test(short))
29
- return true; // 契约/类型包
30
- return entry?.core === true;
31
- }
32
- /**
33
- * 按**包名**分类(npm search 只返回 name,拿不到 package.json 的 aalis marker)。
34
- * 注意 `*-client` 不可一刀切——`plugin-mcp-client` 是功能插件,只有 `webui-client*`
35
- * 才是前端。第三方前端建议名含 `webui-client` 以被正确归类(否则归入功能插件,
36
- * 仍能装/被 aalis.client marker 发现挂载,只是分类不准)。纯函数,便于单测。
37
- */
38
- export function classifyPackage(name) {
39
- const short = name.replace(/^@[^/]+\//, '');
40
- if (/-api$/.test(short))
19
+ export function classifyPackage(keywords) {
20
+ if (keywords.includes('aalis-interface'))
21
+ return 'interface';
22
+ if (keywords.includes('aalis-api'))
41
23
  return 'api';
42
- if (/webui-client/.test(short))
43
- return 'client';
44
- return 'plugin';
24
+ if (keywords.includes('aalis-util'))
25
+ return 'util';
26
+ return 'plugin'; // 进了市场却非上述三类 → 必是功能插件(aalis-plugin)
45
27
  }
46
28
  /**
47
29
  * 补全「已安装」判定。getStatus() 只含**已加载的运行时插件**——api 契约 / 前端 / 核心
@@ -80,6 +62,39 @@ export function findServiceDependents(targetName, status) {
80
62
  }
81
63
  return [...dependents];
82
64
  }
65
+ /** 直接 import 依赖者:哪些本地包的依赖名单里含 target(不含自身)。排序输出。纯函数,便于单测。 */
66
+ export function findPackageDependents(target, depMap) {
67
+ const out = [];
68
+ for (const [name, deps] of depMap) {
69
+ if (name !== target && deps.includes(target))
70
+ out.push(name);
71
+ }
72
+ return out.sort();
73
+ }
74
+ /**
75
+ * 构建 target 的 import 依赖链路树(纯函数,只看 import 边,不碰服务)。
76
+ * direction='upstream':children=该节点的依赖(它需要谁);缺失依赖标 present=false 且停止下钻(中断)。
77
+ * direction='downstream':children=依赖该节点的包(谁需要它),复用 findPackageDependents;不因 target 自身未装而中断。
78
+ * isRelevant 滤掉无关第三方库(如 express),默认只跟 depMap 内的包;调用方可放宽到 @aalis scope。
79
+ * 环检测(路径内重复即停)+ 深度上限。
80
+ */
81
+ export function buildDependencyChain(target, depMap, direction, opts = {}) {
82
+ const maxDepth = opts.maxDepth ?? 8;
83
+ const isRelevant = opts.isRelevant ?? ((n) => depMap.has(n));
84
+ const build = (name, depth, path) => {
85
+ const node = { name, present: depMap.has(name), children: [] };
86
+ if (depth >= maxDepth || path.has(name))
87
+ return node; // 深度 / 环 → 不下钻
88
+ if (direction === 'upstream' && !node.present)
89
+ return node; // upstream 缺失即中断(downstream 不受 target 自身存在影响)
90
+ const nextPath = new Set(path).add(name);
91
+ const edges = direction === 'upstream' ? (depMap.get(name) ?? []).filter(isRelevant) : findPackageDependents(name, depMap);
92
+ for (const child of edges)
93
+ node.children.push(build(child, depth + 1, nextPath));
94
+ return node;
95
+ };
96
+ return build(target, 0, new Set());
97
+ }
83
98
  /** npm search 响应 → 市场卡片列表(标注已装 + 官方 + 富信息)。纯函数,便于单测。 */
84
99
  export function toMarketplacePackages(data, installed) {
85
100
  return (data.objects ?? []).map(o => ({
@@ -89,8 +104,8 @@ export function toMarketplacePackages(data, installed) {
89
104
  author: o.package.publisher?.username,
90
105
  installed: installed.has(o.package.name),
91
106
  official: o.package.name.startsWith('@aalis/'),
92
- category: classifyPackage(o.package.name),
93
- keywords: (o.package.keywords ?? []).filter(k => k !== AALIS_KEYWORD),
107
+ category: classifyPackage(o.package.keywords ?? []),
108
+ keywords: (o.package.keywords ?? []).filter(k => !AALIS_KEYWORDS.includes(k)),
94
109
  downloads: o.downloads?.monthly,
95
110
  updated: o.updated ?? o.package.date,
96
111
  score: o.score?.final,
@@ -99,32 +114,42 @@ export function toMarketplacePackages(data, installed) {
99
114
  links: o.package.links,
100
115
  }));
101
116
  }
102
- /** npm packument → 装前能力清单(读 latest 版本的 aalis.service)。纯函数,便于单测。 */
117
+ /** npm packument → 装前能力清单(读 latest 版本的 aalis.service + 依赖名)。纯函数,便于单测。 */
103
118
  export function toManifest(packument) {
104
119
  const latest = packument['dist-tags']?.latest;
105
120
  if (!latest)
106
121
  return null;
107
122
  const v = packument.versions?.[latest];
108
- return { name: '', version: latest, description: v?.description, service: v?.aalis?.service };
123
+ const dependencies = [...new Set([...Object.keys(v?.dependencies ?? {}), ...Object.keys(v?.peerDependencies ?? {})])];
124
+ return { name: '', version: latest, description: v?.description, service: v?.aalis?.service, dependencies };
109
125
  }
110
- /** 构造 npm registry 检索 URL(keyword 约定 + 可选搜索词 + 可配 registry 基址)。纯函数,便于单测。 */
111
- export function buildSearchUrl(q, registryBase = DEFAULT_REGISTRY) {
112
- const text = q ? `keywords:${AALIS_KEYWORD} ${q}` : `keywords:${AALIS_KEYWORD}`;
126
+ /**
127
+ * 构造单个类型关键词的 npm registry 检索 URL。纯函数,便于单测。
128
+ * 注意:npm search `keywords:a,b` **AND**(须同时含),不是 OR——故四类关键词不能逗号合并成一条查询
129
+ * (会要求一个包同时是 plugin+util+api+interface → 0 结果)。改为每类发一条、调用方合并,见 registerMarketplaceRoutes。
130
+ */
131
+ export function buildSearchUrl(q, keyword, registryBase = DEFAULT_REGISTRY) {
132
+ const text = q ? `keywords:${keyword} ${q}` : `keywords:${keyword}`;
113
133
  const base = registryBase.replace(/\/+$/, '') || DEFAULT_REGISTRY;
114
134
  return `${base}/-/v1/search?text=${encodeURIComponent(text)}&size=100`;
115
135
  }
116
136
  /** 注册插件市场 REST 路由 */
117
- export function registerMarketplaceRoutes(expressApp, ctx, getPluginMgr, gate, registryBase = DEFAULT_REGISTRY) {
118
- // 市场列表:npm registry keyword 检索 + 标注已装/可卸。网络失败降级为空列表 + warning,
137
+ export function registerMarketplaceRoutes(expressApp, ctx, getPluginMgr, gate, registryBase = DEFAULT_REGISTRY,
138
+ /** 本地包扫描:`name 依赖名[]`(含 monorepo 工作区包)。keys require.resolve 在 pnpm 工作区的盲区;values 供依赖图。 */
139
+ getLocalPackages = () => new Map()) {
140
+ // 市场列表:npm registry keyword 检索 + 标注已装。网络失败降级为空列表 + warning,
119
141
  // 不阻塞 WebUI(管理读档,与 /api/plugins 同级)。
120
- expressApp.get('/api/marketplace', gate('webui:marketplace:read', 'restricted'), async (req, res) => {
142
+ expressApp.get('/api/marketplace', gate(), async (req, res) => {
121
143
  const q = typeof req.query.q === 'string' ? req.query.q.trim() : '';
122
144
  const status = getPluginMgr()?.getStatus() ?? [];
123
- const statusByName = new Map(status.map(p => [p.name, p]));
124
- // 已装判定独立于 getStatus(后者漏掉 api/前端/核心——它们带 marker 不作为插件加载):
125
- // 对检索结果按「项目根能否 resolve 到其 package.json」补判,覆盖 npm 扁平/pnpm/monorepo。
145
+ // 已装判定独立于 getStatus(后者只含已加载运行时插件,漏掉带 marker 不加载的 api/前端/核心)。
146
+ // 两路补判:① 本地物理存在(含 monorepo packages/ 工作区包——require.resolve 从仓库根解析不到);
147
+ // 项目根能 resolve(独立部署的扁平 node_modules / 第三方根依赖)。
148
+ const localPkgs = getLocalPackages();
126
149
  const projectRequire = createRequire(pathToFileURL(resolve(process.cwd(), 'package.json')));
127
- const canResolve = (name) => {
150
+ const isPresent = (name) => {
151
+ if (localPkgs.has(name))
152
+ return true;
128
153
  try {
129
154
  projectRequire.resolve(`${name}/package.json`);
130
155
  return true;
@@ -133,52 +158,88 @@ export function registerMarketplaceRoutes(expressApp, ctx, getPluginMgr, gate, r
133
158
  return false;
134
159
  }
135
160
  };
136
- try {
137
- const r = await fetch(buildSearchUrl(q, registryBase), { signal: AbortSignal.timeout(SEARCH_TIMEOUT_MS) });
161
+ // 四类关键词各发一条检索(npm 的 keywords 逗号是 AND 非 OR),并行后按包名合并去重 = OR。
162
+ const fetchKw = async (kw) => {
163
+ const r = await fetch(buildSearchUrl(q, kw, registryBase), { signal: AbortSignal.timeout(SEARCH_TIMEOUT_MS) });
138
164
  if (!r.ok)
139
165
  throw new Error(`npm registry 返回 ${r.status}`);
140
- const data = (await r.json());
141
- const installed = augmentInstalled((data.objects ?? []).map(o => o.package.name), new Set(status.map(p => p.name)), canResolve);
142
- const packages = toMarketplacePackages(data, installed).map(p => ({
143
- ...p,
144
- removable: p.installed && !isProtectedPackage(p.name, statusByName.get(p.name)),
145
- }));
146
- res.json({ packages });
147
- }
148
- catch (err) {
149
- const msg = err instanceof Error ? err.message : String(err);
166
+ return (await r.json());
167
+ };
168
+ const settled = await Promise.allSettled(AALIS_KEYWORDS.map(fetchKw));
169
+ const okResults = settled.filter((s) => s.status === 'fulfilled');
170
+ if (okResults.length === 0) {
171
+ const reason = settled.find(s => s.status === 'rejected');
172
+ const msg = reason?.reason instanceof Error ? reason.reason.message : String(reason?.reason ?? '未知错误');
150
173
  ctx.logger.debug(`market: npm registry 检索失败: ${msg}`);
151
174
  res.json({ packages: [], warning: `无法连接 npm 仓库(${msg}),暂时只能管理本地已装插件` });
175
+ return;
152
176
  }
177
+ const byName = new Map();
178
+ for (const r of okResults)
179
+ for (const o of r.value.objects ?? [])
180
+ byName.set(o.package.name, o);
181
+ const merged = { objects: [...byName.values()] };
182
+ const installed = augmentInstalled([...byName.keys()], new Set(status.map(p => p.name)), isPresent);
183
+ res.json({ packages: toMarketplacePackages(merged, installed) });
153
184
  });
154
- // 装前能力披露:fetch npm packument aalis.service(该插件需要/提供哪些服务)。
155
- // 安装前展示给 owner 知情同意。scoped 包名含 /,用 query 传。
156
- expressApp.get('/api/marketplace/manifest', gate('webui:marketplace:read', 'restricted'), async (req, res) => {
185
+ // 依赖图:本地 import 依赖图(name→deps 扫描)+ 运行时服务图(getStatus)合成,供装/卸/装前展示。
186
+ // 两类边:import(链路树,可传递)+ service(每节点直接标注 + 根的提供者解析)。
187
+ // 装前(target 本地不存在):拉一次 packument 取其直接依赖作根种子,深层仍走本地图。
188
+ expressApp.get('/api/marketplace/depgraph', gate(), async (req, res) => {
157
189
  const name = typeof req.query.name === 'string' ? req.query.name.trim() : '';
158
190
  if (!name || !PKG_NAME_RE.test(name)) {
159
191
  res.status(400).json({ error: 'name 必须是合法 npm 包名' });
160
192
  return;
161
193
  }
162
- try {
163
- const base = registryBase.replace(/\/+$/, '') || DEFAULT_REGISTRY;
164
- const r = await fetch(`${base}/${name.replace('/', '%2F')}`, { signal: AbortSignal.timeout(SEARCH_TIMEOUT_MS) });
165
- if (!r.ok)
166
- throw new Error(`npm registry 返回 ${r.status}`);
167
- const manifest = toManifest((await r.json()));
168
- if (!manifest) {
169
- res.json({ manifest: null, warning: '该包无可解析的版本信息' });
170
- return;
194
+ const depMap = getLocalPackages();
195
+ const status = getPluginMgr()?.getStatus() ?? [];
196
+ const svcOf = new Map(status.map(p => [p.name, { provides: p.provides ?? [], requires: p.requiredServices ?? [] }]));
197
+ // target 本地没有(装前浏览)→ 拉 packument 取直接依赖 + 服务,注入工作图当根种子。
198
+ let rootServices;
199
+ let upstreamMap = depMap;
200
+ if (!depMap.has(name)) {
201
+ try {
202
+ const base = registryBase.replace(/\/+$/, '') || DEFAULT_REGISTRY;
203
+ const r = await fetch(`${base}/${name.replace('/', '%2F')}`, {
204
+ signal: AbortSignal.timeout(SEARCH_TIMEOUT_MS),
205
+ });
206
+ if (r.ok) {
207
+ const m = toManifest((await r.json()));
208
+ if (m) {
209
+ upstreamMap = new Map(depMap).set(name, m.dependencies ?? []);
210
+ if (m.service)
211
+ rootServices = { provides: m.service.provides ?? [], requires: m.service.required ?? [] };
212
+ }
213
+ }
214
+ }
215
+ catch {
216
+ /* 拉不到就给空根,不阻断 */
171
217
  }
172
- res.json({ manifest: { ...manifest, name } });
173
- }
174
- catch (err) {
175
- const msg = err instanceof Error ? err.message : String(err);
176
- ctx.logger.debug(`market: 拉取 ${name} manifest 失败: ${msg}`);
177
- res.json({ manifest: null, warning: `无法拉取插件清单(${msg})` });
178
218
  }
219
+ // upstream 放宽 isRelevant 到 @aalis scope:看得见缺失的生态依赖(中断),又不带 express 这类库噪声。
220
+ const isRelevant = (n) => upstreamMap.has(n) || n.startsWith('@aalis/');
221
+ const annotate = (node) => ({
222
+ ...node,
223
+ services: svcOf.get(node.name) ?? (node.name === name ? rootServices : undefined),
224
+ children: node.children.map(annotate),
225
+ });
226
+ const upstream = annotate(buildDependencyChain(name, upstreamMap, 'upstream', { isRelevant }));
227
+ const downstream = annotate(buildDependencyChain(name, depMap, 'downstream'));
228
+ // 根的服务需求 + 提供者解析(已装范围内;未装提供者无法解析——见 docs,留空)。
229
+ const required = (svcOf.get(name)?.requires ?? rootServices?.requires ?? []).map(svc => ({
230
+ service: svc,
231
+ providedBy: status.find(p => p.name !== name && (p.provides ?? []).includes(svc))?.name ?? null,
232
+ }));
233
+ res.json({
234
+ upstream,
235
+ downstream,
236
+ services: { required, provides: svcOf.get(name)?.provides ?? rootServices?.provides ?? [] },
237
+ // 卸载会断服务的依赖者(与卸载路由 409 同口径),供卸载弹窗装前预警。
238
+ serviceDependents: findServiceDependents(name, status),
239
+ });
179
240
  });
180
241
  // 安装:复用 package-manager 的 npm pack 流程;owner 级(安装第三方代码 = 高危)。
181
- expressApp.post('/api/marketplace/install', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
242
+ expressApp.post('/api/marketplace/install', gate(), async (req, res) => {
182
243
  const npmPkg = req.body?.name;
183
244
  if (!npmPkg || typeof npmPkg !== 'string' || !PKG_NAME_RE.test(npmPkg)) {
184
245
  res.status(400).json({ error: 'name 字段必须是合法 npm 包名' });
@@ -196,20 +257,16 @@ export function registerMarketplaceRoutes(expressApp, ctx, getPluginMgr, gate, r
196
257
  res.status(500).json({ error: err instanceof Error ? err.message : String(err) });
197
258
  }
198
259
  });
199
- // 卸载:owner 级。护栏——禁卸核心/契约/WebUI 基础设施;禁卸"删了会断别人服务依赖"的包。
260
+ // 卸载:owner 级。唯一护栏——禁卸"删了会断别人服务依赖"的包(无替代提供者)。
261
+ // 不再保护核心/契约/WebUI 基础设施:用户要切就让其切(基础设施自删的后果自负)。
200
262
  // 真正删目录 + 清残留配置由 package-manager.uninstall 负责。
201
- expressApp.post('/api/marketplace/uninstall', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
263
+ expressApp.post('/api/marketplace/uninstall', gate(), async (req, res) => {
202
264
  const name = req.body?.name;
203
265
  if (!name || typeof name !== 'string' || !PKG_NAME_RE.test(name)) {
204
266
  res.status(400).json({ error: 'name 字段必须是合法 npm 包名' });
205
267
  return;
206
268
  }
207
269
  const status = getPluginMgr()?.getStatus() ?? [];
208
- const entry = status.find(p => p.name === name);
209
- if (isProtectedPackage(name, entry)) {
210
- res.status(400).json({ error: `「${name}」是核心 / 契约 / WebUI 基础设施,禁止从市场卸载` });
211
- return;
212
- }
213
270
  const dependents = findServiceDependents(name, status);
214
271
  if (dependents.length > 0) {
215
272
  res.status(409).json({
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/routes/marketplace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/routes/marketplace.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKlF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,8BAA8B;AAC9B,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,OAAO,CAAC,OAAO,EAC3B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,UAAU,GAAG,SAAS,EACpC,YAAY,EAAE,MAAM,oBAAoB,GAAG,SAAS,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAK,YAAY,GAAG,SAAS,EAC7E,IAAI,EAAE,SAAS,GACd,IAAI,CAmZN"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,8BAA8B;AAC9B,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,OAAO,CAAC,OAAO,EAC3B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,UAAU,GAAG,SAAS,EACpC,YAAY,EAAE,MAAM,oBAAoB,GAAG,SAAS,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAK,YAAY,GAAG,SAAS,EAC7E,IAAI,EAAE,SAAS,GACd,IAAI,CA6XN"}
@@ -2,7 +2,7 @@ import { CORE_CONFIG_SCHEMA } from '@aalis/core';
2
2
  /** 注册插件管理 + 全局配置相关 REST 路由 */
3
3
  export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, identify, gate) {
4
4
  // 获取插件列表及状态
5
- expressApp.get('/api/plugins', gate('webui:plugins:read', 'restricted'), (_req, res) => {
5
+ expressApp.get('/api/plugins', gate(), (_req, res) => {
6
6
  const app = getApp();
7
7
  const pm = getPluginMgr();
8
8
  if (!app || !pm) {
@@ -13,14 +13,11 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
13
13
  // 方便 UI 搜索框命中工具名/指令名时定位到注册插件;能力披露用聚合 capability。
14
14
  const toolsByPlugin = new Map();
15
15
  const capsByPlugin = new Map();
16
- const addCaps = (plugin, perms, visibility) => {
17
- if (!perms?.length && visibility !== 'restricted')
16
+ const addCaps = (plugin, visibility) => {
17
+ if (visibility !== 'restricted')
18
18
  return;
19
19
  const set = capsByPlugin.get(plugin) ?? new Set();
20
- for (const p of perms ?? [])
21
- set.add(p);
22
- if (visibility === 'restricted')
23
- set.add('visibility:restricted');
20
+ set.add('visibility:restricted');
24
21
  capsByPlugin.set(plugin, set);
25
22
  };
26
23
  const tools = ctx.getService('tools')?.getAll() ?? [];
@@ -28,7 +25,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
28
25
  const list = toolsByPlugin.get(t.pluginName) ?? [];
29
26
  list.push(t.name);
30
27
  toolsByPlugin.set(t.pluginName, list);
31
- addCaps(t.pluginName, t.permissions, t.visibility);
28
+ addCaps(t.pluginName, t.visibility);
32
29
  }
33
30
  const commandsByPlugin = new Map();
34
31
  const cmds = ctx.getService('commands')?.getAll() ?? [];
@@ -37,7 +34,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
37
34
  const list = commandsByPlugin.get(owner) ?? [];
38
35
  list.push(c.name);
39
36
  commandsByPlugin.set(owner, list);
40
- addCaps(owner, c.permissions, c.visibility);
37
+ addCaps(owner, c.visibility);
41
38
  }
42
39
  const plugins = pm.getStatus().map(p => ({
43
40
  name: p.name,
@@ -45,8 +42,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
45
42
  displayName: p.displayName,
46
43
  state: p.state,
47
44
  provides: p.provides ?? [],
48
- // 能力披露:该插件「要调用哪些子系统」(inject 依赖)+「触达哪些敏感能力」
49
- // (工具/指令声明的 permissions + dangerous 标记),供安装后知情查看。
45
+ // 能力披露:该插件「要调用哪些子系统」(inject 依赖)+「是否含 restricted 工具/指令」,供安装后知情查看。
50
46
  requiredServices: p.requiredServices ?? [],
51
47
  optionalServices: p.optionalServices ?? [],
52
48
  capabilities: [...(capsByPlugin.get(p.name) ?? [])],
@@ -65,7 +61,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
65
61
  res.json({ plugins });
66
62
  });
67
63
  // 获取可用的 WebUI 页面(由活跃插件通过 useWebuiService.registerPage 注册)
68
- expressApp.get('/api/pages', gate('webui:pages:read', 'public'), (_req, res) => {
64
+ expressApp.get('/api/pages', gate(), (_req, res) => {
69
65
  const app = getApp();
70
66
  const pm = getPluginMgr();
71
67
  if (!app || !pm) {
@@ -111,30 +107,13 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
111
107
  res.status(500).json({ error: `插件 ${pluginName} 上下文不可用` });
112
108
  return;
113
109
  }
114
- // ===== 能力闸门 + 调用者身份 =====
115
- // 调用者从会话解析:账户登录 webui:<username>,单 token 模式 webui:console
116
- // (owner)。未声明 actionsMeta action 默认 restricted(默认拒绝),插件需
117
- // 显式标 visibility:'public' 才能放开。capability `action:<plugin>:<method>`
118
- // authorize 统一闸(支持 per-user grant/deny)。authority 服务缺席时 public 放行、
119
- // restricted 503(与 RouteGate fail-closed 一致)。
120
- const caller = identify(req) ?? { platform: 'webui', userId: 'console' };
121
- const authority = ctx.getService('authority');
122
- const visibility = entry.module.actionsMeta?.[method]?.visibility ?? 'restricted';
123
- if (authority) {
124
- const denied = authority.authorize(caller, {
125
- capability: `action:${pluginName}:${method}`,
126
- visibility,
127
- });
128
- if (denied) {
129
- res.status(403).json({ error: `操作 ${pluginName}/${method} 被拒: ${denied}` });
130
- return;
131
- }
132
- }
133
- else if (visibility === 'restricted') {
134
- // fail-closed:authority 缺席(未配置/bounce 窗口期)无法裁决。
135
- // 未声明 actionsMeta 的 action 默认 restricted,缺席时一律拒绝;只放行
136
- // 显式声明了 public 的 action。避免敏感 action 在权限服务缺位时裸奔。
137
- res.status(503).json({ error: `权限服务不可用,操作 ${pluginName}/${method} 暂时被拒绝` });
110
+ // ===== owner + 调用者身份(单 owner 终态)=====
111
+ // token webui:console owner;auth.middleware 已校 token,这里复核身份并把
112
+ // caller 传给 action。各 action 自身对敏感操作再做 owner 自检(如 setUserTier)。
113
+ // 多账户的 action: 能力委托(per-user grant/deny / actionsMeta 可见性)已剥离。
114
+ const caller = identify(req);
115
+ if (!caller) {
116
+ res.status(403).json({ error: `操作 ${pluginName}/${method} 需要 owner 权限` });
138
117
  return;
139
118
  }
140
119
  try {
@@ -147,12 +126,12 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
147
126
  }
148
127
  });
149
128
  // 获取当前全局配置
150
- expressApp.get('/api/config', gate('webui:config:read', 'restricted'), (_req, res) => {
129
+ expressApp.get('/api/config', gate(), (_req, res) => {
151
130
  const allConfig = ctx.config.getAll();
152
131
  res.json({ ...allConfig, _schema: CORE_CONFIG_SCHEMA });
153
132
  });
154
133
  // 更新全局配置字段
155
- expressApp.put('/api/config', gate('webui:config:write', 'restricted'), (req, res) => {
134
+ expressApp.put('/api/config', gate(), (req, res) => {
156
135
  const updates = req.body;
157
136
  if (!updates || typeof updates !== 'object') {
158
137
  res.status(400).json({ error: '请求体必须是对象' });
@@ -189,13 +168,13 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
189
168
  }
190
169
  });
191
170
  // 获取单个插件的原始配置(未脱敏,给编辑器用)
192
- expressApp.get('/api/plugins/:name/config', gate('webui:config:read', 'restricted'), (req, res) => {
171
+ expressApp.get('/api/plugins/:name/config', gate(), (req, res) => {
193
172
  const pluginName = req.params.name;
194
173
  const pluginConfig = ctx.config.getPluginConfig(pluginName);
195
174
  res.json({ name: pluginName, config: pluginConfig });
196
175
  });
197
176
  // 更新插件配置
198
- expressApp.put('/api/plugins/:name/config', gate('webui:config:write', 'restricted'), async (req, res) => {
177
+ expressApp.put('/api/plugins/:name/config', gate(), async (req, res) => {
199
178
  const pluginName = req.params.name;
200
179
  const newConfig = req.body?.config;
201
180
  if (!newConfig || typeof newConfig !== 'object') {
@@ -218,7 +197,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
218
197
  }
219
198
  });
220
199
  // 启用插件
221
- expressApp.post('/api/plugins/:name/enable', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
200
+ expressApp.post('/api/plugins/:name/enable', gate(), async (req, res) => {
222
201
  const pluginName = req.params.name;
223
202
  const app = getApp();
224
203
  const pm = getPluginMgr();
@@ -236,7 +215,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
236
215
  }
237
216
  });
238
217
  // 禁用插件
239
- expressApp.post('/api/plugins/:name/disable', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
218
+ expressApp.post('/api/plugins/:name/disable', gate(), async (req, res) => {
240
219
  const pluginName = req.params.name;
241
220
  const app = getApp();
242
221
  const pm = getPluginMgr();
@@ -254,7 +233,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
254
233
  }
255
234
  });
256
235
  // 重新扫描 packages/ 并加载新插件
257
- expressApp.post('/api/plugins/scan', gate('webui:plugins:manage', 'restricted'), async (_req, res) => {
236
+ expressApp.post('/api/plugins/scan', gate(), async (_req, res) => {
258
237
  const app = getApp();
259
238
  const pm = getPluginMgr();
260
239
  if (!app || !pm) {
@@ -271,7 +250,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
271
250
  }
272
251
  });
273
252
  // 安装插件(从 npm 下载到 packages/ 并加载)
274
- expressApp.post('/api/plugins/install', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
253
+ expressApp.post('/api/plugins/install', gate(), async (req, res) => {
275
254
  const app = getApp();
276
255
  const pm = getPluginMgr();
277
256
  if (!app || !pm) {
@@ -302,7 +281,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
302
281
  }
303
282
  });
304
283
  // 卸载插件
305
- expressApp.post('/api/plugins/:name/uninstall', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
284
+ expressApp.post('/api/plugins/:name/uninstall', gate(), async (req, res) => {
306
285
  const app = getApp();
307
286
  const pm = getPluginMgr();
308
287
  if (!app || !pm) {
@@ -325,7 +304,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
325
304
  }
326
305
  });
327
306
  // 创建插件多实例
328
- expressApp.post('/api/plugins/:name/instances', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
307
+ expressApp.post('/api/plugins/:name/instances', gate(), async (req, res) => {
329
308
  const moduleName = req.params.name;
330
309
  const suffix = req.body?.suffix;
331
310
  const config = req.body?.config ?? {};
@@ -353,7 +332,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
353
332
  }
354
333
  });
355
334
  // 删除插件多实例
356
- expressApp.delete('/api/plugins/:instanceId/instance', gate('webui:plugins:manage', 'restricted'), async (req, res) => {
335
+ expressApp.delete('/api/plugins/:instanceId/instance', gate(), async (req, res) => {
357
336
  const instanceId = req.params.instanceId;
358
337
  const app = getApp();
359
338
  const pm = getPluginMgr();
@@ -371,7 +350,7 @@ export function registerPluginRoutes(expressApp, ctx, getApp, getPluginMgr, iden
371
350
  }
372
351
  });
373
352
  // 保存配置到磁盘
374
- expressApp.post('/api/config/save', gate('webui:config:write', 'restricted'), (_req, res) => {
353
+ expressApp.post('/api/config/save', gate(), (_req, res) => {
375
354
  const app = getApp();
376
355
  const pm = getPluginMgr();
377
356
  if (!app || !pm) {