tabwright 1.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 (599) hide show
  1. package/LICENSE +21 -0
  2. package/bin.js +4 -0
  3. package/dist/a11y-client.js +204 -0
  4. package/dist/agent-skills/tabwright/SKILL.md +119 -0
  5. package/dist/aria-snapshot.d.ts +262 -0
  6. package/dist/aria-snapshot.d.ts.map +1 -0
  7. package/dist/aria-snapshot.js +1256 -0
  8. package/dist/aria-snapshot.js.map +1 -0
  9. package/dist/aria-snapshot.test.d.ts +2 -0
  10. package/dist/aria-snapshot.test.d.ts.map +1 -0
  11. package/dist/aria-snapshot.test.js +270 -0
  12. package/dist/aria-snapshot.test.js.map +1 -0
  13. package/dist/aria-snapshot.unit.test.d.ts +2 -0
  14. package/dist/aria-snapshot.unit.test.d.ts.map +1 -0
  15. package/dist/aria-snapshot.unit.test.js +542 -0
  16. package/dist/aria-snapshot.unit.test.js.map +1 -0
  17. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
  18. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
  19. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
  20. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
  21. package/dist/bippy.js +894 -0
  22. package/dist/browser-config.d.ts +13 -0
  23. package/dist/browser-config.d.ts.map +1 -0
  24. package/dist/browser-config.js +126 -0
  25. package/dist/browser-config.js.map +1 -0
  26. package/dist/browser-install.d.ts +16 -0
  27. package/dist/browser-install.d.ts.map +1 -0
  28. package/dist/browser-install.js +238 -0
  29. package/dist/browser-install.js.map +1 -0
  30. package/dist/browser-launch.d.ts +17 -0
  31. package/dist/browser-launch.d.ts.map +1 -0
  32. package/dist/browser-launch.js +44 -0
  33. package/dist/browser-launch.js.map +1 -0
  34. package/dist/builtin-capabilities.d.ts +28 -0
  35. package/dist/builtin-capabilities.d.ts.map +1 -0
  36. package/dist/builtin-capabilities.js +2673 -0
  37. package/dist/builtin-capabilities.js.map +1 -0
  38. package/dist/capability-agent-skill.d.ts +60 -0
  39. package/dist/capability-agent-skill.d.ts.map +1 -0
  40. package/dist/capability-agent-skill.js +225 -0
  41. package/dist/capability-agent-skill.js.map +1 -0
  42. package/dist/capability-auth-state.d.ts +34 -0
  43. package/dist/capability-auth-state.d.ts.map +1 -0
  44. package/dist/capability-auth-state.js +157 -0
  45. package/dist/capability-auth-state.js.map +1 -0
  46. package/dist/capability-auth.d.ts +36 -0
  47. package/dist/capability-auth.d.ts.map +1 -0
  48. package/dist/capability-auth.js +198 -0
  49. package/dist/capability-auth.js.map +1 -0
  50. package/dist/capability-cli-confirmation.test.d.ts +2 -0
  51. package/dist/capability-cli-confirmation.test.d.ts.map +1 -0
  52. package/dist/capability-cli-confirmation.test.js +79 -0
  53. package/dist/capability-cli-confirmation.test.js.map +1 -0
  54. package/dist/capability-options.d.ts +20 -0
  55. package/dist/capability-options.d.ts.map +1 -0
  56. package/dist/capability-options.js +31 -0
  57. package/dist/capability-options.js.map +1 -0
  58. package/dist/capability-options.test.d.ts +2 -0
  59. package/dist/capability-options.test.d.ts.map +1 -0
  60. package/dist/capability-options.test.js +81 -0
  61. package/dist/capability-options.test.js.map +1 -0
  62. package/dist/capability-package.d.ts +27 -0
  63. package/dist/capability-package.d.ts.map +1 -0
  64. package/dist/capability-package.js +444 -0
  65. package/dist/capability-package.js.map +1 -0
  66. package/dist/capability-package.test.d.ts +2 -0
  67. package/dist/capability-package.test.d.ts.map +1 -0
  68. package/dist/capability-package.test.js +179 -0
  69. package/dist/capability-package.test.js.map +1 -0
  70. package/dist/capability-registry.d.ts +262 -0
  71. package/dist/capability-registry.d.ts.map +1 -0
  72. package/dist/capability-registry.js +931 -0
  73. package/dist/capability-registry.js.map +1 -0
  74. package/dist/capability-registry.test.d.ts +2 -0
  75. package/dist/capability-registry.test.d.ts.map +1 -0
  76. package/dist/capability-registry.test.js +1683 -0
  77. package/dist/capability-registry.test.js.map +1 -0
  78. package/dist/capability-runner.d.ts +99 -0
  79. package/dist/capability-runner.d.ts.map +1 -0
  80. package/dist/capability-runner.js +608 -0
  81. package/dist/capability-runner.js.map +1 -0
  82. package/dist/capability-search-relevance.test.d.ts +2 -0
  83. package/dist/capability-search-relevance.test.d.ts.map +1 -0
  84. package/dist/capability-search-relevance.test.js +67 -0
  85. package/dist/capability-search-relevance.test.js.map +1 -0
  86. package/dist/capability-studio.d.ts +11 -0
  87. package/dist/capability-studio.d.ts.map +1 -0
  88. package/dist/capability-studio.js +593 -0
  89. package/dist/capability-studio.js.map +1 -0
  90. package/dist/capability-studio.test.d.ts +2 -0
  91. package/dist/capability-studio.test.d.ts.map +1 -0
  92. package/dist/capability-studio.test.js +41 -0
  93. package/dist/capability-studio.test.js.map +1 -0
  94. package/dist/cdp-log.d.ts +19 -0
  95. package/dist/cdp-log.d.ts.map +1 -0
  96. package/dist/cdp-log.js +83 -0
  97. package/dist/cdp-log.js.map +1 -0
  98. package/dist/cdp-log.test.d.ts +2 -0
  99. package/dist/cdp-log.test.d.ts.map +1 -0
  100. package/dist/cdp-log.test.js +109 -0
  101. package/dist/cdp-log.test.js.map +1 -0
  102. package/dist/cdp-relay.d.ts +19 -0
  103. package/dist/cdp-relay.d.ts.map +1 -0
  104. package/dist/cdp-relay.js +2375 -0
  105. package/dist/cdp-relay.js.map +1 -0
  106. package/dist/cdp-session.d.ts +37 -0
  107. package/dist/cdp-session.d.ts.map +1 -0
  108. package/dist/cdp-session.js +36 -0
  109. package/dist/cdp-session.js.map +1 -0
  110. package/dist/cdp-types.d.ts +65 -0
  111. package/dist/cdp-types.d.ts.map +1 -0
  112. package/dist/cdp-types.js +91 -0
  113. package/dist/cdp-types.js.map +1 -0
  114. package/dist/channel-owner-inspect.test.d.ts +2 -0
  115. package/dist/channel-owner-inspect.test.d.ts.map +1 -0
  116. package/dist/channel-owner-inspect.test.js +75 -0
  117. package/dist/channel-owner-inspect.test.js.map +1 -0
  118. package/dist/chrome-discovery.d.ts +65 -0
  119. package/dist/chrome-discovery.d.ts.map +1 -0
  120. package/dist/chrome-discovery.js +173 -0
  121. package/dist/chrome-discovery.js.map +1 -0
  122. package/dist/chrome-discovery.test.d.ts +2 -0
  123. package/dist/chrome-discovery.test.d.ts.map +1 -0
  124. package/dist/chrome-discovery.test.js +41 -0
  125. package/dist/chrome-discovery.test.js.map +1 -0
  126. package/dist/clean-html.d.ts +11 -0
  127. package/dist/clean-html.d.ts.map +1 -0
  128. package/dist/clean-html.js +106 -0
  129. package/dist/clean-html.js.map +1 -0
  130. package/dist/cli-help.test.d.ts +2 -0
  131. package/dist/cli-help.test.d.ts.map +1 -0
  132. package/dist/cli-help.test.js +98 -0
  133. package/dist/cli-help.test.js.map +1 -0
  134. package/dist/cli.d.ts +3 -0
  135. package/dist/cli.d.ts.map +1 -0
  136. package/dist/cli.js +2709 -0
  137. package/dist/cli.js.map +1 -0
  138. package/dist/cloud-client.d.ts +56 -0
  139. package/dist/cloud-client.d.ts.map +1 -0
  140. package/dist/cloud-client.js +127 -0
  141. package/dist/cloud-client.js.map +1 -0
  142. package/dist/create-logger.d.ts +9 -0
  143. package/dist/create-logger.d.ts.map +1 -0
  144. package/dist/create-logger.js +27 -0
  145. package/dist/create-logger.js.map +1 -0
  146. package/dist/debugger-api.md +458 -0
  147. package/dist/debugger-examples-types.d.ts +24 -0
  148. package/dist/debugger-examples-types.d.ts.map +1 -0
  149. package/dist/debugger-examples-types.js +2 -0
  150. package/dist/debugger-examples-types.js.map +1 -0
  151. package/dist/debugger-examples.d.ts +6 -0
  152. package/dist/debugger-examples.d.ts.map +1 -0
  153. package/dist/debugger-examples.js +53 -0
  154. package/dist/debugger-examples.js.map +1 -0
  155. package/dist/debugger.d.ts +381 -0
  156. package/dist/debugger.d.ts.map +1 -0
  157. package/dist/debugger.js +630 -0
  158. package/dist/debugger.js.map +1 -0
  159. package/dist/diff-utils.d.ts +20 -0
  160. package/dist/diff-utils.d.ts.map +1 -0
  161. package/dist/diff-utils.js +50 -0
  162. package/dist/diff-utils.js.map +1 -0
  163. package/dist/diff-utils.test.d.ts +2 -0
  164. package/dist/diff-utils.test.d.ts.map +1 -0
  165. package/dist/diff-utils.test.js +137 -0
  166. package/dist/diff-utils.test.js.map +1 -0
  167. package/dist/doctor.d.ts +44 -0
  168. package/dist/doctor.d.ts.map +1 -0
  169. package/dist/doctor.js +246 -0
  170. package/dist/doctor.js.map +1 -0
  171. package/dist/doctor.test.d.ts +2 -0
  172. package/dist/doctor.test.d.ts.map +1 -0
  173. package/dist/doctor.test.js +208 -0
  174. package/dist/doctor.test.js.map +1 -0
  175. package/dist/editor-api.md +374 -0
  176. package/dist/editor-examples.d.ts +11 -0
  177. package/dist/editor-examples.d.ts.map +1 -0
  178. package/dist/editor-examples.js +124 -0
  179. package/dist/editor-examples.js.map +1 -0
  180. package/dist/editor.d.ts +203 -0
  181. package/dist/editor.d.ts.map +1 -0
  182. package/dist/editor.js +363 -0
  183. package/dist/editor.js.map +1 -0
  184. package/dist/env-compat.d.ts +2 -0
  185. package/dist/env-compat.d.ts.map +1 -0
  186. package/dist/env-compat.js +27 -0
  187. package/dist/env-compat.js.map +1 -0
  188. package/dist/executor.d.ts +229 -0
  189. package/dist/executor.d.ts.map +1 -0
  190. package/dist/executor.js +1465 -0
  191. package/dist/executor.js.map +1 -0
  192. package/dist/executor.unit.test.d.ts +2 -0
  193. package/dist/executor.unit.test.d.ts.map +1 -0
  194. package/dist/executor.unit.test.js +143 -0
  195. package/dist/executor.unit.test.js.map +1 -0
  196. package/dist/extension/_locales/en/messages.json +278 -0
  197. package/dist/extension/_locales/zh_CN/messages.json +256 -0
  198. package/dist/extension/assets/options-CYH96Lcx.css +1349 -0
  199. package/dist/extension/background.js +3994 -0
  200. package/dist/extension/icons/SolarCursorSquareBold.png +0 -0
  201. package/dist/extension/icons/icon-black-128.png +0 -0
  202. package/dist/extension/icons/icon-black-16.png +0 -0
  203. package/dist/extension/icons/icon-black-32.png +0 -0
  204. package/dist/extension/icons/icon-black-48.png +0 -0
  205. package/dist/extension/icons/icon-gray-128.png +0 -0
  206. package/dist/extension/icons/icon-gray-16.png +0 -0
  207. package/dist/extension/icons/icon-gray-32.png +0 -0
  208. package/dist/extension/icons/icon-gray-48.png +0 -0
  209. package/dist/extension/icons/icon-green-128.png +0 -0
  210. package/dist/extension/icons/icon-green-16.png +0 -0
  211. package/dist/extension/icons/icon-green-32.png +0 -0
  212. package/dist/extension/icons/icon-green-48.png +0 -0
  213. package/dist/extension/icons/tabwright-icon-black.png +0 -0
  214. package/dist/extension/icons/tabwright-icon-gray-disabled.png +0 -0
  215. package/dist/extension/icons/tabwright-icon-gray-disabled.svg +1 -0
  216. package/dist/extension/manifest.json +54 -0
  217. package/dist/extension/options.js +16145 -0
  218. package/dist/extension/rrweb-recorder.js +12952 -0
  219. package/dist/extension/src/options.html +165 -0
  220. package/dist/extension/src/prism-bash.min.js +1 -0
  221. package/dist/extension/src/prism.min.js +1 -0
  222. package/dist/extension/src/welcome.html +396 -0
  223. package/dist/extension-connection.test.d.ts +2 -0
  224. package/dist/extension-connection.test.d.ts.map +1 -0
  225. package/dist/extension-connection.test.js +708 -0
  226. package/dist/extension-connection.test.js.map +1 -0
  227. package/dist/extension-icon-warning.test.d.ts +2 -0
  228. package/dist/extension-icon-warning.test.d.ts.map +1 -0
  229. package/dist/extension-icon-warning.test.js +33 -0
  230. package/dist/extension-icon-warning.test.js.map +1 -0
  231. package/dist/ghost-browser.d.ts +62 -0
  232. package/dist/ghost-browser.d.ts.map +1 -0
  233. package/dist/ghost-browser.js +107 -0
  234. package/dist/ghost-browser.js.map +1 -0
  235. package/dist/ghost-cursor-client.js +374 -0
  236. package/dist/ghost-cursor-controller.d.ts +46 -0
  237. package/dist/ghost-cursor-controller.d.ts.map +1 -0
  238. package/dist/ghost-cursor-controller.js +98 -0
  239. package/dist/ghost-cursor-controller.js.map +1 -0
  240. package/dist/ghost-cursor.d.ts +27 -0
  241. package/dist/ghost-cursor.d.ts.map +1 -0
  242. package/dist/ghost-cursor.js +79 -0
  243. package/dist/ghost-cursor.js.map +1 -0
  244. package/dist/htmlrewrite.d.ts +8 -0
  245. package/dist/htmlrewrite.d.ts.map +1 -0
  246. package/dist/htmlrewrite.js +339 -0
  247. package/dist/htmlrewrite.js.map +1 -0
  248. package/dist/htmlrewrite.test.d.ts +2 -0
  249. package/dist/htmlrewrite.test.d.ts.map +1 -0
  250. package/dist/htmlrewrite.test.js +7975 -0
  251. package/dist/htmlrewrite.test.js.map +1 -0
  252. package/dist/index.d.ts +20 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +11 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/kill-port.d.ts +29 -0
  257. package/dist/kill-port.d.ts.map +1 -0
  258. package/dist/kill-port.js +190 -0
  259. package/dist/kill-port.js.map +1 -0
  260. package/dist/kitty-graphics.d.ts +22 -0
  261. package/dist/kitty-graphics.d.ts.map +1 -0
  262. package/dist/kitty-graphics.js +71 -0
  263. package/dist/kitty-graphics.js.map +1 -0
  264. package/dist/kitty-graphics.test.d.ts +2 -0
  265. package/dist/kitty-graphics.test.d.ts.map +1 -0
  266. package/dist/kitty-graphics.test.js +125 -0
  267. package/dist/kitty-graphics.test.js.map +1 -0
  268. package/dist/locator-selector.test.d.ts +2 -0
  269. package/dist/locator-selector.test.d.ts.map +1 -0
  270. package/dist/locator-selector.test.js +98 -0
  271. package/dist/locator-selector.test.js.map +1 -0
  272. package/dist/mcp-client.d.ts +20 -0
  273. package/dist/mcp-client.d.ts.map +1 -0
  274. package/dist/mcp-client.js +56 -0
  275. package/dist/mcp-client.js.map +1 -0
  276. package/dist/mcp.d.ts +6 -0
  277. package/dist/mcp.d.ts.map +1 -0
  278. package/dist/mcp.js +511 -0
  279. package/dist/mcp.js.map +1 -0
  280. package/dist/on-mouse-action.test.d.ts +2 -0
  281. package/dist/on-mouse-action.test.d.ts.map +1 -0
  282. package/dist/on-mouse-action.test.js +180 -0
  283. package/dist/on-mouse-action.test.js.map +1 -0
  284. package/dist/options-page.test.d.ts +2 -0
  285. package/dist/options-page.test.d.ts.map +1 -0
  286. package/dist/options-page.test.js +773 -0
  287. package/dist/options-page.test.js.map +1 -0
  288. package/dist/package-paths.d.ts +4 -0
  289. package/dist/package-paths.d.ts.map +1 -0
  290. package/dist/package-paths.js +30 -0
  291. package/dist/package-paths.js.map +1 -0
  292. package/dist/page-markdown.d.ts +40 -0
  293. package/dist/page-markdown.d.ts.map +1 -0
  294. package/dist/page-markdown.js +181 -0
  295. package/dist/page-markdown.js.map +1 -0
  296. package/dist/performance-examples.d.ts +5 -0
  297. package/dist/performance-examples.d.ts.map +1 -0
  298. package/dist/performance-examples.js +112 -0
  299. package/dist/performance-examples.js.map +1 -0
  300. package/dist/performance-profiling.md +417 -0
  301. package/dist/playwright-import.d.ts +19 -0
  302. package/dist/playwright-import.d.ts.map +1 -0
  303. package/dist/playwright-import.js +40 -0
  304. package/dist/playwright-import.js.map +1 -0
  305. package/dist/popup-relocation.test.d.ts +7 -0
  306. package/dist/popup-relocation.test.d.ts.map +1 -0
  307. package/dist/popup-relocation.test.js +139 -0
  308. package/dist/popup-relocation.test.js.map +1 -0
  309. package/dist/product-paths.d.ts +9 -0
  310. package/dist/product-paths.d.ts.map +1 -0
  311. package/dist/product-paths.js +24 -0
  312. package/dist/product-paths.js.map +1 -0
  313. package/dist/product-paths.test.d.ts +2 -0
  314. package/dist/product-paths.test.d.ts.map +1 -0
  315. package/dist/product-paths.test.js +39 -0
  316. package/dist/product-paths.test.js.map +1 -0
  317. package/dist/prompt.md +1004 -0
  318. package/dist/protocol.d.ts +248 -0
  319. package/dist/protocol.d.ts.map +1 -0
  320. package/dist/protocol.js +59 -0
  321. package/dist/protocol.js.map +1 -0
  322. package/dist/protocol.test.d.ts +2 -0
  323. package/dist/protocol.test.d.ts.map +1 -0
  324. package/dist/protocol.test.js +31 -0
  325. package/dist/protocol.test.js.map +1 -0
  326. package/dist/react-source.d.ts +57 -0
  327. package/dist/react-source.d.ts.map +1 -0
  328. package/dist/react-source.js +254 -0
  329. package/dist/react-source.js.map +1 -0
  330. package/dist/readability.js +1674 -0
  331. package/dist/relay-client.d.ts +104 -0
  332. package/dist/relay-client.d.ts.map +1 -0
  333. package/dist/relay-client.js +426 -0
  334. package/dist/relay-client.js.map +1 -0
  335. package/dist/relay-client.test.d.ts +2 -0
  336. package/dist/relay-client.test.d.ts.map +1 -0
  337. package/dist/relay-client.test.js +305 -0
  338. package/dist/relay-client.test.js.map +1 -0
  339. package/dist/relay-core.test.d.ts +2 -0
  340. package/dist/relay-core.test.d.ts.map +1 -0
  341. package/dist/relay-core.test.js +1427 -0
  342. package/dist/relay-core.test.js.map +1 -0
  343. package/dist/relay-navigation.test.d.ts +2 -0
  344. package/dist/relay-navigation.test.d.ts.map +1 -0
  345. package/dist/relay-navigation.test.js +661 -0
  346. package/dist/relay-navigation.test.js.map +1 -0
  347. package/dist/relay-session.test.d.ts +2 -0
  348. package/dist/relay-session.test.d.ts.map +1 -0
  349. package/dist/relay-session.test.js +1121 -0
  350. package/dist/relay-session.test.js.map +1 -0
  351. package/dist/relay-state.d.ts +178 -0
  352. package/dist/relay-state.d.ts.map +1 -0
  353. package/dist/relay-state.js +346 -0
  354. package/dist/relay-state.js.map +1 -0
  355. package/dist/relay-state.test.d.ts +2 -0
  356. package/dist/relay-state.test.d.ts.map +1 -0
  357. package/dist/relay-state.test.js +594 -0
  358. package/dist/relay-state.test.js.map +1 -0
  359. package/dist/replay-ai-index.d.ts +99 -0
  360. package/dist/replay-ai-index.d.ts.map +1 -0
  361. package/dist/replay-ai-index.js +677 -0
  362. package/dist/replay-ai-index.js.map +1 -0
  363. package/dist/replay-ai-index.test.d.ts +2 -0
  364. package/dist/replay-ai-index.test.d.ts.map +1 -0
  365. package/dist/replay-ai-index.test.js +255 -0
  366. package/dist/replay-ai-index.test.js.map +1 -0
  367. package/dist/replay-cli.test.d.ts +2 -0
  368. package/dist/replay-cli.test.d.ts.map +1 -0
  369. package/dist/replay-cli.test.js +275 -0
  370. package/dist/replay-cli.test.js.map +1 -0
  371. package/dist/replay-eval.d.ts +44 -0
  372. package/dist/replay-eval.d.ts.map +1 -0
  373. package/dist/replay-eval.js +902 -0
  374. package/dist/replay-eval.js.map +1 -0
  375. package/dist/replay-handoff.d.ts +29 -0
  376. package/dist/replay-handoff.d.ts.map +1 -0
  377. package/dist/replay-handoff.js +83 -0
  378. package/dist/replay-handoff.js.map +1 -0
  379. package/dist/replay-handoff.test.d.ts +2 -0
  380. package/dist/replay-handoff.test.d.ts.map +1 -0
  381. package/dist/replay-handoff.test.js +123 -0
  382. package/dist/replay-handoff.test.js.map +1 -0
  383. package/dist/replay-workflow-compiler.d.ts +44 -0
  384. package/dist/replay-workflow-compiler.d.ts.map +1 -0
  385. package/dist/replay-workflow-compiler.js +601 -0
  386. package/dist/replay-workflow-compiler.js.map +1 -0
  387. package/dist/replay-workflow-compiler.test.d.ts +2 -0
  388. package/dist/replay-workflow-compiler.test.d.ts.map +1 -0
  389. package/dist/replay-workflow-compiler.test.js +223 -0
  390. package/dist/replay-workflow-compiler.test.js.map +1 -0
  391. package/dist/rrweb-recording-relay.d.ts +56 -0
  392. package/dist/rrweb-recording-relay.d.ts.map +1 -0
  393. package/dist/rrweb-recording-relay.js +299 -0
  394. package/dist/rrweb-recording-relay.js.map +1 -0
  395. package/dist/rrweb-recording-relay.test.d.ts +2 -0
  396. package/dist/rrweb-recording-relay.test.d.ts.map +1 -0
  397. package/dist/rrweb-recording-relay.test.js +85 -0
  398. package/dist/rrweb-recording-relay.test.js.map +1 -0
  399. package/dist/rrweb-recording.d.ts +104 -0
  400. package/dist/rrweb-recording.d.ts.map +1 -0
  401. package/dist/rrweb-recording.js +180 -0
  402. package/dist/rrweb-recording.js.map +1 -0
  403. package/dist/scoped-fs.d.ts +95 -0
  404. package/dist/scoped-fs.d.ts.map +1 -0
  405. package/dist/scoped-fs.js +358 -0
  406. package/dist/scoped-fs.js.map +1 -0
  407. package/dist/scoped-fs.test.d.ts +5 -0
  408. package/dist/scoped-fs.test.d.ts.map +1 -0
  409. package/dist/scoped-fs.test.js +73 -0
  410. package/dist/scoped-fs.test.js.map +1 -0
  411. package/dist/selector-generator.js +7378 -0
  412. package/dist/skill-stub.test.d.ts +2 -0
  413. package/dist/skill-stub.test.d.ts.map +1 -0
  414. package/dist/skill-stub.test.js +22 -0
  415. package/dist/skill-stub.test.js.map +1 -0
  416. package/dist/snapshot-tools.test.d.ts +2 -0
  417. package/dist/snapshot-tools.test.d.ts.map +1 -0
  418. package/dist/snapshot-tools.test.js +856 -0
  419. package/dist/snapshot-tools.test.js.map +1 -0
  420. package/dist/start-relay-server.d.ts +6 -0
  421. package/dist/start-relay-server.d.ts.map +1 -0
  422. package/dist/start-relay-server.js +57 -0
  423. package/dist/start-relay-server.js.map +1 -0
  424. package/dist/styles-api.md +124 -0
  425. package/dist/styles-examples.d.ts +8 -0
  426. package/dist/styles-examples.d.ts.map +1 -0
  427. package/dist/styles-examples.js +64 -0
  428. package/dist/styles-examples.js.map +1 -0
  429. package/dist/styles.d.ts +27 -0
  430. package/dist/styles.d.ts.map +1 -0
  431. package/dist/styles.js +231 -0
  432. package/dist/styles.js.map +1 -0
  433. package/dist/tabwright-agent-skill.d.ts +30 -0
  434. package/dist/tabwright-agent-skill.d.ts.map +1 -0
  435. package/dist/tabwright-agent-skill.js +74 -0
  436. package/dist/tabwright-agent-skill.js.map +1 -0
  437. package/dist/tabwright-agent-skill.test.d.ts +2 -0
  438. package/dist/tabwright-agent-skill.test.d.ts.map +1 -0
  439. package/dist/tabwright-agent-skill.test.js +51 -0
  440. package/dist/tabwright-agent-skill.test.js.map +1 -0
  441. package/dist/test-declarations.d.ts +13 -0
  442. package/dist/test-declarations.d.ts.map +1 -0
  443. package/dist/test-declarations.js +2 -0
  444. package/dist/test-declarations.js.map +1 -0
  445. package/dist/test-utils.d.ts +69 -0
  446. package/dist/test-utils.d.ts.map +1 -0
  447. package/dist/test-utils.js +448 -0
  448. package/dist/test-utils.js.map +1 -0
  449. package/dist/test-utils.test.d.ts +2 -0
  450. package/dist/test-utils.test.d.ts.map +1 -0
  451. package/dist/test-utils.test.js +55 -0
  452. package/dist/test-utils.test.js.map +1 -0
  453. package/dist/utils.d.ts +26 -0
  454. package/dist/utils.d.ts.map +1 -0
  455. package/dist/utils.js +60 -0
  456. package/dist/utils.js.map +1 -0
  457. package/dist/wait-for-page-load.d.ts +16 -0
  458. package/dist/wait-for-page-load.d.ts.map +1 -0
  459. package/dist/wait-for-page-load.js +146 -0
  460. package/dist/wait-for-page-load.js.map +1 -0
  461. package/dist/workflow-capability.d.ts +72 -0
  462. package/dist/workflow-capability.d.ts.map +1 -0
  463. package/dist/workflow-capability.js +316 -0
  464. package/dist/workflow-capability.js.map +1 -0
  465. package/dist/workflow-script-flow.test.d.ts +2 -0
  466. package/dist/workflow-script-flow.test.d.ts.map +1 -0
  467. package/dist/workflow-script-flow.test.js +285 -0
  468. package/dist/workflow-script-flow.test.js.map +1 -0
  469. package/package.json +80 -0
  470. package/src/__snapshots__/x.com.processed.html +1003 -0
  471. package/src/__snapshots__/x.com.processed.withStyles.html +2720 -0
  472. package/src/a11y-client.ts +241 -0
  473. package/src/agent-skills/conan-config/SKILL.md +141 -0
  474. package/src/agent-skills/conan-config/agents/openai.yaml +4 -0
  475. package/src/aria-snapshot.test.ts +311 -0
  476. package/src/aria-snapshot.ts +1681 -0
  477. package/src/aria-snapshot.unit.test.ts +615 -0
  478. package/src/aria-snapshots/github-interactive.txt +193 -0
  479. package/src/aria-snapshots/github-raw.txt +309 -0
  480. package/src/aria-snapshots/hackernews-interactive.txt +477 -0
  481. package/src/aria-snapshots/hackernews-raw.txt +428 -0
  482. package/src/aria-snapshots/prosemirror-interactive.txt +66 -0
  483. package/src/aria-snapshots/prosemirror-raw.txt +145 -0
  484. package/src/assets/aria-labels-hacker-news.png +0 -0
  485. package/src/assets/aria-labels-old-reddit.png +0 -0
  486. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
  487. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
  488. package/src/assets/x.com.html +32946 -0
  489. package/src/browser-config.ts +179 -0
  490. package/src/browser-install.ts +284 -0
  491. package/src/browser-launch.ts +75 -0
  492. package/src/builtin-capabilities.ts +2765 -0
  493. package/src/capability-agent-skill.ts +305 -0
  494. package/src/capability-auth-state.ts +197 -0
  495. package/src/capability-auth.ts +249 -0
  496. package/src/capability-cli-confirmation.test.ts +90 -0
  497. package/src/capability-options.test.ts +89 -0
  498. package/src/capability-options.ts +57 -0
  499. package/src/capability-package.test.ts +204 -0
  500. package/src/capability-package.ts +555 -0
  501. package/src/capability-registry.test.ts +1905 -0
  502. package/src/capability-registry.ts +1234 -0
  503. package/src/capability-runner.ts +801 -0
  504. package/src/capability-search-relevance.test.ts +73 -0
  505. package/src/capability-studio.test.ts +45 -0
  506. package/src/capability-studio.ts +641 -0
  507. package/src/cdp-log.test.ts +131 -0
  508. package/src/cdp-log.ts +112 -0
  509. package/src/cdp-relay.ts +2944 -0
  510. package/src/cdp-session.ts +77 -0
  511. package/src/cdp-types.ts +158 -0
  512. package/src/channel-owner-inspect.test.ts +94 -0
  513. package/src/chrome-discovery.test.ts +50 -0
  514. package/src/chrome-discovery.ts +220 -0
  515. package/src/clean-html.ts +141 -0
  516. package/src/cli-help.test.ts +123 -0
  517. package/src/cli.ts +3181 -0
  518. package/src/cloud-client.ts +179 -0
  519. package/src/create-logger.ts +38 -0
  520. package/src/debugger-examples-types.ts +16 -0
  521. package/src/debugger-examples.ts +66 -0
  522. package/src/debugger.ts +708 -0
  523. package/src/diff-utils.test.ts +152 -0
  524. package/src/diff-utils.ts +70 -0
  525. package/src/doctor.test.ts +244 -0
  526. package/src/doctor.ts +321 -0
  527. package/src/editor-examples.ts +158 -0
  528. package/src/editor.ts +426 -0
  529. package/src/env-compat.ts +28 -0
  530. package/src/executor.ts +1824 -0
  531. package/src/executor.unit.test.ts +168 -0
  532. package/src/extension-connection.test.ts +855 -0
  533. package/src/extension-icon-warning.test.ts +45 -0
  534. package/src/ghost-browser.ts +149 -0
  535. package/src/ghost-cursor-client.ts +494 -0
  536. package/src/ghost-cursor-controller.ts +129 -0
  537. package/src/ghost-cursor.ts +123 -0
  538. package/src/htmlrewrite.test.ts +8008 -0
  539. package/src/htmlrewrite.ts +390 -0
  540. package/src/index.ts +53 -0
  541. package/src/kill-port.ts +219 -0
  542. package/src/kitty-graphics.test.ts +139 -0
  543. package/src/kitty-graphics.ts +79 -0
  544. package/src/locator-selector.test.ts +119 -0
  545. package/src/mcp-client.ts +78 -0
  546. package/src/mcp.ts +629 -0
  547. package/src/on-mouse-action.test.ts +226 -0
  548. package/src/options-page.test.ts +839 -0
  549. package/src/package-paths.ts +38 -0
  550. package/src/page-markdown.ts +240 -0
  551. package/src/performance-examples.ts +186 -0
  552. package/src/playwright-import.ts +59 -0
  553. package/src/popup-relocation.test.ts +163 -0
  554. package/src/product-paths.test.ts +47 -0
  555. package/src/product-paths.ts +28 -0
  556. package/src/protocol.test.ts +52 -0
  557. package/src/protocol.ts +351 -0
  558. package/src/react-source.ts +379 -0
  559. package/src/relay-client.test.ts +375 -0
  560. package/src/relay-client.ts +572 -0
  561. package/src/relay-core.test.ts +1603 -0
  562. package/src/relay-navigation.test.ts +790 -0
  563. package/src/relay-session.test.ts +1375 -0
  564. package/src/relay-state.test.ts +729 -0
  565. package/src/relay-state.ts +561 -0
  566. package/src/replay-ai-index.test.ts +278 -0
  567. package/src/replay-ai-index.ts +872 -0
  568. package/src/replay-cli.test.ts +325 -0
  569. package/src/replay-eval.ts +1039 -0
  570. package/src/replay-handoff.test.ts +163 -0
  571. package/src/replay-handoff.ts +109 -0
  572. package/src/replay-workflow-compiler.test.ts +250 -0
  573. package/src/replay-workflow-compiler.ts +700 -0
  574. package/src/resource.md +409 -0
  575. package/src/rrweb-recording-relay.test.ts +99 -0
  576. package/src/rrweb-recording-relay.ts +400 -0
  577. package/src/rrweb-recording.ts +322 -0
  578. package/src/scoped-fs.test.ts +80 -0
  579. package/src/scoped-fs.ts +420 -0
  580. package/src/skill-stub.test.ts +24 -0
  581. package/src/skill.md +1413 -0
  582. package/src/snapshot-tools.test.ts +1017 -0
  583. package/src/snapshots/hacker-news-accessibility-full.md +81 -0
  584. package/src/snapshots/hacker-news-accessibility-interactive.md +43 -0
  585. package/src/snapshots/page-markdown-output.txt +16 -0
  586. package/src/snapshots/shadcn-ui-accessibility-full.md +201 -0
  587. package/src/snapshots/shadcn-ui-accessibility-interactive.md +109 -0
  588. package/src/start-relay-server.ts +69 -0
  589. package/src/styles-examples.ts +84 -0
  590. package/src/styles.ts +343 -0
  591. package/src/tabwright-agent-skill.test.ts +61 -0
  592. package/src/tabwright-agent-skill.ts +105 -0
  593. package/src/test-declarations.ts +13 -0
  594. package/src/test-utils.test.ts +70 -0
  595. package/src/test-utils.ts +566 -0
  596. package/src/utils.ts +78 -0
  597. package/src/wait-for-page-load.ts +198 -0
  598. package/src/workflow-capability.ts +417 -0
  599. package/src/workflow-script-flow.test.ts +388 -0
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Browser-side accessibility label renderer.
3
+ * Bundled and injected into page context via CDP.
4
+ */
5
+
6
+ export interface LabelBox {
7
+ x: number
8
+ y: number
9
+ width: number
10
+ height: number
11
+ }
12
+
13
+ export interface A11yLabel {
14
+ ref: string
15
+ role: string
16
+ box: LabelBox
17
+ }
18
+
19
+ // ============================================================================
20
+ // Constants
21
+ // ============================================================================
22
+
23
+ const LABELS_CONTAINER_ID = '__tabwright_labels__'
24
+ const LABELS_TIMER_KEY = '__tabwright_labels_timer__'
25
+
26
+ // Color scheme for labels by role
27
+ const ROLE_COLORS: Record<string, [string, string, string]> = {
28
+ link: ['#FFF785', '#FFC542', '#E3BE23'],
29
+ button: ['#FFE0B2', '#FFCC80', '#FFB74D'],
30
+ textbox: ['#FFCDD2', '#EF9A9A', '#E57373'],
31
+ combobox: ['#F8BBD0', '#F48FB1', '#F06292'],
32
+ searchbox: ['#F8BBD0', '#F48FB1', '#F06292'],
33
+ checkbox: ['#C8E6C9', '#A5D6A7', '#81C784'],
34
+ radio: ['#C8E6C9', '#A5D6A7', '#81C784'],
35
+ slider: ['#BBDEFB', '#90CAF9', '#64B5F6'],
36
+ spinbutton: ['#BBDEFB', '#90CAF9', '#64B5F6'],
37
+ switch: ['#D1C4E9', '#B39DDB', '#9575CD'],
38
+ menuitem: ['#FFE0B2', '#FFCC80', '#FFB74D'],
39
+ menuitemcheckbox: ['#FFE0B2', '#FFCC80', '#FFB74D'],
40
+ menuitemradio: ['#FFE0B2', '#FFCC80', '#FFB74D'],
41
+ option: ['#FFE0B2', '#FFCC80', '#FFB74D'],
42
+ tab: ['#FFE0B2', '#FFCC80', '#FFB74D'],
43
+ treeitem: ['#FFE0B2', '#FFCC80', '#FFB74D'],
44
+ img: ['#B3E5FC', '#81D4FA', '#4FC3F7'],
45
+ video: ['#B3E5FC', '#81D4FA', '#4FC3F7'],
46
+ audio: ['#B3E5FC', '#81D4FA', '#4FC3F7'],
47
+ }
48
+
49
+ const DEFAULT_COLORS: [string, string, string] = ['#FFF9C4', '#FFF59D', '#FFEB3B']
50
+
51
+ // ============================================================================
52
+ // Label Rendering
53
+ // ============================================================================
54
+
55
+ function renderA11yLabels(labels: A11yLabel[]): number {
56
+ const doc = document
57
+ const win = window as typeof window & { [LABELS_TIMER_KEY]?: number | null }
58
+
59
+ // Cancel any pending auto-hide timer
60
+ if (win[LABELS_TIMER_KEY]) {
61
+ win.clearTimeout(win[LABELS_TIMER_KEY])
62
+ win[LABELS_TIMER_KEY] = null
63
+ }
64
+
65
+ // Remove existing labels
66
+ doc.getElementById(LABELS_CONTAINER_ID)?.remove()
67
+
68
+ // Create container
69
+ const container = doc.createElement('div')
70
+ container.id = LABELS_CONTAINER_ID
71
+ container.style.cssText = 'position:absolute;left:0;top:0;z-index:2147483647;pointer-events:none;'
72
+
73
+ // Inject styles
74
+ const style = doc.createElement('style')
75
+ style.textContent = `
76
+ .__pw_label__ {
77
+ position: absolute;
78
+ font: bold 12px Helvetica, Arial, sans-serif;
79
+ padding: 1px 4px;
80
+ border-radius: 3px;
81
+ color: black;
82
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
83
+ white-space: nowrap;
84
+ }
85
+ `
86
+ container.appendChild(style)
87
+
88
+ // Create SVG for connector lines
89
+ const svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg')
90
+ svg.style.cssText = 'position:absolute;left:0;top:0;pointer-events:none;overflow:visible;'
91
+ svg.setAttribute('width', `${doc.documentElement.scrollWidth}`)
92
+ svg.setAttribute('height', `${doc.documentElement.scrollHeight}`)
93
+
94
+ // Arrow markers
95
+ const defs = doc.createElementNS('http://www.w3.org/2000/svg', 'defs')
96
+ svg.appendChild(defs)
97
+ const markerCache: Record<string, string> = {}
98
+
99
+ function getArrowMarkerId(color: string): string {
100
+ if (markerCache[color]) {
101
+ return markerCache[color]
102
+ }
103
+ const markerId = `arrow-${color.replace('#', '')}`
104
+ const marker = doc.createElementNS('http://www.w3.org/2000/svg', 'marker')
105
+ marker.setAttribute('id', markerId)
106
+ marker.setAttribute('viewBox', '0 0 10 10')
107
+ marker.setAttribute('refX', '9')
108
+ marker.setAttribute('refY', '5')
109
+ marker.setAttribute('markerWidth', '6')
110
+ marker.setAttribute('markerHeight', '6')
111
+ marker.setAttribute('orient', 'auto-start-reverse')
112
+ const path = doc.createElementNS('http://www.w3.org/2000/svg', 'path')
113
+ path.setAttribute('d', 'M 0 0 L 10 5 L 0 10 z')
114
+ path.setAttribute('fill', color)
115
+ marker.appendChild(path)
116
+ defs.appendChild(marker)
117
+ markerCache[color] = markerId
118
+ return markerId
119
+ }
120
+
121
+ container.appendChild(svg)
122
+
123
+ // Track placed labels for overlap detection
124
+ const placedLabels: Array<{ left: number; top: number; right: number; bottom: number }> = []
125
+ const LABEL_HEIGHT = 17
126
+ const LABEL_CHAR_WIDTH = 7
127
+
128
+ const viewportLeft = win.scrollX
129
+ const viewportTop = win.scrollY
130
+ const viewportRight = viewportLeft + win.innerWidth
131
+ const viewportBottom = viewportTop + win.innerHeight
132
+
133
+ let count = 0
134
+ for (const { ref, role, box } of labels) {
135
+ const rectLeft = box.x
136
+ const rectTop = box.y
137
+ const rectRight = rectLeft + box.width
138
+ const rectBottom = rectTop + box.height
139
+
140
+ if (box.width <= 0 || box.height <= 0) {
141
+ continue
142
+ }
143
+
144
+ // Skip if outside viewport
145
+ if (rectRight < viewportLeft || rectLeft > viewportRight || rectBottom < viewportTop || rectTop > viewportBottom) {
146
+ continue
147
+ }
148
+
149
+ // Calculate label position
150
+ const labelWidth = ref.length * LABEL_CHAR_WIDTH + 8
151
+ const labelLeft = rectLeft
152
+ const labelTop = Math.max(0, rectTop - LABEL_HEIGHT)
153
+ const labelRect = {
154
+ left: labelLeft,
155
+ top: labelTop,
156
+ right: labelLeft + labelWidth,
157
+ bottom: labelTop + LABEL_HEIGHT,
158
+ }
159
+
160
+ // Check overlap
161
+ let overlaps = false
162
+ for (const placed of placedLabels) {
163
+ if (
164
+ labelRect.left < placed.right &&
165
+ labelRect.right > placed.left &&
166
+ labelRect.top < placed.bottom &&
167
+ labelRect.bottom > placed.top
168
+ ) {
169
+ overlaps = true
170
+ break
171
+ }
172
+ }
173
+ if (overlaps) {
174
+ continue
175
+ }
176
+
177
+ // Get colors
178
+ const [gradTop, gradBottom, border] = ROLE_COLORS[role] || DEFAULT_COLORS
179
+
180
+ // Create label
181
+ const label = doc.createElement('div')
182
+ label.className = '__pw_label__'
183
+ label.textContent = ref
184
+ label.style.background = `linear-gradient(to bottom, ${gradTop} 0%, ${gradBottom} 100%)`
185
+ label.style.border = `1px solid ${border}`
186
+ label.style.left = `${labelLeft}px`
187
+ label.style.top = `${labelTop}px`
188
+ container.appendChild(label)
189
+
190
+ // Draw connector line
191
+ const line = doc.createElementNS('http://www.w3.org/2000/svg', 'line')
192
+ const labelCenterX = labelLeft + labelWidth / 2
193
+ const labelBottomY = labelTop + LABEL_HEIGHT
194
+ const elementCenterX = rectLeft + box.width / 2
195
+ const elementCenterY = rectTop + box.height / 2
196
+ line.setAttribute('x1', `${labelCenterX}`)
197
+ line.setAttribute('y1', `${labelBottomY}`)
198
+ line.setAttribute('x2', `${elementCenterX}`)
199
+ line.setAttribute('y2', `${elementCenterY}`)
200
+ line.setAttribute('stroke', border)
201
+ line.setAttribute('stroke-width', '1.5')
202
+ line.setAttribute('marker-end', `url(#${getArrowMarkerId(border)})`)
203
+ svg.appendChild(line)
204
+
205
+ placedLabels.push(labelRect)
206
+ count++
207
+ }
208
+
209
+ doc.documentElement.appendChild(container)
210
+
211
+ // Auto-hide after 30 seconds
212
+ win[LABELS_TIMER_KEY] = win.setTimeout(() => {
213
+ doc.getElementById(LABELS_CONTAINER_ID)?.remove()
214
+ win[LABELS_TIMER_KEY] = null
215
+ }, 30000)
216
+
217
+ return count
218
+ }
219
+
220
+ // ============================================================================
221
+ // Hide Labels
222
+ // ============================================================================
223
+
224
+ export function hideA11yLabels(): void {
225
+ const win = window as typeof window & { [LABELS_TIMER_KEY]?: number | null }
226
+ if (win[LABELS_TIMER_KEY]) {
227
+ win.clearTimeout(win[LABELS_TIMER_KEY])
228
+ win[LABELS_TIMER_KEY] = null
229
+ }
230
+ document.getElementById(LABELS_CONTAINER_ID)?.remove()
231
+ }
232
+
233
+ // ============================================================================
234
+ // Expose on globalThis for injection
235
+ // ============================================================================
236
+
237
+ ;(globalThis as { __a11y?: { renderA11yLabels: (labels: A11yLabel[]) => number; hideA11yLabels: () => void } }).__a11y =
238
+ {
239
+ renderA11yLabels,
240
+ hideA11yLabels,
241
+ }
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: conan-config
3
+ description: Search, read, inspect history and schemas, validate edits, manage drafts, publish, create, copy, and roll back domestic Conan/Buff Space_Enhanced_Config configs through the unified Tabwright conan-config capability. Use immediately for exact config URLs, config keywords, draft or history questions, and explicit config changes in cn-prod or cn-test. Run read operations autonomously; require a prepared immutable report, a structured semantic diff or definition preview, and explicit user confirmation for every write operation.
4
+ ---
5
+
6
+ # Conan Config
7
+
8
+ Use `tabwright capability run conan-config`; never execute `conan-config` as a shell command.
9
+
10
+ ## Select the environment
11
+
12
+ Infer the environment from an exact URL:
13
+
14
+ - `cn-prod`: `conan.zhenguanyu.com`, `buff.zhenguanyu.com`
15
+ - `cn-test`: `ytkconan.zhenguanyu.com`, `buff-test.zhenguanyu.com`
16
+
17
+ Pass `environment` explicitly when no URL is available. For a write, stop and resolve an ambiguous environment before preparing the change. Do not use this capability for overseas hosts.
18
+
19
+ Capability runs write local run logs and artifacts under `~/.tabwright/capabilities/conan-config/`; use escalated execution in a Codex sandbox. If cookie auth is missing or expired, report the blocker and obtain approval before running:
20
+
21
+ ```bash
22
+ tabwright capability refresh-auth conan-config --browser user --json
23
+ ```
24
+
25
+ ## Run read operations directly
26
+
27
+ Run these operations without confirmation:
28
+
29
+ ```bash
30
+ tabwright capability run conan-config --input-json '{"action":"list-spaces","environment":"cn-prod"}' --json
31
+ tabwright capability run conan-config --input-json '{"action":"search","environment":"cn-test","query":"会员订单"}' --json
32
+ tabwright capability run conan-config --input-json '{"action":"history","url":"<config-url>"}' --json
33
+ tabwright capability run conan-config --input-json '{"action":"get-schema","url":"<config-url>"}' --json
34
+ ```
35
+
36
+ For an exact `Space_Enhanced_Config` URL, route or get it immediately:
37
+
38
+ ```bash
39
+ tabwright capability route "<config-url>" --json
40
+ tabwright capability run conan-config --input-json '{"action":"get","url":"<config-url>"}' --json
41
+ ```
42
+
43
+ Use `historyIds` with `history` only when full historical values are needed. Keep large values out of chat and point to saved artifacts. Production artifacts retain the legacy path `artifacts/conan-config/<namespace>/<key>/`; test artifacts use `artifacts/conan-config/cn-test/<namespace>/<key>/`.
44
+
45
+ ## Validate values
46
+
47
+ Validate the complete target value, not only changed fields. Check:
48
+
49
+ - Formily field types, required fields, enums, defaults, `x-validator`, and `x-reactions`
50
+ - component semantics and nested array/object shapes
51
+ - unchanged legacy fields that the schema may not expose
52
+ - every path in the structured semantic Diff
53
+ - suspicious test markers such as `ytk`, `.biz`, or `test` when targeting `cn-prod`
54
+
55
+ Return a report with `passed`, `errors`, `warnings`, `warningsAccepted`, `environment`, the hashes and version fields returned by the prepare operation, and `summary`. Never mark warnings accepted unless the user explicitly accepts them.
56
+
57
+ ## Change content
58
+
59
+ Prepare the complete target value:
60
+
61
+ ```bash
62
+ tabwright capability run conan-config --input-json '{"action":"prepare-change","url":"<config-url>","value":<complete-target-json>,"changeSummary":"<summary>"}' --json
63
+ ```
64
+
65
+ Show `environment`, field paths, before/after values, warnings, and whether a draft exists. Then choose exactly one confirmed write:
66
+
67
+ - Save without publishing: `save-draft` with `--confirm conan-config:save-draft`
68
+ - Update and publish atomically: `apply-change` with `--confirm conan-config:apply-change`
69
+
70
+ Pass the unchanged complete target value, summary, and validation report. Both operations recheck `environment`, `schemaId`, `updatedTime`, `sourceSha256`, and `targetSha256`. Do not overwrite an existing draft.
71
+
72
+ ## Publish or discard a draft
73
+
74
+ Prepare an existing draft:
75
+
76
+ ```bash
77
+ tabwright capability run conan-config --input-json '{"action":"prepare-publish-draft","url":"<config-url>"}' --json
78
+ ```
79
+
80
+ Validate `draftValue`, show the Diff against `currentValue`, the draft operator, environment, and warnings, then:
81
+
82
+ - Publish with the unchanged validation report and `--confirm conan-config:publish-draft`.
83
+ - Discard only after showing `configDraftId`, operator, environment, and Diff; pass the prepared `configDraftId` and `draftSha256` with `--confirm conan-config:discard-draft`.
84
+
85
+ Treat discarding as destructive. Never retry a failed or partially completed draft write automatically.
86
+
87
+ ## Create a config
88
+
89
+ Resolve the target `groupingId` with `list-spaces` or `search`, then prepare:
90
+
91
+ ```bash
92
+ tabwright capability run conan-config --input-json '{"action":"prepare-create","environment":"cn-test","groupingId":123,"key":"CONFIG_KEY","name":"配置名称","desc":"配置描述","schemaId":456}' --json
93
+ ```
94
+
95
+ Show the complete definition, target root grouping, environment, Schema summary, and warnings. After confirmation, pass `environment`, `targetSha256`, and `groupingUpdatedTime` unchanged in `preparationReport`, then run `create` with `--confirm conan-config:create`.
96
+
97
+ Creating a config does not create or edit a Schema. A `schemaId` of `0` means no Formily Schema and must be shown as a warning.
98
+
99
+ ## Copy a config definition
100
+
101
+ Prepare the source and target:
102
+
103
+ ```bash
104
+ tabwright capability run conan-config --input-json '{"action":"prepare-copy","sourceUrl":"<source-config-url>","groupingId":123,"targetKey":"CONFIG_KEY_COPY"}' --json
105
+ ```
106
+
107
+ Show the source, target, environment, target grouping, and `contentCopied: false`. The B-side copy flow copies metadata and reuses the source `schemaId`; it does not copy the source value. After confirmation, pass the unchanged preparation fields and run `copy` with `--confirm conan-config:copy`.
108
+
109
+ If the user also wants content copied, create the target definition first, then run the normal `prepare-change` and `save-draft` or `apply-change` workflow on the new target.
110
+
111
+ ## Roll back
112
+
113
+ List history, choose one `historyId`, then prepare:
114
+
115
+ ```bash
116
+ tabwright capability run conan-config --input-json '{"action":"prepare-rollback","url":"<config-url>","historyId":123}' --json
117
+ ```
118
+
119
+ Validate the full historical value against its historical Schema. Show the environment, history record, Schema change, and semantic Diff. Stop if a draft exists. After confirmation, pass the unchanged report fields and run `rollback` with `--confirm conan-config:rollback`.
120
+
121
+ Rollback creates and publishes a draft with operation type `backtrace`, then reads the live config back. Never retry it automatically.
122
+
123
+ ## Confirmation discipline
124
+
125
+ Never call a write operation directly from a raw user request. Always run its read-only prepare operation first, display the concrete target and side effect, and obtain confirmation for that exact prepared state.
126
+
127
+ Use only these write confirmations:
128
+
129
+ - `conan-config:save-draft`
130
+ - `conan-config:apply-change`
131
+ - `conan-config:publish-draft`
132
+ - `conan-config:discard-draft`
133
+ - `conan-config:create`
134
+ - `conan-config:copy`
135
+ - `conan-config:rollback`
136
+
137
+ Do not use this capability to delete configs, manage groupings, create or edit Schemas, change favourites, or operate overseas environments.
138
+
139
+ ## Report results
140
+
141
+ Keep answers compact. Always report `environment`, `namespace`, `key`, `configId`, operation status, and verification result. For writes, also report `configDraftId` when present and state whether the change was published. Do not create extra export files unless requested.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: 'Conan 文案配置'
3
+ short_description: '查询并安全管理国内正式与测试环境的 Conan 文案配置'
4
+ default_prompt: 'Use $conan-config to inspect or safely change this domestic Conan copywriting config.'