@agentteams/runner 0.0.102 → 0.0.105
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/dist/autostart.d.ts +21 -6
- package/dist/autostart.js +262 -43
- package/dist/autostart.js.map +1 -1
- package/dist/autostart.test.js +155 -22
- package/dist/autostart.test.js.map +1 -1
- package/dist/commands/restart.d.ts +9 -1
- package/dist/commands/restart.js +16 -4
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/restart.test.d.ts +1 -0
- package/dist/commands/restart.test.js +31 -0
- package/dist/commands/restart.test.js.map +1 -0
- package/dist/commands/start.js +5 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/daemon-control.d.ts +32 -6
- package/dist/daemon-control.js +198 -13
- package/dist/daemon-control.js.map +1 -1
- package/dist/daemon-control.test.js +260 -26
- package/dist/daemon-control.test.js.map +1 -1
- package/dist/executable.js +10 -0
- package/dist/executable.js.map +1 -1
- package/dist/executable.test.js +31 -9
- package/dist/executable.test.js.map +1 -1
- package/dist/poller.js +12 -11
- package/dist/poller.js.map +1 -1
- package/dist/poller.test.js +51 -7
- package/dist/poller.test.js.map +1 -1
- package/dist/restart-handoff.d.ts +71 -0
- package/dist/restart-handoff.js +169 -0
- package/dist/restart-handoff.js.map +1 -0
- package/dist/restart-handoff.test.d.ts +1 -0
- package/dist/restart-handoff.test.js +228 -0
- package/dist/restart-handoff.test.js.map +1 -0
- package/dist/runners/cursor-cli.test.js +3 -1
- package/dist/runners/cursor-cli.test.js.map +1 -1
- package/dist/utils/resolve-member-repo.test.js +1 -1
- package/dist/utils/resolve-member-repo.test.js.map +1 -1
- package/package.json +2 -2
package/dist/autostart.test.js
CHANGED
|
@@ -38,7 +38,7 @@ test('getAutostartStatus queries Task Scheduler with hidden execution on Windows
|
|
|
38
38
|
});
|
|
39
39
|
assert.deepEqual(status, { registered: true, platform: 'task-scheduler' });
|
|
40
40
|
assert.equal(calls.length, 1);
|
|
41
|
-
assert.match(calls[0].command, /schtasks \/Query \/TN "AgentRunner"/u);
|
|
41
|
+
assert.match(calls[0].command, /schtasks \/Query \/TN "AgentRunner" 2>nul/u);
|
|
42
42
|
assert.equal(calls[0].windowsHide, true);
|
|
43
43
|
});
|
|
44
44
|
test('registerWindowsTask writes scheduler assets, removes legacy files, and creates and runs the task', async () => {
|
|
@@ -65,13 +65,31 @@ test('registerWindowsTask writes scheduler assets, removes legacy files, and cre
|
|
|
65
65
|
assert.equal(result.platform, 'task-scheduler');
|
|
66
66
|
assert.equal(writes.length, 2);
|
|
67
67
|
assert.ok(writes.some((write) => write.path.endsWith('agentrunner-start.ps1') && write.encoding === 'utf8'));
|
|
68
|
-
assert.ok(writes.some((write) => write.path.endsWith('agentrunner-task.xml') && write.encoding === 'utf16le'));
|
|
68
|
+
assert.ok(writes.some((write) => write.path.endsWith('agentrunner-task.xml') && write.encoding === 'utf16le' && write.data.startsWith('\uFEFF')));
|
|
69
69
|
assert.ok(removed.some((path) => path.endsWith('agentrunner-start.vbs')));
|
|
70
70
|
assert.ok(removed.some((path) => path.endsWith('agentrunner-restart.vbs')));
|
|
71
71
|
assert.match(commands[0], /schtasks \/Delete/u);
|
|
72
72
|
assert.match(commands[1], /schtasks \/Create .* \/XML .* \/F/u);
|
|
73
73
|
assert.match(commands[2], /schtasks \/Run/u);
|
|
74
74
|
});
|
|
75
|
+
test('registerWindowsTask can repair registration without starting a duplicate runner', async () => {
|
|
76
|
+
const commands = [];
|
|
77
|
+
await registerWindowsTask({ token: 'token', apiUrl: 'https://api.example' }, {
|
|
78
|
+
userId: 'DOMAIN\\runner',
|
|
79
|
+
daemonPath: 'C:\\Tools\\agentrunner.cmd',
|
|
80
|
+
startImmediately: false,
|
|
81
|
+
mkdir: async () => undefined,
|
|
82
|
+
writeFile: async () => undefined,
|
|
83
|
+
unlink: async () => undefined,
|
|
84
|
+
chmodSync: () => undefined,
|
|
85
|
+
execSync: (command) => {
|
|
86
|
+
commands.push(command);
|
|
87
|
+
return Buffer.from('');
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
assert.ok(commands.some((command) => command.startsWith('schtasks /Create')));
|
|
91
|
+
assert.ok(!commands.some((command) => command.startsWith('schtasks /Run')));
|
|
92
|
+
});
|
|
75
93
|
test('unregisterWindowsTask deletes the task and all generated or legacy artifacts idempotently', async () => {
|
|
76
94
|
const commands = [];
|
|
77
95
|
const removed = [];
|
|
@@ -91,26 +109,104 @@ test('unregisterWindowsTask deletes the task and all generated or legacy artifac
|
|
|
91
109
|
assert.ok(removed.some((path) => path.endsWith('agentrunner-start.ps1')));
|
|
92
110
|
assert.ok(removed.some((path) => path.endsWith('agentrunner-start.vbs')));
|
|
93
111
|
});
|
|
94
|
-
test('restartWindowsTask ends the
|
|
112
|
+
test('restartWindowsTask ends the task, probes its state, then starts it again', async () => {
|
|
95
113
|
const commands = [];
|
|
96
114
|
await restartWindowsTask(null, {
|
|
97
115
|
execSync: (command, options) => {
|
|
98
116
|
commands.push(command);
|
|
99
117
|
assert.equal(options.windowsHide, true);
|
|
118
|
+
// State 3 (Ready) → confirmed stopped, so the wait loop exits immediately.
|
|
119
|
+
return Buffer.from(/-EncodedCommand/u.test(command) ? '3' : '');
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
const schtasksCommands = commands.filter((command) => command.startsWith('schtasks'));
|
|
123
|
+
assert.deepEqual(schtasksCommands, ['schtasks /End /TN "AgentRunner" 2>nul', 'schtasks /Run /TN "AgentRunner"']);
|
|
124
|
+
// A locale-independent state probe runs between End and Run.
|
|
125
|
+
assert.ok(commands.some((command) => /powershell\.exe .*-EncodedCommand/u.test(command)));
|
|
126
|
+
});
|
|
127
|
+
test('restartWindowsTask waits while the task is still running before starting it again', async () => {
|
|
128
|
+
const commands = [];
|
|
129
|
+
const sleeps = [];
|
|
130
|
+
let stateQueries = 0;
|
|
131
|
+
await restartWindowsTask(null, {
|
|
132
|
+
execSync: (command, options) => {
|
|
133
|
+
commands.push(command);
|
|
134
|
+
assert.equal(options.windowsHide, true);
|
|
135
|
+
if (/-EncodedCommand/u.test(command)) {
|
|
136
|
+
stateQueries += 1;
|
|
137
|
+
// State 4 (Running) for the first two probes, then 3 (Ready).
|
|
138
|
+
return Buffer.from(stateQueries < 3 ? '4' : '3');
|
|
139
|
+
}
|
|
100
140
|
return Buffer.from('');
|
|
101
141
|
},
|
|
142
|
+
sleep: async (milliseconds) => {
|
|
143
|
+
sleeps.push(milliseconds);
|
|
144
|
+
},
|
|
145
|
+
now: () => 0,
|
|
102
146
|
});
|
|
103
|
-
|
|
147
|
+
// Polled twice while the old instance was still running, then ran once stopped.
|
|
148
|
+
assert.equal(sleeps.length, 2);
|
|
149
|
+
assert.equal(stateQueries, 3);
|
|
150
|
+
const schtasksCommands = commands.filter((command) => command.startsWith('schtasks'));
|
|
151
|
+
assert.deepEqual(schtasksCommands, ['schtasks /End /TN "AgentRunner" 2>nul', 'schtasks /Run /TN "AgentRunner"']);
|
|
104
152
|
});
|
|
105
|
-
test('
|
|
153
|
+
test('restartWindowsTask aborts /Run (throws) when the task never reaches a stopped state', async () => {
|
|
154
|
+
const commands = [];
|
|
155
|
+
let clock = 0;
|
|
156
|
+
await assert.rejects(restartWindowsTask(null, {
|
|
157
|
+
execSync: (command) => {
|
|
158
|
+
commands.push(command);
|
|
159
|
+
// Always reports State 4 (Running) — the old instance never stops.
|
|
160
|
+
return Buffer.from(/-EncodedCommand/u.test(command) ? '4' : '');
|
|
161
|
+
},
|
|
162
|
+
sleep: async () => undefined,
|
|
163
|
+
now: () => {
|
|
164
|
+
const value = clock;
|
|
165
|
+
clock += 16_000; // crosses the 30s deadline after two probes
|
|
166
|
+
return value;
|
|
167
|
+
},
|
|
168
|
+
}), /did not reach a stopped state/u);
|
|
169
|
+
// /End ran, but /Run must NOT — IgnoreNew would discard it while still running.
|
|
170
|
+
assert.ok(commands.some((command) => command.startsWith('schtasks /End')));
|
|
171
|
+
assert.ok(!commands.some((command) => command.startsWith('schtasks /Run')));
|
|
172
|
+
});
|
|
173
|
+
test('restartWindowsTask aborts /Run (throws) when the task state cannot be determined', async () => {
|
|
174
|
+
const commands = [];
|
|
175
|
+
let clock = 0;
|
|
176
|
+
await assert.rejects(restartWindowsTask(null, {
|
|
177
|
+
execSync: (command) => {
|
|
178
|
+
commands.push(command);
|
|
179
|
+
// State probe fails → 'unknown'; must not be treated as stopped.
|
|
180
|
+
if (/-EncodedCommand/u.test(command)) {
|
|
181
|
+
throw new Error('COM query failed');
|
|
182
|
+
}
|
|
183
|
+
return Buffer.from('');
|
|
184
|
+
},
|
|
185
|
+
sleep: async () => undefined,
|
|
186
|
+
now: () => {
|
|
187
|
+
const value = clock;
|
|
188
|
+
clock += 16_000;
|
|
189
|
+
return value;
|
|
190
|
+
},
|
|
191
|
+
}), /did not reach a stopped state/u);
|
|
192
|
+
assert.ok(!commands.some((command) => command.startsWith('schtasks /Run')));
|
|
193
|
+
});
|
|
194
|
+
test('scheduleWindowsTaskRestart creates the out-of-job restart helper and verifies its correlated ready marker', async () => {
|
|
106
195
|
const calls = [];
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
196
|
+
const scheduled = await scheduleWindowsTaskRestart({
|
|
197
|
+
handoffId: 'active-handoff',
|
|
198
|
+
parentPid: 4321,
|
|
199
|
+
daemonPath: 'C:\\Tools\\agentrunner.cmd',
|
|
200
|
+
execFileSync: ((command, args, options) => {
|
|
110
201
|
calls.push({ command, args, options });
|
|
111
|
-
return
|
|
202
|
+
return Buffer.from('');
|
|
112
203
|
}),
|
|
204
|
+
readFile: async () => `\uFEFF${JSON.stringify({ handoffId: 'active-handoff', replacementPid: 9876, state: 'prepared' })}`,
|
|
205
|
+
unlink: async () => undefined,
|
|
206
|
+
isProcessRunning: (pid) => pid === 9876,
|
|
113
207
|
});
|
|
208
|
+
assert.equal(scheduled.status, 'prepared');
|
|
209
|
+
assert.equal(scheduled.handoffId, 'active-handoff');
|
|
114
210
|
assert.equal(calls.length, 1);
|
|
115
211
|
assert.equal(calls[0].command, 'powershell.exe');
|
|
116
212
|
const command = calls[0].args.at(-1) ?? '';
|
|
@@ -120,28 +216,63 @@ test('scheduleWindowsTaskRestart queues an out-of-job task restart after the cur
|
|
|
120
216
|
const encodedCommand = command.match(/-EncodedCommand ([A-Za-z0-9+/=]+)/u)?.[1];
|
|
121
217
|
assert.ok(encodedCommand);
|
|
122
218
|
const restartScript = Buffer.from(encodedCommand, 'base64').toString('utf16le');
|
|
219
|
+
assert.match(restartScript, /Set-Content -LiteralPath \$handoffPath/u);
|
|
220
|
+
assert.match(restartScript, /handoffId = \$handoffId; replacementPid = \$PID; state = 'prepared'/u);
|
|
221
|
+
assert.match(restartScript, /state -eq 'acknowledged'/u);
|
|
222
|
+
assert.match(restartScript, /AddSeconds\(180\)/u);
|
|
223
|
+
assert.match(restartScript, /Test-HandoffAcknowledged/u);
|
|
123
224
|
assert.match(restartScript, /schtasks \/Query \/TN \$taskName/u);
|
|
124
|
-
assert.match(restartScript, /
|
|
125
|
-
assert.match(restartScript, /\$task\.State -
|
|
126
|
-
assert.match(restartScript, /schtasks \/End \/TN \$taskName/u);
|
|
225
|
+
assert.match(restartScript, /for \(\$attempt = 1; \$attempt -le 20; \$attempt\+\+\)/u);
|
|
226
|
+
assert.match(restartScript, /\$task\.State -eq 4/u);
|
|
127
227
|
assert.match(restartScript, /schtasks \/Run \/TN \$taskName/u);
|
|
128
|
-
assert.
|
|
129
|
-
assert.
|
|
228
|
+
assert.match(restartScript, /Start-DirectFallback/u);
|
|
229
|
+
assert.match(restartScript, /& \$daemonPath start/u);
|
|
130
230
|
// Every abort/failure path must leave a diagnostic trace in the daemon log so a
|
|
131
231
|
// silent non-recovery is diagnosable (code review P2/P3).
|
|
132
232
|
assert.match(restartScript, /function Write-RestartLog/u);
|
|
133
233
|
assert.match(restartScript, /\*>> \$logPath/u);
|
|
134
234
|
assert.match(restartScript, /trap \{/u);
|
|
135
|
-
// GetTask is wrapped so a TOCTOU deletion is
|
|
235
|
+
// GetTask is wrapped so a TOCTOU deletion is retried instead of crashing silently.
|
|
136
236
|
assert.match(restartScript, /try \{\s*\$task = \$folder\.GetTask\(\$taskName\)\s*\}\s*catch \{/u);
|
|
137
|
-
|
|
138
|
-
assert.match(restartScript, /
|
|
139
|
-
assert.match(restartScript, /schtasks \/Query failed .*; aborting restart"; exit 1/u);
|
|
237
|
+
assert.match(restartScript, /schtasks \/Query failed with exit \$LASTEXITCODE on attempt \$attempt/u);
|
|
238
|
+
assert.match(restartScript, /schtasks \/Run failed with exit \$LASTEXITCODE on attempt \$attempt/u);
|
|
140
239
|
// The outer WMI create logs its ReturnValue on failure.
|
|
141
240
|
assert.match(command, /Win32_Process\.Create failed with ReturnValue/u);
|
|
142
241
|
assert.equal(calls[0].options.windowsHide, true);
|
|
143
|
-
|
|
144
|
-
|
|
242
|
+
// Runs synchronously (blocking) so the helper exists before the daemon exits —
|
|
243
|
+
// must NOT be a detached spawn, which never executes its -Command on Windows.
|
|
244
|
+
assert.notEqual(calls[0].options.detached, true);
|
|
245
|
+
});
|
|
246
|
+
test('scheduleWindowsTaskRestart returns a retryable failure when the helper cannot be created', async () => {
|
|
247
|
+
const scheduled = await scheduleWindowsTaskRestart({
|
|
248
|
+
handoffId: 'create-failure',
|
|
249
|
+
execFileSync: (() => {
|
|
250
|
+
throw new Error('Win32_Process.Create failed');
|
|
251
|
+
}),
|
|
252
|
+
unlink: async () => undefined,
|
|
253
|
+
});
|
|
254
|
+
assert.equal(scheduled.status, 'retryable-failure');
|
|
255
|
+
assert.equal(scheduled.handoffId, 'create-failure');
|
|
256
|
+
assert.equal(scheduled.reason, 'helper-preparation-failed');
|
|
257
|
+
});
|
|
258
|
+
test('scheduleWindowsTaskRestart rejects a stale ready marker and times out safely', async () => {
|
|
259
|
+
let clock = 0;
|
|
260
|
+
const scheduled = await scheduleWindowsTaskRestart({
|
|
261
|
+
handoffId: 'current-handoff',
|
|
262
|
+
execFileSync: (() => Buffer.from('')),
|
|
263
|
+
readFile: async () => JSON.stringify({ handoffId: 'stale-handoff', replacementPid: 9876, state: 'prepared' }),
|
|
264
|
+
unlink: async () => undefined,
|
|
265
|
+
isProcessRunning: () => true,
|
|
266
|
+
sleep: async () => undefined,
|
|
267
|
+
now: () => {
|
|
268
|
+
const value = clock;
|
|
269
|
+
clock += 3_000;
|
|
270
|
+
return value;
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
assert.equal(scheduled.status, 'retryable-failure');
|
|
274
|
+
assert.equal(scheduled.handoffId, 'current-handoff');
|
|
275
|
+
assert.ok(clock >= 20_000, 'Windows helper preparation should allow at least 20 seconds');
|
|
145
276
|
});
|
|
146
277
|
test('buildPlistContent injects CODEX_SANDBOX_LEVEL=off', () => {
|
|
147
278
|
const content = buildPlistContent({
|
|
@@ -158,7 +289,7 @@ test('buildSystemdContent injects CODEX_SANDBOX_LEVEL=off', () => {
|
|
|
158
289
|
});
|
|
159
290
|
assert.match(content, /Environment="CODEX_SANDBOX_LEVEL=off"/u);
|
|
160
291
|
});
|
|
161
|
-
test('launchWindowsHiddenDaemon starts a
|
|
292
|
+
test('launchWindowsHiddenDaemon starts a hidden PowerShell process without detaching it', () => {
|
|
162
293
|
const calls = [];
|
|
163
294
|
let unrefCalled = false;
|
|
164
295
|
launchWindowsHiddenDaemon({
|
|
@@ -178,7 +309,9 @@ test('launchWindowsHiddenDaemon starts a detached hidden PowerShell process with
|
|
|
178
309
|
assert.ok(calls[0].args.includes('Hidden'));
|
|
179
310
|
assert.match(calls[0].args.at(-1) ?? '', /agentrunner\.cmd.* start/u);
|
|
180
311
|
assert.equal(calls[0].options.windowsHide, true);
|
|
181
|
-
|
|
312
|
+
// Must NOT be detached: DETACHED_PROCESS leaves the hidden powershell created
|
|
313
|
+
// but never running its command on Windows, so the runner never starts.
|
|
314
|
+
assert.notEqual(calls[0].options.detached, true);
|
|
182
315
|
assert.equal(unrefCalled, true);
|
|
183
316
|
});
|
|
184
317
|
//# sourceMappingURL=autostart.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autostart.test.js","sourceRoot":"","sources":["../src/autostart.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autostart.test.js","sourceRoot":"","sources":["../src/autostart.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { restartDaemon, waitForDaemonToStart } from '../daemon-control.js';
|
|
2
|
+
import { logger } from '../logger.js';
|
|
3
|
+
type RunRestartCommandDeps = {
|
|
4
|
+
restartDaemon?: typeof restartDaemon;
|
|
5
|
+
waitForDaemonToStart?: typeof waitForDaemonToStart;
|
|
6
|
+
logger?: Pick<typeof logger, 'info'>;
|
|
7
|
+
};
|
|
8
|
+
export declare const runRestartCommand: (deps?: RunRestartCommandDeps) => Promise<void>;
|
|
9
|
+
export {};
|
package/dist/commands/restart.js
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { restartDaemon } from '../daemon-control.js';
|
|
1
|
+
import { restartDaemon, waitForDaemonToStart } from '../daemon-control.js';
|
|
2
2
|
import { logger } from '../logger.js';
|
|
3
|
-
export const runRestartCommand = async () => {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export const runRestartCommand = async (deps = {}) => {
|
|
4
|
+
const resolvedRestartDaemon = deps.restartDaemon ?? restartDaemon;
|
|
5
|
+
const resolvedWaitForDaemonToStart = deps.waitForDaemonToStart ?? waitForDaemonToStart;
|
|
6
|
+
const resolvedLogger = deps.logger ?? logger;
|
|
7
|
+
await resolvedRestartDaemon();
|
|
8
|
+
const status = await resolvedWaitForDaemonToStart();
|
|
9
|
+
if (status.running) {
|
|
10
|
+
resolvedLogger.info('AgentRunner restart completed', { pid: status.pid });
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
// The runner never reported running within the timeout. Fail with a non-zero
|
|
14
|
+
// exit code so shells and install automation don't treat a broken restart as
|
|
15
|
+
// success — the whole point of the confirmation step.
|
|
16
|
+
throw new Error('AgentRunner restart was triggered but the runner did not report running within the timeout. ' +
|
|
17
|
+
'Check `agentrunner status`.');
|
|
6
18
|
};
|
|
7
19
|
//# sourceMappingURL=restart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAiB,EAAE;IACzF,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC;IAClE,MAAM,4BAA4B,GAAG,IAAI,CAAC,oBAAoB,IAAI,oBAAoB,CAAC;IACvF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;IAE7C,MAAM,qBAAqB,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,4BAA4B,EAAE,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,cAAc,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,sDAAsD;IACtD,MAAM,IAAI,KAAK,CACb,8FAA8F;QAC5F,6BAA6B,CAChC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { runRestartCommand } from './restart.js';
|
|
4
|
+
test('runRestartCommand resolves and logs the pid once the runner reports running', async () => {
|
|
5
|
+
const infos = [];
|
|
6
|
+
let restarted = false;
|
|
7
|
+
await runRestartCommand({
|
|
8
|
+
restartDaemon: async () => {
|
|
9
|
+
restarted = true;
|
|
10
|
+
},
|
|
11
|
+
waitForDaemonToStart: async () => ({ running: true, pid: 4321 }),
|
|
12
|
+
logger: {
|
|
13
|
+
info: (message, meta) => {
|
|
14
|
+
infos.push({ message, meta });
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
assert.equal(restarted, true);
|
|
19
|
+
assert.equal(infos.length, 1);
|
|
20
|
+
assert.match(infos[0].message, /restart completed/u);
|
|
21
|
+
assert.deepEqual(infos[0].meta, { pid: 4321 });
|
|
22
|
+
});
|
|
23
|
+
test('runRestartCommand throws (non-zero exit) when the runner never reports running', async () => {
|
|
24
|
+
await assert.rejects(runRestartCommand({
|
|
25
|
+
restartDaemon: async () => undefined,
|
|
26
|
+
// Confirmation timed out — runner did not come up.
|
|
27
|
+
waitForDaemonToStart: async () => ({ running: false, pid: null }),
|
|
28
|
+
logger: { info: () => undefined },
|
|
29
|
+
}), /did not report running within the timeout/u);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=restart.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.test.js","sourceRoot":"","sources":["../../src/commands/restart.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,IAAI,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;IAC7F,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,iBAAiB,CAAC;QACtB,aAAa,EAAE,KAAK,IAAI,EAAE;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAChE,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,OAAe,EAAE,IAAc,EAAE,EAAE;gBACxC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,CAAC;SACF;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;IAChG,MAAM,MAAM,CAAC,OAAO,CAClB,iBAAiB,CAAC;QAChB,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QACpC,mDAAmD;QACnD,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACjE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;KAClC,CAAC,EACF,4CAA4C,CAC7C,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/commands/start.js
CHANGED
|
@@ -5,6 +5,7 @@ import { createTriggerHandler } from '../handlers/trigger-handler.js';
|
|
|
5
5
|
import { writePidFile, removePidFile } from '../pid.js';
|
|
6
6
|
import { logger } from '../logger.js';
|
|
7
7
|
import { refreshWindowsPathFromRegistry } from '../windows-path.js';
|
|
8
|
+
import { activatePreparedRestartHandoff } from '../restart-handoff.js';
|
|
8
9
|
/**
|
|
9
10
|
* The Windows Task Scheduler wrapper injects a PATH snapshot
|
|
10
11
|
* frozen at registration time, so runner CLIs installed afterwards become
|
|
@@ -34,6 +35,10 @@ const ensureCodexSandboxDefault = () => {
|
|
|
34
35
|
export const runStartCommand = async () => {
|
|
35
36
|
refreshExecutablePath();
|
|
36
37
|
ensureCodexSandboxDefault();
|
|
38
|
+
const activatedHandoff = await activatePreparedRestartHandoff();
|
|
39
|
+
if (activatedHandoff) {
|
|
40
|
+
logger.info('Replacement runner activated after restart handoff');
|
|
41
|
+
}
|
|
37
42
|
await writePidFile();
|
|
38
43
|
const cleanup = async () => {
|
|
39
44
|
await removePidFile();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,GAAS,EAAE;IACvC,MAAM,YAAY,GAAG,8BAA8B,EAAE,CAAC;IACtD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,uEAAuE,EAAE;YACnF,YAAY;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,yBAAyB,GAAG,GAAS,EAAE;IAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;IACvD,qBAAqB,EAAE,CAAC;IACxB,yBAAyB,EAAE,CAAC;IAC5B,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,EAAE,CAAC;IAChE,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,YAAY,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,+EAA+E;IACjF,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAEtE,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;AACvH,CAAC,CAAC"}
|
package/dist/daemon-control.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { platform as getPlatform } from 'node:os';
|
|
2
|
-
import { getAutostartStatus, restartAutostartService, scheduleWindowsTaskRestart } from './autostart.js';
|
|
2
|
+
import { getAutostartStatus, registerWindowsTask, restartAutostartService, scheduleWindowsTaskRestart } from './autostart.js';
|
|
3
3
|
import { logger } from './logger.js';
|
|
4
|
+
import { acknowledgePreparedRestartHandoff, waitForPreparedRestartHandoff, type RestartExecutionResult, type RestartHandoffLaunch, type RestartHandoffPreparation } from './restart-handoff.js';
|
|
4
5
|
type RunningDaemonStatus = {
|
|
5
6
|
running: boolean;
|
|
6
7
|
pid: number | null;
|
|
7
8
|
};
|
|
8
9
|
type DetachedChildProcess = {
|
|
10
|
+
pid?: number;
|
|
9
11
|
unref: () => void;
|
|
10
12
|
};
|
|
11
13
|
type RestartDeps = {
|
|
12
14
|
getDaemonStatus?: () => Promise<RunningDaemonStatus>;
|
|
13
15
|
getAutostartStatus?: typeof getAutostartStatus;
|
|
14
16
|
restartAutostartService?: typeof restartAutostartService;
|
|
15
|
-
spawnDetachedDaemon?: () => DetachedChildProcess | void;
|
|
17
|
+
spawnDetachedDaemon?: (launch?: RestartHandoffLaunch) => DetachedChildProcess | void;
|
|
16
18
|
kill?: typeof process.kill;
|
|
17
19
|
sleep?: (milliseconds: number) => Promise<void>;
|
|
18
20
|
logger?: Pick<typeof logger, 'info'>;
|
|
@@ -20,12 +22,36 @@ type RestartDeps = {
|
|
|
20
22
|
type ExecuteRestartDeps = {
|
|
21
23
|
getAutostartStatus?: typeof getAutostartStatus;
|
|
22
24
|
scheduleWindowsTaskRestart?: typeof scheduleWindowsTaskRestart;
|
|
23
|
-
|
|
25
|
+
registerWindowsTask?: typeof registerWindowsTask;
|
|
26
|
+
prepareDetachedDaemon?: () => Promise<RestartHandoffPreparation>;
|
|
27
|
+
spawnDetachedDaemon?: (launch?: RestartHandoffLaunch) => DetachedChildProcess | void;
|
|
28
|
+
acknowledgeRestart?: () => Promise<void>;
|
|
29
|
+
acknowledgePreparedHandoff?: typeof acknowledgePreparedRestartHandoff;
|
|
30
|
+
config?: {
|
|
31
|
+
daemonToken: string;
|
|
32
|
+
apiUrl: string;
|
|
33
|
+
};
|
|
24
34
|
platform?: typeof getPlatform;
|
|
25
|
-
processExit?: (code: number) =>
|
|
35
|
+
processExit?: (code: number) => void;
|
|
26
36
|
logger?: Pick<typeof logger, 'info'>;
|
|
27
37
|
};
|
|
28
|
-
|
|
29
|
-
|
|
38
|
+
type WaitForStartDeps = {
|
|
39
|
+
getDaemonStatus?: () => Promise<RunningDaemonStatus>;
|
|
40
|
+
sleep?: (milliseconds: number) => Promise<void>;
|
|
41
|
+
now?: () => number;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
};
|
|
44
|
+
export declare const waitForDaemonToStart: (deps?: WaitForStartDeps) => Promise<RunningDaemonStatus>;
|
|
45
|
+
export declare const spawnDetachedDaemon: (launch?: RestartHandoffLaunch) => DetachedChildProcess | void;
|
|
46
|
+
type PrepareDetachedRestartDeps = {
|
|
47
|
+
spawnDetachedDaemon?: (launch: RestartHandoffLaunch) => DetachedChildProcess | void;
|
|
48
|
+
waitForPreparedRestartHandoff?: typeof waitForPreparedRestartHandoff;
|
|
49
|
+
unlink?: (path: string) => Promise<void>;
|
|
50
|
+
handoffId?: string;
|
|
51
|
+
parentPid?: number;
|
|
52
|
+
markerPath?: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const prepareDetachedRestartHandoff: (deps?: PrepareDetachedRestartDeps) => Promise<RestartHandoffPreparation>;
|
|
55
|
+
export declare const executeRestartRequest: (deps?: ExecuteRestartDeps) => Promise<RestartExecutionResult>;
|
|
30
56
|
export declare const restartDaemon: (deps?: RestartDeps) => Promise<void>;
|
|
31
57
|
export {};
|