tabwright 1.0.0 → 1.0.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.
Files changed (562) hide show
  1. package/dist/aria-snapshot.d.ts +0 -1
  2. package/dist/aria-snapshot.js +9 -1
  3. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +0 -1
  4. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +0 -1
  5. package/dist/bippy.js +1 -1
  6. package/dist/browser-config.d.ts +0 -1
  7. package/dist/browser-config.js +0 -1
  8. package/dist/browser-install.d.ts +0 -1
  9. package/dist/browser-install.js +0 -1
  10. package/dist/browser-launch.d.ts +0 -1
  11. package/dist/browser-launch.js +0 -1
  12. package/dist/builtin-capabilities.d.ts +0 -1
  13. package/dist/builtin-capabilities.js +0 -1
  14. package/dist/capability-agent-skill.d.ts +0 -1
  15. package/dist/capability-agent-skill.js +0 -1
  16. package/dist/capability-auth-state.d.ts +0 -1
  17. package/dist/capability-auth-state.js +0 -1
  18. package/dist/capability-auth.d.ts +0 -1
  19. package/dist/capability-auth.js +0 -1
  20. package/dist/capability-options.d.ts +0 -1
  21. package/dist/capability-options.js +0 -1
  22. package/dist/capability-package.d.ts +0 -1
  23. package/dist/capability-package.js +0 -1
  24. package/dist/capability-registry.d.ts +0 -1
  25. package/dist/capability-registry.js +0 -1
  26. package/dist/capability-runner.d.ts +0 -1
  27. package/dist/capability-runner.js +0 -1
  28. package/dist/capability-studio.d.ts +0 -1
  29. package/dist/capability-studio.js +0 -1
  30. package/dist/cdp-log.d.ts +0 -1
  31. package/dist/cdp-log.js +0 -1
  32. package/dist/cdp-relay.d.ts +0 -1
  33. package/dist/cdp-relay.js +0 -1
  34. package/dist/cdp-session.d.ts +0 -1
  35. package/dist/cdp-session.js +0 -1
  36. package/dist/cdp-types.d.ts +0 -1
  37. package/dist/cdp-types.js +0 -1
  38. package/dist/chrome-discovery.d.ts +0 -1
  39. package/dist/chrome-discovery.js +0 -1
  40. package/dist/clean-html.d.ts +0 -1
  41. package/dist/clean-html.js +0 -1
  42. package/dist/cli.d.ts +0 -1
  43. package/dist/cli.js +9 -2
  44. package/dist/cloud-client.d.ts +0 -1
  45. package/dist/cloud-client.js +0 -1
  46. package/dist/create-logger.d.ts +0 -1
  47. package/dist/create-logger.js +0 -1
  48. package/dist/debugger-examples-types.d.ts +0 -1
  49. package/dist/debugger-examples-types.js +0 -1
  50. package/dist/debugger-examples.d.ts +0 -1
  51. package/dist/debugger-examples.js +0 -1
  52. package/dist/debugger.d.ts +0 -1
  53. package/dist/debugger.js +0 -1
  54. package/dist/diff-utils.d.ts +0 -1
  55. package/dist/diff-utils.js +0 -1
  56. package/dist/doctor.d.ts +0 -1
  57. package/dist/doctor.js +5 -7
  58. package/dist/editor-examples.d.ts +0 -1
  59. package/dist/editor-examples.js +0 -1
  60. package/dist/editor.d.ts +0 -1
  61. package/dist/editor.js +0 -1
  62. package/dist/env-compat.d.ts +0 -1
  63. package/dist/env-compat.js +0 -1
  64. package/dist/executor.d.ts +0 -1
  65. package/dist/executor.js +1 -2
  66. package/dist/extension/background.js +7 -3
  67. package/dist/extension/manifest.json +1 -1
  68. package/dist/ghost-browser.d.ts +0 -1
  69. package/dist/ghost-browser.js +0 -1
  70. package/dist/ghost-cursor-controller.d.ts +0 -1
  71. package/dist/ghost-cursor-controller.js +0 -1
  72. package/dist/ghost-cursor.d.ts +0 -1
  73. package/dist/ghost-cursor.js +0 -1
  74. package/dist/htmlrewrite.d.ts +0 -1
  75. package/dist/htmlrewrite.js +0 -1
  76. package/dist/index.d.ts +0 -1
  77. package/dist/index.js +0 -1
  78. package/dist/kill-port.d.ts +0 -1
  79. package/dist/kill-port.js +0 -1
  80. package/dist/kitty-graphics.d.ts +0 -1
  81. package/dist/kitty-graphics.js +0 -1
  82. package/dist/mcp.d.ts +0 -1
  83. package/dist/mcp.js +0 -1
  84. package/dist/package-paths.d.ts +0 -1
  85. package/dist/package-paths.js +0 -1
  86. package/dist/page-markdown.d.ts +0 -1
  87. package/dist/page-markdown.js +0 -1
  88. package/dist/performance-examples.d.ts +0 -1
  89. package/dist/performance-examples.js +0 -1
  90. package/dist/playwright-import.d.ts +0 -1
  91. package/dist/playwright-import.js +0 -1
  92. package/dist/product-paths.d.ts +0 -1
  93. package/dist/product-paths.js +0 -1
  94. package/dist/protocol.d.ts +0 -1
  95. package/dist/protocol.js +0 -1
  96. package/dist/react-source.d.ts +0 -1
  97. package/dist/react-source.js +0 -1
  98. package/dist/readability.js +1 -1
  99. package/dist/relay-client.d.ts +0 -1
  100. package/dist/relay-client.js +0 -1
  101. package/dist/relay-state.d.ts +0 -1
  102. package/dist/relay-state.js +0 -1
  103. package/dist/replay-ai-index.d.ts +0 -1
  104. package/dist/replay-ai-index.js +0 -1
  105. package/dist/replay-eval.d.ts +0 -1
  106. package/dist/replay-eval.js +0 -1
  107. package/dist/replay-handoff.d.ts +0 -1
  108. package/dist/replay-handoff.js +0 -1
  109. package/dist/replay-workflow-compiler.d.ts +0 -1
  110. package/dist/replay-workflow-compiler.js +0 -1
  111. package/dist/rrweb-recording-relay.d.ts +0 -1
  112. package/dist/rrweb-recording-relay.js +0 -1
  113. package/dist/rrweb-recording.d.ts +0 -1
  114. package/dist/rrweb-recording.js +0 -1
  115. package/dist/scoped-fs.d.ts +0 -1
  116. package/dist/scoped-fs.js +0 -1
  117. package/dist/selector-generator.js +1 -1
  118. package/dist/start-relay-server.d.ts +0 -1
  119. package/dist/start-relay-server.js +0 -1
  120. package/dist/styles-examples.d.ts +0 -1
  121. package/dist/styles-examples.js +0 -1
  122. package/dist/styles.d.ts +0 -1
  123. package/dist/styles.js +0 -1
  124. package/dist/tabwright-agent-skill.d.ts +0 -1
  125. package/dist/tabwright-agent-skill.js +0 -1
  126. package/dist/test-declarations.d.ts +0 -1
  127. package/dist/test-declarations.js +0 -1
  128. package/dist/utils.d.ts +0 -1
  129. package/dist/utils.js +2 -2
  130. package/dist/wait-for-page-load.d.ts +0 -1
  131. package/dist/wait-for-page-load.js +0 -1
  132. package/dist/workflow-capability.d.ts +0 -1
  133. package/dist/workflow-capability.js +0 -1
  134. package/package.json +9 -4
  135. package/readme.md +35 -0
  136. package/dist/aria-snapshot.d.ts.map +0 -1
  137. package/dist/aria-snapshot.js.map +0 -1
  138. package/dist/aria-snapshot.test.d.ts +0 -2
  139. package/dist/aria-snapshot.test.d.ts.map +0 -1
  140. package/dist/aria-snapshot.test.js +0 -270
  141. package/dist/aria-snapshot.test.js.map +0 -1
  142. package/dist/aria-snapshot.unit.test.d.ts +0 -2
  143. package/dist/aria-snapshot.unit.test.d.ts.map +0 -1
  144. package/dist/aria-snapshot.unit.test.js +0 -542
  145. package/dist/aria-snapshot.unit.test.js.map +0 -1
  146. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +0 -1
  147. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +0 -1
  148. package/dist/browser-config.d.ts.map +0 -1
  149. package/dist/browser-config.js.map +0 -1
  150. package/dist/browser-install.d.ts.map +0 -1
  151. package/dist/browser-install.js.map +0 -1
  152. package/dist/browser-launch.d.ts.map +0 -1
  153. package/dist/browser-launch.js.map +0 -1
  154. package/dist/builtin-capabilities.d.ts.map +0 -1
  155. package/dist/builtin-capabilities.js.map +0 -1
  156. package/dist/capability-agent-skill.d.ts.map +0 -1
  157. package/dist/capability-agent-skill.js.map +0 -1
  158. package/dist/capability-auth-state.d.ts.map +0 -1
  159. package/dist/capability-auth-state.js.map +0 -1
  160. package/dist/capability-auth.d.ts.map +0 -1
  161. package/dist/capability-auth.js.map +0 -1
  162. package/dist/capability-cli-confirmation.test.d.ts +0 -2
  163. package/dist/capability-cli-confirmation.test.d.ts.map +0 -1
  164. package/dist/capability-cli-confirmation.test.js +0 -79
  165. package/dist/capability-cli-confirmation.test.js.map +0 -1
  166. package/dist/capability-options.d.ts.map +0 -1
  167. package/dist/capability-options.js.map +0 -1
  168. package/dist/capability-options.test.d.ts +0 -2
  169. package/dist/capability-options.test.d.ts.map +0 -1
  170. package/dist/capability-options.test.js +0 -81
  171. package/dist/capability-options.test.js.map +0 -1
  172. package/dist/capability-package.d.ts.map +0 -1
  173. package/dist/capability-package.js.map +0 -1
  174. package/dist/capability-package.test.d.ts +0 -2
  175. package/dist/capability-package.test.d.ts.map +0 -1
  176. package/dist/capability-package.test.js +0 -179
  177. package/dist/capability-package.test.js.map +0 -1
  178. package/dist/capability-registry.d.ts.map +0 -1
  179. package/dist/capability-registry.js.map +0 -1
  180. package/dist/capability-registry.test.d.ts +0 -2
  181. package/dist/capability-registry.test.d.ts.map +0 -1
  182. package/dist/capability-registry.test.js +0 -1683
  183. package/dist/capability-registry.test.js.map +0 -1
  184. package/dist/capability-runner.d.ts.map +0 -1
  185. package/dist/capability-runner.js.map +0 -1
  186. package/dist/capability-search-relevance.test.d.ts +0 -2
  187. package/dist/capability-search-relevance.test.d.ts.map +0 -1
  188. package/dist/capability-search-relevance.test.js +0 -67
  189. package/dist/capability-search-relevance.test.js.map +0 -1
  190. package/dist/capability-studio.d.ts.map +0 -1
  191. package/dist/capability-studio.js.map +0 -1
  192. package/dist/capability-studio.test.d.ts +0 -2
  193. package/dist/capability-studio.test.d.ts.map +0 -1
  194. package/dist/capability-studio.test.js +0 -41
  195. package/dist/capability-studio.test.js.map +0 -1
  196. package/dist/cdp-log.d.ts.map +0 -1
  197. package/dist/cdp-log.js.map +0 -1
  198. package/dist/cdp-log.test.d.ts +0 -2
  199. package/dist/cdp-log.test.d.ts.map +0 -1
  200. package/dist/cdp-log.test.js +0 -109
  201. package/dist/cdp-log.test.js.map +0 -1
  202. package/dist/cdp-relay.d.ts.map +0 -1
  203. package/dist/cdp-relay.js.map +0 -1
  204. package/dist/cdp-session.d.ts.map +0 -1
  205. package/dist/cdp-session.js.map +0 -1
  206. package/dist/cdp-types.d.ts.map +0 -1
  207. package/dist/cdp-types.js.map +0 -1
  208. package/dist/channel-owner-inspect.test.d.ts +0 -2
  209. package/dist/channel-owner-inspect.test.d.ts.map +0 -1
  210. package/dist/channel-owner-inspect.test.js +0 -75
  211. package/dist/channel-owner-inspect.test.js.map +0 -1
  212. package/dist/chrome-discovery.d.ts.map +0 -1
  213. package/dist/chrome-discovery.js.map +0 -1
  214. package/dist/chrome-discovery.test.d.ts +0 -2
  215. package/dist/chrome-discovery.test.d.ts.map +0 -1
  216. package/dist/chrome-discovery.test.js +0 -41
  217. package/dist/chrome-discovery.test.js.map +0 -1
  218. package/dist/clean-html.d.ts.map +0 -1
  219. package/dist/clean-html.js.map +0 -1
  220. package/dist/cli-help.test.d.ts +0 -2
  221. package/dist/cli-help.test.d.ts.map +0 -1
  222. package/dist/cli-help.test.js +0 -98
  223. package/dist/cli-help.test.js.map +0 -1
  224. package/dist/cli.d.ts.map +0 -1
  225. package/dist/cli.js.map +0 -1
  226. package/dist/cloud-client.d.ts.map +0 -1
  227. package/dist/cloud-client.js.map +0 -1
  228. package/dist/create-logger.d.ts.map +0 -1
  229. package/dist/create-logger.js.map +0 -1
  230. package/dist/debugger-examples-types.d.ts.map +0 -1
  231. package/dist/debugger-examples-types.js.map +0 -1
  232. package/dist/debugger-examples.d.ts.map +0 -1
  233. package/dist/debugger-examples.js.map +0 -1
  234. package/dist/debugger.d.ts.map +0 -1
  235. package/dist/debugger.js.map +0 -1
  236. package/dist/diff-utils.d.ts.map +0 -1
  237. package/dist/diff-utils.js.map +0 -1
  238. package/dist/diff-utils.test.d.ts +0 -2
  239. package/dist/diff-utils.test.d.ts.map +0 -1
  240. package/dist/diff-utils.test.js +0 -137
  241. package/dist/diff-utils.test.js.map +0 -1
  242. package/dist/doctor.d.ts.map +0 -1
  243. package/dist/doctor.js.map +0 -1
  244. package/dist/doctor.test.d.ts +0 -2
  245. package/dist/doctor.test.d.ts.map +0 -1
  246. package/dist/doctor.test.js +0 -208
  247. package/dist/doctor.test.js.map +0 -1
  248. package/dist/editor-examples.d.ts.map +0 -1
  249. package/dist/editor-examples.js.map +0 -1
  250. package/dist/editor.d.ts.map +0 -1
  251. package/dist/editor.js.map +0 -1
  252. package/dist/env-compat.d.ts.map +0 -1
  253. package/dist/env-compat.js.map +0 -1
  254. package/dist/executor.d.ts.map +0 -1
  255. package/dist/executor.js.map +0 -1
  256. package/dist/executor.unit.test.d.ts +0 -2
  257. package/dist/executor.unit.test.d.ts.map +0 -1
  258. package/dist/executor.unit.test.js +0 -143
  259. package/dist/executor.unit.test.js.map +0 -1
  260. package/dist/extension-connection.test.d.ts +0 -2
  261. package/dist/extension-connection.test.d.ts.map +0 -1
  262. package/dist/extension-connection.test.js +0 -708
  263. package/dist/extension-connection.test.js.map +0 -1
  264. package/dist/extension-icon-warning.test.d.ts +0 -2
  265. package/dist/extension-icon-warning.test.d.ts.map +0 -1
  266. package/dist/extension-icon-warning.test.js +0 -33
  267. package/dist/extension-icon-warning.test.js.map +0 -1
  268. package/dist/ghost-browser.d.ts.map +0 -1
  269. package/dist/ghost-browser.js.map +0 -1
  270. package/dist/ghost-cursor-controller.d.ts.map +0 -1
  271. package/dist/ghost-cursor-controller.js.map +0 -1
  272. package/dist/ghost-cursor.d.ts.map +0 -1
  273. package/dist/ghost-cursor.js.map +0 -1
  274. package/dist/htmlrewrite.d.ts.map +0 -1
  275. package/dist/htmlrewrite.js.map +0 -1
  276. package/dist/htmlrewrite.test.d.ts +0 -2
  277. package/dist/htmlrewrite.test.d.ts.map +0 -1
  278. package/dist/htmlrewrite.test.js +0 -7975
  279. package/dist/htmlrewrite.test.js.map +0 -1
  280. package/dist/index.d.ts.map +0 -1
  281. package/dist/index.js.map +0 -1
  282. package/dist/kill-port.d.ts.map +0 -1
  283. package/dist/kill-port.js.map +0 -1
  284. package/dist/kitty-graphics.d.ts.map +0 -1
  285. package/dist/kitty-graphics.js.map +0 -1
  286. package/dist/kitty-graphics.test.d.ts +0 -2
  287. package/dist/kitty-graphics.test.d.ts.map +0 -1
  288. package/dist/kitty-graphics.test.js +0 -125
  289. package/dist/kitty-graphics.test.js.map +0 -1
  290. package/dist/locator-selector.test.d.ts +0 -2
  291. package/dist/locator-selector.test.d.ts.map +0 -1
  292. package/dist/locator-selector.test.js +0 -98
  293. package/dist/locator-selector.test.js.map +0 -1
  294. package/dist/mcp-client.d.ts +0 -20
  295. package/dist/mcp-client.d.ts.map +0 -1
  296. package/dist/mcp-client.js +0 -56
  297. package/dist/mcp-client.js.map +0 -1
  298. package/dist/mcp.d.ts.map +0 -1
  299. package/dist/mcp.js.map +0 -1
  300. package/dist/on-mouse-action.test.d.ts +0 -2
  301. package/dist/on-mouse-action.test.d.ts.map +0 -1
  302. package/dist/on-mouse-action.test.js +0 -180
  303. package/dist/on-mouse-action.test.js.map +0 -1
  304. package/dist/options-page.test.d.ts +0 -2
  305. package/dist/options-page.test.d.ts.map +0 -1
  306. package/dist/options-page.test.js +0 -773
  307. package/dist/options-page.test.js.map +0 -1
  308. package/dist/package-paths.d.ts.map +0 -1
  309. package/dist/package-paths.js.map +0 -1
  310. package/dist/page-markdown.d.ts.map +0 -1
  311. package/dist/page-markdown.js.map +0 -1
  312. package/dist/performance-examples.d.ts.map +0 -1
  313. package/dist/performance-examples.js.map +0 -1
  314. package/dist/playwright-import.d.ts.map +0 -1
  315. package/dist/playwright-import.js.map +0 -1
  316. package/dist/popup-relocation.test.d.ts +0 -7
  317. package/dist/popup-relocation.test.d.ts.map +0 -1
  318. package/dist/popup-relocation.test.js +0 -139
  319. package/dist/popup-relocation.test.js.map +0 -1
  320. package/dist/product-paths.d.ts.map +0 -1
  321. package/dist/product-paths.js.map +0 -1
  322. package/dist/product-paths.test.d.ts +0 -2
  323. package/dist/product-paths.test.d.ts.map +0 -1
  324. package/dist/product-paths.test.js +0 -39
  325. package/dist/product-paths.test.js.map +0 -1
  326. package/dist/protocol.d.ts.map +0 -1
  327. package/dist/protocol.js.map +0 -1
  328. package/dist/protocol.test.d.ts +0 -2
  329. package/dist/protocol.test.d.ts.map +0 -1
  330. package/dist/protocol.test.js +0 -31
  331. package/dist/protocol.test.js.map +0 -1
  332. package/dist/react-source.d.ts.map +0 -1
  333. package/dist/react-source.js.map +0 -1
  334. package/dist/relay-client.d.ts.map +0 -1
  335. package/dist/relay-client.js.map +0 -1
  336. package/dist/relay-client.test.d.ts +0 -2
  337. package/dist/relay-client.test.d.ts.map +0 -1
  338. package/dist/relay-client.test.js +0 -305
  339. package/dist/relay-client.test.js.map +0 -1
  340. package/dist/relay-core.test.d.ts +0 -2
  341. package/dist/relay-core.test.d.ts.map +0 -1
  342. package/dist/relay-core.test.js +0 -1427
  343. package/dist/relay-core.test.js.map +0 -1
  344. package/dist/relay-navigation.test.d.ts +0 -2
  345. package/dist/relay-navigation.test.d.ts.map +0 -1
  346. package/dist/relay-navigation.test.js +0 -661
  347. package/dist/relay-navigation.test.js.map +0 -1
  348. package/dist/relay-session.test.d.ts +0 -2
  349. package/dist/relay-session.test.d.ts.map +0 -1
  350. package/dist/relay-session.test.js +0 -1121
  351. package/dist/relay-session.test.js.map +0 -1
  352. package/dist/relay-state.d.ts.map +0 -1
  353. package/dist/relay-state.js.map +0 -1
  354. package/dist/relay-state.test.d.ts +0 -2
  355. package/dist/relay-state.test.d.ts.map +0 -1
  356. package/dist/relay-state.test.js +0 -594
  357. package/dist/relay-state.test.js.map +0 -1
  358. package/dist/replay-ai-index.d.ts.map +0 -1
  359. package/dist/replay-ai-index.js.map +0 -1
  360. package/dist/replay-ai-index.test.d.ts +0 -2
  361. package/dist/replay-ai-index.test.d.ts.map +0 -1
  362. package/dist/replay-ai-index.test.js +0 -255
  363. package/dist/replay-ai-index.test.js.map +0 -1
  364. package/dist/replay-cli.test.d.ts +0 -2
  365. package/dist/replay-cli.test.d.ts.map +0 -1
  366. package/dist/replay-cli.test.js +0 -275
  367. package/dist/replay-cli.test.js.map +0 -1
  368. package/dist/replay-eval.d.ts.map +0 -1
  369. package/dist/replay-eval.js.map +0 -1
  370. package/dist/replay-handoff.d.ts.map +0 -1
  371. package/dist/replay-handoff.js.map +0 -1
  372. package/dist/replay-handoff.test.d.ts +0 -2
  373. package/dist/replay-handoff.test.d.ts.map +0 -1
  374. package/dist/replay-handoff.test.js +0 -123
  375. package/dist/replay-handoff.test.js.map +0 -1
  376. package/dist/replay-workflow-compiler.d.ts.map +0 -1
  377. package/dist/replay-workflow-compiler.js.map +0 -1
  378. package/dist/replay-workflow-compiler.test.d.ts +0 -2
  379. package/dist/replay-workflow-compiler.test.d.ts.map +0 -1
  380. package/dist/replay-workflow-compiler.test.js +0 -223
  381. package/dist/replay-workflow-compiler.test.js.map +0 -1
  382. package/dist/rrweb-recording-relay.d.ts.map +0 -1
  383. package/dist/rrweb-recording-relay.js.map +0 -1
  384. package/dist/rrweb-recording-relay.test.d.ts +0 -2
  385. package/dist/rrweb-recording-relay.test.d.ts.map +0 -1
  386. package/dist/rrweb-recording-relay.test.js +0 -85
  387. package/dist/rrweb-recording-relay.test.js.map +0 -1
  388. package/dist/rrweb-recording.d.ts.map +0 -1
  389. package/dist/rrweb-recording.js.map +0 -1
  390. package/dist/scoped-fs.d.ts.map +0 -1
  391. package/dist/scoped-fs.js.map +0 -1
  392. package/dist/scoped-fs.test.d.ts +0 -5
  393. package/dist/scoped-fs.test.d.ts.map +0 -1
  394. package/dist/scoped-fs.test.js +0 -73
  395. package/dist/scoped-fs.test.js.map +0 -1
  396. package/dist/skill-stub.test.d.ts +0 -2
  397. package/dist/skill-stub.test.d.ts.map +0 -1
  398. package/dist/skill-stub.test.js +0 -22
  399. package/dist/skill-stub.test.js.map +0 -1
  400. package/dist/snapshot-tools.test.d.ts +0 -2
  401. package/dist/snapshot-tools.test.d.ts.map +0 -1
  402. package/dist/snapshot-tools.test.js +0 -856
  403. package/dist/snapshot-tools.test.js.map +0 -1
  404. package/dist/start-relay-server.d.ts.map +0 -1
  405. package/dist/start-relay-server.js.map +0 -1
  406. package/dist/styles-examples.d.ts.map +0 -1
  407. package/dist/styles-examples.js.map +0 -1
  408. package/dist/styles.d.ts.map +0 -1
  409. package/dist/styles.js.map +0 -1
  410. package/dist/tabwright-agent-skill.d.ts.map +0 -1
  411. package/dist/tabwright-agent-skill.js.map +0 -1
  412. package/dist/tabwright-agent-skill.test.d.ts +0 -2
  413. package/dist/tabwright-agent-skill.test.d.ts.map +0 -1
  414. package/dist/tabwright-agent-skill.test.js +0 -51
  415. package/dist/tabwright-agent-skill.test.js.map +0 -1
  416. package/dist/test-declarations.d.ts.map +0 -1
  417. package/dist/test-declarations.js.map +0 -1
  418. package/dist/test-utils.d.ts +0 -69
  419. package/dist/test-utils.d.ts.map +0 -1
  420. package/dist/test-utils.js +0 -448
  421. package/dist/test-utils.js.map +0 -1
  422. package/dist/test-utils.test.d.ts +0 -2
  423. package/dist/test-utils.test.d.ts.map +0 -1
  424. package/dist/test-utils.test.js +0 -55
  425. package/dist/test-utils.test.js.map +0 -1
  426. package/dist/utils.d.ts.map +0 -1
  427. package/dist/utils.js.map +0 -1
  428. package/dist/wait-for-page-load.d.ts.map +0 -1
  429. package/dist/wait-for-page-load.js.map +0 -1
  430. package/dist/workflow-capability.d.ts.map +0 -1
  431. package/dist/workflow-capability.js.map +0 -1
  432. package/dist/workflow-script-flow.test.d.ts +0 -2
  433. package/dist/workflow-script-flow.test.d.ts.map +0 -1
  434. package/dist/workflow-script-flow.test.js +0 -285
  435. package/dist/workflow-script-flow.test.js.map +0 -1
  436. package/src/__snapshots__/x.com.processed.html +0 -1003
  437. package/src/__snapshots__/x.com.processed.withStyles.html +0 -2720
  438. package/src/a11y-client.ts +0 -241
  439. package/src/aria-snapshot.test.ts +0 -311
  440. package/src/aria-snapshot.ts +0 -1681
  441. package/src/aria-snapshot.unit.test.ts +0 -615
  442. package/src/aria-snapshots/github-interactive.txt +0 -193
  443. package/src/aria-snapshots/github-raw.txt +0 -309
  444. package/src/aria-snapshots/hackernews-interactive.txt +0 -477
  445. package/src/aria-snapshots/hackernews-raw.txt +0 -428
  446. package/src/aria-snapshots/prosemirror-interactive.txt +0 -66
  447. package/src/aria-snapshots/prosemirror-raw.txt +0 -145
  448. package/src/assets/aria-labels-hacker-news.png +0 -0
  449. package/src/assets/aria-labels-old-reddit.png +0 -0
  450. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +0 -5
  451. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +0 -18
  452. package/src/assets/x.com.html +0 -32946
  453. package/src/browser-config.ts +0 -179
  454. package/src/browser-install.ts +0 -284
  455. package/src/browser-launch.ts +0 -75
  456. package/src/builtin-capabilities.ts +0 -2765
  457. package/src/capability-agent-skill.ts +0 -305
  458. package/src/capability-auth-state.ts +0 -197
  459. package/src/capability-auth.ts +0 -249
  460. package/src/capability-cli-confirmation.test.ts +0 -90
  461. package/src/capability-options.test.ts +0 -89
  462. package/src/capability-options.ts +0 -57
  463. package/src/capability-package.test.ts +0 -204
  464. package/src/capability-package.ts +0 -555
  465. package/src/capability-registry.test.ts +0 -1905
  466. package/src/capability-registry.ts +0 -1234
  467. package/src/capability-runner.ts +0 -801
  468. package/src/capability-search-relevance.test.ts +0 -73
  469. package/src/capability-studio.test.ts +0 -45
  470. package/src/capability-studio.ts +0 -641
  471. package/src/cdp-log.test.ts +0 -131
  472. package/src/cdp-log.ts +0 -112
  473. package/src/cdp-relay.ts +0 -2944
  474. package/src/cdp-session.ts +0 -77
  475. package/src/cdp-types.ts +0 -158
  476. package/src/channel-owner-inspect.test.ts +0 -94
  477. package/src/chrome-discovery.test.ts +0 -50
  478. package/src/chrome-discovery.ts +0 -220
  479. package/src/clean-html.ts +0 -141
  480. package/src/cli-help.test.ts +0 -123
  481. package/src/cli.ts +0 -3181
  482. package/src/cloud-client.ts +0 -179
  483. package/src/create-logger.ts +0 -38
  484. package/src/debugger-examples-types.ts +0 -16
  485. package/src/debugger-examples.ts +0 -66
  486. package/src/debugger.ts +0 -708
  487. package/src/diff-utils.test.ts +0 -152
  488. package/src/diff-utils.ts +0 -70
  489. package/src/doctor.test.ts +0 -244
  490. package/src/doctor.ts +0 -321
  491. package/src/editor-examples.ts +0 -158
  492. package/src/editor.ts +0 -426
  493. package/src/env-compat.ts +0 -28
  494. package/src/executor.ts +0 -1824
  495. package/src/executor.unit.test.ts +0 -168
  496. package/src/extension-connection.test.ts +0 -855
  497. package/src/extension-icon-warning.test.ts +0 -45
  498. package/src/ghost-browser.ts +0 -149
  499. package/src/ghost-cursor-client.ts +0 -494
  500. package/src/ghost-cursor-controller.ts +0 -129
  501. package/src/ghost-cursor.ts +0 -123
  502. package/src/htmlrewrite.test.ts +0 -8008
  503. package/src/htmlrewrite.ts +0 -390
  504. package/src/index.ts +0 -53
  505. package/src/kill-port.ts +0 -219
  506. package/src/kitty-graphics.test.ts +0 -139
  507. package/src/kitty-graphics.ts +0 -79
  508. package/src/locator-selector.test.ts +0 -119
  509. package/src/mcp-client.ts +0 -78
  510. package/src/mcp.ts +0 -629
  511. package/src/on-mouse-action.test.ts +0 -226
  512. package/src/options-page.test.ts +0 -839
  513. package/src/package-paths.ts +0 -38
  514. package/src/page-markdown.ts +0 -240
  515. package/src/performance-examples.ts +0 -186
  516. package/src/playwright-import.ts +0 -59
  517. package/src/popup-relocation.test.ts +0 -163
  518. package/src/product-paths.test.ts +0 -47
  519. package/src/product-paths.ts +0 -28
  520. package/src/protocol.test.ts +0 -52
  521. package/src/protocol.ts +0 -351
  522. package/src/react-source.ts +0 -379
  523. package/src/relay-client.test.ts +0 -375
  524. package/src/relay-client.ts +0 -572
  525. package/src/relay-core.test.ts +0 -1603
  526. package/src/relay-navigation.test.ts +0 -790
  527. package/src/relay-session.test.ts +0 -1375
  528. package/src/relay-state.test.ts +0 -729
  529. package/src/relay-state.ts +0 -561
  530. package/src/replay-ai-index.test.ts +0 -278
  531. package/src/replay-ai-index.ts +0 -872
  532. package/src/replay-cli.test.ts +0 -325
  533. package/src/replay-eval.ts +0 -1039
  534. package/src/replay-handoff.test.ts +0 -163
  535. package/src/replay-handoff.ts +0 -109
  536. package/src/replay-workflow-compiler.test.ts +0 -250
  537. package/src/replay-workflow-compiler.ts +0 -700
  538. package/src/resource.md +0 -409
  539. package/src/rrweb-recording-relay.test.ts +0 -99
  540. package/src/rrweb-recording-relay.ts +0 -400
  541. package/src/rrweb-recording.ts +0 -322
  542. package/src/scoped-fs.test.ts +0 -80
  543. package/src/scoped-fs.ts +0 -420
  544. package/src/skill-stub.test.ts +0 -24
  545. package/src/snapshot-tools.test.ts +0 -1017
  546. package/src/snapshots/hacker-news-accessibility-full.md +0 -81
  547. package/src/snapshots/hacker-news-accessibility-interactive.md +0 -43
  548. package/src/snapshots/page-markdown-output.txt +0 -16
  549. package/src/snapshots/shadcn-ui-accessibility-full.md +0 -201
  550. package/src/snapshots/shadcn-ui-accessibility-interactive.md +0 -109
  551. package/src/start-relay-server.ts +0 -69
  552. package/src/styles-examples.ts +0 -84
  553. package/src/styles.ts +0 -343
  554. package/src/tabwright-agent-skill.test.ts +0 -61
  555. package/src/tabwright-agent-skill.ts +0 -105
  556. package/src/test-declarations.ts +0 -13
  557. package/src/test-utils.test.ts +0 -70
  558. package/src/test-utils.ts +0 -566
  559. package/src/utils.ts +0 -78
  560. package/src/wait-for-page-load.ts +0 -198
  561. package/src/workflow-capability.ts +0 -417
  562. package/src/workflow-script-flow.test.ts +0 -388
@@ -1,152 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { createSmartDiff } from './diff-utils.js'
3
-
4
- describe('createSmartDiff', () => {
5
- it('returns no-change with full content when content is identical', () => {
6
- const result = createSmartDiff({
7
- oldContent: 'hello\nworld',
8
- newContent: 'hello\nworld',
9
- })
10
- expect(result.type).toBe('no-change')
11
- expect(result.content).toBe('hello\nworld')
12
- })
13
-
14
- it('returns full content when diff would be longer', () => {
15
- // Small content - diff overhead makes it longer than full content
16
- const result = createSmartDiff({
17
- oldContent: 'line1\nline2\nline3\nline4\nline5',
18
- newContent: 'line1\nline2-modified\nline3\nline4\nline5',
19
- })
20
- expect(result.type).toBe('full')
21
- expect(result.content).toBe('line1\nline2-modified\nline3\nline4\nline5')
22
- })
23
-
24
- it('returns diff for large content with small changes', () => {
25
- // Generate large content where diff will be shorter
26
- const lines = Array.from({ length: 100 }, (_, i) => `line ${i + 1}: some content here`)
27
- const oldContent = lines.join('\n')
28
- const newLines = [...lines]
29
- newLines[50] = 'line 51: MODIFIED content here'
30
- const newContent = newLines.join('\n')
31
-
32
- const result = createSmartDiff({ oldContent, newContent })
33
- expect(result.type).toBe('diff')
34
- expect(result.content).toContain('-line 51: some content here')
35
- expect(result.content).toContain('+line 51: MODIFIED content here')
36
- })
37
-
38
- it('returns full content when changes exceed 50% threshold', () => {
39
- const result = createSmartDiff({
40
- oldContent: 'a\nb\nc\nd',
41
- newContent: 'x\ny\nz\nw',
42
- })
43
- expect(result.type).toBe('full')
44
- expect(result.content).toBe('x\ny\nz\nw')
45
- })
46
-
47
- it('respects custom threshold with large content', () => {
48
- // Generate content where diff is shorter than full
49
- const lines = Array.from({ length: 50 }, (_, i) => `line ${i + 1}`)
50
- const oldContent = lines.join('\n')
51
- const newLines = [...lines]
52
- // Change 25 lines = 50%
53
- for (let i = 0; i < 25; i++) {
54
- newLines[i * 2] = `CHANGED ${i}`
55
- }
56
- const newContent = newLines.join('\n')
57
-
58
- // With 40% threshold, should return full (50% >= 40%)
59
- const resultLow = createSmartDiff({
60
- oldContent,
61
- newContent,
62
- threshold: 0.4,
63
- })
64
- expect(resultLow.type).toBe('full')
65
-
66
- // With 60% threshold, should return diff (50% < 60%) - but only if diff is shorter
67
- const resultHigh = createSmartDiff({
68
- oldContent,
69
- newContent,
70
- threshold: 0.6,
71
- })
72
- // For this case, even with high threshold, the diff may be longer than full content
73
- // so it could return 'full' - the key is threshold + length check both apply
74
- expect(['diff', 'full']).toContain(resultHigh.type)
75
- })
76
-
77
- it('uses custom label in diff output', () => {
78
- // Generate large content where diff will be shorter than full
79
- const lines = Array.from({ length: 100 }, (_, i) => `line ${i + 1}: content`)
80
- const oldContent = lines.join('\n')
81
- const newLines = [...lines]
82
- newLines[50] = 'line 51: MODIFIED'
83
- const newContent = newLines.join('\n')
84
-
85
- const result = createSmartDiff({
86
- oldContent,
87
- newContent,
88
- label: 'snapshot',
89
- })
90
- expect(result.type).toBe('diff')
91
- expect(result.content).toContain('--- snapshot')
92
- expect(result.content).toContain('+++ snapshot')
93
- })
94
-
95
- it('handles empty old content (all additions)', () => {
96
- const result = createSmartDiff({
97
- oldContent: '',
98
- newContent: 'new\ncontent\nhere',
99
- })
100
- // 100% new content should trigger full
101
- expect(result.type).toBe('full')
102
- expect(result.content).toContain('new\ncontent\nhere')
103
- })
104
-
105
- it('handles empty new content (all deletions)', () => {
106
- const result = createSmartDiff({
107
- oldContent: 'old\ncontent\nhere',
108
- newContent: '',
109
- })
110
- expect(result.type).toBe('full')
111
- expect(result.content).toBe('')
112
- })
113
-
114
- it('handles single line changes', () => {
115
- const result = createSmartDiff({
116
- oldContent: 'single line',
117
- newContent: 'modified line',
118
- })
119
- // 100% change on single line
120
- expect(result.type).toBe('full')
121
- })
122
-
123
- it('returns full content when most lines changed', () => {
124
- // 4 lines changed out of 5 = 80%
125
- const result = createSmartDiff({
126
- oldContent: 'a\nb\nc\nd\ne',
127
- newContent: 'a\nX\nY\nZ\nW',
128
- })
129
- expect(result.type).toBe('full')
130
- expect(result.content).toBe('a\nX\nY\nZ\nW')
131
- })
132
-
133
- it('includes context lines in diff output', () => {
134
- // Generate large content where diff is shorter than full
135
- const lines = Array.from({ length: 100 }, (_, i) => `line ${i + 1}: some longer content`)
136
- const oldContent = lines.join('\n')
137
- const newLines = [...lines]
138
- newLines[50] = 'line 51: MODIFIED content'
139
- const newContent = newLines.join('\n')
140
-
141
- const result = createSmartDiff({
142
- oldContent,
143
- newContent,
144
- })
145
- expect(result.type).toBe('diff')
146
- // Should have context around the change
147
- expect(result.content).toContain('line 50')
148
- expect(result.content).toContain('-line 51: some longer content')
149
- expect(result.content).toContain('+line 51: MODIFIED content')
150
- expect(result.content).toContain('line 52')
151
- })
152
- })
package/src/diff-utils.ts DELETED
@@ -1,70 +0,0 @@
1
- import { structuredPatch } from 'diff'
2
-
3
- export interface SmartDiffResult {
4
- type: 'diff' | 'full' | 'no-change'
5
- content: string
6
- }
7
-
8
- export interface CreateSmartDiffOptions {
9
- oldContent: string
10
- newContent: string
11
- /** Threshold ratio (0-1) above which full content is returned instead of diff. Default 0.5 (50%) */
12
- threshold?: number
13
- /** Label for the diff output */
14
- label?: string
15
- }
16
-
17
- /**
18
- * Creates a smart diff that returns full content when changes exceed threshold.
19
- *
20
- * When more than `threshold` (default 50%) of lines have changed, showing a diff
21
- * is not useful - we return the full new content instead.
22
- */
23
- export function createSmartDiff(options: CreateSmartDiffOptions): SmartDiffResult {
24
- const { oldContent, newContent, threshold = 0.5, label = 'content' } = options
25
-
26
- const patch = structuredPatch(label, label, oldContent, newContent, 'previous', 'current', {
27
- context: 3,
28
- })
29
-
30
- // Count added and removed lines
31
- let addedLines = 0
32
- let removedLines = 0
33
- for (const hunk of patch.hunks) {
34
- for (const line of hunk.lines) {
35
- if (line.startsWith('+')) {
36
- addedLines++
37
- } else if (line.startsWith('-')) {
38
- removedLines++
39
- }
40
- }
41
- }
42
-
43
- // No changes - return full content
44
- if (addedLines === 0 && removedLines === 0) {
45
- return { type: 'no-change', content: newContent }
46
- }
47
-
48
- // Calculate change ratio: use max(added, removed) since a replacement counts as both
49
- // This ensures the ratio stays in 0-100% range
50
- const oldLineCount = oldContent.split('\n').length
51
- const newLineCount = newContent.split('\n').length
52
- const maxLines = Math.max(oldLineCount, newLineCount, 1) // Avoid division by zero
53
- const changedLines = Math.max(addedLines, removedLines)
54
- const changeRatio = Math.min(changedLines / maxLines, 1) // Cap at 100%
55
-
56
- // Build unified diff string from structured patch
57
- const diffLines: string[] = [`--- ${label} (previous)`, `+++ ${label} (current)`]
58
- for (const hunk of patch.hunks) {
59
- diffLines.push(`@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`)
60
- diffLines.push(...hunk.lines)
61
- }
62
- const diffString = diffLines.join('\n')
63
-
64
- // Return full content if changes exceed threshold OR if diff is longer than full content
65
- if (changeRatio >= threshold || diffString.length >= newContent.length) {
66
- return { type: 'full', content: newContent }
67
- }
68
-
69
- return { type: 'diff', content: diffString }
70
- }
@@ -1,244 +0,0 @@
1
- import { describe, expect, test } from 'vitest'
2
- import { buildDoctorReport, formatDoctorReport, type DoctorSession } from './doctor.js'
3
- import type { ExtensionStatus } from './relay-client.js'
4
- import { CURRENT_EXTENSION_FEATURES } from './protocol.js'
5
- import type { TabwrightAgentSkillState, TabwrightAgentSkillStatus } from './tabwright-agent-skill.js'
6
-
7
- const extension = (overrides: Partial<ExtensionStatus> = {}): ExtensionStatus => {
8
- return {
9
- extensionId: 'extension-1',
10
- stableKey: 'install:Chrome:profile-1',
11
- browser: 'Chrome',
12
- profile: null,
13
- activeTargets: 1,
14
- playwriterVersion: '0.4.0',
15
- protocolVersion: 1,
16
- features: [...CURRENT_EXTENSION_FEATURES],
17
- connectionHealth: 'ready',
18
- missingFeatures: [],
19
- ...overrides,
20
- }
21
- }
22
-
23
- const session = (overrides: Partial<DoctorSession> = {}): DoctorSession => {
24
- return {
25
- id: '1',
26
- browser: 'Chrome',
27
- extensionId: 'install:Chrome:profile-1',
28
- cwd: '/project',
29
- ...overrides,
30
- }
31
- }
32
-
33
- const skillStatus = (state: TabwrightAgentSkillState): TabwrightAgentSkillStatus => {
34
- return {
35
- target: 'codex',
36
- state,
37
- bundledPath: '/package/dist/agent-skills/tabwright/SKILL.md',
38
- installedPath: '/home/.codex/skills/tabwright/SKILL.md',
39
- bundledSha256: 'bundled',
40
- ...(state === 'missing' ? {} : { installedSha256: state === 'current' ? 'bundled' : 'different' }),
41
- installCommand: `tabwright skill install --target codex${state === 'outdated' ? ' --force' : ''}`,
42
- }
43
- }
44
-
45
- describe('buildDoctorReport', () => {
46
- test('recognizes readiness without reusing another task session', () => {
47
- const report = buildDoctorReport({
48
- version: '0.4.0',
49
- cwd: '/project',
50
- remote: false,
51
- relayVersion: '0.4.0',
52
- extensions: [extension()],
53
- sessions: [session()],
54
- capabilityCount: 2,
55
- })
56
-
57
- expect(report.ready).toBe(true)
58
- expect(report.next.command).toBe('tabwright session new --browser install:Chrome:profile-1')
59
- expect(report.checks).toEqual(
60
- expect.arrayContaining([
61
- expect.objectContaining({ id: 'relay', status: 'pass' }),
62
- expect.objectContaining({ id: 'extension', status: 'pass' }),
63
- expect.objectContaining({ id: 'session', status: 'pass' }),
64
- ]),
65
- )
66
- })
67
-
68
- test('chooses session creation when Chrome has an enabled tab', () => {
69
- const report = buildDoctorReport({
70
- version: '0.4.0',
71
- cwd: '/project',
72
- remote: false,
73
- relayVersion: '0.4.0',
74
- extensions: [extension()],
75
- sessions: [],
76
- capabilityCount: 0,
77
- })
78
-
79
- expect(report.ready).toBe(false)
80
- expect(report.next.command).toBe('tabwright session new --browser install:Chrome:profile-1')
81
- })
82
-
83
- test('asks for the bundled Tabwright skill before starting a browser session', () => {
84
- const report = buildDoctorReport({
85
- version: '0.4.0',
86
- cwd: '/project',
87
- remote: false,
88
- relayVersion: '0.4.0',
89
- extensions: [extension()],
90
- sessions: [session()],
91
- capabilityCount: 0,
92
- skillStatus: skillStatus('missing'),
93
- })
94
-
95
- expect(report.checks).toEqual(
96
- expect.arrayContaining([
97
- expect.objectContaining({
98
- id: 'skill',
99
- status: 'warn',
100
- message: expect.stringContaining('not installed'),
101
- }),
102
- ]),
103
- )
104
- expect(report.next.command).toBe('tabwright skill install --target codex')
105
- })
106
-
107
- test('asks for the extension click before suggesting a headless fallback', () => {
108
- const report = buildDoctorReport({
109
- version: '0.4.0',
110
- cwd: '/project',
111
- remote: false,
112
- relayVersion: '0.4.0',
113
- extensions: [extension({ activeTargets: 0 })],
114
- sessions: [session()],
115
- capabilityCount: 0,
116
- })
117
-
118
- expect(report.next.command).toBeUndefined()
119
- expect(report.ready).toBe(false)
120
- expect(report.checks).toEqual(
121
- expect.arrayContaining([
122
- expect.objectContaining({
123
- id: 'session',
124
- status: 'warn',
125
- message: expect.stringContaining('none are currently usable'),
126
- }),
127
- ]),
128
- )
129
- expect(report.next.title).toContain('click the Tabwright extension icon')
130
- expect(report.next.fallbackCommand).toBe('tabwright session new --browser headless')
131
- })
132
-
133
- test('keeps a connected direct or headless session usable without an extension', () => {
134
- const report = buildDoctorReport({
135
- version: '0.4.0',
136
- cwd: '/project',
137
- remote: false,
138
- relayVersion: '0.4.0',
139
- extensions: [],
140
- sessions: [session({ extensionId: null, connected: true, browser: 'Chromium (headless)' })],
141
- capabilityCount: 0,
142
- })
143
-
144
- expect(report.ready).toBe(true)
145
- expect(report.next.command).toBe('tabwright session new --browser headless')
146
- })
147
-
148
- test('explains a newer extension and missing relay', () => {
149
- const report = buildDoctorReport({
150
- version: '0.4.0',
151
- cwd: '/project',
152
- remote: false,
153
- relayVersion: null,
154
- relayError: 'Failed to start relay. Check logs at ~/.tabwright/relay-server.log',
155
- extensions: [extension({ playwriterVersion: '0.5.0' })],
156
- sessions: [],
157
- capabilityCount: 0,
158
- })
159
-
160
- expect(report.checks).toEqual(
161
- expect.arrayContaining([
162
- expect.objectContaining({ id: 'relay', status: 'fail' }),
163
- expect.objectContaining({ id: 'extension', status: 'info' }),
164
- ]),
165
- )
166
- expect(formatDoctorReport(report)).toContain('[FAIL] Local relay is not reachable.')
167
- expect(formatDoctorReport(report)).toContain('Failed to start relay')
168
- expect(report.next.command).toBe('tabwright logfile')
169
- })
170
-
171
- test('keeps core browser control ready for legacy feature handshakes', () => {
172
- const report = buildDoctorReport({
173
- version: '0.4.0',
174
- cwd: '/project',
175
- remote: false,
176
- relayVersion: '0.4.0',
177
- extensions: [
178
- extension({
179
- protocolVersion: undefined,
180
- features: undefined,
181
- connectionHealth: 'legacy',
182
- }),
183
- ],
184
- sessions: [session()],
185
- capabilityCount: 0,
186
- })
187
-
188
- expect(report.ready).toBe(true)
189
- expect(report.checks).toEqual(
190
- expect.arrayContaining([
191
- expect.objectContaining({
192
- id: 'extension',
193
- status: 'warn',
194
- detail: expect.stringContaining('legacy handshake'),
195
- }),
196
- ]),
197
- )
198
- })
199
-
200
- test('reports a same-version relay that is missing saved-data features', () => {
201
- const report = buildDoctorReport({
202
- version: '0.4.0',
203
- cwd: '/project',
204
- remote: false,
205
- relayVersion: '0.4.0',
206
- relayFeatures: null,
207
- extensions: [extension()],
208
- sessions: [session()],
209
- capabilityCount: 2,
210
- })
211
-
212
- expect(report.checks).toEqual(
213
- expect.arrayContaining([
214
- expect.objectContaining({
215
- id: 'relay',
216
- status: 'warn',
217
- message: expect.stringContaining('saved-data features are missing'),
218
- }),
219
- ]),
220
- )
221
- expect(report.next.command).toBe('tabwright session list')
222
- })
223
-
224
- test('keeps remote connection failures diagnostic and non-destructive', () => {
225
- const report = buildDoctorReport({
226
- version: '0.4.0',
227
- cwd: '/project',
228
- remote: true,
229
- relayVersion: null,
230
- extensions: [],
231
- sessions: [],
232
- capabilityCount: 0,
233
- })
234
-
235
- expect(report.ready).toBe(false)
236
- expect(report.checks).toEqual(
237
- expect.arrayContaining([
238
- expect.objectContaining({ id: 'relay', status: 'fail', message: 'Remote relay is not reachable.' }),
239
- ]),
240
- )
241
- expect(report.next.command).toBeUndefined()
242
- expect(report.next.title).toContain('host, token, and network path')
243
- })
244
- })