@oni.bot/core 0.8.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +59 -373
- package/dist/checkpointers/sqlite.d.ts.map +1 -1
- package/dist/checkpointers/sqlite.js +23 -8
- package/dist/checkpointers/sqlite.js.map +1 -1
- package/dist/cli/build.d.ts +11 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +61 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/dev.d.ts +5 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +54 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.js +16 -27
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +18 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/inspect.d.ts +5 -0
- package/dist/cli/inspect.d.ts.map +1 -0
- package/dist/cli/inspect.js +85 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/cli/router.d.ts +14 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +107 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/run.d.ts +5 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +53 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/templates.d.ts +1 -0
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +106 -66
- package/dist/cli/templates.js.map +1 -1
- package/dist/cli/test.d.ts +3 -0
- package/dist/cli/test.d.ts.map +1 -0
- package/dist/cli/test.js +29 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +37 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +180 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +74 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/coordination/pubsub.d.ts +4 -0
- package/dist/coordination/pubsub.d.ts.map +1 -1
- package/dist/coordination/pubsub.js +8 -0
- package/dist/coordination/pubsub.js.map +1 -1
- package/dist/coordination/request-reply.d.ts +3 -1
- package/dist/coordination/request-reply.d.ts.map +1 -1
- package/dist/coordination/request-reply.js +11 -2
- package/dist/coordination/request-reply.js.map +1 -1
- package/dist/errors.d.ts +7 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -3
- package/dist/errors.js.map +1 -1
- package/dist/events/bridge.d.ts +17 -0
- package/dist/events/bridge.d.ts.map +1 -0
- package/dist/events/bridge.js +67 -0
- package/dist/events/bridge.js.map +1 -0
- package/dist/events/bus.d.ts +9 -0
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +39 -4
- package/dist/events/bus.js.map +1 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/types.d.ts +123 -1
- package/dist/events/types.d.ts.map +1 -1
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +16 -8
- package/dist/graph.js.map +1 -1
- package/dist/guardrails/types.d.ts +1 -1
- package/dist/guardrails/types.d.ts.map +1 -1
- package/dist/harness/agent-loop.d.ts.map +1 -1
- package/dist/harness/agent-loop.js +226 -29
- package/dist/harness/agent-loop.js.map +1 -1
- package/dist/harness/context-compactor.d.ts +21 -2
- package/dist/harness/context-compactor.d.ts.map +1 -1
- package/dist/harness/context-compactor.js +45 -6
- package/dist/harness/context-compactor.js.map +1 -1
- package/dist/harness/hooks-engine.d.ts +7 -1
- package/dist/harness/hooks-engine.d.ts.map +1 -1
- package/dist/harness/hooks-engine.js.map +1 -1
- package/dist/harness/index.d.ts +3 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +2 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/skill-loader.d.ts +14 -1
- package/dist/harness/skill-loader.d.ts.map +1 -1
- package/dist/harness/skill-loader.js +33 -3
- package/dist/harness/skill-loader.js.map +1 -1
- package/dist/harness/types.d.ts +24 -2
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/validate-args.d.ts +16 -0
- package/dist/harness/validate-args.d.ts.map +1 -0
- package/dist/harness/validate-args.js +132 -0
- package/dist/harness/validate-args.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/internal/timeout.d.ts +2 -0
- package/dist/internal/timeout.d.ts.map +1 -0
- package/dist/internal/timeout.js +16 -0
- package/dist/internal/timeout.js.map +1 -0
- package/dist/lsp/client.d.ts +70 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +421 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +77 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +183 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/servers.d.ts +48 -0
- package/dist/lsp/servers.d.ts.map +1 -0
- package/dist/lsp/servers.js +108 -0
- package/dist/lsp/servers.js.map +1 -0
- package/dist/lsp/types.d.ts +142 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +16 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/mcp/client.d.ts +56 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +170 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/convert.d.ts +26 -0
- package/dist/mcp/convert.d.ts.map +1 -0
- package/dist/mcp/convert.js +56 -0
- package/dist/mcp/convert.js.map +1 -0
- package/dist/mcp/index.d.ts +21 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/transport.d.ts +56 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +204 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/mcp/types.d.ts +96 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +11 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +78 -41
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/google.d.ts.map +1 -1
- package/dist/models/google.js +47 -46
- package/dist/models/google.js.map +1 -1
- package/dist/models/http-error.d.ts +16 -0
- package/dist/models/http-error.d.ts.map +1 -0
- package/dist/models/http-error.js +67 -0
- package/dist/models/http-error.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/ollama.d.ts.map +1 -1
- package/dist/models/ollama.js +4 -3
- package/dist/models/ollama.js.map +1 -1
- package/dist/models/openai.d.ts.map +1 -1
- package/dist/models/openai.js +36 -44
- package/dist/models/openai.js.map +1 -1
- package/dist/models/openrouter.d.ts +13 -0
- package/dist/models/openrouter.d.ts.map +1 -1
- package/dist/models/openrouter.js +86 -47
- package/dist/models/openrouter.js.map +1 -1
- package/dist/models/sse.d.ts +9 -0
- package/dist/models/sse.d.ts.map +1 -0
- package/dist/models/sse.js +45 -0
- package/dist/models/sse.js.map +1 -0
- package/dist/models/types.d.ts +10 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/pregel.d.ts +4 -0
- package/dist/pregel.d.ts.map +1 -1
- package/dist/pregel.js +121 -54
- package/dist/pregel.js.map +1 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +10 -3
- package/dist/retry.js.map +1 -1
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +17 -0
- package/dist/store/index.js.map +1 -1
- package/dist/streaming.d.ts +4 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +21 -7
- package/dist/streaming.js.map +1 -1
- package/dist/swarm/graph.d.ts +81 -2
- package/dist/swarm/graph.d.ts.map +1 -1
- package/dist/swarm/graph.js +517 -32
- package/dist/swarm/graph.js.map +1 -1
- package/dist/swarm/index.d.ts +10 -2
- package/dist/swarm/index.d.ts.map +1 -1
- package/dist/swarm/index.js +6 -1
- package/dist/swarm/index.js.map +1 -1
- package/dist/swarm/mermaid.d.ts +10 -0
- package/dist/swarm/mermaid.d.ts.map +1 -0
- package/dist/swarm/mermaid.js +64 -0
- package/dist/swarm/mermaid.js.map +1 -0
- package/dist/swarm/pool.d.ts +9 -1
- package/dist/swarm/pool.d.ts.map +1 -1
- package/dist/swarm/pool.js +58 -10
- package/dist/swarm/pool.js.map +1 -1
- package/dist/swarm/registry.d.ts +11 -1
- package/dist/swarm/registry.d.ts.map +1 -1
- package/dist/swarm/registry.js +17 -3
- package/dist/swarm/registry.js.map +1 -1
- package/dist/swarm/scaling.d.ts +95 -0
- package/dist/swarm/scaling.d.ts.map +1 -0
- package/dist/swarm/scaling.js +214 -0
- package/dist/swarm/scaling.js.map +1 -0
- package/dist/swarm/snapshot.d.ts +51 -0
- package/dist/swarm/snapshot.d.ts.map +1 -0
- package/dist/swarm/snapshot.js +115 -0
- package/dist/swarm/snapshot.js.map +1 -0
- package/dist/swarm/supervisor.d.ts.map +1 -1
- package/dist/swarm/supervisor.js +82 -0
- package/dist/swarm/supervisor.js.map +1 -1
- package/dist/swarm/tracer.d.ts +57 -0
- package/dist/swarm/tracer.d.ts.map +1 -0
- package/dist/swarm/tracer.js +138 -0
- package/dist/swarm/tracer.js.map +1 -0
- package/dist/swarm/types.d.ts +23 -1
- package/dist/swarm/types.d.ts.map +1 -1
- package/dist/swarm/types.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +160 -141
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Module — Language Server Protocol integration.
|
|
3
|
+
*
|
|
4
|
+
* High-level facade for managing LSP clients:
|
|
5
|
+
* - Auto-spawns appropriate language server for each file type
|
|
6
|
+
* - Caches broken servers to avoid repeated spawn attempts
|
|
7
|
+
* - Provides touchFile() → diagnostics() flow for edit tools
|
|
8
|
+
* - Single instance shared across all swarm agents (concurrent-safe)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const lsp = new LSPManager(rootDir);
|
|
12
|
+
* await lsp.touchFile("src/index.ts", true); // true = wait for diagnostics
|
|
13
|
+
* const diags = lsp.getDiagnostics("src/index.ts");
|
|
14
|
+
*
|
|
15
|
+
* Swarm-aware: Multiple agents can call touchFile() concurrently.
|
|
16
|
+
* File versions are tracked per-file, not per-agent.
|
|
17
|
+
*/
|
|
18
|
+
import { extname } from "node:path";
|
|
19
|
+
import { LSPClient } from "./client.js";
|
|
20
|
+
import { findServersForExtension } from "./servers.js";
|
|
21
|
+
export { LSPClient } from "./client.js";
|
|
22
|
+
export { BUILTIN_SERVERS, TYPESCRIPT_SERVER, PYRIGHT_SERVER, GOPLS_SERVER, RUST_ANALYZER_SERVER, findServersForExtension, getLanguageId, LANGUAGE_MAP, } from "./servers.js";
|
|
23
|
+
export { DiagnosticSeverity as DiagSeverity } from "./types.js";
|
|
24
|
+
// ── Constants ────────────────────────────────────────────────
|
|
25
|
+
const MAX_DIAGNOSTICS_PER_FILE = 20;
|
|
26
|
+
// ── LSPManager ───────────────────────────────────────────────
|
|
27
|
+
export class LSPManager {
|
|
28
|
+
rootDir;
|
|
29
|
+
clients = new Map();
|
|
30
|
+
broken = new Set();
|
|
31
|
+
spawning = new Map();
|
|
32
|
+
customServers = [];
|
|
33
|
+
disabled = false;
|
|
34
|
+
constructor(rootDir) {
|
|
35
|
+
this.rootDir = rootDir;
|
|
36
|
+
}
|
|
37
|
+
// ── Configuration ────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Add custom server configurations (from config file).
|
|
40
|
+
*/
|
|
41
|
+
addServers(servers) {
|
|
42
|
+
this.customServers.push(...servers);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Disable LSP entirely (e.g., from config: `lsp: false`).
|
|
46
|
+
*/
|
|
47
|
+
disable() {
|
|
48
|
+
this.disabled = true;
|
|
49
|
+
this.disposeAll();
|
|
50
|
+
}
|
|
51
|
+
// ── Core Operations ──────────────────────────────────────
|
|
52
|
+
/**
|
|
53
|
+
* Touch a file — notify appropriate LSP servers and optionally
|
|
54
|
+
* wait for diagnostics.
|
|
55
|
+
*
|
|
56
|
+
* Lazily spawns servers on first call for each file type.
|
|
57
|
+
* Skips broken servers silently.
|
|
58
|
+
*/
|
|
59
|
+
async touchFile(filePath, waitForDiagnostics = false) {
|
|
60
|
+
if (this.disabled)
|
|
61
|
+
return;
|
|
62
|
+
const clients = await this.getClientsForFile(filePath);
|
|
63
|
+
if (clients.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
await Promise.all(clients.map((client) => client.touchFile(filePath, waitForDiagnostics).catch(() => {
|
|
66
|
+
// Swallow individual client errors
|
|
67
|
+
})));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get diagnostics for a specific file across all active servers.
|
|
71
|
+
*/
|
|
72
|
+
getDiagnostics(filePath) {
|
|
73
|
+
const allDiags = [];
|
|
74
|
+
for (const client of this.clients.values()) {
|
|
75
|
+
allDiags.push(...client.getDiagnostics(filePath));
|
|
76
|
+
}
|
|
77
|
+
return allDiags;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get error-level diagnostics for a file, formatted for tool output.
|
|
81
|
+
*
|
|
82
|
+
* Returns a string suitable for appending to edit_file results,
|
|
83
|
+
* or empty string if no errors.
|
|
84
|
+
*/
|
|
85
|
+
getErrorDiagnosticsText(filePath) {
|
|
86
|
+
const diags = this.getDiagnostics(filePath);
|
|
87
|
+
const errors = diags.filter((d) => d.severity === 1); // DiagnosticSeverity.Error
|
|
88
|
+
if (errors.length === 0)
|
|
89
|
+
return "";
|
|
90
|
+
const limited = errors.slice(0, MAX_DIAGNOSTICS_PER_FILE);
|
|
91
|
+
const lines = limited.map((d) => formatDiagnostic(d));
|
|
92
|
+
return `\n\nLSP errors detected:\n<diagnostics file="${filePath}">\n${lines.join("\n")}\n</diagnostics>`;
|
|
93
|
+
}
|
|
94
|
+
// ── State Queries ────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Get info about all active clients.
|
|
97
|
+
*/
|
|
98
|
+
getClientInfos() {
|
|
99
|
+
return [...this.clients.values()].map((c) => c.getInfo());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a server is marked as broken.
|
|
103
|
+
*/
|
|
104
|
+
isBroken(serverId) {
|
|
105
|
+
return this.broken.has(serverId);
|
|
106
|
+
}
|
|
107
|
+
// ── Lifecycle ────────────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Dispose all clients and clear state.
|
|
110
|
+
*/
|
|
111
|
+
disposeAll() {
|
|
112
|
+
for (const client of this.clients.values()) {
|
|
113
|
+
client.stop();
|
|
114
|
+
}
|
|
115
|
+
this.clients.clear();
|
|
116
|
+
this.spawning.clear();
|
|
117
|
+
// Don't clear broken — those stay until session restart
|
|
118
|
+
}
|
|
119
|
+
// ── Internal: Client Resolution ──────────────────────────
|
|
120
|
+
async getClientsForFile(filePath) {
|
|
121
|
+
const ext = extname(filePath);
|
|
122
|
+
if (!ext)
|
|
123
|
+
return [];
|
|
124
|
+
// Find servers from built-in + custom
|
|
125
|
+
const builtinServers = findServersForExtension(ext);
|
|
126
|
+
const customServers = this.customServers.filter((s) => s.extensions.includes(ext.toLowerCase()));
|
|
127
|
+
const allServers = [...builtinServers, ...customServers];
|
|
128
|
+
const result = [];
|
|
129
|
+
for (const server of allServers) {
|
|
130
|
+
const key = `${this.rootDir}:${server.id}`;
|
|
131
|
+
// Skip broken servers
|
|
132
|
+
if (this.broken.has(key))
|
|
133
|
+
continue;
|
|
134
|
+
// Return existing client
|
|
135
|
+
const existing = this.clients.get(key);
|
|
136
|
+
if (existing && existing.getState() === "ready") {
|
|
137
|
+
result.push(existing);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Check if already spawning (dedup)
|
|
141
|
+
const inflight = this.spawning.get(key);
|
|
142
|
+
if (inflight) {
|
|
143
|
+
const client = await inflight;
|
|
144
|
+
if (client)
|
|
145
|
+
result.push(client);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Spawn new client
|
|
149
|
+
const spawnTask = this.spawnClient(server, key);
|
|
150
|
+
this.spawning.set(key, spawnTask);
|
|
151
|
+
const client = await spawnTask;
|
|
152
|
+
this.spawning.delete(key);
|
|
153
|
+
if (client)
|
|
154
|
+
result.push(client);
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
async spawnClient(config, key) {
|
|
159
|
+
const client = new LSPClient(config, this.rootDir);
|
|
160
|
+
try {
|
|
161
|
+
await client.start();
|
|
162
|
+
this.clients.set(key, client);
|
|
163
|
+
return client;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Mark as broken — don't retry until session restart
|
|
167
|
+
this.broken.add(key);
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ── Formatting ───────────────────────────────────────────────
|
|
173
|
+
/**
|
|
174
|
+
* Format a diagnostic for human-readable output.
|
|
175
|
+
*/
|
|
176
|
+
export function formatDiagnostic(d) {
|
|
177
|
+
const severity = d.severity === 1 ? "error" : d.severity === 2 ? "warning" : "info";
|
|
178
|
+
const loc = `${d.range.start.line + 1}:${d.range.start.character + 1}`;
|
|
179
|
+
const source = d.source ? ` (${d.source})` : "";
|
|
180
|
+
const code = d.code !== undefined ? ` [${d.code}]` : "";
|
|
181
|
+
return ` ${loc} ${severity}${code}${source}: ${d.message}`;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lsp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Server Configurations — built-in language server definitions.
|
|
3
|
+
*
|
|
4
|
+
* Each server maps file extensions to a language server command.
|
|
5
|
+
* Servers are lazily spawned on first touchFile() for a matching extension.
|
|
6
|
+
*
|
|
7
|
+
* Start with TypeScript (most common for this codebase). Add more later:
|
|
8
|
+
* pyright, gopls, rust-analyzer, etc.
|
|
9
|
+
*/
|
|
10
|
+
import type { LSPServerConfig } from "./types.js";
|
|
11
|
+
export declare const LANGUAGE_MAP: Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* Get the language ID for a file extension.
|
|
14
|
+
* Returns undefined if the extension isn't recognized.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getLanguageId(ext: string): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* TypeScript language server via typescript-language-server.
|
|
19
|
+
*
|
|
20
|
+
* Requires: `typescript-language-server` in PATH or node_modules/.bin
|
|
21
|
+
* Falls back to: `npx typescript-language-server --stdio`
|
|
22
|
+
*/
|
|
23
|
+
export declare const TYPESCRIPT_SERVER: LSPServerConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Pyright language server for Python.
|
|
26
|
+
*
|
|
27
|
+
* Requires: `pyright-langserver` in PATH
|
|
28
|
+
*/
|
|
29
|
+
export declare const PYRIGHT_SERVER: LSPServerConfig;
|
|
30
|
+
/**
|
|
31
|
+
* gopls language server for Go.
|
|
32
|
+
*
|
|
33
|
+
* Requires: `gopls` in PATH
|
|
34
|
+
*/
|
|
35
|
+
export declare const GOPLS_SERVER: LSPServerConfig;
|
|
36
|
+
/**
|
|
37
|
+
* rust-analyzer for Rust.
|
|
38
|
+
*
|
|
39
|
+
* Requires: `rust-analyzer` in PATH
|
|
40
|
+
*/
|
|
41
|
+
export declare const RUST_ANALYZER_SERVER: LSPServerConfig;
|
|
42
|
+
export declare const BUILTIN_SERVERS: LSPServerConfig[];
|
|
43
|
+
/**
|
|
44
|
+
* Find server configs that handle a given file extension.
|
|
45
|
+
* A file can match multiple servers (e.g., .ts → TypeScript + ESLint).
|
|
46
|
+
*/
|
|
47
|
+
export declare function findServersForExtension(ext: string): LSPServerConfig[];
|
|
48
|
+
//# sourceMappingURL=servers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/lsp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyB/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAID;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAM/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,eAM5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,eAM1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAMlC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,eAAe,EAK5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAEtE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Server Configurations — built-in language server definitions.
|
|
3
|
+
*
|
|
4
|
+
* Each server maps file extensions to a language server command.
|
|
5
|
+
* Servers are lazily spawned on first touchFile() for a matching extension.
|
|
6
|
+
*
|
|
7
|
+
* Start with TypeScript (most common for this codebase). Add more later:
|
|
8
|
+
* pyright, gopls, rust-analyzer, etc.
|
|
9
|
+
*/
|
|
10
|
+
// ── Extension → Language ID Map ──────────────────────────────
|
|
11
|
+
export const LANGUAGE_MAP = {
|
|
12
|
+
".ts": "typescript",
|
|
13
|
+
".tsx": "typescriptreact",
|
|
14
|
+
".js": "javascript",
|
|
15
|
+
".jsx": "javascriptreact",
|
|
16
|
+
".mjs": "javascript",
|
|
17
|
+
".cjs": "javascript",
|
|
18
|
+
".mts": "typescript",
|
|
19
|
+
".cts": "typescript",
|
|
20
|
+
".py": "python",
|
|
21
|
+
".go": "go",
|
|
22
|
+
".rs": "rust",
|
|
23
|
+
".java": "java",
|
|
24
|
+
".rb": "ruby",
|
|
25
|
+
".c": "c",
|
|
26
|
+
".cpp": "cpp",
|
|
27
|
+
".h": "c",
|
|
28
|
+
".hpp": "cpp",
|
|
29
|
+
".cs": "csharp",
|
|
30
|
+
".swift": "swift",
|
|
31
|
+
".kt": "kotlin",
|
|
32
|
+
".lua": "lua",
|
|
33
|
+
".zig": "zig",
|
|
34
|
+
".ex": "elixir",
|
|
35
|
+
".exs": "elixir",
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Get the language ID for a file extension.
|
|
39
|
+
* Returns undefined if the extension isn't recognized.
|
|
40
|
+
*/
|
|
41
|
+
export function getLanguageId(ext) {
|
|
42
|
+
return LANGUAGE_MAP[ext.toLowerCase()];
|
|
43
|
+
}
|
|
44
|
+
// ── Built-in Server Configs ──────────────────────────────────
|
|
45
|
+
/**
|
|
46
|
+
* TypeScript language server via typescript-language-server.
|
|
47
|
+
*
|
|
48
|
+
* Requires: `typescript-language-server` in PATH or node_modules/.bin
|
|
49
|
+
* Falls back to: `npx typescript-language-server --stdio`
|
|
50
|
+
*/
|
|
51
|
+
export const TYPESCRIPT_SERVER = {
|
|
52
|
+
id: "typescript",
|
|
53
|
+
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"],
|
|
54
|
+
command: "typescript-language-server",
|
|
55
|
+
args: ["--stdio"],
|
|
56
|
+
languageId: "typescript",
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Pyright language server for Python.
|
|
60
|
+
*
|
|
61
|
+
* Requires: `pyright-langserver` in PATH
|
|
62
|
+
*/
|
|
63
|
+
export const PYRIGHT_SERVER = {
|
|
64
|
+
id: "pyright",
|
|
65
|
+
extensions: [".py"],
|
|
66
|
+
command: "pyright-langserver",
|
|
67
|
+
args: ["--stdio"],
|
|
68
|
+
languageId: "python",
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* gopls language server for Go.
|
|
72
|
+
*
|
|
73
|
+
* Requires: `gopls` in PATH
|
|
74
|
+
*/
|
|
75
|
+
export const GOPLS_SERVER = {
|
|
76
|
+
id: "gopls",
|
|
77
|
+
extensions: [".go"],
|
|
78
|
+
command: "gopls",
|
|
79
|
+
args: ["serve"],
|
|
80
|
+
languageId: "go",
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* rust-analyzer for Rust.
|
|
84
|
+
*
|
|
85
|
+
* Requires: `rust-analyzer` in PATH
|
|
86
|
+
*/
|
|
87
|
+
export const RUST_ANALYZER_SERVER = {
|
|
88
|
+
id: "rust-analyzer",
|
|
89
|
+
extensions: [".rs"],
|
|
90
|
+
command: "rust-analyzer",
|
|
91
|
+
args: [],
|
|
92
|
+
languageId: "rust",
|
|
93
|
+
};
|
|
94
|
+
// ── All Built-in Servers ─────────────────────────────────────
|
|
95
|
+
export const BUILTIN_SERVERS = [
|
|
96
|
+
TYPESCRIPT_SERVER,
|
|
97
|
+
PYRIGHT_SERVER,
|
|
98
|
+
GOPLS_SERVER,
|
|
99
|
+
RUST_ANALYZER_SERVER,
|
|
100
|
+
];
|
|
101
|
+
/**
|
|
102
|
+
* Find server configs that handle a given file extension.
|
|
103
|
+
* A file can match multiple servers (e.g., .ts → TypeScript + ESLint).
|
|
104
|
+
*/
|
|
105
|
+
export function findServersForExtension(ext) {
|
|
106
|
+
return BUILTIN_SERVERS.filter((s) => s.extensions.includes(ext.toLowerCase()));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=servers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../../src/lsp/servers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,gEAAgE;AAEhE,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,gEAAgE;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC1E,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,EAAE,EAAE,SAAS;IACb,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,EAAE,EAAE,OAAO;IACX,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,EAAE,EAAE,eAAe;IACnB,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,MAAM;CACnB,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,oBAAoB;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Protocol Types — minimal subset for diagnostics-only client.
|
|
3
|
+
*
|
|
4
|
+
* Based on the Language Server Protocol specification.
|
|
5
|
+
* Only includes types needed for: initialize, didOpen, didChange,
|
|
6
|
+
* publishDiagnostics. Extended later for symbols, hover, etc.
|
|
7
|
+
*/
|
|
8
|
+
export interface LSPPosition {
|
|
9
|
+
line: number;
|
|
10
|
+
character: number;
|
|
11
|
+
}
|
|
12
|
+
export interface LSPRange {
|
|
13
|
+
start: LSPPosition;
|
|
14
|
+
end: LSPPosition;
|
|
15
|
+
}
|
|
16
|
+
export declare enum DiagnosticSeverity {
|
|
17
|
+
Error = 1,
|
|
18
|
+
Warning = 2,
|
|
19
|
+
Information = 3,
|
|
20
|
+
Hint = 4
|
|
21
|
+
}
|
|
22
|
+
export interface LSPDiagnostic {
|
|
23
|
+
range: LSPRange;
|
|
24
|
+
severity?: DiagnosticSeverity;
|
|
25
|
+
code?: number | string;
|
|
26
|
+
source?: string;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PublishDiagnosticsParams {
|
|
30
|
+
uri: string;
|
|
31
|
+
version?: number;
|
|
32
|
+
diagnostics: LSPDiagnostic[];
|
|
33
|
+
}
|
|
34
|
+
export interface InitializeParams {
|
|
35
|
+
processId: number | null;
|
|
36
|
+
rootUri: string | null;
|
|
37
|
+
capabilities: ClientCapabilities;
|
|
38
|
+
workspaceFolders?: Array<{
|
|
39
|
+
uri: string;
|
|
40
|
+
name: string;
|
|
41
|
+
}> | null;
|
|
42
|
+
initializationOptions?: unknown;
|
|
43
|
+
}
|
|
44
|
+
export interface ClientCapabilities {
|
|
45
|
+
textDocument?: {
|
|
46
|
+
synchronization?: {
|
|
47
|
+
didOpen?: boolean;
|
|
48
|
+
didChange?: boolean;
|
|
49
|
+
};
|
|
50
|
+
publishDiagnostics?: {
|
|
51
|
+
versionSupport?: boolean;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
window?: {
|
|
55
|
+
workDoneProgress?: boolean;
|
|
56
|
+
};
|
|
57
|
+
workspace?: {
|
|
58
|
+
configuration?: boolean;
|
|
59
|
+
workspaceFolders?: {
|
|
60
|
+
supported?: boolean;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface InitializeResult {
|
|
65
|
+
capabilities: ServerCapabilities;
|
|
66
|
+
serverInfo?: {
|
|
67
|
+
name: string;
|
|
68
|
+
version?: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export interface ServerCapabilities {
|
|
72
|
+
textDocumentSync?: number | {
|
|
73
|
+
openClose?: boolean;
|
|
74
|
+
change?: number;
|
|
75
|
+
};
|
|
76
|
+
diagnosticProvider?: unknown;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
export interface TextDocumentItem {
|
|
80
|
+
uri: string;
|
|
81
|
+
languageId: string;
|
|
82
|
+
version: number;
|
|
83
|
+
text: string;
|
|
84
|
+
}
|
|
85
|
+
export interface DidOpenTextDocumentParams {
|
|
86
|
+
textDocument: TextDocumentItem;
|
|
87
|
+
}
|
|
88
|
+
export interface DidChangeTextDocumentParams {
|
|
89
|
+
textDocument: {
|
|
90
|
+
uri: string;
|
|
91
|
+
version: number;
|
|
92
|
+
};
|
|
93
|
+
contentChanges: Array<{
|
|
94
|
+
text: string;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
export interface LSPServerConfig {
|
|
98
|
+
/** Server identifier (e.g., "typescript", "pyright") */
|
|
99
|
+
id: string;
|
|
100
|
+
/** File extensions this server handles */
|
|
101
|
+
extensions: string[];
|
|
102
|
+
/** Spawn command */
|
|
103
|
+
command: string;
|
|
104
|
+
/** Command arguments */
|
|
105
|
+
args?: string[];
|
|
106
|
+
/** Language ID for documents */
|
|
107
|
+
languageId: string;
|
|
108
|
+
/** Initialization options passed to the server */
|
|
109
|
+
initializationOptions?: unknown;
|
|
110
|
+
}
|
|
111
|
+
export type LSPClientState = "disconnected" | "connecting" | "ready" | "error" | "broken";
|
|
112
|
+
export interface LSPClientInfo {
|
|
113
|
+
serverId: string;
|
|
114
|
+
state: LSPClientState;
|
|
115
|
+
rootDir: string;
|
|
116
|
+
serverInfo?: {
|
|
117
|
+
name: string;
|
|
118
|
+
version?: string;
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export interface JsonRpcMessage {
|
|
122
|
+
jsonrpc: "2.0";
|
|
123
|
+
}
|
|
124
|
+
export interface JsonRpcRequest extends JsonRpcMessage {
|
|
125
|
+
id: number;
|
|
126
|
+
method: string;
|
|
127
|
+
params?: unknown;
|
|
128
|
+
}
|
|
129
|
+
export interface JsonRpcResponse extends JsonRpcMessage {
|
|
130
|
+
id: number;
|
|
131
|
+
result?: unknown;
|
|
132
|
+
error?: {
|
|
133
|
+
code: number;
|
|
134
|
+
message: string;
|
|
135
|
+
data?: unknown;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
export interface JsonRpcNotification extends JsonRpcMessage {
|
|
139
|
+
method: string;
|
|
140
|
+
params?: unknown;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lsp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Protocol Types — minimal subset for diagnostics-only client.
|
|
3
|
+
*
|
|
4
|
+
* Based on the Language Server Protocol specification.
|
|
5
|
+
* Only includes types needed for: initialize, didOpen, didChange,
|
|
6
|
+
* publishDiagnostics. Extended later for symbols, hover, etc.
|
|
7
|
+
*/
|
|
8
|
+
// ── Diagnostics ──────────────────────────────────────────────
|
|
9
|
+
export var DiagnosticSeverity;
|
|
10
|
+
(function (DiagnosticSeverity) {
|
|
11
|
+
DiagnosticSeverity[DiagnosticSeverity["Error"] = 1] = "Error";
|
|
12
|
+
DiagnosticSeverity[DiagnosticSeverity["Warning"] = 2] = "Warning";
|
|
13
|
+
DiagnosticSeverity[DiagnosticSeverity["Information"] = 3] = "Information";
|
|
14
|
+
DiagnosticSeverity[DiagnosticSeverity["Hint"] = 4] = "Hint";
|
|
15
|
+
})(DiagnosticSeverity || (DiagnosticSeverity = {}));
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lsp/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,gEAAgE;AAEhE,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6DAAS,CAAA;IACT,iEAAW,CAAA;IACX,yEAAe,CAAA;IACf,2DAAQ,CAAA;AACV,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client — connects to an MCP server, discovers tools, and forwards calls.
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle:
|
|
5
|
+
* 1. connect() — spawn server, perform initialize handshake, list tools
|
|
6
|
+
* 2. listTools() — return discovered tools (cached from connect)
|
|
7
|
+
* 3. callTool(name, args) — forward tool invocation to server
|
|
8
|
+
* 4. disconnect() — gracefully shut down
|
|
9
|
+
*
|
|
10
|
+
* Swarm-aware: A single MCPClient instance can serve multiple swarm agents.
|
|
11
|
+
* Tool calls are stateless — concurrent callers are safe.
|
|
12
|
+
*/
|
|
13
|
+
import type { MCPServerConfig, MCPToolDefinition, MCPCallToolResult, MCPClientState, MCPClientInfo } from "./types.js";
|
|
14
|
+
export declare class MCPClient {
|
|
15
|
+
private config;
|
|
16
|
+
private transport;
|
|
17
|
+
private state;
|
|
18
|
+
private serverInfo;
|
|
19
|
+
private tools;
|
|
20
|
+
private error;
|
|
21
|
+
private onToolsChanged;
|
|
22
|
+
constructor(config: MCPServerConfig, options?: {
|
|
23
|
+
onToolsChanged?: () => void;
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Connect to the MCP server:
|
|
27
|
+
* 1. Spawn the server process via stdio transport
|
|
28
|
+
* 2. Perform the initialize handshake
|
|
29
|
+
* 3. Send initialized notification
|
|
30
|
+
* 4. Discover available tools
|
|
31
|
+
*/
|
|
32
|
+
connect(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Disconnect from the MCP server gracefully.
|
|
35
|
+
*/
|
|
36
|
+
disconnect(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Refresh the tool list from the server.
|
|
39
|
+
*/
|
|
40
|
+
refreshTools(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Return the cached list of available tools.
|
|
43
|
+
*/
|
|
44
|
+
listTools(): MCPToolDefinition[];
|
|
45
|
+
/**
|
|
46
|
+
* Call a tool on the MCP server.
|
|
47
|
+
* Returns the tool result with content array.
|
|
48
|
+
*
|
|
49
|
+
* Concurrency-safe: multiple callers can invoke simultaneously.
|
|
50
|
+
*/
|
|
51
|
+
callTool(name: string, args?: Record<string, unknown>): Promise<MCPCallToolResult>;
|
|
52
|
+
getState(): MCPClientState;
|
|
53
|
+
getInfo(): MCPClientInfo;
|
|
54
|
+
private handleNotification;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,aAAa,EAKd,MAAM,YAAY,CAAC;AAUpB,qBAAa,SAAS;IASlB,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,cAAc,CAA2B;gBAGvC,MAAM,EAAE,eAAe,EAC/B,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE;IAO3C;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;OAEG;IACH,SAAS,IAAI,iBAAiB,EAAE;IAMhC;;;;;OAKG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IA2B7B,QAAQ,IAAI,cAAc;IAI1B,OAAO,IAAI,aAAa;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
|