@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
package/README.md CHANGED
@@ -101,13 +101,15 @@ Results are grouped by file, criterion, and severity. You can browse them in the
101
101
  Deterministic review of git changes. No LLM planner — passes args directly to `git diff`.
102
102
 
103
103
  ```bash
104
- deskcheck diff main # Changes vs main
105
- deskcheck diff --staged # Staged changes only
106
- deskcheck diff HEAD~3 # Last 3 commits
107
- deskcheck diff main -- src/services/ # Scoped to a directory
108
- deskcheck diff main --dry-run # Preview plan without executing
109
- deskcheck diff main --fail-on=critical # Exit 1 if critical findings (for CI)
110
- deskcheck diff main --format=markdown # Markdown output (for PR comments)
104
+ deskcheck diff main # Changes vs main
105
+ deskcheck diff --staged # Staged changes only
106
+ deskcheck diff HEAD~3 # Last 3 commits
107
+ deskcheck diff main -- src/services/ # Scoped to a directory
108
+ deskcheck diff main --dry-run # Preview plan without executing
109
+ deskcheck diff main --fail-on=critical # Exit 1 if critical findings (for CI)
110
+ deskcheck diff main --format=markdown # Markdown output (for PR comments)
111
+ deskcheck diff main --criteria=dto-enforcement # Only run one criterion
112
+ deskcheck diff main --criteria=security,naming # Only run specific criteria
111
113
  ```
112
114
 
113
115
  ### `deskcheck "<prompt>"`
@@ -148,6 +150,24 @@ Live terminal tree view of a run in progress.
148
150
 
149
151
  List all runs with status and finding counts.
150
152
 
153
+ ### `deskcheck test [criterion-name]`
154
+
155
+ Run criteria against test fixtures to verify they produce correct findings.
156
+
157
+ ```bash
158
+ deskcheck test # Run all criterion tests
159
+ deskcheck test controller-conventions # Run tests for one criterion
160
+ deskcheck test --criteria=dto-enforcement,naming # Run tests for specific criteria
161
+ ```
162
+
163
+ Test fixtures live in `deskcheck/tests/` mirroring the criteria directory structure. Each test case has a fixture file (code to review) and an `expected.md` (what should be found). An LLM judge compares actual findings against expectations and produces scores:
164
+
165
+ - **Recall** — Were expected violations found?
166
+ - **Precision** — Were all findings legitimate?
167
+ - **Scope compliance** — Did every finding come from the criterion's checklist?
168
+
169
+ Results are persisted in `.deskcheck/test-runs/` for inspection.
170
+
151
171
  ### `deskcheck init`
152
172
 
153
173
  Scaffold config and criteria directory for a new project.
@@ -180,11 +200,15 @@ The dashboard uses SSE for live updates — watch tasks complete in real time du
180
200
 
181
201
  ### Choosing the Right Model
182
202
 
203
+ **The model is the most important decision in a criterion.** Wrong model choice produces either false positives (freelancing) or false negatives (overcorrection).
204
+
183
205
  | Use Case | Model | Why |
184
206
  |----------|-------|-----|
185
- | Simple patterns (naming, imports, console.log) | `haiku` | Fast and cheap |
186
- | Architectural judgment (separation of concerns, DTOs) | `sonnet` | Good reasoning at moderate cost |
187
- | Security analysis, complex data flow | `opus` | Deep analysis for high-stakes checks |
207
+ | Purely mechanical pattern matching ("does X exist?") | `haiku` | Fast and cheap — but can't handle exclusion rules |
208
+ | **Most criteria** judgment required, has "What NOT to Check" | **`sonnet`** | **Use this by default.** Good reasoning, follows complex instructions |
209
+ | Complex multi-step reasoning, cross-file analysis | `opus` | Deep analysis for architectural assessment |
210
+
211
+ **If your criterion has a "What NOT to Check" section, do NOT use haiku.** In testing, haiku with exclusion rules either freelanced wildly (8/9 false positives) or overcorrected to zero findings. Sonnet produced 15/15 legitimate findings on the same criterion.
188
212
 
189
213
  ### The Detective Prompt
190
214
 
@@ -209,6 +233,7 @@ Configuration lives in `.deskcheck/config.json` (created by `deskcheck init`):
209
233
  {
210
234
  "modules_dir": "deskcheck/criteria",
211
235
  "storage_dir": ".deskcheck/runs",
236
+ "tests_dir": "deskcheck/tests",
212
237
  "shared": {
213
238
  "allowed_tools": ["Read", "Glob", "Grep"],
214
239
  "mcp_servers": {}
@@ -216,12 +241,14 @@ Configuration lives in `.deskcheck/config.json` (created by `deskcheck init`):
216
241
  "agents": {
217
242
  "planner": { "model": "haiku" },
218
243
  "executor": {},
219
- "evaluator": { "model": "haiku" }
244
+ "evaluator": { "model": "haiku" },
245
+ "judge": { "model": "opus" }
220
246
  }
221
247
  }
222
248
  ```
223
249
 
224
- The executor **model** comes from each criterion's `model` field, not from config. This lets cheap checks use `haiku` and important checks use `sonnet`.
250
+ - The **executor model** comes from each criterion's `model` field, not from config. This lets cheap checks use `haiku` and important checks use `sonnet`.
251
+ - The **judge model** (used by `deskcheck test`) defaults to `opus` for accurate evaluation of findings against expectations.
225
252
 
226
253
  ## CI Integration
227
254
 
@@ -257,6 +284,34 @@ Deskcheck can run as an MCP server for Claude Code integration:
257
284
 
258
285
  Every run tracks token usage and cost per task. The web dashboard shows totals (cost, input/output tokens) and per-task breakdowns, so you can see exactly how much each review costs and which criteria are most expensive.
259
286
 
287
+ ## Development
288
+
289
+ The fastest way to get started is with the included **Dev Container** (VS Code + Docker):
290
+
291
+ 1. Open the repo in VS Code
292
+ 2. When prompted, click **"Reopen in Container"** (or run `Dev Containers: Reopen in Container` from the command palette)
293
+ 3. Press **Ctrl+Shift+B** to launch the dev environment
294
+
295
+ This starts three processes in a single terminal group:
296
+ - **Backend server** on port 3000 (builds TypeScript, then runs `deskcheck serve`)
297
+ - **TypeScript watch** (`tsc --watch` for backend changes)
298
+ - **Vite dev server** on port 5173 (Vue UI with hot reload)
299
+
300
+ Open `http://localhost:5173` for UI development — API requests are proxied to the backend automatically.
301
+
302
+ ### Without Dev Container
303
+
304
+ ```bash
305
+ # Terminal 1: backend
306
+ npm run build && node build/cli.js serve
307
+
308
+ # Terminal 2: TypeScript watch
309
+ npm run dev
310
+
311
+ # Terminal 3: UI with hot reload
312
+ cd ui && npm install && npm run dev
313
+ ```
314
+
260
315
  ## Disclaimer
261
316
 
262
317
  This tool was vibe-coded in a single day using [Claude Code](https://claude.ai/claude-code). The architecture, implementation, web UI, and even this README were built through conversation with Claude Opus 4.6. It works, we use it, but it hasn't been battle-tested at scale. Expect rough edges. Contributions welcome.
package/build/cli.js CHANGED
@@ -3,17 +3,20 @@ import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { execFileSync } from "node:child_process";
5
5
  import { Command } from "commander";
6
- import { loadConfig, DEFAULT_CONFIG } from "./core/config.js";
7
- import { ReviewStorage } from "./core/storage.js";
8
- import { discoverModules } from "./core/module-parser.js";
9
- import { buildPlanWithTasks } from "./core/plan-builder.js";
10
- import { ReviewPlanner } from "./agents/planner.js";
11
- import { ReviewOrchestrator } from "./agents/orchestrator.js";
12
- import { renderTerminal } from "./renderers/terminal.js";
13
- import { renderMarkdown } from "./renderers/markdown.js";
14
- import { renderJson } from "./renderers/json.js";
15
- import { renderWatch } from "./renderers/watch.js";
16
- import { startServer } from "./serve.js";
6
+ import { loadConfig, DEFAULT_CONFIG } from "./config/loader.js";
7
+ import { ReviewStorageService } from "./services/review/ReviewStorageService.js";
8
+ import { discoverModules, filterModules } from "./services/criteria/module-parser.js";
9
+ import { buildPlanWithTasks } from "./services/review/ReviewPlanBuilderService.js";
10
+ import { ReviewPlannerService } from "./services/review/ReviewPlannerService.js";
11
+ import { ReviewOrchestratorService } from "./services/review/ReviewOrchestratorService.js";
12
+ import { renderTerminal } from "./renderers/review/TerminalRenderer.js";
13
+ import { renderMarkdown } from "./renderers/review/MarkdownRenderer.js";
14
+ import { renderJson } from "./renderers/review/JsonRenderer.js";
15
+ import { renderWatch } from "./renderers/review/WatchRenderer.js";
16
+ import { startServer } from "./server/server.js";
17
+ import { discoverTests } from "./services/testing/TestDiscoveryService.js";
18
+ import { TestRunnerService } from "./services/testing/TestRunnerService.js";
19
+ import { renderTestResults } from "./renderers/test/TerminalRenderer.js";
17
20
  // =============================================================================
18
21
  // ANSI helpers
19
22
  // =============================================================================
@@ -160,7 +163,7 @@ function initCommand() {
160
163
  function listCommand() {
161
164
  const projectRoot = resolveProjectRoot();
162
165
  const config = loadConfig(projectRoot);
163
- const storage = new ReviewStorage(path.join(projectRoot, config.storage_dir));
166
+ const storage = new ReviewStorageService(path.join(projectRoot, config.storage_dir));
164
167
  const plans = storage.listPlans();
165
168
  if (plans.length === 0) {
166
169
  console.log("No deskcheck runs found.");
@@ -185,7 +188,7 @@ function listCommand() {
185
188
  function showCommand(id, options) {
186
189
  const projectRoot = resolveProjectRoot();
187
190
  const config = loadConfig(projectRoot);
188
- const storage = new ReviewStorage(path.join(projectRoot, config.storage_dir));
191
+ const storage = new ReviewStorageService(path.join(projectRoot, config.storage_dir));
189
192
  const planId = id ?? storage.getLatestPlanId();
190
193
  if (!planId) {
191
194
  console.error("No deskcheck runs found.");
@@ -215,7 +218,7 @@ async function diffCommand(gitArgs, options) {
215
218
  const projectRoot = resolveProjectRoot();
216
219
  const config = loadConfig(projectRoot);
217
220
  const storageDir = path.join(projectRoot, config.storage_dir);
218
- const storage = new ReviewStorage(storageDir);
221
+ const storage = new ReviewStorageService(storageDir);
219
222
  // Get changed files via git diff
220
223
  // Insert --name-only right after "diff" so it comes before any -- path separators
221
224
  const gitDiffArgs = ["diff", "--name-only", ...gitArgs];
@@ -237,9 +240,13 @@ async function diffCommand(gitArgs, options) {
237
240
  console.log("No changed files found.");
238
241
  process.exit(0);
239
242
  }
240
- // Discover modules and build plan
243
+ // Discover modules and optionally filter by --criteria
241
244
  const modulesDir = path.resolve(projectRoot, config.modules_dir);
242
- const modules = discoverModules(modulesDir);
245
+ let modules = discoverModules(modulesDir);
246
+ if (options.criteria) {
247
+ const patterns = options.criteria.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
248
+ modules = filterModules(modules, patterns);
249
+ }
243
250
  // Build a human-readable name from git args
244
251
  const diffTarget = gitArgs.filter((a) => !a.startsWith("--")).join(" ") || "working tree";
245
252
  const planName = `diff: ${diffTarget}`;
@@ -257,7 +264,7 @@ async function diffCommand(gitArgs, options) {
257
264
  process.exit(0);
258
265
  }
259
266
  // Execute
260
- const orchestrator = new ReviewOrchestrator(config, projectRoot);
267
+ const orchestrator = new ReviewOrchestratorService(config, projectRoot);
261
268
  await executeAndPrint(orchestrator, plan.plan_id);
262
269
  // Render results
263
270
  const finalPlan = storage.getPlan(plan.plan_id);
@@ -271,14 +278,17 @@ async function deskchecCommand(prompt, options) {
271
278
  const config = loadConfig(projectRoot);
272
279
  const storageDir = path.join(projectRoot, config.storage_dir);
273
280
  console.log(`${DIM}Planning...${RESET}`);
274
- const planner = new ReviewPlanner(config, projectRoot);
275
- const plan = await planner.plan(prompt);
281
+ const criteriaFilter = options.criteria
282
+ ? options.criteria.split(",").map((s) => s.trim()).filter((s) => s.length > 0)
283
+ : undefined;
284
+ const planner = new ReviewPlannerService(config, projectRoot);
285
+ const plan = await planner.plan(prompt, criteriaFilter);
276
286
  printPlanSummary(plan);
277
287
  // Execute
278
- const orchestrator = new ReviewOrchestrator(config, projectRoot);
288
+ const orchestrator = new ReviewOrchestratorService(config, projectRoot);
279
289
  await executeAndPrint(orchestrator, plan.plan_id);
280
290
  // Render results
281
- const storage = new ReviewStorage(storageDir);
291
+ const storage = new ReviewStorageService(storageDir);
282
292
  const finalPlan = storage.getPlan(plan.plan_id);
283
293
  const results = storage.getResults(plan.plan_id);
284
294
  console.log(renderTerminal(results, finalPlan));
@@ -288,7 +298,7 @@ async function deskchecCommand(prompt, options) {
288
298
  async function watchCommand(planId) {
289
299
  const projectRoot = resolveProjectRoot();
290
300
  const config = loadConfig(projectRoot);
291
- const storage = new ReviewStorage(path.join(projectRoot, config.storage_dir));
301
+ const storage = new ReviewStorageService(path.join(projectRoot, config.storage_dir));
292
302
  const resolvedId = planId ?? storage.getLatestPlanId();
293
303
  if (!resolvedId) {
294
304
  console.error("No deskcheck runs found. Start a deskcheck first.");
@@ -335,6 +345,59 @@ async function watchCommand(planId) {
335
345
  process.exit(0);
336
346
  });
337
347
  }
348
+ /** `deskcheck test [criterion-name]` */
349
+ async function testCommand(criterionName, options) {
350
+ const projectRoot = resolveProjectRoot();
351
+ const config = loadConfig(projectRoot);
352
+ const testsDir = path.resolve(projectRoot, config.tests_dir);
353
+ const criteriaDir = path.resolve(projectRoot, config.modules_dir);
354
+ const storageDir = path.join(projectRoot, config.storage_dir, "../test-runs");
355
+ // Parse criteria filter from positional argument or --criteria option
356
+ let criteriaFilter;
357
+ if (criterionName) {
358
+ criteriaFilter = [criterionName];
359
+ }
360
+ else if (options.criteria) {
361
+ criteriaFilter = options.criteria.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
362
+ }
363
+ // Discover test cases
364
+ const testCases = discoverTests(testsDir, criteriaDir, criteriaFilter);
365
+ if (testCases.length === 0) {
366
+ console.log("No test cases found.");
367
+ return;
368
+ }
369
+ // Count unique criteria
370
+ const uniqueCriteria = new Set(testCases.map((tc) => tc.criterionId));
371
+ console.log("");
372
+ console.log(`${DIM} Discovered ${testCases.length} test case${testCases.length !== 1 ? "s" : ""} for ${uniqueCriteria.size} criteria${RESET}`);
373
+ console.log("");
374
+ // Run tests with progress callback
375
+ const runner = new TestRunnerService(config, projectRoot);
376
+ let completed = 0;
377
+ const run = await runner.run(testCases, storageDir, {
378
+ onTestComplete: (criterionId, testName, result) => {
379
+ completed++;
380
+ const isComplete = result.status === "complete";
381
+ const isError = result.status === "error";
382
+ if (isError) {
383
+ console.log(`${RED} \u2717 ${criterionId}/${testName}${RESET} ${DIM}(error)${RESET}`);
384
+ }
385
+ else if (isComplete && result.scores) {
386
+ const passing = result.scores.recall >= 0.8 && result.scores.precision >= 0.8 && result.scores.scope_compliance >= 0.8;
387
+ const icon = passing ? `${GREEN}\u2713` : `${YELLOW}\u25B2`;
388
+ const recall = Math.round(result.scores.recall * 100);
389
+ const precision = Math.round(result.scores.precision * 100);
390
+ console.log(`${icon} ${criterionId}/${testName}${RESET} ${DIM}(recall: ${recall}%, precision: ${precision}%)${RESET}`);
391
+ }
392
+ else {
393
+ console.log(`${DIM} \u25CB ${criterionId}/${testName} (${result.status})${RESET}`);
394
+ }
395
+ },
396
+ });
397
+ console.log("");
398
+ // Render final detailed results
399
+ console.log(renderTestResults(run));
400
+ }
338
401
  // =============================================================================
339
402
  // Program
340
403
  // =============================================================================
@@ -347,6 +410,7 @@ program
347
410
  program
348
411
  .argument("[prompt]", "What to check (natural language)")
349
412
  .option("--fail-on <severities>", "Exit non-zero if findings match: critical, warning, info (comma-separated)")
413
+ .option("--criteria <names>", "Only run specific criteria (comma-separated, e.g. dto-enforcement,controller-conventions)")
350
414
  .action(async (prompt, options) => {
351
415
  if (!prompt) {
352
416
  program.help();
@@ -369,6 +433,7 @@ program
369
433
  .option("--fail-on <severities>", "Exit non-zero if findings match: critical, warning, info")
370
434
  .option("--dry-run", "Show the plan without executing", false)
371
435
  .option("--concurrency <n>", "Max concurrent executor agents", "5")
436
+ .option("--criteria <names>", "Only run specific criteria (comma-separated, e.g. dto-enforcement,controller-conventions)")
372
437
  .addHelpText("after", `
373
438
  Examples:
374
439
  deskcheck diff develop Check changes vs develop branch
@@ -377,12 +442,14 @@ Examples:
377
442
  deskcheck diff main -- app/ Check changes in app/ vs main
378
443
  deskcheck diff develop --dry-run Show plan without executing
379
444
  deskcheck diff develop --fail-on=critical Exit non-zero on critical findings
445
+ deskcheck diff develop --criteria=dto-enforcement Only run one criterion
380
446
  `)
381
447
  .action(async (gitArgs, options) => {
382
448
  try {
383
449
  await diffCommand(gitArgs, {
384
450
  ...options,
385
451
  concurrency: parseInt(options.concurrency, 10) || 5,
452
+ criteria: options.criteria,
386
453
  });
387
454
  }
388
455
  catch (error) {
@@ -463,5 +530,26 @@ program
463
530
  process.exit(1);
464
531
  }
465
532
  });
533
+ // Subcommand: test
534
+ program
535
+ .command("test")
536
+ .description("Run criterion tests against fixture files")
537
+ .argument("[criterion-name]", "Only run tests for this criterion")
538
+ .option("--criteria <names>", "Only run specific criteria (comma-separated)")
539
+ .addHelpText("after", `
540
+ Examples:
541
+ deskcheck test Run all criterion tests
542
+ deskcheck test backend/controller-conventions Run tests for one criterion
543
+ deskcheck test --criteria=dto-enforcement,naming Run tests for specific criteria
544
+ `)
545
+ .action(async (criterionName, options) => {
546
+ try {
547
+ await testCommand(criterionName, options);
548
+ }
549
+ catch (error) {
550
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
551
+ process.exit(1);
552
+ }
553
+ });
466
554
  program.parse();
467
555
  //# sourceMappingURL=cli.js.map
package/build/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAIzE,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,SAAS,kBAAkB;IACzB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAsB;IACnD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3D,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC7C,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACrC,OAAO,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,KAAa;IACxC,OAAO,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,OAAsB,EAAE,MAA0B;IACrE,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAEtB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAExE,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACtE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACtG,IAAI,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8CAA8C;AAC9C,SAAS,YAAY,CAAC,OAAsB,EAAE,IAAgB,EAAE,MAAc;IAC5E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B;YACE,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,KAAK,UAAU,eAAe,CAC5B,YAAuC,EACvC,MAAc;IAEd,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,gBAAgB,KAAK,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,cAAc;gBACjB,MAAM;YACR,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvE,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,OAAO,UAAU,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,IAAI,GAAG,IAAI,KAAK,CAAC,YAAY,aAAa,KAAK,EAAE,CAAC,CAAC;gBAC/H,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,OAAO,UAAU,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,IAAI,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC;gBACrG,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACxE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,aAAa,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,WAAW,IAAI,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC;gBACvG,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB;gBACnB,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,SAAS,gBAAgB,CAAC,IAAgB;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,SAAS,qBAAqB,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,sCAAsC,KAAK,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,uBAAuB;AACvB,SAAS,WAAW;IAClB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAEnE,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,GAAG,CAAC,CAAC;QACvC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QACrC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,GAAG,CAAC,CAAC;QACtC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,UAAU,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,uBAAuB;AACvB,SAAS,WAAW;IAClB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAErF,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAEvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5D,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,4BAA4B;AAC5B,SAAS,WAAW,CAAC,EAAsB,EAAE,OAA4C;IACvF,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAgB,CAAC;IACrB,IAAI,OAAsB,CAAC;IAE3B,IAAI,CAAC;QAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,sEAAsE;AACtE,KAAK,UAAU,WAAW,CACxB,OAAiB,EACjB,OAAqG;IAErG,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAErD,iCAAiC;IACjC,kFAAkF;IAClF,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,CAAC;IACxD,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE;YAC5C,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,sBAAsB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACjE,IAAI,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9F,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC;IAC1F,MAAM,QAAQ,GAAG,SAAS,UAAU,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,MAAe,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAE/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAE3E,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,6CAA6C,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,cAAc,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,2CAA2C,KAAK,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,UAAU;IACV,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAElD,iBAAiB;IACjB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,oEAAoE;AACpE,KAAK,UAAU,eAAe,CAC5B,MAAc,EACd,OAA+C;IAE/C,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,cAAc,KAAK,EAAE,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ;QACrC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9E,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAExD,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvB,UAAU;IACV,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAElD,iBAAiB;IACjB,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,kCAAkC;AAClC,KAAK,UAAU,YAAY,CAAC,MAAe;IACzC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAErF,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACrF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IAE3F,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YAChD,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvF,IAAI,SAAS,KAAK,aAAa,IAAI,YAAY,KAAK,gBAAgB;gBAAE,OAAO;YAC7E,aAAa,GAAG,SAAS,CAAC;YAC1B,gBAAgB,GAAG,YAAY,CAAC;YAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,OAAO,GAAyB,IAAI,CAAC;YACzC,IAAI,CAAC;gBAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAEhF,0BAA0B;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAEjD,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/B,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC,CAAC;IAEF,iBAAiB;IACjB,MAAM,EAAE,CAAC;IAET,oBAAoB;IACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE3C,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wCAAwC;AACxC,KAAK,UAAU,WAAW,CACxB,aAAiC,EACjC,OAA8B;IAE9B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE9E,sEAAsE;IACtE,IAAI,cAAoC,CAAC;IACzC,IAAI,aAAa,EAAE,CAAC;QAClB,cAAc,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5B,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,gBAAgB,SAAS,CAAC,MAAM,aAAa,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,cAAc,CAAC,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;IAChJ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,mCAAmC;IACnC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE;QAClD,cAAc,EAAE,CAAC,WAAmB,EAAE,QAAgB,EAAE,MAAsB,EAAE,EAAE;YAChF,SAAS,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC;YAE1C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,YAAY,WAAW,IAAI,QAAQ,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,GAAG,CAAC;gBACvH,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,QAAQ,GAAG,KAAK,IAAI,GAAG,YAAY,MAAM,iBAAiB,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;YACzH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,YAAY,WAAW,IAAI,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,8CAA8C;AAC9C,OAAO;KACJ,QAAQ,CAAC,UAAU,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,wBAAwB,EAAE,4EAA4E,CAAC;KAC9G,MAAM,CAAC,oBAAoB,EAAE,2FAA2F,CAAC;KACzH,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA+C,EAAE,EAAE;IAC5F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2CAA2C;AAC3C,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,eAAe,EAAE,gEAAgE,CAAC;KAC3F,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,UAAU,CAAC;KAClF,MAAM,CAAC,wBAAwB,EAAE,0DAA0D,CAAC;KAC5F,MAAM,CAAC,WAAW,EAAE,iCAAiC,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,EAAE,GAAG,CAAC;KAClE,MAAM,CAAC,oBAAoB,EAAE,2FAA2F,CAAC;KACzH,WAAW,CAAC,OAAO,EAAE;;;;;;;;;GASrB,CAAC;KACD,MAAM,CAAC,KAAK,EAAE,OAAiB,EAAE,OAAqG,EAAE,EAAE;IACzI,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,OAAO,EAAE;YACzB,GAAG,OAAO;YACV,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC;YACnD,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QAAC,WAAW,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QAAC,WAAW,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;KAChD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,UAAU,CAAC;KAClF,MAAM,CAAC,wBAAwB,EAAE,0DAA0D,CAAC;KAC5F,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,CAAC,EAAsB,EAAE,OAA4C,EAAE,EAAE;IAC/E,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,WAAW,EAAE,uCAAuC,CAAC;KAC9D,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,MAAe,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;KACpE,MAAM,CAAC,CAAC,OAA0B,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3E,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,oBAAoB,EAAE,8CAA8C,CAAC;KAC5E,WAAW,CAAC,OAAO,EAAE;;;;;GAKrB,CAAC;KACD,MAAM,CAAC,KAAK,EAAE,aAAiC,EAAE,OAA8B,EAAE,EAAE;IAClF,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,6 +1,14 @@
1
1
  import type { ReviewConfig } from "./types.js";
2
2
  /** Default configuration applied when no .deskcheck/config.json exists or fields are missing. */
3
3
  export declare const DEFAULT_CONFIG: ReviewConfig;
4
+ /**
5
+ * Deep-merge a partial user config on top of defaults.
6
+ *
7
+ * For plain objects, recursively merges keys so that user-supplied values
8
+ * override defaults while missing nested fields retain their defaults.
9
+ * For all other types (strings, arrays, primitives), the user value wins outright.
10
+ */
11
+ export declare function deepMerge<T>(defaults: T, overrides: Partial<T>): T;
4
12
  /**
5
13
  * Load and validate the deskcheck tool configuration.
6
14
  *
@@ -13,4 +21,4 @@ export declare const DEFAULT_CONFIG: ReviewConfig;
13
21
  * @throws {Error} If the config file exists but contains invalid JSON.
14
22
  */
15
23
  export declare function loadConfig(projectRoot: string): ReviewConfig;
16
- //# sourceMappingURL=config.d.ts.map
24
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,iGAAiG;AACjG,eAAO,MAAM,cAAc,EAAE,YAe5B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAkClE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAyB5D"}
@@ -4,6 +4,7 @@ import path from "node:path";
4
4
  export const DEFAULT_CONFIG = {
5
5
  modules_dir: "deskcheck/criteria",
6
6
  storage_dir: ".deskcheck/runs",
7
+ tests_dir: "deskcheck/tests",
7
8
  serve_port: 3000,
8
9
  shared: {
9
10
  allowed_tools: ["Read", "Glob", "Grep"],
@@ -13,6 +14,7 @@ export const DEFAULT_CONFIG = {
13
14
  planner: { model: "haiku" },
14
15
  executor: {},
15
16
  evaluator: { model: "haiku" },
17
+ judge: { model: "opus" },
16
18
  },
17
19
  };
18
20
  /**
@@ -22,7 +24,7 @@ export const DEFAULT_CONFIG = {
22
24
  * override defaults while missing nested fields retain their defaults.
23
25
  * For all other types (strings, arrays, primitives), the user value wins outright.
24
26
  */
25
- function deepMerge(defaults, overrides) {
27
+ export function deepMerge(defaults, overrides) {
26
28
  if (typeof defaults !== "object" ||
27
29
  defaults === null ||
28
30
  Array.isArray(defaults)) {
@@ -78,4 +80,4 @@ export function loadConfig(projectRoot) {
78
80
  }
79
81
  return deepMerge(DEFAULT_CONFIG, parsed);
80
82
  }
81
- //# sourceMappingURL=config.js.map
83
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { AgentModel } from "../types/criteria.js";
2
+ /** MCP server configuration for agent tool access. */
3
+ export interface McpServerConfig {
4
+ /** Command to start the MCP server. */
5
+ command: string;
6
+ /** Command-line arguments. */
7
+ args?: string[];
8
+ /** Environment variables passed to the server process. */
9
+ env?: Record<string, string>;
10
+ }
11
+ /** Per-role agent configuration (planner, executor, evaluator). */
12
+ export interface AgentRoleConfig {
13
+ /** Override the default model for this role. */
14
+ model?: AgentModel;
15
+ /** Additional tools beyond the shared set. */
16
+ additional_tools?: string[];
17
+ /** Additional MCP servers beyond the shared set. */
18
+ additional_mcp_servers?: Record<string, McpServerConfig>;
19
+ }
20
+ /** Top-level deskcheck tool configuration from .deskcheck/config.json. */
21
+ export interface ReviewConfig {
22
+ /** Directory containing criterion markdown files. */
23
+ modules_dir: string;
24
+ /** Directory for storing deskcheck run results. */
25
+ storage_dir: string;
26
+ /** Directory for storing test files. */
27
+ tests_dir: string;
28
+ /** Port for the web UI server. Default: 3000. */
29
+ serve_port: number;
30
+ /** Shared configuration applied to all agent roles. */
31
+ shared: {
32
+ /** Tools available to all agents. */
33
+ allowed_tools: string[];
34
+ /** MCP servers available to all agents. */
35
+ mcp_servers: Record<string, McpServerConfig>;
36
+ };
37
+ /** Per-role agent configuration. */
38
+ agents: {
39
+ planner: AgentRoleConfig;
40
+ executor: AgentRoleConfig;
41
+ evaluator: AgentRoleConfig;
42
+ judge: AgentRoleConfig;
43
+ };
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvD,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oDAAoD;IACpD,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1D;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,MAAM,EAAE;QACN,qCAAqC;QACrC,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,2CAA2C;QAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC9C,CAAC;IACF,oCAAoC;IACpC,MAAM,EAAE;QACN,OAAO,EAAE,eAAe,CAAC;QACzB,QAAQ,EAAE,eAAe,CAAC;QAC1B,SAAS,EAAE,eAAe,CAAC;QAC3B,KAAK,EAAE,eAAe,CAAC;KACxB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { ReviewConfig } from "../core/types.js";
2
+ import type { ReviewConfig } from "../config/types.js";
3
3
  /**
4
4
  * Register all review MCP tools on the given server.
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAM1E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,IAAI,CAoYN"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQvD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,IAAI,CAoYN"}
@@ -1,9 +1,9 @@
1
1
  import path from "node:path";
2
2
  import { z } from "zod";
3
- import { ReviewStorage } from "../core/storage.js";
4
- import { extractContext } from "../core/context-extractor.js";
5
- import { discoverModules, parseModule } from "../core/module-parser.js";
6
- import { findMatchingModules } from "../core/glob-matcher.js";
3
+ import { ReviewStorageService } from "../services/review/ReviewStorageService.js";
4
+ import { extractContext } from "../services/review/ReviewContextExtractorService.js";
5
+ import { discoverModules, parseModule } from "../services/criteria/module-parser.js";
6
+ import { findMatchingModules } from "../services/criteria/glob-matcher.js";
7
7
  /**
8
8
  * Register all review MCP tools on the given server.
9
9
  *
@@ -11,7 +11,7 @@ import { findMatchingModules } from "../core/glob-matcher.js";
11
11
  * and exposes it over the MCP protocol with Zod-validated input schemas.
12
12
  */
13
13
  export function registerReviewTools(server, config, projectRoot) {
14
- const storage = new ReviewStorage(path.resolve(projectRoot, config.storage_dir));
14
+ const storage = new ReviewStorageService(path.resolve(projectRoot, config.storage_dir));
15
15
  const modulesDir = path.resolve(projectRoot, config.modules_dir);
16
16
  // ---------------------------------------------------------------------------
17
17
  // 1. review_status — health check