@zhin.js/core 1.0.41 → 1.0.43

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @zhin.js/core
2
2
 
3
+ ## 1.0.43
4
+
5
+ ### Patch Changes
6
+
7
+ - 72ec4ba: fix: 新增插件,控制台调优
8
+ - @zhin.js/database@1.0.30
9
+ - @zhin.js/logger@0.1.27
10
+ - @zhin.js/schema@1.0.27
11
+ - @zhin.js/ai@1.0.4
12
+ - @zhin.js/kernel@0.0.4
13
+
14
+ ## 1.0.42
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [0999ca6]
19
+ - @zhin.js/ai@1.0.3
20
+ - @zhin.js/database@1.0.29
21
+ - @zhin.js/logger@0.1.26
22
+ - @zhin.js/schema@1.0.26
23
+ - @zhin.js/kernel@0.0.3
24
+
3
25
  ## 1.0.41
4
26
 
5
27
  ### Patch Changes
@@ -11,6 +11,11 @@ export declare class ConfigLoader<T extends object> {
11
11
  constructor(filename: string, initial: T, schema?: Schema<T> | undefined);
12
12
  load(): void;
13
13
  save(fullPath: string): void;
14
+ /**
15
+ * 精准修改单个顶层 key 并写回文件
16
+ * 保留注释、格式和未修改字段(如 ${VAR} 环境变量引用)
17
+ */
18
+ patchKey(key: string, value: any): void;
14
19
  }
15
20
  export declare namespace ConfigLoader {
16
21
  const supportedExtensions: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/built/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/built/config.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import path from "node:path";
7
7
  import fs from "node:fs";
8
- import { stringify as stringifyYaml, parse as parseYaml } from "yaml";
8
+ import { stringify as stringifyYaml, parse as parseYaml, parseDocument } from "yaml";
9
9
  import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
10
10
  import { Feature } from "../feature.js";
11
11
  import { getPlugin } from "../plugin.js";
@@ -127,6 +127,39 @@ export class ConfigLoader {
127
127
  break;
128
128
  }
129
129
  }
130
+ /**
131
+ * 精准修改单个顶层 key 并写回文件
132
+ * 保留注释、格式和未修改字段(如 ${VAR} 环境变量引用)
133
+ */
134
+ patchKey(key, value) {
135
+ const fullPath = path.resolve(process.cwd(), this.filename);
136
+ switch (this.extension) {
137
+ case ".yaml":
138
+ case ".yml": {
139
+ const content = fs.readFileSync(fullPath, 'utf-8');
140
+ const doc = parseDocument(content);
141
+ doc.set(key, value);
142
+ fs.writeFileSync(fullPath, doc.toString());
143
+ break;
144
+ }
145
+ case ".json": {
146
+ const content = fs.readFileSync(fullPath, 'utf-8');
147
+ const obj = JSON.parse(content);
148
+ obj[key] = value;
149
+ fs.writeFileSync(fullPath, JSON.stringify(obj, null, 2));
150
+ break;
151
+ }
152
+ case ".toml": {
153
+ const content = fs.readFileSync(fullPath, 'utf-8');
154
+ const obj = parseToml(content);
155
+ obj[key] = value;
156
+ fs.writeFileSync(fullPath, stringifyToml(obj));
157
+ break;
158
+ }
159
+ }
160
+ // 同步更新内存
161
+ this.#data[key] = value;
162
+ }
130
163
  }
131
164
  (function (ConfigLoader) {
132
165
  ConfigLoader.supportedExtensions = [".json", ".yaml", ".yml", ".toml"];
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/built/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/built/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * SchemaFeature — 插件配置 Schema 注册表
3
+ *
4
+ * 插件通过 declareConfig(key, schema) 声明配置项及其 Schema,
5
+ * SchemaFeature 全局收集后供 Web 控制台渲染配置编辑表单。
6
+ *
7
+ * 与 ConfigFeature 协作:
8
+ * - declareConfig 内部调用 addConfig(key, defaults) 写入默认值
9
+ * - Schema.toJSON() 传给前端驱动 PluginConfigForm
10
+ * - reloadable 标记决定保存后是否自动重载插件
11
+ */
12
+ import { Feature, FeatureJSON } from '../feature.js';
13
+ import { Schema } from '@zhin.js/schema';
14
+ export interface SchemaRecord {
15
+ /** 配置 key(对应 zhin.config.yml 中的顶级字段) */
16
+ key: string;
17
+ /** Schema 实例 */
18
+ schema: Schema;
19
+ /** 保存后是否支持热重载(http/database 等底层服务应为 false) */
20
+ reloadable: boolean;
21
+ }
22
+ export interface SchemaContextExtensions {
23
+ /**
24
+ * 声明插件配置 Schema
25
+ * @param key 配置 key,如 "rss"
26
+ * @param schema Schema.object({...}) 定义
27
+ * @param options.reloadable 保存后是否自动重载,默认 true
28
+ * @returns 当前配置值(已合并默认值)
29
+ */
30
+ declareConfig<T extends Record<string, any>>(key: string, schema: Schema<T>, options?: {
31
+ reloadable?: boolean;
32
+ }): Required<T>;
33
+ }
34
+ declare module '../plugin.js' {
35
+ namespace Plugin {
36
+ interface Extensions extends SchemaContextExtensions {
37
+ }
38
+ interface Contexts {
39
+ schema: SchemaFeature;
40
+ }
41
+ }
42
+ }
43
+ export declare class SchemaFeature extends Feature<SchemaRecord> {
44
+ readonly name: "schema";
45
+ readonly icon = "FileCode";
46
+ readonly desc = "\u914D\u7F6E\u6A21\u578B";
47
+ /**
48
+ * 按配置 key 查找 Schema
49
+ */
50
+ getByKey(key: string): SchemaRecord | null;
51
+ /**
52
+ * 获取指定插件名注册的 Schema
53
+ */
54
+ getByPluginName(pluginName: string): SchemaRecord | null;
55
+ /**
56
+ * 获取某个 key 的 Schema 实例(WebSocket handler 使用)
57
+ */
58
+ get(keyOrPlugin: string): Schema | null;
59
+ /**
60
+ * 判断某个 key 对应的插件是否支持热重载
61
+ */
62
+ isReloadable(keyOrPlugin: string): boolean;
63
+ /**
64
+ * 通过 pluginName 获取对应的 config key
65
+ */
66
+ resolveConfigKey(pluginName: string): string | null;
67
+ /**
68
+ * 返回 pluginName → configKey 的映射
69
+ */
70
+ getPluginKeyMap(): Map<string, string>;
71
+ toJSON(pluginName?: string): FeatureJSON;
72
+ get extensions(): {
73
+ declareConfig<T extends Record<string, any>>(key: string, schema: Schema<T>, options?: {
74
+ reloadable?: boolean;
75
+ }): Required<T>;
76
+ };
77
+ }
78
+ //# sourceMappingURL=schema-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-feature.d.ts","sourceRoot":"","sources":["../../src/built/schema-feature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOzC,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,QAAQ,CAAC,CAAC,CAAC,CAAC;CAChB;AAED,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,MAAM,CAAC;QACf,UAAU,UAAW,SAAQ,uBAAuB;SAAG;QACvD,UAAU,QAAQ;YAChB,MAAM,EAAE,aAAa,CAAC;SACvB;KACF;CACF;AAMD,qBAAa,aAAc,SAAQ,OAAO,CAAC,YAAY,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,IAAI,8BAAU;IAEvB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKxD;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAO1C;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOnD;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAUtC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW;IAexC,IAAI,UAAU;sBAGI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OACpC,MAAM,UACH,MAAM,CAAC,CAAC,CAAC,YACP;YAAE,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,GACjC,QAAQ,CAAC,CAAC,CAAC;MA2BjB;CACF"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * SchemaFeature — 插件配置 Schema 注册表
3
+ *
4
+ * 插件通过 declareConfig(key, schema) 声明配置项及其 Schema,
5
+ * SchemaFeature 全局收集后供 Web 控制台渲染配置编辑表单。
6
+ *
7
+ * 与 ConfigFeature 协作:
8
+ * - declareConfig 内部调用 addConfig(key, defaults) 写入默认值
9
+ * - Schema.toJSON() 传给前端驱动 PluginConfigForm
10
+ * - reloadable 标记决定保存后是否自动重载插件
11
+ */
12
+ import { Feature } from '../feature.js';
13
+ import { getPlugin } from '../plugin.js';
14
+ // ============================================================================
15
+ // SchemaFeature
16
+ // ============================================================================
17
+ export class SchemaFeature extends Feature {
18
+ name = 'schema';
19
+ icon = 'FileCode';
20
+ desc = '配置模型';
21
+ /**
22
+ * 按配置 key 查找 Schema
23
+ */
24
+ getByKey(key) {
25
+ return this.items.find(r => r.key === key) ?? null;
26
+ }
27
+ /**
28
+ * 获取指定插件名注册的 Schema
29
+ */
30
+ getByPluginName(pluginName) {
31
+ const list = this.getByPlugin(pluginName);
32
+ return list.length > 0 ? list[0] : null;
33
+ }
34
+ /**
35
+ * 获取某个 key 的 Schema 实例(WebSocket handler 使用)
36
+ */
37
+ get(keyOrPlugin) {
38
+ const byKey = this.getByKey(keyOrPlugin);
39
+ if (byKey)
40
+ return byKey.schema;
41
+ const byPlugin = this.getByPluginName(keyOrPlugin);
42
+ return byPlugin?.schema ?? null;
43
+ }
44
+ /**
45
+ * 判断某个 key 对应的插件是否支持热重载
46
+ */
47
+ isReloadable(keyOrPlugin) {
48
+ const byKey = this.getByKey(keyOrPlugin);
49
+ if (byKey)
50
+ return byKey.reloadable;
51
+ const byPlugin = this.getByPluginName(keyOrPlugin);
52
+ return byPlugin?.reloadable ?? true;
53
+ }
54
+ /**
55
+ * 通过 pluginName 获取对应的 config key
56
+ */
57
+ resolveConfigKey(pluginName) {
58
+ const byKey = this.getByKey(pluginName);
59
+ if (byKey)
60
+ return byKey.key;
61
+ const byPlugin = this.getByPluginName(pluginName);
62
+ return byPlugin?.key ?? null;
63
+ }
64
+ /**
65
+ * 返回 pluginName → configKey 的映射
66
+ */
67
+ getPluginKeyMap() {
68
+ const map = new Map();
69
+ for (const [pluginName, records] of this.pluginItems) {
70
+ if (records.length > 0) {
71
+ map.set(pluginName, records[0].key);
72
+ }
73
+ }
74
+ return map;
75
+ }
76
+ toJSON(pluginName) {
77
+ const list = pluginName ? this.getByPlugin(pluginName) : this.items;
78
+ return {
79
+ name: this.name,
80
+ icon: this.icon,
81
+ desc: this.desc,
82
+ count: list.length,
83
+ items: list.map(r => ({
84
+ name: r.key,
85
+ reloadable: r.reloadable,
86
+ schema: r.schema.toJSON(),
87
+ })),
88
+ };
89
+ }
90
+ get extensions() {
91
+ const feature = this;
92
+ return {
93
+ declareConfig(key, schema, options) {
94
+ const plugin = getPlugin();
95
+ const reloadable = options?.reloadable ?? true;
96
+ // 从 Schema 提取默认值
97
+ const defaults = extractDefaults(schema);
98
+ // 注册到 ConfigFeature(写入 config.yml 的默认值)
99
+ if (typeof plugin.addConfig === 'function') {
100
+ plugin.addConfig(key, defaults);
101
+ }
102
+ // 注册到 SchemaFeature
103
+ const record = { key, schema, reloadable };
104
+ const dispose = feature.add(record, plugin.name);
105
+ plugin.recordFeatureContribution(feature.name, key);
106
+ plugin.onDispose(dispose);
107
+ // 读取当前配置并与默认值合并
108
+ const root = plugin.root ?? plugin;
109
+ const configService = root.inject('config');
110
+ const appConfig = configService?.get?.('zhin.config.yml') ?? {};
111
+ const current = appConfig[key] ?? {};
112
+ return { ...defaults, ...current };
113
+ },
114
+ };
115
+ }
116
+ }
117
+ // ============================================================================
118
+ // 辅助:从 Schema 提取默认值
119
+ // ============================================================================
120
+ function extractDefaults(schema) {
121
+ const json = schema.toJSON();
122
+ const result = {};
123
+ const fields = json.object || json.properties || json.dict || {};
124
+ for (const [fieldKey, fieldSchema] of Object.entries(fields)) {
125
+ const field = fieldSchema;
126
+ if (field.default !== undefined) {
127
+ result[fieldKey] = field.default;
128
+ }
129
+ }
130
+ return result;
131
+ }
132
+ //# sourceMappingURL=schema-feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-feature.js","sourceRoot":"","sources":["../../src/built/schema-feature.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * from './built/tool.js';
19
19
  export * from './built/ai-trigger.js';
20
20
  export * from './built/dispatcher.js';
21
21
  export * from './built/skill.js';
22
+ export * from './built/schema-feature.js';
22
23
  export * from './built/common-adapter-tools.js';
23
24
  export * from './ai/index.js';
24
25
  export * from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAE3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,uBAAuB,CAAA;AAErC,cAAc,uBAAuB,CAAA;AAErC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,iCAAiC,CAAA;AAE/C,cAAc,eAAe,CAAA;AAE7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAE3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,uBAAuB,CAAA;AAErC,cAAc,uBAAuB,CAAA;AAErC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,2BAA2B,CAAA;AAEzC,cAAc,iCAAiC,CAAA;AAE/C,cAAc,eAAe,CAAA;AAE7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA"}
package/lib/index.js CHANGED
@@ -26,6 +26,8 @@ export * from './built/ai-trigger.js';
26
26
  export * from './built/dispatcher.js';
27
27
  // Skill 系统 (AI 能力描述)
28
28
  export * from './built/skill.js';
29
+ // Schema 注册表 (插件配置声明)
30
+ export * from './built/schema-feature.js';
29
31
  // Common adapter tool factories (shared across adapters)
30
32
  export * from './built/common-adapter-tools.js';
31
33
  // AI 模块 (原 @zhin.js/ai,已合并至 core)
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,SAAS;AACT,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,oBAAoB;AACpB,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,0BAA0B;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,gCAAgC;AAChC,cAAc,uBAAuB,CAAA;AACrC,4BAA4B;AAC5B,cAAc,uBAAuB,CAAA;AACrC,qBAAqB;AACrB,cAAc,kBAAkB,CAAA;AAChC,yDAAyD;AACzD,cAAc,iCAAiC,CAAA;AAC/C,kCAAkC;AAClC,cAAc,eAAe,CAAA;AAE7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA,CAAE,WAAW;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,SAAS;AACT,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,oBAAoB;AACpB,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,0BAA0B;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,gCAAgC;AAChC,cAAc,uBAAuB,CAAA;AACrC,4BAA4B;AAC5B,cAAc,uBAAuB,CAAA;AACrC,qBAAqB;AACrB,cAAc,kBAAkB,CAAA;AAChC,sBAAsB;AACtB,cAAc,2BAA2B,CAAA;AACzC,yDAAyD;AACzD,cAAc,iCAAiC,CAAA;AAC/C,kCAAkC;AAClC,cAAc,eAAe,CAAA;AAE7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA,CAAE,WAAW;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,yCAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/core",
3
- "version": "1.0.41",
3
+ "version": "1.0.43",
4
4
  "description": "Zhin机器人核心框架",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -37,11 +37,11 @@
37
37
  "segment-matcher": "^1.0.5",
38
38
  "smol-toml": "^1.6.0",
39
39
  "yaml": "^2.3.4",
40
- "@zhin.js/ai": "1.0.2",
41
- "@zhin.js/database": "1.0.28",
42
- "@zhin.js/kernel": "0.0.2",
43
- "@zhin.js/logger": "0.1.25",
44
- "@zhin.js/schema": "1.0.25"
40
+ "@zhin.js/ai": "1.0.4",
41
+ "@zhin.js/database": "1.0.30",
42
+ "@zhin.js/kernel": "0.0.4",
43
+ "@zhin.js/logger": "0.1.27",
44
+ "@zhin.js/schema": "1.0.27"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/node": "^24.3.0",
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import path from "node:path";
7
7
  import fs from "node:fs";
8
- import { stringify as stringifyYaml, parse as parseYaml } from "yaml";
8
+ import { stringify as stringifyYaml, parse as parseYaml, parseDocument } from "yaml";
9
9
  import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
10
10
  import { Schema } from "@zhin.js/schema";
11
11
  import { Feature, FeatureJSON } from "../feature.js";
@@ -124,6 +124,39 @@ export class ConfigLoader<T extends object> {
124
124
  break;
125
125
  }
126
126
  }
127
+ /**
128
+ * 精准修改单个顶层 key 并写回文件
129
+ * 保留注释、格式和未修改字段(如 ${VAR} 环境变量引用)
130
+ */
131
+ patchKey(key: string, value: any) {
132
+ const fullPath = path.resolve(process.cwd(), this.filename);
133
+ switch (this.extension) {
134
+ case ".yaml":
135
+ case ".yml": {
136
+ const content = fs.readFileSync(fullPath, 'utf-8');
137
+ const doc = parseDocument(content);
138
+ doc.set(key, value);
139
+ fs.writeFileSync(fullPath, doc.toString());
140
+ break;
141
+ }
142
+ case ".json": {
143
+ const content = fs.readFileSync(fullPath, 'utf-8');
144
+ const obj = JSON.parse(content);
145
+ obj[key] = value;
146
+ fs.writeFileSync(fullPath, JSON.stringify(obj, null, 2));
147
+ break;
148
+ }
149
+ case ".toml": {
150
+ const content = fs.readFileSync(fullPath, 'utf-8');
151
+ const obj = parseToml(content);
152
+ (obj as Record<string, any>)[key] = value;
153
+ fs.writeFileSync(fullPath, stringifyToml(obj));
154
+ break;
155
+ }
156
+ }
157
+ // 同步更新内存
158
+ (this.#data as Record<string, any>)[key] = value;
159
+ }
127
160
  }
128
161
 
129
162
  export namespace ConfigLoader {
@@ -0,0 +1,190 @@
1
+ /**
2
+ * SchemaFeature — 插件配置 Schema 注册表
3
+ *
4
+ * 插件通过 declareConfig(key, schema) 声明配置项及其 Schema,
5
+ * SchemaFeature 全局收集后供 Web 控制台渲染配置编辑表单。
6
+ *
7
+ * 与 ConfigFeature 协作:
8
+ * - declareConfig 内部调用 addConfig(key, defaults) 写入默认值
9
+ * - Schema.toJSON() 传给前端驱动 PluginConfigForm
10
+ * - reloadable 标记决定保存后是否自动重载插件
11
+ */
12
+
13
+ import { Feature, FeatureJSON } from '../feature.js';
14
+ import { Schema } from '@zhin.js/schema';
15
+ import { Plugin, getPlugin } from '../plugin.js';
16
+
17
+ // ============================================================================
18
+ // 类型
19
+ // ============================================================================
20
+
21
+ export interface SchemaRecord {
22
+ /** 配置 key(对应 zhin.config.yml 中的顶级字段) */
23
+ key: string;
24
+ /** Schema 实例 */
25
+ schema: Schema;
26
+ /** 保存后是否支持热重载(http/database 等底层服务应为 false) */
27
+ reloadable: boolean;
28
+ }
29
+
30
+ export interface SchemaContextExtensions {
31
+ /**
32
+ * 声明插件配置 Schema
33
+ * @param key 配置 key,如 "rss"
34
+ * @param schema Schema.object({...}) 定义
35
+ * @param options.reloadable 保存后是否自动重载,默认 true
36
+ * @returns 当前配置值(已合并默认值)
37
+ */
38
+ declareConfig<T extends Record<string, any>>(
39
+ key: string,
40
+ schema: Schema<T>,
41
+ options?: { reloadable?: boolean },
42
+ ): Required<T>;
43
+ }
44
+
45
+ declare module '../plugin.js' {
46
+ namespace Plugin {
47
+ interface Extensions extends SchemaContextExtensions {}
48
+ interface Contexts {
49
+ schema: SchemaFeature;
50
+ }
51
+ }
52
+ }
53
+
54
+ // ============================================================================
55
+ // SchemaFeature
56
+ // ============================================================================
57
+
58
+ export class SchemaFeature extends Feature<SchemaRecord> {
59
+ readonly name = 'schema' as const;
60
+ readonly icon = 'FileCode';
61
+ readonly desc = '配置模型';
62
+
63
+ /**
64
+ * 按配置 key 查找 Schema
65
+ */
66
+ getByKey(key: string): SchemaRecord | null {
67
+ return this.items.find(r => r.key === key) ?? null;
68
+ }
69
+
70
+ /**
71
+ * 获取指定插件名注册的 Schema
72
+ */
73
+ getByPluginName(pluginName: string): SchemaRecord | null {
74
+ const list = this.getByPlugin(pluginName);
75
+ return list.length > 0 ? list[0] : null;
76
+ }
77
+
78
+ /**
79
+ * 获取某个 key 的 Schema 实例(WebSocket handler 使用)
80
+ */
81
+ get(keyOrPlugin: string): Schema | null {
82
+ const byKey = this.getByKey(keyOrPlugin);
83
+ if (byKey) return byKey.schema;
84
+ const byPlugin = this.getByPluginName(keyOrPlugin);
85
+ return byPlugin?.schema ?? null;
86
+ }
87
+
88
+ /**
89
+ * 判断某个 key 对应的插件是否支持热重载
90
+ */
91
+ isReloadable(keyOrPlugin: string): boolean {
92
+ const byKey = this.getByKey(keyOrPlugin);
93
+ if (byKey) return byKey.reloadable;
94
+ const byPlugin = this.getByPluginName(keyOrPlugin);
95
+ return byPlugin?.reloadable ?? true;
96
+ }
97
+
98
+ /**
99
+ * 通过 pluginName 获取对应的 config key
100
+ */
101
+ resolveConfigKey(pluginName: string): string | null {
102
+ const byKey = this.getByKey(pluginName);
103
+ if (byKey) return byKey.key;
104
+ const byPlugin = this.getByPluginName(pluginName);
105
+ return byPlugin?.key ?? null;
106
+ }
107
+
108
+ /**
109
+ * 返回 pluginName → configKey 的映射
110
+ */
111
+ getPluginKeyMap(): Map<string, string> {
112
+ const map = new Map<string, string>();
113
+ for (const [pluginName, records] of this.pluginItems) {
114
+ if (records.length > 0) {
115
+ map.set(pluginName, records[0].key);
116
+ }
117
+ }
118
+ return map;
119
+ }
120
+
121
+ toJSON(pluginName?: string): FeatureJSON {
122
+ const list = pluginName ? this.getByPlugin(pluginName) : this.items;
123
+ return {
124
+ name: this.name,
125
+ icon: this.icon,
126
+ desc: this.desc,
127
+ count: list.length,
128
+ items: list.map(r => ({
129
+ name: r.key,
130
+ reloadable: r.reloadable,
131
+ schema: r.schema.toJSON(),
132
+ })),
133
+ };
134
+ }
135
+
136
+ get extensions() {
137
+ const feature = this;
138
+ return {
139
+ declareConfig<T extends Record<string, any>>(
140
+ key: string,
141
+ schema: Schema<T>,
142
+ options?: { reloadable?: boolean },
143
+ ): Required<T> {
144
+ const plugin = getPlugin() as Plugin;
145
+ const reloadable = options?.reloadable ?? true;
146
+
147
+ // 从 Schema 提取默认值
148
+ const defaults = extractDefaults(schema);
149
+
150
+ // 注册到 ConfigFeature(写入 config.yml 的默认值)
151
+ if (typeof plugin.addConfig === 'function') {
152
+ plugin.addConfig(key, defaults);
153
+ }
154
+
155
+ // 注册到 SchemaFeature
156
+ const record: SchemaRecord = { key, schema, reloadable };
157
+ const dispose = feature.add(record, plugin.name);
158
+ plugin.recordFeatureContribution(feature.name, key);
159
+ plugin.onDispose(dispose);
160
+
161
+ // 读取当前配置并与默认值合并
162
+ const root = plugin.root ?? plugin;
163
+ const configService = root.inject('config') as any;
164
+ const appConfig = configService?.get?.('zhin.config.yml') ?? {};
165
+ const current = appConfig[key] ?? {};
166
+
167
+ return { ...defaults, ...current } as Required<T>;
168
+ },
169
+ };
170
+ }
171
+ }
172
+
173
+ // ============================================================================
174
+ // 辅助:从 Schema 提取默认值
175
+ // ============================================================================
176
+
177
+ function extractDefaults(schema: Schema): Record<string, any> {
178
+ const json = schema.toJSON();
179
+ const result: Record<string, any> = {};
180
+
181
+ const fields = json.object || json.properties || json.dict || {};
182
+ for (const [fieldKey, fieldSchema] of Object.entries(fields)) {
183
+ const field = fieldSchema as Record<string, any>;
184
+ if (field.default !== undefined) {
185
+ result[fieldKey] = field.default;
186
+ }
187
+ }
188
+
189
+ return result;
190
+ }
package/src/index.ts CHANGED
@@ -26,6 +26,8 @@ export * from './built/ai-trigger.js'
26
26
  export * from './built/dispatcher.js'
27
27
  // Skill 系统 (AI 能力描述)
28
28
  export * from './built/skill.js'
29
+ // Schema 注册表 (插件配置声明)
30
+ export * from './built/schema-feature.js'
29
31
  // Common adapter tool factories (shared across adapters)
30
32
  export * from './built/common-adapter-tools.js'
31
33
  // AI 模块 (原 @zhin.js/ai,已合并至 core)