@ddtcorex/dsh-maestro-review 0.9.0 → 0.11.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.
Files changed (88) hide show
  1. package/README.md +10 -10
  2. package/cordis.patch.yml +4 -4
  3. package/lib/client.js +484 -0
  4. package/lib/config-store.d.ts +1 -1
  5. package/lib/config-store.d.ts.map +1 -1
  6. package/lib/config-store.js +43 -3
  7. package/lib/config-store.js.map +1 -1
  8. package/lib/govard-lint-detection.d.ts +20 -0
  9. package/lib/govard-lint-detection.d.ts.map +1 -0
  10. package/lib/govard-lint-detection.js +48 -0
  11. package/lib/govard-lint-detection.js.map +1 -0
  12. package/lib/orchestrator.d.ts +45 -9
  13. package/lib/orchestrator.d.ts.map +1 -1
  14. package/lib/orchestrator.js +82 -24
  15. package/lib/orchestrator.js.map +1 -1
  16. package/lib/search-tool.d.ts.map +1 -1
  17. package/lib/search-tool.js.map +1 -1
  18. package/lib/settings-rpc.d.ts +13 -11
  19. package/lib/settings-rpc.d.ts.map +1 -1
  20. package/lib/settings-rpc.js +45 -142
  21. package/lib/settings-rpc.js.map +1 -1
  22. package/lib/skill-provider.d.ts.map +1 -1
  23. package/lib/skill-provider.js +5 -2
  24. package/lib/skill-provider.js.map +1 -1
  25. package/lib/source.d.ts +23 -0
  26. package/lib/source.d.ts.map +1 -0
  27. package/lib/source.js +16 -0
  28. package/lib/source.js.map +1 -0
  29. package/lib/types/client/BrandMark.d.ts +22 -0
  30. package/lib/types/client/BrandMark.d.ts.map +1 -0
  31. package/lib/types/client/index.d.ts +12 -0
  32. package/lib/types/client/index.d.ts.map +1 -0
  33. package/lib/types/client/maestro-mark.d.ts +20 -0
  34. package/lib/types/client/maestro-mark.d.ts.map +1 -0
  35. package/lib/types/client/review/ReviewSettings.d.ts +15 -0
  36. package/lib/types/client/review/ReviewSettings.d.ts.map +1 -0
  37. package/lib/types/client/review/styles.d.ts +11 -0
  38. package/lib/types/client/review/styles.d.ts.map +1 -0
  39. package/lib/types/client/settings-nav-icon.d.ts +20 -0
  40. package/lib/types/client/settings-nav-icon.d.ts.map +1 -0
  41. package/lib/vendor/store.d.ts +60 -0
  42. package/lib/vendor/store.d.ts.map +1 -0
  43. package/lib/vendor/store.js +500 -0
  44. package/lib/vendor/store.js.map +1 -0
  45. package/lib/webhook-secret.d.ts +31 -0
  46. package/lib/webhook-secret.d.ts.map +1 -0
  47. package/lib/webhook-secret.js +38 -0
  48. package/lib/webhook-secret.js.map +1 -0
  49. package/package.json +36 -18
  50. package/presets/maestro-auditor.patch.yml +7 -4
  51. package/presets/maestro-coder/agent.cordis.yml +3 -11
  52. package/presets/maestro-coder/preset.yml +1 -1
  53. package/profiles/reviewer-ci/cordis.patch.yml +5 -4
  54. package/profiles/reviewer-ci/package.json +3 -3
  55. package/profiles/reviewer-ci/pnpm-lock.yaml +3524 -3239
  56. package/profiles/reviewer-ci/pnpm-workspace.yaml +1 -1
  57. package/skills/dsh-native-tools/SKILL.md +5 -5
  58. package/src/client/BrandMark.tsx +42 -0
  59. package/src/client/index.tsx +109 -0
  60. package/src/client/maestro-mark.ts +21 -0
  61. package/src/client/review/ReviewSettings.tsx +236 -0
  62. package/src/client/review/styles.ts +108 -0
  63. package/src/client/settings-nav-icon.ts +68 -0
  64. package/src/host/config-store.ts +42 -3
  65. package/src/host/govard-lint-detection.ts +47 -0
  66. package/src/host/orchestrator.ts +98 -25
  67. package/src/host/search-tool.ts +3 -4
  68. package/src/host/settings-rpc.ts +48 -145
  69. package/src/host/skill-provider.ts +5 -2
  70. package/src/host/source.ts +26 -0
  71. package/src/host/vendor/store.ts +531 -0
  72. package/src/host/webhook-secret.ts +43 -0
  73. package/templates/reviewer-project.gitlab-ci.yml +1 -1
  74. package/lib/govard-audit-lint-tool.d.ts +0 -95
  75. package/lib/govard-audit-lint-tool.d.ts.map +0 -1
  76. package/lib/govard-audit-lint-tool.js +0 -286
  77. package/lib/govard-audit-lint-tool.js.map +0 -1
  78. package/lib/govard-tool.d.ts +0 -11
  79. package/lib/govard-tool.d.ts.map +0 -1
  80. package/lib/govard-tool.js +0 -95
  81. package/lib/govard-tool.js.map +0 -1
  82. package/lib/workspace-tool.d.ts +0 -10
  83. package/lib/workspace-tool.d.ts.map +0 -1
  84. package/lib/workspace-tool.js +0 -92
  85. package/lib/workspace-tool.js.map +0 -1
  86. package/src/host/govard-audit-lint-tool.ts +0 -286
  87. package/src/host/govard-tool.ts +0 -114
  88. package/src/host/workspace-tool.ts +0 -108
@@ -1,95 +0,0 @@
1
- import type { Context } from '@deepseek-ai/cordis';
2
- import z from '@deepseek-ai/schemastery';
3
- export declare const name = "maestro-govard-audit-lint-tool";
4
- export declare const inject: string[];
5
- export declare const Config: z<{
6
- rootPath?: string;
7
- timeoutMs?: number;
8
- defaultBase?: string;
9
- allowXdebug?: boolean;
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[];
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;
88
- export declare function apply(ctx: Context, config?: {
89
- rootPath?: string;
90
- timeoutMs?: number;
91
- defaultBase?: string;
92
- allowXdebug?: boolean;
93
- }): void;
94
- export {};
95
- //# sourceMappingURL=govard-audit-lint-tool.d.ts.map
@@ -1 +0,0 @@
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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"}
@@ -1,286 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { basename, dirname, resolve, sep } from 'node:path';
3
- import { realpath } from 'node:fs/promises';
4
- import z from '@deepseek-ai/schemastery';
5
- import { defineTool } from '@deepseek-ai/dsh-tools';
6
- export const name = 'maestro-govard-audit-lint-tool';
7
- export const inject = ['tools'];
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
- }
32
- function workspaceRootFor(c, e) {
33
- if (c !== undefined)
34
- return c;
35
- const cwd = e?.agent?.session?.header?.cwd;
36
- return typeof cwd === 'string' && cwd !== '' ? cwd : process.cwd();
37
- }
38
- async function isInsideRoot(r, t) {
39
- const ar = resolve(r);
40
- const rs = resolve(ar, t);
41
- if (rs !== ar && !rs.startsWith(ar + sep))
42
- return false;
43
- let realRoot;
44
- try {
45
- realRoot = await realpath(ar);
46
- }
47
- catch {
48
- return true;
49
- }
50
- let existing = rs;
51
- const pending = [];
52
- while (true) {
53
- let real;
54
- try {
55
- real = await realpath(existing);
56
- }
57
- catch (err) {
58
- if (err.code !== 'ENOENT')
59
- return false;
60
- const parent = dirname(existing);
61
- if (parent === existing)
62
- return false;
63
- pending.unshift(basename(existing));
64
- existing = parent;
65
- continue;
66
- }
67
- const realTarget = pending.length > 0 ? resolve(real, ...pending) : real;
68
- if (realTarget !== realRoot && !realTarget.startsWith(realRoot + sep))
69
- return false;
70
- return true;
71
- }
72
- }
73
- export function cleanJson(raw) {
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');
154
- }
155
- // Govard 1.67 auto timeout: 90s-30m framework-aware (15m floor for wordpress/magento2 → 22.5m auto)
156
- // Keep kill timeout above the largest auto value so the outer watchdog doesn't cancel a valid auto run.
157
- const DEFAULT_TIMEOUT = 900_000;
158
- function run(cmd, args, cwd, timeoutMs) {
159
- return new Promise((resolvePromise) => {
160
- const child = spawn(cmd, args, { cwd });
161
- let stdout = '', stderr = '';
162
- let timedOut = false;
163
- const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL'); }, timeoutMs);
164
- child.stdout?.on('data', (c) => stdout += c.toString());
165
- child.stderr?.on('data', (c) => stderr += c.toString());
166
- child.on('error', (err) => { clearTimeout(timer); resolvePromise({ code: null, stdout, stderr: err.message, timedOut: false }); });
167
- child.on('close', (code) => { clearTimeout(timer); resolvePromise({ code, stdout, stderr, timedOut }); });
168
- });
169
- }
170
- export function apply(ctx, config = {}) {
171
- const configuredRoot = config.rootPath;
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;
177
- ctx.effect(() => ctx.tools.register(defineTool({
178
- name: 'govard_audit_lint',
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.',
180
- parameters: {
181
- worktreePath: { type: 'string' },
182
- checks: { type: 'array', items: { type: 'string' } },
183
- mode: { type: 'string', enum: ['auto', 'project', 'module_in_project', 'standalone'] },
184
- phpVersions: { type: 'array', items: { type: 'string' } },
185
- noLintResultCache: { type: 'boolean' },
186
- timeoutMs: { type: 'number' },
187
- // New in 1.67/2.7: framework-aware timeout and native lint provider
188
- timeout: { type: 'string', description: 'Govard --timeout (e.g. auto, 300s, 15m, 0 for no timeout). Default auto.' },
189
- lintProvider: { type: 'string', description: '--lint-provider (govard or external). Default govard.' },
190
- scope: { type: 'string', enum: ['project', 'diff'] },
191
- base: { type: 'string', description: '--base ref for diff scope' },
192
- },
193
- output: {
194
- schema: {
195
- type: 'object', additionalProperties: false,
196
- properties: {
197
- ok: { type: 'boolean', required: true },
198
- exitCode: { type: 'number', required: true },
199
- timedOut: { type: 'boolean', required: true },
200
- worktreePath: { type: 'string', required: true },
201
- lint: { type: 'object', required: true, additionalProperties: true },
202
- summary: { type: 'object', required: true, additionalProperties: true },
203
- rawJson: { type: 'object', required: true, additionalProperties: true },
204
- errors: { type: 'array', items: { type: 'object', additionalProperties: true } },
205
- diagnostics: { type: 'string' },
206
- sessionId: { type: 'string' },
207
- runId: { type: 'string' },
208
- }
209
- },
210
- render: (_a, v) => [{ type: 'text', text: lintResultText(v) }],
211
- },
212
- async execute(args, exec) {
213
- const rawPath = args.worktreePath;
214
- const root = workspaceRootFor(configuredRoot, exec);
215
- const worktreePath = rawPath ? resolve(root, rawPath) : root;
216
- const checkPath = rawPath ?? '';
217
- if (checkPath !== '' && !(await isInsideRoot(root, checkPath)))
218
- return { text: `Path "${checkPath}" escapes the workspace root.`, truncated: false };
219
- const timeoutMs = args.timeoutMs ?? defaultTimeout;
220
- if (timeoutMs < 5000 || timeoutMs > 1_800_000)
221
- return { text: 'timeoutMs out of range 5000-1800000 (5s-30m). Use --timeout auto for framework-aware estimation.', truncated: false };
222
- const a = args;
223
- const scope = a.scope;
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 });
229
- const result = await run('govard', cliArgs, worktreePath, timeoutMs);
230
- if (result.timedOut) {
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) };
232
- }
233
- if (result.code === null && result.stderr.includes('ENOENT')) {
234
- return { ok: false, exitCode: 127, timedOut: false, worktreePath, lint: { phpcs: { violations: [] }, phpstan: { errors: [] }, pubMediaGuard: { violations: [] } }, summary: { status: null, phpVersions: [], matrixComplete: false, findingCount: 0, truncated: false }, rawJson: {}, errors: [{ code: 'govard_not_found', message: 'govard binary not found' }], diagnostics: result.stderr.slice(0, 4000) };
235
- }
236
- const cleaned = cleanJson(result.stdout);
237
- let parsed = null;
238
- try {
239
- parsed = JSON.parse(cleaned);
240
- }
241
- catch {
242
- parsed = null;
243
- }
244
- if (!parsed) {
245
- const fallback = cleaned.split('\n').slice(0, -1).join('\n').trimEnd();
246
- try {
247
- parsed = JSON.parse(fallback);
248
- }
249
- catch { }
250
- if (!parsed) {
251
- const tryStderr = cleanJson(result.stdout + result.stderr);
252
- try {
253
- parsed = JSON.parse(tryStderr);
254
- }
255
- catch { }
256
- }
257
- }
258
- if (!parsed) {
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) };
260
- }
261
- const collected = collectLintFindings(parsed);
262
- const phpcsViolations = collected.phpcsViolations;
263
- const phpstanErrors = collected.phpstanErrors;
264
- const pubMediaViolations = collected.pubMediaViolations;
265
- const status = parsed.status ?? (result.code === 0 ? 'passed' : 'failed');
266
- const phpVersions = parsed.php_versions ?? parsed.phpVersions ?? [];
267
- const findingCount = collected.total;
268
- const sessionId = parsed.session_id ?? parsed.sessionId ?? undefined;
269
- const runId = parsed.run_id ?? parsed.runId ?? undefined;
270
- return {
271
- ok: result.code === 0,
272
- exitCode: result.code ?? 0,
273
- timedOut: false,
274
- worktreePath,
275
- ...(sessionId ? { sessionId: String(sessionId) } : {}),
276
- ...(runId ? { runId: String(runId) } : {}),
277
- rawJson: parsed,
278
- summary: { status, phpVersions, matrixComplete: true, findingCount, truncated: findingCount > 100 },
279
- lint: { phpcs: { violations: phpcsViolations }, phpstan: { errors: phpstanErrors }, pubMediaGuard: { violations: pubMediaViolations }, compat: { findings: collected.compat } },
280
- errors: [],
281
- diagnostics: result.stderr.slice(0, 4000),
282
- };
283
- }
284
- })));
285
- }
286
- //# sourceMappingURL=govard-audit-lint-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"govard-audit-lint-tool.js","sourceRoot":"","sources":["../src/host/govard-audit-lint-tool.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Context } from '@deepseek-ai/cordis';
2
- import z from '@deepseek-ai/schemastery';
3
- export declare const name = "maestro-govard-tool";
4
- export declare const inject: string[];
5
- export interface Config {
6
- rootPath?: string;
7
- timeoutMs?: number;
8
- }
9
- export declare const Config: z<Config>;
10
- export declare function apply(ctx: Context, config: Config): void;
11
- //# sourceMappingURL=govard-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"govard-tool.d.ts","sourceRoot":"","sources":["../src/host/govard-tool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,eAAO,MAAM,IAAI,wBAAwB,CAAA;AACzC,eAAO,MAAM,MAAM,UAAY,CAAA;AAE/B,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAG3B,CAAA;AAqCF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA0DxD"}
@@ -1,95 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import z from '@deepseek-ai/schemastery';
5
- import { defineTool } from '@deepseek-ai/dsh-tools';
6
- export const name = 'maestro-govard-tool';
7
- export const inject = ['tools'];
8
- export const Config = z.object({
9
- rootPath: z.string(),
10
- timeoutMs: z.number().min(1_000).default(300_000),
11
- });
12
- function run(command, args, cwd, timeoutMs) {
13
- return new Promise((promiseResolve, promiseReject) => {
14
- const child = spawn(command, args, { cwd });
15
- let stdout = '';
16
- let stderr = '';
17
- const timer = setTimeout(() => {
18
- child.kill('SIGKILL');
19
- promiseReject(new Error(`"${command} ${args.join(' ')}" timed out after ${timeoutMs}ms`));
20
- }, timeoutMs);
21
- child.stdout?.on('data', (chunk) => { stdout += chunk.toString(); });
22
- child.stderr?.on('data', (chunk) => { stderr += chunk.toString(); });
23
- child.on('error', (err) => {
24
- clearTimeout(timer);
25
- promiseReject(err);
26
- });
27
- child.on('close', (code) => {
28
- clearTimeout(timer);
29
- promiseResolve({ code, stdout, stderr });
30
- });
31
- });
32
- }
33
- function textResult(result, successText) {
34
- if (result.code !== 0) {
35
- throw new Error(`Exit ${result.code}: ${result.stderr || result.stdout}`);
36
- }
37
- return { text: result.stdout.length > 0 ? result.stdout : successText };
38
- }
39
- export function apply(ctx, config) {
40
- const rootPath = config.rootPath ?? process.cwd();
41
- const timeoutMs = config.timeoutMs ?? 300_000;
42
- async function ensureInitialized() {
43
- if (existsSync(join(rootPath, '.govard.yml')))
44
- return;
45
- const result = await run('govard', ['init', '--framework', 'magento2', '-y'], rootPath, timeoutMs);
46
- if (result.code !== 0)
47
- throw new Error(`govard init failed: ${result.stderr || result.stdout}`);
48
- }
49
- ctx.tools.register(defineTool({
50
- name: 'govard_env_up',
51
- description: 'Bring up the local Magento 2 Govard environment for the current worktree, initializing it first if needed.',
52
- parameters: {},
53
- output: {
54
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
55
- render: (_args, value) => [{ type: 'text', text: value.text }],
56
- },
57
- async execute() {
58
- await ensureInitialized();
59
- const result = await run('govard', ['up'], rootPath, timeoutMs);
60
- return textResult(result, 'Environment is up.');
61
- },
62
- }));
63
- ctx.tools.register(defineTool({
64
- name: 'govard_shell',
65
- description: 'Run one non-interactive command inside the Govard-managed container (e.g. a test suite) and return its output.',
66
- parameters: {
67
- command: { type: 'string', required: true, description: 'Shell command to run inside the container. PHPUnit in a Magento root: always scope it — "vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist --filter <Module>" or "vendor/bin/phpunit --no-coverage --bootstrap dev/tests/unit/framework/bootstrap.php app/code/<Vendor>/<Module>/Test/Unit". The root ships no phpunit.xml so the bare binary prints usage and exits 1; never run the full suite bare (core fixture conflicts), and capture status via ${PIPESTATUS[0]} when piping through tail.' },
68
- },
69
- output: {
70
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
71
- render: (_args, value) => [{ type: 'text', text: value.text }],
72
- },
73
- async execute(args) {
74
- const result = await run('govard', ['shell', '-c', args.command], rootPath, timeoutMs);
75
- return textResult(result, '(no output)');
76
- },
77
- }));
78
- ctx.tools.register(defineTool({
79
- name: 'govard_env_down',
80
- description: 'Tear down the local Govard environment for the current worktree, removing volumes.',
81
- parameters: {},
82
- output: {
83
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
84
- render: (_args, value) => [{ type: 'text', text: value.text }],
85
- },
86
- async execute() {
87
- const result = await run('govard', ['down', '-v'], rootPath, timeoutMs);
88
- return textResult(result, 'Environment is down.');
89
- },
90
- }));
91
- ctx.effect(() => async () => {
92
- await run('govard', ['down', '-v'], rootPath, timeoutMs).catch(() => undefined);
93
- }, 'govard-tool teardown');
94
- }
95
- //# sourceMappingURL=govard-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"govard-tool.js","sourceRoot":"","sources":["../src/host/govard-tool.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { Context } from '@deepseek-ai/cordis';
2
- import z from '@deepseek-ai/schemastery';
3
- export declare const name = "maestro-workspace-tool";
4
- export declare const inject: string[];
5
- export interface Config {
6
- rootPath?: string;
7
- }
8
- export declare const Config: z<Config>;
9
- export declare function apply(ctx: Context, config?: Config): void;
10
- //# sourceMappingURL=workspace-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-tool.d.ts","sourceRoot":"","sources":["../src/host/workspace-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,eAAO,MAAM,IAAI,2BAA2B,CAAA;AAC5C,eAAO,MAAM,MAAM,UAAY,CAAA;AAE/B,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAE3B,CAAA;AAoDF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAwC7D"}
@@ -1,92 +0,0 @@
1
- import { basename, dirname, resolve, sep } from 'node:path';
2
- import { mkdir, readFile, realpath, writeFile } from 'node:fs/promises';
3
- import z from '@deepseek-ai/schemastery';
4
- import { defineTool } from '@deepseek-ai/dsh-tools';
5
- export const name = 'maestro-workspace-tool';
6
- export const inject = ['tools'];
7
- export const Config = z.object({
8
- rootPath: z.string(),
9
- });
10
- async function resolveInRoot(rootPath, requestedPath) {
11
- const absoluteRoot = resolve(rootPath);
12
- const target = resolve(absoluteRoot, requestedPath);
13
- if (target !== absoluteRoot && !target.startsWith(absoluteRoot + sep))
14
- return undefined;
15
- let realRoot;
16
- try {
17
- realRoot = await realpath(absoluteRoot);
18
- }
19
- catch {
20
- return undefined;
21
- }
22
- let existing = target;
23
- const pending = [];
24
- while (true) {
25
- let real;
26
- try {
27
- real = await realpath(existing);
28
- }
29
- catch (err) {
30
- if (err.code !== 'ENOENT')
31
- return undefined;
32
- const parent = dirname(existing);
33
- if (parent === existing)
34
- return undefined;
35
- pending.unshift(basename(existing));
36
- existing = parent;
37
- continue;
38
- }
39
- const realTarget = pending.length > 0 ? resolve(real, ...pending) : real;
40
- if (realTarget !== realRoot && !realTarget.startsWith(realRoot + sep))
41
- return undefined;
42
- return target;
43
- }
44
- }
45
- function workspaceRootFor(configuredRoot, exec) {
46
- if (configuredRoot !== undefined)
47
- return configuredRoot;
48
- const cwd = exec?.agent?.session?.header?.cwd;
49
- return typeof cwd === 'string' && cwd !== '' ? cwd : process.cwd();
50
- }
51
- export function apply(ctx, config = {}) {
52
- const configuredRoot = config.rootPath;
53
- ctx.effect(() => ctx.tools.register(defineTool({
54
- name: 'maestro_read_file',
55
- description: 'Read a text file relative to the current workspace root.',
56
- parameters: {
57
- path: { type: 'string', required: true, description: 'Path relative to the workspace root.' },
58
- },
59
- output: {
60
- schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
61
- render: (_args, value) => [{ type: 'text', text: value.text }],
62
- },
63
- async execute(args, exec) {
64
- const target = await resolveInRoot(workspaceRootFor(configuredRoot, exec), args.path);
65
- if (target === undefined)
66
- return { isError: true, text: `Path "${args.path}" escapes the workspace root.` };
67
- const text = await readFile(target, 'utf-8');
68
- return { text };
69
- },
70
- })));
71
- ctx.effect(() => ctx.tools.register(defineTool({
72
- name: 'maestro_write_file',
73
- description: 'Write a text file relative to the current workspace root, creating parent directories as needed.',
74
- parameters: {
75
- path: { type: 'string', required: true, description: 'Path relative to the workspace root.' },
76
- content: { type: 'string', required: true, description: 'File content to write.' },
77
- },
78
- output: {
79
- schema: { type: 'object', additionalProperties: false, properties: { written: { type: 'boolean', required: true } } },
80
- render: (args) => [{ type: 'text', text: `Wrote ${args.path}` }],
81
- },
82
- async execute(args, exec) {
83
- const target = await resolveInRoot(workspaceRootFor(configuredRoot, exec), args.path);
84
- if (target === undefined)
85
- return { isError: true, text: `Path "${args.path}" escapes the workspace root.` };
86
- await mkdir(dirname(target), { recursive: true });
87
- await writeFile(target, args.content, 'utf-8');
88
- return { written: true };
89
- },
90
- })));
91
- }
92
- //# sourceMappingURL=workspace-tool.js.map