@testdriverai/agent 7.8.0-test.73 → 7.9.0-canary.0

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.
@@ -536,6 +536,162 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
536
536
  }
537
537
  }
538
538
 
539
+ // ─── Handle pending slot claim (trigger.dev waitpoint flow) ────
540
+ // The API returned early with status: 'pending'. The SDK has now
541
+ // connected to Ably and entered presence (done in _initAbly above).
542
+ // Wait for the claim-slot task to publish slot-approved or slot-denied
543
+ // on the control channel, then re-call authenticate with slotApproved.
544
+ // On slot-denied, we poll forever (re-calling authenticate every 10s)
545
+ // until a slot opens, matching _httpPostWithConcurrencyRetry behavior.
546
+ var concurrencyRetryInterval = 10000;
547
+ var slotPollStart = Date.now();
548
+ while (reply.status === 'pending') {
549
+ logger.log('Slot claim pending — waiting for approval via Ably...');
550
+
551
+ var self = this;
552
+ var slotResolved = false;
553
+ var slotResolve, slotReject;
554
+ var slotDecisionPromise = new Promise(function (resolve, reject) {
555
+ slotResolve = resolve;
556
+ slotReject = reject;
557
+ });
558
+
559
+ var slotTimeout = setTimeout(function () {
560
+ if (slotResolved) return;
561
+ slotResolved = true;
562
+ try { self._sessionChannel.unsubscribe('control', onSlotControl); } catch (_) {}
563
+ slotReject(new Error('Slot claim timed out waiting for approval'));
564
+ }, 60000); // 60s timeout
565
+ if (slotTimeout.unref) slotTimeout.unref();
566
+
567
+ function onSlotControl(msg) {
568
+ var data = msg.data;
569
+ if (!data) return;
570
+ if (data.type === 'slot-approved') {
571
+ if (slotResolved) return;
572
+ slotResolved = true;
573
+ clearTimeout(slotTimeout);
574
+ try { self._sessionChannel.unsubscribe('control', onSlotControl); } catch (_) {}
575
+ slotResolve({ approved: true, data: data });
576
+ } else if (data.type === 'slot-denied') {
577
+ if (slotResolved) return;
578
+ slotResolved = true;
579
+ clearTimeout(slotTimeout);
580
+ try { self._sessionChannel.unsubscribe('control', onSlotControl); } catch (_) {}
581
+ slotResolve({ approved: false, data: data });
582
+ }
583
+ }
584
+
585
+ // Subscribe FIRST, then check history to close the race window
586
+ // between presence enter (done in _initAbly) and this subscription.
587
+ // The claim-slot task fires in response to presence enter, so the
588
+ // decision may already be published by the time we get here.
589
+ var slotControlSub = await self._sessionChannel.subscribe('control', onSlotControl);
590
+
591
+ // Check for decisions published before this subscription was active
592
+ if (!slotResolved && slotControlSub) {
593
+ try {
594
+ var histPage = await slotControlSub.historyBeforeSubscribe({ limit: 10 });
595
+ while (histPage && !slotResolved) {
596
+ for (var hi = 0; hi < histPage.items.length; hi++) {
597
+ onSlotControl(histPage.items[hi]);
598
+ if (slotResolved) break;
599
+ }
600
+ histPage = (!slotResolved && histPage.hasNext()) ? await histPage.next() : null;
601
+ }
602
+ } catch (histErr) {
603
+ logger.warn('[slots] Failed to check history for slot decision: ' + (histErr.message || histErr));
604
+ }
605
+ }
606
+
607
+ var slotDecision = await slotDecisionPromise;
608
+
609
+ if (!slotDecision.approved) {
610
+ // Slot denied — disconnect Ably and re-try the full authenticate
611
+ // flow after a delay, polling forever until a slot opens.
612
+ var elapsed = Date.now() - slotPollStart;
613
+ logger.log(
614
+ 'Slot denied: ' + (slotDecision.data.message || 'concurrency limit reached') +
615
+ ' — waiting ' + (concurrencyRetryInterval / 1000) + 's before retrying' +
616
+ ' (' + Math.round(elapsed / 1000) + 's elapsed)...'
617
+ );
618
+ logger.log('Upgrade for more slots → https://console.testdriver.ai/checkout/team');
619
+ try {
620
+ if (this._ably) this._ably.close();
621
+ this._ably = null;
622
+ this._sessionChannel = null;
623
+ } catch (_) {}
624
+
625
+ await new Promise(function (resolve) {
626
+ var t = setTimeout(resolve, concurrencyRetryInterval);
627
+ if (t.unref) t.unref();
628
+ });
629
+
630
+ // Re-call authenticate — this goes through _httpPostWithConcurrencyRetry
631
+ // so transient HTTP errors are also handled. The new reply will either
632
+ // be 'pending' again (loop continues) or succeed directly.
633
+ reply = await this._httpPostWithConcurrencyRetry(
634
+ "/api/v7/sandbox/authenticate",
635
+ body,
636
+ timeout,
637
+ );
638
+
639
+ if (!reply.success && reply.status !== 'pending') {
640
+ var retryErr = new Error(
641
+ reply.errorMessage || "Failed to allocate sandbox",
642
+ );
643
+ retryErr.responseData = reply;
644
+ throw retryErr;
645
+ }
646
+
647
+ // Re-init Ably if we got a new pending reply with fresh credentials
648
+ if (reply.status === 'pending' && reply.ably && reply.ably.token) {
649
+ this._sandboxId = reply.sandboxId;
650
+ this._teamId = reply.teamId;
651
+ await this._initAbly(reply.ably.token, reply.ably.channel);
652
+ this.instanceSocketConnected = true;
653
+ }
654
+
655
+ continue; // loop back to wait for the next slot decision
656
+ }
657
+
658
+ logger.log('Slot approved — provisioning sandbox...');
659
+
660
+ // Re-call authenticate with slotApproved flag to trigger provisioning
661
+ // Keep the same sandboxId so the Ably channel stays valid
662
+ var provisionBody = {
663
+ apiKey: this.apiKey,
664
+ version: version,
665
+ os: message.os || this.os || 'linux',
666
+ session: sessionId,
667
+ apiRoot: this.apiRoot,
668
+ sandboxId: this._sandboxId,
669
+ slotApproved: true,
670
+ };
671
+ if (message.resolution) provisionBody.resolution = message.resolution;
672
+ if (message.ci) provisionBody.ci = message.ci;
673
+ if (message.ami) provisionBody.ami = message.ami;
674
+ if (message.instanceType) provisionBody.instanceType = message.instanceType;
675
+ if (message.e2bTemplateId) provisionBody.e2bTemplateId = message.e2bTemplateId;
676
+ if (message.keepAlive !== undefined) provisionBody.keepAlive = message.keepAlive;
677
+
678
+ reply = await this._httpPostWithConcurrencyRetry(
679
+ "/api/v7/sandbox/authenticate",
680
+ provisionBody,
681
+ timeout,
682
+ );
683
+
684
+ if (!reply.success) {
685
+ var provisionErr = new Error(
686
+ reply.errorMessage || "Failed to provision sandbox after approval",
687
+ );
688
+ provisionErr.responseData = reply;
689
+ throw provisionErr;
690
+ }
691
+
692
+ break; // slot approved and provisioned — exit the while loop
693
+ }
694
+
539
695
  if (message.type === "create") {
540
696
  // E2B (Linux) sandboxes return a url directly.
541
697
  // We still need to wait for runner.ready since sandbox-agent.js runs inside E2B.
@@ -2,104 +2,104 @@
2
2
  "$schema": "./examples-manifest.schema.json",
3
3
  "examples": {
4
4
  "assert.test.mjs": {
5
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca86560e1c6d04ac340",
6
- "lastUpdated": "2026-03-25T00:36:26.387Z"
5
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d038058ffe89003c6adc",
6
+ "lastUpdated": "2026-03-27T00:44:44.009Z"
7
7
  },
8
8
  "drag-and-drop.test.mjs": {
9
9
  "url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62b42fc0ac3cc632a918b",
10
10
  "lastUpdated": "2026-03-03T00:32:25.275Z"
11
11
  },
12
12
  "exec-pwsh.test.mjs": {
13
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9816690e8f8d0fd3a7",
14
- "lastUpdated": "2026-03-25T00:31:30.158Z"
13
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d026a0a3ef8239de4746",
14
+ "lastUpdated": "2026-03-27T00:33:58.317Z"
15
15
  },
16
16
  "match-image.test.mjs": {
17
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9a6560e1c6d04ac33c",
18
- "lastUpdated": "2026-03-25T00:31:31.550Z"
17
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d0270201196437256ccf",
18
+ "lastUpdated": "2026-03-27T00:33:59.709Z"
19
19
  },
20
20
  "scroll-until-text.test.mjs": {
21
21
  "url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62b99dc33133fc0da9440",
22
22
  "lastUpdated": "2026-03-03T00:32:25.282Z"
23
23
  },
24
24
  "hover-text-with-description.test.mjs": {
25
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9b6f1e64e218b9e1c1",
26
- "lastUpdated": "2026-03-25T00:30:19.815Z"
25
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d029c2e6e94933886764",
26
+ "lastUpdated": "2026-03-27T00:32:41.295Z"
27
27
  },
28
28
  "windows-installer.test.mjs": {
29
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9e6f1e64e218b9e1c3",
30
- "lastUpdated": "2026-03-25T00:31:36.152Z"
29
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d02ce8a04db4b705cbe9",
30
+ "lastUpdated": "2026-03-27T00:34:04.862Z"
31
31
  },
32
32
  "exec-output.test.mjs": {
33
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca06560e1c6d04ac33e",
34
- "lastUpdated": "2026-03-25T00:31:37.612Z"
33
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d02ee8a04db4b705cbeb",
34
+ "lastUpdated": "2026-03-27T00:34:06.467Z"
35
35
  },
36
36
  "chrome-extension.test.mjs": {
37
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9716690e8f8d0fd3a6",
38
- "lastUpdated": "2026-03-25T00:30:51.808Z"
37
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d024c2e6e94933886763",
38
+ "lastUpdated": "2026-03-27T00:33:19.157Z"
39
39
  },
40
40
  "launch-vscode-linux.test.mjs": {
41
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32c9d6560e1c6d04ac33d",
42
- "lastUpdated": "2026-03-25T00:33:18.181Z"
41
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d02be8a04db4b705cbe5",
42
+ "lastUpdated": "2026-03-27T00:38:16.512Z"
43
43
  },
44
44
  "hover-image.test.mjs": {
45
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca16f1e64e218b9e1c5",
46
- "lastUpdated": "2026-03-25T00:31:02.500Z"
45
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d0300201196437256cd3",
46
+ "lastUpdated": "2026-03-27T00:33:30.129Z"
47
47
  },
48
48
  "installer.test.mjs": {
49
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca3b4a333234cc21a71",
50
- "lastUpdated": "2026-03-25T00:30:27.405Z"
49
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d032c2e6e94933886769",
50
+ "lastUpdated": "2026-03-27T00:32:50.006Z"
51
51
  },
52
52
  "type.test.mjs": {
53
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca56560e1c6d04ac33f",
54
- "lastUpdated": "2026-03-25T00:31:05.803Z"
53
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d034c2e6e9493388676c",
54
+ "lastUpdated": "2026-03-27T00:33:33.802Z"
55
55
  },
56
56
  "press-keys.test.mjs": {
57
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32ca6b4a333234cc21a72",
58
- "lastUpdated": "2026-03-25T00:36:02.167Z"
57
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d036058ffe89003c6ada",
58
+ "lastUpdated": "2026-03-27T00:43:59.035Z"
59
59
  },
60
60
  "scroll-keyboard.test.mjs": {
61
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cab6f1e64e218b9e1c8",
62
- "lastUpdated": "2026-03-25T00:31:48.884Z"
61
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d03da0a3ef8239de474f",
62
+ "lastUpdated": "2026-03-27T00:34:18.283Z"
63
63
  },
64
64
  "scroll.test.mjs": {
65
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb1ca96d9648a141714",
66
- "lastUpdated": "2026-03-25T00:37:40.747Z"
65
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d043058ffe89003c6ae0",
66
+ "lastUpdated": "2026-03-27T00:48:40.373Z"
67
67
  },
68
68
  "scroll-until-image.test.mjs": {
69
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cad6560e1c6d04ac342",
70
- "lastUpdated": "2026-03-25T00:30:37.291Z"
69
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d03f0201196437256cda",
70
+ "lastUpdated": "2026-03-27T00:33:03.090Z"
71
71
  },
72
72
  "prompt.test.mjs": {
73
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cae6f1e64e218b9e1c9",
74
- "lastUpdated": "2026-03-25T00:31:51.753Z"
73
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d040c2e6e9493388676f",
74
+ "lastUpdated": "2026-03-27T00:34:21.306Z"
75
75
  },
76
76
  "focus-window.test.mjs": {
77
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb0ca96d9648a141713",
78
- "lastUpdated": "2026-03-25T00:30:40.087Z"
77
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d042e8a04db4b705cbf2",
78
+ "lastUpdated": "2026-03-27T00:33:06.137Z"
79
79
  },
80
80
  "captcha-api.test.mjs": {
81
81
  "url": "https://console.testdriver.ai/runs/698f7df69e27ce1528d7d087/698f7fb0d3b320ad547d9d44",
82
82
  "lastUpdated": "2026-02-13T19:55:05.951Z"
83
83
  },
84
84
  "element-not-found.test.mjs": {
85
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb5ca96d9648a141716",
86
- "lastUpdated": "2026-03-25T00:31:57.845Z"
85
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d047058ffe89003c6ae4",
86
+ "lastUpdated": "2026-03-27T00:34:27.452Z"
87
87
  },
88
88
  "formatted-logging.test.mjs": {
89
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb36f1e64e218b9e1cb",
90
- "lastUpdated": "2026-03-25T00:31:56.270Z"
89
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d045058ffe89003c6ae1",
90
+ "lastUpdated": "2026-03-27T00:34:25.797Z"
91
91
  },
92
92
  "hover-text.test.mjs": {
93
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb86f1e64e218b9e1cd",
94
- "lastUpdated": "2026-03-25T00:30:48.128Z"
93
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d04b0201196437256ce6",
94
+ "lastUpdated": "2026-03-27T00:33:15.698Z"
95
95
  },
96
96
  "no-provision.test.mjs": {
97
97
  "url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62b7706a177a05bccd1cf",
98
98
  "lastUpdated": "2026-03-03T00:32:25.279Z"
99
99
  },
100
100
  "ai.test.mjs": {
101
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb6ca96d9648a141717",
102
- "lastUpdated": "2026-03-25T00:38:54.978Z"
101
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d04ac2e6e94933886778",
102
+ "lastUpdated": "2026-03-27T00:52:24.469Z"
103
103
  },
104
104
  "popup-loading.test.mjs": {
105
105
  "url": "https://console.testdriver.ai/runs/698bc89f7140c3fa7daaca8d/698bca7f7140c3fa7daacbf7",
@@ -134,12 +134,12 @@
134
134
  "lastUpdated": "2026-02-13T19:55:05.953Z"
135
135
  },
136
136
  "findall-coffee-icons.test.mjs": {
137
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32caa6f1e64e218b9e1c7",
138
- "lastUpdated": "2026-03-25T00:31:10.542Z"
137
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d03ae8a04db4b705cbf0",
138
+ "lastUpdated": "2026-03-27T00:33:38.971Z"
139
139
  },
140
140
  "parse.test.mjs": {
141
- "url": "https://console-test.testdriver.ai/runs/69c32c95b4a333234cc21a6c/69c32cb96560e1c6d04ac34e",
142
- "lastUpdated": "2026-03-25T00:32:02.419Z"
141
+ "url": "https://console-test.testdriver.ai/runs/69c5d0220201196437256cce/69c5d04d0201196437256ce7",
142
+ "lastUpdated": "2026-03-27T00:34:32.300Z"
143
143
  },
144
144
  "flake-diffthreshold-001.test.mjs": {
145
145
  "url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62bcafc0ac3cc632a91aa",
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* ai.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cb6ca96d9648a141717/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d04ac2e6e94933886778/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* assert.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca86560e1c6d04ac340/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d038058ffe89003c6adc/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* chrome-extension.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32c9716690e8f8d0fd3a6/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d024c2e6e94933886763/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* element-not-found.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cb5ca96d9648a141716/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d047058ffe89003c6ae4/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* exec-output.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca06560e1c6d04ac33e/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d02ee8a04db4b705cbeb/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* exec-pwsh.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32c9816690e8f8d0fd3a7/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d026a0a3ef8239de4746/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* focus-window.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cb0ca96d9648a141713/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d042e8a04db4b705cbf2/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* hover-image.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca16f1e64e218b9e1c5/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d0300201196437256cd3/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* hover-text.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cb86f1e64e218b9e1cd/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d04b0201196437256ce6/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* installer.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca3b4a333234cc21a71/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d032c2e6e94933886769/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* launch-vscode-linux.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32c9d6560e1c6d04ac33d/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d02be8a04db4b705cbe5/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* match-image.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32c9a6560e1c6d04ac33c/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d0270201196437256ccf/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* press-keys.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca6b4a333234cc21a72/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d036058ffe89003c6ada/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* scroll-keyboard.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cab6f1e64e218b9e1c8/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d03da0a3ef8239de474f/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* scroll-until-image.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cad6560e1c6d04ac342/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d03f0201196437256cda/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* scroll.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32cb1ca96d9648a141714/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d043058ffe89003c6ae0/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* type.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32ca56560e1c6d04ac33f/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d034c2e6e9493388676c/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
12
12
 
13
13
  {/* windows-installer.test.mjs output */}
14
14
  <iframe
15
- src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c32c9e6f1e64e218b9e1c3/replay"
15
+ src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69c5d02ce8a04db4b705cbe9/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testdriverai/agent",
3
- "version": "7.8.0-test.73",
3
+ "version": "7.9.0-canary.0",
4
4
  "description": "Next generation autonomous AI agent for end-to-end testing of web & desktop",
5
5
  "main": "sdk.js",
6
6
  "types": "sdk.d.ts",
@@ -116,7 +116,7 @@
116
116
  },
117
117
  "overrides": {
118
118
  "glob": "^11.0.1",
119
- "obug": "2.1.0",
119
+ "obug": "2.1.1",
120
120
  "rimraf": "^5.0.10"
121
121
  },
122
122
  "peerDependencies": {