@mcoda/core 0.1.7 → 0.1.9
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/CHANGELOG.md +4 -1
- package/README.md +22 -3
- package/dist/api/AgentsApi.d.ts +8 -1
- package/dist/api/AgentsApi.d.ts.map +1 -1
- package/dist/api/AgentsApi.js +70 -0
- package/dist/api/QaTasksApi.d.ts.map +1 -1
- package/dist/api/QaTasksApi.js +2 -0
- package/dist/api/TasksApi.d.ts.map +1 -1
- package/dist/api/TasksApi.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/prompts/PdrPrompts.d.ts.map +1 -1
- package/dist/prompts/PdrPrompts.js +3 -1
- package/dist/prompts/SdsPrompts.d.ts.map +1 -1
- package/dist/prompts/SdsPrompts.js +2 -0
- package/dist/services/agents/AgentRatingFormula.d.ts +27 -0
- package/dist/services/agents/AgentRatingFormula.d.ts.map +1 -0
- package/dist/services/agents/AgentRatingFormula.js +45 -0
- package/dist/services/agents/AgentRatingService.d.ts +41 -0
- package/dist/services/agents/AgentRatingService.d.ts.map +1 -0
- package/dist/services/agents/AgentRatingService.js +299 -0
- package/dist/services/agents/GatewayAgentService.d.ts +3 -0
- package/dist/services/agents/GatewayAgentService.d.ts.map +1 -1
- package/dist/services/agents/GatewayAgentService.js +68 -24
- package/dist/services/agents/GatewayHandoff.d.ts +7 -0
- package/dist/services/agents/GatewayHandoff.d.ts.map +1 -0
- package/dist/services/agents/GatewayHandoff.js +108 -0
- package/dist/services/backlog/TaskOrderingService.d.ts +1 -0
- package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -1
- package/dist/services/backlog/TaskOrderingService.js +19 -16
- package/dist/services/docs/DocsService.d.ts +11 -1
- package/dist/services/docs/DocsService.d.ts.map +1 -1
- package/dist/services/docs/DocsService.js +240 -52
- package/dist/services/execution/GatewayTrioService.d.ts +133 -0
- package/dist/services/execution/GatewayTrioService.d.ts.map +1 -0
- package/dist/services/execution/GatewayTrioService.js +1125 -0
- package/dist/services/execution/QaFollowupService.d.ts +1 -0
- package/dist/services/execution/QaFollowupService.d.ts.map +1 -1
- package/dist/services/execution/QaFollowupService.js +1 -0
- package/dist/services/execution/QaProfileService.d.ts +6 -0
- package/dist/services/execution/QaProfileService.d.ts.map +1 -1
- package/dist/services/execution/QaProfileService.js +165 -3
- package/dist/services/execution/QaTasksService.d.ts +18 -0
- package/dist/services/execution/QaTasksService.d.ts.map +1 -1
- package/dist/services/execution/QaTasksService.js +712 -34
- package/dist/services/execution/WorkOnTasksService.d.ts +14 -0
- package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
- package/dist/services/execution/WorkOnTasksService.js +1497 -240
- package/dist/services/openapi/OpenApiService.d.ts +10 -0
- package/dist/services/openapi/OpenApiService.d.ts.map +1 -1
- package/dist/services/openapi/OpenApiService.js +66 -10
- package/dist/services/planning/CreateTasksService.d.ts +6 -0
- package/dist/services/planning/CreateTasksService.d.ts.map +1 -1
- package/dist/services/planning/CreateTasksService.js +261 -28
- package/dist/services/planning/RefineTasksService.d.ts +5 -0
- package/dist/services/planning/RefineTasksService.d.ts.map +1 -1
- package/dist/services/planning/RefineTasksService.js +184 -35
- package/dist/services/review/CodeReviewService.d.ts +14 -0
- package/dist/services/review/CodeReviewService.d.ts.map +1 -1
- package/dist/services/review/CodeReviewService.js +657 -61
- package/dist/services/shared/ProjectGuidance.d.ts +6 -0
- package/dist/services/shared/ProjectGuidance.d.ts.map +1 -0
- package/dist/services/shared/ProjectGuidance.js +21 -0
- package/dist/services/tasks/TaskCommentFormatter.d.ts +20 -0
- package/dist/services/tasks/TaskCommentFormatter.d.ts.map +1 -0
- package/dist/services/tasks/TaskCommentFormatter.js +54 -0
- package/dist/workspace/WorkspaceManager.d.ts +4 -0
- package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
- package/dist/workspace/WorkspaceManager.js +3 -0
- package/package.json +5 -5
|
@@ -5,6 +5,7 @@ import { DocdexClient } from "@mcoda/integrations";
|
|
|
5
5
|
import { GlobalRepository, WorkspaceRepository } from "@mcoda/db";
|
|
6
6
|
import { JobService } from "../jobs/JobService.js";
|
|
7
7
|
import { RoutingService } from "../agents/RoutingService.js";
|
|
8
|
+
import { AgentRatingService } from "../agents/AgentRatingService.js";
|
|
8
9
|
import { createTaskKeyGenerator } from "./KeyHelpers.js";
|
|
9
10
|
const DEFAULT_STRATEGY = "auto";
|
|
10
11
|
const FORBIDDEN_TARGET_STATUSES = new Set(["ready_to_review", "ready_to_qa", "completed"]);
|
|
@@ -12,48 +13,142 @@ const DEFAULT_MAX_TASKS = 250;
|
|
|
12
13
|
const MAX_AGENT_OUTPUT_CHARS = 10000000;
|
|
13
14
|
const estimateTokens = (text) => Math.max(1, Math.ceil(text.length / 4));
|
|
14
15
|
const extractJson = (raw) => {
|
|
16
|
+
const fencedMatches = [...raw.matchAll(/```json([\s\S]*?)```/g)].map((match) => match[1]);
|
|
17
|
+
const stripped = raw.replace(/<think>[\s\S]*?<\/think>/g, "");
|
|
18
|
+
const candidates = [...fencedMatches, stripped, raw].filter((candidate) => candidate.trim().length > 0);
|
|
19
|
+
for (const candidate of candidates) {
|
|
20
|
+
const parsed = tryParseJson(candidate);
|
|
21
|
+
if (parsed !== undefined)
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
};
|
|
26
|
+
const tryParseJson = (value) => {
|
|
15
27
|
try {
|
|
16
|
-
|
|
17
|
-
const candidate = fenced ? fenced[1] : raw;
|
|
18
|
-
const start = candidate.indexOf("{");
|
|
19
|
-
const end = candidate.lastIndexOf("}");
|
|
20
|
-
if (start === -1 || end === -1 || end <= start)
|
|
21
|
-
return JSON.parse(raw);
|
|
22
|
-
return JSON.parse(candidate.slice(start, end + 1));
|
|
28
|
+
return JSON.parse(value);
|
|
23
29
|
}
|
|
24
30
|
catch {
|
|
31
|
+
// continue
|
|
32
|
+
}
|
|
33
|
+
const objects = extractJsonObjects(value).reverse();
|
|
34
|
+
for (const obj of objects) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(obj);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// continue
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
};
|
|
44
|
+
const extractJsonObjects = (value) => {
|
|
45
|
+
const results = [];
|
|
46
|
+
let depth = 0;
|
|
47
|
+
let start = -1;
|
|
48
|
+
let inString = false;
|
|
49
|
+
let escaped = false;
|
|
50
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
51
|
+
const ch = value[i];
|
|
52
|
+
if (inString) {
|
|
53
|
+
if (escaped) {
|
|
54
|
+
escaped = false;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (ch === "\\") {
|
|
58
|
+
escaped = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (ch === "\"")
|
|
62
|
+
inString = false;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (ch === "\"") {
|
|
66
|
+
inString = true;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (ch === "{") {
|
|
70
|
+
if (depth === 0)
|
|
71
|
+
start = i;
|
|
72
|
+
depth += 1;
|
|
73
|
+
}
|
|
74
|
+
else if (ch === "}") {
|
|
75
|
+
if (depth === 0)
|
|
76
|
+
continue;
|
|
77
|
+
depth -= 1;
|
|
78
|
+
if (depth === 0 && start >= 0) {
|
|
79
|
+
results.push(value.slice(start, i + 1));
|
|
80
|
+
start = -1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
};
|
|
86
|
+
const normalizePlanJson = (parsed) => {
|
|
87
|
+
if (!parsed)
|
|
25
88
|
return undefined;
|
|
89
|
+
if (Array.isArray(parsed)) {
|
|
90
|
+
return { operations: parsed };
|
|
26
91
|
}
|
|
92
|
+
if (Array.isArray(parsed.operations))
|
|
93
|
+
return parsed;
|
|
94
|
+
if (parsed.op) {
|
|
95
|
+
return { operations: [parsed] };
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
27
98
|
};
|
|
28
99
|
const normalizeOperation = (op) => {
|
|
29
100
|
if (!op || typeof op !== "object")
|
|
30
101
|
return op;
|
|
31
|
-
|
|
32
|
-
return op;
|
|
102
|
+
const opType = op.op;
|
|
33
103
|
const taskKey = op.taskKey ?? op.key ?? op.task ?? op.targetTaskKey ?? null;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
104
|
+
if (opType === "update_task") {
|
|
105
|
+
const updates = { ...op.updates };
|
|
106
|
+
const inlineFields = [
|
|
107
|
+
"title",
|
|
108
|
+
"description",
|
|
109
|
+
"acceptanceCriteria",
|
|
110
|
+
"type",
|
|
111
|
+
"status",
|
|
112
|
+
"storyPoints",
|
|
113
|
+
"priority",
|
|
114
|
+
"dependsOn",
|
|
115
|
+
"metadata",
|
|
116
|
+
];
|
|
117
|
+
for (const field of inlineFields) {
|
|
118
|
+
if (op[field] !== undefined && updates[field] === undefined) {
|
|
119
|
+
updates[field] = op[field];
|
|
120
|
+
}
|
|
39
121
|
}
|
|
122
|
+
return {
|
|
123
|
+
...op,
|
|
124
|
+
taskKey,
|
|
125
|
+
updates,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (opType === "split_task") {
|
|
129
|
+
const children = Array.isArray(op.children)
|
|
130
|
+
? op.children
|
|
131
|
+
: Array.isArray(op.subtasks)
|
|
132
|
+
? op.subtasks
|
|
133
|
+
: Array.isArray(op.newTasks)
|
|
134
|
+
? op.newTasks
|
|
135
|
+
: Array.isArray(op.tasks)
|
|
136
|
+
? op.tasks
|
|
137
|
+
: undefined;
|
|
138
|
+
return {
|
|
139
|
+
...op,
|
|
140
|
+
taskKey,
|
|
141
|
+
children,
|
|
142
|
+
};
|
|
40
143
|
}
|
|
41
144
|
return {
|
|
42
145
|
...op,
|
|
43
146
|
taskKey,
|
|
44
|
-
updates,
|
|
45
147
|
};
|
|
46
148
|
};
|
|
47
149
|
const safeParsePlan = (content) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (parsed && Array.isArray(parsed.operations))
|
|
51
|
-
return parsed;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
/* ignore */
|
|
55
|
-
}
|
|
56
|
-
return undefined;
|
|
150
|
+
const parsed = extractJson(content);
|
|
151
|
+
return normalizePlanJson(parsed);
|
|
57
152
|
};
|
|
58
153
|
const formatTaskSummary = (task) => {
|
|
59
154
|
return [
|
|
@@ -73,6 +168,7 @@ export class RefineTasksService {
|
|
|
73
168
|
this.repo = deps.repo;
|
|
74
169
|
this.workspaceRepo = deps.workspaceRepo;
|
|
75
170
|
this.routingService = deps.routingService;
|
|
171
|
+
this.ratingService = deps.ratingService;
|
|
76
172
|
}
|
|
77
173
|
static async create(workspace) {
|
|
78
174
|
const repo = await GlobalRepository.create();
|
|
@@ -119,6 +215,17 @@ export class RefineTasksService {
|
|
|
119
215
|
});
|
|
120
216
|
return resolved.agent;
|
|
121
217
|
}
|
|
218
|
+
ensureRatingService() {
|
|
219
|
+
if (!this.ratingService) {
|
|
220
|
+
this.ratingService = new AgentRatingService(this.workspace, {
|
|
221
|
+
workspaceRepo: this.workspaceRepo,
|
|
222
|
+
globalRepo: this.repo,
|
|
223
|
+
agentService: this.agentService,
|
|
224
|
+
routingService: this.routingService,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return this.ratingService;
|
|
228
|
+
}
|
|
122
229
|
async selectTasks(projectKey, filters) {
|
|
123
230
|
const db = this.workspaceRepo.getDb();
|
|
124
231
|
const warnings = [];
|
|
@@ -411,6 +518,8 @@ export class RefineTasksService {
|
|
|
411
518
|
group.historySummary || "(none)",
|
|
412
519
|
"Constraints:",
|
|
413
520
|
constraints,
|
|
521
|
+
"Example JSON:",
|
|
522
|
+
"{\"operations\":[{\"op\":\"update_task\",\"taskKey\":\"web-01-us-01-t01\",\"updates\":{\"title\":\"Refined title\",\"storyPoints\":3}}]}",
|
|
414
523
|
"Return JSON ONLY matching: { \"operations\": [UpdateTaskOp | SplitTaskOp | MergeTasksOp | UpdateEstimateOp] } where each item has an `op` discriminator (update_task|split_task|merge_tasks|update_estimate).",
|
|
415
524
|
].join("\n\n");
|
|
416
525
|
}
|
|
@@ -989,7 +1098,7 @@ export class RefineTasksService {
|
|
|
989
1098
|
timestamp: new Date().toISOString(),
|
|
990
1099
|
metadata: { command: "refine-tasks", action: "agent_refine", ...(metadata ?? {}) },
|
|
991
1100
|
});
|
|
992
|
-
return { raw: output, promptTokens, completionTokens };
|
|
1101
|
+
return { raw: output, promptTokens, completionTokens, agentId: agent.id };
|
|
993
1102
|
}
|
|
994
1103
|
async refineTasks(options) {
|
|
995
1104
|
const strategy = options.strategy ?? DEFAULT_STRATEGY;
|
|
@@ -1025,6 +1134,30 @@ export class RefineTasksService {
|
|
|
1025
1134
|
planOut: options.planOutPath,
|
|
1026
1135
|
},
|
|
1027
1136
|
});
|
|
1137
|
+
let ratingAgentId;
|
|
1138
|
+
const maybeRateAgent = async () => {
|
|
1139
|
+
if (!options.rateAgents || !ratingAgentId)
|
|
1140
|
+
return;
|
|
1141
|
+
try {
|
|
1142
|
+
const ratingService = this.ensureRatingService();
|
|
1143
|
+
await ratingService.rate({
|
|
1144
|
+
workspace: this.workspace,
|
|
1145
|
+
agentId: ratingAgentId,
|
|
1146
|
+
commandName: "refine-tasks",
|
|
1147
|
+
jobId: job.id,
|
|
1148
|
+
commandRunId: commandRun.id,
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
catch (error) {
|
|
1152
|
+
const message = `Agent rating failed: ${error.message ?? String(error)}`;
|
|
1153
|
+
try {
|
|
1154
|
+
await this.jobService.appendLog(job.id, `${message}\n`);
|
|
1155
|
+
}
|
|
1156
|
+
catch {
|
|
1157
|
+
/* ignore rating log failures */
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
};
|
|
1028
1161
|
try {
|
|
1029
1162
|
if (options.fromDb === false) {
|
|
1030
1163
|
throw new Error("refine-tasks currently only supports DB-backed selection; set --from-db true");
|
|
@@ -1166,17 +1299,30 @@ export class RefineTasksService {
|
|
|
1166
1299
|
await this.logWarningsToTasks(group.tasks.map((t) => t.id), job.id, commandRun.id, docWarnings.join("; "));
|
|
1167
1300
|
}
|
|
1168
1301
|
const prompt = this.buildStoryPrompt(group, strategy, docSummary);
|
|
1169
|
-
const
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1302
|
+
const parseOps = (raw) => {
|
|
1303
|
+
const parsed = normalizePlanJson(extractJson(raw));
|
|
1304
|
+
const ops = parsed?.operations && Array.isArray(parsed.operations) ? parsed.operations : [];
|
|
1305
|
+
const normalized = ops.map(normalizeOperation);
|
|
1306
|
+
return normalized.filter((op) => {
|
|
1307
|
+
const { valid, reason } = this.validateOperation(group, op);
|
|
1308
|
+
if (!valid && reason) {
|
|
1309
|
+
plan.warnings?.push(`Skipped op for story ${group.story.key}: ${reason}`);
|
|
1310
|
+
}
|
|
1311
|
+
return valid;
|
|
1312
|
+
});
|
|
1313
|
+
};
|
|
1314
|
+
const { raw, agentId } = await this.invokeAgent(options.agentName, prompt, agentStream, job.id, commandRun.id, { epicKey: group.epic.key, storyKey: group.story.key });
|
|
1315
|
+
ratingAgentId = agentId;
|
|
1316
|
+
let filtered = parseOps(raw);
|
|
1317
|
+
if (filtered.length === 0) {
|
|
1318
|
+
const retryPrompt = `${prompt}\n\nRETRY: Your previous response did not match the JSON schema. Return only a JSON object with an operations array (no prose, no markdown, no <think> tags).`;
|
|
1319
|
+
const retry = await this.invokeAgent(options.agentName, retryPrompt, agentStream, job.id, commandRun.id, { epicKey: group.epic.key, storyKey: group.story.key, retry: true });
|
|
1320
|
+
ratingAgentId = retry.agentId;
|
|
1321
|
+
filtered = parseOps(retry.raw);
|
|
1322
|
+
if (filtered.length === 0) {
|
|
1323
|
+
plan.warnings?.push(`No valid operations returned for story ${group.story.key}.`);
|
|
1177
1324
|
}
|
|
1178
|
-
|
|
1179
|
-
});
|
|
1325
|
+
}
|
|
1180
1326
|
plan.operations.push(...filtered);
|
|
1181
1327
|
}
|
|
1182
1328
|
catch (error) {
|
|
@@ -1222,6 +1368,7 @@ export class RefineTasksService {
|
|
|
1222
1368
|
lastCheckpoint: "no_operations",
|
|
1223
1369
|
});
|
|
1224
1370
|
await this.jobService.finishCommandRun(commandRun.id, "succeeded");
|
|
1371
|
+
await maybeRateAgent();
|
|
1225
1372
|
return {
|
|
1226
1373
|
jobId: job.id,
|
|
1227
1374
|
commandRunId: commandRun.id,
|
|
@@ -1246,6 +1393,7 @@ export class RefineTasksService {
|
|
|
1246
1393
|
lastCheckpoint: "dry_run",
|
|
1247
1394
|
});
|
|
1248
1395
|
await this.jobService.finishCommandRun(commandRun.id, "succeeded");
|
|
1396
|
+
await maybeRateAgent();
|
|
1249
1397
|
return {
|
|
1250
1398
|
jobId: job.id,
|
|
1251
1399
|
commandRunId: commandRun.id,
|
|
@@ -1303,6 +1451,7 @@ export class RefineTasksService {
|
|
|
1303
1451
|
lastCheckpoint: "completed",
|
|
1304
1452
|
});
|
|
1305
1453
|
await this.jobService.finishCommandRun(commandRun.id, "succeeded");
|
|
1454
|
+
await maybeRateAgent();
|
|
1306
1455
|
return {
|
|
1307
1456
|
jobId: job.id,
|
|
1308
1457
|
commandRunId: commandRun.id,
|
|
@@ -6,13 +6,16 @@ import { JobService } from "../jobs/JobService.js";
|
|
|
6
6
|
import { TaskSelectionFilters, TaskSelectionService } from "../execution/TaskSelectionService.js";
|
|
7
7
|
import { TaskStateService } from "../execution/TaskStateService.js";
|
|
8
8
|
import { RoutingService } from "../agents/RoutingService.js";
|
|
9
|
+
import { AgentRatingService } from "../agents/AgentRatingService.js";
|
|
9
10
|
export interface CodeReviewRequest extends TaskSelectionFilters {
|
|
10
11
|
workspace: WorkspaceResolution;
|
|
11
12
|
baseRef?: string;
|
|
12
13
|
dryRun?: boolean;
|
|
13
14
|
agentName?: string;
|
|
14
15
|
agentStream?: boolean;
|
|
16
|
+
rateAgents?: boolean;
|
|
15
17
|
resumeJobId?: string;
|
|
18
|
+
abortSignal?: AbortSignal;
|
|
16
19
|
}
|
|
17
20
|
export interface ReviewFinding {
|
|
18
21
|
type?: string;
|
|
@@ -27,6 +30,8 @@ export interface ReviewAgentResult {
|
|
|
27
30
|
summary?: string;
|
|
28
31
|
findings: ReviewFinding[];
|
|
29
32
|
testRecommendations?: string[];
|
|
33
|
+
resolvedSlugs?: string[];
|
|
34
|
+
unresolvedSlugs?: string[];
|
|
30
35
|
raw?: string;
|
|
31
36
|
}
|
|
32
37
|
export interface TaskReviewResult {
|
|
@@ -59,6 +64,7 @@ export declare class CodeReviewService {
|
|
|
59
64
|
private vcs;
|
|
60
65
|
private taskLogSeq;
|
|
61
66
|
private routingService;
|
|
67
|
+
private ratingService?;
|
|
62
68
|
constructor(workspace: WorkspaceResolution, deps: {
|
|
63
69
|
agentService: AgentService;
|
|
64
70
|
docdex: DocdexClient;
|
|
@@ -69,6 +75,7 @@ export declare class CodeReviewService {
|
|
|
69
75
|
repo: GlobalRepository;
|
|
70
76
|
vcsClient?: VcsClient;
|
|
71
77
|
routingService: RoutingService;
|
|
78
|
+
ratingService?: AgentRatingService;
|
|
72
79
|
});
|
|
73
80
|
static create(workspace: WorkspaceResolution): Promise<CodeReviewService>;
|
|
74
81
|
close(): Promise<void>;
|
|
@@ -77,6 +84,8 @@ export declare class CodeReviewService {
|
|
|
77
84
|
private loadPrompts;
|
|
78
85
|
private loadRunbookAndChecklists;
|
|
79
86
|
private resolveAgent;
|
|
87
|
+
private ensureRatingService;
|
|
88
|
+
private resolveTaskComplexity;
|
|
80
89
|
private selectTasksViaApi;
|
|
81
90
|
private persistState;
|
|
82
91
|
private loadState;
|
|
@@ -85,6 +94,11 @@ export declare class CodeReviewService {
|
|
|
85
94
|
private gatherDocContext;
|
|
86
95
|
private buildReviewPrompt;
|
|
87
96
|
private buildHistorySummary;
|
|
97
|
+
private loadCommentContext;
|
|
98
|
+
private commentSlugKey;
|
|
99
|
+
private buildCommentSlugIndex;
|
|
100
|
+
private resolveFindingSlug;
|
|
101
|
+
private applyCommentResolutions;
|
|
88
102
|
private extractPathsFromDiff;
|
|
89
103
|
private buildOpenApiSlice;
|
|
90
104
|
private buildDiff;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeReviewService.d.ts","sourceRoot":"","sources":["../../../src/services/review/CodeReviewService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"CodeReviewService.d.ts","sourceRoot":"","sources":["../../../src/services/review/CodeReviewService.ts"],"names":[],"mappings":"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"}
|