@aalis/runtime 0.15.1 → 0.17.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 (66) hide show
  1. package/README.md +11 -2
  2. package/dist/config-store.d.ts +47 -12
  3. package/dist/config-store.d.ts.map +1 -1
  4. package/dist/config-store.js +446 -60
  5. package/dist/config-store.js.map +1 -1
  6. package/dist/config-sync.d.ts +22 -8
  7. package/dist/config-sync.d.ts.map +1 -1
  8. package/dist/config-sync.js +86 -33
  9. package/dist/config-sync.js.map +1 -1
  10. package/dist/console-sink.d.ts +1 -1
  11. package/dist/file-logger.d.ts +4 -4
  12. package/dist/file-logger.d.ts.map +1 -1
  13. package/dist/file-logger.js +6 -5
  14. package/dist/file-logger.js.map +1 -1
  15. package/dist/home.d.ts +64 -0
  16. package/dist/home.d.ts.map +1 -0
  17. package/dist/home.js +236 -0
  18. package/dist/home.js.map +1 -0
  19. package/dist/host-logs.d.ts +9 -0
  20. package/dist/host-logs.d.ts.map +1 -0
  21. package/dist/host-logs.js +104 -0
  22. package/dist/host-logs.js.map +1 -0
  23. package/dist/index.d.ts +5 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +7 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/instance-lock.d.ts +56 -0
  28. package/dist/instance-lock.d.ts.map +1 -0
  29. package/dist/instance-lock.js +282 -0
  30. package/dist/instance-lock.js.map +1 -0
  31. package/dist/locales/en.d.ts +16 -0
  32. package/dist/locales/en.d.ts.map +1 -0
  33. package/dist/locales/en.js +16 -0
  34. package/dist/locales/en.js.map +1 -0
  35. package/dist/node-modules-loader.d.ts +2 -2
  36. package/dist/node-modules-loader.d.ts.map +1 -1
  37. package/dist/node-modules-loader.js +8 -4
  38. package/dist/node-modules-loader.js.map +1 -1
  39. package/dist/plugin-discovery.d.ts +9 -4
  40. package/dist/plugin-discovery.d.ts.map +1 -1
  41. package/dist/plugin-discovery.js +28 -16
  42. package/dist/plugin-discovery.js.map +1 -1
  43. package/dist/providers.d.ts +38 -13
  44. package/dist/providers.d.ts.map +1 -1
  45. package/dist/providers.js +107 -232
  46. package/dist/providers.js.map +1 -1
  47. package/dist/secrets.d.ts +47 -0
  48. package/dist/secrets.d.ts.map +1 -0
  49. package/dist/secrets.js +108 -0
  50. package/dist/secrets.js.map +1 -0
  51. package/dist/start.d.ts +19 -12
  52. package/dist/start.d.ts.map +1 -1
  53. package/dist/start.js +174 -48
  54. package/dist/start.js.map +1 -1
  55. package/dist/subcommand.d.ts.map +1 -1
  56. package/dist/subcommand.js +2 -2
  57. package/dist/subcommand.js.map +1 -1
  58. package/dist/texts.d.ts +31 -0
  59. package/dist/texts.d.ts.map +1 -0
  60. package/dist/texts.js +21 -0
  61. package/dist/texts.js.map +1 -0
  62. package/dist/yaml-file.d.ts +36 -0
  63. package/dist/yaml-file.d.ts.map +1 -0
  64. package/dist/yaml-file.js +220 -0
  65. package/dist/yaml-file.js.map +1 -0
  66. package/package.json +14 -7
@@ -1,6 +1,6 @@
1
- import { type AalisConfig } from '@aalis/api-host-config';
1
+ import type { AalisConfig } from '@aalis/api-host-config';
2
2
  import type { RestartStrategy } from '@aalis/core';
3
- import type { ConfigProvider } from './config-store.js';
3
+ import type { ConfigProvider, SecretProvider } from './config-store.js';
4
4
  import type { PluginLoader } from './plugin-discovery.js';
5
5
  interface FsYamlConfigProviderResult {
6
6
  /** 当前快照(交给 `createConfigStore(config, provider)` 作初始文档) */
@@ -9,24 +9,34 @@ interface FsYamlConfigProviderResult {
9
9
  provider: ConfigProvider;
10
10
  }
11
11
  /**
12
- * 创建一个基于 YAML 文件的 ConfigProvider。
12
+ * 创建一个基于 YAML 文件的 ConfigProvider。`absPath` 是配置文件的绝对路径(startAalis 传家目录里的 aalis.config.yaml)。
13
13
  *
14
- * - 同步读取 + 解析(值原样加载,不做任何替换——`${VAR}` 插值已随 `.env` 机制删除)
15
- * - `save()` 同步写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 {@link ConfigSaveRefusedError},只带路径)
16
- * - `watch()` 监听**配置文件所在目录**(按文件名过滤)+ 300ms debounce,
17
- * 并通过与 `rawYaml` 的内容比对去重,避免自激;拒写之后的下一次变更不去重;武装后立即对账一次
14
+ * - 同步读取 + 解析(值原样加载,不做任何替换);文件不存在时告警并以内存默认配置启动
15
+ * - `save()` 原子写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 `ConfigSaveRefusedError`,只带路径)
16
+ * - `watch()` 监听配置文件所在目录(按文件名过滤)+ 300ms 去抖,按内容比对去重,避免自激;武装后立即对账一次
18
17
  *
19
- * 返回 config 快照与 provider,供宿主组装 App。
18
+ * 读写与监听的细节见 {@link openYamlFile},与密钥文件共用。
20
19
  */
21
- export declare function createFsYamlConfigProvider(configPath?: string): FsYamlConfigProviderResult;
20
+ export declare function createFsYamlConfigProvider(absPath: string): FsYamlConfigProviderResult;
21
+ interface FsSecretsProviderResult {
22
+ /** 当前的键值(交给 `createConfigStore` 的 `secrets.values`) */
23
+ values: Record<string, unknown>;
24
+ provider: SecretProvider;
25
+ }
26
+ /**
27
+ * 创建基于家目录 `secrets.yaml` 的密钥存储:顶层是「键 → 值」的映射。读写、拒写与监听同配置文件,
28
+ * 另有三处不同:文件不存在时按空映射处理、不告警(第一次保存时建出);运行中改成空文件或只剩注释时按空映射处理;
29
+ * 原子写的临时文件一律以 0600 创建,不沿用原文件的权限位。
30
+ */
31
+ export declare function createFsSecretsProvider(absPath: string): FsSecretsProviderResult;
22
32
  /**
23
- * 创建一个基于 packages 目录扫描的 PluginLoader。
33
+ * 创建一个基于 packages 目录扫描的 PluginLoader。`rootDir` 是 packages 目录的绝对路径(源码形态的入口传 `<仓库>/packages`)。
24
34
  *
25
35
  * - `discover()`:读 dir 下每个子目录的 package.json,按 aalis-plugin 关键词收录可加载插件
26
36
  * - `load()`:先经 assertSameCore 核对 core 是宿主那份,再用 `pathToFileURL(entry).href` 动态 import
27
37
  * - `reload()`:用入口文件 mtime 作为 import URL 的 query 强制 ESM 缓存失效
28
38
  */
29
- export declare function createFsPluginLoader(packagesDir?: string): PluginLoader;
39
+ export declare function createFsPluginLoader(rootDir: string): PluginLoader;
30
40
  /** 子进程 `app.start()` 成功后经 IPC 回传的握手消息。 */
31
41
  export declare const READY_MESSAGE = "aalis:ready";
32
42
  /**
@@ -64,6 +74,12 @@ export interface RestartRollback {
64
74
  /** 判定不透明的 rollback 透传值是否是可用的凭据(core 不解释形状,由本层校验)。 */
65
75
  export declare function isRestartRollback(v: unknown): v is RestartRollback;
66
76
  export interface RespawnOptions {
77
+ /** 安装集目录:开发模式(.ts 入口)在这里找本地 tsx */
78
+ appDir: string;
79
+ /** 新进程的 cwd:启动时的 cwd,命令行里相对的 --home 才能解析到同一处 */
80
+ cwd: string;
81
+ /** 额外交给新进程的环境变量(实例锁的交接令牌) */
82
+ env?: Record<string, string>;
67
83
  /**
68
84
  * 等待子进程 IPC ready 的超时(毫秒,默认 30000)。
69
85
  *
@@ -73,10 +89,19 @@ export interface RespawnOptions {
73
89
  readyTimeoutMs?: number;
74
90
  }
75
91
  /** 组装重生用的 exec + argv。分离出来是为了单测覆盖 execArgv 保留。 */
76
- export declare function buildRespawnCommand(argv?: readonly string[], execArgv?: readonly string[], cwd?: string): {
92
+ export declare function buildRespawnCommand(appDir: string, argv?: readonly string[], execArgv?: readonly string[]): {
77
93
  exec: string;
78
94
  args: string[];
79
95
  };
96
+ /** 服务形态下重启以这个退出码结束:服务管理器(launchd 的 KeepAlive={SuccessfulExit=false}、systemd 的 Restart=on-failure)据此重新拉起 */
97
+ export declare const SERVICE_RESTART_EXIT_CODE = 75;
98
+ /**
99
+ * 服务形态的重启策略:停掉 App 后以 {@link SERVICE_RESTART_EXIT_CODE} 退出,由服务管理器拉起新进程,
100
+ * 新进程取锁时本进程的锁已随退出释放。不自己 spawn:detached 的新进程会脱离服务管理器的监管
101
+ * (launchd 不再看着它,systemd 随 cgroup 把它一起杀掉)。
102
+ * 服务形态下没有「新版起不来就回滚」:带回滚凭据的重启(市场更新)照常退出,并记一条说明。
103
+ */
104
+ export declare function createServiceRestartStrategy(): RestartStrategy;
80
105
  /**
81
106
  * Node 进程重启策略:spawn 一个 detached 子进程接管,确认其起得来后再退出当前进程。
82
107
  *
@@ -99,6 +124,6 @@ export declare function buildRespawnCommand(argv?: readonly string[], execArgv?:
99
124
  *
100
125
  * 对 .ts 入口(开发模式)会优先使用本地 `tsx` 二进制。
101
126
  */
102
- export declare function createProcessRespawnStrategy(opts?: RespawnOptions): RestartStrategy;
127
+ export declare function createProcessRespawnStrategy(opts: RespawnOptions): RestartStrategy;
103
128
  export {};
104
129
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA4C5E,UAAU,0BAA0B;IAClC,2DAA2D;IAC3D,MAAM,EAAE,WAAW,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,0BAA0B,CAgM1F;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CA4CvE;AAMD,0CAA0C;AAC1C,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAGlE;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,SAAS,MAAM,EAAiB,EACtC,QAAQ,GAAE,SAAS,MAAM,EAAqB,EAC9C,GAAG,GAAE,MAAsB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAYlC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,cAAmB,GAAG,eAAe,CAiHvF"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQxE,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAqD5E,UAAU,0BAA0B;IAClC,2DAA2D;IAC3D,MAAM,EAAE,WAAW,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAgBtF;AAED,UAAU,uBAAuB;IAC/B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAWhF;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA4ClE;AAMD,0CAA0C;AAC1C,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAGlE;AAED,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,SAAS,MAAM,EAAiB,EACtC,QAAQ,GAAE,SAAS,MAAM,EAAqB,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAYlC;AAED,2GAA2G;AAC3G,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,eAAe,CAsB9D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CA0HlF"}
package/dist/providers.js CHANGED
@@ -1,19 +1,26 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { randomBytes } from 'node:crypto';
3
- import { chmodSync, existsSync, watch as fsWatch, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from 'node:fs';
2
+ import { existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
3
  import { readdir } from 'node:fs/promises';
5
- import { basename, dirname, resolve } from 'node:path';
6
- import { ConfigSaveRefusedError } from '@aalis/api-host-config';
4
+ import { resolve } from 'node:path';
7
5
  import { DefaultLogger } from '@aalis/core';
8
6
  import { CORE_CONFIG_SCHEMA, defaultsFrom } from '@aalis/schema-config';
9
- import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
7
+ import { stringify as stringifyYaml } from 'yaml';
8
+ import { assertAbsolute } from './home.js';
10
9
  import { HOST_CORE_DIR, importPluginDefinition, isLoadablePlugin, warnLikelyPluginMissingKeyword, } from './node-modules-loader.js';
11
10
  import { disarmTerminalStateRestorer } from './terminal.js';
11
+ import { t } from './texts.js';
12
+ import { openYamlFile } from './yaml-file.js';
12
13
  // ============================================================
13
14
  // FsYamlConfigProvider —— 从 YAML 文件加载+持久化配置
14
15
  // ============================================================
15
- const DEFAULT_CONFIG_FILE = 'aalis.config.yaml';
16
- const CORE_TOP_LEVEL_KEYS = new Set(['name', 'logLevel', 'plugins', 'disabledPlugins', 'servicePreferences']);
16
+ const CORE_TOP_LEVEL_KEYS = new Set([
17
+ 'name',
18
+ 'logLevel',
19
+ 'plugins',
20
+ 'disabledPlugins',
21
+ 'servicePreferences',
22
+ 'pluginServicePreferences',
23
+ ]);
17
24
  /**
18
25
  * 把 AalisConfig 序列化为 YAML 文本,按固定顺序输出 core 字段,
19
26
  * 透传其余顶层字段(业务字段,宿主不解释)。
@@ -29,6 +36,9 @@ function buildSaveYaml(config) {
29
36
  if (Object.keys(prefs).length > 0) {
30
37
  obj.servicePreferences = prefs;
31
38
  }
39
+ const pluginPrefs = config.pluginServicePreferences ?? {};
40
+ if (Object.keys(pluginPrefs).length > 0)
41
+ obj.pluginServicePreferences = pluginPrefs;
32
42
  for (const [key, value] of Object.entries(config)) {
33
43
  if (CORE_TOP_LEVEL_KEYS.has(key))
34
44
  continue;
@@ -49,227 +59,60 @@ function buildSaveYaml(config) {
49
59
  return stringifyYaml(obj, { lineWidth: 0 });
50
60
  }
51
61
  /**
52
- * 创建一个基于 YAML 文件的 ConfigProvider。
62
+ * 创建一个基于 YAML 文件的 ConfigProvider。`absPath` 是配置文件的绝对路径(startAalis 传家目录里的 aalis.config.yaml)。
53
63
  *
54
- * - 同步读取 + 解析(值原样加载,不做任何替换——`${VAR}` 插值已随 `.env` 机制删除)
55
- * - `save()` 同步写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 {@link ConfigSaveRefusedError},只带路径)
56
- * - `watch()` 监听**配置文件所在目录**(按文件名过滤)+ 300ms debounce,
57
- * 并通过与 `rawYaml` 的内容比对去重,避免自激;拒写之后的下一次变更不去重;武装后立即对账一次
64
+ * - 同步读取 + 解析(值原样加载,不做任何替换);文件不存在时告警并以内存默认配置启动
65
+ * - `save()` 原子写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 `ConfigSaveRefusedError`,只带路径)
66
+ * - `watch()` 监听配置文件所在目录(按文件名过滤)+ 300ms 去抖,按内容比对去重,避免自激;武装后立即对账一次
58
67
  *
59
- * 返回 config 快照与 provider,供宿主组装 App。
68
+ * 读写与监听的细节见 {@link openYamlFile},与密钥文件共用。
60
69
  */
61
- export function createFsYamlConfigProvider(configPath) {
62
- const absPath = configPath ? resolve(configPath) : resolve(process.cwd(), DEFAULT_CONFIG_FILE);
63
- const dataDir = dirname(absPath);
64
- let rawYaml = null;
65
- // 拒写之后调用方手里的配置文档(常连同运行态)已领先于文件:下一次文件变更不论内容是否等于 rawYaml
66
- // 都要投递,让宿主按文件重新对账。否则把文件原样改回的「修好」会被当成空变更跳过,文档与运行态从此
67
- // 偏离文件,下一次成功保存还会把被拒的改动写进去。
68
- let reconcilePending = false;
69
- let watcher = null;
70
- let debounceTimer = null;
71
- // 走 LogHub 而非 console:file logger 只订阅 LogHub,脱终端部署下 stderr
72
- // 进不了 data/latest.log,console 版的告警等于没加。
70
+ export function createFsYamlConfigProvider(absPath) {
71
+ assertAbsolute('Config file path', absPath);
72
+ // 走 LogHub 而非 console:file logger 只订阅 LogHub,脱终端部署下 stderr 进不了 logs/latest.log
73
73
  const logger = new DefaultLogger('aalis:config');
74
- /**
75
- * 解析错误只取首行:yaml 的完整消息会内嵌出错位置附近的源码摘录,而配置
76
- * 文件里有真实密钥——摘录随日志进 data/latest.log 即泄漏(WebUI 日志面板、
77
- * 崩溃落盘、外贴排查都是暴露面)。诊断种类与行列号都在首行;
78
- * **位置进日志,内容不进**(与配置校验消息不带值同一条纪律)。
79
- */
80
- const parseErrorFirstLine = (err) => (err instanceof Error ? err.message : String(err)).split('\n')[0];
81
- /** 值必须是纯映射才算配置:裸标量/数组会被下游按 Object.entries 摊开写回垃圾。 */
82
- const describeNonMapping = (v) => {
83
- if (v === null)
84
- return 'empty';
85
- if (Array.isArray(v))
86
- return 'array';
87
- if (typeof v !== 'object')
88
- return typeof v;
89
- return null;
90
- };
91
- function loadFromDisk() {
92
- if (existsSync(absPath)) {
93
- rawYaml = readFileSync(absPath, 'utf-8');
94
- let parsed;
95
- try {
96
- parsed = parseYaml(rawYaml) ?? {};
97
- }
98
- catch (err) {
99
- // 启动语法错误照样响亮拒启,但剥离源码摘录再上抛——崩溃日志同为暴露面。
100
- throw new Error(`配置文件解析失败:${parseErrorFirstLine(err)}(${absPath})`);
101
- }
102
- // 启动坏就该响亮:语法错误本就上抛,「解析成功但不是配置对象」同样上抛,
103
- // 不能放进 core 摊成 "0": f 再写回磁盘。空文件视同缺省(?? {} 已兜)。
104
- const kind = describeNonMapping(parsed);
105
- if (kind) {
106
- throw new Error(`配置文件不是一个配置对象(得到 ${kind}):${absPath}`);
107
- }
108
- return parsed;
109
- }
110
- logger.warn(`配置文件不存在(${absPath}),使用内存默认配置启动`);
111
- rawYaml = null;
112
- // 名称与日志等级取 CORE_CONFIG_SCHEMA 的默认值,与配置文档补缺省同一来源
113
- const { name, logLevel } = defaultsFrom(CORE_CONFIG_SCHEMA);
114
- return { name: name, logLevel: logLevel, plugins: {} };
115
- }
116
- const initialConfig = loadFromDisk();
117
- const provider = {
118
- save(config) {
119
- // 写前比对磁盘实况:盘上内容必须仍是本进程最后读入或写出的那份。不是,就有尚未生效的
120
- // 外部修改(去抖窗口内、监听未武装、解析失败被搁置、另一个进程写过)——整份覆写会把它
121
- // 静默吃掉,所以拒写,让调用方收到拒绝。文件不存在时没有可保护的内容,照写。
122
- let onDisk = null;
123
- try {
124
- onDisk = readFileSync(absPath, 'utf-8');
125
- }
126
- catch (err) {
127
- if (err.code !== 'ENOENT')
128
- throw err;
129
- }
130
- if (onDisk !== null && onDisk !== rawYaml) {
131
- reconcilePending = true;
132
- throw new ConfigSaveRefusedError(`配置文件有尚未生效的外部修改,为免覆盖已拒绝本次保存(${absPath})`);
133
- }
134
- const yaml = buildSaveYaml(config);
135
- // 原子写:先写临时文件再 rename(同目录同分区,rename 原子覆盖)。
136
- // 直接 writeFileSync 是 O_CREAT|O_TRUNC——写中断(磁盘写满 / 进程被杀)时截断已经发生、
137
- // 写入却没完成,盘上留下 0 字节或半截 YAML。而空文件会被 loadFromDisk 当成「空配置」放行,
138
- // 随后 config-sync 按 schema 回填并再次存盘,没有 default 的 apiKey 就此永久消失,
139
- // 连「文件坏了」的现场都不留。同仓 plugin-storage-local 早已为同样的理由做原子写。
140
- // watch() 守的是目录而非文件(见下),所以 rename 换 inode 不会打断热重载。
141
- const tmp = `${absPath}.tmp.${process.pid}.${randomBytes(4).toString('hex')}`;
142
- // 临时文件建出来就是收紧的权限:沿用原文件的权限位,没有原文件(或取不到)时用 0o600。
143
- // 配置文件常含密钥:按默认 umask(通常 0644)建出再 chmod,其间或进程在 rename 前被杀时,
144
- // 目录里就有一份权限更宽的密钥副本;rename 让目标继承 tmp 的权限,用户 chmod 600 过的也不能退回 0644。
145
- let mode = 0o600;
146
- try {
147
- mode = statSync(absPath).mode & 0o777;
148
- }
149
- catch {
150
- /* 原文件不存在或取不到权限:按 0o600 建 */
151
- }
152
- try {
153
- writeFileSync(tmp, yaml, { encoding: 'utf-8', mode });
154
- // 建文件时的 mode 还会被 umask 收窄;对齐回目标权限位,至多放宽到原文件本就有的程度
155
- try {
156
- chmodSync(tmp, mode);
157
- }
158
- catch {
159
- /* 对不齐就保持建出时更窄的权限,不拖累写入本身 */
160
- }
161
- renameSync(tmp, absPath);
162
- }
163
- catch (err) {
164
- // 写入或改名失败:临时文件是整份配置(含密钥),不能留在配置目录里
165
- try {
166
- rmSync(tmp, { force: true });
167
- }
168
- catch {
169
- /* 删不掉也要把原始错误传出去 */
170
- }
171
- throw err;
172
- }
173
- rawYaml = yaml;
174
- reconcilePending = false;
74
+ const file = openYamlFile(absPath, {
75
+ label: t('configFile'),
76
+ logger,
77
+ serialize: buildSaveYaml,
78
+ missing: () => {
79
+ logger.warn(`配置文件不存在(${absPath}),使用内存默认配置启动`);
80
+ // 名称与日志等级取 CORE_CONFIG_SCHEMA 的默认值,与配置文档补缺省同一来源
81
+ const { name, logLevel } = defaultsFrom(CORE_CONFIG_SCHEMA);
82
+ return { name: name, logLevel: logLevel, plugins: {} };
175
83
  },
176
- watch(onChange) {
177
- if (watcher)
178
- return () => { };
179
- // 守目录而非文件:文件可能尚未落盘(首启前),建出来时也要能接上。
180
- if (!existsSync(dataDir))
181
- return () => { };
182
- const fileName = basename(absPath);
183
- try {
184
- const schedule = () => {
185
- if (debounceTimer)
186
- clearTimeout(debounceTimer);
187
- debounceTimer = setTimeout(() => {
188
- debounceTimer = null;
189
- // 读盘失败与解析失败必须拆开:编辑器先删后建式保存的瞬时 ENOENT
190
- // 若与语法错误共用一个 catch,会被误报成「你的 YAML 写错了」——
191
- // 比不报还糟。读不到安静返回(下一个事件会来),解析失败才出声。
192
- let current;
193
- try {
194
- current = readFileSync(absPath, 'utf-8');
195
- }
196
- catch {
197
- return;
198
- }
199
- // rawYaml 在装载 / save / 本回调三处维护,比对它一并挡掉自写回、目录里
200
- // 无关文件的杂音、touch,以及改完又改回来的空变更。拒写之后的这一次除外(见 reconcilePending)。
201
- if (current === rawYaml && !reconcilePending)
202
- return;
203
- let parsed;
204
- try {
205
- parsed = parseYaml(current);
206
- }
207
- catch (err) {
208
- // rawYaml 只在解析成功后推进(不变量=当前生效的那份内容):
209
- // 同一份坏内容每次保存都重新告警,直到改对为止。
210
- logger.warn(`配置文件解析失败,本次变更已忽略,仍在使用上一份配置:${parseErrorFirstLine(err)}`);
211
- return;
212
- }
213
- // 空文件 / 裸标量 / 数组:都是「解析不出一个配置对象」的同一问题,
214
- // 一道闸拒收——放行会让全部插件按默认值 bounce 或往配置文件写回垃圾。
215
- const kind = describeNonMapping(parsed);
216
- if (kind) {
217
- logger.warn(`配置文件不是一个配置对象(得到 ${kind}),本次变更已忽略`);
218
- return;
219
- }
220
- rawYaml = current;
221
- reconcilePending = false;
222
- try {
223
- onChange(parsed);
224
- }
225
- catch (err) {
226
- // 变更处理器抛错此前被整段 catch 静默吞掉——保留兜底但必须出声。
227
- logger.warn(`配置变更处理器抛错:${err instanceof Error ? err.message : String(err)}`);
228
- }
229
- }, 300);
230
- };
231
- // **必须监听目录,不能监听文件本身。** fs.watch 绑的是那一刻的 inode,而编辑器
232
- // 保存普遍是「写临时文件 → rename 覆盖」——rename 之后同名文件已是新 inode,
233
- // 绑在旧 inode 上的 watcher 从此永不触发,且无异常、无日志、无返回值。
234
- // save() 同样是「写临时文件 → rename」(见上),自写回也会换 inode——守文件在
235
- // 第一次保存后就失聪;守目录则人改与自写回两种来源都接得住。
236
- watcher = fsWatch(dataDir, (_event, filename) => {
237
- // filename 平台不保证非空;为空时不敢过滤,交给下面的内容比对兜底。
238
- if (filename && basename(filename.toString()) !== fileName)
239
- return;
240
- schedule();
241
- });
242
- // 武装即对账一次:武装前(启动期)的外部修改不会再有事件,不补就既不生效、又让 save 一直拒写。
243
- schedule();
244
- }
245
- catch (err) {
246
- // 平台或挂载不支持 watch:外部修改从此不会自动生效,save 也会因盘上内容已变而拒写。
247
- logger.warn(`无法监听配置文件变更(${err instanceof Error ? err.message : String(err)}):手动修改后需重启才生效,重启前的进程保存会被拒绝`);
248
- }
249
- return () => {
250
- if (debounceTimer) {
251
- clearTimeout(debounceTimer);
252
- debounceTimer = null;
253
- }
254
- watcher?.close();
255
- watcher = null;
256
- };
257
- },
258
- };
259
- return { config: initialConfig, provider };
84
+ });
85
+ return { config: file.initial, provider: { save: config => file.save(config), watch: file.watch } };
86
+ }
87
+ /**
88
+ * 创建基于家目录 `secrets.yaml` 的密钥存储:顶层是「键 → 值」的映射。读写、拒写与监听同配置文件,
89
+ * 另有三处不同:文件不存在时按空映射处理、不告警(第一次保存时建出);运行中改成空文件或只剩注释时按空映射处理;
90
+ * 原子写的临时文件一律以 0600 创建,不沿用原文件的权限位。
91
+ */
92
+ export function createFsSecretsProvider(absPath) {
93
+ assertAbsolute('Secrets file path', absPath);
94
+ const file = openYamlFile(absPath, {
95
+ label: t('secretsFile'),
96
+ logger: new DefaultLogger('aalis:secrets'),
97
+ serialize: values => stringifyYaml(values, { lineWidth: 0 }),
98
+ missing: () => ({}),
99
+ mode: 0o600,
100
+ emptyAsMissing: true,
101
+ });
102
+ return { values: file.initial, provider: { save: values => file.save(values), watch: file.watch } };
260
103
  }
261
104
  // ============================================================
262
105
  // FsPluginLoader —— 扫描目录 + dynamic import
263
106
  // ============================================================
264
107
  /**
265
- * 创建一个基于 packages 目录扫描的 PluginLoader。
108
+ * 创建一个基于 packages 目录扫描的 PluginLoader。`rootDir` 是 packages 目录的绝对路径(源码形态的入口传 `<仓库>/packages`)。
266
109
  *
267
110
  * - `discover()`:读 dir 下每个子目录的 package.json,按 aalis-plugin 关键词收录可加载插件
268
111
  * - `load()`:先经 assertSameCore 核对 core 是宿主那份,再用 `pathToFileURL(entry).href` 动态 import
269
112
  * - `reload()`:用入口文件 mtime 作为 import URL 的 query 强制 ESM 缓存失效
270
113
  */
271
- export function createFsPluginLoader(packagesDir) {
272
- const rootDir = packagesDir ?? resolve(process.cwd(), 'packages');
114
+ export function createFsPluginLoader(rootDir) {
115
+ assertAbsolute('Packages directory', rootDir);
273
116
  // 死门信号与 node_modules 加载器同一套(本仓自托管入口走的正是本加载器,
274
117
  // 只在一边出声等于对自己的部署失聪)。
275
118
  const loaderLogger = new DefaultLogger('aalis:loader');
@@ -323,11 +166,11 @@ export function isRestartRollback(v) {
323
166
  return !!r && typeof r.reason === 'string' && Array.isArray(r.restore);
324
167
  }
325
168
  /** 组装重生用的 exec + argv。分离出来是为了单测覆盖 execArgv 保留。 */
326
- export function buildRespawnCommand(argv = process.argv, execArgv = process.execArgv, cwd = process.cwd()) {
169
+ export function buildRespawnCommand(appDir, argv = process.argv, execArgv = process.execArgv) {
327
170
  const scriptFile = argv[1];
328
171
  if (scriptFile?.endsWith('.ts')) {
329
172
  // tsx 是包装脚本,node 层 flag 由它自己转交,不能塞在它前面。
330
- const tsxBin = resolve(cwd, 'node_modules', '.bin', 'tsx');
173
+ const tsxBin = resolve(appDir, 'node_modules', '.bin', 'tsx');
331
174
  return { exec: existsSync(tsxBin) ? tsxBin : 'tsx', args: [...argv.slice(1)] };
332
175
  }
333
176
  // execArgv 不在 argv 里:`node --max-old-space-size=4096 dist/start.js` 的
@@ -336,6 +179,36 @@ export function buildRespawnCommand(argv = process.argv, execArgv = process.exec
336
179
  const [exec, ...rest] = argv;
337
180
  return { exec: exec ?? process.execPath, args: [...execArgv, ...rest] };
338
181
  }
182
+ /** 服务形态下重启以这个退出码结束:服务管理器(launchd 的 KeepAlive={SuccessfulExit=false}、systemd 的 Restart=on-failure)据此重新拉起 */
183
+ export const SERVICE_RESTART_EXIT_CODE = 75;
184
+ /**
185
+ * 服务形态的重启策略:停掉 App 后以 {@link SERVICE_RESTART_EXIT_CODE} 退出,由服务管理器拉起新进程,
186
+ * 新进程取锁时本进程的锁已随退出释放。不自己 spawn:detached 的新进程会脱离服务管理器的监管
187
+ * (launchd 不再看着它,systemd 随 cgroup 把它一起杀掉)。
188
+ * 服务形态下没有「新版起不来就回滚」:带回滚凭据的重启(市场更新)照常退出,并记一条说明。
189
+ */
190
+ export function createServiceRestartStrategy() {
191
+ let restarting = false;
192
+ return {
193
+ async restart({ stop, rollback }) {
194
+ if (restarting) {
195
+ console.error('[aalis] A restart is already in progress; ignoring this request.');
196
+ return;
197
+ }
198
+ restarting = true;
199
+ if (isRestartRollback(rollback)) {
200
+ console.error(`[aalis] Running as a service, so the service manager handles the restart; if the new version fails to start, it is not rolled back automatically (${rollback.reason}).`);
201
+ }
202
+ try {
203
+ await stop();
204
+ }
205
+ catch (err) {
206
+ console.error('[aalis] Error while stopping the app; restarting anyway:', err);
207
+ }
208
+ process.exit(SERVICE_RESTART_EXIT_CODE);
209
+ },
210
+ };
211
+ }
339
212
  /**
340
213
  * Node 进程重启策略:spawn 一个 detached 子进程接管,确认其起得来后再退出当前进程。
341
214
  *
@@ -358,13 +231,14 @@ export function buildRespawnCommand(argv = process.argv, execArgv = process.exec
358
231
  *
359
232
  * 对 .ts 入口(开发模式)会优先使用本地 `tsx` 二进制。
360
233
  */
361
- export function createProcessRespawnStrategy(opts = {}) {
234
+ export function createProcessRespawnStrategy(opts) {
362
235
  const readyTimeoutMs = opts.readyTimeoutMs ?? 30_000;
363
236
  let restarting = false;
364
237
  function spawnChild(withIpc) {
365
- const { exec, args } = buildRespawnCommand();
238
+ const { exec, args } = buildRespawnCommand(opts.appDir);
366
239
  return spawn(exec, args, {
367
- cwd: process.cwd(),
240
+ cwd: opts.cwd,
241
+ env: { ...process.env, ...opts.env },
368
242
  stdio: withIpc ? ['inherit', 'inherit', 'inherit', 'ipc'] : 'inherit',
369
243
  detached: true,
370
244
  });
@@ -372,7 +246,7 @@ export function createProcessRespawnStrategy(opts = {}) {
372
246
  return {
373
247
  async restart({ stop, rollback }) {
374
248
  if (restarting) {
375
- console.error('[aalis] 已有重启在进行中,忽略本次请求。');
249
+ console.error('[aalis] A restart is already in progress; ignoring this request.');
376
250
  return;
377
251
  }
378
252
  restarting = true;
@@ -382,7 +256,7 @@ export function createProcessRespawnStrategy(opts = {}) {
382
256
  }
383
257
  catch (err) {
384
258
  // 停不干净也要往下走:僵尸态比一次不完全的重启更糟。
385
- console.error('[aalis] 停止应用时出错,仍继续重启:', err);
259
+ console.error('[aalis] Error while stopping the app; restarting anyway:', err);
386
260
  }
387
261
  const child = spawnChild(true);
388
262
  const outcome = await new Promise(resolveOutcome => {
@@ -413,10 +287,10 @@ export function createProcessRespawnStrategy(opts = {}) {
413
287
  }
414
288
  // ── 新进程在就绪前夭折 ──
415
289
  if (!isRestartRollback(rollback)) {
416
- console.error('[aalis] 重启失败:新进程未能启动,且本次重启未带回滚凭据。请检查上方日志。');
290
+ console.error('[aalis] Restart failed: the new process did not start, and this restart carries no rollback information. See the log above.');
417
291
  process.exit(1);
418
292
  }
419
- console.error(`[aalis] 新进程未能启动,正在回滚(${rollback.reason})…`);
293
+ console.error(`[aalis] The new process did not start; rolling back (${rollback.reason})…`);
420
294
  // 任一还原失败就不再往下走:部分还原后跑 postRestore 会在「package.json 已回退、
421
295
  // lockfile 未回退」的混合树上安装,比不回滚更糟。此时把原始内容打进日志——
422
296
  // 它是盘外仅存的一份,用户据此可手工恢复。
@@ -431,13 +305,14 @@ export function createProcessRespawnStrategy(opts = {}) {
431
305
  }
432
306
  catch (err) {
433
307
  failed.push(f.path);
434
- console.error(`[aalis] 回滚${f.deleteIfEmpty ? '删除' : '写入'}失败 ${f.path}:`, err);
435
- if (!f.deleteIfEmpty)
436
- console.error(`[aalis] 该文件的更新前内容如下,请手工恢复:\n${f.content}`);
308
+ console.error(`[aalis] Rollback could not ${f.deleteIfEmpty ? 'delete' : 'write'} ${f.path}:`, err);
309
+ if (!f.deleteIfEmpty) {
310
+ console.error(`[aalis] The content of this file before the update follows; restore it by hand:\n${f.content}`);
311
+ }
437
312
  }
438
313
  }
439
314
  if (failed.length > 0) {
440
- console.error(`[aalis] 回滚未完成(${failed.length} 个文件写入失败),已跳过重装以免留下混合状态。`);
315
+ console.error(`[aalis] Rollback incomplete (files not restored: ${failed.length}); skipped reinstalling so the project is not left in a mixed state.`);
441
316
  process.exit(1);
442
317
  }
443
318
  if (rollback.postRestore) {
@@ -452,21 +327,21 @@ export function createProcessRespawnStrategy(opts = {}) {
452
327
  const p = spawn(cmd, args, { cwd, stdio: 'inherit' });
453
328
  p.on('exit', c => r(c));
454
329
  p.on('error', err => {
455
- console.error('[aalis] 回滚命令执行失败:', err);
330
+ console.error('[aalis] The rollback command could not run:', err);
456
331
  r(-1);
457
332
  });
458
333
  });
459
334
  if (code !== 0) {
460
- console.error(`[aalis] 回滚未完成:依赖重装失败(${cmd} 退出码 ${code})。\n` +
461
- `[aalis] 配置文件已还原,但 node_modules 仍是更新后的版本 —— 工程处于「声明旧版、实装新版」的错位状态。\n` +
462
- `[aalis] 请联网后手工执行:${[cmd, ...args].join(' ')}(cwd: ${cwd})\n` +
463
- '[aalis] 未重新拉起旧版进程:它会加载到新版代码,很可能反复崩溃。');
335
+ console.error(`[aalis] Rollback incomplete: reinstalling dependencies failed (${cmd} exited with code ${code}).\n` +
336
+ '[aalis] The files were restored, but node_modules still holds the updated versions: the project declares the old versions while the new ones are installed.\n' +
337
+ `[aalis] Once online, run by hand: ${[cmd, ...args].join(' ')} (cwd: ${cwd})\n` +
338
+ '[aalis] The old version was not started again: it would load the new code and likely keep crashing.');
464
339
  process.exit(1);
465
340
  }
466
341
  }
467
342
  const revived = spawnChild(false);
468
343
  revived.unref();
469
- console.error('[aalis] 已回滚并重新启动旧版本。');
344
+ console.error('[aalis] Rolled back and started the old version again.');
470
345
  process.exit(1);
471
346
  },
472
347
  };
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}