@kb-labs/qa-entry 2.94.0 → 2.96.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 (112) hide show
  1. package/dist/cli/commands/baseline-diff.d.ts +14 -0
  2. package/dist/cli/commands/baseline-diff.js +40 -0
  3. package/dist/cli/commands/baseline-diff.js.map +1 -0
  4. package/dist/cli/commands/baseline-status.d.ts +10 -5
  5. package/dist/cli/commands/baseline-status.js +14 -17
  6. package/dist/cli/commands/baseline-status.js.map +1 -1
  7. package/dist/cli/commands/baseline-update.d.ts +10 -5
  8. package/dist/cli/commands/baseline-update.js +26 -18
  9. package/dist/cli/commands/baseline-update.js.map +1 -1
  10. package/dist/cli/commands/flags.d.ts +117 -132
  11. package/dist/cli/commands/flags.js +65 -79
  12. package/dist/cli/commands/flags.js.map +1 -1
  13. package/dist/cli/commands/qa-check.d.ts +13 -34
  14. package/dist/cli/commands/qa-check.js +26 -106
  15. package/dist/cli/commands/qa-check.js.map +1 -1
  16. package/dist/cli/commands/qa-gate.d.ts +19 -0
  17. package/dist/cli/commands/qa-gate.js +36 -0
  18. package/dist/cli/commands/qa-gate.js.map +1 -0
  19. package/dist/cli/commands/qa-history.d.ts +15 -5
  20. package/dist/cli/commands/qa-history.js +13 -24
  21. package/dist/cli/commands/qa-history.js.map +1 -1
  22. package/dist/cli/commands/qa-regressions.d.ts +10 -5
  23. package/dist/cli/commands/qa-regressions.js +15 -18
  24. package/dist/cli/commands/qa-regressions.js.map +1 -1
  25. package/dist/cli/commands/qa-run.d.ts +18 -11
  26. package/dist/cli/commands/qa-run.js +28 -141
  27. package/dist/cli/commands/qa-run.js.map +1 -1
  28. package/dist/cli/commands/qa-stats.d.ts +19 -0
  29. package/dist/cli/commands/qa-stats.js +43 -0
  30. package/dist/cli/commands/qa-stats.js.map +1 -0
  31. package/dist/cli/commands/qa-trends.d.ts +15 -5
  32. package/dist/cli/commands/qa-trends.js +15 -18
  33. package/dist/cli/commands/qa-trends.js.map +1 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +143 -291
  36. package/dist/index.js.map +1 -1
  37. package/dist/manifest.d.ts +74 -106
  38. package/dist/manifest.js +143 -291
  39. package/dist/manifest.js.map +1 -1
  40. package/dist/rest/handlers/baseline-diff-handler.d.ts +7 -27
  41. package/dist/rest/handlers/baseline-diff-handler.js +15 -41
  42. package/dist/rest/handlers/baseline-diff-handler.js.map +1 -1
  43. package/dist/rest/handlers/baseline-handler.d.ts +3 -13
  44. package/dist/rest/handlers/baseline-handler.js +10 -5
  45. package/dist/rest/handlers/baseline-handler.js.map +1 -1
  46. package/dist/rest/handlers/baseline-update-handler.d.ts +4 -14
  47. package/dist/rest/handlers/baseline-update-handler.js +15 -13
  48. package/dist/rest/handlers/baseline-update-handler.js.map +1 -1
  49. package/dist/rest/handlers/check-handler.d.ts +15 -0
  50. package/dist/rest/handlers/check-handler.js +28 -0
  51. package/dist/rest/handlers/check-handler.js.map +1 -0
  52. package/dist/rest/handlers/gate-handler.d.ts +13 -0
  53. package/dist/rest/handlers/gate-handler.js +28 -0
  54. package/dist/rest/handlers/gate-handler.js.map +1 -0
  55. package/dist/rest/handlers/history-handler.d.ts +3 -16
  56. package/dist/rest/handlers/history-handler.js +10 -11
  57. package/dist/rest/handlers/history-handler.js.map +1 -1
  58. package/dist/rest/handlers/package-timeline-handler.d.ts +5 -20
  59. package/dist/rest/handlers/package-timeline-handler.js +11 -7
  60. package/dist/rest/handlers/package-timeline-handler.js.map +1 -1
  61. package/dist/rest/handlers/regressions-handler.d.ts +2 -11
  62. package/dist/rest/handlers/regressions-handler.js +11 -5
  63. package/dist/rest/handlers/regressions-handler.js.map +1 -1
  64. package/dist/rest/handlers/run-handler.d.ts +10 -27
  65. package/dist/rest/handlers/run-handler.js +18 -63
  66. package/dist/rest/handlers/run-handler.js.map +1 -1
  67. package/dist/rest/handlers/{error-groups-handler.d.ts → stats-handler.d.ts} +5 -9
  68. package/dist/rest/handlers/stats-handler.js +21 -0
  69. package/dist/rest/handlers/stats-handler.js.map +1 -0
  70. package/dist/rest/handlers/summary-handler.d.ts +7 -20
  71. package/dist/rest/handlers/summary-handler.js +16 -26
  72. package/dist/rest/handlers/summary-handler.js.map +1 -1
  73. package/dist/rest/handlers/tasks-handler.d.ts +9 -0
  74. package/dist/rest/handlers/tasks-handler.js +38 -0
  75. package/dist/rest/handlers/tasks-handler.js.map +1 -0
  76. package/dist/rest/handlers/trends-handler.d.ts +4 -43
  77. package/dist/rest/handlers/trends-handler.js +11 -18
  78. package/dist/rest/handlers/trends-handler.js.map +1 -1
  79. package/dist/widgets/117.js +24 -1
  80. package/dist/widgets/{919.js → 215.js} +1 -1
  81. package/dist/widgets/370.js +1 -1
  82. package/dist/widgets/{805.js → 46.js} +92 -92
  83. package/dist/widgets/50.js +1 -1
  84. package/dist/widgets/62.js +96 -0
  85. package/dist/widgets/648.js +1 -0
  86. package/dist/widgets/669.js +1 -1
  87. package/dist/widgets/775.js +1 -1
  88. package/dist/widgets/78.js +1 -0
  89. package/dist/widgets/823.js +1 -0
  90. package/dist/widgets/968.js +2 -2
  91. package/dist/widgets/__federation_expose_QADashboard.js +1 -1
  92. package/dist/widgets/mf-manifest.json +32 -31
  93. package/dist/widgets/mf-stats.json +32 -31
  94. package/dist/widgets/remoteEntry.js +2 -2
  95. package/package.json +11 -8
  96. package/dist/cli/commands/qa-save.d.ts +0 -10
  97. package/dist/cli/commands/qa-save.js +0 -69
  98. package/dist/cli/commands/qa-save.js.map +0 -1
  99. package/dist/rest/handlers/details-handler.d.ts +0 -61
  100. package/dist/rest/handlers/details-handler.js +0 -70
  101. package/dist/rest/handlers/details-handler.js.map +0 -1
  102. package/dist/rest/handlers/error-groups-handler.js +0 -17
  103. package/dist/rest/handlers/error-groups-handler.js.map +0 -1
  104. package/dist/rest/handlers/latest-handler.d.ts +0 -22
  105. package/dist/rest/handlers/latest-handler.js +0 -17
  106. package/dist/rest/handlers/latest-handler.js.map +0 -1
  107. package/dist/rest/handlers/run-check-handler.d.ts +0 -20
  108. package/dist/rest/handlers/run-check-handler.js +0 -58
  109. package/dist/rest/handlers/run-check-handler.js.map +0 -1
  110. package/dist/widgets/418.js +0 -38
  111. package/dist/widgets/451.js +0 -1
  112. package/dist/widgets/694.js +0 -1
package/dist/index.js CHANGED
@@ -1,138 +1,121 @@
1
- import { combinePermissions, kbPlatformPreset, defineCommandFlags } from '@kb-labs/sdk';
1
+ import { defineFlags, combinePermissions, kbPlatformPreset, defineCommandFlags } from '@kb-labs/sdk';
2
2
  import { QA_ROUTES, QA_BASE_PATH } from '@kb-labs/qa-contracts';
3
3
 
4
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)"
5
+ var qaRunFlags = defineFlags({
6
+ tasks: {
7
+ type: "string",
8
+ description: "Comma-separated tasks to run (default: build,lint,type-check,test)"
17
9
  },
18
- "no-cache": {
10
+ save: {
19
11
  type: "boolean",
20
- description: "Disable caching (force full run)",
21
- default: false
12
+ description: "Save snapshot to history",
13
+ default: true
22
14
  },
23
- all: {
15
+ json: {
24
16
  type: "boolean",
25
- description: "Run all packages, ignoring affected analysis",
17
+ description: "Output JSON",
26
18
  default: false
19
+ }
20
+ });
21
+ var qaCheckFlags = defineFlags({
22
+ save: {
23
+ type: "boolean",
24
+ description: "Save snapshot to history",
25
+ default: true
27
26
  },
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: {
27
+ json: {
44
28
  type: "boolean",
45
- description: "Show summary-only report (legacy flat format)",
29
+ description: "Output JSON",
46
30
  default: false
47
31
  }
48
- };
49
- var qaSaveFlags = {
32
+ });
33
+ var qaStatsFlags = defineFlags({
34
+ save: {
35
+ type: "boolean",
36
+ description: "Save snapshot to history",
37
+ default: true
38
+ },
50
39
  json: {
51
40
  type: "boolean",
52
- description: JSON_FLAG_DESCRIPTION,
41
+ description: "Output JSON",
53
42
  default: false
54
43
  }
55
- };
56
- var qaHistoryFlags = {
57
- json: {
44
+ });
45
+ var qaGateFlags = defineFlags({
46
+ save: {
58
47
  type: "boolean",
59
- description: JSON_FLAG_DESCRIPTION,
48
+ description: "Save snapshot to history",
60
49
  default: false
61
50
  },
51
+ json: {
52
+ type: "boolean",
53
+ description: "Output JSON",
54
+ default: false
55
+ }
56
+ });
57
+ var qaHistoryFlags = defineFlags({
62
58
  limit: {
63
59
  type: "number",
64
- description: "Number of entries to show",
60
+ description: "Max entries to show",
65
61
  default: 20
66
- }
67
- };
68
- var qaTrendsFlags = {
62
+ },
69
63
  json: {
70
64
  type: "boolean",
71
- description: JSON_FLAG_DESCRIPTION,
65
+ description: "Output JSON",
72
66
  default: false
73
- },
67
+ }
68
+ });
69
+ var qaTrendsFlags = defineFlags({
74
70
  window: {
75
71
  type: "number",
76
- description: "Number of entries for trend window",
72
+ description: "Number of history entries to analyze",
77
73
  default: 10
78
- }
79
- };
80
- var qaRegressionsFlags = {
74
+ },
81
75
  json: {
82
76
  type: "boolean",
83
- description: JSON_FLAG_DESCRIPTION,
77
+ description: "Output JSON",
84
78
  default: false
85
79
  }
86
- };
87
- var baselineUpdateFlags = {
80
+ });
81
+ var qaRegressionsFlags = defineFlags({
88
82
  json: {
89
83
  type: "boolean",
90
- description: JSON_FLAG_DESCRIPTION,
84
+ description: "Output JSON",
91
85
  default: false
92
86
  }
93
- };
94
- var baselineStatusFlags = {
87
+ });
88
+ var baselineUpdateFlags = defineFlags({
95
89
  json: {
96
90
  type: "boolean",
97
- description: JSON_FLAG_DESCRIPTION,
91
+ description: "Output JSON",
98
92
  default: false
99
93
  }
100
- };
101
- var qaCheckFlags = {
102
- id: {
103
- type: "string",
104
- description: "Check ID to run (must match a check in qa.checks config)",
105
- demandOption: true
106
- },
107
- base: {
108
- type: "string",
109
- description: "Base branch/commit for diff strategies (diffOnly, newFiles). Default: main",
110
- default: "main"
111
- },
112
- context: {
113
- type: "string",
114
- description: 'JSON context to attach to history entry (e.g. {"taskId":"123"})'
115
- },
94
+ });
95
+ var baselineStatusFlags = defineFlags({
116
96
  json: {
117
97
  type: "boolean",
118
- description: JSON_FLAG_DESCRIPTION,
98
+ description: "Output JSON",
119
99
  default: false
120
- },
121
- save: {
100
+ }
101
+ });
102
+ var baselineDiffFlags = defineFlags({
103
+ json: {
122
104
  type: "boolean",
123
- description: "Save result to history after running (default: true)",
124
- default: true
105
+ description: "Output JSON",
106
+ default: false
125
107
  }
126
- };
108
+ });
127
109
  var pluginPermissions = combinePermissions().with(kbPlatformPreset).withFs({
128
110
  mode: "readWrite",
129
111
  allow: ["**"]
112
+ }).withShell({
113
+ allow: ["kb-devkit", "git"]
130
114
  }).withPlatform({
131
- cache: ["qa:"],
132
115
  analytics: true
133
116
  }).withQuotas({
134
117
  timeoutMs: 6e5,
135
- memoryMb: 2048
118
+ memoryMb: 512
136
119
  }).build();
137
120
  var manifest = {
138
121
  schema: "kb.plugin/3",
@@ -141,260 +124,129 @@ var manifest = {
141
124
  configSection: "qa",
142
125
  display: {
143
126
  name: "QA Plugin",
144
- description: "Automated quality checks, baseline tracking, and regression detection",
145
- tags: ["qa", "quality", "baseline", "regression", "testing"]
127
+ description: "Smart wrapper around kb-devkit \u2014 history, trends, baseline diffing, and health UI",
128
+ tags: ["qa", "quality", "baseline", "regression", "devkit"]
146
129
  },
147
130
  platform: {
148
- requires: ["storage"],
131
+ requires: [],
149
132
  optional: ["cache", "analytics", "logger"]
150
133
  },
151
134
  cli: {
135
+ groupMeta: [
136
+ { path: "qa", describe: "Quality assurance powered by kb-devkit" },
137
+ { path: "qa baseline", describe: "Baseline management" }
138
+ ],
152
139
  commands: [
153
140
  {
154
- id: "run",
155
- group: "qa",
156
- describe: "Run all QA checks (build, lint, types, tests)",
157
- 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.",
141
+ path: "qa run",
142
+ category: "Run",
143
+ describe: "Run devkit tasks and record results",
144
+ operationType: "execute",
158
145
  handler: "./cli/commands/qa-run.js#default",
159
- handlerPath: "./cli/commands/qa-run.js",
160
- flags: defineCommandFlags(qaRunFlags),
146
+ flags: defineCommandFlags(qaRunFlags.schema),
161
147
  permissions: pluginPermissions
162
148
  },
163
149
  {
164
- id: "check",
165
- group: "qa",
166
- describe: "Run a single QA check atomically",
167
- longDescription: "Runs one check by ID, optionally saves to history with caller context. Designed for workflow steps: exit 0 = pass, exit 1 = blocker failed. Supports diffOnly/newFiles strategies and structured JSON output for agents.",
150
+ path: "qa check",
151
+ category: "Run",
152
+ describe: "Run devkit structural checks",
153
+ operationType: "analyze",
168
154
  handler: "./cli/commands/qa-check.js#default",
169
- handlerPath: "./cli/commands/qa-check.js",
170
- flags: defineCommandFlags(qaCheckFlags),
155
+ flags: defineCommandFlags(qaCheckFlags.schema),
156
+ permissions: pluginPermissions
157
+ },
158
+ {
159
+ path: "qa stats",
160
+ category: "Run",
161
+ describe: "Show devkit health score and category breakdown",
162
+ operationType: "read",
163
+ handler: "./cli/commands/qa-stats.js#default",
164
+ flags: defineCommandFlags(qaStatsFlags.schema),
171
165
  permissions: pluginPermissions
172
166
  },
173
167
  {
174
- id: "save",
175
- group: "qa",
176
- describe: "Run QA checks and save results to history",
177
- longDescription: "Runs all QA checks and saves the results as a history entry. History is stored in .kb/qa/history.json (max 50 entries).",
178
- handler: "./cli/commands/qa-save.js#default",
179
- handlerPath: "./cli/commands/qa-save.js",
180
- flags: defineCommandFlags(qaSaveFlags),
168
+ path: "qa gate",
169
+ category: "Run",
170
+ describe: "Run pre-commit gate check (exits 1 if violations found)",
171
+ operationType: "analyze",
172
+ handler: "./cli/commands/qa-gate.js#default",
173
+ flags: defineCommandFlags(qaGateFlags.schema),
181
174
  permissions: pluginPermissions
182
175
  },
183
176
  {
184
- id: "history",
185
- group: "qa",
177
+ path: "qa history",
178
+ category: "History",
186
179
  describe: "Show QA run history",
187
- longDescription: "Displays the QA run history with pass/fail status for each check type.",
180
+ operationType: "read",
188
181
  handler: "./cli/commands/qa-history.js#default",
189
- handlerPath: "./cli/commands/qa-history.js",
190
- flags: defineCommandFlags(qaHistoryFlags),
182
+ flags: defineCommandFlags(qaHistoryFlags.schema),
191
183
  permissions: pluginPermissions
192
184
  },
193
185
  {
194
- id: "trends",
195
- group: "qa",
186
+ path: "qa trends",
187
+ category: "History",
196
188
  describe: "Show QA quality trends over time",
197
- longDescription: "Analyzes quality trends by comparing failure counts over a sliding window of history entries.",
189
+ operationType: "read",
198
190
  handler: "./cli/commands/qa-trends.js#default",
199
- handlerPath: "./cli/commands/qa-trends.js",
200
- flags: defineCommandFlags(qaTrendsFlags),
191
+ flags: defineCommandFlags(qaTrendsFlags.schema),
201
192
  permissions: pluginPermissions
202
193
  },
203
194
  {
204
- id: "regressions",
205
- group: "qa",
206
- describe: "Detect regressions since last QA save",
207
- longDescription: "Compares the last two history entries to detect new failures. Exits with code 1 if regressions are found. Use before merging.",
195
+ path: "qa regressions",
196
+ category: "History",
197
+ describe: "Detect regressions since last run",
198
+ operationType: "read",
208
199
  handler: "./cli/commands/qa-regressions.js#default",
209
- handlerPath: "./cli/commands/qa-regressions.js",
210
- flags: defineCommandFlags(qaRegressionsFlags),
200
+ flags: defineCommandFlags(qaRegressionsFlags.schema),
211
201
  permissions: pluginPermissions
212
202
  },
213
203
  {
214
- id: "baseline:update",
215
- group: "qa",
216
- describe: "Run full QA and save as new baseline",
217
- longDescription: "Runs all QA checks and saves the results as the current baseline. Future qa:run calls will compare against this baseline.",
204
+ path: "qa baseline update",
205
+ category: "Baseline",
206
+ describe: "Run check + stats and save as new baseline",
207
+ operationType: "mutate",
218
208
  handler: "./cli/commands/baseline-update.js#default",
219
- handlerPath: "./cli/commands/baseline-update.js",
220
- flags: defineCommandFlags(baselineUpdateFlags),
209
+ flags: defineCommandFlags(baselineUpdateFlags.schema),
221
210
  permissions: pluginPermissions
222
211
  },
223
212
  {
224
- id: "baseline:status",
225
- group: "qa",
226
- describe: "Show current baseline status",
227
- longDescription: "Displays the current baseline snapshot with pass/fail counts per check type.",
213
+ path: "qa baseline status",
214
+ category: "Baseline",
215
+ describe: "Show current baseline",
216
+ operationType: "read",
228
217
  handler: "./cli/commands/baseline-status.js#default",
229
- handlerPath: "./cli/commands/baseline-status.js",
230
- flags: defineCommandFlags(baselineStatusFlags),
218
+ flags: defineCommandFlags(baselineStatusFlags.schema),
219
+ permissions: pluginPermissions
220
+ },
221
+ {
222
+ path: "qa baseline diff",
223
+ category: "Baseline",
224
+ describe: "Diff current state against baseline",
225
+ operationType: "read",
226
+ handler: "./cli/commands/baseline-diff.js#default",
227
+ flags: defineCommandFlags(baselineDiffFlags.schema),
231
228
  permissions: pluginPermissions
232
229
  }
233
230
  ]
234
231
  },
235
- // REST API routes
236
232
  rest: {
237
233
  basePath: QA_BASE_PATH,
238
234
  routes: [
239
- // GET /summary
240
- {
241
- method: "GET",
242
- path: QA_ROUTES.SUMMARY,
243
- handler: "./rest/handlers/summary-handler.js#default",
244
- input: {
245
- zod: "@kb-labs/qa-contracts#QASummaryRequestSchema"
246
- },
247
- output: {
248
- zod: "@kb-labs/qa-contracts#QASummaryResponseSchema"
249
- }
250
- },
251
- // GET /latest
252
- {
253
- method: "GET",
254
- path: QA_ROUTES.LATEST,
255
- handler: "./rest/handlers/latest-handler.js#default",
256
- input: {
257
- zod: "@kb-labs/qa-contracts#QALatestRequestSchema"
258
- },
259
- output: {
260
- zod: "@kb-labs/qa-contracts#QALatestResponseSchema"
261
- }
262
- },
263
- // GET /history
264
- {
265
- method: "GET",
266
- path: QA_ROUTES.HISTORY,
267
- handler: "./rest/handlers/history-handler.js#default",
268
- input: {
269
- zod: "@kb-labs/qa-contracts#QAHistoryRequestSchema"
270
- },
271
- output: {
272
- zod: "@kb-labs/qa-contracts#QAHistoryResponseSchema"
273
- }
274
- },
275
- // GET /trends
276
- {
277
- method: "GET",
278
- path: QA_ROUTES.TRENDS,
279
- handler: "./rest/handlers/trends-handler.js#default",
280
- input: {
281
- zod: "@kb-labs/qa-contracts#QATrendsRequestSchema"
282
- },
283
- output: {
284
- zod: "@kb-labs/qa-contracts#QATrendsResponseSchema"
285
- }
286
- },
287
- // GET /regressions
288
- {
289
- method: "GET",
290
- path: QA_ROUTES.REGRESSIONS,
291
- handler: "./rest/handlers/regressions-handler.js#default",
292
- input: {
293
- zod: "@kb-labs/qa-contracts#QARegressionsRequestSchema"
294
- },
295
- output: {
296
- zod: "@kb-labs/qa-contracts#QARegressionsResponseSchema"
297
- }
298
- },
299
- // GET /baseline
300
- {
301
- method: "GET",
302
- path: QA_ROUTES.BASELINE,
303
- handler: "./rest/handlers/baseline-handler.js#default",
304
- input: {
305
- zod: "@kb-labs/qa-contracts#QABaselineRequestSchema"
306
- },
307
- output: {
308
- zod: "@kb-labs/qa-contracts#QABaselineResponseSchema"
309
- }
310
- },
311
- // POST /run
312
- {
313
- method: "POST",
314
- path: QA_ROUTES.RUN,
315
- handler: "./rest/handlers/run-handler.js#default",
316
- input: {
317
- zod: "@kb-labs/qa-contracts#QARunRequestSchema"
318
- },
319
- output: {
320
- zod: "@kb-labs/qa-contracts#QARunResponseSchema"
321
- }
322
- },
323
- // GET /details — per-package details with error text
324
- {
325
- method: "GET",
326
- path: QA_ROUTES.DETAILS,
327
- handler: "./rest/handlers/details-handler.js#default",
328
- input: {
329
- zod: "@kb-labs/qa-contracts#QADetailsRequestSchema"
330
- },
331
- output: {
332
- zod: "@kb-labs/qa-contracts#QADetailsResponseSchema"
333
- }
334
- },
335
- // POST /run/check — run a single check type
336
- {
337
- method: "POST",
338
- path: QA_ROUTES.RUN_CHECK,
339
- handler: "./rest/handlers/run-check-handler.js#default",
340
- input: {
341
- zod: "@kb-labs/qa-contracts#QARunCheckRequestSchema"
342
- },
343
- output: {
344
- zod: "@kb-labs/qa-contracts#QARunCheckResponseSchema"
345
- }
346
- },
347
- // POST /baseline/update — update baseline from last run
348
- {
349
- method: "POST",
350
- path: QA_ROUTES.BASELINE_UPDATE,
351
- handler: "./rest/handlers/baseline-update-handler.js#default",
352
- input: {
353
- zod: "@kb-labs/qa-contracts#QABaselineUpdateRequestSchema"
354
- },
355
- output: {
356
- zod: "@kb-labs/qa-contracts#QABaselineUpdateResponseSchema"
357
- }
358
- },
359
- // GET /baseline/diff — diff current state vs baseline
360
- {
361
- method: "GET",
362
- path: QA_ROUTES.BASELINE_DIFF,
363
- handler: "./rest/handlers/baseline-diff-handler.js#default",
364
- input: {
365
- zod: "@kb-labs/qa-contracts#QABaselineDiffRequestSchema"
366
- },
367
- output: {
368
- zod: "@kb-labs/qa-contracts#QABaselineDiffResponseSchema"
369
- }
370
- },
371
- // GET /packages/:name/timeline — per-package QA timeline
372
- {
373
- method: "GET",
374
- path: QA_ROUTES.PACKAGE_TIMELINE,
375
- handler: "./rest/handlers/package-timeline-handler.js#default",
376
- input: {
377
- zod: "@kb-labs/qa-contracts#QAPackageTimelineRequestSchema"
378
- },
379
- output: {
380
- zod: "@kb-labs/qa-contracts#QAPackageTimelineResponseSchema"
381
- }
382
- },
383
- // GET /errors/groups — grouped errors by pattern
384
- {
385
- method: "GET",
386
- path: QA_ROUTES.ERROR_GROUPS,
387
- handler: "./rest/handlers/error-groups-handler.js#default",
388
- input: {
389
- zod: "@kb-labs/qa-contracts#QAErrorGroupsRequestSchema"
390
- },
391
- output: {
392
- zod: "@kb-labs/qa-contracts#QAErrorGroupsResponseSchema"
393
- }
394
- }
235
+ { method: "GET", path: QA_ROUTES.SUMMARY, handler: "./rest/handlers/summary-handler.js#default" },
236
+ { method: "POST", path: QA_ROUTES.RUN, handler: "./rest/handlers/run-handler.js#default" },
237
+ { method: "POST", path: QA_ROUTES.CHECK, handler: "./rest/handlers/check-handler.js#default" },
238
+ { method: "GET", path: QA_ROUTES.STATS, handler: "./rest/handlers/stats-handler.js#default" },
239
+ { method: "POST", path: QA_ROUTES.GATE, handler: "./rest/handlers/gate-handler.js#default" },
240
+ { method: "GET", path: QA_ROUTES.HISTORY, handler: "./rest/handlers/history-handler.js#default" },
241
+ { method: "GET", path: QA_ROUTES.TRENDS, handler: "./rest/handlers/trends-handler.js#default" },
242
+ { method: "GET", path: QA_ROUTES.REGRESSIONS, handler: "./rest/handlers/regressions-handler.js#default" },
243
+ { method: "GET", path: QA_ROUTES.BASELINE, handler: "./rest/handlers/baseline-handler.js#default" },
244
+ { method: "POST", path: QA_ROUTES.BASELINE_UPDATE, handler: "./rest/handlers/baseline-update-handler.js#default" },
245
+ { method: "GET", path: QA_ROUTES.BASELINE_DIFF, handler: "./rest/handlers/baseline-diff-handler.js#default" },
246
+ { method: "GET", path: QA_ROUTES.PACKAGE_TIMELINE, handler: "./rest/handlers/package-timeline-handler.js#default" },
247
+ { method: "GET", path: QA_ROUTES.TASKS, handler: "./rest/handlers/tasks-handler.js#default" }
395
248
  ]
396
249
  },
397
- // Studio V2 — Module Federation pages
398
250
  studio: {
399
251
  version: 2,
400
252
  remoteName: "qaPlugin",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"index.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\nexport const qaCheckFlags = {\n id: {\n type: 'string',\n description: 'Check ID to run (must match a check in qa.checks config)',\n demandOption: true,\n },\n base: {\n type: 'string',\n description: 'Base branch/commit for diff strategies (diffOnly, newFiles). Default: main',\n default: 'main',\n },\n context: {\n type: 'string',\n description: 'JSON context to attach to history entry (e.g. {\"taskId\":\"123\"})',\n },\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n save: {\n type: 'boolean',\n description: 'Save result to history after running (default: true)',\n default: true,\n },\n} as const;\n\nexport type QACheckFlags = typeof qaCheckFlags;\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 qaCheckFlags,\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: '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: 'check',\n group: 'qa',\n describe: 'Run a single QA check atomically',\n longDescription:\n 'Runs one check by ID, optionally saves to history with caller context. ' +\n 'Designed for workflow steps: exit 0 = pass, exit 1 = blocker failed. ' +\n 'Supports diffOnly/newFiles strategies and structured JSON output for agents.',\n handler: './cli/commands/qa-check.js#default',\n handlerPath: './cli/commands/qa-check.js',\n flags: defineCommandFlags(qaCheckFlags),\n permissions: pluginPermissions,\n },\n {\n id: '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: '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: '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: '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"]}
1
+ {"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { defineFlags } from '@kb-labs/sdk';\n\nexport const qaRunFlags = defineFlags({\n tasks: {\n type: 'string',\n description: 'Comma-separated tasks to run (default: build,lint,type-check,test)',\n },\n save: {\n type: 'boolean',\n description: 'Save snapshot to history',\n default: true,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaRunFlags = typeof qaRunFlags.infer;\n\nexport const qaCheckFlags = defineFlags({\n save: {\n type: 'boolean',\n description: 'Save snapshot to history',\n default: true,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaCheckFlags = typeof qaCheckFlags.infer;\n\nexport const qaStatsFlags = defineFlags({\n save: {\n type: 'boolean',\n description: 'Save snapshot to history',\n default: true,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaStatsFlags = typeof qaStatsFlags.infer;\n\nexport const qaGateFlags = defineFlags({\n save: {\n type: 'boolean',\n description: 'Save snapshot to history',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaGateFlags = typeof qaGateFlags.infer;\n\nexport const qaHistoryFlags = defineFlags({\n limit: {\n type: 'number',\n description: 'Max entries to show',\n default: 20,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaHistoryFlags = typeof qaHistoryFlags.infer;\n\nexport const qaTrendsFlags = defineFlags({\n window: {\n type: 'number',\n description: 'Number of history entries to analyze',\n default: 10,\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaTrendsFlags = typeof qaTrendsFlags.infer;\n\nexport const qaRegressionsFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type QaRegressionsFlags = typeof qaRegressionsFlags.infer;\n\nexport const baselineUpdateFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type BaselineUpdateFlags = typeof baselineUpdateFlags.infer;\n\nexport const baselineStatusFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type BaselineStatusFlags = typeof baselineStatusFlags.infer;\n\nexport const baselineDiffFlags = defineFlags({\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n});\nexport type BaselineDiffFlags = typeof baselineDiffFlags.infer;\n","import {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaCheckFlags,\n qaStatsFlags,\n qaGateFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n baselineDiffFlags,\n} from './cli/commands/flags.js';\nimport { QA_BASE_PATH, QA_ROUTES } from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withShell({\n allow: ['kb-devkit', 'git'],\n })\n .withPlatform({\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600_000,\n memoryMb: 512,\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: 'Smart wrapper around kb-devkit — history, trends, baseline diffing, and health UI',\n tags: ['qa', 'quality', 'baseline', 'regression', 'devkit'],\n },\n\n platform: {\n requires: [],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n groupMeta: [\n { path: 'qa', describe: 'Quality assurance powered by kb-devkit' },\n { path: 'qa baseline', describe: 'Baseline management' },\n ],\n commands: [\n {\n path: 'qa run',\n category: 'Run',\n describe: 'Run devkit tasks and record results',\n operationType: 'execute' as const,\n handler: './cli/commands/qa-run.js#default',\n flags: defineCommandFlags(qaRunFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa check',\n category: 'Run',\n describe: 'Run devkit structural checks',\n operationType: 'analyze' as const,\n handler: './cli/commands/qa-check.js#default',\n flags: defineCommandFlags(qaCheckFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa stats',\n category: 'Run',\n describe: 'Show devkit health score and category breakdown',\n operationType: 'read' as const,\n handler: './cli/commands/qa-stats.js#default',\n flags: defineCommandFlags(qaStatsFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa gate',\n category: 'Run',\n describe: 'Run pre-commit gate check (exits 1 if violations found)',\n operationType: 'analyze' as const,\n handler: './cli/commands/qa-gate.js#default',\n flags: defineCommandFlags(qaGateFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa history',\n category: 'History',\n describe: 'Show QA run history',\n operationType: 'read' as const,\n handler: './cli/commands/qa-history.js#default',\n flags: defineCommandFlags(qaHistoryFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa trends',\n category: 'History',\n describe: 'Show QA quality trends over time',\n operationType: 'read' as const,\n handler: './cli/commands/qa-trends.js#default',\n flags: defineCommandFlags(qaTrendsFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa regressions',\n category: 'History',\n describe: 'Detect regressions since last run',\n operationType: 'read' as const,\n handler: './cli/commands/qa-regressions.js#default',\n flags: defineCommandFlags(qaRegressionsFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa baseline update',\n category: 'Baseline',\n describe: 'Run check + stats and save as new baseline',\n operationType: 'mutate' as const,\n handler: './cli/commands/baseline-update.js#default',\n flags: defineCommandFlags(baselineUpdateFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa baseline status',\n category: 'Baseline',\n describe: 'Show current baseline',\n operationType: 'read' as const,\n handler: './cli/commands/baseline-status.js#default',\n flags: defineCommandFlags(baselineStatusFlags.schema),\n permissions: pluginPermissions,\n },\n {\n path: 'qa baseline diff',\n category: 'Baseline',\n describe: 'Diff current state against baseline',\n operationType: 'read' as const,\n handler: './cli/commands/baseline-diff.js#default',\n flags: defineCommandFlags(baselineDiffFlags.schema),\n permissions: pluginPermissions,\n },\n ],\n },\n\n rest: {\n basePath: QA_BASE_PATH,\n routes: [\n { method: 'GET', path: QA_ROUTES.SUMMARY, handler: './rest/handlers/summary-handler.js#default' },\n { method: 'POST', path: QA_ROUTES.RUN, handler: './rest/handlers/run-handler.js#default' },\n { method: 'POST', path: QA_ROUTES.CHECK, handler: './rest/handlers/check-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.STATS, handler: './rest/handlers/stats-handler.js#default' },\n { method: 'POST', path: QA_ROUTES.GATE, handler: './rest/handlers/gate-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.HISTORY, handler: './rest/handlers/history-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.TRENDS, handler: './rest/handlers/trends-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.REGRESSIONS, handler: './rest/handlers/regressions-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.BASELINE, handler: './rest/handlers/baseline-handler.js#default' },\n { method: 'POST', path: QA_ROUTES.BASELINE_UPDATE, handler: './rest/handlers/baseline-update-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.BASELINE_DIFF, handler: './rest/handlers/baseline-diff-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.PACKAGE_TIMELINE, handler: './rest/handlers/package-timeline-handler.js#default' },\n { method: 'GET', path: QA_ROUTES.TASKS, handler: './rest/handlers/tasks-handler.js#default' },\n ],\n },\n\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"]}