@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 @@
|
|
|
1
|
+
{"version":3,"file":"review-intake.js","sourceRoot":"","sources":["../src/review-intake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MR award-emoji acknowledgements: the MR shows "eyes" while a review runs and
|
|
3
|
+
* a final marker when it completes or fails. Signalling is best-effort — any
|
|
4
|
+
* GitLab error is swallowed so it can never fail the review itself.
|
|
5
|
+
*/
|
|
6
|
+
export interface ReviewSignals {
|
|
7
|
+
start(): Promise<void>;
|
|
8
|
+
finish(outcome: 'completed' | 'failed'): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare function createReviewSignals(options: {
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
token: string;
|
|
13
|
+
projectId: number;
|
|
14
|
+
mrIid: number;
|
|
15
|
+
botUsername: string;
|
|
16
|
+
}): ReviewSignals;
|
|
17
|
+
//# sourceMappingURL=review-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-signals.d.ts","sourceRoot":"","sources":["../src/review-signals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvD;AA0BD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAgBrJ"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MR award-emoji acknowledgements: the MR shows "eyes" while a review runs and
|
|
3
|
+
* a final marker when it completes or fails. Signalling is best-effort — any
|
|
4
|
+
* GitLab error is swallowed so it can never fail the review itself.
|
|
5
|
+
*/
|
|
6
|
+
async function award(baseUrl, token, projectId, mrIid, name) {
|
|
7
|
+
await fetch(`${baseUrl}/api/v4/projects/${projectId}/merge_requests/${mrIid}/award_emoji`, {
|
|
8
|
+
method: 'POST',
|
|
9
|
+
headers: { 'PRIVATE-TOKEN': token, 'Content-Type': 'application/json' },
|
|
10
|
+
body: JSON.stringify({ name }),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
/** Remove only this bot's stale running markers; other users' awards stay untouched. */
|
|
14
|
+
async function unawardOwn(baseUrl, token, projectId, mrIid, botUsername) {
|
|
15
|
+
const response = await fetch(`${baseUrl}/api/v4/projects/${projectId}/merge_requests/${mrIid}/award_emoji`, {
|
|
16
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok)
|
|
19
|
+
return;
|
|
20
|
+
const awards = (await response.json());
|
|
21
|
+
for (const awardItem of Array.isArray(awards) ? awards : []) {
|
|
22
|
+
if (awardItem.name !== 'eyes' || awardItem.user?.username !== botUsername || typeof awardItem.id !== 'number')
|
|
23
|
+
continue;
|
|
24
|
+
await fetch(`${baseUrl}/api/v4/projects/${projectId}/merge_requests/${mrIid}/award_emoji/${awardItem.id}`, {
|
|
25
|
+
method: 'DELETE',
|
|
26
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
27
|
+
}).catch(() => { });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function createReviewSignals(options) {
|
|
31
|
+
const { baseUrl, token, projectId, mrIid, botUsername } = options;
|
|
32
|
+
return {
|
|
33
|
+
async start() {
|
|
34
|
+
try {
|
|
35
|
+
await unawardOwn(baseUrl, token, projectId, mrIid, botUsername);
|
|
36
|
+
await award(baseUrl, token, projectId, mrIid, 'eyes');
|
|
37
|
+
}
|
|
38
|
+
catch { /* signalling must never break the review */ }
|
|
39
|
+
},
|
|
40
|
+
async finish(outcome) {
|
|
41
|
+
try {
|
|
42
|
+
await unawardOwn(baseUrl, token, projectId, mrIid, botUsername);
|
|
43
|
+
await award(baseUrl, token, projectId, mrIid, outcome === 'completed' ? 'white_check_mark' : 'warning');
|
|
44
|
+
}
|
|
45
|
+
catch { /* signalling must never break the review */ }
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=review-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-signals.js","sourceRoot":"","sources":["../src/review-signals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,SAAiB,EAAE,KAAa,EAAE,IAAY;IACjG,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,SAAS,mBAAmB,KAAK,cAAc,EAAE;QACzF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACvE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAA;AACJ,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,KAAa,EAAE,SAAiB,EAAE,KAAa,EAAE,WAAmB;IAC7G,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,SAAS,mBAAmB,KAAK,cAAc,EAAE;QAC1G,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;KACpC,CAAC,CAAA;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAM;IACxB,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwE,CAAA;IAC7G,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ;YAAE,SAAQ;QACvH,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,SAAS,mBAAmB,KAAK,gBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE;YACzG,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;SACpC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAkG;IACpI,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;IACjE,OAAO;QACL,KAAK,CAAC,KAAK;YACT,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;gBAC/D,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YACvD,CAAC;YAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;gBAC/D,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YACzG,CAAC;YAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;QAC1D,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constant-time comparison of two secrets through sha256 digests, so differing
|
|
3
|
+
* lengths leak nothing and `timingSafeEqual`'s equal-length requirement is
|
|
4
|
+
* always met. Fails closed when either side is missing.
|
|
5
|
+
*/
|
|
6
|
+
export declare function secretsMatch(provided: string | string[] | undefined, expected: string | undefined): boolean;
|
|
7
|
+
//# sourceMappingURL=secure-compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-compare.d.ts","sourceRoot":"","sources":["../src/secure-compare.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK3G"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createHash, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Constant-time comparison of two secrets through sha256 digests, so differing
|
|
4
|
+
* lengths leak nothing and `timingSafeEqual`'s equal-length requirement is
|
|
5
|
+
* always met. Fails closed when either side is missing.
|
|
6
|
+
*/
|
|
7
|
+
export function secretsMatch(provided, expected) {
|
|
8
|
+
if (provided === undefined || expected === undefined || expected === '')
|
|
9
|
+
return false;
|
|
10
|
+
const providedDigest = createHash('sha256').update(Array.isArray(provided) ? provided[0] ?? '' : provided).digest();
|
|
11
|
+
const expectedDigest = createHash('sha256').update(expected).digest();
|
|
12
|
+
return timingSafeEqual(providedDigest, expectedDigest);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=secure-compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-compare.js","sourceRoot":"","sources":["../src/secure-compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEzD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAAuC,EAAE,QAA4B;IAChG,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IACnH,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IACrE,OAAO,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;AACxD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
export declare const name = "maestro-settings-rpc";
|
|
3
|
+
export declare const inject: string[];
|
|
4
|
+
export declare const MAESTRO_RPC_CHANNEL = "/dsh-maestro-review";
|
|
5
|
+
export declare const MAESTRO_ENDPOINTS: Readonly<{
|
|
6
|
+
status: "maestro.status";
|
|
7
|
+
getConfig: "maestro.getConfig";
|
|
8
|
+
saveConfig: "maestro.saveConfig";
|
|
9
|
+
tunnelStart: "maestro.tunnelStart";
|
|
10
|
+
tunnelStop: "maestro.tunnelStop";
|
|
11
|
+
proxyStatus: "maestro.proxyStatus";
|
|
12
|
+
getPin: "maestro.getPin";
|
|
13
|
+
rotatePin: "maestro.rotatePin";
|
|
14
|
+
lanPinStatus: "maestro.lanPin.status";
|
|
15
|
+
lanPinSetEnabled: "maestro.lanPin.setEnabled";
|
|
16
|
+
lanPinRotate: "maestro.lanPin.rotate";
|
|
17
|
+
reviewsList: "maestro.reviews.list";
|
|
18
|
+
modelsList: "maestro.models.list";
|
|
19
|
+
modelsCurrent: "maestro.models.current";
|
|
20
|
+
}>;
|
|
21
|
+
export declare function apply(ctx: Context): void;
|
|
22
|
+
//# sourceMappingURL=settings-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc.d.ts","sourceRoot":"","sources":["../src/settings-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AASlD,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,eAAO,MAAM,MAAM,UAAkC,CAAA;AA6FrD,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AACxD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAe5B,CAAA;AAwBF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAyGxC"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { existsSync, statSync } from 'node:fs';
|
|
2
|
+
import { loadUserConfig, saveUserConfig } from './config-store.js';
|
|
3
|
+
import { listReviews } from './review-history.js';
|
|
4
|
+
import { readPin, rotatePin, readLanPin, rotateLanPin } from './pin-store.js';
|
|
5
|
+
import { pinRotationText } from './notify.js';
|
|
6
|
+
export const name = 'maestro-settings-rpc';
|
|
7
|
+
export const inject = ['connection', 'maestroTunnel'];
|
|
8
|
+
/** Keys the Settings card may persist; anything else is a rejected save. */
|
|
9
|
+
const SAVABLE_KEYS = new Set([
|
|
10
|
+
'gitlabBaseUrl', 'gitlabToken', 'botUsername', 'webhookSecret', 'webhookPort',
|
|
11
|
+
'projectMappings', 'reviewModel', 'autoRereviewOnPush', 'agentTimeoutMs', 'reviewSessionRetentionDays',
|
|
12
|
+
'tunnelMode', 'quickTarget', 'tunnelId', 'tunnelCredentialsFile', 'tunnelHostname',
|
|
13
|
+
'proxyPort', 'proxyHost', 'lanPinEnabled', 'telegramBotToken', 'telegramChatId',
|
|
14
|
+
'telegramReviewNotifications',
|
|
15
|
+
]);
|
|
16
|
+
function validateReviewModel(value) {
|
|
17
|
+
if (value === null || value === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
if (typeof value !== 'object' || Array.isArray(value))
|
|
20
|
+
return 'reviewModel must be an object.';
|
|
21
|
+
const { provider, model, reasoningEffort } = value;
|
|
22
|
+
if (typeof provider !== 'string' || provider.trim() === '')
|
|
23
|
+
return 'reviewModel.provider must be a non-empty string.';
|
|
24
|
+
if (typeof model !== 'string' || model.trim() === '')
|
|
25
|
+
return 'reviewModel.model must be a non-empty string.';
|
|
26
|
+
if (reasoningEffort !== undefined && typeof reasoningEffort !== 'string')
|
|
27
|
+
return 'reviewModel.reasoningEffort must be a string.';
|
|
28
|
+
if (typeof reasoningEffort === 'string' && reasoningEffort.trim() === '')
|
|
29
|
+
return 'reviewModel.reasoningEffort must be a non-empty string when provided.';
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/** Secrets never returned to the client; the UI learns only their presence. */
|
|
33
|
+
const SECRET_KEYS = ['gitlabToken', 'webhookSecret', 'telegramBotToken'];
|
|
34
|
+
function maskSecrets(config) {
|
|
35
|
+
const masked = { ...config };
|
|
36
|
+
for (const key of SECRET_KEYS) {
|
|
37
|
+
if (typeof config[key] === 'string' && config[key] !== '') {
|
|
38
|
+
delete masked[key];
|
|
39
|
+
masked[`has${key.charAt(0).toUpperCase()}${key.slice(1)}`] = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return masked;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate a save payload from the Settings card. Secrets follow a
|
|
46
|
+
* three-state rule: absent keeps the stored value, `''` clears it, a
|
|
47
|
+
* non-empty string replaces it. A mapping's `localRepoPath` must be an
|
|
48
|
+
* existing directory containing a `.git` entry, because reviews check out
|
|
49
|
+
* worktrees from it.
|
|
50
|
+
*/
|
|
51
|
+
function validateSavePayload(payload) {
|
|
52
|
+
if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) {
|
|
53
|
+
return { ok: false, message: 'Settings payload must be a JSON object.' };
|
|
54
|
+
}
|
|
55
|
+
const patch = {};
|
|
56
|
+
for (const [key, value] of Object.entries(payload)) {
|
|
57
|
+
if (!SAVABLE_KEYS.has(key)) {
|
|
58
|
+
return { ok: false, message: `Unknown settings key "${key}".` };
|
|
59
|
+
}
|
|
60
|
+
if (key === 'projectMappings') {
|
|
61
|
+
if (!Array.isArray(value))
|
|
62
|
+
return { ok: false, message: 'projectMappings must be an array.' };
|
|
63
|
+
for (const mapping of value) {
|
|
64
|
+
if (typeof mapping !== 'object' || mapping === null)
|
|
65
|
+
return { ok: false, message: 'Each project mapping must be an object.' };
|
|
66
|
+
const { projectPath, localRepoPath, reviewModel } = mapping;
|
|
67
|
+
if (typeof projectPath !== 'string' || projectPath.trim() === '')
|
|
68
|
+
return { ok: false, message: 'Each mapping needs a non-empty projectPath.' };
|
|
69
|
+
if (typeof localRepoPath !== 'string' || localRepoPath.trim() === '')
|
|
70
|
+
return { ok: false, message: 'Each mapping needs a non-empty localRepoPath.' };
|
|
71
|
+
if (localRepoPath !== '/' && !localRepoPath.startsWith('/')) {
|
|
72
|
+
return { ok: false, message: `localRepoPath "${String(localRepoPath)}" must be an absolute path.` };
|
|
73
|
+
}
|
|
74
|
+
if (!existsSync(localRepoPath) || !statSync(localRepoPath).isDirectory() || !existsSync(`${localRepoPath}/.git`)) {
|
|
75
|
+
return { ok: false, message: `localRepoPath "${localRepoPath}" is not an existing git repository checkout.` };
|
|
76
|
+
}
|
|
77
|
+
if (reviewModel !== undefined) {
|
|
78
|
+
const err = validateReviewModel(reviewModel);
|
|
79
|
+
if (err !== null)
|
|
80
|
+
return { ok: false, message: `projectMappings reviewModel: ${err}` };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (key === 'reviewModel') {
|
|
85
|
+
if (value === null) {
|
|
86
|
+
patch[key] = undefined;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const err = validateReviewModel(value);
|
|
90
|
+
if (err !== null)
|
|
91
|
+
return { ok: false, message: err };
|
|
92
|
+
}
|
|
93
|
+
if (key === 'webhookPort' && value !== undefined && (typeof value !== 'number' || !Number.isInteger(value) || value < 1 || value > 65535)) {
|
|
94
|
+
return { ok: false, message: 'webhookPort must be an integer between 1 and 65535.' };
|
|
95
|
+
}
|
|
96
|
+
if (key === 'agentTimeoutMs' && value !== undefined && (typeof value !== 'number' || value < 1000)) {
|
|
97
|
+
return { ok: false, message: 'agentTimeoutMs must be at least 1000 ms.' };
|
|
98
|
+
}
|
|
99
|
+
if (key === 'reviewSessionRetentionDays' && value !== undefined && (typeof value !== 'number' || value < 0)) {
|
|
100
|
+
return { ok: false, message: 'reviewSessionRetentionDays must be 0 (off) or a positive number of days.' };
|
|
101
|
+
}
|
|
102
|
+
patch[key] = value;
|
|
103
|
+
}
|
|
104
|
+
return { ok: true, patch };
|
|
105
|
+
}
|
|
106
|
+
export const MAESTRO_RPC_CHANNEL = '/dsh-maestro-review';
|
|
107
|
+
export const MAESTRO_ENDPOINTS = Object.freeze({
|
|
108
|
+
status: 'maestro.status',
|
|
109
|
+
getConfig: 'maestro.getConfig',
|
|
110
|
+
saveConfig: 'maestro.saveConfig',
|
|
111
|
+
tunnelStart: 'maestro.tunnelStart',
|
|
112
|
+
tunnelStop: 'maestro.tunnelStop',
|
|
113
|
+
proxyStatus: 'maestro.proxyStatus',
|
|
114
|
+
getPin: 'maestro.getPin',
|
|
115
|
+
rotatePin: 'maestro.rotatePin',
|
|
116
|
+
lanPinStatus: 'maestro.lanPin.status',
|
|
117
|
+
lanPinSetEnabled: 'maestro.lanPin.setEnabled',
|
|
118
|
+
lanPinRotate: 'maestro.lanPin.rotate',
|
|
119
|
+
reviewsList: 'maestro.reviews.list',
|
|
120
|
+
modelsList: 'maestro.models.list',
|
|
121
|
+
modelsCurrent: 'maestro.models.current',
|
|
122
|
+
});
|
|
123
|
+
function ok(value) {
|
|
124
|
+
return { ok: true, value };
|
|
125
|
+
}
|
|
126
|
+
function fail(message) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
error: {
|
|
130
|
+
code: 'bad-request',
|
|
131
|
+
message,
|
|
132
|
+
// Synthetic details, not real Zod validation output: `bad-request`'s real `details`
|
|
133
|
+
// shape is `{ issues: ZodIssue[] }` from the `zod` package (a specific discriminated
|
|
134
|
+
// union), but this is an app-level "unknown endpoint" error being shoehorned into
|
|
135
|
+
// DSH's shared RPC error taxonomy, not an actual Zod-validated payload. Constructing
|
|
136
|
+
// a byte-perfect ZodIssue here would be disproportionate, so we cast this one value
|
|
137
|
+
// to the narrow per-code details type (not the wider `RpcError['details']` union,
|
|
138
|
+
// which doesn't satisfy the 'bad-request' discriminant on its own).
|
|
139
|
+
details: { issues: [{ message }] },
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function apply(ctx) {
|
|
144
|
+
const handler = async (endpoint, payload) => {
|
|
145
|
+
if (endpoint === MAESTRO_ENDPOINTS.status) {
|
|
146
|
+
return ok(ctx.maestroTunnel.status());
|
|
147
|
+
}
|
|
148
|
+
if (endpoint === MAESTRO_ENDPOINTS.getConfig) {
|
|
149
|
+
return ok(maskSecrets(await loadUserConfig()));
|
|
150
|
+
}
|
|
151
|
+
if (endpoint === MAESTRO_ENDPOINTS.saveConfig) {
|
|
152
|
+
const validated = validateSavePayload(payload);
|
|
153
|
+
if (!validated.ok)
|
|
154
|
+
return fail(validated.message);
|
|
155
|
+
const merged = await saveUserConfig(validated.patch);
|
|
156
|
+
return ok(maskSecrets(merged));
|
|
157
|
+
}
|
|
158
|
+
if (endpoint === MAESTRO_ENDPOINTS.tunnelStart) {
|
|
159
|
+
return ok(await ctx.maestroTunnel.start());
|
|
160
|
+
}
|
|
161
|
+
if (endpoint === MAESTRO_ENDPOINTS.tunnelStop) {
|
|
162
|
+
return ok(await ctx.maestroTunnel.stop());
|
|
163
|
+
}
|
|
164
|
+
if (endpoint === MAESTRO_ENDPOINTS.proxyStatus) {
|
|
165
|
+
return ok(ctx.maestroTunnel.proxyStatus());
|
|
166
|
+
}
|
|
167
|
+
if (endpoint === MAESTRO_ENDPOINTS.getPin) {
|
|
168
|
+
return ok({ pin: await readPin() });
|
|
169
|
+
}
|
|
170
|
+
if (endpoint === MAESTRO_ENDPOINTS.rotatePin) {
|
|
171
|
+
const pin = await rotatePin();
|
|
172
|
+
// Delivery is deliberately detached: a slow/unavailable notifier cannot make the
|
|
173
|
+
// explicit security operation appear to fail or hold the Settings UI open.
|
|
174
|
+
void loadUserConfig().then((config) => {
|
|
175
|
+
const notifier = ctx.get?.('maestroNotifier');
|
|
176
|
+
if (notifier === undefined)
|
|
177
|
+
return undefined;
|
|
178
|
+
return notifier.send('telegram', { botToken: config.telegramBotToken, chatId: config.telegramChatId }, { text: pinRotationText(pin) });
|
|
179
|
+
}).then((delivery) => {
|
|
180
|
+
if (!delivery)
|
|
181
|
+
return;
|
|
182
|
+
if (delivery.sent) {
|
|
183
|
+
ctx.logger?.info?.('maestro-telegram: PIN rotation notification delivered');
|
|
184
|
+
}
|
|
185
|
+
else if (delivery.reason === 'request-failed') {
|
|
186
|
+
ctx.logger?.warn?.('maestro-telegram: PIN rotation notification failed');
|
|
187
|
+
}
|
|
188
|
+
}).catch(() => {
|
|
189
|
+
ctx.logger?.warn?.('maestro-telegram: PIN rotation notification failed');
|
|
190
|
+
});
|
|
191
|
+
return ok({ pin });
|
|
192
|
+
}
|
|
193
|
+
if (endpoint === MAESTRO_ENDPOINTS.lanPinStatus) {
|
|
194
|
+
const config = await loadUserConfig();
|
|
195
|
+
// Disabled by default; the LAN PIN is only read (and generated) once the
|
|
196
|
+
// user opts in, so an untouched install keeps LAN access open.
|
|
197
|
+
if (config.lanPinEnabled !== true)
|
|
198
|
+
return ok({ enabled: false });
|
|
199
|
+
return ok({ enabled: true, pin: await readLanPin() });
|
|
200
|
+
}
|
|
201
|
+
if (endpoint === MAESTRO_ENDPOINTS.lanPinSetEnabled) {
|
|
202
|
+
const enabled = payload?.enabled === true;
|
|
203
|
+
await saveUserConfig({ lanPinEnabled: enabled });
|
|
204
|
+
// The proxy reads lanPinEnabled at boot; a reload applies the new gate
|
|
205
|
+
// without waiting for a harness restart.
|
|
206
|
+
await ctx.maestroTunnel.reloadConfig();
|
|
207
|
+
return ok({ enabled });
|
|
208
|
+
}
|
|
209
|
+
if (endpoint === MAESTRO_ENDPOINTS.lanPinRotate) {
|
|
210
|
+
return ok({ pin: await rotateLanPin() });
|
|
211
|
+
}
|
|
212
|
+
if (endpoint === MAESTRO_ENDPOINTS.reviewsList) {
|
|
213
|
+
return ok(await listReviews(20));
|
|
214
|
+
}
|
|
215
|
+
if (endpoint === MAESTRO_ENDPOINTS.modelsCurrent) {
|
|
216
|
+
const agentDefaultModel = ctx.get('agentDefaultModel');
|
|
217
|
+
const fallback = agentDefaultModel?.currentSelection() ?? { provider: 'deepseek-official', model: 'deepseek-chat' };
|
|
218
|
+
return ok(fallback);
|
|
219
|
+
}
|
|
220
|
+
if (endpoint === MAESTRO_ENDPOINTS.modelsList) {
|
|
221
|
+
const agentDefaultModel = ctx.get('agentDefaultModel');
|
|
222
|
+
const fallbackSelection = agentDefaultModel?.currentSelection() ?? { provider: 'deepseek-official', model: 'deepseek-chat' };
|
|
223
|
+
const llm = ctx.get('llm');
|
|
224
|
+
if (llm?.listProviders !== undefined && llm?.listModels !== undefined) {
|
|
225
|
+
try {
|
|
226
|
+
const providers = llm.listProviders();
|
|
227
|
+
const groups = [];
|
|
228
|
+
for (const p of providers) {
|
|
229
|
+
try {
|
|
230
|
+
const models = await llm.listModels(p.id);
|
|
231
|
+
groups.push({ provider: p.id, name: p.name, models: models.map(m => m.id) });
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
groups.push({ provider: p.id, name: p.name, models: [] });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (groups.length > 0)
|
|
238
|
+
return ok({ groups, current: fallbackSelection });
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// fall through to fallback
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Fallback: single group containing the current selection so dropdown still works
|
|
245
|
+
return ok({ groups: [{ provider: fallbackSelection.provider, name: fallbackSelection.provider, models: [fallbackSelection.model] }], current: fallbackSelection });
|
|
246
|
+
}
|
|
247
|
+
return fail(`Unknown endpoint: ${endpoint}`);
|
|
248
|
+
};
|
|
249
|
+
const disposeRpc = ctx.connection.rpc.handle(MAESTRO_RPC_CHANNEL, handler, { authority: 'loopback' });
|
|
250
|
+
ctx.effect(() => () => { disposeRpc(); }, 'maestro-settings-rpc teardown');
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=settings-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc.js","sourceRoot":"","sources":["../src/settings-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
export declare const name = "maestro-skills-tool";
|
|
3
|
+
export declare const inject: string[];
|
|
4
|
+
export type ReviewSkillProfile = 'magento2' | 'generic';
|
|
5
|
+
/**
|
|
6
|
+
* Exact skill names rather than a fuzzy search: a review must not silently
|
|
7
|
+
* omit a security or quality pass just because a similarly named skill exists.
|
|
8
|
+
*/
|
|
9
|
+
export declare const REVIEW_PROFILE_SKILLS: Record<ReviewSkillProfile, readonly string[]>;
|
|
10
|
+
export declare const MAESTRO_SKILLS_INSTALL_COMMAND = "curl -fsSL https://raw.githubusercontent.com/ddtcorex/maestro-skills/master/install.sh | bash -s -- --scope personal --target dsh --skills govard-toolbox,govard-magento,magento2-dev-core,magento2-code-review,magento2-linter,magento2-security-scan,magento2-performance-audit -y";
|
|
11
|
+
export declare function loadedReviewProfile(ctx: Context): ReviewSkillProfile | undefined;
|
|
12
|
+
interface SkillSummaryLike {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
}
|
|
16
|
+
interface SkillDefinitionLike {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
content: string;
|
|
20
|
+
}
|
|
21
|
+
interface SkillsServiceLike {
|
|
22
|
+
list(): Promise<SkillSummaryLike[]>;
|
|
23
|
+
get(name: string): Promise<SkillDefinitionLike | undefined>;
|
|
24
|
+
}
|
|
25
|
+
/** Single owned access path to the skills service (declared via `inject`). */
|
|
26
|
+
export declare function skillsService(ctx: Context): SkillsServiceLike;
|
|
27
|
+
export declare function apply(ctx: Context): void;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=skills-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-tool.d.ts","sourceRoot":"","sources":["../src/skills-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,eAAO,MAAM,IAAI,wBAAwB,CAAA;AACzC,eAAO,MAAM,MAAM,UAAsB,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,CAAA;AAEvD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAY/E,CAAA;AAED,eAAO,MAAM,8BAA8B,yRAAyR,CAAA;AAQpU,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAEhF;AAQD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,iBAAiB;IACzB,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAA;CAC5D;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAE7D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA8HxC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
|
+
export const name = 'maestro-skills-tool';
|
|
3
|
+
export const inject = ['skills', 'tools'];
|
|
4
|
+
/**
|
|
5
|
+
* Exact skill names rather than a fuzzy search: a review must not silently
|
|
6
|
+
* omit a security or quality pass just because a similarly named skill exists.
|
|
7
|
+
*/
|
|
8
|
+
export const REVIEW_PROFILE_SKILLS = {
|
|
9
|
+
magento2: [
|
|
10
|
+
'govard-toolbox',
|
|
11
|
+
'govard-magento',
|
|
12
|
+
'magento2-dev-core',
|
|
13
|
+
'magento2-code-review',
|
|
14
|
+
'magento2-linter',
|
|
15
|
+
'magento2-security-scan',
|
|
16
|
+
'magento2-performance-audit',
|
|
17
|
+
],
|
|
18
|
+
/** Diff review against general best practices; no project skill set required. */
|
|
19
|
+
generic: [],
|
|
20
|
+
};
|
|
21
|
+
export const MAESTRO_SKILLS_INSTALL_COMMAND = 'curl -fsSL https://raw.githubusercontent.com/ddtcorex/maestro-skills/master/install.sh | bash -s -- --scope personal --target dsh --skills govard-toolbox,govard-magento,magento2-dev-core,magento2-code-review,magento2-linter,magento2-security-scan,magento2-performance-audit -y';
|
|
22
|
+
// This is deliberately process-local and keyed by the reviewer Agent object,
|
|
23
|
+
// which every Cordis child context inherits. Preset mounting inserts child
|
|
24
|
+
// contexts, so keying on the plugin's context would make a successful load
|
|
25
|
+
// invisible to the orchestrator's agent context.
|
|
26
|
+
const loadedReviewProfiles = new WeakMap();
|
|
27
|
+
export function loadedReviewProfile(ctx) {
|
|
28
|
+
return ctx.agent === undefined ? undefined : loadedReviewProfiles.get(ctx.agent);
|
|
29
|
+
}
|
|
30
|
+
/** Single owned access path to the skills service (declared via `inject`). */
|
|
31
|
+
export function skillsService(ctx) {
|
|
32
|
+
return ctx.skills;
|
|
33
|
+
}
|
|
34
|
+
export function apply(ctx) {
|
|
35
|
+
ctx.tools.register(defineTool({
|
|
36
|
+
name: 'maestro_get_skills',
|
|
37
|
+
description: 'Search the DSH skill knowledge base by keyword (matches skill name or description) and return the full content of every matching skill.',
|
|
38
|
+
parameters: {
|
|
39
|
+
query: { type: 'string', required: true, description: 'Keyword to match against skill name/description, e.g. "magento2" or "govard-laravel".' },
|
|
40
|
+
},
|
|
41
|
+
output: {
|
|
42
|
+
// The resolved skill content is part of the validated schema (matching
|
|
43
|
+
// dsh-tools' own `job_output` pattern of declaring every render-needed
|
|
44
|
+
// field on `output.schema`) rather than smuggled past validation on a
|
|
45
|
+
// key excluded from `properties`: `render(args, value)` has no third
|
|
46
|
+
// `extra` argument (verified against
|
|
47
|
+
// node_modules/@deepseek-ai/dsh-tools/lib/types/schema.d.ts), and an
|
|
48
|
+
// `additionalProperties: false` object schema REJECTS undeclared keys
|
|
49
|
+
// outright rather than merely leaving them unvalidated, so a hidden
|
|
50
|
+
// field would fail every call at the registry's output-validation step.
|
|
51
|
+
schema: {
|
|
52
|
+
type: 'object',
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
properties: {
|
|
55
|
+
matches: { type: 'number', required: true },
|
|
56
|
+
skills: {
|
|
57
|
+
type: 'array',
|
|
58
|
+
required: true,
|
|
59
|
+
items: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
additionalProperties: false,
|
|
62
|
+
properties: {
|
|
63
|
+
name: { type: 'string', required: true },
|
|
64
|
+
content: { type: 'string', required: true },
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
render: (_args, value) => {
|
|
71
|
+
if (value.skills.length === 0) {
|
|
72
|
+
return [{ type: 'text', text: 'No skills matched that query.' }];
|
|
73
|
+
}
|
|
74
|
+
const text = value.skills
|
|
75
|
+
.map(s => `## ${s.name}\n\n${s.content}`)
|
|
76
|
+
.join('\n\n---\n\n');
|
|
77
|
+
return [{ type: 'text', text }];
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
async execute(args) {
|
|
81
|
+
const skills = skillsService(ctx);
|
|
82
|
+
const summaries = await skills.list();
|
|
83
|
+
const query = args.query.toLowerCase();
|
|
84
|
+
const matched = summaries.filter(s => s.name.toLowerCase().includes(query) || s.description.toLowerCase().includes(query));
|
|
85
|
+
if (matched.length === 0) {
|
|
86
|
+
throw new Error(`No skill matched query "${args.query}".`);
|
|
87
|
+
}
|
|
88
|
+
const resolved = [];
|
|
89
|
+
for (const summary of matched) {
|
|
90
|
+
const def = await skills.get(summary.name);
|
|
91
|
+
if (def !== undefined)
|
|
92
|
+
resolved.push(def);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
matches: resolved.length,
|
|
96
|
+
skills: resolved.map(s => ({ name: s.name, content: s.content })),
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
}));
|
|
100
|
+
ctx.tools.register(defineTool({
|
|
101
|
+
name: 'maestro_load_review_profile',
|
|
102
|
+
description: 'Load the complete, exact skill set required for a configured review profile. Fails if any required skill is unavailable.',
|
|
103
|
+
parameters: {
|
|
104
|
+
profile: { type: 'string', required: true, description: 'Review profile configured for the project. Supported: "magento2" (full Magento skill set), "generic" (no skills required).' },
|
|
105
|
+
},
|
|
106
|
+
output: {
|
|
107
|
+
schema: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
additionalProperties: false,
|
|
110
|
+
properties: {
|
|
111
|
+
profile: { type: 'string', required: true },
|
|
112
|
+
skills: {
|
|
113
|
+
type: 'array',
|
|
114
|
+
required: true,
|
|
115
|
+
items: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
additionalProperties: false,
|
|
118
|
+
properties: {
|
|
119
|
+
name: { type: 'string', required: true },
|
|
120
|
+
content: { type: 'string', required: true },
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
render: (_args, value) => [{
|
|
127
|
+
type: 'text',
|
|
128
|
+
text: value.skills.length === 0
|
|
129
|
+
? `Review profile "${value.profile}" loaded. No project-specific skills are required; review the diff against general correctness, security, and performance best practices.`
|
|
130
|
+
: value.skills.map(s => `## ${s.name}\n\n${s.content}`).join('\n\n---\n\n'),
|
|
131
|
+
}],
|
|
132
|
+
},
|
|
133
|
+
async execute(args, exec) {
|
|
134
|
+
const required = REVIEW_PROFILE_SKILLS[args.profile];
|
|
135
|
+
if (required === undefined) {
|
|
136
|
+
throw new Error(`Unsupported review skill profile "${args.profile}". Supported profiles: ${Object.keys(REVIEW_PROFILE_SKILLS).map(name => `"${name}"`).join(', ')}.`);
|
|
137
|
+
}
|
|
138
|
+
if (exec.agent === undefined) {
|
|
139
|
+
throw new Error('Review profile loader is not running inside an agent context.');
|
|
140
|
+
}
|
|
141
|
+
const skills = skillsService(ctx);
|
|
142
|
+
const available = new Set((await skills.list()).map(skill => skill.name));
|
|
143
|
+
const missing = required.filter(skill => !available.has(skill));
|
|
144
|
+
if (missing.length > 0) {
|
|
145
|
+
throw new Error(`Missing required review skill(s) for profile "${args.profile}": ${missing.join(', ')}. Install maestro-skills for DSH with: ${MAESTRO_SKILLS_INSTALL_COMMAND}`);
|
|
146
|
+
}
|
|
147
|
+
const resolved = await Promise.all(required.map(skill => skills.get(skill)));
|
|
148
|
+
const unavailable = required.filter((_, index) => resolved[index] === undefined);
|
|
149
|
+
if (unavailable.length > 0) {
|
|
150
|
+
throw new Error(`Required review skill(s) could not be loaded: ${unavailable.join(', ')}. Reinstall maestro-skills for DSH with: ${MAESTRO_SKILLS_INSTALL_COMMAND}`);
|
|
151
|
+
}
|
|
152
|
+
loadedReviewProfiles.set(exec.agent, args.profile);
|
|
153
|
+
return {
|
|
154
|
+
profile: args.profile,
|
|
155
|
+
skills: resolved.map(skill => ({ name: skill.name, content: skill.content })),
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=skills-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-tool.js","sourceRoot":"","sources":["../src/skills-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|