@ddtcorex/dsh-maestro-review 0.3.1 → 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.
@@ -18,8 +18,6 @@ export interface MaestroUserConfig {
18
18
  }>;
19
19
  /** Override the DSH default model for automated reviews. When absent the global DSH default is used. */
20
20
  reviewModel?: ReviewModelSelection;
21
- /** Override the DSH default model for the supervisor debug-agent. When absent the review model (or DSH default) is used. */
22
- supervisorModel?: ReviewModelSelection;
23
21
  /** Re-run a quick review whenever new commits land on a previously reviewed MR. */
24
22
  autoRereviewOnPush?: boolean;
25
23
  /** Bound one automated review agent's turn. */
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/host/config-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAO1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;QAAC,WAAW,CAAC,EAAE,oBAAoB,CAAA;KAAE,CAAC,CAAA;IAC/I,wGAAwG;IACxG,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,4HAA4H;IAC5H,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uFAAuF;IACvF,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC9B,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAyBD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAMjF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAc3G"}
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/host/config-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAO1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;QAAC,WAAW,CAAC,EAAE,oBAAoB,CAAA;KAAE,CAAC,CAAA;IAC/I,wGAAwG;IACxG,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uFAAuF;IACvF,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC9B,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAyBD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAMjF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAc3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/host/config-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,gBAAgB,GACjB,MAAM,kCAAkC,CAAA;AA0CzC,SAAS,cAAc,CAAC,OAAgB;IACtC,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;AACnE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAA;AAC5E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAA;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAA8B,EAC9B,OAAgB;IAEhB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAA;IACjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1F,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;QACrB,gBAAgB,CAAC,OAAO,CAAC;KAC1B,CAAC,CAAA;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAuB,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAwB,EAAE,OAAgB;IAC7E,MAAM,aAAa,GAA4B,EAAE,CAAA;IACjD,MAAM,YAAY,GAA4B,EAAE,CAAA;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAK,YAAkC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;;YAC3E,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACjC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC"}
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/host/config-store.ts"],"names":[],"mappings":"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"}
@@ -10,5 +10,62 @@ export interface Config {
10
10
  botUsername: string;
11
11
  }
12
12
  export declare const Config: z<Config>;
13
+ interface GitlabDiff {
14
+ old_path: string;
15
+ new_path: string;
16
+ diff: string;
17
+ }
18
+ export interface DiffFileEntry {
19
+ path: string;
20
+ bytes: number;
21
+ }
22
+ /** Per-file inventory of the MR diff — small enough to return inline. Pure. */
23
+ export declare function diffFileList(diffs: GitlabDiff[]): DiffFileEntry[];
24
+ /** Unified text for one file, or undefined when the path is not in the MR. Pure. */
25
+ export declare function selectFileDiff(diffs: GitlabDiff[], path: string): string | undefined;
26
+ interface GitlabDiscussionNote {
27
+ body: string;
28
+ author: {
29
+ username: string;
30
+ };
31
+ position?: {
32
+ new_path: string;
33
+ new_line: number | null;
34
+ };
35
+ resolved: boolean;
36
+ }
37
+ interface GitlabDiscussion {
38
+ id: string;
39
+ notes: GitlabDiscussionNote[];
40
+ }
41
+ interface OwnThread {
42
+ discussionId: string;
43
+ path: string;
44
+ line: number | null;
45
+ lastCommentBody: string;
46
+ resolved: boolean;
47
+ }
48
+ /**
49
+ * Resolve the in-workspace spill path for the MR diff. The DSH runtime
50
+ * spills large tool outputs to /tmp/dsh-spill-*, which sits outside the
51
+ * agent's cwd — and Guard blocks the agent from reading it back
52
+ * ("path outside cwd", tickets g-dd0d1679/g-716cd436). Writing the diff
53
+ * inside the workspace root keeps it readable via maestro_read_file.
54
+ */
55
+ export declare function resolveDiffSpillPath(workspaceRoot: string, mrIid: number): string;
56
+ export declare function writeDiffSpill(workspaceRoot: string, mrIid: number, text: string): {
57
+ path: string;
58
+ bytes: number;
59
+ };
60
+ /**
61
+ * Pick this bot's inline threads out of the MR discussions list, including
62
+ * resolved ones (flagged) so a same-SHA re-review can reply-update instead
63
+ * of posting duplicates. Pure for unit testing.
64
+ */
65
+ export declare function selectOwnThreads(discussions: GitlabDiscussion[], botUsername: string): {
66
+ threads: OwnThread[];
67
+ totalDiscussions: number;
68
+ };
13
69
  export declare function apply(ctx: Context, config: Config): void;
70
+ export {};
14
71
  //# sourceMappingURL=gitlab-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab-client.d.ts","sourceRoot":"","sources":["../src/host/gitlab-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,UAAY,CAAA;AAE/B,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAM3B,CAAA;AA0BF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA0IxD"}
1
+ {"version":3,"file":"gitlab-client.d.ts","sourceRoot":"","sources":["../src/host/gitlab-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAKxC,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,UAAY,CAAA;AAE/B,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAM3B,CAAA;AAEF,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIpF;AAQD,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACxD,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B;AAED,UAAU,SAAS;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKlH;AAQD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB;IAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAWpD;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA8LxD"}
@@ -1,5 +1,7 @@
1
1
  import z from '@deepseek-ai/schemastery';
2
2
  import { defineTool } from '@deepseek-ai/dsh-tools';
3
+ import { mkdirSync, writeFileSync } from 'node:fs';
4
+ import { join, resolve } from 'node:path';
3
5
  export const name = 'maestro-gitlab-client';
4
6
  export const inject = ['tools'];
5
7
  export const Config = z.object({
@@ -9,10 +11,69 @@ export const Config = z.object({
9
11
  token: z.string().role('secret').required(),
10
12
  botUsername: z.string().required(),
11
13
  });
14
+ /** Per-file inventory of the MR diff — small enough to return inline. Pure. */
15
+ export function diffFileList(diffs) {
16
+ return diffs.map((d) => ({ path: d.new_path, bytes: Buffer.byteLength(d.diff, 'utf8') }));
17
+ }
18
+ /** Unified text for one file, or undefined when the path is not in the MR. Pure. */
19
+ export function selectFileDiff(diffs, path) {
20
+ const d = diffs.find((x) => x.new_path === path || x.old_path === path);
21
+ if (d === undefined)
22
+ return undefined;
23
+ return `--- ${d.old_path}\n+++ ${d.new_path}\n${d.diff}`;
24
+ }
25
+ /**
26
+ * Resolve the in-workspace spill path for the MR diff. The DSH runtime
27
+ * spills large tool outputs to /tmp/dsh-spill-*, which sits outside the
28
+ * agent's cwd — and Guard blocks the agent from reading it back
29
+ * ("path outside cwd", tickets g-dd0d1679/g-716cd436). Writing the diff
30
+ * inside the workspace root keeps it readable via maestro_read_file.
31
+ */
32
+ export function resolveDiffSpillPath(workspaceRoot, mrIid) {
33
+ return join(resolve(workspaceRoot), '.maestro', `mr-${mrIid}.diff`);
34
+ }
35
+ export function writeDiffSpill(workspaceRoot, mrIid, text) {
36
+ const abs = resolveDiffSpillPath(workspaceRoot, mrIid);
37
+ mkdirSync(join(resolve(workspaceRoot), '.maestro'), { recursive: true });
38
+ writeFileSync(abs, text, 'utf-8');
39
+ return { path: join('.maestro', `mr-${mrIid}.diff`), bytes: Buffer.byteLength(text, 'utf8') };
40
+ }
41
+ function sessionCwd(e) {
42
+ const cwd = e?.agent?.session?.header?.cwd;
43
+ return typeof cwd === 'string' && cwd !== '' ? cwd : undefined;
44
+ }
45
+ /**
46
+ * Pick this bot's inline threads out of the MR discussions list, including
47
+ * resolved ones (flagged) so a same-SHA re-review can reply-update instead
48
+ * of posting duplicates. Pure for unit testing.
49
+ */
50
+ export function selectOwnThreads(discussions, botUsername) {
51
+ const threads = discussions
52
+ .filter(d => d.notes.length > 0 && d.notes[0].author.username === botUsername && d.notes[0].position !== undefined)
53
+ .map(d => ({
54
+ discussionId: d.id,
55
+ path: d.notes[0].position.new_path,
56
+ line: d.notes[0].position.new_line,
57
+ lastCommentBody: d.notes[d.notes.length - 1].body,
58
+ resolved: d.notes[0].resolved === true,
59
+ }));
60
+ return { threads, totalDiscussions: discussions.length };
61
+ }
12
62
  export function apply(ctx, config) {
13
63
  const apiBase = `${config.baseUrl}/api/v4/projects/${config.projectId}/merge_requests/${config.mrIid}`;
14
64
  const headers = { 'PRIVATE-TOKEN': config.token };
15
65
  let cachedDiffRefs;
66
+ let cachedDiffs;
67
+ async function getDiffs() {
68
+ if (cachedDiffs !== undefined)
69
+ return cachedDiffs;
70
+ const response = await fetch(`${apiBase}/diffs`, { headers });
71
+ if (!response.ok) {
72
+ throw new Error(`GitLab API error ${response.status}: ${await response.text()}`);
73
+ }
74
+ cachedDiffs = (await response.json());
75
+ return cachedDiffs;
76
+ }
16
77
  async function getDiffRefs() {
17
78
  if (cachedDiffRefs !== undefined)
18
79
  return cachedDiffRefs;
@@ -25,20 +86,41 @@ export function apply(ctx, config) {
25
86
  }
26
87
  ctx.tools.register(defineTool({
27
88
  name: 'gitlab_get_mr_diff',
28
- description: 'Fetch the current unified diff for this merge request.',
89
+ description: 'Fetch the current unified diff for this merge request. The full diff is written to path (inside your workspace, readable via maestro_read_file); bytes is its size and files lists per-file sizes. Prefer gitlab_get_file_diff per file you inspect — small inline results never spill. Do not look for anything under /tmp.',
29
90
  parameters: {},
30
91
  output: {
31
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
92
+ schema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string', required: true }, bytes: { type: 'number', required: true }, files: { type: 'array', items: { type: 'object', additionalProperties: false, properties: { path: { type: 'string', required: true }, bytes: { type: 'number', required: true } } } } } },
93
+ render: (_args, value) => [{ type: 'text', text: `diff written to ${value.path} (${value.bytes} bytes, ${value.files.length} files)` }],
94
+ },
95
+ async execute(_args, exec) {
96
+ const diffs = await getDiffs();
97
+ const text = diffs.map(d => `--- ${d.old_path}\n+++ ${d.new_path}\n${d.diff}`).join('\n\n');
98
+ const cwd = sessionCwd(exec);
99
+ // No session cwd (should not happen for review agents): fall back to
100
+ // the legacy inline text, which the runtime may spill to /tmp.
101
+ if (cwd === undefined)
102
+ return { path: '', bytes: Buffer.byteLength(text, 'utf8'), files: diffFileList(diffs) };
103
+ const spilled = writeDiffSpill(cwd, config.mrIid, text);
104
+ return { ...spilled, files: diffFileList(diffs) };
105
+ },
106
+ }));
107
+ ctx.tools.register(defineTool({
108
+ name: 'gitlab_get_file_diff',
109
+ description: "Return one file's unified diff inline (small results never spill to /tmp). Use after gitlab_get_mr_diff to inspect files one by one.",
110
+ parameters: {
111
+ path: { type: 'string', required: true, description: 'New path of the file, as listed in files.' },
112
+ },
113
+ output: {
114
+ schema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string', required: true }, text: { type: 'string', required: true } } },
32
115
  render: (_args, value) => [{ type: 'text', text: value.text }],
33
116
  },
34
- async execute() {
35
- const response = await fetch(`${apiBase}/diffs`, { headers });
36
- if (!response.ok) {
37
- throw new Error(`GitLab API error ${response.status}: ${await response.text()}`);
117
+ async execute(args) {
118
+ const diffs = await getDiffs();
119
+ const text = selectFileDiff(diffs, args.path);
120
+ if (text === undefined) {
121
+ throw new Error(`path not in this MR diff: ${args.path}`);
38
122
  }
39
- const diffs = await response.json();
40
- const text = diffs.map(d => `--- ${d.old_path}\n+++ ${d.new_path}\n${d.diff}`).join('\n\n');
41
- return { text };
123
+ return { path: args.path, text };
42
124
  },
43
125
  }));
44
126
  ctx.tools.register(defineTool({
@@ -65,11 +147,34 @@ export function apply(ctx, config) {
65
147
  }));
66
148
  ctx.tools.register(defineTool({
67
149
  name: 'gitlab_list_own_review_threads',
68
- description: 'List this merge request\'s unresolved inline discussion threads previously created by this bot account, so you can reply instead of duplicating.',
150
+ description: 'List this merge request\'s inline discussion threads previously created by this bot account (both unresolved and resolved, flagged), so you can reply instead of duplicating. Returns {threads, totalDiscussions}.',
69
151
  parameters: {},
70
152
  output: {
71
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
72
- render: (_args, value) => [{ type: 'text', text: value.text }],
153
+ schema: {
154
+ type: 'object',
155
+ additionalProperties: false,
156
+ properties: {
157
+ threads: {
158
+ type: 'array',
159
+ items: {
160
+ type: 'object',
161
+ additionalProperties: false,
162
+ properties: {
163
+ discussionId: { type: 'string', required: true },
164
+ path: { type: 'string', required: true },
165
+ line: { type: 'number' },
166
+ lastCommentBody: { type: 'string', required: true },
167
+ resolved: { type: 'boolean', required: true },
168
+ },
169
+ },
170
+ },
171
+ totalDiscussions: { type: 'number', required: true },
172
+ },
173
+ },
174
+ render: (_args, value) => [{
175
+ type: 'text',
176
+ text: `${value.totalDiscussions} discussion(s) on this MR, ${value.threads.length} own inline thread(s):\n${JSON.stringify(value.threads)}`,
177
+ }],
73
178
  },
74
179
  async execute() {
75
180
  const response = await fetch(`${apiBase}/discussions`, { headers });
@@ -77,10 +182,7 @@ export function apply(ctx, config) {
77
182
  throw new Error(`GitLab API error ${response.status}: ${await response.text()}`);
78
183
  }
79
184
  const discussions = await response.json();
80
- const ownThreads = discussions
81
- .filter(d => d.notes.length > 0 && d.notes[0].author.username === config.botUsername && !d.notes[0].resolved && d.notes[0].position !== undefined)
82
- .map(d => ({ discussionId: d.id, path: d.notes[0].position.new_path, line: d.notes[0].position.new_line, lastCommentBody: d.notes[d.notes.length - 1].body }));
83
- return { text: JSON.stringify(ownThreads) };
185
+ return selectOwnThreads(discussions, config.botUsername);
84
186
  },
85
187
  }));
86
188
  ctx.tools.register(defineTool({
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab-client.js","sourceRoot":"","sources":["../src/host/gitlab-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gitlab-client.js","sourceRoot":"","sources":["../src/host/gitlab-client.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,91 @@ export declare const inject: string[];
5
5
  export declare const Config: z<{
6
6
  rootPath?: string;
7
7
  timeoutMs?: number;
8
+ defaultBase?: string;
9
+ allowXdebug?: boolean;
8
10
  }>;
11
+ export interface AuditLintOptions {
12
+ checks?: string[];
13
+ mode?: string;
14
+ scope?: string;
15
+ base?: string;
16
+ phpVersions?: string[];
17
+ noLintResultCache?: boolean;
18
+ timeout?: string;
19
+ lintProvider?: string;
20
+ allowXdebug?: boolean;
21
+ }
22
+ /** Explicit call base wins, then the review-wired default (MR base_sha). */
23
+ export declare function resolveLintBase(argsBase: string | undefined, defaultBase: string | undefined): string | undefined;
24
+ export declare function buildAuditCliArgs(a: AuditLintOptions): string[];
9
25
  export declare function cleanJson(raw: string): string;
26
+ interface LintViolationLike {
27
+ path?: string;
28
+ line?: number;
29
+ rule?: string;
30
+ message?: string;
31
+ }
32
+ interface LintResultLike {
33
+ ok: boolean;
34
+ exitCode?: number;
35
+ lint?: {
36
+ phpcs?: {
37
+ violations?: LintViolationLike[];
38
+ };
39
+ phpstan?: {
40
+ errors?: LintViolationLike[];
41
+ };
42
+ pubMediaGuard?: {
43
+ violations?: LintViolationLike[];
44
+ };
45
+ };
46
+ summary?: {
47
+ findingCount?: number;
48
+ };
49
+ diagnostics?: string;
50
+ }
51
+ /**
52
+ * One-line-plus render for the agent: a bare "audit lint failed" hides the
53
+ * violations the reviewer needs, so carry counts plus the top findings.
54
+ */
55
+ export interface CollectedLintFindings {
56
+ phpcsViolations: Array<{
57
+ path?: string;
58
+ line?: number;
59
+ column?: number;
60
+ rule?: string;
61
+ message?: string;
62
+ severity?: string;
63
+ }>;
64
+ phpstanErrors: Array<{
65
+ path?: string;
66
+ line?: number;
67
+ message?: string;
68
+ }>;
69
+ pubMediaViolations: unknown[];
70
+ compat: Array<{
71
+ tool?: string;
72
+ path?: string;
73
+ line?: number;
74
+ rule?: string;
75
+ message?: string;
76
+ }>;
77
+ total: number;
78
+ }
79
+ /**
80
+ * Collect findings across govard audit JSON shapes. The live envelope nests
81
+ * them at results[].evidence.php_results[].findings (older callers used a
82
+ * top-level findings array or evidence.php_results) — and non-phpcs/phpstan
83
+ * tools (e.g. M2-LINT-COMPAT internal errors) go to the compat bucket
84
+ * instead of being silently dropped from counts.
85
+ */
86
+ export declare function collectLintFindings(parsed: unknown): CollectedLintFindings;
87
+ export declare function lintResultText(v: LintResultLike): string;
10
88
  export declare function apply(ctx: Context, config?: {
11
89
  rootPath?: string;
12
90
  timeoutMs?: number;
91
+ defaultBase?: string;
92
+ allowXdebug?: boolean;
13
93
  }): void;
94
+ export {};
14
95
  //# sourceMappingURL=govard-audit-lint-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"govard-audit-lint-tool.d.ts","sourceRoot":"","sources":["../src/host/govard-audit-lint-tool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,eAAO,MAAM,IAAI,mCAAiC,CAAA;AAClD,eAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,eAAO,MAAM,MAAM,EAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;IAAC,SAAS,CAAC,EAAC,MAAM,CAAA;CAAC,CAAyD,CAAA;AA8BpH,wBAAgB,SAAS,CAAC,GAAG,EAAC,MAAM,GAAE,MAAM,CAE3C;AAkBD,wBAAgB,KAAK,CAAC,GAAG,EAAC,OAAO,EAAE,MAAM,GAAC;IAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;IAAC,SAAS,CAAC,EAAC,MAAM,CAAA;CAAI,GAAE,IAAI,CAiHvF"}
1
+ {"version":3,"file":"govard-audit-lint-tool.d.ts","sourceRoot":"","sources":["../src/host/govard-audit-lint-tool.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,30 @@ import z from '@deepseek-ai/schemastery';
5
5
  import { defineTool } from '@deepseek-ai/dsh-tools';
6
6
  export const name = 'maestro-govard-audit-lint-tool';
7
7
  export const inject = ['tools'];
8
- export const Config = z.object({ rootPath: z.string(), timeoutMs: z.number() });
8
+ export const Config = z.object({ rootPath: z.string(), timeoutMs: z.number(), defaultBase: z.string(), allowXdebug: z.boolean() });
9
+ /** Explicit call base wins, then the review-wired default (MR base_sha). */
10
+ export function resolveLintBase(argsBase, defaultBase) {
11
+ return argsBase ?? defaultBase;
12
+ }
13
+ export function buildAuditCliArgs(a) {
14
+ const checks = a.checks && a.checks.length ? a.checks.join(',') : 'lint';
15
+ const mode = a.mode ?? 'auto';
16
+ const timeout = a.timeout ?? 'auto';
17
+ const lintProvider = a.lintProvider ?? 'govard';
18
+ const cliArgs = ['audit', 'run', '--checks', checks, '--format', 'json', '--mode', mode, '--timeout', timeout, '--lint-provider', lintProvider];
19
+ if (a.scope)
20
+ cliArgs.push('--scope', a.scope);
21
+ const base = resolveLintBase(a.base, undefined);
22
+ if (base)
23
+ cliArgs.push('--base', base);
24
+ if (a.phpVersions && a.phpVersions.length)
25
+ cliArgs.push('--php', a.phpVersions.join(','));
26
+ if (a.noLintResultCache)
27
+ cliArgs.push('--no-lint-result-cache');
28
+ if (a.allowXdebug)
29
+ cliArgs.push('--allow-xdebug');
30
+ return cliArgs;
31
+ }
9
32
  function workspaceRootFor(c, e) {
10
33
  if (c !== undefined)
11
34
  return c;
@@ -48,7 +71,86 @@ async function isInsideRoot(r, t) {
48
71
  }
49
72
  }
50
73
  export function cleanJson(raw) {
51
- return raw.replace(/\n\s*ERROR audit run.*$/s, '').replace(/\s{2,}ERROR audit run.*$/s, '').trimEnd();
74
+ // pterm pads the level name: " ERROR audit run ..." (multi-space).
75
+ return raw.replace(/\n\s*ERROR\s+audit run.*$/s, '').replace(/\s{2,}ERROR\s+audit run.*$/s, '').trimEnd();
76
+ }
77
+ /**
78
+ * Collect findings across govard audit JSON shapes. The live envelope nests
79
+ * them at results[].evidence.php_results[].findings (older callers used a
80
+ * top-level findings array or evidence.php_results) — and non-phpcs/phpstan
81
+ * tools (e.g. M2-LINT-COMPAT internal errors) go to the compat bucket
82
+ * instead of being silently dropped from counts.
83
+ */
84
+ export function collectLintFindings(parsed) {
85
+ const p = (parsed ?? {});
86
+ const lists = [];
87
+ if (Array.isArray(p.findings))
88
+ lists.push(p.findings);
89
+ const ev = p.evidence;
90
+ if (Array.isArray(ev?.php_results))
91
+ lists.push(...ev.php_results.map((r) => r?.findings).filter(Array.isArray));
92
+ if (Array.isArray(p.php_results))
93
+ lists.push(...p.php_results.map((r) => r?.findings).filter(Array.isArray));
94
+ // Live shape (govard audit run): jobs[].evidence.php_results[].findings.
95
+ // Older shapes (results[], bare evidence) kept for backward compatibility.
96
+ for (const key of ['jobs', 'results']) {
97
+ if (!Array.isArray(p[key]))
98
+ continue;
99
+ for (const r of p[key]) {
100
+ const e = r?.evidence;
101
+ const pr = e?.php_results ?? r?.php_results;
102
+ if (Array.isArray(pr))
103
+ lists.push(...pr.map((x) => x?.findings).filter(Array.isArray));
104
+ if (Array.isArray(r?.findings))
105
+ lists.push(r.findings);
106
+ }
107
+ }
108
+ const out = { phpcsViolations: [], phpstanErrors: [], pubMediaViolations: [], compat: [], total: 0 };
109
+ // DSH tool output must be lossless JSON: drop undefined fields, the
110
+ // runtime rejects values that do not survive a JSON round-trip.
111
+ const compact = (entry) => {
112
+ const kept = {};
113
+ for (const [k, v] of Object.entries(entry))
114
+ if (v !== undefined)
115
+ kept[k] = v;
116
+ return kept;
117
+ };
118
+ for (const list of lists) {
119
+ for (const f of list) {
120
+ if (f?.tool === 'phpstan')
121
+ out.phpstanErrors.push(compact({ path: f.path, line: f.line, message: f.message }));
122
+ else if (f?.tool === 'phpcs') {
123
+ if (f.path?.includes('pub/media') || f.rule?.includes('PubMedia'))
124
+ out.pubMediaViolations.push(f);
125
+ else
126
+ out.phpcsViolations.push(compact({ path: f.path, line: f.line, column: f.column, rule: f.rule, message: f.message, severity: f.severity }));
127
+ }
128
+ else if (f && typeof f === 'object') {
129
+ out.compat.push(compact({ tool: f.tool, path: f.path, line: f.line, rule: f.rule, message: f.message }));
130
+ }
131
+ }
132
+ }
133
+ out.total = out.phpcsViolations.length + out.phpstanErrors.length + out.pubMediaViolations.length + out.compat.length;
134
+ return out;
135
+ }
136
+ export function lintResultText(v) {
137
+ if (v.ok)
138
+ return 'audit lint passed';
139
+ const phpcs = v.lint?.phpcs?.violations ?? [];
140
+ const phpstan = v.lint?.phpstan?.errors ?? [];
141
+ const pubMedia = v.lint?.pubMediaGuard?.violations ?? [];
142
+ const compat = v.lint?.compat?.findings ?? [];
143
+ const total = v.summary?.findingCount ?? phpcs.length + phpstan.length + pubMedia.length + compat.length;
144
+ const bits = [`audit lint failed — ${total} finding(s) (phpcs ${phpcs.length}, phpstan ${phpstan.length}, pubMedia ${pubMedia.length}, compat ${compat.length})`];
145
+ const top = [...phpcs.map(x => ({ ...x, tool: 'phpcs' })), ...phpstan.map(x => ({ ...x, tool: 'phpstan' })), ...pubMedia.map(x => ({ ...x, tool: 'pubMedia' })), ...compat.map((x) => ({ ...x, tool: x.tool ?? 'compat' }))].slice(0, 5);
146
+ for (const f of top)
147
+ bits.push(`- [${f.tool}] ${f.path ?? (f.message ?? '?').toString().slice(0, 120)}${f.path !== undefined ? `:${f.line ?? '?'}` : ''}${f.rule !== undefined ? ` ${f.rule}` : ''}`);
148
+ if (v.exitCode !== undefined)
149
+ bits.push(`exit ${v.exitCode}`);
150
+ const diag = (v.diagnostics ?? '').split('\n')[0]?.trim();
151
+ if (total === 0 && diag !== '' && diag !== undefined)
152
+ bits.push(diag.slice(0, 200));
153
+ return bits.join('\n');
52
154
  }
53
155
  // Govard 1.67 auto timeout: 90s-30m framework-aware (15m floor for wordpress/magento2 → 22.5m auto)
54
156
  // Keep kill timeout above the largest auto value so the outer watchdog doesn't cancel a valid auto run.
@@ -68,9 +170,13 @@ function run(cmd, args, cwd, timeoutMs) {
68
170
  export function apply(ctx, config = {}) {
69
171
  const configuredRoot = config.rootPath;
70
172
  const defaultTimeout = config.timeoutMs ?? DEFAULT_TIMEOUT;
173
+ const defaultBase = config.defaultBase;
174
+ // Review worktrees disable xdebug via .govard.local.yml, but govard's lint
175
+ // guard probes the base .govard.yml only — so the mount opts out explicitly.
176
+ const allowXdebug = config.allowXdebug ?? false;
71
177
  ctx.effect(() => ctx.tools.register(defineTool({
72
178
  name: 'govard_audit_lint',
73
- description: 'Run govard audit --checks lint --format json and return structured phpcs/phpstan results. Use before hand-parsing text. Govard 1.67+ uses --timeout auto (framework-aware 90s-30m, 22.5m for wordpress/magento2) by default.',
179
+ description: 'Run govard audit --checks lint --format json and return structured phpcs/phpstan results. Use before hand-parsing text. Govard 1.67+ uses --timeout auto (framework-aware 90s-30m, 22.5m for wordpress/magento2) by default. scope "diff" requires a base ref: pass base, or rely on the wired defaultBase (MR base_sha) when present.',
74
180
  parameters: {
75
181
  worktreePath: { type: 'string' },
76
182
  checks: { type: 'array', items: { type: 'string' } },
@@ -101,7 +207,7 @@ export function apply(ctx, config = {}) {
101
207
  runId: { type: 'string' },
102
208
  }
103
209
  },
104
- render: (_a, v) => [{ type: 'text', text: v.ok ? 'audit lint passed' : 'audit lint failed' }],
210
+ render: (_a, v) => [{ type: 'text', text: lintResultText(v) }],
105
211
  },
106
212
  async execute(args, exec) {
107
213
  const rawPath = args.worktreePath;
@@ -114,23 +220,12 @@ export function apply(ctx, config = {}) {
114
220
  if (timeoutMs < 5000 || timeoutMs > 1_800_000)
115
221
  return { text: 'timeoutMs out of range 5000-1800000 (5s-30m). Use --timeout auto for framework-aware estimation.', truncated: false };
116
222
  const a = args;
117
- const checks = a.checks && a.checks.length ? a.checks.join(',') : 'lint';
118
- const mode = a.mode ?? 'auto';
119
223
  const scope = a.scope;
120
- const base = a.base;
121
- const phpVersionsArg = a.phpVersions;
122
- const noLintResultCache = a.noLintResultCache;
123
- const timeout = a.timeout ?? 'auto';
124
- const lintProvider = a.lintProvider ?? 'govard';
125
- const cliArgs = ['audit', 'run', '--checks', checks, '--format', 'json', '--mode', mode, '--timeout', timeout, '--lint-provider', lintProvider];
126
- if (scope)
127
- cliArgs.push('--scope', scope);
128
- if (base)
129
- cliArgs.push('--base', base);
130
- if (phpVersionsArg && phpVersionsArg.length)
131
- cliArgs.push('--php', phpVersionsArg.join(','));
132
- if (noLintResultCache)
133
- cliArgs.push('--no-lint-result-cache');
224
+ const base = resolveLintBase(a.base, defaultBase);
225
+ if (scope === 'diff' && base === undefined) {
226
+ return { text: 'scope "diff" requires a base ref (govard --base): pass base explicitly (e.g. origin/master or the MR base_sha) or mount this tool with defaultBase.', truncated: false };
227
+ }
228
+ const cliArgs = buildAuditCliArgs({ ...a, base, allowXdebug: a.allowXdebug ?? allowXdebug });
134
229
  const result = await run('govard', cliArgs, worktreePath, timeoutMs);
135
230
  if (result.timedOut) {
136
231
  return { ok: false, exitCode: result.code ?? 124, timedOut: true, worktreePath, lint: { phpcs: { violations: [] }, phpstan: { errors: [] }, pubMediaGuard: { violations: [] } }, summary: { status: null, phpVersions: [], matrixComplete: false, findingCount: 0, truncated: false }, rawJson: {}, errors: [{ code: 'timeout', message: `timed out after ${timeoutMs}ms` }], diagnostics: result.stderr.slice(0, 4000) };
@@ -163,23 +258,13 @@ export function apply(ctx, config = {}) {
163
258
  if (!parsed) {
164
259
  return { ok: false, exitCode: result.code ?? 1, timedOut: false, worktreePath, lint: { phpcs: { violations: [] }, phpstan: { errors: [] }, pubMediaGuard: { violations: [] } }, summary: { status: null, phpVersions: [], matrixComplete: false, findingCount: 0, truncated: false }, rawJson: {}, errors: [{ code: 'parse_error', message: 'stdout not JSON' }], diagnostics: (cleaned + result.stderr).slice(0, 4000) };
165
260
  }
166
- const findings = parsed.findings ?? parsed.evidence?.php_results?.flatMap((r) => r.findings) ?? [];
167
- const phpcsViolations = [];
168
- const phpstanErrors = [];
169
- const pubMediaViolations = [];
170
- for (const f of findings) {
171
- if (f.tool === 'phpstan')
172
- phpstanErrors.push({ path: f.path, line: f.line, message: f.message });
173
- else if (f.tool === 'phpcs') {
174
- if (f.path?.includes('pub/media') || f.rule?.includes('PubMedia'))
175
- pubMediaViolations.push(f);
176
- else
177
- phpcsViolations.push({ path: f.path, line: f.line, column: f.column, rule: f.rule, message: f.message, severity: f.severity });
178
- }
179
- }
261
+ const collected = collectLintFindings(parsed);
262
+ const phpcsViolations = collected.phpcsViolations;
263
+ const phpstanErrors = collected.phpstanErrors;
264
+ const pubMediaViolations = collected.pubMediaViolations;
180
265
  const status = parsed.status ?? (result.code === 0 ? 'passed' : 'failed');
181
266
  const phpVersions = parsed.php_versions ?? parsed.phpVersions ?? [];
182
- const findingCount = findings.length;
267
+ const findingCount = collected.total;
183
268
  const sessionId = parsed.session_id ?? parsed.sessionId ?? undefined;
184
269
  const runId = parsed.run_id ?? parsed.runId ?? undefined;
185
270
  return {
@@ -191,7 +276,7 @@ export function apply(ctx, config = {}) {
191
276
  ...(runId ? { runId: String(runId) } : {}),
192
277
  rawJson: parsed,
193
278
  summary: { status, phpVersions, matrixComplete: true, findingCount, truncated: findingCount > 100 },
194
- lint: { phpcs: { violations: phpcsViolations }, phpstan: { errors: phpstanErrors }, pubMediaGuard: { violations: pubMediaViolations } },
279
+ lint: { phpcs: { violations: phpcsViolations }, phpstan: { errors: phpstanErrors }, pubMediaGuard: { violations: pubMediaViolations }, compat: { findings: collected.compat } },
195
280
  errors: [],
196
281
  diagnostics: result.stderr.slice(0, 4000),
197
282
  };