@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.
- package/lib/config-store.d.ts +0 -2
- package/lib/config-store.d.ts.map +1 -1
- package/lib/config-store.js.map +1 -1
- package/lib/gitlab-client.d.ts +57 -0
- package/lib/gitlab-client.d.ts.map +1 -1
- package/lib/gitlab-client.js +118 -16
- package/lib/gitlab-client.js.map +1 -1
- package/lib/govard-audit-lint-tool.d.ts +81 -0
- package/lib/govard-audit-lint-tool.d.ts.map +1 -1
- package/lib/govard-audit-lint-tool.js +121 -36
- package/lib/govard-audit-lint-tool.js.map +1 -1
- package/lib/govard-tool.js +1 -1
- package/lib/govard-tool.js.map +1 -1
- package/lib/orchestrator.d.ts +86 -1
- package/lib/orchestrator.d.ts.map +1 -1
- package/lib/orchestrator.js +239 -12
- package/lib/orchestrator.js.map +1 -1
- package/lib/review-findings-tool.d.ts +5 -0
- package/lib/review-findings-tool.d.ts.map +1 -1
- package/lib/review-findings-tool.js +3 -1
- package/lib/review-findings-tool.js.map +1 -1
- package/lib/review-intake.d.ts.map +1 -1
- package/lib/review-intake.js +5 -1
- package/lib/review-intake.js.map +1 -1
- package/lib/settings-rpc.d.ts.map +1 -1
- package/lib/settings-rpc.js +1 -10
- package/lib/settings-rpc.js.map +1 -1
- package/package.json +1 -1
- package/src/host/config-store.ts +0 -2
- package/src/host/gitlab-client.ts +140 -16
- package/src/host/govard-audit-lint-tool.ts +144 -31
- package/src/host/govard-tool.ts +1 -1
- package/src/host/orchestrator.ts +261 -14
- package/src/host/review-findings-tool.ts +9 -1
- package/src/host/review-intake.ts +5 -1
- package/src/host/settings-rpc.ts +1 -9
package/lib/config-store.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/lib/config-store.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/host/config-store.ts"],"names":[],"mappings":"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"}
|
package/lib/gitlab-client.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/gitlab-client.js
CHANGED
|
@@ -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: {
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
|
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: {
|
|
72
|
-
|
|
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
|
-
|
|
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({
|
package/lib/gitlab-client.js.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
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
|
|
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 =
|
|
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
|
};
|