@chrishdx/llm-dev-server 1.2.2 → 1.2.4

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.
@@ -3,6 +3,7 @@ declare class Database {
3
3
  sequelize: Sequelize;
4
4
  constructor();
5
5
  initialize(): Promise<void>;
6
+ private cleanupSqliteBackupTables;
6
7
  close(): Promise<void>;
7
8
  }
8
9
  export declare const database: Database;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/config/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMtC,cAAM,QAAQ;IACL,SAAS,EAAE,SAAS,CAAC;;IAqBtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AACvC,eAAe,QAAQ,CAAC"}
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
- await this.sequelize.sync({ alter: true });
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,yCAAsC;AACtC,gDAAwB;AACxB,2DAA6B;AAC7B,gEAAmC;AACnC,6DAAqC;AAErC,MAAM,QAAQ;IAGZ;QACE,wBAAwB;QACxB,MAAM,MAAM,GAAG,cAAI,CAAC,UAAU,CAAC,qBAAM,CAAC,YAAY,CAAC;YACjD,CAAC,CAAC,qBAAM,CAAC,YAAY;YACrB,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAM,CAAC,YAAY,CAAC,CAAC;QAElD,gBAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC;YAC7B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,qBAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;YAC/E,MAAM,EAAE;gBACN,WAAW,EAAE,KAAK;gBAClB,UAAU,EAAE,IAAI;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAC1B,cAAI,CAAC,UAAU,CAAC,qBAAM,CAAC,YAAY,CAAC;gBAClC,CAAC,CAAC,qBAAM,CAAC,YAAY;gBACrB,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAM,CAAC,YAAY,CAAC,CAClD,CAAC;YACF,MAAM,kBAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAE1D,kBAAkB;YAClB,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACpC,gBAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAE5D,6DAA6D;YAC7D,IAAI,qBAAM,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACtC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,gBAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC5B,gBAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7B,gBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;CACF;AAEY,QAAA,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AACvC,kBAAe,gBAAQ,CAAC"}
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 sdk?;
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 refreshToken;
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;AAgB3B,qBAAa,cAAe,SAAQ,eAAe;IACjD,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,CAGV;gBAEU,cAAc,EAAE,iBAAiB;IAIvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC;;OAEG;YACW,oBAAoB;IAgBlC;;OAEG;YACW,YAAY;IAgD1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBf,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkGlE,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;CAK/B;AAED,eAAe,cAAc,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 CLAUDE_CLIENT_ID = '9d1c250a-e61b-44d9-88ed-5944d1962f5e';
12
- const CLAUDE_TOKEN_URL = 'https://console.anthropic.com/v1/oauth/token';
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 (SDK V2) for working directory: ${this.config.workingDirectory}`);
19
- // Load SDK dynamically (it's an ES module)
20
- try {
21
- this.sdk = await import("@anthropic-ai/claude-agent-sdk");
22
- }
23
- catch (error) {
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 access token
261
+ // Decrypt and store tokens
33
262
  this.accessToken = (0, crypto_1.decrypt)(token.accessToken);
34
- // Use session from config if provided
35
- if (this.config.sessionId) {
36
- this.currentSessionId = this.config.sessionId;
263
+ if (token.refreshToken) {
264
+ this.refreshToken = (0, crypto_1.decrypt)(token.refreshToken);
37
265
  }
38
- logger_1.default.info("Claude provider (SDK V2) initialized");
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.refreshToken(token);
295
+ await this.refreshTokenInternal(token);
54
296
  }
55
297
  }
56
298
  /**
57
299
  * Refresh Claude OAuth token
58
300
  */
59
- async refreshToken(token) {
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: 'POST',
67
- headers: { 'Content-Type': 'application/json' },
308
+ method: "POST",
309
+ headers: { "Content-Type": "application/json" },
68
310
  body: JSON.stringify({
69
- grant_type: 'refresh_token',
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 ? (0, crypto_1.encrypt)(tokens.refresh_token) : token.refreshToken,
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 access token
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
- if (!this.sdk) {
129
- throw new Error("SDK not initialized. Call initialize() first.");
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
- let session;
134
- // Create session options with OAuth token
135
- const sessionOptions = {
136
- model: this.config.model || 'claude-sonnet-4-5-20250929',
137
- apiKey: this.accessToken, // Use OAuth token as API key
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}`;
370
+ }
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,
138
378
  workingDirectory: this.config.workingDirectory,
139
- systemPrompt: systemPrompt,
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",
140
386
  };
141
- // Create or resume session
142
- if (this.currentSessionId) {
143
- logger_1.default.info(`Resuming Claude session: ${this.currentSessionId}`);
144
- session = this.sdk.unstable_v2_resumeSession(this.currentSessionId, sessionOptions);
145
- }
146
- else {
147
- logger_1.default.info("Creating new Claude session");
148
- session = this.sdk.unstable_v2_createSession(sessionOptions);
149
- }
150
- // Send message
151
- await session.send(content);
152
- // Stream response
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 newSessionId;
156
- for await (const msg of session.stream()) {
157
- // Update session ID from any message
158
- if (msg.session_id) {
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
- // Update token usage
170
- const msgUsage = this.getTokenUsage(msg);
171
- if (msgUsage.total > 0) {
172
- tokenUsage = msgUsage;
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
- // Close session (cleanup)
176
- session.close();
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: this.currentSessionId,
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") || errorMsg.includes("OAuth token has expired")) {
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.refreshToken(token);
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
- this.currentSessionId = sessionId;
206
- logger_1.default.info(`Set Claude session for resume: ${sessionId}`);
207
- return true;
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
- this.currentSessionId = undefined;
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: this.currentSessionId,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrishdx/llm-dev-server",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "Multi-LLM Development Server (Claude, Codex, Gemini) - A unified interface for AI coding assistants",
5
5
  "private": false,
6
6
  "workspaces": [