mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-04-18 05:47:31 -04:00
* feat(agent): add standalone agent runtime * fix(agent): add Bun and DOM types to agent tsconfig * refactor: wrap backup error in a tagged effect error * feat(controller): add agent manager and session handling * feat(backups): execute backups through the agent * fix(agent): harden disconnect and send-failure handling * fix: rebase conflicts * test: simplify mocks * refactor: split agent runtime state * fix(backup): keep old path when agent is disabled * fix: pr feedbacks
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import { createAgentRuntimeState, type AgentRuntimeState } from "./runtime-state";
|
|
|
|
type LegacyAgentRuntimeState = Omit<AgentRuntimeState, "activeBackupsByScheduleId" | "activeBackupScheduleIdsByJobId"> &
|
|
Partial<Pick<AgentRuntimeState, "activeBackupsByScheduleId" | "activeBackupScheduleIdsByJobId">>;
|
|
|
|
export type ProcessWithAgentRuntime = NodeJS.Process & {
|
|
__zerobyteAgentRuntime?: LegacyAgentRuntimeState;
|
|
};
|
|
|
|
const hasActiveBackupMaps = (runtime: LegacyAgentRuntimeState): runtime is AgentRuntimeState => {
|
|
return runtime.activeBackupsByScheduleId instanceof Map && runtime.activeBackupScheduleIdsByJobId instanceof Map;
|
|
};
|
|
|
|
const hydrateAgentRuntimeState = (runtime: LegacyAgentRuntimeState): AgentRuntimeState => ({
|
|
...runtime,
|
|
activeBackupsByScheduleId: runtime.activeBackupsByScheduleId ?? new Map(),
|
|
activeBackupScheduleIdsByJobId: runtime.activeBackupScheduleIdsByJobId ?? new Map(),
|
|
});
|
|
|
|
export const getDevAgentRuntimeState = (): AgentRuntimeState => {
|
|
// Bun reloads modules in place during development, so keep the live runtime on process.
|
|
const runtimeProcess = process as ProcessWithAgentRuntime;
|
|
const existingRuntime = runtimeProcess.__zerobyteAgentRuntime;
|
|
if (!existingRuntime) {
|
|
const runtime = createAgentRuntimeState();
|
|
runtimeProcess.__zerobyteAgentRuntime = runtime;
|
|
return runtime;
|
|
}
|
|
|
|
if (hasActiveBackupMaps(existingRuntime)) {
|
|
return existingRuntime;
|
|
}
|
|
|
|
const runtime = hydrateAgentRuntimeState(existingRuntime);
|
|
runtimeProcess.__zerobyteAgentRuntime = runtime;
|
|
return runtime;
|
|
};
|