@vybestack/llxprt-code 0.1.18 → 0.1.19-beta
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/README.md +1 -0
- package/dist/package.json +6 -4
- package/dist/src/acp/acpPeer.js +72 -64
- package/dist/src/acp/acpPeer.js.map +1 -1
- package/dist/src/commands/mcp/add.d.ts +7 -0
- package/dist/src/commands/mcp/add.js +155 -0
- package/dist/src/commands/mcp/add.js.map +1 -0
- package/dist/src/commands/mcp/list.d.ts +8 -0
- package/dist/src/commands/mcp/list.js +110 -0
- package/dist/src/commands/mcp/list.js.map +1 -0
- package/dist/src/commands/mcp/remove.d.ts +7 -0
- package/dist/src/commands/mcp/remove.js +44 -0
- package/dist/src/commands/mcp/remove.js.map +1 -0
- package/dist/src/commands/mcp.d.ts +7 -0
- package/dist/src/commands/mcp.js +23 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/config/auth.js +5 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.js +80 -37
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +64 -0
- package/dist/src/config/keyBindings.js +137 -0
- package/dist/src/config/keyBindings.js.map +1 -0
- package/dist/src/config/settings.d.ts +7 -1
- package/dist/src/config/settings.js +20 -4
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.js +12 -109
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/nonInteractiveCli.js +0 -1
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
- package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
- package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
- package/dist/src/providers/logging/git-stats.d.ts +43 -0
- package/dist/src/providers/logging/git-stats.js +137 -0
- package/dist/src/providers/logging/git-stats.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.js +7 -0
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
- package/dist/src/ui/App.js +111 -35
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.d.ts +14 -0
- package/dist/src/ui/IdeIntegrationNudge.js +32 -0
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
- package/dist/src/ui/colors.d.ts +5 -0
- package/dist/src/ui/colors.js +51 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +16 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +9 -1
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +67 -31
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
- package/dist/src/ui/commands/loggingCommand.js +421 -0
- package/dist/src/ui/commands/loggingCommand.js.map +1 -0
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
- package/dist/src/ui/commands/privacyCommand.js +6 -3
- package/dist/src/ui/commands/privacyCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.js +1 -0
- package/dist/src/ui/commands/profileCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +2 -0
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setupGithubCommand.js +90 -26
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/toolsCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +14 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.js +3 -3
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
- package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
- package/dist/src/ui/components/FolderTrustDialog.js +38 -0
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
- package/dist/src/ui/components/Footer.d.ts +0 -1
- package/dist/src/ui/components/Footer.js +132 -15
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +32 -28
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
- package/dist/src/ui/components/LoggingDialog.js +155 -0
- package/dist/src/ui/components/LoggingDialog.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/ProviderDialog.js +100 -26
- package/dist/src/ui/components/ProviderDialog.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.js +99 -27
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.d.ts +11 -0
- package/dist/src/ui/components/TodoPanel.js +206 -0
- package/dist/src/ui/components/TodoPanel.js.map +1 -0
- package/dist/src/ui/components/ToolsDialog.d.ts +2 -2
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +116 -16
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +36 -8
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/todo-utils.d.ts +16 -0
- package/dist/src/ui/components/todo-utils.js +41 -0
- package/dist/src/ui/components/todo-utils.js.map +1 -0
- package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
- package/dist/src/ui/contexts/SettingsContext.js +15 -0
- package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
- package/dist/src/ui/contexts/TodoContext.d.ts +15 -0
- package/dist/src/ui/contexts/TodoContext.js +18 -0
- package/dist/src/ui/contexts/TodoContext.js.map +1 -0
- package/dist/src/ui/contexts/TodoProvider.d.ts +7 -0
- package/dist/src/ui/contexts/TodoProvider.js +62 -0
- package/dist/src/ui/contexts/TodoProvider.js.map +1 -0
- package/dist/src/ui/contexts/ToolCallContext.d.ts +19 -0
- package/dist/src/ui/contexts/ToolCallContext.js +13 -0
- package/dist/src/ui/contexts/ToolCallContext.js.map +1 -0
- package/dist/src/ui/contexts/ToolCallProvider.d.ts +12 -0
- package/dist/src/ui/contexts/ToolCallProvider.js +62 -0
- package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +28 -4
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +137 -112
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
- package/dist/src/ui/hooks/useAtCompletion.js +180 -0
- package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
- package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
- package/dist/src/ui/hooks/useFolderTrust.js +22 -0
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +16 -4
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +12 -12
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
- package/dist/src/ui/hooks/useResponsive.js +19 -0
- package/dist/src/ui/hooks/useResponsive.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
- package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
- package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
- package/dist/src/ui/hooks/useToolsDialog.d.ts +2 -2
- package/dist/src/ui/hooks/useToolsDialog.js.map +1 -1
- package/dist/src/ui/keyMatchers.d.ts +26 -0
- package/dist/src/ui/keyMatchers.js +68 -0
- package/dist/src/ui/keyMatchers.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
- package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
- package/dist/src/ui/themes/semantic-resolver.js +32 -0
- package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
- package/dist/src/ui/themes/semantic-tokens.js +7 -0
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
- package/dist/src/ui/themes/theme-compat.d.ts +34 -0
- package/dist/src/ui/themes/theme-compat.js +65 -0
- package/dist/src/ui/themes/theme-compat.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.d.ts +8 -0
- package/dist/src/ui/themes/theme-manager.js +18 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/types.d.ts +1 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
- package/dist/src/ui/utils/CodeColorizer.js +4 -3
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -0
- package/dist/src/ui/utils/ConsolePatcher.js +3 -0
- package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +1 -0
- package/dist/src/ui/utils/commandUtils.js +22 -1
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/responsive.d.ts +16 -0
- package/dist/src/ui/utils/responsive.js +111 -0
- package/dist/src/ui/utils/responsive.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +2 -2
- package/dist/src/utils/cleanup.js +2 -2
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/gitUtils.d.ts +21 -1
- package/dist/src/utils/gitUtils.js +70 -3
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
- package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
- package/dist/src/utils/privacy/PrivacyManager.js +133 -0
- package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
- package/dist/src/utils/sandbox.js +430 -401
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -4
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
- package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -4,9 +4,9 @@
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
5
5
|
*/
|
6
6
|
import React from 'react';
|
7
|
-
import {
|
7
|
+
import { AnyDeclarativeTool } from '@vybestack/llxprt-code-core';
|
8
8
|
interface ToolsDialogProps {
|
9
|
-
tools:
|
9
|
+
tools: AnyDeclarativeTool[];
|
10
10
|
action: 'enable' | 'disable';
|
11
11
|
disabledTools: string[];
|
12
12
|
onSelect: (toolName: string) => void;
|
@@ -4,27 +4,89 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
* Copyright 2025 Google LLC
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
6
6
|
*/
|
7
|
-
import { useCallback } from 'react';
|
7
|
+
import { useCallback, useState } from 'react';
|
8
8
|
import { Box, Text, useInput } from 'ink';
|
9
9
|
import { DiffRenderer } from './DiffRenderer.js';
|
10
|
-
import { Colors } from '../../colors.js';
|
10
|
+
import { Colors, SemanticColors } from '../../colors.js';
|
11
11
|
import { ToolConfirmationOutcome, } from '@vybestack/llxprt-code-core';
|
12
12
|
import { RadioButtonSelect, } from '../shared/RadioButtonSelect.js';
|
13
13
|
import { MaxSizedBox } from '../shared/MaxSizedBox.js';
|
14
|
-
|
14
|
+
import { useResponsive } from '../../hooks/useResponsive.js';
|
15
|
+
import { truncateEnd } from '../../utils/responsive.js';
|
16
|
+
export const ToolConfirmationMessage = ({ confirmationDetails, config, isFocused = true, availableTerminalHeight, terminalWidth, }) => {
|
15
17
|
const { onConfirm } = confirmationDetails;
|
16
18
|
const childWidth = terminalWidth - 2; // 2 for padding
|
17
|
-
|
19
|
+
const { breakpoint } = useResponsive();
|
20
|
+
// State to track whether details are shown
|
21
|
+
const [showDetails, setShowDetails] = useState(false);
|
22
|
+
const handleConfirm = useCallback(async (outcome) => {
|
23
|
+
if (confirmationDetails.type === 'edit') {
|
24
|
+
const ideClient = config?.getIdeClient();
|
25
|
+
if (config?.getIdeMode() && config?.getIdeModeFeature()) {
|
26
|
+
const cliOutcome = outcome === ToolConfirmationOutcome.Cancel
|
27
|
+
? 'rejected'
|
28
|
+
: 'accepted';
|
29
|
+
await ideClient?.resolveDiffFromCli(confirmationDetails.filePath, cliOutcome);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
onConfirm(outcome);
|
33
|
+
}, [confirmationDetails, config, onConfirm]);
|
34
|
+
useInput((input, key) => {
|
18
35
|
if (!isFocused)
|
19
36
|
return;
|
20
37
|
if (key.escape) {
|
21
|
-
|
38
|
+
handleConfirm(ToolConfirmationOutcome.Cancel);
|
39
|
+
}
|
40
|
+
// Handle 'd' key for details toggle
|
41
|
+
if (input === 'd') {
|
42
|
+
setShowDetails(!showDetails);
|
22
43
|
}
|
23
44
|
});
|
24
|
-
const handleSelect = useCallback((item) =>
|
25
|
-
|
45
|
+
const handleSelect = useCallback((item) => handleConfirm(item), [handleConfirm]);
|
46
|
+
// Helper function to determine if we should show details toggle
|
47
|
+
const shouldShowDetailsToggle = (type) => {
|
48
|
+
if (type === 'edit')
|
49
|
+
return false; // Edit diffs always show full content
|
50
|
+
// For exec commands, show toggle if command is long
|
51
|
+
if (type === 'exec') {
|
52
|
+
const execDetails = confirmationDetails;
|
53
|
+
return execDetails.command.length > 50;
|
54
|
+
}
|
55
|
+
// For info commands, show toggle if there are multiple URLs or long prompt
|
56
|
+
if (type === 'info') {
|
57
|
+
const infoDetails = confirmationDetails;
|
58
|
+
const hasMultipleUrls = infoDetails.urls && infoDetails.urls.length > 2;
|
59
|
+
const hasLongPrompt = infoDetails.prompt && infoDetails.prompt.length > 80;
|
60
|
+
return Boolean(hasMultipleUrls || hasLongPrompt);
|
61
|
+
}
|
62
|
+
// For MCP commands, always allow details toggle
|
63
|
+
return true;
|
64
|
+
};
|
65
|
+
// Helper function to create summary content
|
66
|
+
const createSummary = (type) => {
|
67
|
+
if (type === 'exec') {
|
68
|
+
const execDetails = confirmationDetails;
|
69
|
+
return `Execute: ${execDetails.rootCommand}`;
|
70
|
+
}
|
71
|
+
if (type === 'info') {
|
72
|
+
const infoDetails = confirmationDetails;
|
73
|
+
return truncateEnd(infoDetails.prompt || 'Web fetch operation', 60);
|
74
|
+
}
|
75
|
+
if (type === 'mcp') {
|
76
|
+
const mcpDetails = confirmationDetails;
|
77
|
+
return `MCP Tool: ${mcpDetails.toolName} from ${mcpDetails.serverName}`;
|
78
|
+
}
|
79
|
+
return 'Operation details';
|
80
|
+
};
|
81
|
+
let bodyContent = null;
|
26
82
|
let question;
|
27
83
|
const options = new Array();
|
84
|
+
const enableDetailsToggle = shouldShowDetailsToggle(confirmationDetails.type);
|
85
|
+
// Different detail levels based on width
|
86
|
+
const shouldShowSummary = enableDetailsToggle && !showDetails && breakpoint === 'NARROW';
|
87
|
+
const shouldShowPartialDetails = enableDetailsToggle &&
|
88
|
+
!showDetails &&
|
89
|
+
(breakpoint === 'STANDARD' || breakpoint === 'WIDE');
|
28
90
|
// Body content is now the DiffRenderer, passing filename to it
|
29
91
|
// The bordered box is removed from here and handled within DiffRenderer
|
30
92
|
function availableBodyContentHeight() {
|
@@ -60,13 +122,23 @@ export const ToolConfirmationMessage = ({ confirmationDetails, isFocused = true,
|
|
60
122
|
}, {
|
61
123
|
label: 'Yes, allow always',
|
62
124
|
value: ToolConfirmationOutcome.ProceedAlways,
|
63
|
-
}, {
|
64
|
-
label: 'Modify with external editor',
|
65
|
-
value: ToolConfirmationOutcome.ModifyWithEditor,
|
66
|
-
}, {
|
67
|
-
label: 'No, suggest changes (esc)',
|
68
|
-
value: ToolConfirmationOutcome.Cancel,
|
69
125
|
});
|
126
|
+
if (config?.getIdeMode() && config?.getIdeModeFeature()) {
|
127
|
+
options.push({
|
128
|
+
label: 'No',
|
129
|
+
value: ToolConfirmationOutcome.Cancel,
|
130
|
+
});
|
131
|
+
}
|
132
|
+
else {
|
133
|
+
options.push({
|
134
|
+
label: 'Modify with external editor',
|
135
|
+
value: ToolConfirmationOutcome.ModifyWithEditor,
|
136
|
+
});
|
137
|
+
options.push({
|
138
|
+
label: 'No, suggest changes (esc)',
|
139
|
+
value: ToolConfirmationOutcome.Cancel,
|
140
|
+
});
|
141
|
+
}
|
70
142
|
bodyContent = (_jsx(DiffRenderer, { diffContent: confirmationDetails.fileDiff, filename: confirmationDetails.fileName, availableTerminalHeight: availableBodyContentHeight(), terminalWidth: childWidth }));
|
71
143
|
}
|
72
144
|
else if (confirmationDetails.type === 'exec') {
|
@@ -86,7 +158,21 @@ export const ToolConfirmationMessage = ({ confirmationDetails, isFocused = true,
|
|
86
158
|
if (bodyContentHeight !== undefined) {
|
87
159
|
bodyContentHeight -= 2; // Account for padding;
|
88
160
|
}
|
89
|
-
|
161
|
+
if (shouldShowSummary) {
|
162
|
+
// Show summary with details toggle
|
163
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsx(Text, { color: SemanticColors.text.primary, children: createSummary('exec') }), _jsx(Text, { color: SemanticColors.text.secondary, dimColor: true, children: "Press 'd' to see full details" })] }));
|
164
|
+
}
|
165
|
+
else if (shouldShowPartialDetails) {
|
166
|
+
// Show partial details with toggle for full details (at wide width)
|
167
|
+
const commandPreview = executionProps.command.length > 50
|
168
|
+
? executionProps.command.substring(0, 50) + '...'
|
169
|
+
: executionProps.command;
|
170
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsx(Text, { color: Colors.AccentCyan, children: commandPreview }), _jsx(Text, { color: SemanticColors.text.secondary, dimColor: true, children: "Press 'd' to see full details" })] }));
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
// Show full details
|
174
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", children: [enableDetailsToggle && showDetails && (_jsx(Box, { paddingX: 1, marginLeft: 1, marginBottom: 1, children: _jsx(Text, { color: SemanticColors.text.secondary, children: "Full Parameters:" }) })), _jsx(Box, { paddingX: 1, marginLeft: 1, children: _jsx(MaxSizedBox, { maxHeight: bodyContentHeight, maxWidth: Math.max(childWidth - 4, 1), children: _jsx(Box, { children: _jsx(Text, { color: Colors.AccentCyan, children: executionProps.command }) }) }) })] }));
|
175
|
+
}
|
90
176
|
}
|
91
177
|
else if (confirmationDetails.type === 'info') {
|
92
178
|
const infoProps = confirmationDetails;
|
@@ -103,12 +189,26 @@ export const ToolConfirmationMessage = ({ confirmationDetails, isFocused = true,
|
|
103
189
|
label: 'No, suggest changes (esc)',
|
104
190
|
value: ToolConfirmationOutcome.Cancel,
|
105
191
|
});
|
106
|
-
|
192
|
+
if (shouldShowSummary) {
|
193
|
+
// Show summary with details toggle
|
194
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsx(Text, { color: SemanticColors.text.primary, children: createSummary('info') }), _jsx(Text, { color: SemanticColors.text.secondary, dimColor: true, children: "Press 'd' to see full details" })] }));
|
195
|
+
}
|
196
|
+
else {
|
197
|
+
// Show full details
|
198
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [enableDetailsToggle && showDetails && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: SemanticColors.text.secondary, children: "Full Parameters:" }) })), _jsx(Text, { color: Colors.AccentCyan, children: infoProps.prompt }), displayUrls && infoProps.urls && infoProps.urls.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { children: "URLs to fetch:" }), infoProps.urls.map((url) => (_jsxs(Text, { children: [" - ", url] }, url)))] }))] }));
|
199
|
+
}
|
107
200
|
}
|
108
201
|
else {
|
109
202
|
// mcp tool confirmation
|
110
203
|
const mcpProps = confirmationDetails;
|
111
|
-
|
204
|
+
if (shouldShowSummary) {
|
205
|
+
// Show summary with details toggle
|
206
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsx(Text, { color: SemanticColors.text.primary, children: createSummary('mcp') }), _jsx(Text, { color: SemanticColors.text.secondary, dimColor: true, children: "Press 'd' to see full details" })] }));
|
207
|
+
}
|
208
|
+
else {
|
209
|
+
// Show full details
|
210
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [enableDetailsToggle && showDetails && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: SemanticColors.text.secondary, children: "Full Parameters:" }) })), _jsxs(Text, { color: Colors.AccentCyan, children: ["MCP Server: ", mcpProps.serverName] }), _jsxs(Text, { color: Colors.AccentCyan, children: ["Tool: ", mcpProps.toolName] })] }));
|
211
|
+
}
|
112
212
|
question = `Allow execution of MCP tool "${mcpProps.toolName}" from server "${mcpProps.serverName}"?`;
|
113
213
|
options.push({
|
114
214
|
label: 'Yes, allow once',
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ToolConfirmationMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/ToolConfirmationMessage.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"ToolConfirmationMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/ToolConfirmationMessage.tsx"],"names":[],"mappings":"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"}
|
@@ -11,25 +11,53 @@ import { ToolMessage } from './ToolMessage.js';
|
|
11
11
|
import { ToolConfirmationMessage } from './ToolConfirmationMessage.js';
|
12
12
|
import { Colors } from '../../colors.js';
|
13
13
|
import { SHELL_COMMAND_NAME } from '../../constants.js';
|
14
|
+
import { useTodoContext } from '../../contexts/TodoContext.js';
|
14
15
|
// Main component renders the border and maps the tools using ToolMessage
|
15
16
|
export const ToolGroupMessage = ({ toolCalls, availableTerminalHeight, terminalWidth, config, isFocused = true, }) => {
|
16
|
-
const
|
17
|
-
const
|
17
|
+
const { todos } = useTodoContext();
|
18
|
+
const hasTodoPanel = todos.length > 0;
|
19
|
+
// only prompt for tool approval on the first 'confirming' tool in the list
|
20
|
+
// note, after the CTA, this automatically moves over to the next 'confirming' tool
|
21
|
+
const toolAwaitingApproval = useMemo(() => toolCalls.find((tc) => tc.status === ToolCallStatus.Confirming), [toolCalls]);
|
22
|
+
// Filter out todo_read completely when panel is visible
|
23
|
+
// and minimize todo_write output
|
24
|
+
const filteredToolCalls = useMemo(() => {
|
25
|
+
if (!hasTodoPanel)
|
26
|
+
return toolCalls;
|
27
|
+
return toolCalls
|
28
|
+
.map((tool) => {
|
29
|
+
if (tool.name === 'todo_read') {
|
30
|
+
return null; // Don't show todo_read at all when panel is visible
|
31
|
+
}
|
32
|
+
if (tool.name === 'todo_write') {
|
33
|
+
// Minimize todo_write output when panel is visible
|
34
|
+
return {
|
35
|
+
...tool,
|
36
|
+
resultDisplay: '✦ Todo list updated.',
|
37
|
+
};
|
38
|
+
}
|
39
|
+
return tool;
|
40
|
+
})
|
41
|
+
.filter(Boolean);
|
42
|
+
}, [toolCalls, hasTodoPanel]);
|
43
|
+
// If all tools were filtered out, don't render anything
|
44
|
+
if (filteredToolCalls.length === 0) {
|
45
|
+
return null;
|
46
|
+
}
|
47
|
+
const hasPending = !filteredToolCalls.every((t) => t.status === ToolCallStatus.Success);
|
48
|
+
const isShellCommand = filteredToolCalls.some((t) => t.name === SHELL_COMMAND_NAME);
|
18
49
|
const borderColor = hasPending || isShellCommand ? Colors.AccentYellow : Colors.Gray;
|
19
50
|
const staticHeight = /* border */ 2 + /* marginBottom */ 1;
|
20
51
|
// This is a bit of a magic number, but it accounts for the border and
|
21
52
|
// marginLeft.
|
22
53
|
const innerWidth = terminalWidth - 4;
|
23
|
-
// only prompt for tool approval on the first 'confirming' tool in the list
|
24
|
-
// note, after the CTA, this automatically moves over to the next 'confirming' tool
|
25
|
-
const toolAwaitingApproval = useMemo(() => toolCalls.find((tc) => tc.status === ToolCallStatus.Confirming), [toolCalls]);
|
26
54
|
let countToolCallsWithResults = 0;
|
27
|
-
for (const tool of
|
55
|
+
for (const tool of filteredToolCalls) {
|
28
56
|
if (tool.resultDisplay !== undefined && tool.resultDisplay !== '') {
|
29
57
|
countToolCallsWithResults++;
|
30
58
|
}
|
31
59
|
}
|
32
|
-
const countOneLineToolCalls =
|
60
|
+
const countOneLineToolCalls = filteredToolCalls.length - countToolCallsWithResults;
|
33
61
|
const availableTerminalHeightPerToolMessage = availableTerminalHeight
|
34
62
|
? Math.max(Math.floor((availableTerminalHeight - staticHeight - countOneLineToolCalls) /
|
35
63
|
Math.max(1, countToolCallsWithResults)), 1)
|
@@ -41,7 +69,7 @@ export const ToolGroupMessage = ({ toolCalls, availableTerminalHeight, terminalW
|
|
41
69
|
Ink to render the border of the box incorrectly and span multiple lines and even
|
42
70
|
cause tearing.
|
43
71
|
*/
|
44
|
-
width: "100%", marginLeft: 1, borderDimColor: hasPending, borderColor: borderColor, children:
|
72
|
+
width: "100%", marginLeft: 1, borderDimColor: hasPending, borderColor: borderColor, children: filteredToolCalls.map((tool) => {
|
45
73
|
const isConfirming = toolAwaitingApproval?.callId === tool.callId;
|
46
74
|
return (_jsxs(Box, { flexDirection: "column", minHeight: 1, children: [_jsx(Box, { flexDirection: "row", alignItems: "center", children: _jsx(ToolMessage, { callId: tool.callId, name: tool.name, description: tool.description, resultDisplay: tool.resultDisplay, status: tool.status, confirmationDetails: tool.confirmationDetails, availableTerminalHeight: availableTerminalHeightPerToolMessage, terminalWidth: innerWidth, emphasis: isConfirming
|
47
75
|
? 'high'
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ToolGroupMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/ToolGroupMessage.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAA6B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"ToolGroupMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/ToolGroupMessage.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { TodoToolCall } from '@vybestack/llxprt-code-core';
|
7
|
+
export interface GroupedToolCall {
|
8
|
+
toolCall: TodoToolCall;
|
9
|
+
count: number;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Function to group consecutive identical tool calls
|
13
|
+
* Identical tool calls (same name and parameters) that occur consecutively are grouped with a count
|
14
|
+
* Different tool calls are shown separately
|
15
|
+
*/
|
16
|
+
export declare const groupToolCalls: (toolCalls: TodoToolCall[]) => GroupedToolCall[];
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Function to group consecutive identical tool calls
|
8
|
+
* Identical tool calls (same name and parameters) that occur consecutively are grouped with a count
|
9
|
+
* Different tool calls are shown separately
|
10
|
+
*/
|
11
|
+
export const groupToolCalls = (toolCalls) => {
|
12
|
+
if (toolCalls.length === 0)
|
13
|
+
return [];
|
14
|
+
const grouped = [];
|
15
|
+
let currentGroup = {
|
16
|
+
toolCall: toolCalls[0],
|
17
|
+
count: 1,
|
18
|
+
};
|
19
|
+
for (let i = 1; i < toolCalls.length; i++) {
|
20
|
+
const current = toolCalls[i];
|
21
|
+
const prev = currentGroup.toolCall;
|
22
|
+
// Check if this is the same tool call as the previous one
|
23
|
+
if (current.name === prev.name &&
|
24
|
+
JSON.stringify(current.parameters) === JSON.stringify(prev.parameters)) {
|
25
|
+
// Increment count for consecutive identical call
|
26
|
+
currentGroup.count++;
|
27
|
+
}
|
28
|
+
else {
|
29
|
+
// Different call, save the current group and start a new one
|
30
|
+
grouped.push(currentGroup);
|
31
|
+
currentGroup = {
|
32
|
+
toolCall: current,
|
33
|
+
count: 1,
|
34
|
+
};
|
35
|
+
}
|
36
|
+
}
|
37
|
+
// Don't forget the last group
|
38
|
+
grouped.push(currentGroup);
|
39
|
+
return grouped;
|
40
|
+
};
|
41
|
+
//# sourceMappingURL=todo-utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"todo-utils.js","sourceRoot":"","sources":["../../../../src/ui/components/todo-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAyB,EACN,EAAE;IACrB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,YAAY,GAAoB;QAClC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC;QAEnC,0DAA0D;QAC1D,IACE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EACtE,CAAC;YACD,iDAAiD;YACjD,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC;aACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE3B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
import { LoadedSettings } from '../../config/settings.js';
|
8
|
+
export declare const SettingsContext: React.Context<LoadedSettings | undefined>;
|
9
|
+
export declare const useSettings: () => LoadedSettings;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React, { useContext } from 'react';
|
7
|
+
export const SettingsContext = React.createContext(undefined);
|
8
|
+
export const useSettings = () => {
|
9
|
+
const context = useContext(SettingsContext);
|
10
|
+
if (context === undefined) {
|
11
|
+
throw new Error('useSettings must be used within a SettingsProvider');
|
12
|
+
}
|
13
|
+
return context;
|
14
|
+
};
|
15
|
+
//# sourceMappingURL=SettingsContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SettingsContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/SettingsContext.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAG1C,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAChD,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
import { Todo } from '@vybestack/llxprt-code-core';
|
8
|
+
interface TodoContextType {
|
9
|
+
todos: Todo[];
|
10
|
+
updateTodos: (todos: Todo[]) => void;
|
11
|
+
refreshTodos: () => void;
|
12
|
+
}
|
13
|
+
export declare const TodoContext: React.Context<TodoContextType>;
|
14
|
+
export declare const useTodoContext: () => TodoContextType;
|
15
|
+
export {};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
const defaultContextValue = {
|
8
|
+
todos: [],
|
9
|
+
updateTodos: () => {
|
10
|
+
throw new Error('NotYetImplemented');
|
11
|
+
},
|
12
|
+
refreshTodos: () => {
|
13
|
+
throw new Error('NotYetImplemented');
|
14
|
+
},
|
15
|
+
};
|
16
|
+
export const TodoContext = React.createContext(defaultContextValue);
|
17
|
+
export const useTodoContext = () => React.useContext(TodoContext);
|
18
|
+
//# sourceMappingURL=TodoContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TodoContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/TodoContext.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,mBAAmB,GAAoB;IAC3C,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,GAAG,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,YAAY,EAAE,GAAG,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GACtB,KAAK,CAAC,aAAa,CAAkB,mBAAmB,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC"}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { useState, useEffect, useMemo, useCallback } from 'react';
|
3
|
+
import { TodoStore, todoEvents, } from '@vybestack/llxprt-code-core';
|
4
|
+
import { TodoContext } from './TodoContext.js';
|
5
|
+
export const TodoProvider = ({ children, sessionId = 'default', }) => {
|
6
|
+
const [todos, setTodos] = useState([]);
|
7
|
+
const [loading, setLoading] = useState(true);
|
8
|
+
const [error, setError] = useState(null);
|
9
|
+
const refreshTodos = useCallback(async () => {
|
10
|
+
try {
|
11
|
+
setLoading(true);
|
12
|
+
const store = new TodoStore(sessionId);
|
13
|
+
const todos = await store.readTodos();
|
14
|
+
setTodos(todos);
|
15
|
+
setError(null);
|
16
|
+
}
|
17
|
+
catch (err) {
|
18
|
+
setError(`Failed to load todos: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
19
|
+
setTodos([]);
|
20
|
+
}
|
21
|
+
finally {
|
22
|
+
setLoading(false);
|
23
|
+
}
|
24
|
+
}, [sessionId]);
|
25
|
+
// Load initial data
|
26
|
+
useEffect(() => {
|
27
|
+
refreshTodos();
|
28
|
+
}, [refreshTodos]);
|
29
|
+
// Listen for todo updates
|
30
|
+
useEffect(() => {
|
31
|
+
const handleTodoUpdate = (eventData) => {
|
32
|
+
// Verify this update is for our session
|
33
|
+
if (eventData.sessionId === sessionId) {
|
34
|
+
// Use the todos from the event instead of re-reading from file
|
35
|
+
// This avoids race conditions with file I/O
|
36
|
+
setTodos(eventData.todos);
|
37
|
+
setError(null);
|
38
|
+
}
|
39
|
+
};
|
40
|
+
todoEvents.onTodoUpdated(handleTodoUpdate);
|
41
|
+
return () => {
|
42
|
+
todoEvents.offTodoUpdated(handleTodoUpdate);
|
43
|
+
};
|
44
|
+
}, [sessionId]);
|
45
|
+
const updateTodos = useCallback((newTodos) => {
|
46
|
+
setTodos(newTodos);
|
47
|
+
// Persist to store
|
48
|
+
const store = new TodoStore(sessionId);
|
49
|
+
store.writeTodos(newTodos).catch((err) => {
|
50
|
+
setError(`Failed to save todos: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
51
|
+
});
|
52
|
+
}, [sessionId]);
|
53
|
+
const contextValue = useMemo(() => ({
|
54
|
+
todos,
|
55
|
+
updateTodos,
|
56
|
+
refreshTodos,
|
57
|
+
loading,
|
58
|
+
error,
|
59
|
+
}), [todos, updateTodos, refreshTodos, loading, error]);
|
60
|
+
return (_jsx(TodoContext.Provider, { value: contextValue, children: children }));
|
61
|
+
};
|
62
|
+
//# sourceMappingURL=TodoProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TodoProvider.js","sourceRoot":"","sources":["../../../../src/ui/contexts/TodoProvider.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
import { TodoToolCall } from '@vybestack/llxprt-code-core';
|
8
|
+
export interface ToolCallContextType {
|
9
|
+
/**
|
10
|
+
* Get executing tool calls for a specific todo
|
11
|
+
*/
|
12
|
+
getExecutingToolCalls: (todoId: string) => TodoToolCall[];
|
13
|
+
/**
|
14
|
+
* Subscribe to tool call updates
|
15
|
+
*/
|
16
|
+
subscribe: (callback: () => void) => () => void;
|
17
|
+
}
|
18
|
+
export declare const ToolCallContext: React.Context<ToolCallContextType>;
|
19
|
+
export declare const useToolCallContext: () => ToolCallContextType;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
const defaultContextValue = {
|
8
|
+
getExecutingToolCalls: () => [],
|
9
|
+
subscribe: () => () => { },
|
10
|
+
};
|
11
|
+
export const ToolCallContext = React.createContext(defaultContextValue);
|
12
|
+
export const useToolCallContext = () => React.useContext(ToolCallContext);
|
13
|
+
//# sourceMappingURL=ToolCallContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ToolCallContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/ToolCallContext.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,MAAM,mBAAmB,GAAwB;IAC/C,qBAAqB,EAAE,GAAG,EAAE,CAAC,EAAE;IAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAC1B,KAAK,CAAC,aAAa,CAAsB,mBAAmB,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import React from 'react';
|
7
|
+
interface ToolCallProviderProps {
|
8
|
+
children: React.ReactNode;
|
9
|
+
sessionId: string;
|
10
|
+
}
|
11
|
+
export declare const ToolCallProvider: React.FC<ToolCallProviderProps>;
|
12
|
+
export {};
|