@vybestack/llxprt-code 0.1.18-nightly.250807.306d1939 → 0.1.18-nightly.250808.f9b79d74
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 +4 -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/config.js +7 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/settings.d.ts +3 -0
- package/dist/src/config/settings.js +3 -3
- package/dist/src/config/settings.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/providers/providerManagerInstance.js +3 -0
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/ui/App.js +49 -13
- 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/commands/diagnosticsCommand.js +9 -1
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.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 +71 -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/components/TodoPanel.d.ts +11 -0
- package/dist/src/ui/components/TodoPanel.js +131 -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 +31 -9
- 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/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 +7 -4
- package/dist/src/ui/hooks/atCommandProcessor.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/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +2 -1
- 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/useToolsDialog.d.ts +2 -2
- package/dist/src/ui/hooks/useToolsDialog.js.map +1 -1
- package/dist/src/ui/types.d.ts +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/utils/gitUtils.d.ts +12 -1
- package/dist/src/utils/gitUtils.js +54 -4
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/sandbox.js +420 -401
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
@@ -3,6 +3,14 @@
|
|
3
3
|
* Copyright 2025 Google LLC
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
5
5
|
*/
|
6
|
+
// These imports will be needed when the command is re-enabled
|
7
|
+
// import path from 'path';
|
8
|
+
// import { CommandContext } from '../../ui/commands/types.js';
|
9
|
+
// import {
|
10
|
+
// getGitRepoRoot,
|
11
|
+
// getLatestGitHubRelease,
|
12
|
+
// isGitHubRepository,
|
13
|
+
// } from '../../utils/gitUtils.js';
|
6
14
|
import { CommandKind, } from './types.js';
|
7
15
|
export const setupGithubCommand = {
|
8
16
|
name: 'setup-github',
|
@@ -29,60 +37,97 @@ This command would download GitHub Actions workflows for:
|
|
29
37
|
- (Potentially) Automated upstream sync via cherry-picking
|
30
38
|
|
31
39
|
To implement this feature:
|
32
|
-
1. Fork https://github.com/
|
40
|
+
1. Fork https://github.com/acoliver/run-llxprt-code
|
33
41
|
2. Adapt it for multi-provider support
|
34
42
|
3. Update this command to point to the new repository
|
35
43
|
|
36
44
|
For now, you can manually set up GitHub Actions by creating workflows that use llxprt-code.`,
|
37
45
|
}),
|
38
|
-
/* Original gemini implementation with
|
46
|
+
/* Original gemini implementation with GitHub API integration - kept for reference:
|
47
|
+
action: async (
|
48
|
+
context: CommandContext,
|
49
|
+
): Promise<SlashCommandActionReturn> => {
|
39
50
|
if (!isGitHubRepository()) {
|
40
51
|
throw new Error(
|
41
52
|
'Unable to determine the GitHub repository. /setup-github must be run from a git repository.',
|
42
53
|
);
|
43
54
|
}
|
44
55
|
|
45
|
-
|
56
|
+
// Find the root directory of the repo
|
57
|
+
let gitRepoRoot: string;
|
46
58
|
try {
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
} catch {
|
59
|
+
gitRepoRoot = getGitRepoRoot();
|
60
|
+
} catch (_error) {
|
61
|
+
console.debug(`Failed to get git repo root:`, _error);
|
51
62
|
throw new Error(
|
52
63
|
'Unable to determine the GitHub repository. /setup-github must be run from a git repository.',
|
53
64
|
);
|
54
65
|
}
|
55
66
|
|
56
|
-
//
|
57
|
-
|
58
|
-
const
|
67
|
+
// Get the latest release tag from GitHub API
|
68
|
+
// For llxprt, this would call getLatestGitHubRelease() which points to acoliver/run-llxprt-code
|
69
|
+
const proxy = context?.services?.config?.getProxy();
|
70
|
+
const releaseTag = await getLatestGitHubRelease(proxy);
|
59
71
|
|
72
|
+
// TODO: Update these workflow paths for llxprt
|
60
73
|
const workflows = [
|
61
|
-
'
|
62
|
-
'issue-triage/
|
63
|
-
'issue-triage/
|
64
|
-
'pr-review/
|
74
|
+
'llxprt-cli/llxprt-cli.yml',
|
75
|
+
'issue-triage/llxprt-issue-automated-triage.yml',
|
76
|
+
'issue-triage/llxprt-issue-scheduled-triage.yml',
|
77
|
+
'pr-review/llxprt-pr-review.yml',
|
65
78
|
];
|
66
79
|
|
67
|
-
const
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
80
|
+
const commands = [];
|
81
|
+
|
82
|
+
// Ensure fast exit
|
83
|
+
commands.push(`set -eEuo pipefail`);
|
84
|
+
|
85
|
+
// Make the directory if it doesn't exist
|
86
|
+
commands.push(`mkdir -p "${gitRepoRoot}/.github/workflows"`);
|
87
|
+
|
88
|
+
for (const workflow of workflows) {
|
89
|
+
const fileName = path.basename(workflow);
|
90
|
+
// TODO: Update to use acoliver/run-llxprt-code repository
|
91
|
+
const curlCommand = buildCurlCommand(
|
92
|
+
`https://raw.githubusercontent.com/acoliver/run-llxprt-code/refs/tags/${releaseTag}/examples/workflows/${workflow}`,
|
93
|
+
[`--output "${gitRepoRoot}/.github/workflows/${fileName}"`],
|
94
|
+
);
|
95
|
+
commands.push(curlCommand);
|
96
|
+
}
|
97
|
+
|
98
|
+
commands.push(
|
99
|
+
`echo "Successfully downloaded ${workflows.length} workflows. Follow the steps in https://github.com/acoliver/run-llxprt-code/blob/${releaseTag}/README.md#quick-start (skipping the /setup-github step) to complete setup."`,
|
100
|
+
`open https://github.com/acoliver/run-llxprt-code/blob/${releaseTag}/README.md#quick-start`,
|
101
|
+
);
|
102
|
+
|
103
|
+
const command = `(${commands.join(' && ')})`;
|
77
104
|
return {
|
78
105
|
type: 'tool',
|
79
106
|
toolName: 'run_shell_command',
|
80
107
|
toolArgs: {
|
81
108
|
description:
|
82
|
-
'Setting up GitHub Actions to triage issues and review PRs with
|
109
|
+
'Setting up GitHub Actions to triage issues and review PRs with llxprt.',
|
83
110
|
command,
|
84
111
|
},
|
85
112
|
};
|
86
|
-
|
113
|
+
},
|
114
|
+
*/
|
87
115
|
};
|
116
|
+
// buildCurlCommand is a helper for constructing a consistent curl command.
|
117
|
+
// Commented out until the command is re-enabled
|
118
|
+
// function buildCurlCommand(u: string, additionalArgs?: string[]): string {
|
119
|
+
// const args = [];
|
120
|
+
// args.push('--fail');
|
121
|
+
// args.push('--location');
|
122
|
+
// args.push('--show-error');
|
123
|
+
// args.push('--silent');
|
124
|
+
//
|
125
|
+
// for (const val of additionalArgs || []) {
|
126
|
+
// args.push(val);
|
127
|
+
// }
|
128
|
+
//
|
129
|
+
// args.sort();
|
130
|
+
//
|
131
|
+
// return `curl ${args.join(' ')} "${u}"`;
|
132
|
+
// }
|
88
133
|
//# sourceMappingURL=setupGithubCommand.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"setupGithubCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/setupGithubCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,0EAA0E;IAC5E,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,GAA6B,EAAE;IACrC,2CAA2C;IAC3C,WAAW;IACX,4GAA4G;IAC5G,yDAAyD;IACzD,2DAA2D;IAC3D,sDAAsD;IACtD,wEAAwE;IAExE,yCAAyC;IACzC,CAAC;QACC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE;;;;;;;;;;;;;4FAa6E;KACvF,CAAC;IAEJ
|
1
|
+
{"version":3,"file":"setupGithubCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/setupGithubCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8DAA8D;AAC9D,2BAA2B;AAC3B,+DAA+D;AAC/D,WAAW;AACX,oBAAoB;AACpB,4BAA4B;AAC5B,wBAAwB;AACxB,oCAAoC;AAEpC,OAAO,EACL,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,0EAA0E;IAC5E,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,GAA6B,EAAE;IACrC,2CAA2C;IAC3C,WAAW;IACX,4GAA4G;IAC5G,yDAAyD;IACzD,2DAA2D;IAC3D,sDAAsD;IACtD,wEAAwE;IAExE,yCAAyC;IACzC,CAAC;QACC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE;;;;;;;;;;;;;4FAa6E;KACvF,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoEE;CACH,CAAC;AAEF,2EAA2E;AAC3E,gDAAgD;AAChD,4EAA4E;AAC5E,qBAAqB;AACrB,yBAAyB;AACzB,6BAA6B;AAC7B,+BAA+B;AAC/B,2BAA2B;AAC3B,EAAE;AACF,8CAA8C;AAC9C,sBAAsB;AACtB,MAAM;AACN,EAAE;AACF,iBAAiB;AACjB,EAAE;AACF,4CAA4C;AAC5C,IAAI"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"toolsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/toolsCommand.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,WAAW,GAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,2CAA2C;IACxD,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAa,EAC6B,EAAE;QAC5C,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;QACtE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,IAAI,EAAE,mCAAmC;aAC1C,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;QACT,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvC,MAAM,iBAAiB,GAAG,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;QAC/D,MAAM,aAAa,GAChB,iBAAiB,CAAC,gBAAgB,CAAc,IAAI,EAAE,CAAC;QAE1D,oCAAoC;QACpC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxD,gDAAgD;YAChD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;aAChB,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACzC,4EAA4E;QAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"toolsCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/toolsCommand.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
/**
|
3
|
+
* @license
|
4
|
+
* Copyright 2025 Vybestack LLC
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
6
|
+
*/
|
7
|
+
import { useEffect, useState } from 'react';
|
8
|
+
import { Box, Text } from 'ink';
|
9
|
+
import { useTodoContext } from '../contexts/TodoContext.js';
|
10
|
+
import { useToolCallContext } from '../contexts/ToolCallContext.js';
|
11
|
+
import { Colors } from '../colors.js';
|
12
|
+
import { groupToolCalls } from './todo-utils.js';
|
13
|
+
const formatParameters = (parameters) => {
|
14
|
+
const paramStrings = [];
|
15
|
+
const MAX_LENGTH = 40; // Doubled from 20 to be less aggressive
|
16
|
+
for (const [key, value] of Object.entries(parameters)) {
|
17
|
+
if (typeof value === 'string') {
|
18
|
+
let displayValue = value;
|
19
|
+
// Special handling for file paths - show the end part
|
20
|
+
if (key === 'file_path' ||
|
21
|
+
key === 'absolute_path' ||
|
22
|
+
value.includes('/')) {
|
23
|
+
if (value.length > MAX_LENGTH) {
|
24
|
+
// For paths, show the last part which is more useful
|
25
|
+
displayValue = '...' + value.slice(-(MAX_LENGTH - 3));
|
26
|
+
}
|
27
|
+
}
|
28
|
+
else {
|
29
|
+
// For non-paths, truncate normally but with larger limit
|
30
|
+
displayValue =
|
31
|
+
value.length > MAX_LENGTH
|
32
|
+
? value.substring(0, MAX_LENGTH - 3) + '...'
|
33
|
+
: value;
|
34
|
+
}
|
35
|
+
paramStrings.push(`${key}: '${displayValue}'`);
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
const jsonStr = JSON.stringify(value);
|
39
|
+
const displayValue = jsonStr.length > MAX_LENGTH
|
40
|
+
? jsonStr.substring(0, MAX_LENGTH - 3) + '...'
|
41
|
+
: jsonStr;
|
42
|
+
paramStrings.push(`${key}: ${displayValue}`);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return paramStrings.join(', ');
|
46
|
+
};
|
47
|
+
const renderToolCall = (toolCall, count = 1, indent = ' ', index = 0) => {
|
48
|
+
const params = formatParameters(toolCall.parameters);
|
49
|
+
const toolText = `${toolCall.name}(${params})`;
|
50
|
+
const countText = count > 1 ? ` ${count}x` : '';
|
51
|
+
return (_jsx(Box, { flexDirection: "row", minHeight: 1, children: _jsxs(Text, { color: Colors.Gray, children: [indent, "\u21B3 ", toolText, countText] }) }, `${toolCall.id || `${toolCall.name}-${index}`}`));
|
52
|
+
};
|
53
|
+
const renderTodo = (todo, allToolCalls) => {
|
54
|
+
const elements = [];
|
55
|
+
// Todo status marker and content
|
56
|
+
let marker = '';
|
57
|
+
let markerColor = Colors.Foreground;
|
58
|
+
if (todo.status === 'completed') {
|
59
|
+
marker = '✔';
|
60
|
+
markerColor = Colors.AccentGreen;
|
61
|
+
}
|
62
|
+
else if (todo.status === 'pending') {
|
63
|
+
marker = '○';
|
64
|
+
markerColor = Colors.Gray;
|
65
|
+
}
|
66
|
+
else if (todo.status === 'in_progress') {
|
67
|
+
marker = '→';
|
68
|
+
markerColor = Colors.AccentYellow;
|
69
|
+
}
|
70
|
+
// Main todo line
|
71
|
+
elements.push(_jsxs(Box, { flexDirection: "row", minHeight: 1, children: [_jsxs(Text, { color: markerColor, bold: true, children: [marker, ' '] }), _jsx(Box, { flexGrow: 1, children: _jsxs(Text, { color: todo.status === 'in_progress'
|
72
|
+
? Colors.AccentYellow
|
73
|
+
: Colors.Foreground, bold: todo.status === 'in_progress', wrap: "wrap", children: [todo.content, todo.status === 'in_progress' && (_jsx(Text, { color: Colors.AccentYellow, children: " \u2190 current" }))] }) })] }, todo.id));
|
74
|
+
// Render subtasks and their tool calls
|
75
|
+
if (todo.subtasks && todo.subtasks.length > 0) {
|
76
|
+
for (const subtask of todo.subtasks) {
|
77
|
+
elements.push(_jsx(Box, { children: _jsxs(Text, { color: Colors.Gray, children: [" \u2022 ", subtask.content] }) }, `${todo.id}-subtask-${subtask.content}`));
|
78
|
+
if (subtask.toolCalls && subtask.toolCalls.length > 0) {
|
79
|
+
const grouped = groupToolCalls(subtask.toolCalls);
|
80
|
+
grouped.forEach((group, index) => {
|
81
|
+
elements.push(renderToolCall(group.toolCall, group.count, ' ', index));
|
82
|
+
});
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
// Group and render all tool calls from memory (only for in_progress tasks)
|
87
|
+
if (allToolCalls.length > 0 && todo.status === 'in_progress') {
|
88
|
+
const grouped = groupToolCalls(allToolCalls);
|
89
|
+
grouped.forEach((group, index) => {
|
90
|
+
elements.push(renderToolCall(group.toolCall, group.count, ' ', index));
|
91
|
+
});
|
92
|
+
}
|
93
|
+
return elements;
|
94
|
+
};
|
95
|
+
const TodoPanelComponent = ({ width }) => {
|
96
|
+
const { todos } = useTodoContext();
|
97
|
+
const { getExecutingToolCalls, subscribe } = useToolCallContext();
|
98
|
+
const [, forceUpdate] = useState({});
|
99
|
+
const [contentKey, setContentKey] = useState(0);
|
100
|
+
// Force re-render when todos change
|
101
|
+
useEffect(() => {
|
102
|
+
forceUpdate({});
|
103
|
+
setContentKey((prev) => prev + 1);
|
104
|
+
}, [todos]);
|
105
|
+
// Subscribe to tool call updates to re-render when they change
|
106
|
+
useEffect(() => {
|
107
|
+
const unsubscribe = subscribe(() => {
|
108
|
+
forceUpdate({});
|
109
|
+
setContentKey((prev) => prev + 1);
|
110
|
+
});
|
111
|
+
return unsubscribe;
|
112
|
+
}, [subscribe]);
|
113
|
+
if (todos.length === 0) {
|
114
|
+
return null; // Auto-hide when no todos exist
|
115
|
+
}
|
116
|
+
const allElements = [];
|
117
|
+
// Add header
|
118
|
+
allElements.push(_jsx(Box, { minHeight: 1, marginBottom: 1, children: _jsx(Text, { color: Colors.AccentBlue, bold: true, children: "Todo Progress" }) }, "header"));
|
119
|
+
// Add todos
|
120
|
+
for (const todo of todos) {
|
121
|
+
const allToolCalls = getExecutingToolCalls(todo.id); // This now gets all tool calls
|
122
|
+
const todoElements = renderTodo(todo, allToolCalls);
|
123
|
+
allElements.push(...todoElements);
|
124
|
+
// Add spacing between todos
|
125
|
+
allElements.push(_jsx(Box, { height: 1 }, `${todo.id}-spacer`));
|
126
|
+
}
|
127
|
+
return (_jsx(Box, { flexDirection: "column", width: width, borderStyle: "round", borderColor: Colors.AccentBlue, paddingX: 1, paddingY: 1, children: allElements }, `todo-panel-${contentKey}`));
|
128
|
+
};
|
129
|
+
// Export without memo to ensure updates when context changes
|
130
|
+
export const TodoPanel = TodoPanelComponent;
|
131
|
+
//# sourceMappingURL=TodoPanel.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TodoPanel.js","sourceRoot":"","sources":["../../../../src/ui/components/TodoPanel.tsx"],"names":[],"mappings":"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"}
|
@@ -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;
|
@@ -11,17 +11,29 @@ import { Colors } 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
|
-
export const ToolConfirmationMessage = ({ confirmationDetails, isFocused = true, availableTerminalHeight, terminalWidth, }) => {
|
14
|
+
export const ToolConfirmationMessage = ({ confirmationDetails, config, isFocused = true, availableTerminalHeight, terminalWidth, }) => {
|
15
15
|
const { onConfirm } = confirmationDetails;
|
16
16
|
const childWidth = terminalWidth - 2; // 2 for padding
|
17
|
+
const handleConfirm = useCallback(async (outcome) => {
|
18
|
+
if (confirmationDetails.type === 'edit') {
|
19
|
+
const ideClient = config?.getIdeClient();
|
20
|
+
if (config?.getIdeMode() && config?.getIdeModeFeature()) {
|
21
|
+
const cliOutcome = outcome === ToolConfirmationOutcome.Cancel
|
22
|
+
? 'rejected'
|
23
|
+
: 'accepted';
|
24
|
+
await ideClient?.resolveDiffFromCli(confirmationDetails.filePath, cliOutcome);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
onConfirm(outcome);
|
28
|
+
}, [confirmationDetails, config, onConfirm]);
|
17
29
|
useInput((_, key) => {
|
18
30
|
if (!isFocused)
|
19
31
|
return;
|
20
32
|
if (key.escape) {
|
21
|
-
|
33
|
+
handleConfirm(ToolConfirmationOutcome.Cancel);
|
22
34
|
}
|
23
35
|
});
|
24
|
-
const handleSelect = useCallback((item) =>
|
36
|
+
const handleSelect = useCallback((item) => handleConfirm(item), [handleConfirm]);
|
25
37
|
let bodyContent = null; // Removed contextDisplay here
|
26
38
|
let question;
|
27
39
|
const options = new Array();
|
@@ -60,13 +72,23 @@ export const ToolConfirmationMessage = ({ confirmationDetails, isFocused = true,
|
|
60
72
|
}, {
|
61
73
|
label: 'Yes, allow always',
|
62
74
|
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
75
|
});
|
76
|
+
if (config?.getIdeMode() && config?.getIdeModeFeature()) {
|
77
|
+
options.push({
|
78
|
+
label: 'No',
|
79
|
+
value: ToolConfirmationOutcome.Cancel,
|
80
|
+
});
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
options.push({
|
84
|
+
label: 'Modify with external editor',
|
85
|
+
value: ToolConfirmationOutcome.ModifyWithEditor,
|
86
|
+
});
|
87
|
+
options.push({
|
88
|
+
label: 'No, suggest changes (esc)',
|
89
|
+
value: ToolConfirmationOutcome.Cancel,
|
90
|
+
});
|
91
|
+
}
|
70
92
|
bodyContent = (_jsx(DiffRenderer, { diffContent: confirmationDetails.fileDiff, filename: confirmationDetails.fileName, availableTerminalHeight: availableBodyContentHeight(), terminalWidth: childWidth }));
|
71
93
|
}
|
72
94
|
else if (confirmationDetails.type === 'exec') {
|
@@ -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;AAC3C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAEL,uBAAuB,GAIxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD,MAAM,CAAC,MAAM,uBAAuB,GAEhC,CAAC,EACH,mBAAmB,EACnB,SAAS,GAAG,IAAI,EAChB,uBAAuB,EACvB,aAAa,GACd,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC;IAC1C,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,gBAAgB;IAEtD,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAClB,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,
|
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,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"}
|