tabwright 1.0.0 → 2.0.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.
Files changed (568) hide show
  1. package/dist/agent-skills/tabwright/SKILL.md +3 -0
  2. package/dist/aria-snapshot.d.ts +0 -1
  3. package/dist/aria-snapshot.js +9 -1
  4. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +0 -1
  5. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +0 -1
  6. package/dist/bippy.js +5 -5
  7. package/dist/browser-config.d.ts +0 -1
  8. package/dist/browser-config.js +0 -1
  9. package/dist/browser-install.d.ts +0 -1
  10. package/dist/browser-install.js +0 -1
  11. package/dist/browser-launch.d.ts +0 -1
  12. package/dist/browser-launch.js +0 -1
  13. package/dist/capability-agent-skill.d.ts +0 -1
  14. package/dist/capability-agent-skill.js +0 -1
  15. package/dist/capability-auth-state.d.ts +0 -1
  16. package/dist/capability-auth-state.js +0 -1
  17. package/dist/capability-auth.d.ts +0 -1
  18. package/dist/capability-auth.js +0 -1
  19. package/dist/capability-options.d.ts +0 -1
  20. package/dist/capability-options.js +0 -1
  21. package/dist/capability-package.d.ts +0 -1
  22. package/dist/capability-package.js +47 -2
  23. package/dist/capability-registry.d.ts +0 -1
  24. package/dist/capability-registry.js +0 -1
  25. package/dist/capability-runner.d.ts +0 -1
  26. package/dist/capability-runner.js +0 -1
  27. package/dist/capability-studio.d.ts +0 -1
  28. package/dist/capability-studio.js +0 -1
  29. package/dist/cdp-log.d.ts +0 -1
  30. package/dist/cdp-log.js +0 -1
  31. package/dist/cdp-relay.d.ts +0 -1
  32. package/dist/cdp-relay.js +0 -1
  33. package/dist/cdp-session.d.ts +0 -1
  34. package/dist/cdp-session.js +0 -1
  35. package/dist/cdp-types.d.ts +0 -1
  36. package/dist/cdp-types.js +0 -1
  37. package/dist/chrome-discovery.d.ts +0 -1
  38. package/dist/chrome-discovery.js +0 -1
  39. package/dist/clean-html.d.ts +0 -1
  40. package/dist/clean-html.js +0 -1
  41. package/dist/cli.d.ts +0 -1
  42. package/dist/cli.js +10 -56
  43. package/dist/cloud-client.d.ts +0 -1
  44. package/dist/cloud-client.js +0 -1
  45. package/dist/create-logger.d.ts +0 -1
  46. package/dist/create-logger.js +0 -1
  47. package/dist/debugger-examples-types.d.ts +0 -1
  48. package/dist/debugger-examples-types.js +0 -1
  49. package/dist/debugger-examples.d.ts +0 -1
  50. package/dist/debugger-examples.js +0 -1
  51. package/dist/debugger.d.ts +0 -1
  52. package/dist/debugger.js +0 -1
  53. package/dist/diff-utils.d.ts +0 -1
  54. package/dist/diff-utils.js +0 -1
  55. package/dist/doctor.d.ts +0 -1
  56. package/dist/doctor.js +5 -7
  57. package/dist/editor-examples.d.ts +0 -1
  58. package/dist/editor-examples.js +0 -1
  59. package/dist/editor.d.ts +0 -1
  60. package/dist/editor.js +0 -1
  61. package/dist/env-compat.d.ts +0 -1
  62. package/dist/env-compat.js +0 -1
  63. package/dist/executor.d.ts +0 -1
  64. package/dist/executor.js +1 -2
  65. package/dist/extension/background.js +10 -6
  66. package/dist/extension/manifest.json +1 -1
  67. package/dist/extension/options.js +1 -1
  68. package/dist/extension/rrweb-recorder.js +1 -1
  69. package/dist/ghost-browser.d.ts +0 -1
  70. package/dist/ghost-browser.js +0 -1
  71. package/dist/ghost-cursor-controller.d.ts +0 -1
  72. package/dist/ghost-cursor-controller.js +0 -1
  73. package/dist/ghost-cursor.d.ts +0 -1
  74. package/dist/ghost-cursor.js +0 -1
  75. package/dist/htmlrewrite.d.ts +0 -1
  76. package/dist/htmlrewrite.js +0 -1
  77. package/dist/index.d.ts +0 -1
  78. package/dist/index.js +0 -1
  79. package/dist/kill-port.d.ts +0 -1
  80. package/dist/kill-port.js +0 -1
  81. package/dist/kitty-graphics.d.ts +0 -1
  82. package/dist/kitty-graphics.js +0 -1
  83. package/dist/mcp.d.ts +0 -1
  84. package/dist/mcp.js +0 -1
  85. package/dist/package-paths.d.ts +0 -1
  86. package/dist/package-paths.js +0 -1
  87. package/dist/page-markdown.d.ts +0 -1
  88. package/dist/page-markdown.js +0 -1
  89. package/dist/performance-examples.d.ts +0 -1
  90. package/dist/performance-examples.js +0 -1
  91. package/dist/playwright-import.d.ts +0 -1
  92. package/dist/playwright-import.js +0 -1
  93. package/dist/product-paths.d.ts +0 -1
  94. package/dist/product-paths.js +0 -1
  95. package/dist/protocol.d.ts +0 -1
  96. package/dist/protocol.js +0 -1
  97. package/dist/react-source.d.ts +0 -1
  98. package/dist/react-source.js +0 -1
  99. package/dist/readability.js +4 -4
  100. package/dist/relay-client.d.ts +0 -1
  101. package/dist/relay-client.js +0 -1
  102. package/dist/relay-state.d.ts +0 -1
  103. package/dist/relay-state.js +0 -1
  104. package/dist/replay-ai-index.d.ts +0 -1
  105. package/dist/replay-ai-index.js +0 -1
  106. package/dist/replay-eval.d.ts +0 -1
  107. package/dist/replay-eval.js +0 -1
  108. package/dist/replay-handoff.d.ts +0 -1
  109. package/dist/replay-handoff.js +0 -1
  110. package/dist/replay-workflow-compiler.d.ts +0 -1
  111. package/dist/replay-workflow-compiler.js +0 -1
  112. package/dist/rrweb-recording-relay.d.ts +0 -1
  113. package/dist/rrweb-recording-relay.js +0 -1
  114. package/dist/rrweb-recording.d.ts +0 -1
  115. package/dist/rrweb-recording.js +0 -1
  116. package/dist/scoped-fs.d.ts +0 -1
  117. package/dist/scoped-fs.js +0 -1
  118. package/dist/selector-generator.js +2 -2
  119. package/dist/start-relay-server.d.ts +0 -1
  120. package/dist/start-relay-server.js +0 -1
  121. package/dist/styles-examples.d.ts +0 -1
  122. package/dist/styles-examples.js +0 -1
  123. package/dist/styles.d.ts +0 -1
  124. package/dist/styles.js +0 -1
  125. package/dist/tabwright-agent-skill.d.ts +0 -1
  126. package/dist/tabwright-agent-skill.js +0 -1
  127. package/dist/test-declarations.d.ts +0 -1
  128. package/dist/test-declarations.js +0 -1
  129. package/dist/utils.d.ts +0 -1
  130. package/dist/utils.js +2 -2
  131. package/dist/wait-for-page-load.d.ts +0 -1
  132. package/dist/wait-for-page-load.js +0 -1
  133. package/dist/workflow-capability.d.ts +0 -1
  134. package/dist/workflow-capability.js +0 -1
  135. package/package.json +8 -4
  136. package/readme.md +43 -0
  137. package/src/skill.md +5 -2
  138. package/dist/aria-snapshot.d.ts.map +0 -1
  139. package/dist/aria-snapshot.js.map +0 -1
  140. package/dist/aria-snapshot.test.d.ts +0 -2
  141. package/dist/aria-snapshot.test.d.ts.map +0 -1
  142. package/dist/aria-snapshot.test.js +0 -270
  143. package/dist/aria-snapshot.test.js.map +0 -1
  144. package/dist/aria-snapshot.unit.test.d.ts +0 -2
  145. package/dist/aria-snapshot.unit.test.d.ts.map +0 -1
  146. package/dist/aria-snapshot.unit.test.js +0 -542
  147. package/dist/aria-snapshot.unit.test.js.map +0 -1
  148. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +0 -1
  149. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +0 -1
  150. package/dist/browser-config.d.ts.map +0 -1
  151. package/dist/browser-config.js.map +0 -1
  152. package/dist/browser-install.d.ts.map +0 -1
  153. package/dist/browser-install.js.map +0 -1
  154. package/dist/browser-launch.d.ts.map +0 -1
  155. package/dist/browser-launch.js.map +0 -1
  156. package/dist/builtin-capabilities.d.ts +0 -28
  157. package/dist/builtin-capabilities.d.ts.map +0 -1
  158. package/dist/builtin-capabilities.js +0 -2673
  159. package/dist/builtin-capabilities.js.map +0 -1
  160. package/dist/capability-agent-skill.d.ts.map +0 -1
  161. package/dist/capability-agent-skill.js.map +0 -1
  162. package/dist/capability-auth-state.d.ts.map +0 -1
  163. package/dist/capability-auth-state.js.map +0 -1
  164. package/dist/capability-auth.d.ts.map +0 -1
  165. package/dist/capability-auth.js.map +0 -1
  166. package/dist/capability-cli-confirmation.test.d.ts +0 -2
  167. package/dist/capability-cli-confirmation.test.d.ts.map +0 -1
  168. package/dist/capability-cli-confirmation.test.js +0 -79
  169. package/dist/capability-cli-confirmation.test.js.map +0 -1
  170. package/dist/capability-options.d.ts.map +0 -1
  171. package/dist/capability-options.js.map +0 -1
  172. package/dist/capability-options.test.d.ts +0 -2
  173. package/dist/capability-options.test.d.ts.map +0 -1
  174. package/dist/capability-options.test.js +0 -81
  175. package/dist/capability-options.test.js.map +0 -1
  176. package/dist/capability-package.d.ts.map +0 -1
  177. package/dist/capability-package.js.map +0 -1
  178. package/dist/capability-package.test.d.ts +0 -2
  179. package/dist/capability-package.test.d.ts.map +0 -1
  180. package/dist/capability-package.test.js +0 -179
  181. package/dist/capability-package.test.js.map +0 -1
  182. package/dist/capability-registry.d.ts.map +0 -1
  183. package/dist/capability-registry.js.map +0 -1
  184. package/dist/capability-registry.test.d.ts +0 -2
  185. package/dist/capability-registry.test.d.ts.map +0 -1
  186. package/dist/capability-registry.test.js +0 -1683
  187. package/dist/capability-registry.test.js.map +0 -1
  188. package/dist/capability-runner.d.ts.map +0 -1
  189. package/dist/capability-runner.js.map +0 -1
  190. package/dist/capability-search-relevance.test.d.ts +0 -2
  191. package/dist/capability-search-relevance.test.d.ts.map +0 -1
  192. package/dist/capability-search-relevance.test.js +0 -67
  193. package/dist/capability-search-relevance.test.js.map +0 -1
  194. package/dist/capability-studio.d.ts.map +0 -1
  195. package/dist/capability-studio.js.map +0 -1
  196. package/dist/capability-studio.test.d.ts +0 -2
  197. package/dist/capability-studio.test.d.ts.map +0 -1
  198. package/dist/capability-studio.test.js +0 -41
  199. package/dist/capability-studio.test.js.map +0 -1
  200. package/dist/cdp-log.d.ts.map +0 -1
  201. package/dist/cdp-log.js.map +0 -1
  202. package/dist/cdp-log.test.d.ts +0 -2
  203. package/dist/cdp-log.test.d.ts.map +0 -1
  204. package/dist/cdp-log.test.js +0 -109
  205. package/dist/cdp-log.test.js.map +0 -1
  206. package/dist/cdp-relay.d.ts.map +0 -1
  207. package/dist/cdp-relay.js.map +0 -1
  208. package/dist/cdp-session.d.ts.map +0 -1
  209. package/dist/cdp-session.js.map +0 -1
  210. package/dist/cdp-types.d.ts.map +0 -1
  211. package/dist/cdp-types.js.map +0 -1
  212. package/dist/channel-owner-inspect.test.d.ts +0 -2
  213. package/dist/channel-owner-inspect.test.d.ts.map +0 -1
  214. package/dist/channel-owner-inspect.test.js +0 -75
  215. package/dist/channel-owner-inspect.test.js.map +0 -1
  216. package/dist/chrome-discovery.d.ts.map +0 -1
  217. package/dist/chrome-discovery.js.map +0 -1
  218. package/dist/chrome-discovery.test.d.ts +0 -2
  219. package/dist/chrome-discovery.test.d.ts.map +0 -1
  220. package/dist/chrome-discovery.test.js +0 -41
  221. package/dist/chrome-discovery.test.js.map +0 -1
  222. package/dist/clean-html.d.ts.map +0 -1
  223. package/dist/clean-html.js.map +0 -1
  224. package/dist/cli-help.test.d.ts +0 -2
  225. package/dist/cli-help.test.d.ts.map +0 -1
  226. package/dist/cli-help.test.js +0 -98
  227. package/dist/cli-help.test.js.map +0 -1
  228. package/dist/cli.d.ts.map +0 -1
  229. package/dist/cli.js.map +0 -1
  230. package/dist/cloud-client.d.ts.map +0 -1
  231. package/dist/cloud-client.js.map +0 -1
  232. package/dist/create-logger.d.ts.map +0 -1
  233. package/dist/create-logger.js.map +0 -1
  234. package/dist/debugger-examples-types.d.ts.map +0 -1
  235. package/dist/debugger-examples-types.js.map +0 -1
  236. package/dist/debugger-examples.d.ts.map +0 -1
  237. package/dist/debugger-examples.js.map +0 -1
  238. package/dist/debugger.d.ts.map +0 -1
  239. package/dist/debugger.js.map +0 -1
  240. package/dist/diff-utils.d.ts.map +0 -1
  241. package/dist/diff-utils.js.map +0 -1
  242. package/dist/diff-utils.test.d.ts +0 -2
  243. package/dist/diff-utils.test.d.ts.map +0 -1
  244. package/dist/diff-utils.test.js +0 -137
  245. package/dist/diff-utils.test.js.map +0 -1
  246. package/dist/doctor.d.ts.map +0 -1
  247. package/dist/doctor.js.map +0 -1
  248. package/dist/doctor.test.d.ts +0 -2
  249. package/dist/doctor.test.d.ts.map +0 -1
  250. package/dist/doctor.test.js +0 -208
  251. package/dist/doctor.test.js.map +0 -1
  252. package/dist/editor-examples.d.ts.map +0 -1
  253. package/dist/editor-examples.js.map +0 -1
  254. package/dist/editor.d.ts.map +0 -1
  255. package/dist/editor.js.map +0 -1
  256. package/dist/env-compat.d.ts.map +0 -1
  257. package/dist/env-compat.js.map +0 -1
  258. package/dist/executor.d.ts.map +0 -1
  259. package/dist/executor.js.map +0 -1
  260. package/dist/executor.unit.test.d.ts +0 -2
  261. package/dist/executor.unit.test.d.ts.map +0 -1
  262. package/dist/executor.unit.test.js +0 -143
  263. package/dist/executor.unit.test.js.map +0 -1
  264. package/dist/extension-connection.test.d.ts +0 -2
  265. package/dist/extension-connection.test.d.ts.map +0 -1
  266. package/dist/extension-connection.test.js +0 -708
  267. package/dist/extension-connection.test.js.map +0 -1
  268. package/dist/extension-icon-warning.test.d.ts +0 -2
  269. package/dist/extension-icon-warning.test.d.ts.map +0 -1
  270. package/dist/extension-icon-warning.test.js +0 -33
  271. package/dist/extension-icon-warning.test.js.map +0 -1
  272. package/dist/ghost-browser.d.ts.map +0 -1
  273. package/dist/ghost-browser.js.map +0 -1
  274. package/dist/ghost-cursor-controller.d.ts.map +0 -1
  275. package/dist/ghost-cursor-controller.js.map +0 -1
  276. package/dist/ghost-cursor.d.ts.map +0 -1
  277. package/dist/ghost-cursor.js.map +0 -1
  278. package/dist/htmlrewrite.d.ts.map +0 -1
  279. package/dist/htmlrewrite.js.map +0 -1
  280. package/dist/htmlrewrite.test.d.ts +0 -2
  281. package/dist/htmlrewrite.test.d.ts.map +0 -1
  282. package/dist/htmlrewrite.test.js +0 -7975
  283. package/dist/htmlrewrite.test.js.map +0 -1
  284. package/dist/index.d.ts.map +0 -1
  285. package/dist/index.js.map +0 -1
  286. package/dist/kill-port.d.ts.map +0 -1
  287. package/dist/kill-port.js.map +0 -1
  288. package/dist/kitty-graphics.d.ts.map +0 -1
  289. package/dist/kitty-graphics.js.map +0 -1
  290. package/dist/kitty-graphics.test.d.ts +0 -2
  291. package/dist/kitty-graphics.test.d.ts.map +0 -1
  292. package/dist/kitty-graphics.test.js +0 -125
  293. package/dist/kitty-graphics.test.js.map +0 -1
  294. package/dist/locator-selector.test.d.ts +0 -2
  295. package/dist/locator-selector.test.d.ts.map +0 -1
  296. package/dist/locator-selector.test.js +0 -98
  297. package/dist/locator-selector.test.js.map +0 -1
  298. package/dist/mcp-client.d.ts +0 -20
  299. package/dist/mcp-client.d.ts.map +0 -1
  300. package/dist/mcp-client.js +0 -56
  301. package/dist/mcp-client.js.map +0 -1
  302. package/dist/mcp.d.ts.map +0 -1
  303. package/dist/mcp.js.map +0 -1
  304. package/dist/on-mouse-action.test.d.ts +0 -2
  305. package/dist/on-mouse-action.test.d.ts.map +0 -1
  306. package/dist/on-mouse-action.test.js +0 -180
  307. package/dist/on-mouse-action.test.js.map +0 -1
  308. package/dist/options-page.test.d.ts +0 -2
  309. package/dist/options-page.test.d.ts.map +0 -1
  310. package/dist/options-page.test.js +0 -773
  311. package/dist/options-page.test.js.map +0 -1
  312. package/dist/package-paths.d.ts.map +0 -1
  313. package/dist/package-paths.js.map +0 -1
  314. package/dist/page-markdown.d.ts.map +0 -1
  315. package/dist/page-markdown.js.map +0 -1
  316. package/dist/performance-examples.d.ts.map +0 -1
  317. package/dist/performance-examples.js.map +0 -1
  318. package/dist/playwright-import.d.ts.map +0 -1
  319. package/dist/playwright-import.js.map +0 -1
  320. package/dist/popup-relocation.test.d.ts +0 -7
  321. package/dist/popup-relocation.test.d.ts.map +0 -1
  322. package/dist/popup-relocation.test.js +0 -139
  323. package/dist/popup-relocation.test.js.map +0 -1
  324. package/dist/product-paths.d.ts.map +0 -1
  325. package/dist/product-paths.js.map +0 -1
  326. package/dist/product-paths.test.d.ts +0 -2
  327. package/dist/product-paths.test.d.ts.map +0 -1
  328. package/dist/product-paths.test.js +0 -39
  329. package/dist/product-paths.test.js.map +0 -1
  330. package/dist/protocol.d.ts.map +0 -1
  331. package/dist/protocol.js.map +0 -1
  332. package/dist/protocol.test.d.ts +0 -2
  333. package/dist/protocol.test.d.ts.map +0 -1
  334. package/dist/protocol.test.js +0 -31
  335. package/dist/protocol.test.js.map +0 -1
  336. package/dist/react-source.d.ts.map +0 -1
  337. package/dist/react-source.js.map +0 -1
  338. package/dist/relay-client.d.ts.map +0 -1
  339. package/dist/relay-client.js.map +0 -1
  340. package/dist/relay-client.test.d.ts +0 -2
  341. package/dist/relay-client.test.d.ts.map +0 -1
  342. package/dist/relay-client.test.js +0 -305
  343. package/dist/relay-client.test.js.map +0 -1
  344. package/dist/relay-core.test.d.ts +0 -2
  345. package/dist/relay-core.test.d.ts.map +0 -1
  346. package/dist/relay-core.test.js +0 -1427
  347. package/dist/relay-core.test.js.map +0 -1
  348. package/dist/relay-navigation.test.d.ts +0 -2
  349. package/dist/relay-navigation.test.d.ts.map +0 -1
  350. package/dist/relay-navigation.test.js +0 -661
  351. package/dist/relay-navigation.test.js.map +0 -1
  352. package/dist/relay-session.test.d.ts +0 -2
  353. package/dist/relay-session.test.d.ts.map +0 -1
  354. package/dist/relay-session.test.js +0 -1121
  355. package/dist/relay-session.test.js.map +0 -1
  356. package/dist/relay-state.d.ts.map +0 -1
  357. package/dist/relay-state.js.map +0 -1
  358. package/dist/relay-state.test.d.ts +0 -2
  359. package/dist/relay-state.test.d.ts.map +0 -1
  360. package/dist/relay-state.test.js +0 -594
  361. package/dist/relay-state.test.js.map +0 -1
  362. package/dist/replay-ai-index.d.ts.map +0 -1
  363. package/dist/replay-ai-index.js.map +0 -1
  364. package/dist/replay-ai-index.test.d.ts +0 -2
  365. package/dist/replay-ai-index.test.d.ts.map +0 -1
  366. package/dist/replay-ai-index.test.js +0 -255
  367. package/dist/replay-ai-index.test.js.map +0 -1
  368. package/dist/replay-cli.test.d.ts +0 -2
  369. package/dist/replay-cli.test.d.ts.map +0 -1
  370. package/dist/replay-cli.test.js +0 -275
  371. package/dist/replay-cli.test.js.map +0 -1
  372. package/dist/replay-eval.d.ts.map +0 -1
  373. package/dist/replay-eval.js.map +0 -1
  374. package/dist/replay-handoff.d.ts.map +0 -1
  375. package/dist/replay-handoff.js.map +0 -1
  376. package/dist/replay-handoff.test.d.ts +0 -2
  377. package/dist/replay-handoff.test.d.ts.map +0 -1
  378. package/dist/replay-handoff.test.js +0 -123
  379. package/dist/replay-handoff.test.js.map +0 -1
  380. package/dist/replay-workflow-compiler.d.ts.map +0 -1
  381. package/dist/replay-workflow-compiler.js.map +0 -1
  382. package/dist/replay-workflow-compiler.test.d.ts +0 -2
  383. package/dist/replay-workflow-compiler.test.d.ts.map +0 -1
  384. package/dist/replay-workflow-compiler.test.js +0 -223
  385. package/dist/replay-workflow-compiler.test.js.map +0 -1
  386. package/dist/rrweb-recording-relay.d.ts.map +0 -1
  387. package/dist/rrweb-recording-relay.js.map +0 -1
  388. package/dist/rrweb-recording-relay.test.d.ts +0 -2
  389. package/dist/rrweb-recording-relay.test.d.ts.map +0 -1
  390. package/dist/rrweb-recording-relay.test.js +0 -85
  391. package/dist/rrweb-recording-relay.test.js.map +0 -1
  392. package/dist/rrweb-recording.d.ts.map +0 -1
  393. package/dist/rrweb-recording.js.map +0 -1
  394. package/dist/scoped-fs.d.ts.map +0 -1
  395. package/dist/scoped-fs.js.map +0 -1
  396. package/dist/scoped-fs.test.d.ts +0 -5
  397. package/dist/scoped-fs.test.d.ts.map +0 -1
  398. package/dist/scoped-fs.test.js +0 -73
  399. package/dist/scoped-fs.test.js.map +0 -1
  400. package/dist/skill-stub.test.d.ts +0 -2
  401. package/dist/skill-stub.test.d.ts.map +0 -1
  402. package/dist/skill-stub.test.js +0 -22
  403. package/dist/skill-stub.test.js.map +0 -1
  404. package/dist/snapshot-tools.test.d.ts +0 -2
  405. package/dist/snapshot-tools.test.d.ts.map +0 -1
  406. package/dist/snapshot-tools.test.js +0 -856
  407. package/dist/snapshot-tools.test.js.map +0 -1
  408. package/dist/start-relay-server.d.ts.map +0 -1
  409. package/dist/start-relay-server.js.map +0 -1
  410. package/dist/styles-examples.d.ts.map +0 -1
  411. package/dist/styles-examples.js.map +0 -1
  412. package/dist/styles.d.ts.map +0 -1
  413. package/dist/styles.js.map +0 -1
  414. package/dist/tabwright-agent-skill.d.ts.map +0 -1
  415. package/dist/tabwright-agent-skill.js.map +0 -1
  416. package/dist/tabwright-agent-skill.test.d.ts +0 -2
  417. package/dist/tabwright-agent-skill.test.d.ts.map +0 -1
  418. package/dist/tabwright-agent-skill.test.js +0 -51
  419. package/dist/tabwright-agent-skill.test.js.map +0 -1
  420. package/dist/test-declarations.d.ts.map +0 -1
  421. package/dist/test-declarations.js.map +0 -1
  422. package/dist/test-utils.d.ts +0 -69
  423. package/dist/test-utils.d.ts.map +0 -1
  424. package/dist/test-utils.js +0 -448
  425. package/dist/test-utils.js.map +0 -1
  426. package/dist/test-utils.test.d.ts +0 -2
  427. package/dist/test-utils.test.d.ts.map +0 -1
  428. package/dist/test-utils.test.js +0 -55
  429. package/dist/test-utils.test.js.map +0 -1
  430. package/dist/utils.d.ts.map +0 -1
  431. package/dist/utils.js.map +0 -1
  432. package/dist/wait-for-page-load.d.ts.map +0 -1
  433. package/dist/wait-for-page-load.js.map +0 -1
  434. package/dist/workflow-capability.d.ts.map +0 -1
  435. package/dist/workflow-capability.js.map +0 -1
  436. package/dist/workflow-script-flow.test.d.ts +0 -2
  437. package/dist/workflow-script-flow.test.d.ts.map +0 -1
  438. package/dist/workflow-script-flow.test.js +0 -285
  439. package/dist/workflow-script-flow.test.js.map +0 -1
  440. package/src/__snapshots__/x.com.processed.html +0 -1003
  441. package/src/__snapshots__/x.com.processed.withStyles.html +0 -2720
  442. package/src/a11y-client.ts +0 -241
  443. package/src/agent-skills/conan-config/SKILL.md +0 -141
  444. package/src/agent-skills/conan-config/agents/openai.yaml +0 -4
  445. package/src/aria-snapshot.test.ts +0 -311
  446. package/src/aria-snapshot.ts +0 -1681
  447. package/src/aria-snapshot.unit.test.ts +0 -615
  448. package/src/aria-snapshots/github-interactive.txt +0 -193
  449. package/src/aria-snapshots/github-raw.txt +0 -309
  450. package/src/aria-snapshots/hackernews-interactive.txt +0 -477
  451. package/src/aria-snapshots/hackernews-raw.txt +0 -428
  452. package/src/aria-snapshots/prosemirror-interactive.txt +0 -66
  453. package/src/aria-snapshots/prosemirror-raw.txt +0 -145
  454. package/src/assets/aria-labels-hacker-news.png +0 -0
  455. package/src/assets/aria-labels-old-reddit.png +0 -0
  456. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +0 -5
  457. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +0 -18
  458. package/src/assets/x.com.html +0 -32946
  459. package/src/browser-config.ts +0 -179
  460. package/src/browser-install.ts +0 -284
  461. package/src/browser-launch.ts +0 -75
  462. package/src/builtin-capabilities.ts +0 -2765
  463. package/src/capability-agent-skill.ts +0 -305
  464. package/src/capability-auth-state.ts +0 -197
  465. package/src/capability-auth.ts +0 -249
  466. package/src/capability-cli-confirmation.test.ts +0 -90
  467. package/src/capability-options.test.ts +0 -89
  468. package/src/capability-options.ts +0 -57
  469. package/src/capability-package.test.ts +0 -204
  470. package/src/capability-package.ts +0 -555
  471. package/src/capability-registry.test.ts +0 -1905
  472. package/src/capability-registry.ts +0 -1234
  473. package/src/capability-runner.ts +0 -801
  474. package/src/capability-search-relevance.test.ts +0 -73
  475. package/src/capability-studio.test.ts +0 -45
  476. package/src/capability-studio.ts +0 -641
  477. package/src/cdp-log.test.ts +0 -131
  478. package/src/cdp-log.ts +0 -112
  479. package/src/cdp-relay.ts +0 -2944
  480. package/src/cdp-session.ts +0 -77
  481. package/src/cdp-types.ts +0 -158
  482. package/src/channel-owner-inspect.test.ts +0 -94
  483. package/src/chrome-discovery.test.ts +0 -50
  484. package/src/chrome-discovery.ts +0 -220
  485. package/src/clean-html.ts +0 -141
  486. package/src/cli-help.test.ts +0 -123
  487. package/src/cli.ts +0 -3181
  488. package/src/cloud-client.ts +0 -179
  489. package/src/create-logger.ts +0 -38
  490. package/src/debugger-examples-types.ts +0 -16
  491. package/src/debugger-examples.ts +0 -66
  492. package/src/debugger.ts +0 -708
  493. package/src/diff-utils.test.ts +0 -152
  494. package/src/diff-utils.ts +0 -70
  495. package/src/doctor.test.ts +0 -244
  496. package/src/doctor.ts +0 -321
  497. package/src/editor-examples.ts +0 -158
  498. package/src/editor.ts +0 -426
  499. package/src/env-compat.ts +0 -28
  500. package/src/executor.ts +0 -1824
  501. package/src/executor.unit.test.ts +0 -168
  502. package/src/extension-connection.test.ts +0 -855
  503. package/src/extension-icon-warning.test.ts +0 -45
  504. package/src/ghost-browser.ts +0 -149
  505. package/src/ghost-cursor-client.ts +0 -494
  506. package/src/ghost-cursor-controller.ts +0 -129
  507. package/src/ghost-cursor.ts +0 -123
  508. package/src/htmlrewrite.test.ts +0 -8008
  509. package/src/htmlrewrite.ts +0 -390
  510. package/src/index.ts +0 -53
  511. package/src/kill-port.ts +0 -219
  512. package/src/kitty-graphics.test.ts +0 -139
  513. package/src/kitty-graphics.ts +0 -79
  514. package/src/locator-selector.test.ts +0 -119
  515. package/src/mcp-client.ts +0 -78
  516. package/src/mcp.ts +0 -629
  517. package/src/on-mouse-action.test.ts +0 -226
  518. package/src/options-page.test.ts +0 -839
  519. package/src/package-paths.ts +0 -38
  520. package/src/page-markdown.ts +0 -240
  521. package/src/performance-examples.ts +0 -186
  522. package/src/playwright-import.ts +0 -59
  523. package/src/popup-relocation.test.ts +0 -163
  524. package/src/product-paths.test.ts +0 -47
  525. package/src/product-paths.ts +0 -28
  526. package/src/protocol.test.ts +0 -52
  527. package/src/protocol.ts +0 -351
  528. package/src/react-source.ts +0 -379
  529. package/src/relay-client.test.ts +0 -375
  530. package/src/relay-client.ts +0 -572
  531. package/src/relay-core.test.ts +0 -1603
  532. package/src/relay-navigation.test.ts +0 -790
  533. package/src/relay-session.test.ts +0 -1375
  534. package/src/relay-state.test.ts +0 -729
  535. package/src/relay-state.ts +0 -561
  536. package/src/replay-ai-index.test.ts +0 -278
  537. package/src/replay-ai-index.ts +0 -872
  538. package/src/replay-cli.test.ts +0 -325
  539. package/src/replay-eval.ts +0 -1039
  540. package/src/replay-handoff.test.ts +0 -163
  541. package/src/replay-handoff.ts +0 -109
  542. package/src/replay-workflow-compiler.test.ts +0 -250
  543. package/src/replay-workflow-compiler.ts +0 -700
  544. package/src/resource.md +0 -409
  545. package/src/rrweb-recording-relay.test.ts +0 -99
  546. package/src/rrweb-recording-relay.ts +0 -400
  547. package/src/rrweb-recording.ts +0 -322
  548. package/src/scoped-fs.test.ts +0 -80
  549. package/src/scoped-fs.ts +0 -420
  550. package/src/skill-stub.test.ts +0 -24
  551. package/src/snapshot-tools.test.ts +0 -1017
  552. package/src/snapshots/hacker-news-accessibility-full.md +0 -81
  553. package/src/snapshots/hacker-news-accessibility-interactive.md +0 -43
  554. package/src/snapshots/page-markdown-output.txt +0 -16
  555. package/src/snapshots/shadcn-ui-accessibility-full.md +0 -201
  556. package/src/snapshots/shadcn-ui-accessibility-interactive.md +0 -109
  557. package/src/start-relay-server.ts +0 -69
  558. package/src/styles-examples.ts +0 -84
  559. package/src/styles.ts +0 -343
  560. package/src/tabwright-agent-skill.test.ts +0 -61
  561. package/src/tabwright-agent-skill.ts +0 -105
  562. package/src/test-declarations.ts +0 -13
  563. package/src/test-utils.test.ts +0 -70
  564. package/src/test-utils.ts +0 -566
  565. package/src/utils.ts +0 -78
  566. package/src/wait-for-page-load.ts +0 -198
  567. package/src/workflow-capability.ts +0 -417
  568. 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
- })