@codetreker/daynight 0.25.2 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -8
- package/config.example.yml +3 -0
- package/dist/api/client.js +2 -2
- package/dist/api/client.js.map +1 -1
- package/dist/api/parse.js +14 -2
- package/dist/api/parse.js.map +1 -1
- package/dist/api/types.d.ts +4 -1
- package/dist/api/worker-mode.d.ts +6 -0
- package/dist/api/worker-mode.js +14 -0
- package/dist/api/worker-mode.js.map +1 -0
- package/dist/cli/commands.js +2 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/controller/command-controls.d.ts +4 -0
- package/dist/commands/controller/command-controls.js +33 -0
- package/dist/commands/controller/command-controls.js.map +1 -0
- package/dist/commands/controller/definition.d.ts +3 -0
- package/dist/commands/controller/definition.js +22 -0
- package/dist/commands/controller/definition.js.map +1 -0
- package/dist/commands/controller/independent.d.ts +3 -0
- package/dist/commands/controller/independent.js +344 -0
- package/dist/commands/controller/independent.js.map +1 -0
- package/dist/commands/controller/index.d.ts +12 -0
- package/dist/commands/controller/index.js +73 -0
- package/dist/commands/controller/index.js.map +1 -0
- package/dist/commands/controller/launch-ticket.d.ts +49 -0
- package/dist/commands/controller/launch-ticket.js +99 -0
- package/dist/commands/controller/launch-ticket.js.map +1 -0
- package/dist/commands/controller/lifecycle-store.d.ts +84 -0
- package/dist/commands/controller/lifecycle-store.js +278 -0
- package/dist/commands/controller/lifecycle-store.js.map +1 -0
- package/dist/commands/controller/local-client.d.ts +44 -0
- package/dist/commands/controller/local-client.js +75 -0
- package/dist/commands/controller/local-client.js.map +1 -0
- package/dist/commands/controller/local-content.d.ts +23 -0
- package/dist/commands/controller/local-content.js +103 -0
- package/dist/commands/controller/local-content.js.map +1 -0
- package/dist/commands/controller/process-proof.d.ts +13 -0
- package/dist/commands/controller/process-proof.js +121 -0
- package/dist/commands/controller/process-proof.js.map +1 -0
- package/dist/commands/controller/providers/claude.d.ts +2 -0
- package/dist/commands/controller/providers/claude.js +470 -0
- package/dist/commands/controller/providers/claude.js.map +1 -0
- package/dist/commands/controller/providers/codex.d.ts +2 -0
- package/dist/commands/controller/providers/codex.js +254 -0
- package/dist/commands/controller/providers/codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
- package/dist/commands/controller/providers/controls-claude.js +138 -0
- package/dist/commands/controller/providers/controls-claude.js.map +1 -0
- package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
- package/dist/commands/controller/providers/controls-codex.js +199 -0
- package/dist/commands/controller/providers/controls-codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
- package/dist/commands/controller/providers/controls-copilot.js +143 -0
- package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
- package/dist/commands/controller/providers/controls.d.ts +21 -0
- package/dist/commands/controller/providers/controls.js +53 -0
- package/dist/commands/controller/providers/controls.js.map +1 -0
- package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
- package/dist/commands/controller/providers/copilot-interactions.js +295 -0
- package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
- package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
- package/dist/commands/controller/providers/copilot-projection.js +93 -0
- package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
- package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
- package/dist/commands/controller/providers/copilot-runtime.js +127 -0
- package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
- package/dist/commands/controller/providers/copilot.d.ts +2 -0
- package/dist/commands/controller/providers/copilot.js +309 -0
- package/dist/commands/controller/providers/copilot.js.map +1 -0
- package/dist/commands/controller/providers/interactions.d.ts +3 -0
- package/dist/commands/controller/providers/interactions.js +79 -0
- package/dist/commands/controller/providers/interactions.js.map +1 -0
- package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
- package/dist/commands/controller/providers/native-rpc.js +85 -0
- package/dist/commands/controller/providers/native-rpc.js.map +1 -0
- package/dist/commands/controller/providers/projection.d.ts +23 -0
- package/dist/commands/controller/providers/projection.js +99 -0
- package/dist/commands/controller/providers/projection.js.map +1 -0
- package/dist/commands/controller/providers/turns.d.ts +7 -0
- package/dist/commands/controller/providers/turns.js +21 -0
- package/dist/commands/controller/providers/turns.js.map +1 -0
- package/dist/commands/controller/providers/types.d.ts +44 -0
- package/dist/commands/controller/providers/types.js +2 -0
- package/dist/commands/controller/providers/types.js.map +1 -0
- package/dist/commands/controller/recovery.d.ts +6 -0
- package/dist/commands/controller/recovery.js +22 -0
- package/dist/commands/controller/recovery.js.map +1 -0
- package/dist/commands/controller/relay.d.ts +18 -0
- package/dist/commands/controller/relay.js +299 -0
- package/dist/commands/controller/relay.js.map +1 -0
- package/dist/commands/controller/resume.d.ts +18 -0
- package/dist/commands/controller/resume.js +193 -0
- package/dist/commands/controller/resume.js.map +1 -0
- package/dist/commands/controller/runtime.d.ts +5 -0
- package/dist/commands/controller/runtime.js +455 -0
- package/dist/commands/controller/runtime.js.map +1 -0
- package/dist/commands/controller/windows-job.d.ts +3 -0
- package/dist/commands/controller/windows-job.js +59 -0
- package/dist/commands/controller/windows-job.js.map +1 -0
- package/dist/commands/controller/wire-display.d.ts +5 -0
- package/dist/commands/controller/wire-display.js +11 -0
- package/dist/commands/controller/wire-display.js.map +1 -0
- package/dist/commands/skill/skills/using-daynight/SKILL.md +24 -20
- package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +16 -10
- package/dist/commands/skill/skills/using-daynight/references/create-task.md +40 -39
- package/dist/commands/skill/skills/using-daynight/references/goal.md +40 -29
- package/dist/commands/skill/skills/using-daynight/references/handbook.md +4 -3
- package/dist/commands/skill/skills/using-daynight/references/handoff.md +3 -0
- package/dist/commands/skill/skills/using-daynight/references/run-task.md +3 -3
- package/dist/commands/skill/skills/using-daynight/references/task-content.md +96 -51
- package/dist/commands/skill/skills/using-daynight/references/task-execution.md +28 -22
- package/dist/commands/worker/backend.d.ts +7 -0
- package/dist/commands/worker/backend.js +7 -0
- package/dist/commands/worker/backend.js.map +1 -0
- package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
- package/dist/commands/worker/backends/grant-renewal.js +42 -0
- package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
- package/dist/commands/worker/backends/session-api.d.ts +66 -0
- package/dist/commands/worker/backends/session-api.js +84 -0
- package/dist/commands/worker/backends/session-api.js.map +1 -0
- package/dist/commands/worker/backends/web-process.d.ts +79 -0
- package/dist/commands/worker/backends/web-process.js +156 -0
- package/dist/commands/worker/backends/web-process.js.map +1 -0
- package/dist/commands/worker/backends/web-store.d.ts +49 -0
- package/dist/commands/worker/backends/web-store.js +323 -0
- package/dist/commands/worker/backends/web-store.js.map +1 -0
- package/dist/commands/worker/backends/web-types.d.ts +83 -0
- package/dist/commands/worker/backends/web-types.js +3 -0
- package/dist/commands/worker/backends/web-types.js.map +1 -0
- package/dist/commands/worker/backends/web.d.ts +26 -0
- package/dist/commands/worker/backends/web.js +178 -0
- package/dist/commands/worker/backends/web.js.map +1 -0
- package/dist/commands/worker/config.js +12 -5
- package/dist/commands/worker/config.js.map +1 -1
- package/dist/commands/worker/control.d.ts +2 -0
- package/dist/commands/worker/control.js +11 -4
- package/dist/commands/worker/control.js.map +1 -1
- package/dist/commands/worker/coordinator.d.ts +7 -0
- package/dist/commands/worker/coordinator.js +138 -19
- package/dist/commands/worker/coordinator.js.map +1 -1
- package/dist/commands/worker/herdr/agents.js +11 -8
- package/dist/commands/worker/herdr/agents.js.map +1 -1
- package/dist/commands/worker/herdr/arguments.js +10 -5
- package/dist/commands/worker/herdr/arguments.js.map +1 -1
- package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
- package/dist/commands/worker/herdr/claude-input.js +20 -0
- package/dist/commands/worker/herdr/claude-input.js.map +1 -0
- package/dist/commands/worker/herdr/instance.js +1 -1
- package/dist/commands/worker/herdr/instance.js.map +1 -1
- package/dist/commands/worker/herdr/preflight.d.ts +1 -1
- package/dist/commands/worker/herdr/preflight.js +31 -10
- package/dist/commands/worker/herdr/preflight.js.map +1 -1
- package/dist/commands/worker/herdr.js +5 -1
- package/dist/commands/worker/herdr.js.map +1 -1
- package/dist/commands/worker/prompts.js +5 -1
- package/dist/commands/worker/prompts.js.map +1 -1
- package/dist/commands/worker/repositories.js +2 -2
- package/dist/commands/worker/repositories.js.map +1 -1
- package/dist/commands/worker/runtime.js +62 -10
- package/dist/commands/worker/runtime.js.map +1 -1
- package/dist/commands/worker/setup-environment.d.ts +2 -1
- package/dist/commands/worker/setup-environment.js +10 -4
- package/dist/commands/worker/setup-environment.js.map +1 -1
- package/dist/commands/worker/setup.js +5 -5
- package/dist/commands/worker/setup.js.map +1 -1
- package/dist/commands/worker/store.d.ts +2 -1
- package/dist/commands/worker/store.js +19 -9
- package/dist/commands/worker/store.js.map +1 -1
- package/dist/commands/worker/types.d.ts +4 -1
- package/dist/commands/worker/worktrees.js +9 -6
- package/dist/commands/worker/worktrees.js.map +1 -1
- package/dist/session/controller-protocol.d.ts +245 -0
- package/dist/session/controller-protocol.js +218 -0
- package/dist/session/controller-protocol.js.map +1 -0
- package/dist/session/controls.d.ts +28 -0
- package/dist/session/controls.js +37 -0
- package/dist/session/controls.js.map +1 -0
- package/dist/session/protocol.d.ts +290 -0
- package/dist/session/protocol.js +307 -0
- package/dist/session/protocol.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
|
+
import { chmod, lstat, mkdir, open, readdir, realpath } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { canonicalId } from "../../api/parse.js";
|
|
6
|
+
import { normalizeServerUrl } from "../../config/server.js";
|
|
7
|
+
import { parseRegistrationResponse } from "../../session/controller-protocol.js";
|
|
8
|
+
import { controllerExecutionDirectory, readLaunchTicket } from "./launch-ticket.js";
|
|
9
|
+
import { readControllerSnapshot } from "./lifecycle-store.js";
|
|
10
|
+
import { captureProcessProof, confirmControllerProcessesStopped } from "./process-proof.js";
|
|
11
|
+
const uuid = (value) => typeof value === "string" && canonicalId(value) === value;
|
|
12
|
+
const missing = (error) => error instanceof Error && "code" in error && error.code === "ENOENT";
|
|
13
|
+
const privateFile = async (file) => {
|
|
14
|
+
const metadata = await lstat(file);
|
|
15
|
+
if (!metadata.isFile() || metadata.isSymbolicLink() || process.platform !== "win32" && (metadata.mode & 0o077) !== 0)
|
|
16
|
+
throw new Error("Controller recovery evidence must be a private regular file.");
|
|
17
|
+
};
|
|
18
|
+
const inventory = async (home) => {
|
|
19
|
+
let files;
|
|
20
|
+
try {
|
|
21
|
+
files = await readdir(path.join(home, ".daynight", "controller", "launches"));
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (missing(error))
|
|
25
|
+
return [];
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
if (files.length > 20_000)
|
|
29
|
+
throw new Error("Controller launch inventory exceeds its safe bound.");
|
|
30
|
+
const tickets = new Map();
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
if (!file.endsWith(".json") || !uuid(file.slice(0, -5)))
|
|
33
|
+
continue;
|
|
34
|
+
const ticket = await readLaunchTicket(home, file.slice(0, -5));
|
|
35
|
+
const previous = tickets.get(ticket.executionId);
|
|
36
|
+
if (!previous || BigInt(ticket.executionGeneration) > BigInt(previous.executionGeneration))
|
|
37
|
+
tickets.set(ticket.executionId, ticket);
|
|
38
|
+
else if (ticket.executionGeneration === previous.executionGeneration && ticket.launchId !== previous.launchId)
|
|
39
|
+
throw new Error("Conflicting controller launch identities require reconciliation.");
|
|
40
|
+
}
|
|
41
|
+
const result = [];
|
|
42
|
+
for (const ticket of tickets.values()) {
|
|
43
|
+
const file = path.join(controllerExecutionDirectory(home, ticket.executionId), "journal.sqlite");
|
|
44
|
+
let snapshot = null;
|
|
45
|
+
try {
|
|
46
|
+
await privateFile(file);
|
|
47
|
+
snapshot = readControllerSnapshot(file);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (!missing(error))
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
if (snapshot && (snapshot.executionId !== ticket.executionId || snapshot.sessionId !== ticket.sessionId || snapshot.testExecutionId !== ticket.testExecutionId || snapshot.claimId !== ticket.claimId || snapshot.executionGeneration !== ticket.executionGeneration || snapshot.controllerInstanceId !== ticket.controllerInstanceId || snapshot.nativeSessionId !== null && !uuid(snapshot.nativeSessionId)))
|
|
54
|
+
throw new Error("Controller journal does not match its latest launch ticket.");
|
|
55
|
+
result.push({ ticket, snapshot });
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
};
|
|
59
|
+
const assertStopped = async ({ snapshot }) => {
|
|
60
|
+
if (!snapshot || snapshot.lifecycle !== "stopped" || !snapshot.nativeStopped || !snapshot.stoppedAt || !Number.isFinite(Date.parse(snapshot.stoppedAt)) || !snapshot.controllerProcess || !Array.isArray(snapshot.nativeProcesses))
|
|
61
|
+
throw new Error("The original native execution is not proven stopped; reconcile its controller evidence before resuming.");
|
|
62
|
+
if (!await confirmControllerProcessesStopped(snapshot.controllerProcess, snapshot.nativeProcesses))
|
|
63
|
+
throw new Error("The original controller or native descendants are still running.");
|
|
64
|
+
};
|
|
65
|
+
const get = async (config, resource) => {
|
|
66
|
+
const response = await fetch(`${config.serverUrl}${resource}`, { headers: { authorization: `Bearer ${config.serverToken}` }, redirect: "error", signal: AbortSignal.timeout(15_000) });
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
await response.body?.cancel();
|
|
69
|
+
throw new Error(`Resume authorization failed with HTTP ${response.status}.`);
|
|
70
|
+
}
|
|
71
|
+
const chunks = [];
|
|
72
|
+
let size = 0;
|
|
73
|
+
if (response.body) {
|
|
74
|
+
const reader = response.body.getReader();
|
|
75
|
+
try {
|
|
76
|
+
for (;;) {
|
|
77
|
+
const item = await reader.read();
|
|
78
|
+
if (item.done)
|
|
79
|
+
break;
|
|
80
|
+
size += item.value.byteLength;
|
|
81
|
+
if (size > 2_097_152) {
|
|
82
|
+
await reader.cancel();
|
|
83
|
+
throw new Error("Resume response exceeds its safe bound.");
|
|
84
|
+
}
|
|
85
|
+
chunks.push(item.value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
reader.releaseLock();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
93
|
+
};
|
|
94
|
+
/** Acquire one stopped local Test Session's native writer. The caller releases
|
|
95
|
+
* the lease only after proving its new controller and descendants stopped; an
|
|
96
|
+
* uncertain stop deliberately retains the lease for explicit reconciliation. */
|
|
97
|
+
export const acquireResume = async (input, context, config) => {
|
|
98
|
+
if (normalizeServerUrl(config.serverUrl) !== config.serverUrl || !config.serverToken)
|
|
99
|
+
throw new Error("Resume requires a canonical configured server and authenticated token.");
|
|
100
|
+
if (input.sessionId !== undefined && !uuid(input.sessionId))
|
|
101
|
+
throw new Error("Resume requires a canonical Daynight Test Session ID, not a native session ID.");
|
|
102
|
+
const home = context.homeDirectory(), cwd = await realpath(context.workingDirectory());
|
|
103
|
+
const records = await inventory(home), candidates = [];
|
|
104
|
+
for (const record of records) {
|
|
105
|
+
const { ticket, snapshot } = record;
|
|
106
|
+
if (!ticket.testExecutionId || ticket.provider !== input.provider || ticket.serverOrigin !== config.serverUrl || !snapshot?.nativeSessionId || snapshot.lifecycle !== "stopped" || !snapshot.nativeStopped)
|
|
107
|
+
continue;
|
|
108
|
+
if (await realpath(ticket.cwd).catch(() => null) === cwd)
|
|
109
|
+
candidates.push(record);
|
|
110
|
+
}
|
|
111
|
+
candidates.sort((a, b) => Date.parse(b.snapshot.stoppedAt ?? b.ticket.createdAt) - Date.parse(a.snapshot.stoppedAt ?? a.ticket.createdAt));
|
|
112
|
+
let sessionId = input.sessionId;
|
|
113
|
+
if (!sessionId) {
|
|
114
|
+
if (!candidates.length)
|
|
115
|
+
throw new Error("No stopped local Test Sessions match this provider, server and current directory.");
|
|
116
|
+
if (!context.prompt?.isInteractive) {
|
|
117
|
+
context.stdout(candidates.map(({ ticket, snapshot }) => `${ticket.sessionId} ${ticket.provider} ${snapshot.stoppedAt ?? ticket.createdAt}\n`).join(""));
|
|
118
|
+
throw new Error("Choose a Test Session ID: daynight controller " + input.provider + " resume <session-id>.");
|
|
119
|
+
}
|
|
120
|
+
sessionId = await context.prompt.select({ message: "Resume a stopped Test Session", choices: candidates.map(({ ticket, snapshot }) => ({ name: `${ticket.sessionId} · ${snapshot.stoppedAt ?? ticket.createdAt}`, value: ticket.sessionId })), default: candidates[0].ticket.sessionId }, new AbortController().signal);
|
|
121
|
+
}
|
|
122
|
+
const selected = candidates.find(item => item.ticket.sessionId === sessionId);
|
|
123
|
+
if (!selected)
|
|
124
|
+
throw new Error("No stopped local Test Session matches that ID, provider, server and current directory.");
|
|
125
|
+
const { ticket, snapshot } = selected, nativeSessionId = snapshot.nativeSessionId, nativeHome = await realpath(ticket.nativeHome);
|
|
126
|
+
if (!(await lstat(nativeHome)).isDirectory())
|
|
127
|
+
throw new Error("The original native home is not a directory.");
|
|
128
|
+
await assertStopped(selected);
|
|
129
|
+
const me = await get(config, "/api/v1/me");
|
|
130
|
+
if (!me || typeof me !== "object" || !("id" in me) || me.id !== ticket.ownerUserId)
|
|
131
|
+
throw new Error("The configured account does not own the original Test Session.");
|
|
132
|
+
const session = parseRegistrationResponse(await get(config, `/api/v1/test-sessions/${ticket.sessionId}`)).session;
|
|
133
|
+
if (session.sessionId !== ticket.sessionId || session.testExecutionId !== ticket.testExecutionId || session.executionGeneration !== ticket.executionGeneration || session.identity.ownerUserId !== ticket.ownerUserId || session.identity.controllerId !== ticket.controllerId || session.identity.controllerInstanceId !== ticket.controllerInstanceId || session.identity.provider !== ticket.provider || session.identity.nativeSessionId !== nativeSessionId || session.lifecycle !== "archived")
|
|
134
|
+
throw new Error("The original server Test Session does not confirm the local stopped native identity and owner.");
|
|
135
|
+
const directory = path.join(home, ".daynight", "controller");
|
|
136
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
137
|
+
await chmod(directory, 0o700);
|
|
138
|
+
const file = path.join(directory, "native-resume-leases.sqlite");
|
|
139
|
+
try {
|
|
140
|
+
const created = await open(file, "wx", 0o600);
|
|
141
|
+
await created.close();
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (!(error instanceof Error && "code" in error && error.code === "EEXIST"))
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
await privateFile(file);
|
|
148
|
+
const key = createHash("sha256").update(JSON.stringify([input.provider, nativeHome, nativeSessionId])).digest("hex"), nonce = randomUUID(), processProof = await captureProcessProof(process.pid);
|
|
149
|
+
const db = new Database(file);
|
|
150
|
+
let acquired = false;
|
|
151
|
+
const release = async () => {
|
|
152
|
+
if (!acquired)
|
|
153
|
+
return;
|
|
154
|
+
try {
|
|
155
|
+
const changed = db.prepare("DELETE FROM leases WHERE native_key=? AND nonce=?").run(key, nonce);
|
|
156
|
+
if (changed.changes !== 1)
|
|
157
|
+
throw new Error("Native resume lease ownership changed; reconciliation is required.");
|
|
158
|
+
acquired = false;
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
db.close();
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
try {
|
|
165
|
+
db.pragma("journal_mode = WAL");
|
|
166
|
+
db.pragma("synchronous = FULL");
|
|
167
|
+
db.exec("CREATE TABLE IF NOT EXISTS leases (native_key TEXT PRIMARY KEY, nonce TEXT NOT NULL, source_session_id TEXT NOT NULL, launcher_proof TEXT NOT NULL, created_at TEXT NOT NULL)");
|
|
168
|
+
db.transaction(() => {
|
|
169
|
+
if (db.prepare("SELECT native_key FROM leases WHERE native_key=?").get(key))
|
|
170
|
+
throw new Error("This native session already has a resume lease. Confirm and reconcile its original execution; an expired or missing launcher is not permission to replace it.");
|
|
171
|
+
db.prepare("INSERT INTO leases VALUES(?,?,?,?,?)").run(key, nonce, ticket.sessionId, JSON.stringify(processProof), new Date().toISOString());
|
|
172
|
+
acquired = true;
|
|
173
|
+
}).immediate();
|
|
174
|
+
// Another continuation may have been launched since selection. Reinspect
|
|
175
|
+
// every execution for this native identity while the shared lease is held.
|
|
176
|
+
for (const item of await inventory(home)) {
|
|
177
|
+
if (item.ticket.provider !== input.provider || (item.snapshot?.nativeSessionId ?? item.ticket.resumeNativeSessionId) !== nativeSessionId)
|
|
178
|
+
continue;
|
|
179
|
+
if (await realpath(item.ticket.nativeHome) !== nativeHome)
|
|
180
|
+
continue;
|
|
181
|
+
await assertStopped(item);
|
|
182
|
+
}
|
|
183
|
+
return { ticket: { ...ticket, cwd, nativeHome }, nativeSessionId, release };
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
if (acquired)
|
|
187
|
+
await release();
|
|
188
|
+
else
|
|
189
|
+
db.close();
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/commands/controller/resume.ts"],"names":[],"mappings":"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"}
|