@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.
- package/dist/api-client.d.ts +22 -0
- package/dist/api-client.js +201 -0
- package/dist/api-client.js.map +1 -0
- package/dist/api-client.test.d.ts +1 -0
- package/dist/api-client.test.js +118 -0
- package/dist/api-client.test.js.map +1 -0
- package/dist/autostart.d.ts +19 -0
- package/dist/autostart.js +359 -0
- package/dist/autostart.js.map +1 -0
- package/dist/autostart.test.d.ts +1 -0
- package/dist/autostart.test.js +42 -0
- package/dist/autostart.test.js.map +1 -0
- package/dist/commands/cleanup.d.ts +1 -0
- package/dist/commands/cleanup.js +12 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +57 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/restart.d.ts +1 -0
- package/dist/commands/restart.js +7 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.js +34 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +20 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +1 -0
- package/dist/commands/stop.js +21 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +21 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.js +58 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/update.test.d.ts +1 -0
- package/dist/commands/update.test.js +104 -0
- package/dist/commands/update.test.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.js +69 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +1 -0
- package/dist/config.test.js +133 -0
- package/dist/config.test.js.map +1 -0
- package/dist/daemon-control.d.ts +21 -0
- package/dist/daemon-control.js +58 -0
- package/dist/daemon-control.js.map +1 -0
- package/dist/daemon-control.test.d.ts +1 -0
- package/dist/daemon-control.test.js +48 -0
- package/dist/daemon-control.test.js.map +1 -0
- package/dist/executable.d.ts +25 -0
- package/dist/executable.js +141 -0
- package/dist/executable.js.map +1 -0
- package/dist/executable.test.d.ts +1 -0
- package/dist/executable.test.js +57 -0
- package/dist/executable.test.js.map +1 -0
- package/dist/handlers/trigger-handler.d.ts +25 -0
- package/dist/handlers/trigger-handler.js +308 -0
- package/dist/handlers/trigger-handler.js.map +1 -0
- package/dist/handlers/trigger-handler.test.d.ts +1 -0
- package/dist/handlers/trigger-handler.test.js +496 -0
- package/dist/handlers/trigger-handler.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +5 -0
- package/dist/logger.js +25 -0
- package/dist/logger.js.map +1 -0
- package/dist/pid.d.ts +8 -0
- package/dist/pid.js +49 -0
- package/dist/pid.js.map +1 -0
- package/dist/poller.d.ts +20 -0
- package/dist/poller.js +214 -0
- package/dist/poller.js.map +1 -0
- package/dist/poller.test.d.ts +1 -0
- package/dist/poller.test.js +382 -0
- package/dist/poller.test.js.map +1 -0
- package/dist/runners/amp.d.ts +5 -0
- package/dist/runners/amp.js +316 -0
- package/dist/runners/amp.js.map +1 -0
- package/dist/runners/claude-code.d.ts +6 -0
- package/dist/runners/claude-code.js +340 -0
- package/dist/runners/claude-code.js.map +1 -0
- package/dist/runners/claude-code.test.d.ts +1 -0
- package/dist/runners/claude-code.test.js +39 -0
- package/dist/runners/claude-code.test.js.map +1 -0
- package/dist/runners/codex.d.ts +6 -0
- package/dist/runners/codex.js +324 -0
- package/dist/runners/codex.js.map +1 -0
- package/dist/runners/codex.test.d.ts +1 -0
- package/dist/runners/codex.test.js +66 -0
- package/dist/runners/codex.test.js.map +1 -0
- package/dist/runners/gemini.d.ts +5 -0
- package/dist/runners/gemini.js +304 -0
- package/dist/runners/gemini.js.map +1 -0
- package/dist/runners/gemini.test.d.ts +1 -0
- package/dist/runners/gemini.test.js +16 -0
- package/dist/runners/gemini.test.js.map +1 -0
- package/dist/runners/index.d.ts +2 -0
- package/dist/runners/index.js +27 -0
- package/dist/runners/index.js.map +1 -0
- package/dist/runners/index.test.d.ts +1 -0
- package/dist/runners/index.test.js +19 -0
- package/dist/runners/index.test.js.map +1 -0
- package/dist/runners/log-reporter.d.ts +18 -0
- package/dist/runners/log-reporter.js +127 -0
- package/dist/runners/log-reporter.js.map +1 -0
- package/dist/runners/log-reporter.test.d.ts +1 -0
- package/dist/runners/log-reporter.test.js +152 -0
- package/dist/runners/log-reporter.test.js.map +1 -0
- package/dist/runners/opencode.d.ts +6 -0
- package/dist/runners/opencode.js +304 -0
- package/dist/runners/opencode.js.map +1 -0
- package/dist/runners/stream-json-parser.d.ts +17 -0
- package/dist/runners/stream-json-parser.js +116 -0
- package/dist/runners/stream-json-parser.js.map +1 -0
- package/dist/runners/types.d.ts +26 -0
- package/dist/runners/types.js +2 -0
- package/dist/runners/types.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/auth-path-store.d.ts +3 -0
- package/dist/utils/auth-path-store.js +37 -0
- package/dist/utils/auth-path-store.js.map +1 -0
- package/dist/utils/auth-path-store.test.d.ts +1 -0
- package/dist/utils/auth-path-store.test.js +70 -0
- package/dist/utils/auth-path-store.test.js.map +1 -0
- package/dist/utils/convention-sync.d.ts +8 -0
- package/dist/utils/convention-sync.js +41 -0
- package/dist/utils/convention-sync.js.map +1 -0
- package/dist/utils/convention-sync.test.d.ts +1 -0
- package/dist/utils/convention-sync.test.js +75 -0
- package/dist/utils/convention-sync.test.js.map +1 -0
- package/dist/utils/git-worktree.d.ts +9 -0
- package/dist/utils/git-worktree.js +150 -0
- package/dist/utils/git-worktree.js.map +1 -0
- package/dist/utils/git-worktree.test.d.ts +1 -0
- package/dist/utils/git-worktree.test.js +294 -0
- package/dist/utils/git-worktree.test.js.map +1 -0
- package/dist/utils/origin-issue-safeguard.d.ts +16 -0
- package/dist/utils/origin-issue-safeguard.js +198 -0
- package/dist/utils/origin-issue-safeguard.js.map +1 -0
- package/dist/utils/runner-cleanup.d.ts +10 -0
- package/dist/utils/runner-cleanup.js +59 -0
- package/dist/utils/runner-cleanup.js.map +1 -0
- package/dist/utils/runner-cleanup.test.d.ts +1 -0
- package/dist/utils/runner-cleanup.test.js +93 -0
- package/dist/utils/runner-cleanup.test.js.map +1 -0
- package/dist/utils/runner-history.d.ts +6 -0
- package/dist/utils/runner-history.js +13 -0
- package/dist/utils/runner-history.js.map +1 -0
- package/dist/utils/runner-history.test.d.ts +1 -0
- package/dist/utils/runner-history.test.js +25 -0
- package/dist/utils/runner-history.test.js.map +1 -0
- package/package.json +50 -0
- package/readme.md +188 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ClaimResult, DaemonInfo, DaemonTrigger, TriggerFinalStatus, TriggerLogInput, TriggerRuntime } from "./types.js";
|
|
2
|
+
export declare class DaemonApiClient {
|
|
3
|
+
private readonly apiUrl;
|
|
4
|
+
private readonly daemonToken;
|
|
5
|
+
constructor(apiUrl: string, daemonToken: string);
|
|
6
|
+
private daemonHeaders;
|
|
7
|
+
private requestWithRetry;
|
|
8
|
+
validateDaemonToken(): Promise<DaemonInfo>;
|
|
9
|
+
fetchPendingTrigger(): Promise<DaemonTrigger | null>;
|
|
10
|
+
claimTrigger(triggerId: string): Promise<ClaimResult>;
|
|
11
|
+
updateTriggerStatus(triggerId: string, status: TriggerFinalStatus, errorMessage?: string): Promise<void>;
|
|
12
|
+
updateTriggerHistory(triggerId: string, historyMarkdown: string): Promise<void>;
|
|
13
|
+
fetchOrphanedCancelRequested(): Promise<string[]>;
|
|
14
|
+
isTriggerCancelRequested(triggerId: string): Promise<boolean>;
|
|
15
|
+
fetchTriggerRuntime(triggerId: string): Promise<TriggerRuntime>;
|
|
16
|
+
reportWorktreeStatus(triggerId: string, status: string, worktreeError?: string): Promise<void>;
|
|
17
|
+
fetchPendingWorktreeRemovals(): Promise<DaemonTrigger[]>;
|
|
18
|
+
appendTriggerLogs(triggerId: string, input: {
|
|
19
|
+
logs?: TriggerLogInput[];
|
|
20
|
+
heartbeat?: boolean;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { logger } from "./logger.js";
|
|
2
|
+
const MAX_NETWORK_RETRIES = 3;
|
|
3
|
+
const BASE_BACKOFF_MS = 1000;
|
|
4
|
+
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
|
+
const isNetworkError = (error) => {
|
|
6
|
+
return error instanceof Error;
|
|
7
|
+
};
|
|
8
|
+
const detectOsType = () => {
|
|
9
|
+
if (process.platform === "darwin") {
|
|
10
|
+
return "MACOS";
|
|
11
|
+
}
|
|
12
|
+
if (process.platform === "linux") {
|
|
13
|
+
return "LINUX";
|
|
14
|
+
}
|
|
15
|
+
if (process.platform === "win32") {
|
|
16
|
+
return "WINDOWS";
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
};
|
|
20
|
+
export class DaemonApiClient {
|
|
21
|
+
apiUrl;
|
|
22
|
+
daemonToken;
|
|
23
|
+
constructor(apiUrl, daemonToken) {
|
|
24
|
+
this.apiUrl = apiUrl;
|
|
25
|
+
this.daemonToken = daemonToken;
|
|
26
|
+
}
|
|
27
|
+
daemonHeaders(options) {
|
|
28
|
+
const headers = {
|
|
29
|
+
"x-daemon-token": this.daemonToken
|
|
30
|
+
};
|
|
31
|
+
if (options?.includeOsType) {
|
|
32
|
+
const osType = detectOsType();
|
|
33
|
+
if (osType) {
|
|
34
|
+
headers["x-os-type"] = osType;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return headers;
|
|
38
|
+
}
|
|
39
|
+
async requestWithRetry(path, options) {
|
|
40
|
+
const url = `${this.apiUrl}${path}`;
|
|
41
|
+
for (let attempt = 0; attempt <= MAX_NETWORK_RETRIES; attempt += 1) {
|
|
42
|
+
try {
|
|
43
|
+
return await fetch(url, options);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!isNetworkError(error) || attempt >= MAX_NETWORK_RETRIES) {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
const retryNumber = attempt + 1;
|
|
50
|
+
const delayMs = BASE_BACKOFF_MS * (2 ** attempt);
|
|
51
|
+
logger.warn(`Retry ${retryNumber}/${MAX_NETWORK_RETRIES}: network error while requesting daemon API`, {
|
|
52
|
+
path,
|
|
53
|
+
delayMs,
|
|
54
|
+
error: error instanceof Error ? error.message : String(error)
|
|
55
|
+
});
|
|
56
|
+
await wait(delayMs);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
throw new Error("Unexpected retry loop exit");
|
|
60
|
+
}
|
|
61
|
+
async validateDaemonToken() {
|
|
62
|
+
const response = await this.requestWithRetry("/api/daemons/me", {
|
|
63
|
+
method: "GET",
|
|
64
|
+
headers: this.daemonHeaders({ includeOsType: true })
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new Error(`Daemon token validation failed (${response.status})`);
|
|
68
|
+
}
|
|
69
|
+
const payload = await response.json();
|
|
70
|
+
return payload.data;
|
|
71
|
+
}
|
|
72
|
+
async fetchPendingTrigger() {
|
|
73
|
+
const response = await this.requestWithRetry("/api/daemon-triggers/pending", {
|
|
74
|
+
method: "GET",
|
|
75
|
+
headers: this.daemonHeaders()
|
|
76
|
+
});
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
throw new Error(`Failed to fetch pending trigger (${response.status})`);
|
|
79
|
+
}
|
|
80
|
+
const payload = await response.json();
|
|
81
|
+
return payload.data;
|
|
82
|
+
}
|
|
83
|
+
async claimTrigger(triggerId) {
|
|
84
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/claim`, {
|
|
85
|
+
method: "PATCH",
|
|
86
|
+
headers: this.daemonHeaders()
|
|
87
|
+
});
|
|
88
|
+
if (response.status === 409) {
|
|
89
|
+
return { ok: false, conflict: true };
|
|
90
|
+
}
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
throw new Error(`Failed to claim trigger (${response.status})`);
|
|
93
|
+
}
|
|
94
|
+
return { ok: true, conflict: false };
|
|
95
|
+
}
|
|
96
|
+
async updateTriggerStatus(triggerId, status, errorMessage) {
|
|
97
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/status`, {
|
|
98
|
+
method: "PATCH",
|
|
99
|
+
headers: {
|
|
100
|
+
...this.daemonHeaders(),
|
|
101
|
+
"Content-Type": "application/json"
|
|
102
|
+
},
|
|
103
|
+
body: JSON.stringify({
|
|
104
|
+
status,
|
|
105
|
+
...(errorMessage ? { errorMessage } : {})
|
|
106
|
+
})
|
|
107
|
+
});
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new Error(`Failed to update trigger status (${response.status})`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async updateTriggerHistory(triggerId, historyMarkdown) {
|
|
113
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/history`, {
|
|
114
|
+
method: "PATCH",
|
|
115
|
+
headers: {
|
|
116
|
+
...this.daemonHeaders(),
|
|
117
|
+
"Content-Type": "application/json"
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({
|
|
120
|
+
historyMarkdown
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
throw new Error(`Failed to update trigger history (${response.status})`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async fetchOrphanedCancelRequested() {
|
|
128
|
+
const response = await this.requestWithRetry("/api/daemon-triggers/orphaned-cancel-requested", {
|
|
129
|
+
method: "GET",
|
|
130
|
+
headers: this.daemonHeaders()
|
|
131
|
+
});
|
|
132
|
+
if (!response.ok) {
|
|
133
|
+
throw new Error(`Failed to fetch orphaned cancel-requested triggers (${response.status})`);
|
|
134
|
+
}
|
|
135
|
+
const payload = await response.json();
|
|
136
|
+
return payload.data;
|
|
137
|
+
}
|
|
138
|
+
async isTriggerCancelRequested(triggerId) {
|
|
139
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/cancel-status/${triggerId}`, {
|
|
140
|
+
method: "GET",
|
|
141
|
+
headers: this.daemonHeaders()
|
|
142
|
+
});
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
throw new Error(`Failed to fetch trigger cancel status (${response.status})`);
|
|
145
|
+
}
|
|
146
|
+
const payload = await response.json();
|
|
147
|
+
return payload.data.cancelRequested;
|
|
148
|
+
}
|
|
149
|
+
async fetchTriggerRuntime(triggerId) {
|
|
150
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/runtime`, {
|
|
151
|
+
method: "GET",
|
|
152
|
+
headers: this.daemonHeaders()
|
|
153
|
+
});
|
|
154
|
+
if (!response.ok) {
|
|
155
|
+
throw new Error(`Failed to fetch trigger runtime (${response.status})`);
|
|
156
|
+
}
|
|
157
|
+
const payload = await response.json();
|
|
158
|
+
return payload.data;
|
|
159
|
+
}
|
|
160
|
+
async reportWorktreeStatus(triggerId, status, worktreeError) {
|
|
161
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/worktree/status`, {
|
|
162
|
+
method: "PATCH",
|
|
163
|
+
headers: {
|
|
164
|
+
...this.daemonHeaders(),
|
|
165
|
+
"Content-Type": "application/json"
|
|
166
|
+
},
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
worktreeStatus: status,
|
|
169
|
+
...(worktreeError ? { worktreeError } : {})
|
|
170
|
+
})
|
|
171
|
+
});
|
|
172
|
+
if (!response.ok) {
|
|
173
|
+
throw new Error(`Failed to report worktree status (${response.status})`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async fetchPendingWorktreeRemovals() {
|
|
177
|
+
const response = await this.requestWithRetry("/api/daemon-triggers/worktree/pending-removal", {
|
|
178
|
+
method: "GET",
|
|
179
|
+
headers: this.daemonHeaders()
|
|
180
|
+
});
|
|
181
|
+
if (!response.ok) {
|
|
182
|
+
throw new Error(`Failed to fetch pending worktree removals (${response.status})`);
|
|
183
|
+
}
|
|
184
|
+
const payload = await response.json();
|
|
185
|
+
return payload.data;
|
|
186
|
+
}
|
|
187
|
+
async appendTriggerLogs(triggerId, input) {
|
|
188
|
+
const response = await this.requestWithRetry(`/api/daemon-triggers/${triggerId}/logs`, {
|
|
189
|
+
method: "POST",
|
|
190
|
+
headers: {
|
|
191
|
+
...this.daemonHeaders(),
|
|
192
|
+
"Content-Type": "application/json"
|
|
193
|
+
},
|
|
194
|
+
body: JSON.stringify(input)
|
|
195
|
+
});
|
|
196
|
+
if (!response.ok) {
|
|
197
|
+
throw new Error(`Failed to append trigger logs (${response.status})`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test, { mock } from "node:test";
|
|
3
|
+
import { DaemonApiClient } from "./api-client.js";
|
|
4
|
+
import { logger } from "./logger.js";
|
|
5
|
+
const originalFetch = globalThis.fetch;
|
|
6
|
+
const originalSetTimeout = globalThis.setTimeout;
|
|
7
|
+
test.afterEach(() => {
|
|
8
|
+
globalThis.fetch = originalFetch;
|
|
9
|
+
globalThis.setTimeout = originalSetTimeout;
|
|
10
|
+
mock.restoreAll();
|
|
11
|
+
});
|
|
12
|
+
test("validateDaemonToken sends daemon header and returns payload data", async () => {
|
|
13
|
+
const calls = [];
|
|
14
|
+
const expectedOsType = process.platform === "darwin"
|
|
15
|
+
? "MACOS"
|
|
16
|
+
: process.platform === "win32"
|
|
17
|
+
? "WINDOWS"
|
|
18
|
+
: process.platform === "linux"
|
|
19
|
+
? "LINUX"
|
|
20
|
+
: undefined;
|
|
21
|
+
globalThis.fetch = (async (url, options) => {
|
|
22
|
+
calls.push({ url: String(url), options });
|
|
23
|
+
return new Response(JSON.stringify({ data: { id: "d1", memberId: "m1", label: null, osType: "MACOS", supportedEngines: ["CODEX"], lastSeenAt: null, createdAt: "c", updatedAt: "u" } }), {
|
|
24
|
+
status: 200,
|
|
25
|
+
headers: { "Content-Type": "application/json" }
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
29
|
+
const result = await client.validateDaemonToken();
|
|
30
|
+
assert.equal(calls.length, 1);
|
|
31
|
+
assert.equal(calls[0]?.url, "https://api.example/api/daemons/me");
|
|
32
|
+
assert.deepEqual(calls[0]?.options?.headers, expectedOsType
|
|
33
|
+
? {
|
|
34
|
+
"x-daemon-token": "daemon-token",
|
|
35
|
+
"x-os-type": expectedOsType
|
|
36
|
+
}
|
|
37
|
+
: {
|
|
38
|
+
"x-daemon-token": "daemon-token"
|
|
39
|
+
});
|
|
40
|
+
assert.equal(result.id, "d1");
|
|
41
|
+
assert.equal(result.osType, "MACOS");
|
|
42
|
+
assert.deepEqual(result.supportedEngines, ["CODEX"]);
|
|
43
|
+
});
|
|
44
|
+
test("claimTrigger returns conflict=false/ok=true on success and conflict=true on 409", async () => {
|
|
45
|
+
const responses = [
|
|
46
|
+
new Response(null, { status: 200 }),
|
|
47
|
+
new Response(null, { status: 409 })
|
|
48
|
+
];
|
|
49
|
+
globalThis.fetch = (async () => responses.shift());
|
|
50
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
51
|
+
assert.deepEqual(await client.claimTrigger("t1"), { ok: true, conflict: false });
|
|
52
|
+
assert.deepEqual(await client.claimTrigger("t2"), { ok: false, conflict: true });
|
|
53
|
+
});
|
|
54
|
+
test("updateTriggerStatus sends JSON payload including optional error message", async () => {
|
|
55
|
+
const calls = [];
|
|
56
|
+
globalThis.fetch = (async (_url, options) => {
|
|
57
|
+
calls.push(options);
|
|
58
|
+
return new Response(null, { status: 200 });
|
|
59
|
+
});
|
|
60
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
61
|
+
await client.updateTriggerStatus("t1", "FAILED", "boom");
|
|
62
|
+
assert.equal(calls.length, 1);
|
|
63
|
+
assert.deepEqual(JSON.parse(String(calls[0]?.body)), {
|
|
64
|
+
status: "FAILED",
|
|
65
|
+
errorMessage: "boom"
|
|
66
|
+
});
|
|
67
|
+
assert.equal((calls[0]?.headers)["Content-Type"], "application/json");
|
|
68
|
+
});
|
|
69
|
+
test("reportWorktreeStatus sends JSON payload including optional worktree error", async () => {
|
|
70
|
+
const calls = [];
|
|
71
|
+
globalThis.fetch = (async (_url, options) => {
|
|
72
|
+
calls.push(options);
|
|
73
|
+
return new Response(null, { status: 200 });
|
|
74
|
+
});
|
|
75
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
76
|
+
await client.reportWorktreeStatus("t1", "FAILED", "worktree missing");
|
|
77
|
+
assert.equal(calls.length, 1);
|
|
78
|
+
assert.deepEqual(JSON.parse(String(calls[0]?.body)), {
|
|
79
|
+
worktreeStatus: "FAILED",
|
|
80
|
+
worktreeError: "worktree missing"
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
test("appendTriggerLogs throws when the API responds with an error", async () => {
|
|
84
|
+
globalThis.fetch = (async () => new Response(null, { status: 500 }));
|
|
85
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
86
|
+
await assert.rejects(() => client.appendTriggerLogs("t1", { heartbeat: true }), /Failed to append trigger logs \(500\)/);
|
|
87
|
+
});
|
|
88
|
+
test("requestWithRetry retries network failures with exponential backoff and warning logs", async () => {
|
|
89
|
+
const warnings = [];
|
|
90
|
+
mock.method(logger, "warn", (message, meta) => {
|
|
91
|
+
warnings.push({ message, meta });
|
|
92
|
+
});
|
|
93
|
+
const delays = [];
|
|
94
|
+
globalThis.setTimeout = ((callback, delay) => {
|
|
95
|
+
delays.push(delay ?? 0);
|
|
96
|
+
callback();
|
|
97
|
+
return 0;
|
|
98
|
+
});
|
|
99
|
+
let attempt = 0;
|
|
100
|
+
globalThis.fetch = (async () => {
|
|
101
|
+
attempt += 1;
|
|
102
|
+
if (attempt < 3) {
|
|
103
|
+
throw new Error(`network-${attempt}`);
|
|
104
|
+
}
|
|
105
|
+
return new Response(JSON.stringify({ data: null }), {
|
|
106
|
+
status: 200,
|
|
107
|
+
headers: { "Content-Type": "application/json" }
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
const client = new DaemonApiClient("https://api.example", "daemon-token");
|
|
111
|
+
const result = await client.fetchPendingTrigger();
|
|
112
|
+
assert.equal(result, null);
|
|
113
|
+
assert.deepEqual(delays, [1000, 2000]);
|
|
114
|
+
assert.equal(warnings.length, 2);
|
|
115
|
+
assert.match(warnings[0]?.message ?? "", /Retry 1\/3/);
|
|
116
|
+
assert.equal(warnings[1]?.meta?.delayMs, 2000);
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=api-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../src/api-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const buildPlistContent: (config: AutostartConfig) => string;
|
|
2
|
+
export declare const buildSystemdContent: (config: AutostartConfig) => string;
|
|
3
|
+
export declare const buildWindowsVbsContent: (config: AutostartConfig, daemonPath?: string) => string;
|
|
4
|
+
export type AutostartConfig = {
|
|
5
|
+
token: string;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
};
|
|
8
|
+
export type AutostartResult = {
|
|
9
|
+
registered: boolean;
|
|
10
|
+
servicePath: string;
|
|
11
|
+
platform: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const registerAutostart: (config: AutostartConfig) => Promise<AutostartResult>;
|
|
14
|
+
export declare const unregisterAutostart: () => Promise<void>;
|
|
15
|
+
export declare const restartAutostartService: () => Promise<void>;
|
|
16
|
+
export declare const getAutostartStatus: () => {
|
|
17
|
+
registered: boolean;
|
|
18
|
+
platform: string;
|
|
19
|
+
};
|