Skip to content

Commit 12b191b

Browse files
committed
some fixes
1 parent d17df70 commit 12b191b

File tree

765 files changed

+28040
-27320
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

765 files changed

+28040
-27320
lines changed

.vscode/settings.json

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,36 @@
11
{
2-
"typescript.tsdk": "node_modules/typescript/lib",
3-
"[javascript]": { "editor.defaultFormatter": "biomejs.biome" },
4-
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
5-
"[javascriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
6-
"[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
7-
"[json]": { "editor.defaultFormatter": "biomejs.biome" },
8-
"[jsonc]": { "editor.defaultFormatter": "biomejs.biome" },
9-
"[css]": { "editor.defaultFormatter": "biomejs.biome" },
10-
"[graphql]": { "editor.defaultFormatter": "biomejs.biome" },
11-
"editor.formatOnSave": true,
12-
"editor.formatOnPaste": true,
13-
"emmet.showExpandedAbbreviation": "never",
14-
"editor.codeActionsOnSave": {
15-
"source.fixAll.biome": "explicit",
16-
"source.organizeImports.biome": "explicit"
17-
},
18-
"typescript.experimental.useTsgo": false
19-
}
2+
"typescript.tsdk": "node_modules/typescript/lib",
3+
"[javascript]": {
4+
"editor.defaultFormatter": "biomejs.biome"
5+
},
6+
"[typescript]": {
7+
"editor.defaultFormatter": "vscode.typescript-language-features"
8+
},
9+
"[javascriptreact]": {
10+
"editor.defaultFormatter": "biomejs.biome"
11+
},
12+
"[typescriptreact]": {
13+
"editor.defaultFormatter": "biomejs.biome"
14+
},
15+
"[json]": {
16+
"editor.defaultFormatter": "biomejs.biome"
17+
},
18+
"[jsonc]": {
19+
"editor.defaultFormatter": "biomejs.biome"
20+
},
21+
"[css]": {
22+
"editor.defaultFormatter": "biomejs.biome"
23+
},
24+
"[graphql]": {
25+
"editor.defaultFormatter": "biomejs.biome"
26+
},
27+
"editor.formatOnSave": true,
28+
"editor.formatOnPaste": true,
29+
"emmet.showExpandedAbbreviation": "never",
30+
"editor.codeActionsOnSave": {
31+
"source.fixAll.biome": "explicit",
32+
"source.organizeImports.biome": "explicit"
33+
},
34+
"typescript.experimental.useTsgo": false,
35+
"typescript.enablePromptUseWorkspaceTsdk": true
36+
}

apps/api/package.json

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
{
2-
"name": "@databuddy/api",
3-
"module": "index.ts",
4-
"type": "module",
5-
"private": true,
6-
"scripts": {
7-
"dev": "bun --hot src/index.ts --port 3001",
8-
"test": "vitest run",
9-
"test:watch": "vitest"
10-
},
11-
"devDependencies": {
12-
"@types/bun": "^1.3.1"
13-
},
14-
"peerDependencies": {
15-
"typescript": "^5.9.3"
16-
},
17-
"dependencies": {
18-
"@databuddy/auth": "workspace:*",
19-
"@databuddy/db": "workspace:*",
20-
"@databuddy/redis": "workspace:*",
21-
"@databuddy/rpc": "workspace:*",
22-
"@databuddy/sdk": "^2.2.0",
23-
"@databuddy/shared": "workspace:*",
24-
"@elysiajs/cors": "^1.4.0",
25-
"@elysiajs/trpc": "^1.1.0",
26-
"@logtail/edge": "^0.5.6",
27-
"@openrouter/ai-sdk-provider": "^1.2.0",
28-
"@trpc/server": "^11.7.1",
29-
"@upstash/ratelimit": "^2.0.6",
30-
"@upstash/redis": "^1.35.6",
31-
"ai": "^5.0.81",
32-
"autumn": "^1.0.2",
33-
"autumn-js": "^0.0.101",
34-
"dayjs": "^1.11.18",
35-
"drizzle-orm": "^0.42.0",
36-
"elysia": "^1.4.13",
37-
"jszip": "^3.10.1",
38-
"pino": "^9.14.0",
39-
"pino-pretty": "^13.1.2",
40-
"zod": "catalog:"
41-
}
2+
"name": "@databuddy/api",
3+
"module": "index.ts",
4+
"type": "module",
5+
"private": true,
6+
"scripts": {
7+
"dev": "bun --hot src/index.ts --port 3001",
8+
"test": "vitest run",
9+
"test:watch": "vitest"
10+
},
11+
"devDependencies": {
12+
"@types/bun": "^1.3.1"
13+
},
14+
"peerDependencies": {
15+
"typescript": "^5.9.3"
16+
},
17+
"dependencies": {
18+
"@databuddy/auth": "workspace:*",
19+
"@databuddy/db": "workspace:*",
20+
"@databuddy/redis": "workspace:*",
21+
"@databuddy/rpc": "workspace:*",
22+
"@databuddy/sdk": "^2.2.0",
23+
"@databuddy/shared": "workspace:*",
24+
"@elysiajs/cors": "^1.4.0",
25+
"@elysiajs/trpc": "^1.1.0",
26+
"@logtail/edge": "^0.5.6",
27+
"@openrouter/ai-sdk-provider": "^1.2.0",
28+
"@trpc/server": "^11.7.1",
29+
"@upstash/ratelimit": "^2.0.6",
30+
"@upstash/redis": "^1.35.6",
31+
"ai": "^5.0.81",
32+
"autumn": "^1.0.2",
33+
"autumn-js": "^0.0.101",
34+
"dayjs": "^1.11.18",
35+
"drizzle-orm": "^0.42.0",
36+
"elysia": "^1.4.13",
37+
"jszip": "^3.10.1",
38+
"pino": "^9.14.0",
39+
"pino-pretty": "^13.1.2",
40+
"zod": "catalog:"
41+
}
4242
}

apps/api/src/agent/core/ai-service.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
2-
import { generateObject } from 'ai';
3-
import type { z } from 'zod';
1+
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
2+
import { generateObject } from "ai";
3+
import type { z } from "zod";
44
import {
55
AIResponseJsonSchema,
66
comprehensiveSystemPrompt,
7-
} from '../prompts/agent';
8-
import type { AssistantSession } from './assistant-session';
7+
} from "../prompts/agent";
8+
import type { AssistantSession } from "./assistant-session";
99

1010
const openrouter = createOpenRouter({
1111
apiKey: process.env.AI_API_KEY,
1212
});
1313

14-
const AI_MODEL = 'google/gemini-2.5-flash-lite-preview-06-17';
14+
const AI_MODEL = "google/gemini-2.5-flash-lite-preview-06-17";
1515

1616
export interface AIResponse {
1717
content: z.infer<typeof AIResponseJsonSchema>;
@@ -31,20 +31,20 @@ export class AIService {
3131
const context = session.getContext();
3232
const messages = session.getMessages();
3333

34-
session.log('Starting AI generation');
34+
session.log("Starting AI generation");
3535
const startTime = Date.now();
3636

3737
const systemPrompt = comprehensiveSystemPrompt(
3838
context.website.id,
3939
context.website.domain,
40-
'execute_chat',
41-
context.model
40+
"execute_chat",
41+
context.model,
4242
);
4343

4444
try {
4545
const chat = await generateObject({
4646
model: openrouter.chat(AI_MODEL),
47-
messages: [{ role: 'system', content: systemPrompt }, ...messages],
47+
messages: [{ role: "system", content: systemPrompt }, ...messages],
4848
temperature: 0.1,
4949
schema: AIResponseJsonSchema,
5050
});
@@ -64,7 +64,7 @@ export class AIService {
6464
};
6565
} catch (error) {
6666
session.log(
67-
`AI generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`
67+
`AI generation failed: ${error instanceof Error ? error.message : "Unknown error"}`,
6868
);
6969
throw error;
7070
}
Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import type { User } from '@databuddy/auth';
2-
import type { StreamingUpdate } from '@databuddy/shared/types/assistant';
3-
import type { Website } from '@databuddy/shared/types/website';
4-
import { createId } from '@databuddy/shared/utils/ids';
5-
import type { AssistantRequestType } from '../../schemas';
6-
import { AIService } from './ai-service';
7-
import { AssistantSession, type SessionMetrics } from './assistant-session';
8-
import { ConversationRepository } from './conversation-repository';
1+
import type { User } from "@databuddy/auth";
2+
import type { StreamingUpdate } from "@databuddy/shared/types/assistant";
3+
import type { Website } from "@databuddy/shared/types/website";
4+
import { createId } from "@databuddy/shared/utils/ids";
5+
import type { AssistantRequestType } from "../../schemas";
6+
import { AIService } from "./ai-service";
7+
import { AssistantSession, type SessionMetrics } from "./assistant-session";
8+
import { ConversationRepository } from "./conversation-repository";
99
import {
1010
type AIResponseContent,
1111
ResponseProcessor,
12-
} from './response-processor';
12+
} from "./response-processor";
1313

1414
/**
1515
* Main orchestrator for assistant interactions
@@ -23,7 +23,7 @@ export class AssistantOrchestrator {
2323
async processRequest(
2424
request: AssistantRequestType,
2525
user: User,
26-
website: Website
26+
website: Website,
2727
): Promise<StreamingUpdate[]> {
2828
// Create session to track this interaction
2929
const session = new AssistantSession(request, user, website);
@@ -34,10 +34,10 @@ export class AssistantOrchestrator {
3434
const aiMessageId = createId();
3535

3636
if (!aiResponse.content) {
37-
session.log('AI response was empty');
37+
session.log("AI response was empty");
3838
return [
3939
{
40-
type: 'error',
40+
type: "error",
4141
content:
4242
"I'm having trouble understanding that request. Could you try asking in a different way?",
4343
},
@@ -46,7 +46,7 @@ export class AssistantOrchestrator {
4646

4747
const streamingUpdates: StreamingUpdate[] = [
4848
{
49-
type: 'metadata',
49+
type: "metadata",
5050
data: {
5151
conversationId: session.getContext().conversationId,
5252
messageId: aiMessageId,
@@ -57,7 +57,7 @@ export class AssistantOrchestrator {
5757
// Step 2: Process the response into streaming updates
5858
const aiResponseUpdates = await this.responseProcessor.process(
5959
aiResponse.content,
60-
session
60+
session,
6161
);
6262

6363
streamingUpdates.push(...aiResponseUpdates);
@@ -73,20 +73,20 @@ export class AssistantOrchestrator {
7373
aiResponse.content,
7474
aiMessageId,
7575
finalResult,
76-
metrics
76+
metrics,
7777
);
7878
}
7979

8080
return streamingUpdates;
8181
} catch (error) {
8282
session.log(
83-
`Processing failed: ${error instanceof Error ? error.message : 'Unknown error'}`
83+
`Processing failed: ${error instanceof Error ? error.message : "Unknown error"}`,
8484
);
8585

8686
// Return error response
8787
const errorResponse: StreamingUpdate = {
88-
type: 'error',
89-
content: 'Oops! Something unexpected happened. Mind trying that again?',
88+
type: "error",
89+
content: "Oops! Something unexpected happened. Mind trying that again?",
9090
};
9191

9292
// Try to save error conversation
@@ -102,52 +102,52 @@ export class AssistantOrchestrator {
102102
aiResponse: AIResponseContent,
103103
messageId: string,
104104
finalResult: StreamingUpdate,
105-
metrics: SessionMetrics
105+
metrics: SessionMetrics,
106106
): Promise<void> {
107107
try {
108108
await this.conversationRepo.saveConversation(
109109
session,
110110
aiResponse,
111111
messageId,
112112
finalResult,
113-
metrics
113+
metrics,
114114
);
115-
console.log('✅ Conversation saved successfully');
115+
console.log("✅ Conversation saved successfully");
116116
} catch (error) {
117-
console.error('❌ Failed to save conversation:', error);
117+
console.error("❌ Failed to save conversation:", error);
118118
}
119119
}
120120

121121
private async saveErrorConversationAsync(
122122
session: AssistantSession,
123123
originalError: unknown,
124124
errorResponse: StreamingUpdate,
125-
metrics: SessionMetrics
125+
metrics: SessionMetrics,
126126
): Promise<void> {
127127
try {
128128
const errorAIResponse = {
129-
response_type: 'text' as const,
129+
response_type: "text" as const,
130130
text_response:
131-
errorResponse.type === 'error'
131+
errorResponse.type === "error"
132132
? errorResponse.content
133-
: 'Oops! Something unexpected happened. Mind trying that again?',
133+
: "Oops! Something unexpected happened. Mind trying that again?",
134134
thinking_steps: [
135-
`Error: ${originalError instanceof Error ? originalError.message : 'Unknown error'}`,
135+
`Error: ${originalError instanceof Error ? originalError.message : "Unknown error"}`,
136136
],
137137
};
138138

139-
const messageId = createId('NANOID');
139+
const messageId = createId("NANOID");
140140

141141
await this.conversationRepo.saveConversation(
142142
session,
143143
errorAIResponse,
144144
messageId,
145145
errorResponse,
146-
metrics
146+
metrics,
147147
);
148-
console.log('✅ Error conversation saved successfully');
148+
console.log("✅ Error conversation saved successfully");
149149
} catch (error) {
150-
console.error('❌ Failed to save error conversation:', error);
150+
console.error("❌ Failed to save error conversation:", error);
151151
}
152152
}
153153
}

0 commit comments

Comments
 (0)