@bundy-lmw/hive-server 1.0.1

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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -0
  3. package/dist/bootstrap.d.ts +36 -0
  4. package/dist/bootstrap.d.ts.map +1 -0
  5. package/dist/bootstrap.js +86 -0
  6. package/dist/bootstrap.js.map +1 -0
  7. package/dist/cli/index.d.ts +8 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +125 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/config.d.ts +93 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +156 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/gateway/auth.d.ts +16 -0
  16. package/dist/gateway/auth.d.ts.map +1 -0
  17. package/dist/gateway/auth.js +50 -0
  18. package/dist/gateway/auth.js.map +1 -0
  19. package/dist/gateway/http.d.ts +9 -0
  20. package/dist/gateway/http.d.ts.map +1 -0
  21. package/dist/gateway/http.js +178 -0
  22. package/dist/gateway/http.js.map +1 -0
  23. package/dist/gateway/websocket.d.ts +18 -0
  24. package/dist/gateway/websocket.d.ts.map +1 -0
  25. package/dist/gateway/websocket.js +197 -0
  26. package/dist/gateway/websocket.js.map +1 -0
  27. package/dist/gateway/ws/admin-handler.d.ts +68 -0
  28. package/dist/gateway/ws/admin-handler.d.ts.map +1 -0
  29. package/dist/gateway/ws/admin-handler.js +573 -0
  30. package/dist/gateway/ws/admin-handler.js.map +1 -0
  31. package/dist/gateway/ws/data-types.d.ts +130 -0
  32. package/dist/gateway/ws/data-types.d.ts.map +1 -0
  33. package/dist/gateway/ws/data-types.js +7 -0
  34. package/dist/gateway/ws/data-types.js.map +1 -0
  35. package/dist/gateway/ws/log-buffer.d.ts +29 -0
  36. package/dist/gateway/ws/log-buffer.d.ts.map +1 -0
  37. package/dist/gateway/ws/log-buffer.js +58 -0
  38. package/dist/gateway/ws/log-buffer.js.map +1 -0
  39. package/dist/gateway/ws/types.d.ts +67 -0
  40. package/dist/gateway/ws/types.d.ts.map +1 -0
  41. package/dist/gateway/ws/types.js +68 -0
  42. package/dist/gateway/ws/types.js.map +1 -0
  43. package/dist/heartbeat-scheduler.d.ts +43 -0
  44. package/dist/heartbeat-scheduler.d.ts.map +1 -0
  45. package/dist/heartbeat-scheduler.js +118 -0
  46. package/dist/heartbeat-scheduler.js.map +1 -0
  47. package/dist/main.d.ts +23 -0
  48. package/dist/main.d.ts.map +1 -0
  49. package/dist/main.js +120 -0
  50. package/dist/main.js.map +1 -0
  51. package/dist/plugin-manager/cli.d.ts +6 -0
  52. package/dist/plugin-manager/cli.d.ts.map +1 -0
  53. package/dist/plugin-manager/cli.js +115 -0
  54. package/dist/plugin-manager/cli.js.map +1 -0
  55. package/dist/plugin-manager/constants.d.ts +24 -0
  56. package/dist/plugin-manager/constants.d.ts.map +1 -0
  57. package/dist/plugin-manager/constants.js +58 -0
  58. package/dist/plugin-manager/constants.js.map +1 -0
  59. package/dist/plugin-manager/index.d.ts +11 -0
  60. package/dist/plugin-manager/index.d.ts.map +1 -0
  61. package/dist/plugin-manager/index.js +10 -0
  62. package/dist/plugin-manager/index.js.map +1 -0
  63. package/dist/plugin-manager/installer.d.ts +19 -0
  64. package/dist/plugin-manager/installer.d.ts.map +1 -0
  65. package/dist/plugin-manager/installer.js +256 -0
  66. package/dist/plugin-manager/installer.js.map +1 -0
  67. package/dist/plugin-manager/manager.d.ts +39 -0
  68. package/dist/plugin-manager/manager.d.ts.map +1 -0
  69. package/dist/plugin-manager/manager.js +171 -0
  70. package/dist/plugin-manager/manager.js.map +1 -0
  71. package/dist/plugin-manager/registry.d.ts +31 -0
  72. package/dist/plugin-manager/registry.d.ts.map +1 -0
  73. package/dist/plugin-manager/registry.js +63 -0
  74. package/dist/plugin-manager/registry.js.map +1 -0
  75. package/dist/plugin-manager/searcher.d.ts +18 -0
  76. package/dist/plugin-manager/searcher.d.ts.map +1 -0
  77. package/dist/plugin-manager/searcher.js +50 -0
  78. package/dist/plugin-manager/searcher.js.map +1 -0
  79. package/dist/plugin-manager/types.d.ts +71 -0
  80. package/dist/plugin-manager/types.d.ts.map +1 -0
  81. package/dist/plugin-manager/types.js +5 -0
  82. package/dist/plugin-manager/types.js.map +1 -0
  83. package/dist/plugins.d.ts +18 -0
  84. package/dist/plugins.d.ts.map +1 -0
  85. package/dist/plugins.js +198 -0
  86. package/dist/plugins.js.map +1 -0
  87. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 bundy-lmw
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,211 @@
1
+ # @bundy-lmw/hive-server
2
+
3
+ Hive 多 Agent 协作框架的服务器应用。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm install
9
+ pnpm build
10
+ ```
11
+
12
+ ## 配置
13
+
14
+ ### 方式一:使用 hive.config.json(推荐)
15
+
16
+ 创建 `hive.config.json` 文件:
17
+
18
+ ```json
19
+ {
20
+ "server": {
21
+ "port": 3000,
22
+ "logLevel": "info"
23
+ },
24
+ "provider": {
25
+ "id": "glm",
26
+ "apiKey": "${GLM_API_KEY}",
27
+ "model": "glm-4-plus"
28
+ },
29
+ "plugins": {
30
+ "@bundy-lmw/hive-plugin-feishu": {
31
+ "apps": [
32
+ {
33
+ "appId": "${FEISHU_APP_ID}",
34
+ "appSecret": "${FEISHU_APP_SECRET}"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ }
40
+ ```
41
+
42
+ 环境变量使用 `${VAR_NAME}` 语法,会自动从系统环境变量中读取。
43
+
44
+ ## 使用
45
+
46
+ ### CLI 命令
47
+
48
+ ```bash
49
+ # 查看帮助
50
+ hive --help
51
+
52
+ # 查看版本
53
+ hive --version
54
+
55
+ # 启动交互式聊天
56
+ hive chat
57
+
58
+ # 启动 HTTP/WebSocket 服务器
59
+ hive server
60
+
61
+ # 指定端口启动
62
+ hive server --port 8080
63
+ ```
64
+
65
+ ### HTTP API
66
+
67
+ 服务器启动后,提供以下端点:
68
+
69
+ | 端点 | 方法 | 描述 |
70
+ |------|------|------|
71
+ | `/health` | GET | 健康检查 |
72
+ | `/api/chat` | POST | 发送聊天消息 |
73
+ | `/api/sessions` | GET | 获取会话列表 |
74
+ | `/api/sessions/:id` | GET | 获取会话详情 |
75
+ | `/webhook/:plugin/:appId` | POST | 插件 Webhook |
76
+
77
+ #### 聊天示例
78
+
79
+ ```bash
80
+ curl -X POST http://localhost:3000/api/chat \
81
+ -H "Content-Type: application/json" \
82
+ -d '{"message": "你好"}'
83
+ ```
84
+
85
+ ### WebSocket
86
+
87
+ 连接到 `ws://localhost:3000/ws` 进行实时通信:
88
+
89
+ ```javascript
90
+ const ws = new WebSocket('ws://localhost:3000/ws')
91
+
92
+ ws.onopen = () => {
93
+ ws.send(JSON.stringify({ type: 'chat', message: '你好' }))
94
+ }
95
+
96
+ ws.onmessage = (event) => {
97
+ console.log(JSON.parse(event.data))
98
+ }
99
+ ```
100
+
101
+ ## 插件系统
102
+
103
+ Hive 支持通过插件扩展通道能力。
104
+
105
+ ### 配置插件
106
+
107
+ 在 `hive.config.json` 中配置插件:
108
+
109
+ ```json
110
+ {
111
+ "plugins": {
112
+ "@bundy-lmw/hive-plugin-feishu": {
113
+ "apps": [
114
+ {
115
+ "appId": "cli_xxxxxx",
116
+ "appSecret": "xxxxxx"
117
+ }
118
+ ]
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ ### Webhook 配置
125
+
126
+ 对于飞书等需要接收事件的平台,配置 Webhook URL:
127
+
128
+ ```
129
+ https://your-server.com/webhook/feishu/{appId}
130
+ ```
131
+
132
+ ### 开发插件
133
+
134
+ 创建新插件需要实现 `IPlugin` 接口:
135
+
136
+ ```typescript
137
+ import type { IPlugin, IChannel, PluginContext } from '@bundy-lmw/hive-core'
138
+
139
+ export class MyPlugin implements IPlugin {
140
+ readonly metadata = {
141
+ id: 'my-plugin',
142
+ name: 'My Plugin',
143
+ version: '1.0.0'
144
+ }
145
+
146
+ async initialize(context: PluginContext): Promise<void> {
147
+ // 初始化逻辑
148
+ }
149
+
150
+ async activate(): Promise<void> {
151
+ // 激活插件
152
+ }
153
+
154
+ async deactivate(): Promise<void> {
155
+ // 停用插件
156
+ }
157
+
158
+ getChannels(): IChannel[] {
159
+ // 返回通道列表
160
+ return []
161
+ }
162
+ }
163
+ ```
164
+
165
+ ## 架构
166
+
167
+ ```
168
+ ┌─────────────────────────────────────────────────────┐
169
+ │ CLI Entry │
170
+ │ (src/cli/index.ts) │
171
+ └───────────────────────┬─────────────────────────────┘
172
+
173
+ ┌───────────────────────▼─────────────────────────────┐
174
+ │ Bootstrap │
175
+ │ (src/bootstrap.ts) │
176
+ │ ┌─────────┐ ┌────────┐ │
177
+ │ │Agent │ │Message │ │
178
+ │ │ │ │Bus │ │
179
+ │ └────┬────┘ └────┬───┘ │
180
+ └───────┼────────────┼────────────────────────────────┘
181
+ │ │
182
+ ┌───────▼────────────▼─────────────────────────────────┐
183
+ │ Gateways │
184
+ │ ┌─────────────────────┐ ┌──────────────────────┐ │
185
+ │ │HTTP (Hono) │ │WebSocket │ │
186
+ │ │- /api/chat │ │- Real-time chat │ │
187
+ │ │- /api/sessions │ │- Event streaming │ │
188
+ │ └─────────────────────┘ └──────────────────────┘ │
189
+ └─────────────────────────────────────────────────────┘
190
+ ```
191
+
192
+ ## 开发
193
+
194
+ ```bash
195
+ # 监视模式构建
196
+ pnpm dev
197
+
198
+ # 运行测试
199
+ pnpm test
200
+
201
+ # 测试监视模式
202
+ pnpm test:watch
203
+ ```
204
+
205
+ ## GitHub
206
+
207
+ [https://github.com/1695365384/hive](https://github.com/1695365384/hive)
208
+
209
+ ## 许可证
210
+
211
+ MIT
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Hive Server Bootstrap
3
+ *
4
+ * Thin wrapper around createServer() that reads ServerConfig and
5
+ * returns a HiveContext compatible with the existing API surface.
6
+ */
7
+ import { type Agent, type IPlugin, type ILogger, type Server, type MessageBus } from '@bundy-lmw/hive-core';
8
+ import type { ServerConfig } from './config.js';
9
+ export interface HiveContext {
10
+ /** Message bus for event-driven communication */
11
+ bus: MessageBus;
12
+ /** Main agent instance */
13
+ agent: Agent;
14
+ /** Server configuration */
15
+ config: ServerConfig;
16
+ /** Loaded plugins */
17
+ plugins: IPlugin[];
18
+ /** Logger instance */
19
+ logger: ILogger;
20
+ /** Heartbeat scheduler (null — managed by server internally) */
21
+ heartbeatScheduler: null;
22
+ /** Schedule engine (null — managed by server internally) */
23
+ scheduleEngine: null;
24
+ /** Server instance (for stop/shutdown) */
25
+ server: Server;
26
+ }
27
+ export interface BootstrapOptions {
28
+ config: ServerConfig;
29
+ }
30
+ export declare function bootstrap(options: BootstrapOptions): Promise<HiveContext>;
31
+ export declare function shutdown(ctx: HiveContext): Promise<void>;
32
+ /**
33
+ * Normalize feishu plugin config: ensure `groups` field exists and is a plain object.
34
+ */
35
+ export declare function normalizeFeishuPluginConfig(pluginConfig: Record<string, unknown>): Record<string, unknown>;
36
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,UAAU,EAEhB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,GAAG,EAAE,UAAU,CAAA;IACf,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,qBAAqB;IACrB,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,sBAAsB;IACtB,MAAM,EAAE,OAAO,CAAA;IACf,gEAAgE;IAChE,kBAAkB,EAAE,IAAI,CAAA;IACxB,4DAA4D;IAC5D,cAAc,EAAE,IAAI,CAAA;IACpB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAA;CACrB;AAcD,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAqC/E;AAMD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB1G"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Hive Server Bootstrap
3
+ *
4
+ * Thin wrapper around createServer() that reads ServerConfig and
5
+ * returns a HiveContext compatible with the existing API surface.
6
+ */
7
+ import { createServer, } from '@bundy-lmw/hive-core';
8
+ import { join } from 'path';
9
+ import { loadPlugins } from './plugins.js';
10
+ import { HIVE_HOME } from './config.js';
11
+ function createLogger(level) {
12
+ const levels = { debug: 0, info: 1, warn: 2, error: 3 };
13
+ const currentLevel = levels[level] ?? 1;
14
+ return {
15
+ debug: (msg, ...args) => currentLevel <= 0 && console.log(`[DEBUG] ${msg}`, ...args),
16
+ info: (msg, ...args) => currentLevel <= 1 && console.log(`[INFO] ${msg}`, ...args),
17
+ warn: (msg, ...args) => currentLevel <= 2 && console.warn(`[WARN] ${msg}`, ...args),
18
+ error: (msg, ...args) => currentLevel <= 3 && console.error(`[ERROR] ${msg}`, ...args),
19
+ };
20
+ }
21
+ export async function bootstrap(options) {
22
+ const { config } = options;
23
+ const logger = createLogger(config.logLevel);
24
+ const plugins = await loadPlugins();
25
+ const server = createServer({
26
+ config: {
27
+ externalConfig: {
28
+ providers: [
29
+ {
30
+ id: config.provider.id,
31
+ name: config.provider.id.toUpperCase(),
32
+ apiKey: config.provider.apiKey,
33
+ model: config.provider.model,
34
+ },
35
+ ],
36
+ activeProvider: config.provider.id,
37
+ },
38
+ heartbeat: config.heartbeat.enabled ? config.heartbeat : undefined,
39
+ },
40
+ plugins,
41
+ dbPath: join(HIVE_HOME, 'hive.db'),
42
+ logger,
43
+ });
44
+ await server.start();
45
+ return {
46
+ bus: server.bus,
47
+ agent: server.agent,
48
+ config,
49
+ plugins,
50
+ logger,
51
+ heartbeatScheduler: null,
52
+ scheduleEngine: null,
53
+ server,
54
+ };
55
+ }
56
+ // ============================================
57
+ // Shutdown
58
+ // ============================================
59
+ export async function shutdown(ctx) {
60
+ ctx.logger.info('[shutdown] Starting graceful shutdown...');
61
+ await ctx.server.stop();
62
+ ctx.logger.info('[shutdown] Shutdown complete');
63
+ }
64
+ /**
65
+ * Normalize feishu plugin config: ensure `groups` field exists and is a plain object.
66
+ */
67
+ export function normalizeFeishuPluginConfig(pluginConfig) {
68
+ const channels = pluginConfig.channels;
69
+ if (!channels || typeof channels !== 'object')
70
+ return pluginConfig;
71
+ const feishu = channels.feishu;
72
+ if (!feishu || typeof feishu !== 'object')
73
+ return pluginConfig;
74
+ const feishuConfig = feishu;
75
+ if ('groups' in feishuConfig && feishuConfig.groups !== null && typeof feishuConfig.groups === 'object' && !Array.isArray(feishuConfig.groups)) {
76
+ return pluginConfig;
77
+ }
78
+ return {
79
+ ...pluginConfig,
80
+ channels: {
81
+ ...channels,
82
+ feishu: { ...feishuConfig, groups: {} },
83
+ },
84
+ };
85
+ }
86
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Hive CLI Entry
4
+ *
5
+ * Command-line interface for Hive server.
6
+ */
7
+ export declare function main(): Promise<void>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AA0IH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C"}
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Hive CLI Entry
4
+ *
5
+ * Command-line interface for Hive server.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { createPluginCommand } from '../plugin-manager/cli.js';
9
+ const VERSION = '1.0.0';
10
+ const program = new Command()
11
+ .name('hive')
12
+ .description('Hive - Multi-Agent Collaboration Framework')
13
+ .version(VERSION);
14
+ // hive chat
15
+ program
16
+ .command('chat')
17
+ .description('Start interactive chat mode')
18
+ .action(async () => {
19
+ const { createInterface } = await import('readline');
20
+ const rl = createInterface({
21
+ input: process.stdin,
22
+ output: process.stdout,
23
+ });
24
+ console.log('Hive Chat - Type /exit to quit\n');
25
+ const { bootstrap } = await import('../bootstrap.js');
26
+ const { getConfig } = await import('../config.js');
27
+ const cfg = getConfig();
28
+ const ctx = await bootstrap({ config: { ...cfg, plugins: [] } });
29
+ const prompt = () => {
30
+ rl.question('You: ', async (input) => {
31
+ const trimmed = input.trim();
32
+ if (trimmed === '/exit' || trimmed === '/quit') {
33
+ console.log('Goodbye!');
34
+ rl.close();
35
+ process.exit(0);
36
+ }
37
+ if (!trimmed) {
38
+ prompt();
39
+ return;
40
+ }
41
+ try {
42
+ const response = await ctx.agent.chat(trimmed);
43
+ console.log(`\nAgent: ${response}\n`);
44
+ }
45
+ catch (error) {
46
+ console.error('Error:', error instanceof Error ? error.message : 'Unknown error');
47
+ }
48
+ prompt();
49
+ });
50
+ };
51
+ prompt();
52
+ });
53
+ // hive server
54
+ program
55
+ .command('server')
56
+ .description('Start HTTP/WebSocket server')
57
+ .option('-p, --port <port>', 'Server port', undefined)
58
+ .action(async (options) => {
59
+ const { getConfig } = await import('../config.js');
60
+ const cfg = getConfig();
61
+ const serverPort = options.port ? parseInt(options.port, 10) : cfg.port;
62
+ console.log(`Starting Hive server on port ${serverPort}...`);
63
+ const serverConfig = { ...cfg, port: serverPort };
64
+ const { bootstrap } = await import('../bootstrap.js');
65
+ const ctx = await bootstrap({ config: serverConfig });
66
+ const { createServer } = await import('http');
67
+ const { createHttpGateway } = await import('../gateway/http.js');
68
+ const app = createHttpGateway(ctx);
69
+ const server = createServer();
70
+ const { createWebSocketGateway } = await import('../gateway/websocket.js');
71
+ createWebSocketGateway(server, ctx);
72
+ server.on('request', async (req, res) => {
73
+ try {
74
+ const url = `http://${req.headers.host || 'localhost'}${req.url}`;
75
+ const headers = new Headers();
76
+ for (const [key, value] of Object.entries(req.headers)) {
77
+ if (value) {
78
+ headers.set(key, Array.isArray(value) ? value.join(', ') : value);
79
+ }
80
+ }
81
+ let body;
82
+ if (req.method !== 'GET' && req.method !== 'HEAD') {
83
+ const chunks = [];
84
+ for await (const chunk of req) {
85
+ chunks.push(chunk);
86
+ }
87
+ body = Buffer.concat(chunks).toString();
88
+ }
89
+ const request = new Request(url, {
90
+ method: req.method,
91
+ headers,
92
+ body,
93
+ });
94
+ const response = await app.fetch(request);
95
+ res.statusCode = response.status;
96
+ response.headers.forEach((value, key) => {
97
+ res.setHeader(key, value);
98
+ });
99
+ const buffer = await response.arrayBuffer();
100
+ res.end(Buffer.from(buffer));
101
+ }
102
+ catch (err) {
103
+ console.error('[server] Request error:', err);
104
+ res.statusCode = 500;
105
+ res.end('Internal Server Error');
106
+ }
107
+ });
108
+ server.listen(serverPort, () => {
109
+ console.log(`\n✓ Hive server running at http://localhost:${serverPort}`);
110
+ console.log(` - HTTP API: http://localhost:${serverPort}/api`);
111
+ console.log(` - WebSocket: ws://localhost:${serverPort}/ws`);
112
+ console.log(` - Health: http://localhost:${serverPort}/health`);
113
+ console.log();
114
+ });
115
+ });
116
+ // hive plugin
117
+ program.addCommand(createPluginCommand());
118
+ export async function main() {
119
+ program.parse();
120
+ }
121
+ main().catch((error) => {
122
+ console.error('Fatal error:', error);
123
+ process.exit(1);
124
+ });
125
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Hive Server Configuration
3
+ *
4
+ * Loads configuration from hive.config.json with environment variable interpolation.
5
+ * Falls back to .env for backwards compatibility.
6
+ */
7
+ export declare const HIVE_HOME: string;
8
+ /**
9
+ * Raw JSON configuration structure
10
+ */
11
+ export interface HeartbeatConfigJson {
12
+ enabled?: boolean;
13
+ intervalMs?: number;
14
+ model?: string;
15
+ prompt?: string;
16
+ }
17
+ export interface HiveConfigJson {
18
+ server?: {
19
+ port?: number;
20
+ host?: string;
21
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
22
+ };
23
+ auth?: {
24
+ enabled?: boolean;
25
+ apiKey?: string;
26
+ };
27
+ provider?: {
28
+ id: string;
29
+ apiKey?: string;
30
+ model?: string;
31
+ baseUrl?: string;
32
+ };
33
+ heartbeat?: HeartbeatConfigJson;
34
+ plugins?: Record<string, Record<string, unknown>>;
35
+ }
36
+ /**
37
+ * Resolved server configuration
38
+ */
39
+ export interface HeartbeatConfig {
40
+ enabled: boolean;
41
+ intervalMs: number;
42
+ model?: string;
43
+ prompt?: string;
44
+ }
45
+ export interface ServerConfig {
46
+ /** HTTP server port */
47
+ port: number;
48
+ /** Host to bind to */
49
+ host: string;
50
+ /** Log level: debug, info, warn, error */
51
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
52
+ /** Plugin packages to load */
53
+ plugins: string[];
54
+ /** Authentication configuration */
55
+ auth: {
56
+ /** Whether API key authentication is enabled */
57
+ enabled: boolean;
58
+ /** API key for authentication */
59
+ apiKey: string;
60
+ };
61
+ /** LLM provider configuration */
62
+ provider: {
63
+ /** Provider ID (e.g., glm, anthropic, openai) */
64
+ id: string;
65
+ /** API key */
66
+ apiKey: string;
67
+ /** Model to use */
68
+ model?: string;
69
+ /** API base URL */
70
+ baseUrl?: string;
71
+ };
72
+ /** Heartbeat schedule configuration */
73
+ heartbeat: HeartbeatConfig;
74
+ /** Plugin configurations (key = plugin name, value = config to pass) */
75
+ pluginConfigs: Record<string, Record<string, unknown>>;
76
+ }
77
+ /**
78
+ * Load configuration from hive.config.json with fallbacks
79
+ */
80
+ export declare function loadConfig(): ServerConfig;
81
+ /**
82
+ * Get configuration for a specific plugin
83
+ */
84
+ export declare function getPluginConfig(config: ServerConfig, pluginName: string): Record<string, unknown>;
85
+ /**
86
+ * Get configuration (lazy-loaded singleton)
87
+ */
88
+ export declare function getConfig(): ServerConfig;
89
+ /**
90
+ * Reset cached config (for testing)
91
+ */
92
+ export declare function resetConfig(): void;
93
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,SAAS,QAAgB,CAAA;AAYtC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAC/C,CAAA;IACD,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAC7C,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,mCAAmC;IACnC,IAAI,EAAE;QACJ,gDAAgD;QAChD,OAAO,EAAE,OAAO,CAAA;QAChB,iCAAiC;QACjC,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,iCAAiC;IACjC,QAAQ,EAAE;QACR,iDAAiD;QACjD,EAAE,EAAE,MAAM,CAAA;QACV,cAAc;QACd,MAAM,EAAE,MAAM,CAAA;QACd,mBAAmB;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,mBAAmB;QACnB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,uCAAuC;IACvC,SAAS,EAAE,eAAe,CAAA;IAC1B,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACvD;AAuED;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAyCzC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjG;AAKD;;GAEG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAKxC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}