@chrishdx/llm-dev-server 1.0.0
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 +164 -0
- package/backend/bin/llm-dev-server.js +3 -0
- package/backend/dist/cli.d.ts +15 -0
- package/backend/dist/cli.d.ts.map +1 -0
- package/backend/dist/cli.js +326 -0
- package/backend/dist/cli.js.map +1 -0
- package/backend/dist/config/database.d.ts +10 -0
- package/backend/dist/config/database.d.ts.map +1 -0
- package/backend/dist/config/database.js +61 -0
- package/backend/dist/config/database.js.map +1 -0
- package/backend/dist/config/environment.d.ts +20 -0
- package/backend/dist/config/environment.d.ts.map +1 -0
- package/backend/dist/config/environment.js +77 -0
- package/backend/dist/config/environment.js.map +1 -0
- package/backend/dist/controllers/AuthController.d.ts +18 -0
- package/backend/dist/controllers/AuthController.d.ts.map +1 -0
- package/backend/dist/controllers/AuthController.js +282 -0
- package/backend/dist/controllers/AuthController.js.map +1 -0
- package/backend/dist/controllers/ConversationController.d.ts +44 -0
- package/backend/dist/controllers/ConversationController.d.ts.map +1 -0
- package/backend/dist/controllers/ConversationController.js +193 -0
- package/backend/dist/controllers/ConversationController.js.map +1 -0
- package/backend/dist/controllers/JobController.d.ts +49 -0
- package/backend/dist/controllers/JobController.d.ts.map +1 -0
- package/backend/dist/controllers/JobController.js +227 -0
- package/backend/dist/controllers/JobController.js.map +1 -0
- package/backend/dist/index.d.ts +2 -0
- package/backend/dist/index.d.ts.map +1 -0
- package/backend/dist/index.js +160 -0
- package/backend/dist/index.js.map +1 -0
- package/backend/dist/middleware/auth.middleware.d.ts +25 -0
- package/backend/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/auth.middleware.js +116 -0
- package/backend/dist/middleware/auth.middleware.js.map +1 -0
- package/backend/dist/middleware/authelia.middleware.d.ts +26 -0
- package/backend/dist/middleware/authelia.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/authelia.middleware.js +165 -0
- package/backend/dist/middleware/authelia.middleware.js.map +1 -0
- package/backend/dist/middleware/error.middleware.d.ts +23 -0
- package/backend/dist/middleware/error.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/error.middleware.js +59 -0
- package/backend/dist/middleware/error.middleware.js.map +1 -0
- package/backend/dist/models/AuthToken.d.ts +42 -0
- package/backend/dist/models/AuthToken.d.ts.map +1 -0
- package/backend/dist/models/AuthToken.js +97 -0
- package/backend/dist/models/AuthToken.js.map +1 -0
- package/backend/dist/models/Conversation.d.ts +36 -0
- package/backend/dist/models/Conversation.d.ts.map +1 -0
- package/backend/dist/models/Conversation.js +100 -0
- package/backend/dist/models/Conversation.js.map +1 -0
- package/backend/dist/models/FileOperation.d.ts +36 -0
- package/backend/dist/models/FileOperation.d.ts.map +1 -0
- package/backend/dist/models/FileOperation.js +117 -0
- package/backend/dist/models/FileOperation.js.map +1 -0
- package/backend/dist/models/Job.d.ts +48 -0
- package/backend/dist/models/Job.d.ts.map +1 -0
- package/backend/dist/models/Job.js +87 -0
- package/backend/dist/models/Job.js.map +1 -0
- package/backend/dist/models/Message.d.ts +38 -0
- package/backend/dist/models/Message.d.ts.map +1 -0
- package/backend/dist/models/Message.js +87 -0
- package/backend/dist/models/Message.js.map +1 -0
- package/backend/dist/models/User.d.ts +26 -0
- package/backend/dist/models/User.d.ts.map +1 -0
- package/backend/dist/models/User.js +67 -0
- package/backend/dist/models/User.js.map +1 -0
- package/backend/dist/models/index.d.ts +13 -0
- package/backend/dist/models/index.d.ts.map +1 -0
- package/backend/dist/models/index.js +24 -0
- package/backend/dist/models/index.js.map +1 -0
- package/backend/dist/routes/auth.routes.d.ts +3 -0
- package/backend/dist/routes/auth.routes.d.ts.map +1 -0
- package/backend/dist/routes/auth.routes.js +27 -0
- package/backend/dist/routes/auth.routes.js.map +1 -0
- package/backend/dist/routes/conversation.routes.d.ts +3 -0
- package/backend/dist/routes/conversation.routes.d.ts.map +1 -0
- package/backend/dist/routes/conversation.routes.js +17 -0
- package/backend/dist/routes/conversation.routes.js.map +1 -0
- package/backend/dist/routes/filesystem.routes.d.ts +3 -0
- package/backend/dist/routes/filesystem.routes.d.ts.map +1 -0
- package/backend/dist/routes/filesystem.routes.js +64 -0
- package/backend/dist/routes/filesystem.routes.js.map +1 -0
- package/backend/dist/routes/index.d.ts +3 -0
- package/backend/dist/routes/index.d.ts.map +1 -0
- package/backend/dist/routes/index.js +27 -0
- package/backend/dist/routes/index.js.map +1 -0
- package/backend/dist/routes/job.routes.d.ts +3 -0
- package/backend/dist/routes/job.routes.d.ts.map +1 -0
- package/backend/dist/routes/job.routes.js +18 -0
- package/backend/dist/routes/job.routes.js.map +1 -0
- package/backend/dist/services/auth/BaseAuthService.d.ts +49 -0
- package/backend/dist/services/auth/BaseAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/BaseAuthService.js +97 -0
- package/backend/dist/services/auth/BaseAuthService.js.map +1 -0
- package/backend/dist/services/auth/ClaudeAuthService.d.ts +69 -0
- package/backend/dist/services/auth/ClaudeAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/ClaudeAuthService.js +401 -0
- package/backend/dist/services/auth/ClaudeAuthService.js.map +1 -0
- package/backend/dist/services/auth/CodexAuthService.d.ts +37 -0
- package/backend/dist/services/auth/CodexAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/CodexAuthService.js +186 -0
- package/backend/dist/services/auth/CodexAuthService.js.map +1 -0
- package/backend/dist/services/auth/GeminiAuthService.d.ts +50 -0
- package/backend/dist/services/auth/GeminiAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/GeminiAuthService.js +284 -0
- package/backend/dist/services/auth/GeminiAuthService.js.map +1 -0
- package/backend/dist/services/auth/JwtService.d.ts +27 -0
- package/backend/dist/services/auth/JwtService.d.ts.map +1 -0
- package/backend/dist/services/auth/JwtService.js +65 -0
- package/backend/dist/services/auth/JwtService.js.map +1 -0
- package/backend/dist/services/auth/TokenRefreshService.d.ts +36 -0
- package/backend/dist/services/auth/TokenRefreshService.d.ts.map +1 -0
- package/backend/dist/services/auth/TokenRefreshService.js +178 -0
- package/backend/dist/services/auth/TokenRefreshService.js.map +1 -0
- package/backend/dist/services/conversation/ConversationService.d.ts +89 -0
- package/backend/dist/services/conversation/ConversationService.d.ts.map +1 -0
- package/backend/dist/services/conversation/ConversationService.js +255 -0
- package/backend/dist/services/conversation/ConversationService.js.map +1 -0
- package/backend/dist/services/job/JobService.d.ts +83 -0
- package/backend/dist/services/job/JobService.d.ts.map +1 -0
- package/backend/dist/services/job/JobService.js +213 -0
- package/backend/dist/services/job/JobService.js.map +1 -0
- package/backend/dist/services/job/WorkingDirectoryService.d.ts +73 -0
- package/backend/dist/services/job/WorkingDirectoryService.d.ts.map +1 -0
- package/backend/dist/services/job/WorkingDirectoryService.js +289 -0
- package/backend/dist/services/job/WorkingDirectoryService.js.map +1 -0
- package/backend/dist/services/llm/ClaudeProvider.d.ts +16 -0
- package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/ClaudeProvider.js +229 -0
- package/backend/dist/services/llm/ClaudeProvider.js.map +1 -0
- package/backend/dist/services/llm/CodexProvider.d.ts +15 -0
- package/backend/dist/services/llm/CodexProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/CodexProvider.js +301 -0
- package/backend/dist/services/llm/CodexProvider.js.map +1 -0
- package/backend/dist/services/llm/GeminiProvider.d.ts +17 -0
- package/backend/dist/services/llm/GeminiProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/GeminiProvider.js +190 -0
- package/backend/dist/services/llm/GeminiProvider.js.map +1 -0
- package/backend/dist/services/llm/LLMProviderBase.d.ts +76 -0
- package/backend/dist/services/llm/LLMProviderBase.d.ts.map +1 -0
- package/backend/dist/services/llm/LLMProviderBase.js +34 -0
- package/backend/dist/services/llm/LLMProviderBase.js.map +1 -0
- package/backend/dist/services/llm/ProviderFactory.d.ts +17 -0
- package/backend/dist/services/llm/ProviderFactory.d.ts.map +1 -0
- package/backend/dist/services/llm/ProviderFactory.js +58 -0
- package/backend/dist/services/llm/ProviderFactory.js.map +1 -0
- package/backend/dist/utils/crypto.d.ts +33 -0
- package/backend/dist/utils/crypto.d.ts.map +1 -0
- package/backend/dist/utils/crypto.js +165 -0
- package/backend/dist/utils/crypto.js.map +1 -0
- package/backend/dist/utils/logger.d.ts +4 -0
- package/backend/dist/utils/logger.d.ts.map +1 -0
- package/backend/dist/utils/logger.js +44 -0
- package/backend/dist/utils/logger.js.map +1 -0
- package/backend/dist/utils/validators.d.ts +22 -0
- package/backend/dist/utils/validators.d.ts.map +1 -0
- package/backend/dist/utils/validators.js +127 -0
- package/backend/dist/utils/validators.js.map +1 -0
- package/backend/package.json +45 -0
- package/backend/public/assets/index-C207-KqP.js +188 -0
- package/backend/public/index.html +12 -0
- package/package.json +96 -0
- package/shared/dist/index.d.ts +5 -0
- package/shared/dist/index.d.ts.map +1 -0
- package/shared/dist/index.js +25 -0
- package/shared/dist/index.js.map +1 -0
- package/shared/dist/types/api.d.ts +27 -0
- package/shared/dist/types/api.d.ts.map +1 -0
- package/shared/dist/types/api.js +3 -0
- package/shared/dist/types/api.js.map +1 -0
- package/shared/dist/types/auth.d.ts +62 -0
- package/shared/dist/types/auth.d.ts.map +1 -0
- package/shared/dist/types/auth.js +3 -0
- package/shared/dist/types/auth.js.map +1 -0
- package/shared/dist/types/conversation.d.ts +98 -0
- package/shared/dist/types/conversation.d.ts.map +1 -0
- package/shared/dist/types/conversation.js +3 -0
- package/shared/dist/types/conversation.js.map +1 -0
- package/shared/dist/types/job.d.ts +93 -0
- package/shared/dist/types/job.d.ts.map +1 -0
- package/shared/dist/types/job.js +3 -0
- package/shared/dist/types/job.js.map +1 -0
- package/shared/package.json +15 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ClaudeProvider = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const readline_1 = __importDefault(require("readline"));
|
|
9
|
+
const LLMProviderBase_1 = require("./LLMProviderBase");
|
|
10
|
+
const models_1 = require("../../models");
|
|
11
|
+
const environment_1 = __importDefault(require("../../config/environment"));
|
|
12
|
+
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
13
|
+
class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
14
|
+
constructor(providerConfig) {
|
|
15
|
+
super(providerConfig);
|
|
16
|
+
}
|
|
17
|
+
async initialize() {
|
|
18
|
+
logger_1.default.info(`Initializing Claude provider for working directory: ${this.config.workingDirectory}`);
|
|
19
|
+
// IMPORTANT: Do NOT set CLAUDE_CONFIG_DIR!
|
|
20
|
+
// Claude Code stores OAuth tokens in the macOS Keychain.
|
|
21
|
+
// When CLAUDE_CONFIG_DIR is explicitly set, the Keychain lookup fails.
|
|
22
|
+
// Let Claude use its default config path (~/.claude) automatically.
|
|
23
|
+
logger_1.default.info(`HOME env: ${process.env.HOME}`);
|
|
24
|
+
this.env = {
|
|
25
|
+
...process.env,
|
|
26
|
+
HOME: process.env.HOME || "",
|
|
27
|
+
// Explicitly remove CLAUDE_CONFIG_DIR if it was set elsewhere
|
|
28
|
+
};
|
|
29
|
+
delete this.env.CLAUDE_CONFIG_DIR;
|
|
30
|
+
// Verify auth token exists
|
|
31
|
+
const token = await models_1.AuthToken.findByPk(this.config.tokenId);
|
|
32
|
+
if (!token || token.provider !== "claude") {
|
|
33
|
+
throw new Error("Invalid Claude auth token");
|
|
34
|
+
}
|
|
35
|
+
// Use session from config if provided
|
|
36
|
+
if (this.config.sessionId) {
|
|
37
|
+
this.currentSessionId = this.config.sessionId;
|
|
38
|
+
}
|
|
39
|
+
logger_1.default.info("Claude provider initialized");
|
|
40
|
+
}
|
|
41
|
+
async sendMessage(params) {
|
|
42
|
+
const { content, systemPrompt, attachments, onChunk } = params;
|
|
43
|
+
// Build CLI arguments - put all options BEFORE the prompt
|
|
44
|
+
const args = [
|
|
45
|
+
"--print",
|
|
46
|
+
"--output-format",
|
|
47
|
+
onChunk ? "stream-json" : "json",
|
|
48
|
+
"--dangerously-skip-permissions", // Skip permission prompts for automation
|
|
49
|
+
];
|
|
50
|
+
if (this.config.model) {
|
|
51
|
+
args.push("--model", this.config.model);
|
|
52
|
+
}
|
|
53
|
+
if (systemPrompt) {
|
|
54
|
+
args.push("--append-system-prompt", systemPrompt);
|
|
55
|
+
}
|
|
56
|
+
if (this.currentSessionId) {
|
|
57
|
+
args.push("--session-id", this.currentSessionId);
|
|
58
|
+
}
|
|
59
|
+
// Attachments as additional directories
|
|
60
|
+
if (attachments && attachments.length > 0) {
|
|
61
|
+
attachments.forEach((attachment) => {
|
|
62
|
+
args.push("--add-dir", attachment);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Add the prompt LAST
|
|
66
|
+
args.push("-p", content);
|
|
67
|
+
// Spawn Claude CLI
|
|
68
|
+
const cliPath = this.resolveClaudeCli();
|
|
69
|
+
logger_1.default.info(`Spawning Claude CLI: ${cliPath}`);
|
|
70
|
+
logger_1.default.info(`Claude CLI args: ${args.join(" ")}`);
|
|
71
|
+
logger_1.default.info(`Claude CLI env CLAUDE_CONFIG_DIR: ${this.env?.CLAUDE_CONFIG_DIR ?? "not set"}`);
|
|
72
|
+
logger_1.default.info(`Claude CLI env HOME: ${this.env?.HOME}`);
|
|
73
|
+
logger_1.default.info(`Claude CLI cwd: ${this.config.workingDirectory}`);
|
|
74
|
+
const child = (0, child_process_1.spawn)(cliPath, args, {
|
|
75
|
+
env: this.env,
|
|
76
|
+
cwd: this.config.workingDirectory,
|
|
77
|
+
stdio: ["ignore", "pipe", "pipe"], // Don't pipe stdin - we use -p flag for prompt
|
|
78
|
+
});
|
|
79
|
+
if (onChunk) {
|
|
80
|
+
return this.handleStreamingResponse(child, onChunk);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return this.handleJsonResponse(child);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async handleJsonResponse(child) {
|
|
87
|
+
let stdout = "";
|
|
88
|
+
let stderr = "";
|
|
89
|
+
child.stdout?.on("data", (data) => {
|
|
90
|
+
const chunk = data.toString();
|
|
91
|
+
stdout += chunk;
|
|
92
|
+
logger_1.default.info(`Claude stdout chunk (${chunk.length} bytes): ${chunk.substring(0, 200)}...`);
|
|
93
|
+
});
|
|
94
|
+
child.stderr?.on("data", (data) => {
|
|
95
|
+
const chunk = data.toString();
|
|
96
|
+
stderr += chunk;
|
|
97
|
+
logger_1.default.info(`Claude stderr chunk: ${chunk}`);
|
|
98
|
+
});
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
child.on("close", (code) => {
|
|
101
|
+
if (code !== 0) {
|
|
102
|
+
logger_1.default.error("Claude CLI failed with code:", code);
|
|
103
|
+
logger_1.default.error("Claude CLI stderr:", stderr);
|
|
104
|
+
logger_1.default.error("Claude CLI stdout:", stdout);
|
|
105
|
+
reject(new Error(`Claude CLI exited with code ${code}: ${stderr || stdout || "No output"}`));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
// Claude returns JSON with result field
|
|
110
|
+
const output = JSON.parse(stdout);
|
|
111
|
+
// Check if Claude returned an error
|
|
112
|
+
if (output.is_error) {
|
|
113
|
+
reject(new Error(output.result?.toString() || "Claude returned an error"));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Extract session ID if present
|
|
117
|
+
if (output.session_id) {
|
|
118
|
+
this.currentSessionId = output.session_id;
|
|
119
|
+
}
|
|
120
|
+
const result = {
|
|
121
|
+
content: typeof output.result === "string"
|
|
122
|
+
? output.result
|
|
123
|
+
: JSON.stringify(output.result),
|
|
124
|
+
tokenUsage: {
|
|
125
|
+
input: output.usage?.input_tokens || 0,
|
|
126
|
+
output: output.usage?.output_tokens || 0,
|
|
127
|
+
total: (output.usage?.input_tokens || 0) +
|
|
128
|
+
(output.usage?.output_tokens || 0),
|
|
129
|
+
},
|
|
130
|
+
sessionId: this.currentSessionId,
|
|
131
|
+
};
|
|
132
|
+
this.messageCount++;
|
|
133
|
+
resolve(result);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
137
|
+
reject(new Error(`Failed to parse Claude response: ${message}`));
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
child.on("error", (error) => {
|
|
141
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
142
|
+
reject(new Error(`Failed to spawn Claude CLI: ${message}`));
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async handleStreamingResponse(child, onChunk) {
|
|
147
|
+
let fullContent = "";
|
|
148
|
+
let sessionId;
|
|
149
|
+
let usage = { input: 0, output: 0, total: 0 };
|
|
150
|
+
const rl = readline_1.default.createInterface({
|
|
151
|
+
input: child.stdout,
|
|
152
|
+
crlfDelay: Infinity,
|
|
153
|
+
});
|
|
154
|
+
for await (const line of rl) {
|
|
155
|
+
try {
|
|
156
|
+
const event = JSON.parse(line);
|
|
157
|
+
if (event.type === "message") {
|
|
158
|
+
const chunk = event.content || "";
|
|
159
|
+
fullContent += chunk;
|
|
160
|
+
onChunk(chunk);
|
|
161
|
+
}
|
|
162
|
+
else if (event.type === "result") {
|
|
163
|
+
if (event.session_id) {
|
|
164
|
+
sessionId = event.session_id;
|
|
165
|
+
this.currentSessionId = sessionId;
|
|
166
|
+
}
|
|
167
|
+
if (event.usage) {
|
|
168
|
+
usage = {
|
|
169
|
+
input: event.usage.input_tokens || 0,
|
|
170
|
+
output: event.usage.output_tokens || 0,
|
|
171
|
+
total: (event.usage.input_tokens || 0) +
|
|
172
|
+
(event.usage.output_tokens || 0),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
logger_1.default.warn("Failed to parse streaming event:", line);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
this.messageCount++;
|
|
182
|
+
return {
|
|
183
|
+
content: fullContent,
|
|
184
|
+
tokenUsage: usage,
|
|
185
|
+
sessionId,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async resumeSession(sessionId) {
|
|
189
|
+
this.currentSessionId = sessionId;
|
|
190
|
+
logger_1.default.info(`Resumed Claude session: ${sessionId}`);
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
async endSession() {
|
|
194
|
+
this.currentSessionId = undefined;
|
|
195
|
+
logger_1.default.info("Ended Claude session");
|
|
196
|
+
}
|
|
197
|
+
async getStatus() {
|
|
198
|
+
return {
|
|
199
|
+
ready: true,
|
|
200
|
+
sessionId: this.currentSessionId,
|
|
201
|
+
messageCount: this.messageCount,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async cleanup() {
|
|
205
|
+
this.currentSessionId = undefined;
|
|
206
|
+
this.messageCount = 0;
|
|
207
|
+
}
|
|
208
|
+
resolveClaudeCli() {
|
|
209
|
+
if (environment_1.default.CLAUDE_CLI_PATH) {
|
|
210
|
+
return environment_1.default.CLAUDE_CLI_PATH;
|
|
211
|
+
}
|
|
212
|
+
// Use system-installed claude CLI
|
|
213
|
+
const possiblePaths = [
|
|
214
|
+
"/Users/christianschindler/.local/bin/claude",
|
|
215
|
+
"/usr/local/bin/claude",
|
|
216
|
+
"claude", // Will use PATH
|
|
217
|
+
];
|
|
218
|
+
const fs = require("fs");
|
|
219
|
+
for (const cliPath of possiblePaths) {
|
|
220
|
+
if (cliPath === "claude" || fs.existsSync(cliPath)) {
|
|
221
|
+
return cliPath;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
throw new Error("Claude CLI not found. Install it from https://claude.ai/download");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.ClaudeProvider = ClaudeProvider;
|
|
228
|
+
exports.default = ClaudeProvider;
|
|
229
|
+
//# sourceMappingURL=ClaudeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeProvider.js","sourceRoot":"","sources":["../../../src/services/llm/ClaudeProvider.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAoD;AACpD,wDAAgC;AAChC,uDAM2B;AAC3B,yCAAyC;AAEzC,2EAA8C;AAC9C,gEAAwC;AAiBxC,MAAa,cAAe,SAAQ,iCAAe;IAGjD,YAAY,cAAiC;QAC3C,KAAK,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,gBAAM,CAAC,IAAI,CACT,uDAAuD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CACtF,CAAC;QAEF,2CAA2C;QAC3C,yDAAyD;QACzD,uEAAuE;QACvE,oEAAoE;QACpE,gBAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,GAAG,GAAG;YACT,GAAG,OAAO,CAAC,GAAG;YACd,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;YAC5B,8DAA8D;SAC/D,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAElC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,kBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAChD,CAAC;QAED,gBAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAyB;QACzC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAE/D,0DAA0D;QAC1D,MAAM,IAAI,GAAG;YACX,SAAS;YACT,iBAAiB;YACjB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;YAChC,gCAAgC,EAAE,yCAAyC;SAC5E,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzB,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,gBAAM,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QAC/C,gBAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClD,gBAAM,CAAC,IAAI,CACT,qCACE,IAAI,CAAC,GAAG,EAAE,iBAAiB,IAAI,SACjC,EAAE,CACH,CAAC;QACF,gBAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,gBAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YACjC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,+CAA+C;SACnF,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,KAAmB;QAEnB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC;YAChB,gBAAM,CAAC,IAAI,CACT,wBAAwB,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,SAAS,CAC7D,CAAC,EACD,GAAG,CACJ,KAAK,CACP,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC;YAChB,gBAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,gBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;oBACnD,gBAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;oBAC3C,gBAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;oBAC3C,MAAM,CACJ,IAAI,KAAK,CACP,+BAA+B,IAAI,KACjC,MAAM,IAAI,MAAM,IAAI,WACtB,EAAE,CACH,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,wCAAwC;oBACxC,MAAM,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAEpD,oCAAoC;oBACpC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,MAAM,CACJ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,CACnE,CAAC;wBACF,OAAO;oBACT,CAAC;oBAED,gCAAgC;oBAChC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACtB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;oBAC5C,CAAC;oBAED,MAAM,MAAM,GAAsB;wBAChC,OAAO,EACL,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;4BAC/B,CAAC,CAAC,MAAM,CAAC,MAAM;4BACf,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;wBACnC,UAAU,EAAE;4BACV,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;4BACtC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;4BACxC,KAAK,EACH,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;gCACjC,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;yBACrC;wBACD,SAAS,EAAE,IAAI,CAAC,gBAAgB;qBACjC,CAAC;oBAEF,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,KAAmB,EACnB,OAAgC;QAEhC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,SAA6B,CAAC;QAClC,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAE9C,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,KAAK,CAAC,MAAO;YACpB,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;oBAClC,WAAW,IAAI,KAAK,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;wBAC7B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBACpC,CAAC;oBACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAChB,KAAK,GAAG;4BACN,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC;4BACpC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC;4BACtC,KAAK,EACH,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gCAC/B,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;yBACnC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,KAAK;YACjB,SAAS;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,gBAAM,CAAC,IAAI,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,gBAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO;YACL,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,CAAC,gBAAgB;YAChC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAEO,gBAAgB;QACtB,IAAI,qBAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAO,qBAAM,CAAC,eAAe,CAAC;QAChC,CAAC;QAED,kCAAkC;QAClC,MAAM,aAAa,GAAG;YACpB,6CAA6C;YAC7C,uBAAuB;YACvB,QAAQ,EAAE,gBAAgB;SAC3B,CAAC;QAEF,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;CACF;AAxRD,wCAwRC;AAED,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LLMProviderBase, LLMProviderConfig, SendMessageParams, SendMessageResult, ProviderStatus } from "./LLMProviderBase";
|
|
2
|
+
export declare class CodexProvider extends LLMProviderBase {
|
|
3
|
+
private currentThreadId?;
|
|
4
|
+
constructor(providerConfig: LLMProviderConfig);
|
|
5
|
+
initialize(): Promise<void>;
|
|
6
|
+
sendMessage(params: SendMessageParams): Promise<SendMessageResult>;
|
|
7
|
+
private handleJSONLResponse;
|
|
8
|
+
resumeSession(sessionId: string): Promise<boolean>;
|
|
9
|
+
endSession(): Promise<void>;
|
|
10
|
+
getStatus(): Promise<ProviderStatus>;
|
|
11
|
+
cleanup(): Promise<void>;
|
|
12
|
+
private resolveCodexBinary;
|
|
13
|
+
}
|
|
14
|
+
export default CodexProvider;
|
|
15
|
+
//# sourceMappingURL=CodexProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexProvider.d.ts","sourceRoot":"","sources":["../../../src/services/llm/CodexProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAK3B,qBAAa,aAAc,SAAQ,eAAe;IAChD,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,cAAc,EAAE,iBAAiB;IAIvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA+C1D,mBAAmB;IAyK3B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAQpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,kBAAkB;CAsD3B;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CodexProvider = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const readline_1 = __importDefault(require("readline"));
|
|
11
|
+
const LLMProviderBase_1 = require("./LLMProviderBase");
|
|
12
|
+
const models_1 = require("../../models");
|
|
13
|
+
const environment_1 = __importDefault(require("../../config/environment"));
|
|
14
|
+
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
15
|
+
class CodexProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
16
|
+
constructor(providerConfig) {
|
|
17
|
+
super(providerConfig);
|
|
18
|
+
}
|
|
19
|
+
async initialize() {
|
|
20
|
+
logger_1.default.info(`Initializing Codex provider for working directory: ${this.config.workingDirectory}`);
|
|
21
|
+
// Set environment for Codex CLI - use absolute path
|
|
22
|
+
const codexHome = path_1.default.resolve(environment_1.default.DATA_DIR, "codex");
|
|
23
|
+
// Ensure codex home directory exists
|
|
24
|
+
const fs = require("fs");
|
|
25
|
+
if (!fs.existsSync(codexHome)) {
|
|
26
|
+
fs.mkdirSync(codexHome, { recursive: true });
|
|
27
|
+
logger_1.default.info(`Created Codex home directory: ${codexHome}`);
|
|
28
|
+
}
|
|
29
|
+
this.env = {
|
|
30
|
+
...process.env,
|
|
31
|
+
CODEX_HOME: codexHome,
|
|
32
|
+
};
|
|
33
|
+
// Verify auth token exists
|
|
34
|
+
const token = await models_1.AuthToken.findByPk(this.config.tokenId);
|
|
35
|
+
if (!token || token.provider !== "codex") {
|
|
36
|
+
throw new Error("Invalid Codex auth token");
|
|
37
|
+
}
|
|
38
|
+
// Use thread ID from config if provided
|
|
39
|
+
if (this.config.sessionId) {
|
|
40
|
+
this.currentThreadId = this.config.sessionId;
|
|
41
|
+
}
|
|
42
|
+
logger_1.default.info("Codex provider initialized");
|
|
43
|
+
}
|
|
44
|
+
async sendMessage(params) {
|
|
45
|
+
const { content, systemPrompt, onChunk } = params;
|
|
46
|
+
// Build CLI arguments
|
|
47
|
+
const args = ["exec", "--experimental-json", "--skip-git-repo-check"];
|
|
48
|
+
// Only specify model if it's not "default" (ChatGPT accounts may not support custom models)
|
|
49
|
+
if (this.config.model && this.config.model !== "default") {
|
|
50
|
+
args.push("--model", this.config.model);
|
|
51
|
+
}
|
|
52
|
+
if (this.currentThreadId) {
|
|
53
|
+
args.push("resume", this.currentThreadId);
|
|
54
|
+
}
|
|
55
|
+
// Spawn Codex CLI
|
|
56
|
+
const binaryPath = this.resolveCodexBinary();
|
|
57
|
+
// Use absolute path for CODEX_HOME
|
|
58
|
+
const codexHome = path_1.default.resolve(environment_1.default.DATA_DIR, "codex");
|
|
59
|
+
// Build clean env with only CODEX_HOME set explicitly
|
|
60
|
+
const spawnEnv = {
|
|
61
|
+
...process.env,
|
|
62
|
+
CODEX_HOME: codexHome,
|
|
63
|
+
};
|
|
64
|
+
logger_1.default.info(`Spawning Codex CLI: ${binaryPath} ${args.join(" ")}`, {
|
|
65
|
+
CODEX_HOME: codexHome,
|
|
66
|
+
});
|
|
67
|
+
const child = (0, child_process_1.spawn)(binaryPath, args, {
|
|
68
|
+
env: spawnEnv,
|
|
69
|
+
cwd: this.config.workingDirectory,
|
|
70
|
+
stdio: ["pipe", "pipe", "pipe"], // Need stdin for prompt, stdout/stderr for output
|
|
71
|
+
});
|
|
72
|
+
// Write prompt to stdin
|
|
73
|
+
if (child.stdin) {
|
|
74
|
+
const fullPrompt = systemPrompt
|
|
75
|
+
? `${systemPrompt}\n\n${content}`
|
|
76
|
+
: content;
|
|
77
|
+
child.stdin.write(fullPrompt);
|
|
78
|
+
child.stdin.end();
|
|
79
|
+
}
|
|
80
|
+
return this.handleJSONLResponse(child, onChunk);
|
|
81
|
+
}
|
|
82
|
+
async handleJSONLResponse(child, onChunk) {
|
|
83
|
+
let fullContent = "";
|
|
84
|
+
let threadId;
|
|
85
|
+
let usage = { input: 0, output: 0, total: 0 };
|
|
86
|
+
let stderrOutput = "";
|
|
87
|
+
// Capture stderr for debugging
|
|
88
|
+
child.stderr?.on("data", (data) => {
|
|
89
|
+
const chunk = data.toString();
|
|
90
|
+
stderrOutput += chunk;
|
|
91
|
+
logger_1.default.info("Codex stderr:", chunk);
|
|
92
|
+
});
|
|
93
|
+
// Log process exit
|
|
94
|
+
child.on("exit", (code, signal) => {
|
|
95
|
+
logger_1.default.info("Codex process exited", {
|
|
96
|
+
code,
|
|
97
|
+
signal,
|
|
98
|
+
stderrLength: stderrOutput.length,
|
|
99
|
+
});
|
|
100
|
+
if (stderrOutput) {
|
|
101
|
+
logger_1.default.info("Codex stderr output:", stderrOutput);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
child.on("error", (error) => {
|
|
105
|
+
logger_1.default.error("Codex spawn error:", error.message);
|
|
106
|
+
});
|
|
107
|
+
const rl = readline_1.default.createInterface({
|
|
108
|
+
input: child.stdout,
|
|
109
|
+
crlfDelay: Infinity,
|
|
110
|
+
});
|
|
111
|
+
for await (const line of rl) {
|
|
112
|
+
logger_1.default.info("Codex JSONL line:", { line });
|
|
113
|
+
try {
|
|
114
|
+
const event = JSON.parse(line);
|
|
115
|
+
logger_1.default.info("Codex parsed event:", {
|
|
116
|
+
type: event.type,
|
|
117
|
+
event: JSON.stringify(event).substring(0, 500),
|
|
118
|
+
});
|
|
119
|
+
if (event.type === "thread.started") {
|
|
120
|
+
threadId = event.thread_id;
|
|
121
|
+
this.currentThreadId = threadId;
|
|
122
|
+
logger_1.default.debug("Codex thread started:", threadId);
|
|
123
|
+
}
|
|
124
|
+
else if (event.type === "item.updated" ||
|
|
125
|
+
event.type === "item.completed") {
|
|
126
|
+
logger_1.default.info("Codex item event:", {
|
|
127
|
+
itemType: event.item?.type,
|
|
128
|
+
hasText: !!event.item?.text,
|
|
129
|
+
textLength: event.item?.text?.length,
|
|
130
|
+
});
|
|
131
|
+
if (event.item?.type === "agent_message" && event.item.text) {
|
|
132
|
+
const chunk = event.item.text;
|
|
133
|
+
fullContent = chunk; // Codex sends full text, not delta
|
|
134
|
+
logger_1.default.info("Codex agent message received:", {
|
|
135
|
+
contentLength: chunk.length,
|
|
136
|
+
});
|
|
137
|
+
if (onChunk) {
|
|
138
|
+
onChunk(chunk);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else if (event.item?.content) {
|
|
142
|
+
// Alternative format - content array
|
|
143
|
+
const textContent = event.item.content.find((c) => c.type === "text");
|
|
144
|
+
if (textContent?.text) {
|
|
145
|
+
fullContent = textContent.text;
|
|
146
|
+
logger_1.default.info("Codex content array message:", {
|
|
147
|
+
contentLength: fullContent.length,
|
|
148
|
+
});
|
|
149
|
+
if (onChunk) {
|
|
150
|
+
onChunk(fullContent);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (event.type === "message.created" ||
|
|
156
|
+
event.type === "message.completed") {
|
|
157
|
+
// Another possible event format
|
|
158
|
+
logger_1.default.info("Codex message event:", {
|
|
159
|
+
role: event.message?.role,
|
|
160
|
+
hasContent: !!event.message?.content,
|
|
161
|
+
});
|
|
162
|
+
if (event.message?.content) {
|
|
163
|
+
const content = event.message.content;
|
|
164
|
+
if (Array.isArray(content)) {
|
|
165
|
+
const textContent = content.find((c) => c.type === "text" || c.type === "output_text");
|
|
166
|
+
if (textContent?.text) {
|
|
167
|
+
fullContent = textContent.text;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (typeof content === "string") {
|
|
171
|
+
fullContent = content;
|
|
172
|
+
}
|
|
173
|
+
if (fullContent && onChunk) {
|
|
174
|
+
onChunk(fullContent);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (event.type === "turn.completed") {
|
|
179
|
+
if (event.usage) {
|
|
180
|
+
usage = {
|
|
181
|
+
input: event.usage.input_tokens || 0,
|
|
182
|
+
output: event.usage.output_tokens || 0,
|
|
183
|
+
total: (event.usage.input_tokens || 0) +
|
|
184
|
+
(event.usage.output_tokens || 0),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (event.type === "turn.failed" || event.type === "error") {
|
|
189
|
+
let errorMsg = event.error?.message || event.message || "Codex execution failed";
|
|
190
|
+
// Try to parse nested JSON error message
|
|
191
|
+
try {
|
|
192
|
+
if (errorMsg.startsWith("{")) {
|
|
193
|
+
const parsed = JSON.parse(errorMsg);
|
|
194
|
+
errorMsg = parsed.detail || parsed.message || errorMsg;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Keep original message
|
|
199
|
+
}
|
|
200
|
+
throw new Error(errorMsg);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
// Re-throw errors from turn.failed/error events
|
|
205
|
+
if (error instanceof Error) {
|
|
206
|
+
const msg = error.message;
|
|
207
|
+
if (msg.includes("not supported") ||
|
|
208
|
+
msg.includes("failed") ||
|
|
209
|
+
msg.includes("error") ||
|
|
210
|
+
msg.includes("Error")) {
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Only warn for JSON parsing issues
|
|
215
|
+
if (error instanceof SyntaxError) {
|
|
216
|
+
logger_1.default.warn("Failed to parse Codex JSONL event:", line);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
this.messageCount++;
|
|
224
|
+
logger_1.default.info("Codex response completed", {
|
|
225
|
+
contentLength: fullContent.length,
|
|
226
|
+
threadId,
|
|
227
|
+
usage,
|
|
228
|
+
});
|
|
229
|
+
return {
|
|
230
|
+
content: fullContent,
|
|
231
|
+
tokenUsage: usage,
|
|
232
|
+
sessionId: threadId,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async resumeSession(sessionId) {
|
|
236
|
+
this.currentThreadId = sessionId;
|
|
237
|
+
logger_1.default.info(`Resumed Codex thread: ${sessionId}`);
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
async endSession() {
|
|
241
|
+
this.currentThreadId = undefined;
|
|
242
|
+
logger_1.default.info("Ended Codex thread");
|
|
243
|
+
}
|
|
244
|
+
async getStatus() {
|
|
245
|
+
return {
|
|
246
|
+
ready: true,
|
|
247
|
+
sessionId: this.currentThreadId,
|
|
248
|
+
messageCount: this.messageCount,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
async cleanup() {
|
|
252
|
+
this.currentThreadId = undefined;
|
|
253
|
+
this.messageCount = 0;
|
|
254
|
+
}
|
|
255
|
+
resolveCodexBinary() {
|
|
256
|
+
if (environment_1.default.CODEX_CLI_PATH) {
|
|
257
|
+
return environment_1.default.CODEX_CLI_PATH;
|
|
258
|
+
}
|
|
259
|
+
// Determine platform triple
|
|
260
|
+
const platform = os_1.default.platform();
|
|
261
|
+
const arch = os_1.default.arch();
|
|
262
|
+
let triple;
|
|
263
|
+
if (platform === "linux") {
|
|
264
|
+
triple =
|
|
265
|
+
arch === "arm64"
|
|
266
|
+
? "aarch64-unknown-linux-musl"
|
|
267
|
+
: "x86_64-unknown-linux-musl";
|
|
268
|
+
}
|
|
269
|
+
else if (platform === "darwin") {
|
|
270
|
+
triple =
|
|
271
|
+
arch === "arm64" ? "aarch64-apple-darwin" : "x86_64-apple-darwin";
|
|
272
|
+
}
|
|
273
|
+
else if (platform === "win32") {
|
|
274
|
+
triple =
|
|
275
|
+
arch === "arm64" ? "aarch64-pc-windows-msvc" : "x86_64-pc-windows-msvc";
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
throw new Error(`Unsupported platform: ${platform}`);
|
|
279
|
+
}
|
|
280
|
+
const fs = require("fs");
|
|
281
|
+
const binaryName = platform === "win32" ? "codex.exe" : "codex";
|
|
282
|
+
// Search for the SDK in node_modules directories relative to working directory
|
|
283
|
+
const searchPaths = [
|
|
284
|
+
// Direct in current working directory (backend/)
|
|
285
|
+
path_1.default.join(process.cwd(), "node_modules", "@openai", "codex-sdk"),
|
|
286
|
+
// Hoisted to workspace root (one level up from backend/)
|
|
287
|
+
path_1.default.join(process.cwd(), "..", "node_modules", "@openai", "codex-sdk"),
|
|
288
|
+
];
|
|
289
|
+
for (const sdkDir of searchPaths) {
|
|
290
|
+
const binaryPath = path_1.default.join(sdkDir, "vendor", triple, "codex", binaryName);
|
|
291
|
+
if (fs.existsSync(binaryPath)) {
|
|
292
|
+
logger_1.default.debug(`Found Codex binary at: ${binaryPath}`);
|
|
293
|
+
return binaryPath;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
throw new Error(`Codex SDK binary not found. Install it with: npm install @openai/codex-sdk`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.CodexProvider = CodexProvider;
|
|
300
|
+
exports.default = CodexProvider;
|
|
301
|
+
//# sourceMappingURL=CodexProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexProvider.js","sourceRoot":"","sources":["../../../src/services/llm/CodexProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LLMProviderBase, LLMProviderConfig, SendMessageParams, SendMessageResult, ProviderStatus } from "./LLMProviderBase";
|
|
2
|
+
export declare class GeminiProvider extends LLMProviderBase {
|
|
3
|
+
private currentSessionId?;
|
|
4
|
+
private geminiHome;
|
|
5
|
+
constructor(providerConfig: LLMProviderConfig);
|
|
6
|
+
initialize(): Promise<void>;
|
|
7
|
+
sendMessage(params: SendMessageParams): Promise<SendMessageResult>;
|
|
8
|
+
private handleJsonResponse;
|
|
9
|
+
private handleStreamingResponse;
|
|
10
|
+
resumeSession(sessionId: string): Promise<boolean>;
|
|
11
|
+
endSession(): Promise<void>;
|
|
12
|
+
getStatus(): Promise<ProviderStatus>;
|
|
13
|
+
cleanup(): Promise<void>;
|
|
14
|
+
private resolveGeminiCli;
|
|
15
|
+
}
|
|
16
|
+
export default GeminiProvider;
|
|
17
|
+
//# sourceMappingURL=GeminiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/services/llm/GeminiProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAc3B,qBAAa,cAAe,SAAQ,eAAe;IACjD,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,UAAU,CAAS;gBAEf,cAAc,EAAE,iBAAiB;IAMvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAsC1D,kBAAkB;YAyDlB,uBAAuB;IA6C/B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAQpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,gBAAgB;CAczB;AAED,eAAe,cAAc,CAAC"}
|