@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.
- package/lib/browser/claude-code-chat-agent.js +1 -1
- package/lib/browser/claude-code-chat-agent.js.map +1 -1
- package/lib/browser/claude-code-edit-tool-service.js +1 -1
- package/lib/browser/claude-code-edit-tool-service.js.map +1 -1
- package/lib/browser/claude-code-file-edit-backup-service.js +1 -1
- package/lib/browser/claude-code-file-edit-backup-service.js.map +1 -1
- package/lib/browser/claude-code-frontend-service.d.ts +1 -1
- package/lib/browser/claude-code-frontend-service.d.ts.map +1 -1
- package/lib/browser/claude-code-frontend-service.js +1 -0
- package/lib/browser/claude-code-frontend-service.js.map +1 -1
- package/lib/browser/claude-code-slash-commands-contribution.js +1 -1
- package/lib/browser/claude-code-slash-commands-contribution.js.map +1 -1
- package/lib/browser/renderers/bash-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/bash-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/bash-tool-renderer.js +12 -36
- package/lib/browser/renderers/bash-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/collapsible-tool-renderer.js +7 -10
- package/lib/browser/renderers/collapsible-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/edit-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/edit-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/edit-tool-renderer.js +18 -52
- package/lib/browser/renderers/edit-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/glob-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/glob-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/glob-tool-renderer.js +14 -40
- package/lib/browser/renderers/glob-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/grep-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/grep-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/grep-tool-renderer.js +14 -56
- package/lib/browser/renderers/grep-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/ls-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/ls-tool-renderer.js +12 -45
- package/lib/browser/renderers/ls-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/multiedit-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/multiedit-tool-renderer.js +14 -58
- package/lib/browser/renderers/multiedit-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/read-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/read-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/read-tool-renderer.js +16 -45
- package/lib/browser/renderers/read-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/todo-write-renderer.d.ts +2 -0
- package/lib/browser/renderers/todo-write-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/todo-write-renderer.js +19 -44
- package/lib/browser/renderers/todo-write-renderer.js.map +1 -1
- package/lib/browser/renderers/web-fetch-tool-renderer.d.ts +2 -0
- package/lib/browser/renderers/web-fetch-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/web-fetch-tool-renderer.js +12 -38
- package/lib/browser/renderers/web-fetch-tool-renderer.js.map +1 -1
- package/lib/browser/renderers/write-tool-renderer.d.ts.map +1 -1
- package/lib/browser/renderers/write-tool-renderer.js +10 -40
- package/lib/browser/renderers/write-tool-renderer.js.map +1 -1
- package/lib/common/claude-code-preferences.d.ts.map +1 -1
- package/lib/common/claude-code-preferences.js +1 -0
- package/lib/common/claude-code-preferences.js.map +1 -1
- package/lib/node/claude-code-service-impl.d.ts +2 -1
- package/lib/node/claude-code-service-impl.d.ts.map +1 -1
- package/lib/node/claude-code-service-impl.js +1 -1
- package/lib/node/claude-code-service-impl.js.map +1 -1
- package/package.json +11 -11
- package/src/browser/claude-code-chat-agent.ts +1 -1
- package/src/browser/claude-code-edit-tool-service.ts +1 -1
- package/src/browser/claude-code-file-edit-backup-service.ts +1 -1
- package/src/browser/claude-code-frontend-service.ts +3 -3
- package/src/browser/claude-code-slash-commands-contribution.ts +1 -1
- package/src/browser/renderers/bash-tool-renderer.tsx +6 -3
- package/src/browser/renderers/edit-tool-renderer.tsx +10 -5
- package/src/browser/renderers/glob-tool-renderer.tsx +6 -3
- package/src/browser/renderers/grep-tool-renderer.tsx +6 -3
- package/src/browser/renderers/ls-tool-renderer.tsx +4 -2
- package/src/browser/renderers/multiedit-tool-renderer.tsx +5 -3
- package/src/browser/renderers/read-tool-renderer.tsx +10 -5
- package/src/browser/renderers/todo-write-renderer.tsx +6 -3
- package/src/browser/renderers/web-fetch-tool-renderer.tsx +6 -3
- package/src/browser/renderers/write-tool-renderer.tsx +4 -2
- package/src/common/claude-code-preferences.ts +2 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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('
|
|
41
|
-
|
|
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>();
|