@anvailabs/agentbrowser-mcp 1.8.13 → 1.8.15
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/bin.js +175 -20
- package/dist/bin.js.map +1 -1
- package/dist/index.js +131 -12
- package/dist/mcp-server.d.ts +9 -4
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +78 -8
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -4506,6 +4506,10 @@ var DELIVERED_WAIT_TYPES = [
|
|
|
4506
4506
|
|
|
4507
4507
|
// ../protocol/dist/schemas.js
|
|
4508
4508
|
var ErrorCodeEnum = Type.Union([
|
|
4509
|
+
Type.Literal("SESSION_BUSY"),
|
|
4510
|
+
Type.Literal("CONTROL_REVOKED"),
|
|
4511
|
+
Type.Literal("CONTROL_REQUIRED"),
|
|
4512
|
+
Type.Literal("OPERATION_CONFLICT"),
|
|
4509
4513
|
Type.Literal("INVALID_REQUEST"),
|
|
4510
4514
|
Type.Literal("INVALID_TENANT_ID"),
|
|
4511
4515
|
Type.Literal("UNAUTHORIZED"),
|
|
@@ -4523,6 +4527,7 @@ var ErrorCodeEnum = Type.Union([
|
|
|
4523
4527
|
Type.Literal("TARGET_DISABLED"),
|
|
4524
4528
|
Type.Literal("NAVIGATION_TIMEOUT"),
|
|
4525
4529
|
Type.Literal("ACTION_TIMEOUT"),
|
|
4530
|
+
Type.Literal("VALUE_MISMATCH"),
|
|
4526
4531
|
Type.Literal("PLAN_WAIT_TIMEOUT"),
|
|
4527
4532
|
Type.Literal("ENGINE_UNSUPPORTED"),
|
|
4528
4533
|
Type.Literal("ENGINE_CRASHED"),
|
|
@@ -4580,6 +4585,7 @@ var SessionCookieSchema = Type.Object({
|
|
|
4580
4585
|
sameSite: Type.Optional(Type.Union([Type.Literal("Strict"), Type.Literal("Lax"), Type.Literal("None")]))
|
|
4581
4586
|
});
|
|
4582
4587
|
var SessionRequestSchema = Type.Object({
|
|
4588
|
+
controlMode: Type.Optional(Type.Literal("delegated")),
|
|
4583
4589
|
tenantId: Type.Optional(Type.String({ minLength: 1 })),
|
|
4584
4590
|
// Known engine names plus any registered engine name (TD-BROWSER-7
|
|
4585
4591
|
// registry routes arbitrary names; unknown names fail at the service).
|
|
@@ -4713,7 +4719,7 @@ var PageStateSchema = Type.Object({
|
|
|
4713
4719
|
untrustedContent: Type.Boolean(),
|
|
4714
4720
|
continuation: Type.Optional(ContinuationCursorSchema),
|
|
4715
4721
|
degraded: Type.Optional(Type.Boolean()),
|
|
4716
|
-
degradedReason: Type.Optional(Type.Literal("aria-snapshot-timeout"))
|
|
4722
|
+
degradedReason: Type.Optional(Type.Union([Type.Literal("aria-snapshot-timeout"), Type.Literal("dom-semantic-subset")]))
|
|
4717
4723
|
});
|
|
4718
4724
|
var ElementTargetSchema = Type.Object({
|
|
4719
4725
|
ref: Type.String({ pattern: REF_PATTERN.source })
|
|
@@ -4743,7 +4749,8 @@ var FillActionSchema = Type.Object({
|
|
|
4743
4749
|
type: Type.Literal("fill"),
|
|
4744
4750
|
target: ElementTargetSchema,
|
|
4745
4751
|
value: Type.String(),
|
|
4746
|
-
sensitive: Type.Optional(Type.Boolean())
|
|
4752
|
+
sensitive: Type.Optional(Type.Boolean()),
|
|
4753
|
+
expectValue: Type.Optional(Type.String())
|
|
4747
4754
|
});
|
|
4748
4755
|
var SelectActionSchema = Type.Object({
|
|
4749
4756
|
type: Type.Literal("select"),
|
|
@@ -4773,7 +4780,8 @@ var ScrollActionSchema = Type.Object({
|
|
|
4773
4780
|
var PressActionSchema = Type.Object({
|
|
4774
4781
|
type: Type.Literal("press"),
|
|
4775
4782
|
target: Type.Optional(ElementTargetSchema),
|
|
4776
|
-
key: Type.String()
|
|
4783
|
+
key: Type.String(),
|
|
4784
|
+
count: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 }))
|
|
4777
4785
|
});
|
|
4778
4786
|
var WaitTypeSchema = Type.Union([
|
|
4779
4787
|
Type.Literal("domcontentloaded"),
|
|
@@ -4811,6 +4819,7 @@ var PlanStepSchema = Type.Object({
|
|
|
4811
4819
|
deltaX: Type.Optional(Type.Number()),
|
|
4812
4820
|
deltaY: Type.Optional(Type.Number()),
|
|
4813
4821
|
key: Type.Optional(Type.String()),
|
|
4822
|
+
count: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 })),
|
|
4814
4823
|
direction: Type.Optional(Type.Union([
|
|
4815
4824
|
Type.Literal("up"),
|
|
4816
4825
|
Type.Literal("down"),
|
|
@@ -4824,6 +4833,8 @@ var PlanStepSchema = Type.Object({
|
|
|
4824
4833
|
promptText: Type.Optional(Type.String()),
|
|
4825
4834
|
wait: Type.Optional(DeliveredWaitConditionSchema),
|
|
4826
4835
|
condition: Type.Optional(DeliveredWaitConditionSchema),
|
|
4836
|
+
/** Verify a native field after one fill; never retry or echo the value. */
|
|
4837
|
+
expectValue: Type.Optional(Type.String()),
|
|
4827
4838
|
/** TD-BROWSER-8 Phase 2: pre-step label wait. */
|
|
4828
4839
|
waitForLabel: Type.Optional(Type.String({ minLength: 1, maxLength: 200 })),
|
|
4829
4840
|
/** Bounded hard (100-60000): garbage here wedged the poll loop pre-v1.8.2. */
|
|
@@ -5561,6 +5572,10 @@ function validatePlanStep(body) {
|
|
|
5561
5572
|
// ../protocol/dist/errors.js
|
|
5562
5573
|
var ErrorCode;
|
|
5563
5574
|
(function(ErrorCode2) {
|
|
5575
|
+
ErrorCode2["SESSION_BUSY"] = "SESSION_BUSY";
|
|
5576
|
+
ErrorCode2["CONTROL_REVOKED"] = "CONTROL_REVOKED";
|
|
5577
|
+
ErrorCode2["CONTROL_REQUIRED"] = "CONTROL_REQUIRED";
|
|
5578
|
+
ErrorCode2["OPERATION_CONFLICT"] = "OPERATION_CONFLICT";
|
|
5564
5579
|
ErrorCode2["INVALID_REQUEST"] = "INVALID_REQUEST";
|
|
5565
5580
|
ErrorCode2["INVALID_TENANT_ID"] = "INVALID_TENANT_ID";
|
|
5566
5581
|
ErrorCode2["UNAUTHORIZED"] = "UNAUTHORIZED";
|
|
@@ -5578,6 +5593,7 @@ var ErrorCode;
|
|
|
5578
5593
|
ErrorCode2["TARGET_DISABLED"] = "TARGET_DISABLED";
|
|
5579
5594
|
ErrorCode2["NAVIGATION_TIMEOUT"] = "NAVIGATION_TIMEOUT";
|
|
5580
5595
|
ErrorCode2["ACTION_TIMEOUT"] = "ACTION_TIMEOUT";
|
|
5596
|
+
ErrorCode2["VALUE_MISMATCH"] = "VALUE_MISMATCH";
|
|
5581
5597
|
ErrorCode2["PLAN_WAIT_TIMEOUT"] = "PLAN_WAIT_TIMEOUT";
|
|
5582
5598
|
ErrorCode2["ENGINE_UNSUPPORTED"] = "ENGINE_UNSUPPORTED";
|
|
5583
5599
|
ErrorCode2["ENGINE_CRASHED"] = "ENGINE_CRASHED";
|
|
@@ -5658,6 +5674,48 @@ function validateWireAction(body) {
|
|
|
5658
5674
|
};
|
|
5659
5675
|
}
|
|
5660
5676
|
|
|
5677
|
+
// ../protocol/dist/control.js
|
|
5678
|
+
var ControlStateSchema = Type.Union([
|
|
5679
|
+
Type.Literal("HUMAN_ACTIVE"),
|
|
5680
|
+
Type.Literal("RESUME_REVIEW"),
|
|
5681
|
+
Type.Literal("AGENT_ACTIVE"),
|
|
5682
|
+
Type.Literal("PAUSE_REQUESTED"),
|
|
5683
|
+
Type.Literal("STOPPED")
|
|
5684
|
+
]);
|
|
5685
|
+
var OperationRecordSchema = Type.Object({
|
|
5686
|
+
operationId: Type.String(),
|
|
5687
|
+
epoch: Type.Integer(),
|
|
5688
|
+
status: Type.Union([
|
|
5689
|
+
Type.Literal("in_flight"),
|
|
5690
|
+
Type.Literal("completed"),
|
|
5691
|
+
Type.Literal("failed"),
|
|
5692
|
+
Type.Literal("outcome_unknown")
|
|
5693
|
+
]),
|
|
5694
|
+
dispatched: Type.Boolean()
|
|
5695
|
+
});
|
|
5696
|
+
var ControlViewSchema = Type.Object({
|
|
5697
|
+
state: ControlStateSchema,
|
|
5698
|
+
epoch: Type.Integer(),
|
|
5699
|
+
busy: Type.Boolean(),
|
|
5700
|
+
operation: Type.Optional(OperationRecordSchema)
|
|
5701
|
+
});
|
|
5702
|
+
var ControlReviewSchema = Type.Intersect([
|
|
5703
|
+
ControlViewSchema,
|
|
5704
|
+
Type.Object({
|
|
5705
|
+
pages: Type.Array(Type.Object({
|
|
5706
|
+
pageId: Type.String(),
|
|
5707
|
+
url: Type.String(),
|
|
5708
|
+
title: Type.String(),
|
|
5709
|
+
revision: Type.Integer(),
|
|
5710
|
+
summary: Type.String()
|
|
5711
|
+
}))
|
|
5712
|
+
})
|
|
5713
|
+
]);
|
|
5714
|
+
var ControlGrantSchema = Type.Intersect([
|
|
5715
|
+
ControlViewSchema,
|
|
5716
|
+
Type.Object({ token: Type.String() })
|
|
5717
|
+
]);
|
|
5718
|
+
|
|
5661
5719
|
// ../sdk-typescript/dist/client.js
|
|
5662
5720
|
var AgentBrowserError = class extends Error {
|
|
5663
5721
|
code;
|
|
@@ -5685,6 +5743,7 @@ var HttpClient = class {
|
|
|
5685
5743
|
this.headers = headers;
|
|
5686
5744
|
}
|
|
5687
5745
|
async requestJson(path, init = {}) {
|
|
5746
|
+
const operationId = path.startsWith("/v1/sessions/") && !path.includes("/control") && init.method && init.method !== "GET" ? init.operationId ?? this.headers["x-agentbrowser-operation-id"] ?? crypto.randomUUID() : void 0;
|
|
5688
5747
|
const controller = new AbortController();
|
|
5689
5748
|
const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
5690
5749
|
try {
|
|
@@ -5692,6 +5751,7 @@ var HttpClient = class {
|
|
|
5692
5751
|
method: init.method ?? "GET",
|
|
5693
5752
|
headers: {
|
|
5694
5753
|
...this.headers,
|
|
5754
|
+
...operationId ? { "x-agentbrowser-operation-id": operationId } : {},
|
|
5695
5755
|
...init.body !== void 0 ? { "Content-Type": "application/json" } : {}
|
|
5696
5756
|
},
|
|
5697
5757
|
...init.body !== void 0 ? { body: JSON.stringify(init.body) } : {},
|
|
@@ -5715,13 +5775,18 @@ var HttpClient = class {
|
|
|
5715
5775
|
retryable: false
|
|
5716
5776
|
};
|
|
5717
5777
|
}
|
|
5718
|
-
throw new AgentBrowserError(error2.code, error2.message, error2.retryable, error2.details, error2.action, error2.traceId);
|
|
5778
|
+
throw new AgentBrowserError(error2.code, error2.message, error2.retryable, { ...error2.details, ...operationId ? { operationId } : {} }, error2.action, error2.traceId);
|
|
5719
5779
|
}
|
|
5720
|
-
|
|
5780
|
+
const result = await response.json();
|
|
5781
|
+
if (result?.replay === true)
|
|
5782
|
+
throw new AgentBrowserError("OPERATION_RECORDED", "Operation already recorded; reconcile its status before taking further action", false, { operationId, operation: result.operation });
|
|
5783
|
+
return result;
|
|
5721
5784
|
} catch (error2) {
|
|
5722
5785
|
if (controller.signal.aborted) {
|
|
5723
|
-
throw new AgentBrowserError("TIMEOUT", "Request timeout", false);
|
|
5786
|
+
throw new AgentBrowserError("TIMEOUT", "Request timeout; outcome may be unknown", false, operationId ? { operationId } : void 0);
|
|
5724
5787
|
}
|
|
5788
|
+
if (!(error2 instanceof AgentBrowserError) && operationId)
|
|
5789
|
+
throw new AgentBrowserError("TRANSPORT_ERROR", "Response unavailable; reconcile the operation before retrying", false, { operationId });
|
|
5725
5790
|
throw error2;
|
|
5726
5791
|
} finally {
|
|
5727
5792
|
clearTimeout(timeoutId);
|
|
@@ -5733,6 +5798,30 @@ var SessionsClient = class {
|
|
|
5733
5798
|
constructor(http) {
|
|
5734
5799
|
this.http = http;
|
|
5735
5800
|
}
|
|
5801
|
+
async control(sessionId) {
|
|
5802
|
+
return this.http.requestJson(`/v1/sessions/${sessionId}/control`);
|
|
5803
|
+
}
|
|
5804
|
+
async takeover(sessionId) {
|
|
5805
|
+
return this.http.requestJson(`/v1/sessions/${sessionId}/control/takeover`, { method: "POST" });
|
|
5806
|
+
}
|
|
5807
|
+
async prepareResume(sessionId) {
|
|
5808
|
+
return this.http.requestJson(`/v1/sessions/${sessionId}/control/prepare-resume`, {
|
|
5809
|
+
method: "POST"
|
|
5810
|
+
});
|
|
5811
|
+
}
|
|
5812
|
+
async delegate(sessionId, epoch) {
|
|
5813
|
+
return this.http.requestJson(`/v1/sessions/${sessionId}/control/delegate`, {
|
|
5814
|
+
method: "POST",
|
|
5815
|
+
body: { epoch }
|
|
5816
|
+
});
|
|
5817
|
+
}
|
|
5818
|
+
async operation(sessionId, operationId) {
|
|
5819
|
+
return this.http.requestJson(`/v1/sessions/${sessionId}/operations/${encodeURIComponent(operationId)}`);
|
|
5820
|
+
}
|
|
5821
|
+
async listPages(sessionId) {
|
|
5822
|
+
const result = await this.http.requestJson(`/v1/sessions/${sessionId}/pages`);
|
|
5823
|
+
return result.pages;
|
|
5824
|
+
}
|
|
5736
5825
|
async create(request) {
|
|
5737
5826
|
return this.http.requestJson("/v1/sessions", { method: "POST", body: request });
|
|
5738
5827
|
}
|
|
@@ -5746,9 +5835,10 @@ var SessionsClient = class {
|
|
|
5746
5835
|
async close(sessionId) {
|
|
5747
5836
|
await this.http.requestJson(`/v1/sessions/${sessionId}`, { method: "DELETE" });
|
|
5748
5837
|
}
|
|
5749
|
-
async createPage(sessionId, request) {
|
|
5838
|
+
async createPage(sessionId, request, options = {}) {
|
|
5750
5839
|
return this.http.requestJson(`/v1/sessions/${sessionId}/pages`, {
|
|
5751
5840
|
method: "POST",
|
|
5841
|
+
...options,
|
|
5752
5842
|
...request !== void 0 ? { body: request } : {}
|
|
5753
5843
|
});
|
|
5754
5844
|
}
|
|
@@ -5798,10 +5888,11 @@ var SessionsClient = class {
|
|
|
5798
5888
|
return body.events;
|
|
5799
5889
|
}
|
|
5800
5890
|
/** TD-BROWSER-8: execute a batched action plan; returns per-step results. */
|
|
5801
|
-
async plan(sessionId, pageId, actions) {
|
|
5891
|
+
async plan(sessionId, pageId, actions, options = {}) {
|
|
5802
5892
|
return this.http.requestJson(`/v1/sessions/${sessionId}/pages/${pageId}/plan`, {
|
|
5803
5893
|
method: "POST",
|
|
5804
|
-
body: { actions }
|
|
5894
|
+
body: { actions },
|
|
5895
|
+
...options
|
|
5805
5896
|
});
|
|
5806
5897
|
}
|
|
5807
5898
|
/** TD-BROWSER-8: self-contained snapshot payload for one-shot LLM reasoning. */
|
|
@@ -5814,8 +5905,9 @@ var SessionsClient = class {
|
|
|
5814
5905
|
const qs = query.toString();
|
|
5815
5906
|
return this.http.requestJson(`/v1/sessions/${sessionId}/pages/${pageId}/snapshot${qs ? `?${qs}` : ""}`);
|
|
5816
5907
|
}
|
|
5817
|
-
async navigate(sessionId, pageId, request) {
|
|
5908
|
+
async navigate(sessionId, pageId, request, options = {}) {
|
|
5818
5909
|
return this.http.requestJson(`/v1/sessions/${sessionId}/pages/${pageId}/navigate`, {
|
|
5910
|
+
...options,
|
|
5819
5911
|
method: "POST",
|
|
5820
5912
|
body: request
|
|
5821
5913
|
});
|
|
@@ -5826,8 +5918,9 @@ var SessionsClient = class {
|
|
|
5826
5918
|
body: request
|
|
5827
5919
|
});
|
|
5828
5920
|
}
|
|
5829
|
-
async executeAction(sessionId, pageId, request) {
|
|
5921
|
+
async executeAction(sessionId, pageId, request, options = {}) {
|
|
5830
5922
|
return this.http.requestJson(`/v1/sessions/${sessionId}/pages/${pageId}/act`, {
|
|
5923
|
+
...options,
|
|
5831
5924
|
method: "POST",
|
|
5832
5925
|
body: request
|
|
5833
5926
|
});
|
|
@@ -5884,6 +5977,13 @@ function sessionAndPage(args) {
|
|
|
5884
5977
|
}
|
|
5885
5978
|
return [args.sessionId, args.pageId];
|
|
5886
5979
|
}
|
|
5980
|
+
function operationOptions(args) {
|
|
5981
|
+
if (args.operationId === void 0)
|
|
5982
|
+
return [];
|
|
5983
|
+
if (typeof args.operationId !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(args.operationId))
|
|
5984
|
+
throw new UsageError("A valid operationId is required");
|
|
5985
|
+
return [{ operationId: args.operationId }];
|
|
5986
|
+
}
|
|
5887
5987
|
function buildTools(client) {
|
|
5888
5988
|
return [
|
|
5889
5989
|
{
|
|
@@ -6014,7 +6114,7 @@ function buildTools(client) {
|
|
|
6014
6114
|
if (!Array.isArray(args.actions)) {
|
|
6015
6115
|
throw new UsageError("actions is required and must be an array of plan steps.");
|
|
6016
6116
|
}
|
|
6017
|
-
return await client.sessions.plan(sessionId, pageId, args.actions);
|
|
6117
|
+
return await client.sessions.plan(sessionId, pageId, args.actions, ...operationOptions(args));
|
|
6018
6118
|
}
|
|
6019
6119
|
},
|
|
6020
6120
|
{
|
|
@@ -6056,7 +6156,7 @@ function buildTools(client) {
|
|
|
6056
6156
|
if (typeof args.waitUntil === "string") {
|
|
6057
6157
|
request.waitUntil = args.waitUntil;
|
|
6058
6158
|
}
|
|
6059
|
-
return await client.sessions.navigate(sessionId, pageId, request);
|
|
6159
|
+
return await client.sessions.navigate(sessionId, pageId, request, ...operationOptions(args));
|
|
6060
6160
|
}
|
|
6061
6161
|
},
|
|
6062
6162
|
{
|
|
@@ -6083,7 +6183,7 @@ function buildTools(client) {
|
|
|
6083
6183
|
},
|
|
6084
6184
|
include: {
|
|
6085
6185
|
type: "array",
|
|
6086
|
-
items: { type: "string", enum: ["overlays", "fileInputs"] },
|
|
6186
|
+
items: { type: "string", enum: ["overlays", "fileInputs", "formControls"] },
|
|
6087
6187
|
description: 'Optional enrichments. "overlays" adds an aggregated list of elements that cover observed targets (useful when clicks would be intercepted). "fileInputs" adds role:"fileinput" elements for every input[type=file] (hidden ones included) so upload can target one by ref.'
|
|
6088
6188
|
}
|
|
6089
6189
|
},
|
|
@@ -6114,7 +6214,7 @@ function buildTools(client) {
|
|
|
6114
6214
|
},
|
|
6115
6215
|
{
|
|
6116
6216
|
name: "browser_act",
|
|
6117
|
-
description: 'Perform an action on an element by ref: click, dblclick, hover, fill, clear, check, uncheck, select, upload, scroll, press, wait, goBack, goForward, reload, or handle a dialog. upload attaches local file(s) (paths array, absolute paths only) to a file input; its target ref is optional, but when a page has several input[type=file] elements (hidden Dropzone inputs are common), call browser_observe with include:["fileInputs"] first and pass target.ref; with no ref the page must have exactly one input[type=file]. Elements are addressed by the ref from browser_observe, never by CSS selector or XPath. If the page changed since the observation, the action fails with STALE_TARGET: call browser_observe again and use the new refs; do not retry the old one. Pass remap: true to opt into healing a replaced control: the stack re-observes, matches the original element by role and name, and retries when exactly one candidate survives; the response reports the ref span as remap {from, to}. When a targeted action times out (ACTION_TIMEOUT), the failure details name the ref, what element covers it (blockedBy) and a screenshot artifact id captured at the deadline, so one retry after observing is usually enough. After opening a custom dropdown or combobox, its options often render 0.5-2s later: follow with a wait action ({action: "wait", condition: {until: "selectorVisible", selector: ...}} or "minElements") or re-observe before reading the options; filling a custom combobox input alone may not open the menu and the typed text can be dropped on blur - select from the rendered option refs instead.',
|
|
6217
|
+
description: 'Perform an action on an element by ref: click, dblclick, hover, fill, clear, check, uncheck, select, upload, scroll, press, wait, goBack, goForward, reload, or handle a dialog. upload attaches local file(s) (paths array, absolute paths only) to a file input; its target ref is optional, but when a page has several input[type=file] elements (hidden Dropzone inputs are common), call browser_observe with include:["fileInputs"] first and pass target.ref; with no ref the page must have exactly one input[type=file]. Elements are addressed by the ref from browser_observe, never by CSS selector or XPath. If the page changed since the observation, the action fails with STALE_TARGET: call browser_observe again and use the new refs; do not retry the old one. Pass remap: true to opt into healing a replaced control: the stack re-observes, matches the original element by role and name, and retries when exactly one candidate survives; the response reports the ref span as remap {from, to}. When a targeted action times out (ACTION_TIMEOUT), the failure details name the ref, what element covers it (blockedBy) and a screenshot artifact id captured at the deadline, so one retry after observing is usually enough. press accepts count (1-20): the keypress repeats inside one action with a single revision bump - use it for spinbutton-style controls, where the revision bump from each individual press would invalidate the ref before the next press. After opening a custom dropdown or combobox, its options often render 0.5-2s later: follow with a wait action ({action: "wait", condition: {until: "selectorVisible", selector: ...}} or "minElements") or re-observe before reading the options; filling a custom combobox input alone may not open the menu and the typed text can be dropped on blur - select from the rendered option refs instead.',
|
|
6118
6218
|
inputSchema: {
|
|
6119
6219
|
type: "object",
|
|
6120
6220
|
properties: {
|
|
@@ -6135,11 +6235,11 @@ function buildTools(client) {
|
|
|
6135
6235
|
if (args.target !== void 0 && (typeof ref !== "string" || !REF_PATTERN.test(ref))) {
|
|
6136
6236
|
throw new UsageError(`Invalid element reference '${String(ref)}'. Expected a ref of the form e<revision>_<ordinal>, such as e1_0. Call browser_observe to list current refs.`);
|
|
6137
6237
|
}
|
|
6138
|
-
const { sessionId: _session, pageId: _page, ...request } = args;
|
|
6238
|
+
const { sessionId: _session, pageId: _page, operationId: _operation, ...request } = args;
|
|
6139
6239
|
const validated = validateWireAction(request);
|
|
6140
6240
|
if (!validated.ok)
|
|
6141
6241
|
throw new UsageError(`Invalid action: ${validated.issues.map((issue) => `${issue.path}: ${issue.message}`).join("; ")}. Element-targeted actions require a ref from browser_observe.`);
|
|
6142
|
-
return await client.sessions.executeAction(sessionId, pageId, validated.value);
|
|
6242
|
+
return await client.sessions.executeAction(sessionId, pageId, validated.value, ...operationOptions(args));
|
|
6143
6243
|
}
|
|
6144
6244
|
},
|
|
6145
6245
|
{
|
|
@@ -6283,7 +6383,54 @@ function buildTools(client) {
|
|
|
6283
6383
|
function buildMcpServer(deps) {
|
|
6284
6384
|
const client = deps.createClient({ baseUrl: deps.baseUrl ?? "http://localhost:5709" });
|
|
6285
6385
|
const serverInfo = deps.serverInfo ?? { name: "agentbrowser", version: "1.0.0" };
|
|
6286
|
-
const tools = buildTools(client);
|
|
6386
|
+
const tools = buildTools(client).filter((tool) => !deps.sessionId || !["browser_create", "browser_close", "browser_cookies"].includes(tool.name));
|
|
6387
|
+
for (const tool of tools) {
|
|
6388
|
+
if (deps.sessionId && Array.isArray(tool.inputSchema.required))
|
|
6389
|
+
tool.inputSchema.required = tool.inputSchema.required.filter((name) => name !== "sessionId");
|
|
6390
|
+
if (["browser_act", "browser_plan", "browser_navigate"].includes(tool.name)) {
|
|
6391
|
+
tool.inputSchema.properties.operationId = {
|
|
6392
|
+
type: "string",
|
|
6393
|
+
pattern: "^[a-zA-Z0-9_-]{1,128}$",
|
|
6394
|
+
description: "Choose a unique ID before the call. If its response is lost, query browser_operation with this ID before another write."
|
|
6395
|
+
};
|
|
6396
|
+
if (deps.sessionId)
|
|
6397
|
+
tool.inputSchema.required = [
|
|
6398
|
+
...tool.inputSchema.required ?? [],
|
|
6399
|
+
"operationId"
|
|
6400
|
+
];
|
|
6401
|
+
}
|
|
6402
|
+
}
|
|
6403
|
+
if (deps.sessionId) {
|
|
6404
|
+
const sessionId = deps.sessionId;
|
|
6405
|
+
tools.push({
|
|
6406
|
+
name: "browser_session",
|
|
6407
|
+
description: "Inspect the delegated session control status and available pages. Human takeover revokes this connection; ask the operator for a new grant.",
|
|
6408
|
+
inputSchema: { type: "object", properties: {} },
|
|
6409
|
+
handler: async () => {
|
|
6410
|
+
if (!client.sessions.control || !client.sessions.listPages)
|
|
6411
|
+
throw new UsageError("Client does not support delegated sessions");
|
|
6412
|
+
return {
|
|
6413
|
+
sessionId,
|
|
6414
|
+
control: await client.sessions.control(sessionId),
|
|
6415
|
+
pages: await client.sessions.listPages(sessionId)
|
|
6416
|
+
};
|
|
6417
|
+
}
|
|
6418
|
+
});
|
|
6419
|
+
tools.push({
|
|
6420
|
+
name: "browser_operation",
|
|
6421
|
+
description: "Reconcile a lost response using its operationId. outcome_unknown requires independent inspection; never blindly repeat the action.",
|
|
6422
|
+
inputSchema: {
|
|
6423
|
+
type: "object",
|
|
6424
|
+
properties: { operationId: { type: "string" } },
|
|
6425
|
+
required: ["operationId"]
|
|
6426
|
+
},
|
|
6427
|
+
handler: async (args) => {
|
|
6428
|
+
if (!client.sessions.operation || typeof args.operationId !== "string")
|
|
6429
|
+
throw new UsageError("operationId is required");
|
|
6430
|
+
return client.sessions.operation(sessionId, args.operationId);
|
|
6431
|
+
}
|
|
6432
|
+
});
|
|
6433
|
+
}
|
|
6287
6434
|
const toolByName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
6288
6435
|
return {
|
|
6289
6436
|
async handle(line) {
|
|
@@ -6322,7 +6469,11 @@ function buildMcpServer(deps) {
|
|
|
6322
6469
|
}
|
|
6323
6470
|
const args = message.params?.arguments ?? {};
|
|
6324
6471
|
try {
|
|
6325
|
-
|
|
6472
|
+
if (deps.sessionId && args.sessionId !== void 0 && args.sessionId !== deps.sessionId)
|
|
6473
|
+
throw new UsageError("This MCP connection is bound to another session");
|
|
6474
|
+
if (deps.sessionId && ["browser_act", "browser_plan", "browser_navigate"].includes(name) && args.operationId === void 0)
|
|
6475
|
+
throw new UsageError("operationId is required for a delegated mutation; choose it before dispatch so a lost response can be reconciled");
|
|
6476
|
+
const result = await tool.handler(deps.sessionId ? { ...args, sessionId: deps.sessionId } : args);
|
|
6326
6477
|
return ok(message.id, textResult(result));
|
|
6327
6478
|
} catch (err) {
|
|
6328
6479
|
return ok(message.id, errorResult(formatToolError(err)));
|
|
@@ -6356,7 +6507,10 @@ function errorResult(message) {
|
|
|
6356
6507
|
};
|
|
6357
6508
|
}
|
|
6358
6509
|
function formatToolError(error2) {
|
|
6359
|
-
|
|
6510
|
+
const operationId = error2?.details?.operationId;
|
|
6511
|
+
const suffix = typeof operationId === "string" ? `
|
|
6512
|
+
Reconcile with browser_operation: ${JSON.stringify({ operationId })}` : "";
|
|
6513
|
+
return formatErrorForUser(error2, "The element ref is stale. Call browser_observe to get fresh refs at the current revision, then act on the new ref. Do not retry the old one.") + suffix;
|
|
6360
6514
|
}
|
|
6361
6515
|
function ok(id, result) {
|
|
6362
6516
|
return JSON.stringify({ jsonrpc: "2.0", id, result });
|
|
@@ -6397,6 +6551,7 @@ var server = buildMcpServer({
|
|
|
6397
6551
|
...process.env.AGENTBROWSER_API_KEY !== void 0 ? { apiKey: process.env.AGENTBROWSER_API_KEY } : {}
|
|
6398
6552
|
}),
|
|
6399
6553
|
baseUrl: process.env.AGENTBROWSER_BASE_URL,
|
|
6554
|
+
sessionId: process.env.AGENTBROWSER_SESSION_ID,
|
|
6400
6555
|
serverInfo: { name: "agentbrowser", version: resolveVersion() }
|
|
6401
6556
|
});
|
|
6402
6557
|
var rl = createInterface({ input: process.stdin });
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,GAAG,cAAc,CAAC;IAC5B,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CACxB,IAAI,kBAAkB,CAAC;QACrB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;IAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;CAChE,CAAC,CAAC;AAEH,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAErD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM;SACH,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,uEAAuE;QACvE,iDAAiD;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,GAAG,cAAc,CAAC;IAC5B,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CACxB,IAAI,kBAAkB,CAAC;QACrB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;IAC1C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;IAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;CAChE,CAAC,CAAC;AAEH,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAErD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM;SACH,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,uEAAuE;QACvE,iDAAiD;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4502,6 +4502,10 @@ var DELIVERED_WAIT_TYPES = [
|
|
|
4502
4502
|
|
|
4503
4503
|
// ../protocol/dist/schemas.js
|
|
4504
4504
|
var ErrorCodeEnum = Type.Union([
|
|
4505
|
+
Type.Literal("SESSION_BUSY"),
|
|
4506
|
+
Type.Literal("CONTROL_REVOKED"),
|
|
4507
|
+
Type.Literal("CONTROL_REQUIRED"),
|
|
4508
|
+
Type.Literal("OPERATION_CONFLICT"),
|
|
4505
4509
|
Type.Literal("INVALID_REQUEST"),
|
|
4506
4510
|
Type.Literal("INVALID_TENANT_ID"),
|
|
4507
4511
|
Type.Literal("UNAUTHORIZED"),
|
|
@@ -4519,6 +4523,7 @@ var ErrorCodeEnum = Type.Union([
|
|
|
4519
4523
|
Type.Literal("TARGET_DISABLED"),
|
|
4520
4524
|
Type.Literal("NAVIGATION_TIMEOUT"),
|
|
4521
4525
|
Type.Literal("ACTION_TIMEOUT"),
|
|
4526
|
+
Type.Literal("VALUE_MISMATCH"),
|
|
4522
4527
|
Type.Literal("PLAN_WAIT_TIMEOUT"),
|
|
4523
4528
|
Type.Literal("ENGINE_UNSUPPORTED"),
|
|
4524
4529
|
Type.Literal("ENGINE_CRASHED"),
|
|
@@ -4576,6 +4581,7 @@ var SessionCookieSchema = Type.Object({
|
|
|
4576
4581
|
sameSite: Type.Optional(Type.Union([Type.Literal("Strict"), Type.Literal("Lax"), Type.Literal("None")]))
|
|
4577
4582
|
});
|
|
4578
4583
|
var SessionRequestSchema = Type.Object({
|
|
4584
|
+
controlMode: Type.Optional(Type.Literal("delegated")),
|
|
4579
4585
|
tenantId: Type.Optional(Type.String({ minLength: 1 })),
|
|
4580
4586
|
// Known engine names plus any registered engine name (TD-BROWSER-7
|
|
4581
4587
|
// registry routes arbitrary names; unknown names fail at the service).
|
|
@@ -4709,7 +4715,7 @@ var PageStateSchema = Type.Object({
|
|
|
4709
4715
|
untrustedContent: Type.Boolean(),
|
|
4710
4716
|
continuation: Type.Optional(ContinuationCursorSchema),
|
|
4711
4717
|
degraded: Type.Optional(Type.Boolean()),
|
|
4712
|
-
degradedReason: Type.Optional(Type.Literal("aria-snapshot-timeout"))
|
|
4718
|
+
degradedReason: Type.Optional(Type.Union([Type.Literal("aria-snapshot-timeout"), Type.Literal("dom-semantic-subset")]))
|
|
4713
4719
|
});
|
|
4714
4720
|
var ElementTargetSchema = Type.Object({
|
|
4715
4721
|
ref: Type.String({ pattern: REF_PATTERN.source })
|
|
@@ -4739,7 +4745,8 @@ var FillActionSchema = Type.Object({
|
|
|
4739
4745
|
type: Type.Literal("fill"),
|
|
4740
4746
|
target: ElementTargetSchema,
|
|
4741
4747
|
value: Type.String(),
|
|
4742
|
-
sensitive: Type.Optional(Type.Boolean())
|
|
4748
|
+
sensitive: Type.Optional(Type.Boolean()),
|
|
4749
|
+
expectValue: Type.Optional(Type.String())
|
|
4743
4750
|
});
|
|
4744
4751
|
var SelectActionSchema = Type.Object({
|
|
4745
4752
|
type: Type.Literal("select"),
|
|
@@ -4769,7 +4776,8 @@ var ScrollActionSchema = Type.Object({
|
|
|
4769
4776
|
var PressActionSchema = Type.Object({
|
|
4770
4777
|
type: Type.Literal("press"),
|
|
4771
4778
|
target: Type.Optional(ElementTargetSchema),
|
|
4772
|
-
key: Type.String()
|
|
4779
|
+
key: Type.String(),
|
|
4780
|
+
count: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 }))
|
|
4773
4781
|
});
|
|
4774
4782
|
var WaitTypeSchema = Type.Union([
|
|
4775
4783
|
Type.Literal("domcontentloaded"),
|
|
@@ -4807,6 +4815,7 @@ var PlanStepSchema = Type.Object({
|
|
|
4807
4815
|
deltaX: Type.Optional(Type.Number()),
|
|
4808
4816
|
deltaY: Type.Optional(Type.Number()),
|
|
4809
4817
|
key: Type.Optional(Type.String()),
|
|
4818
|
+
count: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 })),
|
|
4810
4819
|
direction: Type.Optional(Type.Union([
|
|
4811
4820
|
Type.Literal("up"),
|
|
4812
4821
|
Type.Literal("down"),
|
|
@@ -4820,6 +4829,8 @@ var PlanStepSchema = Type.Object({
|
|
|
4820
4829
|
promptText: Type.Optional(Type.String()),
|
|
4821
4830
|
wait: Type.Optional(DeliveredWaitConditionSchema),
|
|
4822
4831
|
condition: Type.Optional(DeliveredWaitConditionSchema),
|
|
4832
|
+
/** Verify a native field after one fill; never retry or echo the value. */
|
|
4833
|
+
expectValue: Type.Optional(Type.String()),
|
|
4823
4834
|
/** TD-BROWSER-8 Phase 2: pre-step label wait. */
|
|
4824
4835
|
waitForLabel: Type.Optional(Type.String({ minLength: 1, maxLength: 200 })),
|
|
4825
4836
|
/** Bounded hard (100-60000): garbage here wedged the poll loop pre-v1.8.2. */
|
|
@@ -5557,6 +5568,10 @@ function validatePlanStep(body) {
|
|
|
5557
5568
|
// ../protocol/dist/errors.js
|
|
5558
5569
|
var ErrorCode;
|
|
5559
5570
|
(function(ErrorCode2) {
|
|
5571
|
+
ErrorCode2["SESSION_BUSY"] = "SESSION_BUSY";
|
|
5572
|
+
ErrorCode2["CONTROL_REVOKED"] = "CONTROL_REVOKED";
|
|
5573
|
+
ErrorCode2["CONTROL_REQUIRED"] = "CONTROL_REQUIRED";
|
|
5574
|
+
ErrorCode2["OPERATION_CONFLICT"] = "OPERATION_CONFLICT";
|
|
5560
5575
|
ErrorCode2["INVALID_REQUEST"] = "INVALID_REQUEST";
|
|
5561
5576
|
ErrorCode2["INVALID_TENANT_ID"] = "INVALID_TENANT_ID";
|
|
5562
5577
|
ErrorCode2["UNAUTHORIZED"] = "UNAUTHORIZED";
|
|
@@ -5574,6 +5589,7 @@ var ErrorCode;
|
|
|
5574
5589
|
ErrorCode2["TARGET_DISABLED"] = "TARGET_DISABLED";
|
|
5575
5590
|
ErrorCode2["NAVIGATION_TIMEOUT"] = "NAVIGATION_TIMEOUT";
|
|
5576
5591
|
ErrorCode2["ACTION_TIMEOUT"] = "ACTION_TIMEOUT";
|
|
5592
|
+
ErrorCode2["VALUE_MISMATCH"] = "VALUE_MISMATCH";
|
|
5577
5593
|
ErrorCode2["PLAN_WAIT_TIMEOUT"] = "PLAN_WAIT_TIMEOUT";
|
|
5578
5594
|
ErrorCode2["ENGINE_UNSUPPORTED"] = "ENGINE_UNSUPPORTED";
|
|
5579
5595
|
ErrorCode2["ENGINE_CRASHED"] = "ENGINE_CRASHED";
|
|
@@ -5654,6 +5670,48 @@ function validateWireAction(body) {
|
|
|
5654
5670
|
};
|
|
5655
5671
|
}
|
|
5656
5672
|
|
|
5673
|
+
// ../protocol/dist/control.js
|
|
5674
|
+
var ControlStateSchema = Type.Union([
|
|
5675
|
+
Type.Literal("HUMAN_ACTIVE"),
|
|
5676
|
+
Type.Literal("RESUME_REVIEW"),
|
|
5677
|
+
Type.Literal("AGENT_ACTIVE"),
|
|
5678
|
+
Type.Literal("PAUSE_REQUESTED"),
|
|
5679
|
+
Type.Literal("STOPPED")
|
|
5680
|
+
]);
|
|
5681
|
+
var OperationRecordSchema = Type.Object({
|
|
5682
|
+
operationId: Type.String(),
|
|
5683
|
+
epoch: Type.Integer(),
|
|
5684
|
+
status: Type.Union([
|
|
5685
|
+
Type.Literal("in_flight"),
|
|
5686
|
+
Type.Literal("completed"),
|
|
5687
|
+
Type.Literal("failed"),
|
|
5688
|
+
Type.Literal("outcome_unknown")
|
|
5689
|
+
]),
|
|
5690
|
+
dispatched: Type.Boolean()
|
|
5691
|
+
});
|
|
5692
|
+
var ControlViewSchema = Type.Object({
|
|
5693
|
+
state: ControlStateSchema,
|
|
5694
|
+
epoch: Type.Integer(),
|
|
5695
|
+
busy: Type.Boolean(),
|
|
5696
|
+
operation: Type.Optional(OperationRecordSchema)
|
|
5697
|
+
});
|
|
5698
|
+
var ControlReviewSchema = Type.Intersect([
|
|
5699
|
+
ControlViewSchema,
|
|
5700
|
+
Type.Object({
|
|
5701
|
+
pages: Type.Array(Type.Object({
|
|
5702
|
+
pageId: Type.String(),
|
|
5703
|
+
url: Type.String(),
|
|
5704
|
+
title: Type.String(),
|
|
5705
|
+
revision: Type.Integer(),
|
|
5706
|
+
summary: Type.String()
|
|
5707
|
+
}))
|
|
5708
|
+
})
|
|
5709
|
+
]);
|
|
5710
|
+
var ControlGrantSchema = Type.Intersect([
|
|
5711
|
+
ControlViewSchema,
|
|
5712
|
+
Type.Object({ token: Type.String() })
|
|
5713
|
+
]);
|
|
5714
|
+
|
|
5657
5715
|
// dist/mcp-server.js
|
|
5658
5716
|
var PROTOCOL_VERSION = "2024-11-05";
|
|
5659
5717
|
function sessionAndPage(args) {
|
|
@@ -5665,6 +5723,13 @@ function sessionAndPage(args) {
|
|
|
5665
5723
|
}
|
|
5666
5724
|
return [args.sessionId, args.pageId];
|
|
5667
5725
|
}
|
|
5726
|
+
function operationOptions(args) {
|
|
5727
|
+
if (args.operationId === void 0)
|
|
5728
|
+
return [];
|
|
5729
|
+
if (typeof args.operationId !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(args.operationId))
|
|
5730
|
+
throw new UsageError("A valid operationId is required");
|
|
5731
|
+
return [{ operationId: args.operationId }];
|
|
5732
|
+
}
|
|
5668
5733
|
function buildTools(client) {
|
|
5669
5734
|
return [
|
|
5670
5735
|
{
|
|
@@ -5795,7 +5860,7 @@ function buildTools(client) {
|
|
|
5795
5860
|
if (!Array.isArray(args.actions)) {
|
|
5796
5861
|
throw new UsageError("actions is required and must be an array of plan steps.");
|
|
5797
5862
|
}
|
|
5798
|
-
return await client.sessions.plan(sessionId, pageId, args.actions);
|
|
5863
|
+
return await client.sessions.plan(sessionId, pageId, args.actions, ...operationOptions(args));
|
|
5799
5864
|
}
|
|
5800
5865
|
},
|
|
5801
5866
|
{
|
|
@@ -5837,7 +5902,7 @@ function buildTools(client) {
|
|
|
5837
5902
|
if (typeof args.waitUntil === "string") {
|
|
5838
5903
|
request.waitUntil = args.waitUntil;
|
|
5839
5904
|
}
|
|
5840
|
-
return await client.sessions.navigate(sessionId, pageId, request);
|
|
5905
|
+
return await client.sessions.navigate(sessionId, pageId, request, ...operationOptions(args));
|
|
5841
5906
|
}
|
|
5842
5907
|
},
|
|
5843
5908
|
{
|
|
@@ -5864,7 +5929,7 @@ function buildTools(client) {
|
|
|
5864
5929
|
},
|
|
5865
5930
|
include: {
|
|
5866
5931
|
type: "array",
|
|
5867
|
-
items: { type: "string", enum: ["overlays", "fileInputs"] },
|
|
5932
|
+
items: { type: "string", enum: ["overlays", "fileInputs", "formControls"] },
|
|
5868
5933
|
description: 'Optional enrichments. "overlays" adds an aggregated list of elements that cover observed targets (useful when clicks would be intercepted). "fileInputs" adds role:"fileinput" elements for every input[type=file] (hidden ones included) so upload can target one by ref.'
|
|
5869
5934
|
}
|
|
5870
5935
|
},
|
|
@@ -5895,7 +5960,7 @@ function buildTools(client) {
|
|
|
5895
5960
|
},
|
|
5896
5961
|
{
|
|
5897
5962
|
name: "browser_act",
|
|
5898
|
-
description: 'Perform an action on an element by ref: click, dblclick, hover, fill, clear, check, uncheck, select, upload, scroll, press, wait, goBack, goForward, reload, or handle a dialog. upload attaches local file(s) (paths array, absolute paths only) to a file input; its target ref is optional, but when a page has several input[type=file] elements (hidden Dropzone inputs are common), call browser_observe with include:["fileInputs"] first and pass target.ref; with no ref the page must have exactly one input[type=file]. Elements are addressed by the ref from browser_observe, never by CSS selector or XPath. If the page changed since the observation, the action fails with STALE_TARGET: call browser_observe again and use the new refs; do not retry the old one. Pass remap: true to opt into healing a replaced control: the stack re-observes, matches the original element by role and name, and retries when exactly one candidate survives; the response reports the ref span as remap {from, to}. When a targeted action times out (ACTION_TIMEOUT), the failure details name the ref, what element covers it (blockedBy) and a screenshot artifact id captured at the deadline, so one retry after observing is usually enough. After opening a custom dropdown or combobox, its options often render 0.5-2s later: follow with a wait action ({action: "wait", condition: {until: "selectorVisible", selector: ...}} or "minElements") or re-observe before reading the options; filling a custom combobox input alone may not open the menu and the typed text can be dropped on blur - select from the rendered option refs instead.',
|
|
5963
|
+
description: 'Perform an action on an element by ref: click, dblclick, hover, fill, clear, check, uncheck, select, upload, scroll, press, wait, goBack, goForward, reload, or handle a dialog. upload attaches local file(s) (paths array, absolute paths only) to a file input; its target ref is optional, but when a page has several input[type=file] elements (hidden Dropzone inputs are common), call browser_observe with include:["fileInputs"] first and pass target.ref; with no ref the page must have exactly one input[type=file]. Elements are addressed by the ref from browser_observe, never by CSS selector or XPath. If the page changed since the observation, the action fails with STALE_TARGET: call browser_observe again and use the new refs; do not retry the old one. Pass remap: true to opt into healing a replaced control: the stack re-observes, matches the original element by role and name, and retries when exactly one candidate survives; the response reports the ref span as remap {from, to}. When a targeted action times out (ACTION_TIMEOUT), the failure details name the ref, what element covers it (blockedBy) and a screenshot artifact id captured at the deadline, so one retry after observing is usually enough. press accepts count (1-20): the keypress repeats inside one action with a single revision bump - use it for spinbutton-style controls, where the revision bump from each individual press would invalidate the ref before the next press. After opening a custom dropdown or combobox, its options often render 0.5-2s later: follow with a wait action ({action: "wait", condition: {until: "selectorVisible", selector: ...}} or "minElements") or re-observe before reading the options; filling a custom combobox input alone may not open the menu and the typed text can be dropped on blur - select from the rendered option refs instead.',
|
|
5899
5964
|
inputSchema: {
|
|
5900
5965
|
type: "object",
|
|
5901
5966
|
properties: {
|
|
@@ -5916,11 +5981,11 @@ function buildTools(client) {
|
|
|
5916
5981
|
if (args.target !== void 0 && (typeof ref !== "string" || !REF_PATTERN.test(ref))) {
|
|
5917
5982
|
throw new UsageError(`Invalid element reference '${String(ref)}'. Expected a ref of the form e<revision>_<ordinal>, such as e1_0. Call browser_observe to list current refs.`);
|
|
5918
5983
|
}
|
|
5919
|
-
const { sessionId: _session, pageId: _page, ...request } = args;
|
|
5984
|
+
const { sessionId: _session, pageId: _page, operationId: _operation, ...request } = args;
|
|
5920
5985
|
const validated = validateWireAction(request);
|
|
5921
5986
|
if (!validated.ok)
|
|
5922
5987
|
throw new UsageError(`Invalid action: ${validated.issues.map((issue) => `${issue.path}: ${issue.message}`).join("; ")}. Element-targeted actions require a ref from browser_observe.`);
|
|
5923
|
-
return await client.sessions.executeAction(sessionId, pageId, validated.value);
|
|
5988
|
+
return await client.sessions.executeAction(sessionId, pageId, validated.value, ...operationOptions(args));
|
|
5924
5989
|
}
|
|
5925
5990
|
},
|
|
5926
5991
|
{
|
|
@@ -6064,7 +6129,54 @@ function buildTools(client) {
|
|
|
6064
6129
|
function buildMcpServer(deps) {
|
|
6065
6130
|
const client = deps.createClient({ baseUrl: deps.baseUrl ?? "http://localhost:5709" });
|
|
6066
6131
|
const serverInfo = deps.serverInfo ?? { name: "agentbrowser", version: "1.0.0" };
|
|
6067
|
-
const tools = buildTools(client);
|
|
6132
|
+
const tools = buildTools(client).filter((tool) => !deps.sessionId || !["browser_create", "browser_close", "browser_cookies"].includes(tool.name));
|
|
6133
|
+
for (const tool of tools) {
|
|
6134
|
+
if (deps.sessionId && Array.isArray(tool.inputSchema.required))
|
|
6135
|
+
tool.inputSchema.required = tool.inputSchema.required.filter((name) => name !== "sessionId");
|
|
6136
|
+
if (["browser_act", "browser_plan", "browser_navigate"].includes(tool.name)) {
|
|
6137
|
+
tool.inputSchema.properties.operationId = {
|
|
6138
|
+
type: "string",
|
|
6139
|
+
pattern: "^[a-zA-Z0-9_-]{1,128}$",
|
|
6140
|
+
description: "Choose a unique ID before the call. If its response is lost, query browser_operation with this ID before another write."
|
|
6141
|
+
};
|
|
6142
|
+
if (deps.sessionId)
|
|
6143
|
+
tool.inputSchema.required = [
|
|
6144
|
+
...tool.inputSchema.required ?? [],
|
|
6145
|
+
"operationId"
|
|
6146
|
+
];
|
|
6147
|
+
}
|
|
6148
|
+
}
|
|
6149
|
+
if (deps.sessionId) {
|
|
6150
|
+
const sessionId = deps.sessionId;
|
|
6151
|
+
tools.push({
|
|
6152
|
+
name: "browser_session",
|
|
6153
|
+
description: "Inspect the delegated session control status and available pages. Human takeover revokes this connection; ask the operator for a new grant.",
|
|
6154
|
+
inputSchema: { type: "object", properties: {} },
|
|
6155
|
+
handler: async () => {
|
|
6156
|
+
if (!client.sessions.control || !client.sessions.listPages)
|
|
6157
|
+
throw new UsageError("Client does not support delegated sessions");
|
|
6158
|
+
return {
|
|
6159
|
+
sessionId,
|
|
6160
|
+
control: await client.sessions.control(sessionId),
|
|
6161
|
+
pages: await client.sessions.listPages(sessionId)
|
|
6162
|
+
};
|
|
6163
|
+
}
|
|
6164
|
+
});
|
|
6165
|
+
tools.push({
|
|
6166
|
+
name: "browser_operation",
|
|
6167
|
+
description: "Reconcile a lost response using its operationId. outcome_unknown requires independent inspection; never blindly repeat the action.",
|
|
6168
|
+
inputSchema: {
|
|
6169
|
+
type: "object",
|
|
6170
|
+
properties: { operationId: { type: "string" } },
|
|
6171
|
+
required: ["operationId"]
|
|
6172
|
+
},
|
|
6173
|
+
handler: async (args) => {
|
|
6174
|
+
if (!client.sessions.operation || typeof args.operationId !== "string")
|
|
6175
|
+
throw new UsageError("operationId is required");
|
|
6176
|
+
return client.sessions.operation(sessionId, args.operationId);
|
|
6177
|
+
}
|
|
6178
|
+
});
|
|
6179
|
+
}
|
|
6068
6180
|
const toolByName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
6069
6181
|
return {
|
|
6070
6182
|
async handle(line) {
|
|
@@ -6103,7 +6215,11 @@ function buildMcpServer(deps) {
|
|
|
6103
6215
|
}
|
|
6104
6216
|
const args = message.params?.arguments ?? {};
|
|
6105
6217
|
try {
|
|
6106
|
-
|
|
6218
|
+
if (deps.sessionId && args.sessionId !== void 0 && args.sessionId !== deps.sessionId)
|
|
6219
|
+
throw new UsageError("This MCP connection is bound to another session");
|
|
6220
|
+
if (deps.sessionId && ["browser_act", "browser_plan", "browser_navigate"].includes(name) && args.operationId === void 0)
|
|
6221
|
+
throw new UsageError("operationId is required for a delegated mutation; choose it before dispatch so a lost response can be reconciled");
|
|
6222
|
+
const result = await tool.handler(deps.sessionId ? { ...args, sessionId: deps.sessionId } : args);
|
|
6107
6223
|
return ok(message.id, textResult(result));
|
|
6108
6224
|
} catch (err) {
|
|
6109
6225
|
return ok(message.id, errorResult(formatToolError(err)));
|
|
@@ -6137,7 +6253,10 @@ function errorResult(message) {
|
|
|
6137
6253
|
};
|
|
6138
6254
|
}
|
|
6139
6255
|
function formatToolError(error2) {
|
|
6140
|
-
|
|
6256
|
+
const operationId = error2?.details?.operationId;
|
|
6257
|
+
const suffix = typeof operationId === "string" ? `
|
|
6258
|
+
Reconcile with browser_operation: ${JSON.stringify({ operationId })}` : "";
|
|
6259
|
+
return formatErrorForUser(error2, "The element ref is stale. Call browser_observe to get fresh refs at the current revision, then act on the new ref. Do not retry the old one.") + suffix;
|
|
6141
6260
|
}
|
|
6142
6261
|
function ok(id, result) {
|
|
6143
6262
|
return JSON.stringify({ jsonrpc: "2.0", id, result });
|
package/dist/mcp-server.d.ts
CHANGED
|
@@ -8,16 +8,19 @@
|
|
|
8
8
|
* The message handler is pure: it takes a JSON-RPC line and returns a
|
|
9
9
|
* JSON-RPC line (or null for notifications), so any transport can drive it.
|
|
10
10
|
*/
|
|
11
|
-
import type { ActionRequest, ActionResult, ArtifactRef, ClientOptions, ExportedCookie, ExtractRequest, ExtractResult, NavigationRequest, NavigationResponse, ObservationRequest, ObservationResponse, PageResponse, PageSnapshot, PdfRequest, ScreenshotRequest, SessionRequest, SessionResponse } from '@agentbrowser/sdk-typescript';
|
|
11
|
+
import type { ActionRequest, ActionResult, ArtifactRef, ClientOptions, ExportedCookie, ExtractRequest, ExtractResult, MutationOptions, NavigationRequest, NavigationResponse, ObservationRequest, ObservationResponse, PageResponse, PageSnapshot, PdfRequest, ScreenshotRequest, SessionRequest, SessionResponse } from '@agentbrowser/sdk-typescript';
|
|
12
12
|
export type { ClientOptions, ExportedCookie };
|
|
13
13
|
/** The slice of the SDK the MCP server depends on. */
|
|
14
14
|
export interface McpClient {
|
|
15
15
|
sessions: {
|
|
16
|
+
control?(sessionId: string): Promise<import('@agentbrowser/protocol').ControlView>;
|
|
17
|
+
listPages?(sessionId: string): Promise<PageResponse[]>;
|
|
18
|
+
operation?(sessionId: string, operationId: string): Promise<import('@agentbrowser/protocol').OperationRecord>;
|
|
16
19
|
create(request: SessionRequest): Promise<SessionResponse>;
|
|
17
20
|
close(sessionId: string): Promise<void>;
|
|
18
21
|
/** TD-BROWSER-6: scoped cookie export for the credential handoff loop. */
|
|
19
22
|
cookies(sessionId: string): Promise<ExportedCookie[]>;
|
|
20
|
-
plan(sessionId: string, pageId: string, actions: Array<Record<string, unknown
|
|
23
|
+
plan(sessionId: string, pageId: string, actions: Array<Record<string, unknown>>, options?: MutationOptions): Promise<{
|
|
21
24
|
ok: boolean;
|
|
22
25
|
completed: number;
|
|
23
26
|
results: Array<{
|
|
@@ -30,9 +33,9 @@ export interface McpClient {
|
|
|
30
33
|
/** TD-BROWSER-8: self-contained snapshot payload for one-shot LLM reasoning. */
|
|
31
34
|
snapshot(sessionId: string, pageId: string): Promise<PageSnapshot>;
|
|
32
35
|
createPage(sessionId: string): Promise<PageResponse>;
|
|
33
|
-
navigate(sessionId: string, pageId: string, request: NavigationRequest): Promise<NavigationResponse>;
|
|
36
|
+
navigate(sessionId: string, pageId: string, request: NavigationRequest, options?: MutationOptions): Promise<NavigationResponse>;
|
|
34
37
|
observe(sessionId: string, pageId: string, request: ObservationRequest): Promise<ObservationResponse>;
|
|
35
|
-
executeAction(sessionId: string, pageId: string, request: ActionRequest): Promise<ActionResult>;
|
|
38
|
+
executeAction(sessionId: string, pageId: string, request: ActionRequest, options?: MutationOptions): Promise<ActionResult>;
|
|
36
39
|
screenshot(sessionId: string, pageId: string, request: ScreenshotRequest): Promise<ArtifactRef>;
|
|
37
40
|
extract(sessionId: string, pageId: string, request: ExtractRequest): Promise<ExtractResult>;
|
|
38
41
|
pdf(sessionId: string, pageId: string, request: PdfRequest): Promise<ArtifactRef>;
|
|
@@ -51,6 +54,8 @@ export interface McpClient {
|
|
|
51
54
|
};
|
|
52
55
|
}
|
|
53
56
|
export interface McpDependencies {
|
|
57
|
+
/** Operator-configured binding. Never supplied by model tool arguments. */
|
|
58
|
+
sessionId?: string | undefined;
|
|
54
59
|
createClient(options: ClientOptions): McpClient;
|
|
55
60
|
serverInfo?: {
|
|
56
61
|
name: string;
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAE9C,sDAAsD;AACtD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE;QACR,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QAC1D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,0EAA0E;QAC1E,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACtD,IAAI,CACF,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -28,6 +28,13 @@ function sessionAndPage(args) {
|
|
|
28
28
|
* not a control-flow edit. Every tool object below is byte-identical to
|
|
29
29
|
* before; only its container moved.
|
|
30
30
|
*/
|
|
31
|
+
function operationOptions(args) {
|
|
32
|
+
if (args.operationId === undefined)
|
|
33
|
+
return [];
|
|
34
|
+
if (typeof args.operationId !== 'string' || !/^[a-zA-Z0-9_-]{1,128}$/.test(args.operationId))
|
|
35
|
+
throw new UsageError('A valid operationId is required');
|
|
36
|
+
return [{ operationId: args.operationId }];
|
|
37
|
+
}
|
|
31
38
|
function buildTools(client) {
|
|
32
39
|
return [
|
|
33
40
|
{
|
|
@@ -202,7 +209,7 @@ function buildTools(client) {
|
|
|
202
209
|
if (!Array.isArray(args.actions)) {
|
|
203
210
|
throw new UsageError('actions is required and must be an array of plan steps.');
|
|
204
211
|
}
|
|
205
|
-
return await client.sessions.plan(sessionId, pageId, args.actions);
|
|
212
|
+
return await client.sessions.plan(sessionId, pageId, args.actions, ...operationOptions(args));
|
|
206
213
|
},
|
|
207
214
|
},
|
|
208
215
|
{
|
|
@@ -244,7 +251,7 @@ function buildTools(client) {
|
|
|
244
251
|
if (typeof args.waitUntil === 'string') {
|
|
245
252
|
request.waitUntil = args.waitUntil;
|
|
246
253
|
}
|
|
247
|
-
return await client.sessions.navigate(sessionId, pageId, request);
|
|
254
|
+
return await client.sessions.navigate(sessionId, pageId, request, ...operationOptions(args));
|
|
248
255
|
},
|
|
249
256
|
},
|
|
250
257
|
{
|
|
@@ -289,7 +296,7 @@ function buildTools(client) {
|
|
|
289
296
|
},
|
|
290
297
|
include: {
|
|
291
298
|
type: 'array',
|
|
292
|
-
items: { type: 'string', enum: ['overlays', 'fileInputs'] },
|
|
299
|
+
items: { type: 'string', enum: ['overlays', 'fileInputs', 'formControls'] },
|
|
293
300
|
description: 'Optional enrichments. "overlays" adds an aggregated list of elements that ' +
|
|
294
301
|
'cover observed targets (useful when clicks would be intercepted). ' +
|
|
295
302
|
'"fileInputs" adds role:"fileinput" elements for every input[type=file] ' +
|
|
@@ -341,6 +348,9 @@ function buildTools(client) {
|
|
|
341
348
|
'When a targeted action times out (ACTION_TIMEOUT), the failure details name the ref, ' +
|
|
342
349
|
'what element covers it (blockedBy) and a screenshot artifact id captured at the ' +
|
|
343
350
|
'deadline, so one retry after observing is usually enough. ' +
|
|
351
|
+
'press accepts count (1-20): the keypress repeats inside one action with a single ' +
|
|
352
|
+
'revision bump - use it for spinbutton-style controls, where the revision bump from ' +
|
|
353
|
+
'each individual press would invalidate the ref before the next press. ' +
|
|
344
354
|
'After opening a custom dropdown or combobox, its options often render 0.5-2s ' +
|
|
345
355
|
'later: follow with a wait action ({action: "wait", condition: {until: ' +
|
|
346
356
|
'"selectorVisible", selector: ...}} or "minElements") or re-observe before reading ' +
|
|
@@ -366,11 +376,11 @@ function buildTools(client) {
|
|
|
366
376
|
if (args.target !== undefined && (typeof ref !== 'string' || !REF_PATTERN.test(ref))) {
|
|
367
377
|
throw new UsageError(`Invalid element reference '${String(ref)}'. Expected a ref of the form e<revision>_<ordinal>, such as e1_0. Call browser_observe to list current refs.`);
|
|
368
378
|
}
|
|
369
|
-
const { sessionId: _session, pageId: _page, ...request } = args;
|
|
379
|
+
const { sessionId: _session, pageId: _page, operationId: _operation, ...request } = args;
|
|
370
380
|
const validated = validateWireAction(request);
|
|
371
381
|
if (!validated.ok)
|
|
372
382
|
throw new UsageError(`Invalid action: ${validated.issues.map((issue) => `${issue.path}: ${issue.message}`).join('; ')}. Element-targeted actions require a ref from browser_observe.`);
|
|
373
|
-
return await client.sessions.executeAction(sessionId, pageId, validated.value);
|
|
383
|
+
return await client.sessions.executeAction(sessionId, pageId, validated.value, ...operationOptions(args));
|
|
374
384
|
},
|
|
375
385
|
},
|
|
376
386
|
{
|
|
@@ -544,7 +554,54 @@ function buildTools(client) {
|
|
|
544
554
|
export function buildMcpServer(deps) {
|
|
545
555
|
const client = deps.createClient({ baseUrl: deps.baseUrl ?? 'http://localhost:5709' });
|
|
546
556
|
const serverInfo = deps.serverInfo ?? { name: 'agentbrowser', version: '1.0.0' };
|
|
547
|
-
const tools = buildTools(client);
|
|
557
|
+
const tools = buildTools(client).filter((tool) => !deps.sessionId || !['browser_create', 'browser_close', 'browser_cookies'].includes(tool.name));
|
|
558
|
+
for (const tool of tools) {
|
|
559
|
+
if (deps.sessionId && Array.isArray(tool.inputSchema.required))
|
|
560
|
+
tool.inputSchema.required = tool.inputSchema.required.filter((name) => name !== 'sessionId');
|
|
561
|
+
if (['browser_act', 'browser_plan', 'browser_navigate'].includes(tool.name)) {
|
|
562
|
+
tool.inputSchema.properties.operationId = {
|
|
563
|
+
type: 'string',
|
|
564
|
+
pattern: '^[a-zA-Z0-9_-]{1,128}$',
|
|
565
|
+
description: 'Choose a unique ID before the call. If its response is lost, query browser_operation with this ID before another write.',
|
|
566
|
+
};
|
|
567
|
+
if (deps.sessionId)
|
|
568
|
+
tool.inputSchema.required = [
|
|
569
|
+
...(tool.inputSchema.required ?? []),
|
|
570
|
+
'operationId',
|
|
571
|
+
];
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
if (deps.sessionId) {
|
|
575
|
+
const sessionId = deps.sessionId;
|
|
576
|
+
tools.push({
|
|
577
|
+
name: 'browser_session',
|
|
578
|
+
description: 'Inspect the delegated session control status and available pages. Human takeover revokes this connection; ask the operator for a new grant.',
|
|
579
|
+
inputSchema: { type: 'object', properties: {} },
|
|
580
|
+
handler: async () => {
|
|
581
|
+
if (!client.sessions.control || !client.sessions.listPages)
|
|
582
|
+
throw new UsageError('Client does not support delegated sessions');
|
|
583
|
+
return {
|
|
584
|
+
sessionId,
|
|
585
|
+
control: await client.sessions.control(sessionId),
|
|
586
|
+
pages: await client.sessions.listPages(sessionId),
|
|
587
|
+
};
|
|
588
|
+
},
|
|
589
|
+
});
|
|
590
|
+
tools.push({
|
|
591
|
+
name: 'browser_operation',
|
|
592
|
+
description: 'Reconcile a lost response using its operationId. outcome_unknown requires independent inspection; never blindly repeat the action.',
|
|
593
|
+
inputSchema: {
|
|
594
|
+
type: 'object',
|
|
595
|
+
properties: { operationId: { type: 'string' } },
|
|
596
|
+
required: ['operationId'],
|
|
597
|
+
},
|
|
598
|
+
handler: async (args) => {
|
|
599
|
+
if (!client.sessions.operation || typeof args.operationId !== 'string')
|
|
600
|
+
throw new UsageError('operationId is required');
|
|
601
|
+
return client.sessions.operation(sessionId, args.operationId);
|
|
602
|
+
},
|
|
603
|
+
});
|
|
604
|
+
}
|
|
548
605
|
const toolByName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
549
606
|
return {
|
|
550
607
|
async handle(line) {
|
|
@@ -585,7 +642,15 @@ export function buildMcpServer(deps) {
|
|
|
585
642
|
}
|
|
586
643
|
const args = (message.params?.arguments ?? {});
|
|
587
644
|
try {
|
|
588
|
-
|
|
645
|
+
if (deps.sessionId &&
|
|
646
|
+
args.sessionId !== undefined &&
|
|
647
|
+
args.sessionId !== deps.sessionId)
|
|
648
|
+
throw new UsageError('This MCP connection is bound to another session');
|
|
649
|
+
if (deps.sessionId &&
|
|
650
|
+
['browser_act', 'browser_plan', 'browser_navigate'].includes(name) &&
|
|
651
|
+
args.operationId === undefined)
|
|
652
|
+
throw new UsageError('operationId is required for a delegated mutation; choose it before dispatch so a lost response can be reconciled');
|
|
653
|
+
const result = await tool.handler(deps.sessionId ? { ...args, sessionId: deps.sessionId } : args);
|
|
589
654
|
return ok(message.id, textResult(result));
|
|
590
655
|
}
|
|
591
656
|
catch (err) {
|
|
@@ -621,7 +686,12 @@ function errorResult(message) {
|
|
|
621
686
|
};
|
|
622
687
|
}
|
|
623
688
|
function formatToolError(error) {
|
|
624
|
-
|
|
689
|
+
const operationId = error?.details
|
|
690
|
+
?.operationId;
|
|
691
|
+
const suffix = typeof operationId === 'string'
|
|
692
|
+
? `\nReconcile with browser_operation: ${JSON.stringify({ operationId })}`
|
|
693
|
+
: '';
|
|
694
|
+
return (formatErrorForUser(error, 'The element ref is stale. Call browser_observe to get fresh refs at the current revision, then act on the new ref. Do not retry the old one.') + suffix);
|
|
625
695
|
}
|
|
626
696
|
function ok(id, result) {
|
|
627
697
|
return JSON.stringify({ jsonrpc: '2.0', id, result });
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvailabs/agentbrowser-mcp",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server exposing AgentBrowser as high-level, safe, composable tools (talks to an AgentBrowser service via AGENTBROWSER_BASE_URL)",
|
|
6
6
|
"main": "dist/index.js",
|