dsh-git-worktree 0.1.2 → 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.
Files changed (133) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +21 -21
  3. package/README.md +115 -43
  4. package/README.zh.md +115 -41
  5. package/cordis.patch.yml +7 -7
  6. package/lib/adapters/registry.js +40 -0
  7. package/lib/adapters/registry.js.map +1 -1
  8. package/lib/adapters/safe-file.js +34 -4
  9. package/lib/adapters/safe-file.js.map +1 -1
  10. package/lib/client/WorktreeCreateRow.d.ts +7 -0
  11. package/lib/client/WorktreeCreateRow.js +26 -0
  12. package/lib/client/WorktreeCreateRow.js.map +1 -0
  13. package/lib/client/WorktreeReviewRow.d.ts +11 -0
  14. package/lib/client/WorktreeReviewRow.js +67 -0
  15. package/lib/client/WorktreeReviewRow.js.map +1 -0
  16. package/lib/client/actions.d.ts +86 -0
  17. package/lib/client/actions.js +35 -0
  18. package/lib/client/actions.js.map +1 -0
  19. package/lib/client/console-remote/adapter.d.ts +3 -0
  20. package/lib/client/console-remote/adapter.js +59 -0
  21. package/lib/client/console-remote/adapter.js.map +1 -0
  22. package/lib/client/console-remote/index.d.ts +18 -0
  23. package/lib/client/console-remote/index.js +17 -0
  24. package/lib/client/console-remote/index.js.map +1 -0
  25. package/lib/client/index.d.ts +17 -0
  26. package/lib/client/index.js +44 -0
  27. package/lib/client/index.js.map +1 -0
  28. package/lib/client/model.d.ts +68 -0
  29. package/lib/client/model.js +127 -0
  30. package/lib/client/model.js.map +1 -0
  31. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
  32. package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
  33. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
  34. package/lib/client/pre-session/controller.d.ts +42 -0
  35. package/lib/client/pre-session/controller.js +149 -0
  36. package/lib/client/pre-session/controller.js.map +1 -0
  37. package/lib/client/pre-session/index.d.ts +15 -0
  38. package/lib/client/pre-session/index.js +16 -0
  39. package/lib/client/pre-session/index.js.map +1 -0
  40. package/lib/client/review-console/ReviewActions.d.ts +15 -0
  41. package/lib/client/review-console/ReviewActions.js +219 -0
  42. package/lib/client/review-console/ReviewActions.js.map +1 -0
  43. package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
  44. package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
  45. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
  46. package/lib/client/review-console/index.d.ts +8 -0
  47. package/lib/client/review-console/index.js +22 -0
  48. package/lib/client/review-console/index.js.map +1 -0
  49. package/lib/client/review-console/review-console.styles.d.ts +1 -0
  50. package/lib/client/review-console/review-console.styles.js +81 -0
  51. package/lib/client/review-console/review-console.styles.js.map +1 -0
  52. package/lib/client/review-console/status-events.d.ts +3 -0
  53. package/lib/client/review-console/status-events.js +6 -0
  54. package/lib/client/review-console/status-events.js.map +1 -0
  55. package/lib/client/styles.d.ts +1 -0
  56. package/lib/client/styles.js +78 -0
  57. package/lib/client/styles.js.map +1 -0
  58. package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
  59. package/lib/client/target-console/TargetStatusAction.js +46 -0
  60. package/lib/client/target-console/TargetStatusAction.js.map +1 -0
  61. package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
  62. package/lib/client/target-console/WorktreeConsoleView.js +362 -0
  63. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
  64. package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
  65. package/lib/client/target-console/WorktreeReviewStatus.js +91 -0
  66. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
  67. package/lib/client/target-console/index.d.ts +14 -0
  68. package/lib/client/target-console/index.js +23 -0
  69. package/lib/client/target-console/index.js.map +1 -0
  70. package/lib/client/target-console/target-console.styles.d.ts +1 -0
  71. package/lib/client/target-console/target-console.styles.js +130 -0
  72. package/lib/client/target-console/target-console.styles.js.map +1 -0
  73. package/lib/client.js +6813 -0
  74. package/lib/commands.d.ts +2 -4
  75. package/lib/commands.js +54 -28
  76. package/lib/commands.js.map +1 -1
  77. package/lib/console-contract.d.ts +236 -0
  78. package/lib/console-contract.js +86 -0
  79. package/lib/console-contract.js.map +1 -0
  80. package/lib/console-host/control-plane.d.ts +29 -0
  81. package/lib/console-host/control-plane.js +443 -0
  82. package/lib/console-host/control-plane.js.map +1 -0
  83. package/lib/console-host/errors.d.ts +6 -0
  84. package/lib/console-host/errors.js +31 -0
  85. package/lib/console-host/errors.js.map +1 -0
  86. package/lib/console-host/projection.d.ts +12 -0
  87. package/lib/console-host/projection.js +131 -0
  88. package/lib/console-host/projection.js.map +1 -0
  89. package/lib/console-host/review-diff.d.ts +18 -0
  90. package/lib/console-host/review-diff.js +176 -0
  91. package/lib/console-host/review-diff.js.map +1 -0
  92. package/lib/console-host/service.d.ts +24 -0
  93. package/lib/console-host/service.js +131 -0
  94. package/lib/console-host/service.js.map +1 -0
  95. package/lib/console-remote/descriptors.d.ts +3 -0
  96. package/lib/console-remote/descriptors.js +96 -0
  97. package/lib/console-remote/descriptors.js.map +1 -0
  98. package/lib/console-remote/remote.d.ts +27 -0
  99. package/lib/console-remote/remote.js +4 -0
  100. package/lib/console-remote/remote.js.map +1 -0
  101. package/lib/console-remote/schemas.d.ts +29 -0
  102. package/lib/console-remote/schemas.js +143 -0
  103. package/lib/console-remote/schemas.js.map +1 -0
  104. package/lib/console-remote/typert.d.ts +3 -0
  105. package/lib/console-remote/typert.js +14 -0
  106. package/lib/console-remote/typert.js.map +1 -0
  107. package/lib/index.d.ts +22 -6
  108. package/lib/index.js +28 -10
  109. package/lib/index.js.map +1 -1
  110. package/lib/managed-worktree-path.d.ts +14 -13
  111. package/lib/managed-worktree-path.js +32 -22
  112. package/lib/managed-worktree-path.js.map +1 -1
  113. package/lib/ports.d.ts +37 -1
  114. package/lib/session-checkout-apply.d.ts +54 -1
  115. package/lib/session-checkout-apply.js +318 -28
  116. package/lib/session-checkout-apply.js.map +1 -1
  117. package/lib/session-checkout-module.js +853 -33
  118. package/lib/session-checkout-module.js.map +1 -1
  119. package/lib/session-target-context.d.ts +6 -0
  120. package/lib/session-target-context.js +16 -0
  121. package/lib/session-target-context.js.map +1 -0
  122. package/lib/tools.d.ts +5 -6
  123. package/lib/tools.js +43 -233
  124. package/lib/tools.js.map +1 -1
  125. package/lib/types.d.ts +57 -11
  126. package/lib/types.js +6 -6
  127. package/lib/types.js.map +1 -1
  128. package/package.json +116 -69
  129. package/scripts/check-publish.mjs +193 -0
  130. package/scripts/clean-lib.mjs +7 -0
  131. package/scripts/dev-dsh-lib.mjs +453 -0
  132. package/scripts/dev-dsh.mjs +89 -0
  133. 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,3 @@
1
+ import type { InvocationDescriptor, TypertRemoteContribution } from '@deepseek-ai/dsh-typert-protocol';
2
+ export declare const WORKTREE_CONSOLE_DESCRIPTORS: readonly InvocationDescriptor[];
3
+ export declare const WORKTREE_CONSOLE_REMOTE: TypertRemoteContribution;
@@ -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