@chrishdx/llm-dev-server 1.2.3 → 1.2.5
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/backend/dist/config/database.d.ts +1 -0
- package/backend/dist/config/database.d.ts.map +1 -1
- package/backend/dist/config/database.js +34 -1
- package/backend/dist/config/database.js.map +1 -1
- package/backend/dist/services/llm/ClaudeProvider.d.ts +4 -11
- package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -1
- package/backend/dist/services/llm/ClaudeProvider.js +361 -103
- package/backend/dist/services/llm/ClaudeProvider.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/config/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/config/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAMlD,cAAM,QAAQ;IACL,SAAS,EAAE,SAAS,CAAC;;IAqBtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA0CnB,yBAAyB;IA4BjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AACvC,eAAe,QAAQ,CAAC"}
|
|
@@ -38,7 +38,22 @@ class Database {
|
|
|
38
38
|
logger_1.default.info('Database connection established successfully');
|
|
39
39
|
// Sync models (in development, use migrations in production)
|
|
40
40
|
if (environment_1.default.NODE_ENV === 'development') {
|
|
41
|
-
|
|
41
|
+
const isSqlite = this.sequelize.getDialect() === 'sqlite';
|
|
42
|
+
let foreignKeysDisabled = false;
|
|
43
|
+
try {
|
|
44
|
+
if (isSqlite) {
|
|
45
|
+
// SQLite can't drop tables referenced by FKs during alter.
|
|
46
|
+
await this.sequelize.query('PRAGMA foreign_keys = OFF');
|
|
47
|
+
foreignKeysDisabled = true;
|
|
48
|
+
await this.cleanupSqliteBackupTables();
|
|
49
|
+
}
|
|
50
|
+
await this.sequelize.sync({ alter: true });
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (foreignKeysDisabled) {
|
|
54
|
+
await this.sequelize.query('PRAGMA foreign_keys = ON');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
42
57
|
logger_1.default.info('Database synchronized');
|
|
43
58
|
}
|
|
44
59
|
else {
|
|
@@ -51,6 +66,24 @@ class Database {
|
|
|
51
66
|
throw error;
|
|
52
67
|
}
|
|
53
68
|
}
|
|
69
|
+
async cleanupSqliteBackupTables() {
|
|
70
|
+
const backupTables = await this.sequelize.query("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%_backup';", { type: sequelize_1.QueryTypes.SELECT });
|
|
71
|
+
for (const { name } of backupTables) {
|
|
72
|
+
if (!name.endsWith('_backup')) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const baseTable = name.slice(0, -'_backup'.length);
|
|
76
|
+
const baseExists = await this.sequelize.query("SELECT name FROM sqlite_master WHERE type='table' AND name = ? LIMIT 1;", { replacements: [baseTable], type: sequelize_1.QueryTypes.SELECT });
|
|
77
|
+
if (baseExists.length > 0) {
|
|
78
|
+
const quotedName = `"${name.replace(/"/g, '""')}"`;
|
|
79
|
+
await this.sequelize.query(`DROP TABLE IF EXISTS ${quotedName};`);
|
|
80
|
+
logger_1.default.warn(`Removed leftover SQLite backup table: ${name}`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
logger_1.default.warn(`Found SQLite backup table without base table (${name}); leaving it untouched.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
54
87
|
async close() {
|
|
55
88
|
await this.sequelize.close();
|
|
56
89
|
logger_1.default.info('Database connection closed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/config/database.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/config/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { LLMProviderBase, LLMProviderConfig, SendMessageParams, SendMessageResult, ProviderStatus } from "./LLMProviderBase";
|
|
2
2
|
export declare class ClaudeProvider extends LLMProviderBase {
|
|
3
|
-
private currentSessionId?;
|
|
4
3
|
private accessToken?;
|
|
5
|
-
private
|
|
4
|
+
private refreshToken?;
|
|
5
|
+
private configDir;
|
|
6
|
+
private cliPath;
|
|
6
7
|
constructor(providerConfig: LLMProviderConfig);
|
|
7
8
|
initialize(): Promise<void>;
|
|
8
9
|
/**
|
|
@@ -12,15 +13,7 @@ export declare class ClaudeProvider extends LLMProviderBase {
|
|
|
12
13
|
/**
|
|
13
14
|
* Refresh Claude OAuth token
|
|
14
15
|
*/
|
|
15
|
-
private
|
|
16
|
-
/**
|
|
17
|
-
* Helper to extract text from assistant messages
|
|
18
|
-
*/
|
|
19
|
-
private getAssistantText;
|
|
20
|
-
/**
|
|
21
|
-
* Helper to get token usage from SDK message
|
|
22
|
-
*/
|
|
23
|
-
private getTokenUsage;
|
|
16
|
+
private refreshTokenInternal;
|
|
24
17
|
sendMessage(params: SendMessageParams): Promise<SendMessageResult>;
|
|
25
18
|
resumeSession(sessionId: string): Promise<boolean>;
|
|
26
19
|
endSession(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeProvider.d.ts","sourceRoot":"","sources":["../../../src/services/llm/ClaudeProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ClaudeProvider.d.ts","sourceRoot":"","sources":["../../../src/services/llm/ClaudeProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAiW3B,qBAAa,cAAe,SAAQ,eAAe;IACjD,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,cAAc,EAAE,iBAAiB;IAYvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjC;;OAEG;YACW,oBAAoB;IAgBlC;;OAEG;YACW,oBAAoB;IAqE5B,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6HlE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAQpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAe/B;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -6,36 +6,278 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.ClaudeProvider = void 0;
|
|
7
7
|
const LLMProviderBase_1 = require("./LLMProviderBase");
|
|
8
8
|
const models_1 = require("../../models");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
9
12
|
const crypto_1 = require("../../utils/crypto");
|
|
10
13
|
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
11
|
-
const
|
|
12
|
-
const
|
|
14
|
+
const environment_1 = __importDefault(require("../../config/environment"));
|
|
15
|
+
const CLAUDE_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
16
|
+
const CLAUDE_TOKEN_URL = "https://console.anthropic.com/v1/oauth/token";
|
|
17
|
+
/**
|
|
18
|
+
* Resolve path to bundled Claude CLI from @anthropic-ai/claude-agent-sdk
|
|
19
|
+
*/
|
|
20
|
+
function resolveBundledClaudeCliPath() {
|
|
21
|
+
// Search for @anthropic-ai/claude-agent-sdk in node_modules
|
|
22
|
+
const startDirs = [__dirname, process.cwd()];
|
|
23
|
+
for (const startDir of startDirs) {
|
|
24
|
+
let current = startDir;
|
|
25
|
+
while (true) {
|
|
26
|
+
const candidate = path_1.default.join(current, "node_modules", "@anthropic-ai", "claude-agent-sdk");
|
|
27
|
+
const pkgPath = path_1.default.join(candidate, "package.json");
|
|
28
|
+
const cliPath = path_1.default.join(candidate, "cli.js");
|
|
29
|
+
if (fs_1.default.existsSync(pkgPath) && fs_1.default.existsSync(cliPath)) {
|
|
30
|
+
logger_1.default.info(`Found Claude CLI at: ${cliPath}`);
|
|
31
|
+
return cliPath;
|
|
32
|
+
}
|
|
33
|
+
const parent = path_1.default.dirname(current);
|
|
34
|
+
if (parent === current)
|
|
35
|
+
break;
|
|
36
|
+
current = parent;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw new Error("Unable to locate @anthropic-ai/claude-agent-sdk. Make sure it's installed.");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build CLI arguments for claude command
|
|
43
|
+
*/
|
|
44
|
+
function buildCliArgs(params) {
|
|
45
|
+
const args = ["--print"];
|
|
46
|
+
// Output format
|
|
47
|
+
if (params.streaming) {
|
|
48
|
+
args.push("--verbose", "--output-format", "stream-json", "--include-partial-messages");
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
args.push("--output-format", "json");
|
|
52
|
+
}
|
|
53
|
+
// Model
|
|
54
|
+
if (params.model) {
|
|
55
|
+
args.push("--model", params.model);
|
|
56
|
+
}
|
|
57
|
+
// System prompt
|
|
58
|
+
if (params.systemPrompt?.trim()) {
|
|
59
|
+
args.push("--append-system-prompt", params.systemPrompt.trim());
|
|
60
|
+
}
|
|
61
|
+
// Session management
|
|
62
|
+
if (params.sessionId) {
|
|
63
|
+
args.push("--session-id", params.sessionId);
|
|
64
|
+
}
|
|
65
|
+
// Disable session persistence to avoid "session already in use" errors
|
|
66
|
+
if (params.noSessionPersistence) {
|
|
67
|
+
args.push("--no-session-persistence");
|
|
68
|
+
}
|
|
69
|
+
// Permission mode
|
|
70
|
+
const permMode = params.permissionMode || "bypassPermissions";
|
|
71
|
+
args.push("--permission-mode", permMode);
|
|
72
|
+
if (permMode === "bypassPermissions") {
|
|
73
|
+
args.push("--dangerously-skip-permissions");
|
|
74
|
+
}
|
|
75
|
+
return args;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get credentials file path for config directory
|
|
79
|
+
*/
|
|
80
|
+
function getCredentialsPath(configDir) {
|
|
81
|
+
return path_1.default.join(configDir, ".credentials.json");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Write credentials file
|
|
85
|
+
*/
|
|
86
|
+
function writeCredentialsFile(configDir, oauth) {
|
|
87
|
+
const credPath = getCredentialsPath(configDir);
|
|
88
|
+
// Ensure directory exists
|
|
89
|
+
if (!fs_1.default.existsSync(configDir)) {
|
|
90
|
+
fs_1.default.mkdirSync(configDir, { recursive: true });
|
|
91
|
+
}
|
|
92
|
+
const credentials = {
|
|
93
|
+
claudeAiOauth: oauth,
|
|
94
|
+
};
|
|
95
|
+
fs_1.default.writeFileSync(credPath, JSON.stringify(credentials, null, 2), "utf8");
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parse JSON output from Claude CLI
|
|
99
|
+
*/
|
|
100
|
+
function parseCliJsonOutput(stdout) {
|
|
101
|
+
const lines = stdout.trim().split("\n");
|
|
102
|
+
const messages = [];
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
const trimmed = line.trim();
|
|
105
|
+
if (!trimmed || !trimmed.startsWith("{"))
|
|
106
|
+
continue;
|
|
107
|
+
try {
|
|
108
|
+
const msg = JSON.parse(trimmed);
|
|
109
|
+
messages.push(msg);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
logger_1.default.warn("Failed to parse CLI output line:", trimmed.slice(0, 100));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return messages;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract text from assistant message
|
|
119
|
+
*/
|
|
120
|
+
function extractAssistantText(msg) {
|
|
121
|
+
if (msg.type !== "assistant")
|
|
122
|
+
return null;
|
|
123
|
+
if (!msg.message?.content)
|
|
124
|
+
return null;
|
|
125
|
+
return msg.message.content
|
|
126
|
+
.filter((block) => block.type === "text" && block.text)
|
|
127
|
+
.map((block) => block.text || "")
|
|
128
|
+
.join("");
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Clean environment to prevent Node.js debugger from attaching to child process
|
|
132
|
+
*/
|
|
133
|
+
function cleanEnvForSpawn(env) {
|
|
134
|
+
const cleaned = { ...env };
|
|
135
|
+
// Remove NODE_OPTIONS that might contain --inspect flags
|
|
136
|
+
delete cleaned.NODE_OPTIONS;
|
|
137
|
+
// Remove specific debugging environment variables
|
|
138
|
+
delete cleaned.NODE_INSPECT_RESUME_ON_START;
|
|
139
|
+
delete cleaned.NODE_INSPECT;
|
|
140
|
+
return cleaned;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Spawn Claude CLI process and handle I/O
|
|
144
|
+
*/
|
|
145
|
+
async function spawnCliProcess(params) {
|
|
146
|
+
return new Promise((resolve, reject) => {
|
|
147
|
+
// Clean environment to prevent debugger attachment
|
|
148
|
+
const cleanedEnv = cleanEnvForSpawn(params.env);
|
|
149
|
+
const child = (0, child_process_1.spawn)(params.command, params.args, {
|
|
150
|
+
cwd: params.workingDirectory || process.cwd(),
|
|
151
|
+
env: cleanedEnv,
|
|
152
|
+
signal: params.signal,
|
|
153
|
+
});
|
|
154
|
+
let spawnError = null;
|
|
155
|
+
child.once("error", (err) => {
|
|
156
|
+
spawnError = err;
|
|
157
|
+
});
|
|
158
|
+
if (!child.stdin || !child.stdout) {
|
|
159
|
+
child.kill();
|
|
160
|
+
return reject(new Error("Claude CLI process missing stdio"));
|
|
161
|
+
}
|
|
162
|
+
// Send prompt via stdin
|
|
163
|
+
child.stdin.write(params.prompt);
|
|
164
|
+
child.stdin.end();
|
|
165
|
+
// Capture stdout
|
|
166
|
+
const stdoutChunks = [];
|
|
167
|
+
child.stdout.on("data", (data) => {
|
|
168
|
+
stdoutChunks.push(data);
|
|
169
|
+
// If streaming, try to parse and emit chunks
|
|
170
|
+
if (params.streaming && params.onChunk) {
|
|
171
|
+
const text = data.toString("utf8");
|
|
172
|
+
const lines = text.split("\n");
|
|
173
|
+
for (const line of lines) {
|
|
174
|
+
const trimmed = line.trim();
|
|
175
|
+
if (!trimmed || !trimmed.startsWith("{"))
|
|
176
|
+
continue;
|
|
177
|
+
try {
|
|
178
|
+
const msg = JSON.parse(trimmed);
|
|
179
|
+
const assistantText = extractAssistantText(msg);
|
|
180
|
+
if (assistantText) {
|
|
181
|
+
params.onChunk(assistantText);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Ignore parse errors during streaming
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
// Capture stderr (max 200KB)
|
|
191
|
+
const stderrChunks = [];
|
|
192
|
+
let stderrSize = 0;
|
|
193
|
+
const maxStderrBytes = 200000;
|
|
194
|
+
if (child.stderr) {
|
|
195
|
+
child.stderr.on("data", (data) => {
|
|
196
|
+
if (stderrSize < maxStderrBytes) {
|
|
197
|
+
const remaining = maxStderrBytes - stderrSize;
|
|
198
|
+
const slice = data.length > remaining ? data.subarray(0, remaining) : data;
|
|
199
|
+
stderrChunks.push(slice);
|
|
200
|
+
stderrSize += slice.length;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// Wait for process exit
|
|
205
|
+
child.once("exit", (code) => {
|
|
206
|
+
if (spawnError) {
|
|
207
|
+
return reject(spawnError);
|
|
208
|
+
}
|
|
209
|
+
if (code !== 0) {
|
|
210
|
+
const stderr = Buffer.concat(stderrChunks).toString("utf8").trim();
|
|
211
|
+
const stdout = Buffer.concat(stdoutChunks).toString("utf8").trim();
|
|
212
|
+
const details = [stderr, stdout].filter(Boolean).join("\n");
|
|
213
|
+
logger_1.default.error("Claude CLI stderr:", stderr);
|
|
214
|
+
logger_1.default.error("Claude CLI stdout:", stdout);
|
|
215
|
+
return reject(new Error(`Claude CLI exited with code ${code}: ${details || "no output captured"}`));
|
|
216
|
+
}
|
|
217
|
+
// Parse output
|
|
218
|
+
const stdout = Buffer.concat(stdoutChunks).toString("utf8");
|
|
219
|
+
const messages = parseCliJsonOutput(stdout);
|
|
220
|
+
// Extract session ID
|
|
221
|
+
let sessionId;
|
|
222
|
+
for (const msg of messages) {
|
|
223
|
+
if (msg.session_id) {
|
|
224
|
+
sessionId = msg.session_id;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
resolve({ messages, sessionId });
|
|
228
|
+
});
|
|
229
|
+
// Handle abort signal
|
|
230
|
+
if (params.signal) {
|
|
231
|
+
params.signal.addEventListener("abort", () => {
|
|
232
|
+
child.kill();
|
|
233
|
+
reject(new Error("Request aborted"));
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
}
|
|
13
238
|
class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
14
239
|
constructor(providerConfig) {
|
|
15
240
|
super(providerConfig);
|
|
241
|
+
// Setup config directory for credentials with unique subdirectory
|
|
242
|
+
// Use a random ID to avoid session conflicts between parallel instances
|
|
243
|
+
const uniqueId = Math.random().toString(36).substring(2, 15);
|
|
244
|
+
this.configDir = path_1.default.resolve(environment_1.default.DATA_DIR, "claude", `session-${uniqueId}`);
|
|
245
|
+
// Resolve CLI path
|
|
246
|
+
this.cliPath = resolveBundledClaudeCliPath();
|
|
16
247
|
}
|
|
17
248
|
async initialize() {
|
|
18
|
-
logger_1.default.info(`Initializing Claude provider (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
logger_1.default.error("Failed to load Claude Agent SDK:", error);
|
|
25
|
-
throw new Error("Failed to load Claude Agent SDK. Make sure it's installed.");
|
|
249
|
+
logger_1.default.info(`Initializing Claude provider (CLI) for working directory: ${this.config.workingDirectory}`);
|
|
250
|
+
logger_1.default.info(`Using Claude CLI at: ${this.cliPath}`);
|
|
251
|
+
logger_1.default.info(`Config directory: ${this.configDir}`);
|
|
252
|
+
// Ensure config directory exists
|
|
253
|
+
if (!fs_1.default.existsSync(this.configDir)) {
|
|
254
|
+
fs_1.default.mkdirSync(this.configDir, { recursive: true });
|
|
26
255
|
}
|
|
27
256
|
// Verify auth token exists and get OAuth access token
|
|
28
257
|
const token = await models_1.AuthToken.findByPk(this.config.tokenId);
|
|
29
258
|
if (!token || token.provider !== "claude") {
|
|
30
259
|
throw new Error("Invalid Claude auth token");
|
|
31
260
|
}
|
|
32
|
-
// Decrypt and store
|
|
261
|
+
// Decrypt and store tokens
|
|
33
262
|
this.accessToken = (0, crypto_1.decrypt)(token.accessToken);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this.currentSessionId = this.config.sessionId;
|
|
263
|
+
if (token.refreshToken) {
|
|
264
|
+
this.refreshToken = (0, crypto_1.decrypt)(token.refreshToken);
|
|
37
265
|
}
|
|
38
|
-
|
|
266
|
+
// Write credentials to file for CLI to use
|
|
267
|
+
const expiresAt = token.expiresAt ? new Date(token.expiresAt).getTime() : undefined;
|
|
268
|
+
writeCredentialsFile(this.configDir, {
|
|
269
|
+
accessToken: this.accessToken,
|
|
270
|
+
refreshToken: this.refreshToken,
|
|
271
|
+
expiresAt,
|
|
272
|
+
issuedAt: Date.now(),
|
|
273
|
+
scopes: ["user:inference", "user:sessions:claude_code"],
|
|
274
|
+
});
|
|
275
|
+
// Note: Do NOT set currentSessionId from config here!
|
|
276
|
+
// Session ID should only be set:
|
|
277
|
+
// 1. After first message when we get a session ID back from CLI
|
|
278
|
+
// 2. When explicitly calling resumeSession()
|
|
279
|
+
// Setting it here causes "Session ID already in use" errors
|
|
280
|
+
logger_1.default.info("Claude provider (CLI) initialized");
|
|
39
281
|
}
|
|
40
282
|
/**
|
|
41
283
|
* Check if token needs refresh (expires within 5 minutes)
|
|
@@ -50,23 +292,23 @@ class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
|
50
292
|
const fiveMinutesFromNow = new Date(Date.now() + 5 * 60 * 1000);
|
|
51
293
|
if (expiresAt && expiresAt < fiveMinutesFromNow) {
|
|
52
294
|
logger_1.default.info("Claude token expires soon, attempting refresh...");
|
|
53
|
-
await this.
|
|
295
|
+
await this.refreshTokenInternal(token);
|
|
54
296
|
}
|
|
55
297
|
}
|
|
56
298
|
/**
|
|
57
299
|
* Refresh Claude OAuth token
|
|
58
300
|
*/
|
|
59
|
-
async
|
|
301
|
+
async refreshTokenInternal(token) {
|
|
60
302
|
if (!token.refreshToken) {
|
|
61
303
|
throw new Error("No refresh token available. Please re-authenticate with Claude.");
|
|
62
304
|
}
|
|
63
305
|
try {
|
|
64
306
|
const refreshTokenDecrypted = (0, crypto_1.decrypt)(token.refreshToken);
|
|
65
307
|
const tokenResponse = await fetch(CLAUDE_TOKEN_URL, {
|
|
66
|
-
method:
|
|
67
|
-
headers: {
|
|
308
|
+
method: "POST",
|
|
309
|
+
headers: { "Content-Type": "application/json" },
|
|
68
310
|
body: JSON.stringify({
|
|
69
|
-
grant_type:
|
|
311
|
+
grant_type: "refresh_token",
|
|
70
312
|
refresh_token: refreshTokenDecrypted,
|
|
71
313
|
client_id: CLAUDE_CLIENT_ID,
|
|
72
314
|
}),
|
|
@@ -75,16 +317,29 @@ class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
|
75
317
|
const error = await tokenResponse.text();
|
|
76
318
|
throw new Error(`Token refresh failed: ${error}`);
|
|
77
319
|
}
|
|
78
|
-
const tokens = await tokenResponse.json();
|
|
320
|
+
const tokens = (await tokenResponse.json());
|
|
79
321
|
// Update token in database
|
|
80
322
|
const newExpiresAt = new Date(Date.now() + tokens.expires_in * 1000);
|
|
81
323
|
await token.update({
|
|
82
324
|
accessToken: (0, crypto_1.encrypt)(tokens.access_token),
|
|
83
|
-
refreshToken: tokens.refresh_token
|
|
325
|
+
refreshToken: tokens.refresh_token
|
|
326
|
+
? (0, crypto_1.encrypt)(tokens.refresh_token)
|
|
327
|
+
: token.refreshToken,
|
|
84
328
|
expiresAt: newExpiresAt,
|
|
85
329
|
});
|
|
86
|
-
// Update in-memory
|
|
330
|
+
// Update in-memory tokens
|
|
87
331
|
this.accessToken = tokens.access_token;
|
|
332
|
+
if (tokens.refresh_token) {
|
|
333
|
+
this.refreshToken = tokens.refresh_token;
|
|
334
|
+
}
|
|
335
|
+
// Update credentials file
|
|
336
|
+
writeCredentialsFile(this.configDir, {
|
|
337
|
+
accessToken: this.accessToken,
|
|
338
|
+
refreshToken: this.refreshToken,
|
|
339
|
+
expiresAt: newExpiresAt.getTime(),
|
|
340
|
+
issuedAt: Date.now(),
|
|
341
|
+
scopes: ["user:inference", "user:sessions:claude_code"],
|
|
342
|
+
});
|
|
88
343
|
logger_1.default.info("Claude token refreshed successfully, new expiry:", newExpiresAt);
|
|
89
344
|
}
|
|
90
345
|
catch (error) {
|
|
@@ -92,107 +347,100 @@ class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
|
92
347
|
throw new Error(`Token refresh failed: ${error instanceof Error ? error.message : String(error)}. Please run /login to re-authenticate.`);
|
|
93
348
|
}
|
|
94
349
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Helper to extract text from assistant messages
|
|
97
|
-
*/
|
|
98
|
-
getAssistantText(msg) {
|
|
99
|
-
if (msg.type !== 'assistant')
|
|
100
|
-
return null;
|
|
101
|
-
return msg.message.content
|
|
102
|
-
.filter((block) => block.type === 'text')
|
|
103
|
-
.map((block) => block.text)
|
|
104
|
-
.join('');
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Helper to get token usage from SDK message
|
|
108
|
-
*/
|
|
109
|
-
getTokenUsage(msg) {
|
|
110
|
-
const usage = msg.usage;
|
|
111
|
-
if (!usage) {
|
|
112
|
-
return { input: 0, output: 0, total: 0 };
|
|
113
|
-
}
|
|
114
|
-
const inputTokens = usage.input_tokens || 0;
|
|
115
|
-
const outputTokens = usage.output_tokens || 0;
|
|
116
|
-
return {
|
|
117
|
-
input: inputTokens,
|
|
118
|
-
output: outputTokens,
|
|
119
|
-
total: inputTokens + outputTokens,
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
350
|
async sendMessage(params) {
|
|
123
351
|
// Check and refresh token if needed before sending
|
|
124
352
|
await this.checkAndRefreshToken();
|
|
125
353
|
if (!this.accessToken) {
|
|
126
354
|
throw new Error("No access token available");
|
|
127
355
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
const { content, systemPrompt, onChunk } = params;
|
|
356
|
+
const { content, systemPrompt, onChunk, conversationHistory } = params;
|
|
357
|
+
const resolvedSystemPrompt = typeof systemPrompt === "string" ? systemPrompt : undefined;
|
|
132
358
|
try {
|
|
133
|
-
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
session = this.sdk.unstable_v2_resumeSession(this.currentSessionId, sessionOptions);
|
|
359
|
+
// NOTE: We do NOT use session IDs between CLI processes!
|
|
360
|
+
// Each CLI process is ephemeral and gets its own session.
|
|
361
|
+
// Context is maintained via conversationHistory instead.
|
|
362
|
+
logger_1.default.info("Creating new ephemeral Claude CLI session");
|
|
363
|
+
// Build conversation context from history
|
|
364
|
+
let fullPrompt = content;
|
|
365
|
+
if (conversationHistory && conversationHistory.length > 0) {
|
|
366
|
+
const historyText = conversationHistory
|
|
367
|
+
.map((msg) => `${msg.role === "user" ? "User" : "Assistant"}: ${msg.content}`)
|
|
368
|
+
.join("\n\n");
|
|
369
|
+
fullPrompt = `${historyText}\n\nUser: ${content}`;
|
|
145
370
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
371
|
+
// Build CLI arguments
|
|
372
|
+
const cliArgs = buildCliArgs({
|
|
373
|
+
model: this.config.model || "claude-sonnet-4-5-20250929",
|
|
374
|
+
systemPrompt: resolvedSystemPrompt,
|
|
375
|
+
sessionId: undefined, // Never use session IDs between processes
|
|
376
|
+
permissionMode: "bypassPermissions",
|
|
377
|
+
streaming: !!onChunk,
|
|
378
|
+
workingDirectory: this.config.workingDirectory,
|
|
379
|
+
noSessionPersistence: true, // Always ephemeral
|
|
380
|
+
});
|
|
381
|
+
// Build environment
|
|
382
|
+
const env = {
|
|
383
|
+
...process.env,
|
|
384
|
+
CLAUDE_CONFIG_DIR: this.configDir,
|
|
385
|
+
NODE_ENV: process.env.NODE_ENV || "production",
|
|
386
|
+
};
|
|
387
|
+
// Spawn CLI process
|
|
388
|
+
const { messages } = await spawnCliProcess({
|
|
389
|
+
command: process.execPath,
|
|
390
|
+
args: [this.cliPath, ...cliArgs],
|
|
391
|
+
prompt: fullPrompt,
|
|
392
|
+
workingDirectory: this.config.workingDirectory,
|
|
393
|
+
env,
|
|
394
|
+
streaming: !!onChunk,
|
|
395
|
+
onChunk,
|
|
396
|
+
});
|
|
397
|
+
// Note: We ignore the returned sessionId since we don't reuse sessions between processes
|
|
398
|
+
// Context is maintained via conversation history instead
|
|
399
|
+
// Extract response content
|
|
153
400
|
let fullContent = "";
|
|
154
401
|
let tokenUsage = { input: 0, output: 0, total: 0 };
|
|
155
|
-
let
|
|
156
|
-
for
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
newSessionId = msg.session_id;
|
|
160
|
-
}
|
|
161
|
-
// Handle assistant messages
|
|
162
|
-
const text = this.getAssistantText(msg);
|
|
402
|
+
let isError = false;
|
|
403
|
+
for (const msg of messages) {
|
|
404
|
+
// Extract assistant text
|
|
405
|
+
const text = extractAssistantText(msg);
|
|
163
406
|
if (text) {
|
|
164
407
|
fullContent += text;
|
|
165
|
-
if (onChunk) {
|
|
166
|
-
onChunk(text);
|
|
167
|
-
}
|
|
168
408
|
}
|
|
169
|
-
//
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
tokenUsage =
|
|
409
|
+
// Extract token usage
|
|
410
|
+
if (msg.usage) {
|
|
411
|
+
tokenUsage.input = msg.usage.input_tokens || 0;
|
|
412
|
+
tokenUsage.output = msg.usage.output_tokens || 0;
|
|
413
|
+
tokenUsage.total = tokenUsage.input + tokenUsage.output;
|
|
414
|
+
}
|
|
415
|
+
// Check for errors
|
|
416
|
+
if (msg.is_error) {
|
|
417
|
+
isError = true;
|
|
418
|
+
}
|
|
419
|
+
// Extract result message
|
|
420
|
+
if (msg.type === "result" && msg.result) {
|
|
421
|
+
fullContent = msg.result;
|
|
173
422
|
}
|
|
174
423
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// Update current session ID if we got a new one
|
|
178
|
-
if (newSessionId) {
|
|
179
|
-
this.currentSessionId = newSessionId;
|
|
424
|
+
if (isError) {
|
|
425
|
+
throw new Error(`Claude returned an error: ${fullContent}`);
|
|
180
426
|
}
|
|
181
427
|
this.messageCount++;
|
|
182
428
|
return {
|
|
183
429
|
content: fullContent,
|
|
184
430
|
tokenUsage,
|
|
185
|
-
sessionId:
|
|
431
|
+
sessionId: undefined, // Don't return session ID since we don't reuse them
|
|
186
432
|
};
|
|
187
433
|
}
|
|
188
434
|
catch (error) {
|
|
189
435
|
// Check if error is due to expired token
|
|
190
436
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
191
|
-
if (errorMsg.includes("authentication_error") ||
|
|
437
|
+
if (errorMsg.includes("authentication_error") ||
|
|
438
|
+
errorMsg.includes("OAuth token has expired") ||
|
|
439
|
+
errorMsg.includes("401")) {
|
|
192
440
|
logger_1.default.info("Token expired during request, attempting refresh and retry...");
|
|
193
441
|
const token = await models_1.AuthToken.findByPk(this.config.tokenId);
|
|
194
442
|
if (token) {
|
|
195
|
-
await this.
|
|
443
|
+
await this.refreshTokenInternal(token);
|
|
196
444
|
// Retry the request with new token
|
|
197
445
|
return this.sendMessage(params);
|
|
198
446
|
}
|
|
@@ -202,25 +450,35 @@ class ClaudeProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
|
202
450
|
}
|
|
203
451
|
}
|
|
204
452
|
async resumeSession(sessionId) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
453
|
+
// NOTE: Session resumption is not supported with ephemeral CLI processes
|
|
454
|
+
// Context is maintained via conversation history instead
|
|
455
|
+
logger_1.default.warn(`Claude CLI provider does not support session resumption. Session ID ${sessionId} ignored.`);
|
|
456
|
+
return false;
|
|
208
457
|
}
|
|
209
458
|
async endSession() {
|
|
210
|
-
|
|
211
|
-
logger_1.default.info("Ended Claude session");
|
|
459
|
+
logger_1.default.info("Ended Claude session (ephemeral - no action needed)");
|
|
212
460
|
}
|
|
213
461
|
async getStatus() {
|
|
214
462
|
return {
|
|
215
463
|
ready: true,
|
|
216
|
-
sessionId:
|
|
464
|
+
sessionId: undefined, // No persistent sessions
|
|
217
465
|
messageCount: this.messageCount,
|
|
218
466
|
};
|
|
219
467
|
}
|
|
220
468
|
async cleanup() {
|
|
221
|
-
this.currentSessionId = undefined;
|
|
222
469
|
this.messageCount = 0;
|
|
223
470
|
this.accessToken = undefined;
|
|
471
|
+
this.refreshToken = undefined;
|
|
472
|
+
// Clean up session-specific config directory
|
|
473
|
+
try {
|
|
474
|
+
if (fs_1.default.existsSync(this.configDir)) {
|
|
475
|
+
fs_1.default.rmSync(this.configDir, { recursive: true, force: true });
|
|
476
|
+
logger_1.default.info(`Cleaned up config directory: ${this.configDir}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
catch (error) {
|
|
480
|
+
logger_1.default.warn(`Failed to clean up config directory:`, error);
|
|
481
|
+
}
|
|
224
482
|
}
|
|
225
483
|
}
|
|
226
484
|
exports.ClaudeProvider = ClaudeProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeProvider.js","sourceRoot":"","sources":["../../../src/services/llm/ClaudeProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClaudeProvider.js","sourceRoot":"","sources":["../../../src/services/llm/ClaudeProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED