@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
package/dist/pid.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { chmodSync, promises as fs } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const PID_FILE_PATH = join(homedir(), ".agentteams", "daemon.pid");
|
|
5
|
+
export const writePidFile = async () => {
|
|
6
|
+
await fs.mkdir(dirname(PID_FILE_PATH), { recursive: true });
|
|
7
|
+
await fs.writeFile(PID_FILE_PATH, String(process.pid), "utf8");
|
|
8
|
+
chmodSync(PID_FILE_PATH, 0o600);
|
|
9
|
+
};
|
|
10
|
+
export const readPidFile = async () => {
|
|
11
|
+
try {
|
|
12
|
+
const content = await fs.readFile(PID_FILE_PATH, "utf8");
|
|
13
|
+
const pid = Number(content.trim());
|
|
14
|
+
return Number.isFinite(pid) && pid > 0 ? pid : null;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export const removePidFile = async () => {
|
|
21
|
+
try {
|
|
22
|
+
await fs.unlink(PID_FILE_PATH);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// File may not exist — that's fine.
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export const isProcessRunning = (pid) => {
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const getDaemonStatus = async () => {
|
|
38
|
+
const pid = await readPidFile();
|
|
39
|
+
if (pid === null) {
|
|
40
|
+
return { running: false, pid: null };
|
|
41
|
+
}
|
|
42
|
+
if (isProcessRunning(pid)) {
|
|
43
|
+
return { running: true, pid };
|
|
44
|
+
}
|
|
45
|
+
// Stale PID file — process no longer exists.
|
|
46
|
+
await removePidFile();
|
|
47
|
+
return { running: false, pid: null };
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=pid.js.map
|
package/dist/pid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pid.js","sourceRoot":"","sources":["../src/pid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAmB,EAAE;IACpD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAA4B,EAAE;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAmB,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAW,EAAE;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAuD,EAAE;IAC3F,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAEhC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,6CAA6C;IAC7C,MAAM,aAAa,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC,CAAC"}
|
package/dist/poller.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DaemonApiClient } from "./api-client.js";
|
|
2
|
+
import { removeWorktree } from "./utils/git-worktree.js";
|
|
3
|
+
import type { DaemonTrigger, RuntimeConfig } from "./types.js";
|
|
4
|
+
type TriggerHandlerFactory = (onAuthPathDiscovered: (authPath: string) => void) => (trigger: DaemonTrigger) => Promise<void>;
|
|
5
|
+
type PollingDependencies = {
|
|
6
|
+
createClient?: (config: RuntimeConfig) => Pick<DaemonApiClient, "fetchPendingTrigger" | "claimTrigger" | "fetchOrphanedCancelRequested" | "updateTriggerStatus" | "fetchPendingWorktreeRemovals" | "reportWorktreeStatus">;
|
|
7
|
+
runCleanup?: (authPath: string) => Promise<void>;
|
|
8
|
+
runConventionSync?: (authPath: string) => Promise<void>;
|
|
9
|
+
removeWorktree?: typeof removeWorktree;
|
|
10
|
+
setInterval?: typeof global.setInterval;
|
|
11
|
+
clearInterval?: typeof global.clearInterval;
|
|
12
|
+
processOn?: (event: NodeJS.Signals, listener: () => void) => void;
|
|
13
|
+
processExit?: (code: number) => never;
|
|
14
|
+
now?: () => number;
|
|
15
|
+
keepAlive?: () => Promise<void>;
|
|
16
|
+
loadAuthPaths?: () => string[];
|
|
17
|
+
saveAuthPath?: (authPath: string) => string;
|
|
18
|
+
};
|
|
19
|
+
export declare const startPolling: (config: RuntimeConfig, createHandler: TriggerHandlerFactory, dependencies?: PollingDependencies) => Promise<void>;
|
|
20
|
+
export {};
|
package/dist/poller.js
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { logger } from "./logger.js";
|
|
2
|
+
import { DaemonApiClient } from "./api-client.js";
|
|
3
|
+
import { runCleanup } from "./utils/runner-cleanup.js";
|
|
4
|
+
import { runConventionSync } from "./utils/convention-sync.js";
|
|
5
|
+
import { loadAuthPaths, saveAuthPath } from "./utils/auth-path-store.js";
|
|
6
|
+
import { removeWorktree, resolveWorktreePath } from "./utils/git-worktree.js";
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
const CLEANUP_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
const CONVENTION_SYNC_INTERVAL_MS = 60 * 60 * 1000;
|
|
10
|
+
export const startPolling = async (config, createHandler, dependencies = {}) => {
|
|
11
|
+
const client = dependencies.createClient?.(config) ?? new DaemonApiClient(config.apiUrl, config.daemonToken);
|
|
12
|
+
const cleanupRunner = dependencies.runCleanup ?? runCleanup;
|
|
13
|
+
const conventionSync = dependencies.runConventionSync ?? runConventionSync;
|
|
14
|
+
const removeWorktreeFn = dependencies.removeWorktree ?? removeWorktree;
|
|
15
|
+
const now = dependencies.now ?? Date.now;
|
|
16
|
+
const registerInterval = dependencies.setInterval ?? global.setInterval;
|
|
17
|
+
const unregisterInterval = dependencies.clearInterval ?? global.clearInterval;
|
|
18
|
+
const registerSignal = dependencies.processOn ?? ((event, listener) => process.on(event, listener));
|
|
19
|
+
const exitProcess = dependencies.processExit ?? ((code) => process.exit(code));
|
|
20
|
+
const keepAlive = dependencies.keepAlive ?? (() => new Promise(() => {
|
|
21
|
+
// Keep process alive until shutdown signal.
|
|
22
|
+
}));
|
|
23
|
+
const loadPersistedAuthPaths = dependencies.loadAuthPaths ?? loadAuthPaths;
|
|
24
|
+
const persistAuthPath = dependencies.saveAuthPath ?? saveAuthPath;
|
|
25
|
+
let isPolling = false;
|
|
26
|
+
const knownAuthPaths = new Set(loadPersistedAuthPaths());
|
|
27
|
+
let lastCleanupAt = 0;
|
|
28
|
+
const lastConventionSyncAt = new Map();
|
|
29
|
+
const onAuthPathDiscovered = (authPath) => {
|
|
30
|
+
if (knownAuthPaths.has(authPath)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
knownAuthPaths.add(authPath);
|
|
34
|
+
try {
|
|
35
|
+
persistAuthPath(authPath);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
logger.warn("Failed to persist auth path", {
|
|
39
|
+
authPath,
|
|
40
|
+
error: error instanceof Error ? error.message : String(error)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const onTrigger = createHandler(onAuthPathDiscovered);
|
|
45
|
+
const maybeRunCleanup = () => {
|
|
46
|
+
const currentTime = now();
|
|
47
|
+
if (currentTime - lastCleanupAt < CLEANUP_INTERVAL_MS) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
lastCleanupAt = currentTime;
|
|
51
|
+
for (const authPath of knownAuthPaths) {
|
|
52
|
+
void cleanupRunner(authPath).catch((error) => {
|
|
53
|
+
logger.warn("Scheduled cleanup failed", {
|
|
54
|
+
authPath,
|
|
55
|
+
error: error instanceof Error ? error.message : String(error)
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const maybeRunConventionSync = () => {
|
|
61
|
+
const currentTime = now();
|
|
62
|
+
for (const authPath of knownAuthPaths) {
|
|
63
|
+
const lastSync = lastConventionSyncAt.get(authPath) ?? 0;
|
|
64
|
+
if (currentTime - lastSync < CONVENTION_SYNC_INTERVAL_MS) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
lastConventionSyncAt.set(authPath, currentTime);
|
|
68
|
+
void conventionSync(authPath).catch((error) => {
|
|
69
|
+
logger.warn("Scheduled convention sync failed", {
|
|
70
|
+
authPath,
|
|
71
|
+
error: error instanceof Error ? error.message : String(error),
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const autoCancelOrphanedTriggers = async () => {
|
|
77
|
+
try {
|
|
78
|
+
const triggerIds = await client.fetchOrphanedCancelRequested();
|
|
79
|
+
for (const triggerId of triggerIds) {
|
|
80
|
+
try {
|
|
81
|
+
await client.updateTriggerStatus(triggerId, "CANCELLED", "Automatically cancelled: runner is no longer active");
|
|
82
|
+
logger.info("Auto-cancelled orphaned trigger", { triggerId });
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.warn("Failed to auto-cancel orphaned trigger", {
|
|
86
|
+
triggerId,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error)
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.warn("Failed to fetch orphaned cancel-requested triggers", {
|
|
94
|
+
error: error instanceof Error ? error.message : String(error)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const processWorktreeRemovals = async () => {
|
|
99
|
+
try {
|
|
100
|
+
const triggers = await client.fetchPendingWorktreeRemovals();
|
|
101
|
+
for (const trigger of triggers) {
|
|
102
|
+
try {
|
|
103
|
+
let removeSucceeded = false;
|
|
104
|
+
const effectiveWorktreeId = trigger.worktreeId ?? trigger.id;
|
|
105
|
+
let matchedAuthPath = false;
|
|
106
|
+
for (const authPath of knownAuthPaths) {
|
|
107
|
+
const worktreePath = resolveWorktreePath(authPath, effectiveWorktreeId);
|
|
108
|
+
if (!existsSync(worktreePath)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
matchedAuthPath = true;
|
|
112
|
+
try {
|
|
113
|
+
removeWorktreeFn(authPath, worktreePath, effectiveWorktreeId);
|
|
114
|
+
removeSucceeded = true;
|
|
115
|
+
logger.info("Worktree removed for trigger", { triggerId: trigger.id, worktreePath });
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const worktreeError = error instanceof Error ? error.message : String(error);
|
|
120
|
+
logger.warn("Failed to remove worktree for trigger", {
|
|
121
|
+
triggerId: trigger.id,
|
|
122
|
+
authPath,
|
|
123
|
+
worktreePath,
|
|
124
|
+
error: worktreeError
|
|
125
|
+
});
|
|
126
|
+
await client.reportWorktreeStatus(trigger.id, "FAILED", worktreeError);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (removeSucceeded) {
|
|
131
|
+
await client.reportWorktreeStatus(trigger.id, "REMOVED");
|
|
132
|
+
}
|
|
133
|
+
else if (!matchedAuthPath) {
|
|
134
|
+
const worktreeError = `Failed to remove RunnerBox: worktree path was not found for ${effectiveWorktreeId}`;
|
|
135
|
+
logger.warn("Could not find authPath for worktree removal", {
|
|
136
|
+
triggerId: trigger.id,
|
|
137
|
+
worktreeId: effectiveWorktreeId
|
|
138
|
+
});
|
|
139
|
+
await client.reportWorktreeStatus(trigger.id, "FAILED", worktreeError);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
logger.warn("Failed to remove worktree for trigger", {
|
|
144
|
+
triggerId: trigger.id,
|
|
145
|
+
error: error instanceof Error ? error.message : String(error)
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.warn("Failed to fetch pending worktree removals", {
|
|
152
|
+
error: error instanceof Error ? error.message : String(error)
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
const pollOnce = async () => {
|
|
157
|
+
if (isPolling) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
isPolling = true;
|
|
161
|
+
try {
|
|
162
|
+
maybeRunCleanup();
|
|
163
|
+
maybeRunConventionSync();
|
|
164
|
+
await autoCancelOrphanedTriggers();
|
|
165
|
+
await processWorktreeRemovals();
|
|
166
|
+
const pending = await client.fetchPendingTrigger();
|
|
167
|
+
if (!pending) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const claim = await client.claimTrigger(pending.id);
|
|
171
|
+
if (claim.conflict) {
|
|
172
|
+
logger.info("Trigger already claimed by another daemon", { triggerId: pending.id });
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!claim.ok) {
|
|
176
|
+
logger.warn("Claim was rejected", { triggerId: pending.id });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
void onTrigger(pending).catch((error) => {
|
|
180
|
+
logger.error("Trigger handler execution failed", {
|
|
181
|
+
triggerId: pending.id,
|
|
182
|
+
error: error instanceof Error ? error.message : String(error)
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger.error("Polling cycle failed", {
|
|
188
|
+
error: error instanceof Error ? error.message : String(error)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
isPolling = false;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const interval = registerInterval(() => {
|
|
196
|
+
void pollOnce();
|
|
197
|
+
}, config.pollingIntervalMs);
|
|
198
|
+
logger.info("Daemon polling started", {
|
|
199
|
+
apiUrl: config.apiUrl,
|
|
200
|
+
pollingIntervalMs: config.pollingIntervalMs,
|
|
201
|
+
timeoutMs: config.timeoutMs,
|
|
202
|
+
runnerCmd: config.runnerCmd
|
|
203
|
+
});
|
|
204
|
+
await pollOnce();
|
|
205
|
+
const shutdown = () => {
|
|
206
|
+
unregisterInterval(interval);
|
|
207
|
+
logger.info("Daemon stopped");
|
|
208
|
+
exitProcess(0);
|
|
209
|
+
};
|
|
210
|
+
registerSignal("SIGINT", shutdown);
|
|
211
|
+
registerSignal("SIGTERM", shutdown);
|
|
212
|
+
await keepAlive();
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|