mstro-app 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/mstro.js +119 -40
- package/dist/server/cli/headless/claude-invoker-process.d.ts +11 -0
- package/dist/server/cli/headless/claude-invoker-process.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker-process.js +140 -0
- package/dist/server/cli/headless/claude-invoker-process.js.map +1 -0
- package/dist/server/cli/headless/claude-invoker-stall.d.ts +40 -0
- package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker-stall.js +98 -0
- package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -0
- package/dist/server/cli/headless/claude-invoker-stream.d.ts +44 -0
- package/dist/server/cli/headless/claude-invoker-stream.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker-stream.js +276 -0
- package/dist/server/cli/headless/claude-invoker-stream.js.map +1 -0
- package/dist/server/cli/headless/claude-invoker-tools.d.ts +21 -0
- package/dist/server/cli/headless/claude-invoker-tools.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker-tools.js +137 -0
- package/dist/server/cli/headless/claude-invoker-tools.js.map +1 -0
- package/dist/server/cli/headless/claude-invoker.d.ts +6 -4
- package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker.js +10 -804
- package/dist/server/cli/headless/claude-invoker.js.map +1 -1
- package/dist/server/cli/headless/haiku-assessments.d.ts +62 -0
- package/dist/server/cli/headless/haiku-assessments.d.ts.map +1 -0
- package/dist/server/cli/headless/haiku-assessments.js +281 -0
- package/dist/server/cli/headless/haiku-assessments.js.map +1 -0
- package/dist/server/cli/headless/headless-logger.d.ts +3 -2
- package/dist/server/cli/headless/headless-logger.d.ts.map +1 -1
- package/dist/server/cli/headless/headless-logger.js +28 -5
- package/dist/server/cli/headless/headless-logger.js.map +1 -1
- package/dist/server/cli/headless/native-timeout-detector.d.ts +44 -0
- package/dist/server/cli/headless/native-timeout-detector.d.ts.map +1 -0
- package/dist/server/cli/headless/native-timeout-detector.js +99 -0
- package/dist/server/cli/headless/native-timeout-detector.js.map +1 -0
- package/dist/server/cli/headless/stall-assessor.d.ts +2 -110
- package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
- package/dist/server/cli/headless/stall-assessor.js +65 -457
- package/dist/server/cli/headless/stall-assessor.js.map +1 -1
- package/dist/server/cli/headless/types.d.ts +4 -1
- package/dist/server/cli/headless/types.d.ts.map +1 -1
- package/dist/server/cli/improvisation-attachments.d.ts +21 -0
- package/dist/server/cli/improvisation-attachments.d.ts.map +1 -0
- package/dist/server/cli/improvisation-attachments.js +116 -0
- package/dist/server/cli/improvisation-attachments.js.map +1 -0
- package/dist/server/cli/improvisation-retry.d.ts +52 -0
- package/dist/server/cli/improvisation-retry.d.ts.map +1 -0
- package/dist/server/cli/improvisation-retry.js +434 -0
- package/dist/server/cli/improvisation-retry.js.map +1 -0
- package/dist/server/cli/improvisation-session-manager.d.ts +10 -266
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.js +117 -1079
- package/dist/server/cli/improvisation-session-manager.js.map +1 -1
- package/dist/server/cli/improvisation-types.d.ts +86 -0
- package/dist/server/cli/improvisation-types.d.ts.map +1 -0
- package/dist/server/cli/improvisation-types.js +10 -0
- package/dist/server/cli/improvisation-types.js.map +1 -0
- package/dist/server/cli/prompt-builders.d.ts +68 -0
- package/dist/server/cli/prompt-builders.d.ts.map +1 -0
- package/dist/server/cli/prompt-builders.js +312 -0
- package/dist/server/cli/prompt-builders.js.map +1 -0
- package/dist/server/index.js +33 -212
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcp/bouncer-haiku.d.ts +10 -0
- package/dist/server/mcp/bouncer-haiku.d.ts.map +1 -0
- package/dist/server/mcp/bouncer-haiku.js +152 -0
- package/dist/server/mcp/bouncer-haiku.js.map +1 -0
- package/dist/server/mcp/bouncer-integration.d.ts +3 -4
- package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
- package/dist/server/mcp/bouncer-integration.js +50 -196
- package/dist/server/mcp/bouncer-integration.js.map +1 -1
- package/dist/server/mcp/security-analysis.d.ts +38 -0
- package/dist/server/mcp/security-analysis.d.ts.map +1 -0
- package/dist/server/mcp/security-analysis.js +183 -0
- package/dist/server/mcp/security-analysis.js.map +1 -0
- package/dist/server/mcp/security-audit.d.ts +1 -1
- package/dist/server/mcp/security-audit.d.ts.map +1 -1
- package/dist/server/mcp/security-patterns.d.ts +1 -25
- package/dist/server/mcp/security-patterns.d.ts.map +1 -1
- package/dist/server/mcp/security-patterns.js +55 -260
- package/dist/server/mcp/security-patterns.js.map +1 -1
- package/dist/server/server-setup.d.ts +22 -0
- package/dist/server/server-setup.d.ts.map +1 -0
- package/dist/server/server-setup.js +101 -0
- package/dist/server/server-setup.js.map +1 -0
- package/dist/server/services/file-explorer-ops.d.ts +24 -0
- package/dist/server/services/file-explorer-ops.d.ts.map +1 -0
- package/dist/server/services/file-explorer-ops.js +211 -0
- package/dist/server/services/file-explorer-ops.js.map +1 -0
- package/dist/server/services/files.d.ts +2 -85
- package/dist/server/services/files.d.ts.map +1 -1
- package/dist/server/services/files.js +7 -427
- package/dist/server/services/files.js.map +1 -1
- package/dist/server/services/plan/composer.d.ts +1 -1
- package/dist/server/services/plan/composer.d.ts.map +1 -1
- package/dist/server/services/plan/composer.js +118 -32
- package/dist/server/services/plan/composer.js.map +1 -1
- package/dist/server/services/plan/config-installer.d.ts +25 -0
- package/dist/server/services/plan/config-installer.d.ts.map +1 -0
- package/dist/server/services/plan/config-installer.js +182 -0
- package/dist/server/services/plan/config-installer.js.map +1 -0
- package/dist/server/services/plan/dependency-resolver.d.ts +1 -1
- package/dist/server/services/plan/dependency-resolver.d.ts.map +1 -1
- package/dist/server/services/plan/dependency-resolver.js +4 -1
- package/dist/server/services/plan/dependency-resolver.js.map +1 -1
- package/dist/server/services/plan/executor.d.ts +38 -74
- package/dist/server/services/plan/executor.d.ts.map +1 -1
- package/dist/server/services/plan/executor.js +274 -460
- package/dist/server/services/plan/executor.js.map +1 -1
- package/dist/server/services/plan/front-matter.d.ts +18 -0
- package/dist/server/services/plan/front-matter.d.ts.map +1 -0
- package/dist/server/services/plan/front-matter.js +44 -0
- package/dist/server/services/plan/front-matter.js.map +1 -0
- package/dist/server/services/plan/output-manager.d.ts +22 -0
- package/dist/server/services/plan/output-manager.d.ts.map +1 -0
- package/dist/server/services/plan/output-manager.js +97 -0
- package/dist/server/services/plan/output-manager.js.map +1 -0
- package/dist/server/services/plan/parser-core.d.ts +20 -0
- package/dist/server/services/plan/parser-core.d.ts.map +1 -0
- package/dist/server/services/plan/parser-core.js +350 -0
- package/dist/server/services/plan/parser-core.js.map +1 -0
- package/dist/server/services/plan/parser-migration.d.ts +5 -0
- package/dist/server/services/plan/parser-migration.d.ts.map +1 -0
- package/dist/server/services/plan/parser-migration.js +124 -0
- package/dist/server/services/plan/parser-migration.js.map +1 -0
- package/dist/server/services/plan/parser.d.ts +11 -3
- package/dist/server/services/plan/parser.d.ts.map +1 -1
- package/dist/server/services/plan/parser.js +184 -369
- package/dist/server/services/plan/parser.js.map +1 -1
- package/dist/server/services/plan/prompt-builder.d.ts +17 -0
- package/dist/server/services/plan/prompt-builder.d.ts.map +1 -0
- package/dist/server/services/plan/prompt-builder.js +137 -0
- package/dist/server/services/plan/prompt-builder.js.map +1 -0
- package/dist/server/services/plan/review-gate.d.ts +28 -0
- package/dist/server/services/plan/review-gate.d.ts.map +1 -0
- package/dist/server/services/plan/review-gate.js +191 -0
- package/dist/server/services/plan/review-gate.js.map +1 -0
- package/dist/server/services/plan/state-reconciler.d.ts +1 -1
- package/dist/server/services/plan/state-reconciler.d.ts.map +1 -1
- package/dist/server/services/plan/state-reconciler.js +59 -7
- package/dist/server/services/plan/state-reconciler.js.map +1 -1
- package/dist/server/services/plan/types.d.ts +68 -0
- package/dist/server/services/plan/types.d.ts.map +1 -1
- package/dist/server/services/platform-credentials.d.ts +24 -0
- package/dist/server/services/platform-credentials.d.ts.map +1 -0
- package/dist/server/services/platform-credentials.js +68 -0
- package/dist/server/services/platform-credentials.js.map +1 -0
- package/dist/server/services/platform.d.ts +1 -31
- package/dist/server/services/platform.d.ts.map +1 -1
- package/dist/server/services/platform.js +11 -109
- package/dist/server/services/platform.js.map +1 -1
- package/dist/server/services/terminal/pty-manager.d.ts +7 -97
- package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
- package/dist/server/services/terminal/pty-manager.js +53 -266
- package/dist/server/services/terminal/pty-manager.js.map +1 -1
- package/dist/server/services/terminal/pty-utils.d.ts +57 -0
- package/dist/server/services/terminal/pty-utils.d.ts.map +1 -0
- package/dist/server/services/terminal/pty-utils.js +141 -0
- package/dist/server/services/terminal/pty-utils.js.map +1 -0
- package/dist/server/services/websocket/file-definition-handlers.d.ts +4 -0
- package/dist/server/services/websocket/file-definition-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/file-definition-handlers.js +153 -0
- package/dist/server/services/websocket/file-definition-handlers.js.map +1 -0
- package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/file-explorer-handlers.js +52 -391
- package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
- package/dist/server/services/websocket/file-search-handlers.d.ts +5 -0
- package/dist/server/services/websocket/file-search-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/file-search-handlers.js +238 -0
- package/dist/server/services/websocket/file-search-handlers.js.map +1 -0
- package/dist/server/services/websocket/file-utils.js +3 -3
- package/dist/server/services/websocket/file-utils.js.map +1 -1
- package/dist/server/services/websocket/git-branch-handlers.d.ts +7 -0
- package/dist/server/services/websocket/git-branch-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-branch-handlers.js +110 -0
- package/dist/server/services/websocket/git-branch-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-diff-handlers.d.ts +6 -0
- package/dist/server/services/websocket/git-diff-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-diff-handlers.js +123 -0
- package/dist/server/services/websocket/git-diff-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-handlers.d.ts +2 -31
- package/dist/server/services/websocket/git-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-handlers.js +35 -541
- package/dist/server/services/websocket/git-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-log-handlers.d.ts +6 -0
- package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-log-handlers.js +128 -0
- package/dist/server/services/websocket/git-log-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/git-pr-handlers.js +13 -53
- package/dist/server/services/websocket/git-pr-handlers.js.map +1 -1
- package/dist/server/services/websocket/git-tag-handlers.d.ts +6 -0
- package/dist/server/services/websocket/git-tag-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-tag-handlers.js +76 -0
- package/dist/server/services/websocket/git-tag-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-utils.d.ts +43 -0
- package/dist/server/services/websocket/git-utils.d.ts.map +1 -0
- package/dist/server/services/websocket/git-utils.js +201 -0
- package/dist/server/services/websocket/git-utils.js.map +1 -0
- package/dist/server/services/websocket/handler.d.ts +2 -0
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +37 -112
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/plan-board-handlers.d.ts +11 -0
- package/dist/server/services/websocket/plan-board-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/plan-board-handlers.js +218 -0
- package/dist/server/services/websocket/plan-board-handlers.js.map +1 -0
- package/dist/server/services/websocket/plan-execution-handlers.d.ts +9 -0
- package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/plan-execution-handlers.js +142 -0
- package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -0
- package/dist/server/services/websocket/plan-handlers.d.ts +7 -2
- package/dist/server/services/websocket/plan-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/plan-handlers.js +21 -462
- package/dist/server/services/websocket/plan-handlers.js.map +1 -1
- package/dist/server/services/websocket/plan-helpers.d.ts +19 -0
- package/dist/server/services/websocket/plan-helpers.d.ts.map +1 -0
- package/dist/server/services/websocket/plan-helpers.js +199 -0
- package/dist/server/services/websocket/plan-helpers.js.map +1 -0
- package/dist/server/services/websocket/plan-issue-handlers.d.ts +12 -0
- package/dist/server/services/websocket/plan-issue-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/plan-issue-handlers.js +162 -0
- package/dist/server/services/websocket/plan-issue-handlers.js.map +1 -0
- package/dist/server/services/websocket/plan-sprint-handlers.d.ts +7 -0
- package/dist/server/services/websocket/plan-sprint-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/plan-sprint-handlers.js +206 -0
- package/dist/server/services/websocket/plan-sprint-handlers.js.map +1 -0
- package/dist/server/services/websocket/quality-complexity.d.ts +14 -0
- package/dist/server/services/websocket/quality-complexity.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-complexity.js +262 -0
- package/dist/server/services/websocket/quality-complexity.js.map +1 -0
- package/dist/server/services/websocket/quality-fix-agent.d.ts +16 -0
- package/dist/server/services/websocket/quality-fix-agent.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-fix-agent.js +140 -0
- package/dist/server/services/websocket/quality-fix-agent.js.map +1 -0
- package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-handlers.js +34 -346
- package/dist/server/services/websocket/quality-handlers.js.map +1 -1
- package/dist/server/services/websocket/quality-linting.d.ts +9 -0
- package/dist/server/services/websocket/quality-linting.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-linting.js +178 -0
- package/dist/server/services/websocket/quality-linting.js.map +1 -0
- package/dist/server/services/websocket/quality-review-agent.d.ts +19 -0
- package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-review-agent.js +206 -0
- package/dist/server/services/websocket/quality-review-agent.js.map +1 -0
- package/dist/server/services/websocket/quality-service.d.ts +3 -51
- package/dist/server/services/websocket/quality-service.d.ts.map +1 -1
- package/dist/server/services/websocket/quality-service.js +9 -651
- package/dist/server/services/websocket/quality-service.js.map +1 -1
- package/dist/server/services/websocket/quality-tools.d.ts +23 -0
- package/dist/server/services/websocket/quality-tools.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-tools.js +208 -0
- package/dist/server/services/websocket/quality-tools.js.map +1 -0
- package/dist/server/services/websocket/quality-types.d.ts +59 -0
- package/dist/server/services/websocket/quality-types.d.ts.map +1 -0
- package/dist/server/services/websocket/quality-types.js +101 -0
- package/dist/server/services/websocket/quality-types.js.map +1 -0
- package/dist/server/services/websocket/session-handlers.d.ts +3 -4
- package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
- package/dist/server/services/websocket/session-handlers.js +3 -378
- package/dist/server/services/websocket/session-handlers.js.map +1 -1
- package/dist/server/services/websocket/session-history.d.ts +4 -0
- package/dist/server/services/websocket/session-history.d.ts.map +1 -0
- package/dist/server/services/websocket/session-history.js +208 -0
- package/dist/server/services/websocket/session-history.js.map +1 -0
- package/dist/server/services/websocket/session-initialization.d.ts +5 -0
- package/dist/server/services/websocket/session-initialization.d.ts.map +1 -0
- package/dist/server/services/websocket/session-initialization.js +163 -0
- package/dist/server/services/websocket/session-initialization.js.map +1 -0
- package/dist/server/services/websocket/types.d.ts +12 -2
- package/dist/server/services/websocket/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/server/cli/headless/claude-invoker-process.ts +204 -0
- package/server/cli/headless/claude-invoker-stall.ts +164 -0
- package/server/cli/headless/claude-invoker-stream.ts +353 -0
- package/server/cli/headless/claude-invoker-tools.ts +187 -0
- package/server/cli/headless/claude-invoker.ts +15 -1092
- package/server/cli/headless/haiku-assessments.ts +365 -0
- package/server/cli/headless/headless-logger.ts +26 -5
- package/server/cli/headless/native-timeout-detector.ts +117 -0
- package/server/cli/headless/stall-assessor.ts +65 -618
- package/server/cli/headless/types.ts +4 -1
- package/server/cli/improvisation-attachments.ts +148 -0
- package/server/cli/improvisation-retry.ts +602 -0
- package/server/cli/improvisation-session-manager.ts +140 -1349
- package/server/cli/improvisation-types.ts +98 -0
- package/server/cli/prompt-builders.ts +370 -0
- package/server/index.ts +35 -246
- package/server/mcp/bouncer-haiku.ts +182 -0
- package/server/mcp/bouncer-integration.ts +87 -248
- package/server/mcp/security-analysis.ts +217 -0
- package/server/mcp/security-audit.ts +1 -1
- package/server/mcp/security-patterns.ts +60 -283
- package/server/server-setup.ts +114 -0
- package/server/services/file-explorer-ops.ts +293 -0
- package/server/services/files.ts +20 -532
- package/server/services/plan/composer.ts +140 -35
- package/server/services/plan/config-installer.ts +187 -0
- package/server/services/plan/dependency-resolver.ts +4 -1
- package/server/services/plan/executor.ts +281 -488
- package/server/services/plan/front-matter.ts +48 -0
- package/server/services/plan/output-manager.ts +113 -0
- package/server/services/plan/parser-core.ts +406 -0
- package/server/services/plan/parser-migration.ts +128 -0
- package/server/services/plan/parser.ts +188 -394
- package/server/services/plan/prompt-builder.ts +161 -0
- package/server/services/plan/review-gate.ts +212 -0
- package/server/services/plan/state-reconciler.ts +68 -7
- package/server/services/plan/types.ts +101 -1
- package/server/services/platform-credentials.ts +83 -0
- package/server/services/platform.ts +16 -131
- package/server/services/terminal/pty-manager.ts +66 -313
- package/server/services/terminal/pty-utils.ts +176 -0
- package/server/services/websocket/file-definition-handlers.ts +165 -0
- package/server/services/websocket/file-explorer-handlers.ts +37 -452
- package/server/services/websocket/file-search-handlers.ts +291 -0
- package/server/services/websocket/file-utils.ts +3 -3
- package/server/services/websocket/git-branch-handlers.ts +130 -0
- package/server/services/websocket/git-diff-handlers.ts +140 -0
- package/server/services/websocket/git-handlers.ts +40 -625
- package/server/services/websocket/git-log-handlers.ts +149 -0
- package/server/services/websocket/git-pr-handlers.ts +17 -62
- package/server/services/websocket/git-tag-handlers.ts +91 -0
- package/server/services/websocket/git-utils.ts +230 -0
- package/server/services/websocket/handler.ts +39 -112
- package/server/services/websocket/plan-board-handlers.ts +277 -0
- package/server/services/websocket/plan-execution-handlers.ts +184 -0
- package/server/services/websocket/plan-handlers.ts +23 -544
- package/server/services/websocket/plan-helpers.ts +215 -0
- package/server/services/websocket/plan-issue-handlers.ts +204 -0
- package/server/services/websocket/plan-sprint-handlers.ts +252 -0
- package/server/services/websocket/quality-complexity.ts +294 -0
- package/server/services/websocket/quality-fix-agent.ts +181 -0
- package/server/services/websocket/quality-handlers.ts +36 -404
- package/server/services/websocket/quality-linting.ts +187 -0
- package/server/services/websocket/quality-review-agent.ts +246 -0
- package/server/services/websocket/quality-service.ts +11 -762
- package/server/services/websocket/quality-tools.ts +209 -0
- package/server/services/websocket/quality-types.ts +169 -0
- package/server/services/websocket/session-handlers.ts +5 -437
- package/server/services/websocket/session-history.ts +222 -0
- package/server/services/websocket/session-initialization.ts +209 -0
- package/server/services/websocket/types.ts +46 -2
|
@@ -1,35 +1,19 @@
|
|
|
1
1
|
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
2
|
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
/**
|
|
4
|
+
* Quality Handlers — WebSocket message router for quality scanning,
|
|
5
|
+
* code review, and fix operations.
|
|
6
|
+
*
|
|
7
|
+
* Agent logic lives in focused modules:
|
|
8
|
+
* - quality-review-agent.ts — AI code review prompt, parsing, handler
|
|
9
|
+
* - quality-fix-agent.ts — AI fix prompt, progress tracking, handler
|
|
10
|
+
*/
|
|
3
11
|
import { join } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import { HeadlessRunner } from '../../cli/headless/index.js';
|
|
12
|
+
import { handleFixIssues } from './quality-fix-agent.js';
|
|
6
13
|
import { QualityPersistence } from './quality-persistence.js';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Edit: 'Applying fixes...',
|
|
11
|
-
Write: 'Writing fixes...',
|
|
12
|
-
Grep: 'Searching for related code...',
|
|
13
|
-
Bash: 'Running verification...',
|
|
14
|
-
};
|
|
15
|
-
function createToolProgressCallback(ctx, ws, reportPath) {
|
|
16
|
-
const seenTools = new Set();
|
|
17
|
-
return (event) => {
|
|
18
|
-
if (event.type === 'tool_start' && event.toolName && !seenTools.has(event.toolName)) {
|
|
19
|
-
seenTools.add(event.toolName);
|
|
20
|
-
const message = TOOL_MESSAGES[event.toolName];
|
|
21
|
-
if (message) {
|
|
22
|
-
ctx.send(ws, { type: 'qualityFixProgress', data: { path: reportPath, message } });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (event.type === 'tool_complete' && event.toolName === 'Edit' && event.completeInput?.file_path) {
|
|
26
|
-
ctx.send(ws, {
|
|
27
|
-
type: 'qualityFixProgress',
|
|
28
|
-
data: { path: reportPath, message: `Fixed ${String(event.completeInput.file_path).split('/').slice(-2).join('/')}` },
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
14
|
+
import { handleCodeReview } from './quality-review-agent.js';
|
|
15
|
+
import { detectTools, installTools, runQualityScan } from './quality-service.js';
|
|
16
|
+
// ── Shared state ──────────────────────────────────────────────
|
|
33
17
|
const persistenceCache = new Map();
|
|
34
18
|
const activeReviews = new Set();
|
|
35
19
|
function getPersistence(workingDir) {
|
|
@@ -40,13 +24,31 @@ function getPersistence(workingDir) {
|
|
|
40
24
|
}
|
|
41
25
|
return persistence;
|
|
42
26
|
}
|
|
27
|
+
function resolvePath(workingDir, dirPath) {
|
|
28
|
+
if (!dirPath || dirPath === '.' || dirPath === './')
|
|
29
|
+
return workingDir;
|
|
30
|
+
if (dirPath.startsWith('/'))
|
|
31
|
+
return dirPath;
|
|
32
|
+
return join(workingDir, dirPath);
|
|
33
|
+
}
|
|
34
|
+
// ── Message router ────────────────────────────────────────────
|
|
43
35
|
export function handleQualityMessage(ctx, ws, msg, _tabId, workingDir) {
|
|
44
36
|
const handlers = {
|
|
45
37
|
qualityDetectTools: () => handleDetectTools(ctx, ws, msg, workingDir),
|
|
46
38
|
qualityScan: () => handleScan(ctx, ws, msg, workingDir),
|
|
47
39
|
qualityInstallTools: () => handleInstallTools(ctx, ws, msg, workingDir),
|
|
48
|
-
qualityCodeReview: () =>
|
|
49
|
-
|
|
40
|
+
qualityCodeReview: () => {
|
|
41
|
+
const dirPath = resolvePath(workingDir, msg.data?.path);
|
|
42
|
+
const reportPath = msg.data?.path || '.';
|
|
43
|
+
handleCodeReview(ctx, ws, reportPath, dirPath, workingDir, activeReviews, getPersistence);
|
|
44
|
+
},
|
|
45
|
+
qualityFixIssues: () => {
|
|
46
|
+
const dirPath = resolvePath(workingDir, msg.data?.path);
|
|
47
|
+
const reportPath = msg.data?.path || '.';
|
|
48
|
+
const section = msg.data?.section;
|
|
49
|
+
const findings = msg.data?.findings || [];
|
|
50
|
+
handleFixIssues(ctx, ws, reportPath, dirPath, workingDir, section, findings, getPersistence);
|
|
51
|
+
},
|
|
50
52
|
qualityLoadState: () => handleLoadState(ctx, ws, workingDir),
|
|
51
53
|
qualitySaveDirectories: () => handleSaveDirectories(ctx, ws, msg, workingDir),
|
|
52
54
|
};
|
|
@@ -64,21 +66,12 @@ export function handleQualityMessage(ctx, ws, msg, _tabId, workingDir) {
|
|
|
64
66
|
});
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
|
-
|
|
68
|
-
if (!dirPath || dirPath === '.' || dirPath === './')
|
|
69
|
-
return workingDir;
|
|
70
|
-
if (dirPath.startsWith('/'))
|
|
71
|
-
return dirPath;
|
|
72
|
-
return join(workingDir, dirPath);
|
|
73
|
-
}
|
|
69
|
+
// ── Scan / detect / install handlers ──────────────────────────
|
|
74
70
|
async function handleLoadState(ctx, ws, workingDir) {
|
|
75
71
|
try {
|
|
76
72
|
const persistence = getPersistence(workingDir);
|
|
77
73
|
const state = persistence.loadState();
|
|
78
|
-
ctx.send(ws, {
|
|
79
|
-
type: 'qualityStateLoaded',
|
|
80
|
-
data: state,
|
|
81
|
-
});
|
|
74
|
+
ctx.send(ws, { type: 'qualityStateLoaded', data: state });
|
|
82
75
|
}
|
|
83
76
|
catch (error) {
|
|
84
77
|
ctx.send(ws, {
|
|
@@ -120,7 +113,6 @@ async function handleScan(ctx, ws, msg, workingDir) {
|
|
|
120
113
|
const dirPath = resolvePath(workingDir, msg.data?.path);
|
|
121
114
|
const reportPath = msg.data?.path || '.';
|
|
122
115
|
try {
|
|
123
|
-
// Detect installed tools so the scan can skip unavailable categories
|
|
124
116
|
const { tools: detectedTools } = await detectTools(dirPath);
|
|
125
117
|
const installedToolNames = detectedTools.filter((t) => t.installed).map((t) => t.name);
|
|
126
118
|
const results = await runQualityScan(dirPath, (progress) => {
|
|
@@ -133,7 +125,6 @@ async function handleScan(ctx, ws, msg, workingDir) {
|
|
|
133
125
|
type: 'qualityScanResults',
|
|
134
126
|
data: { path: reportPath, results },
|
|
135
127
|
});
|
|
136
|
-
// Persist report and append to history
|
|
137
128
|
try {
|
|
138
129
|
const persistence = getPersistence(workingDir);
|
|
139
130
|
persistence.saveReport(reportPath, results);
|
|
@@ -172,307 +163,4 @@ async function handleInstallTools(ctx, ws, msg, workingDir) {
|
|
|
172
163
|
});
|
|
173
164
|
}
|
|
174
165
|
}
|
|
175
|
-
// ============================================================================
|
|
176
|
-
// Code Review Agent
|
|
177
|
-
// ============================================================================
|
|
178
|
-
function buildCodeReviewPrompt(dirPath) {
|
|
179
|
-
return `You are an expert code review agent. Your task is to perform a comprehensive, language-agnostic code review of the project in the current working directory.
|
|
180
|
-
|
|
181
|
-
IMPORTANT: Your current working directory is "${dirPath}". Only review files within this directory. Do NOT traverse parent directories or review files outside this path.
|
|
182
|
-
|
|
183
|
-
## Review Process
|
|
184
|
-
|
|
185
|
-
1. **Discover**: Use Glob to find source files (e.g. "**/*.{ts,tsx,js,py,rs,go,java,rb,php}"). Understand the project structure. Only search within the current directory.
|
|
186
|
-
2. **Read**: Read the most important files — entry points, core modules, handlers, services. Prioritize files with recent git changes (\`git diff --name-only HEAD~5\` via Bash if available).
|
|
187
|
-
3. **Analyze**: Look for real, actionable issues across these categories:
|
|
188
|
-
- **security**: Injection vulnerabilities (SQL, XSS, command), hardcoded secrets/credentials, auth bypasses, insecure crypto, path traversal, SSRF, unsafe deserialization
|
|
189
|
-
- **bugs**: Null/undefined errors, race conditions, logic errors, unhandled edge cases, off-by-one errors, resource leaks, incorrect error handling
|
|
190
|
-
- **performance**: N+1 queries, unnecessary re-renders, missing memoization, blocking I/O in hot paths, unbounded data structures, missing pagination
|
|
191
|
-
- **maintainability**: God functions (>100 lines), deep nesting (>4 levels), duplicated logic, missing error handling at system boundaries, tight coupling
|
|
192
|
-
|
|
193
|
-
## Rules
|
|
194
|
-
|
|
195
|
-
- Only report findings you are >80% confident about. No speculative or low-confidence issues.
|
|
196
|
-
- Focus on bugs and security over style. Skip formatting, naming preferences, and minor nits.
|
|
197
|
-
- Each finding MUST reference a specific file and line number. Do not report vague or file-level issues.
|
|
198
|
-
- Limit to the 20 most important findings, ranked by severity.
|
|
199
|
-
- Do NOT modify any files. This is a read-only review.
|
|
200
|
-
|
|
201
|
-
## Output
|
|
202
|
-
|
|
203
|
-
After your analysis, output EXACTLY one JSON code block with your findings. No other text after the JSON block.
|
|
204
|
-
|
|
205
|
-
\`\`\`json
|
|
206
|
-
{
|
|
207
|
-
"findings": [
|
|
208
|
-
{
|
|
209
|
-
"severity": "critical|high|medium|low",
|
|
210
|
-
"category": "security|bugs|performance|maintainability",
|
|
211
|
-
"file": "relative/path/to/file.ts",
|
|
212
|
-
"line": 42,
|
|
213
|
-
"title": "Short title describing the issue",
|
|
214
|
-
"description": "What the problem is and why it matters.",
|
|
215
|
-
"suggestion": "How to fix it."
|
|
216
|
-
}
|
|
217
|
-
],
|
|
218
|
-
"summary": "Brief 1-2 sentence summary of overall code quality."
|
|
219
|
-
}
|
|
220
|
-
\`\`\``;
|
|
221
|
-
}
|
|
222
|
-
const VALID_SEVERITIES = new Set(['critical', 'high', 'medium', 'low']);
|
|
223
|
-
const VALID_CATEGORIES = new Set(['security', 'bugs', 'performance', 'maintainability']);
|
|
224
|
-
function normalizeFinding(f) {
|
|
225
|
-
if (typeof f.file !== 'string' || typeof f.title !== 'string')
|
|
226
|
-
return null;
|
|
227
|
-
return {
|
|
228
|
-
severity: VALID_SEVERITIES.has(f.severity) ? f.severity : 'medium',
|
|
229
|
-
category: VALID_CATEGORIES.has(f.category) ? f.category : 'maintainability',
|
|
230
|
-
file: f.file,
|
|
231
|
-
line: typeof f.line === 'number' ? f.line : null,
|
|
232
|
-
title: f.title,
|
|
233
|
-
description: typeof f.description === 'string' ? f.description : '',
|
|
234
|
-
suggestion: typeof f.suggestion === 'string' ? f.suggestion : undefined,
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
function extractJson(response) {
|
|
238
|
-
// Try ```json ... ``` first, then plain ``` ... ```, then largest {...} block
|
|
239
|
-
const fencedJson = response.match(/```json\s*([\s\S]*?)```/);
|
|
240
|
-
if (fencedJson)
|
|
241
|
-
return fencedJson[1].trim();
|
|
242
|
-
const fencedPlain = response.match(/```\s*([\s\S]*?)```/);
|
|
243
|
-
if (fencedPlain)
|
|
244
|
-
return fencedPlain[1].trim();
|
|
245
|
-
const braceMatch = response.match(/\{[\s\S]*\}/);
|
|
246
|
-
if (braceMatch)
|
|
247
|
-
return braceMatch[0].trim();
|
|
248
|
-
return response.trim();
|
|
249
|
-
}
|
|
250
|
-
function parseCodeReviewResponse(response) {
|
|
251
|
-
const jsonStr = extractJson(response);
|
|
252
|
-
try {
|
|
253
|
-
const parsed = JSON.parse(jsonStr);
|
|
254
|
-
const rawFindings = Array.isArray(parsed.findings) ? parsed.findings : [];
|
|
255
|
-
const findings = rawFindings.map(normalizeFinding).filter((f) => f !== null);
|
|
256
|
-
const summary = typeof parsed.summary === 'string' ? parsed.summary : `Found ${findings.length} issue(s).`;
|
|
257
|
-
return { findings, summary };
|
|
258
|
-
}
|
|
259
|
-
catch {
|
|
260
|
-
return { findings: [], summary: 'Failed to parse code review results.' };
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
const TOOL_START_MESSAGES = {
|
|
264
|
-
Glob: 'Discovering project files...',
|
|
265
|
-
Read: 'Reading source files...',
|
|
266
|
-
Grep: 'Searching codebase...',
|
|
267
|
-
Bash: 'Running analysis command...',
|
|
268
|
-
};
|
|
269
|
-
function getToolCompleteMessage(event) {
|
|
270
|
-
const input = event.completeInput;
|
|
271
|
-
if (!input)
|
|
272
|
-
return null;
|
|
273
|
-
if (event.toolName === 'Read' && input.file_path) {
|
|
274
|
-
return `Reviewed ${String(input.file_path).split('/').slice(-2).join('/')}`;
|
|
275
|
-
}
|
|
276
|
-
if (event.toolName === 'Grep' && input.pattern) {
|
|
277
|
-
return `Searched for "${String(input.pattern).slice(0, 40)}"`;
|
|
278
|
-
}
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
function createCodeReviewProgressTracker() {
|
|
282
|
-
const seenToolStarts = new Set();
|
|
283
|
-
return (event) => {
|
|
284
|
-
if (event.type === 'tool_start' && event.toolName) {
|
|
285
|
-
if (seenToolStarts.has(event.toolName))
|
|
286
|
-
return null;
|
|
287
|
-
seenToolStarts.add(event.toolName);
|
|
288
|
-
return TOOL_START_MESSAGES[event.toolName] ?? null;
|
|
289
|
-
}
|
|
290
|
-
if (event.type === 'tool_complete')
|
|
291
|
-
return getToolCompleteMessage(event);
|
|
292
|
-
return null;
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
async function handleCodeReview(ctx, ws, msg, workingDir) {
|
|
296
|
-
const dirPath = resolvePath(workingDir, msg.data?.path);
|
|
297
|
-
const reportPath = msg.data?.path || '.';
|
|
298
|
-
if (activeReviews.has(dirPath)) {
|
|
299
|
-
ctx.send(ws, {
|
|
300
|
-
type: 'qualityError',
|
|
301
|
-
data: { path: reportPath, error: 'A code review is already running for this directory.' },
|
|
302
|
-
});
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
activeReviews.add(dirPath);
|
|
306
|
-
try {
|
|
307
|
-
// Send initial progress
|
|
308
|
-
ctx.send(ws, {
|
|
309
|
-
type: 'qualityCodeReviewProgress',
|
|
310
|
-
data: { path: reportPath, message: 'Starting AI code review...' },
|
|
311
|
-
});
|
|
312
|
-
const runner = new HeadlessRunner({
|
|
313
|
-
workingDir: dirPath,
|
|
314
|
-
directPrompt: buildCodeReviewPrompt(dirPath),
|
|
315
|
-
stallWarningMs: 120_000,
|
|
316
|
-
stallKillMs: 600_000,
|
|
317
|
-
stallHardCapMs: 900_000,
|
|
318
|
-
toolUseCallback: (() => {
|
|
319
|
-
const getProgressMessage = createCodeReviewProgressTracker();
|
|
320
|
-
return (event) => {
|
|
321
|
-
const message = getProgressMessage(event);
|
|
322
|
-
if (message) {
|
|
323
|
-
ctx.send(ws, {
|
|
324
|
-
type: 'qualityCodeReviewProgress',
|
|
325
|
-
data: { path: reportPath, message },
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
};
|
|
329
|
-
})(),
|
|
330
|
-
});
|
|
331
|
-
ctx.send(ws, {
|
|
332
|
-
type: 'qualityCodeReviewProgress',
|
|
333
|
-
data: { path: reportPath, message: 'Claude is analyzing your codebase...' },
|
|
334
|
-
});
|
|
335
|
-
const result = await runWithFileLogger('code-review', () => runner.run());
|
|
336
|
-
ctx.send(ws, {
|
|
337
|
-
type: 'qualityCodeReviewProgress',
|
|
338
|
-
data: { path: reportPath, message: 'Generating review report...' },
|
|
339
|
-
});
|
|
340
|
-
const responseText = result.assistantResponse || '';
|
|
341
|
-
const { findings, summary } = parseCodeReviewResponse(responseText);
|
|
342
|
-
// Recompute overall score with AI review findings included
|
|
343
|
-
let updatedResults = null;
|
|
344
|
-
try {
|
|
345
|
-
const persistence = getPersistence(workingDir);
|
|
346
|
-
const existingReport = persistence.loadReport(reportPath);
|
|
347
|
-
if (existingReport) {
|
|
348
|
-
updatedResults = recomputeWithAiReview(existingReport, findings);
|
|
349
|
-
updatedResults = { ...updatedResults, codeReview: findings };
|
|
350
|
-
persistence.saveReport(reportPath, updatedResults);
|
|
351
|
-
persistence.appendHistory(updatedResults, reportPath);
|
|
352
|
-
}
|
|
353
|
-
persistence.saveCodeReview(reportPath, findings, summary);
|
|
354
|
-
}
|
|
355
|
-
catch {
|
|
356
|
-
// Persistence failure should not break the review flow
|
|
357
|
-
}
|
|
358
|
-
ctx.send(ws, {
|
|
359
|
-
type: 'qualityCodeReview',
|
|
360
|
-
data: { path: reportPath, findings, summary, results: updatedResults },
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
catch (error) {
|
|
364
|
-
ctx.send(ws, {
|
|
365
|
-
type: 'qualityError',
|
|
366
|
-
data: { path: reportPath, error: error instanceof Error ? error.message : String(error) },
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
finally {
|
|
370
|
-
activeReviews.delete(dirPath);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
function buildFixPrompt(findings, section) {
|
|
374
|
-
const filtered = section ? findings.filter((f) => f.category === section) : findings;
|
|
375
|
-
const sorted = filtered.sort((a, b) => {
|
|
376
|
-
const order = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
377
|
-
return (order[a.severity] ?? 4) - (order[b.severity] ?? 4);
|
|
378
|
-
});
|
|
379
|
-
const issueList = sorted.slice(0, 30).map((f, i) => {
|
|
380
|
-
const loc = f.line ? `${f.file}:${f.line}` : f.file;
|
|
381
|
-
const parts = [`${i + 1}. [${f.severity.toUpperCase()}] ${loc} — ${f.title}`];
|
|
382
|
-
if (f.description)
|
|
383
|
-
parts.push(` ${f.description}`);
|
|
384
|
-
if (f.suggestion)
|
|
385
|
-
parts.push(` Suggestion: ${f.suggestion}`);
|
|
386
|
-
return parts.join('\n');
|
|
387
|
-
}).join('\n\n');
|
|
388
|
-
return `You are a code quality fix agent. Fix the following quality issues in the codebase.
|
|
389
|
-
|
|
390
|
-
## Issues to Fix (${sorted.length} total, showing top ${Math.min(30, sorted.length)})
|
|
391
|
-
|
|
392
|
-
${issueList}
|
|
393
|
-
|
|
394
|
-
## Rules
|
|
395
|
-
|
|
396
|
-
- Fix each issue by editing the relevant file at the specified location.
|
|
397
|
-
- For complexity issues: refactor into smaller functions. For long files: split or extract modules. For long functions: break into smaller functions.
|
|
398
|
-
- For security issues: apply the suggested fix or use secure coding best practices.
|
|
399
|
-
- For bugs: fix the root cause, not just the symptom.
|
|
400
|
-
- For linting/formatting: apply the standard for the project.
|
|
401
|
-
- Do NOT introduce new issues. Make minimal, focused changes.
|
|
402
|
-
- After fixing, verify the changes compile/pass linting if tools are available.
|
|
403
|
-
- Work through the issues systematically from most to least severe.`;
|
|
404
|
-
}
|
|
405
|
-
const activeFixes = new Set();
|
|
406
|
-
async function handleFixIssues(ctx, ws, msg, workingDir) {
|
|
407
|
-
const dirPath = resolvePath(workingDir, msg.data?.path);
|
|
408
|
-
const reportPath = msg.data?.path || '.';
|
|
409
|
-
const section = msg.data?.section;
|
|
410
|
-
const findings = msg.data?.findings || [];
|
|
411
|
-
if (activeFixes.has(dirPath)) {
|
|
412
|
-
ctx.send(ws, {
|
|
413
|
-
type: 'qualityError',
|
|
414
|
-
data: { path: reportPath, error: 'A fix operation is already running for this directory.' },
|
|
415
|
-
});
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
if (findings.length === 0) {
|
|
419
|
-
ctx.send(ws, {
|
|
420
|
-
type: 'qualityError',
|
|
421
|
-
data: { path: reportPath, error: 'No findings to fix.' },
|
|
422
|
-
});
|
|
423
|
-
return;
|
|
424
|
-
}
|
|
425
|
-
activeFixes.add(dirPath);
|
|
426
|
-
try {
|
|
427
|
-
ctx.send(ws, {
|
|
428
|
-
type: 'qualityFixProgress',
|
|
429
|
-
data: { path: reportPath, message: 'Starting Claude Code to fix issues...' },
|
|
430
|
-
});
|
|
431
|
-
const prompt = buildFixPrompt(findings, section);
|
|
432
|
-
const runner = new HeadlessRunner({
|
|
433
|
-
workingDir: dirPath,
|
|
434
|
-
directPrompt: prompt,
|
|
435
|
-
stallWarningMs: 120_000,
|
|
436
|
-
stallKillMs: 600_000,
|
|
437
|
-
stallHardCapMs: 900_000,
|
|
438
|
-
toolUseCallback: createToolProgressCallback(ctx, ws, reportPath),
|
|
439
|
-
});
|
|
440
|
-
await runWithFileLogger('code-review-fix', () => runner.run());
|
|
441
|
-
ctx.send(ws, {
|
|
442
|
-
type: 'qualityFixProgress',
|
|
443
|
-
data: { path: reportPath, message: 'Fixes applied. Re-running quality checks...' },
|
|
444
|
-
});
|
|
445
|
-
// Re-run quality scan after fixing
|
|
446
|
-
const { tools: detectedTools } = await detectTools(dirPath);
|
|
447
|
-
const installedToolNames = detectedTools.filter((t) => t.installed).map((t) => t.name);
|
|
448
|
-
const results = await runQualityScan(dirPath, (progress) => {
|
|
449
|
-
ctx.send(ws, {
|
|
450
|
-
type: 'qualityScanProgress',
|
|
451
|
-
data: { path: reportPath, progress },
|
|
452
|
-
});
|
|
453
|
-
}, installedToolNames);
|
|
454
|
-
ctx.send(ws, {
|
|
455
|
-
type: 'qualityFixComplete',
|
|
456
|
-
data: { path: reportPath, results },
|
|
457
|
-
});
|
|
458
|
-
// Persist
|
|
459
|
-
try {
|
|
460
|
-
const persistence = getPersistence(workingDir);
|
|
461
|
-
persistence.saveReport(reportPath, results);
|
|
462
|
-
persistence.appendHistory(results, reportPath);
|
|
463
|
-
}
|
|
464
|
-
catch {
|
|
465
|
-
// Persistence failure should not break the fix flow
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
catch (error) {
|
|
469
|
-
ctx.send(ws, {
|
|
470
|
-
type: 'qualityError',
|
|
471
|
-
data: { path: reportPath, error: error instanceof Error ? error.message : String(error) },
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
finally {
|
|
475
|
-
activeFixes.delete(dirPath);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
166
|
//# sourceMappingURL=quality-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-handlers.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGxG,MAAM,aAAa,GAA2B;IAC5C,IAAI,EAAE,uCAAuC;IAC7C,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,yBAAyB;CAChC,CAAC;AAEF,SAAS,0BAA0B,CAAC,GAAmB,EAAE,EAAa,EAAE,UAAkB;IACxF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,OAAO,CAAC,KAAmB,EAAE,EAAE;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,OAAO,EAAE,CAAC;gBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;YAClG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACX,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;aACrH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;AAExC,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACjD,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,MAAc,EACd,UAAkB;IAElB,MAAM,QAAQ,GAA+B;QAC3C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;QACrE,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;QACvD,mBAAmB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;QACvE,iBAAiB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;QACnE,gBAAgB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;QACjE,gBAAgB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC;QAC5D,sBAAsB,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;KAC9E,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,OAAgB;IACvD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IACvE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAmB,EACnB,EAAa,EACb,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACnF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,WAAW,GAA2C,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QACxF,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACnF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;SACxD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACrG,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;IAEzC,IAAI,CAAC;QACH,qEAAqE;QACrE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACzD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACX,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE;aACrC,CAAC,CAAC;QACL,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE;SACpC,CAAC,CAAC;QAEH,uCAAuC;QACvC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YAC/C,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC5C,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1F,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;IACzC,MAAM,SAAS,GAAyB,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAExD,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE;SAC7C,CAAC,CAAC;QAEH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEpE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1F,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,SAAS,qBAAqB,CAAC,OAAe;IAC5C,OAAO;;gDAEuC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuChD,CAAC;AACR,CAAC;AAYD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACxE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAEzF,SAAS,gBAAgB,CAAC,CAA0B;IAClD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,OAAO;QACL,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAyC,CAAC,CAAC,CAAC,QAAQ;QAC7G,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAyC,CAAC,CAAC,CAAC,iBAAiB;QACtH,IAAI,EAAE,CAAC,CAAC,IAAc;QACtB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAChD,KAAK,EAAE,CAAC,CAAC,KAAe;QACxB,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QACnE,UAAU,EAAE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,8EAA8E;IAC9E,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7D,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC1D,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,WAAW,GAA8B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACrG,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,YAAY,CAAC;QAC3G,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,mBAAmB,GAA2B;IAClD,IAAI,EAAE,8BAA8B;IACpC,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,6BAA6B;CACpC,CAAC;AAEF,SAAS,sBAAsB,CAAC,KAAmB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACjD,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,iBAAiB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,+BAA+B;IACtC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,OAAO,CAAC,KAAmB,EAAiB,EAAE;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpD,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;IAEzC,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,sDAAsD,EAAE;SAC1F,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,wBAAwB;QACxB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,4BAA4B,EAAE;SAClE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;YAChC,UAAU,EAAE,OAAO;YACnB,YAAY,EAAE,qBAAqB,CAAC,OAAO,CAAC;YAC5C,cAAc,EAAE,OAAO;YACvB,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,OAAO;YACvB,eAAe,EAAE,CAAC,GAAG,EAAE;gBACrB,MAAM,kBAAkB,GAAG,+BAA+B,EAAE,CAAC;gBAC7D,OAAO,CAAC,KAAmB,EAAE,EAAE;oBAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAC1C,IAAI,OAAO,EAAE,CAAC;wBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;4BACX,IAAI,EAAE,2BAA2B;4BACjC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE;yBACpC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC,CAAC,EAAE;SACL,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sCAAsC,EAAE;SAC5E,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1E,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,6BAA6B,EAAE;SACnE,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACpD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAEpE,2DAA2D;QAC3D,IAAI,cAAc,GAAyD,IAAI,CAAC;QAChF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,GAAG,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACjE,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,UAAU,EAAE,QAAuD,EAAE,CAAC;gBAC5G,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBACnD,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YACxD,CAAC;YACD,WAAW,CAAC,cAAc,CAAC,UAAU,EAAE,QAAgD,EAAE,OAAO,CAAC,CAAC;QACpG,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1F,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAgBD,SAAS,cAAc,CAAC,QAAyB,EAAE,OAAgB;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,KAAK,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;;oBAEW,MAAM,CAAC,MAAM,uBAAuB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;;EAEjF,SAAS;;;;;;;;;;;oEAWyD,CAAC;AACrE,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AAEtC,KAAK,UAAU,eAAe,CAC5B,GAAmB,EACnB,EAAa,EACb,GAAqB,EACrB,UAAkB;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;IACzC,MAAM,OAAO,GAAuB,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IACtD,MAAM,QAAQ,GAAoB,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;IAE3D,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,wDAAwD,EAAE;SAC5F,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE;SACzD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,uCAAuC,EAAE;SAC7E,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;YAChC,UAAU,EAAE,OAAO;YACnB,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE,OAAO;YACvB,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,OAAO;YACvB,eAAe,EAAE,0BAA0B,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC;SACjE,CAAC,CAAC;QAEH,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAE/D,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,6CAA6C,EAAE;SACnF,CAAC,CAAC;QAEH,mCAAmC;QACnC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACzD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACX,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE;aACrC,CAAC,CAAC;QACL,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAEvB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE;SACpC,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YAC/C,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC5C,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1F,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"quality-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SourceFile } from './quality-tools.js';
|
|
2
|
+
import { type Ecosystem, type QualityFinding } from './quality-types.js';
|
|
3
|
+
export declare function analyzeLinting(dirPath: string, ecosystems: Ecosystem[], files: SourceFile[]): Promise<{
|
|
4
|
+
score: number;
|
|
5
|
+
findings: QualityFinding[];
|
|
6
|
+
available: boolean;
|
|
7
|
+
issueCount: number;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=quality-linting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-linting.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-linting.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAsB,KAAK,SAAS,EAAuD,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA4JlJ,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,EAAE,EACvB,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBhG"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
|
+
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { join, relative } from 'node:path';
|
|
5
|
+
import { runCommand } from './quality-tools.js';
|
|
6
|
+
import { biomeDiagToFinding, isBiomeComplexityDiagnostic, isEslintComplexityRule } from './quality-types.js';
|
|
7
|
+
function newLintAccumulator() {
|
|
8
|
+
return { errors: 0, warnings: 0, findings: [], ran: false };
|
|
9
|
+
}
|
|
10
|
+
function processBiomeDiagnostic(d, acc) {
|
|
11
|
+
if (isBiomeComplexityDiagnostic(d))
|
|
12
|
+
return;
|
|
13
|
+
if (d.severity === 'error')
|
|
14
|
+
acc.errors++;
|
|
15
|
+
else
|
|
16
|
+
acc.warnings++;
|
|
17
|
+
acc.findings.push(biomeDiagToFinding(d, 'linting'));
|
|
18
|
+
}
|
|
19
|
+
function parseBiomeDiagnostics(stdout, acc) {
|
|
20
|
+
const parsed = JSON.parse(stdout);
|
|
21
|
+
if (!parsed.diagnostics)
|
|
22
|
+
return;
|
|
23
|
+
for (const d of parsed.diagnostics) {
|
|
24
|
+
processBiomeDiagnostic(d, acc);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function lintWithBiome(dirPath, acc) {
|
|
28
|
+
const result = await runCommand('npx', ['@biomejs/biome', 'lint', '--reporter=json', '.'], dirPath);
|
|
29
|
+
if (result.exitCode > 1)
|
|
30
|
+
return;
|
|
31
|
+
acc.ran = true;
|
|
32
|
+
try {
|
|
33
|
+
parseBiomeDiagnostics(result.stdout, acc);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
acc.errors += (result.stdout.match(/error/gi) || []).length;
|
|
37
|
+
acc.warnings += (result.stdout.match(/warning/gi) || []).length;
|
|
38
|
+
acc.ran = acc.errors > 0 || acc.warnings > 0 || result.exitCode === 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function processEslintMessage(msg, filePath, dirPath, acc) {
|
|
42
|
+
if (isEslintComplexityRule(msg.ruleId))
|
|
43
|
+
return;
|
|
44
|
+
if (msg.severity === 2)
|
|
45
|
+
acc.errors++;
|
|
46
|
+
else
|
|
47
|
+
acc.warnings++;
|
|
48
|
+
acc.findings.push({
|
|
49
|
+
severity: msg.severity === 2 ? 'high' : 'medium',
|
|
50
|
+
category: 'linting',
|
|
51
|
+
file: relative(dirPath, filePath),
|
|
52
|
+
line: msg.line ?? null,
|
|
53
|
+
title: msg.ruleId || 'Lint issue',
|
|
54
|
+
description: msg.message || '',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async function lintWithEslint(dirPath, acc) {
|
|
58
|
+
const result = await runCommand('npx', ['eslint', '--format=json', '.'], dirPath);
|
|
59
|
+
acc.ran = true;
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(result.stdout);
|
|
62
|
+
for (const file of parsed) {
|
|
63
|
+
for (const msg of file.messages || []) {
|
|
64
|
+
processEslintMessage(msg, file.filePath, dirPath, acc);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
acc.errors += (result.stderr.match(/error/gi) || []).length;
|
|
70
|
+
acc.warnings += (result.stderr.match(/warning/gi) || []).length;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function lintNode(dirPath, acc) {
|
|
74
|
+
const biomeConfig = existsSync(join(dirPath, 'biome.json')) || existsSync(join(dirPath, 'biome.jsonc'));
|
|
75
|
+
if (biomeConfig) {
|
|
76
|
+
await lintWithBiome(dirPath, acc);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
await lintWithEslint(dirPath, acc);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function lintPython(dirPath, acc) {
|
|
83
|
+
const result = await runCommand('ruff', ['check', '--output-format=json', '.'], dirPath);
|
|
84
|
+
if (result.exitCode !== 0 && !result.stdout.trim().startsWith('['))
|
|
85
|
+
return;
|
|
86
|
+
acc.ran = true;
|
|
87
|
+
try {
|
|
88
|
+
const parsed = JSON.parse(result.stdout);
|
|
89
|
+
for (const item of parsed) {
|
|
90
|
+
const sev = item.code?.startsWith('E') ? 'high' : 'medium';
|
|
91
|
+
if (sev === 'high')
|
|
92
|
+
acc.errors++;
|
|
93
|
+
else
|
|
94
|
+
acc.warnings++;
|
|
95
|
+
acc.findings.push({
|
|
96
|
+
severity: sev,
|
|
97
|
+
category: 'linting',
|
|
98
|
+
file: item.filename ? relative(dirPath, item.filename) : '',
|
|
99
|
+
line: item.location?.row ?? null,
|
|
100
|
+
title: item.code || 'Lint issue',
|
|
101
|
+
description: item.message || '',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch { /* ignore */ }
|
|
106
|
+
}
|
|
107
|
+
function processClippyMessage(msg, acc) {
|
|
108
|
+
if (msg.reason !== 'compiler-message' || !msg.message)
|
|
109
|
+
return;
|
|
110
|
+
const message = msg.message;
|
|
111
|
+
const level = message.level;
|
|
112
|
+
if (level === 'error')
|
|
113
|
+
acc.errors++;
|
|
114
|
+
else if (level === 'warning')
|
|
115
|
+
acc.warnings++;
|
|
116
|
+
const spans = message.spans;
|
|
117
|
+
const span = spans?.[0];
|
|
118
|
+
const code = message.code;
|
|
119
|
+
acc.findings.push({
|
|
120
|
+
severity: level === 'error' ? 'high' : 'medium',
|
|
121
|
+
category: 'linting',
|
|
122
|
+
file: span?.file_name || '',
|
|
123
|
+
line: span?.line_start ?? null,
|
|
124
|
+
title: code?.code || 'Clippy',
|
|
125
|
+
description: message.message || '',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
async function lintRust(dirPath, acc) {
|
|
129
|
+
const result = await runCommand('cargo', ['clippy', '--message-format=json', '--', '-W', 'clippy::all'], dirPath);
|
|
130
|
+
if (result.exitCode > 1)
|
|
131
|
+
return;
|
|
132
|
+
acc.ran = true;
|
|
133
|
+
for (const line of result.stdout.split('\n')) {
|
|
134
|
+
try {
|
|
135
|
+
const msg = JSON.parse(line);
|
|
136
|
+
processClippyMessage(msg, acc);
|
|
137
|
+
}
|
|
138
|
+
catch { /* not JSON line */ }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function computeLintScore(totalErrors, totalWarnings, totalLines) {
|
|
142
|
+
const kloc = Math.max(totalLines / 1000, 1);
|
|
143
|
+
const penaltyRaw = totalErrors * 10 + totalWarnings * 3;
|
|
144
|
+
const penaltyPerKloc = penaltyRaw / kloc;
|
|
145
|
+
let score;
|
|
146
|
+
if (penaltyPerKloc === 0)
|
|
147
|
+
score = 100;
|
|
148
|
+
else if (penaltyPerKloc <= 5)
|
|
149
|
+
score = 100 - penaltyPerKloc * 2;
|
|
150
|
+
else if (penaltyPerKloc <= 20)
|
|
151
|
+
score = 90 - (penaltyPerKloc - 5) * 2;
|
|
152
|
+
else if (penaltyPerKloc <= 50)
|
|
153
|
+
score = 60 - (penaltyPerKloc - 20) * 1.5;
|
|
154
|
+
else
|
|
155
|
+
score = Math.max(0, 15 - (penaltyPerKloc - 50) * 0.3);
|
|
156
|
+
return Math.round(Math.max(0, Math.min(100, score)));
|
|
157
|
+
}
|
|
158
|
+
export async function analyzeLinting(dirPath, ecosystems, files) {
|
|
159
|
+
const acc = newLintAccumulator();
|
|
160
|
+
if (ecosystems.includes('node'))
|
|
161
|
+
await lintNode(dirPath, acc);
|
|
162
|
+
if (ecosystems.includes('python'))
|
|
163
|
+
await lintPython(dirPath, acc);
|
|
164
|
+
if (ecosystems.includes('rust'))
|
|
165
|
+
await lintRust(dirPath, acc);
|
|
166
|
+
if (!acc.ran) {
|
|
167
|
+
return { score: 0, findings: [], available: false, issueCount: 0 };
|
|
168
|
+
}
|
|
169
|
+
const totalLines = files.reduce((sum, f) => sum + f.lines, 0);
|
|
170
|
+
const score = computeLintScore(acc.errors, acc.warnings, totalLines);
|
|
171
|
+
return {
|
|
172
|
+
score,
|
|
173
|
+
findings: acc.findings.slice(0, 100),
|
|
174
|
+
available: true,
|
|
175
|
+
issueCount: acc.errors + acc.warnings,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=quality-linting.js.map
|