@aalis/runtime 0.5.2 → 0.9.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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/start.d.ts +6 -0
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +9 -0
- package/dist/start.js.map +1 -1
- package/package.json +10 -10
|
@@ -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,4 +1,5 @@
|
|
|
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';
|
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,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChH,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"}
|
|
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,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChH,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,6 +8,7 @@
|
|
|
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';
|
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,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChH,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"}
|
|
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,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChH,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/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,CAiG3E"}
|
package/dist/start.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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';
|
|
@@ -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,8 @@ export async function startAalis(opts = {}) {
|
|
|
97
104
|
}
|
|
98
105
|
// ── 启动 + 优雅退出(防止重复调用)──
|
|
99
106
|
await app.start();
|
|
107
|
+
// 配置外部变更热重载(provider 不支持 watch 时为 no-op)。
|
|
108
|
+
installConfigHotReload(app, opts.configSync);
|
|
100
109
|
let stopping = false;
|
|
101
110
|
const shutdown = async () => {
|
|
102
111
|
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;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,24 +23,24 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"dev": "tsc --watch"
|
|
29
|
+
},
|
|
26
30
|
"dependencies": {
|
|
27
31
|
"chalk": "^5.4.0",
|
|
28
32
|
"yaml": "^2.7.0"
|
|
29
33
|
},
|
|
30
34
|
"peerDependencies": {
|
|
31
|
-
"@aalis/core": ">=0.
|
|
35
|
+
"@aalis/core": ">=0.9.0 <1.0.0"
|
|
32
36
|
},
|
|
33
37
|
"devDependencies": {
|
|
38
|
+
"@aalis/core": "workspace:*",
|
|
39
|
+
"@aalis/plugin-commands-api": "workspace:*",
|
|
34
40
|
"typescript": "^5.7.0",
|
|
35
|
-
"@types/node": "^22.0.0"
|
|
36
|
-
"@aalis/core": "0.7.0",
|
|
37
|
-
"@aalis/plugin-commands-api": "0.5.0"
|
|
41
|
+
"@types/node": "^22.0.0"
|
|
38
42
|
},
|
|
39
43
|
"aalis": {
|
|
40
44
|
"tooling": true
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"build": "tsc",
|
|
44
|
-
"dev": "tsc --watch"
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|