misoai-web 1.5.9 → 1.6.1
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/es/agent.js +158 -54
- package/dist/es/agent.js.map +1 -1
- package/dist/es/bridge-mode-browser.js +3 -3
- package/dist/es/bridge-mode-browser.js.map +1 -1
- package/dist/es/bridge-mode.js +160 -56
- package/dist/es/bridge-mode.js.map +1 -1
- package/dist/es/chrome-extension.js +159 -55
- package/dist/es/chrome-extension.js.map +1 -1
- package/dist/es/index.js +159 -55
- package/dist/es/index.js.map +1 -1
- package/dist/es/midscene-playground.js +161 -57
- package/dist/es/midscene-playground.js.map +1 -1
- package/dist/es/midscene-server.js +4 -4
- package/dist/es/midscene-server.js.map +1 -1
- package/dist/es/playground.js +158 -54
- package/dist/es/playground.js.map +1 -1
- package/dist/es/playwright-report.js +1 -1
- package/dist/es/playwright-report.js.map +1 -1
- package/dist/es/playwright.js +159 -55
- package/dist/es/playwright.js.map +1 -1
- package/dist/es/puppeteer-agent-launcher.js +158 -54
- package/dist/es/puppeteer-agent-launcher.js.map +1 -1
- package/dist/es/puppeteer.js +158 -54
- package/dist/es/puppeteer.js.map +1 -1
- package/dist/es/utils.js +1 -1
- package/dist/es/utils.js.map +1 -1
- package/dist/es/yaml.js +1 -1
- package/dist/es/yaml.js.map +1 -1
- package/dist/lib/agent.js +158 -54
- package/dist/lib/agent.js.map +1 -1
- package/dist/lib/bridge-mode-browser.js +3 -3
- package/dist/lib/bridge-mode-browser.js.map +1 -1
- package/dist/lib/bridge-mode.js +160 -56
- package/dist/lib/bridge-mode.js.map +1 -1
- package/dist/lib/chrome-extension.js +159 -55
- package/dist/lib/chrome-extension.js.map +1 -1
- package/dist/lib/index.js +159 -55
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/midscene-playground.js +161 -57
- package/dist/lib/midscene-playground.js.map +1 -1
- package/dist/lib/midscene-server.js +4 -4
- package/dist/lib/midscene-server.js.map +1 -1
- package/dist/lib/playground.js +158 -54
- package/dist/lib/playground.js.map +1 -1
- package/dist/lib/playwright-report.js +1 -1
- package/dist/lib/playwright-report.js.map +1 -1
- package/dist/lib/playwright.js +159 -55
- package/dist/lib/playwright.js.map +1 -1
- package/dist/lib/puppeteer-agent-launcher.js +158 -54
- package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
- package/dist/lib/puppeteer.js +158 -54
- package/dist/lib/puppeteer.js.map +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/yaml.js +1 -1
- package/dist/lib/yaml.js.map +1 -1
- package/dist/types/agent.d.ts +8 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/playwright.d.ts +1 -1
- package/package.json +18 -54
@@ -60,13 +60,13 @@ __export(chrome_extension_exports, {
|
|
60
60
|
module.exports = __toCommonJS(chrome_extension_exports);
|
61
61
|
|
62
62
|
// src/common/utils.ts
|
63
|
+
var import_dayjs = __toESM(require("dayjs"));
|
63
64
|
var import_ai_model = require("misoai-core/ai-model");
|
64
65
|
var import_utils = require("misoai-core/utils");
|
65
66
|
var import_env = require("misoai-shared/env");
|
66
67
|
var import_extractor = require("misoai-shared/extractor");
|
67
68
|
var import_img = require("misoai-shared/img");
|
68
69
|
var import_utils2 = require("misoai-shared/utils");
|
69
|
-
var import_dayjs = __toESM(require("dayjs"));
|
70
70
|
|
71
71
|
// src/web-element.ts
|
72
72
|
var WebElementInfo = class {
|
@@ -485,8 +485,8 @@ var ScriptPlayer = class {
|
|
485
485
|
var import_js_yaml = __toESM(require("js-yaml"));
|
486
486
|
|
487
487
|
// src/yaml/utils.ts
|
488
|
-
var import_utils4 = require("misoai-shared/utils");
|
489
488
|
var import_js_yaml2 = __toESM(require("js-yaml"));
|
489
|
+
var import_utils4 = require("misoai-shared/utils");
|
490
490
|
function interpolateEnvVars(content) {
|
491
491
|
return content.replace(/\$\{([^}]+)\}/g, (_, envVar) => {
|
492
492
|
const value = process.env[envVar.trim()];
|
@@ -685,8 +685,12 @@ var WorkflowMemory = class {
|
|
685
685
|
const workflow = this.workflows.get(workflowId) || this.createEmptyWorkflowData(workflowId);
|
686
686
|
workflow.memory = [...memory];
|
687
687
|
workflow.metadata.totalSteps = workflow.steps.length;
|
688
|
-
workflow.metadata.completedSteps = workflow.steps.filter(
|
689
|
-
|
688
|
+
workflow.metadata.completedSteps = workflow.steps.filter(
|
689
|
+
(s) => s.status === "completed"
|
690
|
+
).length;
|
691
|
+
workflow.metadata.failedSteps = workflow.steps.filter(
|
692
|
+
(s) => s.status === "failed"
|
693
|
+
).length;
|
690
694
|
this.workflows.set(workflowId, workflow);
|
691
695
|
this.enforceRetentionPolicy();
|
692
696
|
}
|
@@ -697,7 +701,9 @@ var WorkflowMemory = class {
|
|
697
701
|
const workflow = this.workflows.get(workflowId) || this.createEmptyWorkflowData(workflowId);
|
698
702
|
workflow.context = { ...workflow.context, ...context };
|
699
703
|
if (context.currentStep) {
|
700
|
-
const existingStep = workflow.steps.find(
|
704
|
+
const existingStep = workflow.steps.find(
|
705
|
+
(s) => s.stepName === context.currentStep
|
706
|
+
);
|
701
707
|
if (!existingStep) {
|
702
708
|
workflow.steps.push({
|
703
709
|
stepId: `step_${workflow.steps.length + 1}`,
|
@@ -742,7 +748,9 @@ var WorkflowMemory = class {
|
|
742
748
|
enforceRetentionPolicy() {
|
743
749
|
const maxWorkflows = 10;
|
744
750
|
if (this.workflows.size > maxWorkflows) {
|
745
|
-
const sortedWorkflows = Array.from(this.workflows.entries()).sort(
|
751
|
+
const sortedWorkflows = Array.from(this.workflows.entries()).sort(
|
752
|
+
([, a], [, b]) => (b.metadata.endTime || b.metadata.startTime) - (a.metadata.endTime || a.metadata.startTime)
|
753
|
+
);
|
746
754
|
const toDelete = sortedWorkflows.slice(maxWorkflows);
|
747
755
|
toDelete.forEach(([workflowId]) => this.workflows.delete(workflowId));
|
748
756
|
}
|
@@ -1481,7 +1489,9 @@ var PageTaskExecutor = class {
|
|
1481
1489
|
*/
|
1482
1490
|
getPersistentExecutor() {
|
1483
1491
|
if (!this.persistentExecutor || this.persistentExecutor.status === "error") {
|
1484
|
-
const previousMemory = this.workflowMemory.getWorkflowMemory(
|
1492
|
+
const previousMemory = this.workflowMemory.getWorkflowMemory(
|
1493
|
+
this.sessionContext.workflowId
|
1494
|
+
);
|
1485
1495
|
this.persistentExecutor = new import_misoai_core.Executor("Persistent Task Executor", {
|
1486
1496
|
onTaskStart: this.onTaskStartCallback,
|
1487
1497
|
initialMemory: previousMemory
|
@@ -1510,7 +1520,9 @@ var PageTaskExecutor = class {
|
|
1510
1520
|
if (this.persistentExecutor) {
|
1511
1521
|
this.persistentExecutor.clearMemory();
|
1512
1522
|
}
|
1513
|
-
this.workflowMemory.clearWorkflow(
|
1523
|
+
this.workflowMemory.clearWorkflow(
|
1524
|
+
this.sessionContext.workflowId || "default"
|
1525
|
+
);
|
1514
1526
|
}
|
1515
1527
|
/**
|
1516
1528
|
* Mevcut hafızayı döndürür
|
@@ -1522,7 +1534,9 @@ var PageTaskExecutor = class {
|
|
1522
1534
|
* İş akışı hafızasını döndürür
|
1523
1535
|
*/
|
1524
1536
|
getWorkflowMemory() {
|
1525
|
-
return this.workflowMemory.getWorkflowData(
|
1537
|
+
return this.workflowMemory.getWorkflowData(
|
1538
|
+
this.sessionContext.workflowId || "default"
|
1539
|
+
);
|
1526
1540
|
}
|
1527
1541
|
/**
|
1528
1542
|
* Hafıza istatistiklerini döndürür
|
@@ -1530,7 +1544,13 @@ var PageTaskExecutor = class {
|
|
1530
1544
|
getMemoryStats() {
|
1531
1545
|
return this.persistentExecutor?.getMemoryStats() || {
|
1532
1546
|
totalItems: 0,
|
1533
|
-
analytics: {
|
1547
|
+
analytics: {
|
1548
|
+
totalTasks: 0,
|
1549
|
+
memoryHits: 0,
|
1550
|
+
memoryMisses: 0,
|
1551
|
+
averageMemorySize: 0,
|
1552
|
+
memoryEffectiveness: 0
|
1553
|
+
},
|
1534
1554
|
config: this.memoryConfig
|
1535
1555
|
};
|
1536
1556
|
}
|
@@ -1566,11 +1586,14 @@ var PageTaskExecutor = class {
|
|
1566
1586
|
let taskExecutor;
|
1567
1587
|
if (useMemory) {
|
1568
1588
|
taskExecutor = this.getPersistentExecutor();
|
1569
|
-
this.workflowMemory.updateWorkflowContext(
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1589
|
+
this.workflowMemory.updateWorkflowContext(
|
1590
|
+
{
|
1591
|
+
currentStep: title,
|
1592
|
+
pageInfo: this.sessionContext.pageInfo,
|
1593
|
+
timestamp: Date.now()
|
1594
|
+
},
|
1595
|
+
this.sessionContext.workflowId || "default"
|
1596
|
+
);
|
1574
1597
|
} else {
|
1575
1598
|
taskExecutor = new import_misoai_core.Executor(title, {
|
1576
1599
|
onTaskStart: this.onTaskStartCallback
|
@@ -1868,9 +1891,15 @@ var PageTaskExecutor = class {
|
|
1868
1891
|
}
|
1869
1892
|
async waitFor(assertion, opt) {
|
1870
1893
|
const description = `waitFor: ${assertion}`;
|
1871
|
-
const
|
1872
|
-
|
1873
|
-
|
1894
|
+
const useMemory = true;
|
1895
|
+
let taskExecutor;
|
1896
|
+
if (useMemory) {
|
1897
|
+
taskExecutor = this.getPersistentExecutor();
|
1898
|
+
} else {
|
1899
|
+
taskExecutor = new import_misoai_core.Executor(taskTitleStr("WaitFor", description), {
|
1900
|
+
onTaskStart: this.onTaskStartCallback
|
1901
|
+
});
|
1902
|
+
}
|
1874
1903
|
const { timeoutMs, checkIntervalMs } = opt;
|
1875
1904
|
(0, import_utils6.assert)(assertion, "No assertion for waitFor");
|
1876
1905
|
(0, import_utils6.assert)(timeoutMs, "No timeoutMs for waitFor");
|
@@ -1925,6 +1954,25 @@ var PageTaskExecutor = class {
|
|
1925
1954
|
`waitFor timeout: ${errorThought}`
|
1926
1955
|
);
|
1927
1956
|
}
|
1957
|
+
/**
|
1958
|
+
* Hafızaya yeni bir öğe ekler
|
1959
|
+
*/
|
1960
|
+
addToMemory(memoryItem) {
|
1961
|
+
if (!this.persistentExecutor || this.persistentExecutor.status === "error") {
|
1962
|
+
const previousMemory = this.workflowMemory.getWorkflowMemory(
|
1963
|
+
this.sessionContext.workflowId
|
1964
|
+
);
|
1965
|
+
this.persistentExecutor = new import_misoai_core.Executor("Persistent Task Executor", {
|
1966
|
+
onTaskStart: this.onTaskStartCallback,
|
1967
|
+
initialMemory: previousMemory
|
1968
|
+
});
|
1969
|
+
}
|
1970
|
+
this.persistentExecutor.memoryStore?.add(memoryItem);
|
1971
|
+
this.persistentExecutor.memoryAnalytics?.recordMemoryOperation(
|
1972
|
+
"add",
|
1973
|
+
memoryItem
|
1974
|
+
);
|
1975
|
+
}
|
1928
1976
|
};
|
1929
1977
|
|
1930
1978
|
// src/common/plan-builder.ts
|
@@ -2012,14 +2060,14 @@ function buildPlans(type, locateParam, param) {
|
|
2012
2060
|
var import_node_assert = __toESM(require("assert"));
|
2013
2061
|
var import_node_fs2 = require("fs");
|
2014
2062
|
var import_node_path2 = require("path");
|
2063
|
+
var import_js_yaml3 = __toESM(require("js-yaml"));
|
2015
2064
|
var import_common2 = require("misoai-shared/common");
|
2016
2065
|
var import_logger3 = require("misoai-shared/logger");
|
2017
2066
|
var import_utils9 = require("misoai-shared/utils");
|
2018
|
-
var import_js_yaml3 = __toESM(require("js-yaml"));
|
2019
2067
|
var import_semver = __toESM(require("semver"));
|
2020
2068
|
|
2021
2069
|
// package.json
|
2022
|
-
var version = "1.
|
2070
|
+
var version = "1.6.1";
|
2023
2071
|
|
2024
2072
|
// src/common/task-cache.ts
|
2025
2073
|
var debug3 = (0, import_logger3.getDebug)("cache");
|
@@ -2230,7 +2278,10 @@ var PageAgent = class {
|
|
2230
2278
|
}
|
2231
2279
|
this.taskExecutor = new PageTaskExecutor(this.page, this.insight, {
|
2232
2280
|
taskCache: this.taskCache,
|
2233
|
-
onTaskStart: this.callbackOnTaskStartTip.bind(this)
|
2281
|
+
onTaskStart: this.callbackOnTaskStartTip.bind(this),
|
2282
|
+
memoryConfig: opts?.memoryConfig,
|
2283
|
+
sessionId: opts?.sessionId,
|
2284
|
+
workflowId: opts?.workflowId
|
2234
2285
|
});
|
2235
2286
|
this.dump = this.resetDump();
|
2236
2287
|
this.reportFileName = reportFileName(
|
@@ -2311,22 +2362,28 @@ var PageAgent = class {
|
|
2311
2362
|
const allThoughts = executor.tasks.filter((task) => task.thought).map((task) => task.thought);
|
2312
2363
|
const allLocates = executor.tasks.filter((task) => task.locate).map((task) => task.locate);
|
2313
2364
|
const allPlans = executor.tasks.filter((task) => task.param?.plans).map((task) => task.param?.plans);
|
2314
|
-
const planningTasks = executor.tasks.filter(
|
2315
|
-
|
2365
|
+
const planningTasks = executor.tasks.filter(
|
2366
|
+
(task) => task.type === "Planning"
|
2367
|
+
);
|
2368
|
+
const insightTasks = executor.tasks.filter(
|
2369
|
+
(task) => task.type === "Insight"
|
2370
|
+
);
|
2316
2371
|
const actionTasks = executor.tasks.filter((task) => task.type === "Action");
|
2317
2372
|
const planning = planningTasks.length > 0 ? {
|
2318
2373
|
type: "Planning",
|
2319
|
-
description:
|
2374
|
+
description: "Planning for task execution",
|
2320
2375
|
steps: planningTasks.map((task) => task.thought || "Planning step")
|
2321
2376
|
} : void 0;
|
2322
2377
|
const insight = insightTasks.length > 0 ? {
|
2323
2378
|
type: "Insight",
|
2324
|
-
description:
|
2325
|
-
elements: insightTasks.map(
|
2379
|
+
description: "Insight for task execution",
|
2380
|
+
elements: insightTasks.map(
|
2381
|
+
(task) => task.thought || "Insight element"
|
2382
|
+
)
|
2326
2383
|
} : void 0;
|
2327
2384
|
const action = actionTasks.length > 0 ? {
|
2328
2385
|
type: "Action",
|
2329
|
-
description:
|
2386
|
+
description: "Action for task execution",
|
2330
2387
|
result: lastTask?.output
|
2331
2388
|
} : void 0;
|
2332
2389
|
const actionDetails = executor.tasks.map((task) => ({
|
@@ -2660,7 +2717,10 @@ ${memoryContext}` : void 0;
|
|
2660
2717
|
}
|
2661
2718
|
const memoryContext = this.getMemoryAsContext();
|
2662
2719
|
const assertionWithContext = currentUrl ? `For the page at URL "${currentUrl}", ${assertion}` : assertion;
|
2663
|
-
const { output, executor } = await this.taskExecutor.assert(
|
2720
|
+
const { output, executor } = await this.taskExecutor.assert(
|
2721
|
+
assertionWithContext,
|
2722
|
+
memoryContext
|
2723
|
+
);
|
2664
2724
|
const metadata = this.afterTaskRunning(executor, true);
|
2665
2725
|
if (output && opt?.keepRawResponse) {
|
2666
2726
|
return {
|
@@ -2681,6 +2741,7 @@ ${reasonMsg}`);
|
|
2681
2741
|
}
|
2682
2742
|
async aiCaptcha(options) {
|
2683
2743
|
const { deepThink = false, autoDetectComplexity = true } = options || {};
|
2744
|
+
const memoryContext = this.getMemoryAsContext();
|
2684
2745
|
let shouldUseDeepThink = deepThink;
|
2685
2746
|
if (autoDetectComplexity && !deepThink) {
|
2686
2747
|
const context = await this.getUIContext();
|
@@ -2698,7 +2759,10 @@ A complex CAPTCHA typically has one or more of these characteristics:
|
|
2698
2759
|
Return only "complex" or "simple" based on your analysis.
|
2699
2760
|
`;
|
2700
2761
|
const complexityMsgs = [
|
2701
|
-
{
|
2762
|
+
{
|
2763
|
+
role: "system",
|
2764
|
+
content: "You are an AI assistant that analyzes screenshots to determine CAPTCHA complexity."
|
2765
|
+
},
|
2702
2766
|
{
|
2703
2767
|
role: "user",
|
2704
2768
|
content: [
|
@@ -2722,7 +2786,12 @@ Return only "complex" or "simple" based on your analysis.
|
|
2722
2786
|
);
|
2723
2787
|
const responseText = typeof complexityResult.content === "string" ? complexityResult.content.toLowerCase() : JSON.stringify(complexityResult.content).toLowerCase();
|
2724
2788
|
shouldUseDeepThink = responseText.includes("complex");
|
2725
|
-
debug4(
|
2789
|
+
debug4(
|
2790
|
+
"CAPTCHA complexity analysis:",
|
2791
|
+
responseText,
|
2792
|
+
"Using deep think:",
|
2793
|
+
shouldUseDeepThink
|
2794
|
+
);
|
2726
2795
|
} catch (error) {
|
2727
2796
|
debug4("Failed to analyze CAPTCHA complexity:", error);
|
2728
2797
|
}
|
@@ -2739,7 +2808,9 @@ Return only "complex" or "simple" based on your analysis.
|
|
2739
2808
|
await this.aiTap(action.target, { deepThink: shouldUseDeepThink });
|
2740
2809
|
} else if (action.type === "input" && action.value) {
|
2741
2810
|
if (action.target) {
|
2742
|
-
await this.aiInput(action.value, action.target, {
|
2811
|
+
await this.aiInput(action.value, action.target, {
|
2812
|
+
deepThink: shouldUseDeepThink
|
2813
|
+
});
|
2743
2814
|
}
|
2744
2815
|
} else if (action.type === "verify" && action.target) {
|
2745
2816
|
await this.aiTap(action.target, { deepThink: shouldUseDeepThink });
|
@@ -2751,7 +2822,9 @@ Return only "complex" or "simple" based on your analysis.
|
|
2751
2822
|
if (action.coordinates) {
|
2752
2823
|
const x = action.coordinates[0];
|
2753
2824
|
const y = action.coordinates[1];
|
2754
|
-
await this.aiTap(`element at coordinates (${x}, ${y})`, {
|
2825
|
+
await this.aiTap(`element at coordinates (${x}, ${y})`, {
|
2826
|
+
deepThink: shouldUseDeepThink
|
2827
|
+
});
|
2755
2828
|
} else if (action.target) {
|
2756
2829
|
await this.aiTap(action.target, { deepThink: shouldUseDeepThink });
|
2757
2830
|
}
|
@@ -2761,6 +2834,26 @@ Return only "complex" or "simple" based on your analysis.
|
|
2761
2834
|
}
|
2762
2835
|
}
|
2763
2836
|
await new Promise((resolve2) => setTimeout(resolve2, 3e3));
|
2837
|
+
const captchaMemoryItem = {
|
2838
|
+
id: `captcha_${Date.now()}`,
|
2839
|
+
timestamp: Date.now(),
|
2840
|
+
taskType: "Action",
|
2841
|
+
summary: `Solved ${captchaResult.captchaType} CAPTCHA: ${captchaResult.thought}`,
|
2842
|
+
context: {
|
2843
|
+
url: await this.page.url?.() || "",
|
2844
|
+
captchaType: captchaResult.captchaType,
|
2845
|
+
actions: captchaResult.actions,
|
2846
|
+
deepThink: actualDeepThink
|
2847
|
+
},
|
2848
|
+
metadata: {
|
2849
|
+
executionTime: Date.now() - Date.now(),
|
2850
|
+
// Will be updated
|
2851
|
+
success: true,
|
2852
|
+
confidence: 0.9
|
2853
|
+
},
|
2854
|
+
tags: ["captcha", "action", captchaResult.captchaType]
|
2855
|
+
};
|
2856
|
+
this.taskExecutor.addToMemory(captchaMemoryItem);
|
2764
2857
|
const metadata = {
|
2765
2858
|
status: "finished",
|
2766
2859
|
usage,
|
@@ -2777,10 +2870,15 @@ Return only "complex" or "simple" based on your analysis.
|
|
2777
2870
|
}
|
2778
2871
|
async aiWaitFor(assertion, opt) {
|
2779
2872
|
const startTime = Date.now();
|
2780
|
-
const
|
2873
|
+
const memoryContext = this.getMemoryAsContext();
|
2874
|
+
const assertionWithContext = memoryContext ? `${assertion}
|
2875
|
+
|
2876
|
+
Previous workflow steps:
|
2877
|
+
${memoryContext}` : assertion;
|
2878
|
+
const { executor } = await this.taskExecutor.waitFor(assertionWithContext, {
|
2781
2879
|
timeoutMs: opt?.timeoutMs || 15 * 1e3,
|
2782
2880
|
checkIntervalMs: opt?.checkIntervalMs || 3 * 1e3,
|
2783
|
-
assertion
|
2881
|
+
assertion: assertionWithContext
|
2784
2882
|
});
|
2785
2883
|
const metadata = {
|
2786
2884
|
status: executor.isInErrorState() ? "failed" : "finished",
|
@@ -2878,25 +2976,27 @@ ${errors}`);
|
|
2878
2976
|
const executionDump = {
|
2879
2977
|
name: screenshotTitle,
|
2880
2978
|
description: content,
|
2881
|
-
tasks: [
|
2882
|
-
|
2883
|
-
|
2884
|
-
|
2885
|
-
|
2886
|
-
|
2887
|
-
|
2888
|
-
|
2889
|
-
|
2890
|
-
|
2891
|
-
|
2892
|
-
|
2893
|
-
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2979
|
+
tasks: [
|
2980
|
+
{
|
2981
|
+
type: "Screenshot",
|
2982
|
+
subType: "log",
|
2983
|
+
status: "finished",
|
2984
|
+
executor: null,
|
2985
|
+
param: {
|
2986
|
+
title: screenshotTitle,
|
2987
|
+
content
|
2988
|
+
},
|
2989
|
+
output: {
|
2990
|
+
screenshot
|
2991
|
+
},
|
2992
|
+
thought: `Logged screenshot: ${screenshotTitle}`,
|
2993
|
+
timing: {
|
2994
|
+
start: Date.now(),
|
2995
|
+
end: Date.now(),
|
2996
|
+
cost: 0
|
2997
|
+
}
|
2898
2998
|
}
|
2899
|
-
|
2999
|
+
],
|
2900
3000
|
sdkVersion: "1.0.0",
|
2901
3001
|
logTime: Date.now(),
|
2902
3002
|
model_name: "screenshot"
|
@@ -2948,7 +3048,9 @@ ${errors}`);
|
|
2948
3048
|
totalTasks: stats.analytics.totalTasks,
|
2949
3049
|
memoryHits: stats.analytics.memoryHits,
|
2950
3050
|
memoryMisses: stats.analytics.memoryMisses,
|
2951
|
-
memoryEffectiveness: Math.round(
|
3051
|
+
memoryEffectiveness: Math.round(
|
3052
|
+
stats.analytics.memoryEffectiveness * 100
|
3053
|
+
),
|
2952
3054
|
averageMemorySize: Math.round(stats.analytics.averageMemorySize * 100) / 100
|
2953
3055
|
},
|
2954
3056
|
config: stats.config,
|
@@ -3012,7 +3114,9 @@ ${errors}`);
|
|
3012
3114
|
calculateSuccessRate(memory) {
|
3013
3115
|
if (memory.length === 0)
|
3014
3116
|
return 0;
|
3015
|
-
const successCount = memory.filter(
|
3117
|
+
const successCount = memory.filter(
|
3118
|
+
(item) => item.metadata?.success !== false
|
3119
|
+
).length;
|
3016
3120
|
return Math.round(successCount / memory.length * 100);
|
3017
3121
|
}
|
3018
3122
|
calculateAverageExecutionTime(memory) {
|
@@ -3256,7 +3360,7 @@ function sleep2(ms) {
|
|
3256
3360
|
var ChromeExtensionProxyPage = class {
|
3257
3361
|
constructor(forceSameTabNavigation) {
|
3258
3362
|
this.pageType = "chrome-extension-proxy";
|
3259
|
-
this.version = "1.
|
3363
|
+
this.version = "1.6.1";
|
3260
3364
|
this.activeTabId = null;
|
3261
3365
|
this.tabIdOfDebuggerAttached = null;
|
3262
3366
|
this.attachingDebugger = null;
|