openmausbot 0.1.93 → 0.1.95
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/dist/assets/{DesktopViewer-CKNR3SEW.js → DesktopViewer-BwWpc4RK.js} +1 -1
- package/dist/assets/{abnfDiagram-O67JEVCF-Ckrm1I1X.js → abnfDiagram-O67JEVCF-jsQkIqTn.js} +1 -1
- package/dist/assets/{arc-BBdBuCgB.js → arc-7kei4Hsu.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-CDdA3Hjs.js → architectureDiagram-NJMV4G6O-CRWDFDMq.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-AUrsx1YR.js → blockDiagram-BEXU5L5S-CTKW_IKs.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-BEqQ0Unh.js → c4Diagram-YGBWAQC7-BBTW7-6M.js} +1 -1
- package/dist/assets/channel-DS2NbT5x.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-CEEuvd4C.js → chunk-2Q5K7J3B-M_Ox-MkD.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-DyANCiHl.js → chunk-3FUC2YCW-D2YiN-Ud.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-Dx_Slpw9.js → chunk-5VM5RSS4-BmVYJ0f8.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-Dl7h7iiD.js → chunk-GTNCS2PH-BtiLVVnZ.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-BLx07SPb.js → chunk-GWA4HPMP-DFYSb6J6.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BMxDj3n7.js → chunk-JWPE2WC7-mknKBzgV.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-CN66PT4H.js → chunk-NETBCI7D-DgSYGiOu.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-6HwhsDKw.js → chunk-WEXAMYUT-C7ZvuguH.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-gWnLt7SN.js → chunk-XXDRQBXY-CPqxINpA.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-CMS5l2ea.js → classDiagram-v2-NBCMYWYE-Cd6xfJaC.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-CV7sQwIG.js → cose-bilkent-JH36ORCC-BSXY5qRh.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CSyl-7vl.js → cynefin-OW5HDTMX-D_lhEMj1.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-BCLKL6az.js → cynefinDiagram-VND7K2PF-Da9FrFwk.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-DiaZs6S1.js → dagre-6A5THRUB-T77jMOXe.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-BeTtmt3I.js → diagram-22UHCM2B-Dkj96X5E.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-CsdBG-QQ.js → diagram-3UASUU5V-CMi9zlD_.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-BczvdbR1.js → diagram-ATOU4E4O-CXK6YUfS.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-DHTTTMhi.js → diagram-CDSNMT55-BE7B1u9Q.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-RTjHyd8z.js → diagram-MLGK6HIB-CCMQphKr.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-BDenHEH_.js → diagram-MPIPVDR6-iHJ_-tGH.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-BSiRSbtL.js → ebnfDiagram-ZINNZB2B-DONsCWQ7.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-BCAElss-.js → elk-276RUBZZ-CU_WOaXk.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-C4_1ZPJe.js → erDiagram-OPXOYQCR-BeYwM04G.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-Bcb4Z75S.js → flowDiagram-KWPJA3E3-Bdw9DqEl.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-BiPOzxzb.js → ganttDiagram-FUAMR5RP-C9iwq3qm.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-B1wtF3ZS.js → gitGraphDiagram-X574FWY7-Dx-VWzUg.js} +1 -1
- package/dist/assets/{index-BkYwilkG.js → index-KygHRE3E.js} +1 -1
- package/dist/assets/index-NF7XCHAy.css +1 -0
- package/dist/assets/index-X_5ydXIE.js +610 -0
- package/dist/assets/{infoDiagram-VRGFBTTK-A19No71U.js → infoDiagram-VRGFBTTK-BG7uaEd4.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-BQsqJ_cV.js → ishikawaDiagram-OU5B5YK6-D72WAXnM.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-DAO0pVan.js → journeyDiagram-ZHPQQLJL-DKH1gjYT.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-NepmKEe2.js → kanban-definition-PNTS6WVX-3upm9JUT.js} +1 -1
- package/dist/assets/{linear-bq1PTDTW.js → linear-CcR4pc0-.js} +1 -1
- package/dist/assets/{mermaid.core-s4LTbQle.js → mermaid.core-C6yU5FSS.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-LtdbgHFH.js → mindmap-definition-NLK3R4M7-DOI2xEuv.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-tdbaCxiK.js → pegDiagram-GJSIUBJH-BVWJSgLd.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DvkbpW8l.js → pieDiagram-5QR66LMP-jtbYezhq.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-Do4KaH-E.js → quadrantDiagram-O4NWA36T-g0u8mtPX.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-BQWULOAs.js → railroadDiagram-XR7U4H2S-k8689Wny.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-w9kei1FU.js → requirementDiagram-PLB6GJNP-DsJ22PDt.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-D2gRy0e8.js → sankeyDiagram-IPEJSGJF-CneWBRgG.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-a2sO5_Eo.js → sequenceDiagram-PO4LG4MO-DWsFCWap.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-CiPJmFEB.js → sizeCapture-INFHLROL-Bvf0YE3S.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-DAkUUlL7.js → stateDiagram-v2-GCMORJYK-Bxb3Iei8.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-DANf2R8Y.js → swimlanes-2SLR337P-DLkk7W4A.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-C6bZtBXk.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BKpQmzrT.js → timeline-definition-EJHVYXUP-KR9bIHYC.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-BtI7qLN-.js → usecaseDiagram-POWQR4AR-DfsOrj8t.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-gXJXrAG_.js → vennDiagram-UO4OBE2U-DRSTzG3h.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-GU8Po5-n.js → wardleyDiagram-VNRHLVJA-DtEdhPgT.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-BF4J30g6.js → xychartDiagram-PMCCYNJV-B-XhTxjG.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +3 -1
- package/dist-server/companion/src/routes.js +60 -0
- package/dist-server/container-mcp.js +94 -77
- package/dist-server/drivers/agents-proxy.js +96 -39
- package/dist-server/drivers/pi-mcp-extension.ts +245 -299
- package/dist-server/enterprise/server/index.js +3 -1
- package/dist-server/{browser-proxy.js → harness-mcp-proxy.js} +35 -19
- package/dist-server/index.js +18242 -13645
- package/dist-server/local-computer.js +3 -1
- package/dist-server/mcp-gate.js +147 -19
- package/dist-server/mcp-remote-proxy.js +437 -0
- package/dist-server/openmausbot.js +9618 -10058
- package/dist-server/pair-cli.js +9618 -10058
- package/dist-server/permission-proxy.js +65 -1
- package/dist-server/proxy-paths.js +3 -1
- package/dist-server/server/account-signin.js +0 -2
- package/dist-server/server/activity.js +201 -0
- package/dist-server/server/auto-approve.js +39 -11
- package/dist-server/server/automatic-recovery.js +1 -1
- package/dist-server/server/boat-create-idempotency.js +0 -7
- package/dist-server/server/boat-delete-journal.js +0 -4
- package/dist-server/server/bot-package.js +1 -19
- package/dist-server/server/browser-live.js +14 -5
- package/dist-server/server/browser-runtime.js +7 -2
- package/dist-server/server/channel-queue.js +4 -1
- package/dist-server/server/chief-of-staff.js +2 -3
- package/dist-server/server/cli.js +32 -12
- package/dist-server/server/cloud-backend.js +0 -4
- package/dist-server/server/cloud-computer-tools.js +110 -0
- package/dist-server/server/cloud-home.js +0 -1
- package/dist-server/server/cloud-lending.js +0 -3
- package/dist-server/server/cloud-move-http.js +9 -3
- package/dist-server/server/cloud-move.js +18 -0
- package/dist-server/server/composio.js +31 -2
- package/dist-server/server/computer-control.js +0 -15
- package/dist-server/server/computer-observation.js +0 -74
- package/dist-server/server/computer-wait.js +33 -13
- package/dist-server/server/config.js +73 -11
- package/dist-server/server/container-computer.js +7 -19
- package/dist-server/server/contracts.js +9 -0
- package/dist-server/server/control-client.js +4 -10
- package/dist-server/server/decision-log.js +9 -6
- package/dist-server/server/delegations.js +47 -22
- package/dist-server/server/drivers/acp/core.js +64 -13
- package/dist-server/server/drivers/acp/grok.js +208 -3
- package/dist-server/server/drivers/agents-call.js +70 -29
- package/dist-server/server/drivers/agents-catalog.js +34 -12
- package/dist-server/server/drivers/agents-proxy.js +8 -30
- package/dist-server/server/drivers/antigravity.js +1 -4
- package/dist-server/server/drivers/boatagent.js +25 -4
- package/dist-server/server/drivers/cerebras.js +3 -3
- package/dist-server/server/drivers/chat-mcp-tools.js +29 -19
- package/dist-server/server/drivers/claude.js +33 -19
- package/dist-server/server/drivers/codex.js +84 -10
- package/dist-server/server/drivers/openai-chat.js +14 -9
- package/dist-server/server/drivers/pi.js +48 -4
- package/dist-server/server/drivers/retry.js +8 -4
- package/dist-server/server/engine-install.js +1 -5
- package/dist-server/server/environment.js +3 -0
- package/dist-server/server/guarded-requests.js +2 -1
- package/dist-server/server/harness/registry.js +0 -1
- package/dist-server/server/{browser-proxy.js → harness-mcp-proxy.js} +40 -20
- package/dist-server/server/index.js +1929 -507
- package/dist-server/server/lending-memory.js +12 -8
- package/dist-server/server/live-call-controller.js +868 -0
- package/dist-server/server/live-call.js +216 -0
- package/dist-server/server/mcp-gate-config.js +43 -12
- package/dist-server/server/mcp-gate.js +127 -25
- package/dist-server/server/mcp-http.js +46 -8
- package/dist-server/server/mcp-remote-proxy.js +108 -0
- package/dist-server/server/memory-entries.js +38 -8
- package/dist-server/server/memory-organize.js +1 -8
- package/dist-server/server/memory-topics.js +4 -4
- package/dist-server/server/memory-upkeep.js +13 -15
- package/dist-server/server/message-file.js +5 -9
- package/dist-server/server/new-bot-defaults.js +3 -0
- package/dist-server/server/outbound-counts.js +79 -0
- package/dist-server/server/outbound-requests.js +60 -0
- package/dist-server/server/package-import.js +1 -1
- package/dist-server/server/peer-delivery.js +1 -0
- package/dist-server/server/peer-provenance.js +4 -2
- package/dist-server/server/permission-proxy.js +15 -1
- package/dist-server/server/plan-usage.js +797 -0
- package/dist-server/server/proxy-paths.js +3 -1
- package/dist-server/server/redact.js +2 -0
- package/dist-server/server/request-auth.js +3 -2
- package/dist-server/server/room-handoffs.js +5 -13
- package/dist-server/server/routes/live.js +98 -0
- package/dist-server/server/routine-requests.js +1 -1
- package/dist-server/server/routines.js +5 -1
- package/dist-server/server/setup-mode.js +0 -2
- package/dist-server/server/skill-learn.js +0 -1
- package/dist-server/server/skill-library.js +195 -3
- package/dist-server/server/skills-library-migration.js +235 -0
- package/dist-server/server/skills.js +66 -3
- package/dist-server/server/steer-queue.js +13 -1
- package/dist-server/server/store.js +41 -5
- package/dist-server/server/surface.js +74 -23
- package/dist-server/server/system-prompt.js +4 -4
- package/dist-server/server/team-backup.js +2 -1
- package/dist-server/server/team-memory.js +209 -0
- package/dist-server/server/thread-events.js +3 -3
- package/dist-server/server/tunnel.js +20 -1
- package/dist-server/server/turn-log.js +10 -0
- package/dist-server/server/turn-resources.js +124 -0
- package/dist-server/server/vps-computer.js +4 -14
- package/dist-server/server/workspace.js +85 -47
- package/dist-server/shared/activity.js +3 -0
- package/dist-server/shared/ask-question.js +13 -0
- package/dist-server/shared/bot-avatar.js +8 -0
- package/dist-server/shared/call-consent.js +28 -0
- package/dist-server/shared/connector-scopes.js +78 -0
- package/dist-server/shared/live-approval.js +124 -0
- package/dist-server/shared/live-call.js +176 -0
- package/dist-server/shared/outbound.js +128 -0
- package/dist-server/shared/skill-md.js +10 -0
- package/dist-server/shared/team-backup.js +3 -0
- package/dist-server/shared/tool-scope-support.js +25 -0
- package/dist-server/shared/tool-scope.js +136 -0
- package/dist-server/shared/tool-surface.js +3 -2
- package/dist-server/src/lib/thread-refs.js +406 -0
- package/dist-server/vps-container-mcp.js +94 -77
- package/dist-server/workspace-backup.worker.js +89 -100
- package/enterprise/server/index.js +3 -1
- package/package.json +1 -1
- package/dist/assets/channel-BU94VpxE.js +0 -1
- package/dist/assets/index-Biji-bfL.css +0 -1
- package/dist/assets/index-DZlhoES0.js +0 -597
- package/dist/assets/swimlanesDiagram-TC7HE7FX-CdHxG8aM.js +0 -8
- package/dist-server/server/drivers/chat-boat-tools.js +0 -90
- package/dist-server/server/drivers/grokagent.js +0 -4
- package/dist-server/server/openmaus-status-capsule.js +0 -329
|
@@ -14589,7 +14589,8 @@ function resolveProxy(relative) {
|
|
|
14589
14589
|
return existsSync(source) ? source : join(SERVER_ROOT, `${relative}.js`);
|
|
14590
14590
|
}
|
|
14591
14591
|
var SPAWNED_PROXIES = {
|
|
14592
|
-
browser:
|
|
14592
|
+
// The built-in browser and the cloud computer: argv[2] picks which.
|
|
14593
|
+
harnessMcp: resolveProxy("harness-mcp-proxy"),
|
|
14593
14594
|
localComputer: resolveProxy("local-computer-proxy"),
|
|
14594
14595
|
permission: resolveProxy("permission-proxy"),
|
|
14595
14596
|
containerMcp: resolveProxy("container-mcp"),
|
|
@@ -14598,6 +14599,7 @@ var SPAWNED_PROXIES = {
|
|
|
14598
14599
|
dweb: resolveProxy("drivers/dweb-proxy"),
|
|
14599
14600
|
connectors: resolveProxy("connector-proxy"),
|
|
14600
14601
|
mcpGate: resolveProxy("mcp-gate"),
|
|
14602
|
+
mcpRemote: resolveProxy("mcp-remote-proxy"),
|
|
14601
14603
|
phone: resolveProxy("drivers/phone-proxy"),
|
|
14602
14604
|
hook: resolveProxy("hooks/omb-hook"),
|
|
14603
14605
|
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
// server/
|
|
1
|
+
// server/harness-mcp-proxy.ts
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
var MAX_INPUT_BYTES = 1048576;
|
|
4
4
|
var MAX_OUTPUT_BYTES = 16777216;
|
|
5
5
|
var MAX_PENDING = 16;
|
|
6
|
+
var NAMES = { browser: "Browser", computer: "Cloud computer" };
|
|
7
|
+
var RECOVERY = {
|
|
8
|
+
browser: " This failure does not establish that all browsers are unavailable. Inspect available connections with select_computer if that tool is present. Keep the requested computer and account; do not bypass a permission refusal or human takeover, and do not repeat an uncertain action without checking its result.",
|
|
9
|
+
computer: " Keep working on the assigned cloud computer only; do not bypass a person's control of it, and take a fresh screenshot before repeating an action whose result is uncertain."
|
|
10
|
+
};
|
|
11
|
+
function parseHarnessMcpKind(value) {
|
|
12
|
+
return value === "browser" || value === "computer" ? value : null;
|
|
13
|
+
}
|
|
6
14
|
function failure(id, method, message, code = -32603) {
|
|
7
15
|
return method === "tools/call" ? { jsonrpc: "2.0", id, result: { content: [{ type: "text", text: message }], isError: true } } : { jsonrpc: "2.0", id, error: { code, message } };
|
|
8
16
|
}
|
|
9
|
-
async function boundedJson(response) {
|
|
10
|
-
if (!response.body) throw new Error(
|
|
17
|
+
async function boundedJson(response, name) {
|
|
18
|
+
if (!response.body) throw new Error(`${name} server returned an empty response.`);
|
|
11
19
|
const reader = response.body.getReader();
|
|
12
20
|
const chunks = [];
|
|
13
21
|
let size = 0;
|
|
@@ -16,7 +24,7 @@ async function boundedJson(response) {
|
|
|
16
24
|
const { value, done } = await reader.read();
|
|
17
25
|
if (done) break;
|
|
18
26
|
size += value.byteLength;
|
|
19
|
-
if (size > MAX_OUTPUT_BYTES) throw new Error(
|
|
27
|
+
if (size > MAX_OUTPUT_BYTES) throw new Error(`${name} response exceeded the size limit.`);
|
|
20
28
|
chunks.push(Buffer.from(value));
|
|
21
29
|
}
|
|
22
30
|
return JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
@@ -25,45 +33,46 @@ async function boundedJson(response) {
|
|
|
25
33
|
});
|
|
26
34
|
}
|
|
27
35
|
}
|
|
28
|
-
async function
|
|
36
|
+
async function harnessMcpRequest(frame, connection) {
|
|
29
37
|
if (!frame || typeof frame !== "object" || Array.isArray(frame)) return failure(null, null, "Invalid request.", -32600);
|
|
30
38
|
const message = frame;
|
|
31
39
|
const id = message.id ?? null;
|
|
32
40
|
if (message.jsonrpc !== "2.0" || typeof message.method !== "string" || id !== null && typeof id !== "number" && typeof id !== "string") return failure(null, null, "Invalid request.", -32600);
|
|
33
41
|
if (!Object.hasOwn(message, "id")) return void 0;
|
|
42
|
+
const name = NAMES[connection.kind];
|
|
34
43
|
if (message.method === "initialize") return {
|
|
35
44
|
jsonrpc: "2.0",
|
|
36
45
|
id,
|
|
37
|
-
result: { protocolVersion: "2024-11-05", capabilities: { tools: {} }, serverInfo: { name:
|
|
46
|
+
result: { protocolVersion: "2024-11-05", capabilities: { tools: {} }, serverInfo: { name: `openmausbot-${connection.kind}`, version: "1" } }
|
|
38
47
|
};
|
|
39
48
|
if (message.method === "ping") return { jsonrpc: "2.0", id, result: {} };
|
|
40
49
|
if (message.method !== "tools/list" && message.method !== "tools/call") return failure(id, message.method, "Method not found.", -32601);
|
|
41
50
|
try {
|
|
42
51
|
const url = new URL(connection.url);
|
|
43
52
|
if (!connection.token || url.protocol !== "http:" || !["127.0.0.1", "localhost", "[::1]"].includes(url.hostname) || url.username || url.password || url.pathname !== "/" || url.search || url.hash) {
|
|
44
|
-
throw new Error(
|
|
53
|
+
throw new Error(`${name} connection is not configured. Start a new bot turn from OpenMausBot.`);
|
|
45
54
|
}
|
|
46
55
|
const body = JSON.stringify({ method: message.method, params: message.params ?? {} });
|
|
47
|
-
if (Buffer.byteLength(body) > MAX_INPUT_BYTES) throw new Error(
|
|
48
|
-
const response = await fetch(new URL(
|
|
56
|
+
if (Buffer.byteLength(body) > MAX_INPUT_BYTES) throw new Error(`${name} request exceeded the size limit.`);
|
|
57
|
+
const response = await fetch(new URL(`/api/internal/${connection.kind}/mcp`, url), {
|
|
49
58
|
method: "POST",
|
|
50
59
|
redirect: "error",
|
|
51
60
|
headers: { "content-type": "application/json", authorization: `Bearer ${connection.token}` },
|
|
52
61
|
body,
|
|
53
62
|
signal: AbortSignal.timeout(13e4)
|
|
54
63
|
});
|
|
55
|
-
const payload = await boundedJson(response);
|
|
64
|
+
const payload = await boundedJson(response, name);
|
|
56
65
|
if (!response.ok || !payload || typeof payload !== "object" || !Object.hasOwn(payload, "result")) {
|
|
57
|
-
throw new Error(typeof payload?.error === "string" ? payload.error.slice(0, 2e3) :
|
|
66
|
+
throw new Error(typeof payload?.error === "string" ? payload.error.slice(0, 2e3) : `${name} server is unavailable. Start a new bot turn or try again.`);
|
|
58
67
|
}
|
|
59
68
|
return { jsonrpc: "2.0", id, result: payload.result };
|
|
60
69
|
} catch (error) {
|
|
61
|
-
const detail = error instanceof Error && !/fetch failed|abort|timeout/i.test(error.message) ? error.message :
|
|
62
|
-
return failure(id, message.method, detail +
|
|
70
|
+
const detail = error instanceof Error && !/fetch failed|abort|timeout/i.test(error.message) ? error.message : `${name} connection was interrupted. Do not repeat the action until its state is checked.`;
|
|
71
|
+
return failure(id, message.method, detail + RECOVERY[connection.kind]);
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
|
-
function run() {
|
|
66
|
-
const connection = { url: process.env.OMB_HARNESS_URL ?? "", token: process.env.
|
|
74
|
+
function run(kind) {
|
|
75
|
+
const connection = { url: process.env.OMB_HARNESS_URL ?? "", token: process.env.OMB_MCP_TOKEN ?? "", kind };
|
|
67
76
|
let input = Buffer.alloc(0);
|
|
68
77
|
let pending = 0;
|
|
69
78
|
const output = (message) => {
|
|
@@ -102,11 +111,11 @@ function run() {
|
|
|
102
111
|
}
|
|
103
112
|
if (pending >= MAX_PENDING) {
|
|
104
113
|
const request = frame;
|
|
105
|
-
if (request && Object.hasOwn(request, "id")) output(failure(request.id ?? null, request.method,
|
|
114
|
+
if (request && Object.hasOwn(request, "id")) output(failure(request.id ?? null, request.method, `Too many pending ${kind} requests.`));
|
|
106
115
|
continue;
|
|
107
116
|
}
|
|
108
117
|
pending++;
|
|
109
|
-
void
|
|
118
|
+
void harnessMcpRequest(frame, connection).then(output).finally(() => {
|
|
110
119
|
pending--;
|
|
111
120
|
});
|
|
112
121
|
}
|
|
@@ -116,7 +125,14 @@ function run() {
|
|
|
116
125
|
}
|
|
117
126
|
});
|
|
118
127
|
}
|
|
119
|
-
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
|
|
128
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
129
|
+
const kind = parseHarnessMcpKind(process.argv[2]);
|
|
130
|
+
if (!kind) {
|
|
131
|
+
process.stderr.write("usage: harness-mcp-proxy browser|computer\n");
|
|
132
|
+
process.exitCode = 2;
|
|
133
|
+
} else run(kind);
|
|
134
|
+
}
|
|
120
135
|
export {
|
|
121
|
-
|
|
136
|
+
harnessMcpRequest,
|
|
137
|
+
parseHarnessMcpKind
|
|
122
138
|
};
|