Files
ai_ops/src/agents/runtime.ts

66 lines
2.3 KiB
TypeScript

import { getConfig, loadConfig, type AppConfig } from "../config.js";
import { AgentManager, type AgentManagerLimits } from "./manager.js";
import {
createDefaultResourceProvisioningOrchestrator,
type BuiltInProvisioningConfigInput,
type ResourceProvisioningOrchestrator,
} from "./provisioning.js";
function toProvisioningConfig(input: Readonly<AppConfig>): BuiltInProvisioningConfigInput {
return {
gitWorktree: {
rootDirectory: input.provisioning.gitWorktree.rootDirectory,
baseRef: input.provisioning.gitWorktree.baseRef,
targetPath: input.provisioning.gitWorktree.targetPath,
},
portRange: {
basePort: input.provisioning.portRange.basePort,
blockSize: input.provisioning.portRange.blockSize,
blockCount: input.provisioning.portRange.blockCount,
primaryPortOffset: input.provisioning.portRange.primaryPortOffset,
lockDirectory: input.provisioning.portRange.lockDirectory,
},
};
}
export function loadAgentManagerLimitsFromEnv(env: NodeJS.ProcessEnv = process.env): AgentManagerLimits {
const config = loadConfig(env);
return {
maxConcurrentAgents: config.agentManager.maxConcurrentAgents,
maxSessionAgents: config.agentManager.maxSessionAgents,
maxRecursiveDepth: config.agentManager.maxRecursiveDepth,
};
}
let managerSingleton: AgentManager | undefined;
let provisioningSingleton: ResourceProvisioningOrchestrator | undefined;
export function getAgentManager(config: Readonly<AppConfig> = getConfig()): AgentManager {
if (!managerSingleton) {
managerSingleton = new AgentManager({
maxConcurrentAgents: config.agentManager.maxConcurrentAgents,
maxSessionAgents: config.agentManager.maxSessionAgents,
maxRecursiveDepth: config.agentManager.maxRecursiveDepth,
});
}
return managerSingleton;
}
export function loadProvisioningConfigFromEnv(
env: NodeJS.ProcessEnv = process.env,
): BuiltInProvisioningConfigInput {
return toProvisioningConfig(loadConfig(env));
}
export function getResourceProvisioningOrchestrator(
config: Readonly<AppConfig> = getConfig(),
): ResourceProvisioningOrchestrator {
if (!provisioningSingleton) {
provisioningSingleton = createDefaultResourceProvisioningOrchestrator(
toProvisioningConfig(config),
);
}
return provisioningSingleton;
}