@aalis/plugin-webui-server 0.18.0 → 0.19.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.
@@ -3,20 +3,20 @@ import type { HostConfig } from '@aalis/api-host-config';
3
3
  import { type SessionManagerService } from '@aalis/api-session-manager';
4
4
  import type { AttentionItem, Notice, PluginBlockers, WebuiAdminEvent } from '@aalis/api-webui';
5
5
  import type { PluginManagerService, PluginStatusEntry, ServiceSelection, Services } from '@aalis/core';
6
- /** 算插件没起来的原因要读的:插件状态与定义、当前有提供者的服务名、配置文档(宿主不提供时读运行态配置) */
6
+ /** 算插件未启动的原因要读的:插件状态与定义、当前有提供者的服务名、配置文档(宿主不提供时读运行态配置) */
7
7
  interface BlockerSources {
8
8
  plugins: Pick<PluginManagerService, 'getStatus' | 'getPlugin'>;
9
9
  services: Pick<Services, 'names'>;
10
10
  doc?: Pick<HostConfig, 'getPluginConfig'>;
11
11
  }
12
- /** 插件状态快照,每个实例带上没起来的原因 */
12
+ /** 插件状态快照,每个实例带上未启动的原因 */
13
13
  export declare function blockedStatus({ plugins, services, doc }: BlockerSources): Array<PluginStatusEntry & PluginBlockers>;
14
14
  interface AttentionDeps {
15
15
  /** 推出未结的审批;审批服务不在时没有 */
16
16
  approvals(): readonly Approval[];
17
17
  /** 会话管理:审批所在会话的标题(没有标题时是会话的显示名称) */
18
18
  sessions: Pick<ServiceSelection<Pick<SessionManagerService, 'getSession'>>, 'present' | 'use'>;
19
- /** 插件状态与没起来的原因;插件管理服务不在时为空 */
19
+ /** 插件状态与未启动的原因;插件管理服务不在时为空 */
20
20
  plugins(): ReadonlyArray<PluginStatusEntry & PluginBlockers>;
21
21
  /** 登记着的提示,带所属实例 */
22
22
  notices(): ReadonlyArray<Notice & {
package/dist/attention.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // ============================================================
2
- // attention.ts — 插件没起来的原因与「需要处理」
2
+ // attention.ts — 插件未启动的原因与「需要处理」
3
3
  //
4
- // 插件没起来的原因(缺、在等、待配置)在这里算一份,插件列表与「需要处理」共用:缺与在等按 api-doctor 的共享判据沿依赖链
4
+ // 插件未启动的原因(缺、在等、待配置)在这里算一份,插件列表与「需要处理」共用:缺与在等按 api-doctor 的共享判据沿依赖链
5
5
  // 追到根,与 runtime 的启动告警、诊断同一说法;失败的另按配置 schema 校验它的配置,列出必填却没填的项。
6
6
  //
7
7
  // 「需要处理」:推出未结的审批、插件故障(失败与缺服务;只在等别的插件启动的不算)与插件的提示汇总成一个列表,每项计 1,
@@ -11,7 +11,7 @@
11
11
  import { failureText, unmetDependencies } from '@aalis/api-doctor';
12
12
  import { sessionLabel } from '@aalis/api-session-manager';
13
13
  import { validateConfig } from '@aalis/schema-config';
14
- /** 插件状态快照,每个实例带上没起来的原因 */
14
+ /** 插件状态快照,每个实例带上未启动的原因 */
15
15
  export function blockedStatus({ plugins, services, doc }) {
16
16
  const status = plugins.getStatus();
17
17
  const unmet = unmetDependencies(status, services.names());
package/dist/auth.js CHANGED
@@ -331,7 +331,7 @@ export function openBrowser(url, proc) {
331
331
  // 让 stdin 为 null、那条 handler 也挂不上——于是 handle 上零 error 监听。
332
332
  // spawn 失败(headless Linux/Docker 无 xdg-open 是常态)是**异步 emit**,
333
333
  // 外层 try/catch 接不住,直达 uncaughtException → runtime 的 process.exit(1),
334
- // 把整个 bot 打死。而这只是个「顺手开浏览器」的便利功能。
334
+ // 把整个 bot 终止。而这只是个「启动时同时打开浏览器」的便利功能。
335
335
  void handle.wait().catch(() => {
336
336
  /* 打不开浏览器不影响服务;这里只是给 handle 挂上 error 监听 */
337
337
  });
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export interface DiscoveryEnv {
17
17
  /**
18
18
  * 发现所有前端包:在 scanDirs 各目录下逐子目录、以及 depIds(项目根 deps)里,收录 package.json
19
19
  * 标了 `aalis.client:true` 且其 `dist/index.html` 存在的包。按包名去重,再按 id 排序(确定性输出)。
20
- * 活跃前端由 webui-client 服务解析决定(偏好 > 优先级 > 注册顺序),本函数只负责发现、不做偏好判断、
20
+ * 活跃前端由 webui-client 服务解析决定(偏好 > 优先级 > 位次),本函数只负责发现、不做偏好判断、
21
21
  * 不认任何具体名字。
22
22
  */
23
23
  export declare function discoverClients(scanDirs: string[], depIds: string[], env: DiscoveryEnv): ClientCandidate[];
@@ -6,7 +6,7 @@
6
6
  /**
7
7
  * 发现所有前端包:在 scanDirs 各目录下逐子目录、以及 depIds(项目根 deps)里,收录 package.json
8
8
  * 标了 `aalis.client:true` 且其 `dist/index.html` 存在的包。按包名去重,再按 id 排序(确定性输出)。
9
- * 活跃前端由 webui-client 服务解析决定(偏好 > 优先级 > 注册顺序),本函数只负责发现、不做偏好判断、
9
+ * 活跃前端由 webui-client 服务解析决定(偏好 > 优先级 > 位次),本函数只负责发现、不做偏好判断、
10
10
  * 不认任何具体名字。
11
11
  */
12
12
  export function discoverClients(scanDirs, depIds, env) {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  declare const _default: import("@aalis/core").PluginDefinition<{
2
- events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
2
+ events: import("@aalis/core").OptionalUse<import("@aalis/api-events").EventBus, import("@aalis/api-events").Events>;
3
3
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
4
4
  lifecycle: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").LifecycleCap, import("@aalis/core").LifecycleCap>;
5
5
  config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
@@ -9,8 +9,9 @@ declare const _default: import("@aalis/core").PluginDefinition<{
9
9
  /** 日志页的历史(/api/logs/*)与 /admin 上的实时推送 */
10
10
  logs: import("@aalis/core").OptionalUse<import("@aalis/api-host-logs").HostLogs, import("@aalis/api-host-logs").HostLogs>;
11
11
  paths: import("@aalis/core").OptionalUse<import("@aalis/api-host-paths").HostPaths, import("@aalis/api-host-paths").HostPaths>;
12
- app: import("@aalis/core").OptionalUse<import("@aalis/core").AppService, import("@aalis/core").AppService>;
13
- plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
12
+ /** 设置页的重启按钮(POST /api/restart);宿主不提供重启时回 500 */
13
+ restart: import("@aalis/core").OptionalUse<import("@aalis/api-host-restart").HostRestart, import("@aalis/api-host-restart").HostRestart>;
14
+ plugins: import("@aalis/core").OptionalUse<(identity: symbol) => import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
14
15
  source: import("@aalis/core").OptionalUse<import("@aalis/api-plugin-source").PluginSourceService, import("@aalis/api-plugin-source").PluginSourceService>;
15
16
  packageManager: import("@aalis/core").OptionalUse<import("@aalis/api-package-manager").PackageManagerService, import("@aalis/api-package-manager").PackageManagerService>;
16
17
  storage: import("@aalis/core").OptionalUse<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;IAmOE,yCAAyC;;;;;;;;;;;IAYzC,2DAA2D;;IAE3D,iEAAiE;;IAEjE,iCAAiC;;;;IAIjC,gDAAgD;;IAEhD,0DAA0D;;IAE1D,4CAA4C;;;AAK9C,wBAQG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;IAyOE,yCAAyC;;;IAGzC,gDAAgD;;;;;;;;;IAUhD,2DAA2D;;IAE3D,iEAAiE;;IAEjE,iCAAiC;;;;IAIjC,gDAAgD;;IAEhD,0DAA0D;;IAE1D,4CAA4C;;;AAK9C,wBAQG"}
package/dist/index.js CHANGED
@@ -9,9 +9,11 @@ import { pathToFileURL } from 'node:url';
9
9
  import { approvals } from '@aalis/api-approval';
10
10
  import { commands } from '@aalis/api-commands';
11
11
  import { contributions } from '@aalis/api-contributions';
12
+ import { events } from '@aalis/api-events';
12
13
  import { hostConfig } from '@aalis/api-host-config';
13
14
  import { hostLogs } from '@aalis/api-host-logs';
14
15
  import { hostPaths } from '@aalis/api-host-paths';
16
+ import { hostRestart } from '@aalis/api-host-restart';
15
17
  import { i18n } from '@aalis/api-i18n';
16
18
  import { llm, modelRefOf, resolveLLMModel } from '@aalis/api-llm';
17
19
  import { messageArchive } from '@aalis/api-message-archive';
@@ -24,7 +26,7 @@ import { sessionProtocol } from '@aalis/api-session-protocol';
24
26
  import { storage } from '@aalis/api-storage';
25
27
  import { tools } from '@aalis/api-tools';
26
28
  import { CLIENT_TEXTS_FILE, parseTheme, webuiClient, webuiServer, } from '@aalis/api-webui';
27
- import { appService, config, definePlugin, events, lifecycle, logger, optional, pluginsService, provide, services, } from '@aalis/core';
29
+ import { appService, config, definePlugin, lifecycle, logger, optional, pluginsService, provide, services, } from '@aalis/core';
28
30
  import { configError, defineConfig, parseConfig } from '@aalis/schema-config';
29
31
  import { asText, isTextError, registerCatalogEntry, textLines, textOf, toSource, } from '@aalis/schema-i18n';
30
32
  import express from 'express';
@@ -62,6 +64,8 @@ const browserOpenedFor = new WeakSet();
62
64
  * 防猜靠的是 token 本身够长:32 个十六进制字符是 128 位
63
65
  */
64
66
  const FIXED_TOKEN_MIN_LENGTH = 32;
67
+ /** 扫描发现、由本插件代登记的前端的优先级:低于插件主动提供的(缺省 0),主动覆盖默认胜出 */
68
+ const DISCOVERED_CLIENT_PRIORITY = -1;
65
69
  /** 文档级 CSP */
66
70
  const DOCUMENT_CSP = [
67
71
  "default-src 'self'",
@@ -167,8 +171,10 @@ function localScanDirs(appDir) {
167
171
  // storage 等一律 optional:webui 是管理面,任何被管对象缺席都只该让对应页面降级,不该把
168
172
  // 整个控制台拖进 pending。storage 尤其不能 required——storage 的提供者 bounce 会让它
169
173
  // 暂时消失,webui-server 跟着重启会断开所有连接、清空页面登记表(登记门面随后重挂)。
174
+ // events 同理:总线由插件提供、可以在管理页停用,required 的话停用它本插件随之下线,停用又已写进配置,只能手改配置文件
175
+ // 救回。监听经归属表登记,总线不在时留着,回来后补挂
170
176
  const uses = {
171
- events,
177
+ events: optional(events),
172
178
  logger,
173
179
  lifecycle,
174
180
  config,
@@ -178,7 +184,8 @@ const uses = {
178
184
  /** 日志页的历史(/api/logs/*)与 /admin 上的实时推送 */
179
185
  logs: optional(hostLogs),
180
186
  paths: optional(hostPaths),
181
- app: optional(appService),
187
+ /** 设置页的重启按钮(POST /api/restart);宿主不提供重启时回 500 */
188
+ restart: optional(hostRestart),
182
189
  plugins: optional(pluginsService),
183
190
  source: optional(pluginSource),
184
191
  packageManager: optional(packageManager),
@@ -276,7 +283,7 @@ async function startWebuiServer(caps) {
276
283
  }
277
284
  // persist 的读回跟随 storage:storage 是 optional、不参与激活拓扑,可能晚于本插件上线
278
285
  // (加载顺序、启动时配置出错后修好、运行时才启用)。只在 apply 里读一次会读空:内存里是新随机
279
- // token,持久化的那份不生效,已登录的浏览器全部被登出;没有 token 文件时也永远建不起来。
286
+ // token,持久化的那份不生效,已登录的浏览器全部被登出;没有 token 文件时也永远无法建立。
280
287
  // follow 对已在线的 storage 同步首挂,晚上线时补读。持久化的那份优先(浏览器里 30 天的 cookie
281
288
  // 就是它);只认第一次成功,之后 storage 换人不再换 token。
282
289
  let tokenSettled = uiConfig.tokenMode === 'ephemeral' || fixedToken !== '';
@@ -374,10 +381,12 @@ async function startWebuiServer(caps) {
374
381
  onError: (_ws, err) => logger.use.warn(`WebUI 客户端连接错误: ${err.message}`),
375
382
  });
376
383
  // 前端静态文件托管:前端包不是插件(无 apply,纯静态资源),托管权在本插件——
377
- // app:ready 时由 client-discovery 按 `aalis.client` 标记发现候选,本插件把每个候选注册成
378
- // 一条 webui-client 服务 provider,再由服务解析(偏好 > 优先级 > 注册顺序)定出活跃前端。
384
+ // 就绪时由 client-discovery 按 `aalis.client` 标记发现候选,本插件把每个候选注册成
385
+ // 一条 webui-client 服务 provider,再由服务解析(偏好 > 优先级 > 位次)定出活跃前端。
379
386
  let clientDist = '';
380
387
  let staticMiddleware = null;
388
+ /** 就绪时登记过扫描到的前端、挂过活跃前端;之后才跟着插件的上线与下线重挂 */
389
+ let clientsReady = false;
381
390
  function mountStaticDir(dir) {
382
391
  if (existsSync(dir)) {
383
392
  // 入口 index.html 不由它给:SPA 兜底写好 <html lang> 再发
@@ -413,23 +422,23 @@ async function startWebuiServer(caps) {
413
422
  if (refused > 0)
414
423
  logger.use.warn(`前端的字典 ${file} 里有 ${refused} 条不合格,没有登记`);
415
424
  }
416
- // 已发现的前端候选(app:ready 时填充,逐个注册为 webui-client 服务 provider)。
425
+ // 已发现的前端候选(就绪时填充,逐个注册为 webui-client 服务 provider)。
417
426
  const clientCandidates = [];
418
427
  /**
419
428
  * 候选 id → 它那条 webui-client provider 的注销句柄。
420
429
  *
421
430
  * 单独一张表而不是往 ClientCandidate 上加字段:那个类型是 client-discovery 的产出契约,
422
- * 「怎么注销」是本文件的注册细节,不该反向污染它。对账时只从数组里删掉候选是不够的——
431
+ * 「怎么注销」是本文件的注册细节,不该反向污染它。核对时只从数组里删掉候选是不够的——
423
432
  * 服务池里那条 provider 还在,仍可能被解析到一个已删除的目录。
424
433
  */
425
434
  const clientProviderDisposers = new Map();
426
- /** 当前活跃前端目录 = 解析后的 webui-client 服务(servicePreferences 偏好 > 优先级 > 注册顺序)。 */
435
+ /** 当前活跃前端目录 = 解析后的 webui-client 服务(servicePreferences 偏好 > 优先级 > 位次)。 */
427
436
  function currentClientDir() {
428
437
  // 动态查而不写进 uses:条目多由本插件代前端包登记,声明它会让本插件的按插件偏好也改到选择,静态目录的重挂只跟全局偏好
429
438
  return services.use.get(webuiClient)?.getClientDir?.();
430
439
  }
431
440
  /**
432
- * 活跃前端可能变了时调用(改或清除 webui-client 的服务偏好、摘掉已不在的前端包):重挂当前活跃前端,
441
+ * 活跃前端可能变了时调用(改或清除 webui-client 的服务偏好、摘掉已不在的前端包、插件上线或下线换了胜者):重挂当前活跃前端,
433
442
  * 经 /admin 推 client.reload 让页面整页重载,换前端不重启进程。
434
443
  */
435
444
  function remountActiveClient() {
@@ -451,7 +460,7 @@ async function startWebuiServer(caps) {
451
460
  });
452
461
  // ---------- REST API ----------
453
462
  // ---------- 插件管理 + 全局配置 ----------
454
- // fs 扫描 env:discoverClients(app:ready 时)与市场「已装」兜底共用一份,避免两处重复。
463
+ // fs 扫描 env:discoverClients(就绪时)与市场「已装」兜底共用一份,避免两处重复。
455
464
  const fsScanEnv = {
456
465
  existsSync,
457
466
  readdirSync: (p) => {
@@ -477,7 +486,7 @@ async function startWebuiServer(caps) {
477
486
  const appDir = caps.paths.present ? caps.paths.use.app : undefined;
478
487
  const scanDirs = localScanDirs(appDir);
479
488
  registerPluginRoutes(expressApp, {
480
- app: caps.app,
489
+ restart: caps.restart,
481
490
  plugins: caps.plugins,
482
491
  source: caps.source,
483
492
  hostConfig: caps.hostConfig,
@@ -580,7 +589,7 @@ async function startWebuiServer(caps) {
580
589
  const serviceNames = services.use.names();
581
590
  const detail = {};
582
591
  for (const svcName of serviceNames) {
583
- // 枚举已按「偏好 > 优先级 > 注册顺序」排序,附带 priority 字段;只取登记元数据,不取实例
592
+ // 枚举已按「偏好 > 优先级 > 位次」排序,附带 priority 字段;只取登记元数据,不取实例
584
593
  const entries = services.use.inspect(svcName);
585
594
  detail[svcName] = {
586
595
  providers: entries.map(e => ({
@@ -597,7 +606,7 @@ async function startWebuiServer(caps) {
597
606
  });
598
607
  /**
599
608
  * 改服务偏好,contextId 为 null 即清除:scope 不给 `for` 是全局偏好,给了是只对那个插件实例的本插件偏好。
600
- * 挑选规则:本插件偏好 > 全局偏好 > priority > 注册顺序。偏好要跨重启保留就得写进文档(servicePreferences /
609
+ * 挑选规则:本插件偏好 > 全局偏好 > priority > 位次。偏好要跨重启保留就得写进文档(servicePreferences /
601
610
  * pluginServicePreferences),宿主没提供文档时不动运行态
602
611
  */
603
612
  const changePreference = async (svcName, contextId, scope, res) => {
@@ -712,7 +721,7 @@ async function startWebuiServer(caps) {
712
721
  }
713
722
  // 深度思考的档位:可选项依赖「模型」这一项,dependency 带它的值(条目 id,按 api-llm 的写法拆);没带时没有可选项,
714
723
  // 不替调用方挑模型。默认档标 default(没设时界面据它写按哪一档跑),模型不能调时没有可选项。labels 是各模型声明过的
715
- // 档位的名字(同一个 id 取先登记的):换了模型以后存着的档位不在可选项里,界面按它写出名字
724
+ // 档位的名字(同一个 id 取 list() 里排在前面的那一家的):换了模型以后存着的档位不在可选项里,界面按它写出名字
716
725
  if (serviceName === 'llm-thinking') {
717
726
  const { dependency } = req.query;
718
727
  const ref = typeof dependency === 'string' ? modelRefOf(dependency) : undefined;
@@ -787,7 +796,7 @@ async function startWebuiServer(caps) {
787
796
  }
788
797
  return;
789
798
  }
790
- // 合起各提供者的取值(人设卡等服务走 listModels())
799
+ // 合并各提供者的取值(人设卡等服务走 listModels())
791
800
  const allProviders = services.use.all(serviceName);
792
801
  const models = [];
793
802
  for (const provider of allProviders) {
@@ -832,15 +841,20 @@ async function startWebuiServer(caps) {
832
841
  // 管理面推送(/admin):日志、插件状态、「需要处理」、重启。页面登记表与提示的变化、invalidate 在页面登记表(pages.ts)里推,
833
842
  // 布局记录的变化在它的路由里推,换前端在 remountActiveClient 里推
834
843
  caps.logs.use.subscribe(entry => admin.send({ type: 'log', entry }));
835
- events.use.on('plugins:changed', () => {
844
+ caps.plugins.follow(plugins => plugins.watch(() => {
836
845
  admin.send({ type: 'plugins.changed' });
837
846
  attention.pluginsChanged();
838
- });
847
+ // 主动提供前端的插件运行中上线或下线,webui-client 的胜者随之换人:目录换了才重挂
848
+ const dir = currentClientDir();
849
+ if (clientsReady && dir && dir !== clientDist)
850
+ remountActiveClient();
851
+ }));
839
852
  // 宿主配置文档变了(插件详情保存、手改配置文件、会话设置写全局层与偏好):插件详情与界面语言据它重取
840
853
  events.use.on('host-config:changed', () => admin.send({ type: 'plugins.changed' }));
841
854
  events.use.on('approval:created', () => attention.changed());
842
855
  events.use.on('approval:settled', () => attention.changed());
843
- events.use.on('app:restarting', () => admin.send({ type: 'app.restarting' }));
856
+ // 收尾时连接都还在:告诉管理页服务端要关了,它据此在重连上以后整页重新加载
857
+ lifecycle.use.onDrain(() => admin.send({ type: 'server.closing' }), '通知管理页服务端正在关闭');
844
858
  // 发往 WebUI 自己会话的出站消息:会话历史就是 WebUI 的收件箱,页面只是查看器,打开着的页面由会话服务推送。
845
859
  // 回执表示这条消息已经由存档记进会话历史(recordOutbound),不看有没有页面在线;送达就是写进历史,不另发 outbound:delivered。
846
860
  // owner 从 WebUI 驱动的 IM 房间(根会话记下了出生平台)由那个平台的适配器认领,子会话没有窗口、由存档认领
@@ -961,7 +975,7 @@ async function startWebuiServer(caps) {
961
975
  }
962
976
  }
963
977
  const scanned = discoverClients(scanDirs, depIds, env);
964
- // 对账:本轮扫不到的候选要摘掉,不能只增不删。卸载现在会真删 node_modules,
978
+ // 核对:本轮扫不到的候选要摘掉,不能只增不删。卸载现在会真删 node_modules,
965
979
  // 留着的候选指向一个已不存在的目录——它仍在服务池里,被解析到就是整站 404。
966
980
  const scannedIds = new Set(scanned.map(c => c.id));
967
981
  let removed = 0;
@@ -976,7 +990,7 @@ async function startWebuiServer(caps) {
976
990
  logger.use.info(`前端已消失,摘除候选: ${stale.label} (${stale.dir})`);
977
991
  }
978
992
  // 摘掉 provider 只改了「服务解析结果」,**真正服务 HTTP 的是 clientDist / staticMiddleware**,
979
- // 它们在 app:ready 时绑定、之后只由 remountActiveClient 更新。不重挂的话,被摘掉的正好是当前
993
+ // 它们在就绪时绑定、之后只由 remountActiveClient 更新。不重挂的话,被摘掉的正好是当前
980
994
  // 活跃前端时,express.static 仍指向已删目录 —— 请求落到 SPA 兜底、`index.html` 不存在
981
995
  // → 整站 404,而服务池里明明还有别的可用前端。切换偏好那条路径早就这么做了,这里对齐。
982
996
  if (removed > 0)
@@ -984,32 +998,37 @@ async function startWebuiServer(caps) {
984
998
  const fresh = pickFreshClients(clientCandidates.map(c => c.id), scanned);
985
999
  clientCandidates.push(...fresh);
986
1000
  // 把每个新发现的前端注册为 webui-client 服务的一个 provider(带 label,供服务偏好里切换)。
987
- // 外部插件在 apply 里主动提供 webui-client 的也已在服务池中(注册更早 → 默认胜出,仍可被偏好切换)。
1001
+ // 代登记的优先级是 -1:外部插件在 apply 里主动提供的 webui-client(缺省 0)默认胜出,不看谁先登记,仍可被偏好切换。
988
1002
  //
989
1003
  // 代前端包登记:条目身份是前端**包名本身**——它是服务偏好里展示的 contextId,也是
990
1004
  // servicePreferences['webui-client'] 里持久化的键,还是装卸闸按包名比对的对象。
991
1005
  for (const candidate of fresh) {
992
- clientProviderDisposers.set(candidate.id, provide.use(webuiClient, { getClientDir: () => candidate.dir }, { label: candidate.label, entryId: candidate.id }));
1006
+ clientProviderDisposers.set(candidate.id, provide.use(webuiClient, { getClientDir: () => candidate.dir }, { label: candidate.label, entryId: candidate.id, priority: DISCOVERED_CLIENT_PRIORITY }));
993
1007
  logger.use.info(`发现前端: ${candidate.label} (${candidate.dir})`);
994
1008
  }
995
1009
  }
996
1010
  // 启动服务器
997
- events.use.on('app:ready', async () => {
998
- // 冷启动时 storage 的激活在 app:ready 之前收敛;等晚到的读回落定,listen / autoOpen /
1011
+ lifecycle.use.onReady(async () => {
1012
+ // 冷启动时 storage 的激活在就绪之前收敛;等晚到的读回落定,listen / autoOpen /
999
1013
  // access.txt 用的就是持久化的 token
1000
1014
  if (tokenLoading)
1001
1015
  await tokenLoading;
1002
- // 等插件状态机静置再登记扫描到的前端:bounce 后 sticky 的 app:ready 在本实例激活途中补发,立刻登记会落在
1003
- // provides 核对之前(dev 多报「未在 provides 中声明」),等过之后与冷启动一样晚于全部激活,主动覆盖仍先登记。
1004
- // 代价:重算一直不收敛时,前端要等它收敛后才登记与挂上
1005
- if (caps.plugins.present)
1006
- await caps.plugins.use.idle();
1016
+ // 等插件状态机静置再登记扫描到的前端、挂活跃前端:重启出来的新实例在自己激活落定后就跑就绪回调,随它重启的插件此刻还没
1017
+ // 激活完;等过之后与冷启动一样晚于全部激活,主动提供前端的插件已经上线,下面挂上的才是它(此后在改偏好、摘除前端、
1018
+ // 插件上线或下线换了胜者时重挂)。代价:重算一直不收敛时,前端要等它收敛后才登记与挂上。
1019
+ // 与取消信号赛跑:等待期间本实例开始关闭时,关闭要等这个回调落定,而静置又要等这次关闭
1020
+ const { signal } = lifecycle.use;
1021
+ if (caps.plugins.present && !signal.aborted)
1022
+ await Promise.race([
1023
+ caps.plugins.use.idle(),
1024
+ new Promise(resolve => signal.addEventListener('abort', () => resolve(), { once: true })),
1025
+ ]);
1007
1026
  // 等待期间本实例可能已开始关闭(bounce、disable、unload)。醒来照常登记、listen 的话,它成了占着端口的旧实例:
1008
1027
  // 接手的新实例 listen 报 EADDRINUSE,禁用之后端口照样应答
1009
- if (lifecycle.use.signal.aborted)
1028
+ if (signal.aborted)
1010
1029
  return;
1011
1030
  discoverAndProvideClients();
1012
- // 活跃前端 = 解析后的 webui-client 服务(servicePreferences 偏好 > 优先级 > 注册顺序);零前端则 404。
1031
+ // 活跃前端 = 解析后的 webui-client 服务(servicePreferences 偏好 > 优先级 > 位次);零前端则 404。
1013
1032
  const activeDir = currentClientDir();
1014
1033
  if (activeDir) {
1015
1034
  clientDist = activeDir;
@@ -1019,10 +1038,11 @@ async function startWebuiServer(caps) {
1019
1038
  else {
1020
1039
  logger.use.warn('未发现任何前端(webui-client provider);前端路由将 404,请安装一个 aalis.client 包');
1021
1040
  }
1041
+ clientsReady = true;
1022
1042
  // 监听失败(典型 EADDRINUSE:3000 被别的 dev server 占了)是 bind 之后**异步 emit** 的,
1023
1043
  // 不在任何调用栈内,外层 try/catch 接不住 —— 无人处理即 uncaughtException →
1024
- // runtime 的 process.exit(1),把聊天适配器、定时任务连同整个 bot 一起打死。
1025
- // 契约本该是「WebUI 起不来、其余照跑」(plugin-activation 的插件失败隔离)。
1044
+ // runtime 的 process.exit(1),把聊天适配器、定时任务连同整个 bot 一起终止。
1045
+ // 契约本该是「WebUI 无法启动、其余照常运行」(plugin-activation 的插件失败隔离)。
1026
1046
  //
1027
1047
  // **必须挂在 wss 上,挂 server 上是死代码。** `new WebSocketServer({ server })` 构造时
1028
1048
  // 已给 http server 挂了一条 'error' 监听(内容是 `this.emit.bind(this, 'error')`,转发给