11import express from 'express' ;
22import cors from 'cors' ;
33import bodyParser from 'body-parser' ;
4- import { LlmService } from '@callm/core ' ;
5- import { SessionService } from '@callm/core' ;
4+ import path from 'path ' ;
5+ import { LlmService , SessionService , SkillLoader , FileSystemSkill , AgentService } from '@callm/core' ;
66
77const app = express ( ) ;
88const port = process . env . PORT || 3001 ;
99
1010app . use ( cors ( ) ) ;
1111app . use ( bodyParser . json ( ) ) ;
1212
13- const llmService = new LlmService ( ) ;
14- const sessionService = new SessionService ( ) ;
13+ // Configurações
14+ const dbPath = path . resolve ( process . cwd ( ) , 'callm.sqlite' ) ;
15+ const llmService = new LlmService ( { apiKey : process . env . GEMINI_API_KEY || '' } ) ;
16+ const sessionService = new SessionService ( dbPath ) ;
17+ const skillLoader = new SkillLoader ( ) ;
18+ const agentService = new AgentService ( ) ;
19+
20+ // Registrar Skills Padrão
21+ skillLoader . registerSkill ( new FileSystemSkill ( ) ) ;
22+
23+ // Listar Agentes Disponíveis
24+ app . get ( '/api/agents' , ( req , res ) => {
25+ res . json ( agentService . listProfiles ( ) ) ;
26+ } ) ;
1527
1628// Inicializa o banco de dados
17- sessionService . initialize ( ) . then ( ( ) => {
18- console . log ( 'Database initialized' ) ;
29+ sessionService . init ( ) . then ( ( ) => {
30+ console . log ( 'Database initialized at:' , dbPath ) ;
1931} ) ;
2032
2133app . get ( '/health' , ( req , res ) => {
2234 res . json ( { status : 'ok' , engine : 'caLLM Open Runway' } ) ;
2335} ) ;
2436
25- // Listar sessões
37+ // Listar sessões (Ainda não implementado no Core, mas deixamos o mock por enquanto)
2638app . get ( '/api/sessions' , async ( req , res ) => {
2739 try {
28- const sessions = await sessionService . listSessions ( ) ;
29- res . json ( sessions ) ;
40+ // Nota: SessionService precisa de um método para listar sessões únicas
41+ res . json ( [ ] ) ;
3042 } catch ( error : any ) {
3143 res . status ( 500 ) . json ( { error : error . message } ) ;
3244 }
@@ -35,36 +47,45 @@ app.get('/api/sessions', async (req, res) => {
3547// Obter histórico de uma sessão
3648app . get ( '/api/sessions/:id/messages' , async ( req , res ) => {
3749 try {
38- const messages = await sessionService . getMessages ( req . params . id ) ;
50+ const messages = await sessionService . getSessionHistory ( req . params . id ) ;
3951 res . json ( messages ) ;
4052 } catch ( error : any ) {
4153 res . status ( 500 ) . json ( { error : error . message } ) ;
4254 }
4355} ) ;
4456
45- // Chat Endpoint (Streaming ou Simples )
57+ // Chat Endpoint (Com suporte a Skills e Agentes )
4658app . post ( '/api/chat' , async ( req , res ) => {
47- const { prompt, sessionId } = req . body ;
59+ const { prompt, sessionId, agentId } = req . body ;
4860
4961 if ( ! prompt ) {
5062 return res . status ( 400 ) . json ( { error : 'Prompt is required' } ) ;
5163 }
5264
5365 try {
5466 const currentSessionId = sessionId || `session_${ Date . now ( ) } ` ;
67+ const history = await sessionService . getSessionHistory ( currentSessionId ) ;
68+ const skillDefs = skillLoader . getAllDefinitions ( ) ;
5569
56- // Salva mensagem do usuário
57- await sessionService . saveMessage ( currentSessionId , 'user' , prompt ) ;
58-
59- // Gera resposta (Non-streaming para simplificar primeira integração)
60- const response = await llmService . generateContent ( prompt ) ;
70+ // Busca instruções do agente se houver
71+ const agent = agentId ? agentService . getProfile ( agentId ) : undefined ;
72+ const systemPrompt = agent ?. systemPrompt ;
73+
74+ const chatResponse = await llmService . sendMessage (
75+ prompt ,
76+ history ,
77+ skillDefs ,
78+ ( name , params ) => skillLoader . executeSkill ( name , params ) ,
79+ systemPrompt
80+ ) ;
6181
62- // Salva resposta do modelo
63- await sessionService . saveMessage ( currentSessionId , 'model' , response ) ;
82+ // Salva no banco
83+ await sessionService . addMessage ( { session_id : currentSessionId , role : 'user' , content : prompt } ) ;
84+ await sessionService . addMessage ( { session_id : currentSessionId , role : 'model' , content : chatResponse } ) ;
6485
6586 res . json ( {
6687 sessionId : currentSessionId ,
67- content : response
88+ content : chatResponse
6889 } ) ;
6990 } catch ( error : any ) {
7091 console . error ( 'Chat Error:' , error ) ;
0 commit comments