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
|
// SQLite database schema and queries
|
||||||
|
|
||||||
import { Database } from "bun:sqlite";
|
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;
|
let db: Database;
|
||||||
|
|
||||||
|
|
@ -50,6 +61,7 @@ export function initDb(path = "claude-remote.db"): Database {
|
||||||
session_id INTEGER NOT NULL,
|
session_id INTEGER NOT NULL,
|
||||||
created_at INTEGER NOT NULL,
|
created_at INTEGER NOT NULL,
|
||||||
prompt_text TEXT NOT NULL,
|
prompt_text TEXT NOT NULL,
|
||||||
|
prompt_json TEXT,
|
||||||
response TEXT,
|
response TEXT,
|
||||||
responded_at INTEGER
|
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",
|
"SELECT * FROM sessions WHERE ended_at IS NULL ORDER BY started_at DESC",
|
||||||
);
|
);
|
||||||
createPromptStmt = db.prepare(
|
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 = ?");
|
getPromptStmt = db.prepare("SELECT * FROM prompts WHERE id = ?");
|
||||||
respondToPromptStmt = db.prepare(
|
respondToPromptStmt = db.prepare(
|
||||||
|
|
@ -141,13 +153,39 @@ export function getActiveSessions(): Session[] {
|
||||||
|
|
||||||
// Prompt functions
|
// Prompt functions
|
||||||
|
|
||||||
export function createPrompt(sessionId: number, promptText: string): Prompt {
|
export function createPrompt(sessionId: number, promptText: string, promptJson?: string): Prompt {
|
||||||
const now = Date.now();
|
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 {
|
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 {
|
export function respondToPrompt(promptId: number, response: string): void {
|
||||||
|
|
@ -155,7 +193,19 @@ export function respondToPrompt(promptId: number, response: string): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPendingPrompts(): Prompt[] {
|
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
|
// OutputLog functions
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue