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.
Files changed (45) hide show
  1. package/esm/_dnt.polyfills.d.ts +99 -0
  2. package/esm/_dnt.polyfills.d.ts.map +1 -1
  3. package/esm/_dnt.polyfills.js +127 -1
  4. package/esm/_dnt.shims.d.ts +6 -0
  5. package/esm/_dnt.shims.d.ts.map +1 -0
  6. package/esm/_dnt.shims.js +61 -0
  7. package/esm/src/config.d.ts +14 -10
  8. package/esm/src/config.d.ts.map +1 -1
  9. package/esm/src/config.js +103 -43
  10. package/esm/src/index.d.ts.map +1 -1
  11. package/esm/src/index.js +12 -6
  12. package/esm/src/services/client.d.ts +15 -31
  13. package/esm/src/services/client.d.ts.map +1 -1
  14. package/esm/src/services/client.js +77 -139
  15. package/esm/src/services/connection-manager.d.ts +97 -0
  16. package/esm/src/services/connection-manager.d.ts.map +1 -0
  17. package/esm/src/services/connection-manager.js +535 -0
  18. package/esm/src/services/logger.d.ts +2 -0
  19. package/esm/src/services/logger.d.ts.map +1 -1
  20. package/esm/src/services/logger.js +29 -3
  21. package/esm/src/utils.d.ts.map +1 -1
  22. package/esm/src/utils.js +10 -2
  23. package/package.json +2 -2
  24. package/script/_dnt.polyfills.d.ts +99 -0
  25. package/script/_dnt.polyfills.d.ts.map +1 -1
  26. package/script/_dnt.polyfills.js +128 -0
  27. package/script/_dnt.shims.d.ts +6 -0
  28. package/script/_dnt.shims.d.ts.map +1 -0
  29. package/script/_dnt.shims.js +65 -0
  30. package/script/src/config.d.ts +14 -10
  31. package/script/src/config.d.ts.map +1 -1
  32. package/script/src/config.js +106 -76
  33. package/script/src/index.d.ts.map +1 -1
  34. package/script/src/index.js +12 -6
  35. package/script/src/services/client.d.ts +15 -31
  36. package/script/src/services/client.d.ts.map +1 -1
  37. package/script/src/services/client.js +77 -142
  38. package/script/src/services/connection-manager.d.ts +97 -0
  39. package/script/src/services/connection-manager.d.ts.map +1 -0
  40. package/script/src/services/connection-manager.js +549 -0
  41. package/script/src/services/logger.d.ts +2 -0
  42. package/script/src/services/logger.d.ts.map +1 -1
  43. package/script/src/services/logger.js +65 -7
  44. package/script/src/utils.d.ts.map +1 -1
  45. 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 MCP client wrapper for connecting, querying,
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 client;
8
- private transport;
9
- private connected;
10
- private endpoint;
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":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;gBACS,QAAQ,EAAE,MAAM;IAS5B,oDAAoD;IACpD,OAAO,CAAC,wBAAwB;IAUhC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAOnB,QAAQ;IAkCtB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,gBAAgB;YAgBV,SAAS;IAavB;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAyBzC;;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;IAWjB;;;;;OAKG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI;IAYrE;;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;IAkB3B;;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;IAkB3B;;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;IAmB9B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CAQpC"}
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 index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
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 MCP client wrapper for connecting, querying,
14
- * and persisting episodes with basic reconnection handling.
8
+ * Graphiti domain adapter over the connection manager.
15
9
  */
16
10
  class GraphitiClient {
17
- /**
18
- * Create a Graphiti client bound to the given MCP endpoint URL.
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
- Object.defineProperty(this, "transport", {
28
- enumerable: true,
29
- configurable: true,
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
- catch (err) {
106
- if (this.isSessionExpired(err)) {
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
- isSessionExpired(err) {
119
- return !!(err &&
120
- typeof err === "object" &&
121
- "code" in err &&
122
- err.code === 404);
27
+ start() {
28
+ this.toolCaller.start();
123
29
  }
124
- isRequestTimeout(err) {
125
- if (typeof err === "string") {
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 reconnect() {
135
- this.connected = false;
136
- try {
137
- await this.client.close();
138
- }
139
- catch {
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 (this.isRequestTimeout(err)) {
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 (this.isRequestTimeout(err)) {
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 (this.isRequestTimeout(err)) {
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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"}