@accomplish_ai/agent-core 0.3.1 → 0.3.3
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/common/constants/model-display.d.ts.map +1 -1
- package/dist/common/constants/model-display.js +2 -0
- package/dist/common/constants/model-display.js.map +1 -1
- package/dist/common/index.d.ts +3 -3
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/common/types/auth.d.ts +13 -1
- package/dist/common/types/auth.d.ts.map +1 -1
- package/dist/common/types/connector.d.ts +32 -0
- package/dist/common/types/connector.d.ts.map +1 -0
- package/dist/common/types/connector.js +2 -0
- package/dist/common/types/connector.js.map +1 -0
- package/dist/common/types/index.d.ts +4 -3
- package/dist/common/types/index.d.ts.map +1 -1
- package/dist/common/types/index.js.map +1 -1
- package/dist/common/types/provider.d.ts +21 -2
- package/dist/common/types/provider.d.ts.map +1 -1
- package/dist/common/types/provider.js +67 -180
- package/dist/common/types/provider.js.map +1 -1
- package/dist/common/types/providerSettings.d.ts +15 -3
- package/dist/common/types/providerSettings.d.ts.map +1 -1
- package/dist/common/types/providerSettings.js +12 -2
- package/dist/common/types/providerSettings.js.map +1 -1
- package/dist/common.d.ts +5 -3
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +2 -0
- package/dist/common.js.map +1 -1
- package/dist/connectors/mcp-oauth.d.ts +53 -0
- package/dist/connectors/mcp-oauth.d.ts.map +1 -0
- package/dist/connectors/mcp-oauth.js +176 -0
- package/dist/connectors/mcp-oauth.js.map +1 -0
- package/dist/factories/storage.d.ts.map +1 -1
- package/dist/factories/storage.js +27 -1
- package/dist/factories/storage.js.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/opencode/completion/completion-enforcer.d.ts.map +1 -1
- package/dist/opencode/completion/completion-enforcer.js +3 -3
- package/dist/opencode/completion/completion-enforcer.js.map +1 -1
- package/dist/opencode/completion/completion-state.js +1 -1
- package/dist/opencode/completion/index.d.ts +1 -1
- package/dist/opencode/completion/index.d.ts.map +1 -1
- package/dist/opencode/completion/index.js +1 -1
- package/dist/opencode/completion/index.js.map +1 -1
- package/dist/opencode/completion/prompts.d.ts +1 -2
- package/dist/opencode/completion/prompts.d.ts.map +1 -1
- package/dist/opencode/completion/prompts.js +10 -8
- package/dist/opencode/completion/prompts.js.map +1 -1
- package/dist/opencode/config-builder.d.ts.map +1 -1
- package/dist/opencode/config-builder.js +61 -9
- package/dist/opencode/config-builder.js.map +1 -1
- package/dist/opencode/config-generator.d.ts +8 -0
- package/dist/opencode/config-generator.d.ts.map +1 -1
- package/dist/opencode/config-generator.js +36 -2
- package/dist/opencode/config-generator.js.map +1 -1
- package/dist/opencode/environment.d.ts +5 -1
- package/dist/opencode/environment.d.ts.map +1 -1
- package/dist/opencode/environment.js +14 -0
- package/dist/opencode/environment.js.map +1 -1
- package/dist/opencode/index.d.ts +1 -1
- package/dist/opencode/index.d.ts.map +1 -1
- package/dist/opencode/index.js +1 -1
- package/dist/opencode/index.js.map +1 -1
- package/dist/opencode/task-manager.d.ts.map +1 -1
- package/dist/opencode/task-manager.js +7 -0
- package/dist/opencode/task-manager.js.map +1 -1
- package/dist/providers/fetch-models.d.ts +27 -0
- package/dist/providers/fetch-models.d.ts.map +1 -0
- package/dist/providers/fetch-models.js +128 -0
- package/dist/providers/fetch-models.js.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +8 -8
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/tool-support-testing.d.ts +2 -1
- package/dist/providers/tool-support-testing.d.ts.map +1 -1
- package/dist/providers/tool-support-testing.js +29 -6
- package/dist/providers/tool-support-testing.js.map +1 -1
- package/dist/providers/validation.d.ts.map +1 -1
- package/dist/providers/validation.js +1 -0
- package/dist/providers/validation.js.map +1 -1
- package/dist/providers/vertex.d.ts +38 -0
- package/dist/providers/vertex.d.ts.map +1 -0
- package/dist/providers/vertex.js +209 -0
- package/dist/providers/vertex.js.map +1 -0
- package/dist/storage/index.d.ts +2 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/index.js +5 -1
- package/dist/storage/migrations/index.js.map +1 -1
- package/dist/storage/migrations/v007-connectors.d.ts +3 -0
- package/dist/storage/migrations/v007-connectors.d.ts.map +1 -0
- package/dist/storage/migrations/v007-connectors.js +23 -0
- package/dist/storage/migrations/v007-connectors.js.map +1 -0
- package/dist/storage/migrations/v008-theme.d.ts +3 -0
- package/dist/storage/migrations/v008-theme.d.ts.map +1 -0
- package/dist/storage/migrations/v008-theme.js +7 -0
- package/dist/storage/migrations/v008-theme.js.map +1 -0
- package/dist/storage/repositories/appSettings.d.ts +4 -0
- package/dist/storage/repositories/appSettings.d.ts.map +1 -1
- package/dist/storage/repositories/appSettings.js +19 -1
- package/dist/storage/repositories/appSettings.js.map +1 -1
- package/dist/storage/repositories/connectors.d.ts +10 -0
- package/dist/storage/repositories/connectors.d.ts.map +1 -0
- package/dist/storage/repositories/connectors.js +78 -0
- package/dist/storage/repositories/connectors.js.map +1 -0
- package/dist/storage/repositories/index.d.ts +2 -1
- package/dist/storage/repositories/index.d.ts.map +1 -1
- package/dist/storage/repositories/index.js +2 -1
- package/dist/storage/repositories/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/storage.d.ts +35 -3
- package/dist/types/storage.d.ts.map +1 -1
- package/dist/utils/sanitize.d.ts +1 -0
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +3 -3
- package/dist/utils/sanitize.js.map +1 -1
- package/mcp-tools/ask-user-question/dist/index.mjs +7 -14
- package/mcp-tools/complete-task/dist/index.mjs +7 -14
- package/mcp-tools/dev-browser/dist/start-relay.mjs +39 -39
- package/mcp-tools/dev-browser/dist/start-server.mjs +34 -138
- package/mcp-tools/dev-browser-mcp/dist/index.mjs +208 -50
- package/mcp-tools/file-permission/dist/index.mjs +7 -14
- package/mcp-tools/start-task/dist/index.mjs +7 -14
- package/package.json +1 -1
|
@@ -10497,7 +10497,6 @@ ZodNaN.create = (params) => {
|
|
|
10497
10497
|
...processCreateParams(params)
|
|
10498
10498
|
});
|
|
10499
10499
|
};
|
|
10500
|
-
var BRAND = Symbol("zod_brand");
|
|
10501
10500
|
var ZodBranded = class extends ZodType {
|
|
10502
10501
|
_parse(input) {
|
|
10503
10502
|
const { ctx } = this._processInputParams(input);
|
|
@@ -10722,7 +10721,6 @@ function $constructor(name2, initializer3, params) {
|
|
|
10722
10721
|
Object.defineProperty(_, "name", { value: name2 });
|
|
10723
10722
|
return _;
|
|
10724
10723
|
}
|
|
10725
|
-
var $brand = Symbol("zod_brand");
|
|
10726
10724
|
var $ZodAsyncError = class extends Error {
|
|
10727
10725
|
constructor() {
|
|
10728
10726
|
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
|
|
@@ -10869,7 +10867,7 @@ function floatSafeRemainder2(val, step2) {
|
|
|
10869
10867
|
const stepInt = Number.parseInt(step2.toFixed(decCount).replace(".", ""));
|
|
10870
10868
|
return valInt % stepInt / 10 ** decCount;
|
|
10871
10869
|
}
|
|
10872
|
-
var EVALUATING = Symbol("evaluating");
|
|
10870
|
+
var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
|
|
10873
10871
|
function defineLazy(object3, key, getter) {
|
|
10874
10872
|
let value = void 0;
|
|
10875
10873
|
Object.defineProperty(object3, key, {
|
|
@@ -14396,8 +14394,6 @@ function en_default2() {
|
|
|
14396
14394
|
|
|
14397
14395
|
// ../node_modules/zod/v4/core/registries.js
|
|
14398
14396
|
var _a;
|
|
14399
|
-
var $output = Symbol("ZodOutput");
|
|
14400
|
-
var $input = Symbol("ZodInput");
|
|
14401
14397
|
var $ZodRegistry = class {
|
|
14402
14398
|
constructor() {
|
|
14403
14399
|
this._map = /* @__PURE__ */ new WeakMap();
|
|
@@ -15199,7 +15195,7 @@ function _stringbool(Classes, _params) {
|
|
|
15199
15195
|
type: "pipe",
|
|
15200
15196
|
in: stringSchema,
|
|
15201
15197
|
out: booleanSchema,
|
|
15202
|
-
transform: (input, payload) => {
|
|
15198
|
+
transform: ((input, payload) => {
|
|
15203
15199
|
let data = input;
|
|
15204
15200
|
if (params.case !== "sensitive")
|
|
15205
15201
|
data = data.toLowerCase();
|
|
@@ -15218,14 +15214,14 @@ function _stringbool(Classes, _params) {
|
|
|
15218
15214
|
});
|
|
15219
15215
|
return {};
|
|
15220
15216
|
}
|
|
15221
|
-
},
|
|
15222
|
-
reverseTransform: (input, _payload) => {
|
|
15217
|
+
}),
|
|
15218
|
+
reverseTransform: ((input, _payload) => {
|
|
15223
15219
|
if (input === true) {
|
|
15224
15220
|
return truthyArray[0] || "true";
|
|
15225
15221
|
} else {
|
|
15226
15222
|
return falsyArray[0] || "false";
|
|
15227
15223
|
}
|
|
15228
|
-
},
|
|
15224
|
+
}),
|
|
15229
15225
|
error: params.error
|
|
15230
15226
|
});
|
|
15231
15227
|
return codec2;
|
|
@@ -16463,10 +16459,10 @@ var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
|
16463
16459
|
inst.with = inst.check;
|
|
16464
16460
|
inst.clone = (def2, params) => clone(inst, def2, params);
|
|
16465
16461
|
inst.brand = () => inst;
|
|
16466
|
-
inst.register = (reg, meta3) => {
|
|
16462
|
+
inst.register = ((reg, meta3) => {
|
|
16467
16463
|
reg.add(inst, meta3);
|
|
16468
16464
|
return inst;
|
|
16469
|
-
};
|
|
16465
|
+
});
|
|
16470
16466
|
inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse });
|
|
16471
16467
|
inst.safeParse = (data, params) => safeParse3(inst, data, params);
|
|
16472
16468
|
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
|
|
@@ -19042,9 +19038,6 @@ function isTerminal(status) {
|
|
|
19042
19038
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
19043
19039
|
}
|
|
19044
19040
|
|
|
19045
|
-
// ../node_modules/zod-to-json-schema/dist/esm/Options.js
|
|
19046
|
-
var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
|
|
19047
|
-
|
|
19048
19041
|
// ../node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
19049
19042
|
var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
|
|
19050
19043
|
|
|
@@ -21020,14 +21013,23 @@ async function connectBuiltin() {
|
|
|
21020
21013
|
}
|
|
21021
21014
|
const info = await res.json();
|
|
21022
21015
|
cachedServerMode = info.mode || "normal";
|
|
21023
|
-
|
|
21016
|
+
const b = await chromium.connectOverCDP(info.wsEndpoint);
|
|
21017
|
+
try {
|
|
21018
|
+
const cdpSession = await b.newBrowserCDPSession();
|
|
21019
|
+
await cdpSession.send("Browser.setDownloadBehavior", { behavior: "default" });
|
|
21020
|
+
await cdpSession.detach();
|
|
21021
|
+
} catch (err) {
|
|
21022
|
+
console.error("[dev-browser-mcp] Failed to reset download behavior:", err);
|
|
21023
|
+
}
|
|
21024
|
+
return b;
|
|
21024
21025
|
}
|
|
21026
|
+
var DEFAULT_VIEWPORT = { width: 1280, height: 720 };
|
|
21025
21027
|
async function getPageBuiltin(pageName) {
|
|
21026
21028
|
const fullName = getFullPageName(pageName);
|
|
21027
21029
|
const res = await fetchWithRetry(`${config2.devBrowserUrl}/pages`, {
|
|
21028
21030
|
method: "POST",
|
|
21029
21031
|
headers: { "Content-Type": "application/json" },
|
|
21030
|
-
body: JSON.stringify({ name: fullName })
|
|
21032
|
+
body: JSON.stringify({ name: fullName, viewport: DEFAULT_VIEWPORT })
|
|
21031
21033
|
});
|
|
21032
21034
|
if (!res.ok) {
|
|
21033
21035
|
throw new Error(`Failed to get page: ${await res.text()}`);
|
|
@@ -21184,6 +21186,34 @@ function toAIFriendlyError(error2, selector) {
|
|
|
21184
21186
|
`${message}. Try taking a new browser_snapshot() to see the current page state before retrying.`
|
|
21185
21187
|
);
|
|
21186
21188
|
}
|
|
21189
|
+
var CANVAS_APPS = [
|
|
21190
|
+
{ pattern: /docs\.google\.com/, name: "Google Docs" },
|
|
21191
|
+
{ pattern: /sheets\.google\.com/, name: "Google Sheets" },
|
|
21192
|
+
{ pattern: /slides\.google\.com/, name: "Google Slides" },
|
|
21193
|
+
{ pattern: /figma\.com/, name: "Figma" },
|
|
21194
|
+
{ pattern: /canva\.com/, name: "Canva" },
|
|
21195
|
+
{ pattern: /miro\.com/, name: "Miro" }
|
|
21196
|
+
];
|
|
21197
|
+
function isCanvasApp(url2) {
|
|
21198
|
+
const match = CANVAS_APPS.find((app) => app.pattern.test(url2));
|
|
21199
|
+
return match ? match.name : null;
|
|
21200
|
+
}
|
|
21201
|
+
async function getElementCoordinates(element) {
|
|
21202
|
+
try {
|
|
21203
|
+
const box = await element.boundingBox();
|
|
21204
|
+
if (!box) return null;
|
|
21205
|
+
return {
|
|
21206
|
+
x: Math.round(box.x),
|
|
21207
|
+
y: Math.round(box.y),
|
|
21208
|
+
width: Math.round(box.width),
|
|
21209
|
+
height: Math.round(box.height),
|
|
21210
|
+
centerX: Math.round(box.x + box.width / 2),
|
|
21211
|
+
centerY: Math.round(box.y + box.height / 2)
|
|
21212
|
+
};
|
|
21213
|
+
} catch {
|
|
21214
|
+
return null;
|
|
21215
|
+
}
|
|
21216
|
+
}
|
|
21187
21217
|
var activePageOverride = null;
|
|
21188
21218
|
var glowingPage = null;
|
|
21189
21219
|
var pagesWithGlowListeners = /* @__PURE__ */ new WeakSet();
|
|
@@ -22135,7 +22165,56 @@ var SNAPSHOT_SCRIPT = `
|
|
|
22135
22165
|
const lines = [];
|
|
22136
22166
|
let nodesToRender = ariaSnapshot.root.role === "fragment" ? ariaSnapshot.root.children : [ariaSnapshot.root];
|
|
22137
22167
|
|
|
22138
|
-
const
|
|
22168
|
+
const USELESS_ROLES = ['generic', 'none', 'presentation'];
|
|
22169
|
+
const pruneTree = (node) => {
|
|
22170
|
+
if (typeof node === 'string') return node;
|
|
22171
|
+
if (node.children && node.children.length > 0) {
|
|
22172
|
+
node.children = node.children.map(child => pruneTree(child)).filter(child => child !== null);
|
|
22173
|
+
}
|
|
22174
|
+
const isUselessRole = USELESS_ROLES.includes(node.role);
|
|
22175
|
+
const hasNoLabel = !node.name;
|
|
22176
|
+
const childCount = node.children ? node.children.length : 0;
|
|
22177
|
+
if (isUselessRole && hasNoLabel && childCount === 1) return node.children[0];
|
|
22178
|
+
if (isUselessRole && hasNoLabel && childCount === 0) return null;
|
|
22179
|
+
return node;
|
|
22180
|
+
};
|
|
22181
|
+
if (!snapshotOptions.rawTree) {
|
|
22182
|
+
nodesToRender = nodesToRender.map(n => pruneTree(n)).filter(n => n !== null);
|
|
22183
|
+
}
|
|
22184
|
+
|
|
22185
|
+
if (snapshotOptions.interactiveOnly) {
|
|
22186
|
+
const collectTextFromDescendants = (node, maxDepth) => {
|
|
22187
|
+
if (maxDepth === undefined) maxDepth = 10;
|
|
22188
|
+
if (maxDepth <= 0) return '';
|
|
22189
|
+
if (typeof node === 'string') return node.trim();
|
|
22190
|
+
const texts = [];
|
|
22191
|
+
if (node.name && node.name.trim()) {
|
|
22192
|
+
texts.push(node.name.trim());
|
|
22193
|
+
} else if (node.children) {
|
|
22194
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
22195
|
+
const childText = collectTextFromDescendants(node.children[i], maxDepth - 1);
|
|
22196
|
+
if (childText) texts.push(childText);
|
|
22197
|
+
}
|
|
22198
|
+
}
|
|
22199
|
+
return texts.join(' ').replace(/\\s+/g, ' ').trim().slice(0, 100);
|
|
22200
|
+
};
|
|
22201
|
+
const promoteTextToInteractive = (node) => {
|
|
22202
|
+
if (typeof node === 'string') return;
|
|
22203
|
+
if (INTERACTIVE_ROLES.includes(node.role) && !node.name) {
|
|
22204
|
+
const promotedText = collectTextFromDescendants(node);
|
|
22205
|
+
if (promotedText) node.name = promotedText;
|
|
22206
|
+
}
|
|
22207
|
+
if (node.children) {
|
|
22208
|
+
for (let i = 0; i < node.children.length; i++) promoteTextToInteractive(node.children[i]);
|
|
22209
|
+
}
|
|
22210
|
+
};
|
|
22211
|
+
nodesToRender.forEach(n => promoteTextToInteractive(n));
|
|
22212
|
+
}
|
|
22213
|
+
|
|
22214
|
+
const prunedRoot = ariaSnapshot.root.role === "fragment"
|
|
22215
|
+
? { ...ariaSnapshot.root, children: nodesToRender }
|
|
22216
|
+
: (nodesToRender[0] || ariaSnapshot.root);
|
|
22217
|
+
const scoredElements = collectScoredElements(prunedRoot, snapshotOptions);
|
|
22139
22218
|
|
|
22140
22219
|
const truncateResult = truncateWithBudget(scoredElements, maxElements, maxTokens);
|
|
22141
22220
|
|
|
@@ -22180,6 +22259,10 @@ var SNAPSHOT_SCRIPT = `
|
|
|
22180
22259
|
key += " [ref=" + ariaNode.ref + "]";
|
|
22181
22260
|
if (renderCursorPointer && hasPointerCursor(ariaNode)) key += " [cursor=pointer]";
|
|
22182
22261
|
}
|
|
22262
|
+
if (snapshotOptions.includeBoundingBoxes !== false && ariaNode.box?.rect) {
|
|
22263
|
+
const r = ariaNode.box.rect;
|
|
22264
|
+
key += " [" + Math.round(r.x) + ", " + Math.round(r.y) + ", " + Math.round(r.width) + ", " + Math.round(r.height) + "]";
|
|
22265
|
+
}
|
|
22183
22266
|
return key;
|
|
22184
22267
|
};
|
|
22185
22268
|
|
|
@@ -23140,18 +23223,20 @@ The page has loaded. Use browser_snapshot() to see the page elements and find in
|
|
|
23140
23223
|
maxTokens: validatedMaxTokens
|
|
23141
23224
|
};
|
|
23142
23225
|
const rawSnapshot = await getAISnapshot(page2, snapshotOptions);
|
|
23143
|
-
|
|
23226
|
+
let viewport = page2.viewportSize();
|
|
23227
|
+
if (!viewport || viewport.width === 0 && viewport.height === 0) {
|
|
23228
|
+
try {
|
|
23229
|
+
const windowSize = await page2.evaluate(() => ({
|
|
23230
|
+
width: window.innerWidth,
|
|
23231
|
+
height: window.innerHeight
|
|
23232
|
+
}));
|
|
23233
|
+
viewport = windowSize;
|
|
23234
|
+
} catch {
|
|
23235
|
+
}
|
|
23236
|
+
}
|
|
23144
23237
|
const url2 = page2.url();
|
|
23145
23238
|
const title = await page2.title();
|
|
23146
|
-
const
|
|
23147
|
-
{ pattern: /docs\.google\.com/, name: "Google Docs" },
|
|
23148
|
-
{ pattern: /sheets\.google\.com/, name: "Google Sheets" },
|
|
23149
|
-
{ pattern: /slides\.google\.com/, name: "Google Slides" },
|
|
23150
|
-
{ pattern: /figma\.com/, name: "Figma" },
|
|
23151
|
-
{ pattern: /canva\.com/, name: "Canva" },
|
|
23152
|
-
{ pattern: /miro\.com/, name: "Miro" }
|
|
23153
|
-
];
|
|
23154
|
-
const detectedApp = canvasApps.find((app) => app.pattern.test(url2));
|
|
23239
|
+
const detectedCanvasApp = isCanvasApp(url2);
|
|
23155
23240
|
const manager = getSnapshotManager();
|
|
23156
23241
|
const result = manager.processSnapshot(rawSnapshot, url2, title, {
|
|
23157
23242
|
fullSnapshot: full_snapshot,
|
|
@@ -23180,15 +23265,11 @@ The page has loaded. Use browser_snapshot() to see the page elements and find in
|
|
|
23180
23265
|
output += `Mode: Interactive elements only (buttons, links, inputs)
|
|
23181
23266
|
`;
|
|
23182
23267
|
}
|
|
23183
|
-
if (
|
|
23268
|
+
if (detectedCanvasApp) {
|
|
23184
23269
|
output += `
|
|
23185
|
-
\u26A0\uFE0F CANVAS APP DETECTED: ${
|
|
23186
|
-
`;
|
|
23187
|
-
output += `This app uses canvas rendering. Element refs may not work for the main content area.
|
|
23188
|
-
`;
|
|
23189
|
-
output += `Use: browser_click(position="center-lower") then browser_keyboard(action="type", text="...")
|
|
23270
|
+
\u26A0\uFE0F CANVAS APP DETECTED: ${detectedCanvasApp}
|
|
23190
23271
|
`;
|
|
23191
|
-
output += `
|
|
23272
|
+
output += `This app uses canvas rendering. Ref-based clicks auto-fallback to coordinate clicks.
|
|
23192
23273
|
`;
|
|
23193
23274
|
}
|
|
23194
23275
|
if (result.type === "diff") {
|
|
@@ -23242,9 +23323,32 @@ ${result.content}`;
|
|
|
23242
23323
|
isError: true
|
|
23243
23324
|
};
|
|
23244
23325
|
}
|
|
23245
|
-
|
|
23246
|
-
|
|
23247
|
-
|
|
23326
|
+
const canvasApp = isCanvasApp(page2.url());
|
|
23327
|
+
if (canvasApp) {
|
|
23328
|
+
const coords = await getElementCoordinates(element);
|
|
23329
|
+
if (!coords) {
|
|
23330
|
+
return {
|
|
23331
|
+
content: [{ type: "text", text: `Element [ref=${ref}] has no bounding box on ${canvasApp} canvas app. Try browser_click with explicit x/y coordinates or position="center".` }],
|
|
23332
|
+
isError: true
|
|
23333
|
+
};
|
|
23334
|
+
}
|
|
23335
|
+
await page2.mouse.click(coords.centerX, coords.centerY, clickOptions);
|
|
23336
|
+
await waitForPageLoad(page2);
|
|
23337
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${clickDesc} (canvas app: ${canvasApp})` }] };
|
|
23338
|
+
}
|
|
23339
|
+
try {
|
|
23340
|
+
await element.click(clickOptions);
|
|
23341
|
+
await waitForPageLoad(page2);
|
|
23342
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}]${clickDesc}` }] };
|
|
23343
|
+
} catch (clickErr) {
|
|
23344
|
+
const coords = await getElementCoordinates(element);
|
|
23345
|
+
if (coords) {
|
|
23346
|
+
await page2.mouse.click(coords.centerX, coords.centerY, clickOptions);
|
|
23347
|
+
await waitForPageLoad(page2);
|
|
23348
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}] [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${clickDesc} (coordinate fallback \u2014 DOM click failed)` }] };
|
|
23349
|
+
}
|
|
23350
|
+
throw clickErr;
|
|
23351
|
+
}
|
|
23248
23352
|
} else if (selector) {
|
|
23249
23353
|
await page2.click(selector, clickOptions);
|
|
23250
23354
|
await waitForPageLoad(page2);
|
|
@@ -23291,17 +23395,52 @@ ${result.content}`;
|
|
|
23291
23395
|
isError: true
|
|
23292
23396
|
};
|
|
23293
23397
|
}
|
|
23294
|
-
await element.click();
|
|
23295
|
-
await element.fill(text);
|
|
23296
|
-
if (press_enter) {
|
|
23297
|
-
await element.press("Enter");
|
|
23298
|
-
await waitForPageLoad(page2);
|
|
23299
|
-
}
|
|
23300
23398
|
const target = ref ? `[ref=${ref}]` : `"${selector}"`;
|
|
23301
23399
|
const enterNote = press_enter ? " and pressed Enter" : "";
|
|
23302
|
-
|
|
23303
|
-
|
|
23304
|
-
|
|
23400
|
+
const canvasApp = isCanvasApp(page2.url());
|
|
23401
|
+
if (canvasApp) {
|
|
23402
|
+
const coords = await getElementCoordinates(element);
|
|
23403
|
+
if (!coords) {
|
|
23404
|
+
return {
|
|
23405
|
+
content: [{ type: "text", text: `Element ${target} has no bounding box on ${canvasApp} canvas app. Try browser_click(position="center-lower") then browser_keyboard(action="type", text="...").` }],
|
|
23406
|
+
isError: true
|
|
23407
|
+
};
|
|
23408
|
+
}
|
|
23409
|
+
await page2.mouse.click(coords.centerX, coords.centerY);
|
|
23410
|
+
await page2.keyboard.type(text);
|
|
23411
|
+
if (press_enter) {
|
|
23412
|
+
await page2.keyboard.press("Enter");
|
|
23413
|
+
await waitForPageLoad(page2);
|
|
23414
|
+
}
|
|
23415
|
+
return {
|
|
23416
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target} [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${enterNote} (canvas app: ${canvasApp})` }]
|
|
23417
|
+
};
|
|
23418
|
+
}
|
|
23419
|
+
try {
|
|
23420
|
+
await element.click();
|
|
23421
|
+
await element.fill(text);
|
|
23422
|
+
if (press_enter) {
|
|
23423
|
+
await element.press("Enter");
|
|
23424
|
+
await waitForPageLoad(page2);
|
|
23425
|
+
}
|
|
23426
|
+
return {
|
|
23427
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target}${enterNote}` }]
|
|
23428
|
+
};
|
|
23429
|
+
} catch (fillErr) {
|
|
23430
|
+
const coords = await getElementCoordinates(element);
|
|
23431
|
+
if (coords) {
|
|
23432
|
+
await page2.mouse.click(coords.centerX, coords.centerY);
|
|
23433
|
+
await page2.keyboard.type(text);
|
|
23434
|
+
if (press_enter) {
|
|
23435
|
+
await page2.keyboard.press("Enter");
|
|
23436
|
+
await waitForPageLoad(page2);
|
|
23437
|
+
}
|
|
23438
|
+
return {
|
|
23439
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target} [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${enterNote} (coordinate fallback \u2014 DOM fill failed)` }]
|
|
23440
|
+
};
|
|
23441
|
+
}
|
|
23442
|
+
throw fillErr;
|
|
23443
|
+
}
|
|
23305
23444
|
} catch (err) {
|
|
23306
23445
|
const targetDesc = ref ? `[ref=${ref}]` : selector || "element";
|
|
23307
23446
|
const friendlyError = toAIFriendlyError(err, targetDesc);
|
|
@@ -23758,10 +23897,29 @@ ${snapshotResult}` });
|
|
|
23758
23897
|
isError: true
|
|
23759
23898
|
};
|
|
23760
23899
|
}
|
|
23761
|
-
|
|
23762
|
-
|
|
23763
|
-
|
|
23764
|
-
|
|
23900
|
+
const hoverCanvasApp = isCanvasApp(page2.url());
|
|
23901
|
+
if (hoverCanvasApp) {
|
|
23902
|
+
const coords = await getElementCoordinates(element);
|
|
23903
|
+
if (coords) {
|
|
23904
|
+
await page2.mouse.move(coords.centerX, coords.centerY);
|
|
23905
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}] (coordinate hover \u2014 ${hoverCanvasApp} canvas app)` }] };
|
|
23906
|
+
}
|
|
23907
|
+
return {
|
|
23908
|
+
content: [{ type: "text", text: `Element [ref=${ref}] has no bounding box \u2014 cannot coordinate-hover on ${hoverCanvasApp} canvas app. Try browser_hover with explicit x/y coordinates.` }],
|
|
23909
|
+
isError: true
|
|
23910
|
+
};
|
|
23911
|
+
}
|
|
23912
|
+
try {
|
|
23913
|
+
await element.hover();
|
|
23914
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}]` }] };
|
|
23915
|
+
} catch (hoverErr) {
|
|
23916
|
+
const coords = await getElementCoordinates(element);
|
|
23917
|
+
if (coords) {
|
|
23918
|
+
await page2.mouse.move(coords.centerX, coords.centerY);
|
|
23919
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}] (coordinate fallback \u2014 DOM hover failed)` }] };
|
|
23920
|
+
}
|
|
23921
|
+
throw hoverErr;
|
|
23922
|
+
}
|
|
23765
23923
|
}
|
|
23766
23924
|
if (selector) {
|
|
23767
23925
|
await page2.hover(selector);
|
|
@@ -10497,7 +10497,6 @@ ZodNaN.create = (params) => {
|
|
|
10497
10497
|
...processCreateParams(params)
|
|
10498
10498
|
});
|
|
10499
10499
|
};
|
|
10500
|
-
var BRAND = Symbol("zod_brand");
|
|
10501
10500
|
var ZodBranded = class extends ZodType {
|
|
10502
10501
|
_parse(input) {
|
|
10503
10502
|
const { ctx } = this._processInputParams(input);
|
|
@@ -10722,7 +10721,6 @@ function $constructor(name, initializer3, params) {
|
|
|
10722
10721
|
Object.defineProperty(_, "name", { value: name });
|
|
10723
10722
|
return _;
|
|
10724
10723
|
}
|
|
10725
|
-
var $brand = Symbol("zod_brand");
|
|
10726
10724
|
var $ZodAsyncError = class extends Error {
|
|
10727
10725
|
constructor() {
|
|
10728
10726
|
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
|
|
@@ -10869,7 +10867,7 @@ function floatSafeRemainder2(val, step) {
|
|
|
10869
10867
|
const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
|
|
10870
10868
|
return valInt % stepInt / 10 ** decCount;
|
|
10871
10869
|
}
|
|
10872
|
-
var EVALUATING = Symbol("evaluating");
|
|
10870
|
+
var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
|
|
10873
10871
|
function defineLazy(object3, key, getter) {
|
|
10874
10872
|
let value = void 0;
|
|
10875
10873
|
Object.defineProperty(object3, key, {
|
|
@@ -14396,8 +14394,6 @@ function en_default2() {
|
|
|
14396
14394
|
|
|
14397
14395
|
// ../node_modules/zod/v4/core/registries.js
|
|
14398
14396
|
var _a;
|
|
14399
|
-
var $output = Symbol("ZodOutput");
|
|
14400
|
-
var $input = Symbol("ZodInput");
|
|
14401
14397
|
var $ZodRegistry = class {
|
|
14402
14398
|
constructor() {
|
|
14403
14399
|
this._map = /* @__PURE__ */ new WeakMap();
|
|
@@ -15199,7 +15195,7 @@ function _stringbool(Classes, _params) {
|
|
|
15199
15195
|
type: "pipe",
|
|
15200
15196
|
in: stringSchema,
|
|
15201
15197
|
out: booleanSchema,
|
|
15202
|
-
transform: (input, payload) => {
|
|
15198
|
+
transform: ((input, payload) => {
|
|
15203
15199
|
let data = input;
|
|
15204
15200
|
if (params.case !== "sensitive")
|
|
15205
15201
|
data = data.toLowerCase();
|
|
@@ -15218,14 +15214,14 @@ function _stringbool(Classes, _params) {
|
|
|
15218
15214
|
});
|
|
15219
15215
|
return {};
|
|
15220
15216
|
}
|
|
15221
|
-
},
|
|
15222
|
-
reverseTransform: (input, _payload) => {
|
|
15217
|
+
}),
|
|
15218
|
+
reverseTransform: ((input, _payload) => {
|
|
15223
15219
|
if (input === true) {
|
|
15224
15220
|
return truthyArray[0] || "true";
|
|
15225
15221
|
} else {
|
|
15226
15222
|
return falsyArray[0] || "false";
|
|
15227
15223
|
}
|
|
15228
|
-
},
|
|
15224
|
+
}),
|
|
15229
15225
|
error: params.error
|
|
15230
15226
|
});
|
|
15231
15227
|
return codec2;
|
|
@@ -16463,10 +16459,10 @@ var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
|
16463
16459
|
inst.with = inst.check;
|
|
16464
16460
|
inst.clone = (def2, params) => clone(inst, def2, params);
|
|
16465
16461
|
inst.brand = () => inst;
|
|
16466
|
-
inst.register = (reg, meta3) => {
|
|
16462
|
+
inst.register = ((reg, meta3) => {
|
|
16467
16463
|
reg.add(inst, meta3);
|
|
16468
16464
|
return inst;
|
|
16469
|
-
};
|
|
16465
|
+
});
|
|
16470
16466
|
inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse });
|
|
16471
16467
|
inst.safeParse = (data, params) => safeParse3(inst, data, params);
|
|
16472
16468
|
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
|
|
@@ -19042,9 +19038,6 @@ function isTerminal(status) {
|
|
|
19042
19038
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
19043
19039
|
}
|
|
19044
19040
|
|
|
19045
|
-
// ../node_modules/zod-to-json-schema/dist/esm/Options.js
|
|
19046
|
-
var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
|
|
19047
|
-
|
|
19048
19041
|
// ../node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
19049
19042
|
var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
|
|
19050
19043
|
|
|
@@ -10497,7 +10497,6 @@ ZodNaN.create = (params) => {
|
|
|
10497
10497
|
...processCreateParams(params)
|
|
10498
10498
|
});
|
|
10499
10499
|
};
|
|
10500
|
-
var BRAND = Symbol("zod_brand");
|
|
10501
10500
|
var ZodBranded = class extends ZodType {
|
|
10502
10501
|
_parse(input) {
|
|
10503
10502
|
const { ctx } = this._processInputParams(input);
|
|
@@ -10722,7 +10721,6 @@ function $constructor(name, initializer3, params) {
|
|
|
10722
10721
|
Object.defineProperty(_, "name", { value: name });
|
|
10723
10722
|
return _;
|
|
10724
10723
|
}
|
|
10725
|
-
var $brand = Symbol("zod_brand");
|
|
10726
10724
|
var $ZodAsyncError = class extends Error {
|
|
10727
10725
|
constructor() {
|
|
10728
10726
|
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
|
|
@@ -10869,7 +10867,7 @@ function floatSafeRemainder2(val, step) {
|
|
|
10869
10867
|
const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
|
|
10870
10868
|
return valInt % stepInt / 10 ** decCount;
|
|
10871
10869
|
}
|
|
10872
|
-
var EVALUATING = Symbol("evaluating");
|
|
10870
|
+
var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
|
|
10873
10871
|
function defineLazy(object3, key, getter) {
|
|
10874
10872
|
let value = void 0;
|
|
10875
10873
|
Object.defineProperty(object3, key, {
|
|
@@ -14396,8 +14394,6 @@ function en_default2() {
|
|
|
14396
14394
|
|
|
14397
14395
|
// ../node_modules/zod/v4/core/registries.js
|
|
14398
14396
|
var _a;
|
|
14399
|
-
var $output = Symbol("ZodOutput");
|
|
14400
|
-
var $input = Symbol("ZodInput");
|
|
14401
14397
|
var $ZodRegistry = class {
|
|
14402
14398
|
constructor() {
|
|
14403
14399
|
this._map = /* @__PURE__ */ new WeakMap();
|
|
@@ -15199,7 +15195,7 @@ function _stringbool(Classes, _params) {
|
|
|
15199
15195
|
type: "pipe",
|
|
15200
15196
|
in: stringSchema,
|
|
15201
15197
|
out: booleanSchema,
|
|
15202
|
-
transform: (input, payload) => {
|
|
15198
|
+
transform: ((input, payload) => {
|
|
15203
15199
|
let data = input;
|
|
15204
15200
|
if (params.case !== "sensitive")
|
|
15205
15201
|
data = data.toLowerCase();
|
|
@@ -15218,14 +15214,14 @@ function _stringbool(Classes, _params) {
|
|
|
15218
15214
|
});
|
|
15219
15215
|
return {};
|
|
15220
15216
|
}
|
|
15221
|
-
},
|
|
15222
|
-
reverseTransform: (input, _payload) => {
|
|
15217
|
+
}),
|
|
15218
|
+
reverseTransform: ((input, _payload) => {
|
|
15223
15219
|
if (input === true) {
|
|
15224
15220
|
return truthyArray[0] || "true";
|
|
15225
15221
|
} else {
|
|
15226
15222
|
return falsyArray[0] || "false";
|
|
15227
15223
|
}
|
|
15228
|
-
},
|
|
15224
|
+
}),
|
|
15229
15225
|
error: params.error
|
|
15230
15226
|
});
|
|
15231
15227
|
return codec2;
|
|
@@ -16463,10 +16459,10 @@ var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
|
16463
16459
|
inst.with = inst.check;
|
|
16464
16460
|
inst.clone = (def2, params) => clone(inst, def2, params);
|
|
16465
16461
|
inst.brand = () => inst;
|
|
16466
|
-
inst.register = (reg, meta3) => {
|
|
16462
|
+
inst.register = ((reg, meta3) => {
|
|
16467
16463
|
reg.add(inst, meta3);
|
|
16468
16464
|
return inst;
|
|
16469
|
-
};
|
|
16465
|
+
});
|
|
16470
16466
|
inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse });
|
|
16471
16467
|
inst.safeParse = (data, params) => safeParse3(inst, data, params);
|
|
16472
16468
|
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
|
|
@@ -19042,9 +19038,6 @@ function isTerminal(status) {
|
|
|
19042
19038
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
19043
19039
|
}
|
|
19044
19040
|
|
|
19045
|
-
// ../node_modules/zod-to-json-schema/dist/esm/Options.js
|
|
19046
|
-
var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
|
|
19047
|
-
|
|
19048
19041
|
// ../node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
19049
19042
|
var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
|
|
19050
19043
|
|