@beeos-ai/device-agent 0.9.1 → 0.9.5

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 (81) hide show
  1. package/dist/adapters/transport-bridge-ws.d.ts +12 -0
  2. package/dist/adapters/transport-bridge-ws.js +27 -3
  3. package/dist/adapters/transport-bridge-ws.js.map +1 -1
  4. package/dist/agent-runtime/core.d.ts +1 -1
  5. package/dist/agent-runtime/core.js +41 -0
  6. package/dist/agent-runtime/core.js.map +1 -1
  7. package/dist/app/session-manager.d.ts +14 -11
  8. package/dist/app/session-manager.js +8 -9
  9. package/dist/app/session-manager.js.map +1 -1
  10. package/dist/bootstrap.js +140 -11
  11. package/dist/bootstrap.js.map +1 -1
  12. package/dist/chat.js +11 -1
  13. package/dist/chat.js.map +1 -1
  14. package/dist/config/loader.js +3 -0
  15. package/dist/config/loader.js.map +1 -1
  16. package/dist/config/schema.d.ts +3 -0
  17. package/dist/config/schema.js +51 -15
  18. package/dist/config/schema.js.map +1 -1
  19. package/dist/fleet/adapters/process/node-process-manager.d.ts +115 -13
  20. package/dist/fleet/adapters/process/node-process-manager.js +412 -64
  21. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -1
  22. package/dist/fleet/adapters/state/port-allocator.d.ts +12 -0
  23. package/dist/fleet/adapters/state/port-allocator.js +39 -5
  24. package/dist/fleet/adapters/state/port-allocator.js.map +1 -1
  25. package/dist/fleet/domain/events.d.ts +23 -1
  26. package/dist/fleet/domain/fsm.d.ts +13 -1
  27. package/dist/fleet/domain/fsm.js +70 -0
  28. package/dist/fleet/domain/fsm.js.map +1 -1
  29. package/dist/fleet/supervisor.js +30 -0
  30. package/dist/fleet/supervisor.js.map +1 -1
  31. package/dist/health/adb-track-devices.d.ts +103 -0
  32. package/dist/health/adb-track-devices.js +171 -0
  33. package/dist/health/adb-track-devices.js.map +1 -0
  34. package/dist/health/health-reporter.d.ts +67 -0
  35. package/dist/health/health-reporter.js +123 -0
  36. package/dist/health/health-reporter.js.map +1 -0
  37. package/dist/health/index.d.ts +6 -0
  38. package/dist/health/index.js +4 -0
  39. package/dist/health/index.js.map +1 -0
  40. package/dist/health/mcp-health-monitor.d.ts +190 -0
  41. package/dist/health/mcp-health-monitor.js +267 -0
  42. package/dist/health/mcp-health-monitor.js.map +1 -0
  43. package/dist/inbound/cli/main.js +8 -1
  44. package/dist/inbound/cli/main.js.map +1 -1
  45. package/dist/inbound/cli/run-command.js +11 -1
  46. package/dist/inbound/cli/run-command.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/mcp-client/action-mapping.d.ts +45 -0
  50. package/dist/mcp-client/action-mapping.js +224 -0
  51. package/dist/mcp-client/action-mapping.js.map +1 -0
  52. package/dist/mcp-client/autospawn.d.ts +15 -2
  53. package/dist/mcp-client/autospawn.js +82 -4
  54. package/dist/mcp-client/autospawn.js.map +1 -1
  55. package/dist/mcp-client/client.d.ts +134 -38
  56. package/dist/mcp-client/client.js +394 -87
  57. package/dist/mcp-client/client.js.map +1 -1
  58. package/dist/mcp-client/index.d.ts +5 -3
  59. package/dist/mcp-client/index.js +2 -1
  60. package/dist/mcp-client/index.js.map +1 -1
  61. package/dist/mcp-client/inproc.d.ts +2 -2
  62. package/dist/mcp-client/inproc.js.map +1 -1
  63. package/dist/mcp-client/runtime.d.ts +124 -21
  64. package/dist/mcp-client/runtime.js +18 -7
  65. package/dist/mcp-client/runtime.js.map +1 -1
  66. package/dist/model/adapters/autoglm.js +44 -45
  67. package/dist/model/adapters/autoglm.js.map +1 -1
  68. package/dist/plugins/acp/index.d.ts +35 -0
  69. package/dist/plugins/acp/index.js +121 -0
  70. package/dist/plugins/acp/index.js.map +1 -1
  71. package/dist/plugins/message-bus/busy-reply.js +13 -5
  72. package/dist/plugins/message-bus/busy-reply.js.map +1 -1
  73. package/dist/plugins/message-bus/inbound.js +12 -6
  74. package/dist/plugins/message-bus/inbound.js.map +1 -1
  75. package/dist/plugins/message-bus/index.js +14 -2
  76. package/dist/plugins/message-bus/index.js.map +1 -1
  77. package/dist/plugins/message-bus/ms-channel-notifier.d.ts +19 -7
  78. package/dist/plugins/message-bus/ms-channel-notifier.js +33 -8
  79. package/dist/plugins/message-bus/ms-channel-notifier.js.map +1 -1
  80. package/dist/ports/transport.d.ts +11 -0
  81. package/package.json +4 -3
@@ -1,93 +1,159 @@
1
1
  /**
2
- * McpClient — typed HTTP wrapper around `device-mcp-server`.
2
+ * McpClient — typed wrapper around the official `@modelcontextprotocol/sdk`
3
+ * Client connected over Streamable HTTP to the sibling
4
+ * `device-mcp-server` (or any other MCP server speaking the same tools).
3
5
  *
4
- * The device-agent never talks to ADB / desktop sandboxes directly any more —
5
- * everything goes through this client to the sibling MCP HTTP server. The
6
- * client is intentionally thin: zero LLM / agent semantics, no caching, no
7
- * retry on tool errors (only on connection-level failures during health
8
- * probing).
6
+ * 0.4.0 reshape:
7
+ * - The bespoke `/healthz` / `/mcp/tools/list` / `/mcp/tools/call` /
8
+ * `/act` REST surface is gone — everything goes through the SDK
9
+ * `Client.callTool` and the `initialize` handshake handled by
10
+ * `Client.connect(transport)`.
11
+ * - `device-mcp-server` is now a singleton multi-device process; this
12
+ * client owns a `defaultDevice` (Ed25519-derived ADB serial / "desktop")
13
+ * and injects it as the `device` argument on every `callTool` so the
14
+ * server's `BackendRegistry.resolve(...)` always lands on the right
15
+ * backend.
16
+ * - `act(action)` is implemented locally by translating the Action into
17
+ * the matching tool call via `mapActionToTool` and synthesising the
18
+ * legacy `ActResponse` envelope on top of the SDK `CallToolResult`.
9
19
  *
10
20
  * Defaults:
11
- * - baseUrl: http://127.0.0.1:7900 (override via `MCP_URL` env)
21
+ * - baseUrl: http://127.0.0.1:7900 (override via `MCP_URL` env)
12
22
  * - timeout: 30s per request
13
23
  *
14
- * Surface mirrors the Python reference's `MCPClient` plus a couple of
15
- * device-agent–specific conveniences (`act`, `screenshot`, `uiDump`,
16
- * `health`, `waitUntilReady`).
24
+ * Threading: `Client.connect` is invoked lazily on first call. Concurrent
25
+ * callers share a single in-flight connect promise so the handshake only
26
+ * runs once. After connect, the client is stateless from the caller's
27
+ * point of view — every `callTool` is an independent JSON-RPC request.
17
28
  */
29
+ import { EventEmitter } from "node:events";
30
+ import { createRequire } from "node:module";
31
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
32
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
18
33
  import { McpUnreachableError, } from "@beeos-ai/device-common";
34
+ import { mapActionToTool } from "./action-mapping.js";
19
35
  const DEFAULT_BASE_URL = "http://127.0.0.1:7900";
36
+ const DEFAULT_MCP_PATH = "/mcp";
20
37
  const DEFAULT_TIMEOUT_MS = 30_000;
38
+ const CLIENT_NAME = "beeos-device-agent";
39
+ /**
40
+ * Resolve the client version string from `package.json` at startup so the
41
+ * MCP `initialize` handshake advertises the actual installed agent version
42
+ * (vs. the hardcoded "0.4.0" that drifted across 0.5–0.9.x). Falls back to
43
+ * "0.0.0" if the file can't be located (e.g. bundled into a single file).
44
+ *
45
+ * Using `createRequire` instead of `import "...json" with { type: "json" }`
46
+ * keeps this working under both `tsx` (src/) and compiled `dist/` — the
47
+ * relative path from `mcp-client/client.{ts,js}` to `package.json` is
48
+ * `../../package.json` in both layouts.
49
+ */
50
+ const CLIENT_VERSION = (() => {
51
+ try {
52
+ const req = createRequire(import.meta.url);
53
+ const pkg = req("../../package.json");
54
+ return typeof pkg.version === "string" ? pkg.version : "0.0.0";
55
+ }
56
+ catch {
57
+ return "0.0.0";
58
+ }
59
+ })();
21
60
  /**
22
61
  * Resolve the default MCP base URL (env-aware).
23
62
  */
24
63
  export function resolveDefaultMcpUrl() {
25
64
  return process.env.MCP_URL ?? DEFAULT_BASE_URL;
26
65
  }
27
- export class McpClient {
28
- baseUrl;
66
+ /** Read the version string the McpClient advertises via MCP `initialize`. */
67
+ export function getClientVersion() {
68
+ return CLIENT_VERSION;
69
+ }
70
+ export class McpClient extends EventEmitter {
71
+ endpoint;
29
72
  timeoutMs;
73
+ defaultDevice;
30
74
  authToken;
31
- fetchImpl;
75
+ backendFamily;
76
+ client;
77
+ injectedTransport;
78
+ connectPromise;
32
79
  constructor(opts = {}) {
33
- this.baseUrl = trimTrailingSlash(opts.baseUrl ?? resolveDefaultMcpUrl());
80
+ super();
81
+ const raw = opts.baseUrl ?? resolveDefaultMcpUrl();
82
+ this.endpoint = normaliseEndpoint(raw);
34
83
  this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
84
+ this.defaultDevice = opts.defaultDevice || undefined;
35
85
  this.authToken = opts.authToken;
36
- this.fetchImpl = opts.fetchImpl ?? fetch;
37
- }
38
- /** Backend health probe. Throws `McpUnreachableError` on connection failure. */
39
- async health() {
40
- try {
41
- return await this.request("GET", "/healthz");
42
- }
43
- catch (e) {
44
- throw new McpUnreachableError(`MCP server unreachable at ${this.baseUrl}: ${e.message}`, e);
45
- }
86
+ this.backendFamily = opts.backendFamily;
87
+ this.injectedTransport = opts.transport;
88
+ this.client = new Client({ name: CLIENT_NAME, version: CLIENT_VERSION }, { capabilities: {} });
46
89
  }
47
90
  /**
48
- * Wait until the MCP server's `/healthz` returns `ok=true`. Used by
49
- * bootstrap to gate startup on the sibling process.
91
+ * Wait until the MCP server's `initialize` handshake succeeds. Used by
92
+ * bootstrap to gate startup on the sibling process. Replaces the
93
+ * pre-0.4 `health()` + `/healthz` probe.
50
94
  *
51
95
  * Strategy: linear retry with `attemptDelayMs` between probes; gives up
52
- * after `attempts` tries. Default: 10 × 500ms = ~5s.
96
+ * after `attempts` tries. Default: 30 × 500ms = ~15s — large enough to
97
+ * cover the cold-start window of an autospawned `device-mcp-server`
98
+ * binary (especially under `tsx`/Node ESM resolve on the first run)
99
+ * without blocking too long when the server is genuinely unreachable.
53
100
  */
54
101
  async waitUntilReady(opts = {}) {
55
- const attempts = opts.attempts ?? 10;
102
+ const attempts = opts.attempts ?? 30;
56
103
  const delay = opts.attemptDelayMs ?? 500;
57
104
  let lastErr;
58
105
  for (let i = 0; i < attempts; i++) {
59
106
  try {
60
- const h = await this.health();
61
- if (h.ok)
62
- return h;
107
+ await this.ensureConnected();
108
+ return { ok: true };
63
109
  }
64
110
  catch (e) {
65
111
  lastErr = e;
66
112
  }
67
113
  await new Promise((res) => setTimeout(res, delay));
68
114
  }
69
- throw new McpUnreachableError(`MCP server at ${this.baseUrl} did not become ready after ${attempts} attempts`, lastErr);
115
+ throw new McpUnreachableError(`MCP server at ${this.endpoint.href} did not become ready after ${attempts} attempts`, lastErr);
70
116
  }
71
- /** List all registered MCP tool descriptors. */
72
- async listTools() {
73
- return this.request("POST", "/mcp/tools/list", {});
74
- }
75
- /** Invoke a single MCP tool by name. */
117
+ /** Generic MCP tool dispatch — used for tools without a typed convenience method. */
76
118
  async callTool(name, args = {}) {
77
- const res = await this.request("POST", "/mcp/tools/call", {
78
- name,
79
- arguments: args,
80
- });
81
- return { ok: res.ok, raw: res.result, durationMs: res.durationMs };
82
- }
83
- /** Submit a unified Action — server maps to the right tool internally. */
84
- async act(action) {
85
- return this.request("POST", "/act", { action });
119
+ const t0 = Date.now();
120
+ let result;
121
+ try {
122
+ result = await this.invoke(name, args);
123
+ }
124
+ catch (e) {
125
+ // Transport / connect failures (typically `McpUnreachableError` from
126
+ // openTransport, or a fetch / timeout from the HTTP transport)
127
+ // never produce a `CallToolResult`. Emit the synthetic
128
+ // "mcp_unreachable" signal so the health monitor can treat them
129
+ // distinctly from device-level failures, then re-throw so existing
130
+ // call sites' error handling stays intact.
131
+ this.emit("callResult", { ok: false, subtype: "mcp_unreachable" });
132
+ throw e;
133
+ }
134
+ const durationMs = Date.now() - t0;
135
+ const isError = result.isError === true;
136
+ // r3 ActionableError model: server may signal "user/LLM can fix this"
137
+ // by NOT setting `isError: true` and instead returning
138
+ // `structuredContent: { actionable: true, subtype, error }`. We surface
139
+ // those as `ok: false` so callers don't treat them as success.
140
+ const structured = result.structuredContent;
141
+ const sc = structured;
142
+ const isActionable = sc?.actionable === true;
143
+ const ok = !isError && !isActionable;
144
+ // Emit the call outcome unconditionally so subscribers (e.g. the
145
+ // device-agent's MCPHealthMonitor) can derive a fresh signal on
146
+ // every tool round-trip — both successes (resets the failure
147
+ // window) and structured failures (e.g. subtype="adb_unauthorized"
148
+ // → device_unauthorized).
149
+ const subtype = typeof sc?.subtype === "string" ? sc.subtype : undefined;
150
+ this.emit("callResult", { ok, ...(subtype !== undefined ? { subtype } : {}) });
151
+ return { ok, raw: result, structured, durationMs };
86
152
  }
87
153
  /** Convenience: take a screenshot via `tool: screenshot`. */
88
154
  async screenshot() {
89
155
  const r = await this.callTool("screenshot", {});
90
- return r.raw;
156
+ return ensureStructured(r, "screenshot");
91
157
  }
92
158
  /**
93
159
  * Convenience: dump UI hierarchy. `format: "compact"` returns the LLM-ready
@@ -100,16 +166,18 @@ export class McpClient {
100
166
  if (opts.format !== undefined)
101
167
  args.format = opts.format;
102
168
  const r = await this.callTool("ui_dump", args);
103
- return r.raw;
169
+ return ensureStructured(r, "ui_dump");
104
170
  }
105
171
  /** Convenience: backend `device_info` tool — the canonical DeviceInfo descriptor. */
106
172
  async info() {
107
173
  const r = await this.callTool("device_info", {});
108
- return r.raw;
174
+ return ensureStructured(r, "device_info");
109
175
  }
110
176
  /** Convenience: install an APK on the (Android) sandbox. */
111
177
  async installApk(path) {
112
- await this.callTool("install_apk", { path });
178
+ const r = await this.callTool("install_apk", { path });
179
+ if (!r.ok)
180
+ throw asError(r, "install_apk");
113
181
  }
114
182
  /** Convenience: run a shell command on the sandbox. */
115
183
  async executeCommand(body, opts = {}) {
@@ -118,62 +186,301 @@ export class McpClient {
118
186
  ...(opts.timeoutS !== undefined ? { timeoutS: opts.timeoutS } : {}),
119
187
  ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
120
188
  });
121
- return r.raw;
189
+ return ensureStructured(r, "execute_command");
122
190
  }
123
191
  /**
124
192
  * Convenience: push `bytes` to an absolute device-local `path` via
125
- * the MCP `file_write` tool. Used by the Resource Resolution Layer
126
- * to land downloaded URL payloads on-device before the VLM sees them.
193
+ * the MCP `file_write` tool.
127
194
  */
128
195
  async fileWrite(path, bytes) {
129
- await this.callTool("file_write", {
196
+ const r = await this.callTool("file_write", {
130
197
  path,
131
198
  contentB64: bytes.toString("base64"),
132
199
  });
200
+ if (!r.ok)
201
+ throw asError(r, "file_write");
133
202
  }
134
203
  /* ------------------------------------------------------------------ */
135
- /* Internal HTTP plumbing */
204
+ /* 0.4.1 mobile-mcp parity helpers */
205
+ /* */
206
+ /* Plain wrappers over `callTool` — the agent-runtime never reaches */
207
+ /* into these (it goes through `act()`), but plugins / skills / the */
208
+ /* fleet HTTP surface do, and exposing them as typed methods saves */
209
+ /* every call site from re-spelling tool names + arg shapes. */
136
210
  /* ------------------------------------------------------------------ */
137
- async request(method, path, body) {
138
- const url = `${this.baseUrl}${path}`;
139
- const headers = { "content-type": "application/json" };
140
- if (this.authToken)
141
- headers.authorization = `Bearer ${this.authToken}`;
142
- const controller = new AbortController();
143
- const timeoutHandle = setTimeout(() => controller.abort(), this.timeoutMs);
211
+ async screenshotToFile(path, opts = {}) {
212
+ const r = await this.callTool("screenshot_to_file", {
213
+ path,
214
+ ...(opts.displayId !== undefined ? { displayId: opts.displayId } : {}),
215
+ ...(opts.maxEdge !== undefined ? { maxEdge: opts.maxEdge } : {}),
216
+ ...(opts.quality !== undefined ? { quality: opts.quality } : {}),
217
+ ...(opts.format !== undefined ? { format: opts.format } : {}),
218
+ });
219
+ return ensureStructured(r, "screenshot_to_file");
220
+ }
221
+ async startScreenRecord(opts = {}) {
222
+ const args = {};
223
+ if (opts.output !== undefined)
224
+ args.output = opts.output;
225
+ if (opts.timeLimitS !== undefined)
226
+ args.timeLimitS = opts.timeLimitS;
227
+ const r = await this.callTool("screen_record_start", args);
228
+ return ensureStructured(r, "screen_record_start");
229
+ }
230
+ async stopScreenRecord(id, path) {
231
+ const r = await this.callTool("screen_record_stop", {
232
+ id,
233
+ ...(path !== undefined ? { path } : {}),
234
+ });
235
+ return ensureStructured(r, "screen_record_stop");
236
+ }
237
+ async swipeDirection(direction, opts = {}) {
238
+ const r = await this.callTool("swipe_direction", {
239
+ direction,
240
+ ...(opts.x !== undefined ? { x: opts.x } : {}),
241
+ ...(opts.y !== undefined ? { y: opts.y } : {}),
242
+ ...(opts.distance !== undefined ? { distance: opts.distance } : {}),
243
+ ...(opts.durationMs !== undefined ? { durationMs: opts.durationMs } : {}),
244
+ });
245
+ if (!r.ok)
246
+ throw asError(r, "swipe_direction");
247
+ }
248
+ async pressButton(button) {
249
+ const r = await this.callTool("press_button", { button });
250
+ if (!r.ok)
251
+ throw asError(r, "press_button");
252
+ }
253
+ async terminateApp(pkg) {
254
+ const r = await this.callTool("terminate_app", { pkg });
255
+ if (!r.ok)
256
+ throw asError(r, "terminate_app");
257
+ }
258
+ async openUrl(url) {
259
+ const r = await this.callTool("open_url", { url });
260
+ if (!r.ok)
261
+ throw asError(r, "open_url");
262
+ }
263
+ async listApps(opts = {}) {
264
+ const r = await this.callTool("list_apps", {
265
+ ...(opts.includeSystem !== undefined ? { includeSystem: opts.includeSystem } : {}),
266
+ ...(opts.launchableOnly !== undefined ? { launchableOnly: opts.launchableOnly } : {}),
267
+ });
268
+ return ensureStructured(r, "list_apps").apps;
269
+ }
270
+ async listCrashes() {
271
+ const r = await this.callTool("list_crashes", {});
272
+ return ensureStructured(r, "list_crashes").crashes;
273
+ }
274
+ async getCrash(id) {
275
+ const r = await this.callTool("get_crash", { id });
276
+ const s = ensureStructured(r, "get_crash");
277
+ if (s && typeof s.content === "string")
278
+ return s.content;
279
+ if (s && typeof s.text === "string")
280
+ return s.text;
281
+ // Fallback: the server may return only `content[]` text blocks.
282
+ const raw = r.raw;
283
+ if (Array.isArray(raw?.content)) {
284
+ for (const c of raw.content) {
285
+ if (c?.type === "text" && typeof c.text === "string")
286
+ return c.text;
287
+ }
288
+ }
289
+ return "";
290
+ }
291
+ async uninstallApp(pkg) {
292
+ const r = await this.callTool("uninstall_app", { pkg });
293
+ if (!r.ok)
294
+ throw asError(r, "uninstall_app");
295
+ }
296
+ async setOrientation(orientation) {
297
+ const r = await this.callTool("set_orientation", { orientation });
298
+ if (!r.ok)
299
+ throw asError(r, "set_orientation");
300
+ }
301
+ async getOrientation() {
302
+ const r = await this.callTool("get_orientation", {});
303
+ return ensureStructured(r, "get_orientation").orientation;
304
+ }
305
+ /**
306
+ * MCP `tools/list` — best-effort wrapper for compatibility probes
307
+ * (bootstrap warns when an old server is missing r3 tools). The
308
+ * underlying SDK call uses `client.listTools()` and fails gracefully
309
+ * on transport errors so the caller can decide to log-and-continue.
310
+ */
311
+ async listTools() {
312
+ await this.ensureConnected();
313
+ const r = (await this.client.listTools());
314
+ return Array.isArray(r.tools) ? r.tools : [];
315
+ }
316
+ /**
317
+ * Read the server-advertised version (from MCP `initialize` response).
318
+ * `undefined` when not yet connected. The SDK `getServerVersion()`
319
+ * returns the full `Implementation { name, version }` shape; we only
320
+ * need the version string.
321
+ */
322
+ getServerVersion() {
323
+ const impl = this.client.getServerVersion();
324
+ return impl?.version ? String(impl.version) : undefined;
325
+ }
326
+ /**
327
+ * Submit a unified `Action`. Implemented locally as
328
+ * `mapActionToTool(action)` → `callTool(...)`. Terminal verbs short-circuit
329
+ * with a synthetic `{ ok: true, terminal: true }` envelope so the
330
+ * AgentLoop / ACP handlers can keep treating `act()` as the single dispatch
331
+ * point.
332
+ */
333
+ async act(action) {
334
+ const t0 = Date.now();
335
+ let mapped;
144
336
  try {
145
- const res = await this.fetchImpl(url, {
146
- method,
147
- headers,
148
- body: body !== undefined ? JSON.stringify(body) : undefined,
149
- signal: controller.signal,
150
- });
151
- const text = await res.text();
152
- const parsed = text ? safeJson(text) : undefined;
153
- if (!res.ok) {
154
- const errMsg = (parsed && typeof parsed === "object" && parsed.error) ||
155
- `HTTP ${res.status} ${res.statusText}`;
156
- const err = new Error(`MCP ${method} ${path} failed: ${errMsg}`);
157
- err.status = res.status;
158
- err.body = parsed ?? text;
159
- throw err;
337
+ mapped = mapActionToTool(action, this.backendFamily);
338
+ }
339
+ catch (e) {
340
+ // mapActionToTool throws DeviceError(invalid_args / unsupported)
341
+ // for caller-fixable problems (empty hotkey, mobile-only verbs).
342
+ // Surface those as actionable so the agent loop's reflector
343
+ // routes them through the same path as server-side actionable
344
+ // errors and the LLM gets a coherent retry hint.
345
+ const err = e;
346
+ const subtype = typeof err.subtype === "string" ? err.subtype : undefined;
347
+ return {
348
+ ok: false,
349
+ action: action.type,
350
+ durationMs: Date.now() - t0,
351
+ error: {
352
+ message: typeof err.message === "string" ? err.message : String(e),
353
+ ...(subtype !== undefined ? { subtype } : {}),
354
+ ...(subtype === "invalid_args" || subtype === "unsupported"
355
+ ? { actionable: true }
356
+ : {}),
357
+ },
358
+ };
359
+ }
360
+ if ("terminal" in mapped) {
361
+ return { ok: true, action: mapped.type, durationMs: Date.now() - t0 };
362
+ }
363
+ try {
364
+ const r = await this.invoke(mapped.toolName, mapped.args);
365
+ const durationMs = Date.now() - t0;
366
+ const isError = r.isError === true;
367
+ const structured = r.structuredContent;
368
+ const sc = structured;
369
+ const isActionable = sc?.actionable === true;
370
+ const ok = !isError && !isActionable;
371
+ // Mirror the callTool emit so act()-driven traffic (the AgentLoop's
372
+ // hot path) feeds the same health-monitor stream as direct
373
+ // callTool() consumers (plugins, fleet HTTP).
374
+ const subtype = typeof sc?.subtype === "string" ? sc.subtype : undefined;
375
+ this.emit("callResult", { ok, ...(subtype !== undefined ? { subtype } : {}) });
376
+ if (isError || isActionable) {
377
+ const scMessage = typeof sc?.error === "string" && sc.error.length > 0 ? sc.error : undefined;
378
+ return {
379
+ ok: false,
380
+ action: action.type,
381
+ durationMs,
382
+ error: {
383
+ message: scMessage ?? extractErrorText(r),
384
+ ...(subtype !== undefined ? { subtype } : {}),
385
+ ...(isActionable ? { actionable: true } : {}),
386
+ },
387
+ };
160
388
  }
161
- return parsed;
389
+ return {
390
+ ok: true,
391
+ action: action.type,
392
+ durationMs,
393
+ result: structured,
394
+ };
395
+ }
396
+ catch (e) {
397
+ // Transport failure during act(): surface the synthetic
398
+ // mcp_unreachable signal (matching callTool's catch path) so the
399
+ // monitor sees a consistent stream.
400
+ this.emit("callResult", { ok: false, subtype: "mcp_unreachable" });
401
+ return {
402
+ ok: false,
403
+ action: action.type,
404
+ durationMs: Date.now() - t0,
405
+ error: { message: e instanceof Error ? e.message : String(e) },
406
+ };
407
+ }
408
+ }
409
+ /* ------------------------------------------------------------------ */
410
+ /* Internal: SDK plumbing */
411
+ /* ------------------------------------------------------------------ */
412
+ async ensureConnected() {
413
+ if (!this.connectPromise) {
414
+ this.connectPromise = this.openTransport().catch((err) => {
415
+ // Reset so the next call can retry instead of caching the failure.
416
+ this.connectPromise = undefined;
417
+ throw err;
418
+ });
419
+ }
420
+ return this.connectPromise;
421
+ }
422
+ async openTransport() {
423
+ const transport = this.injectedTransport ?? this.buildHttpTransport();
424
+ try {
425
+ await this.client.connect(transport);
162
426
  }
163
- finally {
164
- clearTimeout(timeoutHandle);
427
+ catch (e) {
428
+ throw new McpUnreachableError(`MCP server unreachable at ${this.endpoint.href}: ${e.message}`, e);
165
429
  }
166
430
  }
431
+ buildHttpTransport() {
432
+ const requestInit = this.authToken
433
+ ? { headers: { authorization: `Bearer ${this.authToken}` } }
434
+ : undefined;
435
+ return new StreamableHTTPClientTransport(this.endpoint, {
436
+ ...(requestInit ? { requestInit } : {}),
437
+ });
438
+ }
439
+ async invoke(name, args) {
440
+ await this.ensureConnected();
441
+ const merged = this.withDefaultDevice(args);
442
+ return this.client.callTool({ name, arguments: merged }, undefined, { timeout: this.timeoutMs });
443
+ }
444
+ withDefaultDevice(args) {
445
+ if (!this.defaultDevice)
446
+ return args;
447
+ if (typeof args.device === "string" && args.device)
448
+ return args;
449
+ return { ...args, device: this.defaultDevice };
450
+ }
167
451
  }
168
- function trimTrailingSlash(s) {
169
- return s.endsWith("/") ? s.slice(0, -1) : s;
452
+ /* -------------------------------------------------------------------------- */
453
+ /* Helpers */
454
+ /* -------------------------------------------------------------------------- */
455
+ function normaliseEndpoint(raw) {
456
+ const trimmed = raw.endsWith("/") ? raw.slice(0, -1) : raw;
457
+ const url = new URL(trimmed);
458
+ // If the caller supplied a bare origin, point at /mcp; otherwise honour
459
+ // an explicit path (some deployments mount MCP behind a sub-path).
460
+ if (url.pathname === "" || url.pathname === "/") {
461
+ url.pathname = DEFAULT_MCP_PATH;
462
+ }
463
+ return url;
170
464
  }
171
- function safeJson(s) {
172
- try {
173
- return JSON.parse(s);
465
+ function ensureStructured(out, tool) {
466
+ if (!out.ok)
467
+ throw asError(out, tool);
468
+ if (out.structured === undefined) {
469
+ throw new Error(`MCP tool '${tool}' returned no structuredContent`);
174
470
  }
175
- catch {
176
- return s;
471
+ return out.structured;
472
+ }
473
+ function asError(out, tool) {
474
+ return new Error(`MCP tool '${tool}' failed: ${extractErrorText(out.raw)}`);
475
+ }
476
+ function extractErrorText(raw) {
477
+ const content = raw.content;
478
+ if (!Array.isArray(content))
479
+ return "unknown error";
480
+ for (const c of content) {
481
+ if (c?.type === "text" && typeof c.text === "string")
482
+ return c.text;
177
483
  }
484
+ return "unknown error";
178
485
  }
179
486
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp-client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp-client/client.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- export { McpClient, resolveDefaultMcpUrl } from "./client.js";
2
- export type { McpClientOptions, CallToolResult } from "./client.js";
3
- export type { IMcpRuntime, UiDumpOptions, ExecuteCommandOptions } from "./runtime.js";
1
+ export { McpClient, getClientVersion, resolveDefaultMcpUrl } from "./client.js";
2
+ export type { McpClientOptions, McpCallResult } from "./client.js";
3
+ export type { ActResponse, CallToolOutput, ExecuteCommandOptions, IMcpRuntime, ListAppsOptions, ScreenshotToFileOptions, StartScreenRecordOptions, SwipeDirectionOptions, UiDumpOptions, } from "./runtime.js";
4
+ export { mapActionToTool } from "./action-mapping.js";
5
+ export type { ActionMappingResult, ToolCall } from "./action-mapping.js";
4
6
  export { InProcMcpClient } from "./inproc.js";
5
7
  export type { InProcMcpClientOptions } from "./inproc.js";
6
8
  export { autospawnMcpServer } from "./autospawn.js";
@@ -1,4 +1,5 @@
1
- export { McpClient, resolveDefaultMcpUrl } from "./client.js";
1
+ export { McpClient, getClientVersion, resolveDefaultMcpUrl } from "./client.js";
2
+ export { mapActionToTool } from "./action-mapping.js";
2
3
  export { InProcMcpClient } from "./inproc.js";
3
4
  export { autospawnMcpServer } from "./autospawn.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAahF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}