@kb-labs/qa-contracts 2.107.0 → 2.110.0

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.d.ts CHANGED
@@ -130,6 +130,13 @@ interface E2eCaseAttempt {
130
130
  errorCategory?: E2eErrorCategory;
131
131
  errorMessage?: string;
132
132
  }
133
+ /** A pointer to the per-run CI dossier; raw evidence stays in CI artifacts. */
134
+ interface E2eEvidenceRef {
135
+ runId: string;
136
+ path: string;
137
+ summaryPath?: string;
138
+ manifestPath?: string;
139
+ }
133
140
  interface E2eCaseResult {
134
141
  suite: string;
135
142
  spec: string;
@@ -137,6 +144,7 @@ interface E2eCaseResult {
137
144
  title: string;
138
145
  outcome: 'passed' | 'flaky' | 'failed' | 'skipped';
139
146
  attempts: E2eCaseAttempt[];
147
+ evidence?: E2eEvidenceRef;
140
148
  }
141
149
  interface E2eFlakySnapshot extends SnapshotMeta {
142
150
  kind: 'e2e-flaky';
@@ -279,6 +287,118 @@ interface QAPluginConfig {
279
287
  historyMaxEntries?: number;
280
288
  /** Default task list for `kb qa run`. Default: ["build", "lint", "type-check", "test"]. */
281
289
  defaultTasks?: string[];
290
+ /** CI evidence collection and analysis settings. */
291
+ ci?: QACiConfig;
292
+ }
293
+ interface QACiConfig {
294
+ /** CI provider used when a command does not supply one. */
295
+ provider?: 'github-actions';
296
+ /** GitHub repository in owner/name form. Defaults to GITHUB_REPOSITORY. */
297
+ repository?: string;
298
+ /** Branch that contains durable QA snapshots. Default: ci-data. */
299
+ dataBranch?: string;
300
+ /** Retention used by the producer when publishing GitHub artifacts. Default: 90. */
301
+ artifactRetentionDays?: number;
302
+ /** Workflow names included in reliability analysis. */
303
+ workflows?: string[];
304
+ }
305
+
306
+ /** Provider-neutral evidence produced for one CI workflow run. */
307
+ interface CiRunDossier {
308
+ schemaVersion: 1;
309
+ provider: 'github-actions';
310
+ collectedAt: string;
311
+ collectionStatus: 'complete' | 'partial';
312
+ run: CiRunRef;
313
+ workflow: CiWorkflowRef;
314
+ jobs: CiJobEvidence[];
315
+ sourceRefs: CiSourceRef[];
316
+ }
317
+ interface CiRunRef {
318
+ id: string;
319
+ attempt: number;
320
+ event: string;
321
+ status: string;
322
+ conclusion: string | null;
323
+ startedAt: string | null;
324
+ completedAt: string | null;
325
+ headSha: string;
326
+ headBranch: string | null;
327
+ htmlUrl: string;
328
+ }
329
+ interface CiWorkflowRef {
330
+ name: string;
331
+ path?: string;
332
+ sha?: string;
333
+ }
334
+ interface CiJobEvidence {
335
+ id: string;
336
+ name: string;
337
+ conclusion: string | null;
338
+ startedAt: string | null;
339
+ completedAt: string | null;
340
+ durationMs: number | null;
341
+ runner?: {
342
+ name?: string;
343
+ group?: string;
344
+ os?: string;
345
+ };
346
+ steps: CiStepEvidence[];
347
+ failure?: CiFailureEvidence;
348
+ htmlUrl: string;
349
+ }
350
+ interface CiStepEvidence {
351
+ number: number;
352
+ name: string;
353
+ conclusion: string | null;
354
+ startedAt: string | null;
355
+ completedAt: string | null;
356
+ durationMs: number | null;
357
+ }
358
+ interface CiFailureEvidence {
359
+ phase: 'setup' | 'build' | 'test' | 'publish' | 'unknown';
360
+ fingerprint: string;
361
+ summary: string;
362
+ excerpt?: string;
363
+ confidence: number;
364
+ }
365
+ interface CiSourceRef {
366
+ kind: 'run' | 'job-log' | 'artifact';
367
+ url: string;
368
+ label: string;
369
+ }
370
+ interface CiReliabilityFinding {
371
+ fingerprint: string;
372
+ phase: CiFailureEvidence['phase'];
373
+ summary: string;
374
+ confidence: number;
375
+ occurrences: number;
376
+ affectedJobs: string[];
377
+ sampleRunIds: string[];
378
+ firstSeenAt: string;
379
+ lastSeenAt: string;
380
+ }
381
+ /** Compact, agent-ready result. It deliberately links to evidence instead of embedding logs. */
382
+ interface CiReliabilityOverview {
383
+ schemaVersion: 1;
384
+ generatedAt: string;
385
+ runsAnalyzed: number;
386
+ failedRuns: number;
387
+ failedBeforeTests: number;
388
+ collection: {
389
+ complete: number;
390
+ partial: number;
391
+ };
392
+ findings: CiReliabilityFinding[];
393
+ drillDown: {
394
+ runIds: string[];
395
+ };
396
+ }
397
+ interface CiEvidenceSyncResult {
398
+ requestedRuns: number;
399
+ downloadedRunIds: string[];
400
+ cachedRunIds: string[];
401
+ unavailableRunIds: string[];
282
402
  }
283
403
 
284
404
  declare const SnapshotGitSchema: z.ZodObject<{
@@ -3683,7 +3803,8 @@ declare const QA_ROUTES: {
3683
3803
  readonly BASELINE_DIFF: "/baseline/diff";
3684
3804
  readonly PACKAGE_TIMELINE: "/packages/:name/timeline";
3685
3805
  readonly TASKS: "/tasks";
3806
+ readonly CI_OVERVIEW: "/ci/overview";
3686
3807
  };
3687
3808
  type QARoute = typeof QA_ROUTES[keyof typeof QA_ROUTES];
3688
3809
 
3689
- export { type AnySnapshot, type BaselineCheckDiff, BaselineCheckDiffSchema, type BaselineData, BaselineDataSchema, type CaseHistoryEntry, type CaseTimeline, type CheckIssueDiff, type CheckSnapshot, CheckSnapshotSchema, DEFAULT_TASKS, type DevkitCheckIssue, DevkitCheckIssueSchema, type DevkitCheckOutput, DevkitCheckOutputSchema, type DevkitCheckPackage, type DevkitGateOutput, DevkitGateOutputSchema, type DevkitGateViolation, type DevkitRunOutput, DevkitRunOutputSchema, type DevkitRunResult, DevkitRunResultSchema, type DevkitRunSummary, type DevkitStatsCategoryBreakdown, type DevkitStatsCoverage, type DevkitStatsIssueType, type DevkitStatsOutput, DevkitStatsOutputSchema, type DevkitStatsSummary, type DevkitStatusOutput, type DevkitStatusPackage, type E2eCaseAttempt, type E2eCaseResult, type E2eErrorCategory, type E2eFlakySnapshot, type FlakyOverview, type FlakyOverviewDelta, type FlakyOverviewEntry, type GateSnapshot, GateSnapshotSchema, HISTORY_MAX_ENTRIES, PATHS, type PackageTaskHistory, type PackageTimeline, type QABaselineDiffResponse, QABaselineDiffResponseSchema, type QABaselineResponse, QABaselineResponseSchema, type QACheckRequest, QACheckRequestSchema, type QACheckResponse, QACheckResponseSchema, type QAGateRequest, QAGateRequestSchema, type QAGateResponse, QAGateResponseSchema, type QAHistoryResponse, QAHistoryResponseSchema, type QAPluginConfig, type QARoute, type QARunRequest, QARunRequestSchema, type QARunResponse, QARunResponseSchema, type QAStatsResponse, QAStatsResponseSchema, type QASummaryResponse, QASummaryResponseSchema, QA_BASE_PATH, QA_DATA_DIR, QA_ROUTES, type RegressionDetection, type RunRegression, type RunSnapshot, RunSnapshotSchema, type SnapshotGit, SnapshotGitSchema, type SnapshotMeta, SnapshotMetaSchema, type StatsSnapshot, StatsSnapshotSchema, TRENDS_WINDOW, type TaskTrend, type TaskTrendChangelog, type TaskTrendPoint, type TrendAnalysis };
3810
+ export { type AnySnapshot, type BaselineCheckDiff, BaselineCheckDiffSchema, type BaselineData, BaselineDataSchema, type CaseHistoryEntry, type CaseTimeline, type CheckIssueDiff, type CheckSnapshot, CheckSnapshotSchema, type CiEvidenceSyncResult, type CiFailureEvidence, type CiJobEvidence, type CiReliabilityFinding, type CiReliabilityOverview, type CiRunDossier, type CiRunRef, type CiSourceRef, type CiStepEvidence, type CiWorkflowRef, DEFAULT_TASKS, type DevkitCheckIssue, DevkitCheckIssueSchema, type DevkitCheckOutput, DevkitCheckOutputSchema, type DevkitCheckPackage, type DevkitGateOutput, DevkitGateOutputSchema, type DevkitGateViolation, type DevkitRunOutput, DevkitRunOutputSchema, type DevkitRunResult, DevkitRunResultSchema, type DevkitRunSummary, type DevkitStatsCategoryBreakdown, type DevkitStatsCoverage, type DevkitStatsIssueType, type DevkitStatsOutput, DevkitStatsOutputSchema, type DevkitStatsSummary, type DevkitStatusOutput, type DevkitStatusPackage, type E2eCaseAttempt, type E2eCaseResult, type E2eErrorCategory, type E2eEvidenceRef, type E2eFlakySnapshot, type FlakyOverview, type FlakyOverviewDelta, type FlakyOverviewEntry, type GateSnapshot, GateSnapshotSchema, HISTORY_MAX_ENTRIES, PATHS, type PackageTaskHistory, type PackageTimeline, type QABaselineDiffResponse, QABaselineDiffResponseSchema, type QABaselineResponse, QABaselineResponseSchema, type QACheckRequest, QACheckRequestSchema, type QACheckResponse, QACheckResponseSchema, type QACiConfig, type QAGateRequest, QAGateRequestSchema, type QAGateResponse, QAGateResponseSchema, type QAHistoryResponse, QAHistoryResponseSchema, type QAPluginConfig, type QARoute, type QARunRequest, QARunRequestSchema, type QARunResponse, QARunResponseSchema, type QAStatsResponse, QAStatsResponseSchema, type QASummaryResponse, QASummaryResponseSchema, QA_BASE_PATH, QA_DATA_DIR, QA_ROUTES, type RegressionDetection, type RunRegression, type RunSnapshot, RunSnapshotSchema, type SnapshotGit, SnapshotGitSchema, type SnapshotMeta, SnapshotMetaSchema, type StatsSnapshot, StatsSnapshotSchema, TRENDS_WINDOW, type TaskTrend, type TaskTrendChangelog, type TaskTrendPoint, type TrendAnalysis };
package/dist/index.js CHANGED
@@ -223,7 +223,8 @@ var QA_ROUTES = {
223
223
  BASELINE_UPDATE: "/baseline/update",
224
224
  BASELINE_DIFF: "/baseline/diff",
225
225
  PACKAGE_TIMELINE: "/packages/:name/timeline",
226
- TASKS: "/tasks"
226
+ TASKS: "/tasks",
227
+ CI_OVERVIEW: "/ci/overview"
227
228
  };
228
229
 
229
230
  export { BaselineCheckDiffSchema, BaselineDataSchema, CheckSnapshotSchema, DEFAULT_TASKS, DevkitCheckIssueSchema, DevkitCheckOutputSchema, DevkitGateOutputSchema, DevkitRunOutputSchema, DevkitRunResultSchema, DevkitStatsOutputSchema, GateSnapshotSchema, HISTORY_MAX_ENTRIES, PATHS, QABaselineDiffResponseSchema, QABaselineResponseSchema, QACheckRequestSchema, QACheckResponseSchema, QAGateRequestSchema, QAGateResponseSchema, QAHistoryResponseSchema, QARunRequestSchema, QARunResponseSchema, QAStatsResponseSchema, QASummaryResponseSchema, QA_BASE_PATH, QA_DATA_DIR, QA_ROUTES, RunSnapshotSchema, SnapshotGitSchema, SnapshotMetaSchema, StatsSnapshotSchema, TRENDS_WINDOW };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/rest-api.ts","../src/constants.ts","../src/routes.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// ── Shared schemas ────────────────────────────────────────────────────────────\n\nexport const SnapshotGitSchema = z.object({\n commit: z.string(),\n branch: z.string(),\n message: z.string(),\n});\n\nexport const SnapshotMetaSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n git: SnapshotGitSchema.optional(),\n durationMs: z.number(),\n runContext: z.record(z.unknown()).optional(),\n});\n\n// DevkitRunOutput\nexport const DevkitRunResultSchema = z.object({\n Package: z.string(),\n Task: z.string(),\n OK: z.boolean(),\n Cached: z.boolean(),\n Elapsed: z.number(),\n ExitCode: z.number(),\n Stdout: z.string(),\n Stderr: z.string(),\n Error: z.string(),\n});\n\nexport const DevkitRunOutputSchema = z.object({\n elapsed: z.string(),\n ok: z.boolean(),\n results: z.array(DevkitRunResultSchema),\n summary: z.object({\n total: z.number(),\n passed: z.number(),\n failed: z.number(),\n cached: z.number(),\n }),\n});\n\n// DevkitCheckOutput\nexport const DevkitCheckIssueSchema = z.object({\n check: z.string(),\n severity: z.enum(['error', 'warning', 'info']),\n message: z.string(),\n file: z.string().optional(),\n fix: z.string().optional(),\n capability: z.string().optional(),\n});\n\nexport const DevkitCheckOutputSchema = z.object({\n ok: z.boolean(),\n packages: z.record(z.object({\n ok: z.boolean(),\n issues: z.array(DevkitCheckIssueSchema).nullable(),\n })),\n});\n\n// DevkitStatsOutput\nexport const DevkitStatsOutputSchema = z.object({\n ok: z.boolean(),\n score: z.number(),\n grade: z.string(),\n summary: z.object({\n total: z.number(),\n healthy: z.number(),\n warning: z.number(),\n error: z.number(),\n total_errors: z.number(),\n total_warnings: z.number(),\n }),\n by_category: z.record(z.object({\n total: z.number(),\n healthy: z.number(),\n issues: z.number(),\n grade: z.string(),\n })),\n issues_by_type: z.record(z.object({\n check: z.string(),\n errors: z.number(),\n warnings: z.number(),\n packages: z.number(),\n })),\n coverage: z.record(z.object({\n pass: z.number(),\n total: z.number(),\n pct: z.number(),\n })),\n});\n\n// DevkitGateOutput\nexport const DevkitGateOutputSchema = z.object({\n ok: z.boolean(),\n staged_files: z.number(),\n violations: z.array(z.object({\n package: z.string(),\n check: z.string(),\n severity: z.string(),\n message: z.string(),\n })),\n});\n\n// ── Snapshot schemas ──────────────────────────────────────────────────────────\n\nexport const RunSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('run'),\n tasks: z.array(z.string()),\n raw: DevkitRunOutputSchema,\n});\n\nexport const CheckSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('check'),\n raw: DevkitCheckOutputSchema,\n});\n\nexport const StatsSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('stats'),\n raw: DevkitStatsOutputSchema,\n});\n\nexport const GateSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('gate'),\n raw: DevkitGateOutputSchema,\n});\n\nexport const BaselineDataSchema = z.object({\n timestamp: z.string(),\n git: SnapshotGitSchema.optional(),\n check: DevkitCheckOutputSchema,\n stats: DevkitStatsOutputSchema,\n});\n\n// ── Analysis schemas ──────────────────────────────────────────────────────────\n\nexport const BaselineCheckDiffSchema = z.object({\n newIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n fixedIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n persistingIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n newIssueCount: z.number(),\n fixedIssueCount: z.number(),\n scoreDelta: z.number(),\n gradeDelta: z.string(),\n});\n\n// ── Request/Response schemas ──────────────────────────────────────────────────\n\n// GET /summary\nexport const QASummaryResponseSchema = z.object({\n score: z.number().nullable(),\n grade: z.string().nullable(),\n ok: z.boolean().nullable(),\n lastRunAt: z.string().nullable(),\n lastCheckAt: z.string().nullable(),\n lastStatsAt: z.string().nullable(),\n git: SnapshotGitSchema.nullable(),\n hasBaseline: z.boolean(),\n baselineTimestamp: z.string().nullable(),\n runHistoryCount: z.number(),\n});\nexport type QASummaryResponse = z.infer<typeof QASummaryResponseSchema>;\n\n// POST /run\nexport const QARunRequestSchema = z.object({\n tasks: z.array(z.string()).optional(),\n save: z.boolean().optional(),\n runContext: z.record(z.unknown()).optional(),\n});\nexport type QARunRequest = z.infer<typeof QARunRequestSchema>;\n\nexport const QARunResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: RunSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QARunResponse = z.infer<typeof QARunResponseSchema>;\n\n// POST /check\nexport const QACheckRequestSchema = z.object({\n save: z.boolean().optional(),\n runContext: z.record(z.unknown()).optional(),\n});\nexport type QACheckRequest = z.infer<typeof QACheckRequestSchema>;\n\nexport const QACheckResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: CheckSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QACheckResponse = z.infer<typeof QACheckResponseSchema>;\n\n// GET /stats\nexport const QAStatsResponseSchema = z.object({\n snapshot: StatsSnapshotSchema.nullable(),\n});\nexport type QAStatsResponse = z.infer<typeof QAStatsResponseSchema>;\n\n// POST /gate\nexport const QAGateRequestSchema = z.object({\n save: z.boolean().optional(),\n});\nexport type QAGateRequest = z.infer<typeof QAGateRequestSchema>;\n\nexport const QAGateResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: GateSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QAGateResponse = z.infer<typeof QAGateResponseSchema>;\n\n// GET /history\nexport const QAHistoryResponseSchema = z.object({\n snapshots: z.array(RunSnapshotSchema),\n total: z.number(),\n});\nexport type QAHistoryResponse = z.infer<typeof QAHistoryResponseSchema>;\n\n// GET /baseline\nexport const QABaselineResponseSchema = z.object({\n baseline: BaselineDataSchema.nullable(),\n});\nexport type QABaselineResponse = z.infer<typeof QABaselineResponseSchema>;\n\n// GET /baseline/diff\nexport const QABaselineDiffResponseSchema = z.union([\n BaselineCheckDiffSchema,\n z.object({ error: z.enum(['no-baseline', 'no-check', 'no-stats']) }),\n]);\nexport type QABaselineDiffResponse = z.infer<typeof QABaselineDiffResponseSchema>;\n","export const QA_DATA_DIR = '.kb/qa';\n\nexport const PATHS = {\n SNAPSHOTS_RUN: '.kb/qa/snapshots/run.json',\n SNAPSHOTS_CHECK: '.kb/qa/snapshots/check.json',\n SNAPSHOTS_STATS: '.kb/qa/snapshots/stats.json',\n SNAPSHOTS_GATE: '.kb/qa/snapshots/gate.json',\n SNAPSHOTS_E2E_FLAKY: '.kb/qa/snapshots/e2e-flaky.json',\n BASELINE: '.kb/qa/baseline.json',\n} as const;\n\nexport const HISTORY_MAX_ENTRIES = 50;\nexport const TRENDS_WINDOW = 10;\nexport const DEFAULT_TASKS = ['build', 'lint', 'type-check', 'test'] as const;\n","export const QA_BASE_PATH = '/v1/plugins/qa' as const;\n\nexport const QA_ROUTES = {\n SUMMARY: '/summary',\n RUN: '/run',\n CHECK: '/check',\n STATS: '/stats',\n GATE: '/gate',\n HISTORY: '/history',\n TRENDS: '/trends',\n REGRESSIONS: '/regressions',\n BASELINE: '/baseline',\n BASELINE_UPDATE: '/baseline/update',\n BASELINE_DIFF: '/baseline/diff',\n PACKAGE_TIMELINE: '/packages/:name/timeline',\n TASKS: '/tasks',\n} as const;\n\nexport type QARoute = typeof QA_ROUTES[keyof typeof QA_ROUTES];\n"]}
1
+ {"version":3,"sources":["../src/types/rest-api.ts","../src/constants.ts","../src/routes.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// ── Shared schemas ────────────────────────────────────────────────────────────\n\nexport const SnapshotGitSchema = z.object({\n commit: z.string(),\n branch: z.string(),\n message: z.string(),\n});\n\nexport const SnapshotMetaSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n git: SnapshotGitSchema.optional(),\n durationMs: z.number(),\n runContext: z.record(z.unknown()).optional(),\n});\n\n// DevkitRunOutput\nexport const DevkitRunResultSchema = z.object({\n Package: z.string(),\n Task: z.string(),\n OK: z.boolean(),\n Cached: z.boolean(),\n Elapsed: z.number(),\n ExitCode: z.number(),\n Stdout: z.string(),\n Stderr: z.string(),\n Error: z.string(),\n});\n\nexport const DevkitRunOutputSchema = z.object({\n elapsed: z.string(),\n ok: z.boolean(),\n results: z.array(DevkitRunResultSchema),\n summary: z.object({\n total: z.number(),\n passed: z.number(),\n failed: z.number(),\n cached: z.number(),\n }),\n});\n\n// DevkitCheckOutput\nexport const DevkitCheckIssueSchema = z.object({\n check: z.string(),\n severity: z.enum(['error', 'warning', 'info']),\n message: z.string(),\n file: z.string().optional(),\n fix: z.string().optional(),\n capability: z.string().optional(),\n});\n\nexport const DevkitCheckOutputSchema = z.object({\n ok: z.boolean(),\n packages: z.record(z.object({\n ok: z.boolean(),\n issues: z.array(DevkitCheckIssueSchema).nullable(),\n })),\n});\n\n// DevkitStatsOutput\nexport const DevkitStatsOutputSchema = z.object({\n ok: z.boolean(),\n score: z.number(),\n grade: z.string(),\n summary: z.object({\n total: z.number(),\n healthy: z.number(),\n warning: z.number(),\n error: z.number(),\n total_errors: z.number(),\n total_warnings: z.number(),\n }),\n by_category: z.record(z.object({\n total: z.number(),\n healthy: z.number(),\n issues: z.number(),\n grade: z.string(),\n })),\n issues_by_type: z.record(z.object({\n check: z.string(),\n errors: z.number(),\n warnings: z.number(),\n packages: z.number(),\n })),\n coverage: z.record(z.object({\n pass: z.number(),\n total: z.number(),\n pct: z.number(),\n })),\n});\n\n// DevkitGateOutput\nexport const DevkitGateOutputSchema = z.object({\n ok: z.boolean(),\n staged_files: z.number(),\n violations: z.array(z.object({\n package: z.string(),\n check: z.string(),\n severity: z.string(),\n message: z.string(),\n })),\n});\n\n// ── Snapshot schemas ──────────────────────────────────────────────────────────\n\nexport const RunSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('run'),\n tasks: z.array(z.string()),\n raw: DevkitRunOutputSchema,\n});\n\nexport const CheckSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('check'),\n raw: DevkitCheckOutputSchema,\n});\n\nexport const StatsSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('stats'),\n raw: DevkitStatsOutputSchema,\n});\n\nexport const GateSnapshotSchema = SnapshotMetaSchema.extend({\n kind: z.literal('gate'),\n raw: DevkitGateOutputSchema,\n});\n\nexport const BaselineDataSchema = z.object({\n timestamp: z.string(),\n git: SnapshotGitSchema.optional(),\n check: DevkitCheckOutputSchema,\n stats: DevkitStatsOutputSchema,\n});\n\n// ── Analysis schemas ──────────────────────────────────────────────────────────\n\nexport const BaselineCheckDiffSchema = z.object({\n newIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n fixedIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n persistingIssues: z.array(z.object({\n pkg: z.string(),\n check: z.string(),\n status: z.enum(['new', 'fixed', 'persisting']),\n severity: z.string(),\n message: z.string(),\n })),\n newIssueCount: z.number(),\n fixedIssueCount: z.number(),\n scoreDelta: z.number(),\n gradeDelta: z.string(),\n});\n\n// ── Request/Response schemas ──────────────────────────────────────────────────\n\n// GET /summary\nexport const QASummaryResponseSchema = z.object({\n score: z.number().nullable(),\n grade: z.string().nullable(),\n ok: z.boolean().nullable(),\n lastRunAt: z.string().nullable(),\n lastCheckAt: z.string().nullable(),\n lastStatsAt: z.string().nullable(),\n git: SnapshotGitSchema.nullable(),\n hasBaseline: z.boolean(),\n baselineTimestamp: z.string().nullable(),\n runHistoryCount: z.number(),\n});\nexport type QASummaryResponse = z.infer<typeof QASummaryResponseSchema>;\n\n// POST /run\nexport const QARunRequestSchema = z.object({\n tasks: z.array(z.string()).optional(),\n save: z.boolean().optional(),\n runContext: z.record(z.unknown()).optional(),\n});\nexport type QARunRequest = z.infer<typeof QARunRequestSchema>;\n\nexport const QARunResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: RunSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QARunResponse = z.infer<typeof QARunResponseSchema>;\n\n// POST /check\nexport const QACheckRequestSchema = z.object({\n save: z.boolean().optional(),\n runContext: z.record(z.unknown()).optional(),\n});\nexport type QACheckRequest = z.infer<typeof QACheckRequestSchema>;\n\nexport const QACheckResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: CheckSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QACheckResponse = z.infer<typeof QACheckResponseSchema>;\n\n// GET /stats\nexport const QAStatsResponseSchema = z.object({\n snapshot: StatsSnapshotSchema.nullable(),\n});\nexport type QAStatsResponse = z.infer<typeof QAStatsResponseSchema>;\n\n// POST /gate\nexport const QAGateRequestSchema = z.object({\n save: z.boolean().optional(),\n});\nexport type QAGateRequest = z.infer<typeof QAGateRequestSchema>;\n\nexport const QAGateResponseSchema = z.object({\n ok: z.boolean(),\n snapshot: GateSnapshotSchema,\n durationMs: z.number(),\n});\nexport type QAGateResponse = z.infer<typeof QAGateResponseSchema>;\n\n// GET /history\nexport const QAHistoryResponseSchema = z.object({\n snapshots: z.array(RunSnapshotSchema),\n total: z.number(),\n});\nexport type QAHistoryResponse = z.infer<typeof QAHistoryResponseSchema>;\n\n// GET /baseline\nexport const QABaselineResponseSchema = z.object({\n baseline: BaselineDataSchema.nullable(),\n});\nexport type QABaselineResponse = z.infer<typeof QABaselineResponseSchema>;\n\n// GET /baseline/diff\nexport const QABaselineDiffResponseSchema = z.union([\n BaselineCheckDiffSchema,\n z.object({ error: z.enum(['no-baseline', 'no-check', 'no-stats']) }),\n]);\nexport type QABaselineDiffResponse = z.infer<typeof QABaselineDiffResponseSchema>;\n","export const QA_DATA_DIR = '.kb/qa';\n\nexport const PATHS = {\n SNAPSHOTS_RUN: '.kb/qa/snapshots/run.json',\n SNAPSHOTS_CHECK: '.kb/qa/snapshots/check.json',\n SNAPSHOTS_STATS: '.kb/qa/snapshots/stats.json',\n SNAPSHOTS_GATE: '.kb/qa/snapshots/gate.json',\n SNAPSHOTS_E2E_FLAKY: '.kb/qa/snapshots/e2e-flaky.json',\n BASELINE: '.kb/qa/baseline.json',\n} as const;\n\nexport const HISTORY_MAX_ENTRIES = 50;\nexport const TRENDS_WINDOW = 10;\nexport const DEFAULT_TASKS = ['build', 'lint', 'type-check', 'test'] as const;\n","export const QA_BASE_PATH = '/v1/plugins/qa' as const;\n\nexport const QA_ROUTES = {\n SUMMARY: '/summary',\n RUN: '/run',\n CHECK: '/check',\n STATS: '/stats',\n GATE: '/gate',\n HISTORY: '/history',\n TRENDS: '/trends',\n REGRESSIONS: '/regressions',\n BASELINE: '/baseline',\n BASELINE_UPDATE: '/baseline/update',\n BASELINE_DIFF: '/baseline/diff',\n PACKAGE_TIMELINE: '/packages/:name/timeline',\n TASKS: '/tasks',\n CI_OVERVIEW: '/ci/overview',\n} as const;\n\nexport type QARoute = typeof QA_ROUTES[keyof typeof QA_ROUTES];\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/qa-contracts",
3
3
  "description": "Contracts for KB Labs QA Plugin — types, interfaces, and constants for QA checks, baselines, and history tracking.",
4
- "version": "2.107.0",
4
+ "version": "2.110.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -17,31 +17,31 @@
17
17
  "README.md",
18
18
  "LICENSE"
19
19
  ],
20
+ "scripts": {
21
+ "build": "tsup --config tsup.config.ts",
22
+ "clean": "rimraf dist",
23
+ "dev": "tsup --config tsup.config.ts --watch",
24
+ "lint": "eslint src --ext .ts",
25
+ "lint:fix": "eslint . --fix",
26
+ "pretype-check": "pnpm --filter @kb-labs/qa-contracts build",
27
+ "test": "vitest run --passWithNoTests",
28
+ "test:watch": "vitest",
29
+ "type-check": "tsc --noEmit"
30
+ },
20
31
  "dependencies": {
21
32
  "zod": "^3.25.76"
22
33
  },
23
34
  "devDependencies": {
35
+ "@kb-labs/devkit": "workspace:*",
24
36
  "@types/node": "^24.3.3",
25
37
  "rimraf": "^6.0.1",
26
38
  "tsup": "^8.5.0",
27
39
  "typescript": "^5.6.3",
28
- "vitest": "^3.2.6",
29
- "@kb-labs/devkit": "2.107.0"
40
+ "vitest": "^3.2.6"
30
41
  },
31
42
  "engines": {
32
43
  "node": ">=22.0.0",
33
44
  "pnpm": ">=9.0.0"
34
45
  },
35
- "sideEffects": false,
36
- "scripts": {
37
- "build": "tsup --config tsup.config.ts",
38
- "clean": "rimraf dist",
39
- "dev": "tsup --config tsup.config.ts --watch",
40
- "lint": "eslint src --ext .ts",
41
- "lint:fix": "eslint . --fix",
42
- "pretype-check": "pnpm --filter @kb-labs/qa-contracts build",
43
- "test": "vitest run --passWithNoTests",
44
- "test:watch": "vitest",
45
- "type-check": "tsc --noEmit"
46
- }
47
- }
46
+ "sideEffects": false
47
+ }