opencode-graphiti 0.1.11 → 0.1.12
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/esm/_dnt.polyfills.d.ts +99 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +127 -1
- package/esm/_dnt.shims.d.ts +6 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +61 -0
- package/esm/src/config.d.ts +14 -10
- package/esm/src/config.d.ts.map +1 -1
- package/esm/src/config.js +103 -43
- package/esm/src/index.d.ts.map +1 -1
- package/esm/src/index.js +12 -6
- package/esm/src/services/client.d.ts +15 -31
- package/esm/src/services/client.d.ts.map +1 -1
- package/esm/src/services/client.js +77 -139
- package/esm/src/services/connection-manager.d.ts +97 -0
- package/esm/src/services/connection-manager.d.ts.map +1 -0
- package/esm/src/services/connection-manager.js +535 -0
- package/esm/src/services/logger.d.ts +2 -0
- package/esm/src/services/logger.d.ts.map +1 -1
- package/esm/src/services/logger.js +29 -3
- package/esm/src/utils.d.ts.map +1 -1
- package/esm/src/utils.js +10 -2
- package/package.json +2 -2
- package/script/_dnt.polyfills.d.ts +99 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +128 -0
- package/script/_dnt.shims.d.ts +6 -0
- package/script/_dnt.shims.d.ts.map +1 -0
- package/script/_dnt.shims.js +65 -0
- package/script/src/config.d.ts +14 -10
- package/script/src/config.d.ts.map +1 -1
- package/script/src/config.js +106 -76
- package/script/src/index.d.ts.map +1 -1
- package/script/src/index.js +12 -6
- package/script/src/services/client.d.ts +15 -31
- package/script/src/services/client.d.ts.map +1 -1
- package/script/src/services/client.js +77 -142
- package/script/src/services/connection-manager.d.ts +97 -0
- package/script/src/services/connection-manager.d.ts.map +1 -0
- package/script/src/services/connection-manager.js +549 -0
- package/script/src/services/logger.d.ts +2 -0
- package/script/src/services/logger.d.ts.map +1 -1
- package/script/src/services/logger.js +65 -7
- package/script/src/utils.d.ts.map +1 -1
- package/script/src/utils.js +10 -2
|
@@ -1,37 +1,27 @@
|
|
|
1
|
+
import { type GraphitiToolCaller } from "./connection-manager.js";
|
|
1
2
|
import type { GraphitiEpisode, GraphitiFact, GraphitiNode } from "../types/index.js";
|
|
2
3
|
/**
|
|
3
|
-
* Graphiti
|
|
4
|
-
* and persisting episodes with basic reconnection handling.
|
|
4
|
+
* Graphiti domain adapter over the connection manager.
|
|
5
5
|
*/
|
|
6
6
|
export declare class GraphitiClient {
|
|
7
|
-
private
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Create a Graphiti client bound to the given MCP endpoint URL.
|
|
13
|
-
*/
|
|
14
|
-
constructor(endpoint: string);
|
|
15
|
-
/** Create a fresh MCP Client and Transport pair. */
|
|
16
|
-
private createClientAndTransport;
|
|
17
|
-
/**
|
|
18
|
-
* Establish a connection to the Graphiti MCP server.
|
|
19
|
-
* Creates a fresh Client/Transport if a previous attempt failed.
|
|
20
|
-
*/
|
|
7
|
+
private readonly toolCaller;
|
|
8
|
+
constructor(endpointOrManager: string | GraphitiToolCaller);
|
|
9
|
+
start(): void;
|
|
10
|
+
stop(): Promise<void>;
|
|
21
11
|
connect(): Promise<boolean>;
|
|
22
|
-
|
|
23
|
-
* Close the underlying MCP client connection.
|
|
24
|
-
*/
|
|
25
|
-
disconnect(): Promise<void>;
|
|
26
|
-
private callTool;
|
|
27
|
-
private isSessionExpired;
|
|
28
|
-
private isRequestTimeout;
|
|
29
|
-
private reconnect;
|
|
12
|
+
ready(timeoutMs?: number): Promise<boolean>;
|
|
30
13
|
/**
|
|
31
14
|
* Parse MCP tool results into JSON when possible.
|
|
32
15
|
* Public for testing.
|
|
33
16
|
*/
|
|
34
17
|
parseToolResult(result: unknown): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Extract an array from a tool result that may be a bare array or a
|
|
20
|
+
* wrapped-array response object (`{ [key]: T[] }`).
|
|
21
|
+
* Returns the array when found, otherwise `null`.
|
|
22
|
+
* Public for testing.
|
|
23
|
+
*/
|
|
24
|
+
parseWrappedArray<T>(result: unknown, wrappedKey: string): T[] | null;
|
|
35
25
|
/**
|
|
36
26
|
* Add an episode to Graphiti memory.
|
|
37
27
|
*/
|
|
@@ -42,13 +32,6 @@ export declare class GraphitiClient {
|
|
|
42
32
|
source?: "text" | "json" | "message";
|
|
43
33
|
sourceDescription?: string;
|
|
44
34
|
}): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Extract an array from a tool result that may be a bare array or a
|
|
47
|
-
* wrapped-array response object (`{ [key]: T[] }`).
|
|
48
|
-
* Returns the array when found, otherwise `null`.
|
|
49
|
-
* Public for testing.
|
|
50
|
-
*/
|
|
51
|
-
parseWrappedArray<T>(result: unknown, wrappedKey: string): T[] | null;
|
|
52
35
|
/**
|
|
53
36
|
* Search Graphiti facts matching the provided query.
|
|
54
37
|
*/
|
|
@@ -76,5 +59,6 @@ export declare class GraphitiClient {
|
|
|
76
59
|
* Check whether the Graphiti MCP server is reachable.
|
|
77
60
|
*/
|
|
78
61
|
getStatus(): Promise<boolean>;
|
|
62
|
+
private callTool;
|
|
79
63
|
}
|
|
80
64
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/src/services/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/src/services/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EAIxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,iBAAiB,EAAE,MAAM,GAAG,kBAAkB;IAU1D,KAAK,IAAI,IAAI;IAIP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAK3B,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAyBzC;;;;;OAKG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI;IAYrE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BjB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+B3B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+B3B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgC9B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;YASrB,QAAQ;CAOvB"}
|
|
@@ -1,148 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.GraphitiClient = void 0;
|
|
7
|
-
const
|
|
8
|
-
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
9
|
-
const deno_js_1 = __importDefault(require("../../deno.js"));
|
|
4
|
+
const connection_manager_js_1 = require("./connection-manager.js");
|
|
10
5
|
const logger_js_1 = require("./logger.js");
|
|
11
6
|
const sdk_normalize_js_1 = require("./sdk-normalize.js");
|
|
12
7
|
/**
|
|
13
|
-
* Graphiti
|
|
14
|
-
* and persisting episodes with basic reconnection handling.
|
|
8
|
+
* Graphiti domain adapter over the connection manager.
|
|
15
9
|
*/
|
|
16
10
|
class GraphitiClient {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
constructor(endpoint) {
|
|
21
|
-
Object.defineProperty(this, "client", {
|
|
11
|
+
constructor(endpointOrManager) {
|
|
12
|
+
Object.defineProperty(this, "toolCaller", {
|
|
22
13
|
enumerable: true,
|
|
23
14
|
configurable: true,
|
|
24
15
|
writable: true,
|
|
25
16
|
value: void 0
|
|
26
17
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
writable: true,
|
|
31
|
-
value: void 0
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(this, "connected", {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
configurable: true,
|
|
36
|
-
writable: true,
|
|
37
|
-
value: false
|
|
38
|
-
});
|
|
39
|
-
Object.defineProperty(this, "endpoint", {
|
|
40
|
-
enumerable: true,
|
|
41
|
-
configurable: true,
|
|
42
|
-
writable: true,
|
|
43
|
-
value: void 0
|
|
44
|
-
});
|
|
45
|
-
this.endpoint = endpoint;
|
|
46
|
-
this.client = new index_js_1.Client({
|
|
47
|
-
name: deno_js_1.default.name,
|
|
48
|
-
version: deno_js_1.default.version,
|
|
49
|
-
});
|
|
50
|
-
this.transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(endpoint));
|
|
51
|
-
}
|
|
52
|
-
/** Create a fresh MCP Client and Transport pair. */
|
|
53
|
-
createClientAndTransport() {
|
|
54
|
-
this.client = new index_js_1.Client({
|
|
55
|
-
name: deno_js_1.default.name,
|
|
56
|
-
version: deno_js_1.default.version,
|
|
57
|
-
});
|
|
58
|
-
this.transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(this.endpoint));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Establish a connection to the Graphiti MCP server.
|
|
62
|
-
* Creates a fresh Client/Transport if a previous attempt failed.
|
|
63
|
-
*/
|
|
64
|
-
async connect() {
|
|
65
|
-
if (this.connected)
|
|
66
|
-
return true;
|
|
67
|
-
// If a previous connect() tainted the Client's internal state,
|
|
68
|
-
// create fresh instances so the retry starts cleanly.
|
|
69
|
-
this.createClientAndTransport();
|
|
70
|
-
try {
|
|
71
|
-
await this.client.connect(this.transport);
|
|
72
|
-
this.connected = true;
|
|
73
|
-
logger_js_1.logger.info("Connected to Graphiti MCP server at", this.endpoint);
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
logger_js_1.logger.error("Failed to connect to Graphiti:", err);
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Close the underlying MCP client connection.
|
|
83
|
-
*/
|
|
84
|
-
async disconnect() {
|
|
85
|
-
if (this.connected) {
|
|
86
|
-
await this.client.close();
|
|
87
|
-
this.connected = false;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async callTool(name, args) {
|
|
91
|
-
if (!this.connected) {
|
|
92
|
-
const ok = await this.connect();
|
|
93
|
-
if (!ok)
|
|
94
|
-
throw new Error("Not connected to Graphiti");
|
|
95
|
-
}
|
|
96
|
-
// Sanitize arguments: omit task_id (and others) if null or undefined
|
|
97
|
-
const sanitizedArgs = Object.fromEntries(Object.entries(args).filter(([_, v]) => v !== null && v !== undefined));
|
|
98
|
-
try {
|
|
99
|
-
const result = await this.client.callTool({
|
|
100
|
-
name,
|
|
101
|
-
arguments: sanitizedArgs,
|
|
18
|
+
if (typeof endpointOrManager === "string") {
|
|
19
|
+
this.toolCaller = new connection_manager_js_1.GraphitiConnectionManager({
|
|
20
|
+
endpoint: endpointOrManager,
|
|
102
21
|
});
|
|
103
|
-
return this.parseToolResult(result);
|
|
104
22
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
logger_js_1.logger.warn("Graphiti session expired, reconnecting...");
|
|
108
|
-
await this.reconnect();
|
|
109
|
-
const result = await this.client.callTool({
|
|
110
|
-
name,
|
|
111
|
-
arguments: sanitizedArgs,
|
|
112
|
-
});
|
|
113
|
-
return this.parseToolResult(result);
|
|
114
|
-
}
|
|
115
|
-
throw err;
|
|
23
|
+
else {
|
|
24
|
+
this.toolCaller = endpointOrManager;
|
|
116
25
|
}
|
|
117
26
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
typeof err === "object" &&
|
|
121
|
-
"code" in err &&
|
|
122
|
-
err.code === 404);
|
|
27
|
+
start() {
|
|
28
|
+
this.toolCaller.start();
|
|
123
29
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return /request timed out/i.test(err);
|
|
127
|
-
}
|
|
128
|
-
if (!err || typeof err !== "object")
|
|
129
|
-
return false;
|
|
130
|
-
const { code, message } = err;
|
|
131
|
-
return code === -32001 ||
|
|
132
|
-
(typeof message === "string" && /request timed out/i.test(message));
|
|
30
|
+
async stop() {
|
|
31
|
+
await this.toolCaller.stop();
|
|
133
32
|
}
|
|
134
|
-
async
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// ignore close errors on stale client
|
|
141
|
-
}
|
|
142
|
-
this.createClientAndTransport();
|
|
143
|
-
await this.client.connect(this.transport);
|
|
144
|
-
this.connected = true;
|
|
145
|
-
logger_js_1.logger.info("Reconnected to Graphiti MCP server");
|
|
33
|
+
async connect() {
|
|
34
|
+
this.toolCaller.start();
|
|
35
|
+
return await this.toolCaller.ready();
|
|
36
|
+
}
|
|
37
|
+
async ready(timeoutMs) {
|
|
38
|
+
return await this.toolCaller.ready(timeoutMs);
|
|
146
39
|
}
|
|
147
40
|
/**
|
|
148
41
|
* Parse MCP tool results into JSON when possible.
|
|
@@ -171,19 +64,6 @@ class GraphitiClient {
|
|
|
171
64
|
return text;
|
|
172
65
|
}
|
|
173
66
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Add an episode to Graphiti memory.
|
|
176
|
-
*/
|
|
177
|
-
async addEpisode(params) {
|
|
178
|
-
await this.callTool("add_memory", {
|
|
179
|
-
name: params.name,
|
|
180
|
-
episode_body: params.episodeBody,
|
|
181
|
-
group_id: params.groupId,
|
|
182
|
-
source: params.source || "text",
|
|
183
|
-
source_description: params.sourceDescription || "",
|
|
184
|
-
});
|
|
185
|
-
logger_js_1.logger.debug("Added episode:", params.name);
|
|
186
|
-
}
|
|
187
67
|
/**
|
|
188
68
|
* Extract an array from a tool result that may be a bare array or a
|
|
189
69
|
* wrapped-array response object (`{ [key]: T[] }`).
|
|
@@ -200,6 +80,30 @@ class GraphitiClient {
|
|
|
200
80
|
}
|
|
201
81
|
return null;
|
|
202
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Add an episode to Graphiti memory.
|
|
85
|
+
*/
|
|
86
|
+
async addEpisode(params) {
|
|
87
|
+
try {
|
|
88
|
+
await this.callTool("add_memory", {
|
|
89
|
+
name: params.name,
|
|
90
|
+
episode_body: params.episodeBody,
|
|
91
|
+
group_id: params.groupId,
|
|
92
|
+
source: params.source || "text",
|
|
93
|
+
source_description: params.sourceDescription || "",
|
|
94
|
+
});
|
|
95
|
+
logger_js_1.logger.debug("Added episode:", params.name);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if ((0, connection_manager_js_1.isGraphitiOfflineError)(err) ||
|
|
99
|
+
(0, connection_manager_js_1.isGraphitiTimeoutError)(err) ||
|
|
100
|
+
err instanceof connection_manager_js_1.GraphitiTransportError ||
|
|
101
|
+
err instanceof connection_manager_js_1.GraphitiSessionExpiredError) {
|
|
102
|
+
logger_js_1.logger.warn("addEpisode failed due to Graphiti availability issue", err);
|
|
103
|
+
}
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
203
107
|
/**
|
|
204
108
|
* Search Graphiti facts matching the provided query.
|
|
205
109
|
*/
|
|
@@ -213,10 +117,19 @@ class GraphitiClient {
|
|
|
213
117
|
return this.parseWrappedArray(result, "facts") ?? [];
|
|
214
118
|
}
|
|
215
119
|
catch (err) {
|
|
216
|
-
if (
|
|
120
|
+
if ((0, connection_manager_js_1.isGraphitiTimeoutError)(err)) {
|
|
217
121
|
logger_js_1.logger.warn("searchFacts request timed out; returning no facts");
|
|
218
122
|
return [];
|
|
219
123
|
}
|
|
124
|
+
if ((0, connection_manager_js_1.isGraphitiOfflineError)(err)) {
|
|
125
|
+
logger_js_1.logger.warn("searchFacts unavailable; returning no facts");
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
if (err instanceof connection_manager_js_1.GraphitiTransportError ||
|
|
129
|
+
err instanceof connection_manager_js_1.GraphitiSessionExpiredError) {
|
|
130
|
+
logger_js_1.logger.warn("searchFacts unavailable during reconnect; returning no facts");
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
220
133
|
logger_js_1.logger.error("searchFacts error:", err);
|
|
221
134
|
return [];
|
|
222
135
|
}
|
|
@@ -234,10 +147,19 @@ class GraphitiClient {
|
|
|
234
147
|
return this.parseWrappedArray(result, "nodes") ?? [];
|
|
235
148
|
}
|
|
236
149
|
catch (err) {
|
|
237
|
-
if (
|
|
150
|
+
if ((0, connection_manager_js_1.isGraphitiTimeoutError)(err)) {
|
|
238
151
|
logger_js_1.logger.warn("searchNodes request timed out; returning no nodes");
|
|
239
152
|
return [];
|
|
240
153
|
}
|
|
154
|
+
if ((0, connection_manager_js_1.isGraphitiOfflineError)(err)) {
|
|
155
|
+
logger_js_1.logger.warn("searchNodes unavailable; returning no nodes");
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
if (err instanceof connection_manager_js_1.GraphitiTransportError ||
|
|
159
|
+
err instanceof connection_manager_js_1.GraphitiSessionExpiredError) {
|
|
160
|
+
logger_js_1.logger.warn("searchNodes unavailable during reconnect; returning no nodes");
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
241
163
|
logger_js_1.logger.error("searchNodes error:", err);
|
|
242
164
|
return [];
|
|
243
165
|
}
|
|
@@ -256,10 +178,19 @@ class GraphitiClient {
|
|
|
256
178
|
return raw.map(sdk_normalize_js_1.normalizeEpisode);
|
|
257
179
|
}
|
|
258
180
|
catch (err) {
|
|
259
|
-
if (
|
|
181
|
+
if ((0, connection_manager_js_1.isGraphitiTimeoutError)(err)) {
|
|
260
182
|
logger_js_1.logger.warn("getEpisodes request timed out; returning no episodes");
|
|
261
183
|
return [];
|
|
262
184
|
}
|
|
185
|
+
if ((0, connection_manager_js_1.isGraphitiOfflineError)(err)) {
|
|
186
|
+
logger_js_1.logger.warn("getEpisodes unavailable; returning no episodes");
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
if (err instanceof connection_manager_js_1.GraphitiTransportError ||
|
|
190
|
+
err instanceof connection_manager_js_1.GraphitiSessionExpiredError) {
|
|
191
|
+
logger_js_1.logger.warn("getEpisodes unavailable during reconnect; returning no episodes");
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
263
194
|
logger_js_1.logger.error("getEpisodes error:", err);
|
|
264
195
|
return [];
|
|
265
196
|
}
|
|
@@ -276,5 +207,9 @@ class GraphitiClient {
|
|
|
276
207
|
return false;
|
|
277
208
|
}
|
|
278
209
|
}
|
|
210
|
+
async callTool(name, args) {
|
|
211
|
+
const result = await this.toolCaller.callTool(name, args);
|
|
212
|
+
return this.parseToolResult(result);
|
|
213
|
+
}
|
|
279
214
|
}
|
|
280
215
|
exports.GraphitiClient = GraphitiClient;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type GraphitiConnectionState = "connecting" | "connected" | "offline" | "closing";
|
|
2
|
+
type TimerHandle = ReturnType<typeof setTimeout> | number;
|
|
3
|
+
export declare class GraphitiOfflineError extends Error {
|
|
4
|
+
readonly state: "offline" | "closing";
|
|
5
|
+
readonly kind = "offline";
|
|
6
|
+
constructor(state: "offline" | "closing", message?: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class GraphitiQueueTimeoutError extends Error {
|
|
9
|
+
readonly kind = "queue-timeout";
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class GraphitiRequestTimeoutError extends Error {
|
|
13
|
+
readonly kind = "request-timeout";
|
|
14
|
+
constructor(message?: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class GraphitiTransportError extends Error {
|
|
17
|
+
readonly kind = "transport-failure";
|
|
18
|
+
constructor(message?: string);
|
|
19
|
+
}
|
|
20
|
+
export declare class GraphitiSessionExpiredError extends Error {
|
|
21
|
+
readonly kind = "session-expired";
|
|
22
|
+
constructor(message?: string);
|
|
23
|
+
}
|
|
24
|
+
export declare function isGraphitiOfflineError(err: unknown): err is GraphitiOfflineError;
|
|
25
|
+
export declare function isGraphitiTimeoutError(err: unknown): err is GraphitiQueueTimeoutError | GraphitiRequestTimeoutError;
|
|
26
|
+
export type GraphitiToolRequest = {
|
|
27
|
+
name: string;
|
|
28
|
+
arguments?: Record<string, unknown>;
|
|
29
|
+
};
|
|
30
|
+
export interface GraphitiConnection {
|
|
31
|
+
connect(): Promise<void>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
callTool(request: GraphitiToolRequest): Promise<unknown>;
|
|
34
|
+
}
|
|
35
|
+
export interface GraphitiToolCaller {
|
|
36
|
+
start(): void;
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
ready(timeoutMs?: number): Promise<boolean>;
|
|
39
|
+
callTool(name: string, args: Record<string, unknown>, deadlineMs?: number): Promise<unknown>;
|
|
40
|
+
}
|
|
41
|
+
type ConnectionFactory = (endpoint: string) => GraphitiConnection;
|
|
42
|
+
type GraphitiConnectionManagerOptions = {
|
|
43
|
+
endpoint: string;
|
|
44
|
+
requestDeadlineMs?: number;
|
|
45
|
+
queueCapacity?: number;
|
|
46
|
+
startupTimeoutMs?: number;
|
|
47
|
+
reconnectInitialDelayMs?: number;
|
|
48
|
+
reconnectMaxDelayMs?: number;
|
|
49
|
+
reconnectMultiplier?: number;
|
|
50
|
+
reconnectJitter?: number;
|
|
51
|
+
connectionFactory?: ConnectionFactory;
|
|
52
|
+
random?: () => number;
|
|
53
|
+
setTimer?: (callback: () => void, delayMs: number) => TimerHandle;
|
|
54
|
+
clearTimer?: (timer: TimerHandle) => void;
|
|
55
|
+
};
|
|
56
|
+
export declare class GraphitiConnectionManager implements GraphitiToolCaller {
|
|
57
|
+
private readonly endpoint;
|
|
58
|
+
private readonly requestDeadlineMs;
|
|
59
|
+
private readonly queueCapacity;
|
|
60
|
+
private readonly startupTimeoutMs;
|
|
61
|
+
private readonly reconnectInitialDelayMs;
|
|
62
|
+
private readonly reconnectMaxDelayMs;
|
|
63
|
+
private readonly reconnectMultiplier;
|
|
64
|
+
private readonly reconnectJitter;
|
|
65
|
+
private readonly connectionFactory;
|
|
66
|
+
private readonly random;
|
|
67
|
+
private readonly setTimerImpl;
|
|
68
|
+
private readonly clearTimerImpl;
|
|
69
|
+
private state;
|
|
70
|
+
private connection;
|
|
71
|
+
private connectPromise;
|
|
72
|
+
private reconnectTimer;
|
|
73
|
+
private pendingRequests;
|
|
74
|
+
private readyWaiters;
|
|
75
|
+
private reconnectDelayMs;
|
|
76
|
+
private started;
|
|
77
|
+
private flushingQueue;
|
|
78
|
+
constructor(options: GraphitiConnectionManagerOptions);
|
|
79
|
+
getState(): GraphitiConnectionState;
|
|
80
|
+
start(): void;
|
|
81
|
+
stop(): Promise<void>;
|
|
82
|
+
ready(timeoutMs?: number): Promise<boolean>;
|
|
83
|
+
callTool(name: string, args: Record<string, unknown>, deadlineMs?: number): Promise<unknown>;
|
|
84
|
+
reconnect(): Promise<boolean>;
|
|
85
|
+
private performReconnect;
|
|
86
|
+
private executeConnectedCall;
|
|
87
|
+
private enqueueRequest;
|
|
88
|
+
private flushPendingQueue;
|
|
89
|
+
private removePendingRequest;
|
|
90
|
+
private clearPendingTimer;
|
|
91
|
+
private rejectAllPending;
|
|
92
|
+
private scheduleReconnect;
|
|
93
|
+
private cancelReconnectTimer;
|
|
94
|
+
private resolveReadyWaiters;
|
|
95
|
+
}
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=connection-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../src/src/services/connection-manager.ts"],"names":[],"mappings":"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"}
|