misoai-web 1.5.7 → 1.5.8

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.
Files changed (40) hide show
  1. package/dist/es/agent.js +307 -25
  2. package/dist/es/agent.js.map +1 -1
  3. package/dist/es/bridge-mode-browser.js +3 -3
  4. package/dist/es/bridge-mode.js +309 -27
  5. package/dist/es/bridge-mode.js.map +1 -1
  6. package/dist/es/chrome-extension.js +308 -26
  7. package/dist/es/chrome-extension.js.map +1 -1
  8. package/dist/es/index.js +307 -25
  9. package/dist/es/index.js.map +1 -1
  10. package/dist/es/midscene-playground.js +307 -25
  11. package/dist/es/midscene-playground.js.map +1 -1
  12. package/dist/es/playground.js +307 -25
  13. package/dist/es/playground.js.map +1 -1
  14. package/dist/es/playwright.js +307 -25
  15. package/dist/es/playwright.js.map +1 -1
  16. package/dist/es/puppeteer-agent-launcher.js +307 -25
  17. package/dist/es/puppeteer-agent-launcher.js.map +1 -1
  18. package/dist/es/puppeteer.js +307 -25
  19. package/dist/es/puppeteer.js.map +1 -1
  20. package/dist/lib/agent.js +307 -25
  21. package/dist/lib/agent.js.map +1 -1
  22. package/dist/lib/bridge-mode-browser.js +3 -3
  23. package/dist/lib/bridge-mode.js +309 -27
  24. package/dist/lib/bridge-mode.js.map +1 -1
  25. package/dist/lib/chrome-extension.js +308 -26
  26. package/dist/lib/chrome-extension.js.map +1 -1
  27. package/dist/lib/index.js +307 -25
  28. package/dist/lib/index.js.map +1 -1
  29. package/dist/lib/midscene-playground.js +307 -25
  30. package/dist/lib/midscene-playground.js.map +1 -1
  31. package/dist/lib/playground.js +307 -25
  32. package/dist/lib/playground.js.map +1 -1
  33. package/dist/lib/playwright.js +307 -25
  34. package/dist/lib/playwright.js.map +1 -1
  35. package/dist/lib/puppeteer-agent-launcher.js +307 -25
  36. package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
  37. package/dist/lib/puppeteer.js +307 -25
  38. package/dist/lib/puppeteer.js.map +1 -1
  39. package/dist/types/agent.d.ts +92 -2
  40. package/package.json +2 -2
@@ -291,7 +291,7 @@ function sleep(ms) {
291
291
  var ChromeExtensionProxyPage = class {
292
292
  constructor(forceSameTabNavigation) {
293
293
  this.pageType = "chrome-extension-proxy";
294
- this.version = "1.0.3";
294
+ this.version = "1.5.7";
295
295
  this.activeTabId = null;
296
296
  this.tabIdOfDebuggerAttached = null;
297
297
  this.attachingDebugger = null;
@@ -785,7 +785,7 @@ var BridgeClient = class {
785
785
  this.socket = (0, import_socket.io)(this.endpoint, {
786
786
  reconnection: false,
787
787
  query: {
788
- version: "1.0.3"
788
+ version: "1.5.7"
789
789
  }
790
790
  });
791
791
  const timeout = setTimeout(() => {
@@ -926,7 +926,7 @@ var ExtensionBridgePageBrowserSide = class extends ChromeExtensionProxyPage {
926
926
  );
927
927
  await this.bridgeClient.connect();
928
928
  this.onLogMessage(
929
- `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"1.0.3"}`,
929
+ `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"1.5.7"}`,
930
930
  "log"
931
931
  );
932
932
  }
@@ -614,6 +614,94 @@ var replanningCountLimit = 10;
614
614
  var isAndroidPage = (page) => {
615
615
  return page.pageType === "android";
616
616
  };
617
+ var WorkflowMemory = class {
618
+ constructor(config) {
619
+ this.workflows = /* @__PURE__ */ new Map();
620
+ this.config = config;
621
+ }
622
+ /**
623
+ * İş akışı hafızasını getirir
624
+ */
625
+ getWorkflowMemory(workflowId = "default") {
626
+ const workflow = this.workflows.get(workflowId);
627
+ return workflow?.memory || [];
628
+ }
629
+ /**
630
+ * İş akışı verilerini getirir
631
+ */
632
+ getWorkflowData(workflowId = "default") {
633
+ return this.workflows.get(workflowId) || this.createEmptyWorkflowData(workflowId);
634
+ }
635
+ /**
636
+ * İş akışı hafızasını kaydeder
637
+ */
638
+ saveWorkflowMemory(memory, workflowId = "default") {
639
+ const workflow = this.workflows.get(workflowId) || this.createEmptyWorkflowData(workflowId);
640
+ workflow.memory = [...memory];
641
+ workflow.metadata.totalSteps = workflow.steps.length;
642
+ workflow.metadata.completedSteps = workflow.steps.filter((s) => s.status === "completed").length;
643
+ workflow.metadata.failedSteps = workflow.steps.filter((s) => s.status === "failed").length;
644
+ this.workflows.set(workflowId, workflow);
645
+ this.enforceRetentionPolicy();
646
+ }
647
+ /**
648
+ * İş akışı bağlamını günceller
649
+ */
650
+ updateWorkflowContext(context, workflowId = "default") {
651
+ const workflow = this.workflows.get(workflowId) || this.createEmptyWorkflowData(workflowId);
652
+ workflow.context = { ...workflow.context, ...context };
653
+ if (context.currentStep) {
654
+ const existingStep = workflow.steps.find((s) => s.stepName === context.currentStep);
655
+ if (!existingStep) {
656
+ workflow.steps.push({
657
+ stepId: `step_${workflow.steps.length + 1}`,
658
+ stepName: context.currentStep,
659
+ timestamp: context.timestamp,
660
+ status: "running",
661
+ memoryItems: []
662
+ });
663
+ }
664
+ }
665
+ this.workflows.set(workflowId, workflow);
666
+ }
667
+ /**
668
+ * İş akışını temizler
669
+ */
670
+ clearWorkflow(workflowId = "default") {
671
+ this.workflows.delete(workflowId);
672
+ }
673
+ /**
674
+ * Tüm iş akışlarını temizler
675
+ */
676
+ clearAll() {
677
+ this.workflows.clear();
678
+ }
679
+ createEmptyWorkflowData(workflowId) {
680
+ return {
681
+ workflowId,
682
+ steps: [],
683
+ memory: [],
684
+ context: {
685
+ pageInfo: { url: "", title: "" },
686
+ timestamp: Date.now()
687
+ },
688
+ metadata: {
689
+ totalSteps: 0,
690
+ completedSteps: 0,
691
+ failedSteps: 0,
692
+ startTime: Date.now()
693
+ }
694
+ };
695
+ }
696
+ enforceRetentionPolicy() {
697
+ const maxWorkflows = 10;
698
+ if (this.workflows.size > maxWorkflows) {
699
+ const sortedWorkflows = Array.from(this.workflows.entries()).sort(([, a], [, b]) => (b.metadata.endTime || b.metadata.startTime) - (a.metadata.endTime || a.metadata.startTime));
700
+ const toDelete = sortedWorkflows.slice(maxWorkflows);
701
+ toDelete.forEach(([workflowId]) => this.workflows.delete(workflowId));
702
+ }
703
+ }
704
+ };
617
705
  var PageTaskExecutor = class {
618
706
  constructor(page, insight, opts) {
619
707
  this.conversationHistory = [];
@@ -621,6 +709,25 @@ var PageTaskExecutor = class {
621
709
  this.insight = insight;
622
710
  this.taskCache = opts.taskCache;
623
711
  this.onTaskStartCallback = opts?.onTaskStart;
712
+ this.memoryConfig = {
713
+ maxItems: 100,
714
+ maxAge: 2 * 60 * 60 * 1e3,
715
+ // 2 saat
716
+ enablePersistence: true,
717
+ enableAnalytics: true,
718
+ filterStrategy: "hybrid",
719
+ ...opts?.memoryConfig
720
+ };
721
+ this.sessionContext = {
722
+ sessionId: opts?.sessionId || this.generateSessionId(),
723
+ workflowId: opts?.workflowId,
724
+ startTime: Date.now(),
725
+ pageInfo: {
726
+ url: "",
727
+ title: ""
728
+ }
729
+ };
730
+ this.workflowMemory = new WorkflowMemory(this.memoryConfig);
624
731
  }
625
732
  async recordScreenshot(timing) {
626
733
  const base64 = await this.page.screenshotBase64();
@@ -833,8 +940,11 @@ var PageTaskExecutor = class {
833
940
  insightDump = dump;
834
941
  };
835
942
  this.insight.onceDumpUpdatedFn = dumpCollector;
943
+ const memoryContext = this.getMemoryAsContext();
836
944
  const assertion = await this.insight.assert(
837
- assertPlan.param.assertion
945
+ assertPlan.param.assertion,
946
+ memoryContext
947
+ // Hafıza bağlamını geç
838
948
  );
839
949
  if (!assertion.pass) {
840
950
  if (plan2.type === "Assert") {
@@ -1320,25 +1430,146 @@ var PageTaskExecutor = class {
1320
1430
  };
1321
1431
  return task;
1322
1432
  }
1433
+ /**
1434
+ * Persistent executor'ı getirir veya oluşturur
1435
+ */
1436
+ getPersistentExecutor() {
1437
+ if (!this.persistentExecutor || this.persistentExecutor.status === "error") {
1438
+ const previousMemory = this.workflowMemory.getWorkflowMemory(this.sessionContext.workflowId);
1439
+ this.persistentExecutor = new import_misoai_core.Executor("Persistent Task Executor", {
1440
+ onTaskStart: this.onTaskStartCallback,
1441
+ initialMemory: previousMemory
1442
+ });
1443
+ }
1444
+ return this.persistentExecutor;
1445
+ }
1446
+ /**
1447
+ * Sayfa bağlamını günceller
1448
+ */
1449
+ async updatePageContext() {
1450
+ try {
1451
+ if (this.page.url) {
1452
+ this.sessionContext.pageInfo.url = await this.page.url();
1453
+ }
1454
+ if (this.page.pageType === "puppeteer" || this.page.pageType === "playwright") {
1455
+ this.sessionContext.pageInfo.title = await this.page.title();
1456
+ }
1457
+ } catch (e) {
1458
+ }
1459
+ }
1460
+ /**
1461
+ * Hafızayı temizler
1462
+ */
1463
+ clearMemory() {
1464
+ if (this.persistentExecutor) {
1465
+ this.persistentExecutor.clearMemory();
1466
+ }
1467
+ this.workflowMemory.clearWorkflow(this.sessionContext.workflowId || "default");
1468
+ }
1469
+ /**
1470
+ * Mevcut hafızayı döndürür
1471
+ */
1472
+ getMemory() {
1473
+ return this.persistentExecutor?.getMemory() || [];
1474
+ }
1475
+ /**
1476
+ * İş akışı hafızasını döndürür
1477
+ */
1478
+ getWorkflowMemory() {
1479
+ return this.workflowMemory.getWorkflowData(this.sessionContext.workflowId || "default");
1480
+ }
1481
+ /**
1482
+ * Hafıza istatistiklerini döndürür
1483
+ */
1484
+ getMemoryStats() {
1485
+ return this.persistentExecutor?.getMemoryStats() || {
1486
+ totalItems: 0,
1487
+ analytics: { totalTasks: 0, memoryHits: 0, memoryMisses: 0, averageMemorySize: 0, memoryEffectiveness: 0 },
1488
+ config: this.memoryConfig
1489
+ };
1490
+ }
1491
+ /**
1492
+ * Hafıza konfigürasyonunu günceller
1493
+ */
1494
+ updateMemoryConfig(config) {
1495
+ this.memoryConfig = { ...this.memoryConfig, ...config };
1496
+ if (this.persistentExecutor) {
1497
+ this.persistentExecutor.updateMemoryConfig(this.memoryConfig);
1498
+ }
1499
+ }
1500
+ /**
1501
+ * Oturum ID'sini oluşturur
1502
+ */
1503
+ generateSessionId() {
1504
+ return `session_${Date.now()}_${Math.random().toString(36).substr(2, 8)}`;
1505
+ }
1506
+ /**
1507
+ * Hafızayı bağlam olarak formatlar
1508
+ */
1509
+ getMemoryAsContext() {
1510
+ const memory = this.getMemory();
1511
+ if (memory.length === 0) {
1512
+ return "";
1513
+ }
1514
+ const recentMemory = memory.slice(-5);
1515
+ return recentMemory.map((item) => `- ${item.summary}`).join("\n");
1516
+ }
1323
1517
  async runPlans(title, plans, opts) {
1324
- const taskExecutor = new import_misoai_core.Executor(title, {
1325
- onTaskStart: this.onTaskStartCallback
1326
- });
1518
+ await this.updatePageContext();
1519
+ const useMemory = opts?.useMemory !== false;
1520
+ let taskExecutor;
1521
+ if (useMemory) {
1522
+ taskExecutor = this.getPersistentExecutor();
1523
+ this.workflowMemory.updateWorkflowContext({
1524
+ currentStep: title,
1525
+ pageInfo: this.sessionContext.pageInfo,
1526
+ timestamp: Date.now()
1527
+ }, this.sessionContext.workflowId || "default");
1528
+ } else {
1529
+ taskExecutor = new import_misoai_core.Executor(title, {
1530
+ onTaskStart: this.onTaskStartCallback
1531
+ });
1532
+ }
1327
1533
  const { tasks } = await this.convertPlanToExecutable(plans, opts);
1534
+ tasks.forEach((task) => {
1535
+ task.context = {
1536
+ ...task.context,
1537
+ ...this.sessionContext.pageInfo,
1538
+ workflowId: this.sessionContext.workflowId,
1539
+ sessionId: this.sessionContext.sessionId
1540
+ };
1541
+ });
1328
1542
  await taskExecutor.append(tasks);
1329
1543
  const result = await taskExecutor.flush();
1544
+ if (useMemory) {
1545
+ this.workflowMemory.saveWorkflowMemory(
1546
+ taskExecutor.getMemory(),
1547
+ this.sessionContext.workflowId || "default"
1548
+ );
1549
+ }
1330
1550
  return {
1331
1551
  output: result,
1332
1552
  executor: taskExecutor
1333
1553
  };
1334
1554
  }
1335
1555
  async action(userPrompt, actionContext, opts) {
1336
- const taskExecutor = new import_misoai_core.Executor(taskTitleStr("Action", userPrompt), {
1337
- onTaskStart: this.onTaskStartCallback
1338
- });
1339
- let planningTask = this.planningTaskFromPrompt(userPrompt, void 0, actionContext);
1556
+ const useMemory = true;
1557
+ let taskExecutor;
1558
+ if (useMemory) {
1559
+ taskExecutor = this.getPersistentExecutor();
1560
+ } else {
1561
+ taskExecutor = new import_misoai_core.Executor(taskTitleStr("Action", userPrompt), {
1562
+ onTaskStart: this.onTaskStartCallback
1563
+ });
1564
+ }
1565
+ const memoryContext = this.getMemoryAsContext();
1566
+ const initialLog = memoryContext ? memoryContext : void 0;
1567
+ let planningTask = this.planningTaskFromPrompt(userPrompt, initialLog, actionContext);
1340
1568
  let replanCount = 0;
1341
1569
  const logList = [];
1570
+ if (memoryContext) {
1571
+ logList.push(memoryContext);
1572
+ }
1342
1573
  const yamlFlow = [];
1343
1574
  while (planningTask) {
1344
1575
  if (replanCount > replanningCountLimit) {
@@ -1448,15 +1679,21 @@ var PageTaskExecutor = class {
1448
1679
  };
1449
1680
  }
1450
1681
  async createTypeQueryTask(type, demand, opt) {
1451
- const taskExecutor = new import_misoai_core.Executor(
1452
- taskTitleStr(
1453
- type,
1454
- typeof demand === "string" ? demand : JSON.stringify(demand)
1455
- ),
1456
- {
1457
- onTaskStart: this.onTaskStartCallback
1458
- }
1459
- );
1682
+ const useMemory = true;
1683
+ let taskExecutor;
1684
+ if (useMemory) {
1685
+ taskExecutor = this.getPersistentExecutor();
1686
+ } else {
1687
+ taskExecutor = new import_misoai_core.Executor(
1688
+ taskTitleStr(
1689
+ type,
1690
+ typeof demand === "string" ? demand : JSON.stringify(demand)
1691
+ ),
1692
+ {
1693
+ onTaskStart: this.onTaskStartCallback
1694
+ }
1695
+ );
1696
+ }
1460
1697
  const queryTask = {
1461
1698
  type: "Insight",
1462
1699
  subType: type,
@@ -1478,9 +1715,12 @@ var PageTaskExecutor = class {
1478
1715
  result: `${type}, ${demand}`
1479
1716
  };
1480
1717
  }
1718
+ const memoryContext = this.getMemoryAsContext();
1481
1719
  const { data, usage } = await this.insight.extract(
1482
1720
  demandInput,
1483
- opt
1721
+ opt,
1722
+ memoryContext
1723
+ // Hafıza bağlamını geç
1484
1724
  );
1485
1725
  let outputResult = data;
1486
1726
  if (ifTypeRestricted) {
@@ -1513,11 +1753,17 @@ var PageTaskExecutor = class {
1513
1753
  async string(prompt, opt) {
1514
1754
  return this.createTypeQueryTask("String", prompt, opt);
1515
1755
  }
1516
- async assert(assertion) {
1756
+ async assert(assertion, memoryContext) {
1517
1757
  const description = `assert: ${assertion}`;
1518
- const taskExecutor = new import_misoai_core.Executor(taskTitleStr("Assert", description), {
1519
- onTaskStart: this.onTaskStartCallback
1520
- });
1758
+ const useMemory = true;
1759
+ let taskExecutor;
1760
+ if (useMemory) {
1761
+ taskExecutor = this.getPersistentExecutor();
1762
+ } else {
1763
+ taskExecutor = new import_misoai_core.Executor(taskTitleStr("Assert", description), {
1764
+ onTaskStart: this.onTaskStartCallback
1765
+ });
1766
+ }
1521
1767
  const assertionPlan = {
1522
1768
  type: "Assert",
1523
1769
  param: {
@@ -1727,7 +1973,7 @@ var import_js_yaml3 = __toESM(require("js-yaml"));
1727
1973
  var import_semver = __toESM(require("semver"));
1728
1974
 
1729
1975
  // package.json
1730
- var version = "1.0.3";
1976
+ var version = "1.5.7";
1731
1977
 
1732
1978
  // src/common/task-cache.ts
1733
1979
  var debug3 = (0, import_logger3.getDebug)("cache");
@@ -2214,7 +2460,13 @@ var PageAgent = class {
2214
2460
  metadata: metadata2
2215
2461
  };
2216
2462
  }
2217
- const { output, executor } = await (isVlmUiTars ? this.taskExecutor.actionToGoal(taskPrompt, { cacheable }) : this.taskExecutor.action(taskPrompt, this.opts.aiActionContext, {
2463
+ const memoryContext = this.getMemoryAsContext();
2464
+ const enhancedActionContext = this.opts.aiActionContext ? `${this.opts.aiActionContext}
2465
+
2466
+ Previous workflow steps:
2467
+ ${memoryContext}` : memoryContext ? `Previous workflow steps:
2468
+ ${memoryContext}` : void 0;
2469
+ const { output, executor } = await (isVlmUiTars ? this.taskExecutor.actionToGoal(taskPrompt, { cacheable }) : this.taskExecutor.action(taskPrompt, enhancedActionContext, {
2218
2470
  cacheable
2219
2471
  }));
2220
2472
  if (this.taskCache && output?.yamlFlow && cacheable !== false) {
@@ -2360,8 +2612,9 @@ var PageAgent = class {
2360
2612
  } catch (e) {
2361
2613
  }
2362
2614
  }
2615
+ const memoryContext = this.getMemoryAsContext();
2363
2616
  const assertionWithContext = currentUrl ? `For the page at URL "${currentUrl}", ${assertion}` : assertion;
2364
- const { output, executor } = await this.taskExecutor.assert(assertionWithContext);
2617
+ const { output, executor } = await this.taskExecutor.assert(assertionWithContext, memoryContext);
2365
2618
  const metadata = this.afterTaskRunning(executor, true);
2366
2619
  if (output && opt?.keepRawResponse) {
2367
2620
  return {
@@ -2608,6 +2861,35 @@ ${errors}`);
2608
2861
  async destroy() {
2609
2862
  await this.page.destroy();
2610
2863
  }
2864
+ /**
2865
+ * Hafızayı bağlam olarak formatlar
2866
+ */
2867
+ getMemoryAsContext() {
2868
+ const memory = this.taskExecutor.getMemory();
2869
+ if (memory.length === 0) {
2870
+ return "";
2871
+ }
2872
+ const recentMemory = memory.slice(-5);
2873
+ return recentMemory.map((item) => `- ${item.summary}`).join("\n");
2874
+ }
2875
+ /**
2876
+ * Mevcut hafızayı döndürür
2877
+ */
2878
+ getMemory() {
2879
+ return this.taskExecutor.getMemory();
2880
+ }
2881
+ /**
2882
+ * Hafıza istatistiklerini döndürür
2883
+ */
2884
+ getMemoryStats() {
2885
+ return this.taskExecutor.getMemoryStats();
2886
+ }
2887
+ /**
2888
+ * Hafızayı temizler
2889
+ */
2890
+ clearMemory() {
2891
+ this.taskExecutor.clearMemory();
2892
+ }
2611
2893
  };
2612
2894
 
2613
2895
  // src/bridge-mode/agent-cli-side.ts
@@ -2720,7 +3002,7 @@ var BridgeServer = class {
2720
3002
  this.socket = socket;
2721
3003
  const clientVersion = socket.handshake.query.version;
2722
3004
  (0, import_utils16.logMsg)(
2723
- `Bridge connected, cli-side version v${"1.0.3"}, browser-side version v${clientVersion}`
3005
+ `Bridge connected, cli-side version v${"1.5.7"}, browser-side version v${clientVersion}`
2724
3006
  );
2725
3007
  socket.on("bridge-call-response" /* CallResponse */, (params) => {
2726
3008
  const id = params.id;
@@ -2751,7 +3033,7 @@ var BridgeServer = class {
2751
3033
  setTimeout(() => {
2752
3034
  this.onConnect?.();
2753
3035
  const payload = {
2754
- version: "1.0.3"
3036
+ version: "1.5.7"
2755
3037
  };
2756
3038
  socket.emit("bridge-connected" /* Connected */, payload);
2757
3039
  Promise.resolve().then(() => {