67### New Components
68
691. **Database Module** (`database.ts`):
70 - Manages SQLite operations
71 - Implements tables for sessions, messages, patterns, and examples
85 - Provides export functionality
86
87### Database Schema
88
89The application uses SQLite with the following tables:
175 - Tests for edge cases and error handling
176
1772. **`database.test.ts`**:
178 - Tests for database initialization
179 - Tests for CRUD operations on all tables
180 - Tests for recursive queries and threaded conversations
7const EXAMPLES_TABLE = "abuse_analyzer_examples_v1";
8
9// Initialize database tables
10export async function initDatabase() {
11 // Create sessions table
12 await sqlite.execute(`
63}
64
65// Types for our database entities
66export interface Session {
67 id: string;
1import { Hono } from "https://esm.sh/hono@3.11.7";
2import { getPendingUsers, updateUserStatus } from "./database.ts";
3
4export const apiRouter = new Hono();
15const USERS_TABLE = "admin_panel_users";
16
17// Initialize database
18export async function initDatabase() {
19 await sqlite.execute(`
20 CREATE TABLE IF NOT EXISTS ${USERS_TABLE} (
59}
60
61// Initialize the database on module import
62await initDatabase();
63
64// Add some test users if none exist (for demonstration)
8- `/backend/` - Backend API endpoints
9 - `/backend/api.ts` - API routes for pending users and status updates
10 - `/backend/database.ts` - Database setup and queries
11- `/frontend/` - Frontend assets
12 - `/frontend/admin-panel.html` - Admin panel HTML template
9- [ ] make it one click to branch off like old jp townie demos
10- [ ] opentownie as a pr bot
11- [ ] give it the ability to see its own client-side and server-side logs by building a middleware that shoves them into a SQL light database date and then give it a tool to access them
12- [ ] do a browser use or screenshot thing to give it access to its own visual output
13- [ ] Have it default to creating a new branch off main
7export const thinkTool = tool({
8 description:
9 "Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.",
10 parameters: z.object({
11 thought: z.string().describe("A thought to think about."),
174```
175โโโ backend/
176โ โโโ database/
177โ โ โโโ migrations.ts # Schema definitions
178โ โ โโโ queries.ts # DB query functions
234 ```
235
236### Database Patterns
237- Run migrations on startup or comment out for performance
238- Change table names when modifying schemas rather than altering
10 overLimit,
11 startTrackingUsage,
12} from "../database/queries.tsx";
13import {
14 getTextEditorTool,
4import { INFERENCE_CALLS_TABLE, USAGE_TABLE } from "./schema.tsx";
5
6// Eventually we'll have a user database,
7// but in the meantime, we can cache user info in memory
8const userIdCache: { [key: string]: any } = {};