kitty-hive 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,462 @@
1
+ #!/usr/bin/env node
2
+ import { startServer, setLogLevel } from './server.js';
3
+ import { initDB, addPeer, listPeers, removePeer, updatePeerExposed, getPeerByName } from './db.js';
4
+ import { generateToken } from './utils.js';
5
+ import { writeFileSync, existsSync, readFileSync, unlinkSync, mkdirSync } from 'node:fs';
6
+ import { join, dirname } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { homedir } from 'node:os';
9
+ import { createInterface } from 'node:readline';
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ const args = process.argv.slice(2);
13
+ const command = args[0];
14
+ function parseFlags(startIdx) {
15
+ let port = 4100;
16
+ let dbPath;
17
+ for (let i = startIdx; i < args.length; i++) {
18
+ if ((args[i] === '--port' || args[i] === '-p') && args[i + 1]) {
19
+ port = parseInt(args[i + 1], 10);
20
+ i++;
21
+ }
22
+ else if (args[i] === '--db' && args[i + 1]) {
23
+ dbPath = args[i + 1];
24
+ i++;
25
+ }
26
+ }
27
+ return { port, dbPath };
28
+ }
29
+ async function ask(question, defaultValue) {
30
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
31
+ const suffix = defaultValue ? ` (${defaultValue})` : '';
32
+ return new Promise(resolve => {
33
+ rl.question(`${question}${suffix}: `, answer => {
34
+ rl.close();
35
+ resolve(answer.trim() || defaultValue || '');
36
+ });
37
+ });
38
+ }
39
+ // --- Commands ---
40
+ async function cmdServe() {
41
+ const { port, dbPath } = parseFlags(1);
42
+ if (args.includes('--verbose') || args.includes('-v'))
43
+ setLogLevel('debug');
44
+ if (args.includes('--quiet') || args.includes('-q'))
45
+ setLogLevel('warn');
46
+ await startServer(port, dbPath);
47
+ }
48
+ async function cmdInit() {
49
+ console.log('🐝 kitty-hive init\n');
50
+ // Parse flags first
51
+ let explicitPort = false;
52
+ let explicitHttp = false;
53
+ let agentName = '';
54
+ let port = 4123;
55
+ for (let i = 1; i < args.length; i++) {
56
+ if (args[i] === '--http') {
57
+ explicitHttp = true;
58
+ }
59
+ else if ((args[i] === '--port' || args[i] === '-p') && args[i + 1]) {
60
+ port = parseInt(args[i + 1], 10);
61
+ explicitPort = true;
62
+ i++;
63
+ }
64
+ else if (args[i] === '--db') {
65
+ i++;
66
+ }
67
+ else if (!args[i].startsWith('-')) {
68
+ agentName = args[i];
69
+ }
70
+ }
71
+ // Interactive: ask what wasn't provided
72
+ if (!agentName) {
73
+ agentName = await ask('Agent name', getDefaultAgentName());
74
+ }
75
+ if (!explicitPort) {
76
+ const p = await ask('Hive server port', '4123');
77
+ port = parseInt(p, 10) || 4123;
78
+ }
79
+ let useChannel = !explicitHttp;
80
+ if (!explicitHttp) {
81
+ const mode = await ask('Mode: (c)hannel push or (h)ttp pull?', 'c');
82
+ useChannel = mode.toLowerCase() !== 'h';
83
+ }
84
+ const channelPath = join(__dirname, '..', 'channel.ts');
85
+ const mcpJsonPath = join(process.cwd(), '.mcp.json');
86
+ let existing = {};
87
+ if (existsSync(mcpJsonPath)) {
88
+ try {
89
+ existing = JSON.parse(readFileSync(mcpJsonPath, 'utf8'));
90
+ }
91
+ catch { /* ignore */ }
92
+ }
93
+ if (!existing.mcpServers)
94
+ existing.mcpServers = {};
95
+ if (useChannel) {
96
+ existing.mcpServers['hive-channel'] = {
97
+ command: 'npx',
98
+ args: ['tsx', channelPath],
99
+ env: {
100
+ HIVE_URL: `http://localhost:${port}/mcp`,
101
+ HIVE_AGENT_NAME: agentName,
102
+ },
103
+ };
104
+ delete existing.mcpServers['hive'];
105
+ }
106
+ else {
107
+ existing.mcpServers['hive'] = {
108
+ url: `http://localhost:${port}/mcp`,
109
+ };
110
+ delete existing.mcpServers['hive-channel'];
111
+ }
112
+ writeFileSync(mcpJsonPath, JSON.stringify(existing, null, 2) + '\n');
113
+ console.log(`\n🐝 kitty-hive configured`);
114
+ console.log(` Agent: ${agentName}`);
115
+ console.log(` Server: http://localhost:${port}/mcp`);
116
+ console.log(` Mode: ${useChannel ? 'channel (push)' : 'HTTP (pull)'}`);
117
+ if (useChannel) {
118
+ console.log(`\n Run: claude --dangerously-load-development-channels server:hive-channel`);
119
+ }
120
+ }
121
+ async function cmdStatus() {
122
+ const { port, dbPath } = parseFlags(1);
123
+ const url = `http://localhost:${port}/mcp`;
124
+ // Check server
125
+ try {
126
+ const res = await fetch(url, { method: 'GET' });
127
+ console.log(`🐝 Server: http://localhost:${port}/mcp (online)`);
128
+ }
129
+ catch {
130
+ console.log(`❌ Server: http://localhost:${port}/mcp (offline)`);
131
+ process.exit(1);
132
+ }
133
+ // Check DB
134
+ try {
135
+ const db = initDB(dbPath);
136
+ const agents = db.prepare('SELECT id, display_name, status, last_seen FROM agents ORDER BY last_seen DESC').all();
137
+ const rooms = db.prepare("SELECT id, name, kind FROM rooms WHERE closed_at IS NULL").all();
138
+ const tasks = db.prepare("SELECT count(*) as cnt FROM tasks WHERE status NOT IN ('completed','failed','canceled')").get();
139
+ console.log(`\n📊 Database: ${dbPath || '~/.kitty-hive/hive.db'}`);
140
+ console.log(` Rooms: ${rooms.length} Active tasks: ${tasks.cnt}`);
141
+ console.log(`\n👥 Agents (${agents.length}):`);
142
+ for (const a of agents) {
143
+ // Find rooms this agent is in
144
+ const memberRooms = db.prepare(`
145
+ SELECT DISTINCT r.name FROM rooms r
146
+ JOIN room_events e ON e.room_id = r.id AND e.type = 'join' AND e.actor_agent_id = ?
147
+ WHERE r.closed_at IS NULL AND NOT EXISTS (
148
+ SELECT 1 FROM room_events e2 WHERE e2.room_id = r.id AND e2.type = 'leave' AND e2.actor_agent_id = ? AND e2.seq > e.seq
149
+ )
150
+ `).all(a.id, a.id);
151
+ const roomNames = memberRooms.map((r) => r.name).filter(Boolean).join(', ');
152
+ console.log(` ${a.display_name} (${a.status}) — ${roomNames || 'no rooms'}`);
153
+ }
154
+ if (rooms.length > 0) {
155
+ console.log(`\n🏠 Rooms:`);
156
+ for (const r of rooms) {
157
+ const memberCount = db.prepare(`
158
+ SELECT COUNT(DISTINCT e.actor_agent_id) as cnt FROM room_events e
159
+ WHERE e.room_id = ? AND e.type = 'join'
160
+ `).get(r.id);
161
+ console.log(` ${r.name || r.id} (${r.kind}) — ${memberCount.cnt} members`);
162
+ }
163
+ }
164
+ }
165
+ catch (err) {
166
+ console.log(`\n⚠️ Cannot read database`);
167
+ }
168
+ }
169
+ async function cmdDbClear() {
170
+ const { dbPath } = parseFlags(1);
171
+ const resolvedPath = dbPath || join(homedir(), '.kitty-hive', 'hive.db');
172
+ if (!existsSync(resolvedPath)) {
173
+ console.log('Database does not exist.');
174
+ process.exit(0);
175
+ }
176
+ const confirm = await ask(`Delete ${resolvedPath}? (y/n)`, 'n');
177
+ if (confirm.toLowerCase() !== 'y') {
178
+ console.log('Cancelled.');
179
+ process.exit(0);
180
+ }
181
+ for (const suffix of ['', '-wal', '-shm']) {
182
+ const p = resolvedPath + suffix;
183
+ if (existsSync(p))
184
+ unlinkSync(p);
185
+ }
186
+ console.log('✅ Database cleared.');
187
+ }
188
+ async function cmdAgentRemove() {
189
+ const { dbPath } = parseFlags(1);
190
+ const name = args[2];
191
+ if (!name) {
192
+ console.log('Usage: kitty-hive agent remove <name>');
193
+ process.exit(1);
194
+ }
195
+ const db = initDB(dbPath);
196
+ const agent = db.prepare('SELECT id, display_name FROM agents WHERE display_name = ?').get(name);
197
+ if (!agent) {
198
+ console.log(`Agent "${name}" not found.`);
199
+ process.exit(1);
200
+ }
201
+ const confirm = await ask(`Remove agent "${name}" and all related data? (y/n)`, 'n');
202
+ if (confirm.toLowerCase() !== 'y') {
203
+ console.log('Cancelled.');
204
+ process.exit(0);
205
+ }
206
+ db.prepare('DELETE FROM read_cursors WHERE agent_id = ?').run(agent.id);
207
+ db.prepare('DELETE FROM task_events WHERE actor_agent_id = ?').run(agent.id);
208
+ db.prepare('DELETE FROM room_events WHERE actor_agent_id = ?').run(agent.id);
209
+ db.prepare('UPDATE tasks SET assignee_agent_id = NULL WHERE assignee_agent_id = ?').run(agent.id);
210
+ db.prepare('DELETE FROM agents WHERE id = ?').run(agent.id);
211
+ console.log(`✅ Removed agent "${name}".`);
212
+ }
213
+ async function cmdAgentList() {
214
+ const { dbPath } = parseFlags(1);
215
+ const db = initDB(dbPath);
216
+ const agents = db.prepare('SELECT display_name, roles, status, last_seen FROM agents ORDER BY last_seen DESC').all();
217
+ if (agents.length === 0) {
218
+ console.log('No agents registered.');
219
+ return;
220
+ }
221
+ for (const a of agents) {
222
+ console.log(` ${a.display_name} (${a.status}) roles=${a.roles || 'none'} last_seen=${a.last_seen}`);
223
+ }
224
+ }
225
+ // --- Node config ---
226
+ function getConfigPath() {
227
+ return join(homedir(), '.kitty-hive', 'config.json');
228
+ }
229
+ function getNodeConfig() {
230
+ const p = getConfigPath();
231
+ if (!existsSync(p))
232
+ return {};
233
+ try {
234
+ return JSON.parse(readFileSync(p, 'utf8'));
235
+ }
236
+ catch {
237
+ return {};
238
+ }
239
+ }
240
+ function setNodeConfig(config) {
241
+ const p = getConfigPath();
242
+ mkdirSync(join(p, '..'), { recursive: true });
243
+ const existing = getNodeConfig();
244
+ writeFileSync(p, JSON.stringify({ ...existing, ...config }, null, 2) + '\n');
245
+ }
246
+ function getNodeName() {
247
+ return getNodeConfig().name || require('os').hostname().split('.')[0];
248
+ }
249
+ // --- Peer commands ---
250
+ async function cmdPeerAdd() {
251
+ const { dbPath } = parseFlags(1);
252
+ // kitty-hive peer add <name> <url> [--expose a,b] [--secret s]
253
+ let peerName = '';
254
+ let peerUrl = '';
255
+ let exposed = '';
256
+ let secret = '';
257
+ let positional = 0;
258
+ for (let i = 2; i < args.length; i++) {
259
+ if (args[i] === '--expose' && args[i + 1]) {
260
+ exposed = args[i + 1];
261
+ i++;
262
+ }
263
+ else if (args[i] === '--secret' && args[i + 1]) {
264
+ secret = args[i + 1];
265
+ i++;
266
+ }
267
+ else if (args[i] === '--port' || args[i] === '-p' || args[i] === '--db') {
268
+ i++;
269
+ }
270
+ else if (!args[i].startsWith('-')) {
271
+ if (positional === 0)
272
+ peerName = args[i];
273
+ else if (positional === 1)
274
+ peerUrl = args[i];
275
+ positional++;
276
+ }
277
+ }
278
+ if (!peerName || !peerUrl) {
279
+ console.log('Usage: kitty-hive peer add <name> <url> [--expose agent1,agent2] [--secret s]');
280
+ process.exit(1);
281
+ }
282
+ initDB(dbPath);
283
+ if (getPeerByName(peerName)) {
284
+ console.log(`Peer "${peerName}" already exists. Remove it first.`);
285
+ process.exit(1);
286
+ }
287
+ if (!secret) {
288
+ secret = 'sk_' + generateToken().slice(0, 32);
289
+ }
290
+ const peer = addPeer(peerName, peerUrl, secret, exposed);
291
+ console.log(`🤝 Peer added: ${peerName}`);
292
+ console.log(` URL: ${peerUrl}`);
293
+ console.log(` Secret: ${secret}`);
294
+ console.log(` Exposed agents: ${exposed || 'none (use --expose to add)'}`);
295
+ console.log(`\n Give this secret to the peer so they can connect back.`);
296
+ }
297
+ async function cmdPeerList() {
298
+ const { dbPath } = parseFlags(1);
299
+ initDB(dbPath);
300
+ const peers = listPeers();
301
+ if (peers.length === 0) {
302
+ console.log('No peers configured.');
303
+ return;
304
+ }
305
+ for (const p of peers) {
306
+ console.log(` ${p.name} (${p.status}) — ${p.url}`);
307
+ console.log(` exposed: ${p.exposed || 'none'}`);
308
+ console.log(` last seen: ${p.last_seen || 'never'}`);
309
+ }
310
+ }
311
+ async function cmdPeerRemove() {
312
+ const { dbPath } = parseFlags(1);
313
+ const name = args[2];
314
+ if (!name) {
315
+ console.log('Usage: kitty-hive peer remove <name>');
316
+ process.exit(1);
317
+ }
318
+ initDB(dbPath);
319
+ if (removePeer(name)) {
320
+ console.log(`✅ Peer "${name}" removed.`);
321
+ }
322
+ else {
323
+ console.log(`Peer "${name}" not found.`);
324
+ }
325
+ }
326
+ async function cmdPeerExpose() {
327
+ const { dbPath } = parseFlags(1);
328
+ const peerName = args[2];
329
+ if (!peerName) {
330
+ console.log('Usage: kitty-hive peer expose <peer> --add/--remove <agent>');
331
+ process.exit(1);
332
+ }
333
+ initDB(dbPath);
334
+ const peer = getPeerByName(peerName);
335
+ if (!peer) {
336
+ console.log(`Peer "${peerName}" not found.`);
337
+ process.exit(1);
338
+ }
339
+ const current = peer.exposed ? peer.exposed.split(',').map(s => s.trim()).filter(Boolean) : [];
340
+ for (let i = 3; i < args.length; i++) {
341
+ if (args[i] === '--add' && args[i + 1]) {
342
+ const agents = args[i + 1].split(',').map(s => s.trim());
343
+ for (const a of agents)
344
+ if (!current.includes(a))
345
+ current.push(a);
346
+ i++;
347
+ }
348
+ else if (args[i] === '--remove' && args[i + 1]) {
349
+ const agents = args[i + 1].split(',').map(s => s.trim());
350
+ for (const a of agents) {
351
+ const idx = current.indexOf(a);
352
+ if (idx >= 0)
353
+ current.splice(idx, 1);
354
+ }
355
+ i++;
356
+ }
357
+ }
358
+ updatePeerExposed(peerName, current.join(','));
359
+ console.log(`✅ Peer "${peerName}" exposed agents: ${current.join(', ') || 'none'}`);
360
+ }
361
+ async function cmdConfigSet() {
362
+ // kitty-hive config set name marvin
363
+ const key = args[2];
364
+ const value = args[3];
365
+ if (!key || !value) {
366
+ console.log('Usage: kitty-hive config set <key> <value>');
367
+ console.log(' e.g. kitty-hive config set name marvin');
368
+ process.exit(1);
369
+ }
370
+ setNodeConfig({ [key]: value });
371
+ console.log(`✅ ${key} = ${value}`);
372
+ }
373
+ function getDefaultAgentName() {
374
+ // Try package.json name
375
+ const pkgPath = join(process.cwd(), 'package.json');
376
+ if (existsSync(pkgPath)) {
377
+ try {
378
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
379
+ if (pkg.name)
380
+ return pkg.name;
381
+ }
382
+ catch { /* ignore */ }
383
+ }
384
+ // Fallback to directory name
385
+ return process.cwd().split('/').pop() || 'agent';
386
+ }
387
+ function showHelp() {
388
+ console.log(`🐝 kitty-hive — multi-agent collaboration server
389
+
390
+ Usage:
391
+ kitty-hive serve [--port 4100] [--db path] [-v|-q] Start the server
392
+ kitty-hive init [name] [--port 4123] [--http] Configure for this project
393
+ kitty-hive status [--port 4100] Server & agent status
394
+ kitty-hive agent list List agents
395
+ kitty-hive agent remove <name> Remove an agent
396
+ kitty-hive peer add <name> <url> [--expose a,b] [--secret s] Add a peer
397
+ kitty-hive peer list List peers
398
+ kitty-hive peer remove <name> Remove a peer
399
+ kitty-hive peer expose <name> --add/--remove <agent> Manage exposed agents
400
+ kitty-hive config set <key> <value> Set config (e.g. name)
401
+ kitty-hive db clear [--db path] Clear the database`);
402
+ }
403
+ // --- Main ---
404
+ switch (command) {
405
+ case 'serve':
406
+ cmdServe().catch(err => { console.error('Failed:', err); process.exit(1); });
407
+ break;
408
+ case 'init':
409
+ cmdInit().catch(err => { console.error('Failed:', err); process.exit(1); });
410
+ break;
411
+ case 'status':
412
+ cmdStatus().catch(err => { console.error('Failed:', err); process.exit(1); });
413
+ break;
414
+ case 'agent':
415
+ if (args[1] === 'remove') {
416
+ cmdAgentRemove().catch(err => { console.error('Failed:', err); process.exit(1); });
417
+ }
418
+ else if (args[1] === 'list') {
419
+ cmdAgentList().catch(err => { console.error('Failed:', err); process.exit(1); });
420
+ }
421
+ else {
422
+ showHelp();
423
+ }
424
+ break;
425
+ case 'peer':
426
+ if (args[1] === 'add') {
427
+ cmdPeerAdd().catch(err => { console.error('Failed:', err); process.exit(1); });
428
+ }
429
+ else if (args[1] === 'list') {
430
+ cmdPeerList().catch(err => { console.error('Failed:', err); process.exit(1); });
431
+ }
432
+ else if (args[1] === 'remove') {
433
+ cmdPeerRemove().catch(err => { console.error('Failed:', err); process.exit(1); });
434
+ }
435
+ else if (args[1] === 'expose') {
436
+ cmdPeerExpose().catch(err => { console.error('Failed:', err); process.exit(1); });
437
+ }
438
+ else {
439
+ showHelp();
440
+ }
441
+ break;
442
+ case 'config':
443
+ if (args[1] === 'set') {
444
+ cmdConfigSet().catch(err => { console.error('Failed:', err); process.exit(1); });
445
+ }
446
+ else {
447
+ showHelp();
448
+ }
449
+ break;
450
+ case 'db':
451
+ if (args[1] === 'clear') {
452
+ cmdDbClear().catch(err => { console.error('Failed:', err); process.exit(1); });
453
+ }
454
+ else {
455
+ showHelp();
456
+ }
457
+ break;
458
+ default:
459
+ showHelp();
460
+ break;
461
+ }
462
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,MAA0B,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,YAAqB;IACxD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE;YAC7C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mBAAmB;AAEnB,KAAK,UAAU,QAAQ;IACrB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,oBAAoB;IACpB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,YAAY,GAAG,IAAI,CAAC;QAAC,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAAC,YAAY,GAAG,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;aACI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC7D,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QACpE,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,QAAQ,GAAQ,EAAE,CAAC;IACvB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,UAAU;QAAE,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;IAEnD,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG;YACpC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;YAC1B,GAAG,EAAE;gBACH,QAAQ,EAAE,oBAAoB,IAAI,MAAM;gBACxC,eAAe,EAAE,SAAS;aAC3B;SACF,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG;YAC5B,GAAG,EAAE,oBAAoB,IAAI,MAAM;SACpC,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;IAEzE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,oBAAoB,IAAI,MAAM,CAAC;IAE3C,eAAe;IACf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,eAAe,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,gBAAgB,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,WAAW;IACX,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,gFAAgF,CAAC,CAAC,GAAG,EAAW,CAAC;QAC3H,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,EAAW,CAAC;QACpG,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,yFAAyF,CAAC,CAAC,GAAG,EAAqB,CAAC;QAE7I,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,IAAI,uBAAuB,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,mBAAmB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,8BAA8B;YAC9B,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;OAM9B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAU,CAAC;YAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,MAAM,OAAO,SAAS,IAAI,UAAU,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;SAG9B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAoB,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,OAAO,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAEzE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,YAAY,SAAS,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC;QAChC,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAQ,CAAC;IACxG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,iBAAiB,IAAI,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,GAAG,EAAW,CAAC;IAC9H,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,KAAK,IAAI,MAAM,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,sBAAsB;AAEtB,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AAC1E,CAAC;AAED,SAAS,aAAa,CAAC,MAA2B;IAChD,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,aAAa,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,wBAAwB;AAExB,KAAK,UAAU,UAAU;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,+DAA+D;IAC/D,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aACrE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aACzE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aAC5E,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,UAAU,KAAK,CAAC;gBAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBACpC,IAAI,UAAU,KAAK,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,CAAC;IAEf,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,oCAAoC,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,KAAK,GAAG,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,IAAI,4BAA4B,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,cAAc,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,GAAG,IAAI,CAAC;oBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,oCAAoC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB;IAC1B,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,IAAI;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,6BAA6B;IAC7B,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;6EAa+D,CAAC,CAAC;AAC/E,CAAC;AAED,eAAe;AAEf,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO;QACV,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM;IACR,KAAK,MAAM;QACT,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM;IACR,KAAK,QAAQ;QACX,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM;IACR,KAAK,OAAO;QACV,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzB,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC9B,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM;IACR,KAAK,MAAM;QACT,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACtB,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC9B,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM;IACR,KAAK,QAAQ;QACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACtB,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM;IACR,KAAK,IAAI;QACP,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACxB,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM;IACR;QACE,QAAQ,EAAE,CAAC;QACX,MAAM;AACV,CAAC"}
@@ -0,0 +1,65 @@
1
+ export interface Agent {
2
+ id: string;
3
+ display_name: string;
4
+ token: string;
5
+ tool: string;
6
+ roles: string;
7
+ expertise: string;
8
+ status: 'active' | 'idle' | 'busy' | 'offline';
9
+ created_at: string;
10
+ last_seen: string;
11
+ }
12
+ export type RoomKind = 'lobby' | 'dm' | 'team';
13
+ export interface Room {
14
+ id: string;
15
+ name: string | null;
16
+ kind: RoomKind;
17
+ host_agent_id: string | null;
18
+ created_at: string;
19
+ closed_at: string | null;
20
+ }
21
+ export declare const ROOM_EVENT_TYPES: readonly ["join", "leave", "message"];
22
+ export type RoomEventType = typeof ROOM_EVENT_TYPES[number];
23
+ export interface RoomEvent {
24
+ id: number;
25
+ room_id: string;
26
+ seq: number;
27
+ type: RoomEventType;
28
+ actor_agent_id: string | null;
29
+ payload_json: string;
30
+ ts: string;
31
+ }
32
+ export type TaskStatus = 'created' | 'proposing' | 'approved' | 'in_progress' | 'completed' | 'failed' | 'canceled';
33
+ export interface Task {
34
+ id: string;
35
+ title: string;
36
+ creator_agent_id: string;
37
+ assignee_agent_id: string | null;
38
+ status: TaskStatus;
39
+ workflow_json: string | null;
40
+ current_step: number;
41
+ source_room_id: string | null;
42
+ input_json: string;
43
+ created_at: string;
44
+ completed_at: string | null;
45
+ }
46
+ export declare const TASK_EVENT_TYPES: readonly ["task-start", "task-claim", "task-update", "task-propose", "task-approve", "task-reject", "step-start", "step-complete", "task-complete", "task-fail", "task-cancel"];
47
+ export type TaskEventType = typeof TASK_EVENT_TYPES[number];
48
+ export interface TaskEvent {
49
+ id: number;
50
+ task_id: string;
51
+ seq: number;
52
+ type: TaskEventType;
53
+ actor_agent_id: string | null;
54
+ payload_json: string;
55
+ ts: string;
56
+ }
57
+ export interface WorkflowStep {
58
+ step: number;
59
+ title: string;
60
+ assignees: string[];
61
+ action: string;
62
+ completion: 'all' | 'any';
63
+ on_reject?: 'revise' | `back:${number}`;
64
+ completed_by: string[];
65
+ }
package/dist/models.js ADDED
@@ -0,0 +1,10 @@
1
+ // Room events: only communication
2
+ export const ROOM_EVENT_TYPES = ['join', 'leave', 'message'];
3
+ // Task events
4
+ export const TASK_EVENT_TYPES = [
5
+ 'task-start', 'task-claim', 'task-update',
6
+ 'task-propose', 'task-approve', 'task-reject',
7
+ 'step-start', 'step-complete',
8
+ 'task-complete', 'task-fail', 'task-cancel',
9
+ ];
10
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAuBA,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAqCtE,cAAc;AACd,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE,YAAY,EAAE,aAAa;IACzC,cAAc,EAAE,cAAc,EAAE,aAAa;IAC7C,YAAY,EAAE,eAAe;IAC7B,eAAe,EAAE,WAAW,EAAE,aAAa;CACnC,CAAC"}
@@ -0,0 +1,4 @@
1
+ type LogLevel = 'error' | 'warn' | 'info' | 'debug';
2
+ export declare function setLogLevel(level: LogLevel): void;
3
+ export declare function startServer(port: number, dbPath?: string): Promise<void>;
4
+ export {};