@prowi/deskcheck 0.2.0 → 0.4.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.
- package/README.md +78 -84
- package/build/cli.js +131 -25
- package/build/cli.js.map +1 -1
- package/build/config/loader.d.ts.map +1 -1
- package/build/config/loader.js +2 -1
- package/build/config/loader.js.map +1 -1
- package/build/config/types.d.ts +2 -1
- package/build/config/types.d.ts.map +1 -1
- package/build/mcp/tools.d.ts.map +1 -1
- package/build/mcp/tools.js +51 -65
- package/build/mcp/tools.js.map +1 -1
- package/build/prompts/ExecutorPrompt.d.ts +4 -2
- package/build/prompts/ExecutorPrompt.d.ts.map +1 -1
- package/build/prompts/ExecutorPrompt.js +72 -34
- package/build/prompts/ExecutorPrompt.js.map +1 -1
- package/build/prompts/PartitionerPrompt.d.ts +12 -0
- package/build/prompts/PartitionerPrompt.d.ts.map +1 -0
- package/build/prompts/PartitionerPrompt.js +54 -0
- package/build/prompts/PartitionerPrompt.js.map +1 -0
- package/build/prompts/ResolverPrompt.d.ts +11 -0
- package/build/prompts/ResolverPrompt.d.ts.map +1 -0
- package/build/prompts/ResolverPrompt.js +45 -0
- package/build/prompts/ResolverPrompt.js.map +1 -0
- package/build/renderers/review/MarkdownRenderer.d.ts.map +1 -1
- package/build/renderers/review/MarkdownRenderer.js +30 -11
- package/build/renderers/review/MarkdownRenderer.js.map +1 -1
- package/build/renderers/review/TerminalRenderer.d.ts.map +1 -1
- package/build/renderers/review/TerminalRenderer.js +38 -13
- package/build/renderers/review/TerminalRenderer.js.map +1 -1
- package/build/renderers/review/WatchRenderer.d.ts.map +1 -1
- package/build/renderers/review/WatchRenderer.js +12 -3
- package/build/renderers/review/WatchRenderer.js.map +1 -1
- package/build/renderers/shared.d.ts +11 -11
- package/build/renderers/shared.d.ts.map +1 -1
- package/build/renderers/shared.js +15 -15
- package/build/renderers/shared.js.map +1 -1
- package/build/server/controllers/ReviewController.d.ts +12 -3
- package/build/server/controllers/ReviewController.d.ts.map +1 -1
- package/build/server/controllers/ReviewController.js +50 -6
- package/build/server/controllers/ReviewController.js.map +1 -1
- package/build/server/server.d.ts.map +1 -1
- package/build/server/server.js +22 -1
- package/build/server/server.js.map +1 -1
- package/build/services/ExecutorService.d.ts +17 -2
- package/build/services/ExecutorService.d.ts.map +1 -1
- package/build/services/ExecutorService.js +37 -5
- package/build/services/ExecutorService.js.map +1 -1
- package/build/services/FindingsParserService.d.ts +7 -6
- package/build/services/FindingsParserService.d.ts.map +1 -1
- package/build/services/FindingsParserService.js +44 -14
- package/build/services/FindingsParserService.js.map +1 -1
- package/build/services/criteria/module-parser.d.ts +1 -1
- package/build/services/criteria/module-parser.d.ts.map +1 -1
- package/build/services/criteria/module-parser.js +20 -16
- package/build/services/criteria/module-parser.js.map +1 -1
- package/build/services/review/CodeSnippetService.d.ts +10 -0
- package/build/services/review/CodeSnippetService.d.ts.map +1 -0
- package/build/services/review/CodeSnippetService.js +54 -0
- package/build/services/review/CodeSnippetService.js.map +1 -0
- package/build/services/review/ReviewInputResolverService.d.ts +25 -0
- package/build/services/review/ReviewInputResolverService.d.ts.map +1 -0
- package/build/services/review/ReviewInputResolverService.js +106 -0
- package/build/services/review/ReviewInputResolverService.js.map +1 -0
- package/build/services/review/ReviewOrchestratorService.d.ts +2 -2
- package/build/services/review/ReviewOrchestratorService.d.ts.map +1 -1
- package/build/services/review/ReviewOrchestratorService.js +28 -27
- package/build/services/review/ReviewOrchestratorService.js.map +1 -1
- package/build/services/review/ReviewPartitionerService.d.ts +46 -0
- package/build/services/review/ReviewPartitionerService.d.ts.map +1 -0
- package/build/services/review/ReviewPartitionerService.js +208 -0
- package/build/services/review/ReviewPartitionerService.js.map +1 -0
- package/build/services/review/ReviewPlanBuilderService.d.ts +25 -7
- package/build/services/review/ReviewPlanBuilderService.d.ts.map +1 -1
- package/build/services/review/ReviewPlanBuilderService.js +88 -30
- package/build/services/review/ReviewPlanBuilderService.js.map +1 -1
- package/build/services/review/ReviewStorageService.d.ts +35 -11
- package/build/services/review/ReviewStorageService.d.ts.map +1 -1
- package/build/services/review/ReviewStorageService.js +136 -35
- package/build/services/review/ReviewStorageService.js.map +1 -1
- package/build/services/testing/TestRunnerService.d.ts.map +1 -1
- package/build/services/testing/TestRunnerService.js +10 -8
- package/build/services/testing/TestRunnerService.js.map +1 -1
- package/build/types/criteria.d.ts +8 -6
- package/build/types/criteria.d.ts.map +1 -1
- package/build/types/review.d.ts +173 -50
- package/build/types/review.d.ts.map +1 -1
- package/package.json +3 -1
- package/ui/dist/index.html +12 -63
- package/build/prompts/PlannerPrompt.d.ts +0 -12
- package/build/prompts/PlannerPrompt.d.ts.map +0 -1
- package/build/prompts/PlannerPrompt.js +0 -34
- package/build/prompts/PlannerPrompt.js.map +0 -1
- package/build/services/review/ReviewContextExtractorService.d.ts +0 -17
- package/build/services/review/ReviewContextExtractorService.d.ts.map +0 -1
- package/build/services/review/ReviewContextExtractorService.js +0 -69
- package/build/services/review/ReviewContextExtractorService.js.map +0 -1
- package/build/services/review/ReviewPlannerService.d.ts +0 -29
- package/build/services/review/ReviewPlannerService.d.ts.map +0 -1
- package/build/services/review/ReviewPlannerService.js +0 -122
- package/build/services/review/ReviewPlannerService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewController.js","sourceRoot":"","sources":["../../../src/server/controllers/ReviewController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReviewController.js","sourceRoot":"","sources":["../../../src/server/controllers/ReviewController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAyCvD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAwGzF"}
|
package/build/server/server.js
CHANGED
|
@@ -4,7 +4,7 @@ import path from "node:path";
|
|
|
4
4
|
import { URL } from "node:url";
|
|
5
5
|
import { ReviewStorageService } from "../services/review/ReviewStorageService.js";
|
|
6
6
|
import { handleCors } from "./middleware/cors.js";
|
|
7
|
-
import { handleGetRuns, handleGetPlan, handleGetResults } from "./controllers/ReviewController.js";
|
|
7
|
+
import { handleGetRuns, handleGetRun, handleGetPlan, handleGetResults, handleGetTaskLog, handleGetPartitionerLog, } from "./controllers/ReviewController.js";
|
|
8
8
|
import { handleSSE } from "./sse/FileWatcherSSE.js";
|
|
9
9
|
// =============================================================================
|
|
10
10
|
// Response helpers
|
|
@@ -78,6 +78,11 @@ export function startServer(config, projectRoot, port) {
|
|
|
78
78
|
handleGetRuns(storage, res);
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
+
// GET /api/runs/:id -> merged plan + results (used by the new UI)
|
|
82
|
+
if (segments.length === 3 && segments[1] === "runs") {
|
|
83
|
+
handleGetRun(storage, res, decodeURIComponent(segments[2]));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
81
86
|
// GET /api/runs/:id/plan
|
|
82
87
|
if (segments.length === 4 && segments[1] === "runs" && segments[3] === "plan") {
|
|
83
88
|
handleGetPlan(storage, res, decodeURIComponent(segments[2]));
|
|
@@ -88,6 +93,22 @@ export function startServer(config, projectRoot, port) {
|
|
|
88
93
|
handleGetResults(storage, res, decodeURIComponent(segments[2]));
|
|
89
94
|
return;
|
|
90
95
|
}
|
|
96
|
+
// GET /api/runs/:id/tasks/:taskId/log -> reviewer's full SDK transcript
|
|
97
|
+
if (segments.length === 6 &&
|
|
98
|
+
segments[1] === "runs" &&
|
|
99
|
+
segments[3] === "tasks" &&
|
|
100
|
+
segments[5] === "log") {
|
|
101
|
+
handleGetTaskLog(storage, res, decodeURIComponent(segments[2]), decodeURIComponent(segments[4]));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// GET /api/runs/:id/partitioners/:reviewId/log -> partitioner's full SDK transcript
|
|
105
|
+
if (segments.length === 6 &&
|
|
106
|
+
segments[1] === "runs" &&
|
|
107
|
+
segments[3] === "partitioners" &&
|
|
108
|
+
segments[5] === "log") {
|
|
109
|
+
handleGetPartitionerLog(storage, res, decodeURIComponent(segments[2]), decodeURIComponent(segments[4]));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
91
112
|
// GET /api/events/:id -> SSE stream
|
|
92
113
|
if (segments.length === 3 && segments[1] === "events") {
|
|
93
114
|
handleSSE(res, storageDir, decodeURIComponent(segments[2]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,SAAS,QAAQ,CAAC,GAAwB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,6BAA6B,EAAE,GAAG;QAClC,eAAe,EAAE,UAAU;KAC5B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAwB,EAAE,IAAY;IACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,0BAA0B;QAC1C,6BAA6B,EAAE,GAAG;KACnC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,GAAwB,EAAE,MAAc,EAAE,OAAe;IAC1E,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,mGAAmG;AACnG,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,WAAmB,EAAE,IAAY;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAC/C,0BAA0B,CAC3B,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,wBAAwB;QACxB,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO;QAEjC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEnD,iGAAiG;QACjG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,GAAG,EAAE,uKAAuK,CAAC,CAAC;gBACvL,OAAO;YACT,CAAC;YACD,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3D,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACpD,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACpD,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC9E,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,4BAA4B;QAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACjF,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,IACE,QAAQ,CAAC,MAAM,KAAK,CAAC;YACrB,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM;YACtB,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO;YACvB,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,EACrB,CAAC;YACD,gBAAgB,CACd,OAAO,EACP,GAAG,EACH,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAChC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CACjC,CAAC;YACF,OAAO;QACT,CAAC;QAED,oFAAoF;QACpF,IACE,QAAQ,CAAC,MAAM,KAAK,CAAC;YACrB,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM;YACtB,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc;YAC9B,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,EACrB,CAAC;YACD,uBAAuB,CACrB,OAAO,EACP,GAAG,EACH,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAChC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CACjC,CAAC;YACF,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtD,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -6,6 +6,8 @@ import type { TaskUsage } from "../types/review.js";
|
|
|
6
6
|
export interface ExecutorResult {
|
|
7
7
|
resultText: string;
|
|
8
8
|
usage: TaskUsage | null;
|
|
9
|
+
/** Full SDK message stream from this run, for transcript persistence. */
|
|
10
|
+
messages: unknown[];
|
|
9
11
|
}
|
|
10
12
|
/**
|
|
11
13
|
* Build the merged MCP servers map for an executor agent.
|
|
@@ -14,11 +16,19 @@ export interface ExecutorResult {
|
|
|
14
16
|
* defined for the executor role.
|
|
15
17
|
*/
|
|
16
18
|
export declare function buildMcpServers(config: ReviewConfig): Record<string, SdkMcpServerConfig>;
|
|
19
|
+
/**
|
|
20
|
+
* Tools always available to a reviewer regardless of config. Reviewers need
|
|
21
|
+
* these to fetch their own context (Read/Grep/Glob for full files, Bash for
|
|
22
|
+
* `git diff` in changes-mode scope), so they're hard-wired into the pipeline
|
|
23
|
+
* rather than being user-configurable.
|
|
24
|
+
*/
|
|
25
|
+
export declare const BUILTIN_REVIEWER_TOOLS: readonly string[];
|
|
17
26
|
/**
|
|
18
27
|
* Build the merged allowed tools list for an executor agent.
|
|
19
28
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
29
|
+
* Always includes the built-in reviewer tools (so reviewers can fetch their
|
|
30
|
+
* own context), then layers config-shared tools and executor-role tools on
|
|
31
|
+
* top, deduplicated.
|
|
22
32
|
*/
|
|
23
33
|
export declare function buildAllowedTools(config: ReviewConfig): string[];
|
|
24
34
|
/**
|
|
@@ -38,12 +48,17 @@ export declare class ExecutorService {
|
|
|
38
48
|
* @param prompt - The system prompt for the executor agent.
|
|
39
49
|
* @param model - The Claude model tier to use.
|
|
40
50
|
* @param options - Optional overrides for tools, MCP servers, max turns, timeout, and permission mode.
|
|
51
|
+
* - `tools` fully overrides the computed allowed-tool set; use this only when callers want
|
|
52
|
+
* to bypass the built-in/config/criterion layering.
|
|
53
|
+
* - `extraTools` are layered on top of the normal computed set. This is the right knob for
|
|
54
|
+
* per-criterion tools coming from frontmatter.
|
|
41
55
|
* @returns The result text and usage data from the agent run.
|
|
42
56
|
*/
|
|
43
57
|
execute(prompt: string, model: AgentModel, options?: {
|
|
44
58
|
maxTurns?: number;
|
|
45
59
|
timeoutMs?: number;
|
|
46
60
|
tools?: string[];
|
|
61
|
+
extraTools?: string[];
|
|
47
62
|
mcpServers?: Record<string, SdkMcpServerConfig>;
|
|
48
63
|
permissionMode?: PermissionMode;
|
|
49
64
|
}): Promise<ExecutorResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorService.d.ts","sourceRoot":"","sources":["../../src/services/ExecutorService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC5G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ExecutorService.d.ts","sourceRoot":"","sources":["../../src/services/ExecutorService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC5G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA2BxF;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAKnD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAmBhE;AAMD;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKrD;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAChD,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC,GAAG,OAAO,CAAC,cAAc,CAAC;CAiE5B"}
|
|
@@ -33,14 +33,32 @@ export function buildMcpServers(config) {
|
|
|
33
33
|
}
|
|
34
34
|
return servers;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Tools always available to a reviewer regardless of config. Reviewers need
|
|
38
|
+
* these to fetch their own context (Read/Grep/Glob for full files, Bash for
|
|
39
|
+
* `git diff` in changes-mode scope), so they're hard-wired into the pipeline
|
|
40
|
+
* rather than being user-configurable.
|
|
41
|
+
*/
|
|
42
|
+
export const BUILTIN_REVIEWER_TOOLS = [
|
|
43
|
+
"Read",
|
|
44
|
+
"Grep",
|
|
45
|
+
"Glob",
|
|
46
|
+
"Bash",
|
|
47
|
+
];
|
|
36
48
|
/**
|
|
37
49
|
* Build the merged allowed tools list for an executor agent.
|
|
38
50
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
51
|
+
* Always includes the built-in reviewer tools (so reviewers can fetch their
|
|
52
|
+
* own context), then layers config-shared tools and executor-role tools on
|
|
53
|
+
* top, deduplicated.
|
|
41
54
|
*/
|
|
42
55
|
export function buildAllowedTools(config) {
|
|
43
|
-
const tools = [...
|
|
56
|
+
const tools = [...BUILTIN_REVIEWER_TOOLS];
|
|
57
|
+
for (const tool of config.shared.allowed_tools) {
|
|
58
|
+
if (!tools.includes(tool)) {
|
|
59
|
+
tools.push(tool);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
44
62
|
const executorTools = config.agents.executor.additional_tools;
|
|
45
63
|
if (executorTools) {
|
|
46
64
|
for (const tool of executorTools) {
|
|
@@ -74,10 +92,22 @@ export class ExecutorService {
|
|
|
74
92
|
* @param prompt - The system prompt for the executor agent.
|
|
75
93
|
* @param model - The Claude model tier to use.
|
|
76
94
|
* @param options - Optional overrides for tools, MCP servers, max turns, timeout, and permission mode.
|
|
95
|
+
* - `tools` fully overrides the computed allowed-tool set; use this only when callers want
|
|
96
|
+
* to bypass the built-in/config/criterion layering.
|
|
97
|
+
* - `extraTools` are layered on top of the normal computed set. This is the right knob for
|
|
98
|
+
* per-criterion tools coming from frontmatter.
|
|
77
99
|
* @returns The result text and usage data from the agent run.
|
|
78
100
|
*/
|
|
79
101
|
async execute(prompt, model, options) {
|
|
80
|
-
|
|
102
|
+
let allowedTools = options?.tools ?? buildAllowedTools(this.config);
|
|
103
|
+
if (options?.extraTools && options.extraTools.length > 0) {
|
|
104
|
+
const merged = [...allowedTools];
|
|
105
|
+
for (const t of options.extraTools) {
|
|
106
|
+
if (!merged.includes(t))
|
|
107
|
+
merged.push(t);
|
|
108
|
+
}
|
|
109
|
+
allowedTools = merged;
|
|
110
|
+
}
|
|
81
111
|
const mcpServers = options?.mcpServers ?? buildMcpServers(this.config);
|
|
82
112
|
const maxTurns = options?.maxTurns ?? 25;
|
|
83
113
|
const timeoutMs = options?.timeoutMs ?? 5 * 60 * 1000;
|
|
@@ -86,6 +116,7 @@ export class ExecutorService {
|
|
|
86
116
|
const timeout = setTimeout(() => abortController.abort(), timeoutMs);
|
|
87
117
|
let resultText = "";
|
|
88
118
|
let taskUsage = null;
|
|
119
|
+
const messages = [];
|
|
89
120
|
try {
|
|
90
121
|
for await (const message of query({
|
|
91
122
|
prompt,
|
|
@@ -100,6 +131,7 @@ export class ExecutorService {
|
|
|
100
131
|
...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
|
|
101
132
|
},
|
|
102
133
|
})) {
|
|
134
|
+
messages.push(message);
|
|
103
135
|
if (message.type === "result") {
|
|
104
136
|
// Capture usage data from result (available on both success and error)
|
|
105
137
|
const msg = message;
|
|
@@ -127,7 +159,7 @@ export class ExecutorService {
|
|
|
127
159
|
finally {
|
|
128
160
|
clearTimeout(timeout);
|
|
129
161
|
}
|
|
130
|
-
return { resultText, usage: taskUsage };
|
|
162
|
+
return { resultText, usage: taskUsage, messages };
|
|
131
163
|
}
|
|
132
164
|
}
|
|
133
165
|
//# sourceMappingURL=ExecutorService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorService.js","sourceRoot":"","sources":["../../src/services/ExecutorService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ExecutorService.js","sourceRoot":"","sources":["../../src/services/ExecutorService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { Finding } from "../types/review.js";
|
|
1
|
+
import type { Issue, Reference, Finding } from "../types/review.js";
|
|
2
|
+
export type { Issue, Reference };
|
|
2
3
|
/**
|
|
3
|
-
* Parse executor output into a validated array of
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
4
|
+
* Parse executor output into a validated array of issues.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseIssues(output: string): Issue[];
|
|
7
|
+
/**
|
|
8
|
+
* Parse executor output into findings for the testing subsystem.
|
|
8
9
|
*/
|
|
9
10
|
export declare function parseFindings(output: string): Finding[];
|
|
10
11
|
//# sourceMappingURL=FindingsParserService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FindingsParserService.d.ts","sourceRoot":"","sources":["../../src/services/FindingsParserService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"FindingsParserService.d.ts","sourceRoot":"","sources":["../../src/services/FindingsParserService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAmB,MAAM,oBAAoB,CAAC;AAErF,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAqBjC;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,CAkEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CASvD"}
|
|
@@ -3,14 +3,22 @@ const VALID_SEVERITIES = new Set([
|
|
|
3
3
|
"warning",
|
|
4
4
|
"info",
|
|
5
5
|
]);
|
|
6
|
+
function parseReference(raw) {
|
|
7
|
+
return {
|
|
8
|
+
file: String(raw.file ?? ""),
|
|
9
|
+
symbol: typeof raw.symbol === "string" ? raw.symbol : null,
|
|
10
|
+
startLine: typeof raw.startLine === "number" ? raw.startLine : 0,
|
|
11
|
+
endLine: typeof raw.endLine === "number" ? raw.endLine : (typeof raw.startLine === "number" ? raw.startLine : 0),
|
|
12
|
+
contextLines: typeof raw.contextLines === "number" ? raw.contextLines : 3,
|
|
13
|
+
code: null, // Always null at parse time — populated by CodeSnippetService
|
|
14
|
+
suggestedCode: typeof raw.suggestedCode === "string" ? raw.suggestedCode : null,
|
|
15
|
+
note: typeof raw.note === "string" ? raw.note : null,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
6
18
|
/**
|
|
7
|
-
* Parse executor output into a validated array of
|
|
8
|
-
*
|
|
9
|
-
* The executor is instructed to output only a JSON array. This function
|
|
10
|
-
* extracts the JSON from the response text, handles cases where the agent
|
|
11
|
-
* wraps it in markdown fences, and validates each finding's structure.
|
|
19
|
+
* Parse executor output into a validated array of issues.
|
|
12
20
|
*/
|
|
13
|
-
export function
|
|
21
|
+
export function parseIssues(output) {
|
|
14
22
|
// Try to extract JSON array from the output
|
|
15
23
|
let jsonText = output.trim();
|
|
16
24
|
// Strip markdown code fences if present
|
|
@@ -38,27 +46,49 @@ export function parseFindings(output) {
|
|
|
38
46
|
console.error(`[deskcheck] Warning: executor output parsed but was not an array. Type: ${typeof parsed}`);
|
|
39
47
|
return [];
|
|
40
48
|
}
|
|
41
|
-
// Validate and normalize each
|
|
42
|
-
const
|
|
49
|
+
// Validate and normalize each item
|
|
50
|
+
const issues = [];
|
|
43
51
|
for (const item of parsed) {
|
|
44
52
|
if (typeof item !== "object" || item === null) {
|
|
45
|
-
console.error(`[deskcheck] Warning: skipping invalid
|
|
53
|
+
console.error(`[deskcheck] Warning: skipping invalid item (not an object): ${JSON.stringify(item).slice(0, 100)}`);
|
|
46
54
|
continue;
|
|
47
55
|
}
|
|
48
56
|
const record = item;
|
|
49
57
|
const severity = String(record.severity ?? "info");
|
|
50
58
|
if (!VALID_SEVERITIES.has(severity)) {
|
|
51
|
-
console.error(`[deskcheck] Warning: skipping
|
|
59
|
+
console.error(`[deskcheck] Warning: skipping item with invalid severity "${severity}"`);
|
|
52
60
|
continue;
|
|
53
61
|
}
|
|
54
|
-
|
|
62
|
+
if (!Array.isArray(record.references) || record.references.length === 0)
|
|
63
|
+
continue;
|
|
64
|
+
const references = [];
|
|
65
|
+
for (const ref of record.references) {
|
|
66
|
+
if (typeof ref === "object" && ref !== null) {
|
|
67
|
+
references.push(parseReference(ref));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (references.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
issues.push({
|
|
55
73
|
severity: severity,
|
|
56
|
-
file: String(record.file ?? ""),
|
|
57
|
-
line: typeof record.line === "number" ? record.line : null,
|
|
58
74
|
description: String(record.description ?? ""),
|
|
59
75
|
suggestion: typeof record.suggestion === "string" ? record.suggestion : null,
|
|
76
|
+
references,
|
|
60
77
|
});
|
|
61
78
|
}
|
|
62
|
-
return
|
|
79
|
+
return issues;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse executor output into findings for the testing subsystem.
|
|
83
|
+
*/
|
|
84
|
+
export function parseFindings(output) {
|
|
85
|
+
const issues = parseIssues(output);
|
|
86
|
+
return issues.map((issue) => ({
|
|
87
|
+
severity: issue.severity,
|
|
88
|
+
file: issue.references[0]?.file ?? "",
|
|
89
|
+
line: issue.references[0]?.startLine ?? null,
|
|
90
|
+
description: issue.description,
|
|
91
|
+
suggestion: issue.suggestion,
|
|
92
|
+
}));
|
|
63
93
|
}
|
|
64
94
|
//# sourceMappingURL=FindingsParserService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FindingsParserService.js","sourceRoot":"","sources":["../../src/services/FindingsParserService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FindingsParserService.js","sourceRoot":"","sources":["../../src/services/FindingsParserService.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export declare function parseModule(filePath: string, basePath: string): ReviewM
|
|
|
16
16
|
* Discover all criteria by recursively scanning a directory for `.md` files.
|
|
17
17
|
*
|
|
18
18
|
* Each markdown file is parsed for YAML frontmatter containing criterion metadata
|
|
19
|
-
* (description,
|
|
19
|
+
* (description, globs, etc.) and the markdown body becomes the detective prompt.
|
|
20
20
|
*
|
|
21
21
|
* @param modulesDir - Path to the directory containing criterion markdown files.
|
|
22
22
|
* @returns Array of parsed ReviewModule objects, sorted by ID for deterministic ordering.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-parser.d.ts","sourceRoot":"","sources":["../../../src/services/criteria/module-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"module-parser.d.ts","sourceRoot":"","sources":["../../../src/services/criteria/module-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAWxE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CA8E5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAqBlE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CA+BzF"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import matter from "gray-matter";
|
|
4
|
-
const VALID_SEVERITIES = new Set([
|
|
5
|
-
"critical",
|
|
6
|
-
"high",
|
|
7
|
-
"medium",
|
|
8
|
-
"low",
|
|
9
|
-
]);
|
|
10
4
|
const VALID_MODELS = new Set([
|
|
11
5
|
"haiku",
|
|
12
6
|
"sonnet",
|
|
13
7
|
"opus",
|
|
14
8
|
]);
|
|
15
|
-
const
|
|
9
|
+
const DEFAULT_PARTITION = "one task per matched file";
|
|
16
10
|
const DEFAULT_MODEL = "haiku";
|
|
17
11
|
/**
|
|
18
12
|
* Parse a single criterion markdown file into a ReviewModule object.
|
|
@@ -37,9 +31,6 @@ export function parseModule(filePath, basePath) {
|
|
|
37
31
|
if (typeof frontmatter.description !== "string" || frontmatter.description.trim() === "") {
|
|
38
32
|
throw new Error(`Invalid criterion ${relativePath}: "description" is required and must be a non-empty string`);
|
|
39
33
|
}
|
|
40
|
-
if (!VALID_SEVERITIES.has(frontmatter.severity)) {
|
|
41
|
-
throw new Error(`Invalid criterion ${relativePath}: "severity" must be one of: ${[...VALID_SEVERITIES].join(", ")}. Got: ${JSON.stringify(frontmatter.severity)}`);
|
|
42
|
-
}
|
|
43
34
|
if (!Array.isArray(frontmatter.globs) || frontmatter.globs.length === 0) {
|
|
44
35
|
throw new Error(`Invalid criterion ${relativePath}: "globs" is required and must be a non-empty array of strings`);
|
|
45
36
|
}
|
|
@@ -49,23 +40,36 @@ export function parseModule(filePath, basePath) {
|
|
|
49
40
|
}
|
|
50
41
|
}
|
|
51
42
|
// --- Apply defaults for optional fields ---
|
|
52
|
-
const
|
|
53
|
-
? frontmatter.
|
|
54
|
-
:
|
|
43
|
+
const partition = typeof frontmatter.partition === "string" && frontmatter.partition.trim() !== ""
|
|
44
|
+
? frontmatter.partition
|
|
45
|
+
: DEFAULT_PARTITION;
|
|
55
46
|
const model = frontmatter.model ?? DEFAULT_MODEL;
|
|
56
47
|
if (!VALID_MODELS.has(model)) {
|
|
57
48
|
throw new Error(`Invalid criterion ${relativePath}: "model" must be one of: ${[...VALID_MODELS].join(", ")}. Got: ${JSON.stringify(model)}`);
|
|
58
49
|
}
|
|
50
|
+
// tools — optional array of strings, defaults to empty.
|
|
51
|
+
let tools = [];
|
|
52
|
+
if (frontmatter.tools !== undefined) {
|
|
53
|
+
if (!Array.isArray(frontmatter.tools)) {
|
|
54
|
+
throw new Error(`Invalid criterion ${relativePath}: "tools" must be an array of strings. Got: ${JSON.stringify(frontmatter.tools)}`);
|
|
55
|
+
}
|
|
56
|
+
for (const t of frontmatter.tools) {
|
|
57
|
+
if (typeof t !== "string" || t.trim() === "") {
|
|
58
|
+
throw new Error(`Invalid criterion ${relativePath}: each entry in "tools" must be a non-empty string. Got: ${JSON.stringify(t)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
tools = frontmatter.tools;
|
|
62
|
+
}
|
|
59
63
|
// --- Build the criterion ID from relative path without extension ---
|
|
60
64
|
const id = relativePath.replace(/\.md$/, "").split(path.sep).join("/");
|
|
61
65
|
return {
|
|
62
66
|
id,
|
|
63
67
|
file: relativeFile.split(path.sep).join("/"),
|
|
64
68
|
description: frontmatter.description,
|
|
65
|
-
severity: frontmatter.severity,
|
|
66
69
|
globs: frontmatter.globs,
|
|
67
|
-
|
|
70
|
+
partition,
|
|
68
71
|
model: model,
|
|
72
|
+
tools,
|
|
69
73
|
prompt: content.trim(),
|
|
70
74
|
};
|
|
71
75
|
}
|
|
@@ -73,7 +77,7 @@ export function parseModule(filePath, basePath) {
|
|
|
73
77
|
* Discover all criteria by recursively scanning a directory for `.md` files.
|
|
74
78
|
*
|
|
75
79
|
* Each markdown file is parsed for YAML frontmatter containing criterion metadata
|
|
76
|
-
* (description,
|
|
80
|
+
* (description, globs, etc.) and the markdown body becomes the detective prompt.
|
|
77
81
|
*
|
|
78
82
|
* @param modulesDir - Path to the directory containing criterion markdown files.
|
|
79
83
|
* @returns Array of parsed ReviewModule objects, sorted by ID for deterministic ordering.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-parser.js","sourceRoot":"","sources":["../../../src/services/criteria/module-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,MAAM,
|
|
1
|
+
{"version":3,"file":"module-parser.js","sourceRoot":"","sources":["../../../src/services/criteria/module-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Issue } from "../../types/review.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves code snippets for issue references by reading the actual files
|
|
4
|
+
* from disk. Populates the `reference.code` field with the lines indicated
|
|
5
|
+
* by `startLine`/`endLine`, padded by `contextLines` on each side.
|
|
6
|
+
*
|
|
7
|
+
* This is a pure post-processing step — no LLM involved.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveCodeSnippets(issues: Issue[], projectRoot: string): Issue[];
|
|
10
|
+
//# sourceMappingURL=CodeSnippetService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSnippetService.d.ts","sourceRoot":"","sources":["../../../src/services/review/CodeSnippetService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,CAiDjF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves code snippets for issue references by reading the actual files
|
|
5
|
+
* from disk. Populates the `reference.code` field with the lines indicated
|
|
6
|
+
* by `startLine`/`endLine`, padded by `contextLines` on each side.
|
|
7
|
+
*
|
|
8
|
+
* This is a pure post-processing step — no LLM involved.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveCodeSnippets(issues, projectRoot) {
|
|
11
|
+
// Cache file contents to avoid re-reading the same file for multiple references
|
|
12
|
+
const fileCache = new Map();
|
|
13
|
+
function getLines(filePath) {
|
|
14
|
+
if (fileCache.has(filePath))
|
|
15
|
+
return fileCache.get(filePath);
|
|
16
|
+
const absPath = path.resolve(projectRoot, filePath);
|
|
17
|
+
try {
|
|
18
|
+
const content = fs.readFileSync(absPath, "utf-8");
|
|
19
|
+
const lines = content.split("\n");
|
|
20
|
+
fileCache.set(filePath, lines);
|
|
21
|
+
return lines;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
console.error(`[deskcheck] Warning: could not read file for snippet resolution: ${filePath}`);
|
|
25
|
+
fileCache.set(filePath, null);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const issue of issues) {
|
|
30
|
+
for (const ref of issue.references) {
|
|
31
|
+
if (ref.startLine <= 0 || ref.endLine <= 0) {
|
|
32
|
+
ref.code = null;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const lines = getLines(ref.file);
|
|
36
|
+
if (!lines) {
|
|
37
|
+
ref.code = null;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Lines are 1-indexed, array is 0-indexed. Pad with contextLines.
|
|
41
|
+
const ctx = ref.contextLines;
|
|
42
|
+
const start = Math.max(ref.startLine - 1 - ctx, 0);
|
|
43
|
+
const end = Math.min(ref.endLine + ctx, lines.length); // slice end is exclusive
|
|
44
|
+
if (ref.startLine - 1 >= lines.length || ref.startLine - 1 < 0) {
|
|
45
|
+
console.error(`[deskcheck] Warning: line range ${ref.startLine}-${ref.endLine} out of bounds for ${ref.file} (${lines.length} lines)`);
|
|
46
|
+
ref.code = null;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
ref.code = lines.slice(start, end).join("\n");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return issues;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=CodeSnippetService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSnippetService.js","sourceRoot":"","sources":["../../../src/services/review/CodeSnippetService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,WAAmB;IACtE,gFAAgF;IAChF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAErD,SAAS,QAAQ,CAAC,QAAgB;QAChC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,oEAAoE,QAAQ,EAAE,CAAC,CAAC;YAC9F,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,kEAAkE;YAClE,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB;YAEhF,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,sBAAsB,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;gBACvI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReviewConfig } from "../../config/types.js";
|
|
2
|
+
import type { Scope } from "../../types/review.js";
|
|
3
|
+
/** Output of the resolver agent — what to review and how. */
|
|
4
|
+
export interface ResolvedInput {
|
|
5
|
+
scope: Scope;
|
|
6
|
+
files: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Translates a natural-language deskcheck request into `{ scope, files }` by
|
|
10
|
+
* running a fresh Claude agent that has filesystem/git tools and an
|
|
11
|
+
* in-process MCP `submit_resolution` tool. The resolver does NOT match
|
|
12
|
+
* criteria, partition, or review — those happen downstream identically to
|
|
13
|
+
* the deterministic `deskcheck diff` path.
|
|
14
|
+
*
|
|
15
|
+
* If the caller already supplied an explicit scope override (`--scope`),
|
|
16
|
+
* pass it via `scopeOverride`. The agent will then only resolve the file
|
|
17
|
+
* list; the override wins regardless of what the agent infers.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ReviewInputResolverService {
|
|
20
|
+
private readonly config;
|
|
21
|
+
private readonly projectRoot;
|
|
22
|
+
constructor(config: ReviewConfig, projectRoot: string);
|
|
23
|
+
resolve(input: string, scopeOverride?: Scope): Promise<ResolvedInput>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ReviewInputResolverService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewInputResolverService.d.ts","sourceRoot":"","sources":["../../../src/services/review/ReviewInputResolverService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMnD,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAK/C,OAAO,CACX,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,KAAK,GACpB,OAAO,CAAC,aAAa,CAAC;CAkG1B"}
|