claudeship 0.2.23 → 0.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/server/dist/chat/chat.module.js +8 -1
- package/apps/server/dist/chat/chat.module.js.map +1 -1
- package/apps/server/dist/chat/chat.service.d.ts +5 -1
- package/apps/server/dist/chat/chat.service.js +35 -4
- package/apps/server/dist/chat/chat.service.js.map +1 -1
- package/apps/server/dist/chat/framework-detector.service.d.ts +17 -0
- package/apps/server/dist/chat/framework-detector.service.js +193 -0
- package/apps/server/dist/chat/framework-detector.service.js.map +1 -0
- package/apps/server/dist/chat/prompts/backend/django.d.ts +1 -0
- package/apps/server/dist/chat/prompts/backend/django.js +207 -0
- package/apps/server/dist/chat/prompts/backend/django.js.map +1 -0
- package/apps/server/dist/chat/prompts/backend/express.d.ts +1 -0
- package/apps/server/dist/chat/prompts/backend/express.js +260 -0
- package/apps/server/dist/chat/prompts/backend/express.js.map +1 -0
- package/apps/server/dist/chat/prompts/backend/fastapi.d.ts +1 -0
- package/apps/server/dist/chat/prompts/backend/fastapi.js +246 -0
- package/apps/server/dist/chat/prompts/backend/fastapi.js.map +1 -0
- package/apps/server/dist/chat/prompts/backend/index.d.ts +4 -0
- package/apps/server/dist/chat/prompts/backend/index.js +12 -0
- package/apps/server/dist/chat/prompts/backend/index.js.map +1 -0
- package/apps/server/dist/chat/prompts/backend/nestjs.d.ts +1 -0
- package/apps/server/dist/chat/prompts/backend/nestjs.js +270 -0
- package/apps/server/dist/chat/prompts/backend/nestjs.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/expo.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/expo.js +208 -0
- package/apps/server/dist/chat/prompts/frontend/expo.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/flutter.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/flutter.js +271 -0
- package/apps/server/dist/chat/prompts/frontend/flutter.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/index.d.ts +4 -0
- package/apps/server/dist/chat/prompts/frontend/index.js +12 -0
- package/apps/server/dist/chat/prompts/frontend/index.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/nextjs.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/nextjs.js +195 -0
- package/apps/server/dist/chat/prompts/frontend/nextjs.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/react-native.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/react-native.js +224 -0
- package/apps/server/dist/chat/prompts/frontend/react-native.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/react-vite.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/react-vite.js +187 -0
- package/apps/server/dist/chat/prompts/frontend/react-vite.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/svelte.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/svelte.js +255 -0
- package/apps/server/dist/chat/prompts/frontend/svelte.js.map +1 -0
- package/apps/server/dist/chat/prompts/frontend/vue.d.ts +1 -0
- package/apps/server/dist/chat/prompts/frontend/vue.js +267 -0
- package/apps/server/dist/chat/prompts/frontend/vue.js.map +1 -0
- package/apps/server/dist/chat/prompts/index.d.ts +4 -0
- package/apps/server/dist/chat/prompts/index.js +20 -1
- package/apps/server/dist/chat/prompts/index.js.map +1 -1
- package/apps/server/dist/chat/prompts/prompt-builder.service.d.ts +15 -0
- package/apps/server/dist/chat/prompts/prompt-builder.service.js +177 -0
- package/apps/server/dist/chat/prompts/prompt-builder.service.js.map +1 -0
- package/apps/server/dist/chat/prompts/sections/core.d.ts +9 -0
- package/apps/server/dist/chat/prompts/sections/core.js +149 -0
- package/apps/server/dist/chat/prompts/sections/core.js.map +1 -0
- package/apps/server/dist/project/project.controller.d.ts +6 -0
- package/apps/server/dist/project/project.service.d.ts +6 -0
- package/apps/server/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/server/package.json +1 -1
- package/apps/server/prisma/dev.db +0 -0
- package/apps/server/prisma/migrations/20260127071040_add_frontend_framework/migration.sql +24 -0
- package/apps/server/prisma/migrations/20260127071520_add_app_type_and_mobile/migration.sql +25 -0
- package/apps/server/prisma/schema.prisma +33 -5
- package/apps/web/.next/BUILD_ID +1 -1
- package/apps/web/.next/app-build-manifest.json +10 -8
- package/apps/web/.next/app-path-routes-manifest.json +2 -2
- package/apps/web/.next/build-manifest.json +2 -2
- package/apps/web/.next/cache/.previewinfo +1 -1
- package/apps/web/.next/cache/.rscinfo +1 -1
- package/apps/web/.next/cache/.tsbuildinfo +1 -1
- package/apps/web/.next/cache/config.json +3 -3
- package/apps/web/.next/cache/eslint/.cache_j3uhuz +1 -1
- package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
- package/apps/web/.next/prerender-manifest.json +3 -3
- package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/server/app/_not-found.html +1 -1
- package/apps/web/.next/server/app/_not-found.rsc +2 -2
- package/apps/web/.next/server/app/index.html +1 -1
- package/apps/web/.next/server/app/index.rsc +3 -3
- package/apps/web/.next/server/app/page.js +2 -2
- package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/server/app/project/[id]/page.js +2 -2
- package/apps/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/server/app/settings/page.js +1 -1
- package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/server/app/settings.html +1 -1
- package/apps/web/.next/server/app/settings.rsc +2 -2
- package/apps/web/.next/server/app-paths-manifest.json +2 -2
- package/apps/web/.next/server/pages/404.html +1 -1
- package/apps/web/.next/server/pages/500.html +1 -1
- package/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/apps/web/.next/static/chunks/18-22b1cf4231121555.js +1 -0
- package/apps/web/.next/static/chunks/700-75e1212e819e279c.js +1 -0
- package/apps/web/.next/static/chunks/app/page-6ea560755549086e.js +1 -0
- package/apps/web/.next/static/chunks/app/project/[id]/page-3e4777b355c4aec9.js +1 -0
- package/apps/web/.next/static/css/45ddb08a7b4470d5.css +3 -0
- package/apps/web/.next/trace +18 -18
- package/apps/web/package.json +1 -1
- package/apps/web/src/app/page.tsx +2 -5
- package/apps/web/src/components/project/CreateProjectModal.tsx +175 -80
- package/apps/web/src/components/project/ProjectCard.tsx +122 -31
- package/apps/web/src/stores/useProjectStore.ts +2 -1
- package/package.json +1 -1
- package/packages/shared/src/index.ts +1 -0
- package/packages/shared/src/types/project.ts +18 -3
- package/packages/shared/src/types/tech-stack.ts +74 -0
- package/apps/web/.next/static/chunks/700-a927807facd2c50d.js +0 -1
- package/apps/web/.next/static/chunks/app/page-93b78578e7896d90.js +0 -1
- package/apps/web/.next/static/chunks/app/project/[id]/page-e9304c25ba897608.js +0 -1
- package/apps/web/.next/static/css/70f2a13cf3d254d8.css +0 -3
- /package/apps/web/.next/static/{c-H9phuqk4ohtFNK0geg2 → IMWKpuHss3gLOeJ7K93sg}/_buildManifest.js +0 -0
- /package/apps/web/.next/static/{c-H9phuqk4ohtFNK0geg2 → IMWKpuHss3gLOeJ7K93sg}/_ssgManifest.js +0 -0
|
@@ -11,6 +11,8 @@ const common_1 = require("@nestjs/common");
|
|
|
11
11
|
const chat_controller_1 = require("./chat.controller");
|
|
12
12
|
const chat_service_1 = require("./chat.service");
|
|
13
13
|
const claude_cli_service_1 = require("./claude-cli.service");
|
|
14
|
+
const framework_detector_service_1 = require("./framework-detector.service");
|
|
15
|
+
const prompt_builder_service_1 = require("./prompts/prompt-builder.service");
|
|
14
16
|
const project_module_1 = require("../project/project.module");
|
|
15
17
|
let ChatModule = class ChatModule {
|
|
16
18
|
};
|
|
@@ -19,7 +21,12 @@ exports.ChatModule = ChatModule = __decorate([
|
|
|
19
21
|
(0, common_1.Module)({
|
|
20
22
|
imports: [project_module_1.ProjectModule],
|
|
21
23
|
controllers: [chat_controller_1.ChatController],
|
|
22
|
-
providers: [
|
|
24
|
+
providers: [
|
|
25
|
+
chat_service_1.ChatService,
|
|
26
|
+
claude_cli_service_1.ClaudeCliService,
|
|
27
|
+
framework_detector_service_1.FrameworkDetectorService,
|
|
28
|
+
prompt_builder_service_1.PromptBuilderService,
|
|
29
|
+
],
|
|
23
30
|
exports: [chat_service_1.ChatService, claude_cli_service_1.ClaudeCliService],
|
|
24
31
|
})
|
|
25
32
|
], ChatModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.module.js","sourceRoot":"","sources":["../../src/chat/chat.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAwD;AACxD,8DAA0D;
|
|
1
|
+
{"version":3,"file":"chat.module.js","sourceRoot":"","sources":["../../src/chat/chat.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAwD;AACxD,6EAAwE;AACxE,6EAAwE;AACxE,8DAA0D;AAanD,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAXtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,CAAC;QACxB,WAAW,EAAE,CAAC,gCAAc,CAAC;QAC7B,SAAS,EAAE;YACT,0BAAW;YACX,qCAAgB;YAChB,qDAAwB;YACxB,6CAAoB;SACrB;QACD,OAAO,EAAE,CAAC,0BAAW,EAAE,qCAAgB,CAAC;KACzC,CAAC;GACW,UAAU,CAAG"}
|
|
@@ -3,6 +3,8 @@ import { PrismaService } from "../prisma/prisma.service";
|
|
|
3
3
|
import { ProjectService } from "../project/project.service";
|
|
4
4
|
import { ClaudeCliService, ClaudeStreamEvent } from "./claude-cli.service";
|
|
5
5
|
import { ChatMode } from "./dto/send-message.dto";
|
|
6
|
+
import { FrameworkDetectorService } from "./framework-detector.service";
|
|
7
|
+
import { PromptBuilderService } from "./prompts/prompt-builder.service";
|
|
6
8
|
export interface ChatStreamEvent {
|
|
7
9
|
type: string;
|
|
8
10
|
data: unknown;
|
|
@@ -21,10 +23,12 @@ export declare class ChatService {
|
|
|
21
23
|
private prisma;
|
|
22
24
|
private projectService;
|
|
23
25
|
private claudeCliService;
|
|
26
|
+
private frameworkDetector;
|
|
27
|
+
private promptBuilder;
|
|
24
28
|
private readonly logger;
|
|
25
29
|
private activeSessions;
|
|
26
30
|
private eventSubjects;
|
|
27
|
-
constructor(prisma: PrismaService, projectService: ProjectService, claudeCliService: ClaudeCliService);
|
|
31
|
+
constructor(prisma: PrismaService, projectService: ProjectService, claudeCliService: ClaudeCliService, frameworkDetector: FrameworkDetectorService, promptBuilder: PromptBuilderService);
|
|
28
32
|
getMessages(projectId: string, limit?: number, offset?: number): Promise<{
|
|
29
33
|
id: string;
|
|
30
34
|
createdAt: Date;
|
|
@@ -18,7 +18,8 @@ const project_service_1 = require("../project/project.service");
|
|
|
18
18
|
const claude_cli_service_1 = require("./claude-cli.service");
|
|
19
19
|
const client_1 = require("@prisma/client");
|
|
20
20
|
const crypto_1 = require("crypto");
|
|
21
|
-
const
|
|
21
|
+
const framework_detector_service_1 = require("./framework-detector.service");
|
|
22
|
+
const prompt_builder_service_1 = require("./prompts/prompt-builder.service");
|
|
22
23
|
const ASK_MODE_PROMPT = `
|
|
23
24
|
[Mode: Ask (Read-Only)]
|
|
24
25
|
You are in Ask mode. This is a read-only mode where you can ONLY:
|
|
@@ -32,10 +33,12 @@ If the user asks to make code changes, politely respond:
|
|
|
32
33
|
"I'm currently in Ask mode which is read-only. Please switch to Build mode to make changes to the code."
|
|
33
34
|
`;
|
|
34
35
|
let ChatService = ChatService_1 = class ChatService {
|
|
35
|
-
constructor(prisma, projectService, claudeCliService) {
|
|
36
|
+
constructor(prisma, projectService, claudeCliService, frameworkDetector, promptBuilder) {
|
|
36
37
|
this.prisma = prisma;
|
|
37
38
|
this.projectService = projectService;
|
|
38
39
|
this.claudeCliService = claudeCliService;
|
|
40
|
+
this.frameworkDetector = frameworkDetector;
|
|
41
|
+
this.promptBuilder = promptBuilder;
|
|
39
42
|
this.logger = new common_1.Logger(ChatService_1.name);
|
|
40
43
|
this.activeSessions = new Map();
|
|
41
44
|
this.eventSubjects = new Map();
|
|
@@ -128,7 +131,33 @@ let ChatService = ChatService_1 = class ChatService {
|
|
|
128
131
|
throw new Error("Project not found");
|
|
129
132
|
}
|
|
130
133
|
const projectPath = await this.projectService.getProjectPath(projectId);
|
|
131
|
-
const
|
|
134
|
+
const detection = this.frameworkDetector.detect(content, project.frontendFramework, project.backendFramework);
|
|
135
|
+
let currentFrontend = project.frontendFramework;
|
|
136
|
+
let currentBackend = project.backendFramework;
|
|
137
|
+
if (detection.detected && detection.confidence >= 0.7) {
|
|
138
|
+
const updateData = {};
|
|
139
|
+
if (detection.frontendFramework) {
|
|
140
|
+
updateData.frontendFramework = detection.frontendFramework;
|
|
141
|
+
currentFrontend = detection.frontendFramework;
|
|
142
|
+
}
|
|
143
|
+
if (detection.backendFramework) {
|
|
144
|
+
updateData.backendFramework = detection.backendFramework;
|
|
145
|
+
currentBackend = detection.backendFramework;
|
|
146
|
+
}
|
|
147
|
+
await this.prisma.project.update({
|
|
148
|
+
where: { id: projectId },
|
|
149
|
+
data: updateData,
|
|
150
|
+
});
|
|
151
|
+
const notificationMsg = this.frameworkDetector.generateNotificationMessage(detection);
|
|
152
|
+
if (notificationMsg) {
|
|
153
|
+
this.logger.log(notificationMsg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const systemPrompt = this.promptBuilder.build({
|
|
157
|
+
frontendFramework: currentFrontend,
|
|
158
|
+
backendFramework: currentBackend,
|
|
159
|
+
techStackConfig: project.techStackConfig,
|
|
160
|
+
});
|
|
132
161
|
let conversationContext = "";
|
|
133
162
|
if (!project.claudeSessionId) {
|
|
134
163
|
conversationContext = await this.buildContextFromHistory(projectId);
|
|
@@ -284,6 +313,8 @@ exports.ChatService = ChatService = ChatService_1 = __decorate([
|
|
|
284
313
|
(0, common_1.Injectable)(),
|
|
285
314
|
__metadata("design:paramtypes", [prisma_service_1.PrismaService,
|
|
286
315
|
project_service_1.ProjectService,
|
|
287
|
-
claude_cli_service_1.ClaudeCliService
|
|
316
|
+
claude_cli_service_1.ClaudeCliService,
|
|
317
|
+
framework_detector_service_1.FrameworkDetectorService,
|
|
318
|
+
prompt_builder_service_1.PromptBuilderService])
|
|
288
319
|
], ChatService);
|
|
289
320
|
//# sourceMappingURL=chat.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FrontendFramework, BackendFramework } from "@prisma/client";
|
|
2
|
+
export interface DetectionResult {
|
|
3
|
+
detected: boolean;
|
|
4
|
+
frontendFramework?: FrontendFramework;
|
|
5
|
+
backendFramework?: BackendFramework;
|
|
6
|
+
confidence: number;
|
|
7
|
+
matchedKeywords: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare class FrameworkDetectorService {
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly keywordMappings;
|
|
12
|
+
private readonly intentPatterns;
|
|
13
|
+
detect(message: string, currentFrontend: FrontendFramework, currentBackend: BackendFramework): DetectionResult;
|
|
14
|
+
generateNotificationMessage(result: DetectionResult): string | null;
|
|
15
|
+
private getFrontendName;
|
|
16
|
+
private getBackendName;
|
|
17
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var FrameworkDetectorService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.FrameworkDetectorService = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const client_1 = require("@prisma/client");
|
|
13
|
+
let FrameworkDetectorService = FrameworkDetectorService_1 = class FrameworkDetectorService {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.logger = new common_1.Logger(FrameworkDetectorService_1.name);
|
|
16
|
+
this.keywordMappings = [
|
|
17
|
+
{
|
|
18
|
+
keywords: ["react", "vite", "react+vite", "react vite"],
|
|
19
|
+
framework: client_1.FrontendFramework.REACT_VITE,
|
|
20
|
+
type: "frontend",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
keywords: ["next", "nextjs", "next.js", "next js"],
|
|
24
|
+
framework: client_1.FrontendFramework.NEXTJS,
|
|
25
|
+
type: "frontend",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
keywords: ["vue", "vue3", "vue 3", "vue.js", "vuejs", "nuxt"],
|
|
29
|
+
framework: client_1.FrontendFramework.VUE,
|
|
30
|
+
type: "frontend",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
keywords: ["svelte", "sveltekit", "svelte kit"],
|
|
34
|
+
framework: client_1.FrontendFramework.SVELTE,
|
|
35
|
+
type: "frontend",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
keywords: ["react native", "react-native", "reactnative", "rn"],
|
|
39
|
+
framework: client_1.FrontendFramework.REACT_NATIVE,
|
|
40
|
+
type: "frontend",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
keywords: ["flutter", "dart"],
|
|
44
|
+
framework: client_1.FrontendFramework.FLUTTER,
|
|
45
|
+
type: "frontend",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
keywords: ["expo"],
|
|
49
|
+
framework: client_1.FrontendFramework.EXPO,
|
|
50
|
+
type: "frontend",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
keywords: ["express", "expressjs", "express.js", "express js"],
|
|
54
|
+
framework: client_1.BackendFramework.EXPRESS,
|
|
55
|
+
type: "backend",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
keywords: ["fastapi", "fast api", "fast-api"],
|
|
59
|
+
framework: client_1.BackendFramework.FASTAPI,
|
|
60
|
+
type: "backend",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
keywords: ["django", "drf", "django rest"],
|
|
64
|
+
framework: client_1.BackendFramework.DJANGO,
|
|
65
|
+
type: "backend",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
keywords: ["nest", "nestjs", "nest.js", "nest js"],
|
|
69
|
+
framework: client_1.BackendFramework.NESTJS,
|
|
70
|
+
type: "backend",
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
this.intentPatterns = [
|
|
74
|
+
/(?:로|으로)\s*(?:만들|바꿔|변경|전환|사용)/i,
|
|
75
|
+
/(?:쓰|사용)(?:자|할게|해)/i,
|
|
76
|
+
/(?:로|으로)\s*(?:해|해줘|할래)/i,
|
|
77
|
+
/(?:use|switch\s+to|change\s+to|convert\s+to|migrate\s+to)/i,
|
|
78
|
+
/(?:let's\s+use|i\s+want\s+to\s+use|can\s+we\s+use)/i,
|
|
79
|
+
/(?:build\s+with|create\s+with|develop\s+with)/i,
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
detect(message, currentFrontend, currentBackend) {
|
|
83
|
+
const normalizedMessage = message.toLowerCase();
|
|
84
|
+
const matchedKeywords = [];
|
|
85
|
+
let detectedFrontend;
|
|
86
|
+
let detectedBackend;
|
|
87
|
+
for (const mapping of this.keywordMappings) {
|
|
88
|
+
for (const keyword of mapping.keywords) {
|
|
89
|
+
if (normalizedMessage.includes(keyword)) {
|
|
90
|
+
matchedKeywords.push(keyword);
|
|
91
|
+
if (mapping.type === "frontend") {
|
|
92
|
+
detectedFrontend = mapping.framework;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
detectedBackend = mapping.framework;
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (matchedKeywords.length === 0) {
|
|
102
|
+
return {
|
|
103
|
+
detected: false,
|
|
104
|
+
confidence: 0,
|
|
105
|
+
matchedKeywords: [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const hasIntent = this.intentPatterns.some((pattern) => pattern.test(message));
|
|
109
|
+
let confidence = 0.5;
|
|
110
|
+
if (hasIntent) {
|
|
111
|
+
confidence = 0.9;
|
|
112
|
+
}
|
|
113
|
+
const frontendChanged = detectedFrontend !== undefined && detectedFrontend !== currentFrontend;
|
|
114
|
+
const backendChanged = detectedBackend !== undefined && detectedBackend !== currentBackend;
|
|
115
|
+
if (!frontendChanged && !backendChanged) {
|
|
116
|
+
return {
|
|
117
|
+
detected: false,
|
|
118
|
+
confidence: 0,
|
|
119
|
+
matchedKeywords,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const result = {
|
|
123
|
+
detected: true,
|
|
124
|
+
confidence,
|
|
125
|
+
matchedKeywords,
|
|
126
|
+
};
|
|
127
|
+
if (frontendChanged) {
|
|
128
|
+
result.frontendFramework = detectedFrontend;
|
|
129
|
+
}
|
|
130
|
+
if (backendChanged) {
|
|
131
|
+
result.backendFramework = detectedBackend;
|
|
132
|
+
}
|
|
133
|
+
this.logger.log(`Framework change detected: ${JSON.stringify(result)}`);
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
generateNotificationMessage(result) {
|
|
137
|
+
if (!result.detected) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const changes = [];
|
|
141
|
+
if (result.frontendFramework) {
|
|
142
|
+
const name = this.getFrontendName(result.frontendFramework);
|
|
143
|
+
changes.push(`프론트엔드를 **${name}**으로`);
|
|
144
|
+
}
|
|
145
|
+
if (result.backendFramework) {
|
|
146
|
+
const name = this.getBackendName(result.backendFramework);
|
|
147
|
+
changes.push(`백엔드를 **${name}**으로`);
|
|
148
|
+
}
|
|
149
|
+
if (changes.length === 0) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
return `프레임워크 변경이 감지되었습니다: ${changes.join(", ")} 변경합니다.`;
|
|
153
|
+
}
|
|
154
|
+
getFrontendName(framework) {
|
|
155
|
+
switch (framework) {
|
|
156
|
+
case client_1.FrontendFramework.REACT_VITE:
|
|
157
|
+
return "React + Vite";
|
|
158
|
+
case client_1.FrontendFramework.NEXTJS:
|
|
159
|
+
return "Next.js";
|
|
160
|
+
case client_1.FrontendFramework.VUE:
|
|
161
|
+
return "Vue 3";
|
|
162
|
+
case client_1.FrontendFramework.SVELTE:
|
|
163
|
+
return "SvelteKit";
|
|
164
|
+
case client_1.FrontendFramework.REACT_NATIVE:
|
|
165
|
+
return "React Native";
|
|
166
|
+
case client_1.FrontendFramework.FLUTTER:
|
|
167
|
+
return "Flutter";
|
|
168
|
+
case client_1.FrontendFramework.EXPO:
|
|
169
|
+
return "Expo";
|
|
170
|
+
case client_1.FrontendFramework.NONE:
|
|
171
|
+
return "없음";
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
getBackendName(framework) {
|
|
175
|
+
switch (framework) {
|
|
176
|
+
case client_1.BackendFramework.EXPRESS:
|
|
177
|
+
return "Express";
|
|
178
|
+
case client_1.BackendFramework.FASTAPI:
|
|
179
|
+
return "FastAPI";
|
|
180
|
+
case client_1.BackendFramework.DJANGO:
|
|
181
|
+
return "Django";
|
|
182
|
+
case client_1.BackendFramework.NESTJS:
|
|
183
|
+
return "NestJS";
|
|
184
|
+
case client_1.BackendFramework.NONE:
|
|
185
|
+
return "없음";
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
exports.FrameworkDetectorService = FrameworkDetectorService;
|
|
190
|
+
exports.FrameworkDetectorService = FrameworkDetectorService = FrameworkDetectorService_1 = __decorate([
|
|
191
|
+
(0, common_1.Injectable)()
|
|
192
|
+
], FrameworkDetectorService);
|
|
193
|
+
//# sourceMappingURL=framework-detector.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-detector.service.js","sourceRoot":"","sources":["../../src/chat/framework-detector.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DJANGO_PROMPT = "## Backend: Django + Django REST Framework\n\nYou are building a Django backend with Django REST Framework.\n\n### Technology Stack (Backend)\n\n| Category | Technology | Notes |\n|----------|------------|-------|\n| Runtime | Python 3.11+ | Latest stable |\n| Framework | Django 5.x | Batteries included |\n| API | Django REST Framework | REST API toolkit |\n| Database | SQLite (dev) / PostgreSQL (prod) | |\n| Serialization | DRF Serializers | |\n\n### Project Structure\n\n```\nbackend/\n\u251C\u2500\u2500 manage.py\n\u251C\u2500\u2500 config/ # Project settings\n\u2502 \u251C\u2500\u2500 __init__.py\n\u2502 \u251C\u2500\u2500 settings.py\n\u2502 \u251C\u2500\u2500 urls.py\n\u2502 \u2514\u2500\u2500 wsgi.py\n\u251C\u2500\u2500 apps/\n\u2502 \u2514\u2500\u2500 users/\n\u2502 \u251C\u2500\u2500 __init__.py\n\u2502 \u251C\u2500\u2500 models.py\n\u2502 \u251C\u2500\u2500 serializers.py\n\u2502 \u251C\u2500\u2500 views.py\n\u2502 \u2514\u2500\u2500 urls.py\n\u251C\u2500\u2500 requirements.txt\n\u2514\u2500\u2500 .env\n```\n\n### Python Environment Setup (CRITICAL)\n\n**ALWAYS use virtual environment for Python projects:**\n\n```bash\ncd backend\npython -m venv venv\nsource venv/bin/activate # Windows: venv\\Scripts\\activate\n\npip install django djangorestframework django-cors-headers python-dotenv\npip freeze > requirements.txt\n\ndjango-admin startproject config .\npython manage.py startapp users\nmv users apps/\n```\n\n### Virtual Environment Rules\n\n1. **ALWAYS create venv** in the `backend/` directory\n2. **NEVER install packages globally** - always use venv\n3. **Keep requirements.txt updated** after installing new packages\n4. **Include .gitignore** with venv/ excluded:\n ```\n # backend/.gitignore\n venv/\n __pycache__/\n *.pyc\n .env\n *.sqlite3\n ```\n5. **Use python -m pip** to ensure correct pip version:\n ```bash\n python -m pip install <package>\n ```\n6. **Run migrations** after model changes:\n ```bash\n python manage.py makemigrations\n python manage.py migrate\n ```\n\n### Settings Configuration\n\n```python\n# backend/config/settings.py\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n # Third party\n 'rest_framework',\n 'corsheaders',\n # Local apps\n 'apps.users',\n]\n\nMIDDLEWARE = [\n 'corsheaders.middleware.CorsMiddleware',\n 'django.middleware.common.CommonMiddleware',\n # ... other middleware\n]\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:3000\",\n]\n\nREST_FRAMEWORK = {\n 'DEFAULT_PERMISSION_CLASSES': [\n 'rest_framework.permissions.AllowAny',\n ],\n}\n```\n\n### Model Definition\n\n```python\n# backend/apps/users/models.py\nfrom django.db import models\n\nclass User(models.Model):\n name = models.CharField(max_length=100)\n email = models.EmailField(unique=True)\n created_at = models.DateTimeField(auto_now_add=True)\n updated_at = models.DateTimeField(auto_now=True)\n\n class Meta:\n db_table = 'users'\n ordering = ['-created_at']\n\n def __str__(self):\n return self.name\n```\n\n### Serializer\n\n```python\n# backend/apps/users/serializers.py\nfrom rest_framework import serializers\nfrom .models import User\n\nclass UserSerializer(serializers.ModelSerializer):\n class Meta:\n model = User\n fields = ['id', 'name', 'email', 'created_at', 'updated_at']\n read_only_fields = ['id', 'created_at', 'updated_at']\n```\n\n### ViewSet\n\n```python\n# backend/apps/users/views.py\nfrom rest_framework import viewsets\nfrom .models import User\nfrom .serializers import UserSerializer\n\nclass UserViewSet(viewsets.ModelViewSet):\n queryset = User.objects.all()\n serializer_class = UserSerializer\n```\n\n### URL Configuration\n\n```python\n# backend/apps/users/urls.py\nfrom rest_framework.routers import DefaultRouter\nfrom .views import UserViewSet\n\nrouter = DefaultRouter()\nrouter.register(r'', UserViewSet)\n\nurlpatterns = router.urls\n```\n\n```python\n# backend/config/urls.py\nfrom django.contrib import admin\nfrom django.urls import path, include\nfrom rest_framework.decorators import api_view\nfrom rest_framework.response import Response\n\n@api_view(['GET'])\ndef health_check(request):\n return Response({'status': 'ok'})\n\nurlpatterns = [\n path('admin/', admin.site.urls),\n path('api/health', health_check),\n path('api/users/', include('apps.users.urls')),\n]\n```\n\n### Run Commands\n\n```bash\n# Do NOT run these - the preview system handles it\npython manage.py migrate\npython manage.py runserver 3001\n```\n\n### API Design Guidelines\n\n- Use **ModelViewSet** for full CRUD\n- Use **serializers** for validation\n- **ViewSet actions**: list, create, retrieve, update, destroy\n- Proper status codes handled automatically by DRF";
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DJANGO_PROMPT = void 0;
|
|
4
|
+
exports.DJANGO_PROMPT = `## Backend: Django + Django REST Framework
|
|
5
|
+
|
|
6
|
+
You are building a Django backend with Django REST Framework.
|
|
7
|
+
|
|
8
|
+
### Technology Stack (Backend)
|
|
9
|
+
|
|
10
|
+
| Category | Technology | Notes |
|
|
11
|
+
|----------|------------|-------|
|
|
12
|
+
| Runtime | Python 3.11+ | Latest stable |
|
|
13
|
+
| Framework | Django 5.x | Batteries included |
|
|
14
|
+
| API | Django REST Framework | REST API toolkit |
|
|
15
|
+
| Database | SQLite (dev) / PostgreSQL (prod) | |
|
|
16
|
+
| Serialization | DRF Serializers | |
|
|
17
|
+
|
|
18
|
+
### Project Structure
|
|
19
|
+
|
|
20
|
+
\`\`\`
|
|
21
|
+
backend/
|
|
22
|
+
├── manage.py
|
|
23
|
+
├── config/ # Project settings
|
|
24
|
+
│ ├── __init__.py
|
|
25
|
+
│ ├── settings.py
|
|
26
|
+
│ ├── urls.py
|
|
27
|
+
│ └── wsgi.py
|
|
28
|
+
├── apps/
|
|
29
|
+
│ └── users/
|
|
30
|
+
│ ├── __init__.py
|
|
31
|
+
│ ├── models.py
|
|
32
|
+
│ ├── serializers.py
|
|
33
|
+
│ ├── views.py
|
|
34
|
+
│ └── urls.py
|
|
35
|
+
├── requirements.txt
|
|
36
|
+
└── .env
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
### Python Environment Setup (CRITICAL)
|
|
40
|
+
|
|
41
|
+
**ALWAYS use virtual environment for Python projects:**
|
|
42
|
+
|
|
43
|
+
\`\`\`bash
|
|
44
|
+
cd backend
|
|
45
|
+
python -m venv venv
|
|
46
|
+
source venv/bin/activate # Windows: venv\\Scripts\\activate
|
|
47
|
+
|
|
48
|
+
pip install django djangorestframework django-cors-headers python-dotenv
|
|
49
|
+
pip freeze > requirements.txt
|
|
50
|
+
|
|
51
|
+
django-admin startproject config .
|
|
52
|
+
python manage.py startapp users
|
|
53
|
+
mv users apps/
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
### Virtual Environment Rules
|
|
57
|
+
|
|
58
|
+
1. **ALWAYS create venv** in the \`backend/\` directory
|
|
59
|
+
2. **NEVER install packages globally** - always use venv
|
|
60
|
+
3. **Keep requirements.txt updated** after installing new packages
|
|
61
|
+
4. **Include .gitignore** with venv/ excluded:
|
|
62
|
+
\`\`\`
|
|
63
|
+
# backend/.gitignore
|
|
64
|
+
venv/
|
|
65
|
+
__pycache__/
|
|
66
|
+
*.pyc
|
|
67
|
+
.env
|
|
68
|
+
*.sqlite3
|
|
69
|
+
\`\`\`
|
|
70
|
+
5. **Use python -m pip** to ensure correct pip version:
|
|
71
|
+
\`\`\`bash
|
|
72
|
+
python -m pip install <package>
|
|
73
|
+
\`\`\`
|
|
74
|
+
6. **Run migrations** after model changes:
|
|
75
|
+
\`\`\`bash
|
|
76
|
+
python manage.py makemigrations
|
|
77
|
+
python manage.py migrate
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
### Settings Configuration
|
|
81
|
+
|
|
82
|
+
\`\`\`python
|
|
83
|
+
# backend/config/settings.py
|
|
84
|
+
INSTALLED_APPS = [
|
|
85
|
+
'django.contrib.admin',
|
|
86
|
+
'django.contrib.auth',
|
|
87
|
+
'django.contrib.contenttypes',
|
|
88
|
+
'django.contrib.sessions',
|
|
89
|
+
'django.contrib.messages',
|
|
90
|
+
'django.contrib.staticfiles',
|
|
91
|
+
# Third party
|
|
92
|
+
'rest_framework',
|
|
93
|
+
'corsheaders',
|
|
94
|
+
# Local apps
|
|
95
|
+
'apps.users',
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
MIDDLEWARE = [
|
|
99
|
+
'corsheaders.middleware.CorsMiddleware',
|
|
100
|
+
'django.middleware.common.CommonMiddleware',
|
|
101
|
+
# ... other middleware
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
CORS_ALLOWED_ORIGINS = [
|
|
105
|
+
"http://localhost:3000",
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
REST_FRAMEWORK = {
|
|
109
|
+
'DEFAULT_PERMISSION_CLASSES': [
|
|
110
|
+
'rest_framework.permissions.AllowAny',
|
|
111
|
+
],
|
|
112
|
+
}
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
### Model Definition
|
|
116
|
+
|
|
117
|
+
\`\`\`python
|
|
118
|
+
# backend/apps/users/models.py
|
|
119
|
+
from django.db import models
|
|
120
|
+
|
|
121
|
+
class User(models.Model):
|
|
122
|
+
name = models.CharField(max_length=100)
|
|
123
|
+
email = models.EmailField(unique=True)
|
|
124
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
|
125
|
+
updated_at = models.DateTimeField(auto_now=True)
|
|
126
|
+
|
|
127
|
+
class Meta:
|
|
128
|
+
db_table = 'users'
|
|
129
|
+
ordering = ['-created_at']
|
|
130
|
+
|
|
131
|
+
def __str__(self):
|
|
132
|
+
return self.name
|
|
133
|
+
\`\`\`
|
|
134
|
+
|
|
135
|
+
### Serializer
|
|
136
|
+
|
|
137
|
+
\`\`\`python
|
|
138
|
+
# backend/apps/users/serializers.py
|
|
139
|
+
from rest_framework import serializers
|
|
140
|
+
from .models import User
|
|
141
|
+
|
|
142
|
+
class UserSerializer(serializers.ModelSerializer):
|
|
143
|
+
class Meta:
|
|
144
|
+
model = User
|
|
145
|
+
fields = ['id', 'name', 'email', 'created_at', 'updated_at']
|
|
146
|
+
read_only_fields = ['id', 'created_at', 'updated_at']
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
### ViewSet
|
|
150
|
+
|
|
151
|
+
\`\`\`python
|
|
152
|
+
# backend/apps/users/views.py
|
|
153
|
+
from rest_framework import viewsets
|
|
154
|
+
from .models import User
|
|
155
|
+
from .serializers import UserSerializer
|
|
156
|
+
|
|
157
|
+
class UserViewSet(viewsets.ModelViewSet):
|
|
158
|
+
queryset = User.objects.all()
|
|
159
|
+
serializer_class = UserSerializer
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
### URL Configuration
|
|
163
|
+
|
|
164
|
+
\`\`\`python
|
|
165
|
+
# backend/apps/users/urls.py
|
|
166
|
+
from rest_framework.routers import DefaultRouter
|
|
167
|
+
from .views import UserViewSet
|
|
168
|
+
|
|
169
|
+
router = DefaultRouter()
|
|
170
|
+
router.register(r'', UserViewSet)
|
|
171
|
+
|
|
172
|
+
urlpatterns = router.urls
|
|
173
|
+
\`\`\`
|
|
174
|
+
|
|
175
|
+
\`\`\`python
|
|
176
|
+
# backend/config/urls.py
|
|
177
|
+
from django.contrib import admin
|
|
178
|
+
from django.urls import path, include
|
|
179
|
+
from rest_framework.decorators import api_view
|
|
180
|
+
from rest_framework.response import Response
|
|
181
|
+
|
|
182
|
+
@api_view(['GET'])
|
|
183
|
+
def health_check(request):
|
|
184
|
+
return Response({'status': 'ok'})
|
|
185
|
+
|
|
186
|
+
urlpatterns = [
|
|
187
|
+
path('admin/', admin.site.urls),
|
|
188
|
+
path('api/health', health_check),
|
|
189
|
+
path('api/users/', include('apps.users.urls')),
|
|
190
|
+
]
|
|
191
|
+
\`\`\`
|
|
192
|
+
|
|
193
|
+
### Run Commands
|
|
194
|
+
|
|
195
|
+
\`\`\`bash
|
|
196
|
+
# Do NOT run these - the preview system handles it
|
|
197
|
+
python manage.py migrate
|
|
198
|
+
python manage.py runserver 3001
|
|
199
|
+
\`\`\`
|
|
200
|
+
|
|
201
|
+
### API Design Guidelines
|
|
202
|
+
|
|
203
|
+
- Use **ModelViewSet** for full CRUD
|
|
204
|
+
- Use **serializers** for validation
|
|
205
|
+
- **ViewSet actions**: list, create, retrieve, update, destroy
|
|
206
|
+
- Proper status codes handled automatically by DRF`;
|
|
207
|
+
//# sourceMappingURL=django.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"django.js","sourceRoot":"","sources":["../../../../src/chat/prompts/backend/django.ts"],"names":[],"mappings":";;;AAMa,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDA0MsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const EXPRESS_PROMPT = "## Backend: Express + TypeScript + Prisma\n\nYou are building an Express.js backend with TypeScript and Prisma ORM.\n\n### Technology Stack (Backend)\n\n| Category | Technology | Notes |\n|----------|------------|-------|\n| Runtime | Node.js 20+ | LTS version |\n| Framework | Express 4.x | Minimal framework |\n| Language | TypeScript | Strict mode |\n| ORM | Prisma | Type-safe database access |\n| Database | SQLite (dev) / PostgreSQL (prod) | |\n| Validation | Zod | Schema validation |\n\n### Project Structure\n\n```\nbackend/\n\u251C\u2500\u2500 src/\n\u2502 \u251C\u2500\u2500 index.ts # Entry point\n\u2502 \u251C\u2500\u2500 routes/ # Route handlers\n\u2502 \u251C\u2500\u2500 controllers/ # Request/response handling\n\u2502 \u251C\u2500\u2500 services/ # Business logic\n\u2502 \u251C\u2500\u2500 middleware/ # Express middleware\n\u2502 \u2514\u2500\u2500 types/ # TypeScript types\n\u251C\u2500\u2500 prisma/\n\u2502 \u2514\u2500\u2500 schema.prisma # Database schema\n\u251C\u2500\u2500 package.json\n\u2514\u2500\u2500 tsconfig.json\n```\n\n### Backend Setup\n\n```bash\ncd backend\nnpm init -y\nnpm install express cors dotenv zod\nnpm install -D typescript @types/express @types/node @types/cors ts-node nodemon\nnpm install prisma @prisma/client\nnpx prisma init --datasource-provider sqlite\n```\n\n### package.json scripts\n\n```json\n{\n \"scripts\": {\n \"dev\": \"nodemon --exec ts-node src/index.ts\",\n \"build\": \"tsc\",\n \"start\": \"node dist/index.js\",\n \"db:push\": \"prisma db push\",\n \"db:studio\": \"prisma studio\"\n }\n}\n```\n\n### tsconfig.json\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"commonjs\",\n \"lib\": [\"ES2022\"],\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"resolveJsonModule\": true\n },\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\"]\n}\n```\n\n### Server Setup Pattern\n\n```typescript\n// backend/src/index.ts\nimport express from 'express';\nimport cors from 'cors';\nimport { PrismaClient } from '@prisma/client';\nimport usersRouter from './routes/users';\n\nconst app = express();\nconst prisma = new PrismaClient();\nconst PORT = process.env.PORT || 3001;\n\n// Middleware\napp.use(cors({ origin: 'http://localhost:3000' }));\napp.use(express.json());\n\n// Health check\napp.get('/api/health', (req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\n// Routes\napp.use('/api/users', usersRouter);\n\n// Error handler\napp.use((err: Error, req: express.Request, res: express.Response, next: express.NextFunction) => {\n console.error(err.stack);\n res.status(500).json({ error: 'Internal server error' });\n});\n\n// Graceful shutdown\nprocess.on('SIGTERM', async () => {\n await prisma.$disconnect();\n process.exit(0);\n});\n\napp.listen(PORT, () => {\n console.log(`Server running on http://localhost:${PORT}`);\n});\n```\n\n### Route Pattern with Zod Validation\n\n```typescript\n// backend/src/routes/users.ts\nimport { Router } from 'express';\nimport { z } from 'zod';\nimport { PrismaClient } from '@prisma/client';\n\nconst router = Router();\nconst prisma = new PrismaClient();\n\nconst createUserSchema = z.object({\n name: z.string().min(1),\n email: z.string().email(),\n});\n\n// GET /api/users\nrouter.get('/', async (req, res, next) => {\n try {\n const users = await prisma.user.findMany();\n res.json(users);\n } catch (error) {\n next(error);\n }\n});\n\n// GET /api/users/:id\nrouter.get('/:id', async (req, res, next) => {\n try {\n const user = await prisma.user.findUnique({\n where: { id: parseInt(req.params.id) },\n });\n if (!user) {\n return res.status(404).json({ error: 'User not found' });\n }\n res.json(user);\n } catch (error) {\n next(error);\n }\n});\n\n// POST /api/users\nrouter.post('/', async (req, res, next) => {\n try {\n const data = createUserSchema.parse(req.body);\n const user = await prisma.user.create({ data });\n res.status(201).json(user);\n } catch (error) {\n if (error instanceof z.ZodError) {\n return res.status(400).json({ errors: error.errors });\n }\n next(error);\n }\n});\n\n// PUT /api/users/:id\nrouter.put('/:id', async (req, res, next) => {\n try {\n const data = createUserSchema.partial().parse(req.body);\n const user = await prisma.user.update({\n where: { id: parseInt(req.params.id) },\n data,\n });\n res.json(user);\n } catch (error) {\n if (error instanceof z.ZodError) {\n return res.status(400).json({ errors: error.errors });\n }\n next(error);\n }\n});\n\n// DELETE /api/users/:id\nrouter.delete('/:id', async (req, res, next) => {\n try {\n await prisma.user.delete({\n where: { id: parseInt(req.params.id) },\n });\n res.status(204).send();\n } catch (error) {\n next(error);\n }\n});\n\nexport default router;\n```\n\n### Prisma Schema Example\n\n```prisma\n// backend/prisma/schema.prisma\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n url = \"file:./dev.db\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n posts Post[]\n}\n\nmodel Post {\n id Int @id @default(autoincrement())\n title String\n content String?\n published Boolean @default(false)\n authorId Int\n author User @relation(fields: [authorId], references: [id])\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n```\n\n### API Design Guidelines\n\n- **RESTful conventions**: GET read, POST create, PUT update, DELETE delete\n- **Consistent response format**: `{ data, error, message }`\n- **Proper status codes**: 200 OK, 201 Created, 400 Bad Request, 404 Not Found, 500 Error\n- **Input validation**: Use Zod for all request body validation\n- **Error messages**: User-friendly messages, log technical details\n\n### Environment Variables\n\n```\n# backend/.env\nPORT=3001\nDATABASE_URL=\"file:./dev.db\"\n```";
|