1import { Hono } from "npm:hono";
2import { createThread, getThreadMessages, getUserThreads } from "../database/queries.ts";
3
4const app = new Hono();
3import { type Message, type Thread, type User } from "../../shared/types.ts";
4import {
5 type DatabaseMessage,
6 type DatabaseThread,
7 type DatabaseUser,
8 MESSAGES_TABLE,
9 THREADS_TABLE,
11} from "./schema.ts";
12
13function parseDatabaseUser(user: DatabaseUser): User {
14 return {
15 id: user.id,
21}
22
23function parseDatabaseThread(thread: DatabaseThread): Thread {
24 return {
25 id: thread.id,
32}
33
34function parseDatabaseMessage(message: DatabaseMessage): Message {
35 return {
36 id: message.id,
60 );
61 if (result.rows && result.rows.length > 0) {
62 return parseDatabaseUser(result.rows[0]);
63 }
64
78 );
79 if (result2.rows && result2.rows.length > 0) {
80 return parseDatabaseUser(result2.rows[0]);
81 }
82
90 );
91 if (result3.rows && result3.rows.length > 0) {
92 return parseDatabaseUser(result3.rows[0]);
93 }
94 throw new Error("Failed to create user");
126
127 if (result.rows && result.rows.length > 0) {
128 return parseDatabaseThread(result.rows[0]);
129 }
130 return null;
136 [userId],
137 );
138 return (result.rows || []).map(parseDatabaseThread);
139}
140
144 [valId],
145 );
146 return (result.rows || []).map(parseDatabaseThread);
147}
148
155 );
156
157 return (result.rows || []).map(parseDatabaseMessage);
158}
159
5export const MESSAGES_TABLE = "opentownie_messages";
6
7export interface DatabaseUser {
8 id: string;
9 username: string;
13}
14
15export interface DatabaseThread {
16 id: string;
17 user_id: string;
22}
23
24export interface DatabaseMessage {
25 id: number;
26 thread_id: string;
2import { createMiddleware } from "npm:hono/factory";
3import { type User } from "../../shared/types.ts";
4import { getOrCreateUser } from "../database/queries.ts";
5
6export const auth = createMiddleware<{
3import { convertToCoreMessages, type CoreUserMessage, streamText } from "npm:ai";
4import { Hono } from "npm:hono";
5import { createThread, saveMessage } from "../database/queries.ts";
6import { getTextEditorTool, makeChangeValTypeTool, makeDeleteTool, thinkTool } from "../tools/index.ts";
7import fileWithLinesNumbers from "../utils/fileWithLinesNumbers.ts";
1import { Hono } from "npm:hono";
2import { createAnthropic } from "npm:@ai-sdk/anthropic";
3import { updateThreadName } from "../database/queries.ts";
4
5export async function generateThreadName(apiKey, firstMessage, anthropicApiKey) {
30- [ ] add triggers to sidebar
31- [ ] add upload from SQL, CSV and JSON
32- [ ] add ability to connect to a non-val town Turso database
33- [x] fix wonky sidebar separator height problem (thanks to @stevekrouse)
34- [x] make result tables scrollable
1import express from 'express';
2import { getMessages, getLinks, getCategories, updateLinkCategory } from './database.js';
3import { Configuration, OpenAIApi } from 'openai';
4import 'dotenv/config';
1import { getMessages, getLinks } from './database.js';
2import { analyzeConversation, categorizeContent, summarizeConversation } from './anthropic-service.js';
3import 'dotenv/config';
1import { Client, Events, GatewayIntentBits } from 'discord.js';
2import 'dotenv/config';
3import { saveDMMessages } from './database.js';
4
5/**
89 console.log(`Fetched ${messages.length} messages`);
90
91 // Save messages to database
92 await saveDMMessages(messages);
93