@skyramp/mcp 0.4.3 → 0.4.4-rc.2

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 (168) hide show
  1. package/build/index.js +239 -210
  2. package/build/playwright/PlaywrightTraceService.d.ts +1 -1
  3. package/build/playwright/blueprintDigestStore.d.ts +1 -1
  4. package/build/playwright/registerPlaywrightTools.d.ts +1 -1
  5. package/build/playwright/traceRecordingPrompt.d.ts +1 -1
  6. package/build/playwright/traceRecordingPrompt.js +4 -3
  7. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  8. package/build/prompts/local-dev/local-dev-prompts.js +2 -2
  9. package/build/prompts/orderAssertionRule.d.ts +9 -0
  10. package/build/prompts/orderAssertionRule.js +9 -0
  11. package/build/prompts/startTraceCollectionPrompts.d.ts +1 -1
  12. package/build/prompts/startTraceCollectionPrompts.js +2 -3
  13. package/build/prompts/test-maintenance/driftAnalysisShared.js +2 -0
  14. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.d.ts +1 -1
  15. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +2 -2
  16. package/build/prompts/testbot/testbot-prompts.d.ts +1 -1
  17. package/build/prompts/testbot/testbot-prompts.js +9 -9
  18. package/build/recommendation/answers.d.ts +3 -3
  19. package/build/recommendation/answers.js +3 -2
  20. package/build/recommendation/verifierContracts.d.ts +4 -4
  21. package/build/recommendation/verifierContracts.js +6 -5
  22. package/build/recommendation/verifiers/coverage.js +25 -25
  23. package/build/recommendation/verifiers/deliveredMatchesPlan.js +3 -3
  24. package/build/resources/analysisResources.d.ts +1 -1
  25. package/build/resources/analysisResources.js +1 -1
  26. package/build/resources/progressResource.d.ts +1 -1
  27. package/build/resources/sutSetupResource.d.ts +1 -1
  28. package/build/resources/sutSetupResource.js +1 -1
  29. package/build/resources/testbotResource.d.ts +1 -1
  30. package/build/resources/testbotResource.js +1 -1
  31. package/build/services/AnalyticsService.d.ts +1 -1
  32. package/build/services/FleetExecutionService.d.ts +130 -0
  33. package/build/services/FleetExecutionService.js +391 -0
  34. package/build/services/ModularizationService.d.ts +1 -1
  35. package/build/services/TestExecutionService.d.ts +7 -0
  36. package/build/services/TestExecutionService.js +21 -0
  37. package/build/services/TestGenerationService.d.ts +1 -1
  38. package/build/tool-phases.js +2 -0
  39. package/build/tools/auth/loginTool.d.ts +1 -1
  40. package/build/tools/auth/loginTool.js +2 -2
  41. package/build/tools/auth/logoutTool.d.ts +1 -1
  42. package/build/tools/auth/logoutTool.js +2 -2
  43. package/build/tools/code-refactor/alignAssertionsTool.d.ts +1 -1
  44. package/build/tools/code-refactor/alignAssertionsTool.js +1 -1
  45. package/build/tools/code-refactor/assertionSkillTools.d.ts +1 -1
  46. package/build/tools/code-refactor/assertionSkillTools.js +2 -2
  47. package/build/tools/code-refactor/codeReuseTool.d.ts +1 -1
  48. package/build/tools/code-refactor/codeReuseTool.js +2 -2
  49. package/build/tools/code-refactor/enhanceAssertionsTool.d.ts +1 -1
  50. package/build/tools/code-refactor/enhanceAssertionsTool.js +1 -1
  51. package/build/tools/code-refactor/modularizationTool.d.ts +1 -1
  52. package/build/tools/code-refactor/modularizationTool.js +2 -2
  53. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  54. package/build/tools/enrichTestWithMocksTool.js +2 -2
  55. package/build/tools/executeFleetTool.d.ts +28 -0
  56. package/build/tools/executeFleetTool.js +107 -0
  57. package/build/tools/executeSkyrampTestTool.d.ts +8 -5
  58. package/build/tools/executeSkyrampTestTool.js +13 -5
  59. package/build/tools/fixErrorTool.d.ts +1 -1
  60. package/build/tools/fixErrorTool.js +1 -1
  61. package/build/tools/generate-tests/batchMockGenerationTool.d.ts +6 -57
  62. package/build/tools/generate-tests/batchMockGenerationTool.js +3 -3
  63. package/build/tools/generate-tests/generateBatchScenarioRestTool.d.ts +9 -45
  64. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +29 -11
  65. package/build/tools/generate-tests/generateContractRestTool.d.ts +1 -2
  66. package/build/tools/generate-tests/generateContractRestTool.js +1 -1
  67. package/build/tools/generate-tests/generateE2ERestTool.d.ts +2 -2
  68. package/build/tools/generate-tests/generateE2ERestTool.js +10 -2
  69. package/build/tools/generate-tests/generateFuzzRestTool.d.ts +1 -1
  70. package/build/tools/generate-tests/generateFuzzRestTool.js +1 -1
  71. package/build/tools/generate-tests/generateIntegrationRestTool.d.ts +1 -2
  72. package/build/tools/generate-tests/generateIntegrationRestTool.js +1 -1
  73. package/build/tools/generate-tests/generateLoadRestTool.d.ts +1 -2
  74. package/build/tools/generate-tests/generateLoadRestTool.js +2 -1
  75. package/build/tools/generate-tests/generateMockRestTool.d.ts +1 -2
  76. package/build/tools/generate-tests/generateMockRestTool.js +3 -3
  77. package/build/tools/generate-tests/generateSmokeRestTool.d.ts +1 -1
  78. package/build/tools/generate-tests/generateSmokeRestTool.js +1 -1
  79. package/build/tools/generate-tests/generateUILoadRestTool.d.ts +64 -0
  80. package/build/tools/generate-tests/generateUILoadRestTool.js +512 -0
  81. package/build/tools/generate-tests/generateUIRestTool.d.ts +8 -7
  82. package/build/tools/generate-tests/generateUIRestTool.js +10 -2
  83. package/build/tools/generate-tests/loadTestSchema.d.ts +15 -15
  84. package/build/tools/generate-tests/trace-reuse-guard.d.ts +1 -1
  85. package/build/tools/generateEnrichedIntegrationTestTool.d.ts +1 -2
  86. package/build/tools/generateEnrichedIntegrationTestTool.js +1 -1
  87. package/build/tools/localDevWorkerComposeTool.d.ts +1 -1
  88. package/build/tools/localDevWorkerComposeTool.js +2 -2
  89. package/build/tools/one-click/oneClickTool.d.ts +1 -1
  90. package/build/tools/one-click/oneClickTool.js +1 -1
  91. package/build/tools/preflightMockCheckTool.d.ts +1 -1
  92. package/build/tools/preflightMockCheckTool.js +3 -3
  93. package/build/tools/queryProxyMocksTool.d.ts +1 -1
  94. package/build/tools/queryProxyMocksTool.js +3 -3
  95. package/build/tools/submitReportTool.d.ts +111 -414
  96. package/build/tools/submitReportTool.js +88 -38
  97. package/build/tools/test-management/actionsTool.d.ts +1 -1
  98. package/build/tools/test-management/actionsTool.js +7 -7
  99. package/build/tools/test-management/analyzeChangesTool.d.ts +22 -118
  100. package/build/tools/test-management/analyzeChangesTool.js +4 -4
  101. package/build/tools/test-management/analyzeTestHealthTool.d.ts +1 -1
  102. package/build/tools/test-management/analyzeTestHealthTool.js +4 -4
  103. package/build/tools/test-management/registerTestPlanTool.d.ts +107 -733
  104. package/build/tools/test-management/registerTestPlanTool.js +12 -12
  105. package/build/tools/test-management/resolveScreenTool.d.ts +1 -1
  106. package/build/tools/test-management/resolveScreenTool.js +6 -2
  107. package/build/tools/trace/startTraceCollectionTool.d.ts +1 -1
  108. package/build/tools/trace/startTraceCollectionTool.js +4 -4
  109. package/build/tools/trace/stopTraceCollectionTool.d.ts +1 -1
  110. package/build/tools/trace/stopTraceCollectionTool.js +2 -2
  111. package/build/tools/verifyTestDependenciesTool.d.ts +1 -1
  112. package/build/tools/verifyTestDependenciesTool.js +1 -1
  113. package/build/tools/workspace/initScanWorkspaceTool.d.ts +1 -1
  114. package/build/tools/workspace/initScanWorkspaceTool.js +1 -1
  115. package/build/tools/workspace/initializeWorkspaceTool.d.ts +1 -1
  116. package/build/tools/workspace/initializeWorkspaceTool.js +1 -1
  117. package/build/types/RepositoryAnalysis.d.ts +164 -1170
  118. package/build/types/RepositoryAnalysis.js +12 -10
  119. package/build/types/StepMethod.d.ts +24 -1
  120. package/build/types/StepMethod.js +1 -1
  121. package/build/types/TestTypes.d.ts +41 -133
  122. package/build/types/TestTypes.js +25 -3
  123. package/build/types/TestbotReport.d.ts +4 -1
  124. package/build/utils/assertion-verify/metrics.js +12 -0
  125. package/build/utils/docker.d.ts +29 -7
  126. package/build/utils/docker.js +83 -27
  127. package/build/utils/findUp.d.ts +20 -0
  128. package/build/utils/findUp.js +59 -0
  129. package/build/utils/initAgent.d.ts +3 -3
  130. package/build/utils/initAgent.js +58 -26
  131. package/build/utils/language-helper.js +1 -1
  132. package/build/utils/progress.d.ts +3 -4
  133. package/build/utils/progress.js +4 -4
  134. package/build/utils/repoSdkVersion.d.ts +16 -0
  135. package/build/utils/repoSdkVersion.js +88 -0
  136. package/build/utils/testDependencyPolicy.d.ts +20 -0
  137. package/build/utils/testDependencyPolicy.js +64 -4
  138. package/build/utils/utils-verify/typecheck.js +3 -18
  139. package/build/utils/utils.d.ts +1 -1
  140. package/build/utils/versions.d.ts +3 -3
  141. package/build/utils/versions.js +1 -1
  142. package/build/workspace/workspace.d.ts +117 -538
  143. package/build/workspace/workspace.js +2 -2
  144. package/node_modules/playwright/lib/mcp/skyramp/assertOrder.js +66 -0
  145. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +12 -3
  146. package/node_modules/playwright/lib/mcp/skyramp/common/liveReadError.js +40 -0
  147. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +21 -0
  148. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +2 -1
  149. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +96 -16
  150. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +10 -0
  151. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +1 -0
  152. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +22 -0
  153. package/node_modules/playwright/node_modules/playwright-core/lib/utils/isomorphic/elementOrder.js +57 -0
  154. package/node_modules/playwright/node_modules/playwright-core/lib/utils.js +2 -0
  155. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.uiPTFncY.js → index.0MJW0uG7.js} +1 -1
  156. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  157. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  158. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -1
  159. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +26 -1
  160. package/node_modules/playwright/node_modules/playwright-core/src/utils/isomorphic/elementOrder.ts +83 -0
  161. package/node_modules/playwright/node_modules/playwright-core/src/utils.ts +1 -0
  162. package/node_modules/playwright/package.json +1 -1
  163. package/package.json +9 -6
  164. package/plugin/prompts/plan-tests.md +9 -17
  165. package/plugin/skills/enhance-assertions/reference/shared-rules.md +1 -1
  166. package/plugin/skills/enhance-assertions/reference/ui.md +2 -2
  167. package/plugin/skills/fix-test-import-errors/SKILL.md +1 -1
  168. package/plugin/skills/repair-staged-files/SKILL.md +17 -0
@@ -89,7 +89,7 @@ const registerStepSchema = z
89
89
  if (step[field] === undefined)
90
90
  continue;
91
91
  ctx.addIssue({
92
- code: z.ZodIssueCode.custom,
92
+ code: "custom",
93
93
  path: [field],
94
94
  message: `\`${field}\` belongs to a step that sends a request; \`${step.method}\` is a page interaction, which sends none. Assert the page through \`declarations.elements\`, or write the request as its own step.`,
95
95
  });
@@ -246,7 +246,7 @@ const declarationsSchema = declarationFieldsSchema
246
246
  if (identifies)
247
247
  return;
248
248
  ctx.addIssue({
249
- code: z.ZodIssueCode.custom,
249
+ code: "custom",
250
250
  path: ["elements", "items", index],
251
251
  message: "every `elements.items` entry needs at least one of `accessibleName`, `testId` or `stableId` with a value in it — an entry with none names no element that can be looked up in a capture.",
252
252
  });
@@ -338,7 +338,7 @@ const registerPlannedTestSchema = z.preprocess(hoistDeclarationFields, z
338
338
  const isUILabel = hasUITestTypeLabel(plannedTest.testType);
339
339
  if (plannedTest.steps.length === 0 && !isUILabel) {
340
340
  ctx.addIssue({
341
- code: z.ZodIssueCode.custom,
341
+ code: "custom",
342
342
  path: ["steps"],
343
343
  message: "steps must not be empty for a contract, integration or other non-UI planned test: the route, duplicate and existing-coverage checks all read the steps to find the endpoint this test is about. List the requests the test makes.",
344
344
  });
@@ -352,7 +352,7 @@ const registerPlannedTestSchema = z.preprocess(hoistDeclarationFields, z
352
352
  const url = typeof rawUrl === "string" ? rawUrl.trim() : "";
353
353
  if (isUILabel && !hasHTTPStep && url.length === 0) {
354
354
  ctx.addIssue({
355
- code: z.ZodIssueCode.custom,
355
+ code: "custom",
356
356
  path: ["declarations", "elements", "pageUrl"],
357
357
  message: "a ui or e2e planned test whose steps make no HTTP call must set `declarations.elements.pageUrl` to the screen it opens: a planned test naming no request and no screen is not a plan the server can read.",
358
358
  });
@@ -363,7 +363,7 @@ const registerPlannedTestSchema = z.preprocess(hoistDeclarationFields, z
363
363
  // no page either could look up and drew no objection from either.
364
364
  if (isUILabel && url.length > 0 && !namesAScreen(url)) {
365
365
  ctx.addIssue({
366
- code: z.ZodIssueCode.custom,
366
+ code: "custom",
367
367
  path: ["declarations", "elements", "pageUrl"],
368
368
  message: "`declarations.elements.pageUrl` is accepted in two spellings and no others: a route path starting with `/`, e.g. `/orders/1`, or an absolute `http` or `https` URL, e.g. `http://localhost:5173/orders/1`. Give the path when this run has no host to name.",
369
369
  });
@@ -474,7 +474,7 @@ const registerTestPlanSchema = {
474
474
  return;
475
475
  }
476
476
  ctx.addIssue({
477
- code: z.ZodIssueCode.custom,
477
+ code: "custom",
478
478
  path: [index, "id"],
479
479
  message: `change id "${change.id}" is already used by change ${seen + 1}. Every change needs its own id — planned tests cite it by that id.`,
480
480
  });
@@ -520,7 +520,7 @@ const registerTestPlanSchema = {
520
520
  return;
521
521
  }
522
522
  ctx.addIssue({
523
- code: z.ZodIssueCode.custom,
523
+ code: "custom",
524
524
  path: [index, "id"],
525
525
  message: `defect id "${defect.id}" is already used by defect ${seen + 1}. Every defect needs its own id — planned tests cite it by that id.`,
526
526
  });
@@ -552,7 +552,7 @@ const registerTestPlanSchema = {
552
552
  return;
553
553
  }
554
554
  ctx.addIssue({
555
- code: z.ZodIssueCode.custom,
555
+ code: "custom",
556
556
  path: [index, "scenarioName"],
557
557
  message: `scenarioName "${plannedTest.scenarioName}" is already used by planned test ${first + 1}. Every planned test needs its own name — the name is its id.`,
558
558
  });
@@ -565,16 +565,16 @@ const registerTestPlanSchema = {
565
565
  repository: repositorySlugField("a maintenance entry", "which holds the test this run edits"),
566
566
  file: z
567
567
  .string()
568
- .describe("Repository-relative path of the existing test this run edits. It has to resolve in the repository named above: a change is credited as covered only when it does, and `existingCoverage` objects when it does not."),
568
+ .describe("Repository-relative path of the existing test this run edits, or runs unchanged as a VERIFY. It has to resolve in the repository named above: a change is credited as covered only when it does, and `existingCoverage` objects when it does not."),
569
569
  differsBy: z
570
570
  .string()
571
- .describe("What your edit changes in that test, in one sentence."),
571
+ .describe("What your edit changes in that test, in one sentence. For a test you run unchanged, what it asserts that the cited changes or defects reach."),
572
572
  changes: maintainedCitations.changes,
573
573
  defects: maintainedCitations.defects,
574
574
  })
575
575
  .strict())
576
576
  .optional()
577
- .describe("Existing tests this run edits instead of planning new ones. Coverage counts the changes these cite, and the defect check counts the defects they cite, so a change or a defect already covered by a spec you are updating needs no planned test — and a duplicate spec beside the one you edited is the mistake. Declare maintenance here even when the plan holds no planned tests at all: a maintenance-only plan is a complete plan."),
577
+ .describe("Existing tests this run edits, or runs unchanged as a VERIFY, instead of planning new ones. A test you run unchanged is checked at report time: the report objects when this server recorded no run of it after the edits. Coverage counts the changes these cite, and the defect check counts the defects they cite, so a change or a defect already covered by a spec you are updating needs no planned test — and a duplicate spec beside the one you edited is the mistake. Declare maintenance here even when the plan holds no planned tests at all: a maintenance-only plan is a complete plan."),
578
578
  answers: z
579
579
  .array(z
580
580
  .object({
@@ -907,7 +907,7 @@ export function registerRegisterTestPlanTool(server) {
907
907
  "An undeclared key is refused by name on a planned test and on `declarations`, so a declaration written one level too high is corrected rather than dropped in silence. " +
908
908
  "Checks run against the stored plan and return objections. Fix one and register it again as often as you like, or answer it by id through `answers`. " +
909
909
  "There is no fallback plan: if you never register, this run has no plan.",
910
- inputSchema: registerTestPlanSchema,
910
+ inputSchema: z.object(registerTestPlanSchema),
911
911
  }, async (params) => {
912
912
  // The run's own state file, unless the agent named one. Outside a run there
913
913
  // is no path to fall back to, and no analysis to check a plan against.
@@ -1,4 +1,4 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  import { ScreenRouteCandidate } from "../../utils/screenRoutes.js";
3
3
  /** Where a bound route parameter came from. `unresolved` never carries a value. */
4
4
  export type ParamSource = "currentUrl" | "blueprint" | "unresolved";
@@ -260,7 +260,7 @@ const outputSchema = {
260
260
  .array(z.object({
261
261
  url: z.string(),
262
262
  routePattern: z.string(),
263
- params: z.record(z.object({
263
+ params: z.record(z.string(), z.object({
264
264
  value: z.string(),
265
265
  from: z.enum(["currentUrl", "blueprint", "unresolved"]),
266
266
  })),
@@ -282,7 +282,11 @@ const DESCRIPTION = "Answer which page of the running app renders a changed fron
282
282
  "(skip the browser and say so), or 'unknown' when no route table could be read (find the page yourself). " +
283
283
  "The current page is read from this server's own browser session — do not pass it.";
284
284
  export function registerResolveScreenTool(server) {
285
- server.registerTool(TOOL_RESOLVE_SCREEN, { description: DESCRIPTION, inputSchema, outputSchema }, async (params) => {
285
+ server.registerTool(TOOL_RESOLVE_SCREEN, {
286
+ description: DESCRIPTION,
287
+ inputSchema: z.object(inputSchema),
288
+ outputSchema: z.object(outputSchema),
289
+ }, async (params) => {
286
290
  const repositoryPath = String(params.repositoryPath ?? "").trim();
287
291
  const changedFile = String(params.changedFile ?? "").trim();
288
292
  const location = lastKnownBrowserUrl();
@@ -1,2 +1,2 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare function registerTraceTool(server: McpServer): void;
@@ -47,7 +47,7 @@ Pass \`sessionMode\` to declare what you want to do with the workspace's session
47
47
  \`sessionMode: "auto"\` (default) — Use when the user does not signal an intent either way. If a session file already exists in \`outputDir\`, behaves like \`reuse\` (loads it, does not overwrite). If no session file exists, does **no** session handling — it neither loads nor saves. Storing a session is always opt-in: it only happens with \`sessionMode: "capture"\` or an explicit \`playwrightSaveStoragePath\`. Plain auto never writes credentials the user did not ask to store.
48
48
 
49
49
  For detailed documentation visit: https://www.skyramp.dev/docs/load-test/advanced-generation#start-trace-collection`,
50
- inputSchema: {
50
+ inputSchema: z.object({
51
51
  playwright: z
52
52
  .boolean()
53
53
  .describe("Whether to enable Playwright for trace collection. Set to true for UI interactions, false for API-only tracing")
@@ -94,14 +94,14 @@ For detailed documentation visit: https://www.skyramp.dev/docs/load-test/advance
94
94
  prompt: z
95
95
  .string()
96
96
  .describe("The prompt user provided to start trace collection"),
97
- },
97
+ }),
98
98
  _meta: {
99
99
  keywords: ["start trace", "trace collection", "trace generation"],
100
100
  },
101
- }, async (params, extra) => {
101
+ }, async (params, ctx) => {
102
102
  let errorResult;
103
103
  // Helper to send progress notifications to the MCP client
104
- const sendProgress = makeProgressReporter(extra);
104
+ const sendProgress = makeProgressReporter(ctx);
105
105
  logger.info("Starting trace collection", {
106
106
  playwright: params.playwright,
107
107
  browser: params.browser,
@@ -1,2 +1,2 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare function registerTraceStopTool(server: McpServer): void;
@@ -22,7 +22,7 @@ The generated trace and Playwright files can be used as inputs for:
22
22
  - UI test generation (using Playwright files)
23
23
 
24
24
  For detailed documentation visit: https://www.skyramp.dev/docs/load-test/advanced-generation#end-trace-collection`,
25
- inputSchema: {
25
+ inputSchema: z.object({
26
26
  traceOutputFile: z
27
27
  .string()
28
28
  .default("skyramp_traces.json")
@@ -38,7 +38,7 @@ For detailed documentation visit: https://www.skyramp.dev/docs/load-test/advance
38
38
  prompt: z
39
39
  .string()
40
40
  .describe("The prompt user provided to stop trace collection"),
41
- },
41
+ }),
42
42
  _meta: {
43
43
  keywords: ["stop trace", "collect generated trace"],
44
44
  },
@@ -1,3 +1,3 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare const VERIFY_TEST_DEPENDENCIES_TOOL = "skyramp_verify_test_dependencies";
3
3
  export declare function registerVerifyTestDependenciesTool(server: McpServer): void;
@@ -14,7 +14,7 @@ const schema = z.object({
14
14
  export function registerVerifyTestDependenciesTool(server) {
15
15
  server.registerTool(VERIFY_TEST_DEPENDENCIES_TOOL, {
16
16
  description: "Verify that dependency changes made while fixing tests use only approved testing packages and development/test-only manifest scopes.",
17
- inputSchema: schema.shape,
17
+ inputSchema: schema,
18
18
  _meta: {
19
19
  keywords: [
20
20
  "dependencies",
@@ -1,4 +1,4 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare function issueScanToken(): string;
3
3
  export declare function validateAndConsumeScanToken(token: string): boolean;
4
4
  export declare function registerInitScanWorkspaceTool(server: McpServer): void;
@@ -33,7 +33,7 @@ export function registerInitScanWorkspaceTool(server) {
33
33
  "PREREQUISITE for skyramp_init_workspace. " +
34
34
  "Scans a repository and returns instructions for discovering all services, along with a scanToken. " +
35
35
  "Follow the instructions to build the services array, then pass both to skyramp_init_workspace to create the workspace config.",
36
- inputSchema: initScanWorkspaceSchema.shape,
36
+ inputSchema: initScanWorkspaceSchema,
37
37
  }, async (params) => {
38
38
  let errorResult;
39
39
  const recordParams = {
@@ -1,2 +1,2 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare function registerInitializeWorkspaceTool(server: McpServer): void;
@@ -111,7 +111,7 @@ export function registerInitializeWorkspaceTool(server) {
111
111
  "Then call this tool to write .skyramp/workspace.yml with the discovered services and scanToken. " +
112
112
  "2. Edit existing workspace.yml: omit scanToken, set force: true, and pass the FULL updated services array (overwrite, not merge — fields not in the array are dropped). " +
113
113
  "The services schema is strict: any field not in the schema (e.g. inventing `serverStopCommand` on `runtimeDetails`) fails validation and the call is rejected.",
114
- inputSchema: initializeWorkspaceSchema.shape,
114
+ inputSchema: initializeWorkspaceSchema,
115
115
  _meta: {
116
116
  keywords: [
117
117
  "initialize",