66 lines
2.3 KiB
TypeScript
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;
|
|
}
|