dsh-git-worktree 0.1.1 → 0.2.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/CHANGELOG.md +59 -0
- package/LICENSE +21 -21
- package/README.md +115 -37
- package/README.zh.md +115 -37
- package/cordis.patch.yml +7 -7
- package/lib/adapters/registry.js +40 -0
- package/lib/adapters/registry.js.map +1 -1
- package/lib/adapters/safe-file.js +34 -4
- package/lib/adapters/safe-file.js.map +1 -1
- package/lib/client/WorktreeCreateRow.d.ts +7 -0
- package/lib/client/WorktreeCreateRow.js +26 -0
- package/lib/client/WorktreeCreateRow.js.map +1 -0
- package/lib/client/WorktreeReviewRow.d.ts +11 -0
- package/lib/client/WorktreeReviewRow.js +67 -0
- package/lib/client/WorktreeReviewRow.js.map +1 -0
- package/lib/client/actions.d.ts +86 -0
- package/lib/client/actions.js +35 -0
- package/lib/client/actions.js.map +1 -0
- package/lib/client/console-remote/adapter.d.ts +3 -0
- package/lib/client/console-remote/adapter.js +59 -0
- package/lib/client/console-remote/adapter.js.map +1 -0
- package/lib/client/console-remote/index.d.ts +18 -0
- package/lib/client/console-remote/index.js +17 -0
- package/lib/client/console-remote/index.js.map +1 -0
- package/lib/client/index.d.ts +17 -0
- package/lib/client/index.js +44 -0
- package/lib/client/index.js.map +1 -0
- package/lib/client/model.d.ts +68 -0
- package/lib/client/model.js +127 -0
- package/lib/client/model.js.map +1 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
- package/lib/client/pre-session/controller.d.ts +42 -0
- package/lib/client/pre-session/controller.js +149 -0
- package/lib/client/pre-session/controller.js.map +1 -0
- package/lib/client/pre-session/index.d.ts +15 -0
- package/lib/client/pre-session/index.js +16 -0
- package/lib/client/pre-session/index.js.map +1 -0
- package/lib/client/review-console/ReviewActions.d.ts +15 -0
- package/lib/client/review-console/ReviewActions.js +219 -0
- package/lib/client/review-console/ReviewActions.js.map +1 -0
- package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
- package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
- package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
- package/lib/client/review-console/index.d.ts +8 -0
- package/lib/client/review-console/index.js +22 -0
- package/lib/client/review-console/index.js.map +1 -0
- package/lib/client/review-console/review-console.styles.d.ts +1 -0
- package/lib/client/review-console/review-console.styles.js +81 -0
- package/lib/client/review-console/review-console.styles.js.map +1 -0
- package/lib/client/review-console/status-events.d.ts +3 -0
- package/lib/client/review-console/status-events.js +6 -0
- package/lib/client/review-console/status-events.js.map +1 -0
- package/lib/client/styles.d.ts +1 -0
- package/lib/client/styles.js +78 -0
- package/lib/client/styles.js.map +1 -0
- package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
- package/lib/client/target-console/TargetStatusAction.js +46 -0
- package/lib/client/target-console/TargetStatusAction.js.map +1 -0
- package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
- package/lib/client/target-console/WorktreeConsoleView.js +362 -0
- package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
- package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
- package/lib/client/target-console/WorktreeReviewStatus.js +91 -0
- package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
- package/lib/client/target-console/index.d.ts +14 -0
- package/lib/client/target-console/index.js +23 -0
- package/lib/client/target-console/index.js.map +1 -0
- package/lib/client/target-console/target-console.styles.d.ts +1 -0
- package/lib/client/target-console/target-console.styles.js +130 -0
- package/lib/client/target-console/target-console.styles.js.map +1 -0
- package/lib/client.js +6813 -0
- package/lib/commands.d.ts +2 -4
- package/lib/commands.js +54 -28
- package/lib/commands.js.map +1 -1
- package/lib/console-contract.d.ts +236 -0
- package/lib/console-contract.js +86 -0
- package/lib/console-contract.js.map +1 -0
- package/lib/console-host/control-plane.d.ts +29 -0
- package/lib/console-host/control-plane.js +443 -0
- package/lib/console-host/control-plane.js.map +1 -0
- package/lib/console-host/errors.d.ts +6 -0
- package/lib/console-host/errors.js +31 -0
- package/lib/console-host/errors.js.map +1 -0
- package/lib/console-host/projection.d.ts +12 -0
- package/lib/console-host/projection.js +131 -0
- package/lib/console-host/projection.js.map +1 -0
- package/lib/console-host/review-diff.d.ts +18 -0
- package/lib/console-host/review-diff.js +176 -0
- package/lib/console-host/review-diff.js.map +1 -0
- package/lib/console-host/service.d.ts +24 -0
- package/lib/console-host/service.js +131 -0
- package/lib/console-host/service.js.map +1 -0
- package/lib/console-remote/descriptors.d.ts +3 -0
- package/lib/console-remote/descriptors.js +96 -0
- package/lib/console-remote/descriptors.js.map +1 -0
- package/lib/console-remote/remote.d.ts +27 -0
- package/lib/console-remote/remote.js +4 -0
- package/lib/console-remote/remote.js.map +1 -0
- package/lib/console-remote/schemas.d.ts +29 -0
- package/lib/console-remote/schemas.js +143 -0
- package/lib/console-remote/schemas.js.map +1 -0
- package/lib/console-remote/typert.d.ts +3 -0
- package/lib/console-remote/typert.js +14 -0
- package/lib/console-remote/typert.js.map +1 -0
- package/lib/index.d.ts +22 -6
- package/lib/index.js +28 -10
- package/lib/index.js.map +1 -1
- package/lib/managed-worktree-path.d.ts +14 -13
- package/lib/managed-worktree-path.js +32 -22
- package/lib/managed-worktree-path.js.map +1 -1
- package/lib/ports.d.ts +37 -1
- package/lib/session-checkout-apply.d.ts +54 -1
- package/lib/session-checkout-apply.js +318 -28
- package/lib/session-checkout-apply.js.map +1 -1
- package/lib/session-checkout-module.js +853 -33
- package/lib/session-checkout-module.js.map +1 -1
- package/lib/session-target-context.d.ts +6 -0
- package/lib/session-target-context.js +16 -0
- package/lib/session-target-context.js.map +1 -0
- package/lib/tools.d.ts +5 -6
- package/lib/tools.js +43 -233
- package/lib/tools.js.map +1 -1
- package/lib/types.d.ts +57 -11
- package/lib/types.js +6 -6
- package/lib/types.js.map +1 -1
- package/package.json +116 -67
- package/scripts/check-publish.mjs +193 -0
- package/scripts/clean-lib.mjs +7 -0
- package/scripts/dev-dsh-lib.mjs +453 -0
- package/scripts/dev-dsh.mjs +89 -0
- package/scripts/dsh-source-runner.mjs +14 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { consoleStateFromDomain, } from '../console-contract.js';
|
|
2
|
+
function review(record) {
|
|
3
|
+
if (!('review' in record.delivery))
|
|
4
|
+
return undefined;
|
|
5
|
+
const source = record.delivery.review;
|
|
6
|
+
return {
|
|
7
|
+
reviewId: source.reviewId,
|
|
8
|
+
revision: record.revision,
|
|
9
|
+
iteration: source.iteration,
|
|
10
|
+
preparedAt: source.preparedAt,
|
|
11
|
+
summary: source.summary,
|
|
12
|
+
validationStatus: source.validationStatus,
|
|
13
|
+
...(source.validationSummary === undefined ? {} : { validationSummary: source.validationSummary }),
|
|
14
|
+
tests: source.tests.map(item => ({ ...item })),
|
|
15
|
+
changedFiles: [...source.changedFiles],
|
|
16
|
+
suggestedCommitMessage: source.suggestedCommitMessage,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function commitOid(record) {
|
|
20
|
+
return 'commitOid' in record.delivery ? record.delivery.commitOid : null;
|
|
21
|
+
}
|
|
22
|
+
function iteration(record) {
|
|
23
|
+
return 'review' in record.delivery ? record.delivery.review.iteration : record.delivery.iteration;
|
|
24
|
+
}
|
|
25
|
+
export function capabilities(record, callerSessionId, ownerSessionAvailable = true) {
|
|
26
|
+
const owner = callerSessionId === record.ownerSessionId;
|
|
27
|
+
const sourceReservation = callerSessionId === record.sourceSessionId && !ownerSessionAvailable;
|
|
28
|
+
const authorized = owner || callerSessionId === record.sourceSessionId;
|
|
29
|
+
const ready = record.phase === 'ready' && record.delivery.state === 'ready_for_review';
|
|
30
|
+
const previewActive = record.phase === 'ready' && record.delivery.state === 'preview_active';
|
|
31
|
+
const previewDetached = record.phase === 'ready' && record.delivery.state === 'preview_detached';
|
|
32
|
+
const previewRecovery = record.phase === 'recovery_required'
|
|
33
|
+
&& record.delivery.state === 'preview_active'
|
|
34
|
+
&& record.journal?.operation === 'rollback_preview';
|
|
35
|
+
const cleanup = record.delivery.state === 'finalized' || record.delivery.state === 'retained';
|
|
36
|
+
const active = record.phase !== 'discarded';
|
|
37
|
+
return {
|
|
38
|
+
create: false,
|
|
39
|
+
open: authorized && active,
|
|
40
|
+
inspect: authorized,
|
|
41
|
+
discard: (owner || sourceReservation) && active && !cleanup && !previewDetached,
|
|
42
|
+
preflight: owner && ready,
|
|
43
|
+
preview: owner && ready,
|
|
44
|
+
rollbackPreview: owner && (previewActive || previewDetached || previewRecovery),
|
|
45
|
+
finalize: owner && ready,
|
|
46
|
+
finalizePreview: owner && previewActive,
|
|
47
|
+
setRetention: authorized && record.delivery.state === 'retained',
|
|
48
|
+
retryCleanup: authorized && cleanup,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function fallbackOid(record) {
|
|
52
|
+
if ('proof' in record.delivery && record.delivery.proof)
|
|
53
|
+
return record.delivery.proof.localHeadAfter;
|
|
54
|
+
return commitOid(record) ?? record.applyBaseOid ?? record.baseOid;
|
|
55
|
+
}
|
|
56
|
+
export function projectRecord(record, callerSessionId, observed) {
|
|
57
|
+
const projectedReview = review(record);
|
|
58
|
+
const delivery = record.delivery;
|
|
59
|
+
return {
|
|
60
|
+
project: { id: record.projectId, name: record.projectName },
|
|
61
|
+
checkoutId: record.checkoutId,
|
|
62
|
+
sourceSessionId: record.sourceSessionId ?? record.ownerSessionId,
|
|
63
|
+
ownerSessionId: record.ownerSessionId,
|
|
64
|
+
targetSessionId: record.ownerSessionId,
|
|
65
|
+
iteration: iteration(record),
|
|
66
|
+
revision: record.revision,
|
|
67
|
+
state: consoleStateFromDomain({ kind: 'isolated', phase: record.phase, deliveryState: delivery.state }),
|
|
68
|
+
phase: record.phase,
|
|
69
|
+
dirty: observed?.dirty ?? observed?.summary?.dirty ?? false,
|
|
70
|
+
currentOid: observed?.snapshot?.headOid ?? fallbackOid(record),
|
|
71
|
+
commitOid: commitOid(record),
|
|
72
|
+
...(delivery.state === 'retained' ? {
|
|
73
|
+
retention: delivery.retention,
|
|
74
|
+
retainedAt: delivery.retainedAt,
|
|
75
|
+
expiresAt: delivery.expiresAt,
|
|
76
|
+
} : {}),
|
|
77
|
+
...((delivery.state === 'retained' || delivery.state === 'finalized') && delivery.cleanupMessage !== undefined
|
|
78
|
+
? { cleanupMessage: delivery.cleanupMessage }
|
|
79
|
+
: {}),
|
|
80
|
+
...(projectedReview === undefined ? {} : { review: projectedReview }),
|
|
81
|
+
...(delivery.state === 'ready_for_review' ? { reviewSlot: 'available' } : {}),
|
|
82
|
+
...(delivery.state === 'preview_detached' ? {
|
|
83
|
+
previewRecovery: {
|
|
84
|
+
reason: delivery.reason,
|
|
85
|
+
attemptedAction: delivery.attemptedAction,
|
|
86
|
+
},
|
|
87
|
+
} : {}),
|
|
88
|
+
capabilities: capabilities(record, callerSessionId, observed?.ownerSessionAvailable),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function projectDetails(record, callerSessionId, managedRoot, snapshot, dirty, ownerSessionAvailable) {
|
|
92
|
+
return {
|
|
93
|
+
...projectRecord(record, callerSessionId, { snapshot, dirty, ownerSessionAvailable }),
|
|
94
|
+
managedRoot,
|
|
95
|
+
sourceOid: record.baseOid,
|
|
96
|
+
currentBranch: snapshot?.branch ?? null,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function projectLocal(target, sessionId) {
|
|
100
|
+
return {
|
|
101
|
+
project: { ...target.project },
|
|
102
|
+
checkoutId: null,
|
|
103
|
+
sourceSessionId: sessionId,
|
|
104
|
+
ownerSessionId: sessionId,
|
|
105
|
+
targetSessionId: null,
|
|
106
|
+
iteration: 0,
|
|
107
|
+
revision: target.revision,
|
|
108
|
+
state: 'local',
|
|
109
|
+
phase: 'local',
|
|
110
|
+
dirty: target.dirty,
|
|
111
|
+
currentOid: target.current.oid,
|
|
112
|
+
commitOid: null,
|
|
113
|
+
capabilities: {
|
|
114
|
+
create: true,
|
|
115
|
+
open: true,
|
|
116
|
+
inspect: true,
|
|
117
|
+
discard: false,
|
|
118
|
+
preflight: false,
|
|
119
|
+
preview: false,
|
|
120
|
+
rollbackPreview: false,
|
|
121
|
+
finalize: false,
|
|
122
|
+
finalizePreview: false,
|
|
123
|
+
setRetention: false,
|
|
124
|
+
retryCleanup: false,
|
|
125
|
+
},
|
|
126
|
+
managedRoot: null,
|
|
127
|
+
sourceOid: target.source.oid,
|
|
128
|
+
currentBranch: target.current.branch,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/console-host/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WorktreeConsoleReviewDiffResponse } from '../console-contract.js';
|
|
2
|
+
export declare const REVIEW_DIFF_MAX_FILES = 200;
|
|
3
|
+
export declare const REVIEW_DIFF_MAX_PATCH_BYTES: number;
|
|
4
|
+
export declare const REVIEW_DIFF_MAX_PAYLOAD_BYTES: number;
|
|
5
|
+
export interface ReviewDiffReadInput {
|
|
6
|
+
managedRoot: string;
|
|
7
|
+
baseOid: string;
|
|
8
|
+
reviewId: string;
|
|
9
|
+
revision: number;
|
|
10
|
+
changedFiles: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export interface WorktreeReviewDiffReader {
|
|
13
|
+
read(input: ReviewDiffReadInput): Promise<WorktreeConsoleReviewDiffResponse>;
|
|
14
|
+
}
|
|
15
|
+
export declare class ReviewDiffStaleError extends Error {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export declare function createGitWorktreeReviewDiffReader(): WorktreeReviewDiffReader;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdir, mkdtemp, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { isAbsolute, join, posix } from 'node:path';
|
|
5
|
+
export const REVIEW_DIFF_MAX_FILES = 200;
|
|
6
|
+
export const REVIEW_DIFF_MAX_PATCH_BYTES = 100 * 1024;
|
|
7
|
+
export const REVIEW_DIFF_MAX_PAYLOAD_BYTES = 1024 * 1024;
|
|
8
|
+
export class ReviewDiffStaleError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'ReviewDiffStaleError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async function git(cwd, args, env, maxBytes) {
|
|
15
|
+
return await new Promise((resolveResult, reject) => {
|
|
16
|
+
const child = spawn('git', ['-c', 'core.quotePath=false', ...args], {
|
|
17
|
+
cwd,
|
|
18
|
+
env: { ...env, GIT_TERMINAL_PROMPT: '0' },
|
|
19
|
+
windowsHide: true,
|
|
20
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
21
|
+
});
|
|
22
|
+
const stdout = [];
|
|
23
|
+
const stderr = [];
|
|
24
|
+
let stdoutBytes = 0;
|
|
25
|
+
let stderrBytes = 0;
|
|
26
|
+
let truncated = false;
|
|
27
|
+
child.stdout.on('data', (chunk) => {
|
|
28
|
+
const remaining = Math.max(0, maxBytes - stdoutBytes);
|
|
29
|
+
if (remaining > 0)
|
|
30
|
+
stdout.push(chunk.subarray(0, remaining));
|
|
31
|
+
stdoutBytes += chunk.byteLength;
|
|
32
|
+
if (stdoutBytes > maxBytes)
|
|
33
|
+
truncated = true;
|
|
34
|
+
});
|
|
35
|
+
child.stderr.on('data', (chunk) => {
|
|
36
|
+
const remaining = Math.max(0, 64 * 1024 - stderrBytes);
|
|
37
|
+
if (remaining > 0)
|
|
38
|
+
stderr.push(chunk.subarray(0, remaining));
|
|
39
|
+
stderrBytes += chunk.byteLength;
|
|
40
|
+
});
|
|
41
|
+
child.once('error', reject);
|
|
42
|
+
child.once('close', (code) => {
|
|
43
|
+
if (code === 0)
|
|
44
|
+
resolveResult({ stdout: Buffer.concat(stdout), truncated });
|
|
45
|
+
else
|
|
46
|
+
reject(new Error(`git ${args[0] ?? ''} failed (${String(code)}): ${Buffer.concat(stderr).toString('utf8').trim()}`));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function projectPath(value) {
|
|
51
|
+
if (!value || value.includes('\0') || value.includes('\\') || isAbsolute(value))
|
|
52
|
+
return false;
|
|
53
|
+
const normalized = posix.normalize(value);
|
|
54
|
+
return normalized === value && normalized !== '..' && !normalized.startsWith('../') && !normalized.startsWith('/');
|
|
55
|
+
}
|
|
56
|
+
function utf8Prefix(value, maxBytes) {
|
|
57
|
+
const bytes = Buffer.from(value, 'utf8');
|
|
58
|
+
if (bytes.byteLength <= maxBytes)
|
|
59
|
+
return value;
|
|
60
|
+
let end = Math.max(0, maxBytes);
|
|
61
|
+
while (end > 0 && end < bytes.byteLength && (bytes[end] & 0xc0) === 0x80)
|
|
62
|
+
end -= 1;
|
|
63
|
+
return bytes.subarray(0, end).toString('utf8');
|
|
64
|
+
}
|
|
65
|
+
function payloadBytes(response) {
|
|
66
|
+
return Buffer.byteLength(JSON.stringify(response), 'utf8');
|
|
67
|
+
}
|
|
68
|
+
function parseNameStatus(output) {
|
|
69
|
+
const fields = output.toString('utf8').split('\0');
|
|
70
|
+
const entries = [];
|
|
71
|
+
let index = 0;
|
|
72
|
+
while (index < fields.length) {
|
|
73
|
+
const code = fields[index++];
|
|
74
|
+
if (!code)
|
|
75
|
+
break;
|
|
76
|
+
if (code.startsWith('R') || code.startsWith('C')) {
|
|
77
|
+
const previousPath = fields[index++] ?? '';
|
|
78
|
+
const path = fields[index++] ?? '';
|
|
79
|
+
entries.push({ path, previousPath, status: 'renamed' });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const path = fields[index++] ?? '';
|
|
83
|
+
entries.push({
|
|
84
|
+
path,
|
|
85
|
+
status: code.startsWith('A') ? 'added' : code.startsWith('D') ? 'deleted' : 'modified',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return entries;
|
|
89
|
+
}
|
|
90
|
+
function sortedUnique(values) {
|
|
91
|
+
return [...new Set(values)].sort();
|
|
92
|
+
}
|
|
93
|
+
function changedPathSet(entries) {
|
|
94
|
+
return sortedUnique(entries.flatMap(entry => entry.previousPath === undefined ? [entry.path] : [entry.previousPath, entry.path]));
|
|
95
|
+
}
|
|
96
|
+
export function createGitWorktreeReviewDiffReader() {
|
|
97
|
+
return {
|
|
98
|
+
async read(input) {
|
|
99
|
+
const expected = sortedUnique(input.changedFiles);
|
|
100
|
+
if (expected.some(path => !projectPath(path)))
|
|
101
|
+
throw new Error('review changedFiles contains an unsafe project-relative path');
|
|
102
|
+
const tempRoot = await mkdtemp(join(tmpdir(), 'dsh-worktree-console-diff-'));
|
|
103
|
+
const objectDirectory = join(tempRoot, 'objects');
|
|
104
|
+
await mkdir(objectDirectory, { recursive: true });
|
|
105
|
+
try {
|
|
106
|
+
const objects = (await git(input.managedRoot, ['rev-parse', '--path-format=absolute', '--git-path', 'objects'], process.env, 32 * 1024)).stdout.toString('utf8').trim();
|
|
107
|
+
const env = {
|
|
108
|
+
...process.env,
|
|
109
|
+
GIT_INDEX_FILE: join(tempRoot, 'index'),
|
|
110
|
+
GIT_OBJECT_DIRECTORY: objectDirectory,
|
|
111
|
+
GIT_ALTERNATE_OBJECT_DIRECTORIES: objects,
|
|
112
|
+
GIT_CONFIG_NOSYSTEM: '1',
|
|
113
|
+
};
|
|
114
|
+
await git(input.managedRoot, ['read-tree', input.baseOid], env, 16 * 1024);
|
|
115
|
+
await git(input.managedRoot, ['add', '-A', '--', '.'], env, 16 * 1024);
|
|
116
|
+
const names = await git(input.managedRoot, ['diff', '--cached', '--name-status', '-z', '--find-renames', input.baseOid, '--', '.'], env, 4 * 1024 * 1024);
|
|
117
|
+
if (names.truncated)
|
|
118
|
+
throw new Error('review diff path inventory exceeds the safe read budget');
|
|
119
|
+
const entries = parseNameStatus(names.stdout);
|
|
120
|
+
if (entries.some(entry => !projectPath(entry.path) || (entry.previousPath !== undefined && !projectPath(entry.previousPath)))) {
|
|
121
|
+
throw new Error('git diff returned an unsafe project-relative path');
|
|
122
|
+
}
|
|
123
|
+
const actual = changedPathSet(entries);
|
|
124
|
+
if (actual.length !== expected.length || actual.some((path, index) => path !== expected[index])) {
|
|
125
|
+
throw new ReviewDiffStaleError('review changedFiles no longer matches the isolated snapshot');
|
|
126
|
+
}
|
|
127
|
+
const files = [];
|
|
128
|
+
let truncated = entries.length > REVIEW_DIFF_MAX_FILES;
|
|
129
|
+
for (const entry of entries.slice(0, REVIEW_DIFF_MAX_FILES)) {
|
|
130
|
+
const numstat = await git(input.managedRoot, ['diff', '--cached', '--numstat', '-z', input.baseOid, '--', entry.path], env, 32 * 1024);
|
|
131
|
+
const binary = numstat.stdout.toString('utf8').startsWith('-\t-\t');
|
|
132
|
+
let patch = null;
|
|
133
|
+
let fileTruncated = false;
|
|
134
|
+
if (!binary) {
|
|
135
|
+
const patchResult = await git(input.managedRoot, ['diff', '--cached', '--no-ext-diff', '--no-textconv', '--find-renames', input.baseOid, '--', entry.path], env, REVIEW_DIFF_MAX_PATCH_BYTES);
|
|
136
|
+
patch = patchResult.stdout.toString('utf8');
|
|
137
|
+
fileTruncated = patchResult.truncated;
|
|
138
|
+
}
|
|
139
|
+
const file = {
|
|
140
|
+
path: entry.path,
|
|
141
|
+
...(entry.previousPath === undefined ? {} : { previousPath: entry.previousPath }),
|
|
142
|
+
status: binary ? 'binary' : entry.status,
|
|
143
|
+
patch,
|
|
144
|
+
truncated: fileTruncated,
|
|
145
|
+
};
|
|
146
|
+
let candidate = {
|
|
147
|
+
reviewId: input.reviewId,
|
|
148
|
+
revision: input.revision,
|
|
149
|
+
files: [...files, file],
|
|
150
|
+
truncated: truncated || fileTruncated,
|
|
151
|
+
};
|
|
152
|
+
if (payloadBytes(candidate) > REVIEW_DIFF_MAX_PAYLOAD_BYTES) {
|
|
153
|
+
truncated = true;
|
|
154
|
+
if (file.patch !== null) {
|
|
155
|
+
const shell = { ...file, patch: '', truncated: true };
|
|
156
|
+
const overhead = payloadBytes({ ...candidate, files: [...files, shell], truncated: true });
|
|
157
|
+
const reduced = { ...shell, patch: utf8Prefix(file.patch, Math.max(0, REVIEW_DIFF_MAX_PAYLOAD_BYTES - overhead - 16)) };
|
|
158
|
+
candidate = { ...candidate, files: [...files, reduced], truncated: true };
|
|
159
|
+
if (payloadBytes(candidate) <= REVIEW_DIFF_MAX_PAYLOAD_BYTES)
|
|
160
|
+
files.push(reduced);
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
files.push(file);
|
|
165
|
+
if (fileTruncated)
|
|
166
|
+
truncated = true;
|
|
167
|
+
}
|
|
168
|
+
return { reviewId: input.reviewId, revision: input.revision, files, truncated };
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
await rm(tempRoot, { recursive: true, force: true });
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=review-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-diff.js","sourceRoot":"","sources":["../../src/console-host/review-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
4
|
+
import type { WorktreeConsoleCreateResponse, WorktreeConsoleCurrentResponse, WorktreeConsoleInspectResponse, WorktreeConsoleListResponse, WorktreeConsoleMutationResponse, WorktreeConsoleOutcome, WorktreeConsolePreflightResponse, WorktreeConsoleReviewDiffResponse } from '../console-contract.js';
|
|
5
|
+
import type { WorktreeRetentionMode } from '../types.js';
|
|
6
|
+
import type { WorktreeConsoleControlPlane } from './control-plane.js';
|
|
7
|
+
/** Official Typert Remote service; the Gateway resolves `agentId` before business code runs. */
|
|
8
|
+
export declare class WorktreeConsoleService extends TypertRemoteService {
|
|
9
|
+
private readonly controlPlane;
|
|
10
|
+
constructor(ctx: Context, controlPlane: WorktreeConsoleControlPlane);
|
|
11
|
+
current(agent: Agent): Promise<WorktreeConsoleOutcome<WorktreeConsoleCurrentResponse>>;
|
|
12
|
+
list(agent: Agent, needsAttention?: boolean, includeDelivered?: boolean): Promise<WorktreeConsoleOutcome<WorktreeConsoleListResponse>>;
|
|
13
|
+
create(agent: Agent): Promise<WorktreeConsoleOutcome<WorktreeConsoleCreateResponse>>;
|
|
14
|
+
inspect(agent: Agent, checkoutId: string): Promise<WorktreeConsoleOutcome<WorktreeConsoleInspectResponse>>;
|
|
15
|
+
reviewDiff(agent: Agent, checkoutId: string, expectedRevision: number, expectedReviewId: string): Promise<WorktreeConsoleOutcome<WorktreeConsoleReviewDiffResponse>>;
|
|
16
|
+
preflight(agent: Agent, checkoutId: string, expectedRevision: number, expectedReviewId: string): Promise<WorktreeConsoleOutcome<WorktreeConsolePreflightResponse>>;
|
|
17
|
+
preview(agent: Agent, checkoutId: string, expectedRevision: number, expectedReviewId: string): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
18
|
+
rollbackPreview(agent: Agent, checkoutId: string, expectedRevision: number, resumeRevision?: boolean): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
19
|
+
discard(agent: Agent, checkoutId: string, expectedRevision: number, confirmDirty: boolean, rollbackPreview?: boolean): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
20
|
+
finalize(agent: Agent, checkoutId: string, expectedRevision: number, expectedReviewId: string, commitMessage: string, retention: WorktreeRetentionMode): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
21
|
+
finalizePreview(agent: Agent, checkoutId: string, expectedRevision: number, expectedReviewId: string, commitMessage: string, retention: WorktreeRetentionMode): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
22
|
+
setRetention(agent: Agent, checkoutId: string, expectedRevision: number, retention: Exclude<WorktreeRetentionMode, 'cleanup'>): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
23
|
+
retryCleanup(agent: Agent, checkoutId: string, expectedRevision: number): Promise<WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
36
|
+
/** Official Typert Remote service; the Gateway resolves `agentId` before business code runs. */
|
|
37
|
+
let WorktreeConsoleService = (() => {
|
|
38
|
+
let _classSuper = TypertRemoteService;
|
|
39
|
+
let _instanceExtraInitializers = [];
|
|
40
|
+
let _current_decorators;
|
|
41
|
+
let _list_decorators;
|
|
42
|
+
let _create_decorators;
|
|
43
|
+
let _inspect_decorators;
|
|
44
|
+
let _reviewDiff_decorators;
|
|
45
|
+
let _preflight_decorators;
|
|
46
|
+
let _preview_decorators;
|
|
47
|
+
let _rollbackPreview_decorators;
|
|
48
|
+
let _discard_decorators;
|
|
49
|
+
let _finalize_decorators;
|
|
50
|
+
let _finalizePreview_decorators;
|
|
51
|
+
let _setRetention_decorators;
|
|
52
|
+
let _retryCleanup_decorators;
|
|
53
|
+
return class WorktreeConsoleService extends _classSuper {
|
|
54
|
+
static {
|
|
55
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
56
|
+
_current_decorators = [Remote];
|
|
57
|
+
_list_decorators = [Remote];
|
|
58
|
+
_create_decorators = [Remote];
|
|
59
|
+
_inspect_decorators = [Remote];
|
|
60
|
+
_reviewDiff_decorators = [Remote];
|
|
61
|
+
_preflight_decorators = [Remote];
|
|
62
|
+
_preview_decorators = [Remote];
|
|
63
|
+
_rollbackPreview_decorators = [Remote];
|
|
64
|
+
_discard_decorators = [Remote];
|
|
65
|
+
_finalize_decorators = [Remote];
|
|
66
|
+
_finalizePreview_decorators = [Remote];
|
|
67
|
+
_setRetention_decorators = [Remote];
|
|
68
|
+
_retryCleanup_decorators = [Remote];
|
|
69
|
+
__esDecorate(this, null, _current_decorators, { kind: "method", name: "current", static: false, private: false, access: { has: obj => "current" in obj, get: obj => obj.current }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
70
|
+
__esDecorate(this, null, _list_decorators, { kind: "method", name: "list", static: false, private: false, access: { has: obj => "list" in obj, get: obj => obj.list }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
71
|
+
__esDecorate(this, null, _create_decorators, { kind: "method", name: "create", static: false, private: false, access: { has: obj => "create" in obj, get: obj => obj.create }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
72
|
+
__esDecorate(this, null, _inspect_decorators, { kind: "method", name: "inspect", static: false, private: false, access: { has: obj => "inspect" in obj, get: obj => obj.inspect }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
73
|
+
__esDecorate(this, null, _reviewDiff_decorators, { kind: "method", name: "reviewDiff", static: false, private: false, access: { has: obj => "reviewDiff" in obj, get: obj => obj.reviewDiff }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
74
|
+
__esDecorate(this, null, _preflight_decorators, { kind: "method", name: "preflight", static: false, private: false, access: { has: obj => "preflight" in obj, get: obj => obj.preflight }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
|
+
__esDecorate(this, null, _preview_decorators, { kind: "method", name: "preview", static: false, private: false, access: { has: obj => "preview" in obj, get: obj => obj.preview }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
76
|
+
__esDecorate(this, null, _rollbackPreview_decorators, { kind: "method", name: "rollbackPreview", static: false, private: false, access: { has: obj => "rollbackPreview" in obj, get: obj => obj.rollbackPreview }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
77
|
+
__esDecorate(this, null, _discard_decorators, { kind: "method", name: "discard", static: false, private: false, access: { has: obj => "discard" in obj, get: obj => obj.discard }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
78
|
+
__esDecorate(this, null, _finalize_decorators, { kind: "method", name: "finalize", static: false, private: false, access: { has: obj => "finalize" in obj, get: obj => obj.finalize }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
79
|
+
__esDecorate(this, null, _finalizePreview_decorators, { kind: "method", name: "finalizePreview", static: false, private: false, access: { has: obj => "finalizePreview" in obj, get: obj => obj.finalizePreview }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
80
|
+
__esDecorate(this, null, _setRetention_decorators, { kind: "method", name: "setRetention", static: false, private: false, access: { has: obj => "setRetention" in obj, get: obj => obj.setRetention }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
81
|
+
__esDecorate(this, null, _retryCleanup_decorators, { kind: "method", name: "retryCleanup", static: false, private: false, access: { has: obj => "retryCleanup" in obj, get: obj => obj.retryCleanup }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
82
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
83
|
+
}
|
|
84
|
+
controlPlane = __runInitializers(this, _instanceExtraInitializers);
|
|
85
|
+
constructor(ctx, controlPlane) {
|
|
86
|
+
super(ctx, 'gitWorktree');
|
|
87
|
+
this.controlPlane = controlPlane;
|
|
88
|
+
}
|
|
89
|
+
current(agent) {
|
|
90
|
+
return this.controlPlane.current(agent.id);
|
|
91
|
+
}
|
|
92
|
+
list(agent, needsAttention, includeDelivered) {
|
|
93
|
+
return this.controlPlane.list({ sessionId: agent.id, needsAttention, includeDelivered });
|
|
94
|
+
}
|
|
95
|
+
create(agent) {
|
|
96
|
+
return this.controlPlane.create(agent.id);
|
|
97
|
+
}
|
|
98
|
+
inspect(agent, checkoutId) {
|
|
99
|
+
return this.controlPlane.inspect(agent.id, checkoutId);
|
|
100
|
+
}
|
|
101
|
+
reviewDiff(agent, checkoutId, expectedRevision, expectedReviewId) {
|
|
102
|
+
return this.controlPlane.reviewDiff({ sessionId: agent.id, checkoutId, expectedRevision, expectedReviewId });
|
|
103
|
+
}
|
|
104
|
+
preflight(agent, checkoutId, expectedRevision, expectedReviewId) {
|
|
105
|
+
return this.controlPlane.preflight({ sessionId: agent.id, checkoutId, expectedRevision, expectedReviewId });
|
|
106
|
+
}
|
|
107
|
+
preview(agent, checkoutId, expectedRevision, expectedReviewId) {
|
|
108
|
+
return this.controlPlane.preview({ sessionId: agent.id, checkoutId, expectedRevision, expectedReviewId });
|
|
109
|
+
}
|
|
110
|
+
rollbackPreview(agent, checkoutId, expectedRevision, resumeRevision) {
|
|
111
|
+
return this.controlPlane.rollbackPreview({ sessionId: agent.id, checkoutId, expectedRevision, resumeRevision });
|
|
112
|
+
}
|
|
113
|
+
discard(agent, checkoutId, expectedRevision, confirmDirty, rollbackPreview) {
|
|
114
|
+
return this.controlPlane.discard({ sessionId: agent.id, checkoutId, expectedRevision, confirmDirty, rollbackPreview });
|
|
115
|
+
}
|
|
116
|
+
finalize(agent, checkoutId, expectedRevision, expectedReviewId, commitMessage, retention) {
|
|
117
|
+
return this.controlPlane.finalize({ sessionId: agent.id, checkoutId, expectedRevision, expectedReviewId, commitMessage, retention });
|
|
118
|
+
}
|
|
119
|
+
finalizePreview(agent, checkoutId, expectedRevision, expectedReviewId, commitMessage, retention) {
|
|
120
|
+
return this.controlPlane.finalizePreview({ sessionId: agent.id, checkoutId, expectedRevision, expectedReviewId, commitMessage, retention });
|
|
121
|
+
}
|
|
122
|
+
setRetention(agent, checkoutId, expectedRevision, retention) {
|
|
123
|
+
return this.controlPlane.setRetention({ sessionId: agent.id, checkoutId, expectedRevision, retention });
|
|
124
|
+
}
|
|
125
|
+
retryCleanup(agent, checkoutId, expectedRevision) {
|
|
126
|
+
return this.controlPlane.retryCleanup({ sessionId: agent.id, checkoutId, expectedRevision });
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
})();
|
|
130
|
+
export { WorktreeConsoleService };
|
|
131
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/console-host/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { booleanSchema, checkoutIdSchema, commitMessageSchema, createResponseSchema, currentResponseSchema, inspectResponseSchema, listResponseSchema, mutationResponseSchema, optionalBooleanSchema, outcomeSchema, preflightResponseSchema, retainedModeSchema, retentionSchema, reviewDiffResponseSchema, reviewIdSchema, revisionSchema, sessionIdSchema, } from './schemas.js';
|
|
2
|
+
const PACKAGE = 'dsh-git-worktree';
|
|
3
|
+
const SERVICE = 'gitWorktree';
|
|
4
|
+
const AGENT_WIRE_TYPE = '@deepseek-ai/dsh-session/types#SessionId';
|
|
5
|
+
const agentParameter = {
|
|
6
|
+
name: 'agent',
|
|
7
|
+
wire: 'agentId',
|
|
8
|
+
source: 'lookup',
|
|
9
|
+
lookup: 'agent',
|
|
10
|
+
codec: { mode: 'strict', typeSymbol: AGENT_WIRE_TYPE, schema: sessionIdSchema },
|
|
11
|
+
};
|
|
12
|
+
function json(name, schema, typeSymbol, acceptsUndefined = false) {
|
|
13
|
+
return {
|
|
14
|
+
name,
|
|
15
|
+
wire: name,
|
|
16
|
+
source: 'json',
|
|
17
|
+
...(acceptsUndefined ? { acceptsUndefined: true } : {}),
|
|
18
|
+
codec: { mode: 'strict', typeSymbol, schema },
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function descriptor(method, parameters, resultSchema, resultType) {
|
|
22
|
+
return {
|
|
23
|
+
id: `${PACKAGE}#${SERVICE}/${method}`,
|
|
24
|
+
service: SERVICE,
|
|
25
|
+
namespace: SERVICE,
|
|
26
|
+
method,
|
|
27
|
+
invocation: { kind: 'direct' },
|
|
28
|
+
parameters: [agentParameter, ...parameters],
|
|
29
|
+
result: { mode: 'strict', typeSymbol: `${PACKAGE}/console-contract#${resultType}`, schema: resultSchema },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export const WORKTREE_CONSOLE_DESCRIPTORS = Object.freeze([
|
|
33
|
+
descriptor('current', [], outcomeSchema(currentResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleCurrentResponse>'),
|
|
34
|
+
descriptor('list', [
|
|
35
|
+
json('needsAttention', optionalBooleanSchema, 'boolean | undefined', true),
|
|
36
|
+
json('includeDelivered', optionalBooleanSchema, 'boolean | undefined', true),
|
|
37
|
+
], outcomeSchema(listResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleListResponse>'),
|
|
38
|
+
descriptor('create', [], outcomeSchema(createResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleCreateResponse>'),
|
|
39
|
+
descriptor('inspect', [
|
|
40
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleInspectRequest.checkoutId`),
|
|
41
|
+
], outcomeSchema(inspectResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleInspectResponse>'),
|
|
42
|
+
descriptor('reviewDiff', [
|
|
43
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleReviewDiffRequest.checkoutId`),
|
|
44
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleReviewDiffRequest.expectedRevision`),
|
|
45
|
+
json('expectedReviewId', reviewIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleReviewDiffRequest.expectedReviewId`),
|
|
46
|
+
], outcomeSchema(reviewDiffResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleReviewDiffResponse>'),
|
|
47
|
+
descriptor('preflight', [
|
|
48
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsolePreflightRequest.checkoutId`),
|
|
49
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsolePreflightRequest.expectedRevision`),
|
|
50
|
+
json('expectedReviewId', reviewIdSchema, `${PACKAGE}/console-contract#WorktreeConsolePreflightRequest.expectedReviewId`),
|
|
51
|
+
], outcomeSchema(preflightResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsolePreflightResponse>'),
|
|
52
|
+
descriptor('preview', [
|
|
53
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsolePreviewRequest.checkoutId`),
|
|
54
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsolePreviewRequest.expectedRevision`),
|
|
55
|
+
json('expectedReviewId', reviewIdSchema, `${PACKAGE}/console-contract#WorktreeConsolePreviewRequest.expectedReviewId`),
|
|
56
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
57
|
+
descriptor('rollbackPreview', [
|
|
58
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleRollbackPreviewRequest.checkoutId`),
|
|
59
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleRollbackPreviewRequest.expectedRevision`),
|
|
60
|
+
json('resumeRevision', optionalBooleanSchema, `${PACKAGE}/console-contract#WorktreeConsoleRollbackPreviewRequest.resumeRevision`, true),
|
|
61
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
62
|
+
descriptor('discard', [
|
|
63
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleDiscardRequest.checkoutId`),
|
|
64
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleDiscardRequest.expectedRevision`),
|
|
65
|
+
json('confirmDirty', booleanSchema, 'boolean'),
|
|
66
|
+
json('rollbackPreview', optionalBooleanSchema, `${PACKAGE}/console-contract#WorktreeConsoleDiscardRequest.rollbackPreview`, true),
|
|
67
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
68
|
+
descriptor('finalize', [
|
|
69
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizeRequest.checkoutId`),
|
|
70
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizeRequest.expectedRevision`),
|
|
71
|
+
json('expectedReviewId', reviewIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizeRequest.expectedReviewId`),
|
|
72
|
+
json('commitMessage', commitMessageSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizeRequest.commitMessage`),
|
|
73
|
+
json('retention', retentionSchema, `${PACKAGE}/types#WorktreeRetentionMode`),
|
|
74
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
75
|
+
descriptor('finalizePreview', [
|
|
76
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizePreviewRequest.checkoutId`),
|
|
77
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizePreviewRequest.expectedRevision`),
|
|
78
|
+
json('expectedReviewId', reviewIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizePreviewRequest.expectedReviewId`),
|
|
79
|
+
json('commitMessage', commitMessageSchema, `${PACKAGE}/console-contract#WorktreeConsoleFinalizePreviewRequest.commitMessage`),
|
|
80
|
+
json('retention', retentionSchema, `${PACKAGE}/types#WorktreeRetentionMode`),
|
|
81
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
82
|
+
descriptor('setRetention', [
|
|
83
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleSetRetentionRequest.checkoutId`),
|
|
84
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleSetRetentionRequest.expectedRevision`),
|
|
85
|
+
json('retention', retainedModeSchema, `${PACKAGE}/console-contract#WorktreeConsoleSetRetentionRequest.retention`),
|
|
86
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
87
|
+
descriptor('retryCleanup', [
|
|
88
|
+
json('checkoutId', checkoutIdSchema, `${PACKAGE}/console-contract#WorktreeConsoleRetryCleanupRequest.checkoutId`),
|
|
89
|
+
json('expectedRevision', revisionSchema, `${PACKAGE}/console-contract#WorktreeConsoleRetryCleanupRequest.expectedRevision`),
|
|
90
|
+
], outcomeSchema(mutationResponseSchema), 'WorktreeConsoleOutcome<WorktreeConsoleMutationResponse>'),
|
|
91
|
+
]);
|
|
92
|
+
export const WORKTREE_CONSOLE_REMOTE = Object.freeze({
|
|
93
|
+
package: PACKAGE,
|
|
94
|
+
descriptors: WORKTREE_CONSOLE_DESCRIPTORS,
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=descriptors.js.map
|