misoai-web 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +8 -8
- package/bin/midscene-playground +2 -2
- package/dist/es/agent.js +167 -44
- package/dist/es/agent.js.map +1 -1
- package/dist/es/bridge-mode-browser.js +64 -17
- package/dist/es/bridge-mode-browser.js.map +1 -1
- package/dist/es/bridge-mode.js +169 -46
- package/dist/es/bridge-mode.js.map +1 -1
- package/dist/es/chrome-extension.js +229 -59
- package/dist/es/chrome-extension.js.map +1 -1
- package/dist/es/index.js +183 -45
- package/dist/es/index.js.map +1 -1
- package/dist/es/midscene-playground.js +173 -44
- package/dist/es/midscene-playground.js.map +1 -1
- package/dist/es/midscene-server.js.map +1 -1
- package/dist/es/playground.js +173 -44
- package/dist/es/playground.js.map +1 -1
- package/dist/es/playwright-report.js.map +1 -1
- package/dist/es/playwright.js +183 -45
- package/dist/es/playwright.js.map +1 -1
- package/dist/es/puppeteer-agent-launcher.js +183 -45
- package/dist/es/puppeteer-agent-launcher.js.map +1 -1
- package/dist/es/puppeteer.js +183 -45
- package/dist/es/puppeteer.js.map +1 -1
- package/dist/es/ui-utils.js.map +1 -1
- package/dist/es/utils.js.map +1 -1
- package/dist/es/yaml.js +21 -3
- package/dist/es/yaml.js.map +1 -1
- package/dist/lib/agent.js +167 -44
- package/dist/lib/agent.js.map +1 -1
- package/dist/lib/bridge-mode-browser.js +64 -17
- package/dist/lib/bridge-mode-browser.js.map +1 -1
- package/dist/lib/bridge-mode.js +169 -46
- package/dist/lib/bridge-mode.js.map +1 -1
- package/dist/lib/chrome-extension.js +229 -59
- package/dist/lib/chrome-extension.js.map +1 -1
- package/dist/lib/index.js +181 -46
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/midscene-playground.js +173 -44
- package/dist/lib/midscene-playground.js.map +1 -1
- package/dist/lib/midscene-server.js.map +1 -1
- package/dist/lib/playground.js +173 -44
- package/dist/lib/playground.js.map +1 -1
- package/dist/lib/playwright-report.js.map +1 -1
- package/dist/lib/playwright.js +181 -46
- package/dist/lib/playwright.js.map +1 -1
- package/dist/lib/puppeteer-agent-launcher.js +181 -46
- package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
- package/dist/lib/puppeteer.js +181 -46
- package/dist/lib/puppeteer.js.map +1 -1
- package/dist/lib/ui-utils.js.map +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/yaml.js +21 -3
- package/dist/lib/yaml.js.map +1 -1
- package/dist/types/agent.d.ts +16 -6
- package/dist/types/bridge-mode-browser.d.ts +2 -2
- package/dist/types/bridge-mode.d.ts +2 -2
- package/dist/types/{browser-d447695b.d.ts → browser-a1877d18.d.ts} +1 -1
- package/dist/types/chrome-extension.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/midscene-server.d.ts +1 -1
- package/dist/types/{page-b8ada1f3.d.ts → page-663ece08.d.ts} +41 -30
- package/dist/types/playground.d.ts +2 -2
- package/dist/types/playwright.d.ts +1 -1
- package/dist/types/puppeteer-agent-launcher.d.ts +1 -1
- package/dist/types/puppeteer.d.ts +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/yaml.d.ts +1 -1
- package/iife-script/htmlElement.js +99 -37
- package/iife-script/htmlElementDebug.js +92 -9
- package/package.json +23 -24
package/dist/lib/bridge-mode.js
CHANGED
@@ -127,7 +127,9 @@ var ScriptPlayer = class {
|
|
127
127
|
typeof prompt === "string",
|
128
128
|
"prompt for aiAction must be a string"
|
129
129
|
);
|
130
|
-
await agent.aiAction(prompt
|
130
|
+
await agent.aiAction(prompt, {
|
131
|
+
cacheable: actionTask.cacheable
|
132
|
+
});
|
131
133
|
} else if ("aiAssert" in flowItem) {
|
132
134
|
const assertTask = flowItem;
|
133
135
|
const prompt = assertTask.aiAssert;
|
@@ -329,8 +331,24 @@ function interpolateEnvVars(content) {
|
|
329
331
|
});
|
330
332
|
}
|
331
333
|
function parseYamlScript(content, filePath, ignoreCheckingTarget) {
|
332
|
-
|
333
|
-
|
334
|
+
let processedContent = content;
|
335
|
+
if (content.indexOf("android") !== -1 && content.match(/deviceId:\s*(\d+)/)) {
|
336
|
+
let matchedDeviceId;
|
337
|
+
processedContent = content.replace(
|
338
|
+
/deviceId:\s*(\d+)/g,
|
339
|
+
(match, deviceId) => {
|
340
|
+
matchedDeviceId = deviceId;
|
341
|
+
return `deviceId: '${deviceId}'`;
|
342
|
+
}
|
343
|
+
);
|
344
|
+
console.warn(
|
345
|
+
`please use string-style deviceId in yaml script, for example: deviceId: "${matchedDeviceId}"`
|
346
|
+
);
|
347
|
+
}
|
348
|
+
const interpolatedContent = interpolateEnvVars(processedContent);
|
349
|
+
const obj = import_js_yaml2.default.load(interpolatedContent, {
|
350
|
+
schema: import_js_yaml2.default.JSON_SCHEMA
|
351
|
+
});
|
334
352
|
const pathTip = filePath ? `, failed to load ${filePath}` : "";
|
335
353
|
const android = typeof obj.android !== "undefined" ? Object.assign({}, obj.android || {}) : void 0;
|
336
354
|
const webConfig = obj.web || obj.target;
|
@@ -371,7 +389,6 @@ var import_misoai_core = require("misoai-core");
|
|
371
389
|
var import_ai_model2 = require("misoai-core/ai-model");
|
372
390
|
var import_utils5 = require("misoai-core/utils");
|
373
391
|
var import_constants = require("misoai-shared/constants");
|
374
|
-
var import_fs = require("misoai-shared/fs");
|
375
392
|
var import_logger = require("misoai-shared/logger");
|
376
393
|
var import_utils6 = require("misoai-shared/utils");
|
377
394
|
|
@@ -603,16 +620,18 @@ var PageTaskExecutor = class {
|
|
603
620
|
);
|
604
621
|
if (info?.id) {
|
605
622
|
elementId = info.id;
|
623
|
+
} else {
|
624
|
+
debug(
|
625
|
+
"no element id found for position node, will not update cache",
|
626
|
+
element
|
627
|
+
);
|
606
628
|
}
|
607
629
|
}
|
608
630
|
if (!elementId) {
|
609
631
|
return void 0;
|
610
632
|
}
|
611
633
|
try {
|
612
|
-
const
|
613
|
-
const result = await this.page.evaluateJavaScript?.(
|
614
|
-
`${elementInfosScriptContent}midscene_element_inspector.getXpathsById('${elementId}')`
|
615
|
-
);
|
634
|
+
const result = await this.page.getXpathsById(elementId);
|
616
635
|
return result;
|
617
636
|
} catch (error) {
|
618
637
|
debug("getXpathsById error: ", error);
|
@@ -651,7 +670,7 @@ var PageTaskExecutor = class {
|
|
651
670
|
};
|
652
671
|
return taskWithScreenshot;
|
653
672
|
}
|
654
|
-
async convertPlanToExecutable(plans) {
|
673
|
+
async convertPlanToExecutable(plans, opts) {
|
655
674
|
const tasks = [];
|
656
675
|
plans.forEach((plan2) => {
|
657
676
|
if (plan2.type === "Locate") {
|
@@ -661,7 +680,10 @@ var PageTaskExecutor = class {
|
|
661
680
|
const taskFind = {
|
662
681
|
type: "Insight",
|
663
682
|
subType: "Locate",
|
664
|
-
param: plan2.locate
|
683
|
+
param: plan2.locate ? {
|
684
|
+
...plan2.locate,
|
685
|
+
cacheable: opts?.cacheable
|
686
|
+
} : void 0,
|
665
687
|
thought: plan2.thought,
|
666
688
|
locate: plan2.locate,
|
667
689
|
executor: async (param, taskContext) => {
|
@@ -698,19 +720,21 @@ var PageTaskExecutor = class {
|
|
698
720
|
let elementFromCache = null;
|
699
721
|
try {
|
700
722
|
if (xpaths?.length && this.taskCache?.isCacheResultUsed && param?.cacheable !== false) {
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
);
|
705
|
-
if (element2?.id) {
|
706
|
-
elementFromCache = element2;
|
707
|
-
debug("cache hit, prompt: %s", cachePrompt);
|
708
|
-
cacheHitFlag = true;
|
709
|
-
debug(
|
710
|
-
"found a new new element with same xpath, xpath: %s, id: %s",
|
711
|
-
xpaths[0],
|
712
|
-
element2?.id
|
723
|
+
for (let i = 0; i < xpaths.length; i++) {
|
724
|
+
const element2 = await this.page.getElementInfoByXpath(
|
725
|
+
xpaths[i]
|
713
726
|
);
|
727
|
+
if (element2?.id) {
|
728
|
+
elementFromCache = element2;
|
729
|
+
debug("cache hit, prompt: %s", cachePrompt);
|
730
|
+
cacheHitFlag = true;
|
731
|
+
debug(
|
732
|
+
"found a new new element with same xpath, xpath: %s, id: %s",
|
733
|
+
xpaths[i],
|
734
|
+
element2?.id
|
735
|
+
);
|
736
|
+
break;
|
737
|
+
}
|
714
738
|
}
|
715
739
|
}
|
716
740
|
} catch (error) {
|
@@ -723,12 +747,14 @@ var PageTaskExecutor = class {
|
|
723
747
|
context: pageContext
|
724
748
|
})).element;
|
725
749
|
const aiCost = Date.now() - startTime;
|
750
|
+
let currentXpaths;
|
726
751
|
if (element && this.taskCache && !cacheHitFlag && param?.cacheable !== false) {
|
727
752
|
const elementXpaths = await this.getElementXpath(
|
728
753
|
pageContext,
|
729
754
|
element
|
730
755
|
);
|
731
|
-
if (elementXpaths) {
|
756
|
+
if (elementXpaths?.length) {
|
757
|
+
currentXpaths = elementXpaths;
|
732
758
|
this.taskCache.updateOrAppendCacheRecord(
|
733
759
|
{
|
734
760
|
type: "locate",
|
@@ -738,7 +764,11 @@ var PageTaskExecutor = class {
|
|
738
764
|
locateCacheRecord
|
739
765
|
);
|
740
766
|
} else {
|
741
|
-
debug(
|
767
|
+
debug(
|
768
|
+
"no xpaths found, will not update cache",
|
769
|
+
cachePrompt,
|
770
|
+
elementXpaths
|
771
|
+
);
|
742
772
|
}
|
743
773
|
}
|
744
774
|
if (!element) {
|
@@ -750,7 +780,9 @@ var PageTaskExecutor = class {
|
|
750
780
|
},
|
751
781
|
pageContext,
|
752
782
|
cache: {
|
753
|
-
hit: cacheHitFlag
|
783
|
+
hit: cacheHitFlag,
|
784
|
+
originalXpaths: xpaths,
|
785
|
+
currentXpaths
|
754
786
|
},
|
755
787
|
aiCost
|
756
788
|
};
|
@@ -1118,6 +1150,7 @@ var PageTaskExecutor = class {
|
|
1118
1150
|
sleep: sleep4
|
1119
1151
|
} = planResult;
|
1120
1152
|
executorContext.task.log = {
|
1153
|
+
...executorContext.task.log || {},
|
1121
1154
|
rawResponse
|
1122
1155
|
};
|
1123
1156
|
executorContext.task.usage = usage;
|
@@ -1242,11 +1275,11 @@ var PageTaskExecutor = class {
|
|
1242
1275
|
};
|
1243
1276
|
return task;
|
1244
1277
|
}
|
1245
|
-
async runPlans(title, plans) {
|
1278
|
+
async runPlans(title, plans, opts) {
|
1246
1279
|
const taskExecutor = new import_misoai_core.Executor(title, {
|
1247
1280
|
onTaskStart: this.onTaskStartCallback
|
1248
1281
|
});
|
1249
|
-
const { tasks } = await this.convertPlanToExecutable(plans);
|
1282
|
+
const { tasks } = await this.convertPlanToExecutable(plans, opts);
|
1250
1283
|
await taskExecutor.append(tasks);
|
1251
1284
|
const result = await taskExecutor.flush();
|
1252
1285
|
return {
|
@@ -1254,7 +1287,7 @@ var PageTaskExecutor = class {
|
|
1254
1287
|
executor: taskExecutor
|
1255
1288
|
};
|
1256
1289
|
}
|
1257
|
-
async action(userPrompt, actionContext) {
|
1290
|
+
async action(userPrompt, actionContext, opts) {
|
1258
1291
|
const taskExecutor = new import_misoai_core.Executor(taskTitleStr("Action", userPrompt), {
|
1259
1292
|
onTaskStart: this.onTaskStartCallback
|
1260
1293
|
});
|
@@ -1279,7 +1312,7 @@ var PageTaskExecutor = class {
|
|
1279
1312
|
yamlFlow.push(...planResult.yamlFlow || []);
|
1280
1313
|
let executables;
|
1281
1314
|
try {
|
1282
|
-
executables = await this.convertPlanToExecutable(plans);
|
1315
|
+
executables = await this.convertPlanToExecutable(plans, opts);
|
1283
1316
|
taskExecutor.append(executables.tasks);
|
1284
1317
|
} catch (error) {
|
1285
1318
|
return this.appendErrorPlan(
|
@@ -1317,7 +1350,7 @@ var PageTaskExecutor = class {
|
|
1317
1350
|
executor: taskExecutor
|
1318
1351
|
};
|
1319
1352
|
}
|
1320
|
-
async actionToGoal(userPrompt) {
|
1353
|
+
async actionToGoal(userPrompt, opts) {
|
1321
1354
|
const taskExecutor = new import_misoai_core.Executor(taskTitleStr("Action", userPrompt), {
|
1322
1355
|
onTaskStart: this.onTaskStartCallback
|
1323
1356
|
});
|
@@ -1341,7 +1374,7 @@ var PageTaskExecutor = class {
|
|
1341
1374
|
yamlFlow.push(...output.yamlFlow || []);
|
1342
1375
|
let executables;
|
1343
1376
|
try {
|
1344
|
-
executables = await this.convertPlanToExecutable(plans);
|
1377
|
+
executables = await this.convertPlanToExecutable(plans, opts);
|
1345
1378
|
taskExecutor.append(executables.tasks);
|
1346
1379
|
} catch (error) {
|
1347
1380
|
return this.appendErrorPlan(
|
@@ -1646,7 +1679,7 @@ var import_js_yaml3 = __toESM(require("js-yaml"));
|
|
1646
1679
|
var import_semver = __toESM(require("semver"));
|
1647
1680
|
|
1648
1681
|
// package.json
|
1649
|
-
var version = "1.0.
|
1682
|
+
var version = "1.0.4";
|
1650
1683
|
|
1651
1684
|
// src/common/task-cache.ts
|
1652
1685
|
var debug3 = (0, import_logger3.getDebug)("cache");
|
@@ -1989,9 +2022,9 @@ var PageAgent = class {
|
|
1989
2022
|
buildDetailedLocateParam(locatePrompt, opt) {
|
1990
2023
|
(0, import_utils12.assert)(locatePrompt, "missing locate prompt");
|
1991
2024
|
if (typeof opt === "object") {
|
1992
|
-
const prompt = opt.prompt
|
1993
|
-
const deepThink = opt.deepThink
|
1994
|
-
const cacheable = opt.cacheable
|
2025
|
+
const prompt = opt.prompt ?? locatePrompt;
|
2026
|
+
const deepThink = opt.deepThink ?? false;
|
2027
|
+
const cacheable = opt.cacheable ?? true;
|
1995
2028
|
return {
|
1996
2029
|
prompt,
|
1997
2030
|
deepThink,
|
@@ -2010,7 +2043,8 @@ var PageAgent = class {
|
|
2010
2043
|
const plans = buildPlans("Tap", detailedLocateParam);
|
2011
2044
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2012
2045
|
taskTitleStr("Tap", locateParamStr(detailedLocateParam)),
|
2013
|
-
plans
|
2046
|
+
plans,
|
2047
|
+
{ cacheable: opt?.cacheable }
|
2014
2048
|
);
|
2015
2049
|
const metadata = this.afterTaskRunning(executor);
|
2016
2050
|
return {
|
@@ -2026,7 +2060,8 @@ var PageAgent = class {
|
|
2026
2060
|
const plans = buildPlans("Hover", detailedLocateParam);
|
2027
2061
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2028
2062
|
taskTitleStr("Hover", locateParamStr(detailedLocateParam)),
|
2029
|
-
plans
|
2063
|
+
plans,
|
2064
|
+
{ cacheable: opt?.cacheable }
|
2030
2065
|
);
|
2031
2066
|
const metadata = this.afterTaskRunning(executor);
|
2032
2067
|
return {
|
@@ -2049,7 +2084,8 @@ var PageAgent = class {
|
|
2049
2084
|
});
|
2050
2085
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2051
2086
|
taskTitleStr("Input", locateParamStr(detailedLocateParam)),
|
2052
|
-
plans
|
2087
|
+
plans,
|
2088
|
+
{ cacheable: opt?.cacheable }
|
2053
2089
|
);
|
2054
2090
|
const metadata = this.afterTaskRunning(executor);
|
2055
2091
|
return {
|
@@ -2065,7 +2101,8 @@ var PageAgent = class {
|
|
2065
2101
|
});
|
2066
2102
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2067
2103
|
taskTitleStr("KeyboardPress", locateParamStr(detailedLocateParam)),
|
2068
|
-
plans
|
2104
|
+
plans,
|
2105
|
+
{ cacheable: opt?.cacheable }
|
2069
2106
|
);
|
2070
2107
|
const metadata = this.afterTaskRunning(executor);
|
2071
2108
|
return {
|
@@ -2079,7 +2116,8 @@ var PageAgent = class {
|
|
2079
2116
|
const paramInTitle = locatePrompt ? `${locateParamStr(detailedLocateParam)} - ${scrollParamStr(scrollParam)}` : scrollParamStr(scrollParam);
|
2080
2117
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2081
2118
|
taskTitleStr("Scroll", paramInTitle),
|
2082
|
-
plans
|
2119
|
+
plans,
|
2120
|
+
{ cacheable: opt?.cacheable }
|
2083
2121
|
);
|
2084
2122
|
const metadata = this.afterTaskRunning(executor);
|
2085
2123
|
return {
|
@@ -2088,6 +2126,19 @@ var PageAgent = class {
|
|
2088
2126
|
};
|
2089
2127
|
}
|
2090
2128
|
async aiAction(taskPrompt, opt) {
|
2129
|
+
try {
|
2130
|
+
const aiModel = await import("misoai-core/ai-model");
|
2131
|
+
const contextStore = aiModel.getContextStore();
|
2132
|
+
const processedPrompt = contextStore.replaceAllReferences(taskPrompt, "action");
|
2133
|
+
contextStore.addStep({
|
2134
|
+
type: "action",
|
2135
|
+
summary: `Action: ${processedPrompt}`,
|
2136
|
+
prompt: processedPrompt
|
2137
|
+
});
|
2138
|
+
taskPrompt = processedPrompt;
|
2139
|
+
} catch (error) {
|
2140
|
+
debug4("Context store not available:", error);
|
2141
|
+
}
|
2091
2142
|
const cacheable = opt?.cacheable;
|
2092
2143
|
const isVlmUiTars = (0, import_env2.vlLocateMode)() === "vlm-ui-tars";
|
2093
2144
|
const matchedCache = isVlmUiTars || cacheable === false ? void 0 : this.taskCache?.matchPlanCache(taskPrompt);
|
@@ -2105,7 +2156,9 @@ var PageAgent = class {
|
|
2105
2156
|
metadata: metadata2
|
2106
2157
|
};
|
2107
2158
|
}
|
2108
|
-
const { output, executor } = await (isVlmUiTars ? this.taskExecutor.actionToGoal(taskPrompt) : this.taskExecutor.action(taskPrompt, this.opts.aiActionContext
|
2159
|
+
const { output, executor } = await (isVlmUiTars ? this.taskExecutor.actionToGoal(taskPrompt, { cacheable }) : this.taskExecutor.action(taskPrompt, this.opts.aiActionContext, {
|
2160
|
+
cacheable
|
2161
|
+
}));
|
2109
2162
|
if (this.taskCache && output?.yamlFlow && cacheable !== false) {
|
2110
2163
|
const yamlContent = {
|
2111
2164
|
tasks: [
|
@@ -2132,7 +2185,63 @@ var PageAgent = class {
|
|
2132
2185
|
};
|
2133
2186
|
}
|
2134
2187
|
async aiQuery(demand) {
|
2135
|
-
|
2188
|
+
let processedDemand = demand;
|
2189
|
+
let storageKey;
|
2190
|
+
try {
|
2191
|
+
const aiModel = await import("misoai-core/ai-model");
|
2192
|
+
const contextStore = aiModel.getContextStore();
|
2193
|
+
if (typeof demand === "string") {
|
2194
|
+
const storageInstruction = contextStore.parseStorageInstruction(demand);
|
2195
|
+
if (storageInstruction) {
|
2196
|
+
storageKey = storageInstruction.key;
|
2197
|
+
processedDemand = storageInstruction.cleanText;
|
2198
|
+
contextStore._pendingAliases = storageInstruction.aliases;
|
2199
|
+
} else {
|
2200
|
+
const storageMatch = demand.match(/store\s+(?:as\s+)?(\w+)/i);
|
2201
|
+
if (storageMatch) {
|
2202
|
+
storageKey = storageMatch[1];
|
2203
|
+
processedDemand = demand.replace(/,?\s*store\s+(?:as\s+)?\w+/i, "").trim();
|
2204
|
+
}
|
2205
|
+
}
|
2206
|
+
}
|
2207
|
+
} catch (error) {
|
2208
|
+
debug4("Context store not available:", error);
|
2209
|
+
}
|
2210
|
+
const { output, executor } = await this.taskExecutor.query(processedDemand);
|
2211
|
+
if (storageKey && output) {
|
2212
|
+
try {
|
2213
|
+
const aiModel = await import("misoai-core/ai-model");
|
2214
|
+
const contextStore = aiModel.getContextStore();
|
2215
|
+
const pendingAliases = contextStore._pendingAliases;
|
2216
|
+
if (pendingAliases) {
|
2217
|
+
contextStore.storeDataWithAliases(storageKey, output, pendingAliases, typeof processedDemand === "string" ? processedDemand : JSON.stringify(processedDemand));
|
2218
|
+
delete contextStore._pendingAliases;
|
2219
|
+
} else {
|
2220
|
+
contextStore.storeData(storageKey, output);
|
2221
|
+
}
|
2222
|
+
contextStore.addStep({
|
2223
|
+
type: "query",
|
2224
|
+
summary: `Query: ${typeof processedDemand === "string" ? processedDemand : JSON.stringify(processedDemand)} (stored as ${storageKey})`,
|
2225
|
+
data: output,
|
2226
|
+
prompt: typeof processedDemand === "string" ? processedDemand : JSON.stringify(processedDemand)
|
2227
|
+
});
|
2228
|
+
} catch (error) {
|
2229
|
+
debug4("Failed to store query result:", error);
|
2230
|
+
}
|
2231
|
+
} else {
|
2232
|
+
try {
|
2233
|
+
const aiModel = await import("misoai-core/ai-model");
|
2234
|
+
const contextStore = aiModel.getContextStore();
|
2235
|
+
contextStore.addStep({
|
2236
|
+
type: "query",
|
2237
|
+
summary: `Query: ${typeof processedDemand === "string" ? processedDemand : JSON.stringify(processedDemand)}`,
|
2238
|
+
data: output,
|
2239
|
+
prompt: typeof processedDemand === "string" ? processedDemand : JSON.stringify(processedDemand)
|
2240
|
+
});
|
2241
|
+
} catch (error) {
|
2242
|
+
debug4("Failed to add query step:", error);
|
2243
|
+
}
|
2244
|
+
}
|
2136
2245
|
const metadata = this.afterTaskRunning(executor);
|
2137
2246
|
return {
|
2138
2247
|
result: output,
|
@@ -2227,7 +2336,8 @@ var PageAgent = class {
|
|
2227
2336
|
const plans = buildPlans("Locate", detailedLocateParam);
|
2228
2337
|
const { executor, output } = await this.taskExecutor.runPlans(
|
2229
2338
|
taskTitleStr("Locate", locateParamStr(detailedLocateParam)),
|
2230
|
-
plans
|
2339
|
+
plans,
|
2340
|
+
{ cacheable: opt?.cacheable }
|
2231
2341
|
);
|
2232
2342
|
const metadata = this.afterTaskRunning(executor);
|
2233
2343
|
const { element } = output;
|
@@ -2241,6 +2351,19 @@ var PageAgent = class {
|
|
2241
2351
|
};
|
2242
2352
|
}
|
2243
2353
|
async aiAssert(assertion, msg, opt) {
|
2354
|
+
let processedAssertion = assertion;
|
2355
|
+
try {
|
2356
|
+
const aiModel = await import("misoai-core/ai-model");
|
2357
|
+
const contextStore = aiModel.getContextStore();
|
2358
|
+
processedAssertion = contextStore.replaceAllReferences(assertion, "assertion");
|
2359
|
+
contextStore.addStep({
|
2360
|
+
type: "assertion",
|
2361
|
+
summary: `Assertion: ${processedAssertion}`,
|
2362
|
+
prompt: processedAssertion
|
2363
|
+
});
|
2364
|
+
} catch (error) {
|
2365
|
+
debug4("Context store not available:", error);
|
2366
|
+
}
|
2244
2367
|
let currentUrl = "";
|
2245
2368
|
if (this.page.url) {
|
2246
2369
|
try {
|
@@ -2248,7 +2371,7 @@ var PageAgent = class {
|
|
2248
2371
|
} catch (e) {
|
2249
2372
|
}
|
2250
2373
|
}
|
2251
|
-
const assertionWithContext = currentUrl ? `For the page at URL "${currentUrl}", ${
|
2374
|
+
const assertionWithContext = currentUrl ? `For the page at URL "${currentUrl}", ${processedAssertion}` : processedAssertion;
|
2252
2375
|
const { output, executor } = await this.taskExecutor.assert(assertionWithContext);
|
2253
2376
|
const metadata = this.afterTaskRunning(executor, true);
|
2254
2377
|
if (output && opt?.keepRawResponse) {
|
@@ -2574,7 +2697,7 @@ var BridgeServer = class {
|
|
2574
2697
|
this.socket = socket;
|
2575
2698
|
const clientVersion = socket.handshake.query.version;
|
2576
2699
|
(0, import_utils16.logMsg)(
|
2577
|
-
`Bridge connected, cli-side version v${"1.0.
|
2700
|
+
`Bridge connected, cli-side version v${"1.0.4"}, browser-side version v${clientVersion}`
|
2578
2701
|
);
|
2579
2702
|
socket.on("bridge-call-response" /* CallResponse */, (params) => {
|
2580
2703
|
const id = params.id;
|
@@ -2605,7 +2728,7 @@ var BridgeServer = class {
|
|
2605
2728
|
setTimeout(() => {
|
2606
2729
|
this.onConnect?.();
|
2607
2730
|
const payload = {
|
2608
|
-
version: "1.0.
|
2731
|
+
version: "1.0.4"
|
2609
2732
|
};
|
2610
2733
|
socket.emit("bridge-connected" /* Connected */, payload);
|
2611
2734
|
Promise.resolve().then(() => {
|