@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,496 @@
1
+ import assert from "node:assert/strict";
2
+ import test, { mock } from "node:test";
3
+ import { logger } from "../logger.js";
4
+ import { createTriggerHandler } from "./trigger-handler.js";
5
+ const trigger = {
6
+ id: "trigger-1",
7
+ prompt: "Implement feature",
8
+ runnerType: "CODEX",
9
+ model: "o4-mini",
10
+ status: "PENDING",
11
+ agentConfigId: "agent-1",
12
+ startedAt: null,
13
+ errorMessage: null,
14
+ worktreeError: null,
15
+ lastHeartbeatAt: null,
16
+ conversationId: null,
17
+ parentTriggerId: "parent-1",
18
+ createdByMemberId: "member-1",
19
+ planMode: false,
20
+ targetDaemonId: null,
21
+ claimedByDaemonId: null,
22
+ useWorktree: false,
23
+ baseBranch: null,
24
+ worktreeId: null,
25
+ worktreeStatus: null,
26
+ createdAt: "2026-01-01T00:00:00.000Z",
27
+ updatedAt: "2026-01-01T00:00:00.000Z"
28
+ };
29
+ const runtime = {
30
+ triggerId: "trigger-1",
31
+ agentConfigId: "agent-1",
32
+ authPath: "/auth/path",
33
+ apiKey: "api-key",
34
+ teamId: "team-1",
35
+ projectId: "project-1",
36
+ parentHistoryMarkdown: null,
37
+ useWorktree: false,
38
+ baseBranch: null,
39
+ worktreeId: null
40
+ };
41
+ test.afterEach(() => {
42
+ mock.restoreAll();
43
+ });
44
+ test("createTriggerHandler runs the runner, reports history, and marks success", async () => {
45
+ const clientCalls = [];
46
+ const logEntries = [];
47
+ const discoveredAuthPaths = [];
48
+ const runnerInputs = [];
49
+ const client = {
50
+ fetchTriggerRuntime: async (...args) => {
51
+ clientCalls.push({ method: "fetchTriggerRuntime", args });
52
+ return runtime;
53
+ },
54
+ isTriggerCancelRequested: async (...args) => {
55
+ clientCalls.push({ method: "isTriggerCancelRequested", args });
56
+ return false;
57
+ },
58
+ updateTriggerHistory: async (...args) => {
59
+ clientCalls.push({ method: "updateTriggerHistory", args });
60
+ },
61
+ updateTriggerStatus: async (...args) => {
62
+ clientCalls.push({ method: "updateTriggerStatus", args });
63
+ }
64
+ };
65
+ const runner = {
66
+ run: async (input) => {
67
+ runnerInputs.push({ prompt: input.prompt, authPath: input.authPath });
68
+ input.onStdoutChunk?.("stdout");
69
+ input.onStderrChunk?.("stderr");
70
+ return { exitCode: 0 };
71
+ }
72
+ };
73
+ const handler = createTriggerHandler({
74
+ config: {
75
+ daemonToken: "daemon-token",
76
+ apiUrl: "https://api.example",
77
+ pollingIntervalMs: 5000,
78
+ timeoutMs: 1500,
79
+ idleTimeoutMs: 500,
80
+ runnerCmd: "opencode"
81
+ },
82
+ client: client,
83
+ onAuthPathDiscovered: (authPath) => {
84
+ discoveredAuthPaths.push(authPath);
85
+ }
86
+ }, {
87
+ createRunnerFactory: () => () => runner,
88
+ createLogReporter: () => ({
89
+ start: () => {
90
+ logEntries.push({ level: "START", message: "started" });
91
+ },
92
+ append: (level, message) => {
93
+ logEntries.push({ level, message });
94
+ },
95
+ stop: async () => {
96
+ logEntries.push({ level: "STOP", message: "stopped" });
97
+ }
98
+ }),
99
+ readHistoryFile: async () => "### Summary\n- done\n",
100
+ resolveRunnerHistoryPaths: () => ({
101
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
102
+ parentHistoryPath: "/auth/path/.agentteams/runner/history/parent-1.md"
103
+ })
104
+ });
105
+ await handler(trigger);
106
+ assert.deepEqual(discoveredAuthPaths, ["/auth/path"]);
107
+ assert.equal(runnerInputs.length, 1);
108
+ assert.match(runnerInputs[0]?.prompt ?? "", /Continuation context \(required\)/);
109
+ assert.match(runnerInputs[0]?.prompt ?? "", /Previous history path: \/auth\/path\/\.agentteams\/runner\/history\/parent-1\.md/);
110
+ assert.equal(logEntries.some((entry) => entry.level === "INFO" && entry.message.includes("stdout")), true);
111
+ assert.equal(logEntries.some((entry) => entry.level === "WARN" && entry.message.includes("stderr")), true);
112
+ assert.deepEqual(clientCalls.map((entry) => entry.method), [
113
+ "fetchTriggerRuntime",
114
+ "isTriggerCancelRequested",
115
+ "updateTriggerHistory",
116
+ "updateTriggerStatus"
117
+ ]);
118
+ assert.deepEqual(clientCalls.at(-1)?.args, ["trigger-1", "DONE", undefined]);
119
+ });
120
+ test("createTriggerHandler strips a UTF-8 BOM before reporting history to the database", async () => {
121
+ const clientCalls = [];
122
+ const client = {
123
+ fetchTriggerRuntime: async () => runtime,
124
+ isTriggerCancelRequested: async () => false,
125
+ updateTriggerHistory: async (...args) => {
126
+ clientCalls.push({ method: "updateTriggerHistory", args });
127
+ },
128
+ updateTriggerStatus: async (...args) => {
129
+ clientCalls.push({ method: "updateTriggerStatus", args });
130
+ }
131
+ };
132
+ const handler = createTriggerHandler({
133
+ config: {
134
+ daemonToken: "daemon-token",
135
+ apiUrl: "https://api.example",
136
+ pollingIntervalMs: 5000,
137
+ timeoutMs: 1500,
138
+ idleTimeoutMs: 500,
139
+ runnerCmd: "opencode"
140
+ },
141
+ client: client
142
+ }, {
143
+ createRunnerFactory: () => () => ({
144
+ run: async () => ({ exitCode: 0 })
145
+ }),
146
+ createLogReporter: () => ({
147
+ start: () => undefined,
148
+ append: () => undefined,
149
+ stop: async () => undefined
150
+ }),
151
+ readHistoryFile: async () => "\uFEFF### Summary\n- done\n",
152
+ resolveRunnerHistoryPaths: () => ({
153
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
154
+ parentHistoryPath: "/auth/path/.agentteams/runner/history/parent-1.md"
155
+ })
156
+ });
157
+ await handler(trigger);
158
+ assert.deepEqual(clientCalls.at(0)?.args, ["trigger-1", "### Summary\n- done"]);
159
+ });
160
+ test("createTriggerHandler restores parent history from server-side coaction content", async () => {
161
+ const runnerInputs = [];
162
+ const writtenFiles = [];
163
+ const client = {
164
+ fetchTriggerRuntime: async () => ({
165
+ ...runtime,
166
+ parentHistoryMarkdown: "### Summary\n- restored from coaction\n"
167
+ }),
168
+ isTriggerCancelRequested: async () => false,
169
+ updateTriggerHistory: async () => undefined,
170
+ updateTriggerStatus: async () => undefined
171
+ };
172
+ const handler = createTriggerHandler({
173
+ config: {
174
+ daemonToken: "daemon-token",
175
+ apiUrl: "https://api.example",
176
+ pollingIntervalMs: 5000,
177
+ timeoutMs: 1500,
178
+ idleTimeoutMs: 500,
179
+ runnerCmd: "opencode"
180
+ },
181
+ client: client
182
+ }, {
183
+ createRunnerFactory: () => () => ({
184
+ run: async (input) => {
185
+ runnerInputs.push({ prompt: input.prompt, authPath: input.authPath });
186
+ return { exitCode: 0 };
187
+ }
188
+ }),
189
+ createLogReporter: () => ({
190
+ start: () => undefined,
191
+ append: () => undefined,
192
+ stop: async () => undefined
193
+ }),
194
+ readHistoryFile: async (path) => {
195
+ if (String(path).endsWith("parent-1.md")) {
196
+ throw new Error("ENOENT");
197
+ }
198
+ return "### Summary\n- current\n";
199
+ },
200
+ writeHistoryFile: async (path, content) => {
201
+ writtenFiles.push({ path, content });
202
+ },
203
+ resolveRunnerHistoryPaths: () => ({
204
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
205
+ parentHistoryPath: "/auth/path/.agentteams/runner/history/parent-1.md"
206
+ })
207
+ });
208
+ await handler(trigger);
209
+ assert.equal(runnerInputs.length, 1);
210
+ assert.deepEqual(writtenFiles, [{
211
+ path: "/auth/path/.agentteams/runner/history/parent-1.md",
212
+ content: "### Summary\n- restored from coaction"
213
+ }]);
214
+ });
215
+ test("createTriggerHandler strips a UTF-8 BOM before restoring parent history from the server", async () => {
216
+ const writtenFiles = [];
217
+ const client = {
218
+ fetchTriggerRuntime: async () => ({
219
+ ...runtime,
220
+ parentHistoryMarkdown: "\uFEFF### Summary\n- restored from coaction\n"
221
+ }),
222
+ isTriggerCancelRequested: async () => false,
223
+ updateTriggerHistory: async () => undefined,
224
+ updateTriggerStatus: async () => undefined
225
+ };
226
+ const handler = createTriggerHandler({
227
+ config: {
228
+ daemonToken: "daemon-token",
229
+ apiUrl: "https://api.example",
230
+ pollingIntervalMs: 5000,
231
+ timeoutMs: 1500,
232
+ idleTimeoutMs: 500,
233
+ runnerCmd: "opencode"
234
+ },
235
+ client: client
236
+ }, {
237
+ createRunnerFactory: () => () => ({
238
+ run: async () => ({ exitCode: 0 })
239
+ }),
240
+ createLogReporter: () => ({
241
+ start: () => undefined,
242
+ append: () => undefined,
243
+ stop: async () => undefined
244
+ }),
245
+ readHistoryFile: async () => "### Summary\n- current\n",
246
+ writeHistoryFile: async (path, content) => {
247
+ writtenFiles.push({ path, content });
248
+ },
249
+ resolveRunnerHistoryPaths: () => ({
250
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
251
+ parentHistoryPath: "/auth/path/.agentteams/runner/history/parent-1.md"
252
+ })
253
+ });
254
+ await handler(trigger);
255
+ assert.deepEqual(writtenFiles, [{
256
+ path: "/auth/path/.agentteams/runner/history/parent-1.md",
257
+ content: "### Summary\n- restored from coaction"
258
+ }]);
259
+ });
260
+ test("createTriggerHandler overwrites existing parent history with server cumulative context", async () => {
261
+ const writtenFiles = [];
262
+ const client = {
263
+ fetchTriggerRuntime: async () => ({
264
+ ...runtime,
265
+ parentHistoryMarkdown: "### Summary\n- cumulative from server\n"
266
+ }),
267
+ isTriggerCancelRequested: async () => false,
268
+ updateTriggerHistory: async () => undefined,
269
+ updateTriggerStatus: async () => undefined
270
+ };
271
+ const handler = createTriggerHandler({
272
+ config: {
273
+ daemonToken: "daemon-token",
274
+ apiUrl: "https://api.example",
275
+ pollingIntervalMs: 5000,
276
+ timeoutMs: 1500,
277
+ idleTimeoutMs: 500,
278
+ runnerCmd: "opencode"
279
+ },
280
+ client: client
281
+ }, {
282
+ createRunnerFactory: () => () => ({
283
+ run: async () => ({ exitCode: 0 })
284
+ }),
285
+ createLogReporter: () => ({
286
+ start: () => undefined,
287
+ append: () => undefined,
288
+ stop: async () => undefined
289
+ }),
290
+ readHistoryFile: async () => "### Summary\n- stale local parent history\n",
291
+ writeHistoryFile: async (path, content) => {
292
+ writtenFiles.push({ path, content });
293
+ },
294
+ resolveRunnerHistoryPaths: () => ({
295
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
296
+ parentHistoryPath: "/auth/path/.agentteams/runner/history/parent-1.md"
297
+ })
298
+ });
299
+ await handler(trigger);
300
+ assert.deepEqual(writtenFiles, [{
301
+ path: "/auth/path/.agentteams/runner/history/parent-1.md",
302
+ content: "### Summary\n- cumulative from server"
303
+ }]);
304
+ });
305
+ test("createTriggerHandler reports runner failures and falls back to last output", async () => {
306
+ const clientCalls = [];
307
+ const client = {
308
+ fetchTriggerRuntime: async () => runtime,
309
+ isTriggerCancelRequested: async () => false,
310
+ updateTriggerHistory: async (...args) => {
311
+ clientCalls.push({ method: "updateTriggerHistory", args });
312
+ },
313
+ updateTriggerStatus: async (...args) => {
314
+ clientCalls.push({ method: "updateTriggerStatus", args });
315
+ }
316
+ };
317
+ const handler = createTriggerHandler({
318
+ config: {
319
+ daemonToken: "daemon-token",
320
+ apiUrl: "https://api.example",
321
+ pollingIntervalMs: 5000,
322
+ timeoutMs: 1500,
323
+ idleTimeoutMs: 500,
324
+ runnerCmd: "opencode"
325
+ },
326
+ client: client
327
+ }, {
328
+ createRunnerFactory: () => () => ({
329
+ run: async () => ({ exitCode: 1, lastOutput: "last output" })
330
+ }),
331
+ createLogReporter: () => ({
332
+ start: () => undefined,
333
+ append: () => undefined,
334
+ stop: async () => undefined
335
+ }),
336
+ readHistoryFile: async () => "",
337
+ resolveRunnerHistoryPaths: () => ({
338
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
339
+ parentHistoryPath: null
340
+ })
341
+ });
342
+ await handler({ ...trigger, parentTriggerId: null });
343
+ assert.deepEqual(clientCalls.at(-1)?.args, ["trigger-1", "FAILED", "last output"]);
344
+ });
345
+ test("createTriggerHandler stores stdout as fallback history when the runner omits the history file", async () => {
346
+ const clientCalls = [];
347
+ const writtenFiles = [];
348
+ const client = {
349
+ fetchTriggerRuntime: async () => runtime,
350
+ isTriggerCancelRequested: async () => false,
351
+ updateTriggerHistory: async (...args) => {
352
+ clientCalls.push({ method: "updateTriggerHistory", args });
353
+ },
354
+ updateTriggerStatus: async (...args) => {
355
+ clientCalls.push({ method: "updateTriggerStatus", args });
356
+ }
357
+ };
358
+ const handler = createTriggerHandler({
359
+ config: {
360
+ daemonToken: "daemon-token",
361
+ apiUrl: "https://api.example",
362
+ pollingIntervalMs: 5000,
363
+ timeoutMs: 1500,
364
+ idleTimeoutMs: 500,
365
+ runnerCmd: "opencode"
366
+ },
367
+ client: client
368
+ }, {
369
+ createRunnerFactory: () => () => ({
370
+ run: async () => ({
371
+ exitCode: 0,
372
+ outputText: "agentrunner version 0.0.11"
373
+ })
374
+ }),
375
+ createLogReporter: () => ({
376
+ start: () => undefined,
377
+ append: () => undefined,
378
+ stop: async () => undefined
379
+ }),
380
+ writeHistoryFile: async (path, content) => {
381
+ writtenFiles.push({ path, content });
382
+ },
383
+ readHistoryFile: async () => {
384
+ throw new Error("ENOENT");
385
+ },
386
+ resolveRunnerHistoryPaths: () => ({
387
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
388
+ parentHistoryPath: null
389
+ })
390
+ });
391
+ await handler({ ...trigger, parentTriggerId: null });
392
+ assert.deepEqual(clientCalls.map((entry) => entry.method), [
393
+ "updateTriggerHistory",
394
+ "updateTriggerStatus"
395
+ ]);
396
+ assert.equal(writtenFiles.length, 1);
397
+ assert.equal(writtenFiles[0]?.path, "/auth/path/.agentteams/runner/history/trigger-1.md");
398
+ assert.match(String(clientCalls[0]?.args[1]), /agentrunner version 0\.0\.11/);
399
+ assert.deepEqual(clientCalls.at(-1)?.args, ["trigger-1", "DONE", undefined]);
400
+ });
401
+ test("createTriggerHandler cancels the runner when the server reports a cancel request", async () => {
402
+ const clientCalls = [];
403
+ const client = {
404
+ fetchTriggerRuntime: async () => runtime,
405
+ isTriggerCancelRequested: async (...args) => {
406
+ clientCalls.push({ method: "isTriggerCancelRequested", args });
407
+ return true;
408
+ },
409
+ updateTriggerHistory: async (...args) => {
410
+ clientCalls.push({ method: "updateTriggerHistory", args });
411
+ },
412
+ updateTriggerStatus: async (...args) => {
413
+ clientCalls.push({ method: "updateTriggerStatus", args });
414
+ }
415
+ };
416
+ const handler = createTriggerHandler({
417
+ config: {
418
+ daemonToken: "daemon-token",
419
+ apiUrl: "https://api.example",
420
+ pollingIntervalMs: 5000,
421
+ timeoutMs: 1500,
422
+ idleTimeoutMs: 500,
423
+ runnerCmd: "opencode"
424
+ },
425
+ client: client
426
+ }, {
427
+ createRunnerFactory: () => () => ({
428
+ run: async ({ signal }) => {
429
+ await new Promise((resolve) => {
430
+ signal?.addEventListener("abort", () => resolve(), { once: true });
431
+ if (signal?.aborted) {
432
+ resolve();
433
+ }
434
+ });
435
+ return {
436
+ exitCode: 1,
437
+ cancelled: true,
438
+ errorMessage: "Runner cancelled by user"
439
+ };
440
+ }
441
+ }),
442
+ createLogReporter: () => ({
443
+ start: () => undefined,
444
+ append: () => undefined,
445
+ stop: async () => undefined
446
+ }),
447
+ readHistoryFile: async () => "",
448
+ cancelPollIntervalMs: 1,
449
+ resolveRunnerHistoryPaths: () => ({
450
+ currentHistoryPath: "/auth/path/.agentteams/runner/history/trigger-1.md",
451
+ parentHistoryPath: null
452
+ })
453
+ });
454
+ await handler({ ...trigger, parentTriggerId: null });
455
+ assert.deepEqual(clientCalls.at(-1)?.args, ["trigger-1", "CANCELLED", "Runner cancelled by user"]);
456
+ });
457
+ test("createTriggerHandler marks the trigger as failed when runtime loading throws", async () => {
458
+ const errors = [];
459
+ mock.method(logger, "error", (message, meta) => {
460
+ errors.push({ message, meta });
461
+ });
462
+ const clientCalls = [];
463
+ const client = {
464
+ fetchTriggerRuntime: async () => {
465
+ throw new Error("runtime boom");
466
+ },
467
+ isTriggerCancelRequested: async () => false,
468
+ updateTriggerHistory: async (...args) => {
469
+ clientCalls.push({ method: "updateTriggerHistory", args });
470
+ },
471
+ updateTriggerStatus: async (...args) => {
472
+ clientCalls.push({ method: "updateTriggerStatus", args });
473
+ }
474
+ };
475
+ const handler = createTriggerHandler({
476
+ config: {
477
+ daemonToken: "daemon-token",
478
+ apiUrl: "https://api.example",
479
+ pollingIntervalMs: 5000,
480
+ timeoutMs: 1500,
481
+ idleTimeoutMs: 500,
482
+ runnerCmd: "opencode"
483
+ },
484
+ client: client
485
+ }, {
486
+ createLogReporter: () => ({
487
+ start: () => undefined,
488
+ append: () => undefined,
489
+ stop: async () => undefined
490
+ })
491
+ });
492
+ await handler({ ...trigger, parentTriggerId: null });
493
+ assert.deepEqual(clientCalls.at(-1)?.args, ["trigger-1", "FAILED", "runtime boom"]);
494
+ assert.equal(errors.some((entry) => entry.message === "Trigger handling failed"), true);
495
+ });
496
+ //# sourceMappingURL=trigger-handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-handler.test.js","sourceRoot":"","sources":["../../src/handlers/trigger-handler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from "node:module";
3
+ import { runInitCommand } from "./commands/init.js";
4
+ import { runStartCommand } from "./commands/start.js";
5
+ import { runStatusCommand } from "./commands/status.js";
6
+ import { runStopCommand } from "./commands/stop.js";
7
+ import { runUninstallCommand } from "./commands/uninstall.js";
8
+ import { runCleanupCommand } from "./commands/cleanup.js";
9
+ import { runRestartCommand } from "./commands/restart.js";
10
+ import { runUpdateCommand } from "./commands/update.js";
11
+ import { logger } from "./logger.js";
12
+ const require = createRequire(import.meta.url);
13
+ const packageJson = require("../package.json");
14
+ const daemonVersion = packageJson.version ?? "0.0.0";
15
+ const helpText = `Usage: agentrunner [command] [options]
16
+
17
+ Commands:
18
+ start Start daemon polling (default)
19
+ init --token <token> Initialize daemon config and register autostart
20
+ status Show daemon and autostart status
21
+ stop Stop running daemon
22
+ restart Restart daemon using autostart or background spawn
23
+ update Install latest AgentRunner package and restart
24
+ uninstall Stop daemon, remove autostart, clean up
25
+ cleanup --path <path> Purge expired runner log/history files
26
+
27
+ Options:
28
+ --no-autostart Skip autostart registration (init only)
29
+ -h, --help Show help
30
+ -v, --version Show version
31
+ `;
32
+ const main = async () => {
33
+ const [, , command, ...args] = process.argv;
34
+ if (command === "-h" || command === "--help" || command === "help") {
35
+ process.stdout.write(helpText);
36
+ return;
37
+ }
38
+ if (command === "-v" || command === "--version" || command === "version") {
39
+ process.stdout.write(`${daemonVersion}\n`);
40
+ return;
41
+ }
42
+ if (!command || command === "start") {
43
+ await runStartCommand();
44
+ return;
45
+ }
46
+ if (command === "init") {
47
+ await runInitCommand(args);
48
+ return;
49
+ }
50
+ if (command === "status") {
51
+ await runStatusCommand();
52
+ return;
53
+ }
54
+ if (command === "stop") {
55
+ await runStopCommand();
56
+ return;
57
+ }
58
+ if (command === "restart") {
59
+ await runRestartCommand();
60
+ return;
61
+ }
62
+ if (command === "update") {
63
+ await runUpdateCommand();
64
+ return;
65
+ }
66
+ if (command === "uninstall") {
67
+ await runUninstallCommand();
68
+ return;
69
+ }
70
+ if (command === "cleanup") {
71
+ await runCleanupCommand(args);
72
+ return;
73
+ }
74
+ throw new Error(`Unknown command: ${command}`);
75
+ };
76
+ main().catch((error) => {
77
+ logger.error("Daemon exited with error", {
78
+ error: error instanceof Error ? error.message : String(error)
79
+ });
80
+ process.exit(1);
81
+ });
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const logger: {
2
+ info: (message: string, meta?: Record<string, unknown>) => void;
3
+ warn: (message: string, meta?: Record<string, unknown>) => void;
4
+ error: (message: string, meta?: Record<string, unknown>) => void;
5
+ };
package/dist/logger.js ADDED
@@ -0,0 +1,25 @@
1
+ const timestamp = () => new Date().toISOString();
2
+ export const logger = {
3
+ info: (message, meta) => {
4
+ if (meta) {
5
+ console.log(`[${timestamp()}] INFO ${message}`, meta);
6
+ return;
7
+ }
8
+ console.log(`[${timestamp()}] INFO ${message}`);
9
+ },
10
+ warn: (message, meta) => {
11
+ if (meta) {
12
+ console.warn(`[${timestamp()}] WARN ${message}`, meta);
13
+ return;
14
+ }
15
+ console.warn(`[${timestamp()}] WARN ${message}`);
16
+ },
17
+ error: (message, meta) => {
18
+ if (meta) {
19
+ console.error(`[${timestamp()}] ERROR ${message}`, meta);
20
+ return;
21
+ }
22
+ console.error(`[${timestamp()}] ERROR ${message}`);
23
+ }
24
+ };
25
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEjD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE;QACxD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,UAAU,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE;QACxD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,UAAU,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE;QACzD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,WAAW,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,WAAW,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;CACF,CAAC"}
package/dist/pid.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export declare const writePidFile: () => Promise<void>;
2
+ export declare const readPidFile: () => Promise<number | null>;
3
+ export declare const removePidFile: () => Promise<void>;
4
+ export declare const isProcessRunning: (pid: number) => boolean;
5
+ export declare const getDaemonStatus: () => Promise<{
6
+ running: boolean;
7
+ pid: number | null;
8
+ }>;