@theia/ai-claude-code 1.75.0-next.8 → 1.75.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 (76) hide show
  1. package/lib/browser/claude-code-chat-agent.js +1 -1
  2. package/lib/browser/claude-code-chat-agent.js.map +1 -1
  3. package/lib/browser/claude-code-edit-tool-service.js +1 -1
  4. package/lib/browser/claude-code-edit-tool-service.js.map +1 -1
  5. package/lib/browser/claude-code-file-edit-backup-service.js +1 -1
  6. package/lib/browser/claude-code-file-edit-backup-service.js.map +1 -1
  7. package/lib/browser/claude-code-frontend-service.d.ts +1 -1
  8. package/lib/browser/claude-code-frontend-service.d.ts.map +1 -1
  9. package/lib/browser/claude-code-frontend-service.js +1 -0
  10. package/lib/browser/claude-code-frontend-service.js.map +1 -1
  11. package/lib/browser/claude-code-slash-commands-contribution.js +1 -1
  12. package/lib/browser/claude-code-slash-commands-contribution.js.map +1 -1
  13. package/lib/browser/renderers/bash-tool-renderer.d.ts +2 -0
  14. package/lib/browser/renderers/bash-tool-renderer.d.ts.map +1 -1
  15. package/lib/browser/renderers/bash-tool-renderer.js +12 -36
  16. package/lib/browser/renderers/bash-tool-renderer.js.map +1 -1
  17. package/lib/browser/renderers/collapsible-tool-renderer.js +7 -10
  18. package/lib/browser/renderers/collapsible-tool-renderer.js.map +1 -1
  19. package/lib/browser/renderers/edit-tool-renderer.d.ts +2 -0
  20. package/lib/browser/renderers/edit-tool-renderer.d.ts.map +1 -1
  21. package/lib/browser/renderers/edit-tool-renderer.js +18 -52
  22. package/lib/browser/renderers/edit-tool-renderer.js.map +1 -1
  23. package/lib/browser/renderers/glob-tool-renderer.d.ts +2 -0
  24. package/lib/browser/renderers/glob-tool-renderer.d.ts.map +1 -1
  25. package/lib/browser/renderers/glob-tool-renderer.js +14 -40
  26. package/lib/browser/renderers/glob-tool-renderer.js.map +1 -1
  27. package/lib/browser/renderers/grep-tool-renderer.d.ts +2 -0
  28. package/lib/browser/renderers/grep-tool-renderer.d.ts.map +1 -1
  29. package/lib/browser/renderers/grep-tool-renderer.js +14 -56
  30. package/lib/browser/renderers/grep-tool-renderer.js.map +1 -1
  31. package/lib/browser/renderers/ls-tool-renderer.d.ts.map +1 -1
  32. package/lib/browser/renderers/ls-tool-renderer.js +12 -45
  33. package/lib/browser/renderers/ls-tool-renderer.js.map +1 -1
  34. package/lib/browser/renderers/multiedit-tool-renderer.d.ts.map +1 -1
  35. package/lib/browser/renderers/multiedit-tool-renderer.js +14 -58
  36. package/lib/browser/renderers/multiedit-tool-renderer.js.map +1 -1
  37. package/lib/browser/renderers/read-tool-renderer.d.ts +2 -0
  38. package/lib/browser/renderers/read-tool-renderer.d.ts.map +1 -1
  39. package/lib/browser/renderers/read-tool-renderer.js +16 -45
  40. package/lib/browser/renderers/read-tool-renderer.js.map +1 -1
  41. package/lib/browser/renderers/todo-write-renderer.d.ts +2 -0
  42. package/lib/browser/renderers/todo-write-renderer.d.ts.map +1 -1
  43. package/lib/browser/renderers/todo-write-renderer.js +19 -44
  44. package/lib/browser/renderers/todo-write-renderer.js.map +1 -1
  45. package/lib/browser/renderers/web-fetch-tool-renderer.d.ts +2 -0
  46. package/lib/browser/renderers/web-fetch-tool-renderer.d.ts.map +1 -1
  47. package/lib/browser/renderers/web-fetch-tool-renderer.js +12 -38
  48. package/lib/browser/renderers/web-fetch-tool-renderer.js.map +1 -1
  49. package/lib/browser/renderers/write-tool-renderer.d.ts.map +1 -1
  50. package/lib/browser/renderers/write-tool-renderer.js +10 -40
  51. package/lib/browser/renderers/write-tool-renderer.js.map +1 -1
  52. package/lib/common/claude-code-preferences.d.ts.map +1 -1
  53. package/lib/common/claude-code-preferences.js +1 -0
  54. package/lib/common/claude-code-preferences.js.map +1 -1
  55. package/lib/node/claude-code-service-impl.d.ts +2 -1
  56. package/lib/node/claude-code-service-impl.d.ts.map +1 -1
  57. package/lib/node/claude-code-service-impl.js +1 -1
  58. package/lib/node/claude-code-service-impl.js.map +1 -1
  59. package/package.json +11 -11
  60. package/src/browser/claude-code-chat-agent.ts +1 -1
  61. package/src/browser/claude-code-edit-tool-service.ts +1 -1
  62. package/src/browser/claude-code-file-edit-backup-service.ts +1 -1
  63. package/src/browser/claude-code-frontend-service.ts +3 -3
  64. package/src/browser/claude-code-slash-commands-contribution.ts +1 -1
  65. package/src/browser/renderers/bash-tool-renderer.tsx +6 -3
  66. package/src/browser/renderers/edit-tool-renderer.tsx +10 -5
  67. package/src/browser/renderers/glob-tool-renderer.tsx +6 -3
  68. package/src/browser/renderers/grep-tool-renderer.tsx +6 -3
  69. package/src/browser/renderers/ls-tool-renderer.tsx +4 -2
  70. package/src/browser/renderers/multiedit-tool-renderer.tsx +5 -3
  71. package/src/browser/renderers/read-tool-renderer.tsx +10 -5
  72. package/src/browser/renderers/todo-write-renderer.tsx +6 -3
  73. package/src/browser/renderers/web-fetch-tool-renderer.tsx +6 -3
  74. package/src/browser/renderers/write-tool-renderer.tsx +4 -2
  75. package/src/common/claude-code-preferences.ts +2 -1
  76. package/src/node/claude-code-service-impl.ts +2 -2
@@ -19,14 +19,14 @@ import { ResponseNode } from '@theia/ai-chat-ui/lib/browser/chat-tree-view';
19
19
  import { ChatResponseContent, ToolCallChatResponseContent } from '@theia/ai-chat/lib/common';
20
20
  import { LabelProvider } from '@theia/core/lib/browser';
21
21
  import { URI } from '@theia/core/lib/common/uri';
22
- import { inject, injectable } from '@theia/core/shared/inversify';
22
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
23
23
  import * as React from '@theia/core/shared/react';
24
24
  import { ReactNode } from '@theia/core/shared/react';
25
25
  import { EditorManager } from '@theia/editor/lib/browser';
26
26
  import { WorkspaceService } from '@theia/workspace/lib/browser';
27
27
  import { ClaudeCodeToolCallChatResponseContent } from '../claude-code-tool-call-content';
28
28
  import { CollapsibleToolRenderer } from './collapsible-tool-renderer';
29
- import { nls } from '@theia/core';
29
+ import { nls, ILogger } from '@theia/core';
30
30
 
31
31
  interface ReadToolInput {
32
32
  file_path: string;
@@ -46,6 +46,9 @@ export class ReadToolRenderer implements ChatResponsePartRenderer<ToolCallChatRe
46
46
  @inject(EditorManager)
47
47
  protected readonly editorManager: EditorManager;
48
48
 
49
+ @inject(ILogger) @named('ai-claude-code:ReadToolRenderer')
50
+ protected readonly logger: ILogger;
51
+
49
52
  canHandle(response: ChatResponseContent): number {
50
53
  if (ClaudeCodeToolCallChatResponseContent.is(response) && response.name === 'Read') {
51
54
  return 15; // Higher than default ToolCallPartRenderer (10)
@@ -61,9 +64,10 @@ export class ReadToolRenderer implements ChatResponsePartRenderer<ToolCallChatRe
61
64
  workspaceService={this.workspaceService}
62
65
  labelProvider={this.labelProvider}
63
66
  editorManager={this.editorManager}
67
+ logger={this.logger}
64
68
  />;
65
69
  } catch (error) {
66
- console.warn('Failed to parse Read tool input:', error);
70
+ this.logger.warn('Failed to parse Read tool input:', error);
67
71
  return <div className="claude-code-tool error">{nls.localize('theia/ai/claude-code/failedToParseReadToolData', 'Failed to parse Read tool data')}</div>;
68
72
  }
69
73
  }
@@ -74,7 +78,8 @@ const ReadToolComponent: React.FC<{
74
78
  workspaceService: WorkspaceService;
75
79
  labelProvider: LabelProvider;
76
80
  editorManager: EditorManager;
77
- }> = ({ input, workspaceService, labelProvider, editorManager }) => {
81
+ logger: ILogger;
82
+ }> = ({ input, workspaceService, labelProvider, editorManager, logger }) => {
78
83
  const getFileName = (filePath: string): string => filePath.split('/').pop() || filePath;
79
84
  const getWorkspaceRelativePath = async (filePath: string): Promise<string> => {
80
85
  try {
@@ -100,7 +105,7 @@ const ReadToolComponent: React.FC<{
100
105
  const uri = new URI(input.file_path);
101
106
  await editorManager.open(uri);
102
107
  } catch (error) {
103
- console.error('Failed to open file:', error);
108
+ logger.error('Failed to open file:', error);
104
109
  }
105
110
  };
106
111
 
@@ -18,12 +18,12 @@ import { ChatResponsePartRenderer } from '@theia/ai-chat-ui/lib/browser/chat-res
18
18
  import { ResponseNode } from '@theia/ai-chat-ui/lib/browser/chat-tree-view';
19
19
  import { ChatResponseContent, ToolCallChatResponseContent } from '@theia/ai-chat/lib/common';
20
20
  import { codicon } from '@theia/core/lib/browser';
21
- import { injectable } from '@theia/core/shared/inversify';
21
+ import { injectable, inject, named } from '@theia/core/shared/inversify';
22
22
  import * as React from '@theia/core/shared/react';
23
23
  import { ReactNode } from '@theia/core/shared/react';
24
24
  import { ClaudeCodeToolCallChatResponseContent } from '../claude-code-tool-call-content';
25
25
  import { CollapsibleToolRenderer } from './collapsible-tool-renderer';
26
- import { nls } from '@theia/core';
26
+ import { nls, ILogger } from '@theia/core';
27
27
 
28
28
  interface TodoItem {
29
29
  id: string;
@@ -77,6 +77,9 @@ class TodoWriteRegistry {
77
77
  @injectable()
78
78
  export class TodoWriteRenderer implements ChatResponsePartRenderer<ToolCallChatResponseContent> {
79
79
 
80
+ @inject(ILogger) @named('ai-claude-code:TodoWriteRenderer')
81
+ protected readonly logger: ILogger;
82
+
80
83
  canHandle(response: ChatResponseContent): number {
81
84
  if (ClaudeCodeToolCallChatResponseContent.is(response) && response.name === 'TodoWrite') {
82
85
  return 15; // Higher than default ToolCallPartRenderer (10)
@@ -89,7 +92,7 @@ export class TodoWriteRenderer implements ChatResponsePartRenderer<ToolCallChatR
89
92
  const input = JSON.parse(response.arguments || '{}') as TodoWriteInput;
90
93
  return <TodoListComponent todos={input.todos || []} sessionId={parentNode.sessionId} />;
91
94
  } catch (error) {
92
- console.warn('Failed to parse TodoWrite input:', error);
95
+ this.logger.warn('Failed to parse TodoWrite input:', error);
93
96
  return <div className="claude-code-tool todo-list-error">{nls.localize('theia/ai/claude-code/failedToParseTodoListData', 'Failed to parse todo list data')}</div>;
94
97
  }
95
98
  }
@@ -18,12 +18,12 @@ import { ChatResponsePartRenderer } from '@theia/ai-chat-ui/lib/browser/chat-res
18
18
  import { ResponseNode } from '@theia/ai-chat-ui/lib/browser/chat-tree-view';
19
19
  import { ChatResponseContent, ToolCallChatResponseContent } from '@theia/ai-chat/lib/common';
20
20
  import { codicon } from '@theia/core/lib/browser';
21
- import { injectable } from '@theia/core/shared/inversify';
21
+ import { injectable, inject, named } from '@theia/core/shared/inversify';
22
22
  import * as React from '@theia/core/shared/react';
23
23
  import { ReactNode } from '@theia/core/shared/react';
24
24
  import { ClaudeCodeToolCallChatResponseContent } from '../claude-code-tool-call-content';
25
25
  import { CollapsibleToolRenderer } from './collapsible-tool-renderer';
26
- import { nls } from '@theia/core';
26
+ import { nls, ILogger } from '@theia/core';
27
27
 
28
28
  interface WebFetchToolInput {
29
29
  url: string;
@@ -33,6 +33,9 @@ interface WebFetchToolInput {
33
33
  @injectable()
34
34
  export class WebFetchToolRenderer implements ChatResponsePartRenderer<ToolCallChatResponseContent> {
35
35
 
36
+ @inject(ILogger) @named('ai-claude-code:WebFetchToolRenderer')
37
+ protected readonly logger: ILogger;
38
+
36
39
  canHandle(response: ChatResponseContent): number {
37
40
  if (ClaudeCodeToolCallChatResponseContent.is(response) && response.name === 'WebFetch') {
38
41
  return 15; // Higher than default ToolCallPartRenderer (10)
@@ -45,7 +48,7 @@ export class WebFetchToolRenderer implements ChatResponsePartRenderer<ToolCallCh
45
48
  const input = JSON.parse(response.arguments || '{}') as WebFetchToolInput;
46
49
  return <WebFetchToolComponent input={input} />;
47
50
  } catch (error) {
48
- console.warn('Failed to parse WebFetch tool input:', error);
51
+ this.logger.warn('Failed to parse WebFetch tool input:', error);
49
52
  return <div className="claude-code-tool error">{nls.localize('theia/ai/claude-code/failedToParseWebFetchToolData', 'Failed to parse WebFetch tool data')}</div>;
50
53
  }
51
54
  }
@@ -63,6 +63,7 @@ export class WriteToolRenderer implements ChatResponsePartRenderer<ToolCallChatR
63
63
  workspaceService={this.workspaceService}
64
64
  labelProvider={this.labelProvider}
65
65
  editorManager={this.editorManager}
66
+ logger={this.logger}
66
67
  />;
67
68
  } catch (error) {
68
69
  this.logger.warn('Failed to parse Write tool input:', error);
@@ -76,7 +77,8 @@ const WriteToolComponent: React.FC<{
76
77
  workspaceService: WorkspaceService;
77
78
  labelProvider: LabelProvider;
78
79
  editorManager: EditorManager;
79
- }> = ({ input, workspaceService, labelProvider, editorManager }) => {
80
+ logger: ILogger;
81
+ }> = ({ input, workspaceService, labelProvider, editorManager, logger }) => {
80
82
  const getFileName = (filePath: string): string => filePath.split('/').pop() || filePath;
81
83
 
82
84
  const getWorkspaceRelativePath = async (filePath: string): Promise<string> => {
@@ -94,7 +96,7 @@ const WriteToolComponent: React.FC<{
94
96
  const uri = new URI(input.file_path);
95
97
  await editorManager.open(uri);
96
98
  } catch (error) {
97
- console.error('Failed to open file:', error);
99
+ logger.error('Failed to open file:', error);
98
100
  }
99
101
  };
100
102
 
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { AI_CORE_PREFERENCES_TITLE } from '@theia/ai-core/lib/common/ai-core-preferences';
17
+ import { AI_CORE_PREFERENCES_TITLE, MODEL_PROVIDER_TYPE_DETAIL, ModelProviderTypeDetail } from '@theia/ai-core/lib/common/ai-core-preferences';
18
18
  import { LINUX_ENV_HINT, nls, PreferenceSchema } from '@theia/core';
19
19
 
20
20
  export const CLAUDE_CODE_EXECUTABLE_PATH_PREF = 'ai-features.claudeCode.executablePath';
@@ -24,6 +24,7 @@ export const ClaudeCodePreferencesSchema: PreferenceSchema = {
24
24
  properties: {
25
25
  [CLAUDE_CODE_EXECUTABLE_PATH_PREF]: {
26
26
  type: 'string',
27
+ typeDetails: { [MODEL_PROVIDER_TYPE_DETAIL]: { label: 'Claude Code' } satisfies ModelProviderTypeDetail },
27
28
  markdownDescription: nls.localize('theia/ai/claude-code/executablePath/description',
28
29
  'Path to the Claude Code executable (cli.js) of the `@anthropic-ai/claude-agent-sdk`.' +
29
30
  'If not specified, the system will attempt to resolve the path automatically ' +
@@ -37,8 +37,8 @@ interface ToolApprovalResult {
37
37
  @injectable()
38
38
  export class ClaudeCodeServiceImpl implements ClaudeCodeService {
39
39
 
40
- @inject(ILogger) @named('ClaudeCode')
41
- private logger: ILogger;
40
+ @inject(ILogger) @named('ai-claude-code:ClaudeCodeServiceImpl')
41
+ protected readonly logger: ILogger;
42
42
 
43
43
  private client: ClaudeCodeClient;
44
44
  private abortControllers = new Map<string, AbortController>();