@timetotest/cli 0.3.1 → 0.3.3
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 +12 -2
- package/dist/bin/ttt.js +0 -6
- package/dist/bin/ttt.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/commands/chat/ChatApp.js +229 -124
- package/dist/src/commands/chat/ChatApp.js.map +1 -1
- package/dist/src/commands/chat/OnboardingApp.js +13 -6
- package/dist/src/commands/chat/OnboardingApp.js.map +1 -1
- package/dist/src/commands/chat/components/ChatInput.js +22 -9
- package/dist/src/commands/chat/components/ChatInput.js.map +1 -1
- package/dist/src/commands/chat/components/ModelPicker.js +62 -0
- package/dist/src/commands/chat/components/ModelPicker.js.map +1 -0
- package/dist/src/commands/chat/components/TodoPanel.js +71 -0
- package/dist/src/commands/chat/components/TodoPanel.js.map +1 -0
- package/dist/src/commands/chat/components/ToolCallDisplay.js +45 -28
- package/dist/src/commands/chat/components/ToolCallDisplay.js.map +1 -1
- package/dist/src/commands/chat/tool-message-matcher.js +20 -0
- package/dist/src/commands/chat/tool-message-matcher.js.map +1 -0
- package/dist/src/commands/chat-ink.js +200 -341
- package/dist/src/commands/chat-ink.js.map +1 -1
- package/dist/src/commands/login.js +21 -5
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/lib/__tests__/code-mode-integration.test.js +45 -356
- package/dist/src/lib/__tests__/code-mode-integration.test.js.map +1 -1
- package/dist/src/lib/__tests__/login-auth-flow.test.js +14 -0
- package/dist/src/lib/__tests__/login-auth-flow.test.js.map +1 -0
- package/dist/src/lib/__tests__/model-picker-window.test.js +20 -0
- package/dist/src/lib/__tests__/model-picker-window.test.js.map +1 -0
- package/dist/src/lib/__tests__/tool-executor-mode-gating.test.js +46 -0
- package/dist/src/lib/__tests__/tool-executor-mode-gating.test.js.map +1 -0
- package/dist/src/lib/__tests__/tool-message-matcher.test.js +26 -0
- package/dist/src/lib/__tests__/tool-message-matcher.test.js.map +1 -0
- package/dist/src/lib/__tests__/ui-browser-integration.test.js +35 -0
- package/dist/src/lib/__tests__/ui-browser-integration.test.js.map +1 -0
- package/dist/src/lib/agent-orchestrator.js +16 -717
- package/dist/src/lib/agent-orchestrator.js.map +1 -1
- package/dist/src/lib/backend-loop-client.js +377 -0
- package/dist/src/lib/backend-loop-client.js.map +1 -0
- package/dist/src/lib/cli-tool-manifest.js +71 -0
- package/dist/src/lib/cli-tool-manifest.js.map +1 -0
- package/dist/src/lib/config.js +60 -9
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/conversation/turns.js +58 -0
- package/dist/src/lib/conversation/turns.js.map +1 -0
- package/dist/src/lib/events.js +20 -4
- package/dist/src/lib/events.js.map +1 -1
- package/dist/src/lib/http.js +7 -2
- package/dist/src/lib/http.js.map +1 -1
- package/dist/src/lib/prompts/templates.js +18 -0
- package/dist/src/lib/prompts/templates.js.map +1 -1
- package/dist/src/lib/session-manager.js +74 -33
- package/dist/src/lib/session-manager.js.map +1 -1
- package/dist/src/lib/socket.js +15 -3
- package/dist/src/lib/socket.js.map +1 -1
- package/dist/src/lib/todo.js +7 -0
- package/dist/src/lib/todo.js.map +1 -0
- package/dist/src/lib/tool-executor.js +196 -51
- package/dist/src/lib/tool-executor.js.map +1 -1
- package/dist/src/lib/tui/events.js +10 -9
- package/dist/src/lib/tui/events.js.map +1 -1
- package/dist/src/lib/tui/ink/components/TimetoTestLogo.js +1 -1
- package/dist/src/lib/tui/ink/components/TimetoTestLogo.js.map +1 -1
- package/dist/src/lib/utils/json.js +15 -0
- package/dist/src/lib/utils/json.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/commands/report.js +0 -25
- package/dist/src/commands/report.js.map +0 -1
- package/dist/src/commands/restart.js +0 -17
- package/dist/src/commands/restart.js.map +0 -1
- package/dist/src/commands/share.js +0 -18
- package/dist/src/commands/share.js.map +0 -1
- package/dist/src/lib/context-compactor.js +0 -310
- package/dist/src/lib/context-compactor.js.map +0 -1
- package/dist/src/lib/tool-registry.js +0 -971
- package/dist/src/lib/tool-registry.js.map +0 -1
- package/dist/src/lib/tool-result-pruner.js +0 -384
- package/dist/src/lib/tool-result-pruner.js.map +0 -1
|
@@ -5,15 +5,19 @@ import { TimetoTestLogo } from "../../lib/tui/ink/components/TimetoTestLogo.js";
|
|
|
5
5
|
import { inkTheme } from "../../lib/tui/ink/theme.js";
|
|
6
6
|
const ITEMS = [
|
|
7
7
|
{
|
|
8
|
-
label: "
|
|
9
|
-
value: "
|
|
8
|
+
label: "Sign In",
|
|
9
|
+
value: "signin",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
label: "Sign Up",
|
|
13
|
+
value: "signup",
|
|
10
14
|
},
|
|
11
15
|
{
|
|
12
16
|
label: "Exit",
|
|
13
17
|
value: "exit",
|
|
14
18
|
},
|
|
15
19
|
];
|
|
16
|
-
export const OnboardingApp = ({
|
|
20
|
+
export const OnboardingApp = ({ onSignIn, onSignUp, onExit, }) => {
|
|
17
21
|
const { exit } = useApp();
|
|
18
22
|
const [activeItem, setActiveItem] = useState(ITEMS[0]);
|
|
19
23
|
// Handle global key presses (like ctrl+c)
|
|
@@ -24,8 +28,11 @@ export const OnboardingApp = ({ onLogin, onExit, }) => {
|
|
|
24
28
|
}
|
|
25
29
|
});
|
|
26
30
|
const handleSelect = (item) => {
|
|
27
|
-
if (item.value === "
|
|
28
|
-
|
|
31
|
+
if (item.value === "signin") {
|
|
32
|
+
onSignIn();
|
|
33
|
+
}
|
|
34
|
+
else if (item.value === "signup") {
|
|
35
|
+
onSignUp();
|
|
29
36
|
}
|
|
30
37
|
else {
|
|
31
38
|
onExit();
|
|
@@ -36,7 +43,7 @@ export const OnboardingApp = ({ onLogin, onExit, }) => {
|
|
|
36
43
|
React.createElement(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden" },
|
|
37
44
|
React.createElement(TimetoTestLogo, null),
|
|
38
45
|
React.createElement(Box, { flexDirection: "column", paddingX: 2, marginTop: 1 },
|
|
39
|
-
React.createElement(Text, { color: inkTheme.colors.text.secondary }, "Welcome to Time to Test CLI.
|
|
46
|
+
React.createElement(Text, { color: inkTheme.colors.text.secondary }, "Welcome to Time to Test CLI. Choose Sign In or Sign Up to continue.")),
|
|
40
47
|
React.createElement(Box, { flexDirection: "column", paddingX: 2, marginTop: 2 },
|
|
41
48
|
React.createElement(SelectInput, { items: ITEMS, onSelect: handleSelect, indicatorComponent: ({ isSelected }) => (React.createElement(Text, { color: isSelected ? inkTheme.colors.text.accent : undefined }, isSelected ? "> " : " ")), itemComponent: ({ isSelected, label }) => (React.createElement(Text, { color: isSelected ? inkTheme.colors.text.accent : undefined }, label)) }))),
|
|
42
49
|
React.createElement(Box, { paddingX: 2, paddingY: 1, borderStyle: "single", borderColor: inkTheme.colors.border.default, borderBottom: false, borderLeft: false, borderRight: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingApp.js","sourceRoot":"","sources":["../../../../src/commands/chat/OnboardingApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAY,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,KAAK,CAAC;AAChD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAC,cAAc,EAAC,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"OnboardingApp.js","sourceRoot":"","sources":["../../../../src/commands/chat/OnboardingApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
|
|
|
2
2
|
import { Box, Text, useInput } from "ink";
|
|
3
3
|
import TextInput from "ink-text-input";
|
|
4
4
|
import { inkTheme } from "../../../lib/tui/ink/theme.js";
|
|
5
|
-
export const ChatInput = ({ placeholder, value, onChange, onSubmit, onCancel, getSuggestions, disabled, onHistoryUp, onHistoryDown, testingMode, directory, hintsRight, onToggleMode, }) => {
|
|
5
|
+
export const ChatInput = ({ placeholder, value, onChange, onSubmit, onCancel, getSuggestions, disabled, onHistoryUp, onHistoryDown, testingMode, directory, hintsRight, onToggleMode, isActive = true, }) => {
|
|
6
6
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
7
7
|
const [windowStart, setWindowStart] = useState(0);
|
|
8
8
|
const allSuggestions = value.startsWith("/") && getSuggestions ? getSuggestions(value) : [];
|
|
@@ -47,6 +47,13 @@ export const ChatInput = ({ placeholder, value, onChange, onSubmit, onCancel, ge
|
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
if (key.tab) {
|
|
50
|
+
if (allSuggestions.length > 0) {
|
|
51
|
+
const selected = allSuggestions[selectedIndex];
|
|
52
|
+
if (selected) {
|
|
53
|
+
onChange(selected.value + " ");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
50
57
|
onToggleMode?.();
|
|
51
58
|
return;
|
|
52
59
|
}
|
|
@@ -71,12 +78,18 @@ export const ChatInput = ({ placeholder, value, onChange, onSubmit, onCancel, ge
|
|
|
71
78
|
if (key.return) {
|
|
72
79
|
const selected = allSuggestions[selectedIndex];
|
|
73
80
|
if (selected) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
const trimmed = value.trim();
|
|
82
|
+
const hasArgs = /^\/\S+\s+/.test(trimmed);
|
|
83
|
+
if (!hasArgs) {
|
|
84
|
+
onChange("");
|
|
85
|
+
onSubmit(selected.value);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
onChange(selected.value + " ");
|
|
89
|
+
}
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
|
-
});
|
|
92
|
+
}, { isActive });
|
|
80
93
|
return (React.createElement(Box, { flexDirection: "column", overflow: "hidden" },
|
|
81
94
|
React.createElement(Box, { flexDirection: "row" },
|
|
82
95
|
React.createElement(Box, { width: 1, backgroundColor: "#0ea5e9" }),
|
|
@@ -100,11 +113,11 @@ export const ChatInput = ({ placeholder, value, onChange, onSubmit, onCancel, ge
|
|
|
100
113
|
React.createElement(Text, { color: inkTheme.colors.text.muted, dimColor: true }, hintsRight ??
|
|
101
114
|
(testingMode === "code" ? (React.createElement(Text, null,
|
|
102
115
|
React.createElement(Text, { bold: true, color: inkTheme.colors.text.primary }, "tab"),
|
|
103
|
-
"
|
|
116
|
+
" ",
|
|
117
|
+
"mode \u2022 read_file \u2022 grep_search \u2022 run_command")) : (React.createElement(Text, null,
|
|
104
118
|
React.createElement(Text, { bold: true, color: inkTheme.colors.text.primary }, "tab"),
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
" commands")))))),
|
|
119
|
+
" ",
|
|
120
|
+
"mode")))))),
|
|
108
121
|
React.createElement(Box, { paddingX: 2, marginTop: 1, marginBottom: 1 },
|
|
109
122
|
React.createElement(Box, { flexGrow: 1 },
|
|
110
123
|
React.createElement(Text, { color: inkTheme.colors.text.muted, dimColor: true }, directory)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/ChatInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAC,MAAM,KAAK,CAAC;AACxC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/ChatInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { inkTheme } from "../../../lib/tui/ink/theme.js";
|
|
4
|
+
export function getModelPickerWindow(totalItems, selectedIndex, maxVisible) {
|
|
5
|
+
const start = Math.max(0, Math.min(selectedIndex - Math.floor(maxVisible / 2), Math.max(0, totalItems - maxVisible)));
|
|
6
|
+
return { start, end: start + maxVisible };
|
|
7
|
+
}
|
|
8
|
+
export function ModelPicker(props) {
|
|
9
|
+
const { query, items, selectedIndex, currentModel, planTier, creditBalance } = props;
|
|
10
|
+
const maxVisible = 8;
|
|
11
|
+
const { start, end } = getModelPickerWindow(items.length, selectedIndex, maxVisible);
|
|
12
|
+
const visible = items.slice(start, end);
|
|
13
|
+
const remaining = Math.max(0, items.length - visible.length);
|
|
14
|
+
const tierText = planTier ? `${planTier} plan` : "free plan";
|
|
15
|
+
const creditText = typeof creditBalance === "number" ? ` • ${creditBalance} credits` : "";
|
|
16
|
+
const currentModelName = items.find((item) => item.id === currentModel)?.name;
|
|
17
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: inkTheme.colors.border.accent, paddingX: 1, paddingY: 1, marginBottom: 1 },
|
|
18
|
+
React.createElement(Box, { marginBottom: 1 },
|
|
19
|
+
React.createElement(Text, { color: inkTheme.colors.text.accent, bold: true }, "Select Model"),
|
|
20
|
+
React.createElement(Text, { color: inkTheme.colors.text.muted }, " (\u2191\u2193 navigate, enter select, esc cancel)")),
|
|
21
|
+
React.createElement(Box, { marginBottom: 1 },
|
|
22
|
+
React.createElement(Text, { color: inkTheme.colors.text.secondary },
|
|
23
|
+
tierText,
|
|
24
|
+
creditText)),
|
|
25
|
+
currentModelName ? (React.createElement(Box, { marginBottom: 1 },
|
|
26
|
+
React.createElement(Text, { color: inkTheme.colors.text.muted },
|
|
27
|
+
"Current model: ",
|
|
28
|
+
React.createElement(Text, { color: inkTheme.colors.text.accent }, currentModelName)))) : null,
|
|
29
|
+
query ? (React.createElement(Box, { marginBottom: 1 },
|
|
30
|
+
React.createElement(Text, { color: inkTheme.colors.text.muted }, "\u203A "),
|
|
31
|
+
React.createElement(Text, { color: inkTheme.colors.text.secondary }, query))) : null,
|
|
32
|
+
React.createElement(Box, { flexDirection: "column" }, visible.length === 0 ? (React.createElement(Text, { color: inkTheme.colors.text.muted }, "No models match your search.")) : (visible.map((item, idx) => {
|
|
33
|
+
const globalIndex = start + idx;
|
|
34
|
+
const active = globalIndex === selectedIndex;
|
|
35
|
+
const isCurrent = currentModel === item.id;
|
|
36
|
+
const usesText = typeof item.usesRemaining === "number"
|
|
37
|
+
? ` • ${item.usesRemaining} free uses`
|
|
38
|
+
: "";
|
|
39
|
+
const creditsText = typeof item.credits === "number" && item.credits > 0
|
|
40
|
+
? ` • ${item.credits} credit${item.credits === 1 ? "" : "s"}/msg`
|
|
41
|
+
: "";
|
|
42
|
+
const thinkingText = item.thinking ? " • thinking" : "";
|
|
43
|
+
const tier = item.tier ? ` • ${item.tier}` : "";
|
|
44
|
+
return (React.createElement(Box, { key: item.id, flexDirection: "column", marginBottom: 1 },
|
|
45
|
+
React.createElement(Box, { flexDirection: "row" },
|
|
46
|
+
React.createElement(Text, { color: active ? inkTheme.colors.text.accent : inkTheme.colors.text.secondary, bold: active },
|
|
47
|
+
active ? "› " : " ",
|
|
48
|
+
item.name),
|
|
49
|
+
isCurrent ? (React.createElement(Box, { marginLeft: 1 },
|
|
50
|
+
React.createElement(Text, { color: inkTheme.colors.text.accent, bold: true }, "(current)"))) : null),
|
|
51
|
+
React.createElement(Text, { color: inkTheme.colors.text.muted },
|
|
52
|
+
tier,
|
|
53
|
+
creditsText,
|
|
54
|
+
usesText,
|
|
55
|
+
thinkingText)));
|
|
56
|
+
}))),
|
|
57
|
+
remaining > 0 ? (React.createElement(Text, { color: inkTheme.colors.text.muted },
|
|
58
|
+
"... ",
|
|
59
|
+
remaining,
|
|
60
|
+
" more (use \u2191\u2193)")) : null));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ModelPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/ModelPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { inkTheme } from "../../../lib/tui/ink/theme.js";
|
|
4
|
+
function statusColor(status) {
|
|
5
|
+
if (status === "completed")
|
|
6
|
+
return inkTheme.colors.text.success;
|
|
7
|
+
if (status === "failed")
|
|
8
|
+
return inkTheme.colors.text.error;
|
|
9
|
+
if (status === "in_progress")
|
|
10
|
+
return inkTheme.colors.text.accent;
|
|
11
|
+
if (status === "cancelled")
|
|
12
|
+
return inkTheme.colors.text.muted;
|
|
13
|
+
return inkTheme.colors.text.warning; // pending
|
|
14
|
+
}
|
|
15
|
+
function statusLabel(status) {
|
|
16
|
+
if (status === "completed")
|
|
17
|
+
return "DONE";
|
|
18
|
+
if (status === "failed")
|
|
19
|
+
return "FAIL";
|
|
20
|
+
if (status === "in_progress")
|
|
21
|
+
return "DO";
|
|
22
|
+
if (status === "cancelled")
|
|
23
|
+
return "SKIP";
|
|
24
|
+
return "NEXT";
|
|
25
|
+
}
|
|
26
|
+
function clampText(text, max) {
|
|
27
|
+
if (text.length <= max)
|
|
28
|
+
return text;
|
|
29
|
+
if (max <= 1)
|
|
30
|
+
return text.slice(0, max);
|
|
31
|
+
return text.slice(0, max - 1) + "…";
|
|
32
|
+
}
|
|
33
|
+
export const TodoPanel = ({ snapshot, width, maxItems = 8 }) => {
|
|
34
|
+
const { remaining, doneCount, failCount } = useMemo(() => {
|
|
35
|
+
const todos = Array.isArray(snapshot.todos) ? snapshot.todos : [];
|
|
36
|
+
const remaining = todos.filter((t) => t.status !== "completed" && t.status !== "failed" && t.status !== "cancelled");
|
|
37
|
+
const doneCount = todos.filter((t) => t.status === "completed").length;
|
|
38
|
+
const failCount = todos.filter((t) => t.status === "failed").length;
|
|
39
|
+
return { remaining, doneCount, failCount };
|
|
40
|
+
}, [snapshot.todos]);
|
|
41
|
+
const items = remaining.slice(0, Math.max(0, maxItems));
|
|
42
|
+
const hasOverflow = remaining.length > items.length;
|
|
43
|
+
const title = snapshot.title || "Todo";
|
|
44
|
+
const subtitle = snapshot.description ||
|
|
45
|
+
`${remaining.length} remaining • ${doneCount} done • ${failCount} failed`;
|
|
46
|
+
const contentWidth = Math.max(10, width - 4); // border padding
|
|
47
|
+
const lineWidth = Math.max(10, contentWidth);
|
|
48
|
+
const renderItem = (item, idx) => {
|
|
49
|
+
const isFocused = !!snapshot.current_id && item.id === snapshot.current_id;
|
|
50
|
+
const label = statusLabel(item.status);
|
|
51
|
+
const labelWidth = 5;
|
|
52
|
+
const gap = 1;
|
|
53
|
+
const titleWidth = Math.max(6, lineWidth - labelWidth - gap - 2);
|
|
54
|
+
const t = clampText(item.title || "Task", titleWidth);
|
|
55
|
+
return (React.createElement(Box, { key: item.id || String(idx), flexDirection: "row" },
|
|
56
|
+
React.createElement(Text, { color: statusColor(item.status), bold: true }, label.padEnd(labelWidth)),
|
|
57
|
+
React.createElement(Text, null, " ".repeat(gap)),
|
|
58
|
+
React.createElement(Text, { color: isFocused ? inkTheme.colors.text.accent : inkTheme.colors.text.primary, bold: isFocused }, isFocused ? `› ${t}` : ` ${t}`)));
|
|
59
|
+
};
|
|
60
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 1, width: width },
|
|
61
|
+
React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
|
|
62
|
+
React.createElement(Text, { color: inkTheme.colors.text.secondary, bold: true }, clampText(title, lineWidth)),
|
|
63
|
+
React.createElement(Text, { color: inkTheme.colors.text.muted, dimColor: true }, clampText(subtitle, lineWidth))),
|
|
64
|
+
items.length === 0 ? (React.createElement(Text, { color: inkTheme.colors.text.muted, dimColor: true }, "No remaining items.")) : (React.createElement(Box, { flexDirection: "column" },
|
|
65
|
+
items.map(renderItem),
|
|
66
|
+
hasOverflow ? (React.createElement(Text, { color: inkTheme.colors.text.muted, dimColor: true },
|
|
67
|
+
"+",
|
|
68
|
+
remaining.length - items.length,
|
|
69
|
+
" more")) : null))));
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=TodoPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TodoPanel.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/TodoPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* ToolCallDisplay - Displays tool calls in a style similar to opencode
|
|
3
|
-
* Shows tool name, arguments, and collapsible output
|
|
4
|
-
*/
|
|
5
|
-
import React, { useState } from "react";
|
|
1
|
+
import React from "react";
|
|
6
2
|
import { Box, Text } from "ink";
|
|
7
|
-
/**
|
|
8
|
-
* Format tool arguments into a readable command-like string
|
|
9
|
-
*/
|
|
10
3
|
function formatToolCommand(toolName, args) {
|
|
11
4
|
if (!args || Object.keys(args).length === 0) {
|
|
12
5
|
return toolName.replace(/_/g, " ");
|
|
13
6
|
}
|
|
14
|
-
// Format based on tool type
|
|
15
7
|
switch (toolName) {
|
|
16
8
|
case "list_directory":
|
|
17
9
|
return `ls ${args.path || "."}${args.recursive ? " -R" : ""}`;
|
|
@@ -30,7 +22,6 @@ function formatToolCommand(toolName, args) {
|
|
|
30
22
|
case "get_project_info":
|
|
31
23
|
return "detect project info";
|
|
32
24
|
default:
|
|
33
|
-
// Generic format: tool_name key=value key=value
|
|
34
25
|
const argParts = Object.entries(args)
|
|
35
26
|
.filter(([_, v]) => v !== undefined && v !== null)
|
|
36
27
|
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
@@ -38,17 +29,50 @@ function formatToolCommand(toolName, args) {
|
|
|
38
29
|
return `${toolName.replace(/_/g, " ")}${argParts ? " " + argParts : ""}`;
|
|
39
30
|
}
|
|
40
31
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
function extractErrorMessage(result) {
|
|
33
|
+
const direct = result.error || result.message;
|
|
34
|
+
if (typeof direct === "string" && direct.trim())
|
|
35
|
+
return direct.trim();
|
|
36
|
+
const nested = result.result;
|
|
37
|
+
if (nested && typeof nested === "object") {
|
|
38
|
+
const nestedError = nested.error || nested.message;
|
|
39
|
+
if (typeof nestedError === "string" && nestedError.trim()) {
|
|
40
|
+
return nestedError.trim();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function toDisplayLine(value) {
|
|
46
|
+
if (typeof value === "string")
|
|
47
|
+
return value;
|
|
48
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
49
|
+
return String(value);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
return JSON.stringify(value);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return String(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function summarizeUnknownResult(result) {
|
|
59
|
+
const keys = Object.keys(result).filter((key) => !["success", "ok", "result", "data"].includes(key));
|
|
60
|
+
if (keys.length === 0) {
|
|
61
|
+
return [result.success === false ? "Failed" : "Success"];
|
|
62
|
+
}
|
|
63
|
+
const lines = keys.slice(0, 6).map((key) => `${key}: ${toDisplayLine(result[key])}`);
|
|
64
|
+
if (keys.length > 6) {
|
|
65
|
+
lines.push(`... ${keys.length - 6} more fields`);
|
|
66
|
+
}
|
|
67
|
+
return lines;
|
|
68
|
+
}
|
|
44
69
|
function formatToolResult(toolName, result) {
|
|
45
70
|
if (!result)
|
|
46
71
|
return [];
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
return [`Error: ${
|
|
72
|
+
const errorMessage = extractErrorMessage(result);
|
|
73
|
+
if (errorMessage) {
|
|
74
|
+
return [`Error: ${errorMessage}`];
|
|
50
75
|
}
|
|
51
|
-
// Format based on tool type
|
|
52
76
|
switch (toolName) {
|
|
53
77
|
case "list_directory":
|
|
54
78
|
if (result.entries && Array.isArray(result.entries)) {
|
|
@@ -103,11 +127,7 @@ function formatToolResult(toolName, result) {
|
|
|
103
127
|
}
|
|
104
128
|
return info;
|
|
105
129
|
}
|
|
106
|
-
|
|
107
|
-
if (result.success !== undefined) {
|
|
108
|
-
return [result.success ? "✓ Success" : "✗ Failed"];
|
|
109
|
-
}
|
|
110
|
-
return [JSON.stringify(result, null, 2)];
|
|
130
|
+
return summarizeUnknownResult(result);
|
|
111
131
|
}
|
|
112
132
|
function formatFileSize(bytes) {
|
|
113
133
|
if (bytes < 1024)
|
|
@@ -117,22 +137,19 @@ function formatFileSize(bytes) {
|
|
|
117
137
|
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
118
138
|
}
|
|
119
139
|
export const ToolCallDisplay = ({ toolName, args, result, isLoading = false, maxOutputLines = 10, }) => {
|
|
120
|
-
const [expanded, setExpanded] = useState(false);
|
|
121
140
|
const command = formatToolCommand(toolName, args);
|
|
122
141
|
const outputLines = formatToolResult(toolName, result);
|
|
123
142
|
const hasOutput = outputLines.length > 0;
|
|
124
143
|
const needsTruncation = outputLines.length > maxOutputLines;
|
|
125
|
-
const displayLines =
|
|
126
|
-
? outputLines
|
|
127
|
-
: outputLines.slice(0, maxOutputLines);
|
|
144
|
+
const displayLines = outputLines.slice(0, maxOutputLines);
|
|
128
145
|
return (React.createElement(Box, { flexDirection: "column", marginY: 0, paddingLeft: 2 },
|
|
129
146
|
React.createElement(Box, null,
|
|
130
147
|
React.createElement(Text, { color: "gray" }, "$ "),
|
|
131
148
|
React.createElement(Text, { color: "cyan" }, command),
|
|
132
149
|
isLoading && React.createElement(Text, { color: "yellow" }, " \u23F3")),
|
|
133
150
|
hasOutput && (React.createElement(Box, { flexDirection: "column", paddingLeft: 2 },
|
|
134
|
-
displayLines.map((line, i) => (React.createElement(Text, { key: i, color: "gray", dimColor: true }, line))),
|
|
135
|
-
needsTruncation &&
|
|
151
|
+
displayLines.map((line, i) => (React.createElement(Text, { key: i, color: "gray", dimColor: true }, line.length > 240 ? `${line.slice(0, 240)}...` : line))),
|
|
152
|
+
needsTruncation && (React.createElement(Text, { color: "gray", dimColor: true },
|
|
136
153
|
"... (",
|
|
137
154
|
outputLines.length - maxOutputLines,
|
|
138
155
|
" more lines)"))))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolCallDisplay.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/ToolCallDisplay.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ToolCallDisplay.js","sourceRoot":"","sources":["../../../../../src/commands/chat/components/ToolCallDisplay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function resolveToolMessageIndex(messages, update) {
|
|
2
|
+
if (update.callId) {
|
|
3
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
4
|
+
const metadata = messages[i].metadata;
|
|
5
|
+
if (!metadata?.isTool)
|
|
6
|
+
continue;
|
|
7
|
+
if (metadata.toolCallId === update.callId)
|
|
8
|
+
return i;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
12
|
+
const metadata = messages[i].metadata;
|
|
13
|
+
if (!metadata?.isTool)
|
|
14
|
+
continue;
|
|
15
|
+
if (metadata.toolName === update.toolName)
|
|
16
|
+
return i;
|
|
17
|
+
}
|
|
18
|
+
return -1;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tool-message-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-message-matcher.js","sourceRoot":"","sources":["../../../../src/commands/chat/tool-message-matcher.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,uBAAuB,CACrC,QAAgC,EAChC,MAA2C;IAE3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE,MAAM;gBAAE,SAAS;YAChC,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE,SAAS;QAChC,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|