testdriverai 7.5.12 → 7.5.14

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 (38) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/agent/index.js +1 -1
  3. package/docs/_scripts/generate-examples.js +1 -1
  4. package/docs/v7/_drafts/architecture.mdx +1 -1
  5. package/docs/v7/_drafts/configuration.mdx +2 -2
  6. package/docs/v7/_drafts/quick-start-test-recording.mdx +1 -1
  7. package/docs/v7/_drafts/test-recording.mdx +1 -1
  8. package/docs/v7/_drafts/vitest-plugin.mdx +3 -3
  9. package/docs/v7/_drafts/vitest.mdx +1 -1
  10. package/docs/v7/examples/ai.mdx +1 -1
  11. package/docs/v7/examples/assert.mdx +1 -1
  12. package/docs/v7/examples/captcha-api.mdx +1 -1
  13. package/docs/v7/examples/chrome-extension.mdx +1 -1
  14. package/docs/v7/examples/drag-and-drop.mdx +1 -1
  15. package/docs/v7/examples/element-not-found.mdx +1 -1
  16. package/docs/v7/examples/hover-image.mdx +1 -1
  17. package/docs/v7/examples/hover-text.mdx +1 -1
  18. package/docs/v7/examples/installer.mdx +1 -1
  19. package/docs/v7/examples/launch-vscode-linux.mdx +1 -1
  20. package/docs/v7/examples/match-image.mdx +1 -1
  21. package/docs/v7/examples/press-keys.mdx +1 -1
  22. package/docs/v7/examples/scroll-keyboard.mdx +1 -1
  23. package/docs/v7/examples/scroll-until-image.mdx +1 -1
  24. package/docs/v7/examples/scroll-until-text.mdx +1 -1
  25. package/docs/v7/examples/scroll.mdx +1 -1
  26. package/docs/v7/examples/type.mdx +1 -1
  27. package/docs/v7/examples/windows-installer.mdx +1 -1
  28. package/interfaces/cli/commands/init.js +1 -1
  29. package/interfaces/vitest-plugin.mjs +4 -4
  30. package/lib/core/Dashcam.js +3 -3
  31. package/lib/github-comment.mjs +1 -1
  32. package/lib/init-project.js +1 -1
  33. package/lib/vitest/hooks.mjs +1 -1
  34. package/mcp-server/README.md +2 -2
  35. package/mcp-server/dist/server.mjs +1 -1
  36. package/mcp-server/src/server.ts +1 -1
  37. package/package.json +1 -1
  38. package/sdk.js +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## 7.5.14 (2026-03-06)
2
+
3
+ ## 🔧 Maintenance
4
+
5
+ - Update brand assets and marketing materials with new logos, icons, and product screenshots (dbaf002e)
6
+ - Update API endpoint configuration for Stripe payment processing [API] (dbaf002e)
7
+ - Update default project initialization settings [SDK] (dbaf002e)
8
+
9
+ ## 7.5.13 (2026-03-06)
10
+
11
+ ## ✨ Features
12
+
13
+ - Add new marketing website with comprehensive landing pages, pricing, features, and documentation sections [Marketing] (a1d567fe)
14
+
15
+ ## 🔧 Maintenance
16
+
17
+ - Update API server location configuration across all components [API] (a1d567fe)
18
+ - Upgrade runner AMI and improve deployment automation [Runner] (a1d567fe)
19
+ - Add automated testing for runner auto-upgrade functionality [Runner] (a1d567fe)
20
+ - Update Windows CI workflow configuration [CI] (a1d567fe)
21
+
1
22
  ## 7.5.12 (2026-03-06)
2
23
 
3
24
  ## 🔧 Maintenance
package/agent/index.js CHANGED
@@ -1942,7 +1942,7 @@ ${regression}
1942
1942
  if (process.env.VITE_DOMAIN) return process.env.VITE_DOMAIN;
1943
1943
 
1944
1944
  const mapping = {
1945
- "https://testdriver-api.onrender.com": "https://console.testdriver.ai",
1945
+ "https://api.testdriver.ai": "https://console.testdriver.ai",
1946
1946
  "https://v6.testdriver.ai": "https://console.testdriver.ai",
1947
1947
  };
1948
1948
  if (mapping[apiRoot]) return mapping[apiRoot];
@@ -256,7 +256,7 @@ function extractTestcaseId(url) {
256
256
  // Generate replay URL from testcase ID
257
257
  function generateReplayUrl(testcaseId) {
258
258
  // Use the API replay endpoint which handles the redirect with embed=true
259
- const apiRoot = process.env.TD_API_ROOT || 'https://testdriver-api.onrender.com';
259
+ const apiRoot = process.env.TD_API_ROOT || 'https://api.testdriver.ai';
260
260
  return `${apiRoot}/api/v1/testdriver/testcase/${testcaseId}/replay`;
261
261
  }
262
262
 
@@ -214,7 +214,7 @@ export default {
214
214
  plugins: [
215
215
  testDriverPlugin({
216
216
  apiKey: process.env.TD_API_KEY,
217
- apiRoot: process.env.TD_API_ROOT || 'https://testdriver-api.onrender.com',
217
+ apiRoot: process.env.TD_API_ROOT || 'https://api.testdriver.ai',
218
218
  }),
219
219
  ],
220
220
  }
@@ -17,7 +17,7 @@ Set these in your `.env` file:
17
17
  TD_API_KEY=your_api_key_here
18
18
 
19
19
  # Optional
20
- TD_API_ROOT=https://testdriver-api.onrender.com
20
+ TD_API_ROOT=https://api.testdriver.ai
21
21
  TD_DEFAULT_OS=linux
22
22
  TD_DEFAULT_RESOLUTION=1920x1080
23
23
  TD_NO_PROMPT_CACHE=false
@@ -52,7 +52,7 @@ const client = await TestDriver.create({
52
52
  sandboxId: null,
53
53
 
54
54
  // API Configuration
55
- apiRoot: 'https://testdriver-api.onrender.com',
55
+ apiRoot: 'https://api.testdriver.ai',
56
56
 
57
57
  // Logging
58
58
  verbosity: 1,
@@ -21,7 +21,7 @@ export default defineConfig({
21
21
  plugins: [
22
22
  testDriverPlugin({
23
23
  apiKey: process.env.TD_API_KEY,
24
- apiRoot: process.env.TD_API_ROOT || 'https://testdriver-api.onrender.com',
24
+ apiRoot: process.env.TD_API_ROOT || 'https://api.testdriver.ai',
25
25
  }),
26
26
  ],
27
27
  });
@@ -25,7 +25,7 @@ export default defineConfig({
25
25
  plugins: [
26
26
  testDriverPlugin({
27
27
  apiKey: process.env.TD_API_KEY,
28
- apiRoot: process.env.TD_API_ROOT || 'https://testdriver-api.onrender.com',
28
+ apiRoot: process.env.TD_API_ROOT || 'https://api.testdriver.ai',
29
29
  }),
30
30
  ],
31
31
  });
@@ -73,7 +73,7 @@ testDriverPlugin({
73
73
  apiKey: process.env.TD_API_KEY,
74
74
 
75
75
  // Optional: Custom API endpoint (for self-hosted)
76
- apiRoot: 'https://testdriver-api.onrender.com',
76
+ apiRoot: 'https://api.testdriver.ai',
77
77
  })
78
78
  ```
79
79
 
@@ -81,7 +81,7 @@ testDriverPlugin({
81
81
  Your TestDriver API key. Get one at [console.testdriver.ai](https://console.testdriver.ai)
82
82
  </ParamField>
83
83
 
84
- <ParamField path="apiRoot" type="string" default="https://testdriver-api.onrender.com">
84
+ <ParamField path="apiRoot" type="string" default="https://api.testdriver.ai">
85
85
  API endpoint URL. Only change this if you're using a self-hosted instance.
86
86
  </ParamField>
87
87
 
@@ -345,7 +345,7 @@ Check your API key is valid:
345
345
 
346
346
  ```bash
347
347
  # Test authentication
348
- curl -X POST https://testdriver-api.onrender.com/auth/exchange-api-key \
348
+ curl -X POST https://api.testdriver.ai/auth/exchange-api-key \
349
349
  -H "Content-Type: application/json" \
350
350
  -d '{"apiKey":"your-api-key-here"}'
351
351
  ```
@@ -235,7 +235,7 @@ Create a `.env` file in your project root:
235
235
 
236
236
  ```bash .env
237
237
  TD_API_KEY=your-api-key-here
238
- TD_API_ROOT=https://testdriver-api.onrender.com
238
+ TD_API_ROOT=https://api.testdriver.ai
239
239
  ```
240
240
 
241
241
  TestDriver automatically reads these when initializing.
@@ -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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b8f06a177a05bccd1dc/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b8f06a177a05bccd1dc/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b6206a177a05bccd1cc/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b6206a177a05bccd1cc/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
  {/* captcha-api.test.mjs output */}
14
14
  <iframe
15
- src="https://testdriver-api.onrender.com/api/v1/testdriver/testcase/698f7fb0d3b320ad547d9d44/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/698f7fb0d3b320ad547d9d44/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b91fc0ac3cc632a91a0/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b91fc0ac3cc632a91a0/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
  {/* drag-and-drop.test.mjs output */}
14
14
  <iframe
15
- src="https://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b42fc0ac3cc632a918b/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b42fc0ac3cc632a918b/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b6f0d4a5265e44e7d7b/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b6f0d4a5265e44e7d7b/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b77fc0ac3cc632a9198/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b77fc0ac3cc632a9198/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b79dc33133fc0da9439/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b79dc33133fc0da9439/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b570446888b52a4e1c9/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b570446888b52a4e1c9/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b91113035da665496a6/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b91113035da665496a6/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b42258e8885264fc704/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b42258e8885264fc704/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b800d4a5265e44e7d86/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b800d4a5265e44e7d86/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b82258e8885264fc728/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b82258e8885264fc728/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b4549845ced0b71e2b0/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b4549845ced0b71e2b0/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-text.test.mjs output */}
14
14
  <iframe
15
- src="https://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b99dc33133fc0da9440/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b99dc33133fc0da9440/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b83113035da665496a3/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b83113035da665496a3/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b8d49845ced0b71e2bf/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b8d49845ced0b71e2bf/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://testdriver-api.onrender.com/api/v1/testdriver/testcase/69a62b42565d339e8065f17f/replay"
15
+ src="https://api.testdriver.ai/api/v1/testdriver/testcase/69a62b42565d339e8065f17f/replay"
16
16
  width="100%"
17
17
  height="390"
18
18
  style={{ border: "1px solid #333", borderRadius: "8px" }}
@@ -12,7 +12,7 @@ const { execSync } = require("child_process");
12
12
  require("dotenv").config();
13
13
 
14
14
  // API configuration
15
- const API_BASE_URL = process.env.TD_API_ROOT || "https://testdriver-api.onrender.com";
15
+ const API_BASE_URL = process.env.TD_API_ROOT || "https://api.testdriver.ai";
16
16
  const POLL_INTERVAL = 5000; // 5 seconds
17
17
  const POLL_TIMEOUT = 900000; // 15 minutes
18
18
 
@@ -763,7 +763,7 @@ export default function testDriverPlugin(options = {}) {
763
763
  pluginState.apiRoot =
764
764
  options.apiRoot ||
765
765
  process.env.TD_API_ROOT ||
766
- "https://testdriver-api.onrender.com";
766
+ "https://api.testdriver.ai";
767
767
  pluginState.ciProvider = detectCI();
768
768
  pluginState.gitInfo = getGitInfo();
769
769
 
@@ -822,7 +822,7 @@ class TestDriverReporter {
822
822
  pluginState.apiRoot =
823
823
  this.options.apiRoot ||
824
824
  process.env.TD_API_ROOT ||
825
- "https://testdriver-api.onrender.com";
825
+ "https://api.testdriver.ai";
826
826
  logger.debug("API key from options:", !!this.options.apiKey);
827
827
  logger.debug("API key from env (at onInit):", !!process.env.TD_API_KEY);
828
828
  logger.debug("API root from options:", this.options.apiRoot);
@@ -1239,7 +1239,7 @@ class TestDriverReporter {
1239
1239
  * Maps an API root URL to its corresponding web console URL.
1240
1240
  * The API and web console are served from different domains/ports.
1241
1241
  *
1242
- * @param {string} apiRoot - The API root URL (e.g., https://testdriver-api.onrender.com)
1242
+ * @param {string} apiRoot - The API root URL (e.g., https://api.testdriver.ai)
1243
1243
  * @returns {string} The corresponding web console URL
1244
1244
  */
1245
1245
  function getConsoleUrl(apiRoot) {
@@ -1249,7 +1249,7 @@ function getConsoleUrl(apiRoot) {
1249
1249
  if (!apiRoot) return "https://console.testdriver.ai";
1250
1250
 
1251
1251
  // Production: API on render.com -> Console on testdriver.ai
1252
- if (apiRoot.includes("testdriver-api.onrender.com")) {
1252
+ if (apiRoot.includes("api.testdriver.ai")) {
1253
1253
  return "https://console.testdriver.ai";
1254
1254
  }
1255
1255
 
@@ -81,7 +81,7 @@ class Dashcam {
81
81
  */
82
82
  _getApiRoot() {
83
83
  return (
84
- this.client.config?.TD_API_ROOT || "https://testdriver-api.onrender.com"
84
+ this.client.config?.TD_API_ROOT || "https://api.testdriver.ai"
85
85
  );
86
86
  }
87
87
 
@@ -91,7 +91,7 @@ class Dashcam {
91
91
  * @param {string} apiRoot - The API root URL
92
92
  * @returns {string} The corresponding console URL
93
93
  */
94
- static getConsoleUrl(apiRoot = "https://testdriver-api.onrender.com") {
94
+ static getConsoleUrl(apiRoot = "https://api.testdriver.ai") {
95
95
  // Allow explicit override via env (e.g. VITE_DOMAIN from .env)
96
96
  if (process.env.VITE_DOMAIN) return process.env.VITE_DOMAIN;
97
97
 
@@ -99,7 +99,7 @@ class Dashcam {
99
99
 
100
100
  // Production: API on render.com or v6 -> Console on testdriver.ai
101
101
  if (
102
- apiRoot.includes("testdriver-api.onrender.com") ||
102
+ apiRoot.includes("api.testdriver.ai") ||
103
103
  apiRoot.includes("v6.testdriver.ai")
104
104
  ) {
105
105
  return "https://console.testdriver.ai";
@@ -211,7 +211,7 @@ function getReplayGifUrl(replayUrl, replayId) {
211
211
  apiBaseUrl = 'https://testdriverai-v6-c96fc597be11.herokuapp.com';
212
212
  } else if (replayUrl.includes('console.testdriver.ai')) {
213
213
  // TestDriver console
214
- apiBaseUrl = 'https://testdriver-api.onrender.com';
214
+ apiBaseUrl = 'https://api.testdriver.ai';
215
215
  } else if (replayUrl.includes('localhost')) {
216
216
  // Local development
217
217
  apiBaseUrl = 'http://localhost:1337';
@@ -321,7 +321,7 @@ jobs:
321
321
  - name: Run TestDriver.ai tests
322
322
  env:
323
323
  TD_API_KEY: \${{ secrets.TD_API_KEY }}
324
- run: vitest run
324
+ run: npx vitest run
325
325
 
326
326
  - name: Upload test results
327
327
  if: always()
@@ -255,7 +255,7 @@ async function uploadLogsToReplay(client, dashcamUrl) {
255
255
  }
256
256
 
257
257
  // Use the SDK's configured API root (matches what the SDK uses for all other API calls)
258
- const apiRoot = client.config?.TD_API_ROOT || process.env.TD_API_ROOT || "https://testdriver-api.onrender.com";
258
+ const apiRoot = client.config?.TD_API_ROOT || process.env.TD_API_ROOT || "https://api.testdriver.ai";
259
259
 
260
260
  console.log(`[TestDriver] Uploading logs for replay ${replayId} to ${apiRoot}...`);
261
261
 
@@ -137,10 +137,10 @@ The API endpoint can be configured in three ways (in order of precedence):
137
137
 
138
138
  1. **Per-session**: Pass `apiRoot` to `session_start` tool
139
139
  2. **Environment variable**: Set `TD_API_ROOT` in your MCP config
140
- 3. **Default**: `https://testdriver-api.onrender.com`
140
+ 3. **Default**: `https://api.testdriver.ai`
141
141
 
142
142
  Common values:
143
- - **Production**: `https://testdriver-api.onrender.com`
143
+ - **Production**: `https://api.testdriver.ai`
144
144
  - **Local dev**: Your ngrok URL (e.g., `https://abc123.ngrok.io`)
145
145
 
146
146
  ### Self-Hosted AWS Instances
@@ -407,7 +407,7 @@ Debug mode (connect to existing sandbox):
407
407
  });
408
408
  logger.debug("session_start: Session created", { sessionId: newSession.sessionId });
409
409
  // Determine API root
410
- const apiRoot = params.apiRoot || process.env.TD_API_ROOT || "https://testdriver-api.onrender.com";
410
+ const apiRoot = params.apiRoot || process.env.TD_API_ROOT || "https://api.testdriver.ai";
411
411
  logger.debug("session_start: Using API root", { apiRoot });
412
412
  // Initialize SDK
413
413
  logger.debug("session_start: Initializing SDK");
@@ -520,7 +520,7 @@ Debug mode (connect to existing sandbox):
520
520
  logger.debug("session_start: Session created", { sessionId: newSession.sessionId });
521
521
 
522
522
  // Determine API root
523
- const apiRoot = params.apiRoot || process.env.TD_API_ROOT || "https://testdriver-api.onrender.com";
523
+ const apiRoot = params.apiRoot || process.env.TD_API_ROOT || "https://api.testdriver.ai";
524
524
  logger.debug("session_start: Using API root", { apiRoot });
525
525
 
526
526
  // Initialize SDK
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testdriverai",
3
- "version": "7.5.12",
3
+ "version": "7.5.14",
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",
package/sdk.js CHANGED
@@ -1440,7 +1440,7 @@ class TestDriverSDK {
1440
1440
  // Set up environment with API key
1441
1441
  const environment = {
1442
1442
  TD_API_KEY: resolvedApiKey,
1443
- TD_API_ROOT: options.apiRoot || "https://testdriver-api.onrender.com",
1443
+ TD_API_ROOT: options.apiRoot || "https://api.testdriver.ai",
1444
1444
  TD_RESOLUTION: options.resolution || "1366x768",
1445
1445
  TD_ANALYTICS: options.analytics !== false,
1446
1446
  TD_PREVIEW: previewMode,