retestkit 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/.claude/commands/openspec/apply.md +23 -0
  2. package/.claude/commands/openspec/archive.md +27 -0
  3. package/.claude/commands/openspec/proposal.md +28 -0
  4. package/.gemini/commands/openspec/apply.toml +21 -0
  5. package/.gemini/commands/openspec/archive.toml +25 -0
  6. package/.gemini/commands/openspec/proposal.toml +26 -0
  7. package/.github/prompts/openspec-apply.prompt.md +22 -0
  8. package/.github/prompts/openspec-archive.prompt.md +26 -0
  9. package/.github/prompts/openspec-proposal.prompt.md +27 -0
  10. package/.github/workflows/release.yml +33 -0
  11. package/.kilocode/workflows/openspec-apply.md +17 -0
  12. package/.kilocode/workflows/openspec-archive.md +21 -0
  13. package/.kilocode/workflows/openspec-proposal.md +22 -0
  14. package/.mcp.json +23 -0
  15. package/.opencode/command/openspec-apply.md +25 -0
  16. package/.opencode/command/openspec-archive.md +28 -0
  17. package/.opencode/command/openspec-proposal.md +30 -0
  18. package/.roo/commands/openspec-apply.md +20 -0
  19. package/.roo/commands/openspec-archive.md +24 -0
  20. package/.roo/commands/openspec-proposal.md +25 -0
  21. package/.vscode/mcp.json +23 -0
  22. package/AGENTS.md +18 -0
  23. package/CLAUDE.md +18 -0
  24. package/LICENSE +65 -0
  25. package/README.md +303 -0
  26. package/dist/config.d.ts +4 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +27 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/elicitation/index.d.ts +17 -0
  31. package/dist/elicitation/index.d.ts.map +1 -0
  32. package/dist/elicitation/index.js +118 -0
  33. package/dist/elicitation/index.js.map +1 -0
  34. package/dist/elicitation/types.d.ts +35 -0
  35. package/dist/elicitation/types.d.ts.map +1 -0
  36. package/dist/elicitation/types.js +39 -0
  37. package/dist/elicitation/types.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +76 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/lifecycle/index.d.ts +31 -0
  43. package/dist/lifecycle/index.d.ts.map +1 -0
  44. package/dist/lifecycle/index.js +61 -0
  45. package/dist/lifecycle/index.js.map +1 -0
  46. package/dist/logger.d.ts +21 -0
  47. package/dist/logger.d.ts.map +1 -0
  48. package/dist/logger.js +182 -0
  49. package/dist/logger.js.map +1 -0
  50. package/dist/playwright-client/index.d.ts +29 -0
  51. package/dist/playwright-client/index.d.ts.map +1 -0
  52. package/dist/playwright-client/index.js +288 -0
  53. package/dist/playwright-client/index.js.map +1 -0
  54. package/dist/playwright-client/types.d.ts +44 -0
  55. package/dist/playwright-client/types.d.ts.map +1 -0
  56. package/dist/playwright-client/types.js +49 -0
  57. package/dist/playwright-client/types.js.map +1 -0
  58. package/dist/progress/index.d.ts +39 -0
  59. package/dist/progress/index.d.ts.map +1 -0
  60. package/dist/progress/index.js +106 -0
  61. package/dist/progress/index.js.map +1 -0
  62. package/dist/progress/types.d.ts +24 -0
  63. package/dist/progress/types.d.ts.map +1 -0
  64. package/dist/progress/types.js +2 -0
  65. package/dist/progress/types.js.map +1 -0
  66. package/dist/prompts/index.d.ts +19 -0
  67. package/dist/prompts/index.d.ts.map +1 -0
  68. package/dist/prompts/index.js +207 -0
  69. package/dist/prompts/index.js.map +1 -0
  70. package/dist/prompts/loader.d.ts +20 -0
  71. package/dist/prompts/loader.d.ts.map +1 -0
  72. package/dist/prompts/loader.js +47 -0
  73. package/dist/prompts/loader.js.map +1 -0
  74. package/dist/resources/index.d.ts +27 -0
  75. package/dist/resources/index.d.ts.map +1 -0
  76. package/dist/resources/index.js +186 -0
  77. package/dist/resources/index.js.map +1 -0
  78. package/dist/resources/subscriptions.d.ts +10 -0
  79. package/dist/resources/subscriptions.d.ts.map +1 -0
  80. package/dist/resources/subscriptions.js +23 -0
  81. package/dist/resources/subscriptions.js.map +1 -0
  82. package/dist/sampling/index.d.ts +11 -0
  83. package/dist/sampling/index.d.ts.map +1 -0
  84. package/dist/sampling/index.js +201 -0
  85. package/dist/sampling/index.js.map +1 -0
  86. package/dist/sampling/prompts.d.ts +56 -0
  87. package/dist/sampling/prompts.d.ts.map +1 -0
  88. package/dist/sampling/prompts.js +124 -0
  89. package/dist/sampling/prompts.js.map +1 -0
  90. package/dist/sampling/types.d.ts +57 -0
  91. package/dist/sampling/types.d.ts.map +1 -0
  92. package/dist/sampling/types.js +2 -0
  93. package/dist/sampling/types.js.map +1 -0
  94. package/dist/schemas/config.d.ts +40 -0
  95. package/dist/schemas/config.d.ts.map +1 -0
  96. package/dist/schemas/config.js +30 -0
  97. package/dist/schemas/config.js.map +1 -0
  98. package/dist/security/index.d.ts +38 -0
  99. package/dist/security/index.d.ts.map +1 -0
  100. package/dist/security/index.js +281 -0
  101. package/dist/security/index.js.map +1 -0
  102. package/dist/server.d.ts +9 -0
  103. package/dist/server.d.ts.map +1 -0
  104. package/dist/server.js +142 -0
  105. package/dist/server.js.map +1 -0
  106. package/dist/test-utils/index.d.ts +6 -0
  107. package/dist/test-utils/index.d.ts.map +1 -0
  108. package/dist/test-utils/index.js +6 -0
  109. package/dist/test-utils/index.js.map +1 -0
  110. package/dist/test-utils/mock-context.d.ts +64 -0
  111. package/dist/test-utils/mock-context.d.ts.map +1 -0
  112. package/dist/test-utils/mock-context.js +347 -0
  113. package/dist/test-utils/mock-context.js.map +1 -0
  114. package/dist/test-utils/mock-playwright-client.d.ts +62 -0
  115. package/dist/test-utils/mock-playwright-client.d.ts.map +1 -0
  116. package/dist/test-utils/mock-playwright-client.js +315 -0
  117. package/dist/test-utils/mock-playwright-client.js.map +1 -0
  118. package/dist/tools/index.d.ts +4 -0
  119. package/dist/tools/index.d.ts.map +1 -0
  120. package/dist/tools/index.js +8 -0
  121. package/dist/tools/index.js.map +1 -0
  122. package/dist/tools/webtest/crawl.d.ts +46 -0
  123. package/dist/tools/webtest/crawl.d.ts.map +1 -0
  124. package/dist/tools/webtest/crawl.js +678 -0
  125. package/dist/tools/webtest/crawl.js.map +1 -0
  126. package/dist/tools/webtest/discover-features.d.ts +30 -0
  127. package/dist/tools/webtest/discover-features.d.ts.map +1 -0
  128. package/dist/tools/webtest/discover-features.js +343 -0
  129. package/dist/tools/webtest/discover-features.js.map +1 -0
  130. package/dist/tools/webtest/discover-flows.d.ts +29 -0
  131. package/dist/tools/webtest/discover-flows.d.ts.map +1 -0
  132. package/dist/tools/webtest/discover-flows.js +341 -0
  133. package/dist/tools/webtest/discover-flows.js.map +1 -0
  134. package/dist/tools/webtest/generate-tests.d.ts +54 -0
  135. package/dist/tools/webtest/generate-tests.d.ts.map +1 -0
  136. package/dist/tools/webtest/generate-tests.js +364 -0
  137. package/dist/tools/webtest/generate-tests.js.map +1 -0
  138. package/dist/tools/webtest/index.d.ts +8 -0
  139. package/dist/tools/webtest/index.d.ts.map +1 -0
  140. package/dist/tools/webtest/index.js +8 -0
  141. package/dist/tools/webtest/index.js.map +1 -0
  142. package/dist/tools/webtest/run-test-case.d.ts +28 -0
  143. package/dist/tools/webtest/run-test-case.d.ts.map +1 -0
  144. package/dist/tools/webtest/run-test-case.js +420 -0
  145. package/dist/tools/webtest/run-test-case.js.map +1 -0
  146. package/dist/tools/webtest/schemas.d.ts +175 -0
  147. package/dist/tools/webtest/schemas.d.ts.map +1 -0
  148. package/dist/tools/webtest/schemas.js +156 -0
  149. package/dist/tools/webtest/schemas.js.map +1 -0
  150. package/dist/tools/webtest/start-analysis.d.ts +16 -0
  151. package/dist/tools/webtest/start-analysis.d.ts.map +1 -0
  152. package/dist/tools/webtest/start-analysis.js +137 -0
  153. package/dist/tools/webtest/start-analysis.js.map +1 -0
  154. package/dist/transports/http.d.ts +8 -0
  155. package/dist/transports/http.d.ts.map +1 -0
  156. package/dist/transports/http.js +9 -0
  157. package/dist/transports/http.js.map +1 -0
  158. package/dist/transports/index.d.ts +14 -0
  159. package/dist/transports/index.d.ts.map +1 -0
  160. package/dist/transports/index.js +20 -0
  161. package/dist/transports/index.js.map +1 -0
  162. package/dist/transports/stdio.d.ts +4 -0
  163. package/dist/transports/stdio.d.ts.map +1 -0
  164. package/dist/transports/stdio.js +6 -0
  165. package/dist/transports/stdio.js.map +1 -0
  166. package/dist/types/capabilities.d.ts +18 -0
  167. package/dist/types/capabilities.d.ts.map +1 -0
  168. package/dist/types/capabilities.js +35 -0
  169. package/dist/types/capabilities.js.map +1 -0
  170. package/dist/types/context.d.ts +20 -0
  171. package/dist/types/context.d.ts.map +1 -0
  172. package/dist/types/context.js +2 -0
  173. package/dist/types/context.js.map +1 -0
  174. package/dist/types/tool.d.ts +10 -0
  175. package/dist/types/tool.d.ts.map +1 -0
  176. package/dist/types/tool.js +2 -0
  177. package/dist/types/tool.js.map +1 -0
  178. package/dist/workspace/index.d.ts +99 -0
  179. package/dist/workspace/index.d.ts.map +1 -0
  180. package/dist/workspace/index.js +648 -0
  181. package/dist/workspace/index.js.map +1 -0
  182. package/dist/workspace/markdown.d.ts +50 -0
  183. package/dist/workspace/markdown.d.ts.map +1 -0
  184. package/dist/workspace/markdown.js +210 -0
  185. package/dist/workspace/markdown.js.map +1 -0
  186. package/dist/workspace/types.d.ts +173 -0
  187. package/dist/workspace/types.d.ts.map +1 -0
  188. package/dist/workspace/types.js +2 -0
  189. package/dist/workspace/types.js.map +1 -0
  190. package/openspec/AGENTS.md +456 -0
  191. package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/proposal.md +33 -0
  192. package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/specs/webtest-resources/spec.md +27 -0
  193. package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/specs/webtest-tools/spec.md +304 -0
  194. package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/tasks.md +43 -0
  195. package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/design.md +209 -0
  196. package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/proposal.md +41 -0
  197. package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/specs/mcp-server-core/spec.md +183 -0
  198. package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/tasks.md +112 -0
  199. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/design.md +333 -0
  200. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/proposal.md +66 -0
  201. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/mcp-server-core/spec.md +129 -0
  202. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-lifecycle/spec.md +138 -0
  203. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-logging/spec.md +211 -0
  204. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-prompts/spec.md +157 -0
  205. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-resources/spec.md +213 -0
  206. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-sampling/spec.md +257 -0
  207. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-tools/spec.md +501 -0
  208. package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/tasks.md +264 -0
  209. package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/proposal.md +24 -0
  210. package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/specs/webtest-tools/spec.md +80 -0
  211. package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/tasks.md +8 -0
  212. package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/design.md +90 -0
  213. package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/proposal.md +28 -0
  214. package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/specs/webtest-sampling/spec.md +90 -0
  215. package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/tasks.md +33 -0
  216. package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/design.md +558 -0
  217. package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/proposal.md +119 -0
  218. package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/specs/webtest-resources/spec.md +109 -0
  219. package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/specs/webtest-tools/spec.md +121 -0
  220. package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/tasks.md +133 -0
  221. package/openspec/changes/extract-prompts-to-markdown/design.md +86 -0
  222. package/openspec/changes/extract-prompts-to-markdown/proposal.md +50 -0
  223. package/openspec/changes/extract-prompts-to-markdown/specs/webtest-prompts/spec.md +74 -0
  224. package/openspec/changes/extract-prompts-to-markdown/tasks.md +40 -0
  225. package/openspec/changes/refactor-webtest-naming/design.md +95 -0
  226. package/openspec/changes/refactor-webtest-naming/proposal.md +66 -0
  227. package/openspec/changes/refactor-webtest-naming/specs/webtest-prompts/spec.md +79 -0
  228. package/openspec/changes/refactor-webtest-naming/specs/webtest-resources/spec.md +80 -0
  229. package/openspec/changes/refactor-webtest-naming/specs/webtest-sampling/spec.md +122 -0
  230. package/openspec/changes/refactor-webtest-naming/specs/webtest-tools/spec.md +113 -0
  231. package/openspec/changes/refactor-webtest-naming/tasks.md +119 -0
  232. package/openspec/changes/rename-package-to-retest/proposal.md +52 -0
  233. package/openspec/changes/rename-package-to-retest/specs/mcp-server-core/spec.md +53 -0
  234. package/openspec/changes/rename-package-to-retest/specs/retest-lifecycle/spec.md +68 -0
  235. package/openspec/changes/rename-package-to-retest/specs/retest-logging/spec.md +35 -0
  236. package/openspec/changes/rename-package-to-retest/specs/retest-prompts/spec.md +159 -0
  237. package/openspec/changes/rename-package-to-retest/specs/retest-resources/spec.md +251 -0
  238. package/openspec/changes/rename-package-to-retest/specs/retest-sampling/spec.md +99 -0
  239. package/openspec/changes/rename-package-to-retest/specs/retest-tools/spec.md +295 -0
  240. package/openspec/changes/rename-package-to-retest/tasks.md +71 -0
  241. package/openspec/project.md +31 -0
  242. package/openspec/specs/mcp-server-core/spec.md +178 -0
  243. package/openspec/specs/webtest-lifecycle/spec.md +136 -0
  244. package/openspec/specs/webtest-logging/spec.md +209 -0
  245. package/openspec/specs/webtest-prompts/spec.md +155 -0
  246. package/openspec/specs/webtest-resources/spec.md +248 -0
  247. package/openspec/specs/webtest-sampling/spec.md +344 -0
  248. package/openspec/specs/webtest-tools/spec.md +282 -0
  249. package/package.json +54 -0
  250. package/release.config.js +9 -0
  251. package/src/config.test.ts +96 -0
  252. package/src/config.ts +32 -0
  253. package/src/elicitation/index.test.ts +399 -0
  254. package/src/elicitation/index.ts +171 -0
  255. package/src/elicitation/types.ts +68 -0
  256. package/src/index.ts +83 -0
  257. package/src/lifecycle/index.test.ts +260 -0
  258. package/src/lifecycle/index.ts +101 -0
  259. package/src/logger.redaction.test.ts +322 -0
  260. package/src/logger.test.ts +123 -0
  261. package/src/logger.ts +229 -0
  262. package/src/playwright-client/index.ts +392 -0
  263. package/src/playwright-client/types.ts +99 -0
  264. package/src/progress/index.test.ts +327 -0
  265. package/src/progress/index.ts +170 -0
  266. package/src/progress/types.ts +25 -0
  267. package/src/prompts/index.test.ts +451 -0
  268. package/src/prompts/index.ts +246 -0
  269. package/src/prompts/loader.test.ts +100 -0
  270. package/src/prompts/loader.ts +59 -0
  271. package/src/prompts/templates/mcp/webtest-crawl.md +7 -0
  272. package/src/prompts/templates/mcp/webtest-discover-flows.md +11 -0
  273. package/src/prompts/templates/mcp/webtest-discover.md +12 -0
  274. package/src/prompts/templates/mcp/webtest-full-workflow.md +12 -0
  275. package/src/prompts/templates/mcp/webtest-generate-tests.md +11 -0
  276. package/src/prompts/templates/mcp/webtest-run-test.md +11 -0
  277. package/src/prompts/templates/mcp/webtest-start.md +8 -0
  278. package/src/prompts/templates/sampling/crawl-action.md +35 -0
  279. package/src/prompts/templates/sampling/feature-discovery.md +27 -0
  280. package/src/prompts/templates/sampling/flow-discovery.md +29 -0
  281. package/src/prompts/templates/sampling/page-content-wrapper.md +5 -0
  282. package/src/prompts/templates/sampling/system-prefix.md +12 -0
  283. package/src/prompts/templates/sampling/test-evaluation.md +17 -0
  284. package/src/prompts/templates/sampling/test-generation.md +31 -0
  285. package/src/resources/index.ts +250 -0
  286. package/src/resources/subscriptions.ts +37 -0
  287. package/src/sampling/index.test.ts +414 -0
  288. package/src/sampling/index.ts +286 -0
  289. package/src/sampling/prompts.ts +194 -0
  290. package/src/sampling/types.ts +60 -0
  291. package/src/schemas/config.ts +39 -0
  292. package/src/security/index.test.ts +441 -0
  293. package/src/security/index.ts +361 -0
  294. package/src/security/security-scenarios.test.ts +468 -0
  295. package/src/server.ts +211 -0
  296. package/src/test-utils/index.ts +6 -0
  297. package/src/test-utils/mock-context.ts +426 -0
  298. package/src/test-utils/mock-playwright-client.ts +422 -0
  299. package/src/tools/index.ts +11 -0
  300. package/src/tools/webtest/crawl.test.ts +834 -0
  301. package/src/tools/webtest/crawl.ts +901 -0
  302. package/src/tools/webtest/discover-features.ts +412 -0
  303. package/src/tools/webtest/discover-flows.ts +408 -0
  304. package/src/tools/webtest/generate-tests.test.ts +532 -0
  305. package/src/tools/webtest/generate-tests.ts +425 -0
  306. package/src/tools/webtest/index.ts +7 -0
  307. package/src/tools/webtest/integration.test.ts +536 -0
  308. package/src/tools/webtest/run-test-case.test.ts +659 -0
  309. package/src/tools/webtest/run-test-case.ts +508 -0
  310. package/src/tools/webtest/schemas.ts +201 -0
  311. package/src/tools/webtest/start-analysis.test.ts +151 -0
  312. package/src/tools/webtest/start-analysis.ts +158 -0
  313. package/src/transports/http.ts +19 -0
  314. package/src/transports/index.ts +30 -0
  315. package/src/transports/stdio.ts +7 -0
  316. package/src/types/capabilities.test.ts +193 -0
  317. package/src/types/capabilities.ts +50 -0
  318. package/src/types/context.ts +21 -0
  319. package/src/types/tool.ts +11 -0
  320. package/src/workspace/index.ts +945 -0
  321. package/src/workspace/markdown.ts +272 -0
  322. package/src/workspace/types.ts +186 -0
  323. package/tests/integration/server.test.ts +89 -0
  324. package/tests/integration/tools.test.ts +99 -0
  325. package/tsconfig.json +20 -0
  326. package/vitest.config.ts +9 -0
  327. package/vitest.integration.config.ts +10 -0
@@ -0,0 +1,288 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
3
+ import { CANONICAL_TOOL_NAMES, TOOL_NAME_VARIANTS, REQUIRED_TOOLS, } from "./types.js";
4
+ export function createPlaywrightClient(config, logger) {
5
+ let client = null;
6
+ let transport = null;
7
+ let process = null;
8
+ let toolMapping = null;
9
+ let connected = false;
10
+ async function discoverTools() {
11
+ if (!client) {
12
+ throw new Error("Client not connected");
13
+ }
14
+ const response = await client.listTools();
15
+ const availableTools = new Set(response.tools.map((t) => t.name));
16
+ const mapping = {};
17
+ logger.debug("Discovered Playwright MCP tools", {
18
+ count: response.tools.length,
19
+ tools: response.tools.map((t) => t.name),
20
+ });
21
+ for (const canonical of CANONICAL_TOOL_NAMES) {
22
+ const variants = TOOL_NAME_VARIANTS[canonical];
23
+ const found = variants.find((v) => availableTools.has(v));
24
+ if (found) {
25
+ mapping[canonical] = found;
26
+ logger.debug("Mapped tool", { canonical, actual: found });
27
+ }
28
+ }
29
+ // Check for required tools
30
+ const missingRequired = REQUIRED_TOOLS.filter((t) => !mapping[t]);
31
+ if (missingRequired.length > 0) {
32
+ logger.warn("Missing required Playwright tools", {
33
+ missing: missingRequired,
34
+ });
35
+ }
36
+ // Determine implementation variant
37
+ const sampleTool = Object.values(mapping)[0] || "";
38
+ let variant = "unknown";
39
+ if (sampleTool.startsWith("browser_")) {
40
+ variant = "microsoft";
41
+ }
42
+ else if (sampleTool.startsWith("playwright_")) {
43
+ variant = "anthropic";
44
+ }
45
+ else {
46
+ variant = "generic";
47
+ }
48
+ logger.info("Playwright MCP implementation detected", {
49
+ variant,
50
+ mappedTools: Object.keys(mapping).length,
51
+ });
52
+ return mapping;
53
+ }
54
+ async function callToolInternal(toolName, args) {
55
+ if (!client) {
56
+ throw new Error("Client not connected");
57
+ }
58
+ logger.debug("Calling Playwright tool", { tool: toolName, args });
59
+ try {
60
+ const result = await client.callTool({ name: toolName, arguments: args });
61
+ return result;
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : "Unknown error";
65
+ logger.error("Playwright tool call failed", {
66
+ tool: toolName,
67
+ error: message,
68
+ });
69
+ return {
70
+ content: [{ type: "text", text: `Error: ${message}` }],
71
+ isError: true,
72
+ };
73
+ }
74
+ }
75
+ return {
76
+ async connect() {
77
+ if (connected) {
78
+ logger.warn("Playwright client already connected");
79
+ return;
80
+ }
81
+ logger.info("Connecting to Playwright MCP server", {
82
+ command: config.playwrightMcpCommand,
83
+ args: config.playwrightMcpArgs,
84
+ });
85
+ transport = new StdioClientTransport({
86
+ command: config.playwrightMcpCommand,
87
+ args: config.playwrightMcpArgs,
88
+ });
89
+ client = new Client({ name: "testing-mcp", version: "0.1.0" }, { capabilities: {} });
90
+ await client.connect(transport);
91
+ connected = true;
92
+ toolMapping = await discoverTools();
93
+ logger.info("Playwright MCP client connected");
94
+ },
95
+ async disconnect() {
96
+ if (!connected) {
97
+ return;
98
+ }
99
+ logger.info("Disconnecting from Playwright MCP server");
100
+ try {
101
+ await client?.close();
102
+ }
103
+ catch (error) {
104
+ logger.warn("Error closing client", {
105
+ error: error instanceof Error ? error.message : "Unknown error",
106
+ });
107
+ }
108
+ if (process) {
109
+ process.kill();
110
+ process = null;
111
+ }
112
+ client = null;
113
+ transport = null;
114
+ toolMapping = null;
115
+ connected = false;
116
+ logger.info("Playwright MCP client disconnected");
117
+ },
118
+ isConnected() {
119
+ return connected;
120
+ },
121
+ getToolMapping() {
122
+ return toolMapping;
123
+ },
124
+ async callTool(canonicalName, args) {
125
+ if (!toolMapping) {
126
+ throw new Error("Tool mapping not initialized");
127
+ }
128
+ const actualName = toolMapping[canonicalName];
129
+ if (!actualName) {
130
+ throw new Error(`Tool ${canonicalName} not available`);
131
+ }
132
+ return callToolInternal(actualName, args);
133
+ },
134
+ async snapshot() {
135
+ const result = await this.callTool("snapshot", {});
136
+ if (result.isError) {
137
+ throw new Error(result.content[0]?.text || "Snapshot failed");
138
+ }
139
+ const text = result.content.find((c) => c.type === "text")?.text || "";
140
+ // Parse the snapshot response - format varies by implementation
141
+ try {
142
+ const parsed = JSON.parse(text);
143
+ return {
144
+ url: parsed.url || "",
145
+ title: parsed.title || "",
146
+ content: parsed.content || text,
147
+ };
148
+ }
149
+ catch {
150
+ // Microsoft Playwright MCP returns markdown format:
151
+ // "- Page URL: https://example.com/\n- Page Title: Example\n- Page Snapshot:\n```yaml\n..."
152
+ // Extract URL and title from markdown format
153
+ let url = "";
154
+ let title = "";
155
+ const urlMatch = text.match(/Page URL:\s*(\S+)/);
156
+ if (urlMatch) {
157
+ url = urlMatch[1];
158
+ }
159
+ const titleMatch = text.match(/Page Title:\s*(.+?)(?:\n|$)/);
160
+ if (titleMatch) {
161
+ title = titleMatch[1].trim();
162
+ }
163
+ return {
164
+ url,
165
+ title,
166
+ content: text,
167
+ };
168
+ }
169
+ },
170
+ async screenshot() {
171
+ const result = await this.callTool("screenshot", {});
172
+ if (result.isError) {
173
+ throw new Error(result.content[0]?.text || "Screenshot failed");
174
+ }
175
+ const imageContent = result.content.find((c) => c.type === "image");
176
+ if (!imageContent || !imageContent.data) {
177
+ throw new Error("No image data in screenshot response");
178
+ }
179
+ return {
180
+ data: imageContent.data,
181
+ mimeType: imageContent.mimeType || "image/png",
182
+ };
183
+ },
184
+ async navigate(url) {
185
+ const result = await this.callTool("navigate", { url });
186
+ if (result.isError) {
187
+ throw new Error(result.content[0]?.text || "Navigation failed");
188
+ }
189
+ },
190
+ async click(element, ref) {
191
+ const result = await this.callTool("click", { element, ref });
192
+ if (result.isError) {
193
+ throw new Error(result.content[0]?.text || "Click failed");
194
+ }
195
+ },
196
+ async type(element, ref, text, options) {
197
+ const result = await this.callTool("type", {
198
+ element,
199
+ ref,
200
+ text,
201
+ submit: options?.submit ?? false,
202
+ slowly: options?.slowly ?? false,
203
+ });
204
+ if (result.isError) {
205
+ throw new Error(result.content[0]?.text || "Type failed");
206
+ }
207
+ },
208
+ async fill(element, ref, value) {
209
+ // Microsoft Playwright MCP uses browser_type for fill operations
210
+ // The fill operation is essentially type without slowly mode
211
+ const result = await this.callTool("fill", {
212
+ element,
213
+ ref,
214
+ text: value,
215
+ submit: false,
216
+ slowly: false,
217
+ });
218
+ if (result.isError) {
219
+ throw new Error(result.content[0]?.text || "Fill failed");
220
+ }
221
+ },
222
+ async hover(element, ref) {
223
+ const result = await this.callTool("hover", { element, ref });
224
+ if (result.isError) {
225
+ throw new Error(result.content[0]?.text || "Hover failed");
226
+ }
227
+ },
228
+ async select(element, ref, values) {
229
+ const result = await this.callTool("select", { element, ref, values });
230
+ if (result.isError) {
231
+ throw new Error(result.content[0]?.text || "Select failed");
232
+ }
233
+ },
234
+ async evaluate(fn, element, ref) {
235
+ const args = { function: fn };
236
+ if (element)
237
+ args.element = element;
238
+ if (ref)
239
+ args.ref = ref;
240
+ const result = await this.callTool("evaluate", args);
241
+ if (result.isError) {
242
+ throw new Error(result.content[0]?.text || "Evaluate failed");
243
+ }
244
+ const text = result.content.find((c) => c.type === "text")?.text;
245
+ if (text) {
246
+ try {
247
+ return JSON.parse(text);
248
+ }
249
+ catch {
250
+ return text;
251
+ }
252
+ }
253
+ return undefined;
254
+ },
255
+ async press(key) {
256
+ // Microsoft Playwright MCP browser_press_key takes only the key, no element
257
+ const result = await this.callTool("press", { key });
258
+ if (result.isError) {
259
+ throw new Error(result.content[0]?.text || "Press failed");
260
+ }
261
+ },
262
+ async scroll(x, y) {
263
+ // scroll may not exist in Microsoft implementation - try direct tool first
264
+ // If it fails, fall back to evaluate
265
+ if (toolMapping?.scroll) {
266
+ const result = await this.callTool("scroll", { x, y });
267
+ if (!result.isError) {
268
+ return;
269
+ }
270
+ }
271
+ // Fallback: use evaluate to scroll
272
+ await this.evaluate(`() => window.scrollTo(${x}, ${y})`);
273
+ },
274
+ async wait(ms) {
275
+ // wait may not exist in Microsoft implementation - try direct tool first
276
+ // If it fails, fall back to evaluate
277
+ if (toolMapping?.wait) {
278
+ const result = await this.callTool("wait", { ms });
279
+ if (!result.isError) {
280
+ return;
281
+ }
282
+ }
283
+ // Fallback: use evaluate to wait
284
+ await this.evaluate(`() => new Promise(resolve => setTimeout(resolve, ${ms}))`);
285
+ },
286
+ };
287
+ }
288
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright-client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export interface PlaywrightToolMapping {
2
+ snapshot: string;
3
+ screenshot: string;
4
+ click: string;
5
+ type: string;
6
+ navigate: string;
7
+ fill: string;
8
+ hover: string;
9
+ select: string;
10
+ evaluate: string;
11
+ press: string;
12
+ scroll: string;
13
+ wait: string;
14
+ }
15
+ export interface PlaywrightTool {
16
+ name: string;
17
+ description?: string;
18
+ inputSchema?: unknown;
19
+ }
20
+ export interface PlaywrightToolListResponse {
21
+ tools: PlaywrightTool[];
22
+ }
23
+ export interface PlaywrightToolCallResult {
24
+ content: Array<{
25
+ type: "text" | "image";
26
+ text?: string;
27
+ data?: string;
28
+ mimeType?: string;
29
+ }>;
30
+ isError?: boolean;
31
+ }
32
+ export interface PlaywrightSnapshot {
33
+ url: string;
34
+ title: string;
35
+ content: string;
36
+ }
37
+ export interface PlaywrightScreenshot {
38
+ data: string;
39
+ mimeType: string;
40
+ }
41
+ export declare const CANONICAL_TOOL_NAMES: (keyof PlaywrightToolMapping)[];
42
+ export declare const TOOL_NAME_VARIANTS: Record<keyof PlaywrightToolMapping, string[]>;
43
+ export declare const REQUIRED_TOOLS: (keyof PlaywrightToolMapping)[];
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/playwright-client/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB,EAAE,CAAC,MAAM,qBAAqB,CAAC,EAa/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,MAAM,qBAAqB,EAC3B,MAAM,EAAE,CA4BT,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,CAAC,MAAM,qBAAqB,CAAC,EAKzD,CAAC"}
@@ -0,0 +1,49 @@
1
+ export const CANONICAL_TOOL_NAMES = [
2
+ "snapshot",
3
+ "screenshot",
4
+ "click",
5
+ "type",
6
+ "navigate",
7
+ "fill",
8
+ "hover",
9
+ "select",
10
+ "evaluate",
11
+ "press",
12
+ "scroll",
13
+ "wait",
14
+ ];
15
+ export const TOOL_NAME_VARIANTS = {
16
+ snapshot: ["browser_snapshot", "playwright_snapshot", "snapshot"],
17
+ screenshot: [
18
+ "browser_take_screenshot",
19
+ "playwright_screenshot",
20
+ "screenshot",
21
+ "browser_screenshot",
22
+ ],
23
+ click: ["browser_click", "playwright_click", "click"],
24
+ type: ["browser_type", "playwright_type", "type"],
25
+ navigate: ["browser_navigate", "playwright_navigate", "navigate"],
26
+ // Note: Microsoft Playwright MCP uses browser_type for fill operations too
27
+ fill: ["browser_type", "browser_fill", "playwright_fill", "fill"],
28
+ hover: ["browser_hover", "playwright_hover", "hover"],
29
+ // Microsoft Playwright MCP uses browser_select_option
30
+ select: ["browser_select_option", "browser_select", "playwright_select", "select"],
31
+ evaluate: [
32
+ "browser_evaluate",
33
+ "browser_run_code",
34
+ "playwright_evaluate",
35
+ "evaluate",
36
+ ],
37
+ // Microsoft Playwright MCP uses browser_press_key
38
+ press: ["browser_press_key", "browser_press", "playwright_press", "press"],
39
+ // scroll and wait may not exist in Microsoft implementation - fallback to evaluate
40
+ scroll: ["browser_scroll", "playwright_scroll", "scroll"],
41
+ wait: ["browser_wait", "playwright_wait", "wait"],
42
+ };
43
+ export const REQUIRED_TOOLS = [
44
+ "snapshot",
45
+ "screenshot",
46
+ "click",
47
+ "navigate",
48
+ ];
49
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/playwright-client/types.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,oBAAoB,GAAoC;IACnE,UAAU;IACV,YAAY;IACZ,OAAO;IACP,MAAM;IACN,UAAU;IACV,MAAM;IACN,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAG3B;IACF,QAAQ,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,UAAU,CAAC;IACjE,UAAU,EAAE;QACV,yBAAyB;QACzB,uBAAuB;QACvB,YAAY;QACZ,oBAAoB;KACrB;IACD,KAAK,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,OAAO,CAAC;IACrD,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC;IACjD,QAAQ,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,UAAU,CAAC;IACjE,2EAA2E;IAC3E,IAAI,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC;IACjE,KAAK,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,OAAO,CAAC;IACrD,sDAAsD;IACtD,MAAM,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,CAAC;IAClF,QAAQ,EAAE;QACR,kBAAkB;QAClB,kBAAkB;QAClB,qBAAqB;QACrB,UAAU;KACX;IACD,kDAAkD;IAClD,KAAK,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,OAAO,CAAC;IAC1E,mFAAmF;IACnF,MAAM,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,CAAC;IACzD,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC;CAClD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,UAAU;IACV,YAAY;IACZ,OAAO;IACP,UAAU;CACX,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Logger } from "../logger.js";
2
+ import type { ClientCapabilities } from "../types/capabilities.js";
3
+ import type { ProgressInfo } from "./types.js";
4
+ export * from "./types.js";
5
+ export interface CancellationRegistry {
6
+ register(requestId: string): void;
7
+ unregister(requestId: string): void;
8
+ isCancelled(requestId: string): boolean;
9
+ cancel(requestId: string): void;
10
+ checkCancelled(requestId: string): void;
11
+ }
12
+ export interface ProgressEmitter {
13
+ emit(info: ProgressInfo): void;
14
+ hasProgress(): boolean;
15
+ }
16
+ export declare function createCancellationRegistry(logger: Logger): CancellationRegistry;
17
+ export declare class CancellationError extends Error {
18
+ readonly requestId: string;
19
+ constructor(requestId: string);
20
+ }
21
+ export declare function createProgressEmitter(sendNotification: (method: string, params: unknown) => Promise<void>, capabilities: ClientCapabilities, logger: Logger): ProgressEmitter;
22
+ export declare function calculateBudgetStatus(params: {
23
+ stepsUsed: number;
24
+ maxSteps: number;
25
+ startTime: number;
26
+ maxMinutes: number;
27
+ pagesVisited: number;
28
+ maxPages: number;
29
+ }): {
30
+ stepsUsed: number;
31
+ stepsRemaining: number;
32
+ minutesUsed: number;
33
+ minutesRemaining: number;
34
+ pagesVisited: number;
35
+ pagesRemaining: number;
36
+ isExhausted: boolean;
37
+ exhaustedReason?: string;
38
+ };
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/progress/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAElE,cAAc,YAAY,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,GACb,oBAAoB,CAqCtB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,SAAS,EAAE,MAAM;CAK9B;AAED,wBAAgB,qBAAqB,CACnC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,EACpE,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,MAAM,GACb,eAAe,CAsCjB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAuCA"}
@@ -0,0 +1,106 @@
1
+ export * from "./types.js";
2
+ export function createCancellationRegistry(logger) {
3
+ const cancelledRequests = new Set();
4
+ const activeRequests = new Set();
5
+ return {
6
+ register(requestId) {
7
+ activeRequests.add(requestId);
8
+ logger.debug("Request registered for cancellation tracking", {
9
+ requestId,
10
+ });
11
+ },
12
+ unregister(requestId) {
13
+ activeRequests.delete(requestId);
14
+ cancelledRequests.delete(requestId);
15
+ logger.debug("Request unregistered from cancellation tracking", {
16
+ requestId,
17
+ });
18
+ },
19
+ isCancelled(requestId) {
20
+ return cancelledRequests.has(requestId);
21
+ },
22
+ cancel(requestId) {
23
+ if (activeRequests.has(requestId)) {
24
+ cancelledRequests.add(requestId);
25
+ logger.info("Request marked as cancelled", { requestId });
26
+ }
27
+ },
28
+ checkCancelled(requestId) {
29
+ if (cancelledRequests.has(requestId)) {
30
+ throw new CancellationError(requestId);
31
+ }
32
+ },
33
+ };
34
+ }
35
+ export class CancellationError extends Error {
36
+ requestId;
37
+ constructor(requestId) {
38
+ super(`Request ${requestId} was cancelled`);
39
+ this.name = "CancellationError";
40
+ this.requestId = requestId;
41
+ }
42
+ }
43
+ export function createProgressEmitter(sendNotification, capabilities, logger) {
44
+ const hasProgressCapability = capabilities.progress;
45
+ return {
46
+ emit(info) {
47
+ if (!hasProgressCapability) {
48
+ logger.debug("Progress notification skipped (not supported)", {
49
+ token: info.progressToken,
50
+ progress: info.progress,
51
+ });
52
+ return;
53
+ }
54
+ const notification = {
55
+ progressToken: info.progressToken,
56
+ progress: info.progress,
57
+ total: info.total,
58
+ };
59
+ logger.debug("Emitting progress notification", {
60
+ ...notification,
61
+ message: info.message,
62
+ budgetStatus: info.budgetStatus,
63
+ });
64
+ sendNotification("notifications/progress", notification).catch((error) => {
65
+ logger.warn("Failed to emit progress notification", {
66
+ error: error instanceof Error ? error.message : "Unknown error",
67
+ });
68
+ });
69
+ },
70
+ hasProgress() {
71
+ return hasProgressCapability;
72
+ },
73
+ };
74
+ }
75
+ export function calculateBudgetStatus(params) {
76
+ const { stepsUsed, maxSteps, startTime, maxMinutes, pagesVisited, maxPages, } = params;
77
+ const minutesUsed = (Date.now() - startTime) / 60000;
78
+ const stepsRemaining = maxSteps - stepsUsed;
79
+ const minutesRemaining = maxMinutes - minutesUsed;
80
+ const pagesRemaining = maxPages - pagesVisited;
81
+ let isExhausted = false;
82
+ let exhaustedReason;
83
+ if (stepsRemaining <= 0) {
84
+ isExhausted = true;
85
+ exhaustedReason = "maxSteps limit reached";
86
+ }
87
+ else if (minutesRemaining <= 0) {
88
+ isExhausted = true;
89
+ exhaustedReason = "maxMinutes timeout reached";
90
+ }
91
+ else if (pagesRemaining <= 0) {
92
+ isExhausted = true;
93
+ exhaustedReason = "maxPages limit reached";
94
+ }
95
+ return {
96
+ stepsUsed,
97
+ stepsRemaining: Math.max(0, stepsRemaining),
98
+ minutesUsed: Math.round(minutesUsed * 10) / 10,
99
+ minutesRemaining: Math.max(0, Math.round(minutesRemaining * 10) / 10),
100
+ pagesVisited,
101
+ pagesRemaining: Math.max(0, pagesRemaining),
102
+ isExhausted,
103
+ exhaustedReason,
104
+ };
105
+ }
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/progress/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface ProgressInfo {
2
+ progressToken: string | number;
3
+ progress: number;
4
+ total?: number;
5
+ message?: string;
6
+ budgetStatus?: {
7
+ stepsUsed: number;
8
+ stepsRemaining: number;
9
+ minutesUsed: number;
10
+ minutesRemaining: number;
11
+ pagesVisited: number;
12
+ pagesRemaining: number;
13
+ };
14
+ }
15
+ export interface ProgressNotification {
16
+ method: "notifications/progress";
17
+ params: {
18
+ progressToken: string | number;
19
+ progress: number;
20
+ total?: number;
21
+ };
22
+ }
23
+ export type CancelledCallback = (requestId: string) => void;
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/progress/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE;QACN,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/progress/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { ServerContext } from "../types/context.js";
2
+ export interface McpPrompt {
3
+ name: string;
4
+ description: string;
5
+ arguments?: Array<{
6
+ name: string;
7
+ description: string;
8
+ required?: boolean;
9
+ }>;
10
+ getMessages(args: Record<string, string>): Promise<Array<{
11
+ role: "user" | "assistant";
12
+ content: {
13
+ type: "text";
14
+ text: string;
15
+ };
16
+ }>>;
17
+ }
18
+ export declare function createWebtestPrompts(getContext: () => ServerContext): McpPrompt[];
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACzC,CAAC,CAAC,CAAC;CACL;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,aAAa,GAC9B,SAAS,EAAE,CAyNb"}