@aalis/plugin-doctor 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,7 @@ pnpm add @aalis/plugin-doctor
13
13
  `definePlugin` 默认导出:
14
14
 
15
15
  - provides:`doctor`
16
- - uses:`provide`、`logger`、`events`、`services`;可选 `plugins`、`commands`、`webui`(`webui-server`)
16
+ - uses:`provide`、`logger`、`events`、`services`;可选 `plugins`、`commands`、`webui`(`webui-server`)、`hostConfig`(`host-config`)
17
17
 
18
18
  ## 文档
19
19
 
package/dist/index.d.ts CHANGED
@@ -1,14 +1,21 @@
1
1
  import { type DoctorReport } from '@aalis/api-doctor';
2
- import { type PluginManagerService, type ServiceRef, type Services } from '@aalis/core';
2
+ import { type HostConfig } from '@aalis/api-host-config';
3
+ import { type PluginManagerService, type Services } from '@aalis/core';
4
+ import { type TextRef } from '@aalis/schema-i18n';
3
5
  declare const _default: import("@aalis/core").PluginDefinition<{
4
6
  provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
5
7
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
6
8
  events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
7
9
  services: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Services, Services>;
8
- plugins: import("@aalis/core").OptionalUse<PluginManagerService, ServiceRef<PluginManagerService>>;
10
+ plugins: import("@aalis/core").OptionalUse<PluginManagerService, PluginManagerService>;
9
11
  commands: import("@aalis/core").OptionalUse<import("@aalis/api-commands").CommandService, import("@aalis/api-commands").BoundCommands>;
10
12
  webui: import("@aalis/core").OptionalUse<import("@aalis/api-webui").WebUIService, import("@aalis/api-webui").BoundWebui>;
13
+ hostConfig: import("@aalis/core").OptionalUse<HostConfig, HostConfig>;
11
14
  }>;
12
15
  export default _default;
13
- export declare function formatReport(report: DoctorReport): string;
16
+ /**
17
+ * /doctor 的回复:聊天栏排版,按 level 分组,加换行,避免一坨平铺。整份报告是文字对象,出口按读者的语言渲染;各检查项的
18
+ * message 与 detail 原样作参数,detail 逐行缩进(见 detailLines)
19
+ */
20
+ export declare function formatReport(report: DoctorReport): TextRef;
14
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAML,KAAK,oBAAoB,EAIzB,KAAK,UAAU,EACf,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;;;;;;;;;;AAuHrB,wBAkCG;AAiHH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA+BzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EAMlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,UAAU,EAAc,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAML,KAAK,oBAAoB,EAIzB,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAmB,KAAK,OAAO,EAAqB,MAAM,oBAAoB,CAAC;;;;;;;;;;;AA6GtF,wBAoGG;AAiLH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CA2B1D"}
package/dist/index.js CHANGED
@@ -1,8 +1,11 @@
1
1
  import { version as nodeVersion, platform } from 'node:process';
2
2
  import { commands } from '@aalis/api-commands';
3
- import { doctor, } from '@aalis/api-doctor';
3
+ import { describeUnmet, doctor, failureText, unmetDependencies, } from '@aalis/api-doctor';
4
+ import { hostConfig } from '@aalis/api-host-config';
4
5
  import { webuiServer } from '@aalis/api-webui';
5
6
  import { definePlugin, events, logger, optional, pluginsService, provide, services, } from '@aalis/core';
7
+ import { asText, linesOf, textLines, textOf } from '@aalis/schema-i18n';
8
+ import { t } from './texts.js';
6
9
  const PLUGIN_NAME = '@aalis/plugin-doctor';
7
10
  const uses = {
8
11
  provide,
@@ -12,21 +15,25 @@ const uses = {
12
15
  plugins: optional(pluginsService),
13
16
  commands: optional(commands),
14
17
  webui: optional(webuiServer),
18
+ hostConfig: optional(hostConfig),
15
19
  };
16
20
  // ===== Registry =====
17
21
  class DoctorRegistry {
18
22
  caps;
23
+ reported;
19
24
  last;
20
25
  specs = new Map();
21
- constructor(caps) {
26
+ /** reported:每次运行完,诊断页按新报告刷新并发出或撤回提示 */
27
+ constructor(caps, reported) {
22
28
  this.caps = caps;
29
+ this.reported = reported;
23
30
  }
24
31
  getLastReport() {
25
32
  return this.last;
26
33
  }
27
34
  registerCheck(spec) {
28
35
  if (this.specs.has(spec.id)) {
29
- this.caps.logger.debug(`doctor: 检查项 ${spec.id} 被覆盖注册`);
36
+ this.caps.logger.use.debug(`doctor: 检查项 ${spec.id} 被覆盖注册`);
30
37
  }
31
38
  this.specs.set(spec.id, spec);
32
39
  return () => {
@@ -52,8 +59,8 @@ class DoctorRegistry {
52
59
  id: spec.id,
53
60
  category: spec.category,
54
61
  level: 'error',
55
- message: `检查项 ${spec.id} 抛出异常`,
56
- detail: err instanceof Error ? err.message : String(err),
62
+ message: t('checkThrew', { id: spec.id }),
63
+ detail: textOf(err),
57
64
  });
58
65
  }
59
66
  }
@@ -66,73 +73,121 @@ class DoctorRegistry {
66
73
  summary,
67
74
  checks,
68
75
  };
69
- // 通知 WebUI 同步刷新(webui-server 监听并广播到所有连接的客户端)
70
- this.caps.events.emit('doctor:updated', { generatedAt: this.last.generatedAt, summary }).catch(() => { });
76
+ // 通知订阅者报告换了
77
+ this.caps.events.use.emit('doctor:updated', { generatedAt: this.last.generatedAt, summary }).catch(() => { });
78
+ this.reported(this.last);
71
79
  return this.last;
72
80
  }
73
81
  }
74
82
  // ===== WebUI 页面 =====
75
- const webuiPages = [
76
- {
77
- key: 'doctor',
78
- label: '系统诊断',
79
- icon: '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>',
80
- order: 90,
81
- content: [
82
- {
83
- type: 'actions',
84
- label: '运行诊断',
85
- items: [{ label: '立即运行', method: 'runChecks' }],
86
- },
87
- {
88
- type: 'info',
89
- label: '上次运行时间',
90
- source: 'getLastRunAt',
91
- },
92
- {
93
- type: 'table',
94
- label: '最近一次诊断结果',
95
- source: 'getReport',
96
- columns: [
97
- { key: 'level', label: '级别' },
98
- { key: 'category', label: '类别' },
99
- { key: 'id', label: '检查项' },
100
- { key: 'message', label: '说明' },
101
- { key: 'detail', label: '详情' },
102
- ],
103
- },
104
- ],
105
- },
106
- ];
83
+ const LEVELS = {
84
+ ok: { text: t('levelOk') },
85
+ warn: { text: t('levelWarn'), state: 'attention' },
86
+ error: { text: t('levelError'), state: 'error' },
87
+ };
88
+ /** 「类别」一列:值照旧作标识,显示名取字典 */
89
+ const CATEGORIES = {
90
+ env: t('categoryEnv'),
91
+ filesystem: t('categoryFilesystem'),
92
+ plugins: t('categoryPlugins'),
93
+ config: t('categoryConfig'),
94
+ service: t('categoryService'),
95
+ other: t('categoryOther'),
96
+ };
107
97
  // ===== 插件入口 =====
108
98
  export default definePlugin({
109
99
  name: PLUGIN_NAME,
110
- displayName: '系统诊断',
100
+ displayName: t('displayName'),
111
101
  subsystem: 'platform',
112
102
  provides: [doctor],
113
103
  uses,
114
- apply({ provide, logger, events, services, plugins, commands, webui }) {
115
- const registry = new DoctorRegistry({ logger, events });
116
- provide(doctor, registry);
117
- // 注册 builtin 检查项(与第三方插件走同一条注册路径,自然出现在 listChecks 里)
118
- registerBuiltinChecks(registry, plugins, services);
119
- for (const page of webuiPages)
120
- webui.registerPage(page);
121
- // 页面动作直接闭包本次激活的 registry:页面属于本插件,不该去查「当前胜出的 doctor」
122
- webui.registerAction('runChecks', () => registry.runChecks());
123
- webui.registerAction('getReport', async () => registry.getLastReport()?.checks ?? []);
124
- webui.registerAction('getLastRunAt', async () => {
125
- const last = registry.getLastReport();
126
- if (!last)
127
- return { value: '尚未运行' };
128
- const s = last.summary;
129
- return { value: `${formatLocalTime(last.generatedAt)} — ok=${s.ok} warn=${s.warn} error=${s.error}` };
104
+ apply({ provide, logger, events, services, plugins, commands, webui, hostConfig }) {
105
+ // 诊断页只读本次激活的 registry:页面属于本插件,不该去查「当前胜出的 doctor」
106
+ const page = webui.use.definePage({
107
+ key: 'doctor',
108
+ title: t('displayName'),
109
+ icon: 'activity',
110
+ actions: {
111
+ runDiagnostics: {
112
+ label: t('runNow'),
113
+ effect: 'read',
114
+ async handler() {
115
+ const { ok, warn, error } = (await registry.runChecks()).summary;
116
+ return t('ran', { ok, warn, error });
117
+ },
118
+ },
119
+ },
120
+ content: [
121
+ { type: 'actions', actions: ['runDiagnostics'] },
122
+ {
123
+ type: 'info',
124
+ id: 'summary',
125
+ label: t('lastRun'),
126
+ data() {
127
+ const last = registry.getLastReport();
128
+ if (!last)
129
+ return [{ label: t('time'), value: t('notRunYet') }];
130
+ return [
131
+ { label: t('time'), value: last.generatedAt, kind: 'time' },
132
+ { label: t('levelOk'), value: last.summary.ok },
133
+ { label: t('countWarn'), value: last.summary.warn },
134
+ { label: t('countError'), value: last.summary.error },
135
+ ];
136
+ },
137
+ },
138
+ {
139
+ type: 'table',
140
+ id: 'checks',
141
+ label: t('results'),
142
+ rowKey: 'key',
143
+ empty: t('noResults'),
144
+ columns: [
145
+ { key: 'level', label: t('columnLevel'), kind: 'status', primary: true },
146
+ { key: 'category', label: t('columnCategory') },
147
+ { key: 'id', label: t('columnCheck'), kind: 'code' },
148
+ { key: 'message', label: t('columnMessage'), primary: true },
149
+ { key: 'detail', label: t('columnDetail'), kind: 'long-text' },
150
+ ],
151
+ // 检查项的 id 可能重复(一个检查项回多条结果),行按报告里的次序标识
152
+ data: () => (registry.getLastReport()?.checks ?? []).map((check, i) => ({
153
+ key: String(i),
154
+ level: LEVELS[check.level],
155
+ category: CATEGORIES[check.category],
156
+ id: check.id,
157
+ message: check.message,
158
+ detail: check.detail,
159
+ })),
160
+ },
161
+ ],
162
+ });
163
+ let notice;
164
+ const registry = new DoctorRegistry({ logger, events }, report => {
165
+ page.invalidate();
166
+ const { error, warn } = report.summary;
167
+ if (error + warn === 0) {
168
+ notice?.clear();
169
+ notice = undefined;
170
+ return;
171
+ }
172
+ // 「诊断有 2 项错误、1 项警告」:只写不为零的
173
+ notice = webui.use.notify({
174
+ id: 'checks',
175
+ level: error > 0 ? 'error' : 'action',
176
+ title: error > 0 && warn > 0
177
+ ? t('noticeErrorsWarnings', { error, warn })
178
+ : error > 0
179
+ ? t('noticeErrors', { error })
180
+ : t('noticeWarnings', { warn }),
181
+ open: { page: 'doctor' },
182
+ });
130
183
  });
184
+ // 注册 builtin 检查项(与第三方插件走同一条注册路径,自然出现在 listChecks 里)。先于 provide:
185
+ // provide 那次调用里,先激活的插件经 optional(doctor) 攒下的检查项就补登记进来,内置项要排在它们前面
186
+ registerBuiltinChecks(registry, plugins, services.use, hostConfig);
187
+ provide.use(doctor, registry);
131
188
  // 注册 /doctor 命令 —— chat 与 CLI 通用入口。受限(等级 2):报告带存储根的宿主路径、
132
189
  // 插件报错原文(其中可能有内网地址与端口),不该让群里人人都能看到
133
- commands
134
- .command('doctor', '运行系统诊断(环境 / 文件系统 / 插件状态)', { visibility: 'restricted' })
135
- .action(async () => {
190
+ commands.use.command('doctor', t('commandDescription'), { visibility: 'restricted' }).action(async () => {
136
191
  const report = await registry.runChecks();
137
192
  return formatReport(report);
138
193
  });
@@ -144,20 +199,21 @@ export default definePlugin({
144
199
  // plugin-storage-local,经 doctor 契约自行注册——避免 doctor 反向硬依赖业务插件。
145
200
  //
146
201
  // `plugins.status` 留在这里:它读 PluginManager(核心服务),不属于任何业务插件领域;
147
- // 若未来 PluginManager 自带 self-check,可一并迁走。
148
- function registerBuiltinChecks(reg, plugins, services) {
202
+ // 若未来 PluginManager 自带 self-check,可一并迁走。`services.preferences` 同理,读的是宿主配置与服务容器。
203
+ function registerBuiltinChecks(reg, plugins, services, host) {
149
204
  reg.registerCheck({
150
205
  id: 'env.node',
151
206
  category: 'env',
152
207
  pluginName: PLUGIN_NAME,
153
208
  run() {
154
- const major = Number(nodeVersion.replace(/^v/, '').split('.')[0]);
209
+ const [major, minor] = nodeVersion.slice(1).split('.').map(Number);
210
+ const supported = major > 24 || (major === 24 && minor >= 15);
155
211
  return {
156
212
  id: 'env.node',
157
213
  category: 'env',
158
- level: major >= 22 ? 'ok' : 'error',
214
+ level: supported ? 'ok' : 'error',
159
215
  message: `Node ${nodeVersion}`,
160
- detail: major >= 22 ? undefined : '推荐 Node ≥ 22',
216
+ detail: supported ? undefined : t('nodeTooOld'),
161
217
  };
162
218
  },
163
219
  });
@@ -166,7 +222,7 @@ function registerBuiltinChecks(reg, plugins, services) {
166
222
  category: 'env',
167
223
  pluginName: PLUGIN_NAME,
168
224
  run() {
169
- return { id: 'env.platform', category: 'env', level: 'ok', message: `平台 ${platform}` };
225
+ return { id: 'env.platform', category: 'env', level: 'ok', message: t('platform', { platform }) };
170
226
  },
171
227
  });
172
228
  reg.registerCheck({
@@ -174,111 +230,170 @@ function registerBuiltinChecks(reg, plugins, services) {
174
230
  category: 'plugins',
175
231
  pluginName: PLUGIN_NAME,
176
232
  run() {
177
- const pm = plugins.current;
178
- if (!pm) {
233
+ if (!plugins.present) {
179
234
  return {
180
235
  id: 'plugins.service',
181
236
  category: 'plugins',
182
237
  level: 'warn',
183
- message: 'PluginManagerService 不可用,跳过插件检查',
238
+ message: t('noPluginManager'),
184
239
  };
185
240
  }
241
+ const pm = plugins.use;
186
242
  const status = pm.getStatus();
187
243
  const errored = status.filter(s => s.state === 'error');
188
- const pending = status.filter(s => s.state === 'pending');
189
244
  const active = status.filter(s => s.state === 'active');
190
245
  // 激活超过 core 慢操作阈值、已转入后台的(依赖它服务的插件在它完成前保持 pending)
191
246
  const slow = status.filter(s => s.state === 'activating' && s.slow);
192
- // 与 runtime 启动收敛后的 pending 告警同一判据:required 服务当前没有任何提供者登记;
193
- // 由仍在激活中(含已转入后台)的插件声明提供的,归为「等待 <实例> 激活完成」,其余才是缺少
194
- const activating = status.filter(s => s.state === 'activating');
195
- const describePending = (p) => {
196
- const missing = [];
197
- const waiting = new Set();
198
- for (const svc of p.requiredServices ?? []) {
199
- if (services.inspect(svc).length > 0)
200
- continue;
201
- const provider = activating.find(s => s.provides?.includes(svc));
202
- if (provider)
203
- waiting.add(provider.instanceId);
204
- else
205
- missing.push(svc);
206
- }
207
- const reasons = [
208
- ...(missing.length > 0 ? [`缺少服务: ${missing.join('、')}`] : []),
209
- ...[...waiting].map(id => `等待 ${id} 激活完成`),
210
- ];
211
- return reasons.length > 0 ? `${p.instanceId}: ${reasons.join(';')}` : p.instanceId;
212
- };
247
+ // 旧实例超过宽限仍未停下的:停下之前同一 id 不起新实例,说法与依赖链的根(api-doctor)一致
248
+ const lingering = status.filter(s => s.lingering);
249
+ // 缺与在等:与 runtime 启动告警、WebUI 同一判据(api-doctor),缺的沿链追到根;只在等提供者启动的不算未就绪。
250
+ // 没有缺的时只说「无缺服务」:pending 的插件可能还在等别的插件启动或等自己的旧实例停下,各在 plugins.waiting 与
251
+ // plugins.lingering 里报
252
+ const unmet = [...unmetDependencies(status, services.names())];
253
+ const lacking = unmet.filter(([, u]) => u.lacking.length > 0);
254
+ const waiting = unmet.filter(([, u]) => u.lacking.length === 0 && u.waiting.length > 0);
255
+ const lines = (entries) => textLines(entries.map(([instance, u]) => t('pluginLine', { instance, reason: describeUnmet(u) })));
213
256
  return [
214
257
  {
215
258
  id: 'plugins.active',
216
259
  category: 'plugins',
217
260
  level: 'ok',
218
- message: `已激活插件 ${active.length} 个 / 共 ${status.length} 个`,
261
+ message: t('pluginsActive', { active: active.length, total: status.length }),
219
262
  },
220
263
  {
221
264
  id: 'plugins.errored',
222
265
  category: 'plugins',
223
266
  level: errored.length === 0 ? 'ok' : 'error',
224
- message: errored.length === 0 ? '无错误状态插件' : `${errored.length} 个插件处于 error(激活失败或未在宽限内停止)`,
225
- detail: errored.length > 0 ? errored.map(p => `${p.instanceId}: ${p.error}`).join('\n') : undefined,
267
+ message: errored.length === 0 ? t('noErrored') : t('errored', { count: errored.length }),
268
+ detail: errored.length > 0
269
+ ? textLines(errored.map(p => t('pluginLine', { instance: p.instanceId, reason: failureText(p) ?? '' })))
270
+ : undefined,
226
271
  },
227
272
  {
228
273
  id: 'plugins.pending',
229
274
  category: 'plugins',
230
- level: pending.length === 0 ? 'ok' : 'warn',
231
- message: pending.length === 0 ? '无未就绪插件' : `${pending.length} 个插件 required deps 未满足`,
232
- detail: pending.length > 0 ? pending.map(describePending).join('\n') : undefined,
275
+ level: lacking.length === 0 ? 'ok' : 'warn',
276
+ message: lacking.length === 0 ? t('noLacking') : t('lacking', { count: lacking.length }),
277
+ detail: lacking.length > 0 ? lines(lacking) : undefined,
233
278
  },
279
+ ...(waiting.length > 0
280
+ ? [
281
+ {
282
+ id: 'plugins.waiting',
283
+ category: 'plugins',
284
+ level: 'ok',
285
+ message: t('waiting', { count: waiting.length }),
286
+ detail: lines(waiting),
287
+ },
288
+ ]
289
+ : []),
234
290
  {
235
291
  id: 'plugins.slow',
236
292
  category: 'plugins',
237
293
  level: slow.length === 0 ? 'ok' : 'warn',
238
- message: slow.length === 0 ? '无激活超时的插件' : `${slow.length} 个插件激活超过阈值,仍在后台进行`,
239
- detail: slow.length > 0 ? slow.map(p => p.instanceId).join('\n') : undefined,
294
+ message: slow.length === 0 ? t('noSlow') : t('slow', { count: slow.length }),
295
+ detail: slow.length > 0 ? textLines([...slow.map(p => p.instanceId), t('slowHint')]) : undefined,
240
296
  },
297
+ ...(lingering.length > 0
298
+ ? [
299
+ {
300
+ id: 'plugins.lingering',
301
+ category: 'plugins',
302
+ level: 'warn',
303
+ message: t('lingering', { count: lingering.length }),
304
+ detail: textLines([
305
+ ...lingering.map(p => t('lingeringLine', { id: p.instanceId })),
306
+ t('lingeringHint'),
307
+ ]),
308
+ },
309
+ ]
310
+ : []),
241
311
  ];
242
312
  },
243
313
  });
314
+ // 配置文档里的服务偏好指向的提供者此刻不在这个服务里:偏好没有生效,服务落到了别的提供者上(模型删了、插件停用了)。
315
+ // 全局偏好与各插件的本插件偏好(pluginServicePreferences)各查一遍,每个这样的偏好一条,写明实际在用哪个:按偏好所在
316
+ // 口径的解析顺序排第一的就是在用的
317
+ reg.registerCheck({
318
+ id: 'services.preferences',
319
+ category: 'service',
320
+ pluginName: PLUGIN_NAME,
321
+ run() {
322
+ const results = [];
323
+ const doc = host.present ? host.use : undefined;
324
+ for (const plugin of [undefined, ...Object.keys(doc?.get('pluginServicePreferences') ?? {})]) {
325
+ for (const [name, preferred] of Object.entries(doc?.getServicePreferences({ for: plugin }) ?? {})) {
326
+ const entries = services.inspect(name, { for: plugin });
327
+ if (entries.some(entry => entry.contextId === preferred))
328
+ continue;
329
+ const [inUse] = entries;
330
+ // 在用的提供者的标签是 core 的展示值(unknown):是字符串或文字对象才写出来,否则只写 id
331
+ const label = inUse && asText(inUse.label);
332
+ results.push({
333
+ id: plugin === undefined ? `services.preferences.${name}` : `services.preferences.${plugin}.${name}`,
334
+ category: 'service',
335
+ level: 'warn',
336
+ message: plugin === undefined
337
+ ? t('preferenceMissed', { name, preferred })
338
+ : t('pluginPreferenceMissed', { plugin, name, preferred }),
339
+ detail: textLines([
340
+ !inUse
341
+ ? t('noProvider')
342
+ : label
343
+ ? t('inUse', { label, id: inUse.contextId })
344
+ : t('inUseId', { id: inUse.contextId }),
345
+ plugin === undefined
346
+ ? t('fixPreference', { name, preferred })
347
+ : t('fixPluginPreference', { plugin, preferred }),
348
+ ]),
349
+ });
350
+ }
351
+ }
352
+ return results.length > 0
353
+ ? results
354
+ : { id: 'services.preferences', category: 'service', level: 'ok', message: t('preferencesInEffect') };
355
+ },
356
+ });
244
357
  }
245
358
  // ===== helpers =====
359
+ /**
360
+ * /doctor 的回复:聊天栏排版,按 level 分组,加换行,避免一坨平铺。整份报告是文字对象,出口按读者的语言渲染;各检查项的
361
+ * message 与 detail 原样作参数,detail 逐行缩进(见 detailLines)
362
+ */
246
363
  export function formatReport(report) {
247
- // 聊天栏排版:按 level 分组,加换行,避免一坨平铺
248
364
  const byLevel = { error: [], warn: [], ok: [] };
249
365
  for (const c of report.checks)
250
366
  byLevel[c.level].push(c);
251
- const s = report.summary;
252
- const lines = [];
253
- lines.push(`**系统诊断 — ${formatLocalTime(report.generatedAt)}**`);
254
- lines.push(`汇总: ✓ ${s.ok} ! ${s.warn} ✗ ${s.error}`);
255
- lines.push('');
367
+ const { ok, warn, error } = report.summary;
368
+ const lines = [
369
+ t('reportTitle', { at: Date.parse(report.generatedAt) }),
370
+ t('reportSummary', { ok, warn, error }),
371
+ ];
256
372
  const sections = [
257
- ['error', '✗ 错误'],
258
- ['warn', '! 警告'],
259
- ['ok', '✓ 通过'],
373
+ ['error', t('reportErrors')],
374
+ ['warn', t('reportWarnings')],
375
+ ['ok', t('reportPassed')],
260
376
  ];
261
377
  for (const [level, title] of sections) {
262
378
  const items = byLevel[level];
263
379
  if (items.length === 0)
264
380
  continue;
265
- lines.push(`__${title}__`);
381
+ lines.push('', title);
266
382
  for (const c of items) {
267
- lines.push(`- \`${c.category}/${c.id}\` — ${c.message}`);
268
- if (c.detail) {
269
- for (const dl of c.detail.split('\n'))
270
- lines.push(` ${dl}`);
271
- }
383
+ lines.push(t('reportCheck', { check: `${c.category}/${c.id}`, message: c.message }));
384
+ for (const detail of detailLines(c.detail))
385
+ lines.push(t('reportDetail', { detail }));
272
386
  }
273
- lines.push('');
274
387
  }
275
- return lines.join('\n').trimEnd();
388
+ return textLines(lines);
276
389
  }
277
- function formatLocalTime(iso) {
278
- const d = new Date(iso);
279
- if (Number.isNaN(d.getTime()))
280
- return iso;
281
- const pad = (n) => String(n).padStart(2, '0');
282
- return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
390
+ /**
391
+ * 详情拆成行,好逐行缩进:textLines 生成的文字对象按段拆,字符串再按换行拆;别的文字对象渲染之前分不出行,算一行
392
+ */
393
+ function detailLines(detail) {
394
+ if (!detail)
395
+ return [];
396
+ const parts = typeof detail === 'string' ? [detail] : (linesOf(detail) ?? [detail]);
397
+ return parts.flatMap(part => (typeof part === 'string' ? part.split('\n') : part));
283
398
  }
284
399
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ declare const _default: {
2
+ readonly displayName: "System diagnostics";
3
+ readonly runNow: "Run now";
4
+ readonly ran: "Diagnostics finished: {ok, number} passed, {warn, plural, one {# warning} other {# warnings}}, {error, plural, one {# error} other {# errors}}";
5
+ readonly lastRun: "Last run";
6
+ readonly time: "Time";
7
+ readonly notRunYet: "Not run yet";
8
+ readonly countWarn: "Warnings";
9
+ readonly countError: "Errors";
10
+ readonly levelOk: "Passed";
11
+ readonly levelWarn: "Warning";
12
+ readonly levelError: "Error";
13
+ readonly results: "Diagnostic results";
14
+ readonly noResults: "No diagnostics have run yet";
15
+ readonly columnLevel: "Level";
16
+ readonly columnCategory: "Category";
17
+ readonly columnCheck: "Check";
18
+ readonly columnMessage: "Message";
19
+ readonly columnDetail: "Details";
20
+ readonly categoryEnv: "Environment";
21
+ readonly categoryFilesystem: "File system";
22
+ readonly categoryPlugins: "Plugins";
23
+ readonly categoryConfig: "Config";
24
+ readonly categoryService: "Service";
25
+ readonly categoryOther: "Other";
26
+ readonly noticeErrorsWarnings: "Diagnostics found {error, plural, one {# error} other {# errors}} and {warn, plural, one {# warning} other {# warnings}}";
27
+ readonly noticeErrors: "Diagnostics found {error, plural, one {# error} other {# errors}}";
28
+ readonly noticeWarnings: "Diagnostics found {warn, plural, one {# warning} other {# warnings}}";
29
+ readonly commandDescription: "Run system diagnostics. Covers the environment, file system and plugin status";
30
+ readonly checkThrew: "Check {id} threw an exception";
31
+ readonly nodeTooOld: "Node 24.15.0 or later is required; see https://aalis.acenyan.com/guide/first-run#upgrade-node for how to upgrade";
32
+ readonly platform: "Platform {platform}";
33
+ readonly noPluginManager: "PluginManagerService is unavailable; plugin checks skipped";
34
+ readonly pluginsActive: "{active, number} of {total, plural, one {# plugin} other {# plugins}} active";
35
+ readonly noErrored: "No plugins in the error state";
36
+ readonly errored: "{count, plural, one {# plugin is} other {# plugins are}} in error (activation failed or automatic retries ran out)";
37
+ readonly noLacking: "No plugins missing services";
38
+ readonly lacking: "{count, plural, one {# plugin is} other {# plugins are}} missing services and not ready";
39
+ readonly waiting: "{count, plural, one {# plugin is} other {# plugins are}} waiting for other plugins to start";
40
+ readonly noSlow: "No plugins over the activation threshold";
41
+ readonly slow: "{count, plural, one {# plugin has} other {# plugins have}} been activating past the threshold, still running in the background";
42
+ readonly slowHint: "Just wait for it to finish; if it takes long, check its logs (usually it is waiting on the network or an external service); disabling and re-enabling it retries";
43
+ readonly lingering: "{count, plural, one {# plugin has an old instance} other {# plugins have old instances}} still not stopped after the grace period";
44
+ readonly lingeringLine: "Waiting for the old instance of {id} to stop";
45
+ readonly lingeringHint: "Once it stops, things continue toward the target state; if it never stops, check its logs (usually cleanup is waiting on the network or an external process); restarting the process resolves it";
46
+ readonly preferenceMissed: "The preference {preferred} for service {name} is not among its providers and has no effect";
47
+ readonly pluginPreferenceMissed: "Plugin {plugin}'s preference {preferred} for service {name} is not among its providers and has no effect";
48
+ readonly inUse: "Actually in use: {label} ({id})";
49
+ readonly inUseId: "Actually in use: {id}";
50
+ readonly noProvider: "This service has no provider right now";
51
+ readonly fixPreference: "Choose another preference: servicePreferences.{name} in the config file, or the service preferences under WebUI Settings “System”; to use the original one, enable the plugin that provides {preferred}";
52
+ readonly fixPluginPreference: "Choose another preference: the service preferences in the WebUI plugin details ({plugin}), or pluginServicePreferences in the config file; to use the original one, enable the plugin that provides {preferred}";
53
+ readonly preferencesInEffect: "All service preferences are in effect";
54
+ readonly pluginLine: "{instance}: {reason}";
55
+ readonly reportTitle: "**System diagnostics — {at, datetime, medium}**";
56
+ readonly reportSummary: "Summary: {ok, number} passed, {warn, plural, one {# warning} other {# warnings}}, {error, plural, one {# error} other {# errors}}";
57
+ readonly reportErrors: "__Errors__";
58
+ readonly reportWarnings: "__Warnings__";
59
+ readonly reportPassed: "__Passed__";
60
+ readonly reportCheck: "- {check, code} — {message}";
61
+ readonly reportDetail: " {detail}";
62
+ };
63
+ export default _default;
64
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAuEG"}
@@ -0,0 +1,64 @@
1
+ import { defineLocale } from '@aalis/schema-i18n';
2
+ export default defineLocale()({
3
+ displayName: 'System diagnostics',
4
+ runNow: 'Run now',
5
+ ran: 'Diagnostics finished: {ok, number} passed, {warn, plural, one {# warning} other {# warnings}}, {error, plural, one {# error} other {# errors}}',
6
+ lastRun: 'Last run',
7
+ time: 'Time',
8
+ notRunYet: 'Not run yet',
9
+ countWarn: 'Warnings',
10
+ countError: 'Errors',
11
+ levelOk: 'Passed',
12
+ levelWarn: 'Warning',
13
+ levelError: 'Error',
14
+ results: 'Diagnostic results',
15
+ noResults: 'No diagnostics have run yet',
16
+ columnLevel: 'Level',
17
+ columnCategory: 'Category',
18
+ columnCheck: 'Check',
19
+ columnMessage: 'Message',
20
+ columnDetail: 'Details',
21
+ categoryEnv: 'Environment',
22
+ categoryFilesystem: 'File system',
23
+ categoryPlugins: 'Plugins',
24
+ categoryConfig: 'Config',
25
+ categoryService: 'Service',
26
+ categoryOther: 'Other',
27
+ noticeErrorsWarnings: 'Diagnostics found {error, plural, one {# error} other {# errors}} and {warn, plural, one {# warning} other {# warnings}}',
28
+ noticeErrors: 'Diagnostics found {error, plural, one {# error} other {# errors}}',
29
+ noticeWarnings: 'Diagnostics found {warn, plural, one {# warning} other {# warnings}}',
30
+ commandDescription: 'Run system diagnostics. Covers the environment, file system and plugin status',
31
+ checkThrew: 'Check {id} threw an exception',
32
+ nodeTooOld: 'Node 24.15.0 or later is required; see https://aalis.acenyan.com/guide/first-run#upgrade-node for how to upgrade',
33
+ platform: 'Platform {platform}',
34
+ noPluginManager: 'PluginManagerService is unavailable; plugin checks skipped',
35
+ pluginsActive: '{active, number} of {total, plural, one {# plugin} other {# plugins}} active',
36
+ noErrored: 'No plugins in the error state',
37
+ errored: '{count, plural, one {# plugin is} other {# plugins are}} in error (activation failed or automatic retries ran out)',
38
+ noLacking: 'No plugins missing services',
39
+ lacking: '{count, plural, one {# plugin is} other {# plugins are}} missing services and not ready',
40
+ waiting: '{count, plural, one {# plugin is} other {# plugins are}} waiting for other plugins to start',
41
+ noSlow: 'No plugins over the activation threshold',
42
+ slow: '{count, plural, one {# plugin has} other {# plugins have}} been activating past the threshold, still running in the background',
43
+ slowHint: 'Just wait for it to finish; if it takes long, check its logs (usually it is waiting on the network or an external service); disabling and re-enabling it retries',
44
+ lingering: '{count, plural, one {# plugin has an old instance} other {# plugins have old instances}} still not stopped after the grace period',
45
+ lingeringLine: 'Waiting for the old instance of {id} to stop',
46
+ lingeringHint: 'Once it stops, things continue toward the target state; if it never stops, check its logs (usually cleanup is waiting on the network or an external process); restarting the process resolves it',
47
+ preferenceMissed: 'The preference {preferred} for service {name} is not among its providers and has no effect',
48
+ pluginPreferenceMissed: "Plugin {plugin}'s preference {preferred} for service {name} is not among its providers and has no effect",
49
+ inUse: 'Actually in use: {label} ({id})',
50
+ inUseId: 'Actually in use: {id}',
51
+ noProvider: 'This service has no provider right now',
52
+ fixPreference: 'Choose another preference: servicePreferences.{name} in the config file, or the service preferences under WebUI Settings “System”; to use the original one, enable the plugin that provides {preferred}',
53
+ fixPluginPreference: 'Choose another preference: the service preferences in the WebUI plugin details ({plugin}), or pluginServicePreferences in the config file; to use the original one, enable the plugin that provides {preferred}',
54
+ preferencesInEffect: 'All service preferences are in effect',
55
+ pluginLine: '{instance}: {reason}',
56
+ reportTitle: '**System diagnostics — {at, datetime, medium}**',
57
+ reportSummary: 'Summary: {ok, number} passed, {warn, plural, one {# warning} other {# warnings}}, {error, plural, one {# error} other {# errors}}',
58
+ reportErrors: '__Errors__',
59
+ reportWarnings: '__Warnings__',
60
+ reportPassed: '__Passed__',
61
+ reportCheck: '- {check, code} — {message}',
62
+ reportDetail: ' {detail}',
63
+ });
64
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAe,YAAY,EAAU,CAAC;IACpC,WAAW,EAAE,oBAAoB;IACjC,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,gJAAgJ;IACrJ,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,QAAQ;IACpB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,oBAAoB;IAC7B,SAAS,EAAE,6BAA6B;IACxC,WAAW,EAAE,OAAO;IACpB,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,OAAO;IACpB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,aAAa;IAC1B,kBAAkB,EAAE,aAAa;IACjC,eAAe,EAAE,SAAS;IAC1B,cAAc,EAAE,QAAQ;IACxB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,OAAO;IACtB,oBAAoB,EAClB,0HAA0H;IAC5H,YAAY,EAAE,mEAAmE;IACjF,cAAc,EAAE,sEAAsE;IACtF,kBAAkB,EAAE,+EAA+E;IACnG,UAAU,EAAE,+BAA+B;IAC3C,UAAU,EACR,kHAAkH;IACpH,QAAQ,EAAE,qBAAqB;IAC/B,eAAe,EAAE,4DAA4D;IAC7E,aAAa,EAAE,8EAA8E;IAC7F,SAAS,EAAE,+BAA+B;IAC1C,OAAO,EACL,oHAAoH;IACtH,SAAS,EAAE,6BAA6B;IACxC,OAAO,EAAE,yFAAyF;IAClG,OAAO,EAAE,6FAA6F;IACtG,MAAM,EAAE,0CAA0C;IAClD,IAAI,EAAE,gIAAgI;IACtI,QAAQ,EACN,kKAAkK;IACpK,SAAS,EACP,mIAAmI;IACrI,aAAa,EAAE,8CAA8C;IAC7D,aAAa,EACX,kMAAkM;IACpM,gBAAgB,EAAE,4FAA4F;IAC9G,sBAAsB,EACpB,0GAA0G;IAC5G,KAAK,EAAE,iCAAiC;IACxC,OAAO,EAAE,uBAAuB;IAChC,UAAU,EAAE,wCAAwC;IACpD,aAAa,EACX,yMAAyM;IAC3M,mBAAmB,EACjB,iNAAiN;IACnN,mBAAmB,EAAE,uCAAuC;IAC5D,UAAU,EAAE,sBAAsB;IAClC,WAAW,EAAE,iDAAiD;IAC9D,aAAa,EACX,mIAAmI;IACrI,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,6BAA6B;IAC1C,YAAY,EAAE,cAAc;CAC7B,CAAC,CAAC"}
@@ -0,0 +1,127 @@
1
+ declare const SOURCE: {
2
+ readonly displayName: "系统诊断";
3
+ readonly runNow: "立即运行";
4
+ readonly ran: "诊断完成:{ok, number} 项通过、{warn, number} 项警告、{error, number} 项错误";
5
+ readonly lastRun: "上次运行";
6
+ readonly time: "时间";
7
+ readonly notRunYet: "尚未运行";
8
+ readonly countWarn: "警告";
9
+ readonly countError: "错误";
10
+ readonly levelOk: "通过";
11
+ readonly levelWarn: "警告";
12
+ readonly levelError: "错误";
13
+ readonly results: "诊断结果";
14
+ readonly noResults: "还没有运行过诊断";
15
+ readonly columnLevel: "级别";
16
+ readonly columnCategory: "类别";
17
+ readonly columnCheck: "检查项";
18
+ readonly columnMessage: "说明";
19
+ readonly columnDetail: "详情";
20
+ readonly categoryEnv: "环境";
21
+ readonly categoryFilesystem: "文件系统";
22
+ readonly categoryPlugins: "插件";
23
+ readonly categoryConfig: "配置";
24
+ readonly categoryService: "服务";
25
+ readonly categoryOther: "其他";
26
+ readonly noticeErrorsWarnings: "诊断有 {error, number} 项错误、{warn, number} 项警告";
27
+ readonly noticeErrors: "诊断有 {error, number} 项错误";
28
+ readonly noticeWarnings: "诊断有 {warn, number} 项警告";
29
+ readonly commandDescription: "运行系统诊断(环境 / 文件系统 / 插件状态)";
30
+ readonly checkThrew: "检查项 {id} 抛出异常";
31
+ readonly nodeTooOld: "需要 Node 24.15.0 起;升级方法见 https://aalis.acenyan.com/guide/first-run#upgrade-node";
32
+ readonly platform: "平台 {platform}";
33
+ readonly noPluginManager: "PluginManagerService 不可用,跳过插件检查";
34
+ readonly pluginsActive: "已激活插件 {active, number} 个 / 共 {total, number} 个";
35
+ readonly noErrored: "无错误状态插件";
36
+ readonly errored: "{count, number} 个插件处于 error(激活失败或自动重试用尽)";
37
+ readonly noLacking: "无缺服务的插件";
38
+ readonly lacking: "{count, number} 个插件缺服务,未就绪";
39
+ readonly waiting: "{count, number} 个插件在等别的插件启动";
40
+ readonly noSlow: "无激活超时的插件";
41
+ readonly slow: "{count, number} 个插件激活超过阈值,仍在后台进行";
42
+ readonly slowHint: "等它完成即可;长时间不完成时看它的日志(多为在等网络或外部服务),停用再启用可重试";
43
+ readonly lingering: "{count, number} 个插件的旧实例超过宽限仍未停下";
44
+ readonly lingeringLine: "等待 {id} 的旧实例停下";
45
+ readonly lingeringHint: "停下后按目标态继续;一直不停时看它的日志(多为清理在等网络或外部进程),重启进程可解决";
46
+ readonly preferenceMissed: "服务 {name} 的偏好 {preferred} 不在提供者里,没有生效";
47
+ readonly pluginPreferenceMissed: "插件 {plugin} 的服务 {name} 偏好 {preferred} 不在提供者里,没有生效";
48
+ readonly inUse: "实际在用:{label}({id})";
49
+ readonly inUseId: "实际在用:{id}";
50
+ readonly noProvider: "这个服务现在没有提供者";
51
+ readonly fixPreference: "改选偏好:配置文件的 servicePreferences.{name},或 WebUI 设置「系统」的服务偏好;要用原来的,启用提供 {preferred} 的插件";
52
+ readonly fixPluginPreference: "改选偏好:WebUI 插件详情({plugin})的服务偏好,或配置文件的 pluginServicePreferences;要用原来的,启用提供 {preferred} 的插件";
53
+ readonly preferencesInEffect: "没有未生效的服务偏好";
54
+ readonly pluginLine: "{instance}: {reason}";
55
+ readonly reportTitle: "**系统诊断 — {at, datetime, medium}**";
56
+ readonly reportSummary: "汇总:通过 {ok, number} 警告 {warn, number} 错误 {error, number}";
57
+ readonly reportErrors: "__错误__";
58
+ readonly reportWarnings: "__警告__";
59
+ readonly reportPassed: "__通过__";
60
+ readonly reportCheck: "- {check, code} — {message}";
61
+ readonly reportDetail: " {detail}";
62
+ };
63
+ export type Source = typeof SOURCE;
64
+ export declare const t: import("@aalis/schema-i18n").TextFactory<{
65
+ readonly displayName: "系统诊断";
66
+ readonly runNow: "立即运行";
67
+ readonly ran: "诊断完成:{ok, number} 项通过、{warn, number} 项警告、{error, number} 项错误";
68
+ readonly lastRun: "上次运行";
69
+ readonly time: "时间";
70
+ readonly notRunYet: "尚未运行";
71
+ readonly countWarn: "警告";
72
+ readonly countError: "错误";
73
+ readonly levelOk: "通过";
74
+ readonly levelWarn: "警告";
75
+ readonly levelError: "错误";
76
+ readonly results: "诊断结果";
77
+ readonly noResults: "还没有运行过诊断";
78
+ readonly columnLevel: "级别";
79
+ readonly columnCategory: "类别";
80
+ readonly columnCheck: "检查项";
81
+ readonly columnMessage: "说明";
82
+ readonly columnDetail: "详情";
83
+ readonly categoryEnv: "环境";
84
+ readonly categoryFilesystem: "文件系统";
85
+ readonly categoryPlugins: "插件";
86
+ readonly categoryConfig: "配置";
87
+ readonly categoryService: "服务";
88
+ readonly categoryOther: "其他";
89
+ readonly noticeErrorsWarnings: "诊断有 {error, number} 项错误、{warn, number} 项警告";
90
+ readonly noticeErrors: "诊断有 {error, number} 项错误";
91
+ readonly noticeWarnings: "诊断有 {warn, number} 项警告";
92
+ readonly commandDescription: "运行系统诊断(环境 / 文件系统 / 插件状态)";
93
+ readonly checkThrew: "检查项 {id} 抛出异常";
94
+ readonly nodeTooOld: "需要 Node 24.15.0 起;升级方法见 https://aalis.acenyan.com/guide/first-run#upgrade-node";
95
+ readonly platform: "平台 {platform}";
96
+ readonly noPluginManager: "PluginManagerService 不可用,跳过插件检查";
97
+ readonly pluginsActive: "已激活插件 {active, number} 个 / 共 {total, number} 个";
98
+ readonly noErrored: "无错误状态插件";
99
+ readonly errored: "{count, number} 个插件处于 error(激活失败或自动重试用尽)";
100
+ readonly noLacking: "无缺服务的插件";
101
+ readonly lacking: "{count, number} 个插件缺服务,未就绪";
102
+ readonly waiting: "{count, number} 个插件在等别的插件启动";
103
+ readonly noSlow: "无激活超时的插件";
104
+ readonly slow: "{count, number} 个插件激活超过阈值,仍在后台进行";
105
+ readonly slowHint: "等它完成即可;长时间不完成时看它的日志(多为在等网络或外部服务),停用再启用可重试";
106
+ readonly lingering: "{count, number} 个插件的旧实例超过宽限仍未停下";
107
+ readonly lingeringLine: "等待 {id} 的旧实例停下";
108
+ readonly lingeringHint: "停下后按目标态继续;一直不停时看它的日志(多为清理在等网络或外部进程),重启进程可解决";
109
+ readonly preferenceMissed: "服务 {name} 的偏好 {preferred} 不在提供者里,没有生效";
110
+ readonly pluginPreferenceMissed: "插件 {plugin} 的服务 {name} 偏好 {preferred} 不在提供者里,没有生效";
111
+ readonly inUse: "实际在用:{label}({id})";
112
+ readonly inUseId: "实际在用:{id}";
113
+ readonly noProvider: "这个服务现在没有提供者";
114
+ readonly fixPreference: "改选偏好:配置文件的 servicePreferences.{name},或 WebUI 设置「系统」的服务偏好;要用原来的,启用提供 {preferred} 的插件";
115
+ readonly fixPluginPreference: "改选偏好:WebUI 插件详情({plugin})的服务偏好,或配置文件的 pluginServicePreferences;要用原来的,启用提供 {preferred} 的插件";
116
+ readonly preferencesInEffect: "没有未生效的服务偏好";
117
+ readonly pluginLine: "{instance}: {reason}";
118
+ readonly reportTitle: "**系统诊断 — {at, datetime, medium}**";
119
+ readonly reportSummary: "汇总:通过 {ok, number} 警告 {warn, number} 错误 {error, number}";
120
+ readonly reportErrors: "__错误__";
121
+ readonly reportWarnings: "__警告__";
122
+ readonly reportPassed: "__通过__";
123
+ readonly reportCheck: "- {check, code} — {message}";
124
+ readonly reportDetail: " {detail}";
125
+ }>;
126
+ export {};
127
+ //# sourceMappingURL=texts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkG,CAAC"}
package/dist/texts.js ADDED
@@ -0,0 +1,67 @@
1
+ // 本插件自己的原文字典:显示名与诊断页,内置检查项的说明与详情,「需要处理」的提示,/doctor 的说明与报告版式
2
+ import { defineTexts } from '@aalis/schema-i18n';
3
+ import en from './locales/en.js';
4
+ const SOURCE = {
5
+ displayName: '系统诊断',
6
+ runNow: '立即运行',
7
+ ran: '诊断完成:{ok, number} 项通过、{warn, number} 项警告、{error, number} 项错误',
8
+ lastRun: '上次运行',
9
+ time: '时间',
10
+ notRunYet: '尚未运行',
11
+ countWarn: '警告',
12
+ countError: '错误',
13
+ levelOk: '通过',
14
+ levelWarn: '警告',
15
+ levelError: '错误',
16
+ results: '诊断结果',
17
+ noResults: '还没有运行过诊断',
18
+ columnLevel: '级别',
19
+ columnCategory: '类别',
20
+ columnCheck: '检查项',
21
+ columnMessage: '说明',
22
+ columnDetail: '详情',
23
+ categoryEnv: '环境',
24
+ categoryFilesystem: '文件系统',
25
+ categoryPlugins: '插件',
26
+ categoryConfig: '配置',
27
+ categoryService: '服务',
28
+ categoryOther: '其他',
29
+ noticeErrorsWarnings: '诊断有 {error, number} 项错误、{warn, number} 项警告',
30
+ noticeErrors: '诊断有 {error, number} 项错误',
31
+ noticeWarnings: '诊断有 {warn, number} 项警告',
32
+ commandDescription: '运行系统诊断(环境 / 文件系统 / 插件状态)',
33
+ checkThrew: '检查项 {id} 抛出异常',
34
+ nodeTooOld: '需要 Node 24.15.0 起;升级方法见 https://aalis.acenyan.com/guide/first-run#upgrade-node',
35
+ platform: '平台 {platform}',
36
+ noPluginManager: 'PluginManagerService 不可用,跳过插件检查',
37
+ pluginsActive: '已激活插件 {active, number} 个 / 共 {total, number} 个',
38
+ noErrored: '无错误状态插件',
39
+ errored: '{count, number} 个插件处于 error(激活失败或自动重试用尽)',
40
+ noLacking: '无缺服务的插件',
41
+ lacking: '{count, number} 个插件缺服务,未就绪',
42
+ waiting: '{count, number} 个插件在等别的插件启动',
43
+ noSlow: '无激活超时的插件',
44
+ slow: '{count, number} 个插件激活超过阈值,仍在后台进行',
45
+ slowHint: '等它完成即可;长时间不完成时看它的日志(多为在等网络或外部服务),停用再启用可重试',
46
+ lingering: '{count, number} 个插件的旧实例超过宽限仍未停下',
47
+ lingeringLine: '等待 {id} 的旧实例停下',
48
+ lingeringHint: '停下后按目标态继续;一直不停时看它的日志(多为清理在等网络或外部进程),重启进程可解决',
49
+ preferenceMissed: '服务 {name} 的偏好 {preferred} 不在提供者里,没有生效',
50
+ pluginPreferenceMissed: '插件 {plugin} 的服务 {name} 偏好 {preferred} 不在提供者里,没有生效',
51
+ inUse: '实际在用:{label}({id})',
52
+ inUseId: '实际在用:{id}',
53
+ noProvider: '这个服务现在没有提供者',
54
+ fixPreference: '改选偏好:配置文件的 servicePreferences.{name},或 WebUI 设置「系统」的服务偏好;要用原来的,启用提供 {preferred} 的插件',
55
+ fixPluginPreference: '改选偏好:WebUI 插件详情({plugin})的服务偏好,或配置文件的 pluginServicePreferences;要用原来的,启用提供 {preferred} 的插件',
56
+ preferencesInEffect: '没有未生效的服务偏好',
57
+ pluginLine: '{instance}: {reason}',
58
+ reportTitle: '**系统诊断 — {at, datetime, medium}**',
59
+ reportSummary: '汇总:通过 {ok, number} 警告 {warn, number} 错误 {error, number}',
60
+ reportErrors: '__错误__',
61
+ reportWarnings: '__警告__',
62
+ reportPassed: '__通过__',
63
+ reportCheck: '- {check, code} — {message}',
64
+ reportDetail: ' {detail}',
65
+ };
66
+ export const t = defineTexts({ ns: '@aalis/plugin-doctor', language: 'zh-CN', source: SOURCE, locales: { en } });
67
+ //# sourceMappingURL=texts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,8DAA8D;IACnE,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,kBAAkB,EAAE,MAAM;IAC1B,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,4CAA4C;IAClE,YAAY,EAAE,yBAAyB;IACvC,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,0BAA0B;IAC9C,UAAU,EAAE,eAAe;IAC3B,UAAU,EAAE,gFAAgF;IAC5F,QAAQ,EAAE,eAAe;IACzB,eAAe,EAAE,iCAAiC;IAClD,aAAa,EAAE,gDAAgD;IAC/D,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,0CAA0C;IACnD,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,4BAA4B;IACrC,OAAO,EAAE,6BAA6B;IACtC,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,kCAAkC;IACxC,QAAQ,EAAE,2CAA2C;IACrD,SAAS,EAAE,iCAAiC;IAC5C,aAAa,EAAE,gBAAgB;IAC/B,aAAa,EAAE,6CAA6C;IAC5D,gBAAgB,EAAE,uCAAuC;IACzD,sBAAsB,EAAE,mDAAmD;IAC3E,KAAK,EAAE,oBAAoB;IAC3B,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,aAAa;IACzB,aAAa,EACX,qFAAqF;IACvF,mBAAmB,EACjB,2FAA2F;IAC7F,mBAAmB,EAAE,YAAY;IACjC,UAAU,EAAE,sBAAsB;IAClC,WAAW,EAAE,mCAAmC;IAChD,aAAa,EAAE,yDAAyD;IACxE,YAAY,EAAE,QAAQ;IACtB,cAAc,EAAE,QAAQ;IACxB,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,6BAA6B;IAC1C,YAAY,EAAE,cAAc;CACpB,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-doctor",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,24 +24,27 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@aalis/api-commands": ">=0.7.0 <1.0.0",
28
- "@aalis/api-doctor": ">=0.7.0 <1.0.0",
29
- "@aalis/api-webui": ">=0.11.0 <1.0.0"
27
+ "@aalis/api-commands": ">=0.9.0 <1.0.0",
28
+ "@aalis/api-doctor": ">=0.9.0 <1.0.0",
29
+ "@aalis/api-host-config": ">=0.3.0 <1.0.0",
30
+ "@aalis/api-webui": ">=0.13.0 <1.0.0",
31
+ "@aalis/schema-i18n": ">=0.1.0 <1.0.0"
30
32
  },
31
33
  "devDependencies": {
32
34
  "@types/node": "^22.0.0",
33
35
  "typescript": "^5.7.0",
34
- "@aalis/core": "0.19.0"
36
+ "@aalis/core": "0.21.0"
35
37
  },
36
38
  "peerDependencies": {
37
- "@aalis/core": ">=0.18.0 <1.0.0"
39
+ "@aalis/core": ">=0.21.0 <1.0.0"
38
40
  },
39
41
  "aalis": {
40
42
  "service": {
41
43
  "optional": [
42
44
  "plugins",
43
45
  "commands",
44
- "webui-server"
46
+ "webui-server",
47
+ "host-config"
45
48
  ],
46
49
  "provides": [
47
50
  "doctor"