Add prompt_json column to store rich prompt data
This commit is contained in:
parent
2aeec48627
commit
cd7d1c0ea8
1 changed files with 56 additions and 6 deletions
62
src/db.ts
62
src/db.ts
|
|
@ -1,7 +1,18 @@
|
|||
// SQLite database schema and queries
|
||||
|
||||
import { Database } from "bun:sqlite";
|
||||
import type { Device, OutputLog, Prompt, Session } from "./types";
|
||||
import type { Device, OutputLog, Session, PromptData } from "./types";
|
||||
|
||||
// Extend Prompt interface to include prompt_json field
|
||||
export interface Prompt {
|
||||
id: number;
|
||||
session_id: number;
|
||||
created_at: number;
|
||||
prompt_text: string;
|
||||
response: string | null;
|
||||
responded_at: number | null;
|
||||
prompt_json: PromptData | null;
|
||||
}
|
||||
|
||||
let db: Database;
|
||||
|
||||
|
|
@ -50,6 +61,7 @@ export function initDb(path = "claude-remote.db"): Database {
|
|||
session_id INTEGER NOT NULL,
|
||||
created_at INTEGER NOT NULL,
|
||||
prompt_text TEXT NOT NULL,
|
||||
prompt_json TEXT,
|
||||
response TEXT,
|
||||
responded_at INTEGER
|
||||
);
|
||||
|
|
@ -79,7 +91,7 @@ export function initDb(path = "claude-remote.db"): Database {
|
|||
"SELECT * FROM sessions WHERE ended_at IS NULL ORDER BY started_at DESC",
|
||||
);
|
||||
createPromptStmt = db.prepare(
|
||||
"INSERT INTO prompts (session_id, created_at, prompt_text) VALUES (?, ?, ?) RETURNING *",
|
||||
"INSERT INTO prompts (session_id, created_at, prompt_text, prompt_json) VALUES (?, ?, ?, ?) RETURNING *",
|
||||
);
|
||||
getPromptStmt = db.prepare("SELECT * FROM prompts WHERE id = ?");
|
||||
respondToPromptStmt = db.prepare(
|
||||
|
|
@ -141,13 +153,39 @@ export function getActiveSessions(): Session[] {
|
|||
|
||||
// Prompt functions
|
||||
|
||||
export function createPrompt(sessionId: number, promptText: string): Prompt {
|
||||
export function createPrompt(sessionId: number, promptText: string, promptJson?: string): Prompt {
|
||||
const now = Date.now();
|
||||
return createPromptStmt.get(sessionId, now, promptText) as Prompt;
|
||||
const row = createPromptStmt.get(sessionId, now, promptText, promptJson ?? null);
|
||||
const prompt = row as any;
|
||||
|
||||
// Parse prompt_json if present
|
||||
if (prompt.prompt_json) {
|
||||
try {
|
||||
prompt.prompt_json = JSON.parse(prompt.prompt_json);
|
||||
} catch {
|
||||
prompt.prompt_json = null;
|
||||
}
|
||||
}
|
||||
|
||||
return prompt as Prompt;
|
||||
}
|
||||
|
||||
export function getPrompt(promptId: number): Prompt | null {
|
||||
return (getPromptStmt.get(promptId) as Prompt) ?? null;
|
||||
const row = getPromptStmt.get(promptId);
|
||||
if (!row) return null;
|
||||
|
||||
const prompt = row as any;
|
||||
|
||||
// Parse prompt_json if present
|
||||
if (prompt.prompt_json) {
|
||||
try {
|
||||
prompt.prompt_json = JSON.parse(prompt.prompt_json);
|
||||
} catch {
|
||||
prompt.prompt_json = null;
|
||||
}
|
||||
}
|
||||
|
||||
return prompt as Prompt;
|
||||
}
|
||||
|
||||
export function respondToPrompt(promptId: number, response: string): void {
|
||||
|
|
@ -155,7 +193,19 @@ export function respondToPrompt(promptId: number, response: string): void {
|
|||
}
|
||||
|
||||
export function getPendingPrompts(): Prompt[] {
|
||||
return getPendingPromptsStmt.all() as Prompt[];
|
||||
const rows = getPendingPromptsStmt.all();
|
||||
|
||||
return rows.map((row: any) => {
|
||||
// Parse prompt_json if present
|
||||
if (row.prompt_json) {
|
||||
try {
|
||||
row.prompt_json = JSON.parse(row.prompt_json);
|
||||
} catch {
|
||||
row.prompt_json = null;
|
||||
}
|
||||
}
|
||||
return row as Prompt;
|
||||
});
|
||||
}
|
||||
|
||||
// OutputLog functions
|
||||
|
|
|
|||
Loading…
Reference in a new issue