Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
import type { AgentRuntimeSettings, AgentRuntimeSettingsInput } from "./api-types";
import { retryableInit } from "./retryable-init";
import { storage } from "./storage";
const RUNTIME_SETTINGS_COLUMNS = `
default_model AS "defaultModel",
supervisor_max_steps AS "supervisorMaxSteps",
specialist_max_steps AS "specialistMaxSteps",
tool_concurrency AS "toolConcurrency",
delegation_context_messages AS "delegationContextMessages",
delegation_result_characters AS "delegationResultCharacters",
max_processor_retries AS "maxProcessorRetries",
final_response_feedback AS "finalResponseFeedback",
delegation_failure_feedback AS "delegationFailureFeedback",
delegation_result_truncation_marker AS "delegationResultTruncationMarker",
task_concurrency AS "taskConcurrency",
task_poll_interval_ms AS "taskPollIntervalMs",
task_timeout_ms AS "taskTimeoutMs",
task_stale_after_ms AS "taskStaleAfterMs",
updated_at::text AS "updatedAt"
`;
export class AgentRuntimeSettingsStore {
readonly storage = storage;
private readonly initializeOnce = retryableInit(() => this.initialize());
init(): Promise<void> {
return this.initializeOnce();
}
private async initialize() {
await this.storage.init();
const schema = await Bun.file(new URL("./agent-runtime-settings.sql", import.meta.url)).text();
await this.storage.db.none(schema);
}
async get(): Promise<AgentRuntimeSettings> {
await this.init();
return this.storage.db.one<AgentRuntimeSettings>(`
SELECT ${RUNTIME_SETTINGS_COLUMNS}
FROM popagent_agent_runtime_settings
WHERE singleton = TRUE
`);
}
async update(input: AgentRuntimeSettingsInput): Promise<AgentRuntimeSettings> {
await this.init();
return this.storage.db.one<AgentRuntimeSettings>(`
UPDATE popagent_agent_runtime_settings
SET default_model = $1,
supervisor_max_steps = $2,
specialist_max_steps = $3,
tool_concurrency = $4,
delegation_context_messages = $5,
delegation_result_characters = $6,
max_processor_retries = $7,
final_response_feedback = $8,
delegation_failure_feedback = $9,
delegation_result_truncation_marker = $10,
task_concurrency = $11,
task_poll_interval_ms = $12,
task_timeout_ms = $13,
task_stale_after_ms = $14,
updated_at = NOW()
WHERE singleton = TRUE
RETURNING ${RUNTIME_SETTINGS_COLUMNS}
`, [
input.defaultModel,
input.supervisorMaxSteps,
input.specialistMaxSteps,
input.toolConcurrency,
input.delegationContextMessages,
input.delegationResultCharacters,
input.maxProcessorRetries,
input.finalResponseFeedback,
input.delegationFailureFeedback,
input.delegationResultTruncationMarker,
input.taskConcurrency,
input.taskPollIntervalMs,
input.taskTimeoutMs,
input.taskStaleAfterMs,
]);
}
}
export const agentRuntimeSettings = new AgentRuntimeSettingsStore();