@kb-labs/qa-entry 2.14.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.
Files changed (71) hide show
  1. package/README.md +1 -0
  2. package/dist/cli/commands/baseline-status.d.ts +10 -0
  3. package/dist/cli/commands/baseline-status.js +32 -0
  4. package/dist/cli/commands/baseline-status.js.map +1 -0
  5. package/dist/cli/commands/baseline-update.d.ts +10 -0
  6. package/dist/cli/commands/baseline-update.js +33 -0
  7. package/dist/cli/commands/baseline-update.js.map +1 -0
  8. package/dist/cli/commands/flags.d.ts +106 -0
  9. package/dist/cli/commands/flags.js +99 -0
  10. package/dist/cli/commands/flags.js.map +1 -0
  11. package/dist/cli/commands/qa-history.d.ts +10 -0
  12. package/dist/cli/commands/qa-history.js +41 -0
  13. package/dist/cli/commands/qa-history.js.map +1 -0
  14. package/dist/cli/commands/qa-regressions.d.ts +10 -0
  15. package/dist/cli/commands/qa-regressions.js +33 -0
  16. package/dist/cli/commands/qa-regressions.js.map +1 -0
  17. package/dist/cli/commands/qa-run.d.ts +16 -0
  18. package/dist/cli/commands/qa-run.js +159 -0
  19. package/dist/cli/commands/qa-run.js.map +1 -0
  20. package/dist/cli/commands/qa-save.d.ts +10 -0
  21. package/dist/cli/commands/qa-save.js +69 -0
  22. package/dist/cli/commands/qa-save.js.map +1 -0
  23. package/dist/cli/commands/qa-trends.d.ts +10 -0
  24. package/dist/cli/commands/qa-trends.js +35 -0
  25. package/dist/cli/commands/qa-trends.js.map +1 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +390 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/manifest.d.ts +198 -0
  30. package/dist/manifest.js +391 -0
  31. package/dist/manifest.js.map +1 -0
  32. package/dist/rest/handlers/baseline-diff-handler.d.ts +33 -0
  33. package/dist/rest/handlers/baseline-diff-handler.js +51 -0
  34. package/dist/rest/handlers/baseline-diff-handler.js.map +1 -0
  35. package/dist/rest/handlers/baseline-handler.d.ts +19 -0
  36. package/dist/rest/handlers/baseline-handler.js +14 -0
  37. package/dist/rest/handlers/baseline-handler.js.map +1 -0
  38. package/dist/rest/handlers/baseline-update-handler.d.ts +20 -0
  39. package/dist/rest/handlers/baseline-update-handler.js +23 -0
  40. package/dist/rest/handlers/baseline-update-handler.js.map +1 -0
  41. package/dist/rest/handlers/details-handler.d.ts +61 -0
  42. package/dist/rest/handlers/details-handler.js +70 -0
  43. package/dist/rest/handlers/details-handler.js.map +1 -0
  44. package/dist/rest/handlers/error-groups-handler.d.ts +15 -0
  45. package/dist/rest/handlers/error-groups-handler.js +17 -0
  46. package/dist/rest/handlers/error-groups-handler.js.map +1 -0
  47. package/dist/rest/handlers/history-handler.d.ts +25 -0
  48. package/dist/rest/handlers/history-handler.js +22 -0
  49. package/dist/rest/handlers/history-handler.js.map +1 -0
  50. package/dist/rest/handlers/latest-handler.d.ts +22 -0
  51. package/dist/rest/handlers/latest-handler.js +17 -0
  52. package/dist/rest/handlers/latest-handler.js.map +1 -0
  53. package/dist/rest/handlers/package-timeline-handler.d.ts +26 -0
  54. package/dist/rest/handlers/package-timeline-handler.js +18 -0
  55. package/dist/rest/handlers/package-timeline-handler.js.map +1 -0
  56. package/dist/rest/handlers/regressions-handler.d.ts +16 -0
  57. package/dist/rest/handlers/regressions-handler.js +14 -0
  58. package/dist/rest/handlers/regressions-handler.js.map +1 -0
  59. package/dist/rest/handlers/run-check-handler.d.ts +20 -0
  60. package/dist/rest/handlers/run-check-handler.js +58 -0
  61. package/dist/rest/handlers/run-check-handler.js.map +1 -0
  62. package/dist/rest/handlers/run-handler.d.ts +33 -0
  63. package/dist/rest/handlers/run-handler.js +75 -0
  64. package/dist/rest/handlers/run-handler.js.map +1 -0
  65. package/dist/rest/handlers/summary-handler.d.ts +26 -0
  66. package/dist/rest/handlers/summary-handler.js +35 -0
  67. package/dist/rest/handlers/summary-handler.js.map +1 -0
  68. package/dist/rest/handlers/trends-handler.d.ts +48 -0
  69. package/dist/rest/handlers/trends-handler.js +30 -0
  70. package/dist/rest/handlers/trends-handler.js.map +1 -0
  71. package/package.json +71 -0
@@ -0,0 +1,198 @@
1
+ import * as _kb_labs_perm_presets from '@kb-labs/perm-presets';
2
+
3
+ /**
4
+ * QA Plugin Manifest V3
5
+ *
6
+ * Automated quality checks, baseline tracking, and regression detection.
7
+ */
8
+ declare const manifest: {
9
+ schema: string;
10
+ id: string;
11
+ version: string;
12
+ configSection: string;
13
+ display: {
14
+ name: string;
15
+ description: string;
16
+ tags: string[];
17
+ };
18
+ platform: {
19
+ requires: string[];
20
+ optional: string[];
21
+ };
22
+ cli: {
23
+ commands: {
24
+ id: string;
25
+ group: string;
26
+ describe: string;
27
+ longDescription: string;
28
+ handler: string;
29
+ handlerPath: string;
30
+ flags: {
31
+ name: string;
32
+ type: "string" | "boolean" | "number" | "array";
33
+ alias?: string;
34
+ default?: unknown;
35
+ description?: string;
36
+ choices?: string[];
37
+ required?: boolean;
38
+ }[];
39
+ permissions: _kb_labs_perm_presets.RuntimePermissionSpec;
40
+ }[];
41
+ };
42
+ rest: {
43
+ basePath: "/v1/plugins/qa";
44
+ routes: ({
45
+ method: string;
46
+ path: "/summary";
47
+ handler: string;
48
+ input: {
49
+ zod: string;
50
+ };
51
+ output: {
52
+ zod: string;
53
+ };
54
+ } | {
55
+ method: string;
56
+ path: "/latest";
57
+ handler: string;
58
+ input: {
59
+ zod: string;
60
+ };
61
+ output: {
62
+ zod: string;
63
+ };
64
+ } | {
65
+ method: string;
66
+ path: "/history";
67
+ handler: string;
68
+ input: {
69
+ zod: string;
70
+ };
71
+ output: {
72
+ zod: string;
73
+ };
74
+ } | {
75
+ method: string;
76
+ path: "/trends";
77
+ handler: string;
78
+ input: {
79
+ zod: string;
80
+ };
81
+ output: {
82
+ zod: string;
83
+ };
84
+ } | {
85
+ method: string;
86
+ path: "/regressions";
87
+ handler: string;
88
+ input: {
89
+ zod: string;
90
+ };
91
+ output: {
92
+ zod: string;
93
+ };
94
+ } | {
95
+ method: string;
96
+ path: "/baseline";
97
+ handler: string;
98
+ input: {
99
+ zod: string;
100
+ };
101
+ output: {
102
+ zod: string;
103
+ };
104
+ } | {
105
+ method: string;
106
+ path: "/run";
107
+ handler: string;
108
+ input: {
109
+ zod: string;
110
+ };
111
+ output: {
112
+ zod: string;
113
+ };
114
+ } | {
115
+ method: string;
116
+ path: "/details";
117
+ handler: string;
118
+ input: {
119
+ zod: string;
120
+ };
121
+ output: {
122
+ zod: string;
123
+ };
124
+ } | {
125
+ method: string;
126
+ path: "/run/check";
127
+ handler: string;
128
+ input: {
129
+ zod: string;
130
+ };
131
+ output: {
132
+ zod: string;
133
+ };
134
+ } | {
135
+ method: string;
136
+ path: "/baseline/update";
137
+ handler: string;
138
+ input: {
139
+ zod: string;
140
+ };
141
+ output: {
142
+ zod: string;
143
+ };
144
+ } | {
145
+ method: string;
146
+ path: "/baseline/diff";
147
+ handler: string;
148
+ input: {
149
+ zod: string;
150
+ };
151
+ output: {
152
+ zod: string;
153
+ };
154
+ } | {
155
+ method: string;
156
+ path: "/packages/:name/timeline";
157
+ handler: string;
158
+ input: {
159
+ zod: string;
160
+ };
161
+ output: {
162
+ zod: string;
163
+ };
164
+ } | {
165
+ method: string;
166
+ path: "/errors/groups";
167
+ handler: string;
168
+ input: {
169
+ zod: string;
170
+ };
171
+ output: {
172
+ zod: string;
173
+ };
174
+ })[];
175
+ };
176
+ studio: {
177
+ version: 2;
178
+ remoteName: string;
179
+ pages: {
180
+ id: string;
181
+ title: string;
182
+ icon: string;
183
+ route: string;
184
+ entry: string;
185
+ order: number;
186
+ }[];
187
+ menus: {
188
+ id: string;
189
+ label: string;
190
+ icon: string;
191
+ target: string;
192
+ order: number;
193
+ }[];
194
+ };
195
+ permissions: _kb_labs_perm_presets.RuntimePermissionSpec;
196
+ };
197
+
198
+ export { manifest as default, manifest };
@@ -0,0 +1,391 @@
1
+ import { combinePermissions, kbPlatformPreset, defineCommandFlags } from '@kb-labs/sdk';
2
+ import { QA_ROUTES, QA_BASE_PATH } from '@kb-labs/qa-contracts';
3
+
4
+ // src/manifest.ts
5
+
6
+ // src/cli/commands/flags.ts
7
+ var JSON_FLAG_DESCRIPTION = "Output JSON format";
8
+ var qaRunFlags = {
9
+ json: {
10
+ type: "boolean",
11
+ description: JSON_FLAG_DESCRIPTION,
12
+ default: false
13
+ },
14
+ "skip-check": {
15
+ type: "array",
16
+ description: "Skip specific check IDs (e.g. --skip-check build --skip-check lint)"
17
+ },
18
+ "no-cache": {
19
+ type: "boolean",
20
+ description: "Disable caching (force full run)",
21
+ default: false
22
+ },
23
+ all: {
24
+ type: "boolean",
25
+ description: "Run all packages, ignoring affected analysis",
26
+ default: false
27
+ },
28
+ package: {
29
+ type: "string",
30
+ description: "Filter by package name",
31
+ alias: "p"
32
+ },
33
+ repo: {
34
+ type: "string",
35
+ description: "Filter by repo name",
36
+ alias: "r"
37
+ },
38
+ scope: {
39
+ type: "string",
40
+ description: "Filter by npm scope",
41
+ alias: "s"
42
+ },
43
+ summary: {
44
+ type: "boolean",
45
+ description: "Show summary-only report (legacy flat format)",
46
+ default: false
47
+ }
48
+ };
49
+ var qaSaveFlags = {
50
+ json: {
51
+ type: "boolean",
52
+ description: JSON_FLAG_DESCRIPTION,
53
+ default: false
54
+ }
55
+ };
56
+ var qaHistoryFlags = {
57
+ json: {
58
+ type: "boolean",
59
+ description: JSON_FLAG_DESCRIPTION,
60
+ default: false
61
+ },
62
+ limit: {
63
+ type: "number",
64
+ description: "Number of entries to show",
65
+ default: 20
66
+ }
67
+ };
68
+ var qaTrendsFlags = {
69
+ json: {
70
+ type: "boolean",
71
+ description: JSON_FLAG_DESCRIPTION,
72
+ default: false
73
+ },
74
+ window: {
75
+ type: "number",
76
+ description: "Number of entries for trend window",
77
+ default: 10
78
+ }
79
+ };
80
+ var qaRegressionsFlags = {
81
+ json: {
82
+ type: "boolean",
83
+ description: JSON_FLAG_DESCRIPTION,
84
+ default: false
85
+ }
86
+ };
87
+ var baselineUpdateFlags = {
88
+ json: {
89
+ type: "boolean",
90
+ description: JSON_FLAG_DESCRIPTION,
91
+ default: false
92
+ }
93
+ };
94
+ var baselineStatusFlags = {
95
+ json: {
96
+ type: "boolean",
97
+ description: JSON_FLAG_DESCRIPTION,
98
+ default: false
99
+ }
100
+ };
101
+ var pluginPermissions = combinePermissions().with(kbPlatformPreset).withFs({
102
+ mode: "readWrite",
103
+ allow: ["**"]
104
+ }).withPlatform({
105
+ cache: ["qa:"],
106
+ analytics: true
107
+ }).withQuotas({
108
+ timeoutMs: 6e5,
109
+ memoryMb: 2048
110
+ }).build();
111
+ var manifest = {
112
+ schema: "kb.plugin/3",
113
+ id: "@kb-labs/qa",
114
+ version: "0.1.0",
115
+ configSection: "qa",
116
+ display: {
117
+ name: "QA Plugin",
118
+ description: "Automated quality checks, baseline tracking, and regression detection",
119
+ tags: ["qa", "quality", "baseline", "regression", "testing"]
120
+ },
121
+ platform: {
122
+ requires: ["storage"],
123
+ optional: ["cache", "analytics", "logger"]
124
+ },
125
+ cli: {
126
+ commands: [
127
+ {
128
+ id: "qa:run",
129
+ group: "qa",
130
+ describe: "Run all QA checks (build, lint, types, tests)",
131
+ longDescription: "Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. Compares with baseline if available. Supports incremental builds and package filtering.",
132
+ handler: "./cli/commands/qa-run.js#default",
133
+ handlerPath: "./cli/commands/qa-run.js",
134
+ flags: defineCommandFlags(qaRunFlags),
135
+ permissions: pluginPermissions
136
+ },
137
+ {
138
+ id: "qa:save",
139
+ group: "qa",
140
+ describe: "Run QA checks and save results to history",
141
+ longDescription: "Runs all QA checks and saves the results as a history entry. History is stored in .kb/qa/history.json (max 50 entries).",
142
+ handler: "./cli/commands/qa-save.js#default",
143
+ handlerPath: "./cli/commands/qa-save.js",
144
+ flags: defineCommandFlags(qaSaveFlags),
145
+ permissions: pluginPermissions
146
+ },
147
+ {
148
+ id: "qa:history",
149
+ group: "qa",
150
+ describe: "Show QA run history",
151
+ longDescription: "Displays the QA run history with pass/fail status for each check type.",
152
+ handler: "./cli/commands/qa-history.js#default",
153
+ handlerPath: "./cli/commands/qa-history.js",
154
+ flags: defineCommandFlags(qaHistoryFlags),
155
+ permissions: pluginPermissions
156
+ },
157
+ {
158
+ id: "qa:trends",
159
+ group: "qa",
160
+ describe: "Show QA quality trends over time",
161
+ longDescription: "Analyzes quality trends by comparing failure counts over a sliding window of history entries.",
162
+ handler: "./cli/commands/qa-trends.js#default",
163
+ handlerPath: "./cli/commands/qa-trends.js",
164
+ flags: defineCommandFlags(qaTrendsFlags),
165
+ permissions: pluginPermissions
166
+ },
167
+ {
168
+ id: "qa:regressions",
169
+ group: "qa",
170
+ describe: "Detect regressions since last QA save",
171
+ longDescription: "Compares the last two history entries to detect new failures. Exits with code 1 if regressions are found. Use before merging.",
172
+ handler: "./cli/commands/qa-regressions.js#default",
173
+ handlerPath: "./cli/commands/qa-regressions.js",
174
+ flags: defineCommandFlags(qaRegressionsFlags),
175
+ permissions: pluginPermissions
176
+ },
177
+ {
178
+ id: "baseline:update",
179
+ group: "qa",
180
+ describe: "Run full QA and save as new baseline",
181
+ longDescription: "Runs all QA checks and saves the results as the current baseline. Future qa:run calls will compare against this baseline.",
182
+ handler: "./cli/commands/baseline-update.js#default",
183
+ handlerPath: "./cli/commands/baseline-update.js",
184
+ flags: defineCommandFlags(baselineUpdateFlags),
185
+ permissions: pluginPermissions
186
+ },
187
+ {
188
+ id: "baseline:status",
189
+ group: "qa",
190
+ describe: "Show current baseline status",
191
+ longDescription: "Displays the current baseline snapshot with pass/fail counts per check type.",
192
+ handler: "./cli/commands/baseline-status.js#default",
193
+ handlerPath: "./cli/commands/baseline-status.js",
194
+ flags: defineCommandFlags(baselineStatusFlags),
195
+ permissions: pluginPermissions
196
+ }
197
+ ]
198
+ },
199
+ // REST API routes
200
+ rest: {
201
+ basePath: QA_BASE_PATH,
202
+ routes: [
203
+ // GET /summary
204
+ {
205
+ method: "GET",
206
+ path: QA_ROUTES.SUMMARY,
207
+ handler: "./rest/handlers/summary-handler.js#default",
208
+ input: {
209
+ zod: "@kb-labs/qa-contracts#QASummaryRequestSchema"
210
+ },
211
+ output: {
212
+ zod: "@kb-labs/qa-contracts#QASummaryResponseSchema"
213
+ }
214
+ },
215
+ // GET /latest
216
+ {
217
+ method: "GET",
218
+ path: QA_ROUTES.LATEST,
219
+ handler: "./rest/handlers/latest-handler.js#default",
220
+ input: {
221
+ zod: "@kb-labs/qa-contracts#QALatestRequestSchema"
222
+ },
223
+ output: {
224
+ zod: "@kb-labs/qa-contracts#QALatestResponseSchema"
225
+ }
226
+ },
227
+ // GET /history
228
+ {
229
+ method: "GET",
230
+ path: QA_ROUTES.HISTORY,
231
+ handler: "./rest/handlers/history-handler.js#default",
232
+ input: {
233
+ zod: "@kb-labs/qa-contracts#QAHistoryRequestSchema"
234
+ },
235
+ output: {
236
+ zod: "@kb-labs/qa-contracts#QAHistoryResponseSchema"
237
+ }
238
+ },
239
+ // GET /trends
240
+ {
241
+ method: "GET",
242
+ path: QA_ROUTES.TRENDS,
243
+ handler: "./rest/handlers/trends-handler.js#default",
244
+ input: {
245
+ zod: "@kb-labs/qa-contracts#QATrendsRequestSchema"
246
+ },
247
+ output: {
248
+ zod: "@kb-labs/qa-contracts#QATrendsResponseSchema"
249
+ }
250
+ },
251
+ // GET /regressions
252
+ {
253
+ method: "GET",
254
+ path: QA_ROUTES.REGRESSIONS,
255
+ handler: "./rest/handlers/regressions-handler.js#default",
256
+ input: {
257
+ zod: "@kb-labs/qa-contracts#QARegressionsRequestSchema"
258
+ },
259
+ output: {
260
+ zod: "@kb-labs/qa-contracts#QARegressionsResponseSchema"
261
+ }
262
+ },
263
+ // GET /baseline
264
+ {
265
+ method: "GET",
266
+ path: QA_ROUTES.BASELINE,
267
+ handler: "./rest/handlers/baseline-handler.js#default",
268
+ input: {
269
+ zod: "@kb-labs/qa-contracts#QABaselineRequestSchema"
270
+ },
271
+ output: {
272
+ zod: "@kb-labs/qa-contracts#QABaselineResponseSchema"
273
+ }
274
+ },
275
+ // POST /run
276
+ {
277
+ method: "POST",
278
+ path: QA_ROUTES.RUN,
279
+ handler: "./rest/handlers/run-handler.js#default",
280
+ input: {
281
+ zod: "@kb-labs/qa-contracts#QARunRequestSchema"
282
+ },
283
+ output: {
284
+ zod: "@kb-labs/qa-contracts#QARunResponseSchema"
285
+ }
286
+ },
287
+ // GET /details — per-package details with error text
288
+ {
289
+ method: "GET",
290
+ path: QA_ROUTES.DETAILS,
291
+ handler: "./rest/handlers/details-handler.js#default",
292
+ input: {
293
+ zod: "@kb-labs/qa-contracts#QADetailsRequestSchema"
294
+ },
295
+ output: {
296
+ zod: "@kb-labs/qa-contracts#QADetailsResponseSchema"
297
+ }
298
+ },
299
+ // POST /run/check — run a single check type
300
+ {
301
+ method: "POST",
302
+ path: QA_ROUTES.RUN_CHECK,
303
+ handler: "./rest/handlers/run-check-handler.js#default",
304
+ input: {
305
+ zod: "@kb-labs/qa-contracts#QARunCheckRequestSchema"
306
+ },
307
+ output: {
308
+ zod: "@kb-labs/qa-contracts#QARunCheckResponseSchema"
309
+ }
310
+ },
311
+ // POST /baseline/update — update baseline from last run
312
+ {
313
+ method: "POST",
314
+ path: QA_ROUTES.BASELINE_UPDATE,
315
+ handler: "./rest/handlers/baseline-update-handler.js#default",
316
+ input: {
317
+ zod: "@kb-labs/qa-contracts#QABaselineUpdateRequestSchema"
318
+ },
319
+ output: {
320
+ zod: "@kb-labs/qa-contracts#QABaselineUpdateResponseSchema"
321
+ }
322
+ },
323
+ // GET /baseline/diff — diff current state vs baseline
324
+ {
325
+ method: "GET",
326
+ path: QA_ROUTES.BASELINE_DIFF,
327
+ handler: "./rest/handlers/baseline-diff-handler.js#default",
328
+ input: {
329
+ zod: "@kb-labs/qa-contracts#QABaselineDiffRequestSchema"
330
+ },
331
+ output: {
332
+ zod: "@kb-labs/qa-contracts#QABaselineDiffResponseSchema"
333
+ }
334
+ },
335
+ // GET /packages/:name/timeline — per-package QA timeline
336
+ {
337
+ method: "GET",
338
+ path: QA_ROUTES.PACKAGE_TIMELINE,
339
+ handler: "./rest/handlers/package-timeline-handler.js#default",
340
+ input: {
341
+ zod: "@kb-labs/qa-contracts#QAPackageTimelineRequestSchema"
342
+ },
343
+ output: {
344
+ zod: "@kb-labs/qa-contracts#QAPackageTimelineResponseSchema"
345
+ }
346
+ },
347
+ // GET /errors/groups — grouped errors by pattern
348
+ {
349
+ method: "GET",
350
+ path: QA_ROUTES.ERROR_GROUPS,
351
+ handler: "./rest/handlers/error-groups-handler.js#default",
352
+ input: {
353
+ zod: "@kb-labs/qa-contracts#QAErrorGroupsRequestSchema"
354
+ },
355
+ output: {
356
+ zod: "@kb-labs/qa-contracts#QAErrorGroupsResponseSchema"
357
+ }
358
+ }
359
+ ]
360
+ },
361
+ // Studio V2 — Module Federation pages
362
+ studio: {
363
+ version: 2,
364
+ remoteName: "qaPlugin",
365
+ pages: [
366
+ {
367
+ id: "qa.overview",
368
+ title: "QA",
369
+ icon: "ExperimentOutlined",
370
+ route: "/p/qa",
371
+ entry: "./QADashboard",
372
+ order: 1
373
+ }
374
+ ],
375
+ menus: [
376
+ {
377
+ id: "qa",
378
+ label: "QA",
379
+ icon: "ExperimentOutlined",
380
+ target: "qa.overview",
381
+ order: 50
382
+ }
383
+ ]
384
+ },
385
+ permissions: pluginPermissions
386
+ };
387
+ var manifest_default = manifest;
388
+
389
+ export { manifest_default as default, manifest };
390
+ //# sourceMappingURL=manifest.js.map
391
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * QA Plugin CLI flag definitions.\n * DRY: Define once, use in manifest and command handlers.\n */\n\nconst JSON_FLAG_DESCRIPTION = 'Output JSON format';\n\nexport const qaRunFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n 'skip-check': {\n type: 'array',\n description: 'Skip specific check IDs (e.g. --skip-check build --skip-check lint)',\n },\n 'no-cache': {\n type: 'boolean',\n description: 'Disable caching (force full run)',\n default: false,\n },\n all: {\n type: 'boolean',\n description: 'Run all packages, ignoring affected analysis',\n default: false,\n },\n package: {\n type: 'string',\n description: 'Filter by package name',\n alias: 'p',\n },\n repo: {\n type: 'string',\n description: 'Filter by repo name',\n alias: 'r',\n },\n scope: {\n type: 'string',\n description: 'Filter by npm scope',\n alias: 's',\n },\n summary: {\n type: 'boolean',\n description: 'Show summary-only report (legacy flat format)',\n default: false,\n },\n} as const;\n\nexport type QARunFlags = typeof qaRunFlags;\n\nexport const qaSaveFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QASaveFlags = typeof qaSaveFlags;\n\nexport const qaHistoryFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n limit: {\n type: 'number',\n description: 'Number of entries to show',\n default: 20,\n },\n} as const;\n\nexport type QAHistoryFlags = typeof qaHistoryFlags;\n\nexport const qaTrendsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n window: {\n type: 'number',\n description: 'Number of entries for trend window',\n default: 10,\n },\n} as const;\n\nexport type QATrendsFlags = typeof qaTrendsFlags;\n\nexport const qaRegressionsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QARegressionsFlags = typeof qaRegressionsFlags;\n\nexport const baselineUpdateFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineUpdateFlags = typeof baselineUpdateFlags;\n\nexport const baselineStatusFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineStatusFlags = typeof baselineStatusFlags;\n","/**\n * QA Plugin Manifest V3\n *\n * Automated quality checks, baseline tracking, and regression detection.\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaSaveFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n} from './cli/commands/flags.js';\nimport {\n QA_BASE_PATH,\n QA_ROUTES,\n} from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['qa:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000,\n memoryMb: 2048,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/qa',\n version: '0.1.0',\n\n configSection: 'qa',\n\n display: {\n name: 'QA Plugin',\n description: 'Automated quality checks, baseline tracking, and regression detection',\n tags: ['qa', 'quality', 'baseline', 'regression', 'testing'],\n },\n\n platform: {\n requires: ['storage'],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n commands: [\n {\n id: 'qa:run',\n group: 'qa',\n describe: 'Run all QA checks (build, lint, types, tests)',\n longDescription:\n 'Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. ' +\n 'Compares with baseline if available. Supports incremental builds and package filtering.',\n handler: './cli/commands/qa-run.js#default',\n handlerPath: './cli/commands/qa-run.js',\n flags: defineCommandFlags(qaRunFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:save',\n group: 'qa',\n describe: 'Run QA checks and save results to history',\n longDescription:\n 'Runs all QA checks and saves the results as a history entry. ' +\n 'History is stored in .kb/qa/history.json (max 50 entries).',\n handler: './cli/commands/qa-save.js#default',\n handlerPath: './cli/commands/qa-save.js',\n flags: defineCommandFlags(qaSaveFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:history',\n group: 'qa',\n describe: 'Show QA run history',\n longDescription: 'Displays the QA run history with pass/fail status for each check type.',\n handler: './cli/commands/qa-history.js#default',\n handlerPath: './cli/commands/qa-history.js',\n flags: defineCommandFlags(qaHistoryFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:trends',\n group: 'qa',\n describe: 'Show QA quality trends over time',\n longDescription:\n 'Analyzes quality trends by comparing failure counts over a sliding window of history entries.',\n handler: './cli/commands/qa-trends.js#default',\n handlerPath: './cli/commands/qa-trends.js',\n flags: defineCommandFlags(qaTrendsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:regressions',\n group: 'qa',\n describe: 'Detect regressions since last QA save',\n longDescription:\n 'Compares the last two history entries to detect new failures. ' +\n 'Exits with code 1 if regressions are found. Use before merging.',\n handler: './cli/commands/qa-regressions.js#default',\n handlerPath: './cli/commands/qa-regressions.js',\n flags: defineCommandFlags(qaRegressionsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:update',\n group: 'qa',\n describe: 'Run full QA and save as new baseline',\n longDescription:\n 'Runs all QA checks and saves the results as the current baseline. ' +\n 'Future qa:run calls will compare against this baseline.',\n handler: './cli/commands/baseline-update.js#default',\n handlerPath: './cli/commands/baseline-update.js',\n flags: defineCommandFlags(baselineUpdateFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:status',\n group: 'qa',\n describe: 'Show current baseline status',\n longDescription: 'Displays the current baseline snapshot with pass/fail counts per check type.',\n handler: './cli/commands/baseline-status.js#default',\n handlerPath: './cli/commands/baseline-status.js',\n flags: defineCommandFlags(baselineStatusFlags),\n permissions: pluginPermissions,\n },\n ],\n },\n\n // REST API routes\n rest: {\n basePath: QA_BASE_PATH,\n routes: [\n // GET /summary\n {\n method: 'GET',\n path: QA_ROUTES.SUMMARY,\n handler: './rest/handlers/summary-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QASummaryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QASummaryResponseSchema',\n },\n },\n // GET /latest\n {\n method: 'GET',\n path: QA_ROUTES.LATEST,\n handler: './rest/handlers/latest-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QALatestRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QALatestResponseSchema',\n },\n },\n // GET /history\n {\n method: 'GET',\n path: QA_ROUTES.HISTORY,\n handler: './rest/handlers/history-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAHistoryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAHistoryResponseSchema',\n },\n },\n // GET /trends\n {\n method: 'GET',\n path: QA_ROUTES.TRENDS,\n handler: './rest/handlers/trends-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QATrendsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QATrendsResponseSchema',\n },\n },\n // GET /regressions\n {\n method: 'GET',\n path: QA_ROUTES.REGRESSIONS,\n handler: './rest/handlers/regressions-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARegressionsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARegressionsResponseSchema',\n },\n },\n // GET /baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE,\n handler: './rest/handlers/baseline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineResponseSchema',\n },\n },\n // POST /run\n {\n method: 'POST',\n path: QA_ROUTES.RUN,\n handler: './rest/handlers/run-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunResponseSchema',\n },\n },\n // GET /details — per-package details with error text\n {\n method: 'GET',\n path: QA_ROUTES.DETAILS,\n handler: './rest/handlers/details-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QADetailsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QADetailsResponseSchema',\n },\n },\n // POST /run/check — run a single check type\n {\n method: 'POST',\n path: QA_ROUTES.RUN_CHECK,\n handler: './rest/handlers/run-check-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunCheckRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunCheckResponseSchema',\n },\n },\n // POST /baseline/update — update baseline from last run\n {\n method: 'POST',\n path: QA_ROUTES.BASELINE_UPDATE,\n handler: './rest/handlers/baseline-update-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateResponseSchema',\n },\n },\n // GET /baseline/diff — diff current state vs baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE_DIFF,\n handler: './rest/handlers/baseline-diff-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffResponseSchema',\n },\n },\n // GET /packages/:name/timeline — per-package QA timeline\n {\n method: 'GET',\n path: QA_ROUTES.PACKAGE_TIMELINE,\n handler: './rest/handlers/package-timeline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineResponseSchema',\n },\n },\n // GET /errors/groups — grouped errors by pattern\n {\n method: 'GET',\n path: QA_ROUTES.ERROR_GROUPS,\n handler: './rest/handlers/error-groups-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsResponseSchema',\n },\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'qaPlugin',\n pages: [\n {\n id: 'qa.overview',\n title: 'QA',\n icon: 'ExperimentOutlined',\n route: '/p/qa',\n entry: './QADashboard',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'qa',\n label: 'QA',\n icon: 'ExperimentOutlined',\n target: 'qa.overview',\n order: 50,\n },\n ],\n },\n\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
@@ -0,0 +1,33 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { RestInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{}, unknown, unknown>, {
5
+ current: {
6
+ timestamp: string;
7
+ summary: Record<string, {
8
+ passed: number;
9
+ failed: number;
10
+ }>;
11
+ } | null;
12
+ baseline: {
13
+ git: {
14
+ commit: string;
15
+ branch: string;
16
+ };
17
+ timestamp: string;
18
+ results: Record<string, {
19
+ passed: number;
20
+ failed: number;
21
+ failedPackages: string[];
22
+ }>;
23
+ } | null;
24
+ hasDiff: boolean;
25
+ diff: Record<string, {
26
+ delta: number;
27
+ newFailures: string[];
28
+ fixed: string[];
29
+ stillFailing: string[];
30
+ }>;
31
+ }>;
32
+
33
+ export { _default as default };