mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-10 22:55:16 -05:00
* v0 * v1 * Basic ss tes * Ss tests * Stuff * Add mcp * mcp v1 * Improvement * Fix * BROKEN * Checkpoint * Streaming * Fix abort * Things are broken * Streaming seems to work but copilot is dumb * Fix edge issue * LUAAAA * Fix stream buffer * Fix lint * Checkpoint * Initial temp state, in the middle of a refactor * Initial test shows diff store still working * Tool refactor * First cleanup pass complete - untested * Continued cleanup * Refactor * Refactor complete - no testing yet * Fix - cursor makes me sad * Fix mcp * Clean up mcp * Updated mcp * Add respond to subagents * Fix definitions * Add tools * Add tools * Add copilot mcp tracking * Fix lint * Fix mcp * Fix * Updates * Clean up mcp * Fix copilot mcp tool names to be sim prefixed * Add opus 4.6 * Fix discovery tool * Fix * Remove logs * Fix go side tool rendering * Update docs * Fix hydration * Fix tool call resolution * Fix * Fix lint * Fix superagent and autoallow integrations * Fix always allow * Update block * Remove plan docs * Fix hardcoded ff * Fix dropped provider * Fix lint * Fix tests * Fix dead messages array * Fix discovery * Fix run workflow * Fix run block * Fix run from block in copilot * Fix lint * Fix skip and mtb * Fix typing * Fix tool call * Bump api version * Fix bun lock * Nuke bad files
70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
import { db } from '@sim/db'
|
|
import { copilotChats } from '@sim/db/schema'
|
|
import { createLogger } from '@sim/logger'
|
|
import { and, eq } from 'drizzle-orm'
|
|
|
|
const logger = createLogger('CopilotChatLifecycle')
|
|
|
|
export interface ChatLoadResult {
|
|
chatId: string
|
|
chat: typeof copilotChats.$inferSelect | null
|
|
conversationHistory: unknown[]
|
|
isNew: boolean
|
|
}
|
|
|
|
/**
|
|
* Resolve or create a copilot chat session.
|
|
* If chatId is provided, loads the existing chat. Otherwise creates a new one.
|
|
*/
|
|
export async function resolveOrCreateChat(params: {
|
|
chatId?: string
|
|
userId: string
|
|
workflowId: string
|
|
model: string
|
|
}): Promise<ChatLoadResult> {
|
|
const { chatId, userId, workflowId, model } = params
|
|
|
|
if (chatId) {
|
|
const [chat] = await db
|
|
.select()
|
|
.from(copilotChats)
|
|
.where(and(eq(copilotChats.id, chatId), eq(copilotChats.userId, userId)))
|
|
.limit(1)
|
|
|
|
return {
|
|
chatId,
|
|
chat: chat ?? null,
|
|
conversationHistory: chat && Array.isArray(chat.messages) ? chat.messages : [],
|
|
isNew: false,
|
|
}
|
|
}
|
|
|
|
const [newChat] = await db
|
|
.insert(copilotChats)
|
|
.values({
|
|
userId,
|
|
workflowId,
|
|
title: null,
|
|
model,
|
|
messages: [],
|
|
})
|
|
.returning()
|
|
|
|
if (!newChat) {
|
|
logger.warn('Failed to create new copilot chat row', { userId, workflowId })
|
|
return {
|
|
chatId: '',
|
|
chat: null,
|
|
conversationHistory: [],
|
|
isNew: true,
|
|
}
|
|
}
|
|
|
|
return {
|
|
chatId: newChat.id,
|
|
chat: newChat,
|
|
conversationHistory: [],
|
|
isNew: true,
|
|
}
|
|
}
|