@yu_robotics/remote-cli 1.6.121 → 1.6.133
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 +36 -3
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +37 -3
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/client/TaskRecovery.d.ts.map +1 -1
- package/dist/client/TaskRecovery.js +5 -0
- package/dist/client/TaskRecovery.js.map +1 -1
- package/dist/client/WebSocketClient.d.ts +6 -0
- package/dist/client/WebSocketClient.d.ts.map +1 -1
- package/dist/client/WebSocketClient.js +4 -0
- package/dist/client/WebSocketClient.js.map +1 -1
- package/dist/commands/config.js +7 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +11 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/delegation/DelegatedWorkerSessionStore.d.ts +4 -1
- package/dist/delegation/DelegatedWorkerSessionStore.d.ts.map +1 -1
- package/dist/delegation/DelegatedWorkerSessionStore.js +6 -7
- package/dist/delegation/DelegatedWorkerSessionStore.js.map +1 -1
- package/dist/delegation/DelegatedWorkspaceManager.d.ts +91 -0
- package/dist/delegation/DelegatedWorkspaceManager.d.ts.map +1 -0
- package/dist/delegation/DelegatedWorkspaceManager.js +377 -0
- package/dist/delegation/DelegatedWorkspaceManager.js.map +1 -0
- package/dist/delegation/DelegationManager.d.ts +13 -4
- package/dist/delegation/DelegationManager.d.ts.map +1 -1
- package/dist/delegation/DelegationManager.js +388 -114
- package/dist/delegation/DelegationManager.js.map +1 -1
- package/dist/delegation/DelegationNotice.d.ts.map +1 -1
- package/dist/delegation/DelegationNotice.js +2 -0
- package/dist/delegation/DelegationNotice.js.map +1 -1
- package/dist/delegation/DelegationStore.d.ts +6 -2
- package/dist/delegation/DelegationStore.d.ts.map +1 -1
- package/dist/delegation/DelegationStore.js +12 -5
- package/dist/delegation/DelegationStore.js.map +1 -1
- package/dist/delegation/GitCheckpoint.d.ts +27 -0
- package/dist/delegation/GitCheckpoint.d.ts.map +1 -0
- package/dist/delegation/GitCheckpoint.js +226 -0
- package/dist/delegation/GitCheckpoint.js.map +1 -0
- package/dist/delegation/contract.d.ts +18 -4
- package/dist/delegation/contract.d.ts.map +1 -1
- package/dist/delegation/contract.js +13 -4
- package/dist/delegation/contract.js.map +1 -1
- package/dist/executor/AcpExecutor.d.ts +2 -0
- package/dist/executor/AcpExecutor.d.ts.map +1 -1
- package/dist/executor/AcpExecutor.js +22 -2
- package/dist/executor/AcpExecutor.js.map +1 -1
- package/dist/executor/AgyExecutor.d.ts +1 -0
- package/dist/executor/AgyExecutor.d.ts.map +1 -1
- package/dist/executor/AgyExecutor.js +4 -0
- package/dist/executor/AgyExecutor.js.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.d.ts +2 -0
- package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.js +19 -0
- package/dist/executor/ClaudePersistentExecutor.js.map +1 -1
- package/dist/executor/CodexAppServerClient.d.ts +5 -0
- package/dist/executor/CodexAppServerClient.d.ts.map +1 -1
- package/dist/executor/CodexAppServerClient.js +6 -2
- package/dist/executor/CodexAppServerClient.js.map +1 -1
- package/dist/executor/CodexAppServerExecutor.d.ts +4 -0
- package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
- package/dist/executor/CodexAppServerExecutor.js +32 -0
- package/dist/executor/CodexAppServerExecutor.js.map +1 -1
- package/dist/executor/ExecutionMetadata.d.ts +9 -0
- package/dist/executor/ExecutionMetadata.d.ts.map +1 -0
- package/dist/executor/ExecutionMetadata.js +57 -0
- package/dist/executor/ExecutionMetadata.js.map +1 -0
- package/dist/executor/IExecutor.d.ts +4 -1
- package/dist/executor/IExecutor.d.ts.map +1 -1
- package/dist/executor/PiExecutor.d.ts +3 -0
- package/dist/executor/PiExecutor.d.ts.map +1 -1
- package/dist/executor/PiExecutor.js +36 -0
- package/dist/executor/PiExecutor.js.map +1 -1
- package/dist/executor/claude/ClaudeStderrFilter.d.ts +1 -1
- package/dist/executor/claude/ClaudeStderrFilter.d.ts.map +1 -1
- package/dist/executor/claude/ClaudeStderrFilter.js +3 -2
- package/dist/executor/claude/ClaudeStderrFilter.js.map +1 -1
- package/dist/maintenance/CodexStatusProbe.d.ts +26 -0
- package/dist/maintenance/CodexStatusProbe.d.ts.map +1 -0
- package/dist/maintenance/CodexStatusProbe.js +124 -0
- package/dist/maintenance/CodexStatusProbe.js.map +1 -0
- package/dist/maintenance/CodexWeekly.d.ts +17 -0
- package/dist/maintenance/CodexWeekly.d.ts.map +1 -0
- package/dist/maintenance/CodexWeekly.js +60 -0
- package/dist/maintenance/CodexWeekly.js.map +1 -0
- package/dist/maintenance/MaintenanceClient.d.ts +23 -0
- package/dist/maintenance/MaintenanceClient.d.ts.map +1 -0
- package/dist/maintenance/MaintenanceClient.js +69 -0
- package/dist/maintenance/MaintenanceClient.js.map +1 -0
- package/dist/maintenance/PrivateStore.d.ts +10 -0
- package/dist/maintenance/PrivateStore.d.ts.map +1 -0
- package/dist/maintenance/PrivateStore.js +54 -0
- package/dist/maintenance/PrivateStore.js.map +1 -0
- package/dist/maintenance/ReleaseNotes.d.ts +30 -0
- package/dist/maintenance/ReleaseNotes.d.ts.map +1 -0
- package/dist/maintenance/ReleaseNotes.js +139 -0
- package/dist/maintenance/ReleaseNotes.js.map +1 -0
- package/dist/maintenance/ReleaseOverview.d.ts +23 -0
- package/dist/maintenance/ReleaseOverview.d.ts.map +1 -0
- package/dist/maintenance/ReleaseOverview.js +56 -0
- package/dist/maintenance/ReleaseOverview.js.map +1 -0
- package/dist/maintenance/SubscriptionInspection.d.ts +49 -0
- package/dist/maintenance/SubscriptionInspection.d.ts.map +1 -0
- package/dist/maintenance/SubscriptionInspection.js +193 -0
- package/dist/maintenance/SubscriptionInspection.js.map +1 -0
- package/dist/maintenance/SubscriptionReminderStore.d.ts +12 -0
- package/dist/maintenance/SubscriptionReminderStore.d.ts.map +1 -0
- package/dist/maintenance/SubscriptionReminderStore.js +60 -0
- package/dist/maintenance/SubscriptionReminderStore.js.map +1 -0
- package/dist/maintenance/UpdateNotices.d.ts +21 -0
- package/dist/maintenance/UpdateNotices.d.ts.map +1 -0
- package/dist/maintenance/UpdateNotices.js +104 -0
- package/dist/maintenance/UpdateNotices.js.map +1 -0
- package/dist/maintenance/Version.d.ts +3 -0
- package/dist/maintenance/Version.d.ts.map +1 -0
- package/dist/maintenance/Version.js +42 -0
- package/dist/maintenance/Version.js.map +1 -0
- package/dist/maintenance/release-notes.json +1 -0
- package/dist/types/config.d.ts +5 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DelegatedWorkspaceManager = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const GitCheckpoint_1 = require("./GitCheckpoint");
|
|
12
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
13
|
+
const RECORD_BYTES = 128 * 1024;
|
|
14
|
+
function inside(root, child) {
|
|
15
|
+
const relative = path_1.default.relative(root, child);
|
|
16
|
+
return relative === '' || (!path_1.default.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path_1.default.sep}`));
|
|
17
|
+
}
|
|
18
|
+
/** Worktrees isolate checkout files, not process permissions. Artifacts are never expired with task diagnostics. */
|
|
19
|
+
class DelegatedWorkspaceManager {
|
|
20
|
+
directory;
|
|
21
|
+
constructor(directory = path_1.default.join(os_1.default.homedir(), '.remote-cli', 'delegation-workspaces')) {
|
|
22
|
+
this.directory = directory;
|
|
23
|
+
}
|
|
24
|
+
async discover(cwd) {
|
|
25
|
+
// Avoid starting Git for ordinary directories (including environments without Git).
|
|
26
|
+
let ancestor = cwd;
|
|
27
|
+
while (true) {
|
|
28
|
+
try {
|
|
29
|
+
await promises_1.default.lstat(path_1.default.join(ancestor, '.git'));
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.code !== 'ENOENT')
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
const parent = path_1.default.dirname(ancestor);
|
|
37
|
+
if (parent === ancestor)
|
|
38
|
+
return undefined;
|
|
39
|
+
ancestor = parent;
|
|
40
|
+
}
|
|
41
|
+
if (await (0, GitCheckpoint_1.gitText)(cwd, ['rev-parse', '--is-inside-work-tree']) !== 'true') {
|
|
42
|
+
throw new Error('Delegation requires a usable Git working tree, not a bare repository');
|
|
43
|
+
}
|
|
44
|
+
const root = await promises_1.default.realpath(await (0, GitCheckpoint_1.gitText)(cwd, ['rev-parse', '--show-toplevel']));
|
|
45
|
+
const commonDirectory = await promises_1.default.realpath(path_1.default.resolve(cwd, await (0, GitCheckpoint_1.gitText)(cwd, ['rev-parse', '--git-common-dir'])));
|
|
46
|
+
const relativeCwd = path_1.default.relative(root, cwd);
|
|
47
|
+
if (!inside(root, cwd))
|
|
48
|
+
throw new Error('Selected working directory is outside the discovered repository');
|
|
49
|
+
if (!GitCheckpoint_1.GIT_OID.test(await (0, GitCheckpoint_1.gitText)(cwd, ['rev-parse', '--verify', 'HEAD']))) {
|
|
50
|
+
throw new Error('Git worktree delegation requires an initial commit');
|
|
51
|
+
}
|
|
52
|
+
return { cwd, root, commonDirectory, relativeCwd };
|
|
53
|
+
}
|
|
54
|
+
async baseline(source) {
|
|
55
|
+
await this.validateSource(source);
|
|
56
|
+
return (0, GitCheckpoint_1.captureCheckpoint)(source.root);
|
|
57
|
+
}
|
|
58
|
+
async unavailableLanes() {
|
|
59
|
+
const blocked = new Set();
|
|
60
|
+
await this.initialize();
|
|
61
|
+
for (const name of await promises_1.default.readdir(path_1.default.join(this.directory, 'lanes'))) {
|
|
62
|
+
if (!name.endsWith('.json'))
|
|
63
|
+
continue;
|
|
64
|
+
const id = name.slice(0, -5);
|
|
65
|
+
if (!UUID.test(id))
|
|
66
|
+
continue;
|
|
67
|
+
try {
|
|
68
|
+
const record = await this.read('lanes', id);
|
|
69
|
+
if (!record || record.blocked || record.pendingTaskId)
|
|
70
|
+
blocked.add(id);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
blocked.add(id);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return blocked;
|
|
77
|
+
}
|
|
78
|
+
async prepare(lane, source, input, taskId) {
|
|
79
|
+
this.assertId(taskId);
|
|
80
|
+
await this.initialize();
|
|
81
|
+
await this.validateSource(source);
|
|
82
|
+
this.assertId(lane.id);
|
|
83
|
+
if (!GitCheckpoint_1.GIT_OID.test(input.head) || !GitCheckpoint_1.GIT_OID.test(input.tree) || !GitCheckpoint_1.GIT_OID.test(input.commit)) {
|
|
84
|
+
throw new Error('Invalid worker input checkpoint');
|
|
85
|
+
}
|
|
86
|
+
const directory = this.worktreeDirectory(source, lane.id);
|
|
87
|
+
const taskRef = `refs/remote-cli/tasks/${taskId}`;
|
|
88
|
+
const previous = await this.read('lanes', lane.id);
|
|
89
|
+
if (previous) {
|
|
90
|
+
await this.validateWorkspace(previous);
|
|
91
|
+
if (previous.threadId !== lane.threadId || previous.workspaceGeneration !== lane.workspaceGeneration
|
|
92
|
+
|| previous.source.cwd !== source.cwd || previous.blocked || previous.pendingTaskId) {
|
|
93
|
+
throw new Error('Worker workspace has unresolved artifacts or a changed identity');
|
|
94
|
+
}
|
|
95
|
+
await this.assertClean(previous.directory);
|
|
96
|
+
// Never reset unknown files, including ignored files that checkout could overwrite.
|
|
97
|
+
await (0, GitCheckpoint_1.runGit)(directory, ['checkout', '--detach', '--no-overwrite-ignore', input.commit]);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
try {
|
|
101
|
+
await promises_1.default.lstat(directory);
|
|
102
|
+
throw new Error('Unregistered worker directory requires manual recovery');
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.code !== 'ENOENT')
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
await this.safeDirectory(path_1.default.dirname(directory));
|
|
109
|
+
// Anchor the baseline before creating any checkout, even if setup later fails.
|
|
110
|
+
await (0, GitCheckpoint_1.runGit)(source.root, ['update-ref', this.inputRef(taskId), input.commit]);
|
|
111
|
+
await (0, GitCheckpoint_1.runGit)(source.root, ['worktree', 'add', '--detach', directory, input.commit]);
|
|
112
|
+
}
|
|
113
|
+
await (0, GitCheckpoint_1.runGit)(source.root, ['update-ref', this.inputRef(taskId), input.commit]);
|
|
114
|
+
await (0, GitCheckpoint_1.runGit)(source.root, ['update-ref', taskRef, input.commit]);
|
|
115
|
+
const workspace = { laneId: lane.id, threadId: lane.threadId,
|
|
116
|
+
workspaceGeneration: lane.workspaceGeneration, source, directory,
|
|
117
|
+
cwd: path_1.default.join(directory, source.relativeCwd), taskId, taskRef, input };
|
|
118
|
+
await this.write('lanes', lane.id, workspace);
|
|
119
|
+
await this.validateWorkspace(workspace);
|
|
120
|
+
return workspace;
|
|
121
|
+
}
|
|
122
|
+
async collect(workspace, successful) {
|
|
123
|
+
await this.validateWorkspace(workspace);
|
|
124
|
+
const checkpoint = await (0, GitCheckpoint_1.captureCheckpoint)(workspace.directory);
|
|
125
|
+
const output = await (0, GitCheckpoint_1.createCheckpointCommit)(workspace.directory, checkpoint.tree, workspace.input.commit, `Remote CLI worker artifact ${workspace.taskId}`);
|
|
126
|
+
await (0, GitCheckpoint_1.runGit)(workspace.directory, ['update-ref', this.outputRef(workspace.taskId), output]);
|
|
127
|
+
await (0, GitCheckpoint_1.runGit)(workspace.directory, ['update-ref', `refs/remote-cli/worker-history/${workspace.taskId}`, checkpoint.head]);
|
|
128
|
+
const artifact = { taskId: workspace.taskId, laneId: workspace.laneId,
|
|
129
|
+
threadId: workspace.threadId, workspaceGeneration: workspace.workspaceGeneration,
|
|
130
|
+
source: workspace.source, input: workspace.input, output, tree: checkpoint.tree,
|
|
131
|
+
originalHead: checkpoint.head, successful,
|
|
132
|
+
disposition: checkpoint.tree === workspace.input.tree ? 'applied' : 'pending', createdAt: Date.now() };
|
|
133
|
+
// Durable artifact + refs precede any index/branch update in the owned checkout.
|
|
134
|
+
await this.write('artifacts', artifact.taskId, artifact);
|
|
135
|
+
const currentBranch = await (0, GitCheckpoint_1.gitText)(workspace.directory, ['branch', '--show-current']);
|
|
136
|
+
if (currentBranch || checkpoint.head !== await (0, GitCheckpoint_1.gitText)(workspace.directory, ['rev-parse', 'HEAD'])) {
|
|
137
|
+
await this.write('lanes', workspace.laneId, { ...workspace, blocked: true, pendingTaskId: artifact.taskId });
|
|
138
|
+
throw new Error('Worker changed its branch during execution; the artifact is preserved for manual recovery');
|
|
139
|
+
}
|
|
140
|
+
// Mixed reset only updates OUR index/branch to the preserved working files. Never touches the parent index.
|
|
141
|
+
await (0, GitCheckpoint_1.runGit)(workspace.directory, ['reset', '--mixed', output]);
|
|
142
|
+
await (0, GitCheckpoint_1.runGit)(workspace.directory, ['update-ref', workspace.taskRef, output]);
|
|
143
|
+
await this.assertClean(workspace.directory);
|
|
144
|
+
await this.write('lanes', workspace.laneId, { ...workspace,
|
|
145
|
+
pendingTaskId: artifact.disposition === 'pending' ? artifact.taskId : undefined });
|
|
146
|
+
return this.view(artifact);
|
|
147
|
+
}
|
|
148
|
+
async integrate(owner, taskId, action, expectedRevision) {
|
|
149
|
+
this.assertId(taskId);
|
|
150
|
+
const artifact = await this.read('artifacts', taskId);
|
|
151
|
+
if (!artifact)
|
|
152
|
+
throw new Error('Worker artifact not found');
|
|
153
|
+
await this.validateArtifact(artifact, owner);
|
|
154
|
+
owner.checkActive?.();
|
|
155
|
+
const view = await this.view(artifact);
|
|
156
|
+
const current = await (0, GitCheckpoint_1.captureCheckpoint)(artifact.source.root);
|
|
157
|
+
if (action === 'inspect')
|
|
158
|
+
return { ...view, revision: current.revision,
|
|
159
|
+
deliveryDirectory: artifact.source.cwd, integration: 'Explicit apply or retain is required for pending changes.' };
|
|
160
|
+
if (action !== 'apply' && action !== 'retain')
|
|
161
|
+
throw new Error('Artifact action must be inspect, apply, or retain');
|
|
162
|
+
if (typeof expectedRevision !== 'string' || expectedRevision !== current.revision) {
|
|
163
|
+
throw new Error('Delivery workspace changed; inspect the artifact again before integrating');
|
|
164
|
+
}
|
|
165
|
+
if (artifact.disposition !== 'pending')
|
|
166
|
+
return view;
|
|
167
|
+
if (action === 'retain') {
|
|
168
|
+
owner.checkActive?.();
|
|
169
|
+
// Intentional non-integration is not deletion. The immutable artifact remains inspectable.
|
|
170
|
+
await this.resolveArtifact(artifact, 'retained');
|
|
171
|
+
return this.view({ ...artifact, disposition: 'retained' });
|
|
172
|
+
}
|
|
173
|
+
if (!artifact.successful)
|
|
174
|
+
throw new Error('Failed or cancelled worker changes require manual recovery; retain the artifact instead');
|
|
175
|
+
if (artifact.recovery)
|
|
176
|
+
throw new Error('A previous file application may be incomplete; compare its recovery snapshots and integrate manually or retain the artifact');
|
|
177
|
+
await this.assertSelectedScope(artifact);
|
|
178
|
+
return this.applyArtifact(artifact, current, owner);
|
|
179
|
+
}
|
|
180
|
+
async describe(taskId) {
|
|
181
|
+
const artifact = await this.read('artifacts', taskId);
|
|
182
|
+
return artifact ? this.view(artifact) : undefined;
|
|
183
|
+
}
|
|
184
|
+
/** Removing a conversation does not authorize deleting its files or pending artifacts. */
|
|
185
|
+
async preserveLane(laneId) {
|
|
186
|
+
const workspace = await this.read('lanes', laneId);
|
|
187
|
+
if (workspace)
|
|
188
|
+
await this.write('lanes', laneId, { ...workspace, blocked: true });
|
|
189
|
+
}
|
|
190
|
+
async applyArtifact(artifact, current, owner) {
|
|
191
|
+
// Compatible with Git 2.34: merge in an owned scratch checkout, never in the user's worktree.
|
|
192
|
+
const wrapper = await (0, GitCheckpoint_1.createCheckpointCommit)(artifact.source.root, current.tree, artifact.input.commit, `Remote CLI integration input ${artifact.taskId}`);
|
|
193
|
+
const integrationDirectory = await promises_1.default.mkdtemp(path_1.default.join(this.directory, 'integration-'));
|
|
194
|
+
let created = false;
|
|
195
|
+
let preserve = false;
|
|
196
|
+
try {
|
|
197
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['worktree', 'add', '--detach', integrationDirectory, wrapper]);
|
|
198
|
+
created = true;
|
|
199
|
+
try {
|
|
200
|
+
await (0, GitCheckpoint_1.runGit)(integrationDirectory, ['-c', 'user.name=Remote CLI', '-c', 'user.email=remote-cli@example.com',
|
|
201
|
+
'merge', '--no-commit', '--no-ff', '--no-edit', artifact.output]);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
const conflicts = (await (0, GitCheckpoint_1.runGit)(integrationDirectory, ['diff', '--name-only', '--diff-filter=U', '-z']))
|
|
205
|
+
.toString('utf8').split('\0').filter(Boolean);
|
|
206
|
+
if (!conflicts.length)
|
|
207
|
+
throw error;
|
|
208
|
+
preserve = true;
|
|
209
|
+
return { ...await this.view(artifact), applied: false, conflicts: conflicts.slice(0, 60),
|
|
210
|
+
conflictsTruncated: conflicts.length > 60, recoveryDirectory: integrationDirectory,
|
|
211
|
+
detail: 'Merge conflicts are isolated here. The delivery workspace has not been changed.' };
|
|
212
|
+
}
|
|
213
|
+
const mergedTree = await (0, GitCheckpoint_1.gitText)(integrationDirectory, ['write-tree']);
|
|
214
|
+
const patch = await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['diff', '--binary', '--no-ext-diff', '--no-textconv',
|
|
215
|
+
current.tree, mergedTree, '--']);
|
|
216
|
+
if ((await (0, GitCheckpoint_1.captureCheckpoint)(artifact.source.root)).revision !== current.revision) {
|
|
217
|
+
throw new Error('Delivery workspace changed during integration; no patch was applied');
|
|
218
|
+
}
|
|
219
|
+
if (patch.length) {
|
|
220
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['apply', '--check', '--whitespace=nowarn', '-'], patch);
|
|
221
|
+
const recoveryRoot = `refs/remote-cli/integrations/${(0, crypto_1.randomUUID)()}`;
|
|
222
|
+
const recovery = { beforeRef: `${recoveryRoot}/before`, targetRef: `${recoveryRoot}/target` };
|
|
223
|
+
const target = await (0, GitCheckpoint_1.createCheckpointCommit)(artifact.source.root, mergedTree, current.commit, `Remote CLI integration target ${artifact.taskId}`);
|
|
224
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['update-ref', recovery.beforeRef, current.commit]);
|
|
225
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['update-ref', recovery.targetRef, target]);
|
|
226
|
+
// A crash between mutation and receipt is unknown, not evidence of a clean rollback.
|
|
227
|
+
await this.write('artifacts', artifact.taskId, { ...artifact, recovery });
|
|
228
|
+
owner.checkActive?.();
|
|
229
|
+
try {
|
|
230
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['apply', '--whitespace=nowarn', '-'], patch);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
return { ...await this.view({ ...artifact, recovery }), applied: false, deliveryMayHaveChanged: true,
|
|
234
|
+
error: error instanceof Error ? error.message.slice(0, 600) : 'File application failed',
|
|
235
|
+
detail: 'Do not assume rollback. Compare the preserved before/target snapshots and recover manually.' };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
owner.checkActive?.();
|
|
239
|
+
// Git apply does not stage or commit. Preserve the user's original staging choices.
|
|
240
|
+
await this.resolveArtifact(artifact, 'applied', mergedTree);
|
|
241
|
+
return { ...await this.view({ ...artifact, disposition: 'applied' }), applied: true,
|
|
242
|
+
detail: 'Changes applied without staging, committing, or pushing. Verify the combined result before delivery.' };
|
|
243
|
+
}
|
|
244
|
+
finally {
|
|
245
|
+
if (created && !preserve) {
|
|
246
|
+
// This directory contains only captured integration input and a reproducible merge result.
|
|
247
|
+
await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['worktree', 'remove', '--force', integrationDirectory])
|
|
248
|
+
.catch(() => console.warn('[Delegation] Integration scratch worktree retained for manual cleanup'));
|
|
249
|
+
}
|
|
250
|
+
else if (!created) {
|
|
251
|
+
// Failed setup can leave partial files; preserve them without masking the setup error.
|
|
252
|
+
await promises_1.default.rmdir(integrationDirectory)
|
|
253
|
+
.catch(() => console.warn('[Delegation] Partial integration directory retained for manual cleanup'));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
async resolveArtifact(artifact, disposition, integratedTree) {
|
|
258
|
+
await this.write('artifacts', artifact.taskId, { ...artifact, disposition, integratedTree });
|
|
259
|
+
const workspace = await this.read('lanes', artifact.laneId);
|
|
260
|
+
if (workspace?.pendingTaskId === artifact.taskId) {
|
|
261
|
+
await this.write('lanes', artifact.laneId, { ...workspace, pendingTaskId: undefined });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async view(artifact) {
|
|
265
|
+
const files = (await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['diff', '--name-only', '-z', '--no-renames', '--no-ext-diff', '--no-textconv',
|
|
266
|
+
artifact.input.tree, artifact.tree, '--'])).toString('utf8').split('\0').filter(Boolean);
|
|
267
|
+
return { taskId: artifact.taskId, disposition: artifact.disposition, successful: artifact.successful,
|
|
268
|
+
baseCommit: artifact.input.commit, outputCommit: artifact.output,
|
|
269
|
+
changedFiles: files.slice(0, 60), filesTruncated: files.length > 60,
|
|
270
|
+
...(artifact.recovery ? { recovery: artifact.recovery } : {}) };
|
|
271
|
+
}
|
|
272
|
+
async assertSelectedScope(artifact) {
|
|
273
|
+
// Rename detection hides the removed source path from --name-only; validate BOTH endpoints.
|
|
274
|
+
const files = (await (0, GitCheckpoint_1.runGit)(artifact.source.root, ['diff', '--name-only', '-z', '--no-renames', artifact.input.tree, artifact.tree, '--']))
|
|
275
|
+
.toString('utf8').split('\0').filter(Boolean);
|
|
276
|
+
if (files.some(file => !inside(artifact.source.cwd, path_1.default.resolve(artifact.source.root, file)))) {
|
|
277
|
+
throw new Error('Worker changes extend outside the selected working directory; manual integration is required');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async validateArtifact(artifact, owner) {
|
|
281
|
+
if (artifact.taskId === undefined || !UUID.test(artifact.taskId) || !UUID.test(artifact.laneId)
|
|
282
|
+
|| artifact.threadId !== owner.threadId || artifact.source.cwd !== owner.cwd
|
|
283
|
+
|| artifact.workspaceGeneration !== owner.workspaceGeneration || !GitCheckpoint_1.GIT_OID.test(artifact.output)
|
|
284
|
+
|| !GitCheckpoint_1.GIT_OID.test(artifact.tree) || !GitCheckpoint_1.GIT_OID.test(artifact.input.commit) || !GitCheckpoint_1.GIT_OID.test(artifact.input.tree)
|
|
285
|
+
|| !['pending', 'applied', 'retained'].includes(artifact.disposition))
|
|
286
|
+
throw new Error('Invalid or foreign worker artifact');
|
|
287
|
+
await this.validateSource(artifact.source);
|
|
288
|
+
if (await (0, GitCheckpoint_1.gitText)(artifact.source.root, ['rev-parse', this.outputRef(artifact.taskId)]) !== artifact.output
|
|
289
|
+
|| await (0, GitCheckpoint_1.gitText)(artifact.source.root, ['rev-parse', this.inputRef(artifact.taskId)]) !== artifact.input.commit
|
|
290
|
+
|| await (0, GitCheckpoint_1.gitText)(artifact.source.root, ['rev-parse', `${artifact.output}^{tree}`]) !== artifact.tree
|
|
291
|
+
|| await (0, GitCheckpoint_1.gitText)(artifact.source.root, ['rev-parse', `${artifact.input.commit}^{tree}`]) !== artifact.input.tree) {
|
|
292
|
+
throw new Error('Worker artifact reference changed; manual recovery is required');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async validateSource(source) {
|
|
296
|
+
const discovered = await this.discover(source.cwd);
|
|
297
|
+
if (!discovered || discovered.root !== source.root || discovered.commonDirectory !== source.commonDirectory
|
|
298
|
+
|| discovered.relativeCwd !== source.relativeCwd)
|
|
299
|
+
throw new Error('Source repository identity changed');
|
|
300
|
+
}
|
|
301
|
+
async validateWorkspace(workspace) {
|
|
302
|
+
this.assertId(workspace.laneId);
|
|
303
|
+
this.assertId(workspace.taskId);
|
|
304
|
+
if (workspace.taskRef !== `refs/remote-cli/tasks/${workspace.taskId}` || !GitCheckpoint_1.GIT_OID.test(workspace.input.commit)) {
|
|
305
|
+
throw new Error('Owned worker task reference is invalid');
|
|
306
|
+
}
|
|
307
|
+
await this.validateSource(workspace.source);
|
|
308
|
+
if (workspace.directory !== this.worktreeDirectory(workspace.source, workspace.laneId)
|
|
309
|
+
|| workspace.cwd !== path_1.default.join(workspace.directory, workspace.source.relativeCwd)
|
|
310
|
+
|| await promises_1.default.realpath(workspace.directory) !== workspace.directory
|
|
311
|
+
|| await (0, GitCheckpoint_1.gitText)(workspace.directory, ['rev-parse', '--show-toplevel']) !== workspace.directory
|
|
312
|
+
|| await promises_1.default.realpath(path_1.default.resolve(workspace.directory, await (0, GitCheckpoint_1.gitText)(workspace.directory, ['rev-parse', '--git-common-dir']))) !== workspace.source.commonDirectory) {
|
|
313
|
+
throw new Error('Owned worker worktree identity changed');
|
|
314
|
+
}
|
|
315
|
+
if (!inside(workspace.directory, await promises_1.default.realpath(workspace.cwd)))
|
|
316
|
+
throw new Error('Worker directory escapes its worktree');
|
|
317
|
+
}
|
|
318
|
+
async assertClean(directory) {
|
|
319
|
+
if ((await (0, GitCheckpoint_1.runGit)(directory, ['status', '--porcelain=v1', '-z', '--untracked-files=all'])).length) {
|
|
320
|
+
throw new Error('Worker worktree contains unaccounted changes; manual recovery is required');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
worktreeDirectory(source, laneId) {
|
|
324
|
+
this.assertId(laneId);
|
|
325
|
+
const key = (0, crypto_1.createHash)('sha256').update(source.root).digest('hex');
|
|
326
|
+
return path_1.default.join(this.directory, 'trees', key, laneId);
|
|
327
|
+
}
|
|
328
|
+
inputRef(taskId) { this.assertId(taskId); return `refs/remote-cli/inputs/${taskId}`; }
|
|
329
|
+
outputRef(taskId) { this.assertId(taskId); return `refs/remote-cli/artifacts/${taskId}`; }
|
|
330
|
+
assertId(id) { if (!UUID.test(id))
|
|
331
|
+
throw new Error('Invalid worker workspace ID'); }
|
|
332
|
+
async initialize() {
|
|
333
|
+
await this.safeDirectory(this.directory);
|
|
334
|
+
await Promise.all(['lanes', 'artifacts', 'trees'].map(name => this.safeDirectory(path_1.default.join(this.directory, name))));
|
|
335
|
+
}
|
|
336
|
+
async safeDirectory(directory) {
|
|
337
|
+
await promises_1.default.mkdir(directory, { recursive: true, mode: 0o700 });
|
|
338
|
+
const stat = await promises_1.default.lstat(directory);
|
|
339
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || await promises_1.default.realpath(directory) !== path_1.default.resolve(directory)) {
|
|
340
|
+
throw new Error('Worker storage must be a canonical directory, not a symbolic link');
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
async read(kind, id) {
|
|
344
|
+
this.assertId(id);
|
|
345
|
+
await this.initialize();
|
|
346
|
+
const file = path_1.default.join(this.directory, kind, `${id}.json`);
|
|
347
|
+
try {
|
|
348
|
+
const stat = await promises_1.default.lstat(file);
|
|
349
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size > RECORD_BYTES)
|
|
350
|
+
throw new Error('Invalid worker workspace record');
|
|
351
|
+
return JSON.parse(await promises_1.default.readFile(file, 'utf8'));
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
if (error.code === 'ENOENT')
|
|
355
|
+
return undefined;
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async write(kind, id, record) {
|
|
360
|
+
this.assertId(id);
|
|
361
|
+
await this.initialize();
|
|
362
|
+
const data = JSON.stringify(record);
|
|
363
|
+
if (Buffer.byteLength(data) > RECORD_BYTES)
|
|
364
|
+
throw new Error('Worker workspace record is too large');
|
|
365
|
+
const target = path_1.default.join(this.directory, kind, `${id}.json`);
|
|
366
|
+
const temporary = `${target}.${(0, crypto_1.randomUUID)()}.tmp`;
|
|
367
|
+
await promises_1.default.writeFile(temporary, data, { mode: 0o600, flag: 'wx' });
|
|
368
|
+
try {
|
|
369
|
+
await promises_1.default.rename(temporary, target);
|
|
370
|
+
}
|
|
371
|
+
finally {
|
|
372
|
+
await promises_1.default.rm(temporary, { force: true });
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.DelegatedWorkspaceManager = DelegatedWorkspaceManager;
|
|
377
|
+
//# sourceMappingURL=DelegatedWorkspaceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DelegatedWorkspaceManager.js","sourceRoot":"","sources":["../../src/delegation/DelegatedWorkspaceManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { DirectoryGuard } from '../security/DirectoryGuard';
|
|
2
2
|
import type { BackendKey, ExecutorConfig } from '../types/config';
|
|
3
3
|
import type { Thread } from '../thread/types';
|
|
4
4
|
import type { IExecutor } from '../executor/IExecutor';
|
|
5
|
-
import type { ApprovalRequestInfo, ApprovalStatus, DelegationProgressInfo, ToolUseInfo, ToolResultInfo } from '../types';
|
|
5
|
+
import type { ApprovalRequestInfo, ApprovalStatus, DelegationProgressInfo, ExecutionMetadata, ToolUseInfo, ToolResultInfo } from '../types';
|
|
6
6
|
import { createExecutor } from '../executor';
|
|
7
7
|
import { BackendRegistry } from './BackendRegistry';
|
|
8
8
|
import { DelegationStore, type DelegatedTaskRecord } from './DelegationStore';
|
|
9
9
|
import { DelegatedWorkerSessionStore } from './DelegatedWorkerSessionStore';
|
|
10
10
|
import { type DelegationBackend, type DelegationHandler } from './contract';
|
|
11
|
+
import { DelegatedWorkspaceManager, type DelegatedArtifactView } from './DelegatedWorkspaceManager';
|
|
11
12
|
export declare const DELEGATION_LIMITS: {
|
|
12
13
|
readonly launches: 12;
|
|
13
|
-
readonly concurrent:
|
|
14
|
+
readonly concurrent: 5;
|
|
14
15
|
readonly idleTimeoutMs: number;
|
|
15
16
|
readonly toolIdleTimeoutMs: number;
|
|
17
|
+
readonly queueTimeoutMs: number;
|
|
16
18
|
readonly resultBytes: number;
|
|
17
19
|
readonly continuationBytes: number;
|
|
18
20
|
readonly storageTimeoutMs: 10000;
|
|
@@ -27,6 +29,7 @@ export declare const DELEGATION_TEXT_PROGRESS: {
|
|
|
27
29
|
export interface DelegationTimeoutPolicy {
|
|
28
30
|
idleTimeoutMs: number;
|
|
29
31
|
toolIdleTimeoutMs: number;
|
|
32
|
+
queueTimeoutMs?: number;
|
|
30
33
|
}
|
|
31
34
|
type TimeoutPolicyInput = DelegationTimeoutPolicy | number;
|
|
32
35
|
export declare function workspacesOverlap(first: string, second: string): boolean;
|
|
@@ -54,6 +57,8 @@ export interface DelegatedTaskResult {
|
|
|
54
57
|
output?: string;
|
|
55
58
|
error?: string;
|
|
56
59
|
truncated: boolean;
|
|
60
|
+
artifact?: Pick<DelegatedArtifactView, 'taskId' | 'disposition' | 'outputCommit'>;
|
|
61
|
+
executionMetadata?: ExecutionMetadata;
|
|
57
62
|
}
|
|
58
63
|
export interface DelegationScope {
|
|
59
64
|
invoke: DelegationHandler;
|
|
@@ -67,6 +72,7 @@ export interface DelegationScope {
|
|
|
67
72
|
collectPendingResults(): Promise<DelegatedTaskResult[]>;
|
|
68
73
|
close(): Promise<void>;
|
|
69
74
|
waitingExecutor(): IExecutor | undefined;
|
|
75
|
+
waitingInputCount(): number;
|
|
70
76
|
}
|
|
71
77
|
/** Owns children independently of the user-thread queue and primary executor pool. */
|
|
72
78
|
export declare class DelegationManager {
|
|
@@ -76,13 +82,16 @@ export declare class DelegationManager {
|
|
|
76
82
|
readonly registry: BackendRegistry;
|
|
77
83
|
readonly store: DelegationStore;
|
|
78
84
|
readonly laneStore: DelegatedWorkerSessionStore;
|
|
85
|
+
readonly workspaceManager: DelegatedWorkspaceManager;
|
|
79
86
|
private running;
|
|
80
87
|
private workspaces;
|
|
88
|
+
private pumps;
|
|
81
89
|
private scopes;
|
|
82
90
|
private readonly timeouts;
|
|
83
|
-
constructor(guard: DirectoryGuard, factory?: typeof createExecutor, registry?: BackendRegistry, store?: DelegationStore, timeoutInput?: TimeoutPolicyInput, cleanupMs?: number, laneStore?: DelegatedWorkerSessionStore);
|
|
91
|
+
constructor(guard: DirectoryGuard, factory?: typeof createExecutor, registry?: BackendRegistry, store?: DelegationStore, timeoutInput?: TimeoutPolicyInput, cleanupMs?: number, laneStore?: DelegatedWorkerSessionStore, workspaceManager?: DelegatedWorkspaceManager);
|
|
84
92
|
begin(parent: DelegationParent): DelegationScope;
|
|
85
93
|
waitingExecutor(threadId: string): IExecutor | undefined;
|
|
94
|
+
hasAmbiguousInput(threadId: string): boolean;
|
|
86
95
|
hasActiveTasks(threadId: string): boolean;
|
|
87
96
|
/** Retry previously confirmed cleanup requests without touching uncertain interrupted workers. */
|
|
88
97
|
reconcilePendingWorkerLanes(): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DelegationManager.d.ts","sourceRoot":"","sources":["../../src/delegation/DelegationManager.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"DelegationManager.d.ts","sourceRoot":"","sources":["../../src/delegation/DelegationManager.ts"],"names":[],"mappings":"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"}
|