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.
- package/.claude/commands/openspec/apply.md +23 -0
- package/.claude/commands/openspec/archive.md +27 -0
- package/.claude/commands/openspec/proposal.md +28 -0
- package/.gemini/commands/openspec/apply.toml +21 -0
- package/.gemini/commands/openspec/archive.toml +25 -0
- package/.gemini/commands/openspec/proposal.toml +26 -0
- package/.github/prompts/openspec-apply.prompt.md +22 -0
- package/.github/prompts/openspec-archive.prompt.md +26 -0
- package/.github/prompts/openspec-proposal.prompt.md +27 -0
- package/.github/workflows/release.yml +33 -0
- package/.kilocode/workflows/openspec-apply.md +17 -0
- package/.kilocode/workflows/openspec-archive.md +21 -0
- package/.kilocode/workflows/openspec-proposal.md +22 -0
- package/.mcp.json +23 -0
- package/.opencode/command/openspec-apply.md +25 -0
- package/.opencode/command/openspec-archive.md +28 -0
- package/.opencode/command/openspec-proposal.md +30 -0
- package/.roo/commands/openspec-apply.md +20 -0
- package/.roo/commands/openspec-archive.md +24 -0
- package/.roo/commands/openspec-proposal.md +25 -0
- package/.vscode/mcp.json +23 -0
- package/AGENTS.md +18 -0
- package/CLAUDE.md +18 -0
- package/LICENSE +65 -0
- package/README.md +303 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/elicitation/index.d.ts +17 -0
- package/dist/elicitation/index.d.ts.map +1 -0
- package/dist/elicitation/index.js +118 -0
- package/dist/elicitation/index.js.map +1 -0
- package/dist/elicitation/types.d.ts +35 -0
- package/dist/elicitation/types.d.ts.map +1 -0
- package/dist/elicitation/types.js +39 -0
- package/dist/elicitation/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/index.d.ts +31 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +61 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/logger.d.ts +21 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +182 -0
- package/dist/logger.js.map +1 -0
- package/dist/playwright-client/index.d.ts +29 -0
- package/dist/playwright-client/index.d.ts.map +1 -0
- package/dist/playwright-client/index.js +288 -0
- package/dist/playwright-client/index.js.map +1 -0
- package/dist/playwright-client/types.d.ts +44 -0
- package/dist/playwright-client/types.d.ts.map +1 -0
- package/dist/playwright-client/types.js +49 -0
- package/dist/playwright-client/types.js.map +1 -0
- package/dist/progress/index.d.ts +39 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress/index.js +106 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/types.d.ts +24 -0
- package/dist/progress/types.d.ts.map +1 -0
- package/dist/progress/types.js +2 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/prompts/index.d.ts +19 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +207 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/loader.d.ts +20 -0
- package/dist/prompts/loader.d.ts.map +1 -0
- package/dist/prompts/loader.js +47 -0
- package/dist/prompts/loader.js.map +1 -0
- package/dist/resources/index.d.ts +27 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +186 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/subscriptions.d.ts +10 -0
- package/dist/resources/subscriptions.d.ts.map +1 -0
- package/dist/resources/subscriptions.js +23 -0
- package/dist/resources/subscriptions.js.map +1 -0
- package/dist/sampling/index.d.ts +11 -0
- package/dist/sampling/index.d.ts.map +1 -0
- package/dist/sampling/index.js +201 -0
- package/dist/sampling/index.js.map +1 -0
- package/dist/sampling/prompts.d.ts +56 -0
- package/dist/sampling/prompts.d.ts.map +1 -0
- package/dist/sampling/prompts.js +124 -0
- package/dist/sampling/prompts.js.map +1 -0
- package/dist/sampling/types.d.ts +57 -0
- package/dist/sampling/types.d.ts.map +1 -0
- package/dist/sampling/types.js +2 -0
- package/dist/sampling/types.js.map +1 -0
- package/dist/schemas/config.d.ts +40 -0
- package/dist/schemas/config.d.ts.map +1 -0
- package/dist/schemas/config.js +30 -0
- package/dist/schemas/config.js.map +1 -0
- package/dist/security/index.d.ts +38 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +281 -0
- package/dist/security/index.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +142 -0
- package/dist/server.js.map +1 -0
- package/dist/test-utils/index.d.ts +6 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +6 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/mock-context.d.ts +64 -0
- package/dist/test-utils/mock-context.d.ts.map +1 -0
- package/dist/test-utils/mock-context.js +347 -0
- package/dist/test-utils/mock-context.js.map +1 -0
- package/dist/test-utils/mock-playwright-client.d.ts +62 -0
- package/dist/test-utils/mock-playwright-client.d.ts.map +1 -0
- package/dist/test-utils/mock-playwright-client.js +315 -0
- package/dist/test-utils/mock-playwright-client.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/webtest/crawl.d.ts +46 -0
- package/dist/tools/webtest/crawl.d.ts.map +1 -0
- package/dist/tools/webtest/crawl.js +678 -0
- package/dist/tools/webtest/crawl.js.map +1 -0
- package/dist/tools/webtest/discover-features.d.ts +30 -0
- package/dist/tools/webtest/discover-features.d.ts.map +1 -0
- package/dist/tools/webtest/discover-features.js +343 -0
- package/dist/tools/webtest/discover-features.js.map +1 -0
- package/dist/tools/webtest/discover-flows.d.ts +29 -0
- package/dist/tools/webtest/discover-flows.d.ts.map +1 -0
- package/dist/tools/webtest/discover-flows.js +341 -0
- package/dist/tools/webtest/discover-flows.js.map +1 -0
- package/dist/tools/webtest/generate-tests.d.ts +54 -0
- package/dist/tools/webtest/generate-tests.d.ts.map +1 -0
- package/dist/tools/webtest/generate-tests.js +364 -0
- package/dist/tools/webtest/generate-tests.js.map +1 -0
- package/dist/tools/webtest/index.d.ts +8 -0
- package/dist/tools/webtest/index.d.ts.map +1 -0
- package/dist/tools/webtest/index.js +8 -0
- package/dist/tools/webtest/index.js.map +1 -0
- package/dist/tools/webtest/run-test-case.d.ts +28 -0
- package/dist/tools/webtest/run-test-case.d.ts.map +1 -0
- package/dist/tools/webtest/run-test-case.js +420 -0
- package/dist/tools/webtest/run-test-case.js.map +1 -0
- package/dist/tools/webtest/schemas.d.ts +175 -0
- package/dist/tools/webtest/schemas.d.ts.map +1 -0
- package/dist/tools/webtest/schemas.js +156 -0
- package/dist/tools/webtest/schemas.js.map +1 -0
- package/dist/tools/webtest/start-analysis.d.ts +16 -0
- package/dist/tools/webtest/start-analysis.d.ts.map +1 -0
- package/dist/tools/webtest/start-analysis.js +137 -0
- package/dist/tools/webtest/start-analysis.js.map +1 -0
- package/dist/transports/http.d.ts +8 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +9 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +14 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +20 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/stdio.d.ts +4 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +6 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types/capabilities.d.ts +18 -0
- package/dist/types/capabilities.d.ts.map +1 -0
- package/dist/types/capabilities.js +35 -0
- package/dist/types/capabilities.js.map +1 -0
- package/dist/types/context.d.ts +20 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/tool.d.ts +10 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +2 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/workspace/index.d.ts +99 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +648 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/markdown.d.ts +50 -0
- package/dist/workspace/markdown.d.ts.map +1 -0
- package/dist/workspace/markdown.js +210 -0
- package/dist/workspace/markdown.js.map +1 -0
- package/dist/workspace/types.d.ts +173 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/types.js +2 -0
- package/dist/workspace/types.js.map +1 -0
- package/openspec/AGENTS.md +456 -0
- package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/proposal.md +33 -0
- package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/specs/webtest-resources/spec.md +27 -0
- package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/specs/webtest-tools/spec.md +304 -0
- package/openspec/changes/archive/2025-12-18-add-hybrid-artifact-paths/tasks.md +43 -0
- package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/design.md +209 -0
- package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/proposal.md +41 -0
- package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/specs/mcp-server-core/spec.md +183 -0
- package/openspec/changes/archive/2025-12-18-add-mcp-server-foundation/tasks.md +112 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/design.md +333 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/proposal.md +66 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/mcp-server-core/spec.md +129 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-lifecycle/spec.md +138 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-logging/spec.md +211 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-prompts/spec.md +157 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-resources/spec.md +213 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-sampling/spec.md +257 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/specs/webtest-tools/spec.md +501 -0
- package/openspec/changes/archive/2025-12-18-add-webtest-orchestrator/tasks.md +264 -0
- package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/proposal.md +24 -0
- package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/specs/webtest-tools/spec.md +80 -0
- package/openspec/changes/archive/2025-12-18-allow-analysis-of-incomplete-crawls/tasks.md +8 -0
- package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/design.md +90 -0
- package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/proposal.md +28 -0
- package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/specs/webtest-sampling/spec.md +90 -0
- package/openspec/changes/archive/2025-12-18-fix-crawl-loop-stability/tasks.md +33 -0
- package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/design.md +558 -0
- package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/proposal.md +119 -0
- package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/specs/webtest-resources/spec.md +109 -0
- package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/specs/webtest-tools/spec.md +121 -0
- package/openspec/changes/archive/2025-12-18-use-markdown-artifacts/tasks.md +133 -0
- package/openspec/changes/extract-prompts-to-markdown/design.md +86 -0
- package/openspec/changes/extract-prompts-to-markdown/proposal.md +50 -0
- package/openspec/changes/extract-prompts-to-markdown/specs/webtest-prompts/spec.md +74 -0
- package/openspec/changes/extract-prompts-to-markdown/tasks.md +40 -0
- package/openspec/changes/refactor-webtest-naming/design.md +95 -0
- package/openspec/changes/refactor-webtest-naming/proposal.md +66 -0
- package/openspec/changes/refactor-webtest-naming/specs/webtest-prompts/spec.md +79 -0
- package/openspec/changes/refactor-webtest-naming/specs/webtest-resources/spec.md +80 -0
- package/openspec/changes/refactor-webtest-naming/specs/webtest-sampling/spec.md +122 -0
- package/openspec/changes/refactor-webtest-naming/specs/webtest-tools/spec.md +113 -0
- package/openspec/changes/refactor-webtest-naming/tasks.md +119 -0
- package/openspec/changes/rename-package-to-retest/proposal.md +52 -0
- package/openspec/changes/rename-package-to-retest/specs/mcp-server-core/spec.md +53 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-lifecycle/spec.md +68 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-logging/spec.md +35 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-prompts/spec.md +159 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-resources/spec.md +251 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-sampling/spec.md +99 -0
- package/openspec/changes/rename-package-to-retest/specs/retest-tools/spec.md +295 -0
- package/openspec/changes/rename-package-to-retest/tasks.md +71 -0
- package/openspec/project.md +31 -0
- package/openspec/specs/mcp-server-core/spec.md +178 -0
- package/openspec/specs/webtest-lifecycle/spec.md +136 -0
- package/openspec/specs/webtest-logging/spec.md +209 -0
- package/openspec/specs/webtest-prompts/spec.md +155 -0
- package/openspec/specs/webtest-resources/spec.md +248 -0
- package/openspec/specs/webtest-sampling/spec.md +344 -0
- package/openspec/specs/webtest-tools/spec.md +282 -0
- package/package.json +54 -0
- package/release.config.js +9 -0
- package/src/config.test.ts +96 -0
- package/src/config.ts +32 -0
- package/src/elicitation/index.test.ts +399 -0
- package/src/elicitation/index.ts +171 -0
- package/src/elicitation/types.ts +68 -0
- package/src/index.ts +83 -0
- package/src/lifecycle/index.test.ts +260 -0
- package/src/lifecycle/index.ts +101 -0
- package/src/logger.redaction.test.ts +322 -0
- package/src/logger.test.ts +123 -0
- package/src/logger.ts +229 -0
- package/src/playwright-client/index.ts +392 -0
- package/src/playwright-client/types.ts +99 -0
- package/src/progress/index.test.ts +327 -0
- package/src/progress/index.ts +170 -0
- package/src/progress/types.ts +25 -0
- package/src/prompts/index.test.ts +451 -0
- package/src/prompts/index.ts +246 -0
- package/src/prompts/loader.test.ts +100 -0
- package/src/prompts/loader.ts +59 -0
- package/src/prompts/templates/mcp/webtest-crawl.md +7 -0
- package/src/prompts/templates/mcp/webtest-discover-flows.md +11 -0
- package/src/prompts/templates/mcp/webtest-discover.md +12 -0
- package/src/prompts/templates/mcp/webtest-full-workflow.md +12 -0
- package/src/prompts/templates/mcp/webtest-generate-tests.md +11 -0
- package/src/prompts/templates/mcp/webtest-run-test.md +11 -0
- package/src/prompts/templates/mcp/webtest-start.md +8 -0
- package/src/prompts/templates/sampling/crawl-action.md +35 -0
- package/src/prompts/templates/sampling/feature-discovery.md +27 -0
- package/src/prompts/templates/sampling/flow-discovery.md +29 -0
- package/src/prompts/templates/sampling/page-content-wrapper.md +5 -0
- package/src/prompts/templates/sampling/system-prefix.md +12 -0
- package/src/prompts/templates/sampling/test-evaluation.md +17 -0
- package/src/prompts/templates/sampling/test-generation.md +31 -0
- package/src/resources/index.ts +250 -0
- package/src/resources/subscriptions.ts +37 -0
- package/src/sampling/index.test.ts +414 -0
- package/src/sampling/index.ts +286 -0
- package/src/sampling/prompts.ts +194 -0
- package/src/sampling/types.ts +60 -0
- package/src/schemas/config.ts +39 -0
- package/src/security/index.test.ts +441 -0
- package/src/security/index.ts +361 -0
- package/src/security/security-scenarios.test.ts +468 -0
- package/src/server.ts +211 -0
- package/src/test-utils/index.ts +6 -0
- package/src/test-utils/mock-context.ts +426 -0
- package/src/test-utils/mock-playwright-client.ts +422 -0
- package/src/tools/index.ts +11 -0
- package/src/tools/webtest/crawl.test.ts +834 -0
- package/src/tools/webtest/crawl.ts +901 -0
- package/src/tools/webtest/discover-features.ts +412 -0
- package/src/tools/webtest/discover-flows.ts +408 -0
- package/src/tools/webtest/generate-tests.test.ts +532 -0
- package/src/tools/webtest/generate-tests.ts +425 -0
- package/src/tools/webtest/index.ts +7 -0
- package/src/tools/webtest/integration.test.ts +536 -0
- package/src/tools/webtest/run-test-case.test.ts +659 -0
- package/src/tools/webtest/run-test-case.ts +508 -0
- package/src/tools/webtest/schemas.ts +201 -0
- package/src/tools/webtest/start-analysis.test.ts +151 -0
- package/src/tools/webtest/start-analysis.ts +158 -0
- package/src/transports/http.ts +19 -0
- package/src/transports/index.ts +30 -0
- package/src/transports/stdio.ts +7 -0
- package/src/types/capabilities.test.ts +193 -0
- package/src/types/capabilities.ts +50 -0
- package/src/types/context.ts +21 -0
- package/src/types/tool.ts +11 -0
- package/src/workspace/index.ts +945 -0
- package/src/workspace/markdown.ts +272 -0
- package/src/workspace/types.ts +186 -0
- package/tests/integration/server.test.ts +89 -0
- package/tests/integration/tools.test.ts +99 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +9 -0
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2CAA2C;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,EAAE;KACR,QAAQ,CAAC,0FAA0F,CAAC;KACpG,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;IACN,2CAA2C;IAC3C,MAAM,eAAe,GAAG,iCAAiC,CAAC;IAC1D,yCAAyC;IACzC,MAAM,WAAW,GAAG,iEAAiE,CAAC;IACtF,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC,EACD,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAC9E,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,QAAQ,CAAC,mFAAmF,CAAC;KAC7F,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;IACN,2DAA2D;IAC3D,MAAM,eAAe,GAAG,uCAAuC,CAAC;IAChE,yCAAyC;IACzC,MAAM,WAAW,GAAG,iEAAiE,CAAC;IACtF,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC,EACD,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAC9E,CAAC;AAEJ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEpE,4BAA4B;AAE5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACX,UAAU;YACV,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,MAAM;SACP,CAAC;QACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;KACpC,CAAC,CACH;IACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,CAAC;SACjB,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACX,gBAAgB;YAChB,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;SAChB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC,CACH;aACA,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,wBAAwB;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC/E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACjF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CAC7F,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAC1F,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACzF,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,yBAAyB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACzE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACjG,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,EAAE;KACR,KAAK,CAAC,4BAA4B,EAAE,sEAAsE,CAAC;KAC3G,QAAQ,CAAC,kCAAkC,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC3E,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;QACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,mCAAmC;QAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,6CAA6C;QAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,qCAAqC;QACrE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,mEAAmE;KAChG,CAAC,CACH;IACD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;KAC9B,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":""}
|