testdriverai 7.9.56-test → 7.9.57-test

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.
@@ -21,7 +21,8 @@
21
21
  "tsx": "^4.19.0",
22
22
  "typescript": "^5.6.0",
23
23
  "vite": "^6.0.0",
24
- "vite-plugin-singlefile": "^2.3.0"
24
+ "vite-plugin-singlefile": "^2.3.0",
25
+ "vitest": "^4.0.18"
25
26
  }
26
27
  },
27
28
  "node_modules/@esbuild/aix-ppc64": {
@@ -478,6 +479,13 @@
478
479
  "hono": "^4"
479
480
  }
480
481
  },
482
+ "node_modules/@jridgewell/sourcemap-codec": {
483
+ "version": "1.5.5",
484
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
485
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
486
+ "dev": true,
487
+ "license": "MIT"
488
+ },
481
489
  "node_modules/@modelcontextprotocol/ext-apps": {
482
490
  "version": "1.0.1",
483
491
  "resolved": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps/-/ext-apps-1.0.1.tgz",
@@ -1693,6 +1701,24 @@
1693
1701
  "@opentelemetry/semantic-conventions": "^1.34.0"
1694
1702
  }
1695
1703
  },
1704
+ "node_modules/@standard-schema/spec": {
1705
+ "version": "1.1.0",
1706
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
1707
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
1708
+ "dev": true,
1709
+ "license": "MIT"
1710
+ },
1711
+ "node_modules/@types/chai": {
1712
+ "version": "5.2.3",
1713
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
1714
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
1715
+ "dev": true,
1716
+ "license": "MIT",
1717
+ "dependencies": {
1718
+ "@types/deep-eql": "*",
1719
+ "assertion-error": "^2.0.1"
1720
+ }
1721
+ },
1696
1722
  "node_modules/@types/connect": {
1697
1723
  "version": "3.4.38",
1698
1724
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@@ -1702,6 +1728,13 @@
1702
1728
  "@types/node": "*"
1703
1729
  }
1704
1730
  },
1731
+ "node_modules/@types/deep-eql": {
1732
+ "version": "4.0.2",
1733
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
1734
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
1735
+ "dev": true,
1736
+ "license": "MIT"
1737
+ },
1705
1738
  "node_modules/@types/estree": {
1706
1739
  "version": "1.0.8",
1707
1740
  "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -1769,6 +1802,119 @@
1769
1802
  "@types/node": "*"
1770
1803
  }
1771
1804
  },
1805
+ "node_modules/@vitest/expect": {
1806
+ "version": "4.1.5",
1807
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz",
1808
+ "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==",
1809
+ "dev": true,
1810
+ "license": "MIT",
1811
+ "dependencies": {
1812
+ "@standard-schema/spec": "^1.1.0",
1813
+ "@types/chai": "^5.2.2",
1814
+ "@vitest/spy": "4.1.5",
1815
+ "@vitest/utils": "4.1.5",
1816
+ "chai": "^6.2.2",
1817
+ "tinyrainbow": "^3.1.0"
1818
+ },
1819
+ "funding": {
1820
+ "url": "https://opencollective.com/vitest"
1821
+ }
1822
+ },
1823
+ "node_modules/@vitest/mocker": {
1824
+ "version": "4.1.5",
1825
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.5.tgz",
1826
+ "integrity": "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==",
1827
+ "dev": true,
1828
+ "license": "MIT",
1829
+ "dependencies": {
1830
+ "@vitest/spy": "4.1.5",
1831
+ "estree-walker": "^3.0.3",
1832
+ "magic-string": "^0.30.21"
1833
+ },
1834
+ "funding": {
1835
+ "url": "https://opencollective.com/vitest"
1836
+ },
1837
+ "peerDependencies": {
1838
+ "msw": "^2.4.9",
1839
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
1840
+ },
1841
+ "peerDependenciesMeta": {
1842
+ "msw": {
1843
+ "optional": true
1844
+ },
1845
+ "vite": {
1846
+ "optional": true
1847
+ }
1848
+ }
1849
+ },
1850
+ "node_modules/@vitest/pretty-format": {
1851
+ "version": "4.1.5",
1852
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz",
1853
+ "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==",
1854
+ "dev": true,
1855
+ "license": "MIT",
1856
+ "dependencies": {
1857
+ "tinyrainbow": "^3.1.0"
1858
+ },
1859
+ "funding": {
1860
+ "url": "https://opencollective.com/vitest"
1861
+ }
1862
+ },
1863
+ "node_modules/@vitest/runner": {
1864
+ "version": "4.1.5",
1865
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.5.tgz",
1866
+ "integrity": "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==",
1867
+ "dev": true,
1868
+ "license": "MIT",
1869
+ "dependencies": {
1870
+ "@vitest/utils": "4.1.5",
1871
+ "pathe": "^2.0.3"
1872
+ },
1873
+ "funding": {
1874
+ "url": "https://opencollective.com/vitest"
1875
+ }
1876
+ },
1877
+ "node_modules/@vitest/snapshot": {
1878
+ "version": "4.1.5",
1879
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.5.tgz",
1880
+ "integrity": "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==",
1881
+ "dev": true,
1882
+ "license": "MIT",
1883
+ "dependencies": {
1884
+ "@vitest/pretty-format": "4.1.5",
1885
+ "@vitest/utils": "4.1.5",
1886
+ "magic-string": "^0.30.21",
1887
+ "pathe": "^2.0.3"
1888
+ },
1889
+ "funding": {
1890
+ "url": "https://opencollective.com/vitest"
1891
+ }
1892
+ },
1893
+ "node_modules/@vitest/spy": {
1894
+ "version": "4.1.5",
1895
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz",
1896
+ "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==",
1897
+ "dev": true,
1898
+ "license": "MIT",
1899
+ "funding": {
1900
+ "url": "https://opencollective.com/vitest"
1901
+ }
1902
+ },
1903
+ "node_modules/@vitest/utils": {
1904
+ "version": "4.1.5",
1905
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz",
1906
+ "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==",
1907
+ "dev": true,
1908
+ "license": "MIT",
1909
+ "dependencies": {
1910
+ "@vitest/pretty-format": "4.1.5",
1911
+ "convert-source-map": "^2.0.0",
1912
+ "tinyrainbow": "^3.1.0"
1913
+ },
1914
+ "funding": {
1915
+ "url": "https://opencollective.com/vitest"
1916
+ }
1917
+ },
1772
1918
  "node_modules/accepts": {
1773
1919
  "version": "2.0.0",
1774
1920
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
@@ -1836,6 +1982,16 @@
1836
1982
  }
1837
1983
  }
1838
1984
  },
1985
+ "node_modules/assertion-error": {
1986
+ "version": "2.0.1",
1987
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
1988
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
1989
+ "dev": true,
1990
+ "license": "MIT",
1991
+ "engines": {
1992
+ "node": ">=12"
1993
+ }
1994
+ },
1839
1995
  "node_modules/balanced-match": {
1840
1996
  "version": "1.0.2",
1841
1997
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1926,6 +2082,16 @@
1926
2082
  "url": "https://github.com/sponsors/ljharb"
1927
2083
  }
1928
2084
  },
2085
+ "node_modules/chai": {
2086
+ "version": "6.2.2",
2087
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
2088
+ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
2089
+ "dev": true,
2090
+ "license": "MIT",
2091
+ "engines": {
2092
+ "node": ">=18"
2093
+ }
2094
+ },
1929
2095
  "node_modules/cjs-module-lexer": {
1930
2096
  "version": "1.4.3",
1931
2097
  "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
@@ -1954,6 +2120,13 @@
1954
2120
  "node": ">= 0.6"
1955
2121
  }
1956
2122
  },
2123
+ "node_modules/convert-source-map": {
2124
+ "version": "2.0.0",
2125
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
2126
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
2127
+ "dev": true,
2128
+ "license": "MIT"
2129
+ },
1957
2130
  "node_modules/cookie": {
1958
2131
  "version": "0.7.2",
1959
2132
  "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
@@ -2095,6 +2268,13 @@
2095
2268
  "node": ">= 0.4"
2096
2269
  }
2097
2270
  },
2271
+ "node_modules/es-module-lexer": {
2272
+ "version": "2.0.0",
2273
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
2274
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
2275
+ "dev": true,
2276
+ "license": "MIT"
2277
+ },
2098
2278
  "node_modules/es-object-atoms": {
2099
2279
  "version": "1.1.1",
2100
2280
  "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
@@ -2155,6 +2335,16 @@
2155
2335
  "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
2156
2336
  "license": "MIT"
2157
2337
  },
2338
+ "node_modules/estree-walker": {
2339
+ "version": "3.0.3",
2340
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
2341
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
2342
+ "dev": true,
2343
+ "license": "MIT",
2344
+ "dependencies": {
2345
+ "@types/estree": "^1.0.0"
2346
+ }
2347
+ },
2158
2348
  "node_modules/etag": {
2159
2349
  "version": "1.8.1",
2160
2350
  "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -2185,6 +2375,16 @@
2185
2375
  "node": ">=18.0.0"
2186
2376
  }
2187
2377
  },
2378
+ "node_modules/expect-type": {
2379
+ "version": "1.3.0",
2380
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
2381
+ "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
2382
+ "dev": true,
2383
+ "license": "Apache-2.0",
2384
+ "engines": {
2385
+ "node": ">=12.0.0"
2386
+ }
2387
+ },
2188
2388
  "node_modules/express": {
2189
2389
  "version": "5.2.1",
2190
2390
  "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
@@ -2582,6 +2782,16 @@
2582
2782
  "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
2583
2783
  "license": "BSD-2-Clause"
2584
2784
  },
2785
+ "node_modules/magic-string": {
2786
+ "version": "0.30.21",
2787
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
2788
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
2789
+ "dev": true,
2790
+ "license": "MIT",
2791
+ "dependencies": {
2792
+ "@jridgewell/sourcemap-codec": "^1.5.5"
2793
+ }
2794
+ },
2585
2795
  "node_modules/math-intrinsics": {
2586
2796
  "version": "1.1.0",
2587
2797
  "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -2740,6 +2950,17 @@
2740
2950
  "url": "https://github.com/sponsors/ljharb"
2741
2951
  }
2742
2952
  },
2953
+ "node_modules/obug": {
2954
+ "version": "2.1.1",
2955
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
2956
+ "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
2957
+ "dev": true,
2958
+ "funding": [
2959
+ "https://github.com/sponsors/sxzz",
2960
+ "https://opencollective.com/debug"
2961
+ ],
2962
+ "license": "MIT"
2963
+ },
2743
2964
  "node_modules/on-finished": {
2744
2965
  "version": "2.4.1",
2745
2966
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -2795,6 +3016,13 @@
2795
3016
  "url": "https://opencollective.com/express"
2796
3017
  }
2797
3018
  },
3019
+ "node_modules/pathe": {
3020
+ "version": "2.0.3",
3021
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
3022
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
3023
+ "dev": true,
3024
+ "license": "MIT"
3025
+ },
2798
3026
  "node_modules/pg-int8": {
2799
3027
  "version": "1.0.1",
2800
3028
  "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
@@ -3257,6 +3485,13 @@
3257
3485
  "url": "https://github.com/sponsors/ljharb"
3258
3486
  }
3259
3487
  },
3488
+ "node_modules/siginfo": {
3489
+ "version": "2.0.0",
3490
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
3491
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
3492
+ "dev": true,
3493
+ "license": "ISC"
3494
+ },
3260
3495
  "node_modules/source-map-js": {
3261
3496
  "version": "1.2.1",
3262
3497
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -3267,6 +3502,13 @@
3267
3502
  "node": ">=0.10.0"
3268
3503
  }
3269
3504
  },
3505
+ "node_modules/stackback": {
3506
+ "version": "0.0.2",
3507
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
3508
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
3509
+ "dev": true,
3510
+ "license": "MIT"
3511
+ },
3270
3512
  "node_modules/statuses": {
3271
3513
  "version": "2.0.2",
3272
3514
  "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
@@ -3276,6 +3518,13 @@
3276
3518
  "node": ">= 0.8"
3277
3519
  }
3278
3520
  },
3521
+ "node_modules/std-env": {
3522
+ "version": "4.1.0",
3523
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
3524
+ "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
3525
+ "dev": true,
3526
+ "license": "MIT"
3527
+ },
3279
3528
  "node_modules/supports-preserve-symlinks-flag": {
3280
3529
  "version": "1.0.0",
3281
3530
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -3288,6 +3537,23 @@
3288
3537
  "url": "https://github.com/sponsors/ljharb"
3289
3538
  }
3290
3539
  },
3540
+ "node_modules/tinybench": {
3541
+ "version": "2.9.0",
3542
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
3543
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
3544
+ "dev": true,
3545
+ "license": "MIT"
3546
+ },
3547
+ "node_modules/tinyexec": {
3548
+ "version": "1.1.1",
3549
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz",
3550
+ "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==",
3551
+ "dev": true,
3552
+ "license": "MIT",
3553
+ "engines": {
3554
+ "node": ">=18"
3555
+ }
3556
+ },
3291
3557
  "node_modules/tinyglobby": {
3292
3558
  "version": "0.2.15",
3293
3559
  "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -3305,6 +3571,16 @@
3305
3571
  "url": "https://github.com/sponsors/SuperchupuDev"
3306
3572
  }
3307
3573
  },
3574
+ "node_modules/tinyrainbow": {
3575
+ "version": "3.1.0",
3576
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
3577
+ "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
3578
+ "dev": true,
3579
+ "license": "MIT",
3580
+ "engines": {
3581
+ "node": ">=14.0.0"
3582
+ }
3583
+ },
3308
3584
  "node_modules/to-regex-range": {
3309
3585
  "version": "5.0.1",
3310
3586
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -3975,6 +4251,96 @@
3975
4251
  "@esbuild/win32-x64": "0.25.12"
3976
4252
  }
3977
4253
  },
4254
+ "node_modules/vitest": {
4255
+ "version": "4.1.5",
4256
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.5.tgz",
4257
+ "integrity": "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==",
4258
+ "dev": true,
4259
+ "license": "MIT",
4260
+ "dependencies": {
4261
+ "@vitest/expect": "4.1.5",
4262
+ "@vitest/mocker": "4.1.5",
4263
+ "@vitest/pretty-format": "4.1.5",
4264
+ "@vitest/runner": "4.1.5",
4265
+ "@vitest/snapshot": "4.1.5",
4266
+ "@vitest/spy": "4.1.5",
4267
+ "@vitest/utils": "4.1.5",
4268
+ "es-module-lexer": "^2.0.0",
4269
+ "expect-type": "^1.3.0",
4270
+ "magic-string": "^0.30.21",
4271
+ "obug": "^2.1.1",
4272
+ "pathe": "^2.0.3",
4273
+ "picomatch": "^4.0.3",
4274
+ "std-env": "^4.0.0-rc.1",
4275
+ "tinybench": "^2.9.0",
4276
+ "tinyexec": "^1.0.2",
4277
+ "tinyglobby": "^0.2.15",
4278
+ "tinyrainbow": "^3.1.0",
4279
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
4280
+ "why-is-node-running": "^2.3.0"
4281
+ },
4282
+ "bin": {
4283
+ "vitest": "vitest.mjs"
4284
+ },
4285
+ "engines": {
4286
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
4287
+ },
4288
+ "funding": {
4289
+ "url": "https://opencollective.com/vitest"
4290
+ },
4291
+ "peerDependencies": {
4292
+ "@edge-runtime/vm": "*",
4293
+ "@opentelemetry/api": "^1.9.0",
4294
+ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
4295
+ "@vitest/browser-playwright": "4.1.5",
4296
+ "@vitest/browser-preview": "4.1.5",
4297
+ "@vitest/browser-webdriverio": "4.1.5",
4298
+ "@vitest/coverage-istanbul": "4.1.5",
4299
+ "@vitest/coverage-v8": "4.1.5",
4300
+ "@vitest/ui": "4.1.5",
4301
+ "happy-dom": "*",
4302
+ "jsdom": "*",
4303
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
4304
+ },
4305
+ "peerDependenciesMeta": {
4306
+ "@edge-runtime/vm": {
4307
+ "optional": true
4308
+ },
4309
+ "@opentelemetry/api": {
4310
+ "optional": true
4311
+ },
4312
+ "@types/node": {
4313
+ "optional": true
4314
+ },
4315
+ "@vitest/browser-playwright": {
4316
+ "optional": true
4317
+ },
4318
+ "@vitest/browser-preview": {
4319
+ "optional": true
4320
+ },
4321
+ "@vitest/browser-webdriverio": {
4322
+ "optional": true
4323
+ },
4324
+ "@vitest/coverage-istanbul": {
4325
+ "optional": true
4326
+ },
4327
+ "@vitest/coverage-v8": {
4328
+ "optional": true
4329
+ },
4330
+ "@vitest/ui": {
4331
+ "optional": true
4332
+ },
4333
+ "happy-dom": {
4334
+ "optional": true
4335
+ },
4336
+ "jsdom": {
4337
+ "optional": true
4338
+ },
4339
+ "vite": {
4340
+ "optional": false
4341
+ }
4342
+ }
4343
+ },
3978
4344
  "node_modules/which": {
3979
4345
  "version": "2.0.2",
3980
4346
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3990,6 +4356,23 @@
3990
4356
  "node": ">= 8"
3991
4357
  }
3992
4358
  },
4359
+ "node_modules/why-is-node-running": {
4360
+ "version": "2.3.0",
4361
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
4362
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
4363
+ "dev": true,
4364
+ "license": "MIT",
4365
+ "dependencies": {
4366
+ "siginfo": "^2.0.0",
4367
+ "stackback": "0.0.2"
4368
+ },
4369
+ "bin": {
4370
+ "why-is-node-running": "cli.js"
4371
+ },
4372
+ "engines": {
4373
+ "node": ">=8"
4374
+ }
4375
+ },
3993
4376
  "node_modules/wrappy": {
3994
4377
  "version": "1.0.2",
3995
4378
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -10,7 +10,8 @@
10
10
  "build:ui": "cross-env INPUT=mcp-app.html vite build",
11
11
  "dev": "tsx watch src/server.ts",
12
12
  "serve": "tsx src/server.ts",
13
- "start": "node dist/server.js"
13
+ "start": "node dist/server.js",
14
+ "test": "vitest run"
14
15
  },
15
16
  "dependencies": {
16
17
  "@modelcontextprotocol/ext-apps": "^1.0.0",
@@ -26,6 +27,7 @@
26
27
  "tsx": "^4.19.0",
27
28
  "typescript": "^5.6.0",
28
29
  "vite": "^6.0.0",
29
- "vite-plugin-singlefile": "^2.3.0"
30
+ "vite-plugin-singlefile": "^2.3.0",
31
+ "vitest": "^4.0.18"
30
32
  }
31
33
  }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Unit tests for env-utils.ts
3
+ *
4
+ * Verifies that the OS and E2B template ID resolution helpers apply the
5
+ * correct priority order:
6
+ * explicit param > environment variable > built-in default
7
+ */
8
+
9
+ import { describe, it, expect } from "vitest";
10
+ import { resolveOs, resolveE2bTemplateId } from "./env-utils.js";
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // resolveOs
14
+ // ---------------------------------------------------------------------------
15
+
16
+ describe("resolveOs", () => {
17
+ it("returns the explicit param when provided", () => {
18
+ const { os } = resolveOs("windows", { TD_OS: "linux" });
19
+ expect(os).toBe("windows");
20
+ });
21
+
22
+ it("falls back to TD_OS env var when no explicit param is given", () => {
23
+ const { os } = resolveOs(undefined, { TD_OS: "windows" });
24
+ expect(os).toBe("windows");
25
+ });
26
+
27
+ it("defaults to linux when neither param nor TD_OS is set", () => {
28
+ const { os } = resolveOs(undefined, {});
29
+ expect(os).toBe("linux");
30
+ });
31
+
32
+ it("returns linux and a warning when TD_OS has an unsupported value", () => {
33
+ const { os, warning } = resolveOs(undefined, { TD_OS: "mac" });
34
+ expect(os).toBe("linux");
35
+ expect(warning).toMatch(/unsupported/i);
36
+ expect(warning).toContain("mac");
37
+ });
38
+
39
+ it("returns linux and a warning when TD_OS is 'Linux' (wrong case)", () => {
40
+ const { os, warning } = resolveOs(undefined, { TD_OS: "Linux" });
41
+ expect(os).toBe("linux");
42
+ expect(warning).toBeDefined();
43
+ });
44
+
45
+ it("explicit param takes priority over TD_OS env var", () => {
46
+ const { os, warning } = resolveOs("linux", { TD_OS: "windows" });
47
+ expect(os).toBe("linux");
48
+ expect(warning).toBeUndefined();
49
+ });
50
+
51
+ it("returns no warning when TD_OS is valid", () => {
52
+ const { os, warning } = resolveOs(undefined, { TD_OS: "windows" });
53
+ expect(os).toBe("windows");
54
+ expect(warning).toBeUndefined();
55
+ });
56
+ });
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // resolveE2bTemplateId
60
+ // ---------------------------------------------------------------------------
61
+
62
+ describe("resolveE2bTemplateId", () => {
63
+ it("returns the explicit param when provided", () => {
64
+ const id = resolveE2bTemplateId("explicit-id", { TD_E2B_TEMPLATE_ID: "env-id" });
65
+ expect(id).toBe("explicit-id");
66
+ });
67
+
68
+ it("falls back to TD_E2B_TEMPLATE_ID env var when no explicit param is given", () => {
69
+ const id = resolveE2bTemplateId(undefined, { TD_E2B_TEMPLATE_ID: "env-id" });
70
+ expect(id).toBe("env-id");
71
+ });
72
+
73
+ it("returns undefined when neither param nor TD_E2B_TEMPLATE_ID is set", () => {
74
+ const id = resolveE2bTemplateId(undefined, {});
75
+ expect(id).toBeUndefined();
76
+ });
77
+
78
+ it("explicit param takes priority over TD_E2B_TEMPLATE_ID env var", () => {
79
+ const id = resolveE2bTemplateId("my-template", { TD_E2B_TEMPLATE_ID: "other-template" });
80
+ expect(id).toBe("my-template");
81
+ });
82
+ });