@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.
- package/README.md +11 -2
- package/dist/config-store.d.ts +47 -12
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +446 -60
- package/dist/config-store.js.map +1 -1
- package/dist/config-sync.d.ts +22 -8
- package/dist/config-sync.d.ts.map +1 -1
- package/dist/config-sync.js +86 -33
- package/dist/config-sync.js.map +1 -1
- package/dist/console-sink.d.ts +1 -1
- package/dist/file-logger.d.ts +4 -4
- package/dist/file-logger.d.ts.map +1 -1
- package/dist/file-logger.js +6 -5
- package/dist/file-logger.js.map +1 -1
- package/dist/home.d.ts +64 -0
- package/dist/home.d.ts.map +1 -0
- package/dist/home.js +236 -0
- package/dist/home.js.map +1 -0
- package/dist/host-logs.d.ts +9 -0
- package/dist/host-logs.d.ts.map +1 -0
- package/dist/host-logs.js +104 -0
- package/dist/host-logs.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/instance-lock.d.ts +56 -0
- package/dist/instance-lock.d.ts.map +1 -0
- package/dist/instance-lock.js +282 -0
- package/dist/instance-lock.js.map +1 -0
- package/dist/locales/en.d.ts +16 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +16 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/node-modules-loader.d.ts +2 -2
- package/dist/node-modules-loader.d.ts.map +1 -1
- package/dist/node-modules-loader.js +8 -4
- package/dist/node-modules-loader.js.map +1 -1
- package/dist/plugin-discovery.d.ts +9 -4
- package/dist/plugin-discovery.d.ts.map +1 -1
- package/dist/plugin-discovery.js +28 -16
- package/dist/plugin-discovery.js.map +1 -1
- package/dist/providers.d.ts +38 -13
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +107 -232
- package/dist/providers.js.map +1 -1
- package/dist/secrets.d.ts +47 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +108 -0
- package/dist/secrets.js.map +1 -0
- package/dist/start.d.ts +19 -12
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +174 -48
- package/dist/start.js.map +1 -1
- package/dist/subcommand.d.ts.map +1 -1
- package/dist/subcommand.js +2 -2
- package/dist/subcommand.js.map +1 -1
- package/dist/texts.d.ts +31 -0
- package/dist/texts.d.ts.map +1 -0
- package/dist/texts.js +21 -0
- package/dist/texts.js.map +1 -0
- package/dist/yaml-file.d.ts +36 -0
- package/dist/yaml-file.d.ts.map +1 -0
- package/dist/yaml-file.js +220 -0
- package/dist/yaml-file.js.map +1 -0
- package/package.json +14 -7
package/dist/providers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
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
|
-
* - 同步读取 +
|
|
15
|
-
* - `save()`
|
|
16
|
-
* - `watch()`
|
|
17
|
-
* 并通过与 `rawYaml` 的内容比对去重,避免自激;拒写之后的下一次变更不去重;武装后立即对账一次
|
|
14
|
+
* - 同步读取 + 解析(值原样加载,不做任何替换);文件不存在时告警并以内存默认配置启动
|
|
15
|
+
* - `save()` 原子写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 `ConfigSaveRefusedError`,只带路径)
|
|
16
|
+
* - `watch()` 监听配置文件所在目录(按文件名过滤)+ 300ms 去抖,按内容比对去重,避免自激;武装后立即对账一次
|
|
18
17
|
*
|
|
19
|
-
*
|
|
18
|
+
* 读写与监听的细节见 {@link openYamlFile},与密钥文件共用。
|
|
20
19
|
*/
|
|
21
|
-
export declare function createFsYamlConfigProvider(
|
|
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(
|
|
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[]
|
|
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
|
|
127
|
+
export declare function createProcessRespawnStrategy(opts: RespawnOptions): RestartStrategy;
|
|
103
128
|
export {};
|
|
104
129
|
//# sourceMappingURL=providers.d.ts.map
|
package/dist/providers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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
|
|
16
|
-
|
|
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
|
-
* - 同步读取 +
|
|
55
|
-
* - `save()`
|
|
56
|
-
* - `watch()`
|
|
57
|
-
* 并通过与 `rawYaml` 的内容比对去重,避免自激;拒写之后的下一次变更不去重;武装后立即对账一次
|
|
64
|
+
* - 同步读取 + 解析(值原样加载,不做任何替换);文件不存在时告警并以内存默认配置启动
|
|
65
|
+
* - `save()` 原子写回;写前比对盘上内容,有尚未生效的外部修改时拒写(抛 `ConfigSaveRefusedError`,只带路径)
|
|
66
|
+
* - `watch()` 监听配置文件所在目录(按文件名过滤)+ 300ms 去抖,按内容比对去重,避免自激;武装后立即对账一次
|
|
58
67
|
*
|
|
59
|
-
*
|
|
68
|
+
* 读写与监听的细节见 {@link openYamlFile},与密钥文件共用。
|
|
60
69
|
*/
|
|
61
|
-
export function createFsYamlConfigProvider(
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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(
|
|
272
|
-
|
|
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
|
|
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(
|
|
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:
|
|
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]
|
|
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]
|
|
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]
|
|
435
|
-
if (!f.deleteIfEmpty)
|
|
436
|
-
console.error(`[aalis]
|
|
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]
|
|
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]
|
|
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]
|
|
461
|
-
|
|
462
|
-
`[aalis]
|
|
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
|
};
|
package/dist/providers.js.map
CHANGED
|
@@ -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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"}
|