@kb-labs/qa-entry 2.93.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 +12 -9
  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
@@ -1,33 +1,13 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
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
- }>;
5
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, _kb_labs_qa_contracts.BaselineCheckDiff | {
6
+ error: "no-baseline";
7
+ } | {
8
+ error: "no-check";
9
+ } | {
10
+ error: "no-stats";
31
11
  }>;
32
12
 
33
13
  export { _default as default };
@@ -1,50 +1,24 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadBaseline, loadLastRun, compareWithBaseline } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { SnapshotStore, compareWithBaseline } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/baseline-diff-handler.ts
5
5
  var baseline_diff_handler_default = defineHandler({
6
- async execute(ctx, _input) {
7
- const rootDir = ctx.cwd;
8
- const baseline = loadBaseline(rootDir);
9
- const lastRun = loadLastRun(rootDir);
10
- if (!baseline || !lastRun) {
11
- return {
12
- hasDiff: false,
13
- diff: {},
14
- baseline: baseline ?? null,
15
- current: lastRun ? {
16
- timestamp: lastRun.timestamp,
17
- summary: buildSummaryFromResults(lastRun.results)
18
- } : null
19
- };
6
+ async execute(ctx, input) {
7
+ try {
8
+ const config = await useConfig();
9
+ const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
10
+ const baseline = store.loadBaseline();
11
+ if (!baseline) return { error: "no-baseline" };
12
+ const latestCheck = store.latestCheck();
13
+ if (!latestCheck) return { error: "no-check" };
14
+ const latestStats = store.latestStats();
15
+ if (!latestStats) return { error: "no-stats" };
16
+ return compareWithBaseline(latestCheck.raw, latestStats.raw, baseline);
17
+ } catch (error) {
18
+ rethrowForRest(error);
20
19
  }
21
- const diff = compareWithBaseline(lastRun.results, baseline);
22
- const hasDiff = Object.keys(diff).some((ct) => {
23
- const d = diff[ct];
24
- return d.newFailures.length > 0 || d.fixed.length > 0;
25
- });
26
- return {
27
- hasDiff,
28
- diff,
29
- baseline,
30
- current: {
31
- timestamp: lastRun.timestamp,
32
- summary: buildSummaryFromResults(lastRun.results)
33
- }
34
- };
35
20
  }
36
21
  });
37
- function buildSummaryFromResults(results) {
38
- const summary = {};
39
- for (const ct of Object.keys(results)) {
40
- const r = results[ct];
41
- summary[ct] = {
42
- passed: r?.passed.length ?? 0,
43
- failed: r?.failed.length ?? 0
44
- };
45
- }
46
- return summary;
47
- }
48
22
 
49
23
  export { baseline_diff_handler_default as default };
50
24
  //# sourceMappingURL=baseline-diff-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/baseline-diff-handler.ts"],"names":[],"mappings":";;;;AAWA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,MAAA,EACiC;AACjC,IAAA,MAAM,UAAU,GAAA,CAAI,GAAA;AAEpB,IAAA,MAAM,QAAA,GAAW,aAAa,OAAO,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,YAAY,OAAO,CAAA;AAGnC,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,MAAM,EAAC;AAAA,QACP,UAAU,QAAA,IAAY,IAAA;AAAA,QACtB,SAAS,OAAA,GAAU;AAAA,UACjB,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,OAAA,EAAS,uBAAA,CAAwB,OAAA,CAAQ,OAAO;AAAA,SAClD,GAAI;AAAA,OACN;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,OAAA,CAAQ,OAAA,EAAS,QAAQ,CAAA;AAG1D,IAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,EAAA,KAAO;AAC7C,MAAA,MAAM,CAAA,GAAI,KAAK,EAAE,CAAA;AACjB,MAAA,OAAO,EAAE,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAA,CAAE,MAAM,MAAA,GAAS,CAAA;AAAA,IACtD,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,OAAA,EAAS,uBAAA,CAAwB,OAAA,CAAQ,OAAO;AAAA;AAClD,KACF;AAAA,EACF;AACF,CAAC;AAED,SAAS,wBACP,OAAA,EACoD;AACpD,EAAA,MAAM,UAA8D,EAAC;AACrE,EAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,CAAA,GAAI,QAAQ,EAAE,CAAA;AACpB,IAAA,OAAA,CAAQ,EAAE,CAAA,GAAI;AAAA,MACZ,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,MAAA,IAAU,CAAA;AAAA,MAC5B,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,MAAA,IAAU;AAAA,KAC9B;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT","file":"baseline-diff-handler.js","sourcesContent":["/**\n * GET /baseline/diff handler\n *\n * Compares current QA state (from last run) with saved baseline.\n * Shows new failures, fixed packages, and still-failing.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadBaseline, loadLastRun, compareWithBaseline } from '@kb-labs/qa-core';\nimport type { QABaselineDiffRequest, QABaselineDiffResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n _input: RestInput<QABaselineDiffRequest, unknown>,\n ): Promise<QABaselineDiffResponse> {\n const rootDir = ctx.cwd;\n\n const baseline = loadBaseline(rootDir);\n const lastRun = loadLastRun(rootDir);\n\n // No baseline or no last run — return empty diff\n if (!baseline || !lastRun) {\n return {\n hasDiff: false,\n diff: {} as QABaselineDiffResponse['diff'],\n baseline: baseline ?? null,\n current: lastRun ? {\n timestamp: lastRun.timestamp,\n summary: buildSummaryFromResults(lastRun.results),\n } : null,\n };\n }\n\n const diff = compareWithBaseline(lastRun.results, baseline);\n\n // Check if there's any actual diff\n const hasDiff = Object.keys(diff).some((ct) => {\n const d = diff[ct]!;\n return d.newFailures.length > 0 || d.fixed.length > 0;\n });\n\n return {\n hasDiff,\n diff,\n baseline,\n current: {\n timestamp: lastRun.timestamp,\n summary: buildSummaryFromResults(lastRun.results),\n },\n };\n },\n});\n\nfunction buildSummaryFromResults(\n results: Record<string, { passed: string[]; failed: string[] }>,\n): Record<string, { passed: number; failed: number }> {\n const summary: Record<string, { passed: number; failed: number }> = {};\n for (const ct of Object.keys(results)) {\n const r = results[ct];\n summary[ct] = {\n passed: r?.passed.length ?? 0,\n failed: r?.failed.length ?? 0,\n };\n }\n return summary;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/baseline-diff-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAElE,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,EAAa;AACpC,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAE,OAAO,aAAA,EAAuB;AAEtD,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,EAAY;AACtC,MAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAE,OAAO,UAAA,EAAoB;AAEtD,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,EAAY;AACtC,MAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAE,OAAO,UAAA,EAAoB;AAEtD,MAAA,OAAO,mBAAA,CAAoB,WAAA,CAAY,GAAA,EAAK,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA,IACvE,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"baseline-diff-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore, compareWithBaseline } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n\n const baseline = store.loadBaseline();\n if (!baseline) return { error: 'no-baseline' as const };\n\n const latestCheck = store.latestCheck();\n if (!latestCheck) return { error: 'no-check' as const };\n\n const latestStats = store.latestStats();\n if (!latestStats) return { error: 'no-stats' as const };\n\n return compareWithBaseline(latestCheck.raw, latestStats.raw, baseline);\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,19 +1,9 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
- declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{}, unknown, unknown>, {
5
- baseline: {
6
- git: {
7
- commit: string;
8
- branch: string;
9
- };
10
- timestamp: string;
11
- results: Record<string, {
12
- passed: number;
13
- failed: number;
14
- failedPackages: string[];
15
- }>;
16
- } | null;
5
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, {
6
+ baseline: _kb_labs_qa_contracts.BaselineData | null;
17
7
  }>;
18
8
 
19
9
  export { _default as default };
@@ -1,11 +1,16 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadBaseline } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { SnapshotStore } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/baseline-handler.ts
5
5
  var baseline_handler_default = defineHandler({
6
- async execute(ctx, _input) {
7
- const baseline = loadBaseline(ctx.cwd);
8
- return { baseline: baseline ?? null };
6
+ async execute(ctx, input) {
7
+ try {
8
+ const config = await useConfig();
9
+ const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
10
+ return { baseline: store.loadBaseline() };
11
+ } catch (error) {
12
+ rethrowForRest(error);
13
+ }
9
14
  }
10
15
  });
11
16
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/baseline-handler.ts"],"names":[],"mappings":";;;;AAUA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,MAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACrC,IAAA,OAAO,EAAE,QAAA,EAAU,QAAA,IAAY,IAAA,EAAK;AAAA,EACtC;AACF,CAAC","file":"baseline-handler.js","sourcesContent":["/**\n * GET /baseline handler\n *\n * Returns the current baseline snapshot.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadBaseline } from '@kb-labs/qa-core';\nimport type { QABaselineRequest, QABaselineResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n _input: RestInput<QABaselineRequest, unknown>,\n ): Promise<QABaselineResponse> {\n const baseline = loadBaseline(ctx.cwd);\n return { baseline: baseline ?? null };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/baseline-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAClE,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,CAAM,YAAA,EAAa,EAAE;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"baseline-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n return { baseline: store.loadBaseline() };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,20 +1,10 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
- declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, {}, unknown>, {
5
- baseline: {
6
- git: {
7
- commit: string;
8
- branch: string;
9
- };
10
- timestamp: string;
11
- results: Record<string, {
12
- passed: number;
13
- failed: number;
14
- failedPackages: string[];
15
- }>;
16
- };
17
- success: boolean;
5
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, {
6
+ baseline: _kb_labs_qa_contracts.BaselineData;
7
+ ok: boolean;
18
8
  }>;
19
9
 
20
10
  export { _default as default };
@@ -1,20 +1,22 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadLastRun, createBaselineFromResults, saveBaseline } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { resolveDevkitBin, DevkitAdapter, SnapshotStore, captureGit } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/baseline-update-handler.ts
5
5
  var baseline_update_handler_default = defineHandler({
6
- async execute(ctx, _input) {
7
- const rootDir = ctx.cwd;
8
- const lastRun = loadLastRun(rootDir);
9
- if (!lastRun) {
10
- throw new Error("No last run data available. Run QA first (POST /run).");
6
+ async execute(ctx, input) {
7
+ try {
8
+ const config = await useConfig();
9
+ const cwd = ctx.cwd;
10
+ const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);
11
+ const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });
12
+ const store = new SnapshotStore(cwd, config?.historyMaxEntries);
13
+ const git = await captureGit(ctx.api.shell, cwd);
14
+ const [check, stats] = await Promise.all([adapter.check(), adapter.stats()]);
15
+ const baseline = store.saveBaseline(check, stats, git);
16
+ return { baseline, ok: true };
17
+ } catch (error) {
18
+ rethrowForRest(error);
11
19
  }
12
- const baseline = createBaselineFromResults(lastRun.results, rootDir);
13
- saveBaseline(rootDir, baseline);
14
- return {
15
- success: true,
16
- baseline
17
- };
18
20
  }
19
21
  });
20
22
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/baseline-update-handler.ts"],"names":[],"mappings":";;;;AAWA,IAAO,kCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,MAAA,EACmC;AACnC,IAAA,MAAM,UAAU,GAAA,CAAI,GAAA;AAEpB,IAAA,MAAM,OAAA,GAAU,YAAY,OAAO,CAAA;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AAEA,IAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA;AACnE,IAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAE9B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF;AACF,CAAC","file":"baseline-update-handler.js","sourcesContent":["/**\n * POST /baseline/update handler\n *\n * Creates a new baseline from the last QA run results.\n * Does NOT re-run QA — uses stored last-run data.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadLastRun, createBaselineFromResults, saveBaseline } from '@kb-labs/qa-core';\nimport type { QABaselineUpdateRequest, QABaselineUpdateResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n _input: RestInput<unknown, QABaselineUpdateRequest>,\n ): Promise<QABaselineUpdateResponse> {\n const rootDir = ctx.cwd;\n\n const lastRun = loadLastRun(rootDir);\n if (!lastRun) {\n throw new Error('No last run data available. Run QA first (POST /run).');\n }\n\n const baseline = createBaselineFromResults(lastRun.results, rootDir);\n saveBaseline(rootDir, baseline);\n\n return {\n success: true,\n baseline,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/baseline-update-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,kCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAEhB,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,IAAI,aAAA,CAAc,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAE9D,MAAA,MAAM,MAAM,MAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAC/C,MAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,OAAA,CAAQ,KAAA,EAAM,EAAG,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AAC3E,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,YAAA,CAAa,KAAA,EAAO,OAAO,GAAG,CAAA;AAErD,MAAA,OAAO,EAAE,QAAA,EAAU,EAAA,EAAI,IAAA,EAAK;AAAA,IAC9B,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"baseline-update-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { DevkitAdapter, SnapshotStore, resolveDevkitBin, captureGit } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const cwd = ctx.cwd;\n\n const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);\n const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });\n const store = new SnapshotStore(cwd, config?.historyMaxEntries);\n\n const git = await captureGit(ctx.api.shell, cwd);\n const [check, stats] = await Promise.all([adapter.check(), adapter.stats()]);\n const baseline = store.saveBaseline(check, stats, git);\n\n return { baseline, ok: true };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -0,0 +1,15 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
3
+ import { RestInput } from '@kb-labs/sdk';
4
+
5
+ interface CheckBody {
6
+ save?: boolean;
7
+ runContext?: Record<string, unknown>;
8
+ }
9
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, CheckBody, unknown>, {
10
+ snapshot: _kb_labs_qa_contracts.CheckSnapshot | null;
11
+ raw: _kb_labs_qa_contracts.DevkitCheckOutput;
12
+ ok: boolean;
13
+ }>;
14
+
15
+ export { _default as default };
@@ -0,0 +1,28 @@
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { resolveDevkitBin, DevkitAdapter, SnapshotStore, captureGit } from '@kb-labs/qa-core';
3
+
4
+ // src/rest/handlers/check-handler.ts
5
+ var check_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ try {
8
+ const { save = true, runContext } = input.body ?? {};
9
+ const config = await useConfig();
10
+ const cwd = ctx.cwd;
11
+ const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);
12
+ const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });
13
+ const store = new SnapshotStore(cwd, config?.historyMaxEntries);
14
+ const git = await captureGit(ctx.api.shell, cwd);
15
+ const start = Date.now();
16
+ const raw = await adapter.check();
17
+ const durationMs = Date.now() - start;
18
+ const snap = save ? store.saveCheck(raw, durationMs, git, runContext) : null;
19
+ return { snapshot: snap, raw, ok: raw.ok };
20
+ } catch (error) {
21
+ rethrowForRest(error);
22
+ }
23
+ }
24
+ });
25
+
26
+ export { check_handler_default as default };
27
+ //# sourceMappingURL=check-handler.js.map
28
+ //# sourceMappingURL=check-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/check-handler.ts"],"names":[],"mappings":";;;;AASA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAsC;AACxE,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,GAAO,IAAA,EAAM,YAAW,GAAI,KAAA,CAAM,QAAQ,EAAC;AACnD,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAEhB,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,IAAI,aAAA,CAAc,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAE9D,MAAA,MAAM,MAAM,MAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAE/C,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,KAAA,EAAM;AAChC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAEhC,MAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,SAAA,CAAU,KAAK,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA,GAAI,IAAA;AACxE,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,GAAA,EAAK,EAAA,EAAI,IAAI,EAAA,EAAG;AAAA,IAC3C,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"check-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { DevkitAdapter, SnapshotStore, resolveDevkitBin, captureGit } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\ninterface CheckBody {\n save?: boolean;\n runContext?: Record<string, unknown>;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<unknown, CheckBody>) {\n try {\n const { save = true, runContext } = input.body ?? {};\n const config = await useConfig<QAPluginConfig>();\n const cwd = ctx.cwd;\n\n const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);\n const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });\n const store = new SnapshotStore(cwd, config?.historyMaxEntries);\n\n const git = await captureGit(ctx.api.shell, cwd);\n\n const start = Date.now();\n const raw = await adapter.check();\n const durationMs = Date.now() - start;\n\n const snap = save ? store.saveCheck(raw, durationMs, git, runContext) : null;\n return { snapshot: snap, raw, ok: raw.ok };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
3
+ import { RestInput } from '@kb-labs/sdk';
4
+
5
+ interface GateBody {
6
+ save?: boolean;
7
+ }
8
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, GateBody, unknown>, {
9
+ raw: _kb_labs_qa_contracts.DevkitGateOutput;
10
+ ok: boolean;
11
+ }>;
12
+
13
+ export { _default as default };
@@ -0,0 +1,28 @@
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { resolveDevkitBin, DevkitAdapter, SnapshotStore, captureGit } from '@kb-labs/qa-core';
3
+
4
+ // src/rest/handlers/gate-handler.ts
5
+ var gate_handler_default = defineHandler({
6
+ async execute(ctx, input) {
7
+ try {
8
+ const { save = false } = input.body ?? {};
9
+ const config = await useConfig();
10
+ const cwd = ctx.cwd;
11
+ const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);
12
+ const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });
13
+ const store = new SnapshotStore(cwd, config?.historyMaxEntries);
14
+ const git = await captureGit(ctx.api.shell, cwd);
15
+ const start = Date.now();
16
+ const raw = await adapter.gate();
17
+ const durationMs = Date.now() - start;
18
+ if (save) store.saveGate(raw, durationMs, git);
19
+ return { raw, ok: raw.ok };
20
+ } catch (error) {
21
+ rethrowForRest(error);
22
+ }
23
+ }
24
+ });
25
+
26
+ export { gate_handler_default as default };
27
+ //# sourceMappingURL=gate-handler.js.map
28
+ //# sourceMappingURL=gate-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/rest/handlers/gate-handler.ts"],"names":[],"mappings":";;;;AAQA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAqC;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,GAAO,KAAA,EAAM,GAAI,KAAA,CAAM,QAAQ,EAAC;AACxC,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAEhB,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,IAAI,aAAA,CAAc,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAE9D,MAAA,MAAM,MAAM,MAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAE/C,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,IAAA,EAAK;AAC/B,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAEhC,MAAA,IAAI,IAAA,EAAM,KAAA,CAAM,QAAA,CAAS,GAAA,EAAK,YAAY,GAAG,CAAA;AAC7C,MAAA,OAAO,EAAE,GAAA,EAAK,EAAA,EAAI,GAAA,CAAI,EAAA,EAAG;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"gate-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { DevkitAdapter, SnapshotStore, resolveDevkitBin, captureGit } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\ninterface GateBody {\n save?: boolean;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<unknown, GateBody>) {\n try {\n const { save = false } = input.body ?? {};\n const config = await useConfig<QAPluginConfig>();\n const cwd = ctx.cwd;\n\n const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);\n const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });\n const store = new SnapshotStore(cwd, config?.historyMaxEntries);\n\n const git = await captureGit(ctx.api.shell, cwd);\n\n const start = Date.now();\n const raw = await adapter.gate();\n const durationMs = Date.now() - start;\n\n if (save) store.saveGate(raw, durationMs, git);\n return { raw, ok: raw.ok };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,24 +1,11 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
5
  declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{
5
- limit?: number | undefined;
6
+ limit?: string;
6
7
  }, unknown, unknown>, {
7
- entries: {
8
- status: "passed" | "failed";
9
- git: {
10
- commit: string;
11
- branch: string;
12
- message: string;
13
- };
14
- timestamp: string;
15
- summary: Record<string, {
16
- passed: number;
17
- failed: number;
18
- skipped: number;
19
- }>;
20
- failedPackages: Record<string, string[]>;
21
- }[];
8
+ history: _kb_labs_qa_contracts.RunSnapshot[];
22
9
  total: number;
23
10
  }>;
24
11
 
@@ -1,19 +1,18 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadHistory } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { SnapshotStore } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/history-handler.ts
5
5
  var history_handler_default = defineHandler({
6
6
  async execute(ctx, input) {
7
- const limit = input.query?.limit;
8
- const allEntries = loadHistory(ctx.cwd);
9
- let entries = [...allEntries].reverse();
10
- if (limit && limit > 0) {
11
- entries = entries.slice(0, limit);
7
+ try {
8
+ const config = await useConfig();
9
+ const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
10
+ const limit = Number(input.query?.limit) || 20;
11
+ const history = [...store.loadRunHistory()].reverse().slice(0, limit);
12
+ return { history, total: history.length };
13
+ } catch (error) {
14
+ rethrowForRest(error);
12
15
  }
13
- return {
14
- entries,
15
- total: allEntries.length
16
- };
17
16
  }
18
17
  });
19
18
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/history-handler.ts"],"names":[],"mappings":";;;;AAUA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC4B;AAC5B,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,EAAO,KAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAGtC,IAAA,IAAI,OAAA,GAAU,CAAC,GAAG,UAAU,EAAE,OAAA,EAAQ;AACtC,IAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACtB,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,OAAO,UAAA,CAAW;AAAA,KACpB;AAAA,EACF;AACF,CAAC","file":"history-handler.js","sourcesContent":["/**\n * GET /history handler\n *\n * Returns QA run history, newest first. Supports ?limit=N.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadHistory } from '@kb-labs/qa-core';\nimport type { QAHistoryRequest, QAHistoryResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<QAHistoryRequest, unknown>,\n ): Promise<QAHistoryResponse> {\n const limit = input.query?.limit;\n const allEntries = loadHistory(ctx.cwd);\n\n // Return newest first\n let entries = [...allEntries].reverse();\n if (limit && limit > 0) {\n entries = entries.slice(0, limit);\n }\n\n return {\n entries,\n total: allEntries.length,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/history-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAsC;AACxE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAElE,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA,IAAK,EAAA;AAC5C,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,KAAA,CAAM,cAAA,EAAgB,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAEpE,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAO;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"history-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<{ limit?: string }>) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n\n const limit = Number(input.query?.limit) || 20;\n const history = [...store.loadRunHistory()].reverse().slice(0, limit);\n\n return { history, total: history.length };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,26 +1,11 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
- declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{}, unknown, unknown>, {
5
- entries: {
6
- git: {
7
- commit: string;
8
- branch: string;
9
- message: string;
10
- };
11
- checks: Record<string, "passed" | "failed" | "skipped">;
12
- timestamp: string;
13
- submoduleCommit?: string | undefined;
14
- }[];
15
- repo: string;
16
- packageName: string;
17
- flakyScore: number;
18
- flakyChecks: string[];
19
- currentStreak: {
20
- status: "passing" | "failing";
21
- count: number;
22
- };
23
- firstFailure?: string | undefined;
5
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, {
6
+ name?: string;
7
+ }>, _kb_labs_qa_contracts.PackageTimeline | {
8
+ error: string;
24
9
  }>;
25
10
 
26
11
  export { _default as default };
@@ -1,15 +1,19 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadHistory, getPackageTimeline } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { SnapshotStore, buildPackageTimeline } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/package-timeline-handler.ts
5
5
  var package_timeline_handler_default = defineHandler({
6
6
  async execute(ctx, input) {
7
- const packageName = input.params?.name;
8
- if (!packageName) {
9
- throw new Error("Package name is required (path param :name)");
7
+ try {
8
+ const config = await useConfig();
9
+ const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
10
+ const packageName = input.params?.name;
11
+ if (!packageName) return { error: "Package name is required" };
12
+ const history = store.loadRunHistory();
13
+ return buildPackageTimeline(history, packageName);
14
+ } catch (error) {
15
+ rethrowForRest(error);
10
16
  }
11
- const history = loadHistory(ctx.cwd);
12
- return getPackageTimeline(history, packageName);
13
17
  }
14
18
  });
15
19
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/package-timeline-handler.ts"],"names":[],"mappings":";;;;AAWA,IAAO,mCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACoC;AACpC,IAAA,MAAM,WAAA,GAAe,MAA0E,MAAA,EAAQ,IAAA;AAEvG,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,kBAAA,CAAmB,SAAS,WAAW,CAAA;AAAA,EAChD;AACF,CAAC","file":"package-timeline-handler.js","sourcesContent":["/**\n * GET /packages/:name/timeline handler\n *\n * Returns per-package QA timeline across history entries.\n * Computes flaky score, current streak, and first failure.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadHistory, getPackageTimeline } from '@kb-labs/qa-core';\nimport type { QAPackageTimelineRequest, QAPackageTimelineResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<QAPackageTimelineRequest, unknown>,\n ): Promise<QAPackageTimelineResponse> {\n const packageName = (input as RestInput<QAPackageTimelineRequest, unknown, { name?: string }>).params?.name;\n\n if (!packageName) {\n throw new Error('Package name is required (path param :name)');\n }\n\n const history = loadHistory(ctx.cwd);\n return getPackageTimeline(history, packageName);\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/package-timeline-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,mCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAuD;AACzF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAElE,MAAA,MAAM,WAAA,GAAc,MAAM,MAAA,EAAQ,IAAA;AAClC,MAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAE,OAAO,0BAAA,EAA2B;AAE7D,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,OAAO,oBAAA,CAAqB,SAAS,WAAW,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"package-timeline-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore, buildPackageTimeline } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<unknown, unknown, { name?: string }>) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n\n const packageName = input.params?.name;\n if (!packageName) return { error: 'Package name is required' };\n\n const history = store.loadRunHistory();\n return buildPackageTimeline(history, packageName);\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,16 +1,7 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
- declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{
5
- scope?: string | undefined;
6
- }, unknown, unknown>, {
7
- hasRegressions: boolean;
8
- regressions: {
9
- checkType: string;
10
- delta: number;
11
- newFailures: string[];
12
- }[];
13
- scope?: string | undefined;
14
- }>;
5
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, _kb_labs_qa_contracts.RegressionDetection>;
15
6
 
16
7
  export { _default as default };
@@ -1,11 +1,17 @@
1
- import { defineHandler } from '@kb-labs/sdk';
2
- import { loadHistory, detectRegressions } from '@kb-labs/qa-core';
1
+ import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
+ import { SnapshotStore, detectRegressions } from '@kb-labs/qa-core';
3
3
 
4
4
  // src/rest/handlers/regressions-handler.ts
5
5
  var regressions_handler_default = defineHandler({
6
- async execute(ctx, _input) {
7
- const history = loadHistory(ctx.cwd);
8
- return detectRegressions(history);
6
+ async execute(ctx, input) {
7
+ try {
8
+ const config = await useConfig();
9
+ const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
10
+ const history = store.loadRunHistory();
11
+ return detectRegressions(history);
12
+ } catch (error) {
13
+ rethrowForRest(error);
14
+ }
9
15
  }
10
16
  });
11
17
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/regressions-handler.ts"],"names":[],"mappings":";;;;AAUA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,MAAA,EACgC;AAChC,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,kBAAkB,OAAO,CAAA;AAAA,EAClC;AACF,CAAC","file":"regressions-handler.js","sourcesContent":["/**\n * GET /regressions handler\n *\n * Detects regressions by comparing the last two history entries.\n */\n\nimport { defineHandler, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { loadHistory, detectRegressions } from '@kb-labs/qa-core';\nimport type { QARegressionsRequest, QARegressionsResponse } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n _input: RestInput<QARegressionsRequest, unknown>,\n ): Promise<QARegressionsResponse> {\n const history = loadHistory(ctx.cwd);\n return detectRegressions(history);\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/regressions-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAClE,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,OAAO,kBAAkB,OAAO,CAAA;AAAA,IAClC,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"regressions-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore, detectRegressions } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n const history = store.loadRunHistory();\n return detectRegressions(history);\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
@@ -1,33 +1,16 @@
1
1
  import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
2
3
  import { RestInput } from '@kb-labs/sdk';
3
4
 
4
- declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, {
5
- skipChecks?: string[] | undefined;
6
- saveToHistory?: boolean | undefined;
7
- }, unknown>, {
8
- status: "passed" | "failed";
9
- entry: {
10
- status: "passed" | "failed";
11
- git: {
12
- commit: string;
13
- branch: string;
14
- message: string;
15
- };
16
- timestamp: string;
17
- summary: Record<string, {
18
- passed: number;
19
- failed: number;
20
- skipped: number;
21
- }>;
22
- failedPackages: Record<string, string[]>;
23
- } | null;
24
- results: Record<string, {
25
- passed: string[];
26
- failed: string[];
27
- skipped: string[];
28
- errors: Record<string, string>;
29
- }>;
30
- durationMs: number;
5
+ interface RunBody {
6
+ tasks?: string[];
7
+ save?: boolean;
8
+ runContext?: Record<string, unknown>;
9
+ }
10
+ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, RunBody, unknown>, {
11
+ snapshot: _kb_labs_qa_contracts.RunSnapshot | null;
12
+ raw: _kb_labs_qa_contracts.DevkitRunOutput;
13
+ ok: boolean;
31
14
  }>;
32
15
 
33
16
  export { _default as default };