@prowi/deskcheck 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +67 -12
  2. package/build/cli.js +110 -22
  3. package/build/cli.js.map +1 -1
  4. package/build/{core/config.d.ts → config/loader.d.ts} +9 -1
  5. package/build/config/loader.d.ts.map +1 -0
  6. package/build/{core/config.js → config/loader.js} +4 -2
  7. package/build/config/loader.js.map +1 -0
  8. package/build/config/types.d.ts +45 -0
  9. package/build/config/types.d.ts.map +1 -0
  10. package/build/config/types.js +2 -0
  11. package/build/config/types.js.map +1 -0
  12. package/build/mcp/tools.d.ts +1 -1
  13. package/build/mcp/tools.d.ts.map +1 -1
  14. package/build/mcp/tools.js +5 -5
  15. package/build/mcp/tools.js.map +1 -1
  16. package/build/mcp-server.js +1 -1
  17. package/build/mcp-server.js.map +1 -1
  18. package/build/{agents/executor-prompt.d.ts → prompts/ExecutorPrompt.d.ts} +6 -2
  19. package/build/prompts/ExecutorPrompt.d.ts.map +1 -0
  20. package/build/prompts/ExecutorPrompt.js +80 -0
  21. package/build/prompts/ExecutorPrompt.js.map +1 -0
  22. package/build/prompts/JudgePrompt.d.ts +16 -0
  23. package/build/prompts/JudgePrompt.d.ts.map +1 -0
  24. package/build/prompts/JudgePrompt.js +57 -0
  25. package/build/prompts/JudgePrompt.js.map +1 -0
  26. package/build/prompts/PlannerPrompt.d.ts +12 -0
  27. package/build/prompts/PlannerPrompt.d.ts.map +1 -0
  28. package/build/prompts/PlannerPrompt.js +34 -0
  29. package/build/prompts/PlannerPrompt.js.map +1 -0
  30. package/build/renderers/{json.d.ts → review/JsonRenderer.d.ts} +2 -2
  31. package/build/renderers/review/JsonRenderer.d.ts.map +1 -0
  32. package/build/renderers/{json.js → review/JsonRenderer.js} +1 -1
  33. package/build/renderers/review/JsonRenderer.js.map +1 -0
  34. package/build/renderers/{markdown.d.ts → review/MarkdownRenderer.d.ts} +2 -2
  35. package/build/renderers/review/MarkdownRenderer.d.ts.map +1 -0
  36. package/build/renderers/{markdown.js → review/MarkdownRenderer.js} +2 -2
  37. package/build/renderers/review/MarkdownRenderer.js.map +1 -0
  38. package/build/renderers/{terminal.d.ts → review/TerminalRenderer.d.ts} +2 -2
  39. package/build/renderers/review/TerminalRenderer.d.ts.map +1 -0
  40. package/build/renderers/{terminal.js → review/TerminalRenderer.js} +2 -2
  41. package/build/renderers/review/TerminalRenderer.js.map +1 -0
  42. package/build/renderers/{watch.d.ts → review/WatchRenderer.d.ts} +2 -2
  43. package/build/renderers/review/WatchRenderer.d.ts.map +1 -0
  44. package/build/renderers/{watch.js → review/WatchRenderer.js} +1 -1
  45. package/build/renderers/review/WatchRenderer.js.map +1 -0
  46. package/build/renderers/shared.d.ts +1 -1
  47. package/build/renderers/shared.d.ts.map +1 -1
  48. package/build/renderers/test/TerminalRenderer.d.ts +14 -0
  49. package/build/renderers/test/TerminalRenderer.d.ts.map +1 -0
  50. package/build/renderers/test/TerminalRenderer.js +233 -0
  51. package/build/renderers/test/TerminalRenderer.js.map +1 -0
  52. package/build/server/controllers/ReviewController.d.ts +23 -0
  53. package/build/server/controllers/ReviewController.d.ts.map +1 -0
  54. package/build/server/controllers/ReviewController.js +90 -0
  55. package/build/server/controllers/ReviewController.js.map +1 -0
  56. package/build/server/controllers/TestController.d.ts +2 -0
  57. package/build/server/controllers/TestController.d.ts.map +1 -0
  58. package/build/server/controllers/TestController.js +3 -0
  59. package/build/server/controllers/TestController.js.map +1 -0
  60. package/build/server/middleware/cors.d.ts +9 -0
  61. package/build/server/middleware/cors.d.ts.map +1 -0
  62. package/build/server/middleware/cors.js +18 -0
  63. package/build/server/middleware/cors.js.map +1 -0
  64. package/build/{serve.d.ts → server/server.d.ts} +2 -2
  65. package/build/server/server.d.ts.map +1 -0
  66. package/build/server/server.js +102 -0
  67. package/build/server/server.js.map +1 -0
  68. package/build/server/sse/FileWatcherSSE.d.ts +10 -0
  69. package/build/server/sse/FileWatcherSSE.d.ts.map +1 -0
  70. package/build/server/sse/FileWatcherSSE.js +89 -0
  71. package/build/server/sse/FileWatcherSSE.js.map +1 -0
  72. package/build/services/ExecutorService.d.ts +51 -0
  73. package/build/services/ExecutorService.d.ts.map +1 -0
  74. package/build/services/ExecutorService.js +133 -0
  75. package/build/services/ExecutorService.js.map +1 -0
  76. package/build/services/FindingsParserService.d.ts +10 -0
  77. package/build/services/FindingsParserService.d.ts.map +1 -0
  78. package/build/services/FindingsParserService.js +64 -0
  79. package/build/services/FindingsParserService.js.map +1 -0
  80. package/build/services/criteria/CriteriaService.d.ts +10 -0
  81. package/build/services/criteria/CriteriaService.d.ts.map +1 -0
  82. package/build/services/criteria/CriteriaService.js +10 -0
  83. package/build/services/criteria/CriteriaService.js.map +1 -0
  84. package/build/{core → services/criteria}/glob-matcher.d.ts +1 -1
  85. package/build/services/criteria/glob-matcher.d.ts.map +1 -0
  86. package/build/services/criteria/glob-matcher.js.map +1 -0
  87. package/build/{core → services/criteria}/module-parser.d.ts +13 -1
  88. package/build/services/criteria/module-parser.d.ts.map +1 -0
  89. package/build/{core → services/criteria}/module-parser.js +38 -0
  90. package/build/services/criteria/module-parser.js.map +1 -0
  91. package/build/{core/context-extractor.d.ts → services/review/ReviewContextExtractorService.d.ts} +2 -2
  92. package/build/services/review/ReviewContextExtractorService.d.ts.map +1 -0
  93. package/build/{core/context-extractor.js → services/review/ReviewContextExtractorService.js} +1 -1
  94. package/build/services/review/ReviewContextExtractorService.js.map +1 -0
  95. package/build/{agents/orchestrator.d.ts → services/review/ReviewOrchestratorService.d.ts} +5 -3
  96. package/build/services/review/ReviewOrchestratorService.d.ts.map +1 -0
  97. package/build/{agents/orchestrator.js → services/review/ReviewOrchestratorService.js} +15 -171
  98. package/build/services/review/ReviewOrchestratorService.js.map +1 -0
  99. package/build/{core/plan-builder.d.ts → services/review/ReviewPlanBuilderService.d.ts} +5 -4
  100. package/build/services/review/ReviewPlanBuilderService.d.ts.map +1 -0
  101. package/build/{core/plan-builder.js → services/review/ReviewPlanBuilderService.js} +2 -2
  102. package/build/services/review/ReviewPlanBuilderService.js.map +1 -0
  103. package/build/{agents/planner.d.ts → services/review/ReviewPlannerService.d.ts} +5 -4
  104. package/build/services/review/ReviewPlannerService.d.ts.map +1 -0
  105. package/build/{agents/planner.js → services/review/ReviewPlannerService.js} +13 -29
  106. package/build/services/review/ReviewPlannerService.js.map +1 -0
  107. package/build/{core/storage.d.ts → services/review/ReviewStorageService.d.ts} +3 -3
  108. package/build/services/review/ReviewStorageService.d.ts.map +1 -0
  109. package/build/{core/storage.js → services/review/ReviewStorageService.js} +6 -6
  110. package/build/services/review/ReviewStorageService.js.map +1 -0
  111. package/build/services/testing/JudgeService.d.ts +30 -0
  112. package/build/services/testing/JudgeService.d.ts.map +1 -0
  113. package/build/services/testing/JudgeService.js +95 -0
  114. package/build/services/testing/JudgeService.js.map +1 -0
  115. package/build/services/testing/TestDiscoveryService.d.ts +16 -0
  116. package/build/services/testing/TestDiscoveryService.d.ts.map +1 -0
  117. package/build/services/testing/TestDiscoveryService.js +66 -0
  118. package/build/services/testing/TestDiscoveryService.js.map +1 -0
  119. package/build/services/testing/TestRunnerService.d.ts +35 -0
  120. package/build/services/testing/TestRunnerService.d.ts.map +1 -0
  121. package/build/services/testing/TestRunnerService.js +140 -0
  122. package/build/services/testing/TestRunnerService.js.map +1 -0
  123. package/build/services/testing/TestScorerService.d.ts +9 -0
  124. package/build/services/testing/TestScorerService.d.ts.map +1 -0
  125. package/build/services/testing/TestScorerService.js +35 -0
  126. package/build/services/testing/TestScorerService.js.map +1 -0
  127. package/build/services/testing/TestStorageService.d.ts +39 -0
  128. package/build/services/testing/TestStorageService.d.ts.map +1 -0
  129. package/build/services/testing/TestStorageService.js +144 -0
  130. package/build/services/testing/TestStorageService.js.map +1 -0
  131. package/build/types/criteria.d.ts +24 -0
  132. package/build/types/criteria.d.ts.map +1 -0
  133. package/build/{core/types.js → types/criteria.js} +2 -2
  134. package/build/types/criteria.js.map +1 -0
  135. package/build/{core/types.d.ts → types/review.d.ts} +2 -64
  136. package/build/types/review.d.ts.map +1 -0
  137. package/build/types/review.js +2 -0
  138. package/build/types/review.js.map +1 -0
  139. package/build/types/testing.d.ts +109 -0
  140. package/build/types/testing.d.ts.map +1 -0
  141. package/build/types/testing.js +2 -0
  142. package/build/types/testing.js.map +1 -0
  143. package/package.json +1 -1
  144. package/build/agents/executor-prompt.d.ts.map +0 -1
  145. package/build/agents/executor-prompt.js +0 -65
  146. package/build/agents/executor-prompt.js.map +0 -1
  147. package/build/agents/orchestrator.d.ts.map +0 -1
  148. package/build/agents/orchestrator.js.map +0 -1
  149. package/build/agents/planner.d.ts.map +0 -1
  150. package/build/agents/planner.js.map +0 -1
  151. package/build/core/config.d.ts.map +0 -1
  152. package/build/core/config.js.map +0 -1
  153. package/build/core/context-extractor.d.ts.map +0 -1
  154. package/build/core/context-extractor.js.map +0 -1
  155. package/build/core/glob-matcher.d.ts.map +0 -1
  156. package/build/core/glob-matcher.js.map +0 -1
  157. package/build/core/module-parser.d.ts.map +0 -1
  158. package/build/core/module-parser.js.map +0 -1
  159. package/build/core/plan-builder.d.ts.map +0 -1
  160. package/build/core/plan-builder.js.map +0 -1
  161. package/build/core/storage.d.ts.map +0 -1
  162. package/build/core/storage.js.map +0 -1
  163. package/build/core/types.d.ts.map +0 -1
  164. package/build/core/types.js.map +0 -1
  165. package/build/renderers/json.d.ts.map +0 -1
  166. package/build/renderers/json.js.map +0 -1
  167. package/build/renderers/markdown.d.ts.map +0 -1
  168. package/build/renderers/markdown.js.map +0 -1
  169. package/build/renderers/terminal.d.ts.map +0 -1
  170. package/build/renderers/terminal.js.map +0 -1
  171. package/build/renderers/watch.d.ts.map +0 -1
  172. package/build/renderers/watch.js.map +0 -1
  173. package/build/serve.d.ts.map +0 -1
  174. package/build/serve.js +0 -249
  175. package/build/serve.js.map +0 -1
  176. /package/build/{core → services/criteria}/glob-matcher.js +0 -0
@@ -1,125 +1,11 @@
1
1
  import path from "node:path";
2
- import { query } from "@anthropic-ai/claude-agent-sdk";
3
- import { ReviewStorage } from "../core/storage.js";
4
- import { extractContext } from "../core/context-extractor.js";
5
- import { buildExecutorPrompt } from "./executor-prompt.js";
2
+ import { ReviewStorageService } from "./ReviewStorageService.js";
3
+ import { extractContext } from "./ReviewContextExtractorService.js";
4
+ import { buildExecutorPrompt } from "../../prompts/ExecutorPrompt.js";
5
+ import { parseFindings } from "../FindingsParserService.js";
6
+ import { ExecutorService } from "../ExecutorService.js";
6
7
  // =============================================================================
7
- // Helpers
8
- // =============================================================================
9
- const VALID_SEVERITIES = new Set([
10
- "critical",
11
- "warning",
12
- "info",
13
- ]);
14
- /**
15
- * Parse executor output into a validated array of findings.
16
- *
17
- * The executor is instructed to output only a JSON array. This function
18
- * extracts the JSON from the response text, handles cases where the agent
19
- * wraps it in markdown fences, and validates each finding's structure.
20
- */
21
- function parseFindings(output) {
22
- // Try to extract JSON array from the output
23
- let jsonText = output.trim();
24
- // Strip markdown code fences if present
25
- const fencedMatch = jsonText.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
26
- if (fencedMatch) {
27
- jsonText = fencedMatch[1].trim();
28
- }
29
- // Find the JSON array boundaries
30
- const startIdx = jsonText.indexOf("[");
31
- const endIdx = jsonText.lastIndexOf("]");
32
- if (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) {
33
- console.error(`[deskcheck] Warning: executor output did not contain a JSON array. Output: ${output.slice(0, 200)}`);
34
- return [];
35
- }
36
- jsonText = jsonText.slice(startIdx, endIdx + 1);
37
- let parsed;
38
- try {
39
- parsed = JSON.parse(jsonText);
40
- }
41
- catch (error) {
42
- console.error(`[deskcheck] Warning: failed to parse executor JSON output: ${error instanceof Error ? error.message : String(error)}. Output: ${jsonText.slice(0, 200)}`);
43
- return [];
44
- }
45
- if (!Array.isArray(parsed)) {
46
- console.error(`[deskcheck] Warning: executor output parsed but was not an array. Type: ${typeof parsed}`);
47
- return [];
48
- }
49
- // Validate and normalize each finding
50
- const findings = [];
51
- for (const item of parsed) {
52
- if (typeof item !== "object" || item === null) {
53
- console.error(`[deskcheck] Warning: skipping invalid finding (not an object): ${JSON.stringify(item).slice(0, 100)}`);
54
- continue;
55
- }
56
- const record = item;
57
- const severity = String(record.severity ?? "info");
58
- if (!VALID_SEVERITIES.has(severity)) {
59
- console.error(`[deskcheck] Warning: skipping finding with invalid severity "${severity}"`);
60
- continue;
61
- }
62
- findings.push({
63
- severity: severity,
64
- file: String(record.file ?? ""),
65
- line: typeof record.line === "number" ? record.line : null,
66
- description: String(record.description ?? ""),
67
- suggestion: typeof record.suggestion === "string" ? record.suggestion : null,
68
- });
69
- }
70
- return findings;
71
- }
72
- /**
73
- * Build the merged MCP servers map for an executor agent.
74
- *
75
- * Combines shared MCP servers from config with any additional servers
76
- * defined for the executor role.
77
- */
78
- function buildMcpServers(config) {
79
- const servers = {};
80
- // Add shared servers
81
- for (const [name, serverConfig] of Object.entries(config.shared.mcp_servers)) {
82
- servers[name] = {
83
- type: "stdio",
84
- command: serverConfig.command,
85
- args: serverConfig.args,
86
- env: serverConfig.env,
87
- };
88
- }
89
- // Add executor-specific additional servers
90
- const executorServers = config.agents.executor.additional_mcp_servers;
91
- if (executorServers) {
92
- for (const [name, serverConfig] of Object.entries(executorServers)) {
93
- servers[name] = {
94
- type: "stdio",
95
- command: serverConfig.command,
96
- args: serverConfig.args,
97
- env: serverConfig.env,
98
- };
99
- }
100
- }
101
- return servers;
102
- }
103
- /**
104
- * Build the merged allowed tools list for an executor agent.
105
- *
106
- * Combines shared tools from config with any additional tools defined
107
- * for the executor role.
108
- */
109
- function buildAllowedTools(config) {
110
- const tools = [...config.shared.allowed_tools];
111
- const executorTools = config.agents.executor.additional_tools;
112
- if (executorTools) {
113
- for (const tool of executorTools) {
114
- if (!tools.includes(tool)) {
115
- tools.push(tool);
116
- }
117
- }
118
- }
119
- return tools;
120
- }
121
- // =============================================================================
122
- // ReviewOrchestrator
8
+ // ReviewOrchestratorService
123
9
  // =============================================================================
124
10
  /**
125
11
  * Executes a review plan by dispatching tasks to executor agents via the
@@ -128,12 +14,14 @@ function buildAllowedTools(config) {
128
14
  * Uses an async generator to yield progress events, allowing callers to
129
15
  * react to task starts, completions, errors, and overall progress in real time.
130
16
  */
131
- export class ReviewOrchestrator {
17
+ export class ReviewOrchestratorService {
132
18
  config;
133
19
  projectRoot;
20
+ executorService;
134
21
  constructor(config, projectRoot) {
135
22
  this.config = config;
136
23
  this.projectRoot = projectRoot;
24
+ this.executorService = new ExecutorService(config, projectRoot);
137
25
  }
138
26
  /**
139
27
  * Execute all pending tasks in a plan.
@@ -145,15 +33,13 @@ export class ReviewOrchestrator {
145
33
  async *execute(planId, options) {
146
34
  const maxConcurrent = options?.maxConcurrent ?? 5;
147
35
  const storageDir = path.resolve(this.projectRoot, this.config.storage_dir);
148
- const storage = new ReviewStorage(storageDir);
36
+ const storage = new ReviewStorageService(storageDir);
149
37
  const plan = storage.getPlan(planId);
150
38
  const pendingTasks = storage.getPendingTasks(planId);
151
39
  if (pendingTasks.length === 0) {
152
40
  yield { type: "complete", totalFindings: 0 };
153
41
  return;
154
42
  }
155
- const allowedTools = buildAllowedTools(this.config);
156
- const mcpServers = buildMcpServers(this.config);
157
43
  let completedCount = 0;
158
44
  let totalFindings = 0;
159
45
  const total = pendingTasks.length;
@@ -195,53 +81,11 @@ export class ReviewOrchestrator {
195
81
  const claimedTask = claimedPlan.tasks[task.task_id];
196
82
  // Build the executor prompt
197
83
  const executorPrompt = buildExecutorPrompt(claimedTask);
198
- // Spawn executor agent via Claude Agent SDK with a 5-minute timeout
199
- const abortController = new AbortController();
200
- const timeout = setTimeout(() => abortController.abort(), 5 * 60 * 1000);
201
- let resultText = "";
202
- try {
203
- for await (const message of query({
204
- prompt: executorPrompt,
205
- options: {
206
- model: modelId,
207
- tools: allowedTools,
208
- permissionMode: "dontAsk",
209
- maxTurns: 25,
210
- cwd: this.projectRoot,
211
- persistSession: false,
212
- abortController,
213
- ...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
214
- },
215
- })) {
216
- if (message.type === "result") {
217
- // Capture usage data from result (available on both success and error)
218
- const msg = message;
219
- const usage = msg.usage;
220
- taskUsage = {
221
- input_tokens: usage?.input_tokens ?? 0,
222
- output_tokens: usage?.output_tokens ?? 0,
223
- cache_read_tokens: usage?.cache_read_input_tokens ?? 0,
224
- cache_creation_tokens: usage?.cache_creation_input_tokens ?? 0,
225
- cost_usd: msg.total_cost_usd ?? 0,
226
- duration_ms: msg.duration_ms ?? 0,
227
- duration_api_ms: msg.duration_api_ms ?? 0,
228
- num_turns: msg.num_turns ?? 0,
229
- model: modelId,
230
- };
231
- if (message.subtype === "success") {
232
- resultText = message.result;
233
- }
234
- else {
235
- throw new Error(`Executor failed: ${message.errors.join(", ")}`);
236
- }
237
- }
238
- }
239
- }
240
- finally {
241
- clearTimeout(timeout);
242
- }
84
+ // Spawn executor agent via ExecutorService
85
+ const result = await this.executorService.execute(executorPrompt, modelId);
86
+ taskUsage = result.usage;
243
87
  // Parse findings from executor output
244
- const findings = parseFindings(resultText);
88
+ const findings = parseFindings(result.resultText);
245
89
  // Complete the task in storage
246
90
  storage.completeTask(planId, task.task_id, findings, taskUsage);
247
91
  completedCount++;
@@ -340,4 +184,4 @@ export class ReviewOrchestrator {
340
184
  yield { type: "complete", totalFindings };
341
185
  }
342
186
  }
343
- //# sourceMappingURL=orchestrator.js.map
187
+ //# sourceMappingURL=ReviewOrchestratorService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewOrchestratorService.js","sourceRoot":"","sources":["../../../src/services/review/ReviewOrchestratorService.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { ReviewStorage } from "./storage.js";
2
- import type { ReviewModule, ReviewPlan, ReviewSource } from "./types.js";
1
+ import { ReviewStorageService } from "./ReviewStorageService.js";
2
+ import type { ReviewModule } from "../../types/criteria.js";
3
+ import type { ReviewPlan, ReviewSource } from "../../types/review.js";
3
4
  /**
4
5
  * Build a complete review plan: create the plan, match files to modules,
5
6
  * generate tasks, and finalize.
@@ -8,5 +9,5 @@ import type { ReviewModule, ReviewPlan, ReviewSource } from "./types.js";
8
9
  * shared by both the planner agent's in-process MCP tool and any other
9
10
  * entry point that needs to create a plan from a file list.
10
11
  */
11
- export declare function buildPlanWithTasks(storage: ReviewStorage, name: string, source: ReviewSource, files: string[], modules: ReviewModule[]): ReviewPlan;
12
- //# sourceMappingURL=plan-builder.d.ts.map
12
+ export declare function buildPlanWithTasks(storage: ReviewStorageService, name: string, source: ReviewSource, files: string[], modules: ReviewModule[]): ReviewPlan;
13
+ //# sourceMappingURL=ReviewPlanBuilderService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewPlanBuilderService.d.ts","sourceRoot":"","sources":["../../../src/services/review/ReviewPlanBuilderService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAEV,UAAU,EACV,YAAY,EACb,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,YAAY,EAAE,GACtB,UAAU,CA6DZ"}
@@ -1,4 +1,4 @@
1
- import { findMatchingModules } from "./glob-matcher.js";
1
+ import { findMatchingModules } from "../criteria/glob-matcher.js";
2
2
  /**
3
3
  * Build a complete review plan: create the plan, match files to modules,
4
4
  * generate tasks, and finalize.
@@ -63,4 +63,4 @@ export function buildPlanWithTasks(storage, name, source, files, modules) {
63
63
  // Finalize the plan (sets status to "ready", recounts tasks per module)
64
64
  return storage.finalizePlan(plan.plan_id);
65
65
  }
66
- //# sourceMappingURL=plan-builder.js.map
66
+ //# sourceMappingURL=ReviewPlanBuilderService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewPlanBuilderService.js","sourceRoot":"","sources":["../../../src/services/review/ReviewPlanBuilderService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { ReviewConfig, ReviewPlan } from "../core/types.js";
1
+ import type { ReviewConfig } from "../../config/types.js";
2
+ import type { ReviewPlan } from "../../types/review.js";
2
3
  /**
3
4
  * Plans review tasks by delegating intent detection to an Agent SDK agent.
4
5
  *
@@ -7,7 +8,7 @@ import type { ReviewConfig, ReviewPlan } from "../core/types.js";
7
8
  * tools. The agent interprets what the user wants to review and creates the
8
9
  * plan accordingly.
9
10
  */
10
- export declare class ReviewPlanner {
11
+ export declare class ReviewPlannerService {
11
12
  private readonly config;
12
13
  private readonly projectRoot;
13
14
  constructor(config: ReviewConfig, projectRoot: string);
@@ -23,6 +24,6 @@ export declare class ReviewPlanner {
23
24
  * for creating plans and tasks, plus standard git/read tools for
24
25
  * discovering what to review.
25
26
  */
26
- plan(input: string): Promise<ReviewPlan>;
27
+ plan(input: string, criteriaFilter?: string[]): Promise<ReviewPlan>;
27
28
  }
28
- //# sourceMappingURL=planner.d.ts.map
29
+ //# sourceMappingURL=ReviewPlannerService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewPlannerService.d.ts","sourceRoot":"","sources":["../../../src/services/review/ReviewPlannerService.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKrD;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAwG1E"}
@@ -2,9 +2,10 @@ import path from "node:path";
2
2
  import { query } from "@anthropic-ai/claude-agent-sdk";
3
3
  import { z } from "zod";
4
4
  import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk";
5
- import { discoverModules } from "../core/module-parser.js";
6
- import { buildPlanWithTasks } from "../core/plan-builder.js";
7
- import { ReviewStorage } from "../core/storage.js";
5
+ import { discoverModules, filterModules } from "../criteria/module-parser.js";
6
+ import { buildPlanWithTasks } from "./ReviewPlanBuilderService.js";
7
+ import { ReviewStorageService } from "./ReviewStorageService.js";
8
+ import { buildPlannerPrompt } from "../../prompts/PlannerPrompt.js";
8
9
  /**
9
10
  * Plans review tasks by delegating intent detection to an Agent SDK agent.
10
11
  *
@@ -13,7 +14,7 @@ import { ReviewStorage } from "../core/storage.js";
13
14
  * tools. The agent interprets what the user wants to review and creates the
14
15
  * plan accordingly.
15
16
  */
16
- export class ReviewPlanner {
17
+ export class ReviewPlannerService {
17
18
  config;
18
19
  projectRoot;
19
20
  constructor(config, projectRoot) {
@@ -32,11 +33,14 @@ export class ReviewPlanner {
32
33
  * for creating plans and tasks, plus standard git/read tools for
33
34
  * discovering what to review.
34
35
  */
35
- async plan(input) {
36
+ async plan(input, criteriaFilter) {
36
37
  const storageDir = path.resolve(this.projectRoot, this.config.storage_dir);
37
- const storage = new ReviewStorage(storageDir);
38
+ const storage = new ReviewStorageService(storageDir);
38
39
  const modulesDir = path.resolve(this.projectRoot, this.config.modules_dir);
39
- const modules = discoverModules(modulesDir);
40
+ let modules = discoverModules(modulesDir);
41
+ if (criteriaFilter && criteriaFilter.length > 0) {
42
+ modules = filterModules(modules, criteriaFilter);
43
+ }
40
44
  // Build the module summary for the agent's context
41
45
  const moduleDescriptions = modules.map((m) => `- ${m.id} (severity: ${m.severity}, model: ${m.model})\n Globs: ${m.globs.join(", ")}\n Mode: ${m.mode}`).join("\n");
42
46
  // Track the plan ID created by the agent
@@ -74,27 +78,7 @@ export class ReviewPlanner {
74
78
  // Build planner model — use short names (haiku/sonnet/opus)
75
79
  // The Agent SDK resolves these to full model IDs internally
76
80
  const plannerModel = this.config.agents.planner.model ?? "haiku";
77
- const systemPrompt = `You are a deskcheck planner. The user will tell you what they want to check. Your job is to figure out which files are involved and call the create_plan tool.
78
-
79
- ## Available Criteria
80
-
81
- ${moduleDescriptions}
82
-
83
- ## How to Determine Files
84
-
85
- - If the user mentions a **directory** (e.g., "everything in app/Services/"): use Bash to list all files recursively: \`find <path> -type f -name "*.php" -o -name "*.ts" -o -name "*.vue"\` or similar. Then pass ALL those file paths to create_plan.
86
- - If the user mentions a **branch** or "changes" or "diff": run \`git diff <branch> --name-only\` to get changed files.
87
- - If the user mentions a **specific file**: use that file path directly.
88
- - If the user mentions a **function/method name** and a file: use the file path, set source_type to "symbol".
89
- - If the user is vague: use Bash to explore the filesystem and figure out what files are relevant.
90
-
91
- ## What to Do
92
-
93
- 1. Figure out which files to check (use Bash to run commands like find, ls, git diff)
94
- 2. Call the create_plan tool with the file list and appropriate source type (use "file" for directory/file reviews, "diff" for branch comparisons)
95
- 3. Report what you created
96
-
97
- You MUST call the create_plan tool. Do NOT review code yourself. Your only job is to determine the file list and call create_plan.`;
81
+ const systemPrompt = buildPlannerPrompt(moduleDescriptions);
98
82
  // Spawn the planner agent with a 5-minute timeout
99
83
  const abortController = new AbortController();
100
84
  const timeout = setTimeout(() => abortController.abort(), 5 * 60 * 1000);
@@ -135,4 +119,4 @@ You MUST call the create_plan tool. Do NOT review code yourself. Your only job i
135
119
  return storage.getPlan(createdPlanId);
136
120
  }
137
121
  }
138
- //# sourceMappingURL=planner.js.map
122
+ //# sourceMappingURL=ReviewPlannerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewPlannerService.js","sourceRoot":"","sources":["../../../src/services/review/ReviewPlannerService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ContextType, Finding, ModuleSummary, ReviewPlan, ReviewResults, ReviewSource, ReviewTask, TaskUsage } from "./types.js";
1
+ import type { ContextType, Finding, ModuleSummary, ReviewPlan, ReviewResults, ReviewSource, ReviewTask, TaskUsage } from "../../types/review.js";
2
2
  /**
3
3
  * Manages the two-file storage format (plan.json + results.json) for deskcheck runs.
4
4
  *
@@ -6,7 +6,7 @@ import type { ContextType, Finding, ModuleSummary, ReviewPlan, ReviewResults, Re
6
6
  * directory. The plan file tracks tasks and coverage; the results file tracks
7
7
  * findings and aggregations.
8
8
  */
9
- export declare class ReviewStorage {
9
+ export declare class ReviewStorageService {
10
10
  private readonly storageDir;
11
11
  /** Tracks active lock file paths so they can be cleaned up on process exit. */
12
12
  private static activeLocks;
@@ -115,4 +115,4 @@ export declare class ReviewStorage {
115
115
  */
116
116
  private recomputeAggregations;
117
117
  }
118
- //# sourceMappingURL=storage.d.ts.map
118
+ //# sourceMappingURL=ReviewStorageService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewStorageService.d.ts","sourceRoot":"","sources":["../../../src/services/review/ReviewStorageService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EAGP,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EAEV,SAAS,EAEV,MAAM,uBAAuB,CAAC;AAsC/B;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,WAAW,CAAqB;gBAanC,UAAU,EAAE,MAAM;IAI9B;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ;IAoDhB,yCAAyC;IACzC,OAAO,CAAC,OAAO;IAQf;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,UAAU;IA0B1D,8CAA8C;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAMnC;;;OAGG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAsBhC,0CAA0C;IAC1C,SAAS,IAAI,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAqCF;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAsBxC;;;;;;OAMG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,CACR,UAAU,EACR,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,SAAS,GACT,cAAc,GACd,QAAQ,GACR,QAAQ,CACX,GACA,UAAU;IAkCb;;;;;OAKG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,WAAW,EAAE,WAAW,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,UAAU;IA6Bb;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAkB7C;;;;;;OAMG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,GACvB,IAAI;IAiDP;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IA8C/F,iDAAiD;IACjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAgBzC,4DAA4D;IAC5D,eAAe,CACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI;IASP,gDAAgD;IAChD,UAAU,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACrC,IAAI;IAYP,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;CAkH9B"}
@@ -24,7 +24,7 @@ const LOCK_MAX_WAIT_MS = 10_000;
24
24
  /** Spin delay between lock checks (milliseconds). */
25
25
  const LOCK_SPIN_MS = 50;
26
26
  // =============================================================================
27
- // ReviewStorage
27
+ // ReviewStorageService
28
28
  // =============================================================================
29
29
  /**
30
30
  * Manages the two-file storage format (plan.json + results.json) for deskcheck runs.
@@ -33,13 +33,13 @@ const LOCK_SPIN_MS = 50;
33
33
  * directory. The plan file tracks tasks and coverage; the results file tracks
34
34
  * findings and aggregations.
35
35
  */
36
- export class ReviewStorage {
36
+ export class ReviewStorageService {
37
37
  storageDir;
38
38
  /** Tracks active lock file paths so they can be cleaned up on process exit. */
39
39
  static activeLocks = new Set();
40
40
  static {
41
41
  const cleanup = () => {
42
- for (const lockPath of ReviewStorage.activeLocks) {
42
+ for (const lockPath of ReviewStorageService.activeLocks) {
43
43
  try {
44
44
  fs.unlinkSync(lockPath);
45
45
  }
@@ -105,12 +105,12 @@ export class ReviewStorage {
105
105
  throw err; // Unexpected error
106
106
  }
107
107
  }
108
- ReviewStorage.activeLocks.add(lockPath);
108
+ ReviewStorageService.activeLocks.add(lockPath);
109
109
  try {
110
110
  return fn();
111
111
  }
112
112
  finally {
113
- ReviewStorage.activeLocks.delete(lockPath);
113
+ ReviewStorageService.activeLocks.delete(lockPath);
114
114
  try {
115
115
  fs.unlinkSync(lockPath);
116
116
  }
@@ -587,4 +587,4 @@ export class ReviewStorage {
587
587
  results.total_usage = totalUsage;
588
588
  }
589
589
  }
590
- //# sourceMappingURL=storage.js.map
590
+ //# sourceMappingURL=ReviewStorageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewStorageService.js","sourceRoot":"","sources":["../../../src/services/review/ReviewStorageService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,gFAAgF;AAChF,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,CACL,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;QAC5E,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAChF,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,qCAAqC;AACrC,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,qDAAqD;AACrD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACd,UAAU,CAAS;IAEpC,+EAA+E;IACvE,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/C;QACE,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CAAC,WAAW,EAAE,CAAC;gBACxD,IAAI,CAAC;oBAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;;;;OAQG;IACK,QAAQ,CAAI,MAAc,EAAE,EAAW;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,6CAA6C;QAC7C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,EAAE,CAAC,aAAa,CACd,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAC3D,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;gBACF,MAAM,CAAC,gBAAgB;YACzB,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,uDAAuD;gBACvD,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrD,iDAAiD;oBACjD,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;wBAChE,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,GAAG,gBAAgB,EAAE,CAAC;4BACjG,sCAAsC;4BACtC,IAAI,CAAC;gCAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;4BAAC,CAAC;4BAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;4BACvD,SAAS;wBACX,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,gDAAgD;wBAChD,IAAI,CAAC;4BAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;wBACvD,SAAS;oBACX,CAAC;oBAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,gBAAgB,EAAE,CAAC;wBAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,gBAAgB,QAAQ,EAAE,CAAC,CAAC;oBACrF,CAAC;oBAED,0DAA0D;oBAC1D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC,CAAC,mBAAmB;YAChC,CAAC;QACH,CAAC;QAED,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC;gBAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,yCAAyC;IACjC,OAAO,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;;;OAKG;IACH,UAAU,CAAC,IAAY,EAAE,MAAoB;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEnD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAe;YACvB,OAAO,EAAE,MAAM;YACf,IAAI;YACJ,MAAM;YACN,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE;YAC7B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,MAAc;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,OAAO;aACrB,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,WAAW,EAAE;YACnB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CACrE;aACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,EAAE,CAAC;QAEV,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,0CAA0C;IAC1C,SAAS;QAMP,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAKP,EAAE,CAAC;QAER,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YAEnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,IAAI,CAAC,UAAU,EACf,KAAK,CAAC,IAAI,EACV,WAAW,CACZ,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAE3C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;YAE3C,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE7C,2BAA2B;YAC3B,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS,CACrD,CAAC,MAAM,CAAC;YACX,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;;;;OAMG;IACH,OAAO,CACL,MAAc,EACd,IAWC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAElC,8DAA8D;YAC9D,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1D,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAC5B,CAAC,MAAM,CAAC;YACT,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;YAE1D,MAAM,OAAO,GAAe;gBAC1B,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC9B,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;aACb,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,SAAS,CACP,MAAc,EACd,MAAc,EACd,OAKC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CACb,SAAS,MAAM,wBAAwB,MAAM,GAAG,CACjD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAE7B,wCAAwC;YACxC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAClC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1D,OAAO,OAAO,GAAG,kBAAkB,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E;;;;;;OAMG;IACH,YAAY,CACV,MAAc,EACd,MAAc,EACd,QAAmB,EACnB,KAAwB;QAExB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAErC,+BAA+B;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CACb,SAAS,MAAM,wBAAwB,MAAM,GAAG,CACjD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YAExB,wEAAwE;YACxE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CACvD,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAE7B,kCAAkC;YAClC,MAAM,UAAU,GAAe;gBAC7B,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,GAAG;gBACjB,QAAQ;gBACR,KAAK,EAAE,KAAK,IAAI,IAAI;aACrB,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;YAE1C,0CAA0C;YAC1C,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE1C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,YAAoB,EAAE,KAAwB;QACtF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,wBAAwB,MAAM,GAAG,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YAExB,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CACvD,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAE7B,kFAAkF;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAEjD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,UAAU,GAAe;oBAC7B,OAAO,EAAE,MAAM;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,YAAY,EAAE,GAAG;oBACjB,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE,KAAK,IAAI,IAAI;iBACrB,CAAC;gBACF,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;YAC5C,CAAC;YAED,gEAAgE;YAChE,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,UAAU,CAAC,MAAc;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,qDAAqD;YACrD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAED,8EAA8E;IAC9E,WAAW;IACX,8EAA8E;IAE9E,4DAA4D;IAC5D,eAAe,CACb,MAAc,EACd,OAAiB,EACjB,SAAmB;QAEnB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,UAAU,CACR,MAAc,EACd,OAAsC;QAEtC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAEtE,QAAQ,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAEO,SAAS,CAAC,MAAc,EAAE,IAAgB;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;QAC5B,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,OAAsB;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;QAC5B,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/D,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACvC,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,UAAU,EAAE;gBACV,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;aACX;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,CAAC;aACR;YACD,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,WAAW,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,qBAAqB,EAAE,CAAC;gBACxB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,CAAC;gBACd,eAAe,EAAE,CAAC;gBAClB,SAAS,EAAE,CAAC;aACb;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,MAAc;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAC3B,OAAsB,EACtB,IAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;QAEzB,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,UAAU,GAAG;YACnB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YAC9D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YAC3D,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM;YACnE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;SAC1D,CAAC;QAEF,+CAA+C;QAC/C,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAE/D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAE1B,sDAAsD;QACtD,MAAM,MAAM,GAAkC,EAAE,CAAC;QAEjD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1C,MAAM,WAAW,GAAgB;oBAC/B,GAAG,OAAO;oBACV,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC5B,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5B,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;QAEzB,oDAAoD;QACpD,MAAM,QAAQ,GAAmC,EAAE,CAAC;QAEpD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;YAEtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,wCAAwC;gBACxC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC7C,QAAQ,CAAC,QAAQ,CAAC,GAAG;oBACnB,SAAS,EAAE,QAAQ;oBACnB,WAAW,EAAE,aAAa,EAAE,WAAW,IAAI,EAAE;oBAC7C,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,QAAQ;oBAC7C,UAAU,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC;oBAC1C,SAAS,EAAE,CAAC;oBACZ,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;oBACtD,QAAQ,EAAE,EAAE;iBACb,CAAC;YACJ,CAAC;YAED,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1C,cAAc,CAAC,SAAS,EAAE,CAAC;YAE3B,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1C,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE7B,mBAAmB;QACnB,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QAChF,OAAO,CAAC,MAAM;YACZ,aAAa,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK;gBACxC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS,CAAC;QAEhB,wBAAwB;QACxB,MAAM,UAAU,GAAe;YAC7B,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,CAAC;YACpB,qBAAqB,EAAE,CAAC;YACxB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;SACb,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;gBACzD,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC3D,UAAU,CAAC,iBAAiB,IAAI,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBACnE,UAAU,CAAC,qBAAqB,IAAI,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC;gBAC3E,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACjD,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;gBACvD,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC/D,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC;IACnC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ReviewConfig } from "../../config/types.js";
2
+ import type { ReviewModule } from "../../types/criteria.js";
3
+ import type { Finding, TaskUsage } from "../../types/review.js";
4
+ import type { JudgeResult } from "../../types/testing.js";
5
+ /**
6
+ * Spawns a judge agent to evaluate executor findings against expected results.
7
+ *
8
+ * The judge is a pure reasoning agent (no tools, single turn) that compares
9
+ * findings to expectations and produces structured verdicts. Model is
10
+ * configurable via config.agents.judge.model (default: opus).
11
+ */
12
+ export declare class JudgeService {
13
+ private readonly executorService;
14
+ private readonly judgeModel;
15
+ constructor(config: ReviewConfig, projectRoot: string);
16
+ /**
17
+ * Evaluate executor findings against expected results for a criterion.
18
+ *
19
+ * @param criterion - The criterion that was tested.
20
+ * @param expectedContent - Content of expected.md describing what should be found.
21
+ * @param findings - Findings produced by the executor agent.
22
+ * @param fixtureContent - Content of the fixture file that was reviewed.
23
+ * @returns Judge result with finding and expectation reviews, plus usage data.
24
+ */
25
+ evaluate(criterion: ReviewModule, expectedContent: string, findings: Finding[], fixtureContent: string): Promise<{
26
+ result: JudgeResult;
27
+ usage: TaskUsage | null;
28
+ }>;
29
+ }
30
+ //# sourceMappingURL=JudgeService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JudgeService.d.ts","sourceRoot":"","sources":["../../../src/services/testing/JudgeService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKrD;;;;;;;;OAQG;IACG,QAAQ,CACZ,SAAS,EAAE,YAAY,EACvB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;KAAE,CAAC;CAkB7D"}