@aalis/runtime 0.5.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config-sync.d.ts +29 -0
- package/dist/config-sync.d.ts.map +1 -0
- package/dist/config-sync.js +133 -0
- package/dist/config-sync.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +68 -6
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +151 -107
- package/dist/providers.js.map +1 -1
- package/dist/start.d.ts +6 -0
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +25 -1
- package/dist/start.js.map +1 -1
- package/dist/subcommand.d.ts.map +1 -1
- package/dist/terminal.d.ts +13 -0
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +18 -0
- package/dist/terminal.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { App } from '@aalis/core';
|
|
2
|
+
export interface ConfigSyncOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 是否按 configSchema 裁剪未知字段(默认 `true`)。
|
|
5
|
+
* 设为 `false` 时保留 schema 外的字段——适合允许手写实验性配置、
|
|
6
|
+
* 或 schema 滞后于实现的场景。
|
|
7
|
+
*/
|
|
8
|
+
trimUnknownFields?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 将各插件 defaultConfig 中缺失的字段合并到配置;同时按 configSchema
|
|
12
|
+
* 移除多余字段。返回发生变更的插件 instanceId 列表。
|
|
13
|
+
*
|
|
14
|
+
* 副作用:对每个变化条目 setPluginConfig;若有变化最终调用 save()。
|
|
15
|
+
* 插件的 defaultConfig / configSchema 经 `getPlugin(instanceId).module` 读取
|
|
16
|
+
* (core 的状态摘要不携带配置详情)。
|
|
17
|
+
*/
|
|
18
|
+
export declare function syncPluginDefaults(app: App, opts?: ConfigSyncOptions): string[];
|
|
19
|
+
/**
|
|
20
|
+
* 配置外部变更时的处理:先按启动路径同一政策同步,再重新计算各插件配置
|
|
21
|
+
* 并热重载差异(updatePluginConfig → bounce)。
|
|
22
|
+
*/
|
|
23
|
+
export declare function handleConfigChanged(app: App, opts?: ConfigSyncOptions): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* 接管配置外部变更监听(provider 不支持 watch 时为 no-op)。
|
|
26
|
+
* startAalis 默认调用;嵌入式宿主可自行选择是否接。
|
|
27
|
+
*/
|
|
28
|
+
export declare function installConfigHotReload(app: App, opts?: ConfigSyncOptions): void;
|
|
29
|
+
//# sourceMappingURL=config-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../src/config-sync.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAuB/E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAE/E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// config-sync —— 插件配置同步政策 + 配置热重载编排(宿主政策层)
|
|
3
|
+
//
|
|
4
|
+
// - syncPluginDefaults:defaultConfig 回填 + 按 configSchema 裁剪未知字段
|
|
5
|
+
// - handleConfigChanged / installConfigHotReload:配置外部变更的 diff + bounce 编排
|
|
6
|
+
//
|
|
7
|
+
// 这些是**政策**(要不要裁剪、怎么合并、何时 bounce),core 只持有机制
|
|
8
|
+
// (配置快照 get/set、watch 透传、updatePluginConfig)。不接本模块的嵌入式
|
|
9
|
+
// 宿主将没有自动配置同步与热重载——需要时用公开 API 自行编排。
|
|
10
|
+
// ============================================================
|
|
11
|
+
/**
|
|
12
|
+
* 将各插件 defaultConfig 中缺失的字段合并到配置;同时按 configSchema
|
|
13
|
+
* 移除多余字段。返回发生变更的插件 instanceId 列表。
|
|
14
|
+
*
|
|
15
|
+
* 副作用:对每个变化条目 setPluginConfig;若有变化最终调用 save()。
|
|
16
|
+
* 插件的 defaultConfig / configSchema 经 `getPlugin(instanceId).module` 读取
|
|
17
|
+
* (core 的状态摘要不携带配置详情)。
|
|
18
|
+
*/
|
|
19
|
+
export function syncPluginDefaults(app, opts) {
|
|
20
|
+
const trim = opts?.trimUnknownFields ?? true;
|
|
21
|
+
const config = app.ctx.config;
|
|
22
|
+
const changed = [];
|
|
23
|
+
for (const status of app.plugins.getStatus()) {
|
|
24
|
+
const entry = app.plugins.getPlugin(status.instanceId);
|
|
25
|
+
if (!entry)
|
|
26
|
+
continue;
|
|
27
|
+
const defaults = entry.module.defaultConfig ?? {};
|
|
28
|
+
const schema = entry.module.configSchema;
|
|
29
|
+
const fileConfig = config.getPluginConfig(status.instanceId);
|
|
30
|
+
let merged = deepMergeDefaults(defaults, fileConfig);
|
|
31
|
+
if (trim && schema && Object.keys(schema).length > 0) {
|
|
32
|
+
merged = removeExtraFields(merged, schema);
|
|
33
|
+
}
|
|
34
|
+
if (JSON.stringify(merged) !== JSON.stringify(fileConfig)) {
|
|
35
|
+
config.setPluginConfig(status.instanceId, merged);
|
|
36
|
+
changed.push(status.instanceId);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (changed.length > 0)
|
|
40
|
+
config.save();
|
|
41
|
+
return changed;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 配置外部变更时的处理:先按启动路径同一政策同步,再重新计算各插件配置
|
|
45
|
+
* 并热重载差异(updatePluginConfig → bounce)。
|
|
46
|
+
*/
|
|
47
|
+
export async function handleConfigChanged(app, opts) {
|
|
48
|
+
app.logger.info('检测到配置变更,正在热重载...');
|
|
49
|
+
try {
|
|
50
|
+
// 与启动路径同一政策先同步一遍(补 defaultConfig 缺失字段 + 裁剪 schema 外字段)
|
|
51
|
+
// ——否则热重载读入的原始快照会绕过政策,内存态与启动态在字段清理上不一致。
|
|
52
|
+
const synced = syncPluginDefaults(app, opts);
|
|
53
|
+
for (const id of synced)
|
|
54
|
+
app.logger.debug(`热重载配置同步: ${id}`);
|
|
55
|
+
let changed = false;
|
|
56
|
+
for (const status of app.plugins.getStatus()) {
|
|
57
|
+
const entry = app.plugins.getPlugin(status.instanceId);
|
|
58
|
+
if (!entry)
|
|
59
|
+
continue;
|
|
60
|
+
const defaults = entry.module.defaultConfig ?? {};
|
|
61
|
+
const fileConfig = app.ctx.config.getPluginConfig(status.instanceId);
|
|
62
|
+
const newConfig = { ...defaults, ...fileConfig };
|
|
63
|
+
if (JSON.stringify(newConfig) !== JSON.stringify(entry.config)) {
|
|
64
|
+
app.logger.info(`插件 ${status.instanceId} 配置已变更,正在重新加载...`);
|
|
65
|
+
await app.plugins.updatePluginConfig(status.instanceId, newConfig);
|
|
66
|
+
changed = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (changed) {
|
|
70
|
+
await app.ctx.emit('plugins:changed');
|
|
71
|
+
}
|
|
72
|
+
app.logger.info('配置热重载完成');
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
app.logger.error('配置热重载失败:', e);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 接管配置外部变更监听(provider 不支持 watch 时为 no-op)。
|
|
80
|
+
* startAalis 默认调用;嵌入式宿主可自行选择是否接。
|
|
81
|
+
*/
|
|
82
|
+
export function installConfigHotReload(app, opts) {
|
|
83
|
+
app.ctx.config.watch(() => void handleConfigChanged(app, opts));
|
|
84
|
+
}
|
|
85
|
+
// ---- helpers ----
|
|
86
|
+
/**
|
|
87
|
+
* 深度合并默认值:只填充缺失的键,不覆盖已有值。
|
|
88
|
+
* 嵌套对象会递归合并;数组与基础类型按"已存在则保留"处理。
|
|
89
|
+
*/
|
|
90
|
+
function deepMergeDefaults(defaults, current) {
|
|
91
|
+
const result = { ...current };
|
|
92
|
+
for (const [key, defaultValue] of Object.entries(defaults)) {
|
|
93
|
+
if (!(key in result)) {
|
|
94
|
+
result[key] = defaultValue;
|
|
95
|
+
}
|
|
96
|
+
else if (defaultValue !== null &&
|
|
97
|
+
typeof defaultValue === 'object' &&
|
|
98
|
+
!Array.isArray(defaultValue) &&
|
|
99
|
+
result[key] !== null &&
|
|
100
|
+
typeof result[key] === 'object' &&
|
|
101
|
+
!Array.isArray(result[key])) {
|
|
102
|
+
result[key] = deepMergeDefaults(defaultValue, result[key]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 根据 configSchema 移除多余字段(schema 按 opaque 数据处理,只认
|
|
109
|
+
* `type: 'array'` 与嵌套 `fields` 两种结构约定,不 import 表单词汇类型)。
|
|
110
|
+
*/
|
|
111
|
+
function removeExtraFields(config, schema) {
|
|
112
|
+
const result = {};
|
|
113
|
+
for (const [key, value] of Object.entries(config)) {
|
|
114
|
+
if (!(key in schema))
|
|
115
|
+
continue;
|
|
116
|
+
const schemaDef = schema[key];
|
|
117
|
+
if (schemaDef.type === 'array') {
|
|
118
|
+
result[key] = value;
|
|
119
|
+
}
|
|
120
|
+
else if (schemaDef.fields &&
|
|
121
|
+
typeof schemaDef.fields === 'object' &&
|
|
122
|
+
value !== null &&
|
|
123
|
+
typeof value === 'object' &&
|
|
124
|
+
!Array.isArray(value)) {
|
|
125
|
+
result[key] = removeExtraFields(value, schemaDef.fields);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
result[key] = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=config-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-sync.js","sourceRoot":"","sources":["../src/config-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { getBootstrapBuffer, installBootstrapBuffer } from './bootstrap-buffer.js';
|
|
2
|
+
export { type ConfigSyncOptions, handleConfigChanged, installConfigHotReload, syncPluginDefaults, } from './config-sync.js';
|
|
2
3
|
export { type ConsoleSinkHandle, installConsoleSink } from './console-sink.js';
|
|
3
4
|
export { appendCrashLog, DEFAULT_LOG_FILE, type FileLoggerHandle, setupFileLogger } from './file-logger.js';
|
|
4
5
|
export { createNodeModulesPluginLoader } from './node-modules-loader.js';
|
|
5
|
-
export { createFsPluginLoader, createFsYamlConfigProvider, createProcessRespawnStrategy } from './providers.js';
|
|
6
|
+
export { buildRespawnCommand, createFsPluginLoader, createFsYamlConfigProvider, createProcessRespawnStrategy, isRestartRollback, READY_MESSAGE, type RespawnOptions, type RestartRollback, } from './providers.js';
|
|
6
7
|
export { type StartAalisOptions, startAalis } from './start.js';
|
|
7
8
|
export { tryDispatchSubcommand } from './subcommand.js';
|
|
8
9
|
export { installTerminalStateRestorer, restoreTerminalState } from './terminal.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
// - startAalis:组装以上 + 宿主件为实例并启动(带 options 开关,默认独立部署)
|
|
9
9
|
// - install*/setup*/tryDispatchSubcommand:宿主件,供高级 opt-in 组装
|
|
10
10
|
export { getBootstrapBuffer, installBootstrapBuffer } from './bootstrap-buffer.js';
|
|
11
|
+
export { handleConfigChanged, installConfigHotReload, syncPluginDefaults, } from './config-sync.js';
|
|
11
12
|
export { installConsoleSink } from './console-sink.js';
|
|
12
13
|
export { appendCrashLog, DEFAULT_LOG_FILE, setupFileLogger } from './file-logger.js';
|
|
13
14
|
export { createNodeModulesPluginLoader } from './node-modules-loader.js';
|
|
14
|
-
export { createFsPluginLoader, createFsYamlConfigProvider, createProcessRespawnStrategy } from './providers.js';
|
|
15
|
+
export { buildRespawnCommand, createFsPluginLoader, createFsYamlConfigProvider, createProcessRespawnStrategy, isRestartRollback, READY_MESSAGE, } from './providers.js';
|
|
15
16
|
export { startAalis } from './start.js';
|
|
16
17
|
export { tryDispatchSubcommand } from './subcommand.js';
|
|
17
18
|
export { installTerminalStateRestorer, restoreTerminalState } from './terminal.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,uDAAuD;AACvD,8DAA8D;AAC9D,oEAAoE;AACpE,yDAAyD;AACzD,gFAAgF;AAChF,uDAAuD;AACvD,8DAA8D;AAE9D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAA0B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAyB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,uDAAuD;AACvD,8DAA8D;AAC9D,oEAAoE;AACpE,yDAAyD;AACzD,gFAAgF;AAChF,uDAAuD;AACvD,8DAA8D;AAE9D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAEL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA0B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAyB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,GAGd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA0B,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/providers.d.ts
CHANGED
|
@@ -10,8 +10,8 @@ interface FsYamlConfigProviderResult {
|
|
|
10
10
|
/**
|
|
11
11
|
* 创建一个基于 YAML 文件的 ConfigProvider。
|
|
12
12
|
*
|
|
13
|
-
* - 同步读取 +
|
|
14
|
-
* - `save()`
|
|
13
|
+
* - 同步读取 + 解析(值原样加载,不做任何替换——`${VAR}` 插值已随 `.env` 机制删除)
|
|
14
|
+
* - `save()` 同步写回
|
|
15
15
|
* - `watch()` 用 `fs.watch` + 300ms debounce,并通过 lastWrittenYaml 去重避免自激
|
|
16
16
|
*
|
|
17
17
|
* 调用时一次性返回 config 快照、provider 和 dataDir 三件套,方便 src/index.ts 组装。
|
|
@@ -25,16 +25,78 @@ export declare function createFsYamlConfigProvider(configPath?: string): FsYamlC
|
|
|
25
25
|
* - `reload()`:用入口文件 mtime 作为 import URL 的 query 强制 ESM 缓存失效
|
|
26
26
|
*/
|
|
27
27
|
export declare function createFsPluginLoader(packagesDir?: string): PluginLoader;
|
|
28
|
+
/** 子进程 `app.start()` 成功后经 IPC 回传的握手消息。 */
|
|
29
|
+
export declare const READY_MESSAGE = "aalis:ready";
|
|
28
30
|
/**
|
|
29
|
-
*
|
|
31
|
+
* 重启回滚凭据——「更新后新实例起不来」时把工程恢复到更新前的手段。
|
|
32
|
+
*
|
|
33
|
+
* 由发起方(市场的 core/runtime 更新)在改写 `package.json` **之前**构造,经
|
|
34
|
+
* `app.restart({ rollback })` 交给策略,**全程只在父进程内存里**:触发条件(新进程
|
|
35
|
+
* ready 前退出)与执行者都是父进程,不跨 spawn 边界,因此不需要落盘。
|
|
36
|
+
*/
|
|
37
|
+
export interface RestartRollback {
|
|
38
|
+
/** 人类可读的来由,仅用于日志(如 `marketplace-update:@aalis/core`)。 */
|
|
39
|
+
reason: string;
|
|
40
|
+
/**
|
|
41
|
+
* 需要还原的文件:绝对路径 → 更新前的原始内容。
|
|
42
|
+
*
|
|
43
|
+
* `deleteIfEmpty` 表示该文件**更新前并不存在**(如原本无 lockfile 的工程被
|
|
44
|
+
* `npm install` 新建了一个),回滚时应删除而非写空——留着它会让后续的重装判定
|
|
45
|
+
* 新版仍然满足,从而什么都不做,把回滚变成一句谎话。
|
|
46
|
+
*/
|
|
47
|
+
restore: Array<{
|
|
48
|
+
path: string;
|
|
49
|
+
content: string;
|
|
50
|
+
deleteIfEmpty?: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* 还原文件后需要跑的命令——`package.json` 回退了,`node_modules` 还停在新版,
|
|
54
|
+
* 必须再跑一次安装才能真正回到旧状态。省略则只还原文件。
|
|
55
|
+
*/
|
|
56
|
+
postRestore?: {
|
|
57
|
+
cmd: string;
|
|
58
|
+
args: string[];
|
|
59
|
+
cwd: string;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** 判定不透明的 rollback 透传值是否是可用的凭据(core 不解释形状,由本层校验)。 */
|
|
63
|
+
export declare function isRestartRollback(v: unknown): v is RestartRollback;
|
|
64
|
+
export interface RespawnOptions {
|
|
65
|
+
/**
|
|
66
|
+
* 等待子进程 IPC ready 的超时(毫秒,默认 30000)。
|
|
67
|
+
*
|
|
68
|
+
* **超时按成功处理**——不发 ready 的旧 runtime 必须仍能重启。真正的失败信号是
|
|
69
|
+
* 「子进程在 ready 之前退出」,不是超时。
|
|
70
|
+
*/
|
|
71
|
+
readyTimeoutMs?: number;
|
|
72
|
+
}
|
|
73
|
+
/** 组装重生用的 exec + argv。分离出来是为了单测覆盖 execArgv 保留。 */
|
|
74
|
+
export declare function buildRespawnCommand(argv?: readonly string[], execArgv?: readonly string[], cwd?: string): {
|
|
75
|
+
exec: string;
|
|
76
|
+
args: string[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Node 进程重启策略:spawn 一个 detached 子进程接管,确认其起得来后再退出当前进程。
|
|
30
80
|
*
|
|
31
81
|
* 时序:
|
|
32
82
|
* 1. 等 500ms 让正在飞行的 HTTP/WS 响应有机会先返回客户端
|
|
33
|
-
* 2. 调 `stop()` 优雅停掉当前 App
|
|
34
|
-
*
|
|
83
|
+
* 2. 调 `stop()` 优雅停掉当前 App;**抛错也继续**——否则进程会停在「插件已半拆、
|
|
84
|
+
* HTTP 已关、但还活着」的僵尸态,而脚手架不生成 supervisor,无人可救
|
|
85
|
+
* 3. spawn 新进程(保留 execArgv,带 IPC 通道)
|
|
86
|
+
* 4. 等 ready / 夭折 / 超时三者之一:
|
|
87
|
+
* - ready 或超时 → 放手、`exit(0)`
|
|
88
|
+
* - **ready 前夭折** → 有回滚凭据则还原工程并重生旧版;否则记 fatal 后 `exit(1)`
|
|
89
|
+
*
|
|
90
|
+
* 第 4 步是「更新 core 从不可逆赌博变成可接受操作」的关键:没有它,新 core 起不来时
|
|
91
|
+
* 父进程已经退了,用户只剩手改 package.json 一条路。
|
|
92
|
+
*
|
|
93
|
+
* **单飞**:重启期间的第二次调用直接忽略。窗口是 500ms + stop 耗时 + 等 ready 的全程
|
|
94
|
+
* (最长 30s),期间 HTTP/指令入口仍可能再次触发;不设防会 spawn 出两个 detached
|
|
95
|
+
* 子进程——非独占端口的部署(如 onebot 反向 WS)两个都能活,每条消息回两遍,而它们
|
|
96
|
+
* 自成进程组,Ctrl+C 打不到。
|
|
35
97
|
*
|
|
36
98
|
* 对 .ts 入口(开发模式)会优先使用本地 `tsx` 二进制。
|
|
37
99
|
*/
|
|
38
|
-
export declare function createProcessRespawnStrategy(): RestartStrategy;
|
|
100
|
+
export declare function createProcessRespawnStrategy(opts?: RespawnOptions): RestartStrategy;
|
|
39
101
|
export {};
|
|
40
102
|
//# 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":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EAEd,YAAY,EAEZ,eAAe,EAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EAEd,YAAY,EAEZ,eAAe,EAChB,MAAM,aAAa,CAAC;AA8CrB,UAAU,0BAA0B;IAClC,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,oDAAoD;IACpD,QAAQ,EAAE,cAAc,CAAC;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,0BAA0B,CAgE1F;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAmDvE;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"}
|
package/dist/providers.js
CHANGED
|
@@ -1,99 +1,26 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync, watch as fsWatch, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { existsSync, watch as fsWatch, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { readdir, stat } from 'node:fs/promises';
|
|
4
4
|
import { dirname, resolve } from 'node:path';
|
|
5
5
|
import { pathToFileURL } from 'node:url';
|
|
6
6
|
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
7
7
|
import { isLoadablePlugin } from './node-modules-loader.js';
|
|
8
|
+
import { disarmTerminalStateRestorer } from './terminal.js';
|
|
8
9
|
// ============================================================
|
|
9
10
|
// FsYamlConfigProvider —— 从 YAML 文件加载+持久化配置
|
|
10
11
|
// ============================================================
|
|
11
12
|
const DEFAULT_CONFIG_FILE = 'aalis.config.yaml';
|
|
12
|
-
/**
|
|
13
|
-
* 把 `${ENV_VAR}` 替换为环境变量值(兼容老配置)。
|
|
14
|
-
*/
|
|
15
|
-
function interpolateEnvVars(text) {
|
|
16
|
-
return text.replace(/\$\{([^}]+)}/g, (_, varName) => {
|
|
17
|
-
return process.env[varName.trim()] ?? '';
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 在【解析后】的配置树上对字符串标量做 ${ENV} 替换(值级插值)。
|
|
22
|
-
* 不在 YAML 文本层插值——含 :/换行/{} 的 env 值也只成为该字段的字符串值,
|
|
23
|
-
* 注入不了 YAML 键、崩不了解析。含占位的纯数字/布尔结果安全恢复类型
|
|
24
|
-
* (保持 `port: ${PORT}` 仍解析为数字,与旧文本插值行为一致)。
|
|
25
|
-
*/
|
|
26
|
-
function interpolateEnvVarsDeep(value) {
|
|
27
|
-
if (typeof value === 'string') {
|
|
28
|
-
if (!value.includes('${'))
|
|
29
|
-
return value;
|
|
30
|
-
const s = interpolateEnvVars(value);
|
|
31
|
-
if (/^-?\d+(\.\d+)?$/.test(s))
|
|
32
|
-
return Number(s);
|
|
33
|
-
if (s === 'true' || s === 'false')
|
|
34
|
-
return s === 'true';
|
|
35
|
-
return s;
|
|
36
|
-
}
|
|
37
|
-
if (Array.isArray(value))
|
|
38
|
-
return value.map(interpolateEnvVarsDeep);
|
|
39
|
-
if (value && typeof value === 'object') {
|
|
40
|
-
const out = {};
|
|
41
|
-
for (const [k, v] of Object.entries(value))
|
|
42
|
-
out[k] = interpolateEnvVarsDeep(v);
|
|
43
|
-
return out;
|
|
44
|
-
}
|
|
45
|
-
return value;
|
|
46
|
-
}
|
|
47
13
|
const CORE_TOP_LEVEL_KEYS = new Set(['name', 'logLevel', 'plugins', 'disabledPlugins', 'servicePreferences']);
|
|
48
|
-
/**
|
|
49
|
-
* 恢复 ${ENV} 占位符:对比当前值与原始 raw 值,若相等则保留 raw。
|
|
50
|
-
*/
|
|
51
|
-
function restoreEnvVars(current, raw) {
|
|
52
|
-
const result = {};
|
|
53
|
-
for (const [key, value] of Object.entries(current)) {
|
|
54
|
-
const rawVal = raw[key];
|
|
55
|
-
if (typeof rawVal === 'string' && /\$\{[^}]+}/.test(rawVal)) {
|
|
56
|
-
const expanded = interpolateEnvVars(rawVal);
|
|
57
|
-
if (expanded === value) {
|
|
58
|
-
result[key] = rawVal;
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (value &&
|
|
63
|
-
typeof value === 'object' &&
|
|
64
|
-
!Array.isArray(value) &&
|
|
65
|
-
rawVal &&
|
|
66
|
-
typeof rawVal === 'object' &&
|
|
67
|
-
!Array.isArray(rawVal)) {
|
|
68
|
-
result[key] = restoreEnvVars(value, rawVal);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
result[key] = value;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return result;
|
|
75
|
-
}
|
|
76
14
|
/**
|
|
77
15
|
* 把 AalisConfig 序列化为 YAML 文本,按固定顺序输出 core 字段,
|
|
78
16
|
* 透传其余顶层字段(业务字段,宿主不解释)。
|
|
79
17
|
*/
|
|
80
|
-
function buildSaveYaml(config
|
|
18
|
+
function buildSaveYaml(config) {
|
|
81
19
|
const obj = {
|
|
82
20
|
name: config.name,
|
|
83
21
|
logLevel: config.logLevel,
|
|
84
22
|
};
|
|
85
|
-
|
|
86
|
-
const rawParsed = parseYaml(rawYaml);
|
|
87
|
-
const rawPlugins = (rawParsed?.plugins ?? {});
|
|
88
|
-
const plugins = {};
|
|
89
|
-
for (const [name, conf] of Object.entries(config.plugins)) {
|
|
90
|
-
plugins[name] = restoreEnvVars(conf, rawPlugins[name] ?? {});
|
|
91
|
-
}
|
|
92
|
-
obj.plugins = plugins;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
obj.plugins = config.plugins;
|
|
96
|
-
}
|
|
23
|
+
obj.plugins = config.plugins;
|
|
97
24
|
obj.disabledPlugins = config.disabledPlugins ?? [];
|
|
98
25
|
const prefs = config.servicePreferences ?? {};
|
|
99
26
|
if (Object.keys(prefs).length > 0) {
|
|
@@ -121,8 +48,8 @@ function buildSaveYaml(config, rawYaml) {
|
|
|
121
48
|
/**
|
|
122
49
|
* 创建一个基于 YAML 文件的 ConfigProvider。
|
|
123
50
|
*
|
|
124
|
-
* - 同步读取 +
|
|
125
|
-
* - `save()`
|
|
51
|
+
* - 同步读取 + 解析(值原样加载,不做任何替换——`${VAR}` 插值已随 `.env` 机制删除)
|
|
52
|
+
* - `save()` 同步写回
|
|
126
53
|
* - `watch()` 用 `fs.watch` + 300ms debounce,并通过 lastWrittenYaml 去重避免自激
|
|
127
54
|
*
|
|
128
55
|
* 调用时一次性返回 config 快照、provider 和 dataDir 三件套,方便 src/index.ts 组装。
|
|
@@ -137,9 +64,7 @@ export function createFsYamlConfigProvider(configPath) {
|
|
|
137
64
|
function loadFromDisk() {
|
|
138
65
|
if (existsSync(absPath)) {
|
|
139
66
|
rawYaml = readFileSync(absPath, 'utf-8');
|
|
140
|
-
|
|
141
|
-
const parsed = interpolateEnvVarsDeep(parseYaml(rawYaml) ?? {});
|
|
142
|
-
return parsed;
|
|
67
|
+
return (parseYaml(rawYaml) ?? {});
|
|
143
68
|
}
|
|
144
69
|
rawYaml = null;
|
|
145
70
|
return { name: 'Aalis', logLevel: 'info', plugins: {} };
|
|
@@ -147,7 +72,7 @@ export function createFsYamlConfigProvider(configPath) {
|
|
|
147
72
|
const initialConfig = loadFromDisk();
|
|
148
73
|
const provider = {
|
|
149
74
|
save(config) {
|
|
150
|
-
const yaml = buildSaveYaml(config
|
|
75
|
+
const yaml = buildSaveYaml(config);
|
|
151
76
|
lastWrittenYaml = yaml;
|
|
152
77
|
writeFileSync(absPath, yaml, 'utf-8');
|
|
153
78
|
rawYaml = yaml;
|
|
@@ -169,7 +94,7 @@ export function createFsYamlConfigProvider(configPath) {
|
|
|
169
94
|
return;
|
|
170
95
|
lastWrittenYaml = null;
|
|
171
96
|
rawYaml = current;
|
|
172
|
-
const parsed =
|
|
97
|
+
const parsed = (parseYaml(current) ?? {});
|
|
173
98
|
onChange(parsed);
|
|
174
99
|
}
|
|
175
100
|
catch {
|
|
@@ -258,40 +183,159 @@ export function createFsPluginLoader(packagesDir) {
|
|
|
258
183
|
// ============================================================
|
|
259
184
|
// ProcessRespawnStrategy —— spawn 新 Node 进程然后退出当前
|
|
260
185
|
// ============================================================
|
|
186
|
+
/** 子进程 `app.start()` 成功后经 IPC 回传的握手消息。 */
|
|
187
|
+
export const READY_MESSAGE = 'aalis:ready';
|
|
188
|
+
/** 判定不透明的 rollback 透传值是否是可用的凭据(core 不解释形状,由本层校验)。 */
|
|
189
|
+
export function isRestartRollback(v) {
|
|
190
|
+
const r = v;
|
|
191
|
+
return !!r && typeof r.reason === 'string' && Array.isArray(r.restore);
|
|
192
|
+
}
|
|
193
|
+
/** 组装重生用的 exec + argv。分离出来是为了单测覆盖 execArgv 保留。 */
|
|
194
|
+
export function buildRespawnCommand(argv = process.argv, execArgv = process.execArgv, cwd = process.cwd()) {
|
|
195
|
+
const scriptFile = argv[1];
|
|
196
|
+
if (scriptFile?.endsWith('.ts')) {
|
|
197
|
+
// tsx 是包装脚本,node 层 flag 由它自己转交,不能塞在它前面。
|
|
198
|
+
const tsxBin = resolve(cwd, 'node_modules', '.bin', 'tsx');
|
|
199
|
+
return { exec: existsSync(tsxBin) ? tsxBin : 'tsx', args: [...argv.slice(1)] };
|
|
200
|
+
}
|
|
201
|
+
// execArgv 不在 argv 里:`node --max-old-space-size=4096 dist/start.js` 的
|
|
202
|
+
// `--max-old-space-size` 只出现在 execArgv。不透传的话,用户自加的 node flag
|
|
203
|
+
// 会在重启后静默失效。
|
|
204
|
+
const [exec, ...rest] = argv;
|
|
205
|
+
return { exec: exec ?? process.execPath, args: [...execArgv, ...rest] };
|
|
206
|
+
}
|
|
261
207
|
/**
|
|
262
|
-
* Node 进程重启策略:spawn 一个 detached
|
|
208
|
+
* Node 进程重启策略:spawn 一个 detached 子进程接管,确认其起得来后再退出当前进程。
|
|
263
209
|
*
|
|
264
210
|
* 时序:
|
|
265
211
|
* 1. 等 500ms 让正在飞行的 HTTP/WS 响应有机会先返回客户端
|
|
266
|
-
* 2. 调 `stop()` 优雅停掉当前 App
|
|
267
|
-
*
|
|
212
|
+
* 2. 调 `stop()` 优雅停掉当前 App;**抛错也继续**——否则进程会停在「插件已半拆、
|
|
213
|
+
* HTTP 已关、但还活着」的僵尸态,而脚手架不生成 supervisor,无人可救
|
|
214
|
+
* 3. spawn 新进程(保留 execArgv,带 IPC 通道)
|
|
215
|
+
* 4. 等 ready / 夭折 / 超时三者之一:
|
|
216
|
+
* - ready 或超时 → 放手、`exit(0)`
|
|
217
|
+
* - **ready 前夭折** → 有回滚凭据则还原工程并重生旧版;否则记 fatal 后 `exit(1)`
|
|
218
|
+
*
|
|
219
|
+
* 第 4 步是「更新 core 从不可逆赌博变成可接受操作」的关键:没有它,新 core 起不来时
|
|
220
|
+
* 父进程已经退了,用户只剩手改 package.json 一条路。
|
|
221
|
+
*
|
|
222
|
+
* **单飞**:重启期间的第二次调用直接忽略。窗口是 500ms + stop 耗时 + 等 ready 的全程
|
|
223
|
+
* (最长 30s),期间 HTTP/指令入口仍可能再次触发;不设防会 spawn 出两个 detached
|
|
224
|
+
* 子进程——非独占端口的部署(如 onebot 反向 WS)两个都能活,每条消息回两遍,而它们
|
|
225
|
+
* 自成进程组,Ctrl+C 打不到。
|
|
268
226
|
*
|
|
269
227
|
* 对 .ts 入口(开发模式)会优先使用本地 `tsx` 二进制。
|
|
270
228
|
*/
|
|
271
|
-
export function createProcessRespawnStrategy() {
|
|
229
|
+
export function createProcessRespawnStrategy(opts = {}) {
|
|
230
|
+
const readyTimeoutMs = opts.readyTimeoutMs ?? 30_000;
|
|
231
|
+
let restarting = false;
|
|
232
|
+
function spawnChild(withIpc) {
|
|
233
|
+
const { exec, args } = buildRespawnCommand();
|
|
234
|
+
return spawn(exec, args, {
|
|
235
|
+
cwd: process.cwd(),
|
|
236
|
+
stdio: withIpc ? ['inherit', 'inherit', 'inherit', 'ipc'] : 'inherit',
|
|
237
|
+
detached: true,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
272
240
|
return {
|
|
273
|
-
async restart({ stop }) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
args = process.argv.slice(1);
|
|
241
|
+
async restart({ stop, rollback }) {
|
|
242
|
+
if (restarting) {
|
|
243
|
+
console.error('[aalis] 已有重启在进行中,忽略本次请求。');
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
restarting = true;
|
|
247
|
+
await new Promise(r => setTimeout(r, 500));
|
|
248
|
+
try {
|
|
249
|
+
await stop();
|
|
283
250
|
}
|
|
284
|
-
|
|
285
|
-
|
|
251
|
+
catch (err) {
|
|
252
|
+
// 停不干净也要往下走:僵尸态比一次不完全的重启更糟。
|
|
253
|
+
console.error('[aalis] 停止应用时出错,仍继续重启:', err);
|
|
286
254
|
}
|
|
287
|
-
const child =
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
255
|
+
const child = spawnChild(true);
|
|
256
|
+
const outcome = await new Promise(resolveOutcome => {
|
|
257
|
+
const timer = setTimeout(() => resolveOutcome('timeout'), readyTimeoutMs);
|
|
258
|
+
const done = (o) => {
|
|
259
|
+
clearTimeout(timer);
|
|
260
|
+
resolveOutcome(o);
|
|
261
|
+
};
|
|
262
|
+
child.on('message', (msg) => {
|
|
263
|
+
if (msg?.type === READY_MESSAGE)
|
|
264
|
+
done('ready');
|
|
265
|
+
});
|
|
266
|
+
child.on('exit', () => done('died'));
|
|
267
|
+
child.on('error', () => done('died'));
|
|
292
268
|
});
|
|
293
|
-
|
|
294
|
-
|
|
269
|
+
if (outcome !== 'died') {
|
|
270
|
+
// 终端已归子进程所有(它的 ready 发生在 TUI 进备用屏之后),父进程退出时不得再写它,
|
|
271
|
+
// 否则复原序列会把新实例的 TUI 踢出备用屏。见 disarmTerminalStateRestorer 的注释。
|
|
272
|
+
disarmTerminalStateRestorer();
|
|
273
|
+
try {
|
|
274
|
+
child.disconnect();
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
/* 通道可能已关,忽略 */
|
|
278
|
+
}
|
|
279
|
+
child.unref();
|
|
280
|
+
process.exit(0);
|
|
281
|
+
}
|
|
282
|
+
// ── 新进程在就绪前夭折 ──
|
|
283
|
+
if (!isRestartRollback(rollback)) {
|
|
284
|
+
console.error('[aalis] 重启失败:新进程未能启动,且本次重启未带回滚凭据。请检查上方日志。');
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
console.error(`[aalis] 新进程未能启动,正在回滚(${rollback.reason})…`);
|
|
288
|
+
// 任一还原失败就不再往下走:部分还原后跑 postRestore 会在「package.json 已回退、
|
|
289
|
+
// lockfile 未回退」的混合树上安装,比不回滚更糟。此时把原始内容打进日志——
|
|
290
|
+
// 它是盘外仅存的一份,用户据此可手工恢复。
|
|
291
|
+
const failed = [];
|
|
292
|
+
for (const f of rollback.restore) {
|
|
293
|
+
try {
|
|
294
|
+
// 更新前不存在的文件(deleteIfEmpty)要删掉而非写空——见 RestartRollback.restore。
|
|
295
|
+
if (f.deleteIfEmpty && f.content === '')
|
|
296
|
+
rmSync(f.path, { force: true });
|
|
297
|
+
else
|
|
298
|
+
writeFileSync(f.path, f.content);
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
failed.push(f.path);
|
|
302
|
+
console.error(`[aalis] 回滚${f.deleteIfEmpty ? '删除' : '写入'}失败 ${f.path}:`, err);
|
|
303
|
+
if (!f.deleteIfEmpty)
|
|
304
|
+
console.error(`[aalis] 该文件的更新前内容如下,请手工恢复:\n${f.content}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (failed.length > 0) {
|
|
308
|
+
console.error(`[aalis] 回滚未完成(${failed.length} 个文件写入失败),已跳过重装以免留下混合状态。`);
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
if (rollback.postRestore) {
|
|
312
|
+
const { cmd, args, cwd } = rollback.postRestore;
|
|
313
|
+
// **必须看退出码**。这条命令把 node_modules 装回旧版,文件还原只完成了一半的工作。
|
|
314
|
+
// 它失败的途径是现实的:回滚窗口内 registry 不可达、私有源 token 过期、旧版被
|
|
315
|
+
// unpublish、npm cache 为空(pnpm 装的工程正是这种)、原生模块 postinstall 挂掉。
|
|
316
|
+
// 不看退出码就宣告「已回滚」的话,留下的是比原状态更糟的错位树——package.json 声明
|
|
317
|
+
// 旧版、node_modules 实装新版、锁已被删;而 caret 范围仍满足新版,后续 `npm install`
|
|
318
|
+
// 也不会自愈。然后拿旧版进程去加载新版代码,进 crash loop,用户却被告知回滚成功。
|
|
319
|
+
const code = await new Promise(r => {
|
|
320
|
+
const p = spawn(cmd, args, { cwd, stdio: 'inherit' });
|
|
321
|
+
p.on('exit', c => r(c));
|
|
322
|
+
p.on('error', err => {
|
|
323
|
+
console.error('[aalis] 回滚命令执行失败:', err);
|
|
324
|
+
r(-1);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
if (code !== 0) {
|
|
328
|
+
console.error(`[aalis] 回滚未完成:依赖重装失败(${cmd} 退出码 ${code})。\n` +
|
|
329
|
+
`[aalis] 配置文件已还原,但 node_modules 仍是更新后的版本 —— 工程处于「声明旧版、实装新版」的错位状态。\n` +
|
|
330
|
+
`[aalis] 请联网后手工执行:${[cmd, ...args].join(' ')}(cwd: ${cwd})\n` +
|
|
331
|
+
'[aalis] 未重新拉起旧版进程:它会加载到新版代码,很可能反复崩溃。');
|
|
332
|
+
process.exit(1);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const revived = spawnChild(false);
|
|
336
|
+
revived.unref();
|
|
337
|
+
console.error('[aalis] 已回滚并重新启动旧版本。');
|
|
338
|
+
process.exit(1);
|
|
295
339
|
},
|
|
296
340
|
};
|
|
297
341
|
}
|
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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"}
|
package/dist/start.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { App, type PluginLoader } from '@aalis/core';
|
|
2
|
+
import { type ConfigSyncOptions } from './config-sync.js';
|
|
2
3
|
export interface StartAalisOptions {
|
|
3
4
|
/** aalis.config.yaml 路径,默认 cwd 下的 aalis.config.yaml */
|
|
4
5
|
configPath?: string;
|
|
@@ -16,6 +17,11 @@ export interface StartAalisOptions {
|
|
|
16
17
|
subcommands?: boolean | string[];
|
|
17
18
|
/** 覆盖 dev/prod 判定,默认按 NODE_ENV !== 'production' */
|
|
18
19
|
devMode?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 插件配置同步政策(defaultConfig 回填 / schema 裁剪 / 热重载)。
|
|
22
|
+
* `trimUnknownFields=false` 时保留 configSchema 之外的未知字段(默认裁剪)。
|
|
23
|
+
*/
|
|
24
|
+
configSync?: ConfigSyncOptions;
|
|
19
25
|
}
|
|
20
26
|
export declare function startAalis(opts?: StartAalisOptions): Promise<App>;
|
|
21
27
|
//# sourceMappingURL=start.d.ts.map
|
package/dist/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,KAAK,iBAAiB,EAA8C,MAAM,kBAAkB,CAAC;AAqBtG,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IACjC,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAsBD,wBAAsB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,GAAG,CAAC,CAgH3E"}
|
package/dist/start.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import { App } from '@aalis/core';
|
|
3
3
|
import { installBootstrapBuffer } from './bootstrap-buffer.js';
|
|
4
|
+
import { installConfigHotReload, syncPluginDefaults } from './config-sync.js';
|
|
4
5
|
import { installConsoleSink } from './console-sink.js';
|
|
5
6
|
import { appendCrashLog, DEFAULT_LOG_FILE, setupFileLogger } from './file-logger.js';
|
|
6
7
|
import { createNodeModulesPluginLoader } from './node-modules-loader.js';
|
|
7
|
-
import { createFsYamlConfigProvider, createProcessRespawnStrategy } from './providers.js';
|
|
8
|
+
import { createFsYamlConfigProvider, createProcessRespawnStrategy, READY_MESSAGE } from './providers.js';
|
|
8
9
|
import { tryDispatchSubcommand } from './subcommand.js';
|
|
9
10
|
import { installTerminalStateRestorer } from './terminal.js';
|
|
10
11
|
/**
|
|
@@ -80,6 +81,12 @@ export async function startAalis(opts = {}) {
|
|
|
80
81
|
// 不变量①:App 构造完成后再让 sink 监听终端归属事件——此前没有 ctx 可订阅。
|
|
81
82
|
consoleHandle?.bindEvents(app.ctx);
|
|
82
83
|
await app.autoLoadPlugins();
|
|
84
|
+
// 配置同步政策:defaultConfig 回填 + 按 schema 裁剪未知字段,有变化则落盘。
|
|
85
|
+
const synced = syncPluginDefaults(app, opts.configSync);
|
|
86
|
+
for (const id of synced)
|
|
87
|
+
app.logger.debug(`同步插件配置: ${id}`);
|
|
88
|
+
if (synced.length > 0)
|
|
89
|
+
app.logger.info('已将插件配置同步到配置文件');
|
|
83
90
|
// ── 不变量②:子命令短路在 app.start 之前 ──
|
|
84
91
|
// `aalis <name> [args...]` 等价于聊天里 `/<name> args...`:命中则执行返回串并干净退出,
|
|
85
92
|
// 不命中则按正常守护进程模式继续启动。与具体命令解耦——各插件自行注册命令。
|
|
@@ -97,6 +104,23 @@ export async function startAalis(opts = {}) {
|
|
|
97
104
|
}
|
|
98
105
|
// ── 启动 + 优雅退出(防止重复调用)──
|
|
99
106
|
await app.start();
|
|
107
|
+
// 向重启我们的父进程回报「起来了」。父进程据此决定放手退出,还是判定本次
|
|
108
|
+
// 更新失败并回滚(见 providers.ts 的 createProcessRespawnStrategy)。
|
|
109
|
+
//
|
|
110
|
+
// 两道防护缺一不可,都为了「本进程绝不能因为报喜而死」:
|
|
111
|
+
// 1. `process.connected` —— 父进程等 ready 超时后会 disconnect + exit,此时通道已关,
|
|
112
|
+
// 但 `process.send` 仍是 function(`?.` 只挡「从来没有 IPC」的非重启启动),
|
|
113
|
+
// 照发会得到 ERR_IPC_CHANNEL_CLOSED;
|
|
114
|
+
// 2. callback —— 通道在判断与发送之间关闭(TOCTOU)时,错误改走 callback。没有它,
|
|
115
|
+
// Node 会在 nextTick 往 process 上 emit 无监听者的 'error',直接升级成
|
|
116
|
+
// uncaughtException 被 start.ts 顶部的 handler 捕获并 exit(1)——**同步 try/catch
|
|
117
|
+
// 接不住**(错误是异步抛的)。症状会是「一重启就没、手动起就好」。
|
|
118
|
+
if (process.connected)
|
|
119
|
+
process.send?.({ type: READY_MESSAGE }, undefined, undefined, () => { });
|
|
120
|
+
// 握手完成后解除 IPC 对事件循环的持有——否则父进程退出前本进程无法自然结束。
|
|
121
|
+
process.channel?.unref();
|
|
122
|
+
// 配置外部变更热重载(provider 不支持 watch 时为 no-op)。
|
|
123
|
+
installConfigHotReload(app, opts.configSync);
|
|
100
124
|
let stopping = false;
|
|
101
125
|
const shutdown = async () => {
|
|
102
126
|
if (stopping)
|
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAqB,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAA0B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAyB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
|
package/dist/subcommand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subcommand.d.ts","sourceRoot":"","sources":["../src/subcommand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subcommand.d.ts","sourceRoot":"","sources":["../src/subcommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAA8B,GACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB"}
|
package/dist/terminal.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
export declare function restoreTerminalState(): void;
|
|
2
2
|
export declare function installTerminalStateRestorer(): void;
|
|
3
|
+
/**
|
|
4
|
+
* 摘掉退出复原钩子。
|
|
5
|
+
*
|
|
6
|
+
* 用于「本进程把终端交给了别人」的场合——目前只有 respawn 的成功分支:父进程等到子进程
|
|
7
|
+
* 回报 ready 才退出,而子进程的 ready 发生在 `await app.start()` **之后**(start 里串行
|
|
8
|
+
* await 完 `app:started`,plugin-cli 正是在那里 `\x1b[?1049h` 进备用屏)。于是父进程的
|
|
9
|
+
* exit 钩子写出的 `\x1b[?1049l` 落在子进程已接管终端之后,把新实例的 TUI 当场踢出备用屏。
|
|
10
|
+
*
|
|
11
|
+
* 摘掉是安全的:父进程停机时 plugin-cli 自己的 `stop()` 已经复原过一次
|
|
12
|
+
* (经 `ctx.onDispose`),这个钩子在该路径上本就是第二次复原。
|
|
13
|
+
* 失败分支(子进程夭折)不得摘——那条路没有别人接管终端。
|
|
14
|
+
*/
|
|
15
|
+
export declare function disarmTerminalStateRestorer(): void;
|
|
3
16
|
//# sourceMappingURL=terminal.d.ts.map
|
package/dist/terminal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD"}
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
|
package/dist/terminal.js
CHANGED
|
@@ -21,4 +21,22 @@ export function installTerminalStateRestorer() {
|
|
|
21
21
|
installed = true;
|
|
22
22
|
process.once('exit', restoreTerminalState);
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 摘掉退出复原钩子。
|
|
26
|
+
*
|
|
27
|
+
* 用于「本进程把终端交给了别人」的场合——目前只有 respawn 的成功分支:父进程等到子进程
|
|
28
|
+
* 回报 ready 才退出,而子进程的 ready 发生在 `await app.start()` **之后**(start 里串行
|
|
29
|
+
* await 完 `app:started`,plugin-cli 正是在那里 `\x1b[?1049h` 进备用屏)。于是父进程的
|
|
30
|
+
* exit 钩子写出的 `\x1b[?1049l` 落在子进程已接管终端之后,把新实例的 TUI 当场踢出备用屏。
|
|
31
|
+
*
|
|
32
|
+
* 摘掉是安全的:父进程停机时 plugin-cli 自己的 `stop()` 已经复原过一次
|
|
33
|
+
* (经 `ctx.onDispose`),这个钩子在该路径上本就是第二次复原。
|
|
34
|
+
* 失败分支(子进程夭折)不得摘——那条路没有别人接管终端。
|
|
35
|
+
*/
|
|
36
|
+
export function disarmTerminalStateRestorer() {
|
|
37
|
+
if (!installed)
|
|
38
|
+
return;
|
|
39
|
+
installed = false;
|
|
40
|
+
process.off('exit', restoreTerminalState);
|
|
41
|
+
}
|
|
24
42
|
//# sourceMappingURL=terminal.js.map
|
package/dist/terminal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,MAAM,yBAAyB,GAAG,uDAAuD,CAAC;AAE1F,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,IAAI,SAAS;QAAE,OAAO;IACtB,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAC7C,CAAC"}
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,MAAM,yBAAyB,GAAG,uDAAuD,CAAC;AAE1F,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,IAAI,SAAS;QAAE,OAAO;IACtB,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"yaml": "^2.7.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@aalis/core": ">=0.
|
|
31
|
+
"@aalis/core": ">=0.9.0 <1.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"typescript": "^5.7.0",
|
|
35
35
|
"@types/node": "^22.0.0",
|
|
36
|
-
"@aalis/core": "0.
|
|
37
|
-
"@aalis/
|
|
36
|
+
"@aalis/core": "0.10.0",
|
|
37
|
+
"@aalis/api-commands": "0.5.0"
|
|
38
38
|
},
|
|
39
39
|
"aalis": {
|
|
40
40
|
"tooling": true
|