@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.
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/dist/bootstrap.d.ts +36 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +86 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +125 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +93 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +156 -0
- package/dist/config.js.map +1 -0
- package/dist/gateway/auth.d.ts +16 -0
- package/dist/gateway/auth.d.ts.map +1 -0
- package/dist/gateway/auth.js +50 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/http.d.ts +9 -0
- package/dist/gateway/http.d.ts.map +1 -0
- package/dist/gateway/http.js +178 -0
- package/dist/gateway/http.js.map +1 -0
- package/dist/gateway/websocket.d.ts +18 -0
- package/dist/gateway/websocket.d.ts.map +1 -0
- package/dist/gateway/websocket.js +197 -0
- package/dist/gateway/websocket.js.map +1 -0
- package/dist/gateway/ws/admin-handler.d.ts +68 -0
- package/dist/gateway/ws/admin-handler.d.ts.map +1 -0
- package/dist/gateway/ws/admin-handler.js +573 -0
- package/dist/gateway/ws/admin-handler.js.map +1 -0
- package/dist/gateway/ws/data-types.d.ts +130 -0
- package/dist/gateway/ws/data-types.d.ts.map +1 -0
- package/dist/gateway/ws/data-types.js +7 -0
- package/dist/gateway/ws/data-types.js.map +1 -0
- package/dist/gateway/ws/log-buffer.d.ts +29 -0
- package/dist/gateway/ws/log-buffer.d.ts.map +1 -0
- package/dist/gateway/ws/log-buffer.js +58 -0
- package/dist/gateway/ws/log-buffer.js.map +1 -0
- package/dist/gateway/ws/types.d.ts +67 -0
- package/dist/gateway/ws/types.d.ts.map +1 -0
- package/dist/gateway/ws/types.js +68 -0
- package/dist/gateway/ws/types.js.map +1 -0
- package/dist/heartbeat-scheduler.d.ts +43 -0
- package/dist/heartbeat-scheduler.d.ts.map +1 -0
- package/dist/heartbeat-scheduler.js +118 -0
- package/dist/heartbeat-scheduler.js.map +1 -0
- package/dist/main.d.ts +23 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +120 -0
- package/dist/main.js.map +1 -0
- package/dist/plugin-manager/cli.d.ts +6 -0
- package/dist/plugin-manager/cli.d.ts.map +1 -0
- package/dist/plugin-manager/cli.js +115 -0
- package/dist/plugin-manager/cli.js.map +1 -0
- package/dist/plugin-manager/constants.d.ts +24 -0
- package/dist/plugin-manager/constants.d.ts.map +1 -0
- package/dist/plugin-manager/constants.js +58 -0
- package/dist/plugin-manager/constants.js.map +1 -0
- package/dist/plugin-manager/index.d.ts +11 -0
- package/dist/plugin-manager/index.d.ts.map +1 -0
- package/dist/plugin-manager/index.js +10 -0
- package/dist/plugin-manager/index.js.map +1 -0
- package/dist/plugin-manager/installer.d.ts +19 -0
- package/dist/plugin-manager/installer.d.ts.map +1 -0
- package/dist/plugin-manager/installer.js +256 -0
- package/dist/plugin-manager/installer.js.map +1 -0
- package/dist/plugin-manager/manager.d.ts +39 -0
- package/dist/plugin-manager/manager.d.ts.map +1 -0
- package/dist/plugin-manager/manager.js +171 -0
- package/dist/plugin-manager/manager.js.map +1 -0
- package/dist/plugin-manager/registry.d.ts +31 -0
- package/dist/plugin-manager/registry.d.ts.map +1 -0
- package/dist/plugin-manager/registry.js +63 -0
- package/dist/plugin-manager/registry.js.map +1 -0
- package/dist/plugin-manager/searcher.d.ts +18 -0
- package/dist/plugin-manager/searcher.d.ts.map +1 -0
- package/dist/plugin-manager/searcher.js +50 -0
- package/dist/plugin-manager/searcher.js.map +1 -0
- package/dist/plugin-manager/types.d.ts +71 -0
- package/dist/plugin-manager/types.d.ts.map +1 -0
- package/dist/plugin-manager/types.js +5 -0
- package/dist/plugin-manager/types.js.map +1 -0
- package/dist/plugins.d.ts +18 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +198 -0
- package/dist/plugins.js.map +1 -0
- 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 @@
|
|
|
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":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAEpD,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAE/C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;IACvB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;YAE5B,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBACvB,EAAE,CAAC,KAAK,EAAE,CAAA;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,EAAE,CAAA;gBACR,OAAM;YACR,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,IAAI,CAAC,CAAA;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;YACnF,CAAC;YAED,MAAM,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,EAAE,CAAA;AACV,CAAC,CAAC,CAAA;AAEJ,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;IAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;IAEvE,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,KAAK,CAAC,CAAA;IAE5D,MAAM,YAAY,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAEjD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IAErD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAEhE,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAElC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAC7B,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC1E,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEnC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,GAAG,GAAG,CAAC,GAAG,EAAE,CAAA;YACjE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;YAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC;YAED,IAAI,IAAwB,CAAA;YAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;gBACD,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;YACzC,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,IAAI;aACL,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAEzC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA;YAChC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC3B,CAAC,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC3C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;YAC7C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QAClC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAA;QACxE,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,MAAM,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,KAAK,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,SAAS,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,cAAc;AACd,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,OAAO,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|