import { pgTable, uuid, text, timestamp, jsonb, index, integer, bigint, boolean } from "drizzle-orm/pg-core"; import { companies } from "./companies.js"; import { agents } from "./agents.js"; import { agentWakeupRequests } from "./agent_wakeup_requests.js"; export const heartbeatRuns = pgTable( "heartbeat_runs", { id: uuid("id").primaryKey().defaultRandom(), companyId: uuid("company_id").notNull().references(() => companies.id), agentId: uuid("agent_id").notNull().references(() => agents.id), invocationSource: text("invocation_source").notNull().default("on_demand"), triggerDetail: text("trigger_detail"), status: text("status").notNull().default("queued"), startedAt: timestamp("started_at", { withTimezone: true }), finishedAt: timestamp("finished_at", { withTimezone: true }), error: text("error"), wakeupRequestId: uuid("wakeup_request_id").references(() => agentWakeupRequests.id), exitCode: integer("exit_code"), signal: text("signal"), usageJson: jsonb("usage_json").$type>(), resultJson: jsonb("result_json").$type>(), sessionIdBefore: text("session_id_before"), sessionIdAfter: text("session_id_after"), logStore: text("log_store"), logRef: text("log_ref"), logBytes: bigint("log_bytes", { mode: "number" }), logSha256: text("log_sha256"), logCompressed: boolean("log_compressed").notNull().default(false), stdoutExcerpt: text("stdout_excerpt"), stderrExcerpt: text("stderr_excerpt"), errorCode: text("error_code"), externalRunId: text("external_run_id"), contextSnapshot: jsonb("context_snapshot").$type>(), createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(), }, (table) => ({ companyAgentStartedIdx: index("heartbeat_runs_company_agent_started_idx").on( table.companyId, table.agentId, table.startedAt, ), }), );