@nyte-ai/host 0.0.19 → 0.0.21

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  vercelHost2
3
- } from "./canvas-preview-n2a35zv5.js";
3
+ } from "./canvas-preview-b3r1tna2.js";
4
4
  import {
5
5
  stepFrom2
6
6
  } from "./canvas-preview-65xqjw7f.js";
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "@nyte-ai/host",
4
- version: "0.0.19",
4
+ version: "0.0.21",
5
5
  private: false,
6
6
  license: "MIT",
7
7
  repository: {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./canvas-preview-2zdyh9ny.js";
4
4
  import {
5
5
  package_default
6
- } from "./canvas-preview-jeddjex8.js";
6
+ } from "./canvas-preview-8hr08aeh.js";
7
7
 
8
8
  // src/deploy/vercel/server/utils/host.ts
9
9
  import process from "node:process";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./canvas-preview-srgfpdmf.js";
6
6
  import {
7
7
  localDay2
8
- } from "./canvas-preview-11nadadc.js";
8
+ } from "./canvas-preview-geg2gckp.js";
9
9
  import {
10
10
  fileScanSchema2,
11
11
  UsageScanCache2,
@@ -5,7 +5,7 @@ import {
5
5
  } from "./canvas-preview-69fkk9yn.js";
6
6
  import {
7
7
  storePath2
8
- } from "./canvas-preview-tnqe7k0b.js";
8
+ } from "./canvas-preview-mstbvwz3.js";
9
9
  import {
10
10
  cacheSavings2,
11
11
  usageTokens2
@@ -44,7 +44,18 @@ function hub(input) {
44
44
  const contents = new Map;
45
45
  const watched = new Map;
46
46
  const userPath = join(input.home, ".nyte", "mcp.json");
47
+ const retiring = new Set;
47
48
  let closed = false;
49
+ const retire = (client) => {
50
+ if (client === null)
51
+ return Promise.resolve();
52
+ const done = client.close().catch(() => {
53
+ return;
54
+ });
55
+ retiring.add(done);
56
+ done.then(() => retiring.delete(done));
57
+ return done;
58
+ };
48
59
  const notify = (pool) => {
49
60
  for (const listener of pool.listeners)
50
61
  listener();
@@ -73,6 +84,7 @@ function hub(input) {
73
84
  let listed = null;
74
85
  let bridged = null;
75
86
  let client = null;
87
+ let opening = null;
76
88
  let stderr = () => null;
77
89
  let challenge = null;
78
90
  let ended = false;
@@ -104,9 +116,7 @@ function hub(input) {
104
116
  const drop = (message) => {
105
117
  const previous = client;
106
118
  client = null;
107
- previous?.close().catch(() => {
108
- return;
109
- });
119
+ retire(previous);
110
120
  if (ended)
111
121
  return;
112
122
  set({ kind: "failed", message, stderr: stderr() });
@@ -118,11 +128,7 @@ function hub(input) {
118
128
  await processEnvironment();
119
129
  if (ended)
120
130
  return;
121
- const next = new TracingMcpClient2({
122
- name: "nyte",
123
- version: "0.1.0",
124
- requestTimeoutMs: link.entry.timeoutMs
125
- });
131
+ const next = new TracingMcpClient2({ name: "nyte", version: "0.1.0" });
126
132
  next.onClose(() => {
127
133
  if (client === next)
128
134
  drop(`The connection to ${entry.name} closed.`);
@@ -143,9 +149,10 @@ function hub(input) {
143
149
  }
144
150
  try {
145
151
  stderr = () => transport instanceof StdioTransport && transport.stderr !== "" ? transport.stderr.slice(-STDERR_TAIL) : null;
152
+ opening = next;
146
153
  await next.connect(transport);
147
154
  if (ended) {
148
- await next.close();
155
+ await retire(next);
149
156
  return;
150
157
  }
151
158
  const refresh = async () => {
@@ -171,9 +178,7 @@ function hub(input) {
171
178
  } catch (error) {
172
179
  if (client === next)
173
180
  client = null;
174
- await next.close().catch(() => {
175
- return;
176
- });
181
+ await retire(next);
177
182
  if (ended)
178
183
  return;
179
184
  if (error instanceof McpOAuthAuthorizationRequiredError) {
@@ -223,9 +228,7 @@ function hub(input) {
223
228
  clearTimeout(timer);
224
229
  const previous = client;
225
230
  client = null;
226
- await previous?.close().catch(() => {
227
- return;
228
- });
231
+ await Promise.all([retire(previous), retire(opening)]);
229
232
  }
230
233
  };
231
234
  connectTraced();
@@ -553,6 +556,7 @@ function hub(input) {
553
556
  for (const pool of live)
554
557
  shut(pool);
555
558
  await Promise.all(links.map((link) => link.close()));
559
+ await Promise.all(retiring);
556
560
  }
557
561
  };
558
562
  }
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  readNyteUsage2
3
- } from "./canvas-preview-11nadadc.js";
3
+ } from "./canvas-preview-geg2gckp.js";
4
4
  import {
5
5
  loadUsageScanCaches2,
6
6
  saveUsageScanCaches2,
7
7
  readLocalUsage2
8
- } from "./canvas-preview-k1yg4fgp.js";
8
+ } from "./canvas-preview-eehzfefa.js";
9
9
 
10
10
  // src/usage-service.ts
11
11
  import { join } from "node:path";
@@ -87,7 +87,8 @@ function sqliteStore2(input) {
87
87
  return;
88
88
  });
89
89
  await workers?.close();
90
- database?.close();
90
+ if (database !== null)
91
+ closeDatabase(database);
91
92
  workers = null;
92
93
  database = null;
93
94
  opening = null;
@@ -98,6 +99,15 @@ function sqliteStore2(input) {
98
99
  }
99
100
  };
100
101
  }
102
+ function closeDatabase(database) {
103
+ if ("bun" in process.versions) {
104
+ const empty = new DatabaseSync(":memory:");
105
+ empty.exec("CREATE TABLE closed (id INTEGER)");
106
+ database.deserialize(empty.serialize());
107
+ empty.close();
108
+ }
109
+ database.close();
110
+ }
101
111
  function hasTable(database, name) {
102
112
  return database.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(name) !== undefined;
103
113
  }
@@ -27,7 +27,7 @@ import {
27
27
  } from "./canvas-preview-y5y6ghaw.js";
28
28
  import {
29
29
  createMcpHub2
30
- } from "./canvas-preview-g5fkjs34.js";
30
+ } from "./canvas-preview-gh7c9831.js";
31
31
  import {
32
32
  loadPluginDirectory2,
33
33
  pluginLoader2
@@ -38,10 +38,10 @@ import {
38
38
  import {
39
39
  storePath2,
40
40
  sqliteStore2
41
- } from "./canvas-preview-tnqe7k0b.js";
41
+ } from "./canvas-preview-mstbvwz3.js";
42
42
  import {
43
43
  package_default
44
- } from "./canvas-preview-jeddjex8.js";
44
+ } from "./canvas-preview-8hr08aeh.js";
45
45
 
46
46
  // src/open.ts
47
47
  import { watch } from "node:fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../../../chunks/canvas-preview-jeddjex8.js";
3
+ } from "../../../chunks/canvas-preview-8hr08aeh.js";
4
4
 
5
5
  // src/deploy/cloudflare/worker.ts
6
6
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -1,11 +1,11 @@
1
1
  import"../../../../../chunks/canvas-preview-2zdyh9ny.js";
2
2
  import {
3
3
  vercelHost2
4
- } from "../../../../../chunks/canvas-preview-n2a35zv5.js";
4
+ } from "../../../../../chunks/canvas-preview-b3r1tna2.js";
5
5
  import"../../../../../chunks/canvas-preview-65xqjw7f.js";
6
6
  import {
7
7
  dispatchHead2
8
- } from "../../../../../chunks/canvas-preview-b2v8wfnz.js";
8
+ } from "../../../../../chunks/canvas-preview-3a6tst4d.js";
9
9
 
10
10
  // src/deploy/vercel/server/routes/[...].ts
11
11
  import { defineHandler } from "nitro/h3";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  vercelHost2
3
- } from "../../../../../chunks/canvas-preview-n2a35zv5.js";
3
+ } from "../../../../../chunks/canvas-preview-b3r1tna2.js";
4
4
  import"../../../../../chunks/canvas-preview-2zdyh9ny.js";
5
5
  export {
6
6
  vercelHost2 as vercelHost
@@ -2,8 +2,8 @@ import {
2
2
  dispatchHead2,
3
3
  driveHead2,
4
4
  advanceHead2
5
- } from "../../../../../chunks/canvas-preview-b2v8wfnz.js";
6
- import"../../../../../chunks/canvas-preview-n2a35zv5.js";
5
+ } from "../../../../../chunks/canvas-preview-3a6tst4d.js";
6
+ import"../../../../../chunks/canvas-preview-b3r1tna2.js";
7
7
  import"../../../../../chunks/canvas-preview-2zdyh9ny.js";
8
8
  import"../../../../../chunks/canvas-preview-65xqjw7f.js";
9
9
  export {
package/dist/src/index.js CHANGED
@@ -61,7 +61,7 @@ import"../chunks/canvas-preview-pkzqg96v.js";
61
61
  import"../chunks/canvas-preview-vaatfznm.js";
62
62
  import {
63
63
  createMcpHub2
64
- } from "../chunks/canvas-preview-g5fkjs34.js";
64
+ } from "../chunks/canvas-preview-gh7c9831.js";
65
65
  import"../chunks/canvas-preview-9aqczacs.js";
66
66
  import"../chunks/canvas-preview-4e0pxa32.js";
67
67
  import"../chunks/canvas-preview-befkjea2.js";
@@ -81,10 +81,10 @@ import"../chunks/canvas-preview-0cmbkp2j.js";
81
81
  import {
82
82
  storePath2,
83
83
  sqliteStore2
84
- } from "../chunks/canvas-preview-tnqe7k0b.js";
84
+ } from "../chunks/canvas-preview-mstbvwz3.js";
85
85
  import {
86
86
  openHost2
87
- } from "../chunks/canvas-preview-cawy6vbz.js";
87
+ } from "../chunks/canvas-preview-y7kq0c8q.js";
88
88
  import {
89
89
  postgresStore2
90
90
  } from "../chunks/canvas-preview-4b6sayhg.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createMcpHub2
3
- } from "../../chunks/canvas-preview-g5fkjs34.js";
3
+ } from "../../chunks/canvas-preview-gh7c9831.js";
4
4
  import"../../chunks/canvas-preview-pkzqg96v.js";
5
5
  import"../../chunks/canvas-preview-5z63am63.js";
6
6
  import"../../chunks/canvas-preview-vaatfznm.js";
package/dist/src/open.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  openHost2
3
- } from "../chunks/canvas-preview-cawy6vbz.js";
3
+ } from "../chunks/canvas-preview-y7kq0c8q.js";
4
4
  import"../chunks/canvas-preview-4e0pxa32.js";
5
5
  import"../chunks/canvas-preview-y5y6ghaw.js";
6
6
  import"../chunks/canvas-preview-ec2mt7es.js";
@@ -14,7 +14,7 @@ import"../chunks/canvas-preview-1sq7z9jq.js";
14
14
  import"../chunks/canvas-preview-vm9zdp2t.js";
15
15
  import"../chunks/canvas-preview-crmzxxt8.js";
16
16
  import"../chunks/canvas-preview-tjhabynd.js";
17
- import"../chunks/canvas-preview-g5fkjs34.js";
17
+ import"../chunks/canvas-preview-gh7c9831.js";
18
18
  import"../chunks/canvas-preview-pkzqg96v.js";
19
19
  import"../chunks/canvas-preview-5z63am63.js";
20
20
  import"../chunks/canvas-preview-vaatfznm.js";
@@ -24,7 +24,7 @@ import"../chunks/canvas-preview-yjz0f7n4.js";
24
24
  import"../chunks/canvas-preview-af86jz8t.js";
25
25
  import"../chunks/canvas-preview-s94ebwf5.js";
26
26
  import"../chunks/canvas-preview-kdqgrstc.js";
27
- import"../chunks/canvas-preview-tnqe7k0b.js";
27
+ import"../chunks/canvas-preview-mstbvwz3.js";
28
28
  import"../chunks/canvas-preview-zaaj99wd.js";
29
29
  import"../chunks/canvas-preview-ycepb05s.js";
30
30
  import"../chunks/canvas-preview-w54ymtb3.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  storePath2,
3
3
  sqliteStore2
4
- } from "../chunks/canvas-preview-tnqe7k0b.js";
4
+ } from "../chunks/canvas-preview-mstbvwz3.js";
5
5
  import"../chunks/canvas-preview-zaaj99wd.js";
6
6
  import"../chunks/canvas-preview-0cmbkp2j.js";
7
7
  import"../chunks/canvas-preview-69fkk9yn.js";
@@ -4,9 +4,9 @@ import {
4
4
  shiftDay2,
5
5
  projectUsageReport2,
6
6
  readNyteUsage2
7
- } from "../chunks/canvas-preview-11nadadc.js";
7
+ } from "../chunks/canvas-preview-geg2gckp.js";
8
8
  import"../chunks/canvas-preview-srgfpdmf.js";
9
- import"../chunks/canvas-preview-tnqe7k0b.js";
9
+ import"../chunks/canvas-preview-mstbvwz3.js";
10
10
  import"../chunks/canvas-preview-zaaj99wd.js";
11
11
  import"../chunks/canvas-preview-0cmbkp2j.js";
12
12
  import"../chunks/canvas-preview-69fkk9yn.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  catalogForUsage2,
3
3
  UsageScanner2
4
- } from "../chunks/canvas-preview-fxa0rfb0.js";
5
- import"../chunks/canvas-preview-k1yg4fgp.js";
6
- import"../chunks/canvas-preview-11nadadc.js";
4
+ } from "../chunks/canvas-preview-k2xaz0ym.js";
5
+ import"../chunks/canvas-preview-eehzfefa.js";
6
+ import"../chunks/canvas-preview-geg2gckp.js";
7
7
  import"../chunks/canvas-preview-kp75gb63.js";
8
8
  import"../chunks/canvas-preview-srgfpdmf.js";
9
- import"../chunks/canvas-preview-tnqe7k0b.js";
9
+ import"../chunks/canvas-preview-mstbvwz3.js";
10
10
  import"../chunks/canvas-preview-zaaj99wd.js";
11
11
  import"../chunks/canvas-preview-0cmbkp2j.js";
12
12
  import"../chunks/canvas-preview-69fkk9yn.js";
@@ -1,14 +1,14 @@
1
1
  import"../chunks/canvas-preview-69fkk9yn.js";
2
2
  import"../chunks/canvas-preview-zaaj99wd.js";
3
3
  import"../chunks/canvas-preview-0cmbkp2j.js";
4
- import"../chunks/canvas-preview-tnqe7k0b.js";
4
+ import"../chunks/canvas-preview-mstbvwz3.js";
5
5
  import"../chunks/canvas-preview-srgfpdmf.js";
6
- import"../chunks/canvas-preview-11nadadc.js";
6
+ import"../chunks/canvas-preview-geg2gckp.js";
7
7
  import"../chunks/canvas-preview-kp75gb63.js";
8
- import"../chunks/canvas-preview-k1yg4fgp.js";
8
+ import"../chunks/canvas-preview-eehzfefa.js";
9
9
  import {
10
10
  UsageScanner2
11
- } from "../chunks/canvas-preview-fxa0rfb0.js";
11
+ } from "../chunks/canvas-preview-k2xaz0ym.js";
12
12
 
13
13
  // src/usage-worker.ts
14
14
  import { parentPort } from "node:worker_threads";
package/dist/src/usage.js CHANGED
@@ -5,11 +5,11 @@ import {
5
5
  loadUsageScanCaches2,
6
6
  saveUsageScanCaches2,
7
7
  readLocalUsage2
8
- } from "../chunks/canvas-preview-k1yg4fgp.js";
9
- import"../chunks/canvas-preview-11nadadc.js";
8
+ } from "../chunks/canvas-preview-eehzfefa.js";
9
+ import"../chunks/canvas-preview-geg2gckp.js";
10
10
  import"../chunks/canvas-preview-kp75gb63.js";
11
11
  import"../chunks/canvas-preview-srgfpdmf.js";
12
- import"../chunks/canvas-preview-tnqe7k0b.js";
12
+ import"../chunks/canvas-preview-mstbvwz3.js";
13
13
  import"../chunks/canvas-preview-zaaj99wd.js";
14
14
  import"../chunks/canvas-preview-0cmbkp2j.js";
15
15
  import"../chunks/canvas-preview-69fkk9yn.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyte-ai/host",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -96,11 +96,11 @@
96
96
  "dependencies": {
97
97
  "@earendil-works/pi-mcp": "1.3.0",
98
98
  "@lydell/node-pty": "1.2.0-beta.15",
99
- "@nyte-ai/ai": "0.0.19",
100
- "@nyte-ai/core": "0.0.19",
101
- "@nyte-ai/plugin": "0.0.19",
102
- "@nyte-ai/protocol": "0.0.19",
103
- "@nyte-ai/schema": "0.0.19",
99
+ "@nyte-ai/ai": "0.0.21",
100
+ "@nyte-ai/core": "0.0.21",
101
+ "@nyte-ai/plugin": "0.0.21",
102
+ "@nyte-ai/protocol": "0.0.21",
103
+ "@nyte-ai/schema": "0.0.21",
104
104
  "@silvia-odwyer/photon": "0.3.3",
105
105
  "fflate": "0.8.3",
106
106
  "ignore": "7.0.9",
package/src/mcp/hub.ts CHANGED
@@ -104,8 +104,18 @@ function hub(input: {
104
104
  const contents = new Map<string, McpFileContents>();
105
105
  const watched = new Map<string, Disposer>();
106
106
  const userPath = join(input.home, ".nyte", "mcp.json");
107
+ const retiring = new Set<Promise<void>>();
107
108
  let closed = false;
108
109
 
110
+ const retire = (client: McpClient | null): Promise<void> => {
111
+ if (client === null) return Promise.resolve();
112
+ const done = client.close().catch(() => undefined);
113
+ retiring.add(done);
114
+ void done.then(() => retiring.delete(done));
115
+
116
+ return done;
117
+ };
118
+
109
119
  const notify = (pool: Pool): void => {
110
120
  for (const listener of pool.listeners) listener();
111
121
  };
@@ -149,6 +159,7 @@ function hub(input: {
149
159
  } | null = null;
150
160
 
151
161
  let client: McpClient | null = null;
162
+ let opening: McpClient | null = null;
152
163
  let stderr: () => string | null = () => null;
153
164
  let challenge: OAuthChallenge | null = null;
154
165
  let ended = false;
@@ -184,7 +195,7 @@ function hub(input: {
184
195
  const drop = (message: string): void => {
185
196
  const previous = client;
186
197
  client = null;
187
- void previous?.close().catch(() => undefined);
198
+ void retire(previous);
188
199
 
189
200
  if (ended) return;
190
201
  set({ kind: "failed", message, stderr: stderr() });
@@ -197,11 +208,7 @@ function hub(input: {
197
208
 
198
209
  if (ended) return;
199
210
 
200
- const next = new TracingMcpClient({
201
- name: "nyte",
202
- version: "0.1.0",
203
- requestTimeoutMs: link.entry.timeoutMs,
204
- });
211
+ const next = new TracingMcpClient({ name: "nyte", version: "0.1.0" });
205
212
 
206
213
  next.onClose(() => {
207
214
  if (client === next) drop(`The connection to ${entry.name} closed.`);
@@ -229,10 +236,11 @@ function hub(input: {
229
236
  transport instanceof StdioTransport && transport.stderr !== ""
230
237
  ? transport.stderr.slice(-STDERR_TAIL)
231
238
  : null;
239
+ opening = next;
232
240
  await next.connect(transport);
233
241
 
234
242
  if (ended) {
235
- await next.close();
243
+ await retire(next);
236
244
 
237
245
  return;
238
246
  }
@@ -261,7 +269,7 @@ function hub(input: {
261
269
  await refresh();
262
270
  } catch (error) {
263
271
  if (client === next) client = null;
264
- await next.close().catch(() => undefined);
272
+ await retire(next);
265
273
 
266
274
  if (ended) return;
267
275
 
@@ -321,7 +329,7 @@ function hub(input: {
321
329
  clearTimeout(timer);
322
330
  const previous = client;
323
331
  client = null;
324
- await previous?.close().catch(() => undefined);
332
+ await Promise.all([retire(previous), retire(opening)]);
325
333
  },
326
334
  };
327
335
 
@@ -788,6 +796,7 @@ function hub(input: {
788
796
 
789
797
  for (const pool of live) shut(pool);
790
798
  await Promise.all(links.map((link) => link.close()));
799
+ await Promise.all(retiring);
791
800
  },
792
801
  };
793
802
  }
package/src/sqlite.ts CHANGED
@@ -98,7 +98,8 @@ export function sqliteStore(input: { readonly path: string } | { readonly memory
98
98
  closing ??= (async () => {
99
99
  await opening?.catch(() => undefined);
100
100
  await workers?.close();
101
- database?.close();
101
+
102
+ if (database !== null) closeDatabase(database);
102
103
  workers = null;
103
104
  database = null;
104
105
  opening = null;
@@ -111,6 +112,17 @@ export function sqliteStore(input: { readonly path: string } | { readonly memory
111
112
  };
112
113
  }
113
114
 
115
+ function closeDatabase(database: DatabaseSync): void {
116
+ if ("bun" in process.versions) {
117
+ const empty = new DatabaseSync(":memory:");
118
+ empty.exec("CREATE TABLE closed (id INTEGER)");
119
+ database.deserialize(empty.serialize());
120
+ empty.close();
121
+ }
122
+
123
+ database.close();
124
+ }
125
+
114
126
  function hasTable(database: DatabaseSync, name: string): boolean {
115
127
  return (
116
128
  database.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(name) !==