mstro-app 0.4.13 → 0.4.15

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 (68) hide show
  1. package/dist/server/services/file-explorer-ops.d.ts +1 -1
  2. package/dist/server/services/file-explorer-ops.d.ts.map +1 -1
  3. package/dist/server/services/file-explorer-ops.js +7 -2
  4. package/dist/server/services/file-explorer-ops.js.map +1 -1
  5. package/dist/server/services/plan/composer.d.ts +1 -1
  6. package/dist/server/services/plan/composer.d.ts.map +1 -1
  7. package/dist/server/services/plan/composer.js +3 -2
  8. package/dist/server/services/plan/composer.js.map +1 -1
  9. package/dist/server/services/plan/executor.d.ts +5 -0
  10. package/dist/server/services/plan/executor.d.ts.map +1 -1
  11. package/dist/server/services/plan/executor.js +32 -1
  12. package/dist/server/services/plan/executor.js.map +1 -1
  13. package/dist/server/services/plan/parser-core.d.ts.map +1 -1
  14. package/dist/server/services/plan/parser-core.js +1 -0
  15. package/dist/server/services/plan/parser-core.js.map +1 -1
  16. package/dist/server/services/plan/review-gate.d.ts +2 -0
  17. package/dist/server/services/plan/review-gate.d.ts.map +1 -1
  18. package/dist/server/services/plan/review-gate.js +25 -3
  19. package/dist/server/services/plan/review-gate.js.map +1 -1
  20. package/dist/server/services/plan/types.d.ts +2 -0
  21. package/dist/server/services/plan/types.d.ts.map +1 -1
  22. package/dist/server/services/websocket/file-explorer-handlers.js +2 -1
  23. package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
  24. package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -1
  25. package/dist/server/services/websocket/git-log-handlers.js +29 -9
  26. package/dist/server/services/websocket/git-log-handlers.js.map +1 -1
  27. package/dist/server/services/websocket/git-worktree-handlers.js +8 -0
  28. package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -1
  29. package/dist/server/services/websocket/handler.d.ts.map +1 -1
  30. package/dist/server/services/websocket/handler.js +5 -3
  31. package/dist/server/services/websocket/handler.js.map +1 -1
  32. package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -1
  33. package/dist/server/services/websocket/plan-execution-handlers.js +4 -1
  34. package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -1
  35. package/dist/server/services/websocket/plan-helpers.js +1 -1
  36. package/dist/server/services/websocket/plan-helpers.js.map +1 -1
  37. package/dist/server/services/websocket/quality-handlers.d.ts +1 -1
  38. package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
  39. package/dist/server/services/websocket/quality-handlers.js +67 -14
  40. package/dist/server/services/websocket/quality-handlers.js.map +1 -1
  41. package/dist/server/services/websocket/quality-persistence.d.ts +2 -0
  42. package/dist/server/services/websocket/quality-persistence.d.ts.map +1 -1
  43. package/dist/server/services/websocket/quality-persistence.js +33 -2
  44. package/dist/server/services/websocket/quality-persistence.js.map +1 -1
  45. package/dist/server/services/websocket/quality-review-agent.d.ts +33 -0
  46. package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -1
  47. package/dist/server/services/websocket/quality-review-agent.js +360 -72
  48. package/dist/server/services/websocket/quality-review-agent.js.map +1 -1
  49. package/dist/server/services/websocket/quality-types.d.ts +3 -0
  50. package/dist/server/services/websocket/quality-types.d.ts.map +1 -1
  51. package/dist/server/services/websocket/quality-types.js.map +1 -1
  52. package/package.json +1 -1
  53. package/server/services/file-explorer-ops.ts +7 -2
  54. package/server/services/plan/composer.ts +3 -1
  55. package/server/services/plan/executor.ts +32 -1
  56. package/server/services/plan/parser-core.ts +1 -0
  57. package/server/services/plan/review-gate.ts +28 -3
  58. package/server/services/plan/types.ts +2 -0
  59. package/server/services/websocket/file-explorer-handlers.ts +2 -1
  60. package/server/services/websocket/git-log-handlers.ts +30 -9
  61. package/server/services/websocket/git-worktree-handlers.ts +9 -0
  62. package/server/services/websocket/handler.ts +6 -3
  63. package/server/services/websocket/plan-execution-handlers.ts +4 -1
  64. package/server/services/websocket/plan-helpers.ts +1 -1
  65. package/server/services/websocket/quality-handlers.ts +69 -9
  66. package/server/services/websocket/quality-persistence.ts +32 -2
  67. package/server/services/websocket/quality-review-agent.ts +427 -72
  68. package/server/services/websocket/quality-types.ts +3 -0
@@ -9,6 +9,7 @@
9
9
  * - quality-fix-agent.ts — AI fix prompt, progress tracking, handler
10
10
  */
11
11
  import { join } from 'node:path';
12
+ import { validatePathWithinWorkingDir } from '../pathUtils.js';
12
13
  import { handleFixIssues } from './quality-fix-agent.js';
13
14
  import { QualityPersistence } from './quality-persistence.js';
14
15
  import { handleCodeReview } from './quality-review-agent.js';
@@ -31,26 +32,53 @@ function resolvePath(workingDir, dirPath) {
31
32
  return dirPath;
32
33
  return join(workingDir, dirPath);
33
34
  }
35
+ /**
36
+ * Resolve and validate a directory path for sandboxed users.
37
+ * Returns null if the path escapes the working directory.
38
+ */
39
+ function resolveAndValidatePath(workingDir, dirPath, isSandboxed) {
40
+ const resolved = resolvePath(workingDir, dirPath);
41
+ if (isSandboxed) {
42
+ const validation = validatePathWithinWorkingDir(resolved, workingDir);
43
+ if (!validation.valid) {
44
+ return { resolved: '', error: validation.error || 'Path outside project directory' };
45
+ }
46
+ return { resolved: validation.resolvedPath };
47
+ }
48
+ return { resolved };
49
+ }
34
50
  // ── Message router ────────────────────────────────────────────
35
- export function handleQualityMessage(ctx, ws, msg, _tabId, workingDir) {
51
+ export function handleQualityMessage(ctx, ws, msg, _tabId, workingDir, permission) {
52
+ const isSandboxed = permission === 'control' || permission === 'view';
53
+ const sendPathError = (path, error) => {
54
+ ctx.send(ws, { type: 'qualityError', data: { path, error } });
55
+ };
36
56
  const handlers = {
37
- qualityDetectTools: () => handleDetectTools(ctx, ws, msg, workingDir),
38
- qualityScan: () => handleScan(ctx, ws, msg, workingDir),
39
- qualityInstallTools: () => handleInstallTools(ctx, ws, msg, workingDir),
57
+ qualityDetectTools: () => handleDetectTools(ctx, ws, msg, workingDir, isSandboxed),
58
+ qualityScan: () => handleScan(ctx, ws, msg, workingDir, isSandboxed),
59
+ qualityInstallTools: () => handleInstallTools(ctx, ws, msg, workingDir, isSandboxed),
40
60
  qualityCodeReview: () => {
41
- const dirPath = resolvePath(workingDir, msg.data?.path);
61
+ const { resolved: dirPath, error } = resolveAndValidatePath(workingDir, msg.data?.path, isSandboxed);
62
+ if (error) {
63
+ sendPathError(msg.data?.path || '.', error);
64
+ return;
65
+ }
42
66
  const reportPath = msg.data?.path || '.';
43
67
  handleCodeReview(ctx, ws, reportPath, dirPath, workingDir, activeReviews, getPersistence);
44
68
  },
45
69
  qualityFixIssues: () => {
46
- const dirPath = resolvePath(workingDir, msg.data?.path);
70
+ const { resolved: dirPath, error } = resolveAndValidatePath(workingDir, msg.data?.path, isSandboxed);
71
+ if (error) {
72
+ sendPathError(msg.data?.path || '.', error);
73
+ return;
74
+ }
47
75
  const reportPath = msg.data?.path || '.';
48
76
  const section = msg.data?.section;
49
77
  const findings = msg.data?.findings || [];
50
78
  handleFixIssues(ctx, ws, reportPath, dirPath, workingDir, section, findings, getPersistence);
51
79
  },
52
80
  qualityLoadState: () => handleLoadState(ctx, ws, workingDir),
53
- qualitySaveDirectories: () => handleSaveDirectories(ctx, ws, msg, workingDir),
81
+ qualitySaveDirectories: () => handleSaveDirectories(ctx, ws, msg, workingDir, isSandboxed),
54
82
  };
55
83
  const handler = handlers[msg.type];
56
84
  if (!handler)
@@ -80,10 +108,23 @@ async function handleLoadState(ctx, ws, workingDir) {
80
108
  });
81
109
  }
82
110
  }
83
- async function handleSaveDirectories(ctx, ws, msg, workingDir) {
111
+ async function handleSaveDirectories(ctx, ws, msg, workingDir, isSandboxed = false) {
84
112
  try {
85
113
  const persistence = getPersistence(workingDir);
86
114
  const directories = msg.data?.directories || [];
115
+ // Validate all directory paths when sandboxed
116
+ if (isSandboxed) {
117
+ for (const dir of directories) {
118
+ const { error } = resolveAndValidatePath(workingDir, dir.path, true);
119
+ if (error) {
120
+ ctx.send(ws, {
121
+ type: 'qualityError',
122
+ data: { path: dir.path, error: `Cannot save directory: ${error}` },
123
+ });
124
+ return;
125
+ }
126
+ }
127
+ }
87
128
  persistence.saveConfig(directories);
88
129
  }
89
130
  catch (error) {
@@ -93,8 +134,12 @@ async function handleSaveDirectories(ctx, ws, msg, workingDir) {
93
134
  });
94
135
  }
95
136
  }
96
- async function handleDetectTools(ctx, ws, msg, workingDir) {
97
- const dirPath = resolvePath(workingDir, msg.data?.path);
137
+ async function handleDetectTools(ctx, ws, msg, workingDir, isSandboxed = false) {
138
+ const { resolved: dirPath, error: pathError } = resolveAndValidatePath(workingDir, msg.data?.path, isSandboxed);
139
+ if (pathError) {
140
+ ctx.send(ws, { type: 'qualityError', data: { path: msg.data?.path || '.', error: pathError } });
141
+ return;
142
+ }
98
143
  try {
99
144
  const { tools, ecosystem } = await detectTools(dirPath);
100
145
  ctx.send(ws, {
@@ -109,8 +154,12 @@ async function handleDetectTools(ctx, ws, msg, workingDir) {
109
154
  });
110
155
  }
111
156
  }
112
- async function handleScan(ctx, ws, msg, workingDir) {
113
- const dirPath = resolvePath(workingDir, msg.data?.path);
157
+ async function handleScan(ctx, ws, msg, workingDir, isSandboxed = false) {
158
+ const { resolved: dirPath, error: pathError } = resolveAndValidatePath(workingDir, msg.data?.path, isSandboxed);
159
+ if (pathError) {
160
+ ctx.send(ws, { type: 'qualityError', data: { path: msg.data?.path || '.', error: pathError } });
161
+ return;
162
+ }
114
163
  const reportPath = msg.data?.path || '.';
115
164
  try {
116
165
  const { tools: detectedTools } = await detectTools(dirPath);
@@ -141,8 +190,12 @@ async function handleScan(ctx, ws, msg, workingDir) {
141
190
  });
142
191
  }
143
192
  }
144
- async function handleInstallTools(ctx, ws, msg, workingDir) {
145
- const dirPath = resolvePath(workingDir, msg.data?.path);
193
+ async function handleInstallTools(ctx, ws, msg, workingDir, isSandboxed = false) {
194
+ const { resolved: dirPath, error: pathError } = resolveAndValidatePath(workingDir, msg.data?.path, isSandboxed);
195
+ if (pathError) {
196
+ ctx.send(ws, { type: 'qualityError', data: { path: msg.data?.path || '.', error: pathError } });
197
+ return;
198
+ }
146
199
  const reportPath = msg.data?.path || '.';
147
200
  const toolNames = msg.data?.tools;
148
201
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"quality-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-handlers.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-handlers.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ export interface QualityPersistedState {
22
22
  export declare class QualityPersistence {
23
23
  private qualityDir;
24
24
  private reportsDir;
25
+ private reportHistoryDir;
25
26
  private configPath;
26
27
  private historyPath;
27
28
  constructor(workingDir: string);
@@ -32,6 +33,7 @@ export declare class QualityPersistence {
32
33
  loadReport(dirPath: string): QualityResults | null;
33
34
  saveReport(dirPath: string, results: QualityResults): void;
34
35
  loadAllReports(directories: QualityDirectoryConfig[]): Record<string, QualityResults>;
36
+ private pruneReportHistory;
35
37
  loadHistory(): QualityHistoryEntry[];
36
38
  appendHistory(results: QualityResults, dirPath: string): void;
37
39
  loadCodeReview(dirPath: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"quality-persistence.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-persistence.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAMD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AA0CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,UAAU,EAAE,MAAM;IAU9B,UAAU,IAAI,sBAAsB,EAAE;IAKtC,UAAU,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAIvD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ/C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAMlD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAM1D,cAAc,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAarF,WAAW,IAAI,mBAAmB,EAAE;IAKpC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiD7D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMnH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ3F,SAAS,IAAI,qBAAqB;CAenC"}
1
+ {"version":3,"file":"quality-persistence.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-persistence.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAMD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AA2CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,UAAU,EAAE,MAAM;IAY9B,UAAU,IAAI,sBAAsB,EAAE;IAKtC,UAAU,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAIvD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ/C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAMlD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAY1D,cAAc,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAarF,OAAO,CAAC,kBAAkB;IAa1B,WAAW,IAAI,mBAAmB,EAAE;IAKpC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiD7D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMnH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAe3F,SAAS,IAAI,qBAAqB;CAenC"}
@@ -9,12 +9,13 @@
9
9
  * .mstro/quality/reports/<slug>.json — Latest full report per directory
10
10
  * .mstro/quality/history.json — Score history entries for trend tracking
11
11
  */
12
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
13
13
  import { join } from 'node:path';
14
14
  // ============================================================================
15
15
  // Helpers
16
16
  // ============================================================================
17
17
  const MAX_HISTORY_ENTRIES = 100;
18
+ const MAX_REPORT_HISTORY_FILES = 200;
18
19
  function slugify(dirPath) {
19
20
  if (dirPath === '.' || dirPath === './')
20
21
  return '_root';
@@ -50,14 +51,17 @@ function writeJson(filePath, data) {
50
51
  export class QualityPersistence {
51
52
  qualityDir;
52
53
  reportsDir;
54
+ reportHistoryDir;
53
55
  configPath;
54
56
  historyPath;
55
57
  constructor(workingDir) {
56
58
  this.qualityDir = join(workingDir, '.mstro', 'quality');
57
59
  this.reportsDir = join(this.qualityDir, 'reports');
60
+ this.reportHistoryDir = join(this.reportsDir, 'history');
58
61
  this.configPath = join(this.qualityDir, 'config.json');
59
62
  this.historyPath = join(this.qualityDir, 'history.json');
60
63
  ensureDir(this.reportsDir);
64
+ ensureDir(this.reportHistoryDir);
61
65
  }
62
66
  // ---- Config (directory list) ----
63
67
  loadConfig() {
@@ -88,6 +92,11 @@ export class QualityPersistence {
88
92
  const slug = slugify(dirPath);
89
93
  const reportPath = join(this.reportsDir, `${slug}.json`);
90
94
  writeJson(reportPath, results);
95
+ // Archive timestamped copy for historical tracking
96
+ const ts = Date.now();
97
+ const archivePath = join(this.reportHistoryDir, `${ts}_${slug}.json`);
98
+ writeJson(archivePath, results);
99
+ this.pruneReportHistory();
91
100
  }
92
101
  loadAllReports(directories) {
93
102
  const reports = {};
@@ -99,6 +108,22 @@ export class QualityPersistence {
99
108
  }
100
109
  return reports;
101
110
  }
111
+ // ---- Report history pruning ----
112
+ pruneReportHistory() {
113
+ try {
114
+ const files = readdirSync(this.reportHistoryDir).filter((f) => f.endsWith('.json')).sort();
115
+ if (files.length <= MAX_REPORT_HISTORY_FILES)
116
+ return;
117
+ const toRemove = files.slice(0, files.length - MAX_REPORT_HISTORY_FILES);
118
+ for (const file of toRemove) {
119
+ try {
120
+ unlinkSync(join(this.reportHistoryDir, file));
121
+ }
122
+ catch { /* ignore */ }
123
+ }
124
+ }
125
+ catch { /* directory may not exist yet */ }
126
+ }
102
127
  // ---- History (trend tracking) ----
103
128
  loadHistory() {
104
129
  const history = readJson(this.historyPath, { entries: [] });
@@ -156,7 +181,13 @@ export class QualityPersistence {
156
181
  saveCodeReview(dirPath, findings, summary) {
157
182
  const slug = slugify(dirPath);
158
183
  const reviewPath = join(this.reportsDir, `${slug}-review.json`);
159
- writeJson(reviewPath, { findings, summary, timestamp: new Date().toISOString() });
184
+ const data = { findings, summary, timestamp: new Date().toISOString() };
185
+ writeJson(reviewPath, data);
186
+ // Archive timestamped copy for historical tracking
187
+ const ts = Date.now();
188
+ const archivePath = join(this.reportHistoryDir, `${ts}_${slug}-review.json`);
189
+ writeJson(archivePath, data);
190
+ this.pruneReportHistory();
160
191
  }
161
192
  // ---- Full state load ----
162
193
  loadState() {
@@ -1 +1 @@
1
- {"version":3,"file":"quality-persistence.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-persistence.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAuCjC,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,OAAO,CAAC,OAAe;IAC9B,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACxD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAI,QAAgB,EAAE,QAAW;IAChD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAM,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,IAAa;IAChD,IAAI,CAAC;QACH,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,OAAO,kBAAkB;IACrB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,WAAW,CAAS;IAE5B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACzD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,oCAAoC;IAEpC,UAAU;QACR,MAAM,MAAM,GAAG,QAAQ,CAAgB,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,WAAqC;QAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAa;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,2CAA2C;IAE3C,UAAU,CAAC,OAAe;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAwB,UAAU,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,OAAuB;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;QACzD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,cAAc,CAAC,WAAqC;QAClD,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qCAAqC;IAErC,WAAW;QACT,MAAM,OAAO,GAAG,QAAQ,CAAiB,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,aAAa,CAAC,OAAuB,EAAE,OAAe;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnC,gDAAgD;QAChD,+EAA+E;QAC/E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,aAAa;QAEzC,MAAM,QAAQ,GAA0B;YACtC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO,CAAC,OAAO;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QAEF,IAAI,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,WAAW,EAAE,CAAC;YACxD,wDAAwD;YACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC5E,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAClB,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YACD,gEAAgE;YAChE,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9E,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1E,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpD,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,YAAY;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,OAAO,OAAO,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,kDAAkD;IAElD,cAAc,CAAC,OAAe;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAqF,UAAU,EAAE,IAAI,CAAC,CAAC;IACxH,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,QAAmC,EAAE,OAAe;QAClF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;QAChE,SAAS,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,4BAA4B;IAE5B,SAAS;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnC,4CAA4C;QAC5C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,QAAmD,EAAE,CAAC;YACvH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"quality-persistence.js","sourceRoot":"","sources":["../../../../server/services/websocket/quality-persistence.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export interface CodeReviewFinding {
9
9
  title: string;
10
10
  description: string;
11
11
  suggestion?: string;
12
+ evidence?: string;
13
+ verified?: boolean;
14
+ verificationNote?: string;
12
15
  }
13
16
  export declare function buildCodeReviewPrompt(dirPath: string, cliFindings?: Array<{
14
17
  severity: string;
@@ -26,5 +29,35 @@ export interface CodeReviewResult {
26
29
  scoreRationale: string | null;
27
30
  }
28
31
  export declare function parseCodeReviewResponse(response: string): CodeReviewResult;
32
+ /**
33
+ * Validate findings against the actual filesystem. Returns findings annotated
34
+ * with validation results. Does NOT remove findings — only marks them.
35
+ */
36
+ export declare function validateFindings(findings: CodeReviewFinding[], dirPath: string): {
37
+ validated: CodeReviewFinding[];
38
+ rejected: CodeReviewFinding[];
39
+ stats: {
40
+ total: number;
41
+ passed: number;
42
+ failed: number;
43
+ };
44
+ };
45
+ export declare function buildVerificationPrompt(dirPath: string, findings: CodeReviewFinding[]): string;
46
+ interface VerificationVerdict {
47
+ id: number;
48
+ verdict: 'confirmed' | 'rejected';
49
+ confidence: number;
50
+ note: string;
51
+ }
52
+ export declare function parseVerificationResponse(response: string): VerificationVerdict[];
53
+ /**
54
+ * Apply verification verdicts to findings.
55
+ * Confirmed findings get verified=true. Rejected findings are removed.
56
+ */
57
+ export declare function applyVerification(findings: CodeReviewFinding[], verdicts: VerificationVerdict[]): {
58
+ verified: CodeReviewFinding[];
59
+ rejected: CodeReviewFinding[];
60
+ };
29
61
  export declare function handleCodeReview(ctx: HandlerContext, ws: WSContext, reportPath: string, dirPath: string, workingDir: string, activeReviews: Set<string>, getPersistence: (dir: string) => QualityPersistence): Promise<void>;
62
+ export {};
30
63
  //# sourceMappingURL=quality-review-agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quality-review-agent.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-review-agent.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAgFjM;AAiCD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAe1E;AAuCD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,SAAS,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,kBAAkB,GAClD,OAAO,CAAC,IAAI,CAAC,CAuGf"}
1
+ {"version":3,"file":"quality-review-agent.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/quality-review-agent.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAyGjM;AAkCD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAe1E;AAiDD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,MAAM,GACd;IAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAkB7H;AAqED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,MAAM,CA4DR;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,WAAW,GAAG,UAAU,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAiBjF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,EAAE,mBAAmB,EAAE,GAC9B;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,CA6BlE;AAoID,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,SAAS,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,kBAAkB,GAClD,OAAO,CAAC,IAAI,CAAC,CAgEf"}