@sentry/warden 0.6.0 → 0.7.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 +1 -1
- package/dist/cli/commands/add.js +1 -1
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/setup-app/browser.d.ts +1 -0
- package/dist/cli/commands/setup-app/browser.d.ts.map +1 -1
- package/dist/cli/commands/setup-app/browser.js +10 -5
- package/dist/cli/commands/setup-app/browser.js.map +1 -1
- package/dist/cli/git.js +24 -24
- package/dist/cli/git.js.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +29 -27
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output/ink-runner.d.ts.map +1 -1
- package/dist/cli/output/ink-runner.js +5 -7
- package/dist/cli/output/ink-runner.js.map +1 -1
- package/dist/cli/output/tasks.d.ts +1 -1
- package/dist/cli/output/tasks.d.ts.map +1 -1
- package/dist/cli/output/tasks.js +194 -161
- package/dist/cli/output/tasks.js.map +1 -1
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +41 -34
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +14 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +12 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/diff/context.d.ts.map +1 -1
- package/dist/diff/context.js +5 -1
- package/dist/diff/context.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/output/dedup.d.ts +22 -0
- package/dist/output/dedup.d.ts.map +1 -1
- package/dist/output/dedup.js +180 -0
- package/dist/output/dedup.js.map +1 -1
- package/dist/output/github-checks.d.ts +3 -1
- package/dist/output/github-checks.d.ts.map +1 -1
- package/dist/output/github-checks.js +3 -3
- package/dist/output/github-checks.js.map +1 -1
- package/dist/output/github-issues.d.ts.map +1 -1
- package/dist/output/github-issues.js +8 -2
- package/dist/output/github-issues.js.map +1 -1
- package/dist/output/renderer.d.ts +3 -1
- package/dist/output/renderer.d.ts.map +1 -1
- package/dist/output/renderer.js +39 -9
- package/dist/output/renderer.js.map +1 -1
- package/dist/output/stale.d.ts +6 -2
- package/dist/output/stale.d.ts.map +1 -1
- package/dist/output/stale.js +4 -4
- package/dist/output/stale.js.map +1 -1
- package/dist/output/types.d.ts +2 -0
- package/dist/output/types.d.ts.map +1 -1
- package/dist/sdk/analyze.d.ts.map +1 -1
- package/dist/sdk/analyze.js +287 -205
- package/dist/sdk/analyze.js.map +1 -1
- package/dist/sentry.d.ts +17 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +119 -0
- package/dist/sentry.js.map +1 -0
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +2 -2
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/loader.d.ts +48 -6
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +134 -57
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/remote.d.ts +12 -0
- package/dist/skills/remote.d.ts.map +1 -1
- package/dist/skills/remote.js +81 -32
- package/dist/skills/remote.js.map +1 -1
- package/dist/utils/async.d.ts +14 -1
- package/dist/utils/async.d.ts.map +1 -1
- package/dist/utils/async.js +29 -7
- package/dist/utils/async.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +3 -2
- package/plugins/warden/skills/warden/references/creating-skills.md +2 -3
package/dist/config/loader.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { parse as parseToml } from 'smol-toml';
|
|
4
|
+
import { Sentry } from '../sentry.js';
|
|
4
5
|
import { WardenConfigSchema, } from './schema.js';
|
|
5
6
|
export class ConfigLoadError extends Error {
|
|
6
7
|
constructor(message, options) {
|
|
@@ -9,40 +10,42 @@ export class ConfigLoadError extends Error {
|
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
12
|
export function loadWardenConfig(repoPath) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
'
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
13
|
+
return Sentry.startSpan({ op: 'config.load', name: 'load config' }, () => {
|
|
14
|
+
const configPath = join(repoPath, 'warden.toml');
|
|
15
|
+
if (!existsSync(configPath)) {
|
|
16
|
+
throw new ConfigLoadError(`Configuration file not found: ${configPath}`);
|
|
17
|
+
}
|
|
18
|
+
let content;
|
|
19
|
+
try {
|
|
20
|
+
content = readFileSync(configPath, 'utf-8');
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new ConfigLoadError(`Failed to read configuration file: ${configPath}`, { cause: error });
|
|
24
|
+
}
|
|
25
|
+
let rawConfig;
|
|
26
|
+
try {
|
|
27
|
+
rawConfig = parseToml(content);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new ConfigLoadError('Failed to parse TOML configuration', { cause: error });
|
|
31
|
+
}
|
|
32
|
+
// Detect legacy [[triggers]] format and provide migration guidance
|
|
33
|
+
if (rawConfig && typeof rawConfig === 'object' && 'triggers' in rawConfig) {
|
|
34
|
+
throw new ConfigLoadError('Legacy [[triggers]] format detected. Migrate to [[skills]] format:\n\n' +
|
|
35
|
+
' [[triggers]] → [[skills]]\n' +
|
|
36
|
+
' name = "my-skill" name = "my-skill"\n' +
|
|
37
|
+
' event = "pull_request" → [[skills.triggers]]\n' +
|
|
38
|
+
' skill = "my-skill" type = "pull_request"\n' +
|
|
39
|
+
' actions = [...] actions = [...]\n\n' +
|
|
40
|
+
'See the migration guide for details.');
|
|
41
|
+
}
|
|
42
|
+
const result = WardenConfigSchema.safeParse(rawConfig);
|
|
43
|
+
if (!result.success) {
|
|
44
|
+
const issues = result.error.issues.map(i => ` - ${i.path.join('.')}: ${i.message}`).join('\n');
|
|
45
|
+
throw new ConfigLoadError(`Invalid configuration:\n${issues}`);
|
|
46
|
+
}
|
|
47
|
+
return result.data;
|
|
48
|
+
});
|
|
46
49
|
}
|
|
47
50
|
/**
|
|
48
51
|
* Convert empty strings to undefined.
|
|
@@ -95,6 +98,8 @@ export function resolveSkillConfigs(config, cliModel) {
|
|
|
95
98
|
reportOn: skill.reportOn ?? defaults?.reportOn,
|
|
96
99
|
maxFindings: skill.maxFindings ?? defaults?.maxFindings,
|
|
97
100
|
reportOnSuccess: skill.reportOnSuccess ?? defaults?.reportOnSuccess,
|
|
101
|
+
requestChanges: skill.requestChanges ?? defaults?.requestChanges,
|
|
102
|
+
failCheck: skill.failCheck ?? defaults?.failCheck,
|
|
98
103
|
model: baseModel,
|
|
99
104
|
maxTurns: skill.maxTurns ?? defaults?.maxTurns,
|
|
100
105
|
});
|
|
@@ -113,6 +118,8 @@ export function resolveSkillConfigs(config, cliModel) {
|
|
|
113
118
|
reportOn: trigger.reportOn ?? skill.reportOn ?? defaults?.reportOn,
|
|
114
119
|
maxFindings: trigger.maxFindings ?? skill.maxFindings ?? defaults?.maxFindings,
|
|
115
120
|
reportOnSuccess: trigger.reportOnSuccess ?? skill.reportOnSuccess ?? defaults?.reportOnSuccess,
|
|
121
|
+
requestChanges: trigger.requestChanges ?? skill.requestChanges ?? defaults?.requestChanges,
|
|
122
|
+
failCheck: trigger.failCheck ?? skill.failCheck ?? defaults?.failCheck,
|
|
116
123
|
model: emptyToUndefined(trigger.model) ?? baseModel,
|
|
117
124
|
maxTurns: trigger.maxTurns ?? skill.maxTurns ?? defaults?.maxTurns,
|
|
118
125
|
schedule: trigger.schedule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,kBAAkB,GAInB,MAAM,aAAa,CAAC;AAGrB,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -100,6 +100,8 @@ export declare const SkillTriggerSchema: z.ZodObject<{
|
|
|
100
100
|
}>>;
|
|
101
101
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
102
102
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
103
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
104
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
103
105
|
model: z.ZodOptional<z.ZodString>;
|
|
104
106
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
105
107
|
schedule: z.ZodOptional<z.ZodObject<{
|
|
@@ -132,6 +134,8 @@ export declare const SkillConfigSchema: z.ZodObject<{
|
|
|
132
134
|
}>>;
|
|
133
135
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
134
136
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
137
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
138
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
135
139
|
model: z.ZodOptional<z.ZodString>;
|
|
136
140
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
137
141
|
triggers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -159,6 +163,8 @@ export declare const SkillConfigSchema: z.ZodObject<{
|
|
|
159
163
|
}>>;
|
|
160
164
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
161
165
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
166
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
162
168
|
model: z.ZodOptional<z.ZodString>;
|
|
163
169
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
164
170
|
schedule: z.ZodOptional<z.ZodObject<{
|
|
@@ -223,6 +229,8 @@ export declare const DefaultsSchema: z.ZodObject<{
|
|
|
223
229
|
}>>;
|
|
224
230
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
225
231
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
232
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
233
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
226
234
|
model: z.ZodOptional<z.ZodString>;
|
|
227
235
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
228
236
|
ignorePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -266,6 +274,8 @@ export declare const WardenConfigSchema: z.ZodObject<{
|
|
|
266
274
|
}>>;
|
|
267
275
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
268
276
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
277
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
278
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
269
279
|
model: z.ZodOptional<z.ZodString>;
|
|
270
280
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
271
281
|
ignorePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -310,6 +320,8 @@ export declare const WardenConfigSchema: z.ZodObject<{
|
|
|
310
320
|
}>>;
|
|
311
321
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
312
322
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
323
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
324
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
313
325
|
model: z.ZodOptional<z.ZodString>;
|
|
314
326
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
315
327
|
triggers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -337,6 +349,8 @@ export declare const WardenConfigSchema: z.ZodObject<{
|
|
|
337
349
|
}>>;
|
|
338
350
|
maxFindings: z.ZodOptional<z.ZodNumber>;
|
|
339
351
|
reportOnSuccess: z.ZodOptional<z.ZodBoolean>;
|
|
352
|
+
requestChanges: z.ZodOptional<z.ZodBoolean>;
|
|
353
|
+
failCheck: z.ZodOptional<z.ZodBoolean>;
|
|
340
354
|
model: z.ZodOptional<z.ZodString>;
|
|
341
355
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
342
356
|
schedule: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;EASzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAG3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,iBAAiB;;;;EAAgD,CAAC;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;EASzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAG3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,iBAAiB;;;;EAAgD,CAAC;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8B9B,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuB5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,kBAAkB;;iBAG7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,iBAAiB;;;;;;;iBAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAK/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgC3B,CAAC;AACL,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -48,6 +48,10 @@ export const SkillTriggerSchema = z.object({
|
|
|
48
48
|
reportOn: SeverityThresholdSchema.optional(),
|
|
49
49
|
maxFindings: z.number().int().positive().optional(),
|
|
50
50
|
reportOnSuccess: z.boolean().optional(),
|
|
51
|
+
/** Use REQUEST_CHANGES review event when findings exceed failOn */
|
|
52
|
+
requestChanges: z.boolean().optional(),
|
|
53
|
+
/** Fail the check run when findings exceed failOn */
|
|
54
|
+
failCheck: z.boolean().optional(),
|
|
51
55
|
model: z.string().optional(),
|
|
52
56
|
maxTurns: z.number().int().positive().optional(),
|
|
53
57
|
/** Schedule-specific configuration. Only used when type is 'schedule'. */
|
|
@@ -76,6 +80,10 @@ export const SkillConfigSchema = z.object({
|
|
|
76
80
|
reportOn: SeverityThresholdSchema.optional(),
|
|
77
81
|
maxFindings: z.number().int().positive().optional(),
|
|
78
82
|
reportOnSuccess: z.boolean().optional(),
|
|
83
|
+
/** Use REQUEST_CHANGES review event when findings exceed failOn */
|
|
84
|
+
requestChanges: z.boolean().optional(),
|
|
85
|
+
/** Fail the check run when findings exceed failOn */
|
|
86
|
+
failCheck: z.boolean().optional(),
|
|
79
87
|
/** Model to use for this skill (e.g., 'claude-sonnet-4-20250514'). Uses SDK default if not specified. */
|
|
80
88
|
model: z.string().optional(),
|
|
81
89
|
/** Maximum agentic turns (API round-trips) per hunk analysis. Overrides defaults.maxTurns. */
|
|
@@ -120,6 +128,10 @@ export const DefaultsSchema = z.object({
|
|
|
120
128
|
maxFindings: z.number().int().positive().optional(),
|
|
121
129
|
/** Report even when there are no findings (default: false) */
|
|
122
130
|
reportOnSuccess: z.boolean().optional(),
|
|
131
|
+
/** Use REQUEST_CHANGES review event when findings exceed failOn. Default: true */
|
|
132
|
+
requestChanges: z.boolean().optional(),
|
|
133
|
+
/** Fail the check run when findings exceed failOn. Default: false */
|
|
134
|
+
failCheck: z.boolean().optional(),
|
|
123
135
|
/** Default model for all skills (e.g., 'claude-sonnet-4-20250514') */
|
|
124
136
|
model: z.string().optional(),
|
|
125
137
|
/** Maximum agentic turns (API round-trips) per hunk analysis. Default: 50 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAGH,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAGH,mBAAmB;AACnB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,0GAA0G;IAC1G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,oEAAoE;IACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,0DAA0D;IAC1D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACvC,wDAAwD;IACxD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;CAClD,CAAC,CAAC;AAGH,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAG/E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,2EAA2E;IAC3E,IAAI,EAAE,iBAAiB;IACvB,yDAAyD;IACzD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,kDAAkD;IAClD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE;IACP,4CAA4C;IAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,EACD;IACE,OAAO,EAAE,+CAA+C;IACxD,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CACF,CAAC;AAGF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,+BAA+B;IAC/B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,yFAAyF;IACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,iDAAiD;IACjD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,yGAAyG;IACzG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,8FAA8F;IAC9F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,uFAAuF;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAGH,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,qDAAqD;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAGH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,+DAA+D;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,kFAAkF;IAClF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CACjE,CAAC,CAAC;AAGH,oDAAoD;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,6CAA6C;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,yDAAyD;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,8DAA8D;IAC9D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC;AAGH,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,+CAA+C;IAC/C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IACnD,kDAAkD;IAClD,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAGH,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,sDAAsD;IACtD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,qDAAqD;IACrD,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,8DAA8D;IAC9D,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,sEAAsE;IACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,+CAA+C;IAC/C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,6GAA6G;IAC7G,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,qEAAqE;IACrE,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACzC,+FAA+F;IAC/F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAGH,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,0BAA0B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxE,IAAI,EAAE,CAAC,QAAQ,CAAC;SACjB,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,QAAQ,CAAC;wBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;wBAC3B,OAAO,EAAE,qDAAqD;wBAC9D,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAGH,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAGH,mBAAmB;AACnB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,0GAA0G;IAC1G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,oEAAoE;IACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,0DAA0D;IAC1D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACvC,wDAAwD;IACxD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;CAClD,CAAC,CAAC;AAGH,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAG/E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,2EAA2E;IAC3E,IAAI,EAAE,iBAAiB;IACvB,yDAAyD;IACzD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,kDAAkD;IAClD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,mEAAmE;IACnE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,qDAAqD;IACrD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC,MAAM,CACP,CAAC,IAAI,EAAE,EAAE;IACP,4CAA4C;IAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,EACD;IACE,OAAO,EAAE,+CAA+C;IACxD,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CACF,CAAC;AAGF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,+BAA+B;IAC/B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,yFAAyF;IACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,iDAAiD;IACjD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,mEAAmE;IACnE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,qDAAqD;IACrD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,yGAAyG;IACzG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,8FAA8F;IAC9F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,uFAAuF;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAGH,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,qDAAqD;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAGH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,+DAA+D;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,kFAAkF;IAClF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CACjE,CAAC,CAAC;AAGH,oDAAoD;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,6CAA6C;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,yDAAyD;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,8DAA8D;IAC9D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC;AAGH,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,+CAA+C;IAC/C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IACnD,kDAAkD;IAClD,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAGH,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,sDAAsD;IACtD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,qDAAqD;IACrD,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,8DAA8D;IAC9D,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,kFAAkF;IAClF,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,qEAAqE;IACrE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,sEAAsE;IACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,+CAA+C;IAC/C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,6GAA6G;IAC7G,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,qEAAqE;IACrE,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACzC,+FAA+F;IAC/F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAGH,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,0BAA0B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxE,IAAI,EAAE,CAAC,QAAQ,CAAC;SACjB,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,QAAQ,CAAC;wBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;wBAC3B,OAAO,EAAE,qDAAqD;wBAC9D,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/diff/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMxD,0EAA0E;AAC1E,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAyBD,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,+CAA+C;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2DD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,SAAK,GAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/diff/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMxD,0EAA0E;AAC1E,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAyBD,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,+CAA+C;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2DD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,SAAK,GAChB,eAAe,CAgCjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,YAAY,SAAK,GAChB,eAAe,EAAE,CAInB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAwCtE"}
|
package/dist/diff/context.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
3
|
import { getExpandedLineRange } from './parser.js';
|
|
4
4
|
/** Cache for file contents to avoid repeated reads */
|
|
5
5
|
const fileCache = new Map();
|
|
@@ -84,6 +84,10 @@ function readFileLines(filePath, startLine, endLine) {
|
|
|
84
84
|
*/
|
|
85
85
|
export function expandHunkContext(repoPath, filename, hunk, contextLines = 20) {
|
|
86
86
|
const filePath = join(repoPath, filename);
|
|
87
|
+
// Defense-in-depth: ensure filename doesn't escape repo directory
|
|
88
|
+
if (!resolve(filePath).startsWith(resolve(repoPath) + '/')) {
|
|
89
|
+
return { filename, hunk, contextBefore: [], contextAfter: [], contextStartLine: 1, language: detectLanguage(filename) };
|
|
90
|
+
}
|
|
87
91
|
const expandedRange = getExpandedLineRange(hunk, contextLines);
|
|
88
92
|
// Read context before the hunk
|
|
89
93
|
const contextBefore = readFileLines(filePath, expandedRange.start, hunk.newStart - 1);
|
package/dist/diff/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/diff/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/diff/context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export { SkillDefinitionSchema, SkillConfigSchema, SkillTriggerSchema, TriggerTy
|
|
|
4
4
|
export type { SkillDefinition, SkillConfig, SkillTrigger, TriggerType, WardenConfig, ResolvedTrigger, } from './config/index.js';
|
|
5
5
|
export { runSkill, SkillRunnerError } from './sdk/runner.js';
|
|
6
6
|
export type { SkillRunnerOptions, SkillRunnerCallbacks } from './sdk/runner.js';
|
|
7
|
-
export { resolveSkillAsync, SkillLoaderError, } from './skills/index.js';
|
|
7
|
+
export { resolveSkillAsync, resolveAgentAsync, SkillLoaderError, } from './skills/index.js';
|
|
8
|
+
export type { AgentDefinition } from './skills/index.js';
|
|
8
9
|
export { buildEventContext, EventContextError } from './event/context.js';
|
|
9
10
|
export { matchTrigger, matchGlob, filterContextByPaths, shouldFail, countFindingsAtOrAbove, countSeverity, } from './triggers/matcher.js';
|
|
10
11
|
export { renderSkillReport } from './output/renderer.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,cAAc,EACd,cAAc,EAEd,cAAc,EAEd,kBAAkB,EAElB,aAAa,EAEb,gBAAgB,EAEhB,iBAAiB,EAEjB,qBAAqB,EACrB,uBAAuB,EAEvB,gBAAgB,EAEhB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,UAAU,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAEL,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAElB,gBAAgB,EAChB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKhF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,cAAc,EACd,cAAc,EAEd,cAAc,EAEd,kBAAkB,EAElB,aAAa,EAEb,gBAAgB,EAEhB,iBAAiB,EAEjB,qBAAqB,EACrB,uBAAuB,EAEvB,gBAAgB,EAEhB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,UAAU,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAEL,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAElB,gBAAgB,EAChB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKhF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK1E,OAAO,EACL,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACtB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43,7 +43,7 @@ export { runSkill, SkillRunnerError } from './sdk/runner.js';
|
|
|
43
43
|
// -----------------------------------------------------------------------------
|
|
44
44
|
// Skills
|
|
45
45
|
// -----------------------------------------------------------------------------
|
|
46
|
-
export { resolveSkillAsync, SkillLoaderError, } from './skills/index.js';
|
|
46
|
+
export { resolveSkillAsync, resolveAgentAsync, SkillLoaderError, } from './skills/index.js';
|
|
47
47
|
// -----------------------------------------------------------------------------
|
|
48
48
|
// Event Context
|
|
49
49
|
// -----------------------------------------------------------------------------
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAChF,qEAAqE;AACrE,oDAAoD;AACpD,gFAAgF;AAEhF,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAChF,OAAO;AACL,WAAW;AACX,cAAc,EACd,cAAc;AACd,WAAW;AACX,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,UAAU;AACV,aAAa;AACb,kDAAkD;AAClD,gBAAgB;AAChB,eAAe;AACf,iBAAiB;AACjB,gBAAgB;AAChB,qBAAqB,EACrB,uBAAuB;AACvB,eAAe;AACf,gBAAgB;AAChB,UAAU;AACV,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAiB1B,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAChF,OAAO;AACL,UAAU;AACV,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB;AAClB,YAAY;AACZ,gBAAgB,EAChB,mBAAmB;AACnB,SAAS;AACT,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAW3B,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAI7D,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAChF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAChF,qEAAqE;AACrE,oDAAoD;AACpD,gFAAgF;AAEhF,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAChF,OAAO;AACL,WAAW;AACX,cAAc,EACd,cAAc;AACd,WAAW;AACX,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,UAAU;AACV,aAAa;AACb,kDAAkD;AAClD,gBAAgB;AAChB,eAAe;AACf,iBAAiB;AACjB,gBAAgB;AAChB,qBAAqB,EACrB,uBAAuB;AACvB,eAAe;AACf,gBAAgB;AAChB,UAAU;AACV,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAiB1B,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAChF,OAAO;AACL,UAAU;AACV,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB;AAClB,YAAY;AACZ,gBAAgB,EAChB,mBAAmB;AACnB,SAAS;AACT,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAW3B,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAI7D,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAChF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAI3B,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAChF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,sBAAsB,EACtB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/output/dedup.d.ts
CHANGED
|
@@ -142,6 +142,28 @@ export declare function processDuplicateActions(octokit: Octokit, owner: string,
|
|
|
142
142
|
* Returns null if the finding has no location.
|
|
143
143
|
*/
|
|
144
144
|
export declare function findingToExistingComment(finding: Finding, skill?: string): ExistingComment | null;
|
|
145
|
+
/**
|
|
146
|
+
* Result from consolidating findings within a single batch.
|
|
147
|
+
*/
|
|
148
|
+
export interface ConsolidateResult {
|
|
149
|
+
findings: Finding[];
|
|
150
|
+
removedCount: number;
|
|
151
|
+
usage?: UsageStats;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Consolidate findings within a single batch to remove duplicates that describe
|
|
155
|
+
* the same root cause. Three-phase approach:
|
|
156
|
+
*
|
|
157
|
+
* 1. Hash dedup: remove exact duplicates (same path:line:contentHash)
|
|
158
|
+
* 2. Proximity grouping: identify clusters of findings within 5 lines of each other
|
|
159
|
+
* 3. LLM consolidation: ask Haiku to group findings by root cause (only when proximity matches exist)
|
|
160
|
+
*
|
|
161
|
+
* For each group, keeps the highest-severity finding.
|
|
162
|
+
*/
|
|
163
|
+
export declare function consolidateBatchFindings(findings: Finding[], options?: {
|
|
164
|
+
apiKey?: string;
|
|
165
|
+
hashOnly?: boolean;
|
|
166
|
+
}): Promise<ConsolidateResult>;
|
|
145
167
|
/**
|
|
146
168
|
* Deduplicate findings against existing comments.
|
|
147
169
|
* Returns non-duplicate findings and actions to take for duplicates.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/output/dedup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/output/dedup.ts"],"names":[],"mappings":"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"}
|
package/dist/output/dedup.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { SEVERITY_ORDER, CONFIDENCE_ORDER } from '../types/index.js';
|
|
3
4
|
import { callHaiku } from '../sdk/haiku.js';
|
|
4
5
|
/**
|
|
5
6
|
* Generate a short content hash from title and description.
|
|
@@ -370,6 +371,185 @@ export function findingToExistingComment(finding, skill) {
|
|
|
370
371
|
skills: skill ? [skill] : [],
|
|
371
372
|
};
|
|
372
373
|
}
|
|
374
|
+
// -----------------------------------------------------------------------------
|
|
375
|
+
// Intra-batch consolidation
|
|
376
|
+
// -----------------------------------------------------------------------------
|
|
377
|
+
const PROXIMITY_THRESHOLD = 5;
|
|
378
|
+
/** Schema for LLM consolidation response: groups of finding indices that share a root cause. */
|
|
379
|
+
const ConsolidationGroupsSchema = z.array(z.array(z.number().int()));
|
|
380
|
+
/**
|
|
381
|
+
* Get the effective line number for a finding (endLine if present, otherwise startLine).
|
|
382
|
+
*/
|
|
383
|
+
function findingLine(f) {
|
|
384
|
+
return f.location?.endLine ?? f.location?.startLine ?? 0;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Compare two findings by severity (lower = more severe), then confidence, then position.
|
|
388
|
+
* Returns negative if `a` should be preferred over `b`.
|
|
389
|
+
*/
|
|
390
|
+
function compareFindingPriority(a, b) {
|
|
391
|
+
const sevDiff = SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity];
|
|
392
|
+
if (sevDiff !== 0)
|
|
393
|
+
return sevDiff;
|
|
394
|
+
const confA = CONFIDENCE_ORDER[a.confidence ?? 'low'];
|
|
395
|
+
const confB = CONFIDENCE_ORDER[b.confidence ?? 'low'];
|
|
396
|
+
const confDiff = confA - confB;
|
|
397
|
+
if (confDiff !== 0)
|
|
398
|
+
return confDiff;
|
|
399
|
+
return findingLine(a) - findingLine(b);
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Pick the best finding from a group (highest severity, then confidence, then position).
|
|
403
|
+
*/
|
|
404
|
+
function pickWinner(group) {
|
|
405
|
+
const sorted = [...group].sort(compareFindingPriority);
|
|
406
|
+
// group is guaranteed to have at least 2 elements by callers
|
|
407
|
+
const winner = sorted[0];
|
|
408
|
+
if (!winner)
|
|
409
|
+
throw new Error('pickWinner called with empty group');
|
|
410
|
+
return winner;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Group findings by file path, then identify clusters where findings are within
|
|
414
|
+
* PROXIMITY_THRESHOLD lines of each other. Returns only clusters with 2+ findings.
|
|
415
|
+
*/
|
|
416
|
+
function findProximityClusters(findings) {
|
|
417
|
+
// Group by file path
|
|
418
|
+
const byPath = new Map();
|
|
419
|
+
for (const f of findings) {
|
|
420
|
+
const path = f.location?.path ?? '';
|
|
421
|
+
const existing = byPath.get(path);
|
|
422
|
+
if (existing) {
|
|
423
|
+
existing.push(f);
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
byPath.set(path, [f]);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
const clusters = [];
|
|
430
|
+
for (const group of byPath.values()) {
|
|
431
|
+
if (group.length < 2)
|
|
432
|
+
continue;
|
|
433
|
+
// Sort by line number
|
|
434
|
+
const sorted = [...group].sort((a, b) => findingLine(a) - findingLine(b));
|
|
435
|
+
// Single-linkage clustering: consecutive findings within PROXIMITY_THRESHOLD
|
|
436
|
+
// lines of each other are grouped together.
|
|
437
|
+
const first = sorted[0];
|
|
438
|
+
if (!first)
|
|
439
|
+
continue;
|
|
440
|
+
let current = [first];
|
|
441
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
442
|
+
const prev = sorted[i - 1];
|
|
443
|
+
const curr = sorted[i];
|
|
444
|
+
if (!prev || !curr)
|
|
445
|
+
continue;
|
|
446
|
+
if (findingLine(curr) - findingLine(prev) <= PROXIMITY_THRESHOLD) {
|
|
447
|
+
current.push(curr);
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
if (current.length >= 2)
|
|
451
|
+
clusters.push(current);
|
|
452
|
+
current = [curr];
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
if (current.length >= 2)
|
|
456
|
+
clusters.push(current);
|
|
457
|
+
}
|
|
458
|
+
return clusters;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Consolidate findings within a single batch to remove duplicates that describe
|
|
462
|
+
* the same root cause. Three-phase approach:
|
|
463
|
+
*
|
|
464
|
+
* 1. Hash dedup: remove exact duplicates (same path:line:contentHash)
|
|
465
|
+
* 2. Proximity grouping: identify clusters of findings within 5 lines of each other
|
|
466
|
+
* 3. LLM consolidation: ask Haiku to group findings by root cause (only when proximity matches exist)
|
|
467
|
+
*
|
|
468
|
+
* For each group, keeps the highest-severity finding.
|
|
469
|
+
*/
|
|
470
|
+
export async function consolidateBatchFindings(findings, options = {}) {
|
|
471
|
+
if (findings.length <= 1) {
|
|
472
|
+
return { findings, removedCount: 0 };
|
|
473
|
+
}
|
|
474
|
+
// Phase 1: Hash dedup within batch
|
|
475
|
+
const seen = new Set();
|
|
476
|
+
const hashDeduped = [];
|
|
477
|
+
for (const f of findings) {
|
|
478
|
+
const hash = generateContentHash(f.title, f.description);
|
|
479
|
+
const line = findingLine(f);
|
|
480
|
+
const path = f.location?.path ?? '';
|
|
481
|
+
const key = `${path}:${line}:${hash}`;
|
|
482
|
+
if (seen.has(key))
|
|
483
|
+
continue;
|
|
484
|
+
seen.add(key);
|
|
485
|
+
hashDeduped.push(f);
|
|
486
|
+
}
|
|
487
|
+
const hashRemovedCount = findings.length - hashDeduped.length;
|
|
488
|
+
if (hashRemovedCount > 0) {
|
|
489
|
+
console.log(`Consolidate: ${hashRemovedCount} exact duplicate findings removed within batch`);
|
|
490
|
+
}
|
|
491
|
+
// Phase 2: Proximity grouping
|
|
492
|
+
const clusters = findProximityClusters(hashDeduped);
|
|
493
|
+
// If no proximity clusters or hash-only mode or no API key, return hash-deduped results
|
|
494
|
+
if (clusters.length === 0 || options.hashOnly || !options.apiKey) {
|
|
495
|
+
return { findings: hashDeduped, removedCount: hashRemovedCount };
|
|
496
|
+
}
|
|
497
|
+
// Phase 3: LLM consolidation for proximity clusters
|
|
498
|
+
// Only send clustered findings to the LLM (deduplicated across clusters)
|
|
499
|
+
const clusteredList = [...new Set(clusters.flat())];
|
|
500
|
+
const findingsList = clusteredList
|
|
501
|
+
.map((f, i) => {
|
|
502
|
+
const line = findingLine(f);
|
|
503
|
+
const loc = f.location ? `${f.location.path}:${line}` : 'general';
|
|
504
|
+
return `${i + 1}. [${loc}] (${f.severity}) "${f.title}" - ${f.description}`;
|
|
505
|
+
})
|
|
506
|
+
.join('\n');
|
|
507
|
+
const prompt = `You are deduplicating code review findings. Group findings that describe the SAME root cause or bug.
|
|
508
|
+
|
|
509
|
+
Findings:
|
|
510
|
+
${findingsList}
|
|
511
|
+
|
|
512
|
+
Return a JSON array of arrays, where each inner array contains the 1-based indices of findings that describe the same root cause.
|
|
513
|
+
Only group findings that are truly about the same underlying issue. Findings about different issues should NOT be grouped even if they're nearby.
|
|
514
|
+
Singletons (findings with no duplicates) should not appear in any group.
|
|
515
|
+
|
|
516
|
+
Return ONLY the JSON array. Return [] if no findings share a root cause.`;
|
|
517
|
+
const result = await callHaiku({
|
|
518
|
+
apiKey: options.apiKey,
|
|
519
|
+
prompt,
|
|
520
|
+
schema: ConsolidationGroupsSchema,
|
|
521
|
+
maxTokens: 512,
|
|
522
|
+
});
|
|
523
|
+
if (!result.success) {
|
|
524
|
+
console.warn(`LLM batch consolidation failed, keeping all findings: ${result.error}`);
|
|
525
|
+
return { findings: hashDeduped, removedCount: hashRemovedCount, usage: result.usage };
|
|
526
|
+
}
|
|
527
|
+
// Process LLM groups: for each group, keep the winner and drop the rest
|
|
528
|
+
const droppedFindings = new Set();
|
|
529
|
+
for (const group of result.data) {
|
|
530
|
+
if (group.length < 2)
|
|
531
|
+
continue;
|
|
532
|
+
// Convert 1-based indices to findings
|
|
533
|
+
const groupFindings = group
|
|
534
|
+
.map((idx) => clusteredList[idx - 1])
|
|
535
|
+
.filter((f) => f !== undefined);
|
|
536
|
+
if (groupFindings.length < 2)
|
|
537
|
+
continue;
|
|
538
|
+
const winner = pickWinner(groupFindings);
|
|
539
|
+
for (const f of groupFindings) {
|
|
540
|
+
if (f !== winner) {
|
|
541
|
+
droppedFindings.add(f);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (droppedFindings.size === 0) {
|
|
546
|
+
return { findings: hashDeduped, removedCount: hashRemovedCount, usage: result.usage };
|
|
547
|
+
}
|
|
548
|
+
const consolidated = hashDeduped.filter((f) => !droppedFindings.has(f));
|
|
549
|
+
const totalRemoved = hashRemovedCount + droppedFindings.size;
|
|
550
|
+
console.log(`Consolidate: ${droppedFindings.size} findings merged by LLM (same root cause)`);
|
|
551
|
+
return { findings: consolidated, removedCount: totalRemoved, usage: result.usage };
|
|
552
|
+
}
|
|
373
553
|
/**
|
|
374
554
|
* Deduplicate findings against existing comments.
|
|
375
555
|
* Returns non-duplicate findings and actions to take for duplicates.
|