Multi-agent audit + aggressive cleanup across server/web/coder/booterm, delivered behind a DEFER discipline so none of the in-flight files were touched. Removes dead code/deps/columns, dedups server + coder helpers, and splits the oversized modules (tools.ts, opencode-server.ts, sentinel-summaries, turn.ts, TerminalPane.tsx) behind stable contracts. Adds 78 parity/unit tests (server 587, coder 323); fixes two latent bugs (ChatPane queue keys, FileViewerOverlay blank-line parity). Intended tag: v2.7.12-audit-cleanup. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
1022 B
TypeScript
47 lines
1022 B
TypeScript
import pg from 'pg';
|
|
|
|
const { Pool } = pg;
|
|
|
|
let pool: pg.Pool | null = null;
|
|
|
|
export function getPool(databaseUrl: string): pg.Pool {
|
|
if (pool) return pool;
|
|
pool = new Pool({ connectionString: databaseUrl, max: 5, idleTimeoutMillis: 30_000 });
|
|
return pool;
|
|
}
|
|
|
|
interface SessionInfo {
|
|
id: string;
|
|
project_id: string;
|
|
project_path: string;
|
|
}
|
|
|
|
export async function getSessionInfo(sessionId: string): Promise<SessionInfo | null> {
|
|
if (!pool) throw new Error('db pool not initialized');
|
|
const res = await pool.query<SessionInfo>(
|
|
`SELECT s.id, s.project_id, p.path AS project_path
|
|
FROM sessions s
|
|
JOIN projects p ON p.id = s.project_id
|
|
WHERE s.id = $1`,
|
|
[sessionId],
|
|
);
|
|
return res.rows[0] ?? null;
|
|
}
|
|
|
|
export async function pingDb(): Promise<boolean> {
|
|
if (!pool) return false;
|
|
try {
|
|
await pool.query('SELECT 1');
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function closeDb(): Promise<void> {
|
|
if (pool) {
|
|
await pool.end();
|
|
pool = null;
|
|
}
|
|
}
|