@bundy-lmw/hive-server 1.0.1 → 1.0.2
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/bootstrap.d.ts +3 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +17 -24
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/commands/skill/index.d.ts +10 -0
- package/dist/cli/commands/skill/index.d.ts.map +1 -0
- package/dist/cli/commands/skill/index.js +174 -0
- package/dist/cli/commands/skill/index.js.map +1 -0
- package/dist/cli/commands/skill/installer.d.ts +75 -0
- package/dist/cli/commands/skill/installer.d.ts.map +1 -0
- package/dist/cli/commands/skill/installer.js +347 -0
- package/dist/cli/commands/skill/installer.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/gateway/http.d.ts +2 -1
- package/dist/gateway/http.d.ts.map +1 -1
- package/dist/gateway/http.js +17 -3
- package/dist/gateway/http.js.map +1 -1
- package/dist/gateway/ws/admin-handler.d.ts +24 -47
- package/dist/gateway/ws/admin-handler.d.ts.map +1 -1
- package/dist/gateway/ws/admin-handler.js +76 -465
- package/dist/gateway/ws/admin-handler.js.map +1 -1
- package/dist/gateway/ws/chat-handler.d.ts +42 -0
- package/dist/gateway/ws/chat-handler.d.ts.map +1 -0
- package/dist/gateway/ws/chat-handler.js +258 -0
- package/dist/gateway/ws/chat-handler.js.map +1 -0
- package/dist/gateway/ws/config-store.d.ts +16 -0
- package/dist/gateway/ws/config-store.d.ts.map +1 -0
- package/dist/gateway/ws/config-store.js +68 -0
- package/dist/gateway/ws/config-store.js.map +1 -0
- package/dist/gateway/ws/data-types.d.ts +3 -0
- package/dist/gateway/ws/data-types.d.ts.map +1 -1
- package/dist/gateway/ws/handler-context.d.ts +41 -0
- package/dist/gateway/ws/handler-context.d.ts.map +1 -0
- package/dist/gateway/ws/handler-context.js +8 -0
- package/dist/gateway/ws/handler-context.js.map +1 -0
- package/dist/gateway/ws/handlers/base.d.ts +14 -0
- package/dist/gateway/ws/handlers/base.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/base.js +13 -0
- package/dist/gateway/ws/handlers/base.js.map +1 -0
- package/dist/gateway/ws/handlers/config-handler.d.ts +14 -0
- package/dist/gateway/ws/handlers/config-handler.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/config-handler.js +53 -0
- package/dist/gateway/ws/handlers/config-handler.js.map +1 -0
- package/dist/gateway/ws/handlers/index.d.ts +10 -0
- package/dist/gateway/ws/handlers/index.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/index.js +10 -0
- package/dist/gateway/ws/handlers/index.js.map +1 -0
- package/dist/gateway/ws/handlers/log-handler.d.ts +20 -0
- package/dist/gateway/ws/handlers/log-handler.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/log-handler.js +65 -0
- package/dist/gateway/ws/handlers/log-handler.js.map +1 -0
- package/dist/gateway/ws/handlers/plugin-handler.d.ts +29 -0
- package/dist/gateway/ws/handlers/plugin-handler.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/plugin-handler.js +197 -0
- package/dist/gateway/ws/handlers/plugin-handler.js.map +1 -0
- package/dist/gateway/ws/handlers/session-handler.d.ts +14 -0
- package/dist/gateway/ws/handlers/session-handler.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/session-handler.js +36 -0
- package/dist/gateway/ws/handlers/session-handler.js.map +1 -0
- package/dist/gateway/ws/handlers/status-handler.d.ts +23 -0
- package/dist/gateway/ws/handlers/status-handler.d.ts.map +1 -0
- package/dist/gateway/ws/handlers/status-handler.js +136 -0
- package/dist/gateway/ws/handlers/status-handler.js.map +1 -0
- package/dist/gateway/ws/log-buffer.d.ts +1 -0
- package/dist/gateway/ws/log-buffer.d.ts.map +1 -1
- package/dist/gateway/ws/log-buffer.js +8 -0
- package/dist/gateway/ws/log-buffer.js.map +1 -1
- package/dist/gateway/ws/types.d.ts +1 -1
- package/dist/gateway/ws/types.d.ts.map +1 -1
- package/dist/gateway/ws/types.js.map +1 -1
- package/dist/graceful-shutdown.d.ts +13 -0
- package/dist/graceful-shutdown.d.ts.map +1 -0
- package/dist/graceful-shutdown.js +65 -0
- package/dist/graceful-shutdown.js.map +1 -0
- package/dist/logging/file-logger.d.ts +43 -0
- package/dist/logging/file-logger.d.ts.map +1 -0
- package/dist/logging/file-logger.js +134 -0
- package/dist/logging/file-logger.js.map +1 -0
- package/dist/logging/hive-logger.d.ts +26 -0
- package/dist/logging/hive-logger.d.ts.map +1 -0
- package/dist/logging/hive-logger.js +251 -0
- package/dist/logging/hive-logger.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +68 -19
- package/dist/main.js.map +1 -1
- package/dist/plugin-manager/installer.d.ts +1 -1
- package/dist/plugin-manager/installer.d.ts.map +1 -1
- package/dist/plugin-manager/installer.js +84 -17
- package/dist/plugin-manager/installer.js.map +1 -1
- package/dist/plugin-manager/searcher.js +1 -1
- package/dist/plugin-manager/searcher.js.map +1 -1
- package/dist/plugin-manager/types.d.ts +1 -0
- package/dist/plugin-manager/types.d.ts.map +1 -1
- package/dist/plugins.d.ts +18 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +50 -22
- package/dist/plugins.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigHandler — 配置管理域
|
|
3
|
+
*
|
|
4
|
+
* config.get / config.update / config.getProviderPresets
|
|
5
|
+
*/
|
|
6
|
+
import { WsDomainHandler } from './base.js';
|
|
7
|
+
import { createSuccessResponse, createErrorResponse } from '../types.js';
|
|
8
|
+
export class ConfigHandler extends WsDomainHandler {
|
|
9
|
+
register() {
|
|
10
|
+
return new Map([
|
|
11
|
+
['config.get', this.handleConfigGet.bind(this)],
|
|
12
|
+
['config.update', this.handleConfigUpdate.bind(this)],
|
|
13
|
+
['config.getProviderPresets', this.handleGetProviderPresets.bind(this)],
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
handleConfigGet(_params, id) {
|
|
17
|
+
const config = this.ctx.loadConfig();
|
|
18
|
+
return createSuccessResponse(id, this.ctx.sensitizeConfig(config));
|
|
19
|
+
}
|
|
20
|
+
handleConfigUpdate(params, id) {
|
|
21
|
+
if (!params || typeof params !== 'object') {
|
|
22
|
+
return createErrorResponse(id, 'VALIDATION', 'params must be an object');
|
|
23
|
+
}
|
|
24
|
+
const updates = params;
|
|
25
|
+
const config = this.ctx.loadConfig();
|
|
26
|
+
if (updates.server)
|
|
27
|
+
Object.assign(config.server, updates.server);
|
|
28
|
+
if (updates.auth)
|
|
29
|
+
Object.assign(config.auth, updates.auth);
|
|
30
|
+
if (updates.provider)
|
|
31
|
+
Object.assign(config.provider, updates.provider);
|
|
32
|
+
if (updates.heartbeat)
|
|
33
|
+
Object.assign(config.heartbeat, updates.heartbeat);
|
|
34
|
+
this.ctx.saveConfig(config);
|
|
35
|
+
const changedKeys = Object.keys(updates);
|
|
36
|
+
this.ctx.broadcastEvent('config.changed', { keys: changedKeys });
|
|
37
|
+
return createSuccessResponse(id, { success: true });
|
|
38
|
+
}
|
|
39
|
+
handleGetProviderPresets(_params, id) {
|
|
40
|
+
const server = this.ctx.getServer();
|
|
41
|
+
if (!server) {
|
|
42
|
+
return createErrorResponse(id, 'INTERNAL', 'Server not initialized');
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const presets = server.agent.listPresets();
|
|
46
|
+
return createSuccessResponse(id, presets);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return createSuccessResponse(id, []);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=config-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-handler.js","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/config-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,OAAO,aAAc,SAAQ,eAAe;IAChD,QAAQ;QACN,OAAO,IAAI,GAAG,CAAwB;YACpC,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,CAAC,2BAA2B,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE,CAAC,CAAA;IACJ,CAAC;IAEO,eAAe,CAAC,OAAgB,EAAE,EAAU;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;QACpC,OAAO,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;IACpE,CAAC;IAEO,kBAAkB,CAAC,MAAe,EAAE,EAAU;QACpD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,OAAO,GAAG,MAA4B,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;QAEpC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAChE,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1D,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;QAEzE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAE3B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QAEhE,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IAEO,wBAAwB,CAAC,OAAgB,EAAE,EAAU;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;YAC1C,OAAO,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Handlers 导出
|
|
3
|
+
*/
|
|
4
|
+
export { WsDomainHandler } from './base.js';
|
|
5
|
+
export { ConfigHandler } from './config-handler.js';
|
|
6
|
+
export { StatusHandler } from './status-handler.js';
|
|
7
|
+
export { PluginHandler } from './plugin-handler.js';
|
|
8
|
+
export { LogHandler } from './log-handler.js';
|
|
9
|
+
export { SessionHandler } from './session-handler.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Handlers 导出
|
|
3
|
+
*/
|
|
4
|
+
export { WsDomainHandler } from './base.js';
|
|
5
|
+
export { ConfigHandler } from './config-handler.js';
|
|
6
|
+
export { StatusHandler } from './status-handler.js';
|
|
7
|
+
export { PluginHandler } from './plugin-handler.js';
|
|
8
|
+
export { LogHandler } from './log-handler.js';
|
|
9
|
+
export { SessionHandler } from './session-handler.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LogHandler — 日志管理域
|
|
3
|
+
*
|
|
4
|
+
* log.getHistory / log.tail / log.listDates / log.getByDate / log.subscribe / log.unsubscribe
|
|
5
|
+
*/
|
|
6
|
+
import type { MethodHandler } from '../handler-context.js';
|
|
7
|
+
import { WsDomainHandler } from './base.js';
|
|
8
|
+
export declare class LogHandler extends WsDomainHandler {
|
|
9
|
+
register(): Map<string, MethodHandler>;
|
|
10
|
+
private handleLogGetHistory;
|
|
11
|
+
/** 增量拉取:返回 sinceId 之后的日志(前端轮询用) */
|
|
12
|
+
private handleLogTail;
|
|
13
|
+
/** 列出有日志文件的日期 */
|
|
14
|
+
private handleLogListDates;
|
|
15
|
+
/** 按日期读取历史日志 */
|
|
16
|
+
private handleLogGetByDate;
|
|
17
|
+
private handleLogSubscribe;
|
|
18
|
+
private handleLogUnsubscribe;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=log-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-handler.d.ts","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/log-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAWtC,OAAO,CAAC,mBAAmB;IAK3B,mCAAmC;IACnC,OAAO,CAAC,aAAa;IAMrB,iBAAiB;IACjB,OAAO,CAAC,kBAAkB;IAM1B,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,oBAAoB;CAO7B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LogHandler — 日志管理域
|
|
3
|
+
*
|
|
4
|
+
* log.getHistory / log.tail / log.listDates / log.getByDate / log.subscribe / log.unsubscribe
|
|
5
|
+
*/
|
|
6
|
+
import { WsDomainHandler } from './base.js';
|
|
7
|
+
import { createSuccessResponse, createErrorResponse } from '../types.js';
|
|
8
|
+
export class LogHandler extends WsDomainHandler {
|
|
9
|
+
register() {
|
|
10
|
+
return new Map([
|
|
11
|
+
['log.getHistory', this.handleLogGetHistory.bind(this)],
|
|
12
|
+
['log.tail', this.handleLogTail.bind(this)],
|
|
13
|
+
['log.listDates', this.handleLogListDates.bind(this)],
|
|
14
|
+
['log.getByDate', this.handleLogGetByDate.bind(this)],
|
|
15
|
+
['log.subscribe', this.handleLogSubscribe.bind(this)],
|
|
16
|
+
['log.unsubscribe', this.handleLogUnsubscribe.bind(this)],
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
handleLogGetHistory(params, id) {
|
|
20
|
+
const entries = this.ctx.getLogBuffer().query(params);
|
|
21
|
+
return createSuccessResponse(id, entries);
|
|
22
|
+
}
|
|
23
|
+
/** 增量拉取:返回 sinceId 之后的日志(前端轮询用) */
|
|
24
|
+
handleLogTail(params, id) {
|
|
25
|
+
const { sinceId, limit } = params;
|
|
26
|
+
const entries = this.ctx.getLogBuffer().query({ sinceId, limit: limit ?? 200 });
|
|
27
|
+
return createSuccessResponse(id, entries);
|
|
28
|
+
}
|
|
29
|
+
/** 列出有日志文件的日期 */
|
|
30
|
+
handleLogListDates(_params, id) {
|
|
31
|
+
const hiveLogger = this.ctx.getHiveLogger();
|
|
32
|
+
const dates = hiveLogger?.listLogDates() ?? [];
|
|
33
|
+
return createSuccessResponse(id, dates);
|
|
34
|
+
}
|
|
35
|
+
/** 按日期读取历史日志 */
|
|
36
|
+
handleLogGetByDate(params, id) {
|
|
37
|
+
const { date, limit, offset } = params;
|
|
38
|
+
if (!date) {
|
|
39
|
+
return createErrorResponse(id, 'VALIDATION', 'date is required');
|
|
40
|
+
}
|
|
41
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(date)) {
|
|
42
|
+
return createErrorResponse(id, 'VALIDATION', 'date must be YYYY-MM-DD format');
|
|
43
|
+
}
|
|
44
|
+
const hiveLogger = this.ctx.getHiveLogger();
|
|
45
|
+
const entries = hiveLogger?.getLogsByDate(date, limit ?? 200, offset ?? 0) ?? [];
|
|
46
|
+
return createSuccessResponse(id, entries);
|
|
47
|
+
}
|
|
48
|
+
handleLogSubscribe(_params, id, ws) {
|
|
49
|
+
if (ws) {
|
|
50
|
+
const client = this.ctx.findClientByWs(ws);
|
|
51
|
+
if (client)
|
|
52
|
+
client.logSubscribed = true;
|
|
53
|
+
}
|
|
54
|
+
return createSuccessResponse(id, { success: true });
|
|
55
|
+
}
|
|
56
|
+
handleLogUnsubscribe(_params, id, ws) {
|
|
57
|
+
if (ws) {
|
|
58
|
+
const client = this.ctx.findClientByWs(ws);
|
|
59
|
+
if (client)
|
|
60
|
+
client.logSubscribed = false;
|
|
61
|
+
}
|
|
62
|
+
return createSuccessResponse(id, { success: true });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=log-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-handler.js","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/log-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginHandler — 插件管理域
|
|
3
|
+
*
|
|
4
|
+
* plugin.list / plugin.available / plugin.install / plugin.uninstall / plugin.updateConfig
|
|
5
|
+
* 含 reloadPlugin(插件热重载)
|
|
6
|
+
*/
|
|
7
|
+
import type { IPlugin } from '@bundy-lmw/hive-core';
|
|
8
|
+
import type { MethodHandler } from '../handler-context.js';
|
|
9
|
+
import { WsDomainHandler } from './base.js';
|
|
10
|
+
export declare class PluginHandler extends WsDomainHandler {
|
|
11
|
+
/** 加载的插件实例,按 registry key 索引 */
|
|
12
|
+
private pluginInstances;
|
|
13
|
+
register(): Map<string, MethodHandler>;
|
|
14
|
+
/** 注入插件实例(在 bootstrap 后调用) */
|
|
15
|
+
setPlugins(plugins: IPlugin[]): void;
|
|
16
|
+
/** 搜索 npm 上可用的 Hive 插件 */
|
|
17
|
+
private handlePluginAvailable;
|
|
18
|
+
/** 列出已安装的插件 */
|
|
19
|
+
private handlePluginList;
|
|
20
|
+
/** 安装插件 */
|
|
21
|
+
private handlePluginInstall;
|
|
22
|
+
/** 卸载插件 */
|
|
23
|
+
private handlePluginUninstall;
|
|
24
|
+
/** 更新插件配置(写入 hive.config.json) */
|
|
25
|
+
private handlePluginUpdateConfig;
|
|
26
|
+
/** 重启指定插件(用最新配置重新初始化) */
|
|
27
|
+
private reloadPlugin;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=plugin-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-handler.d.ts","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/plugin-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAO3C,qBAAa,aAAc,SAAQ,eAAe;IAChD,gCAAgC;IAChC,OAAO,CAAC,eAAe,CAAkC;IAEzD,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAUtC,8BAA8B;IAC9B,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI;IAUpC,0BAA0B;YACZ,qBAAqB;IAqBnC,eAAe;IACf,OAAO,CAAC,gBAAgB;IA6BxB,WAAW;YACG,mBAAmB;IAmCjC,WAAW;IACX,OAAO,CAAC,qBAAqB;IAkC7B,kCAAkC;YACpB,wBAAwB;IAiCtC,yBAAyB;YACX,YAAY;CAyC3B"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginHandler — 插件管理域
|
|
3
|
+
*
|
|
4
|
+
* plugin.list / plugin.available / plugin.install / plugin.uninstall / plugin.updateConfig
|
|
5
|
+
* 含 reloadPlugin(插件热重载)
|
|
6
|
+
*/
|
|
7
|
+
import { pathToFileURL } from 'node:url';
|
|
8
|
+
import { searchPlugins, installPlugin, removePlugin } from '../../../plugin-manager/index.js';
|
|
9
|
+
import { loadRegistry } from '../../../plugin-manager/registry.js';
|
|
10
|
+
import { scanPluginDir } from '../../../plugins.js';
|
|
11
|
+
import { getConfig } from '../../../config.js';
|
|
12
|
+
import { WsDomainHandler } from './base.js';
|
|
13
|
+
import { createSuccessResponse, createErrorResponse } from '../types.js';
|
|
14
|
+
export class PluginHandler extends WsDomainHandler {
|
|
15
|
+
/** 加载的插件实例,按 registry key 索引 */
|
|
16
|
+
pluginInstances = new Map();
|
|
17
|
+
register() {
|
|
18
|
+
return new Map([
|
|
19
|
+
['plugin.list', this.handlePluginList.bind(this)],
|
|
20
|
+
['plugin.available', this.handlePluginAvailable.bind(this)],
|
|
21
|
+
['plugin.install', this.handlePluginInstall.bind(this)],
|
|
22
|
+
['plugin.uninstall', this.handlePluginUninstall.bind(this)],
|
|
23
|
+
['plugin.updateConfig', this.handlePluginUpdateConfig.bind(this)],
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
/** 注入插件实例(在 bootstrap 后调用) */
|
|
27
|
+
setPlugins(plugins) {
|
|
28
|
+
const manifests = scanPluginDir();
|
|
29
|
+
for (const plugin of plugins) {
|
|
30
|
+
const manifest = manifests.find(m => m.name === plugin.metadata.name);
|
|
31
|
+
if (manifest) {
|
|
32
|
+
this.pluginInstances.set(manifest.name, plugin);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** 搜索 npm 上可用的 Hive 插件 */
|
|
37
|
+
async handlePluginAvailable(params, id) {
|
|
38
|
+
const raw = (params ?? {});
|
|
39
|
+
const keyword = typeof raw.keyword === 'string' ? raw.keyword : undefined;
|
|
40
|
+
try {
|
|
41
|
+
const { packages } = await searchPlugins(keyword);
|
|
42
|
+
const items = packages.map((pkg) => ({
|
|
43
|
+
name: pkg.name,
|
|
44
|
+
version: pkg.version,
|
|
45
|
+
description: pkg.description,
|
|
46
|
+
}));
|
|
47
|
+
return createSuccessResponse(id, items);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return createErrorResponse(id, 'INTERNAL', error instanceof Error ? error.message : 'Search failed');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** 列出已安装的插件 */
|
|
54
|
+
handlePluginList(_params, id) {
|
|
55
|
+
try {
|
|
56
|
+
const config = this.ctx.loadConfig();
|
|
57
|
+
const items = [];
|
|
58
|
+
const registry = loadRegistry();
|
|
59
|
+
for (const [name, entry] of Object.entries(registry)) {
|
|
60
|
+
const pkgName = entry.source.replace(/^npm:/, '').replace(/@[\d.]+$/, '');
|
|
61
|
+
const pluginConfig = config.pluginConfigs?.[pkgName];
|
|
62
|
+
items.push({
|
|
63
|
+
id: name,
|
|
64
|
+
name: pkgName,
|
|
65
|
+
version: entry.resolvedVersion,
|
|
66
|
+
source: entry.source,
|
|
67
|
+
installedAt: entry.installedAt,
|
|
68
|
+
description: undefined,
|
|
69
|
+
enabled: true,
|
|
70
|
+
channels: [],
|
|
71
|
+
config: pluginConfig ?? {},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return createSuccessResponse(id, items);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('[plugin.list] Failed to load plugins:', error instanceof Error ? error.message : error);
|
|
78
|
+
return createSuccessResponse(id, []);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** 安装插件 */
|
|
82
|
+
async handlePluginInstall(params, id) {
|
|
83
|
+
const { source } = params;
|
|
84
|
+
if (!source || typeof source !== 'string') {
|
|
85
|
+
return createErrorResponse(id, 'VALIDATION', 'source is required');
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const result = await installPlugin(source);
|
|
89
|
+
if (!result.success) {
|
|
90
|
+
return createErrorResponse(id, 'INTERNAL', result.error || 'Installation failed');
|
|
91
|
+
}
|
|
92
|
+
this.ctx.broadcastEvent('plugin.installed', {
|
|
93
|
+
id: result.name,
|
|
94
|
+
name: result.name,
|
|
95
|
+
version: result.version,
|
|
96
|
+
});
|
|
97
|
+
return createSuccessResponse(id, {
|
|
98
|
+
id: result.name,
|
|
99
|
+
name: result.packageName ?? result.name,
|
|
100
|
+
version: result.version,
|
|
101
|
+
enabled: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return createErrorResponse(id, 'INTERNAL', error instanceof Error ? error.message : 'Installation failed');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** 卸载插件 */
|
|
109
|
+
handlePluginUninstall(params, id) {
|
|
110
|
+
const { id: pluginId } = params;
|
|
111
|
+
if (!pluginId) {
|
|
112
|
+
return createErrorResponse(id, 'VALIDATION', 'id is required');
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const entry = loadRegistry()[pluginId];
|
|
116
|
+
const result = removePlugin(pluginId);
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
return createErrorResponse(id, 'INTERNAL', result.error || 'Uninstall failed');
|
|
119
|
+
}
|
|
120
|
+
if (entry) {
|
|
121
|
+
const config = this.ctx.loadConfig();
|
|
122
|
+
const pkgKey = entry.source.replace(/^npm:/, '').replace(/@[\d.]+$/, '');
|
|
123
|
+
if (config.pluginConfigs && pkgKey in config.pluginConfigs) {
|
|
124
|
+
delete config.pluginConfigs[pkgKey];
|
|
125
|
+
this.ctx.saveConfig(config);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.ctx.broadcastEvent('plugin.uninstalled', { id: pluginId });
|
|
129
|
+
return createSuccessResponse(id, { success: true });
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return createErrorResponse(id, 'INTERNAL', error instanceof Error ? error.message : 'Uninstall failed');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** 更新插件配置(写入 hive.config.json) */
|
|
136
|
+
async handlePluginUpdateConfig(params, id) {
|
|
137
|
+
const { id: pluginId, config } = params;
|
|
138
|
+
if (!pluginId || !config) {
|
|
139
|
+
return createErrorResponse(id, 'VALIDATION', 'id and config are required');
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const registry = loadRegistry();
|
|
143
|
+
const entry = registry[pluginId];
|
|
144
|
+
const pkgKey = entry
|
|
145
|
+
? entry.source.replace(/^npm:/, '').replace(/@[\d.]+$/, '')
|
|
146
|
+
: pluginId;
|
|
147
|
+
const cfg = this.ctx.loadConfig();
|
|
148
|
+
if (!cfg.pluginConfigs) {
|
|
149
|
+
cfg.pluginConfigs = {};
|
|
150
|
+
}
|
|
151
|
+
cfg.pluginConfigs[pkgKey] = config;
|
|
152
|
+
this.ctx.saveConfig(cfg);
|
|
153
|
+
await this.reloadPlugin(pluginId);
|
|
154
|
+
this.ctx.broadcastEvent('plugin.configChanged', { id: pluginId, config });
|
|
155
|
+
return createSuccessResponse(id, { success: true });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return createErrorResponse(id, 'INTERNAL', error instanceof Error ? error.message : 'Config update failed');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** 重启指定插件(用最新配置重新初始化) */
|
|
162
|
+
async reloadPlugin(pluginId) {
|
|
163
|
+
const oldPlugin = this.pluginInstances.get(pluginId);
|
|
164
|
+
if (!oldPlugin) {
|
|
165
|
+
console.warn(`[reloadPlugin] Plugin not found in instances: ${pluginId}`);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const server = this.ctx.getServer();
|
|
169
|
+
if (!server)
|
|
170
|
+
return;
|
|
171
|
+
await oldPlugin.deactivate();
|
|
172
|
+
if (oldPlugin.destroy)
|
|
173
|
+
await oldPlugin.destroy();
|
|
174
|
+
const manifests = scanPluginDir();
|
|
175
|
+
const manifest = manifests.find(m => m.name === pluginId);
|
|
176
|
+
if (!manifest) {
|
|
177
|
+
console.error(`[reloadPlugin] Manifest not found for: ${pluginId}`);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const { pluginConfigs } = getConfig();
|
|
181
|
+
const config = pluginConfigs?.[pluginId] ?? {};
|
|
182
|
+
try {
|
|
183
|
+
const entryUrl = pathToFileURL(manifest.entry).href;
|
|
184
|
+
const mod = await import(entryUrl);
|
|
185
|
+
const PluginClass = mod.default;
|
|
186
|
+
const newPlugin = new PluginClass(config);
|
|
187
|
+
await newPlugin.initialize(server.bus, server.logger, (channel) => server.registerChannel(channel));
|
|
188
|
+
await newPlugin.activate();
|
|
189
|
+
this.pluginInstances.set(pluginId, newPlugin);
|
|
190
|
+
console.log(`[reloadPlugin] Plugin reloaded: ${pluginId}`);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(`[reloadPlugin] Failed to reload ${pluginId}:`, error instanceof Error ? error.message : error);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=plugin-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-handler.js","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/plugin-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAK3C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,OAAO,aAAc,SAAQ,eAAe;IAChD,gCAAgC;IACxB,eAAe,GAAyB,IAAI,GAAG,EAAE,CAAA;IAEzD,QAAQ;QACN,OAAO,IAAI,GAAG,CAAwB;YACpC,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClE,CAAC,CAAA;IACJ,CAAC;IAED,8BAA8B;IAC9B,UAAU,CAAC,OAAkB;QAC3B,MAAM,SAAS,GAAG,aAAa,EAAE,CAAA;QACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrE,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAClB,KAAK,CAAC,qBAAqB,CAAC,MAAe,EAAE,EAAU;QAC7D,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAA0B,CAAA;QACnD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;QAEzE,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC,CAAC,CAAA;YACH,OAAO,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CACxB,EAAE,EACF,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAA;QACH,CAAC;IACH,CAAC;IAED,eAAe;IACP,gBAAgB,CAAC,OAAgB,EAAE,EAAU;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;YACpC,MAAM,KAAK,GAAiB,EAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;YAE/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;gBACzE,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAA;gBACpD,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,KAAK,CAAC,eAAe;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,SAAS;oBACtB,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,YAAY,IAAI,EAAE;iBAC3B,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACtG,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,WAAW;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAe,EAAE,EAAU;QAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAA6B,CAAA;QAEhD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAA;QACpE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;YAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAA;YACnF,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE;gBAC1C,EAAE,EAAE,MAAM,CAAC,IAAI;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAA;YAEF,OAAO,qBAAqB,CAAC,EAAE,EAAE;gBAC/B,EAAE,EAAE,MAAM,CAAC,IAAI;gBACf,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI;gBACvC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CACxB,EAAE,EACF,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAC/D,CAAA;QACH,CAAC;IACH,CAAC;IAED,WAAW;IACH,qBAAqB,CAAC,MAAe,EAAE,EAAU;QACvD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,MAA+B,CAAA;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAA;QAChE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAA;YACtC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;YAErC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAA;YAChF,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;gBACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;gBACxE,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC3D,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;oBACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC/D,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CACxB,EAAE,EACF,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAC5D,CAAA;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAC1B,KAAK,CAAC,wBAAwB,CAAC,MAAe,EAAE,EAAU;QAChE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAkC,CAAA;QACnE,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,4BAA4B,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;YAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAChC,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC3D,CAAC,CAAC,QAAQ,CAAA;YAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACvB,GAAG,CAAC,aAAa,GAAG,EAAE,CAAA;YACxB,CAAC;YACD,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;YAClC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAExB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YAEjC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YACzE,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CACxB,EAAE,EACF,UAAU,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAChE,CAAA;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACjB,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAA;YACzE,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA;QACnC,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAA;QAC5B,IAAI,SAAS,CAAC,OAAO;YAAE,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;QAEhD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAA;YACnD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;YAClC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAA;YAC/B,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,CAAY,CAAA;YAEpD,MAAM,SAAS,CAAC,UAAU,CACxB,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,MAAM,EACb,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAC7C,CAAA;YACD,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAA;YAE1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAA;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,QAAQ,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC/G,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionHandler — 会话管理域
|
|
3
|
+
*
|
|
4
|
+
* session.list / session.get / session.delete
|
|
5
|
+
*/
|
|
6
|
+
import type { MethodHandler } from '../handler-context.js';
|
|
7
|
+
import { WsDomainHandler } from './base.js';
|
|
8
|
+
export declare class SessionHandler extends WsDomainHandler {
|
|
9
|
+
register(): Map<string, MethodHandler>;
|
|
10
|
+
private handleSessionList;
|
|
11
|
+
private handleSessionGet;
|
|
12
|
+
private handleSessionDelete;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=session-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-handler.d.ts","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/session-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAI3C,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAQtC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;CAO5B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionHandler — 会话管理域
|
|
3
|
+
*
|
|
4
|
+
* session.list / session.get / session.delete
|
|
5
|
+
*/
|
|
6
|
+
import { WsDomainHandler } from './base.js';
|
|
7
|
+
import { createSuccessResponse, createErrorResponse } from '../types.js';
|
|
8
|
+
export class SessionHandler extends WsDomainHandler {
|
|
9
|
+
register() {
|
|
10
|
+
return new Map([
|
|
11
|
+
['session.list', this.handleSessionList.bind(this)],
|
|
12
|
+
['session.get', this.handleSessionGet.bind(this)],
|
|
13
|
+
['session.delete', this.handleSessionDelete.bind(this)],
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
handleSessionList(_params, id) {
|
|
17
|
+
// Session 数据由 core 的 SessionCapability 管理
|
|
18
|
+
// 暂时返回空列表,后续通过 server 实例获取
|
|
19
|
+
return createSuccessResponse(id, []);
|
|
20
|
+
}
|
|
21
|
+
handleSessionGet(params, id) {
|
|
22
|
+
const { id: sessionId } = params;
|
|
23
|
+
if (!sessionId || typeof sessionId !== 'string') {
|
|
24
|
+
return createErrorResponse(id, 'VALIDATION', 'id is required');
|
|
25
|
+
}
|
|
26
|
+
return createSuccessResponse(id, null);
|
|
27
|
+
}
|
|
28
|
+
handleSessionDelete(params, id) {
|
|
29
|
+
const { id: sessionId } = params;
|
|
30
|
+
if (!sessionId || typeof sessionId !== 'string') {
|
|
31
|
+
return createErrorResponse(id, 'VALIDATION', 'id is required');
|
|
32
|
+
}
|
|
33
|
+
return createSuccessResponse(id, { success: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=session-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-handler.js","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/session-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD,QAAQ;QACN,OAAO,IAAI,GAAG,CAAwB;YACpC,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IAEO,iBAAiB,CAAC,OAAgB,EAAE,EAAU;QACpD,0CAA0C;QAC1C,2BAA2B;QAC3B,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC;IAEO,gBAAgB,CAAC,MAAe,EAAE,EAAU;QAClD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAA0B,CAAA;QACpD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAEO,mBAAmB,CAAC,MAAe,EAAE,EAAU;QACrD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAA6B,CAAA;QACvD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatusHandler — 服务状态域
|
|
3
|
+
*
|
|
4
|
+
* status.get / server.restart / server.getProviders / provider.list / provider.getModels
|
|
5
|
+
*/
|
|
6
|
+
import type { HandlerContext, MethodHandler } from '../handler-context.js';
|
|
7
|
+
import { WsDomainHandler } from './base.js';
|
|
8
|
+
import type { Server as HttpServer } from 'node:http';
|
|
9
|
+
export declare class StatusHandler extends WsDomainHandler {
|
|
10
|
+
private startTime;
|
|
11
|
+
private httpServer;
|
|
12
|
+
constructor(ctx: HandlerContext, startTime: number);
|
|
13
|
+
setHttpServer(httpServer: HttpServer | null): void;
|
|
14
|
+
register(): Map<string, MethodHandler>;
|
|
15
|
+
private handleStatusGet;
|
|
16
|
+
private handleServerRestart;
|
|
17
|
+
private handleGetProviders;
|
|
18
|
+
private handleProviderList;
|
|
19
|
+
private handleProviderGetModels;
|
|
20
|
+
private getPort;
|
|
21
|
+
private getVersion;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=status-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-handler.d.ts","sourceRoot":"","sources":["../../../../src/gateway/ws/handlers/status-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AAKrD,qBAAa,aAAc,SAAQ,eAAe;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,UAAU,CAA0B;gBAEhC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAKlD,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAIlD,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAUtC,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;YAUZ,kBAAkB;YAqBlB,uBAAuB;IAyBrC,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,UAAU;CAQnB"}
|