@aalis/runtime 0.18.0 → 0.20.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.
Files changed (74) hide show
  1. package/README.md +4 -4
  2. package/dist/config-store.d.ts +10 -2
  3. package/dist/config-store.d.ts.map +1 -1
  4. package/dist/config-store.js +76 -25
  5. package/dist/config-store.js.map +1 -1
  6. package/dist/config-sync.d.ts +9 -15
  7. package/dist/config-sync.d.ts.map +1 -1
  8. package/dist/config-sync.js +45 -50
  9. package/dist/config-sync.js.map +1 -1
  10. package/dist/console-sink.d.ts +1 -1
  11. package/dist/console-sink.d.ts.map +1 -1
  12. package/dist/console-sink.js +1 -5
  13. package/dist/console-sink.js.map +1 -1
  14. package/dist/data-dir.d.ts +60 -0
  15. package/dist/data-dir.d.ts.map +1 -0
  16. package/dist/data-dir.js +181 -0
  17. package/dist/data-dir.js.map +1 -0
  18. package/dist/file-logger.d.ts +2 -2
  19. package/dist/file-logger.d.ts.map +1 -1
  20. package/dist/file-logger.js +13 -10
  21. package/dist/file-logger.js.map +1 -1
  22. package/dist/host-logs.d.ts +1 -1
  23. package/dist/host-logs.js +1 -1
  24. package/dist/index.d.ts +2 -4
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +3 -5
  27. package/dist/index.js.map +1 -1
  28. package/dist/instance-lock.js +5 -5
  29. package/dist/instance-lock.js.map +1 -1
  30. package/dist/locales/en.d.ts +4 -0
  31. package/dist/locales/en.d.ts.map +1 -1
  32. package/dist/locales/en.js +4 -0
  33. package/dist/locales/en.js.map +1 -1
  34. package/dist/node-modules-loader.d.ts +4 -7
  35. package/dist/node-modules-loader.d.ts.map +1 -1
  36. package/dist/node-modules-loader.js +18 -25
  37. package/dist/node-modules-loader.js.map +1 -1
  38. package/dist/plugin-discovery.d.ts +10 -3
  39. package/dist/plugin-discovery.d.ts.map +1 -1
  40. package/dist/plugin-discovery.js +64 -30
  41. package/dist/plugin-discovery.js.map +1 -1
  42. package/dist/providers.d.ts +13 -13
  43. package/dist/providers.d.ts.map +1 -1
  44. package/dist/providers.js +22 -35
  45. package/dist/providers.js.map +1 -1
  46. package/dist/secrets.js +1 -1
  47. package/dist/secrets.js.map +1 -1
  48. package/dist/start.d.ts +7 -13
  49. package/dist/start.d.ts.map +1 -1
  50. package/dist/start.js +96 -75
  51. package/dist/start.js.map +1 -1
  52. package/dist/subcommand.d.ts +1 -1
  53. package/dist/subcommand.js +1 -1
  54. package/dist/texts.d.ts +8 -0
  55. package/dist/texts.d.ts.map +1 -1
  56. package/dist/texts.js +4 -0
  57. package/dist/texts.js.map +1 -1
  58. package/dist/yaml-file.d.ts +4 -2
  59. package/dist/yaml-file.d.ts.map +1 -1
  60. package/dist/yaml-file.js +9 -5
  61. package/dist/yaml-file.js.map +1 -1
  62. package/package.json +6 -6
  63. package/dist/bootstrap-buffer.d.ts +0 -34
  64. package/dist/bootstrap-buffer.d.ts.map +0 -1
  65. package/dist/bootstrap-buffer.js +0 -42
  66. package/dist/bootstrap-buffer.js.map +0 -1
  67. package/dist/home.d.ts +0 -64
  68. package/dist/home.d.ts.map +0 -1
  69. package/dist/home.js +0 -206
  70. package/dist/home.js.map +0 -1
  71. package/dist/terminal.d.ts +0 -16
  72. package/dist/terminal.d.ts.map +0 -1
  73. package/dist/terminal.js +0 -43
  74. package/dist/terminal.js.map +0 -1
package/dist/start.js CHANGED
@@ -5,41 +5,41 @@ import { describeUnmet, unmetDependencies } from '@aalis/api-doctor';
5
5
  import { hostLogs } from '@aalis/api-host-logs';
6
6
  import { hostPaths } from '@aalis/api-host-paths';
7
7
  import { pluginSource } from '@aalis/api-plugin-source';
8
- import { App, events, LogHub, provide, services } from '@aalis/core';
9
- import { installBootstrapBuffer } from './bootstrap-buffer.js';
8
+ import { App, DefaultLogger, events, LogHub, provide, services } from '@aalis/core';
9
+ import { CORE_CONFIG_SCHEMA, CORE_RESTART_KEYS, readFieldValue } from '@aalis/schema-config';
10
+ import { isTextError, resolveText } from '@aalis/schema-i18n';
10
11
  import { createConfigStore, installHostConfig } from './config-store.js';
11
12
  import { installConfigHotReload, withPluginConfigSync } from './config-sync.js';
12
13
  import { installConsoleSink } from './console-sink.js';
14
+ import { derivePaths, HostArgsError, initDataDir, isDataDirInitialized, parseHostArgs, resolveDataDir, } from './data-dir.js';
13
15
  import { appendCrashLog, setupFileLogger } from './file-logger.js';
14
- import { derivePaths, HomeArgsError, initHome, isFullyAbsolute, isHomeInitialized, parseHostArgs, profileOfRealHome, resolveHome, } from './home.js';
15
16
  import { createHostLogs } from './host-logs.js';
16
17
  import { acquireInstanceLock } from './instance-lock.js';
17
18
  import { createNodeModulesPluginLoader } from './node-modules-loader.js';
18
19
  import { createPluginDiscovery } from './plugin-discovery.js';
19
- import { createFsSecretsProvider, createFsYamlConfigProvider, createProcessRespawnStrategy, createServiceRestartStrategy, READY_MESSAGE, } from './providers.js';
20
+ import { createFsSecretsProvider, createFsYamlConfigProvider, createProcessRespawnStrategy, createServiceRestartStrategy, READY_MESSAGE, SERVICE_RESTART_EXIT_CODE, } from './providers.js';
20
21
  import { tryDispatchSubcommand } from './subcommand.js';
21
- import { installTerminalStateRestorer } from './terminal.js';
22
22
  // ============================================================
23
23
  // startAalis —— Node 宿主一行启动(独立部署与 monorepo 自托管共用)
24
24
  // ============================================================
25
25
  //
26
26
  // 独立部署(scaffold 生成的 index.mjs):
27
27
  // import { startAalis } from '@aalis/runtime';
28
- // startAalis({ appDir: here, defaultHome: join(here, 'home') }); // 从 node_modules 加载插件 + 默认开控制台/文件日志
28
+ // startAalis({ appDir: here }); // 从 node_modules 加载插件 + 默认开控制台/文件日志,数据目录缺省是 here/data
29
29
  //
30
30
  // monorepo 自托管(src/index.ts)传仓库根与 monorepo 风味的加载器:
31
31
  // startAalis({ appDir, pluginLoader: createFsPluginLoader(join(appDir, 'packages')) });
32
32
  //
33
- // 命令行开头的宿主参数(`--home`、`--profile`、`--init`、`--service`)先取走,用来定家目录与运行形态;余下的 argv 非空即子命令
33
+ // 命令行开头的宿主参数(`--data`、`--profile`、`--init`、`--service`)先取走,用来定数据目录与运行形态;余下的 argv 非空即子命令
34
34
  // 模式——`node index.mjs <name> [args]` ≡ 聊天里的 `/<name> args`,命中即执行并退出,未命中报错退出
35
35
  // (exit 2),**两种情况都不进守护进程**。宿主自己解析命令行时传 `argv: []` 或显式数组。
36
36
  //
37
- // 家目录没初始化就拒绝启动,只提示怎样初始化:绝不在找不到家目录时静默起一个空的家。
37
+ // 数据目录没初始化就拒绝启动,只提示怎样初始化:绝不在找不到数据目录时静默创建一个空的家。
38
38
  //
39
39
  // 子命令进程是与守护进程零通信的一次性实例,因此不装文件日志(会把守护进程正在写的 latest.log 轮转走)、
40
40
  // 不注入重启策略(`restart` 会 spawn 出 argv 仍带 restart 的 detached 子进程,无限连环——实测)。
41
41
  //
42
- // 宿主的「I/O 那一层」(日志 sink / 终端复原 / 子命令分发)全在本包,core 只产生 LogEntry。
42
+ // 宿主的「I/O 那一层」(日志 sink / 子命令分发)全在本包,core 只产生 LogEntry。终端模式由改它的插件自己复原。
43
43
  const APP_DIR_EXAMPLE = 'startAalis({ appDir: dirname(fileURLToPath(import.meta.url)) })';
44
44
  /** respawn 时把实例锁的交接令牌交给新进程的环境变量 */
45
45
  const HANDOFF_ENV = 'AALIS_LOCK_HANDOFF';
@@ -64,13 +64,16 @@ function readCoreVersion() {
64
64
  * ② 子命令短路必须在 `app.start` 之前。
65
65
  */
66
66
  export async function startAalis(opts) {
67
- // JS 入口可能一个参数都不传:在动家目录之前停下,不落到缺省的家目录
67
+ // 两条输出流先在这里建好:macOS 上终端挂断之后首次取 process.stdout / process.stderr 会卡住(建流时重新打开已挂断的终端设备,
68
+ // 一直等不到),停机路径(下面的 SIGHUP 与写出错)要用到它们。不靠哪个依赖在载入时碰巧把它们建好
69
+ const outputs = [process.stdout, process.stderr];
70
+ // JS 入口可能一个参数都不传:在动数据目录之前停下,不落到缺省的数据目录
68
71
  if (typeof opts?.appDir !== 'string') {
69
72
  console.error(`[aalis] startAalis is missing appDir: pass the directory of the entry file as appDir, for example ${APP_DIR_EXAMPLE}.`);
70
73
  process.exit(2);
71
74
  }
72
- const { consoleSink = true, fileLog = true, terminalRestore = true } = opts;
73
- // ── 家目录:在任何日志与文件写入之前定下来 ──
75
+ const { consoleSink = true, fileLog = true } = opts;
76
+ // ── 数据目录:在任何日志与文件写入之前定下来 ──
74
77
  // 命令行与环境变量里写的相对路径按启动时的 cwd 解析一次:那是用户在 shell 里的意图。
75
78
  // 启动目录可能已被删除,这时 process.cwd() 会抛错;只有遇到相对路径才需要它。
76
79
  let startCwd;
@@ -81,51 +84,47 @@ export async function startAalis(opts) {
81
84
  startCwd = undefined;
82
85
  }
83
86
  let hostArgs;
84
- let home;
87
+ let resolved;
85
88
  try {
86
89
  hostArgs = parseHostArgs(opts.argv ?? process.argv.slice(2));
87
- home = resolveHome({ args: hostArgs, env: process.env, defaultHome: opts.defaultHome, cwd: startCwd });
88
- if (!isFullyAbsolute(opts.appDir)) {
89
- throw new HomeArgsError(`appDir must be an absolute path: ${opts.appDir}`);
90
- }
90
+ resolved = resolveDataDir({ args: hostArgs, env: process.env, appDir: opts.appDir, cwd: startCwd });
91
91
  }
92
92
  catch (err) {
93
- if (!(err instanceof HomeArgsError))
93
+ if (!(err instanceof HostArgsError))
94
94
  throw err;
95
95
  console.error(`[aalis] ${err.message}`);
96
96
  process.exit(2);
97
97
  }
98
98
  const appDir = normalize(opts.appDir);
99
- const declared = derivePaths(home.home, appDir, home.profile);
99
+ const declared = derivePaths(resolved.dir, appDir, resolved.profile);
100
100
  if (hostArgs.init) {
101
101
  try {
102
- initHome(declared);
102
+ initDataDir(declared);
103
103
  }
104
104
  catch (err) {
105
105
  console.error(`[aalis] ${err instanceof Error ? err.message : String(err)}`);
106
106
  process.exit(1);
107
107
  }
108
- console.log(`[aalis] Initialized the home directory: ${declared.home}`);
108
+ console.log(`[aalis] Initialized the data directory: ${declared.data}`);
109
109
  process.exit(0);
110
110
  }
111
- if (!isHomeInitialized(declared)) {
112
- console.error(`[aalis] The home directory is not initialized: ${declared.home}\n` +
111
+ if (!isDataDirInitialized(declared)) {
112
+ console.error(`[aalis] The data directory is not initialized: ${declared.data}\n` +
113
113
  '[aalis] Run the start command once with --init (before any subcommand) to initialize it.');
114
114
  process.exit(1);
115
115
  }
116
- // 交给插件的家目录是真实路径:符号链接、大小写与末尾分隔符不同的写法指向同一个目录时,插件拿到的是同一个路径
117
- // (记忆库按它记归属)。profile 按写法认不出时按真实路径再认一次,派生的库名才跟着同一个目录走
118
- const realHome = realpathSync.native(declared.home);
119
- const paths = derivePaths(realHome, appDir, home.profile ?? profileOfRealHome(realHome));
120
- // 默认加载器从安装集的 package.json 找插件:缺了它会一个插件都不加载、照样起来,只留一行「发现 0 个插件」
116
+ // 交给插件的数据目录是真实路径:符号链接、大小写与末尾分隔符不同的写法指向同一个目录时,插件拿到的是同一个路径
117
+ // (记忆库按它记归属)
118
+ const paths = derivePaths(realpathSync.native(declared.data), appDir, resolved.profile);
119
+ // 默认加载器从安装集的 package.json 找插件:缺了它会一个插件都不加载、照样启动,只留一行「发现 0 个插件」
121
120
  if (!opts.pluginLoader && !existsSync(join(paths.app, 'package.json'))) {
122
121
  console.error(`[aalis] The install directory ${paths.app} has no package.json, so there are no plugins to load.\n` +
123
122
  `[aalis] appDir must point to the directory of the entry file, which holds package.json, for example ${APP_DIR_EXAMPLE}.`);
124
123
  process.exit(1);
125
124
  }
126
125
  const subcommands = hostArgs.rest;
127
- // ── 实例锁:同一家目录只许一个守护进程。要在写日志之前取到,否则第二个实例一起来就把正在写的 latest.log 轮转走 ──
128
- // 交接令牌读到就从环境里删掉,不让插件起的子进程与侧车继承它。子命令进程不取锁(它们以后经 socket 连实例)。
126
+ // ── 实例锁:同一数据目录只许一个守护进程。要在写日志之前取到,否则第二个实例一启动就把正在写的 latest.log 轮转走 ──
127
+ // 交接令牌读到就从环境里删掉,不让插件启动的子进程与侧车继承它。子命令进程不取锁(它们以后经 socket 连实例)。
129
128
  const handoffToken = process.env[HANDOFF_ENV];
130
129
  delete process.env[HANDOFF_ENV];
131
130
  let instanceLock;
@@ -140,11 +139,11 @@ export async function startAalis(opts) {
140
139
  }
141
140
  if (!acquired.ok) {
142
141
  const { holder, file } = acquired;
143
- const occupied = `[aalis] An instance is already running in the home directory ${paths.home}: pid ${holder.pid} (lock file ${file}).\n` +
142
+ const occupied = `[aalis] An instance is already running in the data directory ${paths.data}: pid ${holder.pid} (lock file ${file}).\n` +
144
143
  '[aalis] If you are sure no instance is running (for example, the process was killed and this machine cannot look up ' +
145
144
  'process start times, or a container was killed and restarted within the same boot), delete this lock file and start again.';
146
145
  if (hostArgs.service) {
147
- // 服务形态按正常退出:配合 KeepAlive={SuccessfulExit=false},不会被服务管理器反复拉起再抢锁
146
+ // 服务形态按正常退出:配合 KeepAlive={SuccessfulExit=false},不会被服务管理器反复重新启动再抢锁
148
147
  console.error(`${occupied}\n[aalis] Started as a service, so this counts as a normal exit.`);
149
148
  process.exit(0);
150
149
  }
@@ -155,13 +154,10 @@ export async function startAalis(opts) {
155
154
  const lock = acquired.lock;
156
155
  process.on('exit', () => lock.release());
157
156
  }
158
- // ── 最早期:任何日志之前先装 bootstrap buffer,再装 terminal / console sink ──
159
- const bootstrap = installBootstrapBuffer();
160
- if (terminalRestore)
161
- installTerminalStateRestorer();
157
+ // ── 最早期:任何日志之前先装 console sink ──
162
158
  const subcommandMode = subcommands.length > 0;
163
159
  // console sink 在 App 之前装:此时尚无事件总线(根绑定),sink 处于「无条件写」状态以打印早期启动日志,
164
- // 待 App 起来再 bindEvents 接管 terminal:claimed/released。子命令模式日志走 stderr,stdout 只留命令结果。
160
+ // 待 App 启动后再 bindEvents 接管 terminal:claimed/released。子命令模式日志走 stderr,stdout 只留命令结果。
165
161
  // consoleSink: false 仍装 stderr + minLevel warn:加载器拒载「另一份 @aalis/core」的插件记 error,不能只剩下游的指令服务不可用报错。
166
162
  const consoleHandle = consoleSink
167
163
  ? installConsoleSink(subcommandMode ? { target: 'stderr' } : {})
@@ -189,35 +185,48 @@ export async function startAalis(opts) {
189
185
  };
190
186
  process.on('uncaughtException', err => void exitWithFatalLog('Uncaught exception', err));
191
187
  process.on('unhandledRejection', reason => void exitWithFatalLog('Unhandled promise rejection', reason));
192
- // ── file logger(async)+ 释放 bootstrap buffer ──
188
+ // ── file logger(async)──
193
189
  if (fileLogTarget)
194
190
  fileLogger = await setupFileLogger(fileLogTarget);
195
- // sink 全部装好;bootstrap buffer 完成使命,解除订阅并释放内存。
196
- bootstrap.dispose();
197
191
  // ── 组装 App:YAML 配置文档与密钥文件、按 loader 发现插件、用 spawn 重启 ──
198
- // 配置或密钥文件读不进来(写坏了、读不了)是环境问题:一行报错退出,不带调用栈(消息不含文件内容)
192
+ // 配置或密钥文件读不进来(格式有误、读不了、插件配置段不是映射)是环境问题:一行报错退出,不带调用栈(消息不含文件内容)。
193
+ // 这时插件还没加载、没有读者语言,文字对象取英文
199
194
  const loadOrExit = (load) => {
200
195
  try {
201
196
  return load();
202
197
  }
203
198
  catch (err) {
204
- console.error(`[aalis] ${err instanceof Error ? err.message : String(err)}`);
199
+ const message = isTextError(err)
200
+ ? resolveText(err.text, ['en'])
201
+ : err instanceof Error
202
+ ? err.message
203
+ : String(err);
204
+ console.error(`[aalis] ${message}`);
205
205
  process.exit(1);
206
206
  }
207
207
  };
208
208
  const { config, provider } = loadOrExit(() => createFsYamlConfigProvider(paths.config));
209
209
  const secrets = loadOrExit(() => createFsSecretsProvider(paths.secrets));
210
- const store = createConfigStore(config, provider, secrets);
211
- // core 的慢操作阈值:缺省(含 YAML 空键解出的 null)交给 core 默认;不是非负有限数的写法告警后同样交给默认。
212
- // 它与 logLevel 只在这里读一次,改了要重启:哪些核心键只在启动时读以 schema-config 的 CORE_RESTART_KEYS 为准,
210
+ const store = loadOrExit(() => createConfigStore(config, provider, secrets));
211
+ // 只在启动时读、改了要重启的核心键(schema-config 的 CORE_RESTART_KEYS)在这里读一次交给 core,逐个按 CORE_CONFIG_SCHEMA
212
+ // 判定,与 WebUI 设置页同一套规则:缺省(含 YAML 空键解出的 null)交给 core 默认,不合法的告警后同样交给默认。
213
213
  // 改成热生效或新加启动时才读的键,同步改那一份
214
- const slowThresholdMs = store.get('slowThresholdMs') ?? undefined;
215
- const slowThresholdValid = slowThresholdMs === undefined ||
216
- (typeof slowThresholdMs === 'number' && Number.isFinite(slowThresholdMs) && slowThresholdMs >= 0);
214
+ const startup = {};
215
+ for (const key of CORE_RESTART_KEYS) {
216
+ const value = store.get(key);
217
+ const read = readFieldValue(CORE_CONFIG_SCHEMA[key], value);
218
+ if ('value' in read)
219
+ startup[key] = read.value;
220
+ else {
221
+ // 数字照原样显示:JSON.stringify 会把 Infinity / NaN 显示成 null
222
+ const received = typeof value === 'number' ? String(value) : JSON.stringify(value);
223
+ new DefaultLogger('aalis:config').warn(`配置项 ${key} 的值 ${received} 不可用:${read.invalid.source},按默认值处理`);
224
+ }
225
+ }
217
226
  const app = new App({
218
227
  name: store.get('name'),
219
- logLevel: store.get('logLevel'),
220
- slowThresholdMs: slowThresholdValid ? slowThresholdMs : undefined,
228
+ logLevel: startup.logLevel,
229
+ slowThresholdMs: startup.slowThresholdMs,
221
230
  // 子命令进程没有重启能力,不注入策略:`app.restart()` 按 core 语义抛「不可用」,指令层折成失败文案。
222
231
  // 注入的话,`restart` 子命令在 app.stop 超过策略 500ms 等待时会 spawn 一个 argv 仍带 restart 的
223
232
  // detached 子进程,新进程再命中 restart……无限连环(实测 5 代,Ctrl+C 打不到)。
@@ -227,7 +236,7 @@ export async function startAalis(opts) {
227
236
  ? createServiceRestartStrategy()
228
237
  : createProcessRespawnStrategy({
229
238
  appDir: paths.app,
230
- cwd: startCwd ?? paths.home,
239
+ cwd: startCwd ?? paths.data,
231
240
  ...(instanceLock ? { env: { [HANDOFF_ENV]: instanceLock.handoffToken } } : {}),
232
241
  }),
233
242
  // 宿主层决定 dev/prod;core 不读 process.env
@@ -235,11 +244,6 @@ export async function startAalis(opts) {
235
244
  // 宿主读取 @aalis/core 的实际版本注入启动 banner——core 环境无关、不自读 package.json。
236
245
  version: readCoreVersion(),
237
246
  });
238
- if (!slowThresholdValid) {
239
- // 数字照原样显示:JSON.stringify 会把 Infinity / NaN 显示成 null
240
- const received = typeof slowThresholdMs === 'number' ? String(slowThresholdMs) : JSON.stringify(slowThresholdMs);
241
- app.logger.warn(`配置项 slowThresholdMs 应为不小于 0 的有限数字(毫秒),收到 ${received},按默认值处理`);
242
- }
243
247
  // 宿主的根绑定:事件订阅、服务查询与宿主服务登记都经它,随 App 停止撤回
244
248
  const host = app.bind({ events, provide, services });
245
249
  // 宿主路径、日志与配置文档先于任何插件接上:插件激活时就要用到,文档里的服务偏好要在全部提供者上线前生效。
@@ -247,23 +251,16 @@ export async function startAalis(opts) {
247
251
  host.provide.use(hostPaths, paths, { exclusive: true });
248
252
  host.provide.use(hostLogs, createHostLogs(LogHub.default, fileLogger, app.logger), { exclusive: true });
249
253
  installHostConfig(app, store, opts.configSync);
250
- // 默认值从 configSchema 派生(唯一声明来源),导入定义后、登记前深合并进文档;登记时原样交给 core
251
- const configLoader = withPluginConfigSync(opts.pluginLoader ?? createNodeModulesPluginLoader(paths.app), app, store, opts.configSync);
252
- const discovery = createPluginDiscovery(app, configLoader.loader, store);
253
- host.provide.use(pluginSource, { rescan: () => discovery.rescan() }, { exclusive: true });
254
+ // 默认值从 configSchema 派生(唯一声明来源),发现驱动每批定下要登记的定义后、登记前深合并进文档;登记时原样交给 core
255
+ const discovery = createPluginDiscovery(app, opts.pluginLoader ?? createNodeModulesPluginLoader(paths.app), store, withPluginConfigSync(app, store, opts.configSync));
256
+ host.provide.use(pluginSource, { rescan: () => discovery.rescan(), loaded: name => discovery.loaded(name) }, { exclusive: true });
254
257
  // 不变量①:App 构造完成后再让 sink 监听终端归属事件——此前没有事件总线可订阅。
255
258
  consoleHandle.bindEvents(host.events.use);
256
- try {
257
- // 每个定义交给 Core 前已经规范化;首次 apply 与配置快照用同一份字段。
258
- await discovery.loadAll();
259
- }
260
- finally {
261
- // 即使后续加载失败,也保存本批已完成的规范化;不启动第二轮 bounce。
262
- configLoader.finishInitialLoad();
263
- }
259
+ // 每个定义交给 Core 前已经规范化;首次 apply 与配置快照用同一份字段。
260
+ await discovery.loadAll();
264
261
  // ── 不变量②:子命令短路在 app.start 之前 ──
265
262
  // `aalis <name> [args...]` 等价于聊天里 `/<name> args...`:命中则执行返回串,未命中则报错,
266
- // 两种情况都干净退出、**绝不进守护进程**——打错的命令名若照常起守护,就是与运行中实例并存的
263
+ // 两种情况都干净退出、**绝不进守护进程**——打错的命令名若照常启动守护进程,就是与运行中实例并存的
267
264
  // 第二个实例(同时连 onebot、每条消息回两遍)。与具体命令解耦——各插件自行注册命令。
268
265
  if (subcommandMode) {
269
266
  const exitCode = await tryDispatchSubcommand(host.services.use, subcommands);
@@ -286,7 +283,7 @@ export async function startAalis(opts) {
286
283
  else if (unmet.waiting.length > 0)
287
284
  app.logger.info(`插件 "${instance}" 在等依赖启动:${why}`);
288
285
  }
289
- // 向重启我们的父进程回报「起来了」。父进程据此决定放手退出,还是判定本次
286
+ // 向重启我们的父进程回报「已启动」。父进程据此决定放手退出,还是判定本次
290
287
  // 更新失败并回滚(见 providers.ts 的 createProcessRespawnStrategy)。
291
288
  //
292
289
  // 两道防护缺一不可,都为了「本进程绝不能因为报喜而死」:
@@ -296,7 +293,7 @@ export async function startAalis(opts) {
296
293
  // 2. callback —— 通道在判断与发送之间关闭(TOCTOU)时,错误改走 callback。没有它,
297
294
  // Node 会在 nextTick 往 process 上 emit 无监听者的 'error',直接升级成
298
295
  // uncaughtException 被 start.ts 顶部的 handler 捕获并 exit(1)——**同步 try/catch
299
- // 接不住**(错误是异步抛的)。症状会是「一重启就没、手动起就好」。
296
+ // 接不住**(错误是异步抛的)。症状会是「一重启就没、手动启动就好」。
300
297
  if (process.connected)
301
298
  process.send?.({ type: READY_MESSAGE }, undefined, undefined, () => { });
302
299
  // 握手完成后解除 IPC 对事件循环的持有——否则父进程退出前本进程无法自然结束。
@@ -304,7 +301,8 @@ export async function startAalis(opts) {
304
301
  // 配置外部变更热重载(provider 不支持 watch 时为 no-op);文件里新增的后缀实例经发现驱动登记。
305
302
  installConfigHotReload(app, store, discovery, opts.configSync);
306
303
  let stopping = false;
307
- const shutdown = async () => {
304
+ /** 走完停机后以 exitCode 退出。停机途中再来的不另行执行一次,退出码按先来的那次 */
305
+ const shutdown = async (exitCode) => {
308
306
  if (stopping)
309
307
  return;
310
308
  stopping = true;
@@ -313,10 +311,33 @@ export async function startAalis(opts) {
313
311
  // 入队,再等队列清空,确保 latest.log 含完整关闭日志。
314
312
  await new Promise(r => setImmediate(r));
315
313
  await fileLogger?.dispose();
316
- process.exit(0);
314
+ process.exit(exitCode);
317
315
  };
318
- process.on('SIGINT', shutdown);
319
- process.on('SIGTERM', shutdown);
316
+ // 停机要等插件收尾,停机途中再按 Ctrl+C 不打断它(npm start 一次 Ctrl+C 本就送来两个 SIGINT)。要立即退出改按 Ctrl+\:
317
+ // 不接 SIGQUIT,按默认动作当场结束,卡住的事件循环也拦不住;Windows 上对应的是 Ctrl+Break(SIGBREAK)。
318
+ // 提示是给按着键的人看的,直接写 stderr,不经日志:日志级别与控制台输出的设置都可能把它滤掉
319
+ process.on('SIGINT', () => {
320
+ if (!stopping)
321
+ console.error(`[aalis] Shutting down; press ${process.platform === 'win32' ? 'Ctrl+Break' : 'Ctrl+\\'} to quit now without waiting.`);
322
+ void shutdown(0);
323
+ });
324
+ process.on('SIGTERM', () => void shutdown(0));
325
+ // 关掉所在的终端时 shell 给前台作业发 SIGHUP,默认动作是不经停机直接结束,插件收尾与清理里的落盘全被跳过:接住它走完停机。
326
+ // respawn 出来的后代自成会话,终端关掉时收不到 SIGHUP,只在之后往已挂断的终端写时得到 EIO;输出接在管道上而读端走了是 EPIPE。
327
+ // 这两种写出错同样走完停机。以 --service 运行时输出断了(日志转发进程异常退出)不是要它停:停完以服务重启的退出码结束,由服务
328
+ // 管理器重新启动进程、重新接上输出,以 0 退出的话服务管理器当它正常退出、不再重新启动。两条流上一直挂着监听,写出错都由它接住、不再抛:
329
+ // 直接写流的(终端界面停用时写的复原序列)出错原本是未捕获的 'error';console 只在流上没有别的 'error' 监听时才自己接住,有工作
330
+ // 线程(经 tsx 跑源码时就有)时它的输出接在这两条流上,管道留下的监听把错误再抛出来,console 也接不住。未捕获的 'error' 经顶部
331
+ // 的 fatal handler 以 1 退出,停机断在中途。别的写错误(如输出重定向到写满的磁盘)只丢掉这次输出,与流上没有监听时 console 的
332
+ // 做法一致,文件日志照常
333
+ process.on('SIGHUP', () => void shutdown(0));
334
+ const outputLost = hostArgs.service ? SERVICE_RESTART_EXIT_CODE : 0;
335
+ for (const stream of outputs) {
336
+ stream.on('error', (err) => {
337
+ if (err.code === 'EIO' || err.code === 'EPIPE')
338
+ void shutdown(outputLost);
339
+ });
340
+ }
320
341
  return app;
321
342
  }
322
343
  //# sourceMappingURL=start.js.map
package/dist/start.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { Services } from '@aalis/core';
4
4
  *
5
5
  * 返回进程 exit code:命中则执行并返回 0;commands 服务不存在或命令名未注册则经 `err`
6
6
  * 报错并返回 2。**不存在「未命中就放行」的分支**——argv 非空即子命令模式,调用方据此退出、
7
- * 不进守护进程:打错的命令名若照常起守护,就是与运行中实例并存的第二个实例。
7
+ * 不进守护进程:打错的命令名若照常启动守护进程,就是与运行中实例并存的第二个实例。
8
8
  *
9
9
  * 不直接绑定任何具体命令;所有命令由插件向 commands 服务注册。
10
10
  *
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 返回进程 exit code:命中则执行并返回 0;commands 服务不存在或命令名未注册则经 `err`
5
5
  * 报错并返回 2。**不存在「未命中就放行」的分支**——argv 非空即子命令模式,调用方据此退出、
6
- * 不进守护进程:打错的命令名若照常起守护,就是与运行中实例并存的第二个实例。
6
+ * 不进守护进程:打错的命令名若照常启动守护进程,就是与运行中实例并存的第二个实例。
7
7
  *
8
8
  * 不直接绑定任何具体命令;所有命令由插件向 commands 服务注册。
9
9
  *
package/dist/texts.d.ts CHANGED
@@ -5,6 +5,10 @@ declare const SOURCE: {
5
5
  readonly yamlPosition: "{code}(第 {line} 行第 {col} 列)";
6
6
  readonly saveRefused: "{file}有尚未生效的外部修改,为免覆盖已拒绝本次保存({path})";
7
7
  readonly unsafePluginId: "插件 id 不合法:{id}";
8
+ readonly notMapping: "插件 {instance} 的配置须为映射,不能是 null、数组或标量";
9
+ readonly sectionNotMapping: "配置文档里的 {at} 不是映射(得到 {kind})";
10
+ readonly sectionNotList: "配置文档里的 {at} 不是列表(得到 {kind})";
11
+ readonly entryNotString: "配置文档里的 {at} 不是字符串(得到 {kind})";
8
12
  readonly noDefinition: "插件 {instance} 不存在,也没有可用来新建它的同模块定义(模块须已登记且声明 reusable)";
9
13
  readonly plainSecret: "setPluginConfig 只收文档形态:{instance} 的 {paths, list} 是密钥字段,不能写原值;改配置请用 applyPluginConfig";
10
14
  readonly secretAt: "{path}(键 {key})";
@@ -20,6 +24,10 @@ export declare const t: import("@aalis/schema-i18n").TextFactory<{
20
24
  readonly yamlPosition: "{code}(第 {line} 行第 {col} 列)";
21
25
  readonly saveRefused: "{file}有尚未生效的外部修改,为免覆盖已拒绝本次保存({path})";
22
26
  readonly unsafePluginId: "插件 id 不合法:{id}";
27
+ readonly notMapping: "插件 {instance} 的配置须为映射,不能是 null、数组或标量";
28
+ readonly sectionNotMapping: "配置文档里的 {at} 不是映射(得到 {kind})";
29
+ readonly sectionNotList: "配置文档里的 {at} 不是列表(得到 {kind})";
30
+ readonly entryNotString: "配置文档里的 {at} 不是字符串(得到 {kind})";
23
31
  readonly noDefinition: "插件 {instance} 不存在,也没有可用来新建它的同模块定义(模块须已登记且声明 reusable)";
24
32
  readonly plainSecret: "setPluginConfig 只收文档形态:{instance} 的 {paths, list} 是密钥字段,不能写原值;改配置请用 applyPluginConfig";
25
33
  readonly secretAt: "{path}(键 {key})";
@@ -1 +1 @@
1
- {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM;;;;;;;;;;;;;CAgBF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;;;;EAA4F,CAAC"}
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;CAoBF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;EAA4F,CAAC"}
package/dist/texts.js CHANGED
@@ -10,6 +10,10 @@ const SOURCE = {
10
10
  yamlPosition: '{code}(第 {line} 行第 {col} 列)',
11
11
  saveRefused: '{file}有尚未生效的外部修改,为免覆盖已拒绝本次保存({path})',
12
12
  unsafePluginId: '插件 id 不合法:{id}',
13
+ notMapping: '插件 {instance} 的配置须为映射,不能是 null、数组或标量',
14
+ sectionNotMapping: '配置文档里的 {at} 不是映射(得到 {kind})',
15
+ sectionNotList: '配置文档里的 {at} 不是列表(得到 {kind})',
16
+ entryNotString: '配置文档里的 {at} 不是字符串(得到 {kind})',
13
17
  noDefinition: '插件 {instance} 不存在,也没有可用来新建它的同模块定义(模块须已登记且声明 reusable)',
14
18
  plainSecret: 'setPluginConfig 只收文档形态:{instance} 的 {paths, list} 是密钥字段,不能写原值;改配置请用 applyPluginConfig',
15
19
  secretAt: '{path}(键 {key})',
package/dist/texts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,6BAA6B;IAC3C,WAAW,EAAE,sCAAsC;IACnD,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,uDAAuD;IACrE,WAAW,EACT,uFAAuF;IACzF,QAAQ,EAAE,iBAAiB;IAC3B,gBAAgB,EACd,+EAA+E;IACjF,QAAQ,EACN,8GAA8G;IAChH,eAAe,EAAE,0BAA0B;CACnC,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,6BAA6B;IAC3C,WAAW,EAAE,sCAAsC;IACnD,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,sCAAsC;IAClD,iBAAiB,EAAE,6BAA6B;IAChD,cAAc,EAAE,6BAA6B;IAC7C,cAAc,EAAE,8BAA8B;IAC9C,YAAY,EAAE,uDAAuD;IACrE,WAAW,EACT,uFAAuF;IACzF,QAAQ,EAAE,iBAAiB;IAC3B,gBAAgB,EACd,+EAA+E;IACjF,QAAQ,EACN,8GAA8G;IAChH,eAAe,EAAE,0BAA0B;CACnC,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC"}
@@ -13,7 +13,7 @@ interface YamlFileOptions<T> {
13
13
  */
14
14
  mode?: number;
15
15
  /**
16
- * 运行中改成空文件(或只剩注释)时按 {@link missing} 的值投递。缺省拒收:主配置变空多是写坏了,
16
+ * 运行中改成空文件(或只剩注释)时按 {@link missing} 的值投递。缺省拒收:主配置变空多是写入出错,
17
17
  * 放行会让全部插件按默认值重载;密钥文件清空是合法状态
18
18
  */
19
19
  emptyAsMissing?: boolean;
@@ -27,10 +27,12 @@ interface YamlFile<T> {
27
27
  save(value: T): void;
28
28
  /**
29
29
  * 监听文件所在目录(按文件名过滤)+ 300ms 去抖,按与上次读入或写出的内容比对去重(自写回不触发);
30
- * 拒写之后的下一次变更不去重;武装后立即对账一次。返回退订
30
+ * 拒写之后的下一次变更不去重;武装后立即核对一次。返回退订
31
31
  */
32
32
  watch(onChange: (next: T) => void): () => void;
33
33
  }
34
+ /** 值必须是纯映射:裸标量、数组会被下游按 Object.entries 摊开写回垃圾 */
35
+ export declare function describeNonMapping(v: unknown): string | null;
34
36
  export declare function openYamlFile<T extends object>(absPath: string, opts: YamlFileOptions<T>): YamlFile<T>;
35
37
  export {};
36
38
  //# sourceMappingURL=yaml-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-file.d.ts","sourceRoot":"","sources":["../src/yaml-file.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAe,KAAK,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AAUnF,UAAU,eAAe,CAAC,CAAC;IACzB,4DAA4D;IAC5D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5B,iBAAiB;IACjB,OAAO,IAAI,CAAC,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,QAAQ,CAAC,CAAC;IAClB,eAAe;IACf,OAAO,EAAE,CAAC,CAAC;IACX;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAChD;AAuCD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAsKrG"}
1
+ {"version":3,"file":"yaml-file.d.ts","sourceRoot":"","sources":["../src/yaml-file.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAe,KAAK,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AAUnF,UAAU,eAAe,CAAC,CAAC;IACzB,4DAA4D;IAC5D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5B,iBAAiB;IACjB,OAAO,IAAI,CAAC,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,QAAQ,CAAC,CAAC;IAClB,eAAe;IACf,OAAO,EAAE,CAAC,CAAC;IACX;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAChD;AA+BD,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CA4KrG"}
package/dist/yaml-file.js CHANGED
@@ -34,7 +34,7 @@ function parseYamlText(text, label, logger) {
34
34
  return doc.toJS();
35
35
  }
36
36
  /** 值必须是纯映射:裸标量、数组会被下游按 Object.entries 摊开写回垃圾 */
37
- function describeNonMapping(v) {
37
+ export function describeNonMapping(v) {
38
38
  if (v === null)
39
39
  return 'empty';
40
40
  if (Array.isArray(v))
@@ -48,7 +48,7 @@ export function openYamlFile(absPath, opts) {
48
48
  const dataDir = dirname(absPath);
49
49
  let raw = null;
50
50
  // 拒写之后调用方手里的文档(常连同运行态)已领先于文件:下一次文件变更不论内容是否等于 raw 都要投递,
51
- // 让宿主按文件重新对账。否则把文件原样改回的「修好」会被当成空变更跳过,文档与运行态从此偏离文件,
51
+ // 让宿主按文件重新核对。否则把文件原样改回的「修好」会被当成空变更跳过,文档与运行态从此偏离文件,
52
52
  // 下一次成功保存还会把被拒的改动写进去。
53
53
  let reconcilePending = false;
54
54
  let watcher = null;
@@ -78,7 +78,7 @@ export function openYamlFile(absPath, opts) {
78
78
  initial,
79
79
  save(value) {
80
80
  // 写前比对磁盘实况:盘上内容必须仍是本进程最后读入或写出的那份。不是,就有尚未生效的外部修改
81
- // (去抖窗口内、监听未武装、解析失败被搁置、另一个进程写过),整份覆写会把它静默吃掉,所以拒写。
81
+ // (去抖窗口内、监听未武装、解析失败被搁置、另一个进程写过),整份覆写会把它静默丢弃,所以拒写。
82
82
  // 文件不存在时没有可保护的内容,照写。
83
83
  let onDisk = null;
84
84
  try {
@@ -176,13 +176,17 @@ export function openYamlFile(absPath, opts) {
176
176
  logger.warn(`${label.source}不是一个映射(得到 ${kind}),本次变更已忽略`);
177
177
  return;
178
178
  }
179
+ // 处理器里的保存要看到这次的内容已读入,先推进;处理器拒收(抛错)时退回,与解析失败一样搁置:
180
+ // 之后的保存照样拒写,不把这份手改盖掉
181
+ const before = { raw, reconcilePending };
179
182
  raw = current;
180
183
  reconcilePending = false;
181
184
  try {
182
185
  onChange(parsed);
183
186
  }
184
187
  catch (err) {
185
- logger.warn(`${label.source}变更处理器抛错:${err instanceof Error ? err.message : String(err)}`);
188
+ ({ raw, reconcilePending } = before);
189
+ logger.warn(`${label.source}变更处理器抛错,本次变更已忽略,仍在使用上一份内容:${err instanceof Error ? err.message : String(err)}`);
186
190
  }
187
191
  }, 300);
188
192
  };
@@ -200,7 +204,7 @@ export function openYamlFile(absPath, opts) {
200
204
  watcher?.close();
201
205
  watcher = null;
202
206
  });
203
- // 武装即对账一次:武装前(启动期)的外部修改不会再有事件,不补就既不生效、又让 save 一直拒写
207
+ // 武装即核对一次:武装前(启动期)的外部修改不会再有事件,不补就既不生效、又让 save 一直拒写
204
208
  schedule();
205
209
  }
206
210
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-file.js","sourceRoot":"","sources":["../src/yaml-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yaml-file.js","sourceRoot":"","sources":["../src/yaml-file.ts"],"names":[],"mappings":"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"}