@openclaw-cloud/agent-controller 1.0.0-beta.2 → 1.0.0-beta.20
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/bin/agent-controller.js +11 -2
- package/dist/api.d.ts +4 -0
- package/dist/api.js +10 -2
- package/dist/api.js.map +1 -1
- package/dist/commands/bootstrap.js +9 -34
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/channel-server.d.ts +17 -0
- package/dist/commands/channel-server.js +71 -0
- package/dist/commands/channel-server.js.map +1 -0
- package/dist/commands/heartbeat-cli.js +5 -4
- package/dist/commands/heartbeat-cli.js.map +1 -1
- package/dist/commands/install-deps.js +18 -8
- package/dist/commands/install-deps.js.map +1 -1
- package/dist/commands/install.js +8 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/self-update.js +2 -1
- package/dist/commands/self-update.js.map +1 -1
- package/dist/config-file.js +20 -4
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +39 -0
- package/dist/config.js +101 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +2 -0
- package/dist/connection.js +38 -7
- package/dist/connection.js.map +1 -1
- package/dist/debug.js +2 -1
- package/dist/debug.js.map +1 -1
- package/dist/handlers/backup.js +4 -1
- package/dist/handlers/backup.js.map +1 -1
- package/dist/handlers/board-handler.d.ts +4 -0
- package/dist/handlers/board-handler.js +127 -100
- package/dist/handlers/board-handler.js.map +1 -1
- package/dist/handlers/chat.d.ts +17 -0
- package/dist/handlers/chat.js +187 -6
- package/dist/handlers/chat.js.map +1 -1
- package/dist/handlers/deploy.js +16 -29
- package/dist/handlers/deploy.js.map +1 -1
- package/dist/handlers/diagnostics.js +12 -0
- package/dist/handlers/diagnostics.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +21 -1
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/memory.d.ts +13 -0
- package/dist/handlers/memory.js +128 -0
- package/dist/handlers/memory.js.map +1 -0
- package/dist/handlers/onboarding.js +18 -2
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +44 -12
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/pair.js +14 -1
- package/dist/handlers/pair.js.map +1 -1
- package/dist/handlers/restart.js +3 -1
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/self-update.js +3 -1
- package/dist/handlers/self-update.js.map +1 -1
- package/dist/handlers/stop.js +7 -0
- package/dist/handlers/stop.js.map +1 -1
- package/dist/handlers/telegram-webhook.js +23 -0
- package/dist/handlers/telegram-webhook.js.map +1 -1
- package/dist/handlers/update-config.js +8 -2
- package/dist/handlers/update-config.js.map +1 -1
- package/dist/heartbeat.d.ts +7 -0
- package/dist/heartbeat.js +15 -65
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +140 -29
- package/dist/index.js.map +1 -1
- package/dist/mcp-client.js.map +1 -1
- package/dist/memory-mcp-server.d.ts +8 -0
- package/dist/memory-mcp-server.js +291 -0
- package/dist/memory-mcp-server.js.map +1 -0
- package/dist/platform/linux.js +7 -3
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.js +4 -2
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.js +4 -2
- package/dist/platform/windows.js.map +1 -1
- package/dist/providers/claude-code/channel-server.d.ts +60 -0
- package/dist/providers/claude-code/channel-server.js +155 -0
- package/dist/providers/claude-code/channel-server.js.map +1 -0
- package/dist/providers/claude-code/index.d.ts +68 -0
- package/dist/providers/claude-code/index.js +276 -0
- package/dist/providers/claude-code/index.js.map +1 -0
- package/dist/providers/claude-code/login-flow.d.ts +26 -0
- package/dist/providers/claude-code/login-flow.js +129 -0
- package/dist/providers/claude-code/login-flow.js.map +1 -0
- package/dist/providers/claude-code/settings-writer.d.ts +29 -0
- package/dist/providers/claude-code/settings-writer.js +95 -0
- package/dist/providers/claude-code/settings-writer.js.map +1 -0
- package/dist/providers/claude-code/socket-bridge.d.ts +88 -0
- package/dist/providers/claude-code/socket-bridge.js +302 -0
- package/dist/providers/claude-code/socket-bridge.js.map +1 -0
- package/dist/providers/claude-code/spawn-claude.d.ts +44 -0
- package/dist/providers/claude-code/spawn-claude.js +108 -0
- package/dist/providers/claude-code/spawn-claude.js.map +1 -0
- package/dist/providers/index.d.ts +4 -2
- package/dist/providers/index.js +12 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/mock/index.js.map +1 -1
- package/dist/providers/openclaw/device-identity.js +2 -2
- package/dist/providers/openclaw/device-identity.js.map +1 -1
- package/dist/providers/openclaw/gateway-adapter.js +19 -8
- package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
- package/dist/providers/openclaw/gateway-client.js +9 -3
- package/dist/providers/openclaw/gateway-client.js.map +1 -1
- package/dist/providers/openclaw/index.js +14 -3
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/agent-controller-bin.d.ts +8 -0
- package/dist/utils/agent-controller-bin.js +58 -0
- package/dist/utils/agent-controller-bin.js.map +1 -0
- package/dist/utils/apply-config.d.ts +28 -0
- package/dist/utils/apply-config.js +234 -4
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/claude-env.js +11 -5
- package/dist/utils/claude-env.js.map +1 -1
- package/dist/utils/config-merge-paths.d.ts +21 -0
- package/dist/utils/config-merge-paths.js +27 -0
- package/dist/utils/config-merge-paths.js.map +1 -0
- package/dist/utils/env.js +2 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/knowledge-graph.d.ts +66 -0
- package/dist/utils/knowledge-graph.js +163 -0
- package/dist/utils/knowledge-graph.js.map +1 -0
- package/dist/utils/release-channel.js +2 -4
- package/dist/utils/release-channel.js.map +1 -1
- package/dist/utils/write-workspace-files.d.ts +15 -0
- package/dist/utils/write-workspace-files.js +48 -0
- package/dist/utils/write-workspace-files.js.map +1 -0
- package/dist/workspace.js +4 -5
- package/dist/workspace.js.map +1 -1
- package/package.json +24 -3
package/dist/index.js
CHANGED
|
@@ -2,48 +2,92 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import fs from 'node:fs';
|
|
5
|
-
import os from 'node:os';
|
|
6
5
|
import { createConnection, subscribeToChannel, logCollector } from './connection.js';
|
|
7
6
|
import { startHeartbeat } from './heartbeat.js';
|
|
8
7
|
import { createAgentApi } from './api.js';
|
|
9
8
|
import { BoardHandler } from './handlers/board-handler.js';
|
|
10
9
|
import { McpBoardClient } from './mcp-client.js';
|
|
11
10
|
import { configureProvider, createProvider, getProvider } from './providers/index.js';
|
|
11
|
+
import { ClaudeCodeProvider } from './providers/claude-code/index.js';
|
|
12
|
+
import { registerClaudeReplyPublisher } from './handlers/chat.js';
|
|
12
13
|
import { DEBUG } from './debug.js';
|
|
13
|
-
import {
|
|
14
|
+
import { getBackendUrl } from './utils/env.js';
|
|
15
|
+
import { config, requireConfig } from './config.js';
|
|
14
16
|
import { createLockFile } from './lockfile.js';
|
|
15
|
-
import { applyBootstrapConfig } from './utils/apply-config.js';
|
|
17
|
+
import { applyBootstrapConfig, applyMergeableConfig } from './utils/apply-config.js';
|
|
18
|
+
import { KnowledgeGraphManager } from './utils/knowledge-graph.js';
|
|
19
|
+
import { startMemoryMcpServer } from './memory-mcp-server.js';
|
|
20
|
+
import { wireMemoryDeltaLogging } from './handlers/memory.js';
|
|
21
|
+
import { toErrorMessage } from './utils/response.js';
|
|
16
22
|
const _require = createRequire(import.meta.url);
|
|
17
23
|
const { version: CONTROLLER_VERSION } = _require(join(dirname(fileURLToPath(import.meta.url)), '../package.json'));
|
|
18
|
-
/** On startup, fetch latest config from bootstrap API and apply
|
|
24
|
+
/** On startup, fetch latest config from bootstrap API and apply.
|
|
25
|
+
*
|
|
26
|
+
* - vm / k8s → full `applyBootstrapConfig` (writes openclaw.json,
|
|
27
|
+
* auth-profiles.json, ~/.claude/settings.json, .env, restarts gateway).
|
|
28
|
+
* - standalone / undefined → `applyMergeableConfig` does a SCOPED merge of
|
|
29
|
+
* allowlisted safe-additive sections (mcpServers, tools.media.*, etc.)
|
|
30
|
+
* into the user's existing openclaw.json. Local values always win on
|
|
31
|
+
* conflict, and auth-profiles.json / .env / gateway are left untouched.
|
|
32
|
+
*/
|
|
19
33
|
async function refreshConfigFromBootstrap() {
|
|
20
|
-
const backendUrl =
|
|
21
|
-
const agentToken =
|
|
22
|
-
const agentId =
|
|
34
|
+
const backendUrl = config.backendUrl;
|
|
35
|
+
const agentToken = config.agentToken;
|
|
36
|
+
const agentId = config.agentId;
|
|
23
37
|
if (!backendUrl || !agentToken || !agentId)
|
|
24
38
|
return;
|
|
39
|
+
const deployType = config.agentDeployType;
|
|
40
|
+
const managedDeploy = deployType === 'vm' || deployType === 'k8s';
|
|
25
41
|
try {
|
|
26
42
|
const api = createAgentApi(backendUrl, agentToken);
|
|
27
43
|
const data = await api.agentBootstrap(agentId);
|
|
28
|
-
|
|
29
|
-
|
|
44
|
+
if (managedDeploy) {
|
|
45
|
+
await applyBootstrapConfig(data);
|
|
46
|
+
console.log(`[startup] Config refreshed from bootstrap API (deployType=${deployType})`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
await applyMergeableConfig(data);
|
|
50
|
+
console.log(`[startup] Scoped merge of mergeable config sections applied (deployType=${deployType ?? 'standalone'}); local config preserved on conflict`);
|
|
51
|
+
}
|
|
30
52
|
}
|
|
31
53
|
catch (err) {
|
|
32
54
|
console.error('[startup] Failed to refresh config from bootstrap:', err instanceof Error ? err.message : err);
|
|
33
55
|
}
|
|
34
56
|
}
|
|
57
|
+
/** Inject agent-memory MCP server into openclaw.json so OpenClaw agent can discover it. */
|
|
58
|
+
function injectMemoryMcpConfig() {
|
|
59
|
+
try {
|
|
60
|
+
const openclawDir = config.stateDir;
|
|
61
|
+
const configPath = join(openclawDir, 'openclaw.json');
|
|
62
|
+
if (!fs.existsSync(configPath))
|
|
63
|
+
return;
|
|
64
|
+
const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
65
|
+
// Ensure mcpServers section exists
|
|
66
|
+
if (!fileConfig.mcpServers)
|
|
67
|
+
fileConfig.mcpServers = {};
|
|
68
|
+
fileConfig.mcpServers['agent-memory'] = {
|
|
69
|
+
url: 'http://127.0.0.1:3457/mcp',
|
|
70
|
+
transport: 'streamable-http',
|
|
71
|
+
};
|
|
72
|
+
fs.writeFileSync(configPath, JSON.stringify(fileConfig, null, 2) + '\n');
|
|
73
|
+
console.log('[startup] Injected agent-memory MCP server into openclaw.json');
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.warn('[startup] Failed to inject memory MCP config:', err instanceof Error ? err.message : err);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
35
79
|
/**
|
|
36
80
|
* Read MCP server config from openclaw.json (injected by bootstrap).
|
|
37
81
|
* Returns McpBoardClient if config is found, null otherwise.
|
|
38
82
|
*/
|
|
39
83
|
function createMcpClient() {
|
|
40
84
|
try {
|
|
41
|
-
const openclawDir =
|
|
85
|
+
const openclawDir = config.stateDir;
|
|
42
86
|
const configPath = join(openclawDir, 'openclaw.json');
|
|
43
87
|
if (!fs.existsSync(configPath))
|
|
44
88
|
return null;
|
|
45
|
-
const
|
|
46
|
-
const mcpConfig =
|
|
89
|
+
const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
90
|
+
const mcpConfig = fileConfig?.mcpServers?.['openclaw-cloud'];
|
|
47
91
|
if (!mcpConfig?.url)
|
|
48
92
|
return null;
|
|
49
93
|
const token = mcpConfig.headers?.Authorization?.replace('Bearer ', '') ?? '';
|
|
@@ -59,25 +103,56 @@ function createMcpClient() {
|
|
|
59
103
|
return null;
|
|
60
104
|
}
|
|
61
105
|
}
|
|
62
|
-
export function main() {
|
|
106
|
+
export async function main() {
|
|
63
107
|
createLockFile();
|
|
64
108
|
refreshConfigFromBootstrap().catch((err) => {
|
|
65
109
|
console.error('[startup] refreshConfigFromBootstrap failed:', err);
|
|
66
110
|
});
|
|
67
|
-
const url =
|
|
68
|
-
const token =
|
|
69
|
-
const agentId =
|
|
111
|
+
const url = requireConfig('centrifugoUrl');
|
|
112
|
+
const token = requireConfig('agentToken');
|
|
113
|
+
const agentId = requireConfig('agentId');
|
|
70
114
|
const backendUrl = getBackendUrl();
|
|
71
115
|
if (DEBUG)
|
|
72
116
|
console.log('[debug] Debug mode enabled');
|
|
73
117
|
console.log(`Starting agent-controller for agent: ${agentId}`);
|
|
74
118
|
console.log(`Backend URL: ${backendUrl} (JWT mode)`);
|
|
75
119
|
const api = createAgentApi(backendUrl, token);
|
|
76
|
-
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Memory graph — init, MCP server, delta wiring, openclaw.json injection
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
const graphPath = join(config.stateDir, 'memory', 'graph.jsonl');
|
|
124
|
+
const knowledgeGraphManager = new KnowledgeGraphManager(graphPath);
|
|
125
|
+
let closeMemoryMcp = null;
|
|
126
|
+
try {
|
|
127
|
+
await knowledgeGraphManager.init();
|
|
128
|
+
console.log('[memory] KnowledgeGraphManager initialized');
|
|
129
|
+
closeMemoryMcp = await startMemoryMcpServer(knowledgeGraphManager);
|
|
130
|
+
injectMemoryMcpConfig();
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
console.error('[memory] Failed to initialize memory:', toErrorMessage(err));
|
|
134
|
+
}
|
|
135
|
+
// Fire-and-forget delta sync to backend
|
|
136
|
+
knowledgeGraphManager.on('delta', (delta) => {
|
|
137
|
+
api.postMemoryDelta(agentId, delta).catch((err) => {
|
|
138
|
+
console.error('[memory] Failed to push delta:', toErrorMessage(err));
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
const { client, drainCommands } = createConnection({
|
|
142
|
+
url,
|
|
143
|
+
token,
|
|
144
|
+
agentId,
|
|
145
|
+
backendUrl,
|
|
146
|
+
api,
|
|
147
|
+
version: CONTROLLER_VERSION,
|
|
148
|
+
knowledgeGraphManager,
|
|
149
|
+
});
|
|
150
|
+
// Wire structured delta logs AFTER createConnection() so logCollector is set.
|
|
151
|
+
wireMemoryDeltaLogging(knowledgeGraphManager);
|
|
77
152
|
// Configure agent provider
|
|
78
|
-
const providerType =
|
|
79
|
-
const gatewayWsUrl =
|
|
80
|
-
const gatewayToken =
|
|
153
|
+
const providerType = config.agentProvider;
|
|
154
|
+
const gatewayWsUrl = config.gatewayWsUrl;
|
|
155
|
+
const gatewayToken = config.gatewayToken;
|
|
81
156
|
if (providerType === 'openclaw') {
|
|
82
157
|
if (gatewayToken) {
|
|
83
158
|
const provider = createProvider('openclaw', { wsUrl: gatewayWsUrl, wsToken: gatewayToken });
|
|
@@ -96,6 +171,28 @@ export function main() {
|
|
|
96
171
|
});
|
|
97
172
|
console.log('Mock provider configured');
|
|
98
173
|
}
|
|
174
|
+
else if (providerType === 'claude-code') {
|
|
175
|
+
const provider = createProvider('claude-code', {
|
|
176
|
+
workspaceDir: config.claudeWorkspaceDir,
|
|
177
|
+
anthropicApiKey: config.anthropicApiKey,
|
|
178
|
+
anthropicAuthToken: config.anthropicAuthToken,
|
|
179
|
+
claudeCodeOauthToken: config.claudeCodeOauthToken,
|
|
180
|
+
backendUrl,
|
|
181
|
+
agentToken: token,
|
|
182
|
+
});
|
|
183
|
+
configureProvider(provider);
|
|
184
|
+
// Wire the reply publisher: Claude's async reply tool calls are published
|
|
185
|
+
// to the backend as `chat_response` events so the chat UI receives them.
|
|
186
|
+
if (provider instanceof ClaudeCodeProvider) {
|
|
187
|
+
registerClaudeReplyPublisher(provider, (payload) => api.publishResponse(agentId, payload).catch((err) => {
|
|
188
|
+
console.error('[claude-code] reply publish failed:', err instanceof Error ? err.message : err);
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
provider.connect().catch((err) => {
|
|
192
|
+
console.error('claude-code provider connect failed:', err instanceof Error ? err.message : err);
|
|
193
|
+
});
|
|
194
|
+
console.log('claude-code provider configured');
|
|
195
|
+
}
|
|
99
196
|
else {
|
|
100
197
|
console.error(`Unknown provider type: ${providerType}`);
|
|
101
198
|
process.exit(1);
|
|
@@ -108,7 +205,9 @@ export function main() {
|
|
|
108
205
|
// are missed. This is a known limitation: the initialize() call includes a checkQueue()
|
|
109
206
|
// backfill that re-reads all unassigned cards, so any events missed during init are
|
|
110
207
|
// recovered by that initial queue scan.
|
|
111
|
-
boardHandler
|
|
208
|
+
boardHandler
|
|
209
|
+
.initialize()
|
|
210
|
+
.then((workspaceId) => {
|
|
112
211
|
if (!workspaceId) {
|
|
113
212
|
console.log('No board found for this agent, board handler dormant');
|
|
114
213
|
return;
|
|
@@ -117,7 +216,14 @@ export function main() {
|
|
|
117
216
|
// When MCP is connected, board events arrive via MCP notifications too,
|
|
118
217
|
// but RACE-2 guard in BoardHandler prevents duplicate claims.
|
|
119
218
|
const boardChannel = `board:${workspaceId}`;
|
|
120
|
-
boardSub = subscribeToChannel(client, boardChannel, {
|
|
219
|
+
boardSub = subscribeToChannel(client, boardChannel, {
|
|
220
|
+
url,
|
|
221
|
+
token,
|
|
222
|
+
agentId,
|
|
223
|
+
backendUrl,
|
|
224
|
+
api,
|
|
225
|
+
version: CONTROLLER_VERSION,
|
|
226
|
+
});
|
|
121
227
|
boardSub.on('publication', (ctx) => {
|
|
122
228
|
const event = ctx.data;
|
|
123
229
|
if (!event || !event.event)
|
|
@@ -127,7 +233,8 @@ export function main() {
|
|
|
127
233
|
});
|
|
128
234
|
});
|
|
129
235
|
console.log(`Subscribed to board channel: ${boardChannel}${boardHandler.isUsingMcp() ? ' (MCP primary, Centrifugo fallback)' : ''}`);
|
|
130
|
-
})
|
|
236
|
+
})
|
|
237
|
+
.catch((err) => {
|
|
131
238
|
console.error('Board handler init error:', err instanceof Error ? err.message : err);
|
|
132
239
|
});
|
|
133
240
|
console.log('Heartbeat via backend API');
|
|
@@ -142,14 +249,18 @@ export function main() {
|
|
|
142
249
|
heartbeatHandle.stop();
|
|
143
250
|
boardSub?.unsubscribe();
|
|
144
251
|
mcpClient?.disconnect();
|
|
252
|
+
closeMemoryMcp?.();
|
|
145
253
|
getProvider()?.disconnect();
|
|
146
|
-
logCollector?.shutdown().catch(() => { });
|
|
147
254
|
client.disconnect();
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
255
|
+
const drainWithTimeout = Promise.race([
|
|
256
|
+
Promise.all([drainCommands(), logCollector?.shutdown() ?? Promise.resolve()]),
|
|
257
|
+
new Promise((resolve) => setTimeout(resolve, 3000)),
|
|
258
|
+
]);
|
|
259
|
+
drainWithTimeout
|
|
260
|
+
.catch(() => { })
|
|
261
|
+
.finally(() => {
|
|
262
|
+
process.exit(0);
|
|
263
|
+
});
|
|
153
264
|
};
|
|
154
265
|
process.on('SIGINT', shutdown);
|
|
155
266
|
process.on('SIGTERM', shutdown);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,CAA4C;IACxD,GAAG,CAAS;IACZ,KAAK,CAAS;IAEtB,YAAY,OAA8B;QACxC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { KnowledgeGraphManager } from './utils/knowledge-graph.js';
|
|
3
|
+
export declare function createMemoryMcpServer(manager: KnowledgeGraphManager): McpServer;
|
|
4
|
+
/**
|
|
5
|
+
* Start the MCP memory server on localhost.
|
|
6
|
+
* Returns a close function for graceful shutdown.
|
|
7
|
+
*/
|
|
8
|
+
export declare function startMemoryMcpServer(manager: KnowledgeGraphManager): Promise<() => void>;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createServer } from 'node:http';
|
|
3
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Zod schemas — exact match with @modelcontextprotocol/server-memory
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const EntitySchema = z.object({
|
|
10
|
+
name: z.string().describe('The name of the entity'),
|
|
11
|
+
entityType: z.string().describe('The type of the entity'),
|
|
12
|
+
observations: z
|
|
13
|
+
.array(z.string())
|
|
14
|
+
.describe('An array of observation contents associated with the entity'),
|
|
15
|
+
});
|
|
16
|
+
const RelationSchema = z.object({
|
|
17
|
+
from: z.string().describe('The name of the entity where the relation starts'),
|
|
18
|
+
to: z.string().describe('The name of the entity where the relation ends'),
|
|
19
|
+
relationType: z.string().describe('The type of the relation'),
|
|
20
|
+
});
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// MCP server factory
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export function createMemoryMcpServer(manager) {
|
|
25
|
+
const server = new McpServer({
|
|
26
|
+
name: 'agent-memory',
|
|
27
|
+
version: '1.0.0',
|
|
28
|
+
});
|
|
29
|
+
// --- create_entities ---
|
|
30
|
+
server.registerTool('create_entities', {
|
|
31
|
+
title: 'Create Entities',
|
|
32
|
+
description: 'Create multiple new entities in the knowledge graph',
|
|
33
|
+
inputSchema: { entities: z.array(EntitySchema) },
|
|
34
|
+
outputSchema: { entities: z.array(EntitySchema) },
|
|
35
|
+
}, async ({ entities }) => {
|
|
36
|
+
const result = await manager.createEntities(entities);
|
|
37
|
+
return {
|
|
38
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
39
|
+
structuredContent: { entities: result },
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
// --- create_relations ---
|
|
43
|
+
server.registerTool('create_relations', {
|
|
44
|
+
title: 'Create Relations',
|
|
45
|
+
description: 'Create multiple new relations between entities in the knowledge graph. Relations should be in active voice',
|
|
46
|
+
inputSchema: { relations: z.array(RelationSchema) },
|
|
47
|
+
outputSchema: { relations: z.array(RelationSchema) },
|
|
48
|
+
}, async ({ relations }) => {
|
|
49
|
+
const result = await manager.createRelations(relations);
|
|
50
|
+
return {
|
|
51
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
52
|
+
structuredContent: { relations: result },
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
// --- add_observations ---
|
|
56
|
+
server.registerTool('add_observations', {
|
|
57
|
+
title: 'Add Observations',
|
|
58
|
+
description: 'Add new observations to existing entities in the knowledge graph',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
observations: z.array(z.object({
|
|
61
|
+
entityName: z.string().describe('The name of the entity to add the observations to'),
|
|
62
|
+
contents: z.array(z.string()).describe('An array of observation contents to add'),
|
|
63
|
+
})),
|
|
64
|
+
},
|
|
65
|
+
outputSchema: {
|
|
66
|
+
results: z.array(z.object({
|
|
67
|
+
entityName: z.string(),
|
|
68
|
+
addedObservations: z.array(z.string()),
|
|
69
|
+
})),
|
|
70
|
+
},
|
|
71
|
+
}, async ({ observations }) => {
|
|
72
|
+
const result = await manager.addObservations(observations);
|
|
73
|
+
return {
|
|
74
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
75
|
+
structuredContent: { results: result },
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
// --- delete_entities ---
|
|
79
|
+
server.registerTool('delete_entities', {
|
|
80
|
+
title: 'Delete Entities',
|
|
81
|
+
description: 'Delete multiple entities and their associated relations from the knowledge graph',
|
|
82
|
+
inputSchema: {
|
|
83
|
+
entityNames: z.array(z.string()).describe('An array of entity names to delete'),
|
|
84
|
+
},
|
|
85
|
+
outputSchema: {
|
|
86
|
+
success: z.boolean(),
|
|
87
|
+
message: z.string(),
|
|
88
|
+
},
|
|
89
|
+
}, async ({ entityNames }) => {
|
|
90
|
+
await manager.deleteEntities(entityNames);
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: 'text', text: 'Entities deleted successfully' }],
|
|
93
|
+
structuredContent: { success: true, message: 'Entities deleted successfully' },
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
// --- delete_observations ---
|
|
97
|
+
server.registerTool('delete_observations', {
|
|
98
|
+
title: 'Delete Observations',
|
|
99
|
+
description: 'Delete specific observations from entities in the knowledge graph',
|
|
100
|
+
inputSchema: {
|
|
101
|
+
deletions: z.array(z.object({
|
|
102
|
+
entityName: z.string().describe('The name of the entity containing the observations'),
|
|
103
|
+
observations: z.array(z.string()).describe('An array of observations to delete'),
|
|
104
|
+
})),
|
|
105
|
+
},
|
|
106
|
+
outputSchema: {
|
|
107
|
+
success: z.boolean(),
|
|
108
|
+
message: z.string(),
|
|
109
|
+
},
|
|
110
|
+
}, async ({ deletions }) => {
|
|
111
|
+
await manager.deleteObservations(deletions);
|
|
112
|
+
return {
|
|
113
|
+
content: [{ type: 'text', text: 'Observations deleted successfully' }],
|
|
114
|
+
structuredContent: { success: true, message: 'Observations deleted successfully' },
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
// --- delete_relations ---
|
|
118
|
+
server.registerTool('delete_relations', {
|
|
119
|
+
title: 'Delete Relations',
|
|
120
|
+
description: 'Delete multiple relations from the knowledge graph',
|
|
121
|
+
inputSchema: {
|
|
122
|
+
relations: z.array(RelationSchema).describe('An array of relations to delete'),
|
|
123
|
+
},
|
|
124
|
+
outputSchema: {
|
|
125
|
+
success: z.boolean(),
|
|
126
|
+
message: z.string(),
|
|
127
|
+
},
|
|
128
|
+
}, async ({ relations }) => {
|
|
129
|
+
await manager.deleteRelations(relations);
|
|
130
|
+
return {
|
|
131
|
+
content: [{ type: 'text', text: 'Relations deleted successfully' }],
|
|
132
|
+
structuredContent: { success: true, message: 'Relations deleted successfully' },
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// --- read_graph ---
|
|
136
|
+
server.registerTool('read_graph', {
|
|
137
|
+
title: 'Read Graph',
|
|
138
|
+
description: 'Read the entire knowledge graph',
|
|
139
|
+
inputSchema: {},
|
|
140
|
+
outputSchema: {
|
|
141
|
+
entities: z.array(EntitySchema),
|
|
142
|
+
relations: z.array(RelationSchema),
|
|
143
|
+
},
|
|
144
|
+
}, async () => {
|
|
145
|
+
const graph = manager.readGraph();
|
|
146
|
+
return {
|
|
147
|
+
content: [{ type: 'text', text: JSON.stringify(graph, null, 2) }],
|
|
148
|
+
structuredContent: { ...graph },
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
// --- search_nodes ---
|
|
152
|
+
server.registerTool('search_nodes', {
|
|
153
|
+
title: 'Search Nodes',
|
|
154
|
+
description: 'Search for nodes in the knowledge graph based on a query',
|
|
155
|
+
inputSchema: {
|
|
156
|
+
query: z
|
|
157
|
+
.string()
|
|
158
|
+
.describe('The search query to match against entity names, types, and observation content'),
|
|
159
|
+
},
|
|
160
|
+
outputSchema: {
|
|
161
|
+
entities: z.array(EntitySchema),
|
|
162
|
+
relations: z.array(RelationSchema),
|
|
163
|
+
},
|
|
164
|
+
}, async ({ query }) => {
|
|
165
|
+
const graph = manager.searchNodes(query);
|
|
166
|
+
return {
|
|
167
|
+
content: [{ type: 'text', text: JSON.stringify(graph, null, 2) }],
|
|
168
|
+
structuredContent: { ...graph },
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
// --- open_nodes ---
|
|
172
|
+
server.registerTool('open_nodes', {
|
|
173
|
+
title: 'Open Nodes',
|
|
174
|
+
description: 'Open specific nodes in the knowledge graph by their names',
|
|
175
|
+
inputSchema: {
|
|
176
|
+
names: z.array(z.string()).describe('An array of entity names to retrieve'),
|
|
177
|
+
},
|
|
178
|
+
outputSchema: {
|
|
179
|
+
entities: z.array(EntitySchema),
|
|
180
|
+
relations: z.array(RelationSchema),
|
|
181
|
+
},
|
|
182
|
+
}, async ({ names }) => {
|
|
183
|
+
const graph = manager.openNodes(names);
|
|
184
|
+
return {
|
|
185
|
+
content: [{ type: 'text', text: JSON.stringify(graph, null, 2) }],
|
|
186
|
+
structuredContent: { ...graph },
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
return server;
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// HTTP transport — Node.js http server on localhost:3457
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
const MEMORY_MCP_PORT = 3457;
|
|
195
|
+
/**
|
|
196
|
+
* Start the MCP memory server on localhost.
|
|
197
|
+
* Returns a close function for graceful shutdown.
|
|
198
|
+
*/
|
|
199
|
+
export async function startMemoryMcpServer(manager) {
|
|
200
|
+
// Map of sessionId -> { transport, server } for stateful session management.
|
|
201
|
+
// Each session gets its own McpServer instance because the SDK only allows
|
|
202
|
+
// one transport per McpServer (Protocol.connect throws on second call).
|
|
203
|
+
const sessions = new Map();
|
|
204
|
+
const httpServer = createServer(async (req, res) => {
|
|
205
|
+
const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
206
|
+
if (url.pathname !== '/mcp') {
|
|
207
|
+
res.writeHead(404);
|
|
208
|
+
res.end('Not found');
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// Parse body for POST
|
|
212
|
+
const MAX_BODY_SIZE = 10 * 1024 * 1024; // 10MB
|
|
213
|
+
let body = undefined;
|
|
214
|
+
if (req.method === 'POST') {
|
|
215
|
+
const chunks = [];
|
|
216
|
+
let totalSize = 0;
|
|
217
|
+
let aborted = false;
|
|
218
|
+
for await (const chunk of req) {
|
|
219
|
+
const buf = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
|
|
220
|
+
totalSize += buf.length;
|
|
221
|
+
if (totalSize > MAX_BODY_SIZE) {
|
|
222
|
+
res.writeHead(413, { 'Content-Type': 'text/plain' });
|
|
223
|
+
res.end('Payload too large');
|
|
224
|
+
req.destroy();
|
|
225
|
+
aborted = true;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
chunks.push(buf);
|
|
229
|
+
}
|
|
230
|
+
if (aborted)
|
|
231
|
+
return;
|
|
232
|
+
try {
|
|
233
|
+
body = JSON.parse(Buffer.concat(chunks).toString('utf-8'));
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
237
|
+
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Check for existing session
|
|
242
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
243
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
244
|
+
const session = sessions.get(sessionId);
|
|
245
|
+
await session.transport.handleRequest(req, res, body);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Handle DELETE for session termination
|
|
249
|
+
if (req.method === 'DELETE') {
|
|
250
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
251
|
+
const session = sessions.get(sessionId);
|
|
252
|
+
await session.transport.close();
|
|
253
|
+
await session.server.close();
|
|
254
|
+
sessions.delete(sessionId);
|
|
255
|
+
}
|
|
256
|
+
res.writeHead(200);
|
|
257
|
+
res.end();
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// New session — create a fresh McpServer + transport pair
|
|
261
|
+
const mcpServer = createMemoryMcpServer(manager);
|
|
262
|
+
const transport = new StreamableHTTPServerTransport({
|
|
263
|
+
sessionIdGenerator: () => randomUUID(),
|
|
264
|
+
});
|
|
265
|
+
transport.onclose = () => {
|
|
266
|
+
if (transport.sessionId) {
|
|
267
|
+
sessions.delete(transport.sessionId);
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
await mcpServer.connect(transport);
|
|
271
|
+
await transport.handleRequest(req, res, body);
|
|
272
|
+
// sessionId is assigned during handleRequest (after initialize handshake)
|
|
273
|
+
if (transport.sessionId) {
|
|
274
|
+
sessions.set(transport.sessionId, { transport, server: mcpServer });
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
return new Promise((resolve) => {
|
|
278
|
+
httpServer.listen(MEMORY_MCP_PORT, '127.0.0.1', () => {
|
|
279
|
+
console.log(`[memory-mcp] MCP memory server listening on http://127.0.0.1:${MEMORY_MCP_PORT}/mcp`);
|
|
280
|
+
resolve(() => {
|
|
281
|
+
for (const session of sessions.values()) {
|
|
282
|
+
session.transport.close().catch(() => { });
|
|
283
|
+
session.server.close().catch(() => { });
|
|
284
|
+
}
|
|
285
|
+
sessions.clear();
|
|
286
|
+
httpServer.close();
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=memory-mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-mcp-server.js","sourceRoot":"","sources":["../src/memory-mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACzD,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,6DAA6D,CAAC;CAC3E,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC7E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACzE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC9D,CAAC,CAAC;AAEH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QAChD,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;KAClD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;SACxC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,4GAA4G;QAC9G,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QACnD,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;KACrD,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SACzC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;gBACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;gBACpF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;aAClF,CAAC,CACH;SACF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;gBACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;gBACtB,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACvC,CAAC,CACH;SACF;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC3D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SACvC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SAChF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE;SAC/E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;gBACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;gBACrF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;aACjF,CAAC,CACH;SACF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,EAAE,CAAC;YACtE,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,mCAAmC,EAAE;SACnF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC/E;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;YACnE,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gCAAgC,EAAE;SAChF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,EAAE;QACf,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;SACnC;KACF,EACD,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACjE,iBAAiB,EAAE,EAAE,GAAG,KAAK,EAAE;SAChC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CACP,gFAAgF,CACjF;SACJ;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;SACnC;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACjE,iBAAiB,EAAE,EAAE,GAAG,KAAK,EAAE;SAChC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SAC5E;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;SACnC;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACjE,iBAAiB,EAAE,EAAE,GAAG,KAAK,EAAE;SAChC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA8B;IACvE,6EAA6E;IAC7E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAGrB,CAAC;IAEJ,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;QAClF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;QAC/C,IAAI,IAAI,GAAY,SAAS,CAAC;QAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnE,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC;gBACxB,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;oBAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;oBACrD,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC7B,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM;gBACR,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,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,cAAc,EAAE,CAAC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;QACtE,IAAI,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YACzC,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5B,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,KAAK,EAAE,CAAC;gBAChC,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;SACvC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9C,0EAA0E;QAC1E,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;QACzC,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE;YACnD,OAAO,CAAC,GAAG,CACT,gEAAgE,eAAe,MAAM,CACtF,CAAC;YACF,OAAO,CAAC,GAAG,EAAE;gBACX,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBACxC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzC,CAAC;gBACD,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|