orbitx 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +48 -8
- package/dist/core/anthropic-provider.d.ts +1 -6
- package/dist/core/anthropic-provider.d.ts.map +1 -1
- package/dist/core/anthropic-provider.js +22 -22
- package/dist/core/anthropic-provider.js.map +1 -1
- package/dist/core/deepseek-provider.d.ts +1 -4
- package/dist/core/deepseek-provider.d.ts.map +1 -1
- package/dist/core/deepseek-provider.js +15 -15
- package/dist/core/deepseek-provider.js.map +1 -1
- package/dist/core/mcp-client.d.ts +0 -8
- package/dist/core/mcp-client.d.ts.map +1 -1
- package/dist/core/mcp-client.js +7 -15
- package/dist/core/mcp-client.js.map +1 -1
- package/dist/core/mcp-computer.d.ts +3 -5
- package/dist/core/mcp-computer.d.ts.map +1 -1
- package/dist/core/mcp-computer.js +70 -28
- package/dist/core/mcp-computer.js.map +1 -1
- package/dist/core/mcp-connection.d.ts +17 -0
- package/dist/core/mcp-connection.d.ts.map +1 -1
- package/dist/core/mcp-connection.js +24 -2
- package/dist/core/mcp-connection.js.map +1 -1
- package/dist/core/mcp-ipc-connection.d.ts +13 -14
- package/dist/core/mcp-ipc-connection.d.ts.map +1 -1
- package/dist/core/mcp-ipc-connection.js +75 -64
- package/dist/core/mcp-ipc-connection.js.map +1 -1
- package/dist/core/mcp-server.js +4 -4
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/core/mcp-ws-connection.d.ts +45 -0
- package/dist/core/mcp-ws-connection.d.ts.map +1 -0
- package/dist/core/mcp-ws-connection.js +165 -0
- package/dist/core/mcp-ws-connection.js.map +1 -0
- package/dist/core/ollama-provider.d.ts +1 -4
- package/dist/core/ollama-provider.d.ts.map +1 -1
- package/dist/core/ollama-provider.js +16 -16
- package/dist/core/ollama-provider.js.map +1 -1
- package/dist/core/openai-provider.d.ts +1 -5
- package/dist/core/openai-provider.d.ts.map +1 -1
- package/dist/core/openai-provider.js +18 -18
- package/dist/core/openai-provider.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/sandbox.js +19 -3
- package/dist/sandbox.js.map +1 -1
- package/package.json +4 -2
package/Readme.md
CHANGED
|
@@ -13,7 +13,7 @@ The fastest way to get an agent running is `SimpleAgent` — give it a provider,
|
|
|
13
13
|
```ts
|
|
14
14
|
import { OllamaProvider, SimpleAgent, GetCurrentTimeTool } from "orbitx";
|
|
15
15
|
|
|
16
|
-
const ollamaProvider = new OllamaProvider("
|
|
16
|
+
const ollamaProvider = new OllamaProvider("gemma4:e4b");
|
|
17
17
|
|
|
18
18
|
const agent = new SimpleAgent({
|
|
19
19
|
aiProvider: ollamaProvider,
|
|
@@ -79,7 +79,7 @@ OrbitX ships with pluggable AI providers so you can swap models without changing
|
|
|
79
79
|
```ts
|
|
80
80
|
import { OllamaProvider } from "orbitx";
|
|
81
81
|
|
|
82
|
-
const ollamaProvider = new OllamaProvider("
|
|
82
|
+
const ollamaProvider = new OllamaProvider("gemma4:e4b");
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
### DeepSeek
|
|
@@ -130,6 +130,13 @@ Tools are grouped by domain. Import each group's array (e.g. `FsTools()`) to get
|
|
|
130
130
|
|
|
131
131
|
### Filesystem (`FsTools`)
|
|
132
132
|
|
|
133
|
+
⚠️ EXTREMELY IMPORTANT WARNING ABOUT `FsWriteFileTool` / `FsDeleteTool` ⚠️
|
|
134
|
+
|
|
135
|
+
🔴 CRITICAL: FsWriteFileTool and FsDeleteTool can permanently overwrite, delete, or corrupt existing files – no undo available.
|
|
136
|
+
|
|
137
|
+
We strongly prefer running bash commands through MCPComputer, which provides a sandboxed, isolated environment – protecting your host system from accidental damage.
|
|
138
|
+
|
|
139
|
+
|
|
133
140
|
| Tool | Purpose |
|
|
134
141
|
|---|---|
|
|
135
142
|
| `FsReadFileTool` | Read a text file, paging through large files by line. |
|
|
@@ -143,6 +150,12 @@ Tools are grouped by domain. Import each group's array (e.g. `FsTools()`) to get
|
|
|
143
150
|
|
|
144
151
|
### Bash / processes (`BashTools`)
|
|
145
152
|
|
|
153
|
+
⚠️ EXTREMELY IMPORTANT WARNING ABOUT `BashRunTool` ⚠️
|
|
154
|
+
|
|
155
|
+
🔴 CRITICAL: Shell commands can permanently delete files, corrupt data, modify system settings, or execute harmful operations – no undo available.
|
|
156
|
+
|
|
157
|
+
We strongly prefer running bash commands through MCPComputer, which provides a sandboxed, isolated environment – protecting your host system from accidental damage.
|
|
158
|
+
|
|
146
159
|
| Tool | Purpose |
|
|
147
160
|
|---|---|
|
|
148
161
|
| `BashRunTool` | Launch a shell command as a background process; returns immediately if it's still running after `waitMs` (e.g. a dev server). |
|
|
@@ -234,7 +247,7 @@ import {
|
|
|
234
247
|
GetCurrentTimeTool,
|
|
235
248
|
} from "orbitx";
|
|
236
249
|
|
|
237
|
-
const ollamaProvider = new OllamaProvider("
|
|
250
|
+
const ollamaProvider = new OllamaProvider("gemma4:e4b");
|
|
238
251
|
|
|
239
252
|
const connection = new MCPConnection();
|
|
240
253
|
|
|
@@ -276,16 +289,24 @@ import { MCPIPCConnection } from "orbitx";
|
|
|
276
289
|
const path =
|
|
277
290
|
os.platform() === "win32" ? `\\\\.\\pipe\\mcp_test` : `/tmp/mcp_test.sock`;
|
|
278
291
|
|
|
279
|
-
const ipcConnection = new MCPIPCConnection(path);
|
|
292
|
+
const ipcConnection = new MCPIPCConnection({ mode: "server", socketPath: path });
|
|
280
293
|
```
|
|
281
294
|
|
|
282
|
-
|
|
295
|
+
### WS Connections
|
|
283
296
|
|
|
284
|
-
|
|
297
|
+
Run your MCP server as a separate process and connect to it over an web-socket communication (WS) channel:
|
|
285
298
|
|
|
286
|
-
|
|
299
|
+
```ts
|
|
300
|
+
import os from "os";
|
|
301
|
+
import { MCPWSConnection } from "orbitx";
|
|
287
302
|
|
|
288
|
-
|
|
303
|
+
const wsConnection = new MCPWSConnection({ mode: "server", host: "0.0.0.0", port: 9257, token: "1234" });
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
## Creating a Custom Tool
|
|
308
|
+
|
|
309
|
+
Define your own tools with `MCPTool` to extend an agent's capabilities and integrate with your own ecosystem.
|
|
289
310
|
|
|
290
311
|
```ts
|
|
291
312
|
import { MCPTool } from "orbitx";
|
|
@@ -366,4 +387,23 @@ const agent = new SimpleAgent({
|
|
|
366
387
|
});
|
|
367
388
|
```
|
|
368
389
|
|
|
390
|
+
## MCPComputer (Experimental Feature)
|
|
391
|
+
|
|
392
|
+
Spins up a sandboxed Docker container running the MCP server and returns a ready-to-use client connection — no need to manage IPC sockets, ports, or tokens manually.
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
import { MCPComputer } from "orbitx";
|
|
396
|
+
|
|
397
|
+
const computer = new MCPComputer("/path/to/mount", [3000, 8080]);
|
|
398
|
+
await computer.start();
|
|
399
|
+
|
|
400
|
+
const connection = computer.getConnection();
|
|
401
|
+
computer.stop();
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
- **`mountPath`**: host directory mounted into the container
|
|
405
|
+
- **`ports`**: ports to expose, or `"*"` for host network mode (Linux only, or Windows via WSL2)
|
|
406
|
+
- **`getConnection()`**: returns a ready `MCPConnection` (IPC on Linux/macOS, WebSocket on Windows)
|
|
407
|
+
- **`stop()`**: kills the container
|
|
369
408
|
|
|
409
|
+
Requires the `aliafsordeh/orbitx-sandbox:0.1` image (pull it, or build from the `Dockerfile.sandbox` reference on our GitHub page).
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import type { Message, ChatResponse, StreamCallback, ToolSchema, ProviderCapabilities } from "./ai-provider.js";
|
|
2
2
|
import AIProvider from "./ai-provider.js";
|
|
3
3
|
export declare class AnthropicProvider extends AIProvider {
|
|
4
|
-
private
|
|
5
|
-
private model;
|
|
6
|
-
private supportsTools;
|
|
7
|
-
private supportsImages;
|
|
8
|
-
private contextWindow;
|
|
9
|
-
private maxTokens;
|
|
4
|
+
#private;
|
|
10
5
|
constructor(apiKey: string, model?: string, options?: {
|
|
11
6
|
supportsTools?: boolean;
|
|
12
7
|
supportsImages?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../src/core/anthropic-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;AA4F1C,qBAAa,iBAAkB,SAAQ,UAAU
|
|
1
|
+
{"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../src/core/anthropic-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;AA4F1C,qBAAa,iBAAkB,SAAQ,UAAU;;gBAQjC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA0B,EAAE,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAU9K,eAAe,IAAI,oBAAoB;IASjC,IAAI,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,CAAC,EAAE,cAAc,EAC/B,KAAK,CAAC,EAAE,UAAU,EAAE,GACrB,OAAO,CAAC,YAAY,CAAC;CAmG3B;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -86,32 +86,32 @@ function textFromAnthropicContent(content) {
|
|
|
86
86
|
.join("");
|
|
87
87
|
}
|
|
88
88
|
export class AnthropicProvider extends AIProvider {
|
|
89
|
-
client;
|
|
90
|
-
model;
|
|
91
|
-
supportsTools;
|
|
92
|
-
supportsImages;
|
|
93
|
-
contextWindow;
|
|
94
|
-
maxTokens;
|
|
89
|
+
#client;
|
|
90
|
+
#model;
|
|
91
|
+
#supportsTools;
|
|
92
|
+
#supportsImages;
|
|
93
|
+
#contextWindow;
|
|
94
|
+
#maxTokens;
|
|
95
95
|
constructor(apiKey, model = "claude-sonnet-5", options = {}) {
|
|
96
96
|
super();
|
|
97
|
-
this
|
|
98
|
-
this
|
|
99
|
-
this
|
|
100
|
-
this
|
|
101
|
-
this
|
|
102
|
-
this
|
|
97
|
+
this.#client = new Anthropic({ apiKey });
|
|
98
|
+
this.#model = model;
|
|
99
|
+
this.#supportsTools = options.supportsTools ?? true;
|
|
100
|
+
this.#supportsImages = options.supportsImages ?? true;
|
|
101
|
+
this.#contextWindow = options.contextWindow ?? MODEL_CONTEXT_WINDOWS[model] ?? DEFAULT_CONTEXT_WINDOW;
|
|
102
|
+
this.#maxTokens = options.maxTokens ?? 4096;
|
|
103
103
|
}
|
|
104
104
|
getCapabilities() {
|
|
105
105
|
return {
|
|
106
|
-
supportsTools: this
|
|
107
|
-
supportsImages: this
|
|
108
|
-
contextWindow: this
|
|
106
|
+
supportsTools: this.#supportsTools,
|
|
107
|
+
supportsImages: this.#supportsImages,
|
|
108
|
+
contextWindow: this.#contextWindow,
|
|
109
109
|
safeUsageRatio: 0.5,
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
112
|
async chat(messages, streamCallback, tools) {
|
|
113
113
|
const { system, messages: formattedMessages } = toAnthropicMessages(messages);
|
|
114
|
-
const formattedTools = tools && tools.length > 0 && this
|
|
114
|
+
const formattedTools = tools && tools.length > 0 && this.#supportsTools
|
|
115
115
|
? toAnthropicTools(tools)
|
|
116
116
|
: undefined;
|
|
117
117
|
if (streamCallback) {
|
|
@@ -119,9 +119,9 @@ export class AnthropicProvider extends AIProvider {
|
|
|
119
119
|
// Per-attempt accumulators live inside this closure so a
|
|
120
120
|
// failed/partial stream from a previous attempt never leaks
|
|
121
121
|
// into a retry's output — each attempt starts clean.
|
|
122
|
-
const stream = await this
|
|
123
|
-
model: this
|
|
124
|
-
max_tokens: this
|
|
122
|
+
const stream = await this.#client.messages.create({
|
|
123
|
+
model: this.#model,
|
|
124
|
+
max_tokens: this.#maxTokens,
|
|
125
125
|
...(system ? { system } : {}),
|
|
126
126
|
messages: formattedMessages,
|
|
127
127
|
...(formattedTools ? { tools: formattedTools } : {}),
|
|
@@ -186,9 +186,9 @@ export class AnthropicProvider extends AIProvider {
|
|
|
186
186
|
}
|
|
187
187
|
else {
|
|
188
188
|
return withRetry(async () => {
|
|
189
|
-
const response = await this
|
|
190
|
-
model: this
|
|
191
|
-
max_tokens: this
|
|
189
|
+
const response = await this.#client.messages.create({
|
|
190
|
+
model: this.#model,
|
|
191
|
+
max_tokens: this.#maxTokens,
|
|
192
192
|
...(system ? { system } : {}),
|
|
193
193
|
messages: formattedMessages,
|
|
194
194
|
...(formattedTools ? { tools: formattedTools } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../src/core/anthropic-provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../src/core/anthropic-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { Message, ChatResponse, StreamCallback, ToolSchema, ProviderCapabilities } from "./ai-provider.js";
|
|
2
2
|
import AIProvider from "./ai-provider.js";
|
|
3
3
|
export declare class DeepSeekProvider extends AIProvider {
|
|
4
|
-
private
|
|
5
|
-
private model;
|
|
6
|
-
private supportsTools;
|
|
7
|
-
private contextWindow;
|
|
4
|
+
#private;
|
|
8
5
|
constructor(apiKey: string, model?: string, options?: {
|
|
9
6
|
supportsTools?: boolean;
|
|
10
7
|
contextWindow?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepseek-provider.d.ts","sourceRoot":"","sources":["../../src/core/deepseek-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;AA4D1C,qBAAa,gBAAiB,SAAQ,UAAU
|
|
1
|
+
{"version":3,"file":"deepseek-provider.d.ts","sourceRoot":"","sources":["../../src/core/deepseek-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;AA4D1C,qBAAa,gBAAiB,SAAQ,UAAU;;gBAMhC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA4B,EAAE,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;IAWlI,eAAe,IAAI,oBAAoB;IASjC,IAAI,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,CAAC,EAAE,cAAc,EAC/B,KAAK,CAAC,EAAE,UAAU,EAAE,GACrB,OAAO,CAAC,YAAY,CAAC;CAmF3B;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -55,31 +55,31 @@ function fromOpenAIToolCalls(toolCalls) {
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
export class DeepSeekProvider extends AIProvider {
|
|
58
|
-
client;
|
|
59
|
-
model;
|
|
60
|
-
supportsTools;
|
|
61
|
-
contextWindow;
|
|
58
|
+
#client;
|
|
59
|
+
#model;
|
|
60
|
+
#supportsTools;
|
|
61
|
+
#contextWindow;
|
|
62
62
|
constructor(apiKey, model = "deepseek-v4-flash", options = {}) {
|
|
63
63
|
super();
|
|
64
|
-
this
|
|
64
|
+
this.#client = new OpenAI({
|
|
65
65
|
apiKey: apiKey,
|
|
66
66
|
baseURL: "https://api.deepseek.com"
|
|
67
67
|
});
|
|
68
|
-
this
|
|
69
|
-
this
|
|
70
|
-
this
|
|
68
|
+
this.#model = model;
|
|
69
|
+
this.#supportsTools = options.supportsTools ?? true;
|
|
70
|
+
this.#contextWindow = options.contextWindow ?? MODEL_CONTEXT_WINDOWS[model] ?? DEFAULT_CONTEXT_WINDOW;
|
|
71
71
|
}
|
|
72
72
|
getCapabilities() {
|
|
73
73
|
return {
|
|
74
|
-
supportsTools: this
|
|
74
|
+
supportsTools: this.#supportsTools,
|
|
75
75
|
supportsImages: false,
|
|
76
|
-
contextWindow: this
|
|
76
|
+
contextWindow: this.#contextWindow,
|
|
77
77
|
safeUsageRatio: 0.5,
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
async chat(messages, streamCallback, tools) {
|
|
81
81
|
const formattedMessages = toOpenAIMessages(messages);
|
|
82
|
-
const formattedTools = tools && tools.length > 0 && this
|
|
82
|
+
const formattedTools = tools && tools.length > 0 && this.#supportsTools
|
|
83
83
|
? toOpenAIFunctionTools(tools)
|
|
84
84
|
: undefined;
|
|
85
85
|
if (streamCallback) {
|
|
@@ -87,8 +87,8 @@ export class DeepSeekProvider extends AIProvider {
|
|
|
87
87
|
// Per-attempt accumulators live inside this closure so a
|
|
88
88
|
// failed/partial stream from a previous attempt never leaks
|
|
89
89
|
// into a retry's output — each attempt starts clean.
|
|
90
|
-
const stream = await this
|
|
91
|
-
model: this
|
|
90
|
+
const stream = await this.#client.chat.completions.create({
|
|
91
|
+
model: this.#model,
|
|
92
92
|
messages: formattedMessages,
|
|
93
93
|
...(formattedTools ? { tools: formattedTools } : {}),
|
|
94
94
|
stream: true
|
|
@@ -145,8 +145,8 @@ export class DeepSeekProvider extends AIProvider {
|
|
|
145
145
|
}
|
|
146
146
|
else {
|
|
147
147
|
return withRetry(async () => {
|
|
148
|
-
const response = await this
|
|
149
|
-
model: this
|
|
148
|
+
const response = await this.#client.chat.completions.create({
|
|
149
|
+
model: this.#model,
|
|
150
150
|
messages: formattedMessages,
|
|
151
151
|
...(formattedTools ? { tools: formattedTools } : {}),
|
|
152
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepseek-provider.js","sourceRoot":"","sources":["../../src/core/deepseek-provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deepseek-provider.js","sourceRoot":"","sources":["../../src/core/deepseek-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,14 +19,6 @@ export declare class MCPClient extends MCP {
|
|
|
19
19
|
default?: any;
|
|
20
20
|
}[];
|
|
21
21
|
}[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Calls a tool and returns its result normalized into the standard
|
|
24
|
-
* MCPToolOutput contract ({type:"text"|"image", output:{...}}) —
|
|
25
|
-
* regardless of whether the tool lives in-process or across the
|
|
26
|
-
* IPC connection to a sandboxed MCPServer, and regardless of whether
|
|
27
|
-
* the tool itself already returns that shape or just a plain object
|
|
28
|
-
* (the legacy convention most existing tools use).
|
|
29
|
-
*/
|
|
30
22
|
callTool(toolName: string, inputs: Record<string, any>): Promise<import("./mcp.js").MCPToolOutput>;
|
|
31
23
|
registerTool(tool: MCPTool<any>): void;
|
|
32
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,SAAU,SAAQ,GAAG;;gBAMlB,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,GAAG,aAAa,EAAE,EAAE,OAAO,GAAE,UAA+B,EAAE,GAAG,CAAC,EAAE,MAAM;IAU9H,UAAU,IAAI,UAAU;IAIxB,MAAM,IAAI,MAAM;IAIV,QAAQ;cAGI,MAAM;qBACC,MAAM;gBACX;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;YAC3D,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,OAAO,CAAC,EAAE,GAAG,CAAC;SACjB,EAAE;;
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,SAAU,SAAQ,GAAG;;gBAMlB,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,GAAG,aAAa,EAAE,EAAE,OAAO,GAAE,UAA+B,EAAE,GAAG,CAAC,EAAE,MAAM;IAU9H,UAAU,IAAI,UAAU;IAIxB,MAAM,IAAI,MAAM;IAIV,QAAQ;cAGI,MAAM;qBACC,MAAM;gBACX;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;YAC3D,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,OAAO,CAAC,EAAE,GAAG,CAAC;SACjB,EAAE;;IAwCT,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmC5D,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;CAIlC;AAED,eAAe,SAAS,CAAC"}
|
package/dist/core/mcp-client.js
CHANGED
|
@@ -31,18 +31,18 @@ export class MCPClient extends MCP {
|
|
|
31
31
|
const onRead = (data) => {
|
|
32
32
|
if (data.topic === "getToolsCallback" && data.pid === pid) {
|
|
33
33
|
resolved = true;
|
|
34
|
-
conn.off("
|
|
34
|
+
conn.off("client_read", onRead);
|
|
35
35
|
resolve(data.tools || []);
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
conn.on("
|
|
39
|
-
conn.emit("
|
|
38
|
+
conn.on("client_read", onRead);
|
|
39
|
+
conn.emit("write_to_server", {
|
|
40
40
|
pid,
|
|
41
41
|
topic: "getTools"
|
|
42
42
|
});
|
|
43
43
|
setTimeout(() => {
|
|
44
44
|
if (!resolved) {
|
|
45
|
-
conn.off("
|
|
45
|
+
conn.off("client_read", onRead);
|
|
46
46
|
resolve([]);
|
|
47
47
|
}
|
|
48
48
|
}, 2000);
|
|
@@ -58,14 +58,6 @@ export class MCPClient extends MCP {
|
|
|
58
58
|
const clientToolNames = new Set(clientTools.map(ct => ct.name));
|
|
59
59
|
return [...clientTools, ...connectionsTools.filter(t => !clientToolNames.has(t.name))];
|
|
60
60
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Calls a tool and returns its result normalized into the standard
|
|
63
|
-
* MCPToolOutput contract ({type:"text"|"image", output:{...}}) —
|
|
64
|
-
* regardless of whether the tool lives in-process or across the
|
|
65
|
-
* IPC connection to a sandboxed MCPServer, and regardless of whether
|
|
66
|
-
* the tool itself already returns that shape or just a plain object
|
|
67
|
-
* (the legacy convention most existing tools use).
|
|
68
|
-
*/
|
|
69
61
|
async callTool(toolName, inputs) {
|
|
70
62
|
const clientTool = this.#tools.find(t => t.getOptions().name == toolName);
|
|
71
63
|
if (clientTool) {
|
|
@@ -79,15 +71,15 @@ export class MCPClient extends MCP {
|
|
|
79
71
|
const pid = randomUUID();
|
|
80
72
|
const onRead = (data) => {
|
|
81
73
|
if (data.topic === "toolCallCallback" && data.pid === pid) {
|
|
82
|
-
conn.off("
|
|
74
|
+
conn.off("client_read", onRead);
|
|
83
75
|
if (!resolvedResult) {
|
|
84
76
|
resolve(data.output || {});
|
|
85
77
|
resolvedResult = true;
|
|
86
78
|
}
|
|
87
79
|
}
|
|
88
80
|
};
|
|
89
|
-
conn.on("
|
|
90
|
-
conn.emit("
|
|
81
|
+
conn.on("client_read", onRead);
|
|
82
|
+
conn.emit("write_to_server", {
|
|
91
83
|
pid,
|
|
92
84
|
topic: "toolCall",
|
|
93
85
|
tool: toolName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAE/C,MAAM,OAAO,SAAU,SAAQ,GAAG;IAC9B,YAAY,CAAC;IACb,QAAQ,CAAC;IACT,IAAI,CAAC;IACL,MAAM,GAAmB,EAAE,CAAC;IAC5B,MAAM,CAAC;IACP,YAAY,KAAa,EAAE,UAA2C,EAAE,UAAsB,IAAI,YAAY,EAAE,EAAE,GAAY;QAC1H,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,GAAG;YACJ,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpD,OAAO,IAAI,OAAO,CAUb,CAAC,OAAO,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;gBACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;gBAErB,MAAM,MAAM,GAAG,CAAC,IAAS,EAAE,EAAE;oBACzB,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;wBACxD,QAAQ,GAAG,IAAI,CAAC;wBAChB,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
import type MCPConnection from "./mcp-connection.js";
|
|
1
2
|
export declare class MCPComputer {
|
|
2
3
|
#private;
|
|
3
4
|
constructor(mountPath: string, ports: number[] | "*", image?: string);
|
|
4
|
-
|
|
5
|
+
getConnection(wsHost?: string): MCPConnection;
|
|
5
6
|
getPresentsHostPath(): string;
|
|
6
|
-
|
|
7
|
-
getPortUrl(port: number, host?: string): string;
|
|
8
|
-
buildDockerArgs(): string[];
|
|
9
|
-
start(): import("node:child_process").ChildProcess;
|
|
7
|
+
start(): Promise<import("node:child_process").ChildProcess>;
|
|
10
8
|
stop(): void;
|
|
11
9
|
getInstructions(): string;
|
|
12
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-computer.d.ts","sourceRoot":"","sources":["../../src/core/mcp-computer.ts"],"names":[],"mappings":"AAMA,qBAAa,WAAW;;
|
|
1
|
+
{"version":3,"file":"mcp-computer.d.ts","sourceRoot":"","sources":["../../src/core/mcp-computer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAMrD,qBAAa,WAAW;;gBAcR,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,GAAE,MAA6B;IAe1F,aAAa,CAAC,MAAM,GAAE,MAAoB,GAAG,aAAa;IAmB1D,mBAAmB,IAAI,MAAM;IAkGvB,KAAK;IAuBX,IAAI;IAUJ,eAAe,IAAI,MAAM;CAmB5B;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -2,55 +2,61 @@ import os from "os";
|
|
|
2
2
|
import { randomUUID } from "crypto";
|
|
3
3
|
import { spawn, execFileSync } from "child_process";
|
|
4
4
|
import fs from "fs";
|
|
5
|
+
import net from "net";
|
|
5
6
|
import path from "path";
|
|
7
|
+
import MCPIPCConnection from "./mcp-ipc-connection.js";
|
|
8
|
+
import MCPWSConnection from "./mcp-ws-connection.js";
|
|
6
9
|
export class MCPComputer {
|
|
7
10
|
#mountPath;
|
|
8
11
|
#ports;
|
|
9
12
|
#hostNetwork;
|
|
10
13
|
#image;
|
|
11
|
-
#ipcPath;
|
|
12
14
|
#containerName;
|
|
13
15
|
#child = null;
|
|
14
16
|
#exitHandler = null;
|
|
17
|
+
#connectionMode;
|
|
18
|
+
#ipcPath;
|
|
19
|
+
#wsPort;
|
|
20
|
+
#wsToken;
|
|
15
21
|
constructor(mountPath, ports, image = "orbitx-sandbox:0.1") {
|
|
16
|
-
|
|
17
|
-
throw new Error("This feature is not currently supported natively on Windows. " +
|
|
18
|
-
"Please run via WSL, or use a Unix-like filesystem (this feature needs one).");
|
|
19
|
-
}
|
|
22
|
+
this.#connectionMode = os.platform() === "win32" ? "ws" : "ipc";
|
|
20
23
|
this.#hostNetwork = ports === "*";
|
|
21
|
-
if (this.#hostNetwork && os.platform() !== "linux") {
|
|
22
|
-
throw new Error("Host network mode (ports: \"*\") requires Docker's --network host, " +
|
|
23
|
-
"which is only supported on Linux. Pass an explicit array of ports instead.");
|
|
24
|
-
}
|
|
25
24
|
this.#mountPath = path.resolve(mountPath);
|
|
26
25
|
this.#ports = ports;
|
|
27
26
|
this.#image = image;
|
|
28
|
-
this.#ipcPath = `/tmp/mcp-server-${randomUUID()}`;
|
|
29
27
|
this.#containerName = `mcp-sandbox-${randomUUID()}`;
|
|
28
|
+
this.#ipcPath = `/tmp/mcp-server-${randomUUID()}`;
|
|
29
|
+
this.#wsPort = 0;
|
|
30
|
+
this.#wsToken = randomUUID();
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
getConnection(wsHost = "localhost") {
|
|
33
|
+
if (this.#connectionMode === "ipc") {
|
|
34
|
+
return new MCPIPCConnection({
|
|
35
|
+
socketPath: `${this.#ipcPath}/socket.sock`,
|
|
36
|
+
mode: "client",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (!this.#wsPort) {
|
|
40
|
+
throw new Error("getConnection() is only available in 'ws' mode after start() has resolved a port.");
|
|
41
|
+
}
|
|
42
|
+
return new MCPWSConnection({
|
|
43
|
+
mode: "client",
|
|
44
|
+
url: `ws://${wsHost}:${this.#wsPort}`,
|
|
45
|
+
token: this.#wsToken,
|
|
46
|
+
});
|
|
33
47
|
}
|
|
34
48
|
getPresentsHostPath() {
|
|
35
49
|
return path.join(this.#mountPath, "presents");
|
|
36
50
|
}
|
|
37
|
-
isHostNetwork() {
|
|
38
|
-
return this.#hostNetwork;
|
|
39
|
-
}
|
|
40
|
-
getPortUrl(port, host = "localhost") {
|
|
41
|
-
if (!this.#hostNetwork && !this.#ports.includes(port)) {
|
|
42
|
-
throw new Error(`Port ${port} was not exposed for this sandbox. ` +
|
|
43
|
-
`Available ports: ${this.#ports.join(", ") || "none"}. ` +
|
|
44
|
-
`Pass ports: "*" at construction time to allow any port.`);
|
|
45
|
-
}
|
|
46
|
-
return `http://${host}:${port}`;
|
|
47
|
-
}
|
|
48
51
|
#prepareHostPaths(containerUid = 1000, containerGid = 1000) {
|
|
49
52
|
const workspaceHost = path.join(this.#mountPath, "workspace");
|
|
50
53
|
const storageHost = path.join(this.#mountPath, "mcp-server-storage");
|
|
51
54
|
const presentsHost = path.join(this.#mountPath, "presents");
|
|
52
55
|
const userInputsHost = path.join(this.#mountPath, "user-inputs");
|
|
53
|
-
const dirs = [workspaceHost, storageHost, presentsHost, userInputsHost
|
|
56
|
+
const dirs = [workspaceHost, storageHost, presentsHost, userInputsHost];
|
|
57
|
+
if (this.#connectionMode === "ipc") {
|
|
58
|
+
dirs.push(this.#ipcPath);
|
|
59
|
+
}
|
|
54
60
|
for (const dir of dirs) {
|
|
55
61
|
fs.mkdirSync(dir, { recursive: true });
|
|
56
62
|
}
|
|
@@ -73,7 +79,25 @@ export class MCPComputer {
|
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
81
|
}
|
|
76
|
-
|
|
82
|
+
/** Finds a free TCP port on the host by briefly binding to port 0. */
|
|
83
|
+
#pickFreePort() {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const srv = net.createServer();
|
|
86
|
+
srv.unref();
|
|
87
|
+
srv.on("error", reject);
|
|
88
|
+
srv.listen(0, () => {
|
|
89
|
+
const address = srv.address();
|
|
90
|
+
if (address && typeof address === "object") {
|
|
91
|
+
const port = address.port;
|
|
92
|
+
srv.close(() => resolve(port));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
srv.close(() => reject(new Error("Could not determine a free port.")));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
#buildDockerArgs() {
|
|
77
101
|
const workspaceHost = path.join(this.#mountPath, "workspace");
|
|
78
102
|
const storageHost = path.join(this.#mountPath, "mcp-server-storage");
|
|
79
103
|
const presentsHost = path.join(this.#mountPath, "presents");
|
|
@@ -85,9 +109,19 @@ export class MCPComputer {
|
|
|
85
109
|
"-v", `${storageHost}:/home/ubuntu/mcp-data`,
|
|
86
110
|
"-v", `${presentsHost}:/home/ubuntu/presents`,
|
|
87
111
|
"-v", `${userInputsHost}:/home/ubuntu/user-inputs`,
|
|
88
|
-
"-v", `${this.#ipcPath}:/tmp/mcp-server`,
|
|
89
112
|
"-e", "PRESENT_PATH=/home/ubuntu/presents",
|
|
90
113
|
];
|
|
114
|
+
if (this.#connectionMode === "ipc") {
|
|
115
|
+
args.push("-v", `${this.#ipcPath}:/tmp/mcp-server`);
|
|
116
|
+
args.push("-e", "CONNECTION_MODE=IPC");
|
|
117
|
+
args.push("-e", "CONNECTION_PATH=/tmp/mcp-server/socket.sock");
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
args.push("-e", "CONNECTION_MODE=WS");
|
|
121
|
+
args.push("-e", "CONNECTION_HOST=0.0.0.0");
|
|
122
|
+
args.push("-e", `CONNECTION_PORT=${this.#wsPort}`);
|
|
123
|
+
args.push("-e", `CONNECTION_TOKEN=${this.#wsToken}`);
|
|
124
|
+
}
|
|
91
125
|
if (this.#hostNetwork) {
|
|
92
126
|
args.push("--network", "host");
|
|
93
127
|
}
|
|
@@ -95,13 +129,21 @@ export class MCPComputer {
|
|
|
95
129
|
for (const port of this.#ports) {
|
|
96
130
|
args.push("-p", `${port}:${port}`);
|
|
97
131
|
}
|
|
132
|
+
// The WS control channel needs its own published port too, since
|
|
133
|
+
// it isn't part of the user-facing #ports list.
|
|
134
|
+
if (this.#connectionMode === "ws") {
|
|
135
|
+
args.push("-p", `${this.#wsPort}:${this.#wsPort}`);
|
|
136
|
+
}
|
|
98
137
|
}
|
|
99
138
|
args.push(this.#image);
|
|
100
139
|
return args;
|
|
101
140
|
}
|
|
102
|
-
start() {
|
|
141
|
+
async start() {
|
|
142
|
+
if (this.#connectionMode === "ws") {
|
|
143
|
+
this.#wsPort = await this.#pickFreePort();
|
|
144
|
+
}
|
|
103
145
|
this.#prepareHostPaths();
|
|
104
|
-
const args = this
|
|
146
|
+
const args = this.#buildDockerArgs();
|
|
105
147
|
const child = spawn("docker", args, { stdio: "ignore" });
|
|
106
148
|
this.#child = child;
|
|
107
149
|
this.#exitHandler = () => {
|