@kb-labs/qa-entry 2.14.0 → 2.17.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 (45) hide show
  1. package/dist/index.js +5 -5
  2. package/dist/index.js.map +1 -1
  3. package/dist/manifest.js +5 -5
  4. package/dist/manifest.js.map +1 -1
  5. package/dist/widgets/117.js +2 -0
  6. package/dist/widgets/117.js.map +1 -0
  7. package/dist/widgets/297.js +2 -0
  8. package/dist/widgets/297.js.map +1 -0
  9. package/dist/widgets/338.js +2 -0
  10. package/dist/widgets/338.js.map +1 -0
  11. package/dist/widgets/370.js +2 -0
  12. package/dist/widgets/370.js.map +1 -0
  13. package/dist/widgets/451.js +2 -0
  14. package/dist/widgets/451.js.map +1 -0
  15. package/dist/widgets/50.js +2 -0
  16. package/dist/widgets/50.js.map +1 -0
  17. package/dist/widgets/586.js +39 -0
  18. package/dist/widgets/586.js.map +1 -0
  19. package/dist/widgets/59.js +2 -0
  20. package/dist/widgets/59.js.map +1 -0
  21. package/dist/widgets/607.js +2 -0
  22. package/dist/widgets/607.js.map +1 -0
  23. package/dist/widgets/626.js +2 -0
  24. package/dist/widgets/626.js.map +1 -0
  25. package/dist/widgets/669.js +2 -0
  26. package/dist/widgets/669.js.map +1 -0
  27. package/dist/widgets/678.js +2 -0
  28. package/dist/widgets/678.js.map +1 -0
  29. package/dist/widgets/781.js +2 -0
  30. package/dist/widgets/781.js.map +1 -0
  31. package/dist/widgets/842.js +446 -0
  32. package/dist/widgets/842.js.map +1 -0
  33. package/dist/widgets/968.js +10 -0
  34. package/dist/widgets/968.js.map +1 -0
  35. package/dist/widgets/997.js +35 -0
  36. package/dist/widgets/997.js.map +1 -0
  37. package/dist/widgets/@mf-types.d.ts +3 -0
  38. package/dist/widgets/@mf-types.zip +0 -0
  39. package/dist/widgets/__federation_expose_QADashboard.js +2 -0
  40. package/dist/widgets/__federation_expose_QADashboard.js.map +1 -0
  41. package/dist/widgets/mf-manifest.json +262 -0
  42. package/dist/widgets/mf-stats.json +301 -0
  43. package/dist/widgets/remoteEntry.js +7 -0
  44. package/dist/widgets/remoteEntry.js.map +1 -0
  45. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -125,7 +125,7 @@ var manifest = {
125
125
  cli: {
126
126
  commands: [
127
127
  {
128
- id: "qa:run",
128
+ id: "run",
129
129
  group: "qa",
130
130
  describe: "Run all QA checks (build, lint, types, tests)",
131
131
  longDescription: "Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. Compares with baseline if available. Supports incremental builds and package filtering.",
@@ -135,7 +135,7 @@ var manifest = {
135
135
  permissions: pluginPermissions
136
136
  },
137
137
  {
138
- id: "qa:save",
138
+ id: "save",
139
139
  group: "qa",
140
140
  describe: "Run QA checks and save results to history",
141
141
  longDescription: "Runs all QA checks and saves the results as a history entry. History is stored in .kb/qa/history.json (max 50 entries).",
@@ -145,7 +145,7 @@ var manifest = {
145
145
  permissions: pluginPermissions
146
146
  },
147
147
  {
148
- id: "qa:history",
148
+ id: "history",
149
149
  group: "qa",
150
150
  describe: "Show QA run history",
151
151
  longDescription: "Displays the QA run history with pass/fail status for each check type.",
@@ -155,7 +155,7 @@ var manifest = {
155
155
  permissions: pluginPermissions
156
156
  },
157
157
  {
158
- id: "qa:trends",
158
+ id: "trends",
159
159
  group: "qa",
160
160
  describe: "Show QA quality trends over time",
161
161
  longDescription: "Analyzes quality trends by comparing failure counts over a sliding window of history entries.",
@@ -165,7 +165,7 @@ var manifest = {
165
165
  permissions: pluginPermissions
166
166
  },
167
167
  {
168
- id: "qa:regressions",
168
+ id: "regressions",
169
169
  group: "qa",
170
170
  describe: "Detect regressions since last QA save",
171
171
  longDescription: "Compares the last two history entries to detect new failures. Exits with code 1 if regressions are found. Use before merging.",
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","/**\n * QA Plugin Manifest V3\n *\n * Automated quality checks, baseline tracking, and regression detection.\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaSaveFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n} from './cli/commands/flags.js';\nimport {\n QA_BASE_PATH,\n QA_ROUTES,\n} from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['qa:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000,\n memoryMb: 2048,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/qa',\n version: '0.1.0',\n\n configSection: 'qa',\n\n display: {\n name: 'QA Plugin',\n description: 'Automated quality checks, baseline tracking, and regression detection',\n tags: ['qa', 'quality', 'baseline', 'regression', 'testing'],\n },\n\n platform: {\n requires: ['storage'],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n commands: [\n {\n id: 'qa:run',\n group: 'qa',\n describe: 'Run all QA checks (build, lint, types, tests)',\n longDescription:\n 'Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. ' +\n 'Compares with baseline if available. Supports incremental builds and package filtering.',\n handler: './cli/commands/qa-run.js#default',\n handlerPath: './cli/commands/qa-run.js',\n flags: defineCommandFlags(qaRunFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:save',\n group: 'qa',\n describe: 'Run QA checks and save results to history',\n longDescription:\n 'Runs all QA checks and saves the results as a history entry. ' +\n 'History is stored in .kb/qa/history.json (max 50 entries).',\n handler: './cli/commands/qa-save.js#default',\n handlerPath: './cli/commands/qa-save.js',\n flags: defineCommandFlags(qaSaveFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:history',\n group: 'qa',\n describe: 'Show QA run history',\n longDescription: 'Displays the QA run history with pass/fail status for each check type.',\n handler: './cli/commands/qa-history.js#default',\n handlerPath: './cli/commands/qa-history.js',\n flags: defineCommandFlags(qaHistoryFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:trends',\n group: 'qa',\n describe: 'Show QA quality trends over time',\n longDescription:\n 'Analyzes quality trends by comparing failure counts over a sliding window of history entries.',\n handler: './cli/commands/qa-trends.js#default',\n handlerPath: './cli/commands/qa-trends.js',\n flags: defineCommandFlags(qaTrendsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:regressions',\n group: 'qa',\n describe: 'Detect regressions since last QA save',\n longDescription:\n 'Compares the last two history entries to detect new failures. ' +\n 'Exits with code 1 if regressions are found. Use before merging.',\n handler: './cli/commands/qa-regressions.js#default',\n handlerPath: './cli/commands/qa-regressions.js',\n flags: defineCommandFlags(qaRegressionsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:update',\n group: 'qa',\n describe: 'Run full QA and save as new baseline',\n longDescription:\n 'Runs all QA checks and saves the results as the current baseline. ' +\n 'Future qa:run calls will compare against this baseline.',\n handler: './cli/commands/baseline-update.js#default',\n handlerPath: './cli/commands/baseline-update.js',\n flags: defineCommandFlags(baselineUpdateFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:status',\n group: 'qa',\n describe: 'Show current baseline status',\n longDescription: 'Displays the current baseline snapshot with pass/fail counts per check type.',\n handler: './cli/commands/baseline-status.js#default',\n handlerPath: './cli/commands/baseline-status.js',\n flags: defineCommandFlags(baselineStatusFlags),\n permissions: pluginPermissions,\n },\n ],\n },\n\n // REST API routes\n rest: {\n basePath: QA_BASE_PATH,\n routes: [\n // GET /summary\n {\n method: 'GET',\n path: QA_ROUTES.SUMMARY,\n handler: './rest/handlers/summary-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QASummaryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QASummaryResponseSchema',\n },\n },\n // GET /latest\n {\n method: 'GET',\n path: QA_ROUTES.LATEST,\n handler: './rest/handlers/latest-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QALatestRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QALatestResponseSchema',\n },\n },\n // GET /history\n {\n method: 'GET',\n path: QA_ROUTES.HISTORY,\n handler: './rest/handlers/history-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAHistoryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAHistoryResponseSchema',\n },\n },\n // GET /trends\n {\n method: 'GET',\n path: QA_ROUTES.TRENDS,\n handler: './rest/handlers/trends-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QATrendsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QATrendsResponseSchema',\n },\n },\n // GET /regressions\n {\n method: 'GET',\n path: QA_ROUTES.REGRESSIONS,\n handler: './rest/handlers/regressions-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARegressionsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARegressionsResponseSchema',\n },\n },\n // GET /baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE,\n handler: './rest/handlers/baseline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineResponseSchema',\n },\n },\n // POST /run\n {\n method: 'POST',\n path: QA_ROUTES.RUN,\n handler: './rest/handlers/run-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunResponseSchema',\n },\n },\n // GET /details — per-package details with error text\n {\n method: 'GET',\n path: QA_ROUTES.DETAILS,\n handler: './rest/handlers/details-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QADetailsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QADetailsResponseSchema',\n },\n },\n // POST /run/check — run a single check type\n {\n method: 'POST',\n path: QA_ROUTES.RUN_CHECK,\n handler: './rest/handlers/run-check-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunCheckRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunCheckResponseSchema',\n },\n },\n // POST /baseline/update — update baseline from last run\n {\n method: 'POST',\n path: QA_ROUTES.BASELINE_UPDATE,\n handler: './rest/handlers/baseline-update-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateResponseSchema',\n },\n },\n // GET /baseline/diff — diff current state vs baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE_DIFF,\n handler: './rest/handlers/baseline-diff-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffResponseSchema',\n },\n },\n // GET /packages/:name/timeline — per-package QA timeline\n {\n method: 'GET',\n path: QA_ROUTES.PACKAGE_TIMELINE,\n handler: './rest/handlers/package-timeline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineResponseSchema',\n },\n },\n // GET /errors/groups — grouped errors by pattern\n {\n method: 'GET',\n path: QA_ROUTES.ERROR_GROUPS,\n handler: './rest/handlers/error-groups-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsResponseSchema',\n },\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'qaPlugin',\n pages: [\n {\n id: 'qa.overview',\n title: 'QA',\n icon: 'ExperimentOutlined',\n route: '/p/qa',\n entry: './QADashboard',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'qa',\n label: 'QA',\n icon: 'ExperimentOutlined',\n target: 'qa.overview',\n order: 50,\n },\n ],\n },\n\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
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","/**\n * QA Plugin Manifest V3\n *\n * Automated quality checks, baseline tracking, and regression detection.\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaSaveFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n} from './cli/commands/flags.js';\nimport {\n QA_BASE_PATH,\n QA_ROUTES,\n} from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['qa:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000,\n memoryMb: 2048,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/qa',\n version: '0.1.0',\n\n configSection: 'qa',\n\n display: {\n name: 'QA Plugin',\n description: 'Automated quality checks, baseline tracking, and regression detection',\n tags: ['qa', 'quality', 'baseline', 'regression', 'testing'],\n },\n\n platform: {\n requires: ['storage'],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n commands: [\n {\n id: '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: '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"]}
package/dist/manifest.js CHANGED
@@ -125,7 +125,7 @@ var manifest = {
125
125
  cli: {
126
126
  commands: [
127
127
  {
128
- id: "qa:run",
128
+ id: "run",
129
129
  group: "qa",
130
130
  describe: "Run all QA checks (build, lint, types, tests)",
131
131
  longDescription: "Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. Compares with baseline if available. Supports incremental builds and package filtering.",
@@ -135,7 +135,7 @@ var manifest = {
135
135
  permissions: pluginPermissions
136
136
  },
137
137
  {
138
- id: "qa:save",
138
+ id: "save",
139
139
  group: "qa",
140
140
  describe: "Run QA checks and save results to history",
141
141
  longDescription: "Runs all QA checks and saves the results as a history entry. History is stored in .kb/qa/history.json (max 50 entries).",
@@ -145,7 +145,7 @@ var manifest = {
145
145
  permissions: pluginPermissions
146
146
  },
147
147
  {
148
- id: "qa:history",
148
+ id: "history",
149
149
  group: "qa",
150
150
  describe: "Show QA run history",
151
151
  longDescription: "Displays the QA run history with pass/fail status for each check type.",
@@ -155,7 +155,7 @@ var manifest = {
155
155
  permissions: pluginPermissions
156
156
  },
157
157
  {
158
- id: "qa:trends",
158
+ id: "trends",
159
159
  group: "qa",
160
160
  describe: "Show QA quality trends over time",
161
161
  longDescription: "Analyzes quality trends by comparing failure counts over a sliding window of history entries.",
@@ -165,7 +165,7 @@ var manifest = {
165
165
  permissions: pluginPermissions
166
166
  },
167
167
  {
168
- id: "qa:regressions",
168
+ id: "regressions",
169
169
  group: "qa",
170
170
  describe: "Detect regressions since last QA save",
171
171
  longDescription: "Compares the last two history entries to detect new failures. Exits with code 1 if regressions are found. Use before merging.",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * QA Plugin CLI flag definitions.\n * DRY: Define once, use in manifest and command handlers.\n */\n\nconst JSON_FLAG_DESCRIPTION = 'Output JSON format';\n\nexport const qaRunFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n 'skip-check': {\n type: 'array',\n description: 'Skip specific check IDs (e.g. --skip-check build --skip-check lint)',\n },\n 'no-cache': {\n type: 'boolean',\n description: 'Disable caching (force full run)',\n default: false,\n },\n all: {\n type: 'boolean',\n description: 'Run all packages, ignoring affected analysis',\n default: false,\n },\n package: {\n type: 'string',\n description: 'Filter by package name',\n alias: 'p',\n },\n repo: {\n type: 'string',\n description: 'Filter by repo name',\n alias: 'r',\n },\n scope: {\n type: 'string',\n description: 'Filter by npm scope',\n alias: 's',\n },\n summary: {\n type: 'boolean',\n description: 'Show summary-only report (legacy flat format)',\n default: false,\n },\n} as const;\n\nexport type QARunFlags = typeof qaRunFlags;\n\nexport const qaSaveFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QASaveFlags = typeof qaSaveFlags;\n\nexport const qaHistoryFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n limit: {\n type: 'number',\n description: 'Number of entries to show',\n default: 20,\n },\n} as const;\n\nexport type QAHistoryFlags = typeof qaHistoryFlags;\n\nexport const qaTrendsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n window: {\n type: 'number',\n description: 'Number of entries for trend window',\n default: 10,\n },\n} as const;\n\nexport type QATrendsFlags = typeof qaTrendsFlags;\n\nexport const qaRegressionsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QARegressionsFlags = typeof qaRegressionsFlags;\n\nexport const baselineUpdateFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineUpdateFlags = typeof baselineUpdateFlags;\n\nexport const baselineStatusFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineStatusFlags = typeof baselineStatusFlags;\n","/**\n * QA Plugin Manifest V3\n *\n * Automated quality checks, baseline tracking, and regression detection.\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaSaveFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n} from './cli/commands/flags.js';\nimport {\n QA_BASE_PATH,\n QA_ROUTES,\n} from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['qa:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000,\n memoryMb: 2048,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/qa',\n version: '0.1.0',\n\n configSection: 'qa',\n\n display: {\n name: 'QA Plugin',\n description: 'Automated quality checks, baseline tracking, and regression detection',\n tags: ['qa', 'quality', 'baseline', 'regression', 'testing'],\n },\n\n platform: {\n requires: ['storage'],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n commands: [\n {\n id: 'qa:run',\n group: 'qa',\n describe: 'Run all QA checks (build, lint, types, tests)',\n longDescription:\n 'Runs comprehensive QA checks across the monorepo: build, lint, type check, and tests. ' +\n 'Compares with baseline if available. Supports incremental builds and package filtering.',\n handler: './cli/commands/qa-run.js#default',\n handlerPath: './cli/commands/qa-run.js',\n flags: defineCommandFlags(qaRunFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:save',\n group: 'qa',\n describe: 'Run QA checks and save results to history',\n longDescription:\n 'Runs all QA checks and saves the results as a history entry. ' +\n 'History is stored in .kb/qa/history.json (max 50 entries).',\n handler: './cli/commands/qa-save.js#default',\n handlerPath: './cli/commands/qa-save.js',\n flags: defineCommandFlags(qaSaveFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:history',\n group: 'qa',\n describe: 'Show QA run history',\n longDescription: 'Displays the QA run history with pass/fail status for each check type.',\n handler: './cli/commands/qa-history.js#default',\n handlerPath: './cli/commands/qa-history.js',\n flags: defineCommandFlags(qaHistoryFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:trends',\n group: 'qa',\n describe: 'Show QA quality trends over time',\n longDescription:\n 'Analyzes quality trends by comparing failure counts over a sliding window of history entries.',\n handler: './cli/commands/qa-trends.js#default',\n handlerPath: './cli/commands/qa-trends.js',\n flags: defineCommandFlags(qaTrendsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'qa:regressions',\n group: 'qa',\n describe: 'Detect regressions since last QA save',\n longDescription:\n 'Compares the last two history entries to detect new failures. ' +\n 'Exits with code 1 if regressions are found. Use before merging.',\n handler: './cli/commands/qa-regressions.js#default',\n handlerPath: './cli/commands/qa-regressions.js',\n flags: defineCommandFlags(qaRegressionsFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:update',\n group: 'qa',\n describe: 'Run full QA and save as new baseline',\n longDescription:\n 'Runs all QA checks and saves the results as the current baseline. ' +\n 'Future qa:run calls will compare against this baseline.',\n handler: './cli/commands/baseline-update.js#default',\n handlerPath: './cli/commands/baseline-update.js',\n flags: defineCommandFlags(baselineUpdateFlags),\n permissions: pluginPermissions,\n },\n {\n id: 'baseline:status',\n group: 'qa',\n describe: 'Show current baseline status',\n longDescription: 'Displays the current baseline snapshot with pass/fail counts per check type.',\n handler: './cli/commands/baseline-status.js#default',\n handlerPath: './cli/commands/baseline-status.js',\n flags: defineCommandFlags(baselineStatusFlags),\n permissions: pluginPermissions,\n },\n ],\n },\n\n // REST API routes\n rest: {\n basePath: QA_BASE_PATH,\n routes: [\n // GET /summary\n {\n method: 'GET',\n path: QA_ROUTES.SUMMARY,\n handler: './rest/handlers/summary-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QASummaryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QASummaryResponseSchema',\n },\n },\n // GET /latest\n {\n method: 'GET',\n path: QA_ROUTES.LATEST,\n handler: './rest/handlers/latest-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QALatestRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QALatestResponseSchema',\n },\n },\n // GET /history\n {\n method: 'GET',\n path: QA_ROUTES.HISTORY,\n handler: './rest/handlers/history-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAHistoryRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAHistoryResponseSchema',\n },\n },\n // GET /trends\n {\n method: 'GET',\n path: QA_ROUTES.TRENDS,\n handler: './rest/handlers/trends-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QATrendsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QATrendsResponseSchema',\n },\n },\n // GET /regressions\n {\n method: 'GET',\n path: QA_ROUTES.REGRESSIONS,\n handler: './rest/handlers/regressions-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARegressionsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARegressionsResponseSchema',\n },\n },\n // GET /baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE,\n handler: './rest/handlers/baseline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineResponseSchema',\n },\n },\n // POST /run\n {\n method: 'POST',\n path: QA_ROUTES.RUN,\n handler: './rest/handlers/run-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunResponseSchema',\n },\n },\n // GET /details — per-package details with error text\n {\n method: 'GET',\n path: QA_ROUTES.DETAILS,\n handler: './rest/handlers/details-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QADetailsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QADetailsResponseSchema',\n },\n },\n // POST /run/check — run a single check type\n {\n method: 'POST',\n path: QA_ROUTES.RUN_CHECK,\n handler: './rest/handlers/run-check-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QARunCheckRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QARunCheckResponseSchema',\n },\n },\n // POST /baseline/update — update baseline from last run\n {\n method: 'POST',\n path: QA_ROUTES.BASELINE_UPDATE,\n handler: './rest/handlers/baseline-update-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineUpdateResponseSchema',\n },\n },\n // GET /baseline/diff — diff current state vs baseline\n {\n method: 'GET',\n path: QA_ROUTES.BASELINE_DIFF,\n handler: './rest/handlers/baseline-diff-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QABaselineDiffResponseSchema',\n },\n },\n // GET /packages/:name/timeline — per-package QA timeline\n {\n method: 'GET',\n path: QA_ROUTES.PACKAGE_TIMELINE,\n handler: './rest/handlers/package-timeline-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAPackageTimelineResponseSchema',\n },\n },\n // GET /errors/groups — grouped errors by pattern\n {\n method: 'GET',\n path: QA_ROUTES.ERROR_GROUPS,\n handler: './rest/handlers/error-groups-handler.js#default',\n input: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsRequestSchema',\n },\n output: {\n zod: '@kb-labs/qa-contracts#QAErrorGroupsResponseSchema',\n },\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'qaPlugin',\n pages: [\n {\n id: 'qa.overview',\n title: 'QA',\n icon: 'ExperimentOutlined',\n route: '/p/qa',\n entry: './QADashboard',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'qa',\n label: 'QA',\n icon: 'ExperimentOutlined',\n target: 'qa.overview',\n order: 50,\n },\n ],\n },\n\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/flags.ts","../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * QA Plugin CLI flag definitions.\n * DRY: Define once, use in manifest and command handlers.\n */\n\nconst JSON_FLAG_DESCRIPTION = 'Output JSON format';\n\nexport const qaRunFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n 'skip-check': {\n type: 'array',\n description: 'Skip specific check IDs (e.g. --skip-check build --skip-check lint)',\n },\n 'no-cache': {\n type: 'boolean',\n description: 'Disable caching (force full run)',\n default: false,\n },\n all: {\n type: 'boolean',\n description: 'Run all packages, ignoring affected analysis',\n default: false,\n },\n package: {\n type: 'string',\n description: 'Filter by package name',\n alias: 'p',\n },\n repo: {\n type: 'string',\n description: 'Filter by repo name',\n alias: 'r',\n },\n scope: {\n type: 'string',\n description: 'Filter by npm scope',\n alias: 's',\n },\n summary: {\n type: 'boolean',\n description: 'Show summary-only report (legacy flat format)',\n default: false,\n },\n} as const;\n\nexport type QARunFlags = typeof qaRunFlags;\n\nexport const qaSaveFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QASaveFlags = typeof qaSaveFlags;\n\nexport const qaHistoryFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n limit: {\n type: 'number',\n description: 'Number of entries to show',\n default: 20,\n },\n} as const;\n\nexport type QAHistoryFlags = typeof qaHistoryFlags;\n\nexport const qaTrendsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n window: {\n type: 'number',\n description: 'Number of entries for trend window',\n default: 10,\n },\n} as const;\n\nexport type QATrendsFlags = typeof qaTrendsFlags;\n\nexport const qaRegressionsFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type QARegressionsFlags = typeof qaRegressionsFlags;\n\nexport const baselineUpdateFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineUpdateFlags = typeof baselineUpdateFlags;\n\nexport const baselineStatusFlags = {\n json: {\n type: 'boolean',\n description: JSON_FLAG_DESCRIPTION,\n default: false,\n },\n} as const;\n\nexport type BaselineStatusFlags = typeof baselineStatusFlags;\n","/**\n * QA Plugin Manifest V3\n *\n * Automated quality checks, baseline tracking, and regression detection.\n */\n\nimport {\n combinePermissions,\n kbPlatformPreset,\n defineCommandFlags,\n} from '@kb-labs/sdk';\nimport {\n qaRunFlags,\n qaSaveFlags,\n qaHistoryFlags,\n qaTrendsFlags,\n qaRegressionsFlags,\n baselineUpdateFlags,\n baselineStatusFlags,\n} from './cli/commands/flags.js';\nimport {\n QA_BASE_PATH,\n QA_ROUTES,\n} from '@kb-labs/qa-contracts';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: ['**'],\n })\n .withPlatform({\n cache: ['qa:'],\n analytics: true,\n })\n .withQuotas({\n timeoutMs: 600000,\n memoryMb: 2048,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/qa',\n version: '0.1.0',\n\n configSection: 'qa',\n\n display: {\n name: 'QA Plugin',\n description: 'Automated quality checks, baseline tracking, and regression detection',\n tags: ['qa', 'quality', 'baseline', 'regression', 'testing'],\n },\n\n platform: {\n requires: ['storage'],\n optional: ['cache', 'analytics', 'logger'],\n },\n\n cli: {\n commands: [\n {\n id: '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: '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"]}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_kb_labs_qa_entry=self.webpackChunk_kb_labs_qa_entry||[]).push([["117"],{2924(e,r,n){n.r(r),n.d(r,{UIAccordion:()=>eV,UIAlert:()=>e7,UIAreaChart:()=>ei,UIAvatar:()=>G,UIAvatarGroup:()=>X,UIBadge:()=>w,UIBarChart:()=>ec,UIBox:()=>m,UIBreadcrumb:()=>eX,UIButton:()=>M,UICard:()=>z,UICheckbox:()=>ez,UICheckboxGroup:()=>eF,UICol:()=>T,UIColumnChart:()=>eo,UIDatePicker:()=>eD,UIDescriptions:()=>ep,UIDescriptionsItem:()=>ex,UIDiffViewer:()=>rM,UIDivider:()=>k,UIDrawer:()=>rb,UIDropdown:()=>eY,UIDropdownButton:()=>eJ,UIEmptyState:()=>e9,UIErrorState:()=>rr,UIFlex:()=>h,UIForm:()=>eB,UIFormItem:()=>eM,UIFormList:()=>eP,UIHeader:()=>e6,UIIcon:()=>_,UIIconButton:()=>H,UIInput:()=>eU,UIInputNumber:()=>eL,UIInputPassword:()=>eT,UIInputSearch:()=>eC,UIInputTextArea:()=>ek,UIJsonViewer:()=>rC,UILineChart:()=>er,UIList:()=>eb,UIListItem:()=>eS,UIListItemMeta:()=>ev,UIMarkdownViewer:()=>rT,UIMenu:()=>eZ,UIMessage:()=>rd,UIMetricCard:()=>J,UIModal:()=>rp,UIModalConfirm:()=>rx,UIModalError:()=>ry,UIModalInfo:()=>rm,UIModalSuccess:()=>rh,UIModalWarning:()=>rj,UINotification:()=>rg,UIPage:()=>e1,UIPageHeader:()=>e3,UIPageSection:()=>e5,UIPieChart:()=>ea,UIPopconfirm:()=>rS,UIPopover:()=>rv,UIProgress:()=>ef,UIRadio:()=>eW,UIRadioGroup:()=>eN,UIRangePicker:()=>eR,UIResult:()=>rc,UIRow:()=>U,UISegmented:()=>eq,UISelect:()=>ew,UIShimmerText:()=>V,UISkeleton:()=>rn,UISkeletonButton:()=>ro,UISkeletonImage:()=>ri,UISkeletonInput:()=>rt,UISkeletonNode:()=>rl,UISkeletonText:()=>ra,UISlider:()=>eG,UISpace:()=>S,UISpaceCompact:()=>v,UISpin:()=>rs,UIStack:()=>b,UIStatistic:()=>eu,UIStatisticCountdown:()=>eg,UIStatisticsChart:()=>ed,UISteps:()=>eQ,UISwitch:()=>eA,UITable:()=>q,UITabs:()=>eO,UITag:()=>A,UIText:()=>x,UITimePicker:()=>e$,UITimeline:()=>em,UITimelineItem:()=>eh,UITitle:()=>R,UITooltip:()=>rI,UITree:()=>ey,UITreeDirectoryTree:()=>ej,UITreeNode:()=>eI,UITypographyLink:()=>I,UITypographyParagraph:()=>j,UITypographyText:()=>y,UIUpload:()=>e_,UIUploadDragger:()=>eH,createFillFunction:()=>Z,registerIconRenderer:()=>N,useChartColors:()=>Q,useUIForm:()=>eE,useUIMessage:()=>ru,useUINotification:()=>rf,useUITheme:()=>K});var o=n(4984),t=n(5783),i=n(8048),l=n(5259),a=n(3545),s=n(7865),c=n(7434),d=n(7507),u=n(4356),g=n(6911),f=n(4391),{useToken:p}=o.theme;function x({children:e,size:r="base",weight:n="normal",color:o="primary",as:l="span",className:a,style:s}){let{token:c}=p(),d={primary:c.colorText,secondary:c.colorTextSecondary,success:c.colorSuccess,warning:c.colorWarning,error:c.colorError,info:c.colorInfo},u={...{fontSize:t.typography.fontSize[r][0],lineHeight:t.typography.fontSize[r][1].lineHeight,fontWeight:t.typography.fontWeight[n],color:d[o]},...s};return(0,i.jsx)(l,{style:u,className:a,children:e})}function m({children:e,p:r,pt:n,pr:o,pb:l,pl:a,m:s,mt:c,mr:d,mb:u,ml:g,as:f="div",className:p,style:x}){let h={...void 0!==r&&{padding:t.spacing[r]},...void 0!==n&&{paddingTop:t.spacing[n]},...void 0!==o&&{paddingRight:t.spacing[o]},...void 0!==l&&{paddingBottom:t.spacing[l]},...void 0!==a&&{paddingLeft:t.spacing[a]},...void 0!==s&&{margin:t.spacing[s]},...void 0!==c&&{marginTop:t.spacing[c]},...void 0!==d&&{marginRight:t.spacing[d]},...void 0!==u&&{marginBottom:t.spacing[u]},...void 0!==g&&{marginLeft:t.spacing[g]},...x};return(0,i.jsx)(f,{style:h,className:p,children:e})}function h({children:e,direction:r="row",justify:n="start",align:o="stretch",gap:l,wrap:a="nowrap",as:s="div",className:c,style:d}){let u={display:"flex",flexDirection:r,justifyContent:{start:"flex-start",end:"flex-end",center:"center",between:"space-between",around:"space-around",evenly:"space-evenly"}[n],alignItems:{start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch"}[o],flexWrap:a,...void 0!==l&&{gap:t.spacing[l]},...d};return(0,i.jsx)(s,{style:u,className:c,children:e})}function y(e){return(0,i.jsx)(o.Typography.Text,{...e})}function j(e){return(0,i.jsx)(o.Typography.Paragraph,{...e})}function I(e){return(0,i.jsx)(o.Typography.Link,{...e})}function b({direction:e="vertical",spacing:r=2,align:n,children:o,as:t,className:l,style:a}){return(0,i.jsx)(h,{direction:"vertical"===e?"column":"row",gap:r,align:n,as:t,className:l,style:a,children:o})}function S(e){return(0,i.jsx)(o.Space,{...e})}function v(e){return(0,i.jsx)(o.Space.Compact,{...e})}function U(e){return(0,i.jsx)(o.Row,{...e})}function T(e){return(0,i.jsx)(o.Col,{...e})}function k(e){return(0,i.jsx)(o.Divider,{...e})}var{useToken:C}=o.theme;function w({variant:e="default",children:r,...n}){let{token:t}=C(),l={success:t.colorSuccess,warning:t.colorWarning,error:t.colorError,info:t.colorInfo,default:t.colorTextSecondary};return r?(0,i.jsx)(o.Badge,{color:l[e],text:r,...n}):(0,i.jsx)(o.Badge,{status:{success:"success",warning:"warning",error:"error",info:"processing",default:"default"}[e],...n})}var B={},M=l.forwardRef(function({variant:e="default",className:r,...n},t){let l=[B.uiButton,r].filter(Boolean).join(" ");return(0,i.jsx)(o.Button,{ref:t,type:e,className:l,...n})}),{useToken:E}=o.theme,P={default:{tint:"transparent",accent:"transparent",border:"var(--border-primary, #e8eaed)"},success:{tint:"rgba(82,196,26,0.07)",accent:"#52c41a",border:"rgba(82,196,26,0.25)"},warning:{tint:"rgba(250,173,20,0.08)",accent:"#faad14",border:"rgba(250,173,20,0.30)"},error:{tint:"rgba(255,77,79,0.07)",accent:"#ff4d4f",border:"rgba(255,77,79,0.25)"},info:{tint:"rgba(12,102,255,0.07)",accent:"#0c66ff",border:"rgba(12,102,255,0.20)"}};function z({title:e,subtitle:r,extra:n,footer:t,children:l,size:a="default",bordered:s=!0,hoverable:c=!1,loading:d=!1,status:u="default",...g}){let{token:f}=E(),p=P[u],h=e||r?(0,i.jsxs)(m,{children:[e&&("string"==typeof e?(0,i.jsx)(x,{size:"lg",weight:"semibold",as:"div",children:e}):e),r&&(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",style:{marginTop:f.marginXXS},children:r})]}):void 0;return(0,i.jsxs)(o.Card,{title:h,extra:n,size:a,variant:s?"outlined":"borderless",hoverable:c,loading:d,...g,style:{boxShadow:c?"0 4px 16px rgba(0,0,0,0.08)":"0 1px 3px rgba(0,0,0,0.06)",transition:"box-shadow 200ms ease, transform 200ms ease",backgroundColor:"default"!==u?p.tint:void 0,borderColor:p.border,borderTopColor:"default"!==u?p.accent:p.border,borderTopWidth:"default"!==u?3:1,overflow:"hidden",...g.style},children:[l,t&&(0,i.jsx)(m,{mt:3,pt:3,style:{borderTop:`1px solid ${f.colorBorder}`},children:t})]})}var{useToken:F}=o.theme;function A({variant:e="default",color:r,children:n,closable:t,onClose:l,icon:a,...s}){let{token:c}=F(),d={success:c.colorSuccess,warning:c.colorWarning,error:c.colorError,info:c.colorInfo,default:c.colorPrimary,neutral:c.colorTextSecondary};return(0,i.jsx)(o.Tag,{color:r??d[e],closable:t,onClose:l,icon:a,...s,children:n})}var{Title:D}=o.Typography,{useToken:$}=o.theme;function R({level:e=1,children:r,subtitle:n,className:o,style:l}){let{token:a}=$();return n?(0,i.jsxs)(m,{mb:n?2:3,children:[(0,i.jsx)(D,{level:e,className:o,style:{margin:0,...l},children:r}),(0,i.jsx)(x,{size:"base",color:"secondary",as:"div",style:{marginTop:t.spacing["1"]},children:n})]}):(0,i.jsx)(D,{level:e,className:o,style:{marginBottom:t.spacing["3"],...l},children:r})}var L={},W=null;function N(e){W=e}function _({icon:e,name:r,size:n="base",color:o="inherit",spin:t=!1,onClick:a,className:s,style:c}){let d=[L.uiIcon,"anticon",L[`size-${n}`],L[`color-${o}`],t&&L.spin,a&&L.clickable,s].filter(Boolean).join(" "),u=null,g=r||("string"==typeof e?e:null);return(g?W?u=W(g):(console.warn(`Icon "${g}" could not be loaded. Call registerIconRenderer() at app startup.`),u=null):l.isValidElement(e)&&(u=e),u)?(0,i.jsx)("span",{className:d,style:c,onClick:a,role:a?"button":void 0,tabIndex:a?0:void 0,onKeyDown:a?e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),a())}:void 0,children:u}):null}var H=({icon:e,name:r,onClick:n,size:o="base",color:t="primary",...l})=>(0,i.jsx)(_,{icon:e,name:r,size:o,color:t,onClick:n,style:{cursor:"pointer",transition:"opacity 0.2s",...l.style},...l});function G(e){return(0,i.jsx)(o.Avatar,{...e})}function X(e){return(0,i.jsx)(o.Avatar.Group,{...e})}function K(){return o.theme.useToken()}var O={};function V({children:e,color:r="var(--text-secondary, #9CA3AF)",highlight:n="var(--text-primary, #111827)",duration:o="2s",className:t,style:l}){return(0,i.jsx)("span",{className:[O.shimmer,t].filter(Boolean).join(" "),style:{"--shimmer-color-1":r,"--shimmer-color-2":r,"--shimmer-highlight":n,"--shimmer-duration":o,...l},children:e})}var{useToken:Y}=o.theme;function J({label:e,value:r,trend:n="neutral",delta:t,unit:l,size:a="default",showDelta:s=!0,loading:c=!1}){let{token:d}=Y(),u="up"===n?d.colorSuccess:"down"===n?d.colorError:d.colorText;return(0,i.jsx)(o.Card,{size:a,loading:c,style:{height:"100%"},children:(0,i.jsxs)(m,{children:[(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",children:e}),(0,i.jsxs)(h,{align:"baseline",gap:2,style:{marginTop:d.marginXS},children:[(0,i.jsx)(x,{size:"2xl",weight:"bold",as:"div",style:{color:u},children:r}),l&&(0,i.jsx)(x,{size:"base",color:"secondary",children:l})]}),s&&void 0!==t&&(0,i.jsx)(h,{align:"center",gap:1,style:{marginTop:d.marginXS},children:(0,i.jsxs)(x,{size:"sm",style:{color:t>=0?d.colorSuccess:d.colorError},children:["up"===n?"↑":"down"===n?"↓":""," ",Math.abs(t),"%"]})})]})})}function q({columns:e,dataSource:r,rowKey:n="id",loading:t,pagination:l,rowSelection:a,onRow:s,size:c="middle",bordered:d=!1,expandable:u,className:g,style:f,scroll:p}){return(0,i.jsx)(o.Table,{columns:e,dataSource:r,rowKey:n,loading:t,pagination:l,rowSelection:a,onRow:s,size:c,bordered:d,expandable:u,className:g,style:f,scroll:p})}function Q(){return(0,l.useMemo)(()=>{let e=["#1677ff","#52c41a","#faad14","#ff4d4f","#1890ff","#722ed1","#eb2f96","#13c2c2","#fa8c16","#2f54eb"];console.log("[useChartColors] Created palette:",{colors:e});let r=[...e,"#e6f4ff","#f6ffed","#fffbe6","#fff2f0","#e6f4ff","#f759ab","#9254de","#40a9ff","#73d13d","#ffc53d"],n=r=>e[r%e.length]||"#1890ff";return{colors:e,extendedColors:r,getColor:n,mapColors:(e,r)=>{let o=Array.from(new Set(e.map(e=>String(e[r]??"")))),t={};return o.forEach((e,r)=>{t[e]=n(r)}),t}}},[])}function Z(e,r){return n=>{let o=String(n[r]??""),t=Object.keys(e)[0];return e[o]||(t?e[t]:"#1890ff")||"#1890ff"}}var{useToken:ee}=o.theme;function er({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=ee();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),s=l.useMemo(()=>{let o=n.colorField||n.seriesField;if(console.log("[UILineChart] Debug info:",{hasColorField:o,colorField:n.colorField,seriesField:n.seriesField,disableAutoColors:r,hasData:!!n.data,dataLength:n.data?.length,customColors:e,paletteColors:t.colors}),r||!o||!n.data)return console.log("[UILineChart] Skipping auto-colors:",{disableAutoColors:r,hasColorField:o,hasData:!!n.data}),n;let i=e||t.colors;return console.log("[UILineChart] Applying colors:",{source:e?"custom":"palette",colors:i}),{...n,scale:{...n.scale,color:{range:i}}}},[n,e,t.colors,r]);return(0,i.jsx)(a.A,{...s,theme:o})}var{useToken:en}=o.theme;function eo({colors:e,...r}){let n=function(){let{token:e}=en();return l.useMemo(()=>({defaultColor:e.colorPrimary,colors10:[e.colorInfo,e.colorSuccess,e.colorWarning,e.colorError,e.colorPrimary,e.colorInfoBg,e.colorSuccessBg,e.colorWarningBg,e.colorErrorBg,e.colorPrimaryBg],colors20:[e.colorInfo,e.colorSuccess,e.colorWarning,e.colorError,e.colorPrimary,e.colorInfoBg,e.colorSuccessBg,e.colorWarningBg,e.colorErrorBg,e.colorPrimaryBg,e.colorInfoBorder,e.colorSuccessBorder,e.colorWarningBorder,e.colorErrorBorder,e.colorPrimaryBorder,e.colorInfoText,e.colorSuccessText,e.colorWarningText,e.colorErrorText,e.colorPrimaryText],styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),o=e?{...n,colors10:e,colors20:e}:n;return(0,i.jsx)(s.A,{...r,theme:o})}var{useToken:et}=o.theme;function ei({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=et();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.colorField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(c.A,{...a,theme:o})}var{useToken:el}=o.theme;function ea({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=el();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.colorField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(d.A,{...a,theme:o})}var{useToken:es}=o.theme;function ec({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=es();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.seriesField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(u.A,{...a,theme:o})}function ed({data:e,loading:r=!1,title:n,metrics:t=[],xField:a="date",yField:s="value",colorField:c="category",style:d,height:u=350,showLegend:f=!0,chartProps:p}){let m=Q(),h=l.useMemo(()=>m.colors.slice(0,Math.max(t.length,3)),[m.colors,t.length]),y=l.useMemo(()=>e?0===t.length?e:e.flatMap(e=>{let r=[];for(let n of t){let o;o=n.key in e&&"number"==typeof e[n.key]?e[n.key]:e.metrics&&n.key in e.metrics?e.metrics[n.key]:0,n.transform&&(o=n.transform(o)),r.push({[a]:e.date?g(e.date).format("YYYY-MM-DD"):e[a],[c]:n.label,[s]:o})}return r}):[],[e,t,a,s,c]),j=()=>(0,i.jsxs)(i.Fragment,{children:[r&&(0,i.jsx)("div",{style:{textAlign:"center",padding:"40px 0"},children:(0,i.jsx)(x,{color:"secondary",children:"Loading chart data..."})}),!r&&(!y||0===y.length)&&(0,i.jsx)("div",{style:{textAlign:"center",padding:"40px 0"},children:(0,i.jsx)(x,{color:"secondary",children:"No data available for the selected date range"})}),!r&&y&&y.length>0&&(0,i.jsxs)("div",{children:[f&&0!==t.length?(0,i.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:12,gap:16},children:t.map((e,r)=>(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,i.jsx)("span",{style:{display:"inline-block",width:10,height:10,borderRadius:"50%",backgroundColor:h[r%h.length]}}),(0,i.jsx)("span",{style:{fontSize:13,fontWeight:500},children:e.label})]},e.label))}):null,(0,i.jsx)(er,{data:y,xField:a,yField:s,colorField:c,height:u,colors:h,scale:{color:{range:h}},axis:{x:{label:{autoRotate:!1}},y:{label:{formatter:e=>{let r=Number(e);return r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:r.toLocaleString()}}}},style:{shape:"smooth",lineWidth:2},legend:!1,tooltip:{title:e=>e[a],items:[e=>{let r=t.find(r=>r.label===e[c]),n=t.findIndex(r=>r.label===e[c]),o=e[s]?.toLocaleString()||"0";return r?.format&&null!=e[s]&&(o=r.format(e[s])),{name:e[c],value:o,color:h[n>=0?n:0]}}]},...p})]})]});return n?(0,i.jsx)(o.Card,{title:n,style:{marginTop:16,...d},children:j()}):(0,i.jsx)("div",{style:d,children:j()})}function eu(e){return(0,i.jsx)(o.Statistic,{...e})}function eg(e){return(0,i.jsx)(o.Statistic.Countdown,{...e})}function ef(e){return(0,i.jsx)(o.Progress,{...e})}function ep(e){return(0,i.jsx)(o.Descriptions,{...e})}function ex(e){return(0,i.jsx)(o.Descriptions.Item,{...e})}function em(e){return(0,i.jsx)(o.Timeline,{...e})}function eh(e){return(0,i.jsx)(o.Timeline.Item,{...e})}function ey(e){return(0,i.jsx)(o.Tree,{...e})}function ej(e){return(0,i.jsx)(o.Tree.DirectoryTree,{...e})}function eI(e){return(0,i.jsx)(o.Tree.TreeNode,{...e})}function eb(e){return(0,i.jsx)(o.List,{...e})}function eS(e){return(0,i.jsx)(o.List.Item,{...e})}function ev(e){return(0,i.jsx)(o.List.Item.Meta,{...e})}function eU({value:e,defaultValue:r,placeholder:n,disabled:t,prefix:l,suffix:a,maxLength:s,showCount:c,allowClear:d,onChange:u,onPressEnter:g,...f}){return(0,i.jsx)(o.Input,{value:e,defaultValue:r,placeholder:n,disabled:t,prefix:l,suffix:a,maxLength:s,showCount:c,allowClear:d,onChange:e=>{u?.(e.target.value)},onPressEnter:g,...f})}function eT(e){return(0,i.jsx)(o.Input.Password,{...e})}function ek(e){return(0,i.jsx)(o.Input.TextArea,{...e})}function eC(e){return(0,i.jsx)(o.Input.Search,{...e})}function ew({options:e=[],value:r,defaultValue:n,placeholder:t,disabled:l,loading:a,allowClear:s,showSearch:c,mode:d,onChange:u,...g}){let f=e.map(e=>({label:e.icon||e.description?(0,i.jsxs)(h,{align:"center",gap:2,style:{width:"100%"},children:[e.icon&&(0,i.jsx)("span",{children:e.icon}),(0,i.jsx)("span",{style:{flex:1},children:e.label}),e.description&&(0,i.jsx)("span",{style:{fontSize:"0.85em",opacity:.7},children:e.description})]}):e.label,value:e.value,disabled:e.disabled}));return(0,i.jsx)(o.Select,{options:f,value:r,defaultValue:n,placeholder:t,disabled:l,loading:a,allowClear:s,showSearch:c,mode:d,onChange:u,...g})}function eB({layout:e="vertical",onFinish:r,onFinishFailed:n,initialValues:t,children:l,...a}){return(0,i.jsx)(o.Form,{layout:e,onFinish:r,onFinishFailed:n,initialValues:t,...a,children:l})}function eM(e){return(0,i.jsx)(o.Form.Item,{...e})}var eE=o.Form.useForm;function eP(e){return(0,i.jsx)(o.Form.List,{...e})}function ez({children:e,checked:r,defaultChecked:n,disabled:t,indeterminate:l,onChange:a,...s}){return(0,i.jsx)(o.Checkbox,{checked:r,defaultChecked:n,disabled:t,indeterminate:l,onChange:e=>{a?.(e.target.checked)},...s,children:e})}function eF({options:e,value:r,defaultValue:n,disabled:l,gap:a=2,onChange:s}){return(0,i.jsx)(o.Checkbox.Group,{value:r,defaultValue:n,disabled:l,onChange:s,children:(0,i.jsx)(m,{children:e.map((r,n)=>(0,i.jsxs)(m,{mb:n<e.length-1?a:0,children:[(0,i.jsx)(o.Checkbox,{value:r.value,disabled:r.disabled,children:r.label}),r.description&&(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",style:{marginLeft:t.spacing["6"],marginTop:t.spacing["1"]},children:r.description})]},r.value))})})}function eA({checked:e,defaultChecked:r,disabled:n,loading:t,size:l="default",label:a,labelPosition:s="right",checkedChildren:c,unCheckedChildren:d,onChange:u,...g}){let f=(0,i.jsx)(o.Switch,{checked:e,defaultChecked:r,disabled:n,loading:t,size:l,checkedChildren:c,unCheckedChildren:d,onChange:u,...g});return a?(0,i.jsxs)(h,{align:"center",gap:2,children:["left"===s&&(0,i.jsx)(x,{children:a}),f,"right"===s&&(0,i.jsx)(x,{children:a})]}):f}function eD({value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a=!0,showTime:s,onChange:c,...d}){return(0,i.jsx)(o.DatePicker,{value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a,showTime:s,onChange:c,...d})}function e$({value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a=!0,onChange:s,...c}){return(0,i.jsx)(o.TimePicker,{value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a,onChange:s,...c})}function eR(e){return(0,i.jsx)(o.DatePicker.RangePicker,{...e})}function eL(e){return(0,i.jsx)(o.InputNumber,{...e})}function eW(e){return(0,i.jsx)(o.Radio,{...e})}function eN(e){return(0,i.jsx)(o.Radio.Group,{...e})}function e_(e){return(0,i.jsx)(o.Upload,{...e})}function eH(e){return(0,i.jsx)(o.Upload.Dragger,{...e})}function eG(e){return(0,i.jsx)(o.Slider,{...e})}function eX({items:e,separator:r,className:n}){let t=e.map(e=>({title:e.icon?(0,i.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[e.icon,(0,i.jsx)("span",{children:e.title})]}):e.title,href:e.href,onClick:e.onClick}));return(0,i.jsx)(o.Breadcrumb,{items:t,separator:r,className:n})}function eK({items:e,syncUrl:r,activeKey:n,defaultActiveKey:t,tabPosition:l="top",type:a="line",size:s="middle",onChange:c,onEdit:d,className:u,style:g}){let[p,x]=(0,f.useSearchParams)(),m=(0,f.useNavigate)(),h=(0,f.useParams)(),y=e[0]?.key??"",j=n,I=!0===r||"search"===r,b=r&&"object"==typeof r&&"path"===r.mode;I?j=p.get("tab")??y:b&&(j=h.tab??y);let S=e.map(e=>({key:e.key,label:e.icon?(0,i.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[e.icon,(0,i.jsx)("span",{children:e.label})]}):e.label,children:e.children,disabled:e.disabled,closable:e.closable}));return(0,i.jsx)(o.Tabs,{items:S,activeKey:j,defaultActiveKey:r?void 0:t,tabPosition:l,type:a,size:s,onChange:e=>{I?x(e===y?{}:{tab:e}):b&&"object"==typeof r&&m(e===y?r.basePath:`${r.basePath}/${e}`),c?.(e)},onEdit:d?(e,r)=>{d("string"==typeof e?e:"",r)}:void 0,className:u,style:g})}function eO(e){return(0,i.jsx)(eK,{...e})}function eV({items:e,activeKey:r,defaultActiveKey:n,accordion:t=!1,bordered:l=!0,ghost:a=!1,size:s="middle",onChange:c,className:d,style:u}){let g=e.map(e=>({key:e.key,label:e.label,children:e.children,extra:e.extra,showArrow:e.showArrow,collapsible:e.collapsible}));return(0,i.jsx)(o.Collapse,{items:g,activeKey:r,defaultActiveKey:n,accordion:t,bordered:l,ghost:a,size:s,onChange:c,className:d,style:u})}function eY(e){return(0,i.jsx)(o.Dropdown,{...e})}function eJ(e){return(0,i.jsx)(o.Dropdown.Button,{...e})}function eq(e){return(0,i.jsx)(o.Segmented,{...e})}function eQ(e){return(0,i.jsx)(o.Steps,{...e})}function eZ(e){return(0,i.jsx)(o.Menu,{...e})}var{useToken:e0}=o.theme;function e1({children:e,width:r="default",variant:n="default",className:o,style:t}){let{token:l}=e0(),a="document"===n,s={maxWidth:{default:"1280px",wide:"1600px",full:"100%"}[r],margin:"0 auto",padding:l.padding,...a&&{backgroundColor:l.colorBgContainer,borderRadius:l.borderRadiusLG,boxShadow:"0 1px 3px rgba(0,0,0,0.06)"},minHeight:a?void 0:"100%",...t};return(0,i.jsx)(m,{as:"main",className:o,style:s,children:e})}var{useToken:e2}=o.theme;function e6({title:e,subtitle:r,breadcrumb:n,actions:o,className:l,style:a}){let{token:s}=e2(),c={borderBottom:`1px solid ${s.colorBorder}`,paddingBottom:t.spacing["4"],marginBottom:t.spacing["6"],...a};return(0,i.jsxs)(m,{className:l,style:c,children:[n&&(0,i.jsx)(m,{mb:2,children:n}),(0,i.jsxs)(h,{justify:"between",align:"start",gap:4,children:[(0,i.jsxs)(m,{style:{flex:1},children:[(0,i.jsx)(R,{level:1,style:{marginBottom:r?t.spacing["2"]:0},children:e}),r&&(0,i.jsx)(x,{size:"base",color:"secondary",children:r})]}),o&&(0,i.jsx)(m,{style:{flexShrink:0},children:o})]})]})}var{useToken:e4}=o.theme;function e3({title:e,description:r,icon:n,breadcrumbs:o,actions:t,tabs:l,onBack:a,children:s}){let{token:c}=e4(),d=!!l;return(0,i.jsxs)("div",{style:{marginBottom:24*!d},children:[(a||o&&o.length>0)&&(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:c.marginXS,marginBottom:c.marginXS},children:[a&&(0,i.jsx)(M,{variant:"text",size:"small",icon:(0,i.jsx)(_,{name:"ArrowLeftOutlined"}),onClick:a,style:{padding:"0 4px"}}),o&&o.length>0&&(0,i.jsx)(eX,{items:o.map(e=>({title:e.title,...e.href?{href:e.href}:{}}))})]}),(0,i.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:c.marginSM},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:c.marginSM,minWidth:0},children:[n&&(0,i.jsx)("span",{style:{fontSize:24,color:c.colorPrimary,flexShrink:0,display:"flex",alignItems:"center"},children:n}),(0,i.jsxs)("div",{style:{minWidth:0},children:["string"==typeof e?(0,i.jsx)("h2",{style:{margin:0,fontSize:c.fontSizeHeading3,fontWeight:c.fontWeightStrong,color:c.colorTextHeading,lineHeight:1.3},children:e}):e,r&&(0,i.jsx)("div",{style:{marginTop:4},children:"string"==typeof r?(0,i.jsx)(x,{color:"secondary",size:"sm",children:r}):r})]})]}),t&&(0,i.jsx)("div",{style:{display:"flex",alignItems:"center",gap:c.marginXS,flexShrink:0},children:t})]}),s&&(0,i.jsx)("div",{style:{marginTop:c.marginSM},children:s}),d&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(k,{style:{marginBottom:0}}),l]})]})}function e5({children:e,gap:r=24,style:n,...o}){return(0,i.jsx)("div",{style:{marginBottom:r,...n},...o,children:e})}function e7({variant:e="info",title:r,message:n,description:t,showIcon:l,closable:a,onClose:s,action:c,icon:d,className:u,style:g}){return(0,i.jsx)(o.Alert,{type:e,message:r||n,description:r?t||n:t,showIcon:l,closable:a,onClose:s,action:c,icon:d,className:u,style:g})}var{useToken:e8}=o.theme;function e9({icon:e,title:r,description:n,action:l,children:a,useDefaultImage:s,image:c,className:d,style:u}){let{token:g}=e8(),f=a??l;if(s||void 0!==c)return(0,i.jsx)(o.Empty,{description:n,image:c,className:d,style:u,children:f});let p={padding:t.spacing["8"],textAlign:"center",...u};return(0,i.jsx)(m,{className:d,style:p,children:(0,i.jsxs)(h,{direction:"column",align:"center",gap:3,children:[e&&(0,i.jsx)(m,{style:{fontSize:"48px",color:g.colorTextSecondary},children:e}),r&&(0,i.jsx)(x,{size:"lg",weight:"semibold",children:r}),n&&(0,i.jsx)(x,{size:"base",color:"secondary",children:n}),f&&(0,i.jsx)(m,{mt:2,children:f})]})})}e9.PRESENTED_IMAGE_SIMPLE=o.Empty.PRESENTED_IMAGE_SIMPLE,e9.PRESENTED_IMAGE_DEFAULT=o.Empty.PRESENTED_IMAGE_DEFAULT;var{useToken:re}=o.theme;function rr({icon:e,title:r="Something went wrong",description:n,details:o,showRetry:l=!1,retryText:a="Try again",onRetry:s,action:c,className:d,style:u}){let{token:g}=re(),f={padding:t.spacing["8"],textAlign:"center",...u};return(0,i.jsx)(m,{className:d,style:f,children:(0,i.jsxs)(h,{direction:"column",align:"center",gap:3,children:[e&&(0,i.jsx)(m,{style:{fontSize:"48px",color:g.colorError},children:e}),(0,i.jsx)(x,{size:"lg",weight:"semibold",color:"error",children:r}),n&&(0,i.jsx)(x,{size:"base",color:"secondary",children:n}),o&&(0,i.jsx)(m,{p:3,style:{backgroundColor:g.colorErrorBg,borderRadius:g.borderRadius,maxWidth:"600px",width:"100%"},children:(0,i.jsx)(x,{size:"sm",as:"pre",style:{margin:0,textAlign:"left",whiteSpace:"pre-wrap"},children:o})}),(l||c)&&(0,i.jsx)(m,{mt:2,children:c||(0,i.jsx)(M,{variant:"primary",onClick:s,children:a})})]})})}function rn({loading:e=!0,children:r,avatar:n,avatarShape:t="circle",lines:l=3,title:a=!0,active:s=!0,className:c,style:d}){return(0,i.jsx)(o.Skeleton,{loading:e,avatar:!!n&&{shape:t},paragraph:{rows:l},title:a,active:s,className:c,style:d,children:r})}function ro(e){return(0,i.jsx)(o.Skeleton.Button,{...e})}function rt(e){return(0,i.jsx)(o.Skeleton.Input,{...e})}function ri(e){return(0,i.jsx)(o.Skeleton.Image,{...e})}function rl(e){return(0,i.jsx)(o.Skeleton.Node,{...e})}function ra({width:e="100%",height:r="1em",gap:n=6,className:t,style:l}){let a=Array.isArray(e)?e:[e];return(0,i.jsx)("span",{className:t,style:{display:"inline-flex",flexDirection:"column",gap:n,...l},children:a.map((e,n)=>(0,i.jsx)("span",{style:{display:"inline-block",width:e,height:r,overflow:"hidden",borderRadius:4,flexShrink:0},children:(0,i.jsx)(o.Skeleton.Input,{active:!0,size:"small",style:{width:"100%",minWidth:"unset",height:"100%",display:"block"}})},n))})}function rs(e){return(0,i.jsx)(o.Spin,{...e})}function rc(e){return(0,i.jsx)(o.Result,{...e})}var rd=o.message;function ru(){return o.message.useMessage()}var rg=o.notification;function rf(){return o.notification.useNotification()}function rp({open:e,title:r,children:n,width:t="default",closable:l=!0,maskClosable:a=!0,footer:s,okText:c,cancelText:d,confirmLoading:u,onOk:g,onCancel:f,onClose:p,className:x,style:m}){let h={small:416,default:520,large:800,full:window.innerWidth-64},y="number"==typeof t?t:h[t];return(0,i.jsx)(o.Modal,{open:e,title:r,width:y,closable:l,maskClosable:a,footer:s,okText:c,cancelText:d,confirmLoading:u,onOk:g,onCancel:f||p,className:x,style:m,children:n})}var rx=o.Modal.confirm,rm=o.Modal.info,rh=o.Modal.success,ry=o.Modal.error,rj=o.Modal.warning;function rI({title:e,children:r,placement:n="top",arrow:t=!0,trigger:l="hover",open:a,className:s}){return(0,i.jsx)(o.Tooltip,{title:e,placement:n,arrow:t,trigger:l,open:a,className:s,children:r})}function rb(e){return(0,i.jsx)(o.Drawer,{...e})}function rS(e){return(0,i.jsx)(o.Popconfirm,{...e})}function rv(e){return(0,i.jsx)(o.Popover,{...e})}var{useToken:rU}=o.theme;function rT({content:e,className:r,style:n}){let o,{token:t}=rU(),l={padding:t.padding,backgroundColor:t.colorBgContainer,borderRadius:t.borderRadius,border:`1px solid ${t.colorBorder}`,lineHeight:1.6,...n},a={fontFamily:t.fontFamily,fontSize:t.fontSize,color:t.colorText};return(0,i.jsx)(m,{className:r,style:l,children:(0,i.jsx)("div",{style:a,dangerouslySetInnerHTML:{__html:(o=(o=(o=(o=(o=(o=(o=e.replace(/^### (.*$)/gim,"<h3>$1</h3>")).replace(/^## (.*$)/gim,"<h2>$1</h2>")).replace(/^# (.*$)/gim,"<h1>$1</h1>")).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>")).replace(/\*(.*?)\*/g,"<em>$1</em>")).replace(/`(.*?)`/g,"<code>$1</code>")).replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2">$1</a>')).replace(/\n/g,"<br />")}})})}var{useToken:rk}=o.theme;function rC({data:e,collapsed:r=!1,indent:n=2,showLineNumbers:o=!1,className:t,style:a}){let{token:s}=rk(),c=l.useMemo(()=>{try{return JSON.stringify(e,null,n)}catch(e){return`Error: ${e instanceof Error?e.message:"Invalid JSON"}`}},[e,n]),d=c.split("\n"),u={backgroundColor:s.colorBgContainer,borderRadius:s.borderRadius,border:`1px solid ${s.colorBorder}`,overflow:"auto",maxHeight:"600px",...a},g={display:"block",fontFamily:'Consolas, Monaco, "Courier New", monospace',fontSize:"13px",lineHeight:"1.6",padding:s.padding,margin:0,whiteSpace:"pre",color:s.colorText},f={display:"inline-block",width:"40px",color:s.colorTextSecondary,userSelect:"none",textAlign:"right",marginRight:s.marginSM},p=rw(c,s);return(0,i.jsx)(m,{className:t,style:u,children:(0,i.jsx)("pre",{style:g,children:o?d.map((e,r)=>(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{style:f,children:r+1}),(0,i.jsx)("span",{dangerouslySetInnerHTML:{__html:rw(e,s)}})]},r)):(0,i.jsx)("span",{dangerouslySetInnerHTML:{__html:p}})})})}function rw(e,r){return(e=(e=(e=(e=e.replace(/"([^"]+)":/g,`<span style="color: ${r.colorPrimary}">"$1"</span>:`)).replace(/: "([^"]*)"/g,`: <span style="color: ${r.colorSuccess}">"$1"</span>`)).replace(/: (\d+)/g,`: <span style="color: ${r.colorWarning}">$1</span>`)).replace(/: (true|false)/g,`: <span style="color: ${r.colorInfo}">$1</span>`)).replace(/: (null)/g,`: <span style="color: ${r.colorTextSecondary}">$1</span>`)}var rB={add:{bg:"rgba(22, 163, 74, 0.12)",border:"var(--success, #16a34a)",color:"var(--success, #16a34a)"},remove:{bg:"rgba(220, 38, 38, 0.12)",border:"var(--error, #dc2626)",color:"var(--error, #dc2626)"},header:{bg:"var(--bg-tertiary, rgba(0,0,0,0.04))",border:"transparent",color:"var(--text-secondary, #6b7280)"},context:{bg:"transparent",border:"transparent",color:"inherit"}};function rM({diff:e,showLineNumbers:r=!0,maxHeight:n=500,className:o,style:t}){if(!e||""===e.trim())return(0,i.jsx)("div",{style:{padding:16,textAlign:"center"},children:(0,i.jsx)(y,{type:"secondary",children:"No changes to display"})});let l=e.split("\n");return(0,i.jsx)("div",{className:o,style:{background:"var(--bg-tertiary, rgba(0,0,0,0.02))",border:"1px solid var(--border-primary, rgba(0,0,0,0.1))",borderRadius:"var(--radius-md, 6px)",fontFamily:'Monaco, Menlo, "Courier New", monospace',fontSize:13,lineHeight:1.5,maxHeight:n,overflow:"auto",...t},children:l.map((e,n)=>{let o=e.startsWith("@@")?"header":e.startsWith("+")?"add":e.startsWith("-")?"remove":"context",t=rB[o],l="add"===o||"remove"===o;return(0,i.jsxs)("div",{style:{display:"flex",background:t.bg,borderLeft:l?`3px solid ${t.border}`:"none",paddingLeft:l?8:11},children:[r&&(0,i.jsx)("span",{style:{minWidth:44,textAlign:"right",paddingRight:12,userSelect:"none",color:"var(--text-secondary, #6c757d)",fontSize:12},children:n+1}),(0,i.jsx)("pre",{style:{margin:0,padding:0,color:t.color,whiteSpace:"pre",flex:1},children:e})]},n)})})}}}]);
2
+ //# sourceMappingURL=117.js.map