@agentstep/agent-sdk 0.4.28 → 0.4.29

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 (73) hide show
  1. package/dist/backends/claude/index.js +2 -2
  2. package/dist/backends/claude/tool-bridge.js +3 -1
  3. package/dist/backends/registry.js +3 -3
  4. package/dist/{chunk-B7L5XD24.js → chunk-2NAUMCWE.js} +1 -1
  5. package/dist/{chunk-YY3NF45U.js → chunk-4DTL7OKD.js} +1 -1
  6. package/dist/chunk-4FDEJHH7.js +128 -0
  7. package/dist/{chunk-VHZML3D5.js → chunk-4GC7D5GD.js} +1 -1
  8. package/dist/{chunk-JLZO6TQL.js → chunk-AE5JQORN.js} +2 -2
  9. package/dist/{chunk-CCE6MVB3.js → chunk-BFXQ3IOS.js} +2 -2
  10. package/dist/{chunk-DWAA3F5Y.js → chunk-DT57EZQB.js} +4 -4
  11. package/dist/{chunk-34BN2SJC.js → chunk-EGCAA6KI.js} +1 -1
  12. package/dist/{chunk-3QIIJADA.js → chunk-ESXH27JB.js} +1 -1
  13. package/dist/{chunk-NWFYV2VI.js → chunk-FJAWIVSD.js} +1 -1
  14. package/dist/{chunk-AU2DTTBR.js → chunk-GQFC44YI.js} +1 -1
  15. package/dist/{chunk-SVYLMMBI.js → chunk-HGZ6R6ST.js} +1 -1
  16. package/dist/{chunk-4IFVESQO.js → chunk-HMBJOI5F.js} +2 -2
  17. package/dist/{chunk-ND7BRD6B.js → chunk-JURAGCGR.js} +1 -1
  18. package/dist/{chunk-P525BPB2.js → chunk-KOGG7CSN.js} +1 -1
  19. package/dist/{chunk-AYNYP3G3.js → chunk-KZ4AECAK.js} +8 -4
  20. package/dist/{chunk-JNHADPQ3.js → chunk-LLYP77OL.js} +1 -1
  21. package/dist/{chunk-4TF2EKVQ.js → chunk-LMHXLYUV.js} +1 -1
  22. package/dist/{chunk-ES5VD2ML.js → chunk-LYTHR3HC.js} +1 -1
  23. package/dist/{chunk-WJUWZKRP.js → chunk-NX6SIEN6.js} +1 -1
  24. package/dist/{chunk-UO2N4Q3V.js → chunk-O3Z7JWR7.js} +1 -1
  25. package/dist/{chunk-CGPTH3JC.js → chunk-OA3CLTYY.js} +1 -1
  26. package/dist/{chunk-PF6W4L5F.js → chunk-OC2RYYTW.js} +2 -2
  27. package/dist/{chunk-FEHDZT7I.js → chunk-OONL25NZ.js} +1 -1
  28. package/dist/{chunk-AWHHLOWE.js → chunk-OTLXV4RO.js} +1 -1
  29. package/dist/{chunk-HDSLSNN5.js → chunk-RK3QBYXO.js} +1 -1
  30. package/dist/{chunk-HQACDTN4.js → chunk-RZKUB4JQ.js} +3 -3
  31. package/dist/{chunk-ATGDKD4W.js → chunk-UIVEK3MD.js} +1 -1
  32. package/dist/{chunk-Y2J7CAME.js → chunk-W26HCKWX.js} +1 -1
  33. package/dist/{chunk-UZJI64HR.js → chunk-WHASPTF3.js} +1 -1
  34. package/dist/{chunk-F3M4HKEJ.js → chunk-XGUSWFDD.js} +1 -1
  35. package/dist/{chunk-36VCC3BY.js → chunk-XZOBOKL6.js} +1 -1
  36. package/dist/{chunk-FRDJNX6Z.js → chunk-YIVJ3JTW.js} +1 -1
  37. package/dist/{chunk-P6NCA7G5.js → chunk-ZNQD65DN.js} +1 -1
  38. package/dist/containers/lifecycle.js +4 -4
  39. package/dist/handlers/agents.js +10 -10
  40. package/dist/handlers/api_keys.js +10 -10
  41. package/dist/handlers/audit.js +10 -10
  42. package/dist/handlers/batch.js +10 -10
  43. package/dist/handlers/credentials.js +11 -11
  44. package/dist/handlers/environments.js +10 -10
  45. package/dist/handlers/events.js +10 -10
  46. package/dist/handlers/files.js +10 -10
  47. package/dist/handlers/index.js +34 -34
  48. package/dist/handlers/license.js +10 -10
  49. package/dist/handlers/memory.js +10 -10
  50. package/dist/handlers/metrics.js +10 -10
  51. package/dist/handlers/models.js +10 -10
  52. package/dist/handlers/providers.js +10 -10
  53. package/dist/handlers/resources.js +10 -10
  54. package/dist/handlers/sessions.js +10 -10
  55. package/dist/handlers/settings.js +10 -10
  56. package/dist/handlers/skills-write.js +10 -10
  57. package/dist/handlers/skills.js +10 -10
  58. package/dist/handlers/stream.js +9 -9
  59. package/dist/handlers/tenants.js +10 -10
  60. package/dist/handlers/threads.js +10 -10
  61. package/dist/handlers/traces.js +10 -10
  62. package/dist/handlers/upstream_keys.js +10 -10
  63. package/dist/handlers/vaults.js +10 -10
  64. package/dist/handlers/whoami.js +10 -10
  65. package/dist/http.js +9 -9
  66. package/dist/index.js +9 -9
  67. package/dist/init.js +8 -8
  68. package/dist/sessions/driver.js +5 -5
  69. package/dist/sessions/sweeper.js +5 -5
  70. package/dist/sessions/threads.js +5 -5
  71. package/dist/shutdown.js +6 -6
  72. package/package.json +1 -1
  73. package/dist/chunk-ALVC7G6R.js +0 -187
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ import {
46
46
  import {
47
47
  jsonOk,
48
48
  routeWrap
49
- } from "./chunk-3QIIJADA.js";
49
+ } from "./chunk-ESXH27JB.js";
50
50
  import "./chunk-D2XITRN6.js";
51
51
  import {
52
52
  authenticate,
@@ -60,14 +60,14 @@ import "./chunk-W6WKXFHN.js";
60
60
  import "./chunk-HVUWXUUI.js";
61
61
  import {
62
62
  ensureInitialized
63
- } from "./chunk-DWAA3F5Y.js";
63
+ } from "./chunk-DT57EZQB.js";
64
64
  import {
65
65
  enqueueTurn
66
66
  } from "./chunk-AQXCXWAZ.js";
67
67
  import {
68
68
  runTurn,
69
69
  writePermissionResponse
70
- } from "./chunk-AYNYP3G3.js";
70
+ } from "./chunk-KZ4AECAK.js";
71
71
  import "./chunk-PJZ5TQYW.js";
72
72
  import "./chunk-AU4NAQGA.js";
73
73
  import "./chunk-H6TQGV4L.js";
@@ -93,15 +93,15 @@ import {
93
93
  import "./chunk-3MQ2FWXS.js";
94
94
  import {
95
95
  installShutdownHandlers
96
- } from "./chunk-WJUWZKRP.js";
97
- import "./chunk-NWFYV2VI.js";
96
+ } from "./chunk-NX6SIEN6.js";
97
+ import "./chunk-FJAWIVSD.js";
98
98
  import {
99
99
  dropActor,
100
100
  getActor
101
101
  } from "./chunk-LAWTTG2E.js";
102
102
  import {
103
103
  releaseSession
104
- } from "./chunk-F3M4HKEJ.js";
104
+ } from "./chunk-XGUSWFDD.js";
105
105
  import "./chunk-DO4WVWW7.js";
106
106
  import "./chunk-RMZRSYIJ.js";
107
107
  import "./chunk-5ZFOKZGR.js";
@@ -170,7 +170,7 @@ import {
170
170
  } from "./chunk-JDELTTHV.js";
171
171
  import {
172
172
  resolveBackend
173
- } from "./chunk-P525BPB2.js";
173
+ } from "./chunk-KOGG7CSN.js";
174
174
  import "./chunk-I44FSUBC.js";
175
175
  import "./chunk-T5VRE77P.js";
176
176
  import "./chunk-TY3HD5I5.js";
@@ -201,11 +201,11 @@ import "./chunk-7TSTCMII.js";
201
201
  import "./chunk-QQDSHL27.js";
202
202
  import "./chunk-IAF6VMPO.js";
203
203
  import "./chunk-OWP537VU.js";
204
- import "./chunk-HQACDTN4.js";
204
+ import "./chunk-RZKUB4JQ.js";
205
205
  import "./chunk-WFIMX3HG.js";
206
206
  import "./chunk-FVBDEOTZ.js";
207
207
  import "./chunk-CY6AWCC6.js";
208
- import "./chunk-ALVC7G6R.js";
208
+ import "./chunk-4FDEJHH7.js";
209
209
  import "./chunk-JFYE5BFI.js";
210
210
  import "./chunk-NQX7WBA4.js";
211
211
  import "./chunk-XBHDQK4Z.js";
package/dist/init.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ensureInitialized,
3
3
  recoverStaleSessions
4
- } from "./chunk-DWAA3F5Y.js";
4
+ } from "./chunk-DT57EZQB.js";
5
5
  import "./chunk-AQXCXWAZ.js";
6
- import "./chunk-AYNYP3G3.js";
6
+ import "./chunk-KZ4AECAK.js";
7
7
  import "./chunk-PJZ5TQYW.js";
8
8
  import "./chunk-AU4NAQGA.js";
9
9
  import "./chunk-H6TQGV4L.js";
@@ -16,10 +16,10 @@ import "./chunk-NIOWKTIF.js";
16
16
  import "./chunk-ZQGJKPPY.js";
17
17
  import "./chunk-ADK2TYO4.js";
18
18
  import "./chunk-3MQ2FWXS.js";
19
- import "./chunk-WJUWZKRP.js";
20
- import "./chunk-NWFYV2VI.js";
19
+ import "./chunk-NX6SIEN6.js";
20
+ import "./chunk-FJAWIVSD.js";
21
21
  import "./chunk-LAWTTG2E.js";
22
- import "./chunk-F3M4HKEJ.js";
22
+ import "./chunk-XGUSWFDD.js";
23
23
  import "./chunk-DO4WVWW7.js";
24
24
  import "./chunk-RMZRSYIJ.js";
25
25
  import "./chunk-5ZFOKZGR.js";
@@ -36,7 +36,7 @@ import "./chunk-QUJNG4RA.js";
36
36
  import "./chunk-NUO56TF7.js";
37
37
  import "./chunk-JEI7I3EH.js";
38
38
  import "./chunk-JDELTTHV.js";
39
- import "./chunk-P525BPB2.js";
39
+ import "./chunk-KOGG7CSN.js";
40
40
  import "./chunk-I44FSUBC.js";
41
41
  import "./chunk-T5VRE77P.js";
42
42
  import "./chunk-TY3HD5I5.js";
@@ -67,11 +67,11 @@ import "./chunk-7TSTCMII.js";
67
67
  import "./chunk-QQDSHL27.js";
68
68
  import "./chunk-IAF6VMPO.js";
69
69
  import "./chunk-OWP537VU.js";
70
- import "./chunk-HQACDTN4.js";
70
+ import "./chunk-RZKUB4JQ.js";
71
71
  import "./chunk-WFIMX3HG.js";
72
72
  import "./chunk-FVBDEOTZ.js";
73
73
  import "./chunk-CY6AWCC6.js";
74
- import "./chunk-ALVC7G6R.js";
74
+ import "./chunk-4FDEJHH7.js";
75
75
  import "./chunk-JFYE5BFI.js";
76
76
  import "./chunk-NQX7WBA4.js";
77
77
  import "./chunk-XBHDQK4Z.js";
@@ -3,7 +3,7 @@ import {
3
3
  runTurn,
4
4
  writePermissionResponse,
5
5
  writeToolBridgeResponse
6
- } from "../chunk-AYNYP3G3.js";
6
+ } from "../chunk-KZ4AECAK.js";
7
7
  import "../chunk-PJZ5TQYW.js";
8
8
  import "../chunk-AU4NAQGA.js";
9
9
  import "../chunk-H6TQGV4L.js";
@@ -12,7 +12,7 @@ import "../chunk-72BKGVBE.js";
12
12
  import "../chunk-M4CTE7EH.js";
13
13
  import "../chunk-NIOWKTIF.js";
14
14
  import "../chunk-ZQGJKPPY.js";
15
- import "../chunk-F3M4HKEJ.js";
15
+ import "../chunk-XGUSWFDD.js";
16
16
  import "../chunk-DO4WVWW7.js";
17
17
  import "../chunk-RMZRSYIJ.js";
18
18
  import "../chunk-5ZFOKZGR.js";
@@ -29,7 +29,7 @@ import "../chunk-QUJNG4RA.js";
29
29
  import "../chunk-NUO56TF7.js";
30
30
  import "../chunk-JEI7I3EH.js";
31
31
  import "../chunk-JDELTTHV.js";
32
- import "../chunk-P525BPB2.js";
32
+ import "../chunk-KOGG7CSN.js";
33
33
  import "../chunk-I44FSUBC.js";
34
34
  import "../chunk-T5VRE77P.js";
35
35
  import "../chunk-TY3HD5I5.js";
@@ -60,11 +60,11 @@ import "../chunk-7TSTCMII.js";
60
60
  import "../chunk-QQDSHL27.js";
61
61
  import "../chunk-IAF6VMPO.js";
62
62
  import "../chunk-OWP537VU.js";
63
- import "../chunk-HQACDTN4.js";
63
+ import "../chunk-RZKUB4JQ.js";
64
64
  import "../chunk-WFIMX3HG.js";
65
65
  import "../chunk-FVBDEOTZ.js";
66
66
  import "../chunk-CY6AWCC6.js";
67
- import "../chunk-ALVC7G6R.js";
67
+ import "../chunk-4FDEJHH7.js";
68
68
  import "../chunk-JFYE5BFI.js";
69
69
  import "../chunk-NQX7WBA4.js";
70
70
  import "../chunk-XBHDQK4Z.js";
@@ -2,9 +2,9 @@ import {
2
2
  __resetSweeperState,
3
3
  markStopping,
4
4
  runSweep
5
- } from "../chunk-NWFYV2VI.js";
5
+ } from "../chunk-FJAWIVSD.js";
6
6
  import "../chunk-LAWTTG2E.js";
7
- import "../chunk-F3M4HKEJ.js";
7
+ import "../chunk-XGUSWFDD.js";
8
8
  import "../chunk-DO4WVWW7.js";
9
9
  import "../chunk-RMZRSYIJ.js";
10
10
  import "../chunk-5ZFOKZGR.js";
@@ -21,7 +21,7 @@ import "../chunk-QUJNG4RA.js";
21
21
  import "../chunk-NUO56TF7.js";
22
22
  import "../chunk-JEI7I3EH.js";
23
23
  import "../chunk-JDELTTHV.js";
24
- import "../chunk-P525BPB2.js";
24
+ import "../chunk-KOGG7CSN.js";
25
25
  import "../chunk-I44FSUBC.js";
26
26
  import "../chunk-T5VRE77P.js";
27
27
  import "../chunk-TY3HD5I5.js";
@@ -52,11 +52,11 @@ import "../chunk-7TSTCMII.js";
52
52
  import "../chunk-QQDSHL27.js";
53
53
  import "../chunk-IAF6VMPO.js";
54
54
  import "../chunk-OWP537VU.js";
55
- import "../chunk-HQACDTN4.js";
55
+ import "../chunk-RZKUB4JQ.js";
56
56
  import "../chunk-WFIMX3HG.js";
57
57
  import "../chunk-FVBDEOTZ.js";
58
58
  import "../chunk-CY6AWCC6.js";
59
- import "../chunk-ALVC7G6R.js";
59
+ import "../chunk-4FDEJHH7.js";
60
60
  import "../chunk-JFYE5BFI.js";
61
61
  import "../chunk-NQX7WBA4.js";
62
62
  import "../chunk-XBHDQK4Z.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runTurn
3
- } from "../chunk-AYNYP3G3.js";
3
+ } from "../chunk-KZ4AECAK.js";
4
4
  import "../chunk-PJZ5TQYW.js";
5
5
  import "../chunk-AU4NAQGA.js";
6
6
  import "../chunk-H6TQGV4L.js";
@@ -12,7 +12,7 @@ import "../chunk-ZQGJKPPY.js";
12
12
  import {
13
13
  getActor
14
14
  } from "../chunk-LAWTTG2E.js";
15
- import "../chunk-F3M4HKEJ.js";
15
+ import "../chunk-XGUSWFDD.js";
16
16
  import "../chunk-DO4WVWW7.js";
17
17
  import "../chunk-RMZRSYIJ.js";
18
18
  import "../chunk-5ZFOKZGR.js";
@@ -40,7 +40,7 @@ import {
40
40
  getAgent
41
41
  } from "../chunk-JEI7I3EH.js";
42
42
  import "../chunk-JDELTTHV.js";
43
- import "../chunk-P525BPB2.js";
43
+ import "../chunk-KOGG7CSN.js";
44
44
  import "../chunk-I44FSUBC.js";
45
45
  import "../chunk-T5VRE77P.js";
46
46
  import "../chunk-TY3HD5I5.js";
@@ -71,11 +71,11 @@ import "../chunk-7TSTCMII.js";
71
71
  import "../chunk-QQDSHL27.js";
72
72
  import "../chunk-IAF6VMPO.js";
73
73
  import "../chunk-OWP537VU.js";
74
- import "../chunk-HQACDTN4.js";
74
+ import "../chunk-RZKUB4JQ.js";
75
75
  import "../chunk-WFIMX3HG.js";
76
76
  import "../chunk-FVBDEOTZ.js";
77
77
  import "../chunk-CY6AWCC6.js";
78
- import "../chunk-ALVC7G6R.js";
78
+ import "../chunk-4FDEJHH7.js";
79
79
  import "../chunk-JFYE5BFI.js";
80
80
  import "../chunk-NQX7WBA4.js";
81
81
  import "../chunk-XBHDQK4Z.js";
package/dist/shutdown.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  installShutdownHandlers
3
- } from "./chunk-WJUWZKRP.js";
4
- import "./chunk-NWFYV2VI.js";
3
+ } from "./chunk-NX6SIEN6.js";
4
+ import "./chunk-FJAWIVSD.js";
5
5
  import "./chunk-LAWTTG2E.js";
6
- import "./chunk-F3M4HKEJ.js";
6
+ import "./chunk-XGUSWFDD.js";
7
7
  import "./chunk-DO4WVWW7.js";
8
8
  import "./chunk-RMZRSYIJ.js";
9
9
  import "./chunk-5ZFOKZGR.js";
@@ -20,7 +20,7 @@ import "./chunk-QUJNG4RA.js";
20
20
  import "./chunk-NUO56TF7.js";
21
21
  import "./chunk-JEI7I3EH.js";
22
22
  import "./chunk-JDELTTHV.js";
23
- import "./chunk-P525BPB2.js";
23
+ import "./chunk-KOGG7CSN.js";
24
24
  import "./chunk-I44FSUBC.js";
25
25
  import "./chunk-T5VRE77P.js";
26
26
  import "./chunk-TY3HD5I5.js";
@@ -51,11 +51,11 @@ import "./chunk-7TSTCMII.js";
51
51
  import "./chunk-QQDSHL27.js";
52
52
  import "./chunk-IAF6VMPO.js";
53
53
  import "./chunk-OWP537VU.js";
54
- import "./chunk-HQACDTN4.js";
54
+ import "./chunk-RZKUB4JQ.js";
55
55
  import "./chunk-WFIMX3HG.js";
56
56
  import "./chunk-FVBDEOTZ.js";
57
57
  import "./chunk-CY6AWCC6.js";
58
- import "./chunk-ALVC7G6R.js";
58
+ import "./chunk-4FDEJHH7.js";
59
59
  import "./chunk-JFYE5BFI.js";
60
60
  import "./chunk-NQX7WBA4.js";
61
61
  import "./chunk-XBHDQK4Z.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "license": "Apache-2.0",
3
3
  "name": "@agentstep/agent-sdk",
4
- "version": "0.4.28",
4
+ "version": "0.4.29",
5
5
  "description": "Core engine for AgentStep Gateway \u2014 backends, sandbox providers, session orchestration, and vault encryption.",
6
6
  "keywords": [
7
7
  "anthropic",
@@ -1,187 +0,0 @@
1
- // src/backends/claude/tool-bridge.ts
2
- var TOOL_BRIDGE_DIR = "/tmp/tool-bridge";
3
- var TOOL_BRIDGE_SCRIPT_PATH = `${TOOL_BRIDGE_DIR}/bridge.mjs`;
4
- var TOOL_BRIDGE_TOOLS_PATH = `${TOOL_BRIDGE_DIR}/tools.json`;
5
- var TOOL_BRIDGE_REQUEST_PATH = `${TOOL_BRIDGE_DIR}/request.json`;
6
- var TOOL_BRIDGE_RESPONSE_PATH = `${TOOL_BRIDGE_DIR}/response.json`;
7
- var TOOL_BRIDGE_PENDING_PATH = `${TOOL_BRIDGE_DIR}/pending`;
8
- function generateBridgeScript() {
9
- return `#!/usr/bin/env node
10
- // Auto-generated MCP stdio server for custom tool bridge.
11
- // Reads tool definitions from ${TOOL_BRIDGE_TOOLS_PATH}
12
- import { readFileSync, writeFileSync, unlinkSync, existsSync, watch, watchFile, unwatchFile } from 'node:fs';
13
- import { createInterface } from 'node:readline';
14
-
15
- const TOOLS_PATH = ${JSON.stringify(TOOL_BRIDGE_TOOLS_PATH)};
16
- const REQUEST_PATH = ${JSON.stringify(TOOL_BRIDGE_REQUEST_PATH)};
17
- const RESPONSE_PATH = ${JSON.stringify(TOOL_BRIDGE_RESPONSE_PATH)};
18
- const PENDING_PATH = ${JSON.stringify(TOOL_BRIDGE_PENDING_PATH)};
19
-
20
- let tools = [];
21
- try { tools = JSON.parse(readFileSync(TOOLS_PATH, 'utf8')); } catch {}
22
-
23
- function sendResponse(id, result) {
24
- const msg = JSON.stringify({ jsonrpc: '2.0', id, result });
25
- const buf = Buffer.from(msg, 'utf8');
26
- process.stdout.write('Content-Length: ' + buf.length + '\\r\\n\\r\\n');
27
- process.stdout.write(buf);
28
- }
29
-
30
- function sendError(id, code, message) {
31
- const msg = JSON.stringify({ jsonrpc: '2.0', id, error: { code, message } });
32
- const buf = Buffer.from(msg, 'utf8');
33
- process.stdout.write('Content-Length: ' + buf.length + '\\r\\n\\r\\n');
34
- process.stdout.write(buf);
35
- }
36
-
37
- function handleRequest(req) {
38
- if (req.method === 'initialize') {
39
- sendResponse(req.id, {
40
- protocolVersion: '2024-11-05',
41
- capabilities: { tools: { listChanged: false } },
42
- serverInfo: { name: 'tool-bridge', version: '1.0.0' },
43
- });
44
- return;
45
- }
46
- if (req.method === 'notifications/initialized') return;
47
- if (req.method === 'tools/list') {
48
- sendResponse(req.id, {
49
- tools: tools.map(t => ({
50
- name: t.name,
51
- description: t.description || '',
52
- inputSchema: t.input_schema || { type: 'object', properties: {} },
53
- })),
54
- });
55
- return;
56
- }
57
- if (req.method === 'tools/call') {
58
- const toolName = req.params?.name;
59
- const toolInput = req.params?.arguments || {};
60
-
61
- // Replay case: if response.json already exists (from a --resume re-entry),
62
- // return it immediately without creating a pending sentinel.
63
- if (existsSync(RESPONSE_PATH)) {
64
- try {
65
- const resp = JSON.parse(readFileSync(RESPONSE_PATH, 'utf8'));
66
- sendResponse(req.id, {
67
- content: [{ type: 'text', text: JSON.stringify(resp.content ?? resp) }],
68
- isError: false,
69
- });
70
- try { unlinkSync(RESPONSE_PATH); } catch {}
71
- return;
72
- } catch (e) {
73
- console.error('[tool-bridge] replay failed:', e);
74
- process.exit(1);
75
- }
76
- }
77
-
78
- // Write the request and create pending sentinel
79
- writeFileSync(REQUEST_PATH, JSON.stringify({
80
- tool_use_id: req.id,
81
- name: toolName,
82
- input: toolInput,
83
- }));
84
- writeFileSync(PENDING_PATH, '');
85
-
86
- // Watch for response.json \u2014 prefer fs.watch (inotify/kqueue) over
87
- // fs.watchFile (stat polling). Fall back to watchFile if watch fails.
88
- let resolved = false;
89
- const onResponse = () => {
90
- if (resolved) return;
91
- if (!existsSync(RESPONSE_PATH)) return;
92
- resolved = true;
93
- // Clean up whichever watcher is active
94
- if (watcher) { try { watcher.close(); } catch {} }
95
- try { unwatchFile(RESPONSE_PATH, pollFallback); } catch {}
96
- try {
97
- const resp = JSON.parse(readFileSync(RESPONSE_PATH, 'utf8'));
98
- try { unlinkSync(RESPONSE_PATH); } catch {}
99
- try { unlinkSync(PENDING_PATH); } catch {}
100
- sendResponse(req.id, {
101
- content: [{ type: 'text', text: JSON.stringify(resp.content ?? resp) }],
102
- isError: false,
103
- });
104
- } catch (e) {
105
- sendError(req.id, -32603, 'Failed to read response: ' + e.message);
106
- }
107
- };
108
- const pollFallback = () => onResponse();
109
- let watcher = null;
110
- // Check immediately in case it was written between our existsSync check
111
- onResponse();
112
- if (resolved) return;
113
- try {
114
- watcher = watch(RESPONSE_PATH, () => onResponse());
115
- watcher.on('error', () => {
116
- // fs.watch failed mid-watch \u2014 fall back to polling
117
- try { watcher.close(); } catch {}
118
- watcher = null;
119
- watchFile(RESPONSE_PATH, { interval: 200 }, pollFallback);
120
- });
121
- } catch {
122
- // fs.watch not available \u2014 fall back to stat polling
123
- watchFile(RESPONSE_PATH, { interval: 200 }, pollFallback);
124
- }
125
- return;
126
- }
127
- // Unknown method
128
- if (req.id != null) {
129
- sendError(req.id, -32601, 'Method not found: ' + req.method);
130
- }
131
- }
132
-
133
- // Read MCP stdio protocol: Content-Length headers + JSON body
134
- let buffer = '';
135
- process.stdin.setEncoding('utf8');
136
- process.stdin.on('data', (chunk) => {
137
- buffer += chunk;
138
- while (true) {
139
- const headerEnd = buffer.indexOf('\\r\\n\\r\\n');
140
- if (headerEnd === -1) break;
141
- const header = buffer.slice(0, headerEnd);
142
- const match = header.match(/Content-Length:\\s*(\\d+)/i);
143
- if (!match) { buffer = buffer.slice(headerEnd + 4); continue; }
144
- const len = parseInt(match[1], 10);
145
- const bodyStart = headerEnd + 4;
146
- if (buffer.length < bodyStart + len) break;
147
- const body = buffer.slice(bodyStart, bodyStart + len);
148
- buffer = buffer.slice(bodyStart + len);
149
- try {
150
- handleRequest(JSON.parse(body));
151
- } catch {}
152
- }
153
- });
154
- process.stdin.on('end', () => process.exit(0));
155
- `;
156
- }
157
- function buildBridgeMcpConfig(existingServers) {
158
- return {
159
- ...existingServers,
160
- "tool-bridge": {
161
- type: "stdio",
162
- command: "node",
163
- args: [TOOL_BRIDGE_SCRIPT_PATH]
164
- }
165
- };
166
- }
167
- function toolsToJson(tools) {
168
- return JSON.stringify(
169
- tools.map((t) => ({
170
- name: t.name,
171
- description: t.description,
172
- input_schema: t.input_schema
173
- }))
174
- );
175
- }
176
-
177
- export {
178
- TOOL_BRIDGE_DIR,
179
- TOOL_BRIDGE_SCRIPT_PATH,
180
- TOOL_BRIDGE_TOOLS_PATH,
181
- TOOL_BRIDGE_REQUEST_PATH,
182
- TOOL_BRIDGE_RESPONSE_PATH,
183
- TOOL_BRIDGE_PENDING_PATH,
184
- generateBridgeScript,
185
- buildBridgeMcpConfig,
186
- toolsToJson
187
- };