Codemod db pass-through calls: messages + runs + approvals + company (C1 part 2/3)

Rewrite ~376 call sites for messages, runs, approvalsMod, and company
domains and delete the corresponding pass-through methods on
AppDatabase / AppDatabaseBase. Structural type references
(ReturnType<HandlerDeps["db"]["getRun"]>) and SweepStaleReviewsDeps-style
mocks are updated to route through the owning sub-module.
This commit is contained in:
ZacharyZhang-NY committed 2026-04-20 13:20:15 -04:00
1 parent 5e9b7acbc6
commit a69fbb053b
86 files changed
+393 -454

No files matched your search

+6 -6
View File
@@ -66,7 +66,7 @@ export function createHeartbeat(
const isMessageWake = trigger === "message";
const isCommunicationWake = isMessageWake || trigger === "peer_request";
if (!hasWorkerReady()) return SKIPPED("worker_not_ready");
const companyStatus = db.getCompanyStatus(companyId);
const companyStatus = db.company.getCompanyStatus(companyId);
if (companyStatus !== "active") return SKIPPED("company_inactive");
const agent = db.entityCrud.getAgent(agentId);
if (agent.companyId !== companyId) {
@@ -131,8 +131,8 @@ export function createHeartbeat(
}
if (db.agents.isAgentPendingApproval(agentId)) return SKIPPED("pending_approval");
const companyMode = db.getCompanyExecutionMode(companyId);
const approvalSettings = db.getCompanyApprovalSettings(companyId);
const companyMode = db.company.getCompanyExecutionMode(companyId);
const approvalSettings = db.company.getCompanyApprovalSettings(companyId);
const shouldEnforceHumanReview =
companyMode === "ai_cofounder" || approvalSettings?.reviewDeliverables === true;
@@ -207,7 +207,7 @@ export function createHeartbeat(
`[heartbeat] Workspace resolution for ${agent.name}: task.workspaceId=${task?.workspaceId ?? "null"}, agent.workspaceId=${agent.workspaceId ?? "null"}, projectId=${task?.projectId ?? "null"}, source=${workspaceResolution.source}, mode=${workspaceResolution.lockMode}, resolved=${workspace?.name ?? "NONE"}, localPath=${workspace?.localPath ?? "NONE"}`,
);
const run = db.createRun({
const run = db.runs.createRun({
id: runId,
companyId,
taskId: task?.id ?? null,
@@ -216,7 +216,7 @@ export function createHeartbeat(
connectorId: connector.id,
});
const companyBasic = db.getCompanyBasic(companyId);
const companyBasic = db.company.getCompanyBasic(companyId);
dispatchRunToWorker({
runId: run.id,
companyId,
@@ -238,7 +238,7 @@ export function createHeartbeat(
try {
const actorType = trigger === "timer" || trigger === "bootstrap" ? "system" : "agent";
const actorId = trigger === "timer" || trigger === "bootstrap" ? null : trigger;
db.updateRunActor(run.id, actorType, actorId);
db.runs.updateRunActor(run.id, actorType, actorId);
} catch (error) {
logger.warn(
`[heartbeat] updateRunActor failed for run ${run.id}: ${error instanceof Error ? error.message : String(error)}`,
+1 -1
View File
@@ -8,7 +8,7 @@ export function createOrchestrationService(deps: OrchestrationDependencies) {
const { db } = deps;
function hasActiveRun(filter: { taskId?: string; agentId?: string; companyId: string }) {
return db.hasActiveRun(filter);
return db.runs.hasActiveRun(filter);
}
const runDispatch = createRunDispatch(deps);
+1 -1
View File
@@ -44,7 +44,7 @@ export function resolveInitialUserTurn(
}
if (trigger === "message" || trigger === "peer_request") {
const unread = deps.db.listAgentInboxUnread(companyId, agentId);
const unread = deps.db.messages.listAgentInboxUnread(companyId, agentId);
if (unread.length > 0) {
return buildCommunicationTurn(trigger, unread, deps.db);
}
+1 -1
View File
@@ -83,7 +83,7 @@ export function createRunDispatch(deps: OrchestrationDependencies) {
params.workspace &&
!db.claimWorkspaceLock(params.workspace.id, params.runId)
) {
db.finishRun({
db.runs.finishRun({
runId: params.runId,
status: "cancelled",
summary: null,
@@ -67,7 +67,7 @@ export function createHeartbeatScheduler(
try {
if (isQuitting() || !hasWorkerReady()) return;
const activeCompanies = db.listActiveCompanyIds();
const activeCompanies = db.company.listActiveCompanyIds();
const now = Date.now();
for (const company of activeCompanies) {
@@ -27,7 +27,7 @@ export function createHousekeepingScheduler(
try {
if (isQuitting() || !hasWorkerReady()) return;
const activeCompanies = db.listActiveCompanyIds();
const activeCompanies = db.company.listActiveCompanyIds();
for (const company of activeCompanies) {
try {
@@ -52,7 +52,7 @@ export function createHousekeepingScheduler(
dispatchAgentMessage,
resolveApprovalDecision,
notify,
getCompanyExecutionMode: (cId: string) => db.getCompanyExecutionMode(cId),
getCompanyExecutionMode: (cId: string) => db.company.getCompanyExecutionMode(cId),
handleTaskStatusChange: (taskId: string, cId: string, previousStatus: string, newStatus: string) => {
deps.dispatchAutomation("task_status_changed", { companyId: cId, taskId, previousStatus, newStatus });
publishDomainChanged();
@@ -12,7 +12,7 @@ export function createIdleAutomationScheduler(deps: OrchestrationDependencies) {
try {
if (isQuitting() || !hasWorkerReady()) return;
const activeCompanies = db.listActiveCompanyIds();
const activeCompanies = db.company.listActiveCompanyIds();
const now = Date.now();
for (const company of activeCompanies) {
+6 -6
View File
@@ -38,7 +38,7 @@ export function createTaskRunner(
return fail("WORKER_UNAVAILABLE", "Orchestration worker is not ready.");
}
const task = db.entityCrud.getTask(taskId);
const companyStatus = db.getCompanyStatus(task.companyId);
const companyStatus = db.company.getCompanyStatus(task.companyId);
if (companyStatus !== "active") {
return fail("COMPANY_NOT_ACTIVE", "Runs can only start while the company is active.");
}
@@ -78,7 +78,7 @@ export function createTaskRunner(
if (db.agents.isAgentPendingApproval(agent.id)) {
return fail("AGENT_PENDING_APPROVAL", "This agent is pending hire approval and cannot run tasks.");
}
const blockingApproval = db.getBlockingApproval(task.companyId, agent.id, task.id);
const blockingApproval = db.approvalsMod.getBlockingApproval(task.companyId, agent.id, task.id);
if (blockingApproval) {
return fail(
"APPROVAL_GATE_BLOCKED",
@@ -99,7 +99,7 @@ export function createTaskRunner(
return fail("WORKSPACE_COMPANY_MISMATCH", "The selected workspace does not belong to the task company.");
}
const run = db.createRun({
const run = db.runs.createRun({
id: runId,
companyId: task.companyId,
taskId: task.id,
@@ -108,7 +108,7 @@ export function createTaskRunner(
connectorId: connector.id,
});
const companyBasic = db.getCompanyBasic(task.companyId);
const companyBasic = db.company.getCompanyBasic(task.companyId);
dispatchRunToWorker({
runId: run.id,
companyId: task.companyId,
@@ -163,7 +163,7 @@ export function createTaskRunner(
const snapshot = db.listSnapshot();
const companiesById = new Map(snapshot.companies.map((company) => [company.id, company]));
for (const run of db.listQueuedRuns()) {
for (const run of db.runs.listQueuedRuns()) {
const company = companiesById.get(run.companyId);
if (!company || company.status !== "active") {
continue;
@@ -186,7 +186,7 @@ export function createTaskRunner(
const eligibilityFailure = getRunEligibilityFailure(agent, connector, task?.projectId ?? null);
if (eligibilityFailure) {
if (eligibilityFailure === "CONNECTOR_MODEL_NOT_ALLOWED") {
db.finishRun({
db.runs.finishRun({
runId: run.id,
status: "failed",
summary: "Queued run rejected during recovery because the agent model is disabled or invalid for its connector.",
+2 -2
View File
@@ -288,7 +288,7 @@ export function buildRunPayload(params: RunDispatchParams, deps: TurnContextDeps
task,
companyName,
locale: snapshot.locale,
executionMode: db.getCompanyExecutionMode(companyId) as ExecutionMode,
executionMode: db.company.getCompanyExecutionMode(companyId) as ExecutionMode,
goals: snapshot.goals.filter((goal) => goal.companyId === companyId),
projects: snapshot.projects.filter((project) => project.companyId === companyId),
directReports: db.agents.getDirectReports(agent.id, companyId),
@@ -354,7 +354,7 @@ export function buildRunPayload(params: RunDispatchParams, deps: TurnContextDeps
systemPrompt,
trigger,
taskSessionId: taskSessionId ?? runId,
executionMode: db.getCompanyExecutionMode(companyId) as "ai_ceo" | "ai_cofounder",
executionMode: db.company.getCompanyExecutionMode(companyId) as "ai_ceo" | "ai_cofounder",
initialUserTurn,
};
}