@honeybee-ai/incubator 1.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/README.md +586 -0
- package/dashboard/dist/assets/index-DFb8p7xI.js +9 -0
- package/dashboard/dist/assets/index-RKiEoHEo.css +1 -0
- package/dashboard/dist/index.html +13 -0
- package/dist/agent/acp/claim-manager.d.ts +24 -0
- package/dist/agent/acp/claim-manager.js +64 -0
- package/dist/agent/acp/claim-manager.js.map +1 -0
- package/dist/agent/acp/direct-runtime.d.ts +90 -0
- package/dist/agent/acp/direct-runtime.js +364 -0
- package/dist/agent/acp/direct-runtime.js.map +1 -0
- package/dist/agent/acp/event-client.d.ts +20 -0
- package/dist/agent/acp/event-client.js +60 -0
- package/dist/agent/acp/event-client.js.map +1 -0
- package/dist/agent/acp/event-matcher.d.ts +13 -0
- package/dist/agent/acp/event-matcher.js +31 -0
- package/dist/agent/acp/event-matcher.js.map +1 -0
- package/dist/agent/acp/progress.d.ts +23 -0
- package/dist/agent/acp/progress.js +54 -0
- package/dist/agent/acp/progress.js.map +1 -0
- package/dist/agent/acp/runtime.d.ts +156 -0
- package/dist/agent/acp/runtime.js +337 -0
- package/dist/agent/acp/runtime.js.map +1 -0
- package/dist/agent/acp/ws-event-client.d.ts +64 -0
- package/dist/agent/acp/ws-event-client.js +263 -0
- package/dist/agent/acp/ws-event-client.js.map +1 -0
- package/dist/agent/agent.d.ts +60 -0
- package/dist/agent/agent.js +121 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/cli.d.ts +2 -0
- package/dist/agent/cli.js +311 -0
- package/dist/agent/cli.js.map +1 -0
- package/dist/agent/mcp-client.d.ts +37 -0
- package/dist/agent/mcp-client.js +92 -0
- package/dist/agent/mcp-client.js.map +1 -0
- package/dist/agent/mock-runner.d.ts +14 -0
- package/dist/agent/mock-runner.js +159 -0
- package/dist/agent/mock-runner.js.map +1 -0
- package/dist/agent/native-client.d.ts +18 -0
- package/dist/agent/native-client.js +42 -0
- package/dist/agent/native-client.js.map +1 -0
- package/dist/agent/prompt.d.ts +45 -0
- package/dist/agent/prompt.js +115 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/agent/providers.d.ts +25 -0
- package/dist/agent/providers.js +696 -0
- package/dist/agent/providers.js.map +1 -0
- package/dist/agent/runner.d.ts +15 -0
- package/dist/agent/runner.js +625 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/agent/tool-client.d.ts +12 -0
- package/dist/agent/tool-client.js +2 -0
- package/dist/agent/tool-client.js.map +1 -0
- package/dist/agent/types.d.ts +116 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent-pool.d.ts +44 -0
- package/dist/agent-pool.js +228 -0
- package/dist/agent-pool.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +7 -0
- package/dist/bin.js.map +1 -0
- package/dist/bus.d.ts +24 -0
- package/dist/bus.js +79 -0
- package/dist/bus.js.map +1 -0
- package/dist/dances.d.ts +73 -0
- package/dist/dances.js +122 -0
- package/dist/dances.js.map +1 -0
- package/dist/guard.d.ts +52 -0
- package/dist/guard.js +210 -0
- package/dist/guard.js.map +1 -0
- package/dist/heartbeat.d.ts +41 -0
- package/dist/heartbeat.js +104 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/honeycomb.d.ts +63 -0
- package/dist/honeycomb.js +222 -0
- package/dist/honeycomb.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +601 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/config.d.ts +15 -0
- package/dist/integrations/config.js +62 -0
- package/dist/integrations/config.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/loader.d.ts +8 -0
- package/dist/integrations/loader.js +27 -0
- package/dist/integrations/loader.js.map +1 -0
- package/dist/integrations/manager.d.ts +29 -0
- package/dist/integrations/manager.js +108 -0
- package/dist/integrations/manager.js.map +1 -0
- package/dist/log.d.ts +25 -0
- package/dist/log.js +67 -0
- package/dist/log.js.map +1 -0
- package/dist/namespaces.d.ts +28 -0
- package/dist/namespaces.js +100 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/orchestrator.d.ts +119 -0
- package/dist/orchestrator.js +463 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/persistence.d.ts +7 -0
- package/dist/persistence.js +62 -0
- package/dist/persistence.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +12 -0
- package/dist/plugins/loader.js +122 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +76 -0
- package/dist/plugins/manager.js +238 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/propolis/guard.d.ts +23 -0
- package/dist/propolis/guard.js +49 -0
- package/dist/propolis/guard.js.map +1 -0
- package/dist/propolis/tools/types.d.ts +9 -0
- package/dist/propolis/tools/types.js +9 -0
- package/dist/propolis/tools/types.js.map +1 -0
- package/dist/rest.d.ts +4 -0
- package/dist/rest.js +962 -0
- package/dist/rest.js.map +1 -0
- package/dist/run-watcher.d.ts +20 -0
- package/dist/run-watcher.js +74 -0
- package/dist/run-watcher.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +412 -0
- package/dist/server.js.map +1 -0
- package/dist/stores/backend.d.ts +15 -0
- package/dist/stores/backend.js +28 -0
- package/dist/stores/backend.js.map +1 -0
- package/dist/stores/claims.d.ts +14 -0
- package/dist/stores/claims.js +77 -0
- package/dist/stores/claims.js.map +1 -0
- package/dist/stores/conflicts.d.ts +10 -0
- package/dist/stores/conflicts.js +39 -0
- package/dist/stores/conflicts.js.map +1 -0
- package/dist/stores/control.d.ts +37 -0
- package/dist/stores/control.js +105 -0
- package/dist/stores/control.js.map +1 -0
- package/dist/stores/discoveries.d.ts +11 -0
- package/dist/stores/discoveries.js +45 -0
- package/dist/stores/discoveries.js.map +1 -0
- package/dist/stores/events.d.ts +14 -0
- package/dist/stores/events.js +42 -0
- package/dist/stores/events.js.map +1 -0
- package/dist/stores/help.d.ts +11 -0
- package/dist/stores/help.js +46 -0
- package/dist/stores/help.js.map +1 -0
- package/dist/stores/interfaces.d.ts +125 -0
- package/dist/stores/interfaces.js +2 -0
- package/dist/stores/interfaces.js.map +1 -0
- package/dist/stores/messages.d.ts +8 -0
- package/dist/stores/messages.js +29 -0
- package/dist/stores/messages.js.map +1 -0
- package/dist/stores/progress.d.ts +8 -0
- package/dist/stores/progress.js +21 -0
- package/dist/stores/progress.js.map +1 -0
- package/dist/stores/proposals.d.ts +11 -0
- package/dist/stores/proposals.js +46 -0
- package/dist/stores/proposals.js.map +1 -0
- package/dist/stores/redis/claims.d.ts +16 -0
- package/dist/stores/redis/claims.js +126 -0
- package/dist/stores/redis/claims.js.map +1 -0
- package/dist/stores/redis/db.d.ts +39 -0
- package/dist/stores/redis/db.js +34 -0
- package/dist/stores/redis/db.js.map +1 -0
- package/dist/stores/redis/discoveries.d.ts +13 -0
- package/dist/stores/redis/discoveries.js +54 -0
- package/dist/stores/redis/discoveries.js.map +1 -0
- package/dist/stores/redis/events.d.ts +17 -0
- package/dist/stores/redis/events.js +57 -0
- package/dist/stores/redis/events.js.map +1 -0
- package/dist/stores/redis/index.d.ts +3 -0
- package/dist/stores/redis/index.js +31 -0
- package/dist/stores/redis/index.js.map +1 -0
- package/dist/stores/redis/state.d.ts +14 -0
- package/dist/stores/redis/state.js +83 -0
- package/dist/stores/redis/state.js.map +1 -0
- package/dist/stores/reinforcements.d.ts +11 -0
- package/dist/stores/reinforcements.js +42 -0
- package/dist/stores/reinforcements.js.map +1 -0
- package/dist/stores/roles.d.ts +9 -0
- package/dist/stores/roles.js +22 -0
- package/dist/stores/roles.js.map +1 -0
- package/dist/stores/runs.d.ts +15 -0
- package/dist/stores/runs.js +50 -0
- package/dist/stores/runs.js.map +1 -0
- package/dist/stores/sqlite/claims.d.ts +17 -0
- package/dist/stores/sqlite/claims.js +121 -0
- package/dist/stores/sqlite/claims.js.map +1 -0
- package/dist/stores/sqlite/db.d.ts +16 -0
- package/dist/stores/sqlite/db.js +77 -0
- package/dist/stores/sqlite/db.js.map +1 -0
- package/dist/stores/sqlite/discoveries.d.ts +14 -0
- package/dist/stores/sqlite/discoveries.js +66 -0
- package/dist/stores/sqlite/discoveries.js.map +1 -0
- package/dist/stores/sqlite/events.d.ts +16 -0
- package/dist/stores/sqlite/events.js +75 -0
- package/dist/stores/sqlite/events.js.map +1 -0
- package/dist/stores/sqlite/index.d.ts +2 -0
- package/dist/stores/sqlite/index.js +33 -0
- package/dist/stores/sqlite/index.js.map +1 -0
- package/dist/stores/sqlite/state.d.ts +15 -0
- package/dist/stores/sqlite/state.js +99 -0
- package/dist/stores/sqlite/state.js.map +1 -0
- package/dist/stores/state.d.ts +11 -0
- package/dist/stores/state.js +67 -0
- package/dist/stores/state.js.map +1 -0
- package/dist/transports/broker.d.ts +20 -0
- package/dist/transports/broker.js +102 -0
- package/dist/transports/broker.js.map +1 -0
- package/dist/transports/index.d.ts +3 -0
- package/dist/transports/index.js +3 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/ipc.d.ts +26 -0
- package/dist/transports/ipc.js +93 -0
- package/dist/transports/ipc.js.map +1 -0
- package/dist/transports/types.d.ts +39 -0
- package/dist/transports/types.js +8 -0
- package/dist/transports/types.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +36 -0
- package/dist/utils.js.map +1 -0
- package/dist/waggle/client.d.ts +16 -0
- package/dist/waggle/client.js +28 -0
- package/dist/waggle/client.js.map +1 -0
- package/dist/waggle/compound.d.ts +22 -0
- package/dist/waggle/compound.js +194 -0
- package/dist/waggle/compound.js.map +1 -0
- package/dist/waggle/index.d.ts +25 -0
- package/dist/waggle/index.js +77 -0
- package/dist/waggle/index.js.map +1 -0
- package/dist/waggle/types.d.ts +54 -0
- package/dist/waggle/types.js +2 -0
- package/dist/waggle/types.js.map +1 -0
- package/dist/webhooks.d.ts +26 -0
- package/dist/webhooks.js +79 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/ws.d.ts +33 -0
- package/dist/ws.js +195 -0
- package/dist/ws.js.map +1 -0
- package/package.json +122 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
+
import { createServer } from './server.js';
|
|
5
|
+
import { createServer as createHttpServer } from 'node:http';
|
|
6
|
+
import { createServer as createHttpsServer } from 'node:https';
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { handleRestRequest } from './rest.js';
|
|
9
|
+
import { loadGuard, scanSnapshot } from './guard.js';
|
|
10
|
+
import { NamespaceRegistry } from './namespaces.js';
|
|
11
|
+
import { saveAllSnapshots, loadAllSnapshots } from './persistence.js';
|
|
12
|
+
import { LocalBus, RedisBus } from './bus.js';
|
|
13
|
+
import { loadSpecFile } from '@agentcoordinationprotocol/spec';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { dirname, join, resolve as resolvePath } from 'node:path';
|
|
16
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
17
|
+
import yaml from 'js-yaml';
|
|
18
|
+
import { loadIntegrationsConfig } from './integrations/index.js';
|
|
19
|
+
import { PluginManager } from './plugins/index.js';
|
|
20
|
+
import { RunWatcher } from './run-watcher.js';
|
|
21
|
+
import { BroodOrchestrator } from './orchestrator.js';
|
|
22
|
+
import { WebhookManager } from './webhooks.js';
|
|
23
|
+
import { setLogFormat, setLogLevel } from './log.js';
|
|
24
|
+
import { createTelemetryFromEnv } from '@honeybee-ai/hivemind-sdk/telemetry';
|
|
25
|
+
function parseArgs(argv) {
|
|
26
|
+
const args = {};
|
|
27
|
+
for (const arg of argv.slice(2)) {
|
|
28
|
+
if (arg.startsWith('--')) {
|
|
29
|
+
const [key, ...rest] = arg.slice(2).split('=');
|
|
30
|
+
args[key] = rest.length > 0 ? rest.join('=') : true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return args;
|
|
34
|
+
}
|
|
35
|
+
export async function main() {
|
|
36
|
+
const args = parseArgs(process.argv);
|
|
37
|
+
// --mode=http (default) or --mode=mcp. Legacy --http flag still works.
|
|
38
|
+
const mode = typeof args['mode'] === 'string' ? args['mode'] : (args['http'] === true ? 'http' : 'http');
|
|
39
|
+
if (mode !== 'http' && mode !== 'mcp') {
|
|
40
|
+
console.error(`[incubator] Unknown mode: ${mode}. Use 'http' (default) or 'mcp'.`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const isHttp = mode === 'http';
|
|
44
|
+
const port = typeof args['port'] === 'string' ? parseInt(args['port'], 10) : 3100;
|
|
45
|
+
const agentId = typeof args['agent-id'] === 'string' ? args['agent-id'] : undefined;
|
|
46
|
+
const persistPath = typeof args['persist'] === 'string' ? args['persist'] : undefined;
|
|
47
|
+
const verbose = args['verbose'] === true;
|
|
48
|
+
const noGuard = args['no-guard'] === true;
|
|
49
|
+
const logFormat = typeof args['log-format'] === 'string' ? args['log-format'] : 'text';
|
|
50
|
+
if (logFormat !== 'text' && logFormat !== 'json') {
|
|
51
|
+
console.error(`[incubator] Unknown log format: ${logFormat}. Use 'text' (default) or 'json'.`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
setLogFormat(logFormat);
|
|
55
|
+
if (verbose)
|
|
56
|
+
setLogLevel('debug');
|
|
57
|
+
// TLS configuration
|
|
58
|
+
const tlsCert = typeof args['tls-cert'] === 'string' ? args['tls-cert'] : undefined;
|
|
59
|
+
const tlsKey = typeof args['tls-key'] === 'string' ? args['tls-key'] : undefined;
|
|
60
|
+
const useTls = !!(tlsCert && tlsKey);
|
|
61
|
+
// Custom static directory (overrides dashboard)
|
|
62
|
+
const staticDir = typeof args['static'] === 'string' ? args['static'] : undefined;
|
|
63
|
+
// Brood config — preloads protocol + agent definitions for WS spawn
|
|
64
|
+
const broodPath = typeof args['brood'] === 'string' ? args['brood'] : undefined;
|
|
65
|
+
// Backend configuration
|
|
66
|
+
const backendType = typeof args['backend'] === 'string' ? args['backend'] : 'memory';
|
|
67
|
+
if (backendType !== 'memory' && backendType !== 'sqlite' && backendType !== 'redis') {
|
|
68
|
+
console.error(`[incubator] Unknown backend: ${backendType}. Use 'memory', 'sqlite', or 'redis'.`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
const dbPath = typeof args['db'] === 'string' ? args['db'] : undefined;
|
|
72
|
+
const redisUrl = typeof args['redis-url'] === 'string' ? args['redis-url'] : 'redis://localhost:6379';
|
|
73
|
+
const isSqlite = backendType === 'sqlite';
|
|
74
|
+
const isRedis = backendType === 'redis';
|
|
75
|
+
if (isSqlite && !dbPath) {
|
|
76
|
+
console.error('[incubator] SQLite backend requires --db=<path>');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
if ((isSqlite || isRedis) && persistPath) {
|
|
80
|
+
console.error(`[incubator] WARNING: --persist is ignored with ${backendType} backend (data is already persistent)`);
|
|
81
|
+
}
|
|
82
|
+
// Connect Redis client before server starts
|
|
83
|
+
let redisClient;
|
|
84
|
+
if (isRedis) {
|
|
85
|
+
const { getRedisClient, waitForReady } = await import('./stores/redis/db.js');
|
|
86
|
+
redisClient = getRedisClient(redisUrl);
|
|
87
|
+
await waitForReady(redisClient);
|
|
88
|
+
}
|
|
89
|
+
const backendConfig = { type: backendType, dbPath, redisClient };
|
|
90
|
+
const skipPersistence = isSqlite || isRedis;
|
|
91
|
+
// Protocol loading
|
|
92
|
+
const protocolPath = typeof args['protocol'] === 'string' ? args['protocol'] : undefined;
|
|
93
|
+
// Dance file loading
|
|
94
|
+
const dancesPath = typeof args['dances'] === 'string' ? args['dances'] : undefined;
|
|
95
|
+
// Agent orchestration (delegated from CLI's `wgl up`)
|
|
96
|
+
let agentsConfig;
|
|
97
|
+
if (typeof args['agents'] === 'string') {
|
|
98
|
+
try {
|
|
99
|
+
agentsConfig = JSON.parse(args['agents']);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.error(`[incubator] Failed to parse --agents JSON: ${err.message}`);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Integration loading (--integration=name or reads from config file)
|
|
107
|
+
const cliIntegrations = [];
|
|
108
|
+
for (const arg of process.argv.slice(2)) {
|
|
109
|
+
if (arg.startsWith('--integration=')) {
|
|
110
|
+
cliIntegrations.push(arg.slice('--integration='.length));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const loadIntegrations = cliIntegrations.length > 0 || args['integrations'] === true;
|
|
114
|
+
const registry = new NamespaceRegistry(backendConfig);
|
|
115
|
+
let sanitizeSnapshotFn;
|
|
116
|
+
let carapaceGuard;
|
|
117
|
+
if (noGuard) {
|
|
118
|
+
console.error('[incubator] WARNING: Carapace disabled — no prompt injection scanning');
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
carapaceGuard = loadGuard(verbose);
|
|
122
|
+
registry.setGuard(carapaceGuard, verbose);
|
|
123
|
+
sanitizeSnapshotFn = (snapshot) => scanSnapshot(snapshot, carapaceGuard, verbose);
|
|
124
|
+
console.error('[incubator] Carapace active — scanning writes, reads, and snapshots');
|
|
125
|
+
}
|
|
126
|
+
// Load persisted snapshots (memory backend only)
|
|
127
|
+
if (persistPath && !skipPersistence) {
|
|
128
|
+
const count = await loadAllSnapshots(persistPath, registry, sanitizeSnapshotFn);
|
|
129
|
+
if (count > 0) {
|
|
130
|
+
console.error(`[incubator] Restored ${count} namespace(s) from ${persistPath}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Load protocol spec if provided
|
|
134
|
+
if (protocolPath) {
|
|
135
|
+
try {
|
|
136
|
+
const spec = await loadSpecFile(protocolPath);
|
|
137
|
+
// Always load into 'default' so agents connecting without X-Namespace get it.
|
|
138
|
+
// In HTTP mode, also load into the spec-name namespace for explicit namespace use.
|
|
139
|
+
registry.setProtocol('default', spec);
|
|
140
|
+
if (isHttp && spec.name !== 'default') {
|
|
141
|
+
registry.setProtocol(spec.name, spec);
|
|
142
|
+
}
|
|
143
|
+
console.error(`[incubator] Protocol loaded: "${spec.title}" (${spec.name})`);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
console.error(`[incubator] Failed to load protocol: ${err.message}`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Load dance module: --dances flag > brood hive dances field
|
|
151
|
+
let danceModule;
|
|
152
|
+
let effectiveDancesPath = dancesPath;
|
|
153
|
+
if (!effectiveDancesPath && broodPath) {
|
|
154
|
+
// Peek into brood for dances field
|
|
155
|
+
try {
|
|
156
|
+
const broodPeek = readFileSync(resolvePath(broodPath), 'utf-8');
|
|
157
|
+
const broodObj = (broodPath.endsWith('.json') ? JSON.parse(broodPeek) : yaml.load(broodPeek));
|
|
158
|
+
const hives = (broodObj.hives ?? {});
|
|
159
|
+
const firstHive = Object.values(hives)[0];
|
|
160
|
+
const dancesRef = firstHive?.dances ?? firstHive?.logic ?? broodObj.dances ?? broodObj.logic;
|
|
161
|
+
if (typeof dancesRef === 'string') {
|
|
162
|
+
effectiveDancesPath = resolvePath(dirname(broodPath), dancesRef);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch { /* brood parse will fail properly later */ }
|
|
166
|
+
}
|
|
167
|
+
if (effectiveDancesPath) {
|
|
168
|
+
const { loadDances } = await import('./dances.js');
|
|
169
|
+
const absolutePath = resolvePath(effectiveDancesPath);
|
|
170
|
+
const fileUrl = new URL(`file://${absolutePath}`).href;
|
|
171
|
+
danceModule = await loadDances(fileUrl);
|
|
172
|
+
const toolNames = [...danceModule.tools.keys()];
|
|
173
|
+
console.error(`[incubator] Dances loaded: ${toolNames.join(', ')}${danceModule.inject ? ' + inject' : ''}`);
|
|
174
|
+
}
|
|
175
|
+
if (isSqlite) {
|
|
176
|
+
console.error(`[incubator] Backend: sqlite (${dbPath})`);
|
|
177
|
+
}
|
|
178
|
+
else if (isRedis) {
|
|
179
|
+
console.error(`[incubator] Backend: redis (${redisUrl})`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.error('[incubator] Backend: memory');
|
|
183
|
+
}
|
|
184
|
+
if (isHttp) {
|
|
185
|
+
// HTTP mode: one server, multiple agent connections
|
|
186
|
+
// Each session gets its own McpServer instance with a unique agent ID
|
|
187
|
+
const sessions = new Map();
|
|
188
|
+
// Create notification bus for WebSocket push
|
|
189
|
+
let bus;
|
|
190
|
+
if (isRedis && redisClient) {
|
|
191
|
+
const subClient = redisClient.duplicate();
|
|
192
|
+
const { waitForReady } = await import('./stores/redis/db.js');
|
|
193
|
+
await waitForReady(subClient);
|
|
194
|
+
bus = new RedisBus(redisClient, subClient);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
bus = new LocalBus();
|
|
198
|
+
}
|
|
199
|
+
// Cross-hive transport via IPC (set by wgl up)
|
|
200
|
+
let routerOptions;
|
|
201
|
+
const brokerSocket = process.env['HONEYCOMB_BROKER_SOCKET'];
|
|
202
|
+
const hiveName = process.env['HONEYCOMB_HIVE_NAME'];
|
|
203
|
+
if (brokerSocket && hiveName) {
|
|
204
|
+
const hivePublishes = process.env['HONEYCOMB_PUBLISHES']?.split(',').filter(Boolean) ?? [];
|
|
205
|
+
const hiveSubscribes = process.env['HONEYCOMB_SUBSCRIBES']?.split(',').filter(Boolean) ?? [];
|
|
206
|
+
const { IPCTransport } = await import('./transports/ipc.js');
|
|
207
|
+
const transport = new IPCTransport({
|
|
208
|
+
socketPath: brokerSocket,
|
|
209
|
+
hiveName,
|
|
210
|
+
publishes: hivePublishes,
|
|
211
|
+
subscribes: hiveSubscribes,
|
|
212
|
+
});
|
|
213
|
+
await transport.connect();
|
|
214
|
+
console.error(`[incubator] Honeycomb: connected to broker as "${hiveName}"`);
|
|
215
|
+
routerOptions = { transport, hiveName, hivePublishes, hiveSubscribes };
|
|
216
|
+
}
|
|
217
|
+
registry.setBus(bus, routerOptions);
|
|
218
|
+
// Watch for agent lifecycle events → populate RunStore
|
|
219
|
+
const defaultStoresForWatcher = registry.get('default');
|
|
220
|
+
const runWatcher = new RunWatcher(bus, defaultStoresForWatcher.runs);
|
|
221
|
+
runWatcher.start();
|
|
222
|
+
const spawnedOrchestrators = [];
|
|
223
|
+
// Webhook manager — register webhooks from protocol governance
|
|
224
|
+
const webhookManager = new WebhookManager(verbose);
|
|
225
|
+
if (protocolPath) {
|
|
226
|
+
const spec = registry.getProtocol('default');
|
|
227
|
+
if (spec?.governance?.webhooks?.length) {
|
|
228
|
+
webhookManager.register('default', spec.governance.webhooks, bus);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const proto = useTls ? 'https' : 'http';
|
|
232
|
+
const wsProto = useTls ? 'wss' : 'ws';
|
|
233
|
+
let serveDashboard;
|
|
234
|
+
let serveCustom;
|
|
235
|
+
try {
|
|
236
|
+
const sirvModule = await import('sirv');
|
|
237
|
+
const sirv = (sirvModule.default ?? sirvModule);
|
|
238
|
+
// Dashboard always at /dashboard
|
|
239
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
240
|
+
const dashboardDir = join(__dirname, '..', 'dashboard', 'dist');
|
|
241
|
+
if (existsSync(dashboardDir)) {
|
|
242
|
+
serveDashboard = sirv(dashboardDir, { single: true, dev: true });
|
|
243
|
+
console.error(`[incubator] Dashboard: ${proto}://localhost:${port}/dashboard`);
|
|
244
|
+
}
|
|
245
|
+
// Custom static dir at /
|
|
246
|
+
if (staticDir && existsSync(staticDir)) {
|
|
247
|
+
serveCustom = sirv(staticDir, { single: true, dev: true });
|
|
248
|
+
console.error(`[incubator] Static: ${proto}://localhost:${port}/`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// sirv not installed — static serving disabled
|
|
253
|
+
}
|
|
254
|
+
const requestHandler = async (req, res) => {
|
|
255
|
+
// REST API routes - handled before MCP
|
|
256
|
+
if (req.url?.startsWith('/api/')) {
|
|
257
|
+
await handleRestRequest(req, res, registry, verbose, danceSupport);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const url = new URL(req.url ?? '/', `${proto}://localhost:${port}`);
|
|
261
|
+
// Dashboard routes: /dashboard and /dashboard/*
|
|
262
|
+
if (url.pathname === '/dashboard' || url.pathname.startsWith('/dashboard/')) {
|
|
263
|
+
if (serveDashboard) {
|
|
264
|
+
// Strip /dashboard prefix so sirv serves from its root
|
|
265
|
+
const originalUrl = req.url;
|
|
266
|
+
req.url = url.pathname.replace(/^\/dashboard/, '') || '/';
|
|
267
|
+
if (url.search)
|
|
268
|
+
req.url += url.search;
|
|
269
|
+
serveDashboard(req, res, () => {
|
|
270
|
+
req.url = originalUrl;
|
|
271
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
272
|
+
res.end(JSON.stringify({ error: 'Not found.' }));
|
|
273
|
+
});
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
277
|
+
res.end(JSON.stringify({ error: 'Dashboard not available.' }));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (url.pathname !== '/mcp') {
|
|
281
|
+
// Root redirect to dashboard when no custom static
|
|
282
|
+
if (url.pathname === '/' && !serveCustom) {
|
|
283
|
+
if (serveDashboard) {
|
|
284
|
+
res.writeHead(302, { Location: '/dashboard' });
|
|
285
|
+
res.end();
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Custom static content at /
|
|
290
|
+
if (serveCustom) {
|
|
291
|
+
serveCustom(req, res, () => {
|
|
292
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
293
|
+
res.end(JSON.stringify({ error: 'Not found. Use /mcp or /api/ endpoints.' }));
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
298
|
+
res.end(JSON.stringify({ error: 'Not found. Use /mcp or /api/ endpoints.' }));
|
|
299
|
+
}
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
// Extract namespace from X-Namespace header
|
|
303
|
+
const namespace = req.headers['x-namespace'] || 'default';
|
|
304
|
+
const stores = registry.get(namespace);
|
|
305
|
+
// Check for existing session
|
|
306
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
307
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
308
|
+
const session = sessions.get(sessionId);
|
|
309
|
+
await session.transport.handleRequest(req, res);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// New session - create transport and server
|
|
313
|
+
const newAgentId = `agent_${randomUUID().slice(0, 8)}`;
|
|
314
|
+
const transport = new StreamableHTTPServerTransport({
|
|
315
|
+
sessionIdGenerator: () => randomUUID(),
|
|
316
|
+
onsessioninitialized: (sid) => {
|
|
317
|
+
const nsLabel = namespace === 'default' ? '' : `@${namespace}`;
|
|
318
|
+
console.error(`[incubator] Session ${sid} started (${newAgentId}${nsLabel})`);
|
|
319
|
+
sessions.set(sid, { server: mcpServer, transport });
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
transport.onclose = () => {
|
|
323
|
+
const sid = transport.sessionId;
|
|
324
|
+
if (sid) {
|
|
325
|
+
sessions.delete(sid);
|
|
326
|
+
console.error(`[incubator] Session ${sid} closed`);
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const onSave = (persistPath && !skipPersistence) ? () => { saveAllSnapshots(persistPath, registry); } : undefined;
|
|
330
|
+
const mcpServer = createServer(stores, {
|
|
331
|
+
agentId: newAgentId,
|
|
332
|
+
namespace,
|
|
333
|
+
persistPath: skipPersistence ? undefined : persistPath,
|
|
334
|
+
verbose,
|
|
335
|
+
sanitizeSnapshot: sanitizeSnapshotFn,
|
|
336
|
+
onSave,
|
|
337
|
+
getProtocol: () => registry.getProtocol(namespace),
|
|
338
|
+
});
|
|
339
|
+
await mcpServer.connect(transport);
|
|
340
|
+
await transport.handleRequest(req, res);
|
|
341
|
+
};
|
|
342
|
+
const httpServer = useTls
|
|
343
|
+
? createHttpsServer({ key: readFileSync(tlsKey), cert: readFileSync(tlsCert) }, requestHandler)
|
|
344
|
+
: createHttpServer(requestHandler);
|
|
345
|
+
// Set up WebSocket push (optional: requires "ws" package)
|
|
346
|
+
// setupWebSocket loads ws via import() — throws if ws not installed
|
|
347
|
+
// Build dance support if dance module loaded
|
|
348
|
+
let danceSupport;
|
|
349
|
+
if (danceModule) {
|
|
350
|
+
const { buildAcpHelper } = await import('./dances.js');
|
|
351
|
+
danceSupport = {
|
|
352
|
+
module: danceModule,
|
|
353
|
+
getState: async (ns) => {
|
|
354
|
+
const stores = registry.get(ns);
|
|
355
|
+
const entries = await stores.state.query();
|
|
356
|
+
const state = {};
|
|
357
|
+
for (const entry of entries) {
|
|
358
|
+
state[entry.key] = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value);
|
|
359
|
+
}
|
|
360
|
+
return state;
|
|
361
|
+
},
|
|
362
|
+
getAcpHelper: (ns, agentId) => {
|
|
363
|
+
const stores = registry.get(ns);
|
|
364
|
+
return buildAcpHelper({
|
|
365
|
+
publishEvent: async (_namespace, type, data, aid) => {
|
|
366
|
+
const event = await stores.events.publish(type, data ?? {}, aid ?? agentId);
|
|
367
|
+
bus.publish(ns, event);
|
|
368
|
+
},
|
|
369
|
+
claimResource: async (_namespace, resource, aid, ttl) => {
|
|
370
|
+
const result = await stores.claims.claim(resource, resource, aid, ttl);
|
|
371
|
+
return result.claim.resource;
|
|
372
|
+
},
|
|
373
|
+
releaseResource: async (_namespace, resource) => {
|
|
374
|
+
await stores.claims.release(resource, agentId);
|
|
375
|
+
},
|
|
376
|
+
setState: async (_namespace, key, value) => {
|
|
377
|
+
await stores.state.set(key, value, agentId);
|
|
378
|
+
},
|
|
379
|
+
}, ns, agentId);
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
let wsManager;
|
|
384
|
+
try {
|
|
385
|
+
const { setupWebSocket } = await import('./ws.js');
|
|
386
|
+
wsManager = await setupWebSocket(httpServer, registry, bus, verbose, undefined, danceSupport);
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
// ws not installed or failed to load — WebSocket disabled
|
|
390
|
+
}
|
|
391
|
+
// Brood config: preload agent definitions, spawn on "start" event
|
|
392
|
+
if (broodPath) {
|
|
393
|
+
const broodRaw = readFileSync(resolvePath(broodPath), 'utf-8');
|
|
394
|
+
const broodData = (broodPath.endsWith('.json') ? JSON.parse(broodRaw) : yaml.load(broodRaw));
|
|
395
|
+
// Extract agents from first hive
|
|
396
|
+
const hives = (broodData.hives ?? {});
|
|
397
|
+
const firstHive = Object.values(hives)[0];
|
|
398
|
+
const broodAgents = (firstHive?.agents ?? firstHive?.workers ?? []).map(a => ({
|
|
399
|
+
role: String(a.role ?? ''),
|
|
400
|
+
type: a.type ?? 'worker',
|
|
401
|
+
prompt: typeof a.prompt === 'string' ? a.prompt : undefined,
|
|
402
|
+
wakeOn: a.wake_on ? {
|
|
403
|
+
types: a.wake_on.types,
|
|
404
|
+
maxWakes: a.wake_on.max_wakes,
|
|
405
|
+
} : undefined,
|
|
406
|
+
}));
|
|
407
|
+
// Load protocol from brood if specified
|
|
408
|
+
const specRef = firstHive?.acp ?? firstHive?.spec ?? firstHive?.protocol;
|
|
409
|
+
if (typeof specRef === 'string' && protocolPath === undefined) {
|
|
410
|
+
const specPath = resolvePath(dirname(broodPath), specRef);
|
|
411
|
+
if (existsSync(specPath)) {
|
|
412
|
+
const specData = await loadSpecFile(specPath);
|
|
413
|
+
registry.setProtocol('default', specData);
|
|
414
|
+
console.error(`[incubator] Protocol loaded from brood: ${specRef}`);
|
|
415
|
+
// Auto-derive agents from spec roles when brood has no explicit agents
|
|
416
|
+
if (broodAgents.length === 0 && specData.roles) {
|
|
417
|
+
for (const [roleName, roleDef] of Object.entries(specData.roles)) {
|
|
418
|
+
const count = typeof roleDef.agents === 'number' ? roleDef.agents : 1;
|
|
419
|
+
for (let i = 0; i < count; i++) {
|
|
420
|
+
broodAgents.push({ role: roleName, type: 'worker', prompt: undefined, wakeOn: undefined });
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
console.error(`[incubator] Derived ${broodAgents.length} agents from spec roles`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
const stagger = typeof broodData.stagger === 'number' ? broodData.stagger : 0;
|
|
428
|
+
const broodProvider = typeof broodData.provider === 'string' ? broodData.provider : 'ollama/qwen3:8b';
|
|
429
|
+
const broodEnv = (broodData.env ?? {});
|
|
430
|
+
// Resolve hive entry point (agent CLI within incubator)
|
|
431
|
+
const __dirname_brood = dirname(fileURLToPath(import.meta.url));
|
|
432
|
+
const hiveEntryPath = join(__dirname_brood, 'agent', 'cli.js');
|
|
433
|
+
console.error(`[incubator] Brood loaded: ${broodAgents.length} agents (${broodProvider}), waiting for "start" event`);
|
|
434
|
+
// Subscribe to bus — spawn agents when "start" event fires
|
|
435
|
+
let gameRunning = false;
|
|
436
|
+
bus.subscribe('default', (event) => {
|
|
437
|
+
if (event.type === 'start' && !gameRunning) {
|
|
438
|
+
gameRunning = true;
|
|
439
|
+
console.error('[orchestrator] Start event received, spawning agents...');
|
|
440
|
+
const config = {
|
|
441
|
+
provider: broodProvider,
|
|
442
|
+
stagger,
|
|
443
|
+
noAcp: false,
|
|
444
|
+
propolisPort: 0,
|
|
445
|
+
worktree: process.cwd(),
|
|
446
|
+
hiveEntry: hiveEntryPath,
|
|
447
|
+
tls: useTls,
|
|
448
|
+
env: broodEnv,
|
|
449
|
+
agents: broodAgents,
|
|
450
|
+
};
|
|
451
|
+
const orch = new BroodOrchestrator(config, port, bus, defaultStoresForWatcher.runs, verbose, defaultStoresForWatcher, registry, danceSupport?.module, telemetry, pluginManager);
|
|
452
|
+
orch.start().catch(err => {
|
|
453
|
+
console.error(`[orchestrator] Spawn failed: ${err.message}`);
|
|
454
|
+
});
|
|
455
|
+
spawnedOrchestrators.push(orch);
|
|
456
|
+
}
|
|
457
|
+
// Reset — shut down running agents, allow new game
|
|
458
|
+
if (event.type === 'reset') {
|
|
459
|
+
gameRunning = false;
|
|
460
|
+
for (const orch of spawnedOrchestrators) {
|
|
461
|
+
orch.shutdown().catch(() => { });
|
|
462
|
+
}
|
|
463
|
+
spawnedOrchestrators.length = 0;
|
|
464
|
+
console.error('[orchestrator] Reset — agents stopped, ready for new game');
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
// Initialize plugin system (replaces IntegrationManager + tool-loader)
|
|
469
|
+
const defaultStoresForPlugins = registry.get('default');
|
|
470
|
+
const pluginManager = new PluginManager({
|
|
471
|
+
verbose,
|
|
472
|
+
namespace: 'default',
|
|
473
|
+
bus,
|
|
474
|
+
eventStore: defaultStoresForPlugins.events,
|
|
475
|
+
});
|
|
476
|
+
// Extract brood plugins (if brood.yaml has a plugins: section)
|
|
477
|
+
let broodPlugins;
|
|
478
|
+
if (broodPath) {
|
|
479
|
+
try {
|
|
480
|
+
const broodPeekRaw = readFileSync(resolvePath(broodPath), 'utf-8');
|
|
481
|
+
const broodPeek = (broodPath.endsWith('.json') ? JSON.parse(broodPeekRaw) : yaml.load(broodPeekRaw));
|
|
482
|
+
if (Array.isArray(broodPeek.plugins)) {
|
|
483
|
+
broodPlugins = broodPeek.plugins.map(p => ({
|
|
484
|
+
package: String(p.package ?? ''),
|
|
485
|
+
config: p.config ?? undefined,
|
|
486
|
+
})).filter(p => p.package);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
catch { /* brood parse will fail properly later */ }
|
|
490
|
+
}
|
|
491
|
+
// Build integration config for plugins
|
|
492
|
+
const intConfig = loadIntegrations ? loadIntegrationsConfig() : {};
|
|
493
|
+
await pluginManager.init({
|
|
494
|
+
autoDiscover: true,
|
|
495
|
+
broodPlugins,
|
|
496
|
+
integrations: loadIntegrations ? intConfig : undefined,
|
|
497
|
+
cliIntegrations: cliIntegrations.length > 0 ? cliIntegrations : undefined,
|
|
498
|
+
});
|
|
499
|
+
// Build tool entries for the working directory
|
|
500
|
+
pluginManager.buildToolEntries(process.cwd(), carapaceGuard ?? null, verbose);
|
|
501
|
+
const loadedPlugins = pluginManager.getLoadedNames();
|
|
502
|
+
if (loadedPlugins.length > 0) {
|
|
503
|
+
const toolCount = pluginManager.getToolCount();
|
|
504
|
+
console.error(`[incubator] Plugins: ${loadedPlugins.join(', ')} (${toolCount} tools)`);
|
|
505
|
+
}
|
|
506
|
+
// Create telemetry reporter (local-first, cloud opt-in via env vars)
|
|
507
|
+
let telemetry;
|
|
508
|
+
try {
|
|
509
|
+
telemetry = createTelemetryFromEnv();
|
|
510
|
+
telemetry.start();
|
|
511
|
+
if (telemetry.localEnabled) {
|
|
512
|
+
console.error(`[incubator] Telemetry: local JSONL${telemetry.cloudEnabled ? ' + cloud sync' : ''}`);
|
|
513
|
+
}
|
|
514
|
+
// Wire telemetry into guard (guard was set before telemetry was created)
|
|
515
|
+
if (carapaceGuard && telemetry) {
|
|
516
|
+
registry.setGuard(carapaceGuard, verbose, telemetry);
|
|
517
|
+
sanitizeSnapshotFn = (snapshot) => scanSnapshot(snapshot, carapaceGuard, verbose, telemetry);
|
|
518
|
+
}
|
|
519
|
+
// Wire telemetry into dance support for WS metrics push
|
|
520
|
+
if (danceSupport && telemetry) {
|
|
521
|
+
danceSupport.telemetry = telemetry;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
catch {
|
|
525
|
+
// Non-fatal — telemetry must never break the host
|
|
526
|
+
}
|
|
527
|
+
httpServer.listen(port, () => {
|
|
528
|
+
console.error(`[incubator] ${useTls ? 'HTTPS' : 'HTTP'} server listening on port ${port}`);
|
|
529
|
+
console.error(`[incubator] MCP endpoint: ${proto}://localhost:${port}/mcp`);
|
|
530
|
+
console.error(`[incubator] REST API: ${proto}://localhost:${port}/api/`);
|
|
531
|
+
if (wsManager) {
|
|
532
|
+
console.error(`[incubator] WebSocket: ${wsProto}://localhost:${port}/ws`);
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
console.error(`[incubator] WebSocket: disabled (install "ws" to enable)`);
|
|
536
|
+
}
|
|
537
|
+
if (persistPath && !skipPersistence) {
|
|
538
|
+
console.error(`[incubator] Persistence: ${persistPath}`);
|
|
539
|
+
}
|
|
540
|
+
// Orchestrator mode: spawn propolis + drones (delegated from CLI)
|
|
541
|
+
if (agentsConfig) {
|
|
542
|
+
orchestrator = new BroodOrchestrator(agentsConfig, port, bus, defaultStoresForWatcher.runs, verbose, defaultStoresForWatcher, registry, danceSupport?.module, telemetry, pluginManager);
|
|
543
|
+
orchestrator.start().catch(err => {
|
|
544
|
+
console.error(`[orchestrator] Fatal: ${err.message}`);
|
|
545
|
+
process.exit(1);
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
let orchestrator;
|
|
550
|
+
// Graceful shutdown
|
|
551
|
+
process.on('SIGINT', async () => {
|
|
552
|
+
console.error('\n[incubator] Shutting down...');
|
|
553
|
+
if (orchestrator)
|
|
554
|
+
await orchestrator.shutdown();
|
|
555
|
+
for (const orch of spawnedOrchestrators)
|
|
556
|
+
await orch.shutdown();
|
|
557
|
+
if (telemetry)
|
|
558
|
+
await telemetry.stop();
|
|
559
|
+
runWatcher.stop();
|
|
560
|
+
webhookManager.close();
|
|
561
|
+
await pluginManager.destroyAll();
|
|
562
|
+
if (wsManager)
|
|
563
|
+
wsManager.close();
|
|
564
|
+
await bus.close();
|
|
565
|
+
if (persistPath && !skipPersistence) {
|
|
566
|
+
await saveAllSnapshots(persistPath, registry);
|
|
567
|
+
console.error('[incubator] Snapshots saved');
|
|
568
|
+
}
|
|
569
|
+
if (redisClient) {
|
|
570
|
+
await redisClient.quit();
|
|
571
|
+
console.error('[incubator] Redis disconnected');
|
|
572
|
+
}
|
|
573
|
+
for (const [, session] of sessions) {
|
|
574
|
+
session.server.close();
|
|
575
|
+
}
|
|
576
|
+
httpServer.close();
|
|
577
|
+
process.exit(0);
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
else {
|
|
581
|
+
// Stdio mode: single agent, default namespace
|
|
582
|
+
const stores = registry.get('default');
|
|
583
|
+
const onSave = (persistPath && !skipPersistence) ? () => { saveAllSnapshots(persistPath, registry); } : undefined;
|
|
584
|
+
const server = createServer(stores, {
|
|
585
|
+
agentId: agentId ?? 'agent_stdio',
|
|
586
|
+
persistPath: skipPersistence ? undefined : persistPath,
|
|
587
|
+
verbose,
|
|
588
|
+
sanitizeSnapshot: sanitizeSnapshotFn,
|
|
589
|
+
onSave,
|
|
590
|
+
getProtocol: () => registry.getProtocol('default'),
|
|
591
|
+
});
|
|
592
|
+
const transport = new StdioServerTransport();
|
|
593
|
+
await server.connect(transport);
|
|
594
|
+
console.error(`[incubator] Running on stdio (agent: ${agentId ?? 'agent_stdio'})`);
|
|
595
|
+
if (persistPath && !skipPersistence) {
|
|
596
|
+
console.error(`[incubator] Persistence: ${persistPath}`);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
// Auto-execution moved to bin.ts — this file is import-only
|
|
601
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAA0B,MAAM,qCAAqC,CAAC;AAErG,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,uEAAuE;IACvE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,kCAAkC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvF,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,mCAAmC,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,YAAY,CAAC,SAAsB,CAAC,CAAC;IACrC,IAAI,OAAO;QAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,oBAAoB;IACpB,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;IAErC,gDAAgD;IAChD,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElF,oEAAoE;IACpE,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,wBAAwB;IACxB,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrF,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACpF,OAAO,CAAC,KAAK,CAAC,gCAAgC,WAAW,uCAAuC,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACtG,MAAM,QAAQ,GAAG,WAAW,KAAK,QAAQ,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,KAAK,OAAO,CAAC;IAExC,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,kDAAkD,WAAW,uCAAuC,CAAC,CAAC;IACtH,CAAC;IAED,4CAA4C;IAC5C,IAAI,WAA8B,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC9E,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,aAAa,GAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChF,MAAM,eAAe,GAAG,QAAQ,IAAI,OAAO,CAAC;IAE5C,mBAAmB;IACnB,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzF,qBAAqB;IACrB,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,sDAAsD;IACtD,IAAI,YAAsC,CAAC;IAC3C,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAiB,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8CAA+C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAErF,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,kBAAmF,CAAC;IACxF,IAAI,aAAqD,CAAC;IAE1D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1C,kBAAkB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAc,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACvF,CAAC;IAED,iDAAiD;IACjD,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAChF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,sBAAsB,WAAW,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;YAC9C,8EAA8E;YAC9E,mFAAmF;YACnF,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACtC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wCAAyC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,WAA0D,CAAC;IAC/D,IAAI,mBAAmB,GAAG,UAAU,CAAC;IACrC,IAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE,CAAC;QACtC,mCAAmC;QACnC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAA4B,CAAC;YACzH,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAA4C,CAAC;YAChF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC;YAC7F,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,mBAAmB,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC;QACvD,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,8BAA8B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,GAAG,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,oDAAoD;QACpD,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiG,CAAC;QAE1H,6CAA6C;QAC7C,IAAI,GAAoB,CAAC;QACzB,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC9D,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;YAC9B,GAAG,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QACvB,CAAC;QACD,+CAA+C;QAC/C,IAAI,aAA6C,CAAC;QAClD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACpD,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3F,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7F,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAuB,IAAI,YAAY,CAAC;gBACrD,UAAU,EAAE,YAAY;gBACxB,QAAQ;gBACR,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,cAAc;aAC3B,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,kDAAkD,QAAQ,GAAG,CAAC,CAAC;YAC7E,aAAa,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;QACzE,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAEpC,uDAAuD;QACvD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACrE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,oBAAoB,GAAwB,EAAE,CAAC;QAErD,+DAA+D;QAC/D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACvC,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAItC,IAAI,cAA0C,CAAC;QAC/C,IAAI,WAAuC,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,UAAU,CAAgF,CAAC;YAE/H,iCAAiC;YACjC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,gBAAgB,IAAI,YAAY,CAAC,CAAC;YACpF,CAAC;YAED,yBAAyB;YACzB,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,gBAAgB,IAAI,GAAG,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,EAAE,GAAwC,EAAE,GAAuC,EAAE,EAAE;YACjH,uCAAuC;YACvC,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,KAAK,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAEpE,gDAAgD;YAChD,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5E,IAAI,cAAc,EAAE,CAAC;oBACnB,uDAAuD;oBACvD,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC;oBAC5B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;oBAC1D,IAAI,GAAG,CAAC,MAAM;wBAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;oBACtC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;wBAC5B,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC;wBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;oBACnD,CAAC,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC5B,mDAAmD;gBACnD,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzC,IAAI,cAAc,EAAE,CAAC;wBACnB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;wBAC/C,GAAG,CAAC,GAAG,EAAE,CAAC;wBACV,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,6BAA6B;gBAC7B,IAAI,WAAW,EAAE,CAAC;oBAChB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;wBACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC,CAAC;oBAChF,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,OAAO;YACT,CAAC;YAED,4CAA4C;YAC5C,MAAM,SAAS,GAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAY,IAAI,SAAS,CAAC;YACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,IAAI,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;gBACzC,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,4CAA4C;YAC5C,MAAM,UAAU,GAAG,SAAS,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;gBACtC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC5B,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC/D,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,aAAa,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC;oBAC9E,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtD,CAAC;aACF,CAAC,CAAC;YAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;gBACvB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;gBAChC,IAAI,GAAG,EAAE,CAAC;oBACR,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAElH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE;gBACrC,OAAO,EAAE,UAAU;gBACnB,SAAS;gBACT,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;gBACtD,OAAO;gBACP,gBAAgB,EAAE,kBAAkB;gBACpC,MAAM;gBACN,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;aACnD,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM;YACvB,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,MAAO,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,OAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;YACjG,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAErC,0DAA0D;QAC1D,oEAAoE;QACpE,6CAA6C;QAC7C,IAAI,YAAwD,CAAC;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,YAAY,GAAG;gBACb,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;oBAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAA2B,EAAE,CAAC;oBACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACjG,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,YAAY,EAAE,CAAC,EAAU,EAAE,OAAe,EAAE,EAAE;oBAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChC,OAAO,cAAc,CAAC;wBACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;4BAClD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;4BAC5E,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;wBACzB,CAAC;wBACD,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;4BACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BACvE,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;wBAC/B,CAAC;wBACD,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;4BAC9C,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACjD,CAAC;wBACD,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;4BACzC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;wBAC9C,CAAC;qBACF,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAClB,CAAC;aACF,CAAC;QACJ,CAAC;QAED,IAAI,SAAgC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,SAAS,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;QAED,kEAAkE;QAClE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAA4B,CAAC;YAExH,iCAAiC;YACjC,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAA4C,CAAC;YACjF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAI,CAAC,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,EAAE,CAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChH,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,EAAG,CAAC,CAAC,IAAkD,IAAI,QAAQ;gBACvE,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBAClB,KAAK,EAAG,CAAC,CAAC,OAAmC,CAAC,KAA6B;oBAC3E,QAAQ,EAAG,CAAC,CAAC,OAAmC,CAAC,SAA+B;iBACjF,CAAC,CAAC,CAAC,SAAS;aACd,CAAC,CAAC,CAAC;YAEJ,wCAAwC;YACxC,MAAM,OAAO,GAAG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,QAAQ,CAAC;YACzE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC9C,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC1C,OAAO,CAAC,KAAK,CAAC,2CAA2C,OAAO,EAAE,CAAC,CAAC;oBAEpE,uEAAuE;oBACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;wBAC/C,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BACjE,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC/B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;4BACtG,CAAC;wBACH,CAAC;wBACD,OAAO,CAAC,KAAK,CAAC,uBAAuB,WAAW,CAAC,MAAM,yBAAyB,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACtG,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAA2B,CAAC;YAEjE,wDAAwD;YACxD,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE/D,OAAO,CAAC,KAAK,CAAC,6BAA6B,WAAW,CAAC,MAAM,YAAY,aAAa,8BAA8B,CAAC,CAAC;YAEtH,2DAA2D;YAC3D,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC3C,WAAW,GAAG,IAAI,CAAC;oBACnB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;oBACzE,MAAM,MAAM,GAAiB;wBAC3B,QAAQ,EAAE,aAAa;wBACvB,OAAO;wBACP,KAAK,EAAE,KAAK;wBACZ,YAAY,EAAE,CAAC;wBACf,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;wBACvB,SAAS,EAAE,aAAa;wBACxB,GAAG,EAAE,MAAM;wBACX,GAAG,EAAE,QAAQ;wBACb,MAAM,EAAE,WAAW;qBACpB,CAAC;oBACF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;oBAChL,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBACvB,OAAO,CAAC,KAAK,CAAC,gCAAiC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC1E,CAAC,CAAC,CAAC;oBACH,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,mDAAmD;gBACnD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,WAAW,GAAG,KAAK,CAAC;oBACpB,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;wBACxC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAClC,CAAC;oBACD,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,MAAM,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;YACtC,OAAO;YACP,SAAS,EAAE,SAAS;YACpB,GAAG;YACH,UAAU,EAAE,uBAAuB,CAAC,MAAM;SAC3C,CAAC,CAAC;QAEH,+DAA+D;QAC/D,IAAI,YAAyE,CAAC;QAC9E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAA4B,CAAC;gBAChI,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrC,YAAY,GAAI,SAAS,CAAC,OAA0C,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7E,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;wBAChC,MAAM,EAAG,CAAC,CAAC,MAAiC,IAAI,SAAS;qBAC1D,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;QACxD,CAAC;QAED,uCAAuC;QACvC,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,aAAa,CAAC,IAAI,CAAC;YACvB,YAAY,EAAE,IAAI;YAClB,YAAY;YACZ,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACtD,eAAe,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC,CAAC;QAEH,+CAA+C;QAC/C,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;QAE9E,MAAM,aAAa,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,6BAA6B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,SAAS,CAAC,CAAC;QAC9F,CAAC;QAED,qEAAqE;QACrE,IAAI,SAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,SAAS,GAAG,sBAAsB,EAAE,CAAC;YACrC,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,wCAAwC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,yEAAyE;YACzE,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;gBAC/B,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACrD,kBAAkB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAChG,CAAC;YACD,wDAAwD;YACxD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,gBAAgB,IAAI,MAAM,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,gBAAgB,IAAI,OAAO,CAAC,CAAC;YAC7E,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,gBAAgB,IAAI,KAAK,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,kEAAkE;YAClE,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,GAAG,IAAI,iBAAiB,CAClC,YAAY,EAAE,IAAI,EAAE,GAAG,EACvB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EACrC,uBAAuB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAClF,CAAC;gBACF,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC/B,OAAO,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,YAA2C,CAAC;QAEhD,oBAAoB;QACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,IAAI,YAAY;gBAAE,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,oBAAoB;gBAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/D,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,EAAE,CAAC;YAClB,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,SAAS;gBAAE,SAAS,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;gBACpC,MAAM,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,8CAA8C;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;YAClC,OAAO,EAAE,OAAO,IAAI,aAAa;YACjC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACtD,OAAO;YACP,gBAAgB,EAAE,kBAAkB;YACpC,MAAM;YACN,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;SACnD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,IAAI,aAAa,GAAG,CAAC,CAAC;QACnF,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,4DAA4D"}
|