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,156 @@
1
+ import { z } from "zod";
2
+ // Common schemas used across webtest tools
3
+ /**
4
+ * Analysis ID schema - accepts either:
5
+ * - Date-time format: YYYY-MM-DD_HH-mm (new format for workspace folders)
6
+ * - UUID format (legacy support)
7
+ */
8
+ export const AnalysisIdSchema = z
9
+ .string()
10
+ .describe("Analysis workspace ID in format YYYY-MM-DD_HH-mm (e.g., 2025-12-18_17-05) or legacy UUID")
11
+ .refine((val) => {
12
+ // Match date-time format: YYYY-MM-DD_HH-mm
13
+ const dateTimePattern = /^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$/;
14
+ // Match UUID format (for legacy support)
15
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
16
+ return dateTimePattern.test(val) || uuidPattern.test(val);
17
+ }, { message: "Invalid analysis ID. Expected format: YYYY-MM-DD_HH-mm or UUID" });
18
+ /**
19
+ * Crawl ID schema - accepts either:
20
+ * - Date-time format with seconds: YYYY-MM-DD_HH-mm-ss (new format for crawl folders)
21
+ * - UUID format (legacy support)
22
+ */
23
+ export const CrawlIdSchema = z
24
+ .string()
25
+ .describe("Crawl ID in format YYYY-MM-DD_HH-mm-ss (e.g., 2025-12-18_17-06-20) or legacy UUID")
26
+ .refine((val) => {
27
+ // Match date-time format with seconds: YYYY-MM-DD_HH-mm-ss
28
+ const dateTimePattern = /^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$/;
29
+ // Match UUID format (for legacy support)
30
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
31
+ return dateTimePattern.test(val) || uuidPattern.test(val);
32
+ }, { message: "Invalid crawl ID. Expected format: YYYY-MM-DD_HH-mm-ss or UUID" });
33
+ export const AnalysisLimitsSchema = z.object({
34
+ maxSteps: z.number().int().min(1).max(1000).optional(),
35
+ maxMinutes: z.number().int().min(1).max(180).optional(),
36
+ maxPages: z.number().int().min(1).max(100).optional(),
37
+ });
38
+ export const DomainAllowlistSchema = z.array(z.string()).optional();
39
+ // Sampling response schemas
40
+ /**
41
+ * Args structure per tool (Microsoft Playwright MCP compatible):
42
+ * - navigate: { url: string }
43
+ * - click: { element: string, ref: string }
44
+ * - type: { element: string, ref: string, text: string, submit?: boolean, slowly?: boolean }
45
+ * - fill: { element: string, ref: string, value: string }
46
+ * - hover: { element: string, ref: string }
47
+ * - select: { element: string, ref: string, values: string[] }
48
+ * - press: { key: string } // No element targeting
49
+ * - scroll: { x: number, y: number }
50
+ * - wait: { ms: number }
51
+ *
52
+ * The `element` field is a human-readable description of the element.
53
+ * The `ref` field is the exact element reference from the accessibility snapshot (e.g., "e1", "e3").
54
+ */
55
+ export const CrawlActionSchema = z.object({
56
+ actions: z.array(z.object({
57
+ tool: z.enum([
58
+ "navigate",
59
+ "click",
60
+ "type",
61
+ "fill",
62
+ "hover",
63
+ "select",
64
+ "press",
65
+ "scroll",
66
+ "wait",
67
+ ]),
68
+ args: z.record(z.string(), z.any()),
69
+ })),
70
+ reasoning: z.string(),
71
+ goalProgress: z.string(),
72
+ goalComplete: z.boolean().optional(),
73
+ blocked: z.boolean().optional(),
74
+ blockedReason: z.string().optional(),
75
+ elicitationNeeded: z
76
+ .object({
77
+ type: z.enum([
78
+ "cookie_consent",
79
+ "modal_blocking",
80
+ "ambiguous_navigation",
81
+ "auth_required",
82
+ ]),
83
+ context: z.string(),
84
+ options: z
85
+ .array(z.object({
86
+ url: z.string().optional(),
87
+ label: z.string(),
88
+ }))
89
+ .optional(),
90
+ })
91
+ .optional(),
92
+ });
93
+ // Feature-based schemas
94
+ export const FeatureSchema = z.object({
95
+ slug: z.string().describe("URL-safe identifier for the feature (kebab-case)"),
96
+ name: z.string().describe("Human-readable feature name"),
97
+ description: z.string().describe("Brief description of what this feature does"),
98
+ entities: z.array(z.string()).describe("Key entities/data types in this feature"),
99
+ entryPoints: z.array(z.string()).describe("URLs or navigation paths to access this feature"),
100
+ });
101
+ export const FeaturesDiscoverySchema = z.object({
102
+ appPurpose: z.string().describe("Overall purpose of the application"),
103
+ appType: z.string().describe("Type of application (e.g., e-commerce, SaaS, content site)"),
104
+ features: z.array(FeatureSchema).describe("Distinct features/modules of the application"),
105
+ securityObservations: z.array(z.string()).optional(),
106
+ accessibilityObservations: z.array(z.string()).optional(),
107
+ });
108
+ export const FlowSchema = z.object({
109
+ id: z.string().describe("Unique flow identifier"),
110
+ name: z.string().describe("Human-readable flow name"),
111
+ description: z.string().describe("What this flow accomplishes"),
112
+ entryPoint: z.string().describe("Starting URL or navigation path"),
113
+ steps: z.array(z.string()).describe("Ordered list of steps in the flow"),
114
+ });
115
+ export const FlowsDiscoverySchema = z.object({
116
+ featureSlug: z.string().describe("The feature these flows belong to"),
117
+ flows: z.array(FlowSchema).describe("User flows within this feature"),
118
+ suggestedAssertions: z.array(z.string()).describe("Assertions that should hold for these flows"),
119
+ });
120
+ export const FeatureSlugSchema = z
121
+ .string()
122
+ .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "Feature slug must be kebab-case (e.g., 'user-auth', 'shopping-cart')")
123
+ .describe("Feature identifier in kebab-case");
124
+ export const TestCaseSchema = z.object({
125
+ id: z.string(),
126
+ name: z.string(),
127
+ purpose: z.string(),
128
+ category: z.enum(["happy_path", "edge_case", "error_handling", "boundary"]),
129
+ preconditions: z.array(z.string()),
130
+ steps: z.array(z.object({
131
+ stepNumber: z.number().int(),
132
+ action: z.string(),
133
+ target: z.string().optional(), // Kept for backwards compatibility
134
+ value: z.string().optional(),
135
+ expected: z.string().optional(),
136
+ // Microsoft Playwright MCP compatible fields
137
+ element: z.string().optional(), // Human-readable element description
138
+ ref: z.string().optional(), // Element reference from accessibility snapshot (e.g., "e1", "e3")
139
+ })),
140
+ expectedOutcomes: z.array(z.string()),
141
+ tags: z.array(z.string()).optional(),
142
+ });
143
+ export const TestGenerationSchema = z.object({
144
+ tests: z.array(TestCaseSchema),
145
+ coverage: z.object({
146
+ flowsCovered: z.array(z.string()),
147
+ estimatedCoverage: z.string(),
148
+ }),
149
+ });
150
+ export const TestEvaluationSchema = z.object({
151
+ passed: z.boolean(),
152
+ reasoning: z.string(),
153
+ evidence: z.array(z.string()),
154
+ discrepancies: z.array(z.string()).optional(),
155
+ });
156
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/webtest/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ import type { McpTool } from "../../types/tool.js";
3
+ import type { ServerContext } from "../../types/context.js";
4
+ export declare const startAnalysisInputSchema: z.ZodObject<{
5
+ url: z.ZodString;
6
+ focus: z.ZodOptional<z.ZodString>;
7
+ limits: z.ZodOptional<z.ZodObject<{
8
+ maxSteps: z.ZodOptional<z.ZodNumber>;
9
+ maxMinutes: z.ZodOptional<z.ZodNumber>;
10
+ maxPages: z.ZodOptional<z.ZodNumber>;
11
+ }, z.core.$strip>>;
12
+ allowedDomains: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
+ }, z.core.$strip>;
14
+ export type StartAnalysisInput = z.infer<typeof startAnalysisInputSchema>;
15
+ export declare function createStartAnalysisTool(getContext: () => ServerContext): McpTool<StartAnalysisInput>;
16
+ //# sourceMappingURL=start-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-analysis.d.ts","sourceRoot":"","sources":["../../../src/tools/webtest/start-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,eAAO,MAAM,wBAAwB;;;;;;;;;iBAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,aAAa,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAqI7B"}
@@ -0,0 +1,137 @@
1
+ import { z } from "zod";
2
+ import { AnalysisLimitsSchema } from "./schemas.js";
3
+ export const startAnalysisInputSchema = z.object({
4
+ url: z.string().url("Must be a valid URL"),
5
+ focus: z
6
+ .string()
7
+ .optional()
8
+ .describe("Optional focus area for the analysis (e.g., 'checkout flow', 'user registration')"),
9
+ limits: AnalysisLimitsSchema.optional().describe("Optional limits for the analysis"),
10
+ allowedDomains: z
11
+ .array(z.string())
12
+ .optional()
13
+ .describe("Additional domains to allow during crawling (target domain is always allowed)"),
14
+ });
15
+ export function createStartAnalysisTool(getContext) {
16
+ return {
17
+ name: "webtest_init",
18
+ description: `Initialize a new web testing analysis workspace.
19
+
20
+ This tool creates a workspace for analyzing a web application. It:
21
+ - Validates the target URL
22
+ - Creates a workspace directory structure
23
+ - Records analysis metadata and limits
24
+ - Returns identifiers for subsequent operations
25
+
26
+ Use this as the first step before crawling, analyzing, or testing.`,
27
+ inputSchema: startAnalysisInputSchema,
28
+ async handler(input) {
29
+ const ctx = getContext();
30
+ const { config, logger } = ctx;
31
+ logger.info("Starting analysis", { url: input.url, focus: input.focus });
32
+ // Validate and normalize URL
33
+ let targetUrl;
34
+ try {
35
+ targetUrl = new URL(input.url);
36
+ }
37
+ catch {
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: `Error: Invalid URL "${input.url}". Please provide a valid HTTP or HTTPS URL.`,
43
+ },
44
+ ],
45
+ isError: true,
46
+ };
47
+ }
48
+ if (!["http:", "https:"].includes(targetUrl.protocol)) {
49
+ return {
50
+ content: [
51
+ {
52
+ type: "text",
53
+ text: `Error: URL must use HTTP or HTTPS protocol. Got: ${targetUrl.protocol}`,
54
+ },
55
+ ],
56
+ isError: true,
57
+ };
58
+ }
59
+ // Determine limits
60
+ const limits = {
61
+ maxSteps: input.limits?.maxSteps ?? config.defaultMaxSteps,
62
+ maxMinutes: input.limits?.maxMinutes ?? config.defaultMaxMinutes,
63
+ maxPages: input.limits?.maxPages ?? config.defaultMaxPages,
64
+ };
65
+ // Build allowed domains list
66
+ const allowedDomains = new Set([targetUrl.hostname]);
67
+ if (input.allowedDomains) {
68
+ for (const domain of input.allowedDomains) {
69
+ allowedDomains.add(domain);
70
+ }
71
+ }
72
+ // Create workspace using workspace manager from context
73
+ // Note: We need to get this from an extended context that includes the workspace manager
74
+ const workspaceManager = ctx.workspaceManager;
75
+ if (!workspaceManager) {
76
+ return {
77
+ content: [
78
+ {
79
+ type: "text",
80
+ text: "Error: Workspace manager not available. Server may not be fully initialized.",
81
+ },
82
+ ],
83
+ isError: true,
84
+ };
85
+ }
86
+ try {
87
+ const { analysisId, workspacePath } = await workspaceManager.createWorkspace({
88
+ url: input.url,
89
+ focus: input.focus,
90
+ limits,
91
+ });
92
+ // Notify clients about new resource
93
+ const resourceManager = ctx.resourceManager;
94
+ if (resourceManager) {
95
+ await resourceManager.notifyListChanged();
96
+ }
97
+ const result = {
98
+ analysisId,
99
+ workspaceRootPath: workspacePath,
100
+ workspaceRootUri: `webtest://${analysisId}`,
101
+ statusUri: `webtest://${analysisId}/index.md`,
102
+ domain: targetUrl.hostname,
103
+ allowedDomains: Array.from(allowedDomains),
104
+ limits,
105
+ nextSteps: [
106
+ `Use webtest_crawl_app with analysisId="${analysisId}" to explore the application`,
107
+ "Set a goal describing what you want to explore or test",
108
+ "After crawling, use webtest_analyze_app to analyze the application structure",
109
+ ],
110
+ };
111
+ logger.info("Analysis workspace created", { analysisId, url: input.url });
112
+ return {
113
+ content: [
114
+ {
115
+ type: "text",
116
+ text: JSON.stringify(result, null, 2),
117
+ },
118
+ ],
119
+ };
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof Error ? error.message : "Unknown error";
123
+ logger.error("Failed to create analysis workspace", { error: message });
124
+ return {
125
+ content: [
126
+ {
127
+ type: "text",
128
+ text: `Error creating workspace: ${message}`,
129
+ },
130
+ ],
131
+ isError: true,
132
+ };
133
+ }
134
+ },
135
+ };
136
+ }
137
+ //# sourceMappingURL=start-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-analysis.js","sourceRoot":"","sources":["../../../src/tools/webtest/start-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
2
+ import type { Logger } from "../logger.js";
3
+ export interface HttpTransportOptions {
4
+ port: number;
5
+ }
6
+ export declare function createHttpTransport(options: HttpTransportOptions, logger: Logger): StreamableHTTPServerTransport;
7
+ export { StreamableHTTPServerTransport };
8
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,GACb,6BAA6B,CAM/B;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
2
+ export function createHttpTransport(options, logger) {
3
+ logger.info("Creating HTTP transport", { port: options.port });
4
+ return new StreamableHTTPServerTransport({
5
+ sessionIdGenerator: () => crypto.randomUUID(),
6
+ });
7
+ }
8
+ export { StreamableHTTPServerTransport };
9
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAOnG,MAAM,UAAU,mBAAmB,CACjC,OAA6B,EAC7B,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/D,OAAO,IAAI,6BAA6B,CAAC;QACvC,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ import type { Config } from "../config.js";
3
+ import type { Logger } from "../logger.js";
4
+ import { StreamableHTTPServerTransport } from "./http.js";
5
+ export type TransportResult = {
6
+ type: "stdio";
7
+ transport: Transport;
8
+ } | {
9
+ type: "http";
10
+ transport: StreamableHTTPServerTransport;
11
+ port: number;
12
+ };
13
+ export declare function createTransport(config: Config, logger: Logger): TransportResult;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAEL,6BAA6B,EAC9B,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,6BAA6B,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAgB/E"}
@@ -0,0 +1,20 @@
1
+ import { createStdioTransport } from "./stdio.js";
2
+ import { createHttpTransport, } from "./http.js";
3
+ export function createTransport(config, logger) {
4
+ switch (config.transport) {
5
+ case "stdio":
6
+ return {
7
+ type: "stdio",
8
+ transport: createStdioTransport(logger),
9
+ };
10
+ case "http":
11
+ return {
12
+ type: "http",
13
+ transport: createHttpTransport({ port: config.port }, logger),
14
+ port: config.port,
15
+ };
16
+ default:
17
+ throw new Error(`Unknown transport type: ${config.transport}`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAMnB,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAAc;IAC5D,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,oBAAoB,CAAC,MAAM,CAAC;aACxC,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;gBAC7D,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import type { Logger } from "../logger.js";
3
+ export declare function createStdioTransport(logger: Logger): StdioServerTransport;
4
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAGzE"}
@@ -0,0 +1,6 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ export function createStdioTransport(logger) {
3
+ logger.info("Creating stdio transport");
4
+ return new StdioServerTransport();
5
+ }
6
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface ClientCapabilities {
2
+ sampling: boolean;
3
+ elicitation: boolean;
4
+ logging: boolean;
5
+ progress: boolean;
6
+ resourcesListChanged: boolean;
7
+ resourcesSubscribe: boolean;
8
+ protocolVersion: string;
9
+ }
10
+ export declare const DEFAULT_CAPABILITIES: ClientCapabilities;
11
+ export declare function hasSampling(caps: ClientCapabilities): boolean;
12
+ export declare function hasElicitation(caps: ClientCapabilities): boolean;
13
+ export declare function hasLogging(caps: ClientCapabilities): boolean;
14
+ export declare function hasProgress(caps: ClientCapabilities): boolean;
15
+ export declare function hasResourcesListChanged(caps: ClientCapabilities): boolean;
16
+ export declare function hasResourcesSubscribe(caps: ClientCapabilities): boolean;
17
+ export declare function isElicitationSupported(caps: ClientCapabilities): boolean;
18
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/types/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,EAAE,kBAQlC,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE5D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE7D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEzE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAKxE"}
@@ -0,0 +1,35 @@
1
+ export const DEFAULT_CAPABILITIES = {
2
+ sampling: false,
3
+ elicitation: false,
4
+ logging: false,
5
+ progress: false,
6
+ resourcesListChanged: false,
7
+ resourcesSubscribe: false,
8
+ protocolVersion: "unknown",
9
+ };
10
+ export function hasSampling(caps) {
11
+ return caps.sampling;
12
+ }
13
+ export function hasElicitation(caps) {
14
+ return caps.elicitation;
15
+ }
16
+ export function hasLogging(caps) {
17
+ return caps.logging;
18
+ }
19
+ export function hasProgress(caps) {
20
+ return caps.progress;
21
+ }
22
+ export function hasResourcesListChanged(caps) {
23
+ return caps.resourcesListChanged;
24
+ }
25
+ export function hasResourcesSubscribe(caps) {
26
+ return caps.resourcesSubscribe;
27
+ }
28
+ export function isElicitationSupported(caps) {
29
+ // Elicitation requires protocol version 2025-06-18 or later
30
+ const version = caps.protocolVersion;
31
+ if (version === "unknown")
32
+ return false;
33
+ return version >= "2025-06-18" && caps.elicitation;
34
+ }
35
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/types/capabilities.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,oBAAoB,EAAE,KAAK;IAC3B,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAwB;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAwB;IAC9D,OAAO,IAAI,CAAC,oBAAoB,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC5D,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAwB;IAC7D,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC;AACrD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import type { Config } from "../schemas/config.js";
3
+ import type { Logger } from "../logger.js";
4
+ import type { ClientCapabilities } from "./capabilities.js";
5
+ import type { PlaywrightClient } from "../playwright-client/index.js";
6
+ import type { CancellationRegistry } from "../progress/index.js";
7
+ import type { ResourceSubscriptions } from "../resources/subscriptions.js";
8
+ export interface ServerContext {
9
+ config: Config;
10
+ logger: Logger;
11
+ server: Server;
12
+ capabilities: ClientCapabilities;
13
+ playwrightClient: PlaywrightClient | null;
14
+ cancellationRegistry: CancellationRegistry;
15
+ resourceSubscriptions: ResourceSubscriptions;
16
+ }
17
+ export type ServerContextWithPlaywright = ServerContext & {
18
+ playwrightClient: PlaywrightClient;
19
+ };
20
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,kBAAkB,CAAC;IACjC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,qBAAqB,EAAE,qBAAqB,CAAC;CAC9C;AAED,MAAM,MAAM,2BAA2B,GAAG,aAAa,GAAG;IACxD,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { z } from "zod";
2
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
3
+ export type ToolResult = CallToolResult;
4
+ export interface McpTool<TInput = unknown> {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: z.ZodType<TInput>;
8
+ handler: (input: TInput) => Promise<ToolResult>;
9
+ }
10
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC,MAAM,WAAW,OAAO,CAAC,MAAM,GAAG,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":""}