@zmice/zc 0.1.0 → 0.2.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 (561) hide show
  1. package/README.md +153 -87
  2. package/dist/adapters/codex.d.ts.map +1 -1
  3. package/dist/adapters/codex.js +4 -2
  4. package/dist/adapters/codex.js.map +1 -1
  5. package/dist/adapters/qwen-code.d.ts.map +1 -1
  6. package/dist/adapters/qwen-code.js +7 -5
  7. package/dist/adapters/qwen-code.js.map +1 -1
  8. package/dist/cli/__tests__/i18n.test.d.ts +2 -0
  9. package/dist/cli/__tests__/i18n.test.d.ts.map +1 -0
  10. package/dist/cli/__tests__/i18n.test.js +45 -0
  11. package/dist/cli/__tests__/i18n.test.js.map +1 -0
  12. package/dist/cli/__tests__/platform.test.d.ts +2 -0
  13. package/dist/cli/__tests__/platform.test.d.ts.map +1 -0
  14. package/dist/cli/__tests__/platform.test.js +483 -0
  15. package/dist/cli/__tests__/platform.test.js.map +1 -0
  16. package/dist/cli/__tests__/surface.test.d.ts +2 -0
  17. package/dist/cli/__tests__/surface.test.d.ts.map +1 -0
  18. package/dist/cli/__tests__/surface.test.js +15 -0
  19. package/dist/cli/__tests__/surface.test.js.map +1 -0
  20. package/dist/cli/__tests__/toolkit.test.d.ts +2 -0
  21. package/dist/cli/__tests__/toolkit.test.d.ts.map +1 -0
  22. package/dist/cli/__tests__/toolkit.test.js +72 -0
  23. package/dist/cli/__tests__/toolkit.test.js.map +1 -0
  24. package/dist/cli/__tests__/upstream.test.d.ts +2 -0
  25. package/dist/cli/__tests__/upstream.test.d.ts.map +1 -0
  26. package/dist/cli/__tests__/upstream.test.js +163 -0
  27. package/dist/cli/__tests__/upstream.test.js.map +1 -0
  28. package/dist/cli/doctor.js +21 -21
  29. package/dist/cli/doctor.js.map +1 -1
  30. package/dist/cli/index.d.ts +2 -1
  31. package/dist/cli/index.d.ts.map +1 -1
  32. package/dist/cli/index.js +34 -14
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/msg.d.ts.map +1 -1
  35. package/dist/cli/msg.js +73 -5
  36. package/dist/cli/msg.js.map +1 -1
  37. package/dist/cli/platform.d.ts +32 -0
  38. package/dist/cli/platform.d.ts.map +1 -0
  39. package/dist/cli/platform.js +635 -0
  40. package/dist/cli/platform.js.map +1 -0
  41. package/dist/cli/run.js +7 -7
  42. package/dist/cli/run.js.map +1 -1
  43. package/dist/cli/setup.js +7 -7
  44. package/dist/cli/setup.js.map +1 -1
  45. package/dist/cli/task.d.ts.map +1 -1
  46. package/dist/cli/task.js +108 -8
  47. package/dist/cli/task.js.map +1 -1
  48. package/dist/cli/team.d.ts +12 -0
  49. package/dist/cli/team.d.ts.map +1 -1
  50. package/dist/cli/team.js +82 -39
  51. package/dist/cli/team.js.map +1 -1
  52. package/dist/cli/toolkit.d.ts +3 -0
  53. package/dist/cli/toolkit.d.ts.map +1 -0
  54. package/dist/cli/toolkit.js +160 -0
  55. package/dist/cli/toolkit.js.map +1 -0
  56. package/dist/cli/upstream.d.ts +19 -0
  57. package/dist/cli/upstream.d.ts.map +1 -0
  58. package/dist/cli/upstream.js +705 -0
  59. package/dist/cli/upstream.js.map +1 -0
  60. package/dist/node_modules/@zmice/platform-core/dist/index.d.ts +72 -0
  61. package/dist/node_modules/@zmice/platform-core/dist/index.d.ts.map +1 -0
  62. package/dist/node_modules/@zmice/platform-core/dist/index.js +105 -0
  63. package/dist/node_modules/@zmice/platform-core/dist/index.js.map +1 -0
  64. package/dist/node_modules/@zmice/platform-core/dist/index.test.d.ts +2 -0
  65. package/dist/node_modules/@zmice/platform-core/dist/index.test.d.ts.map +1 -0
  66. package/dist/node_modules/@zmice/platform-core/dist/index.test.js +104 -0
  67. package/dist/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -0
  68. package/dist/node_modules/@zmice/platform-core/package.json +34 -0
  69. package/dist/platform-state/index.d.ts +4 -0
  70. package/dist/platform-state/index.d.ts.map +1 -0
  71. package/dist/platform-state/index.js +3 -0
  72. package/dist/platform-state/index.js.map +1 -0
  73. package/dist/platform-state/receipt.d.ts +11 -0
  74. package/dist/platform-state/receipt.d.ts.map +1 -0
  75. package/dist/platform-state/receipt.js +27 -0
  76. package/dist/platform-state/receipt.js.map +1 -0
  77. package/dist/platform-state/status.d.ts +3 -0
  78. package/dist/platform-state/status.d.ts.map +1 -0
  79. package/dist/platform-state/status.js +82 -0
  80. package/dist/platform-state/status.js.map +1 -0
  81. package/dist/platform-state/status.test.d.ts +2 -0
  82. package/dist/platform-state/status.test.d.ts.map +1 -0
  83. package/dist/platform-state/status.test.js +120 -0
  84. package/dist/platform-state/status.test.js.map +1 -0
  85. package/dist/platform-state/types.d.ts +58 -0
  86. package/dist/platform-state/types.d.ts.map +1 -0
  87. package/dist/platform-state/types.js +2 -0
  88. package/dist/platform-state/types.js.map +1 -0
  89. package/dist/runtime/__tests__/logger.test.d.ts +2 -0
  90. package/dist/runtime/__tests__/logger.test.d.ts.map +1 -0
  91. package/dist/runtime/__tests__/logger.test.js +11 -0
  92. package/dist/runtime/__tests__/logger.test.js.map +1 -0
  93. package/dist/runtime/__tests__/session-manager.test.d.ts +2 -0
  94. package/dist/runtime/__tests__/session-manager.test.d.ts.map +1 -0
  95. package/dist/runtime/__tests__/session-manager.test.js +11 -0
  96. package/dist/runtime/__tests__/session-manager.test.js.map +1 -0
  97. package/dist/runtime/__tests__/worktree-manager.test.d.ts +2 -0
  98. package/dist/runtime/__tests__/worktree-manager.test.d.ts.map +1 -0
  99. package/dist/runtime/__tests__/worktree-manager.test.js +11 -0
  100. package/dist/runtime/__tests__/worktree-manager.test.js.map +1 -0
  101. package/dist/runtime/logger.d.ts +5 -1
  102. package/dist/runtime/logger.d.ts.map +1 -1
  103. package/dist/runtime/logger.js +11 -1
  104. package/dist/runtime/logger.js.map +1 -1
  105. package/dist/runtime/state.d.ts +2 -8
  106. package/dist/runtime/state.d.ts.map +1 -1
  107. package/dist/runtime/state.js +7 -15
  108. package/dist/runtime/state.js.map +1 -1
  109. package/dist/runtime/worktree-manager.d.ts +5 -26
  110. package/dist/runtime/worktree-manager.d.ts.map +1 -1
  111. package/dist/runtime/worktree-manager.js +34 -98
  112. package/dist/runtime/worktree-manager.js.map +1 -1
  113. package/dist/team/__tests__/mailbox.test.d.ts +2 -0
  114. package/dist/team/__tests__/mailbox.test.d.ts.map +1 -0
  115. package/dist/team/__tests__/mailbox.test.js +22 -0
  116. package/dist/team/__tests__/mailbox.test.js.map +1 -0
  117. package/dist/team/__tests__/orchestrator.test.d.ts +2 -0
  118. package/dist/team/__tests__/orchestrator.test.d.ts.map +1 -0
  119. package/dist/team/__tests__/orchestrator.test.js +13 -0
  120. package/dist/team/__tests__/orchestrator.test.js.map +1 -0
  121. package/dist/team/__tests__/task-queue.test.d.ts +2 -0
  122. package/dist/team/__tests__/task-queue.test.d.ts.map +1 -0
  123. package/dist/team/__tests__/task-queue.test.js +28 -0
  124. package/dist/team/__tests__/task-queue.test.js.map +1 -0
  125. package/dist/team/__tests__/worker-manager.test.d.ts +2 -0
  126. package/dist/team/__tests__/worker-manager.test.d.ts.map +1 -0
  127. package/dist/team/__tests__/worker-manager.test.js +13 -0
  128. package/dist/team/__tests__/worker-manager.test.js.map +1 -0
  129. package/dist/team/mailbox.d.ts +12 -10
  130. package/dist/team/mailbox.d.ts.map +1 -1
  131. package/dist/team/mailbox.js +40 -27
  132. package/dist/team/mailbox.js.map +1 -1
  133. package/dist/team/orchestrator.d.ts +1 -6
  134. package/dist/team/orchestrator.d.ts.map +1 -1
  135. package/dist/team/orchestrator.js +27 -67
  136. package/dist/team/orchestrator.js.map +1 -1
  137. package/dist/team/task-queue.d.ts +18 -17
  138. package/dist/team/task-queue.d.ts.map +1 -1
  139. package/dist/team/task-queue.js +68 -71
  140. package/dist/team/task-queue.js.map +1 -1
  141. package/dist/team/worker-manager.d.ts +13 -36
  142. package/dist/team/worker-manager.d.ts.map +1 -1
  143. package/dist/team/worker-manager.js +34 -129
  144. package/dist/team/worker-manager.js.map +1 -1
  145. package/dist/utils/config.d.ts +15 -1
  146. package/dist/utils/config.d.ts.map +1 -1
  147. package/dist/utils/config.js +39 -1
  148. package/dist/utils/config.js.map +1 -1
  149. package/dist/utils/install-target.d.ts +23 -0
  150. package/dist/utils/install-target.d.ts.map +1 -0
  151. package/dist/utils/install-target.js +89 -0
  152. package/dist/utils/install-target.js.map +1 -0
  153. package/dist/utils/install-target.test.d.ts +2 -0
  154. package/dist/utils/install-target.test.d.ts.map +1 -0
  155. package/dist/utils/install-target.test.js +71 -0
  156. package/dist/utils/install-target.test.js.map +1 -0
  157. package/dist/utils/platform-install-receipt.d.ts +11 -0
  158. package/dist/utils/platform-install-receipt.d.ts.map +1 -0
  159. package/dist/utils/platform-install-receipt.js +62 -0
  160. package/dist/utils/platform-install-receipt.js.map +1 -0
  161. package/dist/utils/platform-install-receipt.test.d.ts +2 -0
  162. package/dist/utils/platform-install-receipt.test.d.ts.map +1 -0
  163. package/dist/utils/platform-install-receipt.test.js +74 -0
  164. package/dist/utils/platform-install-receipt.test.js.map +1 -0
  165. package/dist/utils/skill-loader.d.ts +0 -9
  166. package/dist/utils/skill-loader.d.ts.map +1 -1
  167. package/dist/utils/skill-loader.js +19 -26
  168. package/dist/utils/skill-loader.js.map +1 -1
  169. package/dist/utils/workspace.d.ts +28 -0
  170. package/dist/utils/workspace.d.ts.map +1 -0
  171. package/dist/utils/workspace.js +103 -0
  172. package/dist/utils/workspace.js.map +1 -0
  173. package/dist/utils/workspace.test.d.ts +2 -0
  174. package/dist/utils/workspace.test.d.ts.map +1 -0
  175. package/dist/utils/workspace.test.js +50 -0
  176. package/dist/utils/workspace.test.js.map +1 -0
  177. package/package.json +48 -36
  178. package/vendor/node_modules/@zmice/platform-core/dist/index.d.ts +72 -0
  179. package/vendor/node_modules/@zmice/platform-core/dist/index.d.ts.map +1 -0
  180. package/vendor/node_modules/@zmice/platform-core/dist/index.js +105 -0
  181. package/vendor/node_modules/@zmice/platform-core/dist/index.js.map +1 -0
  182. package/vendor/node_modules/@zmice/platform-core/dist/index.test.d.ts +2 -0
  183. package/vendor/node_modules/@zmice/platform-core/dist/index.test.d.ts.map +1 -0
  184. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js +104 -0
  185. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -0
  186. package/vendor/node_modules/@zmice/platform-core/package.json +34 -0
  187. package/vendor/packages/platform-codex/dist/generate.d.ts +2 -0
  188. package/vendor/packages/platform-codex/dist/generate.d.ts.map +1 -0
  189. package/vendor/packages/platform-codex/dist/generate.js +2 -0
  190. package/vendor/packages/platform-codex/dist/generate.js.map +1 -0
  191. package/vendor/packages/platform-codex/dist/index.d.ts +15 -0
  192. package/vendor/packages/platform-codex/dist/index.d.ts.map +1 -0
  193. package/vendor/packages/platform-codex/dist/index.js +46 -0
  194. package/vendor/packages/platform-codex/dist/index.js.map +1 -0
  195. package/vendor/packages/platform-codex/dist/index.test.d.ts +2 -0
  196. package/vendor/packages/platform-codex/dist/index.test.d.ts.map +1 -0
  197. package/vendor/packages/platform-codex/dist/index.test.js +38 -0
  198. package/vendor/packages/platform-codex/dist/index.test.js.map +1 -0
  199. package/vendor/packages/platform-codex/dist/install.d.ts +2 -0
  200. package/vendor/packages/platform-codex/dist/install.d.ts.map +1 -0
  201. package/vendor/packages/platform-codex/dist/install.js +2 -0
  202. package/vendor/packages/platform-codex/dist/install.js.map +1 -0
  203. package/vendor/packages/platform-codex/package.json +46 -0
  204. package/vendor/packages/platform-codex/templates/AGENTS.md +7 -0
  205. package/vendor/packages/platform-qoder/dist/generate.d.ts +2 -0
  206. package/vendor/packages/platform-qoder/dist/generate.d.ts.map +1 -0
  207. package/vendor/packages/platform-qoder/dist/generate.js +2 -0
  208. package/vendor/packages/platform-qoder/dist/generate.js.map +1 -0
  209. package/vendor/packages/platform-qoder/dist/index.d.ts +15 -0
  210. package/vendor/packages/platform-qoder/dist/index.d.ts.map +1 -0
  211. package/vendor/packages/platform-qoder/dist/index.js +46 -0
  212. package/vendor/packages/platform-qoder/dist/index.js.map +1 -0
  213. package/vendor/packages/platform-qoder/dist/index.test.d.ts +2 -0
  214. package/vendor/packages/platform-qoder/dist/index.test.d.ts.map +1 -0
  215. package/vendor/packages/platform-qoder/dist/index.test.js +38 -0
  216. package/vendor/packages/platform-qoder/dist/index.test.js.map +1 -0
  217. package/vendor/packages/platform-qoder/dist/install.d.ts +2 -0
  218. package/vendor/packages/platform-qoder/dist/install.d.ts.map +1 -0
  219. package/vendor/packages/platform-qoder/dist/install.js +2 -0
  220. package/vendor/packages/platform-qoder/dist/install.js.map +1 -0
  221. package/vendor/packages/platform-qoder/package.json +46 -0
  222. package/vendor/packages/platform-qoder/templates/instructions.md +7 -0
  223. package/vendor/packages/platform-qwen/dist/generate.d.ts +2 -0
  224. package/vendor/packages/platform-qwen/dist/generate.d.ts.map +1 -0
  225. package/vendor/packages/platform-qwen/dist/generate.js +2 -0
  226. package/vendor/packages/platform-qwen/dist/generate.js.map +1 -0
  227. package/vendor/packages/platform-qwen/dist/index.d.ts +16 -0
  228. package/vendor/packages/platform-qwen/dist/index.d.ts.map +1 -0
  229. package/vendor/packages/platform-qwen/dist/index.js +60 -0
  230. package/vendor/packages/platform-qwen/dist/index.js.map +1 -0
  231. package/vendor/packages/platform-qwen/dist/index.test.d.ts +2 -0
  232. package/vendor/packages/platform-qwen/dist/index.test.d.ts.map +1 -0
  233. package/vendor/packages/platform-qwen/dist/index.test.js +46 -0
  234. package/vendor/packages/platform-qwen/dist/index.test.js.map +1 -0
  235. package/vendor/packages/platform-qwen/dist/install.d.ts +2 -0
  236. package/vendor/packages/platform-qwen/dist/install.d.ts.map +1 -0
  237. package/vendor/packages/platform-qwen/dist/install.js +2 -0
  238. package/vendor/packages/platform-qwen/dist/install.js.map +1 -0
  239. package/vendor/packages/platform-qwen/package.json +46 -0
  240. package/vendor/packages/platform-qwen/templates/QWEN.md +7 -0
  241. package/vendor/packages/platform-qwen/templates/qwen-extension.json +7 -0
  242. package/vendor/packages/toolkit/dist/content-lint.test.d.ts +2 -0
  243. package/vendor/packages/toolkit/dist/content-lint.test.d.ts.map +1 -0
  244. package/vendor/packages/toolkit/dist/content-lint.test.js +252 -0
  245. package/vendor/packages/toolkit/dist/content-lint.test.js.map +1 -0
  246. package/vendor/packages/toolkit/dist/governance/index.d.ts +2 -0
  247. package/vendor/packages/toolkit/dist/governance/index.d.ts.map +1 -0
  248. package/vendor/packages/toolkit/dist/governance/index.js +2 -0
  249. package/vendor/packages/toolkit/dist/governance/index.js.map +1 -0
  250. package/vendor/packages/toolkit/dist/governance/upstreams.d.ts +6 -0
  251. package/vendor/packages/toolkit/dist/governance/upstreams.d.ts.map +1 -0
  252. package/vendor/packages/toolkit/dist/governance/upstreams.js +31 -0
  253. package/vendor/packages/toolkit/dist/governance/upstreams.js.map +1 -0
  254. package/vendor/packages/toolkit/dist/governance/upstreams.test.d.ts +2 -0
  255. package/vendor/packages/toolkit/dist/governance/upstreams.test.d.ts.map +1 -0
  256. package/vendor/packages/toolkit/dist/governance/upstreams.test.js +23 -0
  257. package/vendor/packages/toolkit/dist/governance/upstreams.test.js.map +1 -0
  258. package/vendor/packages/toolkit/dist/index.d.ts +8 -0
  259. package/vendor/packages/toolkit/dist/index.d.ts.map +1 -0
  260. package/vendor/packages/toolkit/dist/index.js +8 -0
  261. package/vendor/packages/toolkit/dist/index.js.map +1 -0
  262. package/vendor/packages/toolkit/dist/lint/content-lint.d.ts +21 -0
  263. package/vendor/packages/toolkit/dist/lint/content-lint.d.ts.map +1 -0
  264. package/vendor/packages/toolkit/dist/lint/content-lint.js +250 -0
  265. package/vendor/packages/toolkit/dist/lint/content-lint.js.map +1 -0
  266. package/vendor/packages/toolkit/dist/lint/index.d.ts +2 -0
  267. package/vendor/packages/toolkit/dist/lint/index.d.ts.map +1 -0
  268. package/vendor/packages/toolkit/dist/lint/index.js +2 -0
  269. package/vendor/packages/toolkit/dist/lint/index.js.map +1 -0
  270. package/vendor/packages/toolkit/dist/loaders/asset-unit.d.ts +4 -0
  271. package/vendor/packages/toolkit/dist/loaders/asset-unit.d.ts.map +1 -0
  272. package/vendor/packages/toolkit/dist/loaders/asset-unit.js +95 -0
  273. package/vendor/packages/toolkit/dist/loaders/asset-unit.js.map +1 -0
  274. package/vendor/packages/toolkit/dist/loaders/content-tree.d.ts +2 -0
  275. package/vendor/packages/toolkit/dist/loaders/content-tree.d.ts.map +1 -0
  276. package/vendor/packages/toolkit/dist/loaders/content-tree.js +2 -0
  277. package/vendor/packages/toolkit/dist/loaders/content-tree.js.map +1 -0
  278. package/vendor/packages/toolkit/dist/loaders/fs.d.ts +6 -0
  279. package/vendor/packages/toolkit/dist/loaders/fs.d.ts.map +1 -0
  280. package/vendor/packages/toolkit/dist/loaders/fs.js +19 -0
  281. package/vendor/packages/toolkit/dist/loaders/fs.js.map +1 -0
  282. package/vendor/packages/toolkit/dist/loaders/index.d.ts +4 -0
  283. package/vendor/packages/toolkit/dist/loaders/index.d.ts.map +1 -0
  284. package/vendor/packages/toolkit/dist/loaders/index.js +4 -0
  285. package/vendor/packages/toolkit/dist/loaders/index.js.map +1 -0
  286. package/vendor/packages/toolkit/dist/loaders/simple-yaml.d.ts +2 -0
  287. package/vendor/packages/toolkit/dist/loaders/simple-yaml.d.ts.map +1 -0
  288. package/vendor/packages/toolkit/dist/loaders/simple-yaml.js +125 -0
  289. package/vendor/packages/toolkit/dist/loaders/simple-yaml.js.map +1 -0
  290. package/vendor/packages/toolkit/dist/loaders.test.d.ts +2 -0
  291. package/vendor/packages/toolkit/dist/loaders.test.d.ts.map +1 -0
  292. package/vendor/packages/toolkit/dist/loaders.test.js +84 -0
  293. package/vendor/packages/toolkit/dist/loaders.test.js.map +1 -0
  294. package/vendor/packages/toolkit/dist/manifests/index.d.ts +2 -0
  295. package/vendor/packages/toolkit/dist/manifests/index.d.ts.map +1 -0
  296. package/vendor/packages/toolkit/dist/manifests/index.js +2 -0
  297. package/vendor/packages/toolkit/dist/manifests/index.js.map +1 -0
  298. package/vendor/packages/toolkit/dist/manifests/toolkit-manifest.d.ts +7 -0
  299. package/vendor/packages/toolkit/dist/manifests/toolkit-manifest.d.ts.map +1 -0
  300. package/vendor/packages/toolkit/dist/manifests/toolkit-manifest.js +72 -0
  301. package/vendor/packages/toolkit/dist/manifests/toolkit-manifest.js.map +1 -0
  302. package/vendor/packages/toolkit/dist/manifests.test.d.ts +2 -0
  303. package/vendor/packages/toolkit/dist/manifests.test.d.ts.map +1 -0
  304. package/vendor/packages/toolkit/dist/manifests.test.js +75 -0
  305. package/vendor/packages/toolkit/dist/manifests.test.js.map +1 -0
  306. package/vendor/packages/toolkit/dist/query/index.d.ts +2 -0
  307. package/vendor/packages/toolkit/dist/query/index.d.ts.map +1 -0
  308. package/vendor/packages/toolkit/dist/query/index.js +2 -0
  309. package/vendor/packages/toolkit/dist/query/index.js.map +1 -0
  310. package/vendor/packages/toolkit/dist/query/toolkit-query.d.ts +10 -0
  311. package/vendor/packages/toolkit/dist/query/toolkit-query.d.ts.map +1 -0
  312. package/vendor/packages/toolkit/dist/query/toolkit-query.js +49 -0
  313. package/vendor/packages/toolkit/dist/query/toolkit-query.js.map +1 -0
  314. package/vendor/packages/toolkit/dist/query.test.d.ts +2 -0
  315. package/vendor/packages/toolkit/dist/query.test.d.ts.map +1 -0
  316. package/vendor/packages/toolkit/dist/query.test.js +30 -0
  317. package/vendor/packages/toolkit/dist/query.test.js.map +1 -0
  318. package/vendor/packages/toolkit/dist/schema/asset-meta.d.ts +3 -0
  319. package/vendor/packages/toolkit/dist/schema/asset-meta.d.ts.map +1 -0
  320. package/vendor/packages/toolkit/dist/schema/asset-meta.js +130 -0
  321. package/vendor/packages/toolkit/dist/schema/asset-meta.js.map +1 -0
  322. package/vendor/packages/toolkit/dist/schema/asset-unit.d.ts +3 -0
  323. package/vendor/packages/toolkit/dist/schema/asset-unit.d.ts.map +1 -0
  324. package/vendor/packages/toolkit/dist/schema/asset-unit.js +22 -0
  325. package/vendor/packages/toolkit/dist/schema/asset-unit.js.map +1 -0
  326. package/vendor/packages/toolkit/dist/schema/index.d.ts +5 -0
  327. package/vendor/packages/toolkit/dist/schema/index.d.ts.map +1 -0
  328. package/vendor/packages/toolkit/dist/schema/index.js +5 -0
  329. package/vendor/packages/toolkit/dist/schema/index.js.map +1 -0
  330. package/vendor/packages/toolkit/dist/schema/kinds.d.ts +6 -0
  331. package/vendor/packages/toolkit/dist/schema/kinds.d.ts.map +1 -0
  332. package/vendor/packages/toolkit/dist/schema/kinds.js +24 -0
  333. package/vendor/packages/toolkit/dist/schema/kinds.js.map +1 -0
  334. package/vendor/packages/toolkit/dist/schema/manifest.d.ts +3 -0
  335. package/vendor/packages/toolkit/dist/schema/manifest.d.ts.map +1 -0
  336. package/vendor/packages/toolkit/dist/schema/manifest.js +30 -0
  337. package/vendor/packages/toolkit/dist/schema/manifest.js.map +1 -0
  338. package/vendor/packages/toolkit/dist/types.d.ts +80 -0
  339. package/vendor/packages/toolkit/dist/types.d.ts.map +1 -0
  340. package/vendor/packages/toolkit/dist/types.js +6 -0
  341. package/vendor/packages/toolkit/dist/types.js.map +1 -0
  342. package/vendor/packages/toolkit/package.json +35 -0
  343. package/vendor/packages/toolkit/src/content/agents/architect/assets/.gitkeep +0 -0
  344. package/vendor/packages/toolkit/src/content/agents/architect/body.md +34 -0
  345. package/vendor/packages/toolkit/src/content/agents/architect/meta.yaml +25 -0
  346. package/vendor/packages/toolkit/src/content/agents/backend-specialist/assets/.gitkeep +0 -0
  347. package/vendor/packages/toolkit/src/content/agents/backend-specialist/body.md +30 -0
  348. package/vendor/packages/toolkit/src/content/agents/backend-specialist/meta.yaml +24 -0
  349. package/vendor/packages/toolkit/src/content/agents/code-reviewer/assets/.gitkeep +0 -0
  350. package/vendor/packages/toolkit/src/content/agents/code-reviewer/body.md +31 -0
  351. package/vendor/packages/toolkit/src/content/agents/code-reviewer/meta.yaml +26 -0
  352. package/vendor/packages/toolkit/src/content/agents/frontend-specialist/assets/.gitkeep +0 -0
  353. package/vendor/packages/toolkit/src/content/agents/frontend-specialist/body.md +31 -0
  354. package/vendor/packages/toolkit/src/content/agents/frontend-specialist/meta.yaml +24 -0
  355. package/vendor/packages/toolkit/src/content/agents/performance-engineer/assets/.gitkeep +0 -0
  356. package/vendor/packages/toolkit/src/content/agents/performance-engineer/body.md +72 -0
  357. package/vendor/packages/toolkit/src/content/agents/performance-engineer/meta.yaml +24 -0
  358. package/vendor/packages/toolkit/src/content/agents/product-owner/assets/.gitkeep +0 -0
  359. package/vendor/packages/toolkit/src/content/agents/product-owner/body.md +32 -0
  360. package/vendor/packages/toolkit/src/content/agents/product-owner/meta.yaml +24 -0
  361. package/vendor/packages/toolkit/src/content/agents/security-auditor/assets/.gitkeep +0 -0
  362. package/vendor/packages/toolkit/src/content/agents/security-auditor/body.md +83 -0
  363. package/vendor/packages/toolkit/src/content/agents/security-auditor/meta.yaml +24 -0
  364. package/vendor/packages/toolkit/src/content/agents/test-engineer/assets/.gitkeep +0 -0
  365. package/vendor/packages/toolkit/src/content/agents/test-engineer/body.md +30 -0
  366. package/vendor/packages/toolkit/src/content/agents/test-engineer/meta.yaml +28 -0
  367. package/vendor/packages/toolkit/src/content/commands/api/assets/.gitkeep +0 -0
  368. package/vendor/packages/toolkit/src/content/commands/api/body.md +24 -0
  369. package/vendor/packages/toolkit/src/content/commands/api/meta.yaml +19 -0
  370. package/vendor/packages/toolkit/src/content/commands/build/assets/.gitkeep +0 -0
  371. package/vendor/packages/toolkit/src/content/commands/build/body.md +37 -0
  372. package/vendor/packages/toolkit/src/content/commands/build/meta.yaml +26 -0
  373. package/vendor/packages/toolkit/src/content/commands/careful/assets/.gitkeep +0 -0
  374. package/vendor/packages/toolkit/src/content/commands/careful/body.md +18 -0
  375. package/vendor/packages/toolkit/src/content/commands/careful/meta.yaml +17 -0
  376. package/vendor/packages/toolkit/src/content/commands/ci/assets/.gitkeep +0 -0
  377. package/vendor/packages/toolkit/src/content/commands/ci/body.md +27 -0
  378. package/vendor/packages/toolkit/src/content/commands/ci/meta.yaml +19 -0
  379. package/vendor/packages/toolkit/src/content/commands/commit/assets/.gitkeep +0 -0
  380. package/vendor/packages/toolkit/src/content/commands/commit/body.md +26 -0
  381. package/vendor/packages/toolkit/src/content/commands/commit/meta.yaml +19 -0
  382. package/vendor/packages/toolkit/src/content/commands/ctx-health/assets/.gitkeep +0 -0
  383. package/vendor/packages/toolkit/src/content/commands/ctx-health/body.md +22 -0
  384. package/vendor/packages/toolkit/src/content/commands/ctx-health/meta.yaml +19 -0
  385. package/vendor/packages/toolkit/src/content/commands/debug/assets/.gitkeep +0 -0
  386. package/vendor/packages/toolkit/src/content/commands/debug/body.md +24 -0
  387. package/vendor/packages/toolkit/src/content/commands/debug/meta.yaml +19 -0
  388. package/vendor/packages/toolkit/src/content/commands/doc/assets/.gitkeep +0 -0
  389. package/vendor/packages/toolkit/src/content/commands/doc/body.md +23 -0
  390. package/vendor/packages/toolkit/src/content/commands/doc/meta.yaml +19 -0
  391. package/vendor/packages/toolkit/src/content/commands/freeze/assets/.gitkeep +0 -0
  392. package/vendor/packages/toolkit/src/content/commands/freeze/body.md +17 -0
  393. package/vendor/packages/toolkit/src/content/commands/freeze/meta.yaml +17 -0
  394. package/vendor/packages/toolkit/src/content/commands/guard/assets/.gitkeep +0 -0
  395. package/vendor/packages/toolkit/src/content/commands/guard/body.md +17 -0
  396. package/vendor/packages/toolkit/src/content/commands/guard/meta.yaml +20 -0
  397. package/vendor/packages/toolkit/src/content/commands/idea/assets/.gitkeep +0 -0
  398. package/vendor/packages/toolkit/src/content/commands/idea/body.md +23 -0
  399. package/vendor/packages/toolkit/src/content/commands/idea/meta.yaml +19 -0
  400. package/vendor/packages/toolkit/src/content/commands/learn/assets/.gitkeep +0 -0
  401. package/vendor/packages/toolkit/src/content/commands/learn/body.md +37 -0
  402. package/vendor/packages/toolkit/src/content/commands/learn/meta.yaml +19 -0
  403. package/vendor/packages/toolkit/src/content/commands/migrate/assets/.gitkeep +0 -0
  404. package/vendor/packages/toolkit/src/content/commands/migrate/body.md +24 -0
  405. package/vendor/packages/toolkit/src/content/commands/migrate/meta.yaml +20 -0
  406. package/vendor/packages/toolkit/src/content/commands/onboard/assets/.gitkeep +0 -0
  407. package/vendor/packages/toolkit/src/content/commands/onboard/body.md +24 -0
  408. package/vendor/packages/toolkit/src/content/commands/onboard/meta.yaml +19 -0
  409. package/vendor/packages/toolkit/src/content/commands/perf/assets/.gitkeep +0 -0
  410. package/vendor/packages/toolkit/src/content/commands/perf/body.md +23 -0
  411. package/vendor/packages/toolkit/src/content/commands/perf/meta.yaml +19 -0
  412. package/vendor/packages/toolkit/src/content/commands/plan-review/assets/.gitkeep +0 -0
  413. package/vendor/packages/toolkit/src/content/commands/plan-review/body.md +28 -0
  414. package/vendor/packages/toolkit/src/content/commands/plan-review/meta.yaml +20 -0
  415. package/vendor/packages/toolkit/src/content/commands/qa/assets/.gitkeep +0 -0
  416. package/vendor/packages/toolkit/src/content/commands/qa/body.md +24 -0
  417. package/vendor/packages/toolkit/src/content/commands/qa/meta.yaml +19 -0
  418. package/vendor/packages/toolkit/src/content/commands/quality-review/assets/.gitkeep +0 -0
  419. package/vendor/packages/toolkit/src/content/commands/quality-review/body.md +38 -0
  420. package/vendor/packages/toolkit/src/content/commands/quality-review/meta.yaml +22 -0
  421. package/vendor/packages/toolkit/src/content/commands/retro/assets/.gitkeep +0 -0
  422. package/vendor/packages/toolkit/src/content/commands/retro/body.md +25 -0
  423. package/vendor/packages/toolkit/src/content/commands/retro/meta.yaml +20 -0
  424. package/vendor/packages/toolkit/src/content/commands/sdd-tdd/assets/.gitkeep +0 -0
  425. package/vendor/packages/toolkit/src/content/commands/sdd-tdd/body.md +39 -0
  426. package/vendor/packages/toolkit/src/content/commands/sdd-tdd/meta.yaml +23 -0
  427. package/vendor/packages/toolkit/src/content/commands/secure/assets/.gitkeep +0 -0
  428. package/vendor/packages/toolkit/src/content/commands/secure/body.md +23 -0
  429. package/vendor/packages/toolkit/src/content/commands/secure/meta.yaml +19 -0
  430. package/vendor/packages/toolkit/src/content/commands/ship/assets/.gitkeep +0 -0
  431. package/vendor/packages/toolkit/src/content/commands/ship/body.md +17 -0
  432. package/vendor/packages/toolkit/src/content/commands/ship/meta.yaml +21 -0
  433. package/vendor/packages/toolkit/src/content/commands/simplify/assets/.gitkeep +0 -0
  434. package/vendor/packages/toolkit/src/content/commands/simplify/body.md +24 -0
  435. package/vendor/packages/toolkit/src/content/commands/simplify/meta.yaml +19 -0
  436. package/vendor/packages/toolkit/src/content/commands/spec/assets/.gitkeep +0 -0
  437. package/vendor/packages/toolkit/src/content/commands/spec/body.md +32 -0
  438. package/vendor/packages/toolkit/src/content/commands/spec/meta.yaml +23 -0
  439. package/vendor/packages/toolkit/src/content/commands/task-plan/assets/.gitkeep +0 -0
  440. package/vendor/packages/toolkit/src/content/commands/task-plan/body.md +32 -0
  441. package/vendor/packages/toolkit/src/content/commands/task-plan/meta.yaml +23 -0
  442. package/vendor/packages/toolkit/src/content/commands/ui/assets/.gitkeep +0 -0
  443. package/vendor/packages/toolkit/src/content/commands/ui/body.md +24 -0
  444. package/vendor/packages/toolkit/src/content/commands/ui/meta.yaml +20 -0
  445. package/vendor/packages/toolkit/src/content/commands/verify/assets/.gitkeep +0 -0
  446. package/vendor/packages/toolkit/src/content/commands/verify/body.md +32 -0
  447. package/vendor/packages/toolkit/src/content/commands/verify/meta.yaml +19 -0
  448. package/vendor/packages/toolkit/src/content/skills/api-and-interface-design/assets/.gitkeep +0 -0
  449. package/vendor/packages/toolkit/src/content/skills/api-and-interface-design/body.md +289 -0
  450. package/vendor/packages/toolkit/src/content/skills/api-and-interface-design/meta.yaml +21 -0
  451. package/vendor/packages/toolkit/src/content/skills/brainstorming-and-design/assets/.gitkeep +0 -0
  452. package/vendor/packages/toolkit/src/content/skills/brainstorming-and-design/body.md +129 -0
  453. package/vendor/packages/toolkit/src/content/skills/brainstorming-and-design/meta.yaml +18 -0
  454. package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/body.md +155 -0
  455. package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/meta.yaml +17 -0
  456. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/assets/.gitkeep +0 -0
  457. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/body.md +554 -0
  458. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/meta.yaml +20 -0
  459. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/assets/.gitkeep +0 -0
  460. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/body.md +417 -0
  461. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/meta.yaml +21 -0
  462. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/assets/.gitkeep +0 -0
  463. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/body.md +130 -0
  464. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/meta.yaml +21 -0
  465. package/vendor/packages/toolkit/src/content/skills/code-simplification/assets/.gitkeep +0 -0
  466. package/vendor/packages/toolkit/src/content/skills/code-simplification/body.md +326 -0
  467. package/vendor/packages/toolkit/src/content/skills/code-simplification/meta.yaml +21 -0
  468. package/vendor/packages/toolkit/src/content/skills/codebase-onboarding/assets/.gitkeep +0 -0
  469. package/vendor/packages/toolkit/src/content/skills/codebase-onboarding/body.md +40 -0
  470. package/vendor/packages/toolkit/src/content/skills/codebase-onboarding/meta.yaml +20 -0
  471. package/vendor/packages/toolkit/src/content/skills/context-budget-audit/assets/.gitkeep +0 -0
  472. package/vendor/packages/toolkit/src/content/skills/context-budget-audit/body.md +38 -0
  473. package/vendor/packages/toolkit/src/content/skills/context-budget-audit/meta.yaml +17 -0
  474. package/vendor/packages/toolkit/src/content/skills/context-engineering/assets/.gitkeep +0 -0
  475. package/vendor/packages/toolkit/src/content/skills/context-engineering/body.md +55 -0
  476. package/vendor/packages/toolkit/src/content/skills/context-engineering/meta.yaml +17 -0
  477. package/vendor/packages/toolkit/src/content/skills/continuous-learning/assets/.gitkeep +0 -0
  478. package/vendor/packages/toolkit/src/content/skills/continuous-learning/body.md +367 -0
  479. package/vendor/packages/toolkit/src/content/skills/continuous-learning/meta.yaml +18 -0
  480. package/vendor/packages/toolkit/src/content/skills/debugging-and-error-recovery/assets/.gitkeep +0 -0
  481. package/vendor/packages/toolkit/src/content/skills/debugging-and-error-recovery/body.md +43 -0
  482. package/vendor/packages/toolkit/src/content/skills/debugging-and-error-recovery/meta.yaml +21 -0
  483. package/vendor/packages/toolkit/src/content/skills/deprecation-and-migration/assets/.gitkeep +0 -0
  484. package/vendor/packages/toolkit/src/content/skills/deprecation-and-migration/body.md +201 -0
  485. package/vendor/packages/toolkit/src/content/skills/deprecation-and-migration/meta.yaml +21 -0
  486. package/vendor/packages/toolkit/src/content/skills/developer-experience-audit/body.md +49 -0
  487. package/vendor/packages/toolkit/src/content/skills/developer-experience-audit/meta.yaml +17 -0
  488. package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/assets/.gitkeep +0 -0
  489. package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/body.md +61 -0
  490. package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/meta.yaml +21 -0
  491. package/vendor/packages/toolkit/src/content/skills/engineering-principles/body.md +54 -0
  492. package/vendor/packages/toolkit/src/content/skills/engineering-principles/meta.yaml +18 -0
  493. package/vendor/packages/toolkit/src/content/skills/frontend-ui-engineering/assets/.gitkeep +0 -0
  494. package/vendor/packages/toolkit/src/content/skills/frontend-ui-engineering/body.md +324 -0
  495. package/vendor/packages/toolkit/src/content/skills/frontend-ui-engineering/meta.yaml +21 -0
  496. package/vendor/packages/toolkit/src/content/skills/git-workflow-and-versioning/assets/.gitkeep +0 -0
  497. package/vendor/packages/toolkit/src/content/skills/git-workflow-and-versioning/body.md +319 -0
  498. package/vendor/packages/toolkit/src/content/skills/git-workflow-and-versioning/meta.yaml +21 -0
  499. package/vendor/packages/toolkit/src/content/skills/idea-refine/assets/.gitkeep +0 -0
  500. package/vendor/packages/toolkit/src/content/skills/idea-refine/body.md +173 -0
  501. package/vendor/packages/toolkit/src/content/skills/idea-refine/meta.yaml +17 -0
  502. package/vendor/packages/toolkit/src/content/skills/incremental-implementation/assets/.gitkeep +0 -0
  503. package/vendor/packages/toolkit/src/content/skills/incremental-implementation/body.md +43 -0
  504. package/vendor/packages/toolkit/src/content/skills/incremental-implementation/meta.yaml +20 -0
  505. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/assets/.gitkeep +0 -0
  506. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/body.md +52 -0
  507. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/meta.yaml +18 -0
  508. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/assets/.gitkeep +0 -0
  509. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/body.md +351 -0
  510. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/meta.yaml +19 -0
  511. package/vendor/packages/toolkit/src/content/skills/performance-optimization/assets/.gitkeep +0 -0
  512. package/vendor/packages/toolkit/src/content/skills/performance-optimization/body.md +345 -0
  513. package/vendor/packages/toolkit/src/content/skills/performance-optimization/meta.yaml +20 -0
  514. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/assets/.gitkeep +0 -0
  515. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/body.md +48 -0
  516. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/meta.yaml +20 -0
  517. package/vendor/packages/toolkit/src/content/skills/release-documentation-sync/body.md +54 -0
  518. package/vendor/packages/toolkit/src/content/skills/release-documentation-sync/meta.yaml +15 -0
  519. package/vendor/packages/toolkit/src/content/skills/review-response-and-resolution/body.md +61 -0
  520. package/vendor/packages/toolkit/src/content/skills/review-response-and-resolution/meta.yaml +18 -0
  521. package/vendor/packages/toolkit/src/content/skills/safety-guardrails/assets/.gitkeep +0 -0
  522. package/vendor/packages/toolkit/src/content/skills/safety-guardrails/body.md +43 -0
  523. package/vendor/packages/toolkit/src/content/skills/safety-guardrails/meta.yaml +17 -0
  524. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/assets/.gitkeep +0 -0
  525. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/body.md +371 -0
  526. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/meta.yaml +25 -0
  527. package/vendor/packages/toolkit/src/content/skills/security-and-hardening/assets/.gitkeep +0 -0
  528. package/vendor/packages/toolkit/src/content/skills/security-and-hardening/body.md +344 -0
  529. package/vendor/packages/toolkit/src/content/skills/security-and-hardening/meta.yaml +21 -0
  530. package/vendor/packages/toolkit/src/content/skills/shipping-and-launch/assets/.gitkeep +0 -0
  531. package/vendor/packages/toolkit/src/content/skills/shipping-and-launch/body.md +55 -0
  532. package/vendor/packages/toolkit/src/content/skills/shipping-and-launch/meta.yaml +22 -0
  533. package/vendor/packages/toolkit/src/content/skills/source-driven-development/assets/.gitkeep +0 -0
  534. package/vendor/packages/toolkit/src/content/skills/source-driven-development/body.md +186 -0
  535. package/vendor/packages/toolkit/src/content/skills/source-driven-development/meta.yaml +18 -0
  536. package/vendor/packages/toolkit/src/content/skills/spec-driven-development/assets/.gitkeep +0 -0
  537. package/vendor/packages/toolkit/src/content/skills/spec-driven-development/body.md +49 -0
  538. package/vendor/packages/toolkit/src/content/skills/spec-driven-development/meta.yaml +20 -0
  539. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/assets/.gitkeep +0 -0
  540. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/body.md +336 -0
  541. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/meta.yaml +17 -0
  542. package/vendor/packages/toolkit/src/content/skills/subagent-driven-development/assets/.gitkeep +0 -0
  543. package/vendor/packages/toolkit/src/content/skills/subagent-driven-development/body.md +228 -0
  544. package/vendor/packages/toolkit/src/content/skills/subagent-driven-development/meta.yaml +19 -0
  545. package/vendor/packages/toolkit/src/content/skills/team-orchestration/assets/.gitkeep +0 -0
  546. package/vendor/packages/toolkit/src/content/skills/team-orchestration/body.md +372 -0
  547. package/vendor/packages/toolkit/src/content/skills/team-orchestration/meta.yaml +20 -0
  548. package/vendor/packages/toolkit/src/content/skills/test-driven-development/assets/.gitkeep +0 -0
  549. package/vendor/packages/toolkit/src/content/skills/test-driven-development/body.md +374 -0
  550. package/vendor/packages/toolkit/src/content/skills/test-driven-development/meta.yaml +20 -0
  551. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/assets/.gitkeep +0 -0
  552. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/body.md +169 -0
  553. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/meta.yaml +23 -0
  554. package/vendor/packages/toolkit/src/content/skills/verification-before-completion/assets/.gitkeep +0 -0
  555. package/vendor/packages/toolkit/src/content/skills/verification-before-completion/body.md +68 -0
  556. package/vendor/packages/toolkit/src/content/skills/verification-before-completion/meta.yaml +20 -0
  557. package/vendor/packages/toolkit/templates/README.md +12 -0
  558. package/vendor/packages/toolkit/templates/asset-unit/assets/.gitkeep +1 -0
  559. package/vendor/packages/toolkit/templates/asset-unit/body.md +3 -0
  560. package/vendor/packages/toolkit/templates/asset-unit/meta.yaml +6 -0
  561. package/vendor/references/upstreams.yaml +89 -0
@@ -0,0 +1,554 @@
1
+ # Browser QA Testing
2
+
3
+ ## Overview
4
+
5
+ Unit tests verify functions. API tests verify endpoints. Neither tells you whether a user can actually log in, fill a form, or navigate your app without hitting a blank screen or a cryptic error. Browser-level QA testing fills this gap by driving a real browser through the same flows your users follow — clicking buttons, filling inputs, waiting for network responses, and validating what appears on screen.
6
+
7
+ **Why this matters:** The most common production incidents aren't logic bugs caught by unit tests — they're broken builds that render blank pages, API integrations that fail silently, modals that can't be dismissed, or forms that submit empty data. These only surface when a real browser renders real DOM, executes real JavaScript, and makes real network requests.
8
+
9
+ ## When to Use
10
+
11
+ - After frontend component development is complete and you need to verify the integrated experience
12
+ - After user flow changes (new pages, modified navigation, updated forms)
13
+ - Before any release or deployment — as the final quality gate
14
+ - When visual regression is suspected (CSS changes, dependency upgrades, design system updates)
15
+ - When accessibility compliance needs verification (WCAG audits)
16
+ - After backend API changes that affect frontend behavior
17
+ - When a bug report describes browser-specific behavior you can't reproduce with unit tests
18
+
19
+ ## 方法原则
20
+
21
+ - 先验证最小关键路径,再扩展到次要路径;不要一上来铺满低价值场景
22
+ - 浏览器 QA 的输出必须可作为证据使用,失败时要留下截图、trace、控制台或网络记录
23
+ - 对复杂改动谨慎推进,先锁定一条可复现路径,再扩大覆盖面
24
+ - 视觉、交互、网络、可访问性检查都应服务当前目标,而不是机械堆清单
25
+
26
+ ## 最小关键路径
27
+
28
+ 每轮浏览器 QA 至少先选 1-3 条“失败就不能放行”的路径,通常包括:
29
+
30
+ 1. 进入应用或核心页面
31
+ 2. 完成一次主要业务动作
32
+ 3. 看到可验证的成功结果或明确错误反馈
33
+
34
+ 如果这是一个 bug 修复,最小关键路径必须先覆盖“原始失败如何复现”和“修复后如何证明不再复发”。
35
+
36
+ ## Tool Selection
37
+
38
+ ### Playwright (Recommended)
39
+
40
+ Best overall choice for AI-driven QA workflows:
41
+
42
+ ```
43
+ Strengths:
44
+ - Multi-browser (Chromium, Firefox, WebKit) with one API
45
+ - Auto-wait for elements (no manual sleep/waitFor)
46
+ - Built-in screenshot, video, and trace capture
47
+ - Network interception and mocking
48
+ - Native accessibility testing via @axe-core/playwright
49
+
50
+ Install: npm init playwright@latest
51
+ ```
52
+
53
+ ### Cypress
54
+
55
+ Better for teams already invested in the Cypress ecosystem:
56
+
57
+ ```
58
+ Strengths:
59
+ - Excellent interactive test runner with time-travel debugging
60
+ - Rich plugin ecosystem
61
+ - Good for component testing in isolation
62
+
63
+ Limitations:
64
+ - Chromium-family only (no Safari/WebKit)
65
+ - Cannot test multiple browser tabs or origins in one test
66
+ ```
67
+
68
+ ### Puppeteer
69
+
70
+ Use only when you need raw Chrome DevTools Protocol access:
71
+
72
+ ```
73
+ Strengths:
74
+ - Direct CDP access for advanced scenarios (performance profiling, coverage)
75
+ - Lightweight if you only need Chrome
76
+
77
+ Limitations:
78
+ - Chrome/Chromium only
79
+ - No built-in test runner — you must bring your own
80
+ - More boilerplate than Playwright for common tasks
81
+ ```
82
+
83
+ **Decision rule:** Default to Playwright unless the project already uses Cypress. Use Puppeteer only for Chrome-specific DevTools scenarios.
84
+
85
+ ### Browser Configuration
86
+
87
+ ```typescript
88
+ // playwright.config.ts — recommended baseline
89
+ import { defineConfig, devices } from '@playwright/test';
90
+
91
+ export default defineConfig({
92
+ testDir: './e2e',
93
+ timeout: 30_000,
94
+ retries: process.env.CI ? 2 : 0,
95
+ use: {
96
+ baseURL: process.env.BASE_URL || 'http://localhost:3000',
97
+ screenshot: 'only-on-failure',
98
+ video: 'retain-on-failure',
99
+ trace: 'retain-on-failure',
100
+ },
101
+ projects: [
102
+ { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
103
+ { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
104
+ { name: 'webkit', use: { ...devices['Desktop Safari'] } },
105
+ { name: 'mobile-chrome', use: { ...devices['Pixel 5'] } },
106
+ { name: 'mobile-safari', use: { ...devices['iPhone 13'] } },
107
+ ],
108
+ webServer: {
109
+ command: 'npm run dev',
110
+ port: 3000,
111
+ reuseExistingServer: !process.env.CI,
112
+ },
113
+ });
114
+ ```
115
+
116
+ ## QA Testing Workflow
117
+
118
+ ### Step 1: Environment Preparation
119
+
120
+ Before any browser test can run, the application must be running and data must be in a known state.
121
+
122
+ ```
123
+ Pre-flight checklist:
124
+ □ Application builds without errors
125
+ □ Dev server or preview server is running and responding
126
+ □ Test database is seeded with known data (or API mocks are configured)
127
+ □ Environment variables are set (API URLs, feature flags)
128
+ □ No port conflicts on the target URL
129
+ ```
130
+
131
+ **Seed data strategy:** Either use a test database with fixtures, or intercept network requests and return mock responses. Never rely on production data for QA tests.
132
+
133
+ ```typescript
134
+ // Example: API mocking with Playwright
135
+ test.beforeEach(async ({ page }) => {
136
+ await page.route('**/api/tasks', route =>
137
+ route.fulfill({
138
+ status: 200,
139
+ contentType: 'application/json',
140
+ body: JSON.stringify([
141
+ { id: 1, title: 'Test task', done: false },
142
+ { id: 2, title: 'Completed task', done: true },
143
+ ]),
144
+ })
145
+ );
146
+ });
147
+ ```
148
+
149
+ ### Step 2: Core User Flow Testing
150
+
151
+ Test the critical paths a real user follows. Prioritize by business impact:
152
+
153
+ ```
154
+ Priority 1 (Must pass — blocks release):
155
+ - Authentication (login, logout, session persistence)
156
+ - Primary CRUD operations (create, read, update, delete core entities)
157
+ - Payment/checkout flows (if applicable)
158
+ - Navigation between main sections
159
+
160
+ Priority 2 (Should pass — file bugs if broken):
161
+ - Search and filtering
162
+ - Settings and preferences
163
+ - Notification flows
164
+ - Export/import operations
165
+
166
+ Priority 3 (Nice to have):
167
+ - Edge case interactions
168
+ - Rarely used features
169
+ - Admin-only flows
170
+ ```
171
+
172
+ 先把 Priority 1 做成稳定、可重复、可留证据的路径;在它们还不稳定时,不要把精力优先花在长尾流程上。
173
+
174
+ ```typescript
175
+ // Example: Complete login → dashboard → action flow
176
+ test('user can log in and create a task', async ({ page }) => {
177
+ await page.goto('/login');
178
+
179
+ await page.getByLabel('Email').fill('user@test.com');
180
+ await page.getByLabel('Password').fill('testpass123');
181
+ await page.getByRole('button', { name: 'Sign in' }).click();
182
+
183
+ // Verify redirect to dashboard
184
+ await expect(page).toHaveURL('/dashboard');
185
+ await expect(page.getByRole('heading', { name: 'My Tasks' })).toBeVisible();
186
+
187
+ // Create a new task
188
+ await page.getByRole('button', { name: 'New Task' }).click();
189
+ await page.getByLabel('Task title').fill('Write QA tests');
190
+ await page.getByRole('button', { name: 'Save' }).click();
191
+
192
+ // Verify task appears in list
193
+ await expect(page.getByText('Write QA tests')).toBeVisible();
194
+ });
195
+ ```
196
+
197
+ ### Step 3: Interaction Testing
198
+
199
+ Test form submissions, navigation, and state changes that go beyond happy-path flows:
200
+
201
+ ```typescript
202
+ // Form validation testing
203
+ test('form shows validation errors for invalid input', async ({ page }) => {
204
+ await page.goto('/register');
205
+
206
+ // Submit empty form
207
+ await page.getByRole('button', { name: 'Create account' }).click();
208
+
209
+ // Check validation messages appear
210
+ await expect(page.getByText('Email is required')).toBeVisible();
211
+ await expect(page.getByText('Password must be at least 8 characters')).toBeVisible();
212
+
213
+ // Check invalid email
214
+ await page.getByLabel('Email').fill('not-an-email');
215
+ await page.getByRole('button', { name: 'Create account' }).click();
216
+ await expect(page.getByText('Enter a valid email address')).toBeVisible();
217
+ });
218
+
219
+ // Navigation and back-button behavior
220
+ test('browser back button returns to previous page', async ({ page }) => {
221
+ await page.goto('/tasks');
222
+ await page.getByText('Task 1').click();
223
+ await expect(page).toHaveURL(/\/tasks\/\d+/);
224
+
225
+ await page.goBack();
226
+ await expect(page).toHaveURL('/tasks');
227
+ });
228
+ ```
229
+
230
+ ### Step 4: Visual Verification
231
+
232
+ Use screenshots to detect visual regressions:
233
+
234
+ ```typescript
235
+ // Full-page screenshot comparison
236
+ test('dashboard matches visual baseline', async ({ page }) => {
237
+ await page.goto('/dashboard');
238
+ await page.waitForLoadState('networkidle');
239
+
240
+ await expect(page).toHaveScreenshot('dashboard.png', {
241
+ maxDiffPixelRatio: 0.01, // Allow 1% pixel difference
242
+ fullPage: true,
243
+ });
244
+ });
245
+
246
+ // Component-level screenshot
247
+ test('task card renders correctly', async ({ page }) => {
248
+ await page.goto('/tasks');
249
+ const card = page.getByTestId('task-card').first();
250
+
251
+ await expect(card).toHaveScreenshot('task-card.png');
252
+ });
253
+ ```
254
+
255
+ **Update baselines** when intentional visual changes are made: `npx playwright test --update-snapshots`
256
+
257
+ ### Step 4.5: Failure Regression Evidence
258
+
259
+ 当测试失败时,至少保留一类可以复盘的证据:
260
+
261
+ - 截图,证明页面状态与预期不符
262
+ - trace 或录像,证明交互链路在哪里中断
263
+ - console error / network failure,证明是前端异常、接口失败还是环境问题
264
+
265
+ 没有证据的“浏览器测过了”不构成可审查的结论。
266
+
267
+ ### Step 5: Accessibility Audit
268
+
269
+ Integrate axe-core for automated WCAG compliance checking:
270
+
271
+ ```typescript
272
+ import AxeBuilder from '@axe-core/playwright';
273
+
274
+ test('home page has no accessibility violations', async ({ page }) => {
275
+ await page.goto('/');
276
+
277
+ const results = await new AxeBuilder({ page })
278
+ .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'])
279
+ .analyze();
280
+
281
+ expect(results.violations).toEqual([]);
282
+ });
283
+
284
+ // Targeted audit on specific component
285
+ test('modal dialog meets accessibility standards', async ({ page }) => {
286
+ await page.goto('/tasks');
287
+ await page.getByRole('button', { name: 'New Task' }).click();
288
+
289
+ const modal = page.getByRole('dialog');
290
+ const results = await new AxeBuilder({ page })
291
+ .include(await modal.elementHandle())
292
+ .analyze();
293
+
294
+ expect(results.violations).toEqual([]);
295
+ });
296
+ ```
297
+
298
+ **Manual keyboard checks to include:**
299
+
300
+ ```
301
+ □ Tab order follows visual order
302
+ □ Focus is visible on all interactive elements
303
+ □ Escape closes modals and dropdowns
304
+ □ Enter/Space activates buttons and links
305
+ □ Arrow keys work in menus and listboxes
306
+ ```
307
+
308
+ ### Step 6: Console and Network Monitoring
309
+
310
+ Enforce a zero-error policy in the browser console and verify network behavior:
311
+
312
+ ```typescript
313
+ // Collect console errors during test
314
+ test('page loads without console errors', async ({ page }) => {
315
+ const errors: string[] = [];
316
+ page.on('console', msg => {
317
+ if (msg.type() === 'error') errors.push(msg.text());
318
+ });
319
+
320
+ await page.goto('/dashboard');
321
+ await page.waitForLoadState('networkidle');
322
+
323
+ // Filter out known third-party noise if needed
324
+ const realErrors = errors.filter(e => !e.includes('third-party-sdk'));
325
+ expect(realErrors).toHaveLength(0);
326
+ });
327
+
328
+ // Verify no failed network requests
329
+ test('all API requests succeed', async ({ page }) => {
330
+ const failedRequests: string[] = [];
331
+ page.on('response', response => {
332
+ if (response.status() >= 400) {
333
+ failedRequests.push(`${response.status()} ${response.url()}`);
334
+ }
335
+ });
336
+
337
+ await page.goto('/dashboard');
338
+ await page.waitForLoadState('networkidle');
339
+
340
+ expect(failedRequests).toHaveLength(0);
341
+ });
342
+
343
+ // Verify specific API calls are made
344
+ test('dashboard fetches tasks on load', async ({ page }) => {
345
+ const apiCalls: string[] = [];
346
+ page.on('request', req => {
347
+ if (req.url().includes('/api/')) apiCalls.push(req.url());
348
+ });
349
+
350
+ await page.goto('/dashboard');
351
+ await page.waitForLoadState('networkidle');
352
+
353
+ expect(apiCalls.some(url => url.includes('/api/tasks'))).toBe(true);
354
+ });
355
+ ```
356
+
357
+ ### Step 7: Regression Test Generation
358
+
359
+ When a bug is found during QA, immediately convert it into an automated test:
360
+
361
+ ```typescript
362
+ // Bug found: clicking "Delete" on last task causes blank screen
363
+ // → Convert to regression test:
364
+
365
+ test('deleting the last task shows empty state instead of blank screen', async ({ page }) => {
366
+ // Setup: single task
367
+ await page.route('**/api/tasks', route =>
368
+ route.fulfill({ body: JSON.stringify([{ id: 1, title: 'Only task', done: false }]) })
369
+ );
370
+
371
+ await page.goto('/tasks');
372
+ await page.getByRole('button', { name: 'Delete' }).click();
373
+ await page.getByRole('button', { name: 'Confirm' }).click();
374
+
375
+ // Should show empty state, not blank screen
376
+ await expect(page.getByText('No tasks yet')).toBeVisible();
377
+ await expect(page.getByRole('button', { name: 'Create Task' })).toBeVisible();
378
+ });
379
+ ```
380
+
381
+ ## Common Test Scenario Templates
382
+
383
+ ### Login/Registration
384
+
385
+ ```typescript
386
+ test.describe('Authentication', () => {
387
+ test('successful login redirects to dashboard', async ({ page }) => { /* ... */ });
388
+ test('wrong password shows error message', async ({ page }) => { /* ... */ });
389
+ test('session persists across page reload', async ({ page }) => { /* ... */ });
390
+ test('logout clears session and redirects to login', async ({ page }) => { /* ... */ });
391
+ test('registration with valid data creates account', async ({ page }) => { /* ... */ });
392
+ test('registration with duplicate email shows error', async ({ page }) => { /* ... */ });
393
+ });
394
+ ```
395
+
396
+ ### CRUD Operations
397
+
398
+ ```typescript
399
+ test.describe('Task CRUD', () => {
400
+ test('create: new task appears in list', async ({ page }) => { /* ... */ });
401
+ test('read: task detail page shows all fields', async ({ page }) => { /* ... */ });
402
+ test('update: edited task saves and reflects changes', async ({ page }) => { /* ... */ });
403
+ test('delete: removed task disappears with confirmation', async ({ page }) => { /* ... */ });
404
+ test('bulk: select-all and batch delete works', async ({ page }) => { /* ... */ });
405
+ });
406
+ ```
407
+
408
+ ### Responsive Layout
409
+
410
+ ```typescript
411
+ const viewports = [
412
+ { name: 'mobile', width: 375, height: 812 },
413
+ { name: 'tablet', width: 768, height: 1024 },
414
+ { name: 'desktop', width: 1440, height: 900 },
415
+ ];
416
+
417
+ for (const vp of viewports) {
418
+ test(`dashboard layout is correct at ${vp.name}`, async ({ page }) => {
419
+ await page.setViewportSize({ width: vp.width, height: vp.height });
420
+ await page.goto('/dashboard');
421
+ await expect(page).toHaveScreenshot(`dashboard-${vp.name}.png`);
422
+ });
423
+ }
424
+ ```
425
+
426
+ ### Error State Display
427
+
428
+ ```typescript
429
+ test.describe('Error handling', () => {
430
+ test('API failure shows error message with retry button', async ({ page }) => {
431
+ await page.route('**/api/tasks', route => route.fulfill({ status: 500 }));
432
+ await page.goto('/tasks');
433
+
434
+ await expect(page.getByText('Something went wrong')).toBeVisible();
435
+ await expect(page.getByRole('button', { name: 'Retry' })).toBeVisible();
436
+ });
437
+
438
+ test('404 page shows helpful navigation', async ({ page }) => {
439
+ await page.goto('/nonexistent-page');
440
+ await expect(page.getByText('Page not found')).toBeVisible();
441
+ await expect(page.getByRole('link', { name: 'Go home' })).toBeVisible();
442
+ });
443
+ });
444
+ ```
445
+
446
+ ## QA Report Format
447
+
448
+ After a QA run, produce a structured report:
449
+
450
+ ```markdown
451
+ ## QA Report — [Feature/Page Name] — [Date]
452
+
453
+ ### Environment
454
+ - URL: http://localhost:3000
455
+ - Browser: Chromium 120, Firefox 121, WebKit 17.4
456
+ - Viewport: 1440×900 (desktop), 375×812 (mobile)
457
+
458
+ ### Summary
459
+ - Total tests: 24
460
+ - ✅ Passed: 21
461
+ - ❌ Failed: 2
462
+ - ⚠️ Flaky: 1
463
+
464
+ ### Failed Tests
465
+ | Test | Browser | Error | Screenshot |
466
+ |------|---------|-------|------------|
467
+ | Login form validation | WebKit | "Email required" message not visible | ![](/screenshots/login-webkit-001.png) |
468
+ | Task delete on mobile | Mobile Chrome | Confirm button outside viewport | ![](/screenshots/delete-mobile-001.png) |
469
+
470
+ ### Accessibility Audit
471
+ - Violations found: 3
472
+ 1. Missing alt text on user avatar (img element) — Critical
473
+ 2. Color contrast ratio 3.8:1 on secondary text — Moderate
474
+ 3. Missing aria-label on icon-only button — Moderate
475
+
476
+ ### Console Errors
477
+ - None (clean)
478
+
479
+ ### Network Issues
480
+ - None (all requests 2xx)
481
+
482
+ ### Recommendations
483
+ 1. [Critical] Fix WebKit form validation display — blocks release
484
+ 2. [Critical] Fix mobile viewport overflow on delete confirmation
485
+ 3. [Moderate] Add missing alt text and aria-labels
486
+ 4. [Low] Improve secondary text contrast ratio
487
+ ```
488
+
489
+ ## Integration with Other Skills
490
+
491
+ ### With `frontend-ui-engineering`
492
+
493
+ Development → QA feedback loop:
494
+
495
+ ```
496
+ Build component → Run QA → Fix issues → Re-run QA → Approve
497
+ ```
498
+
499
+ QA tests validate everything the frontend skill specifies: accessibility, responsive behavior, loading/error/empty states.
500
+
501
+ ### With `test-driven-development`
502
+
503
+ TDD covers unit and integration layers. Browser QA adds the E2E layer:
504
+
505
+ ```
506
+ Unit tests (TDD) → Function-level correctness
507
+ Integration tests → Module interaction
508
+ Browser QA tests → User-facing experience (this skill)
509
+ ```
510
+
511
+ ### With `verification-before-completion`
512
+
513
+ QA test results serve as concrete verification evidence:
514
+
515
+ ```
516
+ Verification evidence:
517
+ - 24/24 browser tests passing
518
+ - Zero console errors
519
+ - Zero accessibility violations
520
+ - Screenshots attached for visual confirmation
521
+ ```
522
+
523
+ ## Common Rationalizations
524
+
525
+ | Rationalization | Reality |
526
+ |---|---|
527
+ | "Unit tests are enough" | Unit tests can't catch a broken layout, a missing button, or a form that submits empty data. |
528
+ | "Manual QA is faster" | Manual QA is faster once. Automated QA is faster every time after that — and it doesn't forget edge cases. |
529
+ | "E2E tests are too slow" | A focused suite of 20-30 critical-path tests runs in under 2 minutes. That's faster than debugging a production incident. |
530
+ | "We'll add browser tests later" | Later never comes. The cost of writing tests increases as the app grows. Start with the critical paths now. |
531
+ | "It works on my machine" | Browser tests run in consistent environments. They catch the cross-browser and viewport issues you won't see on your dev setup. |
532
+
533
+ ## Red Flags
534
+
535
+ - No browser tests exist for user-facing features
536
+ - QA is only done manually before releases (no automation)
537
+ - Tests use arbitrary `sleep()` / `waitForTimeout()` instead of proper element assertions
538
+ - Screenshot baselines haven't been updated in months (everything is ignored)
539
+ - Accessibility audits have never been run
540
+ - Console errors are ignored ("it's just a warning")
541
+ - Tests only run in one browser (skipping Firefox/WebKit/mobile)
542
+ - No test data seeding — tests depend on production data or shared environments
543
+
544
+ ## Verification
545
+
546
+ After QA testing is complete:
547
+
548
+ - [ ] All Priority 1 (critical path) tests pass across target browsers
549
+ - [ ] Zero unhandled console errors in the browser
550
+ - [ ] Accessibility audit shows zero critical violations
551
+ - [ ] Visual screenshots are captured and reviewed
552
+ - [ ] Failed tests have filed bugs with reproduction steps
553
+ - [ ] Regression tests are written for any bugs discovered
554
+ - [ ] QA report is generated with pass/fail summary and evidence
@@ -0,0 +1,20 @@
1
+ kind: skill
2
+ name: browser-qa-testing
3
+ title: 浏览器质检
4
+ description: 对运行中的应用执行真实浏览器 QA 测试。适用于前端改动后、发布前,或单元/API 测试通过但仍需确认真实用户体验时,覆盖流程测试、视觉回归、可访问性以及控制台和网络监控。
5
+ tier: recommended
6
+ audience: advanced
7
+ stability: stable
8
+ suggests:
9
+ - skill:verification-before-completion
10
+ platforms:
11
+ - qwen
12
+ - codex
13
+ - qoder
14
+ source:
15
+ upstream: agent-skills
16
+ strategy: adapted
17
+ origin_name: browser-qa-testing
18
+ origin_path: skills/browser-qa-testing/SKILL.md
19
+ origin_id: skill:browser-qa-testing
20
+ notes: 沿用上游浏览器 QA 能力,并结合本仓库验证门禁输出。