@supatest/cli 0.0.52 → 0.0.53
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/dist/index.js +92 -11
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -359,7 +359,7 @@ function getToolGroupCounts(tools) {
|
|
|
359
359
|
);
|
|
360
360
|
return Object.entries(groups).map(([name, count]) => ({ name, count })).sort((a, b) => b.count - a.count);
|
|
361
361
|
}
|
|
362
|
-
var AVAILABLE_MODELS, DATE_SUFFIX_REGEX, SMALL_COST_MULTIPLIER, MEDIUM_COST_MULTIPLIER, PREMIUM_COST_MULTIPLIER, SMALL_COST_LABEL, MEDIUM_COST_LABEL, PREMIUM_COST_LABEL, MODEL_TIERS, CONTEXT_WINDOWS, util, objectUtil, ZodParsedType, getParsedType, ZodIssueCode, ZodError, errorMap, overrideErrorMap, makeIssue, ParseStatus, INVALID, DIRTY, OK, isAborted, isDirty, isValid, isAsync, errorUtil, ParseInputLazyPath, handleResult, ZodType, cuidRegex, cuid2Regex, ulidRegex, uuidRegex, nanoidRegex, jwtRegex, durationRegex, emailRegex, _emojiRegex, emojiRegex, ipv4Regex, ipv4CidrRegex, ipv6Regex, ipv6CidrRegex, base64Regex, base64urlRegex, dateRegexSource, dateRegex, ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodArray, ZodObject, ZodUnion, getDiscriminator, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodEffects, ZodOptional, ZodNullable, ZodDefault, ZodCatch, ZodNaN, ZodBranded, ZodPipeline, ZodReadonly, ZodFirstPartyTypeKind, stringType, numberType, booleanType, dateType, unknownType, arrayType, objectType, unionType, discriminatedUnionType, recordType, functionType, lazyType, literalType, enumType, promiseType, coerce, MAX_API_KEY_NAME_LENGTH, apiKeySchema, apiKeyUsageSchema, createApiKeyRequestSchema, apiKeyResponseSchema, apiKeyUsageSummarySchema, genericErrorSchema, validationErrorSchema, feedbackCategorySchema, FEEDBACK_CATEGORIES, createFeedbackSchema, feedbackResponseSchema, listFeedbackQuerySchema, feedbackListResponseSchema, healthMetricSchema, healthMetricDailyItemSchema, healthMetricsWithDailySchema, healthAnalyticsPeriodSchema, healthAnalyticsDailyItemSchema, healthAnalyticsResponseSchema, MAX_TIMEZONE_CHAR_LENGTH, organizationSchema, organizationSettingsSchema, textBlockSchema, toolUseBlockSchema, toolResultBlockSchema, thinkingBlockSchema, imageBlockSchema, contentBlockSchema, sessionSchema, createSessionRequestSchema, updateSessionRequestSchema, messageSchema, createMessageRequestSchema, cliEventSchema, createCLISessionRequestSchema, queryResultSchema, queryTurnSchema, queryContentSchema, queryUsageSchema, querySchema, runStatusSchema, testResultStatusSchema, testOutcomeSchema, attachmentKindSchema, stepCategorySchema, runSummarySchema, ciMetadataSchema, gitMetadataSchema, playwrightConfigSchema, errorInfoSchema, locationSchema, sourceSnippetSchema, runSchema, annotationSchema, testSchema, testResultSchema, baseStepSchema, stepSchema, attachmentSchema, listRunsQuerySchema, listTestsQuerySchema, runsListResponseSchema, runDetailResponseSchema, coverageTestItemSchema, secondaryTagMetricSchema, tagCoverageSchema, coverageStatsSchema, coverageAlertSchema, coverageDashboardResponseSchema, coverageDashboardQuerySchema, testsListResponseSchema, testDetailResponseSchema, testHistoryItemSchema, testHistoryResponseSchema, visualComparisonScreenshotSchema, visualComparisonRunSchema, visualComparisonMatchedStepSchema, visualComparisonResponseSchema, topOffenderSchema, topOffendersResponseSchema, trendPointSchema, trendsResponseSchema, errorCategorySchema, failureClusterSchema, newFailureSchema, runInsightsResponseSchema, FailureCategoryEnum, SelectorTypeEnum, FailureCategoryStatsSchema, FailureCategoriesResponseSchema, FailingSelectorStatsSchema, FailingSelectorsResponseSchema, newFailureItemSchema, newFailuresResponseSchema, flakyTestItemSchema, flakyTestsResponseSchema, slowestTestItemSchema, slowestTestsResponseSchema, runSummaryEmailFailureSchema, runSummaryEmailReportSchema, sendRunReportRequestSchema, metricWithTrendSchema, weekOverWeekMetricsSchema, ciComputeTimeSchema, investigationCandidateSchema, failureCategoryBreakdownSchema, stabilityTrendSchema, folderStabilitySchema, managerReportSchema, managerReportQuerySchema, sendManagerReportRequestSchema, reportAttachmentLinkSchema, developerReportRegressionSchema, developerReportFlakyTestSchema, developerReportSlowTestSchema, developerRunSummaryReportSchema, executiveReportStatusSchema, executiveMetricSchema, executiveKeyMetricsSchema, executiveTrendPointSchema, executiveTrendsSchema, executiveFlakyOffenderSchema, executiveSlowestOffenderSchema, executiveTopOffendersSchema, executiveReportSchema, executiveReportQuerySchema, sendExecutiveReportRequestSchema, assigneeInfoSchema, assigneesListResponseSchema, testCatalogPrioritySchema, testCatalogTypeSchema, testCatalogAssignmentStatusSchema, testCatalogAssignmentSchema, testCatalogDefinitionSchema, testCatalogListItemSchema, testCatalogHistoryEntrySchema, testCatalogListQuerySchema, testCatalogListResponseSchema, testCatalogDetailResponseSchema, testCatalogFilterOptionsSchema, testCatalogAssigneeInfoSchema, testCatalogAssignRequestSchema, testCatalogUpdateAssignmentRequestSchema, testCatalogAssignmentResponseSchema, testCatalogFolderNodeSchema, testCatalogFolderTreeResponseSchema, testCatalogFolderTestsQuerySchema, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, DAYS_PER_WEEK, SECONDS_PER_WEEK, DAYS_PER_MONTH, SECONDS_PER_MONTH, DAYS_PER_YEAR, SECONDS_PER_YEAR;
|
|
362
|
+
var AVAILABLE_MODELS, DATE_SUFFIX_REGEX, SMALL_COST_MULTIPLIER, MEDIUM_COST_MULTIPLIER, PREMIUM_COST_MULTIPLIER, SMALL_COST_LABEL, MEDIUM_COST_LABEL, PREMIUM_COST_LABEL, MODEL_TIERS, CONTEXT_WINDOWS, util, objectUtil, ZodParsedType, getParsedType, ZodIssueCode, ZodError, errorMap, overrideErrorMap, makeIssue, ParseStatus, INVALID, DIRTY, OK, isAborted, isDirty, isValid, isAsync, errorUtil, ParseInputLazyPath, handleResult, ZodType, cuidRegex, cuid2Regex, ulidRegex, uuidRegex, nanoidRegex, jwtRegex, durationRegex, emailRegex, _emojiRegex, emojiRegex, ipv4Regex, ipv4CidrRegex, ipv6Regex, ipv6CidrRegex, base64Regex, base64urlRegex, dateRegexSource, dateRegex, ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodArray, ZodObject, ZodUnion, getDiscriminator, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodEffects, ZodOptional, ZodNullable, ZodDefault, ZodCatch, ZodNaN, ZodBranded, ZodPipeline, ZodReadonly, ZodFirstPartyTypeKind, stringType, numberType, booleanType, dateType, unknownType, arrayType, objectType, unionType, discriminatedUnionType, recordType, functionType, lazyType, literalType, enumType, promiseType, coerce, MAX_API_KEY_NAME_LENGTH, apiKeySchema, apiKeyUsageSchema, createApiKeyRequestSchema, apiKeyResponseSchema, apiKeyUsageSummarySchema, genericErrorSchema, validationErrorSchema, feedbackCategorySchema, FEEDBACK_CATEGORIES, createFeedbackSchema, feedbackResponseSchema, listFeedbackQuerySchema, feedbackListResponseSchema, healthMetricSchema, healthMetricDailyItemSchema, healthMetricsWithDailySchema, healthAnalyticsPeriodSchema, healthAnalyticsDailyItemSchema, healthAnalyticsResponseSchema, MAX_TIMEZONE_CHAR_LENGTH, organizationSchema, organizationSettingsSchema, adminOrganizationSchema, adminOrganizationListSchema, updateAdminOrganizationRequestSchema, textBlockSchema, toolUseBlockSchema, toolResultBlockSchema, thinkingBlockSchema, imageBlockSchema, contentBlockSchema, sessionSchema, createSessionRequestSchema, updateSessionRequestSchema, messageSchema, createMessageRequestSchema, cliEventSchema, createCLISessionRequestSchema, queryResultSchema, queryTurnSchema, queryContentSchema, queryUsageSchema, querySchema, runStatusSchema, testResultStatusSchema, testOutcomeSchema, attachmentKindSchema, stepCategorySchema, runSummarySchema, ciMetadataSchema, gitMetadataSchema, playwrightConfigSchema, errorInfoSchema, locationSchema, sourceSnippetSchema, runSourceSchema, runSchema, annotationSchema, testSchema, testResultSchema, baseStepSchema, stepSchema, attachmentSchema, listRunsQuerySchema, listTestsQuerySchema, runsListResponseSchema, runDetailResponseSchema, coverageTestItemSchema, secondaryTagMetricSchema, tagCoverageSchema, coverageStatsSchema, coverageAlertSchema, coverageDashboardResponseSchema, coverageDashboardQuerySchema, testsListResponseSchema, testDetailResponseSchema, testHistoryItemSchema, testHistoryResponseSchema, visualComparisonScreenshotSchema, visualComparisonRunSchema, visualComparisonMatchedStepSchema, visualComparisonResponseSchema, topOffenderSchema, topOffendersResponseSchema, trendPointSchema, trendsResponseSchema, errorCategorySchema, failureClusterSchema, newFailureSchema, runInsightsResponseSchema, FailureCategoryEnum, SelectorTypeEnum, FailureCategoryStatsSchema, FailureCategoriesResponseSchema, FailingSelectorStatsSchema, FailingSelectorsResponseSchema, newFailureItemSchema, newFailuresResponseSchema, flakyTestItemSchema, flakyTestsResponseSchema, slowestTestItemSchema, slowestTestsResponseSchema, runSummaryEmailFailureSchema, runSummaryEmailReportSchema, sendRunReportRequestSchema, metricWithTrendSchema, weekOverWeekMetricsSchema, ciComputeTimeSchema, investigationCandidateSchema, failureCategoryBreakdownSchema, stabilityTrendSchema, folderStabilitySchema, managerReportSchema, managerReportQuerySchema, sendManagerReportRequestSchema, reportAttachmentLinkSchema, developerReportRegressionSchema, developerReportFlakyTestSchema, developerReportSlowTestSchema, developerRunSummaryReportSchema, executiveReportStatusSchema, executiveMetricSchema, executiveKeyMetricsSchema, executiveTrendPointSchema, executiveTrendsSchema, executiveFlakyOffenderSchema, executiveSlowestOffenderSchema, executiveTopOffendersSchema, executiveReportSchema, executiveReportQuerySchema, sendExecutiveReportRequestSchema, manualTestCaseSchema, createManualRunRequestSchema, manualTestResultSchema, recordManualResultsRequestSchema, recordSingleManualResultRequestSchema, assigneeInfoSchema, assigneesListResponseSchema, testCatalogPrioritySchema, testCatalogTypeSchema, testCatalogAssignmentStatusSchema, testCatalogAssignmentSchema, testCatalogDefinitionSchema, testCatalogListItemSchema, testCatalogHistoryEntrySchema, testCatalogListQuerySchema, testCatalogListResponseSchema, testCatalogDetailResponseSchema, testCatalogFilterOptionsSchema, testCatalogAssigneeInfoSchema, testCatalogAssignRequestSchema, testCatalogUpdateAssignmentRequestSchema, testCatalogAssignmentResponseSchema, testCatalogFolderNodeSchema, testCatalogFolderTreeResponseSchema, testCatalogFolderTestsQuerySchema, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, DAYS_PER_WEEK, SECONDS_PER_WEEK, DAYS_PER_MONTH, SECONDS_PER_MONTH, DAYS_PER_YEAR, SECONDS_PER_YEAR;
|
|
363
363
|
var init_shared_es = __esm({
|
|
364
364
|
"../shared/dist/shared.es.mjs"() {
|
|
365
365
|
"use strict";
|
|
@@ -4263,6 +4263,22 @@ var init_shared_es = __esm({
|
|
|
4263
4263
|
timezone: stringType().max(MAX_TIMEZONE_CHAR_LENGTH, "Timezone must be less than 100 characters").nullable().optional(),
|
|
4264
4264
|
monthlyTokenLimit: numberType().int().positive().optional()
|
|
4265
4265
|
});
|
|
4266
|
+
adminOrganizationSchema = objectType({
|
|
4267
|
+
id: stringType().uuid(),
|
|
4268
|
+
clerkOrgId: stringType(),
|
|
4269
|
+
name: stringType(),
|
|
4270
|
+
timezone: stringType().nullable(),
|
|
4271
|
+
monthlyTokenLimit: numberType().int().positive(),
|
|
4272
|
+
createdAt: stringType(),
|
|
4273
|
+
updatedAt: stringType()
|
|
4274
|
+
});
|
|
4275
|
+
adminOrganizationListSchema = objectType({
|
|
4276
|
+
items: arrayType(adminOrganizationSchema),
|
|
4277
|
+
total: numberType().int()
|
|
4278
|
+
});
|
|
4279
|
+
updateAdminOrganizationRequestSchema = objectType({
|
|
4280
|
+
monthlyTokenLimit: numberType().int().positive()
|
|
4281
|
+
});
|
|
4266
4282
|
textBlockSchema = objectType({
|
|
4267
4283
|
type: literalType("text"),
|
|
4268
4284
|
text: stringType()
|
|
@@ -4464,7 +4480,8 @@ var init_shared_es = __esm({
|
|
|
4464
4480
|
"expected",
|
|
4465
4481
|
"unexpected",
|
|
4466
4482
|
"flaky",
|
|
4467
|
-
"skipped"
|
|
4483
|
+
"skipped",
|
|
4484
|
+
"manual-pending"
|
|
4468
4485
|
]);
|
|
4469
4486
|
attachmentKindSchema = enumType([
|
|
4470
4487
|
"video",
|
|
@@ -4489,6 +4506,7 @@ var init_shared_es = __esm({
|
|
|
4489
4506
|
failed: numberType(),
|
|
4490
4507
|
flaky: numberType(),
|
|
4491
4508
|
skipped: numberType(),
|
|
4509
|
+
manualPending: numberType().optional(),
|
|
4492
4510
|
durationMs: numberType()
|
|
4493
4511
|
});
|
|
4494
4512
|
ciMetadataSchema = objectType({
|
|
@@ -4532,12 +4550,14 @@ var init_shared_es = __esm({
|
|
|
4532
4550
|
highlightLine: numberType(),
|
|
4533
4551
|
language: stringType()
|
|
4534
4552
|
});
|
|
4553
|
+
runSourceSchema = enumType(["reporter", "manual", "manual-single"]);
|
|
4535
4554
|
runSchema = objectType({
|
|
4536
4555
|
id: stringType(),
|
|
4537
4556
|
readableId: stringType().optional(),
|
|
4538
4557
|
// e.g., "RUN-123"
|
|
4539
4558
|
projectId: stringType(),
|
|
4540
4559
|
status: runStatusSchema,
|
|
4560
|
+
source: runSourceSchema.optional().default("reporter"),
|
|
4541
4561
|
summary: runSummarySchema,
|
|
4542
4562
|
durationMs: numberType(),
|
|
4543
4563
|
ci: ciMetadataSchema.optional(),
|
|
@@ -4572,6 +4592,7 @@ var init_shared_es = __esm({
|
|
|
4572
4592
|
// e.g., "chromium", "firefox", "Mobile Safari"
|
|
4573
4593
|
// Denormalized for list views
|
|
4574
4594
|
status: testResultStatusSchema,
|
|
4595
|
+
outcome: testOutcomeSchema.optional(),
|
|
4575
4596
|
durationMs: numberType(),
|
|
4576
4597
|
retryCount: numberType(),
|
|
4577
4598
|
isFlaky: booleanType().optional()
|
|
@@ -4644,8 +4665,10 @@ var init_shared_es = __esm({
|
|
|
4644
4665
|
// Will validate against testCatalogTypeSchema in backend
|
|
4645
4666
|
tags: stringType().optional(),
|
|
4646
4667
|
// Comma-separated custom tags
|
|
4647
|
-
testRunIds: stringType().optional()
|
|
4668
|
+
testRunIds: stringType().optional(),
|
|
4648
4669
|
// Comma-separated test_run UUIDs for error pattern filtering
|
|
4670
|
+
isManualPending: coerce.boolean().optional()
|
|
4671
|
+
// Filter for manual-pending outcome
|
|
4649
4672
|
});
|
|
4650
4673
|
runsListResponseSchema = objectType({
|
|
4651
4674
|
runs: arrayType(runSchema),
|
|
@@ -5206,6 +5229,36 @@ var init_shared_es = __esm({
|
|
|
5206
5229
|
month: stringType().regex(/^\d{4}-\d{2}$/, "month must be in format YYYY-MM"),
|
|
5207
5230
|
emails: arrayType(stringType().email())
|
|
5208
5231
|
});
|
|
5232
|
+
manualTestCaseSchema = objectType({
|
|
5233
|
+
title: stringType().min(1),
|
|
5234
|
+
titlePath: arrayType(stringType()).optional(),
|
|
5235
|
+
file: stringType().optional(),
|
|
5236
|
+
tags: arrayType(stringType()).optional(),
|
|
5237
|
+
notes: stringType().optional(),
|
|
5238
|
+
existingTestId: stringType().optional()
|
|
5239
|
+
// If set, use this testId instead of computing a hash
|
|
5240
|
+
});
|
|
5241
|
+
createManualRunRequestSchema = objectType({
|
|
5242
|
+
projectId: stringType().min(1),
|
|
5243
|
+
name: stringType().min(1).optional(),
|
|
5244
|
+
tests: arrayType(manualTestCaseSchema).min(1),
|
|
5245
|
+
environment: stringType().optional(),
|
|
5246
|
+
notes: stringType().optional()
|
|
5247
|
+
});
|
|
5248
|
+
manualTestResultSchema = objectType({
|
|
5249
|
+
testRunId: stringType().uuid(),
|
|
5250
|
+
status: enumType(["passed", "failed", "skipped"]),
|
|
5251
|
+
notes: stringType().optional(),
|
|
5252
|
+
durationMs: numberType().int().min(0).optional()
|
|
5253
|
+
});
|
|
5254
|
+
recordManualResultsRequestSchema = objectType({
|
|
5255
|
+
results: arrayType(manualTestResultSchema).min(1)
|
|
5256
|
+
});
|
|
5257
|
+
recordSingleManualResultRequestSchema = objectType({
|
|
5258
|
+
status: enumType(["passed", "failed", "skipped"]),
|
|
5259
|
+
notes: stringType().optional(),
|
|
5260
|
+
durationMs: numberType().int().min(0).optional()
|
|
5261
|
+
});
|
|
5209
5262
|
assigneeInfoSchema = objectType({
|
|
5210
5263
|
id: stringType(),
|
|
5211
5264
|
name: stringType(),
|
|
@@ -5258,6 +5311,7 @@ var init_shared_es = __esm({
|
|
|
5258
5311
|
testType: testCatalogTypeSchema.nullable(),
|
|
5259
5312
|
isSlow: booleanType(),
|
|
5260
5313
|
isFlakyTagged: booleanType(),
|
|
5314
|
+
isManual: booleanType(),
|
|
5261
5315
|
// Raw data
|
|
5262
5316
|
tags: arrayType(stringType()).nullable(),
|
|
5263
5317
|
customMetadata: recordType(stringType()).nullable(),
|
|
@@ -5284,6 +5338,7 @@ var init_shared_es = __esm({
|
|
|
5284
5338
|
testId: stringType(),
|
|
5285
5339
|
file: stringType(),
|
|
5286
5340
|
title: stringType(),
|
|
5341
|
+
titlePath: arrayType(stringType()).optional(),
|
|
5287
5342
|
projectName: stringType().nullable(),
|
|
5288
5343
|
// Key metadata
|
|
5289
5344
|
owner: stringType().nullable(),
|
|
@@ -5291,6 +5346,8 @@ var init_shared_es = __esm({
|
|
|
5291
5346
|
feature: stringType().nullable(),
|
|
5292
5347
|
isSlow: booleanType(),
|
|
5293
5348
|
isFlakyTagged: booleanType(),
|
|
5349
|
+
isManual: booleanType(),
|
|
5350
|
+
tags: arrayType(stringType()).nullable().optional(),
|
|
5294
5351
|
// Stats
|
|
5295
5352
|
totalRuns: numberType(),
|
|
5296
5353
|
passRate: numberType().nullable(),
|
|
@@ -5318,6 +5375,7 @@ var init_shared_es = __esm({
|
|
|
5318
5375
|
feature: stringType().optional(),
|
|
5319
5376
|
priority: testCatalogPrioritySchema.optional(),
|
|
5320
5377
|
search: stringType().optional(),
|
|
5378
|
+
isManual: coerce.boolean().optional(),
|
|
5321
5379
|
sortBy: enumType([
|
|
5322
5380
|
"lastRunAt",
|
|
5323
5381
|
"passRate",
|
|
@@ -5626,7 +5684,7 @@ var CLI_VERSION;
|
|
|
5626
5684
|
var init_version = __esm({
|
|
5627
5685
|
"src/version.ts"() {
|
|
5628
5686
|
"use strict";
|
|
5629
|
-
CLI_VERSION = "0.0.
|
|
5687
|
+
CLI_VERSION = "0.0.53";
|
|
5630
5688
|
}
|
|
5631
5689
|
});
|
|
5632
5690
|
|
|
@@ -7377,7 +7435,7 @@ ${projectInstructions}`,
|
|
|
7377
7435
|
const fs4 = await import("fs/promises");
|
|
7378
7436
|
let claudeCodePath;
|
|
7379
7437
|
const require2 = createRequire(import.meta.url);
|
|
7380
|
-
const sdkPath = require2.resolve("@anthropic-ai/claude-agent-sdk
|
|
7438
|
+
const sdkPath = require2.resolve("@anthropic-ai/claude-agent-sdk");
|
|
7381
7439
|
claudeCodePath = join7(dirname(sdkPath), "cli.js");
|
|
7382
7440
|
this.presenter.onLog(`Using SDK CLI: ${claudeCodePath}`);
|
|
7383
7441
|
if (config.claudeCodeExecutablePath) {
|
|
@@ -9627,16 +9685,37 @@ var init_test_tagging = __esm({
|
|
|
9627
9685
|
testTaggingBlock = `<test_tagging>
|
|
9628
9686
|
**IMPORTANT**: Before completing any fix or writing a new test, check if the test has metadata tags. If tags are missing, add them.
|
|
9629
9687
|
|
|
9630
|
-
Required tags
|
|
9631
|
-
|
|
9688
|
+
Required tags for ALL tests:
|
|
9689
|
+
- @id:UNIQUE-ID \u2014 Stable identity for history tracking. Generate a short memorable ID based on the feature and test purpose (e.g. AUTH-LOGIN-001, CART-ADD-001). REQUIRED for every test \u2014 without it, renaming or moving a test loses its entire run history.
|
|
9690
|
+
- @feature:name \u2014 Feature area or module this test covers
|
|
9691
|
+
- @priority:critical|high|medium|low \u2014 Test importance
|
|
9692
|
+
- @test_type:smoke|e2e|regression|integration|unit \u2014 Classification
|
|
9693
|
+
|
|
9694
|
+
Optional: @owner:email, @ticket:PROJ-123, @slow, @flaky, @manual, @key:value
|
|
9632
9695
|
|
|
9633
9696
|
**Playwright** \u2014 ALWAYS use the native tag property (even if existing tests use title-based tags):
|
|
9634
|
-
test("User can login", { tag: ['@feature:auth', '@priority:high', '@test_type:e2e'] }, async ({ page }) => { });
|
|
9697
|
+
test("User can login", { tag: ['@id:AUTH-LOGIN-001', '@feature:auth', '@priority:high', '@test_type:e2e'] }, async ({ page }) => { });
|
|
9635
9698
|
|
|
9636
9699
|
**WebdriverIO/Other** \u2014 Append tags to the test title:
|
|
9637
|
-
it("User can login (@feature:auth @priority:high @test_type:e2e)", async () => { });
|
|
9700
|
+
it("User can login (@id:AUTH-LOGIN-001 @feature:auth @priority:high @test_type:e2e)", async () => { });
|
|
9701
|
+
|
|
9702
|
+
**Existing tests without @id** \u2014 When fixing or modifying a test that has no @id tag, add one. Generate the ID from the feature + a short description, e.g. @id:CHECKOUT-SUBMIT-001.
|
|
9703
|
+
|
|
9704
|
+
**Manual test cases** \u2014 Use the @manual tag to mark tests that require human execution. For manual tests, write an empty shell that is skipped so it appears in the test catalog without running automatically:
|
|
9638
9705
|
|
|
9639
|
-
|
|
9706
|
+
Playwright:
|
|
9707
|
+
test("Verify checkout flow on mobile device", { tag: ['@id:CHECKOUT-MOBILE-001', '@manual', '@feature:checkout', '@priority:high'] }, async () => {
|
|
9708
|
+
test.skip(true, 'Manual test \u2014 requires human execution');
|
|
9709
|
+
});
|
|
9710
|
+
|
|
9711
|
+
WebdriverIO/Other:
|
|
9712
|
+
it("Verify checkout flow on mobile device (@id:CHECKOUT-MOBILE-001 @manual @feature:checkout @priority:high)", async () => {
|
|
9713
|
+
pending('Manual test \u2014 requires human execution');
|
|
9714
|
+
});
|
|
9715
|
+
|
|
9716
|
+
Manual tests show up in the Supatest dashboard as "Manual" and their results can be recorded through the platform UI.
|
|
9717
|
+
|
|
9718
|
+
A test is not complete until it has @id plus the other required tags.
|
|
9640
9719
|
</test_tagging>`;
|
|
9641
9720
|
}
|
|
9642
9721
|
});
|
|
@@ -9726,7 +9805,7 @@ For each failing test:
|
|
|
9726
9805
|
2. **Categorize** \u2014 Identify root cause: selector, timing, state, data, logic, or app bug
|
|
9727
9806
|
3. **Investigate** \u2014 Read the failing test and relevant source code
|
|
9728
9807
|
4. **Fix** \u2014 Make minimal, targeted changes. CRITICAL: Fix the implementation or test logic, NOT the assertions. Don't weaken assertions or skip tests.
|
|
9729
|
-
5. **Add Tags** \u2014 After fixing, check if the test has metadata tags.
|
|
9808
|
+
5. **Add Tags** \u2014 After fixing, open the test file (not just the page object or helper you modified) and check if the failing test has metadata tags. Required tags: \`@id:UNIQUE-ID\`, \`@feature:...\`, \`@priority:...\`, \`@test_type:...\`. If any are missing, add all four: \`test("name", { tag: ['@id:FEATURE-DESC-001', '@feature:...', '@priority:...', '@test_type:...'] }, ...)\`. This step is mandatory even when the fix was in a page object, fixture, or helper \u2014 always check the test file itself.
|
|
9730
9809
|
6. **Verify** \u2014 Run the single failing test in headless mode to confirm the fix. If a process hangs, kill it and check for interactive flags.
|
|
9731
9810
|
7. **Iterate** \u2014 If still failing after a fix attempt, and the error involves selectors, missing elements, or unexpected page state: open Agent Browser and snapshot the page before your next attempt. Max 3 attempts per test.
|
|
9732
9811
|
|
|
@@ -17415,6 +17494,8 @@ Make sure the file exists and is a valid image (png, jpg, gif, webp, bmp, svg).`
|
|
|
17415
17494
|
}
|
|
17416
17495
|
if (key.ctrl && key.name === "o") {
|
|
17417
17496
|
toggleToolGroups();
|
|
17497
|
+
clearTerminalViewportAndScrollback();
|
|
17498
|
+
refreshStatic();
|
|
17418
17499
|
}
|
|
17419
17500
|
},
|
|
17420
17501
|
{ isActive: !isOverlayOpen }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supatest/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.53",
|
|
4
4
|
"description": "Supatest CLI - AI-powered task automation for CI/CD",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@anthropic-ai/claude-agent-sdk": "^0.2.
|
|
42
|
-
"@anthropic-ai/sdk": "^0.
|
|
41
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.72",
|
|
42
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
43
43
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
44
44
|
"@types/inquirer": "^9.0.0",
|
|
45
45
|
"ansi-escapes": "^7.0.0",
|