orbitx 0.2.9 → 0.3.2

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 (213) hide show
  1. package/Readme.md +478 -456
  2. package/dist/agents/backend.d.ts +4 -0
  3. package/dist/agents/backend.d.ts.map +1 -0
  4. package/dist/agents/backend.js +54 -0
  5. package/dist/agents/backend.js.map +1 -0
  6. package/dist/agents/frontend.d.ts +4 -0
  7. package/dist/agents/frontend.d.ts.map +1 -0
  8. package/dist/agents/frontend.js +50 -0
  9. package/dist/agents/frontend.js.map +1 -0
  10. package/dist/agents/index.d.ts +10 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +22 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/planner.d.ts +4 -0
  15. package/dist/agents/planner.d.ts.map +1 -0
  16. package/dist/agents/planner.js +86 -0
  17. package/dist/agents/planner.js.map +1 -0
  18. package/dist/agents/protocol.d.ts +5 -0
  19. package/dist/agents/protocol.d.ts.map +1 -0
  20. package/dist/agents/protocol.js +70 -0
  21. package/dist/agents/protocol.js.map +1 -0
  22. package/dist/agents/reasoner.d.ts +5 -0
  23. package/dist/agents/reasoner.d.ts.map +1 -0
  24. package/dist/agents/reasoner.js +96 -0
  25. package/dist/agents/reasoner.js.map +1 -0
  26. package/dist/agents/research.d.ts +4 -0
  27. package/dist/agents/research.d.ts.map +1 -0
  28. package/dist/agents/research.js +28 -0
  29. package/dist/agents/research.js.map +1 -0
  30. package/dist/agents/tester.d.ts +4 -0
  31. package/dist/agents/tester.d.ts.map +1 -0
  32. package/dist/agents/tester.js +70 -0
  33. package/dist/agents/tester.js.map +1 -0
  34. package/dist/core/agent-definition.d.ts +61 -0
  35. package/dist/core/agent-definition.d.ts.map +1 -0
  36. package/dist/core/agent-definition.js +82 -0
  37. package/dist/core/agent-definition.js.map +1 -0
  38. package/dist/core/ai-ask.d.ts +28 -0
  39. package/dist/core/ai-ask.d.ts.map +1 -0
  40. package/dist/core/ai-ask.js +80 -0
  41. package/dist/core/ai-ask.js.map +1 -0
  42. package/dist/core/ai-provider.d.ts +3 -0
  43. package/dist/core/ai-provider.d.ts.map +1 -1
  44. package/dist/core/ai-provider.js.map +1 -1
  45. package/dist/core/anthropic-provider.d.ts +1 -0
  46. package/dist/core/anthropic-provider.d.ts.map +1 -1
  47. package/dist/core/anthropic-provider.js +3 -0
  48. package/dist/core/anthropic-provider.js.map +1 -1
  49. package/dist/core/base-agent.d.ts +51 -28
  50. package/dist/core/base-agent.d.ts.map +1 -1
  51. package/dist/core/base-agent.js +118 -26
  52. package/dist/core/base-agent.js.map +1 -1
  53. package/dist/core/deepseek-provider.d.ts +1 -0
  54. package/dist/core/deepseek-provider.d.ts.map +1 -1
  55. package/dist/core/deepseek-provider.js +3 -0
  56. package/dist/core/deepseek-provider.js.map +1 -1
  57. package/dist/core/mcp-auto-execution-policy.d.ts +22 -0
  58. package/dist/core/mcp-auto-execution-policy.d.ts.map +1 -0
  59. package/dist/core/mcp-auto-execution-policy.js +85 -0
  60. package/dist/core/mcp-auto-execution-policy.js.map +1 -0
  61. package/dist/core/mcp-computer.d.ts +14 -1
  62. package/dist/core/mcp-computer.d.ts.map +1 -1
  63. package/dist/core/mcp-computer.js +352 -71
  64. package/dist/core/mcp-computer.js.map +1 -1
  65. package/dist/core/ollama-provider.d.ts +1 -0
  66. package/dist/core/ollama-provider.d.ts.map +1 -1
  67. package/dist/core/ollama-provider.js +3 -0
  68. package/dist/core/ollama-provider.js.map +1 -1
  69. package/dist/core/openai-provider.d.ts +1 -0
  70. package/dist/core/openai-provider.d.ts.map +1 -1
  71. package/dist/core/openai-provider.js +3 -0
  72. package/dist/core/openai-provider.js.map +1 -1
  73. package/dist/core/stateless-agent.d.ts +30 -0
  74. package/dist/core/stateless-agent.d.ts.map +1 -0
  75. package/dist/core/stateless-agent.js +79 -0
  76. package/dist/core/stateless-agent.js.map +1 -0
  77. package/dist/core/swarm-base.d.ts +88 -0
  78. package/dist/core/swarm-base.d.ts.map +1 -0
  79. package/dist/core/swarm-base.js +427 -0
  80. package/dist/core/swarm-base.js.map +1 -0
  81. package/dist/index.d.ts +13 -5
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +7 -3
  84. package/dist/index.js.map +1 -1
  85. package/dist/tests/agents/default-agents.test.d.ts +2 -0
  86. package/dist/tests/agents/default-agents.test.d.ts.map +1 -0
  87. package/dist/tests/agents/default-agents.test.js +106 -0
  88. package/dist/tests/agents/default-agents.test.js.map +1 -0
  89. package/dist/tests/core/agent-definition.test.d.ts +2 -0
  90. package/dist/tests/core/agent-definition.test.d.ts.map +1 -0
  91. package/dist/tests/core/agent-definition.test.js +99 -0
  92. package/dist/tests/core/agent-definition.test.js.map +1 -0
  93. package/dist/tests/core/ai-ask.test.d.ts +2 -0
  94. package/dist/tests/core/ai-ask.test.d.ts.map +1 -0
  95. package/dist/tests/core/ai-ask.test.js +101 -0
  96. package/dist/tests/core/ai-ask.test.js.map +1 -0
  97. package/dist/tests/core/mcp-auto-execution-policy.test.d.ts +2 -0
  98. package/dist/tests/core/mcp-auto-execution-policy.test.d.ts.map +1 -0
  99. package/dist/tests/core/mcp-auto-execution-policy.test.js +107 -0
  100. package/dist/tests/core/mcp-auto-execution-policy.test.js.map +1 -0
  101. package/dist/tests/core/scripted-provider.d.ts +38 -0
  102. package/dist/tests/core/scripted-provider.d.ts.map +1 -0
  103. package/dist/tests/core/scripted-provider.js +85 -0
  104. package/dist/tests/core/scripted-provider.js.map +1 -0
  105. package/dist/tests/core/stateless-agent.test.d.ts +2 -0
  106. package/dist/tests/core/stateless-agent.test.d.ts.map +1 -0
  107. package/dist/tests/core/stateless-agent.test.js +73 -0
  108. package/dist/tests/core/stateless-agent.test.js.map +1 -0
  109. package/dist/tests/core/swarm-base.test.d.ts +2 -0
  110. package/dist/tests/core/swarm-base.test.d.ts.map +1 -0
  111. package/dist/tests/core/swarm-base.test.js +387 -0
  112. package/dist/tests/core/swarm-base.test.js.map +1 -0
  113. package/dist/tests/index.d.ts +6 -0
  114. package/dist/tests/index.d.ts.map +1 -1
  115. package/dist/tests/index.js +6 -0
  116. package/dist/tests/index.js.map +1 -1
  117. package/dist/tests/tools/agent/agent-tools.test.js +225 -153
  118. package/dist/tests/tools/agent/agent-tools.test.js.map +1 -1
  119. package/dist/tools/agent/active.d.ts +5 -0
  120. package/dist/tools/agent/active.d.ts.map +1 -0
  121. package/dist/tools/agent/active.js +40 -0
  122. package/dist/tools/agent/active.js.map +1 -0
  123. package/dist/tools/agent/fire.d.ts +5 -0
  124. package/dist/tools/agent/fire.d.ts.map +1 -0
  125. package/dist/tools/agent/fire.js +38 -0
  126. package/dist/tools/agent/fire.js.map +1 -0
  127. package/dist/tools/agent/hire.d.ts +2 -2
  128. package/dist/tools/agent/hire.d.ts.map +1 -1
  129. package/dist/tools/agent/hire.js +43 -10
  130. package/dist/tools/agent/hire.js.map +1 -1
  131. package/dist/tools/agent/index.d.ts +22 -19
  132. package/dist/tools/agent/index.d.ts.map +1 -1
  133. package/dist/tools/agent/index.js +29 -21
  134. package/dist/tools/agent/index.js.map +1 -1
  135. package/dist/tools/agent/prompt.d.ts +2 -2
  136. package/dist/tools/agent/prompt.d.ts.map +1 -1
  137. package/dist/tools/agent/prompt.js +19 -53
  138. package/dist/tools/agent/prompt.js.map +1 -1
  139. package/dist/tools/agent/registry.d.ts +74 -24
  140. package/dist/tools/agent/registry.d.ts.map +1 -1
  141. package/dist/tools/agent/registry.js +93 -48
  142. package/dist/tools/agent/registry.js.map +1 -1
  143. package/dist/tools/agent/report-group.d.ts +5 -0
  144. package/dist/tools/agent/report-group.d.ts.map +1 -0
  145. package/dist/tools/agent/report-group.js +50 -0
  146. package/dist/tools/agent/report-group.js.map +1 -0
  147. package/dist/tools/agent/report-parent.d.ts +5 -0
  148. package/dist/tools/agent/report-parent.d.ts.map +1 -0
  149. package/dist/tools/agent/report-parent.js +36 -0
  150. package/dist/tools/agent/report-parent.js.map +1 -0
  151. package/dist/tools/agent/types.d.ts +5 -0
  152. package/dist/tools/agent/types.d.ts.map +1 -0
  153. package/dist/tools/agent/types.js +17 -0
  154. package/dist/tools/agent/types.js.map +1 -0
  155. package/docs/agents.md +249 -228
  156. package/docs/api-reference.md +9 -4
  157. package/docs/getting-started.md +78 -78
  158. package/docs/index.md +24 -23
  159. package/docs/mcp-architecture.md +71 -6
  160. package/docs/providers.md +258 -254
  161. package/docs/skills.md +0 -1
  162. package/docs/streaming.md +133 -133
  163. package/docs/swarm.md +503 -0
  164. package/docs/tools.md +214 -212
  165. package/package.json +1 -1
  166. package/dist/core/image-describer.d.ts +0 -19
  167. package/dist/core/image-describer.d.ts.map +0 -1
  168. package/dist/core/image-describer.js +0 -37
  169. package/dist/core/image-describer.js.map +0 -1
  170. package/dist/core/worker-agent.d.ts +0 -43
  171. package/dist/core/worker-agent.d.ts.map +0 -1
  172. package/dist/core/worker-agent.js +0 -40
  173. package/dist/core/worker-agent.js.map +0 -1
  174. package/dist/skills/shopping.d.ts +0 -4
  175. package/dist/skills/shopping.d.ts.map +0 -1
  176. package/dist/skills/shopping.js +0 -71
  177. package/dist/skills/shopping.js.map +0 -1
  178. package/dist/tools/agent/interaction.d.ts +0 -25
  179. package/dist/tools/agent/interaction.d.ts.map +0 -1
  180. package/dist/tools/agent/interaction.js +0 -14
  181. package/dist/tools/agent/interaction.js.map +0 -1
  182. package/dist/tools/agent/list.d.ts +0 -5
  183. package/dist/tools/agent/list.d.ts.map +0 -1
  184. package/dist/tools/agent/list.js +0 -16
  185. package/dist/tools/agent/list.js.map +0 -1
  186. package/dist/tools/agent/report.d.ts +0 -12
  187. package/dist/tools/agent/report.d.ts.map +0 -1
  188. package/dist/tools/agent/report.js +0 -31
  189. package/dist/tools/agent/report.js.map +0 -1
  190. package/dist/tools/bash/interaction.d.ts +0 -29
  191. package/dist/tools/bash/interaction.d.ts.map +0 -1
  192. package/dist/tools/bash/interaction.js +0 -13
  193. package/dist/tools/bash/interaction.js.map +0 -1
  194. package/dist/tools/browser/interaction.d.ts +0 -49
  195. package/dist/tools/browser/interaction.d.ts.map +0 -1
  196. package/dist/tools/browser/interaction.js +0 -14
  197. package/dist/tools/browser/interaction.js.map +0 -1
  198. package/dist/tools/fs/interaction.d.ts +0 -37
  199. package/dist/tools/fs/interaction.d.ts.map +0 -1
  200. package/dist/tools/fs/interaction.js +0 -13
  201. package/dist/tools/fs/interaction.js.map +0 -1
  202. package/dist/tools/present/interaction.d.ts +0 -17
  203. package/dist/tools/present/interaction.d.ts.map +0 -1
  204. package/dist/tools/present/interaction.js +0 -15
  205. package/dist/tools/present/interaction.js.map +0 -1
  206. package/dist/tools/question-answer/interaction.d.ts +0 -14
  207. package/dist/tools/question-answer/interaction.d.ts.map +0 -1
  208. package/dist/tools/question-answer/interaction.js +0 -13
  209. package/dist/tools/question-answer/interaction.js.map +0 -1
  210. package/dist/tools/todo/interaction.d.ts +0 -30
  211. package/dist/tools/todo/interaction.d.ts.map +0 -1
  212. package/dist/tools/todo/interaction.js +0 -13
  213. package/dist/tools/todo/interaction.js.map +0 -1
@@ -1,11 +1,15 @@
1
1
  import os from "os";
2
2
  import { randomUUID } from "crypto";
3
- import { spawn, execFileSync, ChildProcess } from "child_process";
3
+ import { spawn, execFileSync } from "child_process";
4
4
  import fs from "fs";
5
5
  import net from "net";
6
6
  import path from "path";
7
7
  import MCPIPCConnection from "./mcp-ipc-connection.js";
8
8
  import MCPWSConnection from "./mcp-ws-connection.js";
9
+ const PULL_ACTIVITY_RE = /Unable to find image|Pulling from|Pulling fs layer|Waiting|Downloading|Verifying Checksum|Download complete|Extracting|Pull complete|Digest:|Status: Downloaded/;
10
+ const READY_RE = /MCP Server Star(?:t)?ed/;
11
+ const BOOTING_RE = /Starting Sandbox MCP Server/;
12
+ const PORT_CONFLICT_RE = /port is already allocated|address already in use|bind: An attempt was made to access a socket/i;
9
13
  export class MCPComputer {
10
14
  #mountPath;
11
15
  #ports;
@@ -19,103 +23,169 @@ export class MCPComputer {
19
23
  #wsPort;
20
24
  #wsToken;
21
25
  #connection;
22
- constructor(mountPath, ports, image = "orbitx-sandbox:0.1") {
23
- this.#connectionMode = os.platform() === "win32" ? "ws" : "ipc";
26
+ #dockerBin;
27
+ #readyTimeoutMs;
28
+ #pullTimeoutMs;
29
+ #handshakeTimeoutMs;
30
+ #onLog;
31
+ #started = false;
32
+ #stopped = false;
33
+ #log = [];
34
+ constructor(mountPath, ports, image = "aliafsordeh/orbitx-sandbox:0.2", options = {}) {
35
+ this.#connectionMode = options.connectionMode ?? (os.platform() === "linux" ? "ipc" : "ws");
24
36
  this.#hostNetwork = ports === "*";
25
37
  this.#mountPath = path.resolve(mountPath);
26
38
  this.#ports = ports;
27
39
  this.#image = image;
28
40
  this.#containerName = `mcp-sandbox-${randomUUID()}`;
29
- this.#ipcPath = `/tmp/mcp-server-${randomUUID()}`;
41
+ this.#ipcPath = path.join(os.tmpdir(), `mcp-server-${randomUUID()}`);
30
42
  this.#wsPort = 0;
31
43
  this.#wsToken = randomUUID();
44
+ this.#dockerBin = options.dockerBin ?? "docker";
45
+ this.#readyTimeoutMs = options.readyTimeoutMs ?? 60_000;
46
+ this.#pullTimeoutMs = options.pullTimeoutMs ?? 300_000;
47
+ this.#handshakeTimeoutMs = options.handshakeTimeoutMs ?? 20_000;
48
+ this.#onLog = options.onLog;
49
+ if (this.#hostNetwork && this.#connectionMode === "ws" && os.platform() !== "linux") {
50
+ throw new Error("MCPComputer: ports \"*\" (--network host) does not work on Windows or macOS — Docker Desktop puts the "
51
+ + "container in a VM's network namespace, so nothing it binds is reachable from this machine and "
52
+ + "published ports are ignored. Pass an explicit port list instead, e.g. new MCPComputer(path, [3000, 5173]).");
53
+ }
32
54
  }
33
- getConnection(wsHost = "localhost") {
55
+ getConnection(wsHost = "127.0.0.1") {
56
+ if (this.#connection)
57
+ return this.#connection;
34
58
  if (this.#connectionMode === "ipc") {
35
- this.#connection = new MCPIPCConnection({
36
- socketPath: `${this.#ipcPath}/socket.sock`,
59
+ this.#connection = this.#guard(new MCPIPCConnection({
60
+ socketPath: path.join(this.#ipcPath, "socket.sock"),
37
61
  mode: "client",
38
- });
62
+ }));
39
63
  return this.#connection;
40
64
  }
41
65
  if (!this.#wsPort) {
42
- throw new Error("getConnection() is only available in 'ws' mode after start() has resolved a port.");
66
+ throw new Error("MCPComputer: getConnection() is only available in 'ws' mode after start() has resolved a port.");
43
67
  }
44
- this.#connection = new MCPWSConnection({
68
+ this.#connection = this.#guard(new MCPWSConnection({
45
69
  mode: "client",
46
70
  url: `ws://${wsHost}:${this.#wsPort}`,
47
71
  token: this.#wsToken,
48
- });
72
+ }));
49
73
  return this.#connection;
50
74
  }
75
+ #guard(connection) {
76
+ connection.on("error", (err) => {
77
+ this.#record(`[mcp-computer] connection error: ${err instanceof Error ? err.message : String(err)}\n`, "stderr");
78
+ });
79
+ return connection;
80
+ }
81
+ async waitUntilConnected(timeoutMs = this.#handshakeTimeoutMs) {
82
+ const connection = this.getConnection();
83
+ await new Promise((resolve, reject) => {
84
+ let settled = false;
85
+ const onConnected = () => {
86
+ if (settled)
87
+ return;
88
+ settled = true;
89
+ clearTimeout(timer);
90
+ resolve();
91
+ };
92
+ const timer = setTimeout(() => {
93
+ if (settled)
94
+ return;
95
+ settled = true;
96
+ connection.off("connected", onConnected);
97
+ reject(new Error(`MCPComputer: connection did not come up within ${timeoutMs}ms.`));
98
+ }, timeoutMs);
99
+ timer.unref?.();
100
+ connection.once("connected", onConnected);
101
+ });
102
+ return connection;
103
+ }
51
104
  getPresentsHostPath() {
52
105
  return path.join(this.#mountPath, "presents");
53
106
  }
107
+ getConnectionPort() {
108
+ return this.#wsPort;
109
+ }
110
+ getContainerName() {
111
+ return this.#containerName;
112
+ }
54
113
  #prepareHostPaths(containerUid = 1000, containerGid = 1000) {
55
- const workspaceHost = path.join(this.#mountPath, "workspace");
56
- const storageHost = path.join(this.#mountPath, "mcp-server-storage");
57
- const presentsHost = path.join(this.#mountPath, "presents");
58
- const userInputsHost = path.join(this.#mountPath, "user-inputs");
59
- const dirs = [workspaceHost, storageHost, presentsHost, userInputsHost];
114
+ const dirs = [
115
+ path.join(this.#mountPath, "workspace"),
116
+ path.join(this.#mountPath, "mcp-server-storage"),
117
+ path.join(this.#mountPath, "presents"),
118
+ path.join(this.#mountPath, "user-inputs"),
119
+ ];
60
120
  if (this.#connectionMode === "ipc") {
61
121
  dirs.push(this.#ipcPath);
62
122
  }
63
123
  for (const dir of dirs) {
64
124
  fs.mkdirSync(dir, { recursive: true });
65
125
  }
126
+ if (os.platform() !== "linux")
127
+ return;
66
128
  for (const dir of dirs) {
129
+ let stat;
130
+ try {
131
+ stat = fs.statSync(dir);
132
+ }
133
+ catch {
134
+ continue;
135
+ }
136
+ if (stat.uid === containerUid && stat.gid === containerGid)
137
+ continue;
67
138
  try {
68
139
  fs.chownSync(dir, containerUid, containerGid);
140
+ continue;
69
141
  }
70
142
  catch (err) {
71
- if (err.code === "EPERM") {
72
- try {
73
- execFileSync("sudo", ["chown", "-R", `${containerUid}:${containerGid}`, dir]);
74
- }
75
- catch {
76
- throw new Error(`Could not chown ${dir} to ${containerUid}:${containerGid}.`);
77
- }
78
- }
79
- else {
143
+ if (err?.code !== "EPERM")
80
144
  throw err;
81
- }
145
+ }
146
+ try {
147
+ execFileSync("sudo", ["-n", "chown", "-R", `${containerUid}:${containerGid}`, dir], { stdio: "ignore" });
148
+ }
149
+ catch {
150
+ throw new Error(`MCPComputer: could not chown ${dir} to ${containerUid}:${containerGid}, and the sandbox runs as `
151
+ + `uid ${containerUid} so it would not be able to write there. Run this once by hand:\n`
152
+ + ` sudo chown -R ${containerUid}:${containerGid} ${dir}`);
82
153
  }
83
154
  }
84
155
  }
85
- /** Finds a free TCP port on the host by briefly binding to port 0. */
86
156
  #pickFreePort() {
87
157
  return new Promise((resolve, reject) => {
88
158
  const srv = net.createServer();
89
159
  srv.unref();
90
160
  srv.on("error", reject);
91
- srv.listen(0, () => {
161
+ srv.listen({ port: 0, host: "127.0.0.1" }, () => {
92
162
  const address = srv.address();
93
163
  if (address && typeof address === "object") {
94
164
  const port = address.port;
95
165
  srv.close(() => resolve(port));
96
166
  }
97
167
  else {
98
- srv.close(() => reject(new Error("Could not determine a free port.")));
168
+ srv.close(() => reject(new Error("MCPComputer: could not determine a free port.")));
99
169
  }
100
170
  });
101
171
  });
102
172
  }
173
+ #bindPath(target) {
174
+ const resolved = path.resolve(target);
175
+ return os.platform() === "win32" ? resolved.replace(/\\/g, "/") : resolved;
176
+ }
103
177
  #buildDockerArgs() {
104
- const workspaceHost = path.join(this.#mountPath, "workspace");
105
- const storageHost = path.join(this.#mountPath, "mcp-server-storage");
106
- const presentsHost = path.join(this.#mountPath, "presents");
107
- const userInputsHost = path.join(this.#mountPath, "user-inputs");
108
178
  const args = [
109
- "run", "--rm",
179
+ "run", "--rm", "--init",
110
180
  "--name", this.#containerName,
111
- "-v", `${workspaceHost}:/home/ubuntu/workspace`,
112
- "-v", `${storageHost}:/home/ubuntu/mcp-data`,
113
- "-v", `${presentsHost}:/home/ubuntu/presents`,
114
- "-v", `${userInputsHost}:/home/ubuntu/user-inputs`,
181
+ "-v", `${this.#bindPath(path.join(this.#mountPath, "workspace"))}:/home/ubuntu/workspace`,
182
+ "-v", `${this.#bindPath(path.join(this.#mountPath, "mcp-server-storage"))}:/home/ubuntu/mcp-data`,
183
+ "-v", `${this.#bindPath(path.join(this.#mountPath, "presents"))}:/home/ubuntu/presents`,
184
+ "-v", `${this.#bindPath(path.join(this.#mountPath, "user-inputs"))}:/home/ubuntu/user-inputs`,
115
185
  "-e", "PRESENT_PATH=/home/ubuntu/presents",
116
186
  ];
117
187
  if (this.#connectionMode === "ipc") {
118
- args.push("-v", `${this.#ipcPath}:/tmp/mcp-server`);
188
+ args.push("-v", `${this.#bindPath(this.#ipcPath)}:/tmp/mcp-server`);
119
189
  args.push("-e", "CONNECTION_MODE=IPC");
120
190
  args.push("-e", "CONNECTION_PATH=/tmp/mcp-server/socket.sock");
121
191
  }
@@ -133,70 +203,280 @@ export class MCPComputer {
133
203
  args.push("-p", `${port}:${port}`);
134
204
  }
135
205
  if (this.#connectionMode === "ws") {
136
- args.push("-p", `${this.#wsPort}:${this.#wsPort}`);
206
+ args.push("-p", `127.0.0.1:${this.#wsPort}:${this.#wsPort}`);
137
207
  }
138
208
  }
139
209
  args.push(this.#image);
140
210
  return args;
141
211
  }
142
212
  async start() {
143
- if (this.#connectionMode === "ws") {
144
- this.#wsPort = await this.#pickFreePort();
213
+ if (this.#started) {
214
+ throw new Error("MCPComputer: start() has already been called on this instance.");
145
215
  }
216
+ this.#started = true;
217
+ this.#stopped = false;
218
+ await this.#assertDockerAvailable();
146
219
  this.#prepareHostPaths();
147
- const args = this.#buildDockerArgs();
148
- const child = spawn("docker", args, { stdio: ["ignore", "pipe", "pipe"] });
220
+ const attempts = this.#connectionMode === "ws" && !this.#hostNetwork ? 3 : 1;
221
+ for (let attempt = 1; attempt <= attempts; attempt++) {
222
+ if (this.#connectionMode === "ws") {
223
+ this.#wsPort = await this.#pickFreePort();
224
+ }
225
+ try {
226
+ await this.#launch();
227
+ return;
228
+ }
229
+ catch (err) {
230
+ await this.#teardownChild();
231
+ const retryable = attempt < attempts && PORT_CONFLICT_RE.test(String(err?.message ?? err));
232
+ if (!retryable) {
233
+ this.#started = false;
234
+ throw err;
235
+ }
236
+ }
237
+ }
238
+ }
239
+ async #launch() {
240
+ this.#log = [];
241
+ const child = spawn(this.#dockerBin, this.#buildDockerArgs(), {
242
+ stdio: ["ignore", "pipe", "pipe"],
243
+ windowsHide: true,
244
+ });
149
245
  this.#child = child;
150
246
  this.#exitHandler = () => {
151
247
  try {
152
- execFileSync("docker", ["kill", this.#containerName], { stdio: "ignore" });
248
+ execFileSync(this.#dockerBin, ["rm", "-f", this.#containerName], { stdio: "ignore", timeout: 10_000 });
153
249
  }
154
250
  catch {
155
- // already stopped, fine
251
+ // already gone, fine
156
252
  }
157
253
  };
158
254
  process.on("exit", this.#exitHandler);
159
- await this.#waitForReadyLog(child);
255
+ child.on("exit", (code, signal) => {
256
+ this.#record(`[mcp-computer] container exited (${signal ? `signal ${signal}` : `exit code ${code}`})\n`, "stderr");
257
+ });
258
+ await this.#waitForReady(child);
259
+ await this.#waitForEndpoint();
160
260
  }
161
- #waitForReadyLog(child, timeoutMs = 30_000) {
162
- const READY_RE = /MCP Server Stared/;
261
+ isRunning() {
262
+ const child = this.#child;
263
+ return !!child && child.exitCode === null && child.signalCode === null;
264
+ }
265
+ #waitForReady(child) {
163
266
  return new Promise((resolve, reject) => {
164
- const timer = setTimeout(() => {
165
- child.stdout?.off("data", onData);
166
- reject(new Error(`timed out waiting for container ready log after ${timeoutMs}ms`));
167
- }, timeoutMs);
168
- const onData = (chunk) => {
169
- if (READY_RE.test(chunk.toString())) {
170
- clearTimeout(timer);
171
- child.stdout?.off("data", onData);
172
- resolve();
267
+ let settled = false;
268
+ let pending = "";
269
+ let timer;
270
+ const arm = (ms) => {
271
+ clearTimeout(timer);
272
+ timer = setTimeout(() => {
273
+ fail(new Error(`MCPComputer: timed out after ${ms}ms waiting for the sandbox to report ready.`
274
+ + this.#logTail()));
275
+ }, ms);
276
+ timer.unref?.();
277
+ };
278
+ const settle = (fn) => {
279
+ if (settled)
280
+ return;
281
+ settled = true;
282
+ clearTimeout(timer);
283
+ child.off("error", onError);
284
+ child.off("exit", onExit);
285
+ fn();
286
+ };
287
+ const done = () => settle(resolve);
288
+ const fail = (err) => settle(() => reject(err));
289
+ const consume = (stream) => (chunk) => {
290
+ const text = chunk.toString("utf8");
291
+ this.#record(text, stream);
292
+ if (settled)
293
+ return;
294
+ pending = (pending + text).slice(-4096);
295
+ if (PULL_ACTIVITY_RE.test(text)) {
296
+ arm(this.#pullTimeoutMs);
297
+ }
298
+ else if (BOOTING_RE.test(pending)) {
299
+ arm(this.#readyTimeoutMs);
173
300
  }
301
+ if (READY_RE.test(pending))
302
+ done();
303
+ };
304
+ const onError = (err) => {
305
+ if (err?.code === "ENOENT") {
306
+ fail(new Error(`MCPComputer: '${this.#dockerBin}' was not found on PATH. Install Docker (or pass `
307
+ + `{ dockerBin } to the constructor) and make sure it is on this process's PATH.`));
308
+ return;
309
+ }
310
+ fail(new Error(`MCPComputer: failed to launch '${this.#dockerBin}' — ${err?.message ?? err}`));
311
+ };
312
+ const onExit = (code, signal) => {
313
+ fail(new Error(`MCPComputer: the container exited before reporting ready `
314
+ + `(${signal ? `signal ${signal}` : `exit code ${code}`}).`
315
+ + this.#logTail()));
174
316
  };
175
- child.stdout?.on("data", onData);
317
+ child.stdout?.on("data", consume("stdout"));
318
+ child.stderr?.on("data", consume("stderr"));
319
+ child.stdout?.on("error", () => { });
320
+ child.stderr?.on("error", () => { });
321
+ child.on("error", onError);
322
+ child.on("exit", onExit);
323
+ arm(this.#readyTimeoutMs);
176
324
  });
177
325
  }
178
- async stop() {
326
+ async #waitForEndpoint() {
327
+ const deadline = Date.now() + this.#handshakeTimeoutMs;
328
+ const attempt = this.#connectionMode === "ipc"
329
+ ? async () => fs.existsSync(path.join(this.#ipcPath, "socket.sock"))
330
+ : () => this.#probeTcp(this.#wsPort);
331
+ let lastError;
332
+ while (Date.now() < deadline) {
333
+ if (this.#child?.exitCode !== null && this.#child?.exitCode !== undefined) {
334
+ throw new Error(`MCPComputer: the container exited while waiting for its endpoint.${this.#logTail()}`);
335
+ }
336
+ try {
337
+ if (await attempt())
338
+ return;
339
+ }
340
+ catch (err) {
341
+ lastError = err;
342
+ }
343
+ await new Promise((r) => setTimeout(r, 150));
344
+ }
345
+ const where = this.#connectionMode === "ipc"
346
+ ? path.join(this.#ipcPath, "socket.sock")
347
+ : `127.0.0.1:${this.#wsPort}`;
348
+ throw new Error(`MCPComputer: the sandbox reported ready but ${where} never accepted a connection within `
349
+ + `${this.#handshakeTimeoutMs}ms${lastError ? ` (${lastError.message})` : ""}.${this.#logTail()}`);
350
+ }
351
+ #probeTcp(port, timeoutMs = 1_000) {
352
+ return new Promise((resolve) => {
353
+ const socket = net.connect({ port, host: "127.0.0.1" });
354
+ let settled = false;
355
+ const finish = (ok) => {
356
+ if (settled)
357
+ return;
358
+ settled = true;
359
+ clearTimeout(timer);
360
+ socket.destroy();
361
+ resolve(ok);
362
+ };
363
+ const timer = setTimeout(() => finish(false), timeoutMs);
364
+ timer.unref?.();
365
+ socket.once("connect", () => finish(true));
366
+ socket.once("error", () => finish(false));
367
+ });
368
+ }
369
+ async #assertDockerAvailable() {
370
+ const result = await this.#exec(["info", "--format", "{{.ServerVersion}}"], 30_000);
371
+ if (result.code === 0)
372
+ return;
373
+ const detail = (result.stderr || result.stdout).trim().split("\n").slice(0, 4).join("\n");
374
+ throw new Error(`MCPComputer: cannot reach the Docker daemon via '${this.#dockerBin}'. Start Docker Desktop `
375
+ + `(or dockerd) and try again.${detail ? `\n ${detail}` : ""}`);
376
+ }
377
+ #exec(args, timeoutMs) {
378
+ return new Promise((resolve) => {
379
+ let child;
380
+ try {
381
+ child = spawn(this.#dockerBin, args, { stdio: ["ignore", "pipe", "pipe"], windowsHide: true });
382
+ }
383
+ catch (err) {
384
+ resolve({ code: null, stdout: "", stderr: String(err?.message ?? err) });
385
+ return;
386
+ }
387
+ let stdout = "";
388
+ let stderr = "";
389
+ let settled = false;
390
+ const finish = (code) => {
391
+ if (settled)
392
+ return;
393
+ settled = true;
394
+ clearTimeout(timer);
395
+ resolve({ code, stdout, stderr });
396
+ };
397
+ const timer = setTimeout(() => {
398
+ try {
399
+ child.kill("SIGKILL");
400
+ }
401
+ catch { }
402
+ stderr += `\n(timed out after ${timeoutMs}ms)`;
403
+ finish(null);
404
+ }, timeoutMs);
405
+ timer.unref?.();
406
+ child.stdout?.on("data", (c) => { stdout += c.toString("utf8"); });
407
+ child.stderr?.on("data", (c) => { stderr += c.toString("utf8"); });
408
+ child.once("error", (err) => { stderr += err?.message ?? String(err); finish(null); });
409
+ child.once("close", (code) => finish(code));
410
+ });
411
+ }
412
+ #record(text, stream) {
413
+ this.#log.push(text);
414
+ // Bounded so a long-lived sandbox cannot grow this without limit.
415
+ if (this.#log.length > 400)
416
+ this.#log.splice(0, this.#log.length - 400);
417
+ if (!this.#onLog)
418
+ return;
419
+ for (const line of text.split("\n")) {
420
+ if (line.trim())
421
+ this.#onLog(line, stream);
422
+ }
423
+ }
424
+ #logTail(maxLines = 20) {
425
+ const lines = this.#log.join("").split("\n").map((l) => l.trimEnd()).filter(Boolean);
426
+ if (!lines.length)
427
+ return "\n (the container produced no output)";
428
+ return `\n container output:\n${lines.slice(-maxLines).map((l) => ` ${l}`).join("\n")}`;
429
+ }
430
+ async #teardownChild() {
179
431
  if (this.#exitHandler) {
180
432
  process.off("exit", this.#exitHandler);
181
433
  this.#exitHandler = null;
182
434
  }
183
435
  const child = this.#child;
184
436
  this.#child = null;
185
- if (!child) {
437
+ if (!child)
186
438
  return;
187
- }
188
- const exited = new Promise((resolve) => {
189
- child.once("exit", () => resolve());
190
- child.once("error", () => resolve());
191
- });
439
+ const alreadyExited = child.exitCode !== null || child.signalCode !== null;
440
+ const exited = alreadyExited
441
+ ? Promise.resolve()
442
+ : new Promise((resolve) => {
443
+ child.once("exit", () => resolve());
444
+ child.once("error", () => resolve());
445
+ });
446
+ await this.#exec(["rm", "-f", this.#containerName], 20_000);
447
+ await Promise.race([
448
+ exited,
449
+ new Promise((resolve) => {
450
+ const timer = setTimeout(() => {
451
+ try {
452
+ child.kill();
453
+ }
454
+ catch { }
455
+ resolve();
456
+ }, 10_000);
457
+ timer.unref?.();
458
+ }),
459
+ ]);
460
+ }
461
+ async stop() {
462
+ if (this.#stopped)
463
+ return;
464
+ this.#stopped = true;
465
+ this.#connection?.close();
466
+ this.#connection = undefined;
192
467
  try {
193
- execFileSync("docker", ["kill", this.#containerName], { stdio: "ignore" });
468
+ await this.#teardownChild();
194
469
  }
195
- catch {
196
- // already stopped, fine
470
+ finally {
471
+ if (this.#connectionMode === "ipc") {
472
+ try {
473
+ fs.rmSync(this.#ipcPath, { recursive: true, force: true });
474
+ }
475
+ catch {
476
+ // the socket dir is disposable; a leftover in tmpdir is not worth failing stop() over
477
+ }
478
+ }
197
479
  }
198
- this.#connection?.close();
199
- await exited;
200
480
  }
201
481
  getInstructions() {
202
482
  const workspacePath = "/home/ubuntu/workspace";
@@ -213,6 +493,7 @@ export class MCPComputer {
213
493
  `User input files path: ${userInputsPath}`,
214
494
  `Presents path: ${presentsPath} (files passed to the present-add tool are copied here and surfaced to the user by the host application)`,
215
495
  `Open ports: ${portsList}`,
496
+ `Servers you start must bind 0.0.0.0 (not localhost) or the host will not be able to reach them.`,
216
497
  `End of sandbox info`
217
498
  ].join("\n");
218
499
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-computer.js","sourceRoot":"","sources":["../../src/core/mcp-computer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,eAAe,MAAM,wBAAwB,CAAC;AAIrD,MAAM,OAAO,WAAW;IACpB,UAAU,CAAS;IACnB,MAAM,CAAiB;IACvB,YAAY,CAAU;IACtB,MAAM,CAAS;IACf,cAAc,CAAS;IACvB,MAAM,GAAoC,IAAI,CAAC;IAC/C,YAAY,GAAwB,IAAI,CAAC;IAEzC,eAAe,CAAiB;IAChC,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,QAAQ,CAAS;IAEjB,WAAW,CAA4B;IAEvC,YAAY,SAAiB,EAAE,KAAqB,EAAE,QAAgB,oBAAoB;QACtF,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAEhE,IAAI,CAAC,YAAY,GAAG,KAAK,KAAK,GAAG,CAAC;QAElC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,eAAe,UAAU,EAAE,EAAE,CAAC;QAEpD,IAAI,CAAC,QAAQ,GAAG,mBAAmB,UAAU,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,SAAiB,WAAW;QACtC,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC;gBACpC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,cAAc;gBAC1C,IAAI,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC;YACnC,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,QAAQ,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACrC,KAAK,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAGD,iBAAiB,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAExE,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC;gBACD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC;wBACD,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,IAAI,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBAClF,CAAC;oBAAC,MAAM,CAAC;wBACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,YAAY,IAAI,YAAY,GAAG,CAAC,CAAC;oBAClF,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,CAAC;gBACd,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,aAAa;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAC/B,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;gBACf,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;oBAC1B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;gBAC3E,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gBAAgB;QACZ,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAEjE,MAAM,IAAI,GAAG;YACT,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,IAAI,EAAE,GAAG,aAAa,yBAAyB;YAC/C,IAAI,EAAE,GAAG,WAAW,wBAAwB;YAC5C,IAAI,EAAE,GAAG,YAAY,wBAAwB;YAC7C,IAAI,EAAE,GAAG,cAAc,2BAA2B;YAClD,IAAI,EAAE,oCAAoC;SAC7C,CAAC;QAEF,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,kBAAkB,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,6CAA6C,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC;gBACD,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACL,wBAAwB;YAC5B,CAAC;QACL,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB,CAAC,KAAmB,EAAE,SAAS,GAAG,MAAM;QACpD,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QAErC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAClC,MAAM,CAAC,IAAI,KAAK,CAAC,mDAAmD,SAAS,IAAI,CAAC,CAAC,CAAC;YACxF,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oBAClC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAClC,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CAAC;YAEF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACzC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAE1B,MAAM,MAAM,CAAC;IACjB,CAAC;IAED,eAAe;QACX,MAAM,aAAa,GAAG,wBAAwB,CAAC;QAC/C,MAAM,YAAY,GAAG,uBAAuB,CAAC;QAC7C,MAAM,cAAc,GAAG,0BAA0B,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY;YAC/B,CAAC,CAAC,8DAA8D;YAChE,CAAC,CAAE,IAAI,CAAC,MAAmB,CAAC,MAAM,GAAG,CAAC;gBAClC,CAAC,CAAE,IAAI,CAAC,MAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtC,CAAC,CAAC,MAAM,CAAC;QAEjB,OAAO;YACH,cAAc;YACd,mBAAmB,aAAa,EAAE;YAClC,0BAA0B,cAAc,EAAE;YAC1C,kBAAkB,YAAY,0GAA0G;YACxI,eAAe,SAAS,EAAE;YAC1B,qBAAqB;SACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;CACJ;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"mcp-computer.js","sourceRoot":"","sources":["../../src/core/mcp-computer.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export declare class OllamaProvider extends AIProvider {
8
8
  thinkEffort?: number;
9
9
  userId?: string;
10
10
  });
11
+ getModel(): string;
11
12
  getCapabilities(): ProviderCapabilities;
12
13
  /** Settable without reconstructing this provider: `thinkEffort`, `supportsTools` — read fresh from the corresponding private field on every `chat()` call. */
13
14
  setOption(key: string, value: unknown): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ollama-provider.d.ts","sourceRoot":"","sources":["../../src/core/ollama-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAmB,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACjI,OAAO,UAAU,MAAM,kBAAkB,CAAC;AA+D1C,qBAAa,cAAe,SAAQ,UAAU;;gBAa9B,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiC,EAAE,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAS5K,eAAe,IAAI,oBAAoB;IAoBvC,8JAA8J;IAC9J,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAQtC,IAAI,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,CAAC,EAAE,cAAc,EAC/B,KAAK,CAAC,EAAE,UAAU,EAAE,EACpB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,CAAC;CAoH3B;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ollama-provider.d.ts","sourceRoot":"","sources":["../../src/core/ollama-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAmB,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACjI,OAAO,UAAU,MAAM,kBAAkB,CAAC;AA+D1C,qBAAa,cAAe,SAAQ,UAAU;;gBAa9B,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiC,EAAE,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAS5K,QAAQ,IAAI,MAAM;IAIlB,eAAe,IAAI,oBAAoB;IAoBvC,8JAA8J;IAC9J,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAQtC,IAAI,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,CAAC,EAAE,cAAc,EAC/B,KAAK,CAAC,EAAE,UAAU,EAAE,EACpB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,CAAC;CAoH3B;AAED,eAAe,cAAc,CAAC"}
@@ -74,6 +74,9 @@ export class OllamaProvider extends AIProvider {
74
74
  this.#contextWindow = options.contextWindow ?? DEFAULT_CONTEXT_WINDOW;
75
75
  this.#thinkEffort = options.thinkEffort;
76
76
  }
77
+ getModel() {
78
+ return this.#model;
79
+ }
77
80
  getCapabilities() {
78
81
  return {
79
82
  supportsTools: this.#supportsTools,