@codetreker/daynight 0.25.0 → 0.25.4

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 (34) hide show
  1. package/README.md +12 -70
  2. package/config.example.yml +1 -1
  3. package/dist/commands/skill/skills/using-daynight/SKILL.md +24 -20
  4. package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +16 -10
  5. package/dist/commands/skill/skills/using-daynight/references/create-task.md +40 -39
  6. package/dist/commands/skill/skills/using-daynight/references/goal.md +40 -29
  7. package/dist/commands/skill/skills/using-daynight/references/handbook.md +4 -3
  8. package/dist/commands/skill/skills/using-daynight/references/handoff.md +3 -0
  9. package/dist/commands/skill/skills/using-daynight/references/run-task.md +3 -3
  10. package/dist/commands/skill/skills/using-daynight/references/task-content.md +96 -51
  11. package/dist/commands/skill/skills/using-daynight/references/task-execution.md +28 -22
  12. package/dist/commands/worker/config.d.ts +1 -1
  13. package/dist/commands/worker/config.js +1 -1
  14. package/dist/commands/worker/config.js.map +1 -1
  15. package/dist/commands/worker/definition.js +0 -5
  16. package/dist/commands/worker/definition.js.map +1 -1
  17. package/dist/commands/worker/herdr/agents.js +6 -7
  18. package/dist/commands/worker/herdr/agents.js.map +1 -1
  19. package/dist/commands/worker/herdr/arguments.js +1 -1
  20. package/dist/commands/worker/herdr/arguments.js.map +1 -1
  21. package/dist/commands/worker/index.d.ts +0 -5
  22. package/dist/commands/worker/index.js +0 -5
  23. package/dist/commands/worker/index.js.map +1 -1
  24. package/dist/commands/worker/runtime.js +0 -3
  25. package/dist/commands/worker/runtime.js.map +1 -1
  26. package/dist/commands/worker/worktrees.js +9 -8
  27. package/dist/commands/worker/worktrees.js.map +1 -1
  28. package/package.json +2 -2
  29. package/dist/commands/worker/migration-state.d.ts +0 -40
  30. package/dist/commands/worker/migration-state.js +0 -197
  31. package/dist/commands/worker/migration-state.js.map +0 -1
  32. package/dist/commands/worker/migration.d.ts +0 -21
  33. package/dist/commands/worker/migration.js +0 -406
  34. package/dist/commands/worker/migration.js.map +0 -1
@@ -1,406 +0,0 @@
1
- import Database from "better-sqlite3";
2
- import { lstat, readdir, realpath, rename } from "node:fs/promises";
3
- import { Socket } from "node:net";
4
- import path from "node:path";
5
- import { createOperation } from "../../api/operation.js";
6
- import { canonicalId } from "../../api/parse.js";
7
- import { loadServerConfiguration, normalizeServerUrl } from "../../config/server.js";
8
- import { resolvePhysicalDirectory } from "../../platform/filesystem.js";
9
- import { runRepositoryGit } from "../../repository/git.js";
10
- import { repositoryIdentity } from "../../repository/identity.js";
11
- import { createHerdrInstance, resolveHerdrInstancePaths } from "./herdr/instance.js";
12
- import { herdrIpcAddress } from "./herdr/rpc.js";
13
- import { acquireWorkerInstanceLock } from "./instance-lock.js";
14
- import { assertWorkerWorkspaceMigrationReady, completeWorkspaceMigration, createWorkspaceMigrationBackup, migrationDirectoryIdentity, migrationExists, migrationHash, persistWorkspaceMigrationPhase, readMigrationFile, readWorkspaceMigrationManifest, rollbackWorkspaceMigration, syncMigrationDirectory, workspaceMigrationFile, writeMigrationFile, } from "./migration-state.js";
15
- import { resolveWorkerPaths } from "./paths.js";
16
- import { parseResourceOwner, resourceOwnerKey, sameResourceOwner } from "./resource-owner.js";
17
- export { assertWorkerWorkspaceMigrationReady } from "./migration-state.js";
18
- const markerPrefix = "daynight-worker:";
19
- const ownerFields = ["projectId", "taskId", "claimId", "worktreeId"];
20
- const ownerKey = (owner) => `${owner.projectId}/${owner.taskId}/${owner.claimId}`;
21
- const object = (value, subject) => {
22
- if (typeof value !== "object" || value === null || Array.isArray(value))
23
- throw new Error(`${subject} must be an object.`);
24
- return value;
25
- };
26
- const array = (value, subject) => {
27
- if (!Array.isArray(value))
28
- throw new Error(`${subject} must be an array.`);
29
- return value;
30
- };
31
- const string = (value, subject) => {
32
- if (typeof value !== "string" || value.length === 0 || /[\r\n\0]/.test(value))
33
- throw new Error(`${subject} must be nonempty text without line breaks or NUL.`);
34
- return value;
35
- };
36
- const id = (value, subject) => {
37
- const text = string(value, subject);
38
- if (canonicalId(text) !== text)
39
- throw new Error(`${subject} must be a canonical UUID.`);
40
- return text;
41
- };
42
- const plainOwner = (value) => ({ projectId: id(value.projectId, "Project ID"), taskId: id(value.taskId, "Task ID"), claimId: id(value.claimId, "Claim ID"), worktreeId: id(value.worktreeId, "Worktree ID") });
43
- const legacyOwner = (value, serverOrigin) => {
44
- const actual = string(value.serverOrigin, "Legacy server origin");
45
- if (normalizeServerUrl(actual) !== actual || actual !== serverOrigin)
46
- throw new Error("A legacy resource belongs to another service. Restore its original configuration before migrating.");
47
- return { serverOrigin: actual, ...plainOwner(value) };
48
- };
49
- const parseLegacyLabel = (label, serverOrigin) => {
50
- if (typeof label !== "string")
51
- return null;
52
- const currentSuffix = label.lastIndexOf(" | daynight:");
53
- if (currentSuffix > 0) {
54
- parseResourceOwner(label.slice(currentSuffix + " | daynight:".length));
55
- return null;
56
- }
57
- if (!label.startsWith("daynight:"))
58
- return null;
59
- const raw = label.slice("daynight:".length);
60
- const data = object(JSON.parse(raw), "Legacy Herdr label");
61
- const fields = ["serverOrigin", ...ownerFields];
62
- if (Object.keys(data).length !== fields.length || fields.some((field) => !Object.hasOwn(data, field)))
63
- throw new Error("The legacy Herdr label has an unsupported field set.");
64
- const owner = legacyOwner(data, serverOrigin);
65
- if (JSON.stringify(owner) !== raw)
66
- throw new Error("The legacy Herdr label does not use canonical identity encoding.");
67
- return owner;
68
- };
69
- const parseMarker = (raw, serverOrigin) => {
70
- if (!raw.startsWith(markerPrefix))
71
- return null;
72
- const value = object(JSON.parse(raw.slice(markerPrefix.length).trimEnd()), "Legacy Git marker");
73
- const fields = [...ownerFields, "leaf", "root", "common"];
74
- if (!Object.hasOwn(value, "serverOrigin")) {
75
- if (Object.keys(value).length !== fields.length || fields.some((field) => !Object.hasOwn(value, field)))
76
- throw new Error("The Git marker has an unsupported field set.");
77
- plainOwner(value);
78
- return null;
79
- }
80
- if (Object.keys(value).length !== fields.length + 1 || fields.some((field) => !Object.hasOwn(value, field)))
81
- throw new Error("The legacy Git marker has an unsupported field set.");
82
- const owner = legacyOwner(value, serverOrigin);
83
- const fingerprints = Object.fromEntries(["leaf", "root", "common"].map((field) => {
84
- const fingerprint = string(value[field], `Legacy ${field} fingerprint`);
85
- if (!/^\d+:\d+$/.test(fingerprint))
86
- throw new Error("The legacy Git marker has an invalid directory fingerprint.");
87
- return [field, fingerprint];
88
- }));
89
- return { ...owner, ...fingerprints };
90
- };
91
- const readInventory = async (paths) => {
92
- if (!await migrationExists(paths.databaseFile))
93
- return { projects: [], tasks: [] };
94
- await readMigrationFile(paths.databaseFile);
95
- const database = new Database(paths.databaseFile, { readonly: true, fileMustExist: true });
96
- try {
97
- const projects = database.prepare("SELECT project_id AS projectId, repo_url AS repoUrl, local_path AS localPath FROM projects ORDER BY project_id").all().map((row) => {
98
- const localPath = string(row.localPath, "Project repository path");
99
- if (!path.isAbsolute(localPath))
100
- throw new Error("The original project repository path is not absolute.");
101
- return { projectId: id(row.projectId, "Project ID"), repoUrl: string(row.repoUrl, "Project repository URL"), localPath };
102
- });
103
- const tasks = database.prepare("SELECT project_id AS projectId, task_id AS taskId, claim_id AS claimId, status, agent, session_id AS sessionId FROM tasks ORDER BY project_id, task_id, claim_id").all().map((row) => {
104
- if (row.status !== "pending" && row.status !== "active" && row.status !== "done")
105
- throw new Error("The persisted task has an unsupported status.");
106
- if (row.agent !== "codex" && row.agent !== "copilot")
107
- throw new Error("The persisted task has an unsupported native agent.");
108
- return { projectId: id(row.projectId, "Project ID"), taskId: id(row.taskId, "Task ID"), claimId: id(row.claimId, "Claim ID"), status: row.status, agent: row.agent, sessionId: row.sessionId === null ? null : id(row.sessionId, "Native session ID") };
109
- });
110
- return { projects, tasks };
111
- }
112
- finally {
113
- database.close();
114
- }
115
- };
116
- const needTask = (owner, inventory) => {
117
- const task = inventory.tasks.find((candidate) => ownerKey(candidate) === ownerKey(owner));
118
- if (task === undefined)
119
- throw new Error(`The legacy resource has no original SQLite claim: ${ownerKey(owner)}.`);
120
- if (task.status !== "done" && task.sessionId === null)
121
- throw new Error(`The legacy execution ${ownerKey(owner)} has no recorded native session ID. Inspect it before migrating.`);
122
- return task;
123
- };
124
- const git = async (cwd, arguments_, operation) => {
125
- const result = await runRepositoryGit(cwd, ["-c", "core.hooksPath=", ...arguments_], operation);
126
- return result.stdout.replace(/\r?\n$/, "");
127
- };
128
- const markerPlans = async (inventory, serverOrigin, operation) => {
129
- const plans = [];
130
- const owners = new Map();
131
- for (const project of inventory.projects) {
132
- operation.check();
133
- const rootIdentity = await migrationDirectoryIdentity(project.localPath);
134
- if (path.normalize(await realpath(await git(project.localPath, ["rev-parse", "--show-toplevel"], operation))) !== path.normalize(await realpath(project.localPath)))
135
- throw new Error("The project path no longer identifies its original primary worktree.");
136
- if (repositoryIdentity(await git(project.localPath, ["config", "--get", "remote.origin.url"], operation)) !== repositoryIdentity(project.repoUrl))
137
- throw new Error("The original repository remote does not match the stored project mapping.");
138
- const common = await realpath(await git(project.localPath, ["rev-parse", "--path-format=absolute", "--git-common-dir"], operation));
139
- const commonIdentity = await migrationDirectoryIdentity(common);
140
- const family = path.join(common, "worktrees");
141
- if (!await migrationExists(family))
142
- continue;
143
- await migrationDirectoryIdentity(family);
144
- for (const name of (await readdir(family)).sort()) {
145
- const admin = path.join(family, name);
146
- await migrationDirectoryIdentity(admin);
147
- const file = path.join(admin, "locked");
148
- if (!await migrationExists(file))
149
- continue;
150
- const before = (await readMigrationFile(file)).toString("utf8");
151
- const marker = parseMarker(before, serverOrigin);
152
- if (marker === null || marker.projectId !== project.projectId)
153
- continue;
154
- const owner = plainOwner(marker);
155
- needTask(owner, inventory);
156
- const old = owners.get(ownerKey(owner));
157
- if (old !== undefined)
158
- throw new Error("Legacy resources have duplicate or conflicting four-field identities.");
159
- owners.set(ownerKey(owner), owner);
160
- const leaf = path.join(project.localPath, ".worktrees", "daynight", owner.taskId);
161
- if (marker.root !== rootIdentity || marker.common !== commonIdentity || marker.leaf !== await migrationDirectoryIdentity(leaf))
162
- throw new Error("The legacy Git marker directory fingerprints do not match the original worktree.");
163
- const pointer = (await readMigrationFile(path.join(leaf, ".git"))).toString("utf8").trimEnd();
164
- const registered = (await readMigrationFile(path.join(admin, "gitdir"))).toString("utf8").trimEnd();
165
- const parent = (await readMigrationFile(path.join(admin, "commondir"))).toString("utf8").trimEnd();
166
- const physicalParent = await resolvePhysicalDirectory(path.dirname(leaf));
167
- const expectedPointer = path.join(physicalParent.ancestorPath, ...physicalParent.missingComponents, path.basename(leaf), ".git");
168
- if (!pointer.startsWith("gitdir: ") || await realpath(path.resolve(leaf, pointer.slice(8))) !== admin
169
- || await realpath(path.resolve(admin, registered)) !== expectedPointer
170
- || await realpath(path.resolve(admin, parent)) !== common)
171
- throw new Error("The legacy worktree Git registration does not point to the original task path.");
172
- if (await git(leaf, ["symbolic-ref", "HEAD"], operation) !== `refs/heads/daynight/${owner.taskId}`)
173
- throw new Error("The legacy worktree no longer uses its original task branch.");
174
- plans.push({ file, before, owner, after: `${markerPrefix}${JSON.stringify({ ...owner, leaf: marker.leaf, root: marker.root, common: marker.common })}\n` });
175
- }
176
- }
177
- return plans;
178
- };
179
- const readPersistedWorkspaces = async (sessionFile) => {
180
- if (!await migrationExists(sessionFile))
181
- return [];
182
- const snapshot = object(JSON.parse((await readMigrationFile(sessionFile)).toString("utf8")), "Herdr session snapshot");
183
- if (snapshot.version !== 3)
184
- throw new Error("Workspace migration requires a supported Herdr session snapshot version 3.");
185
- return array(snapshot.workspaces, "Saved Herdr workspaces").map((workspace) => object(workspace, "Saved Herdr workspace"));
186
- };
187
- const workspacePlans = async (sessionFile, inventory, markers, serverOrigin) => {
188
- const plans = [];
189
- const identities = new Set();
190
- for (const workspace of await readPersistedWorkspaces(sessionFile)) {
191
- const owner = parseLegacyLabel(workspace.custom_name, serverOrigin);
192
- if (owner === null)
193
- continue;
194
- const task = needTask(owner, inventory);
195
- const marker = markers.find((candidate) => sameResourceOwner(candidate.owner, owner));
196
- if (marker === undefined)
197
- throw new Error("A legacy Herdr workspace has no matching verified Git ownership marker.");
198
- const key = ownerKey(owner);
199
- if (identities.has(key))
200
- throw new Error("Legacy Herdr workspaces have duplicate or conflicting execution identities.");
201
- identities.add(key);
202
- const project = inventory.projects.find((candidate) => candidate.projectId === owner.projectId);
203
- const cwd = path.join(project.localPath, ".worktrees", "daynight", owner.taskId);
204
- const tabs = array(workspace.tabs, "Legacy workspace tabs");
205
- if (tabs.length !== 1)
206
- throw new Error("A legacy workspace has ambiguous tabs; retain it for inspection.");
207
- const panes = Object.values(object(object(tabs[0], "Legacy tab").panes, "Legacy saved panes"));
208
- if (panes.length !== 1)
209
- throw new Error("A legacy workspace has ambiguous panes; retain it for inspection.");
210
- const pane = object(panes[0], "Legacy pane");
211
- const savedCwd = string(pane.cwd, "Legacy pane cwd");
212
- if (!path.isAbsolute(savedCwd) || await realpath(savedCwd) !== await realpath(cwd))
213
- throw new Error("A legacy Herdr pane no longer points at its original worktree.");
214
- if (pane.agent_session !== undefined && pane.agent_session !== null) {
215
- const native = object(pane.agent_session, "Legacy native session");
216
- if (native.kind !== "id" || native.agent !== task.agent || native.source !== `herdr:${task.agent}` || native.value !== task.sessionId)
217
- throw new Error("The saved Herdr native reference differs from the original SQLite session.");
218
- }
219
- plans.push({ label: string(workspace.custom_name, "Legacy label"), owner, cwd });
220
- }
221
- return plans;
222
- };
223
- const endpointStopped = (endpoint, operation) => new Promise((resolve, reject) => {
224
- operation.check();
225
- const socket = new Socket();
226
- const timer = setTimeout(() => { socket.destroy(); reject(new Error("Cannot establish whether the private Herdr endpoint is stopped.")); }, Math.min(1_000, operation.remainingMs()));
227
- const finish = (error) => { clearTimeout(timer); operation.signal.removeEventListener("abort", cancel); socket.destroy(); if (error === undefined)
228
- resolve();
229
- else
230
- reject(error); };
231
- const cancel = () => finish(operation.signal.reason);
232
- socket.once("connect", () => finish(new Error("The private Herdr daemon is still running. Stop the worker and its private daemon before migrating workspaces.")));
233
- socket.once("error", (error) => { if ("code" in error && (error.code === "ENOENT" || error.code === "ECONNREFUSED"))
234
- finish();
235
- else
236
- finish(error); });
237
- operation.signal.addEventListener("abort", cancel, { once: true });
238
- socket.connect(herdrIpcAddress(endpoint));
239
- });
240
- const defaultHerdr = (paths) => {
241
- const instance = createHerdrInstance({ paths });
242
- let startedHere = false;
243
- return {
244
- assertStopped: async (operation) => { await endpointStopped(instance.paths.apiEndpoint, operation); await endpointStopped(instance.paths.clientEndpoint, operation); },
245
- start: async (operation) => {
246
- if ((await instance.ensure(operation)).reconnected)
247
- throw new Error("Migration requires its own newly started maintenance Herdr daemon.");
248
- startedHere = true;
249
- },
250
- snapshot: async (operation) => {
251
- const result = await instance.rpc.request("session.snapshot", {}, operation);
252
- if (result.type !== "session_snapshot")
253
- throw new Error("The maintenance daemon returned an invalid session snapshot.");
254
- return object(result.snapshot, "Maintenance snapshot");
255
- },
256
- close: async (workspaceId, operation) => { if ((await instance.rpc.request("workspace.close", { workspace_id: workspaceId, close_group: false }, operation)).type !== "ok")
257
- throw new Error("The maintenance daemon did not acknowledge workspace closure."); },
258
- stop: async (operation) => { if (startedHere) {
259
- await instance.stop(operation);
260
- startedHere = false;
261
- } },
262
- };
263
- };
264
- const closeLegacyWorkspaces = async (herdr, plans, serverOrigin, operation) => {
265
- const snapshot = await herdr.snapshot(operation);
266
- const actual = array(snapshot.workspaces, "Maintenance workspaces").map((value) => object(value, "Maintenance workspace"));
267
- const panes = array(snapshot.panes, "Maintenance panes").map((value) => object(value, "Maintenance pane"));
268
- const matches = [];
269
- for (const workspace of actual) {
270
- const owner = parseLegacyLabel(workspace.label, serverOrigin);
271
- if (owner === null)
272
- continue;
273
- const plan = plans.find((candidate) => sameResourceOwner(candidate.owner, owner));
274
- if (plan === undefined || plan.label !== workspace.label)
275
- throw new Error("The restored legacy workspace differs from the complete migration inventory.");
276
- const workspaceId = string(workspace.workspace_id, "Maintenance workspace ID");
277
- const bound = panes.filter((pane) => pane.workspace_id === workspaceId);
278
- if (bound.length !== 1)
279
- throw new Error("The restored legacy workspace has ambiguous panes or a different cwd.");
280
- const restoredCwd = string(bound[0].cwd, "Maintenance cwd");
281
- if (!path.isAbsolute(restoredCwd) || await realpath(restoredCwd) !== await realpath(plan.cwd))
282
- throw new Error("The restored legacy workspace has ambiguous panes or a different cwd.");
283
- matches.push({ id: workspaceId, plan });
284
- }
285
- if (matches.length !== plans.length || new Set(matches.map((match) => resourceOwnerKey(match.plan.owner))).size !== plans.length)
286
- throw new Error("The maintenance daemon did not restore every original legacy workspace.");
287
- for (const match of matches) {
288
- operation.check();
289
- await herdr.close(match.id, operation);
290
- }
291
- const after = await herdr.snapshot(operation);
292
- if (array(after.workspaces, "Maintenance workspaces").some((value) => parseLegacyLabel(object(value, "Maintenance workspace").label, serverOrigin) !== null))
293
- throw new Error("A legacy workspace remains after maintenance closure.");
294
- };
295
- export const migrateWorkerWorkspaces = async (options, dependencies = {}) => {
296
- const paths = resolveWorkerPaths(options.homeDirectory);
297
- const lock = await acquireWorkerInstanceLock(paths);
298
- const operation = createOperation({ ...(options.signal === undefined ? {} : { signal: options.signal }), limits: { totalMs: 300_000 } });
299
- let herdr;
300
- let started = false;
301
- let failure;
302
- try {
303
- operation.check();
304
- herdr = dependencies.createHerdr === undefined ? defaultHerdr(paths) : dependencies.createHerdr(paths);
305
- await herdr.assertStopped(operation);
306
- if (options.rollback === true) {
307
- if (!await migrationExists(workspaceMigrationFile(paths)))
308
- throw new Error("There is no incomplete workspace migration to roll back.");
309
- const manifest = await readWorkspaceMigrationManifest(paths);
310
- await rollbackWorkspaceMigration(paths, manifest);
311
- options.log?.("Restored and verified the original worker workspace state. Retry daynight worker migrate-workspaces to migrate it.\n");
312
- return;
313
- }
314
- await assertWorkerWorkspaceMigrationReady(paths);
315
- const { serverUrl } = await loadServerConfiguration(paths, operation.signal);
316
- const inventory = await readInventory(paths);
317
- const markers = await markerPlans(inventory, serverUrl, operation);
318
- const instancePaths = resolveHerdrInstancePaths(paths);
319
- const sessionFile = path.join(instancePaths.sessionDirectory, "session.json");
320
- const workspaces = await workspacePlans(sessionFile, inventory, markers, serverUrl);
321
- if (markers.length === 0 && workspaces.length === 0) {
322
- options.log?.("No legacy worker workspace identities require migration.\n");
323
- return;
324
- }
325
- const targets = markers.map((marker) => marker.file);
326
- for (const file of [paths.databaseFile, `${paths.databaseFile}-wal`, `${paths.databaseFile}-shm`])
327
- if (await migrationExists(file))
328
- targets.push(file);
329
- const manifest = await createWorkspaceMigrationBackup(paths, targets, new Set([instancePaths.apiEndpoint, instancePaths.clientEndpoint]));
330
- const phase = async (value) => {
331
- await persistWorkspaceMigrationPhase(paths, manifest, value);
332
- options.log?.(`Worker workspace migration: ${value}.\n`);
333
- await dependencies.afterPhase?.(value);
334
- operation.check();
335
- };
336
- await phase("backed-up");
337
- if (workspaces.length !== 0) {
338
- started = true;
339
- await herdr.start(operation);
340
- await closeLegacyWorkspaces(herdr, workspaces, serverUrl, operation);
341
- await phase("workspaces-closed");
342
- await herdr.stop(operation);
343
- started = false;
344
- if ((await readPersistedWorkspaces(sessionFile)).some((workspace) => parseLegacyLabel(workspace.custom_name, serverUrl) !== null))
345
- throw new Error("Herdr did not durably remove the legacy workspaces; keep the worker stopped and roll back.");
346
- }
347
- await phase("herdr-persisted");
348
- for (const marker of markers) {
349
- operation.check();
350
- if ((await readMigrationFile(marker.file)).toString("utf8") !== marker.before)
351
- throw new Error("A legacy Git marker changed after migration preflight; keep the worker stopped and roll back.");
352
- await writeMigrationFile(marker.file, marker.after, (await lstat(marker.file)).mode);
353
- if ((await readMigrationFile(marker.file)).toString("utf8") !== marker.after)
354
- throw new Error("A migrated Git marker failed readback verification.");
355
- }
356
- await phase("markers-written");
357
- for (const name of ["session-backups", "session-snapshots"]) {
358
- const directory = path.join(instancePaths.sessionDirectory, name);
359
- if (!await migrationExists(directory))
360
- continue;
361
- await migrationDirectoryIdentity(directory);
362
- await rename(directory, path.join(manifest.backupDirectory, name));
363
- await syncMigrationDirectory(instancePaths.sessionDirectory);
364
- await syncMigrationDirectory(manifest.backupDirectory);
365
- }
366
- await phase("recovery-archived");
367
- await verifyUnchangedSQLite(paths, manifest);
368
- await completeWorkspaceMigration(paths, manifest, "completed");
369
- options.log?.(`Migrated ${markers.length} Git workspace identities and ${workspaces.length} Herdr workspaces; claims, worktrees and native session IDs were retained. Backup: ${manifest.backupDirectory}.\n`);
370
- }
371
- catch (error) {
372
- failure = error;
373
- throw error;
374
- }
375
- finally {
376
- const cleanup = [];
377
- if (started && herdr !== undefined) {
378
- const stop = createOperation({ limits: { totalMs: 30_000 } });
379
- try {
380
- await herdr.stop(stop);
381
- }
382
- catch (error) {
383
- cleanup.push(error);
384
- }
385
- finally {
386
- stop.dispose();
387
- }
388
- }
389
- operation.dispose();
390
- try {
391
- await lock.release();
392
- }
393
- catch (error) {
394
- cleanup.push(error);
395
- }
396
- if (cleanup.length !== 0)
397
- throw new AggregateError(failure === undefined ? cleanup : [failure, ...cleanup], "Workspace migration and resource cleanup did not both complete.");
398
- }
399
- };
400
- const verifyUnchangedSQLite = async (paths, manifest) => {
401
- for (const file of manifest.files.filter((file) => file.target === paths.databaseFile || file.target === `${paths.databaseFile}-wal` || file.target === `${paths.databaseFile}-shm`)) {
402
- if (migrationHash(await readMigrationFile(file.target)) !== file.hash)
403
- throw new Error("The original SQLite claim/session bytes changed during workspace migration.");
404
- }
405
- };
406
- //# sourceMappingURL=migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/commands/worker/migration.ts"],"names":[],"mappings":"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"}