@agentteams/runner 0.0.46

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 (158) hide show
  1. package/dist/api-client.d.ts +22 -0
  2. package/dist/api-client.js +201 -0
  3. package/dist/api-client.js.map +1 -0
  4. package/dist/api-client.test.d.ts +1 -0
  5. package/dist/api-client.test.js +118 -0
  6. package/dist/api-client.test.js.map +1 -0
  7. package/dist/autostart.d.ts +19 -0
  8. package/dist/autostart.js +359 -0
  9. package/dist/autostart.js.map +1 -0
  10. package/dist/autostart.test.d.ts +1 -0
  11. package/dist/autostart.test.js +42 -0
  12. package/dist/autostart.test.js.map +1 -0
  13. package/dist/commands/cleanup.d.ts +1 -0
  14. package/dist/commands/cleanup.js +12 -0
  15. package/dist/commands/cleanup.js.map +1 -0
  16. package/dist/commands/init.d.ts +1 -0
  17. package/dist/commands/init.js +57 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/restart.d.ts +1 -0
  20. package/dist/commands/restart.js +7 -0
  21. package/dist/commands/restart.js.map +1 -0
  22. package/dist/commands/start.d.ts +1 -0
  23. package/dist/commands/start.js +34 -0
  24. package/dist/commands/start.js.map +1 -0
  25. package/dist/commands/status.d.ts +1 -0
  26. package/dist/commands/status.js +20 -0
  27. package/dist/commands/status.js.map +1 -0
  28. package/dist/commands/stop.d.ts +1 -0
  29. package/dist/commands/stop.js +21 -0
  30. package/dist/commands/stop.js.map +1 -0
  31. package/dist/commands/uninstall.d.ts +1 -0
  32. package/dist/commands/uninstall.js +21 -0
  33. package/dist/commands/uninstall.js.map +1 -0
  34. package/dist/commands/update.d.ts +10 -0
  35. package/dist/commands/update.js +58 -0
  36. package/dist/commands/update.js.map +1 -0
  37. package/dist/commands/update.test.d.ts +1 -0
  38. package/dist/commands/update.test.js +104 -0
  39. package/dist/commands/update.test.js.map +1 -0
  40. package/dist/config.d.ts +6 -0
  41. package/dist/config.js +69 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/config.test.d.ts +1 -0
  44. package/dist/config.test.js +133 -0
  45. package/dist/config.test.js.map +1 -0
  46. package/dist/daemon-control.d.ts +21 -0
  47. package/dist/daemon-control.js +58 -0
  48. package/dist/daemon-control.js.map +1 -0
  49. package/dist/daemon-control.test.d.ts +1 -0
  50. package/dist/daemon-control.test.js +48 -0
  51. package/dist/daemon-control.test.js.map +1 -0
  52. package/dist/executable.d.ts +25 -0
  53. package/dist/executable.js +141 -0
  54. package/dist/executable.js.map +1 -0
  55. package/dist/executable.test.d.ts +1 -0
  56. package/dist/executable.test.js +57 -0
  57. package/dist/executable.test.js.map +1 -0
  58. package/dist/handlers/trigger-handler.d.ts +25 -0
  59. package/dist/handlers/trigger-handler.js +308 -0
  60. package/dist/handlers/trigger-handler.js.map +1 -0
  61. package/dist/handlers/trigger-handler.test.d.ts +1 -0
  62. package/dist/handlers/trigger-handler.test.js +496 -0
  63. package/dist/handlers/trigger-handler.test.js.map +1 -0
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.js +82 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/logger.d.ts +5 -0
  68. package/dist/logger.js +25 -0
  69. package/dist/logger.js.map +1 -0
  70. package/dist/pid.d.ts +8 -0
  71. package/dist/pid.js +49 -0
  72. package/dist/pid.js.map +1 -0
  73. package/dist/poller.d.ts +20 -0
  74. package/dist/poller.js +214 -0
  75. package/dist/poller.js.map +1 -0
  76. package/dist/poller.test.d.ts +1 -0
  77. package/dist/poller.test.js +382 -0
  78. package/dist/poller.test.js.map +1 -0
  79. package/dist/runners/amp.d.ts +5 -0
  80. package/dist/runners/amp.js +316 -0
  81. package/dist/runners/amp.js.map +1 -0
  82. package/dist/runners/claude-code.d.ts +6 -0
  83. package/dist/runners/claude-code.js +340 -0
  84. package/dist/runners/claude-code.js.map +1 -0
  85. package/dist/runners/claude-code.test.d.ts +1 -0
  86. package/dist/runners/claude-code.test.js +39 -0
  87. package/dist/runners/claude-code.test.js.map +1 -0
  88. package/dist/runners/codex.d.ts +6 -0
  89. package/dist/runners/codex.js +324 -0
  90. package/dist/runners/codex.js.map +1 -0
  91. package/dist/runners/codex.test.d.ts +1 -0
  92. package/dist/runners/codex.test.js +66 -0
  93. package/dist/runners/codex.test.js.map +1 -0
  94. package/dist/runners/gemini.d.ts +5 -0
  95. package/dist/runners/gemini.js +304 -0
  96. package/dist/runners/gemini.js.map +1 -0
  97. package/dist/runners/gemini.test.d.ts +1 -0
  98. package/dist/runners/gemini.test.js +16 -0
  99. package/dist/runners/gemini.test.js.map +1 -0
  100. package/dist/runners/index.d.ts +2 -0
  101. package/dist/runners/index.js +27 -0
  102. package/dist/runners/index.js.map +1 -0
  103. package/dist/runners/index.test.d.ts +1 -0
  104. package/dist/runners/index.test.js +19 -0
  105. package/dist/runners/index.test.js.map +1 -0
  106. package/dist/runners/log-reporter.d.ts +18 -0
  107. package/dist/runners/log-reporter.js +127 -0
  108. package/dist/runners/log-reporter.js.map +1 -0
  109. package/dist/runners/log-reporter.test.d.ts +1 -0
  110. package/dist/runners/log-reporter.test.js +152 -0
  111. package/dist/runners/log-reporter.test.js.map +1 -0
  112. package/dist/runners/opencode.d.ts +6 -0
  113. package/dist/runners/opencode.js +304 -0
  114. package/dist/runners/opencode.js.map +1 -0
  115. package/dist/runners/stream-json-parser.d.ts +17 -0
  116. package/dist/runners/stream-json-parser.js +116 -0
  117. package/dist/runners/stream-json-parser.js.map +1 -0
  118. package/dist/runners/types.d.ts +26 -0
  119. package/dist/runners/types.js +2 -0
  120. package/dist/runners/types.js.map +1 -0
  121. package/dist/types.d.ts +69 -0
  122. package/dist/types.js +2 -0
  123. package/dist/types.js.map +1 -0
  124. package/dist/utils/auth-path-store.d.ts +3 -0
  125. package/dist/utils/auth-path-store.js +37 -0
  126. package/dist/utils/auth-path-store.js.map +1 -0
  127. package/dist/utils/auth-path-store.test.d.ts +1 -0
  128. package/dist/utils/auth-path-store.test.js +70 -0
  129. package/dist/utils/auth-path-store.test.js.map +1 -0
  130. package/dist/utils/convention-sync.d.ts +8 -0
  131. package/dist/utils/convention-sync.js +41 -0
  132. package/dist/utils/convention-sync.js.map +1 -0
  133. package/dist/utils/convention-sync.test.d.ts +1 -0
  134. package/dist/utils/convention-sync.test.js +75 -0
  135. package/dist/utils/convention-sync.test.js.map +1 -0
  136. package/dist/utils/git-worktree.d.ts +9 -0
  137. package/dist/utils/git-worktree.js +150 -0
  138. package/dist/utils/git-worktree.js.map +1 -0
  139. package/dist/utils/git-worktree.test.d.ts +1 -0
  140. package/dist/utils/git-worktree.test.js +294 -0
  141. package/dist/utils/git-worktree.test.js.map +1 -0
  142. package/dist/utils/origin-issue-safeguard.d.ts +16 -0
  143. package/dist/utils/origin-issue-safeguard.js +198 -0
  144. package/dist/utils/origin-issue-safeguard.js.map +1 -0
  145. package/dist/utils/runner-cleanup.d.ts +10 -0
  146. package/dist/utils/runner-cleanup.js +59 -0
  147. package/dist/utils/runner-cleanup.js.map +1 -0
  148. package/dist/utils/runner-cleanup.test.d.ts +1 -0
  149. package/dist/utils/runner-cleanup.test.js +93 -0
  150. package/dist/utils/runner-cleanup.test.js.map +1 -0
  151. package/dist/utils/runner-history.d.ts +6 -0
  152. package/dist/utils/runner-history.js +13 -0
  153. package/dist/utils/runner-history.js.map +1 -0
  154. package/dist/utils/runner-history.test.d.ts +1 -0
  155. package/dist/utils/runner-history.test.js +25 -0
  156. package/dist/utils/runner-history.test.js.map +1 -0
  157. package/package.json +50 -0
  158. package/readme.md +188 -0
@@ -0,0 +1,359 @@
1
+ import { execSync } from "node:child_process";
2
+ import { chmodSync, existsSync, promises as fs } from "node:fs";
3
+ import { homedir, platform } from "node:os";
4
+ import { join } from "node:path";
5
+ import { resolveExecutablePath } from "./executable.js";
6
+ import { logger } from "./logger.js";
7
+ const SERVICE_LABEL = "run.agentteams.runner";
8
+ const TASK_NAME = "AgentRunner";
9
+ // --- Path helpers ---
10
+ const getLaunchdPlistPath = () => join(homedir(), "Library", "LaunchAgents", `${SERVICE_LABEL}.plist`);
11
+ const getSystemdServicePath = () => join(homedir(), ".config", "systemd", "user", "agentrunner.service");
12
+ const getWindowsBatPath = () => join(homedir(), ".agentteams", "agentrunner-start.bat");
13
+ const getWindowsVbsPath = () => join(homedir(), ".agentteams", "agentrunner-start.vbs");
14
+ const getWindowsStartupVbsPath = () => join(homedir(), "AppData", "Roaming", "Microsoft", "Windows", "Start Menu", "Programs", "Startup", "agentrunner-start.vbs");
15
+ // --- plist (macOS) ---
16
+ export const buildPlistContent = (config) => {
17
+ const nodePath = resolveExecutablePath("node");
18
+ const daemonPath = resolveExecutablePath("agentrunner");
19
+ const currentPath = process.env.PATH ?? "/usr/local/bin:/usr/bin:/bin";
20
+ const envEntries = [
21
+ ` <key>PATH</key>\n <string>${currentPath}</string>`,
22
+ ` <key>AGENTTEAMS_DAEMON_TOKEN</key>\n <string>${config.token}</string>`,
23
+ ` <key>AGENTTEAMS_API_URL</key>\n <string>${config.apiUrl}</string>`,
24
+ ` <key>CODEX_SANDBOX_LEVEL</key>\n <string>off</string>`,
25
+ ].join("\n");
26
+ return `<?xml version="1.0" encoding="UTF-8"?>
27
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
28
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
29
+ <plist version="1.0">
30
+ <dict>
31
+ <key>Label</key>
32
+ <string>${SERVICE_LABEL}</string>
33
+
34
+ <key>ProgramArguments</key>
35
+ <array>
36
+ <string>${nodePath}</string>
37
+ <string>${daemonPath}</string>
38
+ <string>start</string>
39
+ </array>
40
+
41
+ <key>EnvironmentVariables</key>
42
+ <dict>
43
+ ${envEntries}
44
+ </dict>
45
+
46
+ <key>RunAtLoad</key>
47
+ <true/>
48
+
49
+ <key>KeepAlive</key>
50
+ <dict>
51
+ <key>SuccessfulExit</key>
52
+ <false/>
53
+ </dict>
54
+
55
+ <key>ThrottleInterval</key>
56
+ <integer>10</integer>
57
+
58
+ <key>StandardOutPath</key>
59
+ <string>/tmp/agentrunner.log</string>
60
+
61
+ <key>StandardErrorPath</key>
62
+ <string>/tmp/agentrunner-error.log</string>
63
+ </dict>
64
+ </plist>`;
65
+ };
66
+ // --- systemd (Linux) ---
67
+ export const buildSystemdContent = (config) => {
68
+ const daemonPath = resolveExecutablePath("agentrunner");
69
+ return `[Unit]
70
+ Description=AgentRunner
71
+ After=network-online.target
72
+ Wants=network-online.target
73
+
74
+ [Service]
75
+ Type=simple
76
+ ExecStart=${daemonPath} start
77
+ Environment="PATH=${process.env.PATH ?? "/usr/local/bin:/usr/bin:/bin"}"
78
+ Environment="AGENTTEAMS_DAEMON_TOKEN=${config.token}"
79
+ Environment="AGENTTEAMS_API_URL=${config.apiUrl}"
80
+ Environment="CODEX_SANDBOX_LEVEL=off"
81
+ Restart=on-failure
82
+ RestartSec=10s
83
+ StandardOutput=journal
84
+ StandardError=journal
85
+ SyslogIdentifier=agentrunner
86
+
87
+ [Install]
88
+ WantedBy=default.target`;
89
+ };
90
+ const escapeForVbsString = (value) => value.replaceAll("\"", "\"\"");
91
+ // --- Windows hidden launcher ---
92
+ export const buildWindowsVbsContent = (config, daemonPath = resolveExecutablePath("agentrunner")) => {
93
+ return [
94
+ "Set shell = CreateObject(\"WScript.Shell\")",
95
+ "Set env = shell.Environment(\"PROCESS\")",
96
+ `env("PATH") = "${escapeForVbsString(process.env.PATH ?? "")}"`,
97
+ `env("AGENTTEAMS_DAEMON_TOKEN") = "${escapeForVbsString(config.token)}"`,
98
+ `env("AGENTTEAMS_API_URL") = "${escapeForVbsString(config.apiUrl)}"`,
99
+ `env("CODEX_SANDBOX_LEVEL") = "off"`,
100
+ `shell.Run """${escapeForVbsString(daemonPath)}"" start", 0, False`
101
+ ].join("\r\n");
102
+ };
103
+ const getAutostartConfigFromEnv = () => {
104
+ const token = process.env.AGENTTEAMS_DAEMON_TOKEN;
105
+ const apiUrl = process.env.AGENTTEAMS_API_URL;
106
+ if (!token || !apiUrl) {
107
+ return null;
108
+ }
109
+ return { token, apiUrl };
110
+ };
111
+ export const registerAutostart = async (config) => {
112
+ const os = platform();
113
+ if (os === "darwin") {
114
+ return registerLaunchd(config);
115
+ }
116
+ if (os === "linux") {
117
+ return registerSystemd(config);
118
+ }
119
+ if (os === "win32") {
120
+ return registerWindowsTask(config);
121
+ }
122
+ logger.warn(`Autostart is not supported on '${os}'. Skipping service registration.`);
123
+ return { registered: false, servicePath: "", platform: os };
124
+ };
125
+ export const unregisterAutostart = async () => {
126
+ const os = platform();
127
+ if (os === "darwin") {
128
+ await unregisterLaunchd();
129
+ return;
130
+ }
131
+ if (os === "linux") {
132
+ await unregisterSystemd();
133
+ return;
134
+ }
135
+ if (os === "win32") {
136
+ await unregisterWindowsTask();
137
+ return;
138
+ }
139
+ logger.warn(`Autostart is not supported on '${os}'. Nothing to unregister.`);
140
+ };
141
+ export const restartAutostartService = async () => {
142
+ const os = platform();
143
+ const config = getAutostartConfigFromEnv();
144
+ if (os === "darwin") {
145
+ await restartLaunchd(config);
146
+ return;
147
+ }
148
+ if (os === "linux") {
149
+ await restartSystemd(config);
150
+ return;
151
+ }
152
+ if (os === "win32") {
153
+ await restartWindowsStartup(config);
154
+ return;
155
+ }
156
+ throw new Error(`Autostart restart is not supported on '${os}'.`);
157
+ };
158
+ export const getAutostartStatus = () => {
159
+ const os = platform();
160
+ if (os === "darwin") {
161
+ try {
162
+ const output = execSync(`launchctl list ${SERVICE_LABEL} 2>/dev/null`, {
163
+ encoding: "utf8",
164
+ });
165
+ return { registered: output.includes(SERVICE_LABEL), platform: "launchd" };
166
+ }
167
+ catch {
168
+ return { registered: false, platform: "launchd" };
169
+ }
170
+ }
171
+ if (os === "linux") {
172
+ try {
173
+ const output = execSync("systemctl --user is-enabled agentrunner 2>/dev/null", {
174
+ encoding: "utf8",
175
+ });
176
+ return { registered: output.trim() === "enabled", platform: "systemd" };
177
+ }
178
+ catch {
179
+ return { registered: false, platform: "systemd" };
180
+ }
181
+ }
182
+ if (os === "win32") {
183
+ return {
184
+ registered: existsSync(getWindowsStartupVbsPath()),
185
+ platform: "startup-folder",
186
+ };
187
+ }
188
+ return { registered: false, platform: os };
189
+ };
190
+ // --- macOS launchd ---
191
+ const registerLaunchd = async (config) => {
192
+ const plistPath = getLaunchdPlistPath();
193
+ // Unload if already registered (ignore errors).
194
+ try {
195
+ execSync(`launchctl unload "${plistPath}" 2>/dev/null`);
196
+ }
197
+ catch {
198
+ // Not loaded — that's fine.
199
+ }
200
+ const content = buildPlistContent(config);
201
+ await fs.mkdir(join(homedir(), "Library", "LaunchAgents"), { recursive: true });
202
+ await fs.writeFile(plistPath, content, "utf8");
203
+ chmodSync(plistPath, 0o600);
204
+ execSync(`launchctl load "${plistPath}"`);
205
+ logger.info("Registered launchd service", { plistPath });
206
+ return { registered: true, servicePath: plistPath, platform: "launchd" };
207
+ };
208
+ const unregisterLaunchd = async () => {
209
+ const plistPath = getLaunchdPlistPath();
210
+ try {
211
+ execSync(`launchctl unload "${plistPath}" 2>/dev/null`);
212
+ }
213
+ catch {
214
+ // Not loaded — that's fine.
215
+ }
216
+ try {
217
+ await fs.unlink(plistPath);
218
+ logger.info("Removed launchd plist", { plistPath });
219
+ }
220
+ catch {
221
+ // File may not exist.
222
+ }
223
+ };
224
+ const restartLaunchd = async (config) => {
225
+ const plistPath = getLaunchdPlistPath();
226
+ if (!existsSync(plistPath)) {
227
+ throw new Error("launchd plist is not registered.");
228
+ }
229
+ try {
230
+ execSync(`launchctl unload "${plistPath}" 2>/dev/null`);
231
+ }
232
+ catch {
233
+ // The agent may already be stopped — continue with load.
234
+ }
235
+ if (config) {
236
+ const content = buildPlistContent(config);
237
+ await fs.writeFile(plistPath, content, "utf8");
238
+ chmodSync(plistPath, 0o600);
239
+ logger.info("Regenerated launchd plist before restart", { plistPath });
240
+ }
241
+ execSync(`launchctl load "${plistPath}"`);
242
+ };
243
+ // --- Linux systemd ---
244
+ const registerSystemd = async (config) => {
245
+ const servicePath = getSystemdServicePath();
246
+ const content = buildSystemdContent(config);
247
+ await fs.mkdir(join(homedir(), ".config", "systemd", "user"), { recursive: true });
248
+ await fs.writeFile(servicePath, content, "utf8");
249
+ chmodSync(servicePath, 0o600);
250
+ execSync("systemctl --user daemon-reload");
251
+ execSync("systemctl --user enable agentrunner");
252
+ execSync("systemctl --user start agentrunner");
253
+ logger.info("Registered systemd user service", { servicePath });
254
+ return { registered: true, servicePath, platform: "systemd" };
255
+ };
256
+ const unregisterSystemd = async () => {
257
+ const servicePath = getSystemdServicePath();
258
+ try {
259
+ execSync("systemctl --user stop agentrunner 2>/dev/null");
260
+ }
261
+ catch {
262
+ // Not running — that's fine.
263
+ }
264
+ try {
265
+ execSync("systemctl --user disable agentrunner 2>/dev/null");
266
+ }
267
+ catch {
268
+ // Not enabled — that's fine.
269
+ }
270
+ execSync("systemctl --user daemon-reload");
271
+ try {
272
+ await fs.unlink(servicePath);
273
+ logger.info("Removed systemd service file", { servicePath });
274
+ }
275
+ catch {
276
+ // File may not exist.
277
+ }
278
+ };
279
+ const restartSystemd = async (config) => {
280
+ if (config) {
281
+ const servicePath = getSystemdServicePath();
282
+ const content = buildSystemdContent(config);
283
+ await fs.writeFile(servicePath, content, "utf8");
284
+ chmodSync(servicePath, 0o600);
285
+ execSync("systemctl --user daemon-reload");
286
+ logger.info("Regenerated systemd service before restart", { servicePath });
287
+ }
288
+ execSync("systemctl --user restart agentrunner");
289
+ };
290
+ // --- Windows Task Scheduler ---
291
+ const registerWindowsTask = async (config) => {
292
+ const startupVbsPath = getWindowsStartupVbsPath();
293
+ const legacyVbsPath = getWindowsVbsPath();
294
+ const legacyBatPath = getWindowsBatPath();
295
+ // Remove legacy Task Scheduler entry if any.
296
+ try {
297
+ execSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
298
+ }
299
+ catch {
300
+ // Not registered — that's fine.
301
+ }
302
+ const content = buildWindowsVbsContent(config);
303
+ await fs.writeFile(startupVbsPath, content, "utf8");
304
+ chmodSync(startupVbsPath, 0o600);
305
+ // Clean up legacy files.
306
+ for (const legacyPath of [legacyVbsPath, legacyBatPath]) {
307
+ try {
308
+ await fs.unlink(legacyPath);
309
+ }
310
+ catch {
311
+ // Legacy file may not exist.
312
+ }
313
+ }
314
+ // Start the runner immediately (hidden).
315
+ try {
316
+ execSync(`wscript.exe "${startupVbsPath}"`, { windowsHide: true });
317
+ }
318
+ catch {
319
+ logger.warn("Autostart registered but immediate start failed. It will start at next logon.");
320
+ }
321
+ logger.info("Registered Windows Startup folder autostart", { startupVbsPath });
322
+ return { registered: true, servicePath: startupVbsPath, platform: "startup-folder" };
323
+ };
324
+ const unregisterWindowsTask = async () => {
325
+ const startupVbsPath = getWindowsStartupVbsPath();
326
+ const legacyVbsPath = getWindowsVbsPath();
327
+ const legacyBatPath = getWindowsBatPath();
328
+ // Remove legacy Task Scheduler entry if any.
329
+ try {
330
+ execSync(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { windowsHide: true });
331
+ }
332
+ catch {
333
+ // Not registered — that's fine.
334
+ }
335
+ // Remove Startup folder VBS and legacy files.
336
+ for (const filePath of [startupVbsPath, legacyVbsPath, legacyBatPath]) {
337
+ try {
338
+ await fs.unlink(filePath);
339
+ logger.info("Removed autostart file", { filePath });
340
+ }
341
+ catch {
342
+ // File may not exist.
343
+ }
344
+ }
345
+ };
346
+ const restartWindowsStartup = async (config) => {
347
+ const startupVbsPath = getWindowsStartupVbsPath();
348
+ if (!existsSync(startupVbsPath)) {
349
+ throw new Error("Windows startup script is not registered.");
350
+ }
351
+ if (config) {
352
+ const content = buildWindowsVbsContent(config);
353
+ await fs.writeFile(startupVbsPath, content, "utf8");
354
+ chmodSync(startupVbsPath, 0o600);
355
+ logger.info("Regenerated Windows startup script before restart", { startupVbsPath });
356
+ }
357
+ execSync(`wscript.exe "${startupVbsPath}"`, { windowsHide: true });
358
+ };
359
+ //# sourceMappingURL=autostart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ import assert from "node:assert/strict";
2
+ import test, { mock } from "node:test";
3
+ import { buildPlistContent, buildSystemdContent, buildWindowsVbsContent } from "./autostart.js";
4
+ const originalPath = process.env.PATH;
5
+ test.afterEach(() => {
6
+ mock.restoreAll();
7
+ process.env.PATH = originalPath;
8
+ });
9
+ test("buildWindowsVbsContent launches agentrunner hidden with inherited env", () => {
10
+ process.env.PATH = "C:\\Windows\\System32;C:\\Users\\rlaru\\AppData\\Roaming\\npm";
11
+ const content = buildWindowsVbsContent({
12
+ token: "daemon-token",
13
+ apiUrl: "https://api.agentteams.run"
14
+ }, "C:\\Users\\rlaru\\AppData\\Roaming\\npm\\agentrunner.cmd");
15
+ assert.match(content, /Set shell = CreateObject\("WScript\.Shell"\)/u);
16
+ assert.match(content, /env\("AGENTTEAMS_DAEMON_TOKEN"\) = "daemon-token"/u);
17
+ assert.match(content, /env\("AGENTTEAMS_API_URL"\) = "https:\/\/api\.agentteams\.run"/u);
18
+ assert.match(content, /shell\.Run """.*agentrunner\.cmd"" start", 0, False/u);
19
+ });
20
+ test("buildWindowsVbsContent injects CODEX_SANDBOX_LEVEL=off", () => {
21
+ const content = buildWindowsVbsContent({
22
+ token: "t",
23
+ apiUrl: "http://localhost:3001"
24
+ }, "agentrunner.cmd");
25
+ assert.match(content, /env\("CODEX_SANDBOX_LEVEL"\) = "off"/u);
26
+ });
27
+ test("buildPlistContent injects CODEX_SANDBOX_LEVEL=off", () => {
28
+ const content = buildPlistContent({
29
+ token: "t",
30
+ apiUrl: "http://localhost:3001"
31
+ });
32
+ assert.match(content, /CODEX_SANDBOX_LEVEL/u);
33
+ assert.match(content, /<key>CODEX_SANDBOX_LEVEL<\/key>\s*\n\s*<string>off<\/string>/u);
34
+ });
35
+ test("buildSystemdContent injects CODEX_SANDBOX_LEVEL=off", () => {
36
+ const content = buildSystemdContent({
37
+ token: "t",
38
+ apiUrl: "http://localhost:3001"
39
+ });
40
+ assert.match(content, /Environment="CODEX_SANDBOX_LEVEL=off"/u);
41
+ });
42
+ //# sourceMappingURL=autostart.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart.test.js","sourceRoot":"","sources":["../src/autostart.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhG,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;IAClB,IAAI,CAAC,UAAU,EAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;IACjF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,+DAA+D,CAAC;IAEnF,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACrC,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,4BAA4B;KACrC,EAAE,0DAA0D,CAAC,CAAC;IAE/D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,+CAA+C,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,iEAAiE,CAAC,CAAC;IACzF,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,sDAAsD,CAAC,CAAC;AAChF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACrC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,uBAAuB;KAChC,EAAE,iBAAiB,CAAC,CAAC;IAEtB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAChC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,+DAA+D,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,OAAO,GAAG,mBAAmB,CAAC;QAClC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runCleanupCommand: (args: string[]) => Promise<void>;
@@ -0,0 +1,12 @@
1
+ import { runCleanup } from "../utils/runner-cleanup.js";
2
+ export const runCleanupCommand = async (args) => {
3
+ const pathIndex = args.indexOf("--path");
4
+ if (pathIndex === -1 || pathIndex + 1 >= args.length) {
5
+ process.stderr.write("Error: --path <projectRoot> is required.\n");
6
+ process.exit(1);
7
+ }
8
+ const authPath = args[pathIndex + 1];
9
+ await runCleanup(authPath);
10
+ process.stdout.write("Cleanup completed.\n");
11
+ };
12
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAc,EAAiB,EAAE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runInitCommand: (argv: string[]) => Promise<void>;
@@ -0,0 +1,57 @@
1
+ import { DaemonApiClient } from "../api-client.js";
2
+ import { logger } from "../logger.js";
3
+ import { resolveApiUrlForInit, writeDaemonConfigFile } from "../config.js";
4
+ import { registerAutostart } from "../autostart.js";
5
+ const parseInitArgs = (argv) => {
6
+ const options = { noAutostart: false };
7
+ for (let i = 0; i < argv.length; i += 1) {
8
+ const arg = argv[i];
9
+ if (arg === "--token") {
10
+ options.token = argv[i + 1];
11
+ i += 1;
12
+ continue;
13
+ }
14
+ if (arg === "--api-url") {
15
+ options.apiUrl = argv[i + 1];
16
+ i += 1;
17
+ continue;
18
+ }
19
+ if (arg === "--no-autostart") {
20
+ options.noAutostart = true;
21
+ }
22
+ }
23
+ return options;
24
+ };
25
+ export const runInitCommand = async (argv) => {
26
+ const options = parseInitArgs(argv);
27
+ if (!options.token || options.token.trim().length === 0) {
28
+ throw new Error("Missing token. Usage: agentrunner init --token <token> [--api-url <url>] [--no-autostart]");
29
+ }
30
+ const apiUrl = await resolveApiUrlForInit(options.apiUrl);
31
+ const daemonToken = options.token.trim();
32
+ const client = new DaemonApiClient(apiUrl, daemonToken);
33
+ const daemon = await client.validateDaemonToken();
34
+ const configPath = await writeDaemonConfigFile({
35
+ daemonToken,
36
+ apiUrl
37
+ });
38
+ logger.info("Daemon init completed", {
39
+ daemonId: daemon.id,
40
+ memberId: daemon.memberId,
41
+ osType: daemon.osType,
42
+ configPath
43
+ });
44
+ if (!options.noAutostart) {
45
+ const result = await registerAutostart({ token: daemonToken, apiUrl });
46
+ if (result.registered) {
47
+ logger.info("Autostart registered", {
48
+ platform: result.platform,
49
+ servicePath: result.servicePath
50
+ });
51
+ }
52
+ }
53
+ else {
54
+ logger.info("Autostart skipped (--no-autostart)");
55
+ }
56
+ };
57
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAQpD,MAAM,aAAa,GAAG,CAAC,IAAc,EAAe,EAAE;IACpD,MAAM,OAAO,GAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC7B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,IAAc,EAAiB,EAAE;IACpE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAElD,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC;QAC7C,WAAW;QACX,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runRestartCommand: () => Promise<void>;
@@ -0,0 +1,7 @@
1
+ import { restartDaemon } from "../daemon-control.js";
2
+ import { logger } from "../logger.js";
3
+ export const runRestartCommand = async () => {
4
+ await restartDaemon();
5
+ logger.info("AgentRunner restart completed");
6
+ };
7
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,aAAa,EAAE,CAAC;IACtB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runStartCommand: () => Promise<void>;
@@ -0,0 +1,34 @@
1
+ import { resolveRuntimeConfig } from "../config.js";
2
+ import { startPolling } from "../poller.js";
3
+ import { DaemonApiClient } from "../api-client.js";
4
+ import { createTriggerHandler } from "../handlers/trigger-handler.js";
5
+ import { writePidFile, removePidFile } from "../pid.js";
6
+ import { logger } from "../logger.js";
7
+ /**
8
+ * Default CODEX_SANDBOX_LEVEL to "off" when not explicitly set.
9
+ * Auto-start services (launchd/systemd/Startup) inject CODEX_SANDBOX_LEVEL=off
10
+ * in their service files. For manual `agentrunner start`, we apply the same
11
+ * default so both paths behave identically.
12
+ */
13
+ const ensureCodexSandboxDefault = () => {
14
+ if (!process.env.CODEX_SANDBOX_LEVEL) {
15
+ process.env.CODEX_SANDBOX_LEVEL = "off";
16
+ logger.info("CODEX_SANDBOX_LEVEL not set; defaulting to 'off' to match auto-start behavior");
17
+ }
18
+ };
19
+ export const runStartCommand = async () => {
20
+ ensureCodexSandboxDefault();
21
+ await writePidFile();
22
+ const cleanup = async () => {
23
+ await removePidFile();
24
+ };
25
+ process.on("SIGINT", () => void cleanup());
26
+ process.on("SIGTERM", () => void cleanup());
27
+ process.on("exit", () => {
28
+ // Synchronous best-effort — PID file may already be removed by signal handler.
29
+ });
30
+ const config = await resolveRuntimeConfig();
31
+ const client = new DaemonApiClient(config.apiUrl, config.daemonToken);
32
+ await startPolling(config, (onAuthPathDiscovered) => createTriggerHandler({ config, client, onAuthPathDiscovered }));
33
+ };
34
+ //# sourceMappingURL=start.js.map
@@ -0,0 +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;AAEtC;;;;;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,yBAAyB,EAAE,CAAC;IAC5B,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,CAClD,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAC/D,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runStatusCommand: () => Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { logger } from "../logger.js";
2
+ import { getDaemonStatus } from "../pid.js";
3
+ import { getAutostartStatus } from "../autostart.js";
4
+ export const runStatusCommand = async () => {
5
+ const daemonStatus = await getDaemonStatus();
6
+ const autostartStatus = getAutostartStatus();
7
+ if (daemonStatus.running) {
8
+ logger.info("Daemon is running", { pid: daemonStatus.pid });
9
+ }
10
+ else {
11
+ logger.info("Daemon is not running");
12
+ }
13
+ if (autostartStatus.registered) {
14
+ logger.info("Autostart is enabled", { platform: autostartStatus.platform });
15
+ }
16
+ else {
17
+ logger.info("Autostart is not registered", { platform: autostartStatus.platform });
18
+ }
19
+ };
20
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;IACxD,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAE7C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runStopCommand: () => Promise<void>;
@@ -0,0 +1,21 @@
1
+ import { logger } from "../logger.js";
2
+ import { getDaemonStatus, removePidFile } from "../pid.js";
3
+ export const runStopCommand = async () => {
4
+ const { running, pid } = await getDaemonStatus();
5
+ if (!running || pid === null) {
6
+ logger.info("Daemon is not running");
7
+ return;
8
+ }
9
+ try {
10
+ process.kill(pid, "SIGTERM");
11
+ logger.info("Sent SIGTERM to daemon", { pid });
12
+ }
13
+ catch (error) {
14
+ logger.error("Failed to stop daemon", {
15
+ pid,
16
+ error: error instanceof Error ? error.message : String(error)
17
+ });
18
+ }
19
+ await removePidFile();
20
+ };
21
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAmB,EAAE;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACpC,GAAG;YACH,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const runUninstallCommand: () => Promise<void>;