@skyramp/mcp 0.4.2-rc.1 → 0.4.2-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 (104) hide show
  1. package/build/commands/localDevTestChangesCommand.js +1 -1
  2. package/build/commands/recommendTestsAndExecuteCommand.js +10 -1
  3. package/build/commands/testThisEndpointCommand.js +19 -2
  4. package/build/execution/wrapperConfig.d.ts +56 -0
  5. package/build/execution/wrapperConfig.js +155 -0
  6. package/build/index.js +6 -6
  7. package/build/playwright/registerPlaywrightTools.js +14 -0
  8. package/build/playwright/traceExportStore.d.ts +22 -0
  9. package/build/playwright/traceExportStore.js +81 -0
  10. package/build/playwright/traceRecordingPrompt.js +2 -1
  11. package/build/prompts/code-reuse.js +24 -21
  12. package/build/prompts/local-dev/local-dev-plan.js +6 -23
  13. package/build/prompts/local-dev/local-dev-prompts.js +1 -1
  14. package/build/prompts/shared-helper-policy.d.ts +36 -0
  15. package/build/prompts/shared-helper-policy.js +33 -1
  16. package/build/prompts/startTraceCollectionPrompts.js +1 -1
  17. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +6 -7
  18. package/build/prompts/sut-setup/shared.d.ts +1 -1
  19. package/build/prompts/sut-setup/shared.js +5 -3
  20. package/build/prompts/test-maintenance/drift-analysis-prompt.d.ts +16 -8
  21. package/build/prompts/test-maintenance/drift-analysis-prompt.js +90 -36
  22. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +1 -1
  23. package/build/prompts/test-recommendation/recommendationShared.d.ts +1 -1
  24. package/build/prompts/test-recommendation/recommendationShared.js +0 -1
  25. package/build/prompts/testbot/testbot-prompts.js +11 -9
  26. package/build/services/TestDiscoveryService.js +32 -4
  27. package/build/skills/runTestSkill.d.ts +6 -0
  28. package/build/skills/runTestSkill.js +17 -0
  29. package/build/tool-phases.js +0 -1
  30. package/build/tools/budgetExcuse.d.ts +15 -0
  31. package/build/tools/budgetExcuse.js +113 -0
  32. package/build/tools/code-refactor/utils-verify-gates.js +17 -3
  33. package/build/tools/executeSkyrampTestTool.d.ts +97 -48
  34. package/build/tools/executeSkyrampTestTool.js +775 -449
  35. package/build/tools/submitReportTool.js +128 -0
  36. package/build/tools/test-management/actionsTool.js +31 -0
  37. package/build/tools/test-management/analyzeChangesTool.d.ts +4 -4
  38. package/build/tools/test-management/analyzeTestHealthTool.d.ts +0 -11
  39. package/build/tools/test-management/analyzeTestHealthTool.js +7 -63
  40. package/build/tools/test-management/testsOwedBeforeRun.d.ts +28 -0
  41. package/build/tools/test-management/testsOwedBeforeRun.js +53 -0
  42. package/build/tools/trace/stopTraceCollectionTool.js +1 -1
  43. package/build/types/RepositoryAnalysis.d.ts +32 -32
  44. package/build/types/ReuseOutcome.d.ts +4 -3
  45. package/build/types/TestExecution.d.ts +2 -2
  46. package/build/types/TestTypes.d.ts +3 -0
  47. package/build/types/TestTypes.js +6 -0
  48. package/build/utils/AnalysisStateManager.d.ts +0 -7
  49. package/build/utils/AnalysisStateManager.js +1 -1
  50. package/build/utils/connectionErrors.d.ts +10 -0
  51. package/build/utils/connectionErrors.js +10 -0
  52. package/build/utils/language-helper.js +24 -3
  53. package/build/utils/progress.d.ts +1 -1
  54. package/build/utils/progress.js +1 -1
  55. package/build/utils/rebaselineSnapshots.d.ts +1 -1
  56. package/build/utils/rebaselineSnapshots.js +6 -16
  57. package/build/utils/reuseRouting.d.ts +10 -0
  58. package/build/utils/reuseRouting.js +15 -0
  59. package/build/utils/runContextGauge.d.ts +27 -0
  60. package/build/utils/runContextGauge.js +181 -0
  61. package/build/utils/skyrampMdContent.d.ts +1 -1
  62. package/build/utils/skyrampMdContent.js +1 -1
  63. package/build/utils/skyrampSdkVersion.d.ts +9 -0
  64. package/build/utils/skyrampSdkVersion.js +16 -0
  65. package/build/utils/testDependencyPolicy.js +21 -0
  66. package/build/utils/testExecutionRecord.d.ts +5 -1
  67. package/build/utils/testExecutionRecord.js +3 -1
  68. package/build/utils/testFileClassification.d.ts +8 -0
  69. package/build/utils/testFileClassification.js +36 -3
  70. package/build/utils/utils-verify/action-key.d.ts +42 -0
  71. package/build/utils/utils-verify/action-key.js +118 -36
  72. package/build/utils/utils-verify/action-sites.d.ts +32 -0
  73. package/build/utils/utils-verify/action-sites.js +202 -0
  74. package/build/utils/utils-verify/body-reach.js +2 -4
  75. package/build/utils/utils-verify/call-sites.d.ts +25 -6
  76. package/build/utils/utils-verify/call-sites.js +8 -5
  77. package/build/utils/utils-verify/index.d.ts +1 -0
  78. package/build/utils/utils-verify/index.js +1 -0
  79. package/build/utils/utils-verify/language-spec.d.ts +25 -0
  80. package/build/utils/utils-verify/language-spec.js +16 -2
  81. package/build/utils/utils-verify/parse.d.ts +10 -1
  82. package/build/utils/utils-verify/parse.js +19 -2
  83. package/build/utils/utils-verify/verify.d.ts +3 -2
  84. package/build/utils/utils-verify/verify.js +16 -18
  85. package/build/workspace/workspace.d.ts +72 -52
  86. package/build/workspace/workspace.js +12 -8
  87. package/package.json +1 -1
  88. package/plugin/prompts/testbot-task1.md +0 -2
  89. package/plugin/skills/fix-test-import-errors/SKILL.md +2 -1
  90. package/plugin/skills/run-test/SKILL.md +16 -0
  91. package/build/adapters/jestAdapter.d.ts +0 -14
  92. package/build/adapters/jestAdapter.js +0 -131
  93. package/build/adapters/mochaAdapter.d.ts +0 -13
  94. package/build/adapters/mochaAdapter.js +0 -93
  95. package/build/adapters/playwrightAdapter.d.ts +0 -17
  96. package/build/adapters/playwrightAdapter.js +0 -184
  97. package/build/adapters/pytestAdapter.d.ts +0 -15
  98. package/build/adapters/pytestAdapter.js +0 -119
  99. package/build/tools/runExistingTestsTool.d.ts +0 -138
  100. package/build/tools/runExistingTestsTool.js +0 -666
  101. package/build/types/ExternalTestExecution.d.ts +0 -67
  102. package/build/types/ExternalTestExecution.js +0 -8
  103. package/build/workspace/testSuites.d.ts +0 -20
  104. package/build/workspace/testSuites.js +0 -17
@@ -55,26 +55,26 @@ export declare const serviceSchema: z.ZodObject<{
55
55
  }, "strict", z.ZodTypeAny, {
56
56
  authHeader?: string | undefined;
57
57
  authScheme?: string | undefined;
58
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
59
- baseUrl?: string | undefined;
60
58
  schemaPath?: string | undefined;
59
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
61
60
  defaultQueryParams?: Record<string, string> | undefined;
62
61
  queryParamOverrides?: {
63
62
  values: Record<string, string>;
64
63
  pathPattern: string;
65
64
  }[] | undefined;
65
+ baseUrl?: string | undefined;
66
66
  skipTLSVerify?: boolean | undefined;
67
67
  }, {
68
68
  authHeader?: string | undefined;
69
69
  authScheme?: string | undefined;
70
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
71
- baseUrl?: string | undefined;
72
70
  schemaPath?: string | undefined;
71
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
73
72
  defaultQueryParams?: Record<string, string> | undefined;
74
73
  queryParamOverrides?: {
75
74
  values: Record<string, string>;
76
75
  pathPattern: string;
77
76
  }[] | undefined;
77
+ baseUrl?: string | undefined;
78
78
  skipTLSVerify?: boolean | undefined;
79
79
  }>>;
80
80
  runtimeDetails: z.ZodOptional<z.ZodObject<{
@@ -84,28 +84,41 @@ export declare const serviceSchema: z.ZodObject<{
84
84
  dockerNetwork: z.ZodOptional<z.ZodString>;
85
85
  k8sNamespace: z.ZodOptional<z.ZodString>;
86
86
  k8sContext: z.ZodOptional<z.ZodString>;
87
- testSuites: z.ZodOptional<z.ZodArray<z.ZodObject<{
87
+ testSuites: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
88
88
  framework: z.ZodOptional<z.ZodEnum<["playwright", "pytest", "robot", "junit", "vitest", "jest", "mocha", "go", "rspec", "jasmine"]>>;
89
89
  testRunCommand: z.ZodString;
90
- testEnv: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
91
90
  pathGlobs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
92
91
  canaryStatus: z.ZodOptional<z.ZodEnum<["proven", "unproven"]>>;
93
92
  /** Why it could not be proven — required by the prompt when unproven. */
94
93
  canaryDetail: z.ZodOptional<z.ZodString>;
94
+ testEnv: z.ZodOptional<z.ZodUnknown>;
95
95
  }, "strict", z.ZodTypeAny, {
96
96
  testRunCommand: string;
97
97
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
98
- testEnv?: Record<string, string> | undefined;
98
+ pathGlobs?: string[] | undefined;
99
+ canaryStatus?: "proven" | "unproven" | undefined;
100
+ canaryDetail?: string | undefined;
101
+ testEnv?: unknown;
102
+ }, {
103
+ testRunCommand: string;
104
+ framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
105
+ pathGlobs?: string[] | undefined;
106
+ canaryStatus?: "proven" | "unproven" | undefined;
107
+ canaryDetail?: string | undefined;
108
+ testEnv?: unknown;
109
+ }>, {
110
+ testRunCommand: string;
111
+ framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
99
112
  pathGlobs?: string[] | undefined;
100
113
  canaryStatus?: "proven" | "unproven" | undefined;
101
114
  canaryDetail?: string | undefined;
102
115
  }, {
103
116
  testRunCommand: string;
104
117
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
105
- testEnv?: Record<string, string> | undefined;
106
118
  pathGlobs?: string[] | undefined;
107
119
  canaryStatus?: "proven" | "unproven" | undefined;
108
120
  canaryDetail?: string | undefined;
121
+ testEnv?: unknown;
109
122
  }>, "many">>;
110
123
  }, "strict", z.ZodTypeAny, {
111
124
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
@@ -117,7 +130,6 @@ export declare const serviceSchema: z.ZodObject<{
117
130
  testSuites?: {
118
131
  testRunCommand: string;
119
132
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
120
- testEnv?: Record<string, string> | undefined;
121
133
  pathGlobs?: string[] | undefined;
122
134
  canaryStatus?: "proven" | "unproven" | undefined;
123
135
  canaryDetail?: string | undefined;
@@ -132,10 +144,10 @@ export declare const serviceSchema: z.ZodObject<{
132
144
  testSuites?: {
133
145
  testRunCommand: string;
134
146
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
135
- testEnv?: Record<string, string> | undefined;
136
147
  pathGlobs?: string[] | undefined;
137
148
  canaryStatus?: "proven" | "unproven" | undefined;
138
149
  canaryDetail?: string | undefined;
150
+ testEnv?: unknown;
139
151
  }[] | undefined;
140
152
  }>>;
141
153
  }, "strict", z.ZodTypeAny, {
@@ -143,20 +155,20 @@ export declare const serviceSchema: z.ZodObject<{
143
155
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
144
156
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
145
157
  repository?: string | undefined;
158
+ testDirectory?: string | undefined;
146
159
  api?: {
147
160
  authHeader?: string | undefined;
148
161
  authScheme?: string | undefined;
149
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
150
- baseUrl?: string | undefined;
151
162
  schemaPath?: string | undefined;
163
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
152
164
  defaultQueryParams?: Record<string, string> | undefined;
153
165
  queryParamOverrides?: {
154
166
  values: Record<string, string>;
155
167
  pathPattern: string;
156
168
  }[] | undefined;
169
+ baseUrl?: string | undefined;
157
170
  skipTLSVerify?: boolean | undefined;
158
171
  } | undefined;
159
- testDirectory?: string | undefined;
160
172
  runtimeDetails?: {
161
173
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
162
174
  dockerNetwork?: string | undefined;
@@ -167,7 +179,6 @@ export declare const serviceSchema: z.ZodObject<{
167
179
  testSuites?: {
168
180
  testRunCommand: string;
169
181
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
170
- testEnv?: Record<string, string> | undefined;
171
182
  pathGlobs?: string[] | undefined;
172
183
  canaryStatus?: "proven" | "unproven" | undefined;
173
184
  canaryDetail?: string | undefined;
@@ -178,20 +189,20 @@ export declare const serviceSchema: z.ZodObject<{
178
189
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
179
190
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
180
191
  repository?: string | undefined;
192
+ testDirectory?: string | undefined;
181
193
  api?: {
182
194
  authHeader?: string | undefined;
183
195
  authScheme?: string | undefined;
184
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
185
- baseUrl?: string | undefined;
186
196
  schemaPath?: string | undefined;
197
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
187
198
  defaultQueryParams?: Record<string, string> | undefined;
188
199
  queryParamOverrides?: {
189
200
  values: Record<string, string>;
190
201
  pathPattern: string;
191
202
  }[] | undefined;
203
+ baseUrl?: string | undefined;
192
204
  skipTLSVerify?: boolean | undefined;
193
205
  } | undefined;
194
- testDirectory?: string | undefined;
195
206
  runtimeDetails?: {
196
207
  runtime?: unknown;
197
208
  dockerNetwork?: string | undefined;
@@ -202,10 +213,10 @@ export declare const serviceSchema: z.ZodObject<{
202
213
  testSuites?: {
203
214
  testRunCommand: string;
204
215
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
205
- testEnv?: Record<string, string> | undefined;
206
216
  pathGlobs?: string[] | undefined;
207
217
  canaryStatus?: "proven" | "unproven" | undefined;
208
218
  canaryDetail?: string | undefined;
219
+ testEnv?: unknown;
209
220
  }[] | undefined;
210
221
  } | undefined;
211
222
  }>;
@@ -292,26 +303,26 @@ export declare const workspaceConfigSchema: z.ZodObject<{
292
303
  }, "strict", z.ZodTypeAny, {
293
304
  authHeader?: string | undefined;
294
305
  authScheme?: string | undefined;
295
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
296
- baseUrl?: string | undefined;
297
306
  schemaPath?: string | undefined;
307
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
298
308
  defaultQueryParams?: Record<string, string> | undefined;
299
309
  queryParamOverrides?: {
300
310
  values: Record<string, string>;
301
311
  pathPattern: string;
302
312
  }[] | undefined;
313
+ baseUrl?: string | undefined;
303
314
  skipTLSVerify?: boolean | undefined;
304
315
  }, {
305
316
  authHeader?: string | undefined;
306
317
  authScheme?: string | undefined;
307
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
308
- baseUrl?: string | undefined;
309
318
  schemaPath?: string | undefined;
319
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
310
320
  defaultQueryParams?: Record<string, string> | undefined;
311
321
  queryParamOverrides?: {
312
322
  values: Record<string, string>;
313
323
  pathPattern: string;
314
324
  }[] | undefined;
325
+ baseUrl?: string | undefined;
315
326
  skipTLSVerify?: boolean | undefined;
316
327
  }>>;
317
328
  runtimeDetails: z.ZodOptional<z.ZodObject<{
@@ -321,28 +332,41 @@ export declare const workspaceConfigSchema: z.ZodObject<{
321
332
  dockerNetwork: z.ZodOptional<z.ZodString>;
322
333
  k8sNamespace: z.ZodOptional<z.ZodString>;
323
334
  k8sContext: z.ZodOptional<z.ZodString>;
324
- testSuites: z.ZodOptional<z.ZodArray<z.ZodObject<{
335
+ testSuites: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
325
336
  framework: z.ZodOptional<z.ZodEnum<["playwright", "pytest", "robot", "junit", "vitest", "jest", "mocha", "go", "rspec", "jasmine"]>>;
326
337
  testRunCommand: z.ZodString;
327
- testEnv: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
328
338
  pathGlobs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
329
339
  canaryStatus: z.ZodOptional<z.ZodEnum<["proven", "unproven"]>>;
330
340
  /** Why it could not be proven — required by the prompt when unproven. */
331
341
  canaryDetail: z.ZodOptional<z.ZodString>;
342
+ testEnv: z.ZodOptional<z.ZodUnknown>;
332
343
  }, "strict", z.ZodTypeAny, {
333
344
  testRunCommand: string;
334
345
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
335
- testEnv?: Record<string, string> | undefined;
346
+ pathGlobs?: string[] | undefined;
347
+ canaryStatus?: "proven" | "unproven" | undefined;
348
+ canaryDetail?: string | undefined;
349
+ testEnv?: unknown;
350
+ }, {
351
+ testRunCommand: string;
352
+ framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
353
+ pathGlobs?: string[] | undefined;
354
+ canaryStatus?: "proven" | "unproven" | undefined;
355
+ canaryDetail?: string | undefined;
356
+ testEnv?: unknown;
357
+ }>, {
358
+ testRunCommand: string;
359
+ framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
336
360
  pathGlobs?: string[] | undefined;
337
361
  canaryStatus?: "proven" | "unproven" | undefined;
338
362
  canaryDetail?: string | undefined;
339
363
  }, {
340
364
  testRunCommand: string;
341
365
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
342
- testEnv?: Record<string, string> | undefined;
343
366
  pathGlobs?: string[] | undefined;
344
367
  canaryStatus?: "proven" | "unproven" | undefined;
345
368
  canaryDetail?: string | undefined;
369
+ testEnv?: unknown;
346
370
  }>, "many">>;
347
371
  }, "strict", z.ZodTypeAny, {
348
372
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
@@ -354,7 +378,6 @@ export declare const workspaceConfigSchema: z.ZodObject<{
354
378
  testSuites?: {
355
379
  testRunCommand: string;
356
380
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
357
- testEnv?: Record<string, string> | undefined;
358
381
  pathGlobs?: string[] | undefined;
359
382
  canaryStatus?: "proven" | "unproven" | undefined;
360
383
  canaryDetail?: string | undefined;
@@ -369,10 +392,10 @@ export declare const workspaceConfigSchema: z.ZodObject<{
369
392
  testSuites?: {
370
393
  testRunCommand: string;
371
394
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
372
- testEnv?: Record<string, string> | undefined;
373
395
  pathGlobs?: string[] | undefined;
374
396
  canaryStatus?: "proven" | "unproven" | undefined;
375
397
  canaryDetail?: string | undefined;
398
+ testEnv?: unknown;
376
399
  }[] | undefined;
377
400
  }>>;
378
401
  }, "strict", z.ZodTypeAny, {
@@ -380,20 +403,20 @@ export declare const workspaceConfigSchema: z.ZodObject<{
380
403
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
381
404
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
382
405
  repository?: string | undefined;
406
+ testDirectory?: string | undefined;
383
407
  api?: {
384
408
  authHeader?: string | undefined;
385
409
  authScheme?: string | undefined;
386
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
387
- baseUrl?: string | undefined;
388
410
  schemaPath?: string | undefined;
411
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
389
412
  defaultQueryParams?: Record<string, string> | undefined;
390
413
  queryParamOverrides?: {
391
414
  values: Record<string, string>;
392
415
  pathPattern: string;
393
416
  }[] | undefined;
417
+ baseUrl?: string | undefined;
394
418
  skipTLSVerify?: boolean | undefined;
395
419
  } | undefined;
396
- testDirectory?: string | undefined;
397
420
  runtimeDetails?: {
398
421
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
399
422
  dockerNetwork?: string | undefined;
@@ -404,7 +427,6 @@ export declare const workspaceConfigSchema: z.ZodObject<{
404
427
  testSuites?: {
405
428
  testRunCommand: string;
406
429
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
407
- testEnv?: Record<string, string> | undefined;
408
430
  pathGlobs?: string[] | undefined;
409
431
  canaryStatus?: "proven" | "unproven" | undefined;
410
432
  canaryDetail?: string | undefined;
@@ -415,20 +437,20 @@ export declare const workspaceConfigSchema: z.ZodObject<{
415
437
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
416
438
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
417
439
  repository?: string | undefined;
440
+ testDirectory?: string | undefined;
418
441
  api?: {
419
442
  authHeader?: string | undefined;
420
443
  authScheme?: string | undefined;
421
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
422
- baseUrl?: string | undefined;
423
444
  schemaPath?: string | undefined;
445
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
424
446
  defaultQueryParams?: Record<string, string> | undefined;
425
447
  queryParamOverrides?: {
426
448
  values: Record<string, string>;
427
449
  pathPattern: string;
428
450
  }[] | undefined;
451
+ baseUrl?: string | undefined;
429
452
  skipTLSVerify?: boolean | undefined;
430
453
  } | undefined;
431
- testDirectory?: string | undefined;
432
454
  runtimeDetails?: {
433
455
  runtime?: unknown;
434
456
  dockerNetwork?: string | undefined;
@@ -439,10 +461,10 @@ export declare const workspaceConfigSchema: z.ZodObject<{
439
461
  testSuites?: {
440
462
  testRunCommand: string;
441
463
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
442
- testEnv?: Record<string, string> | undefined;
443
464
  pathGlobs?: string[] | undefined;
444
465
  canaryStatus?: "proven" | "unproven" | undefined;
445
466
  canaryDetail?: string | undefined;
467
+ testEnv?: unknown;
446
468
  }[] | undefined;
447
469
  } | undefined;
448
470
  }>, "many">>;
@@ -463,20 +485,20 @@ export declare const workspaceConfigSchema: z.ZodObject<{
463
485
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
464
486
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
465
487
  repository?: string | undefined;
488
+ testDirectory?: string | undefined;
466
489
  api?: {
467
490
  authHeader?: string | undefined;
468
491
  authScheme?: string | undefined;
469
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
470
- baseUrl?: string | undefined;
471
492
  schemaPath?: string | undefined;
493
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
472
494
  defaultQueryParams?: Record<string, string> | undefined;
473
495
  queryParamOverrides?: {
474
496
  values: Record<string, string>;
475
497
  pathPattern: string;
476
498
  }[] | undefined;
499
+ baseUrl?: string | undefined;
477
500
  skipTLSVerify?: boolean | undefined;
478
501
  } | undefined;
479
- testDirectory?: string | undefined;
480
502
  runtimeDetails?: {
481
503
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
482
504
  dockerNetwork?: string | undefined;
@@ -487,7 +509,6 @@ export declare const workspaceConfigSchema: z.ZodObject<{
487
509
  testSuites?: {
488
510
  testRunCommand: string;
489
511
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
490
- testEnv?: Record<string, string> | undefined;
491
512
  pathGlobs?: string[] | undefined;
492
513
  canaryStatus?: "proven" | "unproven" | undefined;
493
514
  canaryDetail?: string | undefined;
@@ -511,20 +532,20 @@ export declare const workspaceConfigSchema: z.ZodObject<{
511
532
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
512
533
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
513
534
  repository?: string | undefined;
535
+ testDirectory?: string | undefined;
514
536
  api?: {
515
537
  authHeader?: string | undefined;
516
538
  authScheme?: string | undefined;
517
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
518
- baseUrl?: string | undefined;
519
539
  schemaPath?: string | undefined;
540
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
520
541
  defaultQueryParams?: Record<string, string> | undefined;
521
542
  queryParamOverrides?: {
522
543
  values: Record<string, string>;
523
544
  pathPattern: string;
524
545
  }[] | undefined;
546
+ baseUrl?: string | undefined;
525
547
  skipTLSVerify?: boolean | undefined;
526
548
  } | undefined;
527
- testDirectory?: string | undefined;
528
549
  runtimeDetails?: {
529
550
  runtime?: unknown;
530
551
  dockerNetwork?: string | undefined;
@@ -535,10 +556,10 @@ export declare const workspaceConfigSchema: z.ZodObject<{
535
556
  testSuites?: {
536
557
  testRunCommand: string;
537
558
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
538
- testEnv?: Record<string, string> | undefined;
539
559
  pathGlobs?: string[] | undefined;
540
560
  canaryStatus?: "proven" | "unproven" | undefined;
541
561
  canaryDetail?: string | undefined;
562
+ testEnv?: unknown;
542
563
  }[] | undefined;
543
564
  } | undefined;
544
565
  }[] | undefined;
@@ -568,20 +589,20 @@ export declare function validateWorkspaceConfig(config: unknown): z.SafeParseRet
568
589
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
569
590
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
570
591
  repository?: string | undefined;
592
+ testDirectory?: string | undefined;
571
593
  api?: {
572
594
  authHeader?: string | undefined;
573
595
  authScheme?: string | undefined;
574
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
575
- baseUrl?: string | undefined;
576
596
  schemaPath?: string | undefined;
597
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
577
598
  defaultQueryParams?: Record<string, string> | undefined;
578
599
  queryParamOverrides?: {
579
600
  values: Record<string, string>;
580
601
  pathPattern: string;
581
602
  }[] | undefined;
603
+ baseUrl?: string | undefined;
582
604
  skipTLSVerify?: boolean | undefined;
583
605
  } | undefined;
584
- testDirectory?: string | undefined;
585
606
  runtimeDetails?: {
586
607
  runtime?: unknown;
587
608
  dockerNetwork?: string | undefined;
@@ -592,10 +613,10 @@ export declare function validateWorkspaceConfig(config: unknown): z.SafeParseRet
592
613
  testSuites?: {
593
614
  testRunCommand: string;
594
615
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
595
- testEnv?: Record<string, string> | undefined;
596
616
  pathGlobs?: string[] | undefined;
597
617
  canaryStatus?: "proven" | "unproven" | undefined;
598
618
  canaryDetail?: string | undefined;
619
+ testEnv?: unknown;
599
620
  }[] | undefined;
600
621
  } | undefined;
601
622
  }[] | undefined;
@@ -616,20 +637,20 @@ export declare function validateWorkspaceConfig(config: unknown): z.SafeParseRet
616
637
  language?: "python" | "typescript" | "javascript" | "java" | undefined;
617
638
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
618
639
  repository?: string | undefined;
640
+ testDirectory?: string | undefined;
619
641
  api?: {
620
642
  authHeader?: string | undefined;
621
643
  authScheme?: string | undefined;
622
- authType?: "none" | "cookie" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "session" | undefined;
623
- baseUrl?: string | undefined;
624
644
  schemaPath?: string | undefined;
645
+ authType?: "none" | "token" | "bearer" | "basic" | "oauth" | "apiKey" | "cookie" | "session" | undefined;
625
646
  defaultQueryParams?: Record<string, string> | undefined;
626
647
  queryParamOverrides?: {
627
648
  values: Record<string, string>;
628
649
  pathPattern: string;
629
650
  }[] | undefined;
651
+ baseUrl?: string | undefined;
630
652
  skipTLSVerify?: boolean | undefined;
631
653
  } | undefined;
632
- testDirectory?: string | undefined;
633
654
  runtimeDetails?: {
634
655
  runtime: import("../types/TestTypes.js").RuntimeEnvironment;
635
656
  dockerNetwork?: string | undefined;
@@ -640,7 +661,6 @@ export declare function validateWorkspaceConfig(config: unknown): z.SafeParseRet
640
661
  testSuites?: {
641
662
  testRunCommand: string;
642
663
  framework?: "playwright" | "pytest" | "robot" | "junit" | "vitest" | "jest" | "mocha" | "go" | "rspec" | "jasmine" | undefined;
643
- testEnv?: Record<string, string> | undefined;
644
664
  pathGlobs?: string[] | undefined;
645
665
  canaryStatus?: "proven" | "unproven" | undefined;
646
666
  canaryDetail?: string | undefined;
@@ -108,17 +108,18 @@ export const serviceSchema = z
108
108
  // External-suite test contract (SKYR-4002). A service hosts one or more
109
109
  // runnable suites — record each under testSuites, even a single suite
110
110
  // (there is no flat single-suite form). Written by the SUT adapt_workflow
111
- // bootstrap (skyramp_testbot_sut), read at run time by
112
- // skyramp_run_existing_tests. Each suite carries its own framework
113
- // (falling back to the service's), testRunCommand, testEnv, and pathGlobs
114
- // — the repo-relative paths that suite owns, used to route a selector to
115
- // the one suite that can run it. One service can host multiple frameworks.
111
+ // bootstrap (skyramp_testbot_sut). Each suite carries its own framework
112
+ // (falling back to the service's), testRunCommand, and pathGlobs
113
+ // — the repo-relative paths that suite owns, which the agent reads to find
114
+ // the suite of a test file. One service can host multiple frameworks.
116
115
  testSuites: z
117
- .array(z
116
+ .array(
117
+ // A workspace.yml written before testEnv was removed still loads: the
118
+ // key is accepted and then dropped, so the next write leaves it out.
119
+ z
118
120
  .object({
119
121
  framework: z.enum(SUPPORTED_FRAMEWORKS).optional(),
120
122
  testRunCommand: z.string().min(1),
121
- testEnv: z.record(z.string(), z.string()).optional(),
122
123
  pathGlobs: z.array(z.string()).optional(),
123
124
  // Did SUT setup actually run one test from this suite?
124
125
  //
@@ -139,8 +140,11 @@ export const serviceSchema = z
139
140
  canaryStatus: z.enum(["proven", "unproven"]).optional(),
140
141
  /** Why it could not be proven — required by the prompt when unproven. */
141
142
  canaryDetail: z.string().optional(),
143
+ // Accepted only so an older file parses; the transform removes it.
144
+ testEnv: z.unknown().optional(),
142
145
  })
143
- .strict())
146
+ .strict()
147
+ .transform(({ testEnv: _testEnv, ...rest }) => rest))
144
148
  .optional(),
145
149
  })
146
150
  .strict()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyramp/mcp",
3
- "version": "0.4.2-rc.1",
3
+ "version": "0.4.2-rc.2",
4
4
  "main": "build/index.js",
5
5
  "exports": {
6
6
  ".": "./build/index.js",
@@ -43,8 +43,6 @@ does and does not cover are in the UI recommendation grounding section of the ex
43
43
 
44
44
  **Follow all instructions returned by `skyramp_analyze_changes`.**{uiCredentialsNote}
45
45
 
46
- **Every later tool call names its repository.** `skyramp_analyze_test_health`, `skyramp_actions`, `skyramp_execute_test` and `skyramp_run_existing_tests` each take a `repository` argument beside the `stateFile` path `skyramp_analyze_changes` returned. It selects the section of the run state the tool reads and writes, so pass it on every such call. For a test in the primary repo, pass `{primaryRepo}`.
47
-
48
46
 
49
47
  **Feature context check:** After you capture a blueprint, cross-check whether it actually shows the changed feature. Look at the diff — what component, field, or UI element was changed? If that component only renders in a specific context (a particular collection type, a non-empty list, a specific user role, a form that only appears after a prior action), and the blueprint you captured doesn't contain it, navigate to the right context before using this blueprint for recommendations. A blueprint that doesn't show the changed feature produces recommendations that test the wrong thing — for example, recommending tests against a system collection when the PR changed behavior on custom collections. If you cannot reach the right context from the diff and the workspace config, leave the planned test's element list empty, name the page you opened, and note it in `issuesFound`.
50
48
 
@@ -17,7 +17,8 @@ description: Repair reference, syntax, import, or missing-dependency errors in g
17
17
 
18
18
  ### What you can do
19
19
 
20
- - Update a dependency manifest only when a missing package is required to compile or execute the test. If no supported manifest exists for that ecosystem at the test project root, create and seed one supported test/development manifest. Do not create a competing manifest, change unrelated fields, or add application/runtime dependencies.
20
+ - When the missing package is the Skyramp SDK in JavaScript or TypeScript, declare the exact version `skyramp_verify_test_dependencies` names, with no range operator: the tests were generated by the SDK this server runs, and a range lets a clean install resolve a different one. Python and Java declare the SDK without a version and are not checked this way.
21
+ - Update a dependency manifest only when a missing package is required to compile or execute the test. The test project root is the package that contains the test file, which in a workspace (pnpm, yarn or npm workspaces) is NOT the repository root: a package manager that does not hoist links only what each package itself declares, so a dependency added at the repository root stays unresolvable from the test and the run fails with the same missing module. If no supported manifest exists for that ecosystem at the test project root, create and seed one supported test/development manifest. Do not create a competing manifest, change unrelated fields, or add application/runtime dependencies.
21
22
  - Add only common testing packages accepted by `skyramp_verify_test_dependencies` (for example, @skyramp/skyramp or @playwright/test for JavaScript/TypeScript, pytest for Python, and junit-jupiter for Java). The verifier is the source of truth for the exact allowlist.
22
23
  - JavaScript/TypeScript additions must use package.json devDependencies. Python additions must use dependency-groups.dev, tool.poetry.group.dev.dependencies, or an existing requirements-dev.txt. Maven additions must use <scope>test</scope>. Gradle additions must use testImplementation or testRuntimeOnly.
23
24
  - A matching lockfile may change only as the package manager's consequence of an approved manifest edit.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: run-test
3
+ description: Run one test file with the repository's own command through skyramp_execute_test, which records the result. Use it for every test type, generated or existing.
4
+ ---
5
+
6
+ # Run one test file
7
+
8
+ `$ARGUMENTS` is a positional list: `$0` is the absolute path of the test file, `$1` is the language, `$2` is the framework, and `$3` is the test type.
9
+
10
+ 1. Choose the command the repository uses for `$0`, as `skyramp_execute_test`'s `commandOverride` describes: it names where to take the command from, which suite to take it from when `workspace.yml` records more than one, and the default for each framework when the repository has none. Limit the command to `$0`.
11
+ 2. For a TypeScript or JavaScript Playwright `ui` or `e2e` test, add `--config "$SKYRAMP_PLAYWRIGHT_CONFIG"`.
12
+ 3. Find the environment variable the test reads for its base URL: `SKYRAMP_TEST_BASE_URL` in a generated test, or the name its own config reads in an existing test. If the run exports no value for that name, read the exported `SKYRAMP_TEST_SERVICE_URL_*` names and put `<NAME>=$SKYRAMP_TEST_SERVICE_URL_<SERVICENAME>` in front of the command, for the service the test targets.
13
+ 4. Call `skyramp_execute_test` with the command as `commandOverride`, the directory it runs from as `cwd`, `$0`, `$1`, `$3`, and this run's `phase`, `stateFile`, and `repository`.
14
+ 5. If the run fails because a package is missing, fix it with the `fix-test-import-errors` skill, then call `skyramp_execute_test` again.
15
+
16
+ Put one test file in each call. Do not edit the test to make it pass.
@@ -1,14 +0,0 @@
1
- import { ParsedExternalRun } from "../types/ExternalTestExecution.js";
2
- export declare function parseJestJson(report: unknown, opts?: {
3
- truncated?: boolean;
4
- }): ParsedExternalRun;
5
- export declare function buildJestArgs(input: {
6
- selectors: string[];
7
- mode: "confirm" | "verify" | "probe";
8
- reportPath: string;
9
- }): string[];
10
- export declare function buildVitestArgs(input: {
11
- selectors: string[];
12
- mode: "confirm" | "verify" | "probe";
13
- reportPath: string;
14
- }): string[];