@ddtcorex/dsh-maestro-review 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/client/settings-card.tsx +4 -0
- package/lib/config-store.d.ts +53 -0
- package/lib/config-store.d.ts.map +1 -0
- package/lib/config-store.js +60 -0
- package/lib/config-store.js.map +1 -0
- package/lib/events.d.ts +27 -0
- package/lib/events.d.ts.map +1 -0
- package/lib/events.js +2 -0
- package/lib/events.js.map +1 -0
- package/lib/gitlab-client.d.ts +14 -0
- package/lib/gitlab-client.d.ts.map +1 -0
- package/lib/gitlab-client.js +146 -0
- package/lib/gitlab-client.js.map +1 -0
- package/lib/gitlab-webhook.d.ts +17 -0
- package/lib/gitlab-webhook.d.ts.map +1 -0
- package/lib/gitlab-webhook.js +144 -0
- package/lib/gitlab-webhook.js.map +1 -0
- package/lib/govard-tool.d.ts +11 -0
- package/lib/govard-tool.d.ts.map +1 -0
- package/lib/govard-tool.js +95 -0
- package/lib/govard-tool.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15 -0
- package/lib/index.js.map +1 -0
- package/lib/notify.d.ts +23 -0
- package/lib/notify.d.ts.map +1 -0
- package/lib/notify.js +10 -0
- package/lib/notify.js.map +1 -0
- package/lib/orchestrator.d.ts +144 -0
- package/lib/orchestrator.d.ts.map +1 -0
- package/lib/orchestrator.js +655 -0
- package/lib/orchestrator.js.map +1 -0
- package/lib/pin-store.d.ts +5 -0
- package/lib/pin-store.d.ts.map +1 -0
- package/lib/pin-store.js +5 -0
- package/lib/pin-store.js.map +1 -0
- package/lib/providers/github.stub.d.ts +3 -0
- package/lib/providers/github.stub.d.ts.map +1 -0
- package/lib/providers/github.stub.js +10 -0
- package/lib/providers/github.stub.js.map +1 -0
- package/lib/providers/gitlab.d.ts +13 -0
- package/lib/providers/gitlab.d.ts.map +1 -0
- package/lib/providers/gitlab.js +173 -0
- package/lib/providers/gitlab.js.map +1 -0
- package/lib/providers/interface.d.ts +12 -0
- package/lib/providers/interface.d.ts.map +1 -0
- package/lib/providers/interface.js +2 -0
- package/lib/providers/interface.js.map +1 -0
- package/lib/review-findings-tool.d.ts +15 -0
- package/lib/review-findings-tool.d.ts.map +1 -0
- package/lib/review-findings-tool.js +37 -0
- package/lib/review-findings-tool.js.map +1 -0
- package/lib/review-history.d.ts +35 -0
- package/lib/review-history.d.ts.map +1 -0
- package/lib/review-history.js +87 -0
- package/lib/review-history.js.map +1 -0
- package/lib/review-intake.d.ts +7 -0
- package/lib/review-intake.d.ts.map +1 -0
- package/lib/review-intake.js +80 -0
- package/lib/review-intake.js.map +1 -0
- package/lib/review-signals.d.ts +17 -0
- package/lib/review-signals.d.ts.map +1 -0
- package/lib/review-signals.js +49 -0
- package/lib/review-signals.js.map +1 -0
- package/lib/secure-compare.d.ts +7 -0
- package/lib/secure-compare.d.ts.map +1 -0
- package/lib/secure-compare.js +14 -0
- package/lib/secure-compare.js.map +1 -0
- package/lib/settings-rpc.d.ts +22 -0
- package/lib/settings-rpc.d.ts.map +1 -0
- package/lib/settings-rpc.js +252 -0
- package/lib/settings-rpc.js.map +1 -0
- package/lib/skills-tool.d.ts +29 -0
- package/lib/skills-tool.d.ts.map +1 -0
- package/lib/skills-tool.js +160 -0
- package/lib/skills-tool.js.map +1 -0
- package/lib/workspace-tool.d.ts +10 -0
- package/lib/workspace-tool.d.ts.map +1 -0
- package/lib/workspace-tool.js +86 -0
- package/lib/workspace-tool.js.map +1 -0
- package/package.json +53 -0
- package/presets/maestro-auditor/agent.cordis.yml +10 -0
- package/presets/maestro-auditor/preset.yml +2 -0
- package/presets/maestro-coder/agent.cordis.yml +223 -0
- package/presets/maestro-coder/preset.yml +2 -0
- package/presets/maestro-reviewer/agent.cordis.yml +14 -0
- package/presets/maestro-reviewer/preset.yml +2 -0
- package/src/augment.d.ts +47 -0
- package/src/config-store.ts +109 -0
- package/src/events.ts +25 -0
- package/src/gitlab-client.ts +186 -0
- package/src/gitlab-webhook.ts +166 -0
- package/src/govard-tool.ts +114 -0
- package/src/index.ts +15 -0
- package/src/notify.ts +30 -0
- package/src/orchestrator.ts +740 -0
- package/src/pin-store.ts +4 -0
- package/src/providers/github.stub.ts +11 -0
- package/src/providers/gitlab.ts +190 -0
- package/src/providers/interface.ts +2 -0
- package/src/review-findings-tool.ts +51 -0
- package/src/review-history.ts +112 -0
- package/src/review-intake.ts +86 -0
- package/src/review-signals.ts +52 -0
- package/src/secure-compare.ts +13 -0
- package/src/settings-rpc.ts +249 -0
- package/src/skills-tool.ts +193 -0
- package/src/workspace-tool.ts +90 -0
|
@@ -0,0 +1,95 @@
|
|
|
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, e.g. "vendor/bin/phpunit".' },
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"govard-tool.js","sourceRoot":"","sources":["../src/govard-tool.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,eAAO,MAAM,IAAI,iCAAiC,CAAA;AAElD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAUxC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const name = '@ddtcorex/dsh-maestro-review';
|
|
2
|
+
export function apply(ctx) {
|
|
3
|
+
ctx.effect(() => ctx.connection.rpc.handle('/dsh-maestro-review', async (endpoint, payload) => {
|
|
4
|
+
if (endpoint === 'status')
|
|
5
|
+
return { ok: true, value: { provider: 'gitlab' } };
|
|
6
|
+
if (endpoint === 'providers')
|
|
7
|
+
return { ok: true, value: { providers: ['gitlab', 'github'] } };
|
|
8
|
+
if (endpoint === 'review') {
|
|
9
|
+
const body = payload;
|
|
10
|
+
return { ok: true, value: { received: true, provider: body?.provider ?? 'gitlab' } };
|
|
11
|
+
}
|
|
12
|
+
return { ok: false, error: { code: 'bad-request', message: `Unknown endpoint: ${endpoint}`, details: { issues: [{ message: String(endpoint) }] } } };
|
|
13
|
+
}, { authority: 'loopback' }), 'maestro-review rpc');
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,8BAA8B,CAAA;AAElD,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5F,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAA;QAC7E,IAAI,QAAQ,KAAK,WAAW;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAA;QAC7F,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAA8C,CAAA;YAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAG,IAAY,EAAE,QAAQ,IAAI,QAAQ,EAAE,EAAE,CAAA;QAC/F,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAS,EAAE,EAAE,CAAA;IAC7J,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAA;AACtD,CAAC"}
|
package/lib/notify.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Provider-neutral notifier contract plus every message text this plugin owns. */
|
|
2
|
+
export interface NotifyDeliveryResult {
|
|
3
|
+
sent: boolean;
|
|
4
|
+
reason?: 'not-configured' | 'request-failed' | 'unknown-provider';
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Structural view of the optional `maestroNotifier` service published by
|
|
8
|
+
* `@ddtcorex/dsh-maestro-notifier`. Consumed via `ctx.get` so an absent
|
|
9
|
+
* notifier plugin degrades to "no notifications" instead of breaking reviews.
|
|
10
|
+
*/
|
|
11
|
+
export interface NotifierLike {
|
|
12
|
+
send(providerId: string, target: Record<string, unknown>, message: {
|
|
13
|
+
text: string;
|
|
14
|
+
}): Promise<NotifyDeliveryResult>;
|
|
15
|
+
}
|
|
16
|
+
export declare function reviewDigestText(notification: {
|
|
17
|
+
projectPath: string;
|
|
18
|
+
mrIid: number;
|
|
19
|
+
status: 'completed' | 'failed';
|
|
20
|
+
summary?: string;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function pinRotationText(pin: string): string;
|
|
23
|
+
//# sourceMappingURL=notify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAAA;CAClE;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;CACpH;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,MAAM,CAIT;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
package/lib/notify.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Provider-neutral notifier contract plus every message text this plugin owns. */
|
|
2
|
+
export function reviewDigestText(notification) {
|
|
3
|
+
const outcome = notification.status === 'completed' ? '✅ completed' : '⚠️ failed';
|
|
4
|
+
const summary = notification.summary === undefined ? '' : `\n${notification.summary}`;
|
|
5
|
+
return `Maestro review of ${notification.projectPath} !${notification.mrIid}: ${outcome}${summary}`;
|
|
6
|
+
}
|
|
7
|
+
export function pinRotationText(pin) {
|
|
8
|
+
return `DSH public access PIN was rotated\nNew PIN: ${pin}`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAgBnF,MAAM,UAAU,gBAAgB,CAAC,YAKhC;IACC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAA;IACjF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,OAAO,EAAE,CAAA;IACrF,OAAO,qBAAqB,YAAY,CAAC,WAAW,KAAK,YAAY,CAAC,KAAK,KAAK,OAAO,GAAG,OAAO,EAAE,CAAA;AACrG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,+CAA+C,GAAG,EAAE,CAAA;AAC7D,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import type { AgentHandle } from '@deepseek-ai/dsh-agent';
|
|
4
|
+
import type { ModelSelection } from '@deepseek-ai/dsh-agent';
|
|
5
|
+
import type { ReviewFinding } from './review-findings-tool.js';
|
|
6
|
+
import type { ReviewRequest } from './events.js';
|
|
7
|
+
import { type MaestroUserConfig, type ReviewModelSelection } from './config-store.js';
|
|
8
|
+
import { type ReviewSkillProfile } from './skills-tool.js';
|
|
9
|
+
import type { ReviewProvider } from './providers/interface.js';
|
|
10
|
+
import { gitlabProvider } from './providers/gitlab.js';
|
|
11
|
+
import './events.js';
|
|
12
|
+
export declare function runReviewWithProvider(provider: ReviewProvider, request: {
|
|
13
|
+
provider: string;
|
|
14
|
+
projectPath: string;
|
|
15
|
+
mrId: string;
|
|
16
|
+
profile: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
export { gitlabProvider };
|
|
19
|
+
export declare const name = "maestro-orchestrator";
|
|
20
|
+
export declare const inject: string[];
|
|
21
|
+
/** Convert DSH's selected default model into the options required by a child Agent. */
|
|
22
|
+
export declare function agentOptionsForModel(selection: ModelSelection): ModelSelection;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the model to use for an automated review. Priority: per-project
|
|
25
|
+
* override > global reviewModel > DSH default (`fallback`).
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveReviewModel(userConfig: MaestroUserConfig, mapping: {
|
|
28
|
+
reviewModel?: ReviewModelSelection | null;
|
|
29
|
+
} & Record<string, unknown> | undefined, fallback: ModelSelection): ModelSelection;
|
|
30
|
+
/** Compose a newly-created agent from the preset service owned by the root context. */
|
|
31
|
+
export declare function mountAgentPreset(agentPresets: {
|
|
32
|
+
mount(agentCtx: Context, id: string): Promise<unknown> | unknown;
|
|
33
|
+
}, agentCtx: Context, id: string): Promise<void>;
|
|
34
|
+
export interface Config {
|
|
35
|
+
projectMappings: Array<{
|
|
36
|
+
projectPath: string;
|
|
37
|
+
localRepoPath: string;
|
|
38
|
+
reviewProfile: ReviewSkillProfile;
|
|
39
|
+
}>;
|
|
40
|
+
gitlabBaseUrl: string;
|
|
41
|
+
/**
|
|
42
|
+
* Fallback when Maestro Settings has no token; optional so a deployment that
|
|
43
|
+
* configures everything through Settings boots without env vars.
|
|
44
|
+
*/
|
|
45
|
+
gitlabToken?: string;
|
|
46
|
+
botUsername: string;
|
|
47
|
+
/** Hard ceiling on one automated agent's turn. */
|
|
48
|
+
agentTimeoutMs: number;
|
|
49
|
+
}
|
|
50
|
+
export declare const DEFAULT_AGENT_TIMEOUT_MS: number;
|
|
51
|
+
export declare const Config: z<Config>;
|
|
52
|
+
export interface ReviewOutcome {
|
|
53
|
+
summary: string;
|
|
54
|
+
failures: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Await an agent's turn with a hard ceiling. A hung automated agent would
|
|
58
|
+
* otherwise hold its session, worktree, and review key forever; the watchdog
|
|
59
|
+
* disposes the handle and rejects so the review is recorded as failed.
|
|
60
|
+
*/
|
|
61
|
+
export declare function whenIdleWithTimeout(handle: AgentHandle, timeoutMs: number): Promise<void>;
|
|
62
|
+
export interface ReviewAndAuditDeps {
|
|
63
|
+
localRepoPath: string;
|
|
64
|
+
/** `keySuffix` isolates concurrent reviews of one MR (quick vs deep). */
|
|
65
|
+
ensureWorktree(localRepoPath: string, sourceBranch: string, projectId: number, mrIid: number, keySuffix?: string): Promise<string>;
|
|
66
|
+
removeWorktree(worktreePath: string): Promise<void>;
|
|
67
|
+
runReviewer(worktreePath: string, payload: ReviewRequest): Promise<ReviewOutcome>;
|
|
68
|
+
runAuditor(worktreePath: string, payload: ReviewRequest): Promise<string>;
|
|
69
|
+
postComment(body: string): Promise<void>;
|
|
70
|
+
replyToDiscussion(discussionId: string, body: string): Promise<void>;
|
|
71
|
+
writeFailedReport(mrIid: number, body: string): Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
export interface DiffOnlyReviewDeps {
|
|
74
|
+
runReviewer(payload: ReviewRequest): Promise<ReviewOutcome>;
|
|
75
|
+
postComment(body: string): Promise<void>;
|
|
76
|
+
replyToDiscussion(discussionId: string, body: string): Promise<void>;
|
|
77
|
+
writeFailedReport(mrIid: number, body: string): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
export interface ReviewCommentDeps {
|
|
80
|
+
postComment(body: string): Promise<void>;
|
|
81
|
+
replyToDiscussion(discussionId: string, body: string): Promise<void>;
|
|
82
|
+
writeFailedReport(mrIid: number, body: string): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
export interface GitlabFindingPoster {
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
token: string;
|
|
87
|
+
projectId: number;
|
|
88
|
+
mrIid: number;
|
|
89
|
+
fetcher?: typeof fetch;
|
|
90
|
+
/** Internal per-review cache: all positions must use one MR diff snapshot. */
|
|
91
|
+
snapshot?: Promise<GitlabDiffSnapshot>;
|
|
92
|
+
}
|
|
93
|
+
interface GitlabMrChange {
|
|
94
|
+
old_path: string;
|
|
95
|
+
new_path: string;
|
|
96
|
+
diff: string;
|
|
97
|
+
collapsed?: boolean;
|
|
98
|
+
too_large?: boolean;
|
|
99
|
+
}
|
|
100
|
+
interface GitlabDiffPosition {
|
|
101
|
+
oldLine?: number;
|
|
102
|
+
newLine?: number;
|
|
103
|
+
}
|
|
104
|
+
interface GitlabDiffSnapshot {
|
|
105
|
+
diffRefs: {
|
|
106
|
+
base_sha: string;
|
|
107
|
+
start_sha: string;
|
|
108
|
+
head_sha: string;
|
|
109
|
+
};
|
|
110
|
+
changes: GitlabMrChange[];
|
|
111
|
+
}
|
|
112
|
+
/** Map a new-side line number to its exact unified-diff position. */
|
|
113
|
+
export declare function diffPositionForNewLine(diff: string, targetLine: number): GitlabDiffPosition | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* Publish agent findings from the orchestrator's own context. Agent tools are
|
|
116
|
+
* mounted inside a setup child fiber and are not guaranteed to remain
|
|
117
|
+
* executable through `handle.agent.ctx` after the agent turn ends.
|
|
118
|
+
*/
|
|
119
|
+
export declare function postReviewFindings(findings: ReviewFinding[], config: GitlabFindingPoster): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Stable 8-char hex suffix of the review key, so distinct concurrent reviews
|
|
122
|
+
* (quick + deep of one MR) never share one worktree directory.
|
|
123
|
+
*/
|
|
124
|
+
export declare function reviewKeyHash(payload: ReviewRequest): string;
|
|
125
|
+
/** Full review + performance audit; resolves to the comment body that was posted. */
|
|
126
|
+
export declare function runReviewAndAudit(payload: ReviewRequest, deps: ReviewAndAuditDeps): Promise<string>;
|
|
127
|
+
/**
|
|
128
|
+
* Review the GitLab diff without a local checkout. This deliberately has no
|
|
129
|
+
* auditor or Magento profile: those require the mapped repository and its
|
|
130
|
+
* environment. It is only reached for an explicit mention, never assignment.
|
|
131
|
+
*/
|
|
132
|
+
/** Diff-only fallback review; resolves to the comment body that was posted. */
|
|
133
|
+
export declare function runDiffOnlyReview(payload: ReviewRequest, deps: DiffOnlyReviewDeps): Promise<string>;
|
|
134
|
+
/** Decline a Deep request that lacks the local mapping it requires. */
|
|
135
|
+
export declare function declineUnmappedDeepReview(payload: ReviewRequest, deps: ReviewCommentDeps): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Keep a Govard audit worktree isolated from the developer's primary checkout.
|
|
138
|
+
* Without this local override, both checkouts inherit the same `project_name`
|
|
139
|
+
* and Govard may either reject the worktree or run commands in the wrong stack.
|
|
140
|
+
*/
|
|
141
|
+
export declare function govardWorktreeOverride(projectId: number, mrIid: number, keySuffix?: string): string;
|
|
142
|
+
export declare function ensureWorktree(localRepoPath: string, sourceBranch: string, projectId: number, mrIid: number, keySuffix?: string): Promise<string>;
|
|
143
|
+
export declare function apply(ctx: Context, config: Config): void;
|
|
144
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAIxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAO5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIrG,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,aAAa,CAAA;AAIpB,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtK;AAED,OAAO,EAAE,cAAc,EAAE,CAAA;AAKzB,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,eAAO,MAAM,MAAM,UAAkE,CAAA;AAErF,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,CAM9E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5F,QAAQ,EAAE,cAAc,GACvB,cAAc,CAQhB;AAED,uFAAuF;AACvF,wBAAsB,gBAAgB,CACpC,YAAY,EAAE;IAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CAAE,EAClF,QAAQ,EAAE,OAAO,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,WAAW,MAAM;IACrB,eAAe,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAA;IACzG,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,eAAO,MAAM,wBAAwB,QAAc,CAAA;AAEnD,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAU3B,CAAA;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/F;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAClI,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACjF,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACvC;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAED,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CA2BvG;AA0BD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC9G;AAmBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE5D;AAkBD,qFAAqF;AACrF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0CzG;AAED;;;;GAIG;AACH,+EAA+E;AAC/E,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBzG;AAED,uEAAuE;AACvE,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9G;AAoBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnG;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvJ;AAkBD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAoQxD"}
|