@theia/ai-claude-code 1.65.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.
Files changed (128) hide show
  1. package/README.md +30 -0
  2. package/lib/browser/claude-code-chat-agent.d.ts +82 -0
  3. package/lib/browser/claude-code-chat-agent.d.ts.map +1 -0
  4. package/lib/browser/claude-code-chat-agent.js +518 -0
  5. package/lib/browser/claude-code-chat-agent.js.map +1 -0
  6. package/lib/browser/claude-code-command-contribution.d.ts +16 -0
  7. package/lib/browser/claude-code-command-contribution.d.ts.map +1 -0
  8. package/lib/browser/claude-code-command-contribution.js +86 -0
  9. package/lib/browser/claude-code-command-contribution.js.map +1 -0
  10. package/lib/browser/claude-code-edit-tool-service.d.ts +61 -0
  11. package/lib/browser/claude-code-edit-tool-service.d.ts.map +1 -0
  12. package/lib/browser/claude-code-edit-tool-service.js +219 -0
  13. package/lib/browser/claude-code-edit-tool-service.js.map +1 -0
  14. package/lib/browser/claude-code-file-edit-backup-service.d.ts +57 -0
  15. package/lib/browser/claude-code-file-edit-backup-service.d.ts.map +1 -0
  16. package/lib/browser/claude-code-file-edit-backup-service.js +92 -0
  17. package/lib/browser/claude-code-file-edit-backup-service.js.map +1 -0
  18. package/lib/browser/claude-code-frontend-module.d.ts +5 -0
  19. package/lib/browser/claude-code-frontend-module.d.ts.map +1 -0
  20. package/lib/browser/claude-code-frontend-module.js +83 -0
  21. package/lib/browser/claude-code-frontend-module.js.map +1 -0
  22. package/lib/browser/claude-code-frontend-service.d.ts +40 -0
  23. package/lib/browser/claude-code-frontend-service.d.ts.map +1 -0
  24. package/lib/browser/claude-code-frontend-service.js +190 -0
  25. package/lib/browser/claude-code-frontend-service.js.map +1 -0
  26. package/lib/browser/claude-code-slash-commands-contribution.d.ts +17 -0
  27. package/lib/browser/claude-code-slash-commands-contribution.d.ts.map +1 -0
  28. package/lib/browser/claude-code-slash-commands-contribution.js +154 -0
  29. package/lib/browser/claude-code-slash-commands-contribution.js.map +1 -0
  30. package/lib/browser/claude-code-tool-call-content.d.ts +8 -0
  31. package/lib/browser/claude-code-tool-call-content.d.ts.map +1 -0
  32. package/lib/browser/claude-code-tool-call-content.js +30 -0
  33. package/lib/browser/claude-code-tool-call-content.js.map +1 -0
  34. package/lib/browser/renderers/bash-tool-renderer.d.ts +10 -0
  35. package/lib/browser/renderers/bash-tool-renderer.d.ts.map +1 -0
  36. package/lib/browser/renderers/bash-tool-renderer.js +71 -0
  37. package/lib/browser/renderers/bash-tool-renderer.js.map +1 -0
  38. package/lib/browser/renderers/collapsible-tool-renderer.d.ts +13 -0
  39. package/lib/browser/renderers/collapsible-tool-renderer.d.ts.map +1 -0
  40. package/lib/browser/renderers/collapsible-tool-renderer.js +48 -0
  41. package/lib/browser/renderers/collapsible-tool-renderer.js.map +1 -0
  42. package/lib/browser/renderers/edit-tool-renderer.d.ts +16 -0
  43. package/lib/browser/renderers/edit-tool-renderer.d.ts.map +1 -0
  44. package/lib/browser/renderers/edit-tool-renderer.js +134 -0
  45. package/lib/browser/renderers/edit-tool-renderer.js.map +1 -0
  46. package/lib/browser/renderers/glob-tool-renderer.d.ts +14 -0
  47. package/lib/browser/renderers/glob-tool-renderer.d.ts.map +1 -0
  48. package/lib/browser/renderers/glob-tool-renderer.js +107 -0
  49. package/lib/browser/renderers/glob-tool-renderer.js.map +1 -0
  50. package/lib/browser/renderers/grep-tool-renderer.d.ts +14 -0
  51. package/lib/browser/renderers/grep-tool-renderer.d.ts.map +1 -0
  52. package/lib/browser/renderers/grep-tool-renderer.js +157 -0
  53. package/lib/browser/renderers/grep-tool-renderer.js.map +1 -0
  54. package/lib/browser/renderers/ls-tool-renderer.d.ts +16 -0
  55. package/lib/browser/renderers/ls-tool-renderer.d.ts.map +1 -0
  56. package/lib/browser/renderers/ls-tool-renderer.js +116 -0
  57. package/lib/browser/renderers/ls-tool-renderer.js.map +1 -0
  58. package/lib/browser/renderers/multiedit-tool-renderer.d.ts +16 -0
  59. package/lib/browser/renderers/multiedit-tool-renderer.d.ts.map +1 -0
  60. package/lib/browser/renderers/multiedit-tool-renderer.js +152 -0
  61. package/lib/browser/renderers/multiedit-tool-renderer.js.map +1 -0
  62. package/lib/browser/renderers/read-tool-renderer.d.ts +16 -0
  63. package/lib/browser/renderers/read-tool-renderer.d.ts.map +1 -0
  64. package/lib/browser/renderers/read-tool-renderer.js +121 -0
  65. package/lib/browser/renderers/read-tool-renderer.js.map +1 -0
  66. package/lib/browser/renderers/todo-write-renderer.d.ts +10 -0
  67. package/lib/browser/renderers/todo-write-renderer.d.ts.map +1 -0
  68. package/lib/browser/renderers/todo-write-renderer.js +132 -0
  69. package/lib/browser/renderers/todo-write-renderer.js.map +1 -0
  70. package/lib/browser/renderers/web-fetch-tool-renderer.d.ts +10 -0
  71. package/lib/browser/renderers/web-fetch-tool-renderer.d.ts.map +1 -0
  72. package/lib/browser/renderers/web-fetch-tool-renderer.js +82 -0
  73. package/lib/browser/renderers/web-fetch-tool-renderer.js.map +1 -0
  74. package/lib/browser/renderers/write-tool-renderer.d.ts +16 -0
  75. package/lib/browser/renderers/write-tool-renderer.d.ts.map +1 -0
  76. package/lib/browser/renderers/write-tool-renderer.js +113 -0
  77. package/lib/browser/renderers/write-tool-renderer.js.map +1 -0
  78. package/lib/common/claude-code-preferences.d.ts +4 -0
  79. package/lib/common/claude-code-preferences.d.ts.map +1 -0
  80. package/lib/common/claude-code-preferences.js +33 -0
  81. package/lib/common/claude-code-preferences.js.map +1 -0
  82. package/lib/common/claude-code-service.d.ts +231 -0
  83. package/lib/common/claude-code-service.d.ts.map +1 -0
  84. package/lib/common/claude-code-service.js +82 -0
  85. package/lib/common/claude-code-service.js.map +1 -0
  86. package/lib/common/index.d.ts +2 -0
  87. package/lib/common/index.d.ts.map +1 -0
  88. package/lib/common/index.js +20 -0
  89. package/lib/common/index.js.map +1 -0
  90. package/lib/node/claude-code-backend-module.d.ts +4 -0
  91. package/lib/node/claude-code-backend-module.d.ts.map +1 -0
  92. package/lib/node/claude-code-backend-module.js +35 -0
  93. package/lib/node/claude-code-backend-module.js.map +1 -0
  94. package/lib/node/claude-code-service-impl.d.ts +32 -0
  95. package/lib/node/claude-code-service-impl.d.ts.map +1 -0
  96. package/lib/node/claude-code-service-impl.js +426 -0
  97. package/lib/node/claude-code-service-impl.js.map +1 -0
  98. package/lib/package.spec.d.ts +1 -0
  99. package/lib/package.spec.d.ts.map +1 -0
  100. package/lib/package.spec.js +26 -0
  101. package/lib/package.spec.js.map +1 -0
  102. package/package.json +57 -0
  103. package/src/browser/claude-code-chat-agent.ts +591 -0
  104. package/src/browser/claude-code-command-contribution.ts +80 -0
  105. package/src/browser/claude-code-edit-tool-service.ts +313 -0
  106. package/src/browser/claude-code-file-edit-backup-service.ts +141 -0
  107. package/src/browser/claude-code-frontend-module.ts +100 -0
  108. package/src/browser/claude-code-frontend-service.ts +215 -0
  109. package/src/browser/claude-code-slash-commands-contribution.ts +175 -0
  110. package/src/browser/claude-code-tool-call-content.ts +30 -0
  111. package/src/browser/renderers/bash-tool-renderer.tsx +97 -0
  112. package/src/browser/renderers/collapsible-tool-renderer.tsx +78 -0
  113. package/src/browser/renderers/edit-tool-renderer.tsx +180 -0
  114. package/src/browser/renderers/glob-tool-renderer.tsx +136 -0
  115. package/src/browser/renderers/grep-tool-renderer.tsx +190 -0
  116. package/src/browser/renderers/ls-tool-renderer.tsx +160 -0
  117. package/src/browser/renderers/multiedit-tool-renderer.tsx +204 -0
  118. package/src/browser/renderers/read-tool-renderer.tsx +170 -0
  119. package/src/browser/renderers/todo-write-renderer.tsx +178 -0
  120. package/src/browser/renderers/web-fetch-tool-renderer.tsx +108 -0
  121. package/src/browser/renderers/write-tool-renderer.tsx +155 -0
  122. package/src/browser/style/claude-code-tool-renderers.css +487 -0
  123. package/src/common/claude-code-preferences.ts +33 -0
  124. package/src/common/claude-code-service.ts +303 -0
  125. package/src/common/index.ts +17 -0
  126. package/src/node/claude-code-backend-module.ts +42 -0
  127. package/src/node/claude-code-service-impl.ts +462 -0
  128. package/src/package.spec.ts +27 -0
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2025 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ClaudeCodeServiceImpl = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const core_1 = require("@theia/core");
21
+ const inversify_1 = require("@theia/core/shared/inversify");
22
+ const child_process_1 = require("child_process");
23
+ const fs_1 = require("fs");
24
+ const fs = require("fs/promises");
25
+ const path = require("path");
26
+ let ClaudeCodeServiceImpl = class ClaudeCodeServiceImpl {
27
+ constructor() {
28
+ this.abortControllers = new Map();
29
+ this.pendingApprovals = new Map();
30
+ }
31
+ setClient(client) {
32
+ this.client = client;
33
+ }
34
+ async send(request, streamId) {
35
+ if (!this.client) {
36
+ throw new Error('Claude Code client not initialized');
37
+ }
38
+ this.sendMessages(streamId, request);
39
+ }
40
+ async sendMessages(streamId, request) {
41
+ var _a;
42
+ const abortController = new AbortController();
43
+ this.abortControllers.set(streamId, abortController);
44
+ try {
45
+ const cwd = ((_a = request.options) === null || _a === void 0 ? void 0 : _a.cwd) || process.cwd();
46
+ await this.ensureFileBackupHook(cwd);
47
+ await this.ensureStopHook(cwd);
48
+ await this.ensureClaudeSettings(cwd);
49
+ let done = (_) => { };
50
+ const receivedResult = new Promise(resolve => {
51
+ done = resolve;
52
+ });
53
+ const apiKey = request.apiKey || process.env.ANTHROPIC_API_KEY;
54
+ const { query, SDKUserMessage, Options } = await this.importClaudeCodeSDK(request.claudeCodePath);
55
+ const stream = query({
56
+ prompt: (async function* () {
57
+ yield {
58
+ type: 'user',
59
+ message: {
60
+ role: 'user',
61
+ content: request.prompt
62
+ },
63
+ // eslint-disable-next-line no-null/no-null
64
+ parent_tool_use_id: null,
65
+ session_id: (0, core_1.generateUuid)()
66
+ };
67
+ await receivedResult;
68
+ })(),
69
+ options: {
70
+ ...request.options,
71
+ abortController,
72
+ canUseTool: (toolName, toolInput) => this.requestToolApproval(streamId, toolName, toolInput),
73
+ env: { ...process.env, ANTHROPIC_API_KEY: apiKey, NODE_OPTIONS: '' },
74
+ stderr: (data) => {
75
+ var _a;
76
+ let message = String(data);
77
+ // The current claude code CLI is quite verbose and outputs a lot of
78
+ // non-error info to stderr when spawning.
79
+ // We check for this and log it at debug level instead.
80
+ if (message.startsWith('Spawning Claude Code process:')) {
81
+ // Strip the system prompt if present
82
+ if ((_a = request.options) === null || _a === void 0 ? void 0 : _a.appendSystemPrompt) {
83
+ const systemPrompt = request.options.appendSystemPrompt;
84
+ message = message.replace(systemPrompt, '').trim();
85
+ }
86
+ // Check if the remainder looks like it contains an actual error
87
+ if (message.toLowerCase().includes('error') || message.toLowerCase().includes('failed')) {
88
+ this.logger.error('Claude Code Std Error:', message);
89
+ }
90
+ else {
91
+ this.logger.debug('Claude Code Verbose Output:', message);
92
+ }
93
+ return;
94
+ }
95
+ // Log all other content as error (actual errors)
96
+ this.logger.error('Claude Code Std Error:', message);
97
+ },
98
+ }
99
+ });
100
+ for await (const message of stream) {
101
+ this.client.sendToken(streamId, message);
102
+ if (message.type === 'result' || abortController.signal.aborted) {
103
+ done();
104
+ break;
105
+ }
106
+ }
107
+ // Signal stream completion by returning undefined
108
+ abortController.abort('closed after result');
109
+ this.client.sendToken(streamId, undefined);
110
+ }
111
+ catch (e) {
112
+ this.logger.error('Claude Code error:', e);
113
+ this.client.sendError(streamId, e instanceof Error ? e : new Error(String(e)));
114
+ }
115
+ finally {
116
+ this.abortControllers.delete(streamId);
117
+ }
118
+ }
119
+ /**
120
+ * Dynamically imports the Claude Code SDK from the local installation.
121
+ * @param customClaudeCodePath Optional custom path to Claude Code executable (cli.js)
122
+ * @returns An object containing the SDK's query function, user message type, and options type.
123
+ */
124
+ async importClaudeCodeSDK(customClaudeCodePath) {
125
+ let claudeCodePath;
126
+ if (customClaudeCodePath) {
127
+ if (!(0, fs_1.existsSync)(customClaudeCodePath)) {
128
+ throw new Error(`Specified Claude Code executable not found at: ${customClaudeCodePath}`);
129
+ }
130
+ const realPath = (0, fs_1.realpathSync)(customClaudeCodePath);
131
+ // Use the directory containing the cli.js file
132
+ claudeCodePath = path.dirname(realPath);
133
+ }
134
+ else {
135
+ claudeCodePath = this.resolveClaudeCodePath();
136
+ }
137
+ const sdkPath = path.join(claudeCodePath, 'sdk.mjs');
138
+ // Check if file exists before importing
139
+ if (!(0, fs_1.existsSync)(sdkPath)) {
140
+ throw new Error('Claude Code installation not found. ' +
141
+ 'Please install with: `npm install -g @anthropic-ai/claude-code` ' +
142
+ 'and/or specify the path to the executable in the settings. ' +
143
+ `We looked at ${sdkPath}`);
144
+ }
145
+ const importPath = `file://${sdkPath}`;
146
+ // We can not use dynamic import directly because webpack will try to
147
+ // bundle the module at build time, which we don't want.
148
+ // We also can't use a webpack ignore comment because the comment is stripped
149
+ // during the build and then webpack still tries to resolve the module.
150
+ const dynamicImport = new Function('path', 'return import(path)');
151
+ return dynamicImport(importPath);
152
+ }
153
+ resolveClaudeCodePath() {
154
+ try {
155
+ const globalPath = (0, child_process_1.execSync)('npm root -g', { encoding: 'utf8' }).trim();
156
+ return path.join(globalPath, '@anthropic-ai/claude-code');
157
+ }
158
+ catch (error) {
159
+ this.logger.error('Failed to resolve global npm path:', error);
160
+ throw new Error('Claude Code installation not found. ' +
161
+ 'Please install with: `npm install -g @anthropic-ai/claude-code` ' +
162
+ 'and/or specify the path to the executable in the settings.');
163
+ }
164
+ }
165
+ cancel(streamId) {
166
+ const abortController = this.abortControllers.get(streamId);
167
+ if (abortController) {
168
+ abortController.abort('user canceled');
169
+ this.abortControllers.delete(streamId);
170
+ }
171
+ }
172
+ handleApprovalResponse(response) {
173
+ const resolver = this.pendingApprovals.get(response.requestId);
174
+ if (resolver) {
175
+ resolver({
176
+ behavior: response.approved ? 'allow' : 'deny',
177
+ message: response.message,
178
+ updatedInput: response.updatedInput
179
+ });
180
+ }
181
+ }
182
+ async requestToolApproval(streamId, toolName, toolInput) {
183
+ this.logger.info('Requesting tool approval:', toolName, toolInput);
184
+ const requestId = (0, core_1.generateUuid)();
185
+ const approvalRequest = {
186
+ type: 'tool-approval-request',
187
+ toolName,
188
+ toolInput,
189
+ requestId
190
+ };
191
+ this.client.sendToken(streamId, approvalRequest);
192
+ const approvalPromise = new Promise(resolve => {
193
+ this.pendingApprovals.set(requestId, resolve);
194
+ });
195
+ const result = await approvalPromise;
196
+ this.pendingApprovals.delete(requestId);
197
+ return result;
198
+ }
199
+ async ensureStopHook(cwd) {
200
+ const hookPath = path.join(cwd, '.claude', 'hooks', 'session-cleanup-hook.js');
201
+ try {
202
+ await fs.access(hookPath);
203
+ return;
204
+ }
205
+ catch {
206
+ // Hook doesn't exist, create it
207
+ }
208
+ await fs.mkdir(path.dirname(hookPath), { recursive: true });
209
+ const hookContent = `#!/usr/bin/env node
210
+
211
+ const fs = require('fs').promises;
212
+ const path = require('path');
213
+
214
+ async function main() {
215
+ try {
216
+ const input = await new Promise((resolve, reject) => {
217
+ let data = '';
218
+ process.stdin.on('data', chunk => data += chunk);
219
+ process.stdin.on('end', () => resolve(data));
220
+ process.stdin.on('error', reject);
221
+ });
222
+
223
+ const hookData = JSON.parse(input);
224
+
225
+ // Delete backup directory for this session
226
+ const backupDir = path.join(hookData.cwd, '.claude', '.edit-baks', hookData.session_id);
227
+
228
+ try {
229
+ await fs.rm(backupDir, { recursive: true, force: true });
230
+ console.log(\`Cleaned up session backups: \${hookData.session_id}\`);
231
+ } catch (error) {
232
+ // Directory might not exist, which is fine
233
+ console.log(\`No backups to clean for session: \${hookData.session_id}\`);
234
+ }
235
+
236
+ } catch (error) {
237
+ console.error(\`Cleanup failed: \${error.message}\`, process.stderr);
238
+ process.exit(1);
239
+ }
240
+ }
241
+
242
+ main();
243
+ `;
244
+ await fs.writeFile(hookPath, hookContent, { mode: 0o755 });
245
+ }
246
+ async ensureFileBackupHook(cwd) {
247
+ const hookPath = path.join(cwd, '.claude', 'hooks', 'file-backup-hook.js');
248
+ try {
249
+ await fs.access(hookPath);
250
+ // Hook already exists, no need to create it
251
+ return;
252
+ }
253
+ catch {
254
+ // Hook doesn't exist, create it
255
+ }
256
+ // Ensure the hooks directory exists
257
+ await fs.mkdir(path.dirname(hookPath), { recursive: true });
258
+ const hookContent = `#!/usr/bin/env node
259
+
260
+ const fs = require('fs').promises;
261
+ const path = require('path');
262
+
263
+ async function main() {
264
+ try {
265
+ // Read input from stdin
266
+ const input = await new Promise((resolve, reject) => {
267
+ let data = '';
268
+ process.stdin.on('data', chunk => data += chunk);
269
+ process.stdin.on('end', () => resolve(data));
270
+ process.stdin.on('error', reject);
271
+ });
272
+
273
+ const hookData = JSON.parse(input);
274
+
275
+ // Only backup for file modification tools
276
+ const fileModifyingTools = ['Write', 'Edit', 'MultiEdit'];
277
+ if (!fileModifyingTools.includes(hookData.tool_name)) {
278
+ process.exit(0);
279
+ }
280
+
281
+ // Extract file path from tool input
282
+ let filePath;
283
+ if (hookData.tool_name === 'Write' || hookData.tool_name === 'Edit') {
284
+ filePath = hookData.tool_input?.file_path;
285
+ } else if (hookData.tool_name === 'MultiEdit') {
286
+ // MultiEdit has multiple files - we'll handle the first one for now
287
+ // You might want to extend this to handle all files
288
+ filePath = hookData.tool_input?.files?.[0]?.file_path;
289
+ }
290
+
291
+ if (!filePath) {
292
+ process.exit(0);
293
+ }
294
+
295
+ // Resolve absolute path
296
+ const absoluteFilePath = path.resolve(hookData.cwd, filePath);
297
+
298
+ // Check if file exists (can't backup what doesn't exist)
299
+ try {
300
+ await fs.access(absoluteFilePath);
301
+ } catch {
302
+ // File doesn't exist, nothing to backup
303
+ process.exit(0);
304
+ }
305
+
306
+ // Create backup directory structure
307
+ const backupDir = path.join(hookData.cwd, '.claude', '.edit-baks', hookData.session_id);
308
+ await fs.mkdir(backupDir, { recursive: true });
309
+
310
+ // Create backup file path (maintain relative structure)
311
+ const relativePath = path.relative(hookData.cwd, absoluteFilePath);
312
+ const backupFilePath = path.join(backupDir, relativePath);
313
+
314
+ // Ensure backup subdirectories exist
315
+ await fs.mkdir(path.dirname(backupFilePath), { recursive: true });
316
+
317
+ // Only create backup if it doesn't already exist for this session
318
+ try {
319
+ await fs.access(backupFilePath);
320
+ // Backup already exists for this session, don't overwrite
321
+ process.exit(0);
322
+ } catch {
323
+ // Backup doesn't exist, create it
324
+ }
325
+
326
+ // Copy the file
327
+ await fs.copyFile(absoluteFilePath, backupFilePath);
328
+
329
+ // Optional: Log the backup (visible in transcript mode with Ctrl-R)
330
+ console.log(\`Backed up: \${relativePath}\`);
331
+
332
+ } catch (error) {
333
+ console.error(\`Backup failed: \${error.message}\`, process.stderr);
334
+ process.exit(1); // Non-blocking error
335
+ }
336
+ }
337
+
338
+ main();
339
+ `;
340
+ await fs.writeFile(hookPath, hookContent, { mode: 0o755 });
341
+ }
342
+ async ensureClaudeSettings(cwd) {
343
+ var _a, _b, _c, _d, _e, _f;
344
+ const settingsPath = path.join(cwd, '.claude', 'settings.local.json');
345
+ const hookConfig = {
346
+ hooks: {
347
+ PreToolUse: [
348
+ {
349
+ matcher: 'Write|Edit|MultiEdit',
350
+ hooks: [
351
+ {
352
+ type: 'command',
353
+ command: 'node $CLAUDE_PROJECT_DIR/.claude/hooks/file-backup-hook.js',
354
+ timeout: 10
355
+ }
356
+ ]
357
+ }
358
+ ],
359
+ Stop: [
360
+ {
361
+ matcher: '',
362
+ hooks: [
363
+ {
364
+ type: 'command',
365
+ command: 'node $CLAUDE_PROJECT_DIR/.claude/hooks/session-cleanup-hook.js'
366
+ }
367
+ ]
368
+ }
369
+ ]
370
+ }
371
+ };
372
+ try {
373
+ // Try to read existing settings
374
+ const existingContent = await fs.readFile(settingsPath, 'utf8');
375
+ const existingSettings = JSON.parse(existingContent);
376
+ // Check if hooks already exist and are properly configured
377
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
378
+ const hasPreHook = (_b = (_a = existingSettings.hooks) === null || _a === void 0 ? void 0 : _a.PreToolUse) === null || _b === void 0 ? void 0 : _b.some((hook) => {
379
+ var _a;
380
+ return hook.matcher === 'Write|Edit|MultiEdit' &&
381
+ (
382
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
383
+ (_a = hook.hooks) === null || _a === void 0 ? void 0 : _a.some((h) => { var _a; return (_a = h.command) === null || _a === void 0 ? void 0 : _a.includes('file-backup-hook.js'); }));
384
+ });
385
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
386
+ const hasStopHook = (_d = (_c = existingSettings.hooks) === null || _c === void 0 ? void 0 : _c.Stop) === null || _d === void 0 ? void 0 : _d.some((hook) => { var _a;
387
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
388
+ return (_a = hook.hooks) === null || _a === void 0 ? void 0 : _a.some((h) => { var _a; return (_a = h.command) === null || _a === void 0 ? void 0 : _a.includes('session-cleanup-hook.js'); }); });
389
+ if (hasPreHook && hasStopHook) {
390
+ // Hooks already configured, no need to modify
391
+ return;
392
+ }
393
+ // Merge with existing settings
394
+ const mergedSettings = {
395
+ ...existingSettings,
396
+ hooks: {
397
+ ...existingSettings.hooks,
398
+ PreToolUse: [
399
+ ...(((_e = existingSettings.hooks) === null || _e === void 0 ? void 0 : _e.PreToolUse) || []),
400
+ ...(hasPreHook ? [] : hookConfig.hooks.PreToolUse)
401
+ ],
402
+ Stop: [
403
+ ...(((_f = existingSettings.hooks) === null || _f === void 0 ? void 0 : _f.Stop) || []),
404
+ ...(hasStopHook ? [] : hookConfig.hooks.Stop)
405
+ ]
406
+ }
407
+ };
408
+ await fs.writeFile(settingsPath, JSON.stringify(mergedSettings, undefined, 2));
409
+ }
410
+ catch {
411
+ // File doesn't exist or is invalid JSON, create new one
412
+ await fs.mkdir(path.dirname(settingsPath), { recursive: true });
413
+ await fs.writeFile(settingsPath, JSON.stringify(hookConfig, undefined, 2));
414
+ }
415
+ }
416
+ };
417
+ exports.ClaudeCodeServiceImpl = ClaudeCodeServiceImpl;
418
+ tslib_1.__decorate([
419
+ (0, inversify_1.inject)(core_1.ILogger),
420
+ (0, inversify_1.named)('ClaudeCode'),
421
+ tslib_1.__metadata("design:type", Object)
422
+ ], ClaudeCodeServiceImpl.prototype, "logger", void 0);
423
+ exports.ClaudeCodeServiceImpl = ClaudeCodeServiceImpl = tslib_1.__decorate([
424
+ (0, inversify_1.injectable)()
425
+ ], ClaudeCodeServiceImpl);
426
+ //# sourceMappingURL=claude-code-service-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-service-impl.js","sourceRoot":"","sources":["../../src/node/claude-code-service-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,sCAAoD;AACpD,4DAAyE;AACzE,iDAAyC;AACzC,2BAA8C;AAC9C,kCAAkC;AAClC,6BAA6B;AAgBtB,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QAMK,qBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;QACtD,qBAAgB,GAAG,IAAI,GAAG,EAAgD,CAAC;IAiavF,CAAC;IA/ZG,SAAS,CAAC,MAAwB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAiC,EAAE,QAAgB;QAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,OAAiC;;QAC5E,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAErD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,GAAG,KAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAErC,IAAI,IAAI,GAAG,CAAC,CAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzC,IAAI,GAAG,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC/D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAElG,MAAM,MAAM,GAAI,KAAkB,CAAC;gBAC/B,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;oBACpB,MAAM;wBACF,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACL,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,OAAO,CAAC,MAAM;yBAC1B;wBACD,2CAA2C;wBAC3C,kBAAkB,EAAE,IAAI;wBACxB,UAAU,EAAE,IAAA,mBAAY,GAAE;qBAC7B,CAAC;oBACF,MAAM,cAAc,CAAC;gBACzB,CAAC,CAAC,EAAE;gBACJ,OAAO,EAAkB;oBACrB,GAAG,OAAO,CAAC,OAAO;oBAClB,eAAe;oBACf,UAAU,EAAE,CAAC,QAAgB,EAAE,SAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;oBAC7G,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;oBACpE,MAAM,EAAE,CAAC,IAAa,EAAE,EAAE;;wBACtB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;wBAE3B,oEAAoE;wBACpE,0CAA0C;wBAC1C,uDAAuD;wBACvD,IAAI,OAAO,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAAE,CAAC;4BACtD,qCAAqC;4BACrC,IAAI,MAAA,OAAO,CAAC,OAAO,0CAAE,kBAAkB,EAAE,CAAC;gCACtC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;gCACxD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;4BACvD,CAAC;4BAED,gEAAgE;4BAChE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACtF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;4BACzD,CAAC;iCAAM,CAAC;gCACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;4BAC9D,CAAC;4BACD,OAAO;wBACX,CAAC;wBAED,iDAAiD;wBACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;oBACzD,CAAC;iBACJ;aACJ,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC9D,IAAI,EAAE,CAAC;oBACP,MAAM;gBACV,CAAC;YACL,CAAC;YACD,kDAAkD;YAClD,eAAe,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,mBAAmB,CAAC,oBAA6B;QAC7D,IAAI,cAAsB,CAAC;QAE3B,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,CAAC,IAAA,eAAU,EAAC,oBAAoB,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,kDAAkD,oBAAoB,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,QAAQ,GAAG,IAAA,iBAAY,EAAC,oBAAoB,CAAC,CAAC;YACpD,+CAA+C;YAC/C,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAErD,wCAAwC;QACxC,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC;gBAClD,kEAAkE;gBAClE,6DAA6D;gBAC7D,gBAAgB,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,OAAO,EAAE,CAAC;QACvC,qEAAqE;QACrE,wDAAwD;QACxD,6EAA6E;QAC7E,uEAAuE;QACvE,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAClE,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB;QAC3B,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAA,wBAAQ,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,sCAAsC;gBAClD,kEAAkE;gBAClE,4DAA4D,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IAED,MAAM,CAAC,QAAgB;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAED,sBAAsB,CAAC,QAAqC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC;gBACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACtC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAES,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,QAAgB,EAAE,SAAkB;QACtF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAG,IAAA,mBAAY,GAAE,CAAC;QACjC,MAAM,eAAe,GAA+B;YAChD,IAAI,EAAE,uBAAuB;YAC7B,QAAQ;YACR,SAAS;YACT,SAAS;SACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAEjD,MAAM,eAAe,GAAG,IAAI,OAAO,CAAqB,OAAO,CAAC,EAAE;YAC9D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAExC,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;QAE/E,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACX,CAAC;QAAC,MAAM,CAAC;YACL,gCAAgC;QACpC,CAAC;QAED,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC3B,CAAC;QAEM,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAES,KAAK,CAAC,oBAAoB,CAAC,GAAW;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAE3E,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,4CAA4C;YAC5C,OAAO;QACX,CAAC;QAAC,MAAM,CAAC;YACL,gCAAgC;QACpC,CAAC;QAED,oCAAoC;QACpC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF3B,CAAC;QAEM,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,GAAW;;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG;YACf,KAAK,EAAE;gBACH,UAAU,EAAE;oBACR;wBACI,OAAO,EAAE,sBAAsB;wBAC/B,KAAK,EAAE;4BACH;gCACI,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,4DAA4D;gCACrE,OAAO,EAAE,EAAE;6BACd;yBACJ;qBACJ;iBACJ;gBACD,IAAI,EAAE;oBACF;wBACI,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE;4BACH;gCACI,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,gEAAgE;6BAC5E;yBACJ;qBACJ;iBACJ;aACJ;SACJ,CAAC;QAEF,IAAI,CAAC;YACD,gCAAgC;YAChC,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAErD,2DAA2D;YAC3D,8DAA8D;YAC9D,MAAM,UAAU,GAAG,MAAA,MAAA,gBAAgB,CAAC,KAAK,0CAAE,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;;gBACtE,OAAA,IAAI,CAAC,OAAO,KAAK,sBAAsB;;oBACvC,8DAA8D;oBAC9D,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAA,EAAA,CAAC,CAAA,CAAA;aAAA,CAC3E,CAAC;YAEF,8DAA8D;YAC9D,MAAM,WAAW,GAAG,MAAA,MAAA,gBAAgB,CAAC,KAAK,0CAAE,IAAI,0CAAE,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;YACjE,8DAA8D;YAC9D,OAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,OAAO,0CAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAA,EAAA,CAAC,CAAA,EAAA,CAC/E,CAAC;YAEF,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;gBAC5B,8CAA8C;gBAC9C,OAAO;YACX,CAAC;YAED,+BAA+B;YAC/B,MAAM,cAAc,GAAG;gBACnB,GAAG,gBAAgB;gBACnB,KAAK,EAAE;oBACH,GAAG,gBAAgB,CAAC,KAAK;oBACzB,UAAU,EAAE;wBACR,GAAG,CAAC,CAAA,MAAA,gBAAgB,CAAC,KAAK,0CAAE,UAAU,KAAI,EAAE,CAAC;wBAC7C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;qBACrD;oBACD,IAAI,EAAE;wBACF,GAAG,CAAC,CAAA,MAAA,gBAAgB,CAAC,KAAK,0CAAE,IAAI,KAAI,EAAE,CAAC;wBACvC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;qBAChD;iBACJ;aACJ,CAAC;YAEF,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACL,wDAAwD;YACxD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;CACJ,CAAA;AAxaY,sDAAqB;AAGtB;IADP,IAAA,kBAAM,EAAC,cAAO,CAAC;IAAE,IAAA,iBAAK,EAAC,YAAY,CAAC;;qDACb;gCAHf,qBAAqB;IADjC,IAAA,sBAAU,GAAE;GACA,qBAAqB,CAwajC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=package.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.spec.d.ts","sourceRoot":"","sources":["../src/package.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 EclipseSource GmbH and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+ /* note: this bogus test file is required so that
17
+ we are able to run mocha unit tests on this
18
+ package, without having any actual unit tests in it.
19
+ This way a coverage report will be generated,
20
+ showing 0% coverage, instead of no report.
21
+ This file can be removed once we have real unit
22
+ tests in place. */
23
+ describe('ai-claude-code package', () => {
24
+ it('support code coverage statistics', () => true);
25
+ });
26
+ //# sourceMappingURL=package.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.spec.js","sourceRoot":"","sources":["../src/package.spec.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAEhF;;;;;;qBAMqB;AAErB,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@theia/ai-claude-code",
3
+ "version": "1.65.0",
4
+ "description": "Theia - Claude Code Integration",
5
+ "dependencies": {
6
+ "@theia/ai-chat": "1.65.0",
7
+ "@theia/ai-chat-ui": "1.65.0",
8
+ "@theia/ai-core": "1.65.0",
9
+ "@theia/core": "1.65.0",
10
+ "@theia/editor": "1.65.0",
11
+ "@theia/filesystem": "1.65.0",
12
+ "@theia/monaco-editor-core": "^1.96.302",
13
+ "@theia/output": "1.65.0",
14
+ "@theia/workspace": "1.65.0",
15
+ "tslib": "^2.6.2"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "theiaExtensions": [
21
+ {
22
+ "frontend": "lib/browser/claude-code-frontend-module",
23
+ "backend": "lib/node/claude-code-backend-module"
24
+ }
25
+ ],
26
+ "keywords": [
27
+ "theia-extension"
28
+ ],
29
+ "license": "EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/eclipse-theia/theia.git"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/eclipse-theia/theia/issues"
36
+ },
37
+ "homepage": "https://github.com/eclipse-theia/theia",
38
+ "files": [
39
+ "lib",
40
+ "src"
41
+ ],
42
+ "scripts": {
43
+ "build": "theiaext build",
44
+ "clean": "theiaext clean",
45
+ "compile": "theiaext compile",
46
+ "lint": "theiaext lint",
47
+ "test": "theiaext test",
48
+ "watch": "theiaext watch"
49
+ },
50
+ "devDependencies": {
51
+ "@theia/ext-scripts": "1.65.0"
52
+ },
53
+ "nyc": {
54
+ "extends": "../../configs/nyc.json"
55
+ },
56
+ "gitHead": "500dfc80cee94fd2a623b5fb59b22d5a575247c2"
57
+ }