@journal.one/gateway 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/logger.d.ts +19 -0
- package/dist/common/logger.d.ts.map +1 -0
- package/dist/common/logger.js +52 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/config.d.ts +64 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +103 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +21 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +266 -0
- package/dist/connection.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +32 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-client.d.ts +24 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +91 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/runtime.d.ts +25 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +124 -0
- package/dist/runtime.js.map +1 -0
- package/dist/skill-client.d.ts +18 -0
- package/dist/skill-client.d.ts.map +1 -0
- package/dist/skill-client.js +75 -0
- package/dist/skill-client.js.map +1 -0
- package/dist/types/errors.d.ts +16 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +13 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/integrations.d.ts +165 -0
- package/dist/types/integrations.d.ts.map +1 -0
- package/dist/types/integrations.js +32 -0
- package/dist/types/integrations.js.map +1 -0
- package/dist/types/messages.d.ts +570 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +68 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/provider.d.ts +16 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +7 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/skills.d.ts +13 -0
- package/dist/types/skills.d.ts.map +1 -0
- package/dist/types/skills.js +6 -0
- package/dist/types/skills.js.map +1 -0
- package/dist/version-hash.d.ts +8 -0
- package/dist/version-hash.d.ts.map +1 -0
- package/dist/version-hash.js +23 -0
- package/dist/version-hash.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
3
|
+
import { ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { VERSION } from "./version.js";
|
|
5
|
+
import { EventEmitter } from "node:events";
|
|
6
|
+
export class McpClient extends EventEmitter {
|
|
7
|
+
definition;
|
|
8
|
+
env;
|
|
9
|
+
logger;
|
|
10
|
+
client = null;
|
|
11
|
+
transport = null;
|
|
12
|
+
running = false;
|
|
13
|
+
constructor(definition, env, logger) {
|
|
14
|
+
super();
|
|
15
|
+
this.definition = definition;
|
|
16
|
+
this.env = env;
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
}
|
|
19
|
+
async start() {
|
|
20
|
+
this.logger.info(`Starting MCP process for integration "${this.definition.id}"`, {
|
|
21
|
+
command: this.definition.command,
|
|
22
|
+
args: this.definition.args,
|
|
23
|
+
});
|
|
24
|
+
this.transport = new StdioClientTransport({
|
|
25
|
+
command: this.definition.command,
|
|
26
|
+
args: this.definition.args,
|
|
27
|
+
env: { ...process.env, ...this.env },
|
|
28
|
+
});
|
|
29
|
+
this.client = new Client({ name: `journal-gateway/${this.definition.id}`, version: VERSION }, { capabilities: {} });
|
|
30
|
+
this.transport.onclose = () => {
|
|
31
|
+
if (this.running) {
|
|
32
|
+
this.running = false;
|
|
33
|
+
const err = new Error(`MCP process for integration "${this.definition.id}" exited unexpectedly`);
|
|
34
|
+
this.logger.error(err.message);
|
|
35
|
+
this.emit("crash", err);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
await this.client.connect(this.transport);
|
|
39
|
+
this.running = true;
|
|
40
|
+
this.client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
|
|
41
|
+
this.logger.info(`MCP server "${this.definition.id}" reported tools changed`);
|
|
42
|
+
this.emit("tools_changed");
|
|
43
|
+
});
|
|
44
|
+
this.logger.info(`MCP process for integration "${this.definition.id}" started successfully`);
|
|
45
|
+
}
|
|
46
|
+
async listTools() {
|
|
47
|
+
if (!this.client)
|
|
48
|
+
throw new Error("MCP process not started");
|
|
49
|
+
const result = await this.client.listTools();
|
|
50
|
+
return result.tools.map((tool) => ({
|
|
51
|
+
name: tool.name,
|
|
52
|
+
description: tool.description ?? "",
|
|
53
|
+
inputSchema: tool.inputSchema,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
async callTool(name, args) {
|
|
57
|
+
if (!this.client)
|
|
58
|
+
throw new Error("MCP process not started");
|
|
59
|
+
const result = await this.client.callTool({ name, arguments: args });
|
|
60
|
+
const content = result.content.map((block) => {
|
|
61
|
+
if (block.type === "image") {
|
|
62
|
+
return {
|
|
63
|
+
type: "image",
|
|
64
|
+
data: block.data ?? "",
|
|
65
|
+
mimeType: block.mimeType ?? "image/png",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return { type: "text", text: block.text ?? "" };
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
content,
|
|
72
|
+
isError: result.isError === true ? true : undefined,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async stop() {
|
|
76
|
+
this.running = false;
|
|
77
|
+
if (this.transport) {
|
|
78
|
+
await this.transport.close();
|
|
79
|
+
this.transport = null;
|
|
80
|
+
}
|
|
81
|
+
this.client = null;
|
|
82
|
+
this.logger.info(`MCP process for integration "${this.definition.id}" stopped`);
|
|
83
|
+
}
|
|
84
|
+
isRunning() {
|
|
85
|
+
return this.running;
|
|
86
|
+
}
|
|
87
|
+
get integrationId() {
|
|
88
|
+
return this.definition.id;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Integration, type Skill, type ToolResult, type IntegrationProvider, type GatewayVersions } from "@journal.one/gateway-protocol";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import type { RuntimeConfig } from "./config.js";
|
|
4
|
+
export interface RuntimeEvents {
|
|
5
|
+
versions_changed: [];
|
|
6
|
+
}
|
|
7
|
+
export declare class Runtime extends EventEmitter<RuntimeEvents> implements IntegrationProvider {
|
|
8
|
+
private config;
|
|
9
|
+
private processes;
|
|
10
|
+
private logger;
|
|
11
|
+
private skillClient;
|
|
12
|
+
private mcpVersion;
|
|
13
|
+
private skillsVersion;
|
|
14
|
+
private changeDebounceTimer;
|
|
15
|
+
constructor(config: RuntimeConfig);
|
|
16
|
+
start(): Promise<void>;
|
|
17
|
+
getVersions(): GatewayVersions;
|
|
18
|
+
getTools(): Promise<Integration[]>;
|
|
19
|
+
getSkills(): Skill[];
|
|
20
|
+
callTool(integrationId: string, toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
private scheduleChangeCheck;
|
|
23
|
+
private recomputeVersions;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,EAAE,CAAC;CACtB;AAED,qBAAa,OAAQ,SAAQ,YAAY,CAAC,aAAa,CAAE,YAAW,mBAAmB;IAQzE,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,mBAAmB,CAA8C;gBAErD,MAAM,EAAE,aAAa;IAMnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B,WAAW,IAAI,eAAe;IAOxB,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAmBxC,SAAS,IAAI,KAAK,EAAE;IAId,QAAQ,CACZ,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC;IAYhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,OAAO,CAAC,mBAAmB;YAWb,iBAAiB;CAgBhC"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { IntegrationNotFoundError, } from "@journal.one/gateway-protocol";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import { Logger } from "./common/logger.js";
|
|
4
|
+
import { McpClient } from "./mcp-client.js";
|
|
5
|
+
import { SkillClient } from "./skill-client.js";
|
|
6
|
+
import { computeVersionHash } from "./version-hash.js";
|
|
7
|
+
export class Runtime extends EventEmitter {
|
|
8
|
+
config;
|
|
9
|
+
processes = new Map();
|
|
10
|
+
logger;
|
|
11
|
+
skillClient;
|
|
12
|
+
mcpVersion = null;
|
|
13
|
+
skillsVersion = null;
|
|
14
|
+
changeDebounceTimer = null;
|
|
15
|
+
constructor(config) {
|
|
16
|
+
super();
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.logger = new Logger(config.logLevel);
|
|
19
|
+
this.skillClient = new SkillClient(config.skillsDir);
|
|
20
|
+
}
|
|
21
|
+
async start() {
|
|
22
|
+
this.logger.info("Starting runtime", {
|
|
23
|
+
mcpServers: this.config.mcpServers.map((s) => s.id),
|
|
24
|
+
...(this.config.skillsDir ? { skillsDir: this.config.skillsDir } : {}),
|
|
25
|
+
});
|
|
26
|
+
for (const definition of this.config.mcpServers) {
|
|
27
|
+
const env = this.config.mcpEnvVars.get(definition.id) ?? {};
|
|
28
|
+
const mcpClient = new McpClient(definition, env, this.logger);
|
|
29
|
+
mcpClient.on("crash", (error) => {
|
|
30
|
+
this.logger.error(`Integration "${definition.id}" crashed`, {
|
|
31
|
+
error: error.message,
|
|
32
|
+
});
|
|
33
|
+
this.scheduleChangeCheck();
|
|
34
|
+
});
|
|
35
|
+
mcpClient.on("tools_changed", () => {
|
|
36
|
+
this.logger.info(`Integration "${definition.id}" tools changed`);
|
|
37
|
+
this.scheduleChangeCheck();
|
|
38
|
+
});
|
|
39
|
+
await mcpClient.start();
|
|
40
|
+
this.processes.set(definition.id, mcpClient);
|
|
41
|
+
}
|
|
42
|
+
await this.skillClient.load();
|
|
43
|
+
this.skillClient.on("skills_changed", () => {
|
|
44
|
+
this.logger.info("Skills changed on disk");
|
|
45
|
+
this.scheduleChangeCheck();
|
|
46
|
+
});
|
|
47
|
+
this.skillClient.startWatching();
|
|
48
|
+
// Compute initial versions
|
|
49
|
+
await this.recomputeVersions();
|
|
50
|
+
this.logger.info("Runtime started", {
|
|
51
|
+
integrationCount: this.processes.size,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getVersions() {
|
|
55
|
+
return {
|
|
56
|
+
mcpVersion: this.mcpVersion,
|
|
57
|
+
skillsVersion: this.skillsVersion,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async getTools() {
|
|
61
|
+
const integrations = [];
|
|
62
|
+
for (const definition of this.config.mcpServers) {
|
|
63
|
+
const mcpClient = this.processes.get(definition.id);
|
|
64
|
+
if (!mcpClient || !mcpClient.isRunning())
|
|
65
|
+
continue;
|
|
66
|
+
const tools = await mcpClient.listTools();
|
|
67
|
+
integrations.push({
|
|
68
|
+
id: definition.id,
|
|
69
|
+
name: definition.name,
|
|
70
|
+
description: definition.description,
|
|
71
|
+
tools,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return integrations;
|
|
75
|
+
}
|
|
76
|
+
getSkills() {
|
|
77
|
+
return this.skillClient.getSkills();
|
|
78
|
+
}
|
|
79
|
+
async callTool(integrationId, toolName, args) {
|
|
80
|
+
const mcpClient = this.processes.get(integrationId);
|
|
81
|
+
if (!mcpClient) {
|
|
82
|
+
throw new IntegrationNotFoundError(integrationId);
|
|
83
|
+
}
|
|
84
|
+
if (!mcpClient.isRunning()) {
|
|
85
|
+
throw new IntegrationNotFoundError(integrationId, "Integration process is not running");
|
|
86
|
+
}
|
|
87
|
+
return mcpClient.callTool(toolName, args);
|
|
88
|
+
}
|
|
89
|
+
async stop() {
|
|
90
|
+
this.logger.info("Stopping runtime");
|
|
91
|
+
if (this.changeDebounceTimer) {
|
|
92
|
+
clearTimeout(this.changeDebounceTimer);
|
|
93
|
+
this.changeDebounceTimer = null;
|
|
94
|
+
}
|
|
95
|
+
this.skillClient.stopWatching();
|
|
96
|
+
const stops = Array.from(this.processes.values()).map((p) => p.stop());
|
|
97
|
+
await Promise.allSettled(stops);
|
|
98
|
+
this.processes.clear();
|
|
99
|
+
this.logger.info("Runtime stopped");
|
|
100
|
+
}
|
|
101
|
+
scheduleChangeCheck() {
|
|
102
|
+
if (this.changeDebounceTimer)
|
|
103
|
+
clearTimeout(this.changeDebounceTimer);
|
|
104
|
+
this.changeDebounceTimer = setTimeout(async () => {
|
|
105
|
+
this.changeDebounceTimer = null;
|
|
106
|
+
const changed = await this.recomputeVersions();
|
|
107
|
+
if (changed) {
|
|
108
|
+
this.emit("versions_changed");
|
|
109
|
+
}
|
|
110
|
+
}, 500);
|
|
111
|
+
}
|
|
112
|
+
async recomputeVersions() {
|
|
113
|
+
const mcpIntegrations = await this.getTools();
|
|
114
|
+
const skillIntegrations = this.skillClient.getIntegrations();
|
|
115
|
+
const newMcpVersion = computeVersionHash(mcpIntegrations);
|
|
116
|
+
const newSkillsVersion = computeVersionHash(skillIntegrations);
|
|
117
|
+
const changed = newMcpVersion !== this.mcpVersion ||
|
|
118
|
+
newSkillsVersion !== this.skillsVersion;
|
|
119
|
+
this.mcpVersion = newMcpVersion;
|
|
120
|
+
this.skillsVersion = newSkillsVersion;
|
|
121
|
+
return changed;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { Skill, Integration } from "@journal.one/gateway-protocol";
|
|
3
|
+
export interface SkillClientEvents {
|
|
4
|
+
skills_changed: [];
|
|
5
|
+
}
|
|
6
|
+
export declare class SkillClient extends EventEmitter<SkillClientEvents> {
|
|
7
|
+
private skillsDir;
|
|
8
|
+
private skills;
|
|
9
|
+
private watcher;
|
|
10
|
+
private debounceTimer;
|
|
11
|
+
constructor(skillsDir: string | null);
|
|
12
|
+
load(): Promise<void>;
|
|
13
|
+
startWatching(): void;
|
|
14
|
+
stopWatching(): void;
|
|
15
|
+
getSkills(): Skill[];
|
|
16
|
+
getIntegrations(): Integration[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=skill-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-client.d.ts","sourceRoot":"","sources":["../src/skill-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,EAAE,CAAC;CACpB;AAED,qBAAa,WAAY,SAAQ,YAAY,CAAC,iBAAiB,CAAC;IAKlD,OAAO,CAAC,SAAS;IAJ7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAA8C;gBAE/C,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,aAAa,IAAI,IAAI;IAerB,YAAY,IAAI,IAAI;IAWpB,SAAS,IAAI,KAAK,EAAE;IAIpB,eAAe,IAAI,WAAW,EAAE;CAYjC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { watch } from "node:fs";
|
|
3
|
+
import { join, basename } from "node:path";
|
|
4
|
+
import { EventEmitter } from "node:events";
|
|
5
|
+
export class SkillClient extends EventEmitter {
|
|
6
|
+
skillsDir;
|
|
7
|
+
skills = [];
|
|
8
|
+
watcher = null;
|
|
9
|
+
debounceTimer = null;
|
|
10
|
+
constructor(skillsDir) {
|
|
11
|
+
super();
|
|
12
|
+
this.skillsDir = skillsDir;
|
|
13
|
+
}
|
|
14
|
+
async load() {
|
|
15
|
+
if (!this.skillsDir) {
|
|
16
|
+
this.skills = [];
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
let files;
|
|
20
|
+
try {
|
|
21
|
+
const entries = await readdir(this.skillsDir);
|
|
22
|
+
files = entries.filter((f) => f.endsWith(".md"));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
this.skills = [];
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.skills = await Promise.all(files.map(async (file) => ({
|
|
29
|
+
id: basename(file, ".md"),
|
|
30
|
+
content: await readFile(join(this.skillsDir, file), "utf-8"),
|
|
31
|
+
})));
|
|
32
|
+
}
|
|
33
|
+
startWatching() {
|
|
34
|
+
if (this.watcher || !this.skillsDir)
|
|
35
|
+
return;
|
|
36
|
+
this.watcher = watch(this.skillsDir, (eventType, filename) => {
|
|
37
|
+
if (!filename || !filename.endsWith(".md"))
|
|
38
|
+
return;
|
|
39
|
+
if (this.debounceTimer)
|
|
40
|
+
clearTimeout(this.debounceTimer);
|
|
41
|
+
this.debounceTimer = setTimeout(async () => {
|
|
42
|
+
this.debounceTimer = null;
|
|
43
|
+
await this.load();
|
|
44
|
+
this.emit("skills_changed");
|
|
45
|
+
}, 500);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
stopWatching() {
|
|
49
|
+
if (this.debounceTimer) {
|
|
50
|
+
clearTimeout(this.debounceTimer);
|
|
51
|
+
this.debounceTimer = null;
|
|
52
|
+
}
|
|
53
|
+
if (this.watcher) {
|
|
54
|
+
this.watcher.close();
|
|
55
|
+
this.watcher = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
getSkills() {
|
|
59
|
+
return this.skills;
|
|
60
|
+
}
|
|
61
|
+
getIntegrations() {
|
|
62
|
+
if (this.skills.length === 0)
|
|
63
|
+
return [];
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
id: "skills",
|
|
67
|
+
name: "Skills",
|
|
68
|
+
description: `Loaded from ${this.skillsDir}`,
|
|
69
|
+
tools: [],
|
|
70
|
+
skills: this.skills,
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=skill-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-client.js","sourceRoot":"","sources":["../src/skill-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const GATEWAY_ERROR_CODES: readonly ["INTEGRATION_NOT_FOUND", "TOOL_NOT_FOUND", "EXECUTION_FAILED", "TIMEOUT"];
|
|
3
|
+
export type GatewayErrorCode = (typeof GATEWAY_ERROR_CODES)[number];
|
|
4
|
+
export declare const GatewayErrorCodeSchema: z.ZodEnum<["INTEGRATION_NOT_FOUND", "TOOL_NOT_FOUND", "EXECUTION_FAILED", "TIMEOUT"]>;
|
|
5
|
+
export declare const GatewayErrorSchema: z.ZodObject<{
|
|
6
|
+
code: z.ZodEnum<["INTEGRATION_NOT_FOUND", "TOOL_NOT_FOUND", "EXECUTION_FAILED", "TIMEOUT"]>;
|
|
7
|
+
message: z.ZodString;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
code: "INTEGRATION_NOT_FOUND" | "TOOL_NOT_FOUND" | "EXECUTION_FAILED" | "TIMEOUT";
|
|
10
|
+
message: string;
|
|
11
|
+
}, {
|
|
12
|
+
code: "INTEGRATION_NOT_FOUND" | "TOOL_NOT_FOUND" | "EXECUTION_FAILED" | "TIMEOUT";
|
|
13
|
+
message: string;
|
|
14
|
+
}>;
|
|
15
|
+
export type GatewayError = z.infer<typeof GatewayErrorSchema>;
|
|
16
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,qFAKtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,sBAAsB,uFAA8B,CAAC;AAElE,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const GATEWAY_ERROR_CODES = [
|
|
3
|
+
"INTEGRATION_NOT_FOUND",
|
|
4
|
+
"TOOL_NOT_FOUND",
|
|
5
|
+
"EXECUTION_FAILED",
|
|
6
|
+
"TIMEOUT",
|
|
7
|
+
];
|
|
8
|
+
export const GatewayErrorCodeSchema = z.enum(GATEWAY_ERROR_CODES);
|
|
9
|
+
export const GatewayErrorSchema = z.object({
|
|
10
|
+
code: GatewayErrorCodeSchema,
|
|
11
|
+
message: z.string(),
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;CACD,CAAC;AAIX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { GATEWAY_ERROR_CODES, GatewayErrorCodeSchema, GatewayErrorSchema, type GatewayError, type GatewayErrorCode, } from "./errors.js";
|
|
2
|
+
export { SkillSchema, type Skill } from "./skills.js";
|
|
3
|
+
export { ToolDefinitionSchema, IntegrationSchema, TextContentSchema, ImageContentSchema, ContentBlockSchema, ToolResultSchema, type ToolDefinition, type Integration, type TextContent, type ImageContent, type ContentBlock, type ToolResult, } from "./integrations.js";
|
|
4
|
+
export { AuthenticateMessageSchema, RegisterMessageSchema, ToolResultMessageSchema, ToolErrorMessageSchema, PongMessageSchema, GatewayMessageSchema, AuthenticatedMessageSchema, AuthErrorMessageSchema, RegisteredMessageSchema, ToolCallMessageSchema, PingMessageSchema, ServiceMessageSchema, type AuthenticateMessage, type RegisterMessage, type ToolResultMessage, type ToolErrorMessage, type PongMessage, type GatewayMessage, type AuthenticatedMessage, type AuthErrorMessage, type RegisteredMessage, type ToolCallMessage, type PingMessage, type ServiceMessage, } from "./messages.js";
|
|
5
|
+
export type { IntegrationProvider, GatewayConfig } from "./provider.js";
|
|
6
|
+
export { IntegrationNotFoundError } from "./provider.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { GATEWAY_ERROR_CODES, GatewayErrorCodeSchema, GatewayErrorSchema, } from "./errors.js";
|
|
2
|
+
export { SkillSchema } from "./skills.js";
|
|
3
|
+
export { ToolDefinitionSchema, IntegrationSchema, TextContentSchema, ImageContentSchema, ContentBlockSchema, ToolResultSchema, } from "./integrations.js";
|
|
4
|
+
export { AuthenticateMessageSchema, RegisterMessageSchema, ToolResultMessageSchema, ToolErrorMessageSchema, PongMessageSchema, GatewayMessageSchema, AuthenticatedMessageSchema, AuthErrorMessageSchema, RegisteredMessageSchema, ToolCallMessageSchema, PingMessageSchema, ServiceMessageSchema, } from "./messages.js";
|
|
5
|
+
export { IntegrationNotFoundError } from "./provider.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAEtD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GAOjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GAarB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ToolDefinitionSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
description: z.ZodString;
|
|
5
|
+
inputSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: Record<string, unknown>;
|
|
10
|
+
}, {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
inputSchema: Record<string, unknown>;
|
|
14
|
+
}>;
|
|
15
|
+
export type ToolDefinition = z.infer<typeof ToolDefinitionSchema>;
|
|
16
|
+
export declare const IntegrationSchema: z.ZodObject<{
|
|
17
|
+
id: z.ZodString;
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
description: z.ZodString;
|
|
20
|
+
tools: z.ZodArray<z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
description: z.ZodString;
|
|
23
|
+
inputSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
inputSchema: Record<string, unknown>;
|
|
28
|
+
}, {
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
inputSchema: Record<string, unknown>;
|
|
32
|
+
}>, "many">;
|
|
33
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
content: z.ZodString;
|
|
36
|
+
}, "strip", z.ZodTypeAny, {
|
|
37
|
+
id: string;
|
|
38
|
+
content: string;
|
|
39
|
+
}, {
|
|
40
|
+
id: string;
|
|
41
|
+
content: string;
|
|
42
|
+
}>, "many">>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
tools: {
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
inputSchema: Record<string, unknown>;
|
|
51
|
+
}[];
|
|
52
|
+
skills?: {
|
|
53
|
+
id: string;
|
|
54
|
+
content: string;
|
|
55
|
+
}[] | undefined;
|
|
56
|
+
}, {
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
description: string;
|
|
60
|
+
tools: {
|
|
61
|
+
name: string;
|
|
62
|
+
description: string;
|
|
63
|
+
inputSchema: Record<string, unknown>;
|
|
64
|
+
}[];
|
|
65
|
+
skills?: {
|
|
66
|
+
id: string;
|
|
67
|
+
content: string;
|
|
68
|
+
}[] | undefined;
|
|
69
|
+
}>;
|
|
70
|
+
export type Integration = z.infer<typeof IntegrationSchema>;
|
|
71
|
+
export declare const TextContentSchema: z.ZodObject<{
|
|
72
|
+
type: z.ZodLiteral<"text">;
|
|
73
|
+
text: z.ZodString;
|
|
74
|
+
}, "strip", z.ZodTypeAny, {
|
|
75
|
+
type: "text";
|
|
76
|
+
text: string;
|
|
77
|
+
}, {
|
|
78
|
+
type: "text";
|
|
79
|
+
text: string;
|
|
80
|
+
}>;
|
|
81
|
+
export type TextContent = z.infer<typeof TextContentSchema>;
|
|
82
|
+
export declare const ImageContentSchema: z.ZodObject<{
|
|
83
|
+
type: z.ZodLiteral<"image">;
|
|
84
|
+
data: z.ZodString;
|
|
85
|
+
mimeType: z.ZodString;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
type: "image";
|
|
88
|
+
data: string;
|
|
89
|
+
mimeType: string;
|
|
90
|
+
}, {
|
|
91
|
+
type: "image";
|
|
92
|
+
data: string;
|
|
93
|
+
mimeType: string;
|
|
94
|
+
}>;
|
|
95
|
+
export type ImageContent = z.infer<typeof ImageContentSchema>;
|
|
96
|
+
export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
97
|
+
type: z.ZodLiteral<"text">;
|
|
98
|
+
text: z.ZodString;
|
|
99
|
+
}, "strip", z.ZodTypeAny, {
|
|
100
|
+
type: "text";
|
|
101
|
+
text: string;
|
|
102
|
+
}, {
|
|
103
|
+
type: "text";
|
|
104
|
+
text: string;
|
|
105
|
+
}>, z.ZodObject<{
|
|
106
|
+
type: z.ZodLiteral<"image">;
|
|
107
|
+
data: z.ZodString;
|
|
108
|
+
mimeType: z.ZodString;
|
|
109
|
+
}, "strip", z.ZodTypeAny, {
|
|
110
|
+
type: "image";
|
|
111
|
+
data: string;
|
|
112
|
+
mimeType: string;
|
|
113
|
+
}, {
|
|
114
|
+
type: "image";
|
|
115
|
+
data: string;
|
|
116
|
+
mimeType: string;
|
|
117
|
+
}>]>;
|
|
118
|
+
export type ContentBlock = z.infer<typeof ContentBlockSchema>;
|
|
119
|
+
export declare const ToolResultSchema: z.ZodObject<{
|
|
120
|
+
content: z.ZodArray<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
121
|
+
type: z.ZodLiteral<"text">;
|
|
122
|
+
text: z.ZodString;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
type: "text";
|
|
125
|
+
text: string;
|
|
126
|
+
}, {
|
|
127
|
+
type: "text";
|
|
128
|
+
text: string;
|
|
129
|
+
}>, z.ZodObject<{
|
|
130
|
+
type: z.ZodLiteral<"image">;
|
|
131
|
+
data: z.ZodString;
|
|
132
|
+
mimeType: z.ZodString;
|
|
133
|
+
}, "strip", z.ZodTypeAny, {
|
|
134
|
+
type: "image";
|
|
135
|
+
data: string;
|
|
136
|
+
mimeType: string;
|
|
137
|
+
}, {
|
|
138
|
+
type: "image";
|
|
139
|
+
data: string;
|
|
140
|
+
mimeType: string;
|
|
141
|
+
}>]>, "many">;
|
|
142
|
+
isError: z.ZodOptional<z.ZodBoolean>;
|
|
143
|
+
}, "strip", z.ZodTypeAny, {
|
|
144
|
+
content: ({
|
|
145
|
+
type: "text";
|
|
146
|
+
text: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: "image";
|
|
149
|
+
data: string;
|
|
150
|
+
mimeType: string;
|
|
151
|
+
})[];
|
|
152
|
+
isError?: boolean | undefined;
|
|
153
|
+
}, {
|
|
154
|
+
content: ({
|
|
155
|
+
type: "text";
|
|
156
|
+
text: string;
|
|
157
|
+
} | {
|
|
158
|
+
type: "image";
|
|
159
|
+
data: string;
|
|
160
|
+
mimeType: string;
|
|
161
|
+
})[];
|
|
162
|
+
isError?: boolean | undefined;
|
|
163
|
+
}>;
|
|
164
|
+
export type ToolResult = z.infer<typeof ToolResultSchema>;
|
|
165
|
+
//# sourceMappingURL=integrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/types/integrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;IAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SkillSchema } from "./skills.js";
|
|
3
|
+
export const ToolDefinitionSchema = z.object({
|
|
4
|
+
name: z.string(),
|
|
5
|
+
description: z.string(),
|
|
6
|
+
inputSchema: z.record(z.unknown()),
|
|
7
|
+
});
|
|
8
|
+
export const IntegrationSchema = z.object({
|
|
9
|
+
id: z.string(),
|
|
10
|
+
name: z.string(),
|
|
11
|
+
description: z.string(),
|
|
12
|
+
tools: z.array(ToolDefinitionSchema),
|
|
13
|
+
skills: z.array(SkillSchema).optional(),
|
|
14
|
+
});
|
|
15
|
+
export const TextContentSchema = z.object({
|
|
16
|
+
type: z.literal("text"),
|
|
17
|
+
text: z.string(),
|
|
18
|
+
});
|
|
19
|
+
export const ImageContentSchema = z.object({
|
|
20
|
+
type: z.literal("image"),
|
|
21
|
+
data: z.string(),
|
|
22
|
+
mimeType: z.string(),
|
|
23
|
+
});
|
|
24
|
+
export const ContentBlockSchema = z.discriminatedUnion("type", [
|
|
25
|
+
TextContentSchema,
|
|
26
|
+
ImageContentSchema,
|
|
27
|
+
]);
|
|
28
|
+
export const ToolResultSchema = z.object({
|
|
29
|
+
content: z.array(ContentBlockSchema),
|
|
30
|
+
isError: z.boolean().optional(),
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=integrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/types/integrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CACnC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,iBAAiB;IACjB,kBAAkB;CACnB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC"}
|