@agentteams/runner 0.0.97 → 0.0.99

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 (71) hide show
  1. package/dist/api-client.d.ts +1 -0
  2. package/dist/api-client.js +20 -1
  3. package/dist/api-client.js.map +1 -1
  4. package/dist/api-client.test.js +48 -1
  5. package/dist/api-client.test.js.map +1 -1
  6. package/dist/autostart.d.ts +37 -8
  7. package/dist/autostart.js +158 -68
  8. package/dist/autostart.js.map +1 -1
  9. package/dist/autostart.test.js +130 -76
  10. package/dist/autostart.test.js.map +1 -1
  11. package/dist/commands/start.js +2 -2
  12. package/dist/commands/stop.d.ts +10 -1
  13. package/dist/commands/stop.js +11 -7
  14. package/dist/commands/stop.js.map +1 -1
  15. package/dist/commands/stop.test.d.ts +1 -0
  16. package/dist/commands/stop.test.js +34 -0
  17. package/dist/commands/stop.test.js.map +1 -0
  18. package/dist/commands/uninstall.d.ts +13 -1
  19. package/dist/commands/uninstall.js +21 -10
  20. package/dist/commands/uninstall.js.map +1 -1
  21. package/dist/commands/uninstall.test.d.ts +1 -0
  22. package/dist/commands/uninstall.test.js +42 -0
  23. package/dist/commands/uninstall.test.js.map +1 -0
  24. package/dist/daemon-control.d.ts +2 -1
  25. package/dist/daemon-control.js +16 -6
  26. package/dist/daemon-control.js.map +1 -1
  27. package/dist/daemon-control.test.js +27 -3
  28. package/dist/daemon-control.test.js.map +1 -1
  29. package/dist/executable.test.js +13 -0
  30. package/dist/executable.test.js.map +1 -1
  31. package/dist/handlers/trigger-handler.d.ts +2 -0
  32. package/dist/handlers/trigger-handler.js +36 -5
  33. package/dist/handlers/trigger-handler.js.map +1 -1
  34. package/dist/handlers/trigger-handler.test.js +298 -0
  35. package/dist/handlers/trigger-handler.test.js.map +1 -1
  36. package/dist/poller.test.js +23 -0
  37. package/dist/poller.test.js.map +1 -1
  38. package/dist/runners/capabilities.js +1 -0
  39. package/dist/runners/capabilities.js.map +1 -1
  40. package/dist/runners/capabilities.test.js +13 -1
  41. package/dist/runners/capabilities.test.js.map +1 -1
  42. package/dist/runners/codex.test.js +1 -1
  43. package/dist/runners/codex.test.js.map +1 -1
  44. package/dist/runners/cursor-cli.d.ts +27 -0
  45. package/dist/runners/cursor-cli.js +276 -0
  46. package/dist/runners/cursor-cli.js.map +1 -0
  47. package/dist/runners/cursor-cli.test.d.ts +1 -0
  48. package/dist/runners/cursor-cli.test.js +189 -0
  49. package/dist/runners/cursor-cli.test.js.map +1 -0
  50. package/dist/runners/index.js +3 -0
  51. package/dist/runners/index.js.map +1 -1
  52. package/dist/runners/index.test.js +2 -0
  53. package/dist/runners/index.test.js.map +1 -1
  54. package/dist/runners/stream-json-parser.d.ts +9 -0
  55. package/dist/runners/stream-json-parser.js +143 -0
  56. package/dist/runners/stream-json-parser.js.map +1 -1
  57. package/dist/runners/stream-json-parser.test.js +117 -1
  58. package/dist/runners/stream-json-parser.test.js.map +1 -1
  59. package/dist/types.d.ts +2 -0
  60. package/dist/utils/git-worktree.js +2 -1
  61. package/dist/utils/git-worktree.js.map +1 -1
  62. package/dist/utils/git-worktree.test.js +2 -2
  63. package/dist/utils/git-worktree.test.js.map +1 -1
  64. package/dist/utils/resolve-member-repo.d.ts +39 -0
  65. package/dist/utils/resolve-member-repo.js +180 -0
  66. package/dist/utils/resolve-member-repo.js.map +1 -0
  67. package/dist/utils/resolve-member-repo.test.d.ts +1 -0
  68. package/dist/utils/resolve-member-repo.test.js +201 -0
  69. package/dist/utils/resolve-member-repo.test.js.map +1 -0
  70. package/package.json +2 -2
  71. package/readme.md +24 -6
@@ -1,4 +1,5 @@
1
1
  import type { ClaimResult, DaemonInfo, InjectedConventionRecord, PollStateResponse, TriggerFinalStatus, TriggerLogInput, TriggerRuntime } from './types.js';
2
+ export declare const DAEMON_API_TRANSPORT_TIMEOUT_MS = 30000;
2
3
  export declare class DaemonApiClient {
3
4
  private readonly apiUrl;
4
5
  private readonly daemonToken;
@@ -5,6 +5,15 @@ const packageJson = require('../package.json');
5
5
  const runnerVersion = packageJson.version ?? '0.0.0';
6
6
  const MAX_NETWORK_RETRIES = 3;
7
7
  const BASE_BACKOFF_MS = 1000;
8
+ export const DAEMON_API_TRANSPORT_TIMEOUT_MS = 30_000;
9
+ class DaemonApiTimeoutError extends Error {
10
+ timeoutMs;
11
+ constructor(timeoutMs) {
12
+ super(`Daemon API request timed out after ${timeoutMs}ms`);
13
+ this.timeoutMs = timeoutMs;
14
+ this.name = 'DaemonApiTimeoutError';
15
+ }
16
+ }
8
17
  const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
9
18
  const isNetworkError = (error) => {
10
19
  return error instanceof Error;
@@ -45,8 +54,13 @@ export class DaemonApiClient {
45
54
  async requestWithRetry(path, options) {
46
55
  const url = `${this.apiUrl}${path}`;
47
56
  for (let attempt = 0; attempt <= MAX_NETWORK_RETRIES; attempt += 1) {
57
+ const timeoutController = new AbortController();
58
+ const timeoutError = new DaemonApiTimeoutError(DAEMON_API_TRANSPORT_TIMEOUT_MS);
59
+ const timeoutHandle = setTimeout(() => {
60
+ timeoutController.abort(timeoutError);
61
+ }, DAEMON_API_TRANSPORT_TIMEOUT_MS);
48
62
  try {
49
- return await fetch(url, options);
63
+ return await fetch(url, { ...options, signal: timeoutController.signal });
50
64
  }
51
65
  catch (error) {
52
66
  if (!isNetworkError(error) || attempt >= MAX_NETWORK_RETRIES) {
@@ -56,11 +70,16 @@ export class DaemonApiClient {
56
70
  const delayMs = BASE_BACKOFF_MS * 2 ** attempt;
57
71
  logger.warn(`Retry ${retryNumber}/${MAX_NETWORK_RETRIES}: network error while requesting daemon API`, {
58
72
  path,
73
+ retryNumber,
59
74
  delayMs,
75
+ ...(error instanceof DaemonApiTimeoutError ? { timeoutMs: error.timeoutMs } : {}),
60
76
  error: error instanceof Error ? error.message : String(error),
61
77
  });
62
78
  await wait(delayMs);
63
79
  }
80
+ finally {
81
+ clearTimeout(timeoutHandle);
82
+ }
64
83
  }
65
84
  throw new Error('Unexpected retry loop exit');
66
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import { createRequire } from 'node:module';
3
3
  import test, { mock } from 'node:test';
4
- import { DaemonApiClient } from './api-client.js';
4
+ import { DAEMON_API_TRANSPORT_TIMEOUT_MS, DaemonApiClient } from './api-client.js';
5
5
  import { logger } from './logger.js';
6
6
  const require = createRequire(import.meta.url);
7
7
  const packageJson = require('../package.json');
@@ -147,6 +147,9 @@ test('requestWithRetry retries network failures with exponential backoff and war
147
147
  });
148
148
  const delays = [];
149
149
  globalThis.setTimeout = ((callback, delay) => {
150
+ if (delay === DAEMON_API_TRANSPORT_TIMEOUT_MS) {
151
+ return 0;
152
+ }
150
153
  delays.push(delay ?? 0);
151
154
  callback();
152
155
  return 0;
@@ -179,4 +182,48 @@ test('requestWithRetry retries network failures with exponential backoff and war
179
182
  assert.match(warnings[0]?.message ?? '', /Retry 1\/3/);
180
183
  assert.equal(warnings[1]?.meta?.delayMs, 2000);
181
184
  });
185
+ test('requestWithRetry aborts stalled requests at the transport timeout and retries safely', async () => {
186
+ const warnings = [];
187
+ mock.method(logger, 'warn', (message, meta) => {
188
+ warnings.push({ message, meta });
189
+ });
190
+ const delays = [];
191
+ globalThis.setTimeout = ((callback, delay) => {
192
+ delays.push(delay ?? 0);
193
+ callback();
194
+ return 0;
195
+ });
196
+ const signals = [];
197
+ globalThis.fetch = (async (_url, options) => {
198
+ const signal = options?.signal;
199
+ assert.ok(signal);
200
+ signals.push(signal);
201
+ await new Promise((_resolve, reject) => {
202
+ if (signal.aborted) {
203
+ reject(signal.reason);
204
+ return;
205
+ }
206
+ signal.addEventListener('abort', () => reject(signal.reason), { once: true });
207
+ });
208
+ throw new Error('unreachable');
209
+ });
210
+ const client = new DaemonApiClient('https://api.example', 'daemon-token');
211
+ await assert.rejects(() => client.fetchPollState(), /timed out/);
212
+ assert.equal(signals.length, 4, 'initial request plus three retries');
213
+ assert.ok(signals.every((signal) => signal.aborted));
214
+ assert.deepEqual(delays, [30_000, 1000, 30_000, 2000, 30_000, 4000, 30_000]);
215
+ assert.equal(warnings.length, 3);
216
+ assert.deepEqual(warnings.map((warning) => ({
217
+ path: warning.meta?.path,
218
+ retryNumber: warning.meta?.retryNumber,
219
+ delayMs: warning.meta?.delayMs,
220
+ timeoutMs: warning.meta?.timeoutMs,
221
+ })), [
222
+ { path: '/api/daemon-triggers/poll-state', retryNumber: 1, delayMs: 1000, timeoutMs: 30_000 },
223
+ { path: '/api/daemon-triggers/poll-state', retryNumber: 2, delayMs: 2000, timeoutMs: 30_000 },
224
+ { path: '/api/daemon-triggers/poll-state', retryNumber: 3, delayMs: 4000, timeoutMs: 30_000 },
225
+ ]);
226
+ assert.ok(warnings.every((warning) => !JSON.stringify(warning).includes('daemon-token')));
227
+ assert.ok(warnings.every((warning) => !JSON.stringify(warning).includes('https://api.example')));
228
+ });
182
229
  //# sourceMappingURL=api-client.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../src/api-client.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../src/api-client.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
+ import { execSync, spawn } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+ import { resolveExecutablePath } from './executable.js';
1
4
  export declare const buildPlistContent: (config: AutostartConfig) => string;
2
5
  export declare const buildSystemdContent: (config: AutostartConfig) => string;
3
- export declare const buildWindowsVbsContent: (config: AutostartConfig, daemonPath?: string) => string;
6
+ export declare const buildWindowsPowerShellWrapper: (config: AutostartConfig, daemonPath?: string, logPath?: string, currentPath?: string) => string;
7
+ export declare const buildWindowsTaskXmlContent: (userId: string, wrapperPath: string) => string;
4
8
  export type AutostartConfig = {
5
9
  token: string;
6
10
  apiUrl: string;
@@ -13,20 +17,45 @@ export type AutostartResult = {
13
17
  export declare const registerAutostart: (config: AutostartConfig) => Promise<AutostartResult>;
14
18
  export declare const unregisterAutostart: () => Promise<void>;
15
19
  export declare const restartAutostartService: () => Promise<void>;
16
- export declare const getAutostartStatus: () => {
20
+ type AutostartStatusDeps = {
21
+ platform?: typeof platform;
22
+ execSync?: typeof execSync;
23
+ };
24
+ export declare const getAutostartStatus: (deps?: AutostartStatusDeps) => {
17
25
  registered: boolean;
18
26
  platform: string;
19
27
  };
20
- type LaunchWindowsHiddenDeps = {
21
- existsSync?: (path: string) => boolean;
22
- writeFileSync?: (path: string, data: string, encoding: BufferEncoding) => void;
23
- mkdirSync?: (path: string, options: {
28
+ type WindowsAutostartDeps = {
29
+ execSync?: (command: string, options: {
30
+ windowsHide: boolean;
31
+ }) => unknown;
32
+ mkdir?: (path: string, options: {
24
33
  recursive: boolean;
25
- }) => void;
34
+ }) => Promise<unknown>;
35
+ writeFile?: (path: string, data: string, encoding: BufferEncoding) => Promise<void>;
36
+ unlink?: (path: string) => Promise<void>;
37
+ chmodSync?: (path: string, mode: number) => void;
38
+ daemonPath?: string;
39
+ userId?: string;
40
+ };
41
+ export declare const registerWindowsTask: (config: AutostartConfig, deps?: WindowsAutostartDeps) => Promise<AutostartResult>;
42
+ export declare const unregisterWindowsTask: (deps?: WindowsAutostartDeps) => Promise<void>;
43
+ type RestartWindowsTaskDeps = {
26
44
  execSync?: (command: string, options: {
27
45
  windowsHide: boolean;
28
46
  }) => unknown;
29
- getAutostartConfig?: () => AutostartConfig | null;
47
+ writeFile?: (path: string, data: string, encoding: BufferEncoding) => Promise<void>;
48
+ chmodSync?: (path: string, mode: number) => void;
49
+ daemonPath?: string;
50
+ };
51
+ export declare const restartWindowsTask: (config: AutostartConfig | null, deps?: RestartWindowsTaskDeps) => Promise<void>;
52
+ type ScheduleWindowsTaskRestartDeps = {
53
+ spawn?: typeof spawn;
54
+ };
55
+ export declare const scheduleWindowsTaskRestart: (deps?: ScheduleWindowsTaskRestartDeps) => void;
56
+ type LaunchWindowsHiddenDeps = {
57
+ spawn?: typeof spawn;
58
+ resolveExecutablePath?: typeof resolveExecutablePath;
30
59
  };
31
60
  export declare const launchWindowsHiddenDaemon: (deps?: LaunchWindowsHiddenDeps) => void;
32
61
  export {};
package/dist/autostart.js CHANGED
@@ -1,17 +1,21 @@
1
- import { execSync } from 'node:child_process';
2
- import { chmodSync, existsSync, mkdirSync, promises as fs, writeFileSync } from 'node:fs';
1
+ import { execSync, spawn } from 'node:child_process';
2
+ import { chmodSync, existsSync, promises as fs } from 'node:fs';
3
3
  import { homedir, platform } from 'node:os';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { resolveExecutablePath } from './executable.js';
6
6
  import { logger } from './logger.js';
7
7
  const SERVICE_LABEL = 'run.agentteams.runner';
8
8
  const TASK_NAME = 'AgentRunner';
9
+ const WINDOWS_LOG_MAX_BYTES = 10 * 1024 * 1024;
9
10
  // --- Path helpers ---
10
11
  const getLaunchdPlistPath = () => join(homedir(), 'Library', 'LaunchAgents', `${SERVICE_LABEL}.plist`);
11
12
  const getSystemdServicePath = () => join(homedir(), '.config', 'systemd', 'user', 'agentrunner.service');
12
13
  const getWindowsBatPath = () => join(homedir(), '.agentteams', 'agentrunner-start.bat');
13
14
  const getWindowsVbsPath = () => join(homedir(), '.agentteams', 'agentrunner-start.vbs');
14
15
  const getWindowsRestartVbsPath = () => join(homedir(), '.agentteams', 'agentrunner-restart.vbs');
16
+ const getWindowsTaskXmlPath = () => join(homedir(), '.agentteams', 'agentrunner-task.xml');
17
+ const getWindowsWrapperPath = () => join(homedir(), '.agentteams', 'agentrunner-start.ps1');
18
+ const getWindowsLogPath = () => join(homedir(), '.agentteams', 'agentrunner.log');
15
19
  const getWindowsStartupVbsPath = () => join(homedir(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'agentrunner-start.vbs');
16
20
  // --- plist (macOS) ---
17
21
  export const buildPlistContent = (config) => {
@@ -88,19 +92,67 @@ SyslogIdentifier=agentrunner
88
92
  [Install]
89
93
  WantedBy=default.target`;
90
94
  };
91
- const escapeForVbsString = (value) => value.replaceAll('"', '""');
92
- // --- Windows hidden launcher ---
93
- export const buildWindowsVbsContent = (config, daemonPath = resolveExecutablePath('agentrunner')) => {
95
+ const escapeForPowerShellString = (value) => value.replaceAll("'", "''");
96
+ const escapeForXml = (value) => value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;');
97
+ export const buildWindowsPowerShellWrapper = (config, daemonPath = resolveExecutablePath('agentrunner'), logPath = getWindowsLogPath(), currentPath = process.env.PATH ?? '') => {
94
98
  return [
95
- 'Set shell = CreateObject("WScript.Shell")',
96
- 'Set env = shell.Environment("PROCESS")',
97
- `env("PATH") = "${escapeForVbsString(process.env.PATH ?? '')}"`,
98
- `env("AGENTTEAMS_DAEMON_TOKEN") = "${escapeForVbsString(config.token)}"`,
99
- `env("AGENTTEAMS_API_URL") = "${escapeForVbsString(config.apiUrl)}"`,
100
- `env("CODEX_SANDBOX_LEVEL") = "off"`,
101
- `shell.Run """${escapeForVbsString(daemonPath)}"" start", 0, False`,
99
+ "$ErrorActionPreference = 'Stop'",
100
+ `$env:PATH = '${escapeForPowerShellString(currentPath)}'`,
101
+ `$env:AGENTTEAMS_DAEMON_TOKEN = '${escapeForPowerShellString(config.token)}'`,
102
+ `$env:AGENTTEAMS_API_URL = '${escapeForPowerShellString(config.apiUrl)}'`,
103
+ "$env:CODEX_SANDBOX_LEVEL = 'off'",
104
+ `$logPath = '${escapeForPowerShellString(logPath)}'`,
105
+ `$maxLogBytes = ${WINDOWS_LOG_MAX_BYTES}`,
106
+ 'try {',
107
+ ' if ((Test-Path -LiteralPath $logPath -PathType Leaf) -and ((Get-Item -LiteralPath $logPath).Length -ge $maxLogBytes)) {',
108
+ ' Move-Item -LiteralPath $logPath -Destination "$logPath.1" -Force',
109
+ ' }',
110
+ '} catch {',
111
+ ' Clear-Content -LiteralPath $logPath -ErrorAction SilentlyContinue',
112
+ '}',
113
+ `& '${escapeForPowerShellString(daemonPath)}' start *>> '${escapeForPowerShellString(logPath)}'`,
114
+ 'exit $LASTEXITCODE',
102
115
  ].join('\r\n');
103
116
  };
117
+ export const buildWindowsTaskXmlContent = (userId, wrapperPath) => {
118
+ const escapedUserId = escapeForXml(userId);
119
+ const argumentsValue = escapeForXml(`-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "${wrapperPath}"`);
120
+ return `<?xml version="1.0" encoding="UTF-16"?>
121
+ <Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
122
+ <RegistrationInfo><Description>AgentTeams Runner</Description></RegistrationInfo>
123
+ <Triggers>
124
+ <LogonTrigger>
125
+ <Enabled>true</Enabled>
126
+ <UserId>${escapedUserId}</UserId>
127
+ </LogonTrigger>
128
+ </Triggers>
129
+ <Principals>
130
+ <Principal id="Author">
131
+ <UserId>${escapedUserId}</UserId>
132
+ <LogonType>InteractiveToken</LogonType>
133
+ <RunLevel>LeastPrivilege</RunLevel>
134
+ </Principal>
135
+ </Principals>
136
+ <Settings>
137
+ <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
138
+ <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
139
+ <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
140
+ <StartWhenAvailable>true</StartWhenAvailable>
141
+ <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
142
+ <Hidden>true</Hidden>
143
+ <RestartOnFailure>
144
+ <Interval>PT1M</Interval>
145
+ <Count>3</Count>
146
+ </RestartOnFailure>
147
+ </Settings>
148
+ <Actions Context="Author">
149
+ <Exec>
150
+ <Command>powershell.exe</Command>
151
+ <Arguments>${argumentsValue}</Arguments>
152
+ </Exec>
153
+ </Actions>
154
+ </Task>`;
155
+ };
104
156
  const getAutostartConfigFromEnv = () => {
105
157
  const token = process.env.AGENTTEAMS_DAEMON_TOKEN;
106
158
  const apiUrl = process.env.AGENTTEAMS_API_URL;
@@ -151,16 +203,17 @@ export const restartAutostartService = async () => {
151
203
  return;
152
204
  }
153
205
  if (os === 'win32') {
154
- await restartWindowsStartup(config);
206
+ await restartWindowsTask(config);
155
207
  return;
156
208
  }
157
209
  throw new Error(`Autostart restart is not supported on '${os}'.`);
158
210
  };
159
- export const getAutostartStatus = () => {
160
- const os = platform();
211
+ export const getAutostartStatus = (deps = {}) => {
212
+ const os = (deps.platform ?? platform)();
213
+ const resolvedExecSync = deps.execSync ?? execSync;
161
214
  if (os === 'darwin') {
162
215
  try {
163
- const output = execSync(`launchctl list ${SERVICE_LABEL} 2>/dev/null`, {
216
+ const output = resolvedExecSync(`launchctl list ${SERVICE_LABEL} 2>/dev/null`, {
164
217
  encoding: 'utf8',
165
218
  });
166
219
  return { registered: output.includes(SERVICE_LABEL), platform: 'launchd' };
@@ -171,7 +224,7 @@ export const getAutostartStatus = () => {
171
224
  }
172
225
  if (os === 'linux') {
173
226
  try {
174
- const output = execSync('systemctl --user is-enabled agentrunner 2>/dev/null', {
227
+ const output = resolvedExecSync('systemctl --user is-enabled agentrunner 2>/dev/null', {
175
228
  encoding: 'utf8',
176
229
  });
177
230
  return { registered: output.trim() === 'enabled', platform: 'systemd' };
@@ -181,10 +234,13 @@ export const getAutostartStatus = () => {
181
234
  }
182
235
  }
183
236
  if (os === 'win32') {
184
- return {
185
- registered: existsSync(getWindowsStartupVbsPath()),
186
- platform: 'startup-folder',
187
- };
237
+ try {
238
+ resolvedExecSync(`schtasks /Query /TN "${TASK_NAME}"`, { windowsHide: true });
239
+ return { registered: true, platform: 'task-scheduler' };
240
+ }
241
+ catch {
242
+ return { registered: false, platform: 'task-scheduler' };
243
+ }
188
244
  }
189
245
  return { registered: false, platform: os };
190
246
  };
@@ -288,55 +344,75 @@ const restartSystemd = async (config) => {
288
344
  }
289
345
  execSync('systemctl --user restart agentrunner');
290
346
  };
291
- // --- Windows Task Scheduler ---
292
- const registerWindowsTask = async (config) => {
347
+ export const registerWindowsTask = async (config, deps = {}) => {
348
+ const resolvedExecSync = deps.execSync ?? execSync;
349
+ const resolvedMkdir = deps.mkdir ?? fs.mkdir;
350
+ const resolvedWriteFile = deps.writeFile ?? fs.writeFile;
351
+ const resolvedUnlink = deps.unlink ?? fs.unlink;
352
+ const resolvedChmodSync = deps.chmodSync ?? chmodSync;
353
+ const taskXmlPath = getWindowsTaskXmlPath();
354
+ const wrapperPath = getWindowsWrapperPath();
293
355
  const startupVbsPath = getWindowsStartupVbsPath();
294
356
  const legacyVbsPath = getWindowsVbsPath();
295
357
  const legacyBatPath = getWindowsBatPath();
358
+ const restartVbsPath = getWindowsRestartVbsPath();
359
+ await resolvedMkdir(dirname(taskXmlPath), { recursive: true });
296
360
  // Remove legacy Task Scheduler entry if any.
297
361
  try {
298
- execSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
362
+ resolvedExecSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
299
363
  }
300
364
  catch {
301
365
  // Not registered — that's fine.
302
366
  }
303
- const content = buildWindowsVbsContent(config);
304
- await fs.writeFile(startupVbsPath, content, 'utf8');
305
- chmodSync(startupVbsPath, 0o600);
367
+ const userName = process.env.USERNAME ?? process.env.USER ?? '';
368
+ const userId = deps.userId ?? (process.env.USERDOMAIN ? `${process.env.USERDOMAIN}\\${userName}` : userName);
369
+ if (!userId) {
370
+ throw new Error('Cannot register Windows Task Scheduler autostart: current user is unknown.');
371
+ }
372
+ await resolvedWriteFile(wrapperPath, buildWindowsPowerShellWrapper(config, deps.daemonPath ?? resolveExecutablePath('agentrunner')), 'utf8');
373
+ await resolvedWriteFile(taskXmlPath, buildWindowsTaskXmlContent(userId, wrapperPath), 'utf16le');
374
+ resolvedChmodSync(wrapperPath, 0o600);
375
+ resolvedChmodSync(taskXmlPath, 0o600);
306
376
  // Clean up legacy files.
307
- for (const legacyPath of [legacyVbsPath, legacyBatPath]) {
377
+ for (const legacyPath of [startupVbsPath, legacyVbsPath, legacyBatPath, restartVbsPath]) {
308
378
  try {
309
- await fs.unlink(legacyPath);
379
+ await resolvedUnlink(legacyPath);
310
380
  }
311
381
  catch {
312
382
  // Legacy file may not exist.
313
383
  }
314
384
  }
315
- // Start the runner immediately (hidden).
385
+ resolvedExecSync(`schtasks /Create /TN "${TASK_NAME}" /XML "${taskXmlPath}" /F`, { windowsHide: true });
386
+ // Start the registered task immediately.
316
387
  try {
317
- execSync(`wscript.exe "${startupVbsPath}"`, { windowsHide: true });
388
+ resolvedExecSync(`schtasks /Run /TN "${TASK_NAME}"`, { windowsHide: true });
318
389
  }
319
390
  catch {
320
391
  logger.warn('Autostart registered but immediate start failed. It will start at next logon.');
321
392
  }
322
- logger.info('Registered Windows Startup folder autostart', { startupVbsPath });
323
- return { registered: true, servicePath: startupVbsPath, platform: 'startup-folder' };
393
+ logger.info('Registered Windows Task Scheduler autostart', { taskXmlPath });
394
+ return { registered: true, servicePath: taskXmlPath, platform: 'task-scheduler' };
324
395
  };
325
- const unregisterWindowsTask = async () => {
396
+ export const unregisterWindowsTask = async (deps = {}) => {
397
+ const resolvedExecSync = deps.execSync ?? execSync;
398
+ const resolvedUnlink = deps.unlink ?? fs.unlink;
326
399
  const startupVbsPath = getWindowsStartupVbsPath();
327
400
  const legacyVbsPath = getWindowsVbsPath();
328
401
  const legacyBatPath = getWindowsBatPath();
402
+ const restartVbsPath = getWindowsRestartVbsPath();
403
+ const taskXmlPath = getWindowsTaskXmlPath();
404
+ const wrapperPath = getWindowsWrapperPath();
329
405
  // Remove legacy Task Scheduler entry if any.
330
406
  try {
331
- execSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
407
+ resolvedExecSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
332
408
  }
333
409
  catch {
334
410
  // Not registered — that's fine.
335
411
  }
336
412
  // Remove Startup folder VBS and legacy files.
337
- for (const filePath of [startupVbsPath, legacyVbsPath, legacyBatPath]) {
413
+ for (const filePath of [startupVbsPath, legacyVbsPath, legacyBatPath, restartVbsPath, taskXmlPath, wrapperPath]) {
338
414
  try {
339
- await fs.unlink(filePath);
415
+ await resolvedUnlink(filePath);
340
416
  logger.info('Removed autostart file', { filePath });
341
417
  }
342
418
  catch {
@@ -344,40 +420,54 @@ const unregisterWindowsTask = async () => {
344
420
  }
345
421
  }
346
422
  };
347
- const restartWindowsStartup = async (config) => {
348
- const startupVbsPath = getWindowsStartupVbsPath();
349
- if (!existsSync(startupVbsPath)) {
350
- throw new Error('Windows startup script is not registered.');
351
- }
423
+ export const restartWindowsTask = async (config, deps = {}) => {
424
+ const resolvedExecSync = deps.execSync ?? execSync;
352
425
  if (config) {
353
- const content = buildWindowsVbsContent(config);
354
- await fs.writeFile(startupVbsPath, content, 'utf8');
355
- chmodSync(startupVbsPath, 0o600);
356
- logger.info('Regenerated Windows startup script before restart', { startupVbsPath });
426
+ const wrapperPath = getWindowsWrapperPath();
427
+ await (deps.writeFile ?? fs.writeFile)(wrapperPath, buildWindowsPowerShellWrapper(config, deps.daemonPath ?? resolveExecutablePath('agentrunner')), 'utf8');
428
+ (deps.chmodSync ?? chmodSync)(wrapperPath, 0o600);
429
+ logger.info('Regenerated Windows task wrapper before restart', { wrapperPath });
357
430
  }
358
- execSync(`wscript.exe "${startupVbsPath}"`, { windowsHide: true });
359
- };
360
- // Run agentrunner via wscript+VBS so no console window appears.
361
- // Prefers the registered Startup VBS if present; otherwise writes a fresh VBS
362
- // next to the daemon config and runs it.
363
- export const launchWindowsHiddenDaemon = (deps = {}) => {
364
- const resolvedExists = deps.existsSync ?? existsSync;
365
- const resolvedWrite = deps.writeFileSync ?? writeFileSync;
366
- const resolvedMkdir = deps.mkdirSync ?? mkdirSync;
367
- const resolvedExec = deps.execSync ?? execSync;
368
- const resolvedGetConfig = deps.getAutostartConfig ?? getAutostartConfigFromEnv;
369
- const startupVbsPath = getWindowsStartupVbsPath();
370
- if (resolvedExists(startupVbsPath)) {
371
- resolvedExec(`wscript.exe "${startupVbsPath}"`, { windowsHide: true });
372
- return;
431
+ try {
432
+ resolvedExecSync(`schtasks /End /TN "${TASK_NAME}"`, { windowsHide: true });
373
433
  }
374
- const config = resolvedGetConfig();
375
- if (!config) {
376
- throw new Error('Cannot launch Windows daemon hidden: AGENTTEAMS_DAEMON_TOKEN/AGENTTEAMS_API_URL are missing.');
434
+ catch {
435
+ // The task may already be stopped — continue with an explicit run.
377
436
  }
378
- const restartVbsPath = getWindowsRestartVbsPath();
379
- resolvedMkdir(dirname(restartVbsPath), { recursive: true });
380
- resolvedWrite(restartVbsPath, buildWindowsVbsContent(config), 'utf8');
381
- resolvedExec(`wscript.exe "${restartVbsPath}"`, { windowsHide: true });
437
+ resolvedExecSync(`schtasks /Run /TN "${TASK_NAME}"`, { windowsHide: true });
438
+ };
439
+ // A task cannot run a second instance while its current action is still alive.
440
+ // Queue the explicit start in a detached helper so it runs after this daemon exits
441
+ // cleanly, rather than consuming Task Scheduler's failure-restart budget.
442
+ export const scheduleWindowsTaskRestart = (deps = {}) => {
443
+ const resolvedSpawn = deps.spawn ?? spawn;
444
+ const child = resolvedSpawn('powershell.exe', [
445
+ '-NoProfile',
446
+ '-NonInteractive',
447
+ '-WindowStyle',
448
+ 'Hidden',
449
+ '-ExecutionPolicy',
450
+ 'Bypass',
451
+ '-Command',
452
+ `Start-Sleep -Milliseconds 500; schtasks /Run /TN '${TASK_NAME}'`,
453
+ ], {
454
+ detached: true,
455
+ stdio: 'ignore',
456
+ windowsHide: true,
457
+ env: process.env,
458
+ });
459
+ child.unref();
460
+ };
461
+ export const launchWindowsHiddenDaemon = (deps = {}) => {
462
+ const resolvedSpawn = deps.spawn ?? spawn;
463
+ const daemonPath = (deps.resolveExecutablePath ?? resolveExecutablePath)('agentrunner');
464
+ const command = `& '${escapeForPowerShellString(daemonPath)}' start`;
465
+ const child = resolvedSpawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-WindowStyle', 'Hidden', '-ExecutionPolicy', 'Bypass', '-Command', command], {
466
+ detached: true,
467
+ stdio: 'ignore',
468
+ windowsHide: true,
469
+ env: process.env,
470
+ });
471
+ child.unref();
382
472
  };
383
473
  //# sourceMappingURL=autostart.js.map