@msbayindir/context-rag 1.0.0-beta.1
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/LICENSE +21 -0
- package/README.md +464 -0
- package/dist/bin/cli.cjs +210 -0
- package/dist/bin/cli.cjs.map +1 -0
- package/dist/bin/cli.d.cts +1 -0
- package/dist/bin/cli.d.ts +1 -0
- package/dist/bin/cli.js +187 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/index.cjs +2877 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +812 -0
- package/dist/index.d.ts +812 -0
- package/dist/index.js +2842 -0
- package/dist/index.js.map +1 -0
- package/package.json +91 -0
- package/prisma/schema.prisma +225 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/cli.ts"],"names":["Command","path","fs"],"mappings":"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","file":"cli.cjs","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('0.1.0');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String\r\n name String\r\n systemPrompt String @db.Text\r\n chunkStrategy Json\r\n version Int @default(1)\r\n isActive Boolean @default(true)\r\n isDefault Boolean @default(false)\r\n createdBy String?\r\n changeLog String?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String\r\n chunkIndex Int\r\n chunkType String\r\n\r\n searchContent String @db.Text\r\n searchVector Unsupported(\"vector(768)\")\r\n displayContent String @db.Text\r\n\r\n sourcePageStart Int\r\n sourcePageEnd Int\r\n confidenceScore Float @default(0.5)\r\n metadata Json\r\n\r\n createdAt DateTime @default(now())\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @unique\r\n fileSize Int\r\n pageCount Int\r\n documentType String?\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String?\r\n totalBatches Int @default(0)\r\n completedBatches Int @default(0)\r\n failedBatches Int @default(0)\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n errorMessage String?\r\n\r\n createdAt DateTime @default(now())\r\n completedAt DateTime?\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@index([status])\r\n @@index([fileHash])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int\r\n pageStart Int\r\n pageEnd Int\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0)\r\n lastError String?\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n\r\n startedAt DateTime?\r\n completedAt DateTime?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n @@index([documentId, status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import * as fs from 'fs/promises';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
|
|
6
|
+
var program = new Command();
|
|
7
|
+
program.name("context-rag").description("Context-RAG CLI - Setup and management tools").version("0.1.0");
|
|
8
|
+
program.command("init").description("Initialize Context-RAG in your project").option("-f, --force", "Overwrite existing files").action(async (options) => {
|
|
9
|
+
console.log("\u{1F680} Initializing Context-RAG...\n");
|
|
10
|
+
try {
|
|
11
|
+
const prismaDir = path.join(process.cwd(), "prisma");
|
|
12
|
+
const schemaPath = path.join(prismaDir, "schema.prisma");
|
|
13
|
+
let schemaExists = false;
|
|
14
|
+
try {
|
|
15
|
+
await fs.access(schemaPath);
|
|
16
|
+
schemaExists = true;
|
|
17
|
+
} catch {
|
|
18
|
+
schemaExists = false;
|
|
19
|
+
}
|
|
20
|
+
if (!schemaExists) {
|
|
21
|
+
console.log("\u274C Prisma schema not found at prisma/schema.prisma");
|
|
22
|
+
console.log(" Please run `npx prisma init` first.\n");
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const existingSchema = await fs.readFile(schemaPath, "utf-8");
|
|
26
|
+
if (existingSchema.includes("ContextRagChunk") && !options.force) {
|
|
27
|
+
console.log("\u26A0\uFE0F Context-RAG models already exist in schema.");
|
|
28
|
+
console.log(" Use --force to overwrite.\n");
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
if (!existingSchema.includes("postgresqlExtensions")) {
|
|
32
|
+
console.log("\u26A0\uFE0F Warning: pgvector extension not enabled.");
|
|
33
|
+
console.log(" Add the following to your schema.prisma:\n");
|
|
34
|
+
console.log(" generator client {");
|
|
35
|
+
console.log(' provider = "prisma-client-js"');
|
|
36
|
+
console.log(' previewFeatures = ["postgresqlExtensions"]');
|
|
37
|
+
console.log(" }\n");
|
|
38
|
+
console.log(" datasource db {");
|
|
39
|
+
console.log(' provider = "postgresql"');
|
|
40
|
+
console.log(' url = env("DATABASE_URL")');
|
|
41
|
+
console.log(" extensions = [vector]");
|
|
42
|
+
console.log(" }\n");
|
|
43
|
+
}
|
|
44
|
+
const contextRagModels = `
|
|
45
|
+
// ============================================
|
|
46
|
+
// Context-RAG Models
|
|
47
|
+
// ============================================
|
|
48
|
+
|
|
49
|
+
model ContextRagPromptConfig {
|
|
50
|
+
id String @id @default(uuid())
|
|
51
|
+
documentType String
|
|
52
|
+
name String
|
|
53
|
+
systemPrompt String @db.Text
|
|
54
|
+
chunkStrategy Json
|
|
55
|
+
version Int @default(1)
|
|
56
|
+
isActive Boolean @default(true)
|
|
57
|
+
isDefault Boolean @default(false)
|
|
58
|
+
createdBy String?
|
|
59
|
+
changeLog String?
|
|
60
|
+
createdAt DateTime @default(now())
|
|
61
|
+
updatedAt DateTime @updatedAt
|
|
62
|
+
|
|
63
|
+
chunks ContextRagChunk[]
|
|
64
|
+
|
|
65
|
+
@@unique([documentType, version])
|
|
66
|
+
@@index([documentType, isActive])
|
|
67
|
+
@@map("context_rag_prompt_configs")
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
model ContextRagChunk {
|
|
71
|
+
id String @id @default(uuid())
|
|
72
|
+
promptConfigId String
|
|
73
|
+
promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)
|
|
74
|
+
documentId String
|
|
75
|
+
chunkIndex Int
|
|
76
|
+
chunkType String
|
|
77
|
+
|
|
78
|
+
searchContent String @db.Text
|
|
79
|
+
searchVector Unsupported("vector(768)")
|
|
80
|
+
displayContent String @db.Text
|
|
81
|
+
|
|
82
|
+
sourcePageStart Int
|
|
83
|
+
sourcePageEnd Int
|
|
84
|
+
confidenceScore Float @default(0.5)
|
|
85
|
+
metadata Json
|
|
86
|
+
|
|
87
|
+
createdAt DateTime @default(now())
|
|
88
|
+
|
|
89
|
+
@@index([promptConfigId])
|
|
90
|
+
@@index([documentId])
|
|
91
|
+
@@index([chunkType])
|
|
92
|
+
@@map("context_rag_chunks")
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
model ContextRagDocument {
|
|
96
|
+
id String @id @default(uuid())
|
|
97
|
+
filename String
|
|
98
|
+
fileHash String @unique
|
|
99
|
+
fileSize Int
|
|
100
|
+
pageCount Int
|
|
101
|
+
documentType String?
|
|
102
|
+
status String @default("PENDING")
|
|
103
|
+
|
|
104
|
+
promptConfigId String?
|
|
105
|
+
totalBatches Int @default(0)
|
|
106
|
+
completedBatches Int @default(0)
|
|
107
|
+
failedBatches Int @default(0)
|
|
108
|
+
|
|
109
|
+
tokenUsage Json?
|
|
110
|
+
processingMs Int?
|
|
111
|
+
errorMessage String?
|
|
112
|
+
|
|
113
|
+
createdAt DateTime @default(now())
|
|
114
|
+
completedAt DateTime?
|
|
115
|
+
|
|
116
|
+
batches ContextRagBatch[]
|
|
117
|
+
|
|
118
|
+
@@index([status])
|
|
119
|
+
@@index([fileHash])
|
|
120
|
+
@@map("context_rag_documents")
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
model ContextRagBatch {
|
|
124
|
+
id String @id @default(uuid())
|
|
125
|
+
documentId String
|
|
126
|
+
document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
127
|
+
|
|
128
|
+
batchIndex Int
|
|
129
|
+
pageStart Int
|
|
130
|
+
pageEnd Int
|
|
131
|
+
status String @default("PENDING")
|
|
132
|
+
retryCount Int @default(0)
|
|
133
|
+
lastError String?
|
|
134
|
+
|
|
135
|
+
tokenUsage Json?
|
|
136
|
+
processingMs Int?
|
|
137
|
+
|
|
138
|
+
startedAt DateTime?
|
|
139
|
+
completedAt DateTime?
|
|
140
|
+
createdAt DateTime @default(now())
|
|
141
|
+
updatedAt DateTime @updatedAt
|
|
142
|
+
|
|
143
|
+
@@index([documentId, status])
|
|
144
|
+
@@map("context_rag_batches")
|
|
145
|
+
}
|
|
146
|
+
`;
|
|
147
|
+
let newSchema = existingSchema;
|
|
148
|
+
if (options.force && existingSchema.includes("// Context-RAG Models")) {
|
|
149
|
+
const startMarker = "// ============================================\n// Context-RAG Models";
|
|
150
|
+
const startIndex = newSchema.indexOf(startMarker);
|
|
151
|
+
if (startIndex !== -1) {
|
|
152
|
+
newSchema = newSchema.substring(0, startIndex).trim();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
newSchema = newSchema.trim() + "\n" + contextRagModels;
|
|
156
|
+
await fs.writeFile(schemaPath, newSchema);
|
|
157
|
+
console.log("\u2705 Context-RAG models added to prisma/schema.prisma\n");
|
|
158
|
+
console.log("Next steps:");
|
|
159
|
+
console.log(" 1. Run: npx prisma migrate dev --name add_context_rag");
|
|
160
|
+
console.log(" 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;");
|
|
161
|
+
console.log(" 3. Start using Context-RAG!\n");
|
|
162
|
+
} catch (error) {
|
|
163
|
+
console.error("\u274C Error:", error.message);
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
program.command("status").description("Check Context-RAG setup status").action(async () => {
|
|
168
|
+
console.log("\u{1F50D} Checking Context-RAG status...\n");
|
|
169
|
+
const schemaPath = path.join(process.cwd(), "prisma", "schema.prisma");
|
|
170
|
+
try {
|
|
171
|
+
const schema = await fs.readFile(schemaPath, "utf-8");
|
|
172
|
+
console.log("Prisma Schema:");
|
|
173
|
+
console.log(` \u2705 schema.prisma found`);
|
|
174
|
+
console.log(` ${schema.includes("ContextRagChunk") ? "\u2705" : "\u274C"} Context-RAG models`);
|
|
175
|
+
console.log(` ${schema.includes("postgresqlExtensions") ? "\u2705" : "\u274C"} pgvector extension`);
|
|
176
|
+
console.log();
|
|
177
|
+
} catch {
|
|
178
|
+
console.log("\u274C prisma/schema.prisma not found\n");
|
|
179
|
+
}
|
|
180
|
+
console.log("Environment:");
|
|
181
|
+
console.log(` ${process.env["DATABASE_URL"] ? "\u2705" : "\u274C"} DATABASE_URL`);
|
|
182
|
+
console.log(` ${process.env["GEMINI_API_KEY"] ? "\u2705" : "\u274C"} GEMINI_API_KEY`);
|
|
183
|
+
console.log();
|
|
184
|
+
});
|
|
185
|
+
program.parse();
|
|
186
|
+
//# sourceMappingURL=cli.js.map
|
|
187
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('0.1.0');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String\r\n name String\r\n systemPrompt String @db.Text\r\n chunkStrategy Json\r\n version Int @default(1)\r\n isActive Boolean @default(true)\r\n isDefault Boolean @default(false)\r\n createdBy String?\r\n changeLog String?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String\r\n chunkIndex Int\r\n chunkType String\r\n\r\n searchContent String @db.Text\r\n searchVector Unsupported(\"vector(768)\")\r\n displayContent String @db.Text\r\n\r\n sourcePageStart Int\r\n sourcePageEnd Int\r\n confidenceScore Float @default(0.5)\r\n metadata Json\r\n\r\n createdAt DateTime @default(now())\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @unique\r\n fileSize Int\r\n pageCount Int\r\n documentType String?\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String?\r\n totalBatches Int @default(0)\r\n completedBatches Int @default(0)\r\n failedBatches Int @default(0)\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n errorMessage String?\r\n\r\n createdAt DateTime @default(now())\r\n completedAt DateTime?\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@index([status])\r\n @@index([fileHash])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int\r\n pageStart Int\r\n pageEnd Int\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0)\r\n lastError String?\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n\r\n startedAt DateTime?\r\n completedAt DateTime?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n @@index([documentId, status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|