@agentick/tui 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +202 -20
- package/dist/commands-context.d.ts +10 -0
- package/dist/commands-context.d.ts.map +1 -0
- package/dist/commands-context.js +10 -0
- package/dist/commands-context.js.map +1 -0
- package/dist/commands.d.ts +30 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +163 -0
- package/dist/commands.js.map +1 -0
- package/dist/components/CompletionPicker.d.ts +12 -0
- package/dist/components/CompletionPicker.d.ts.map +1 -0
- package/dist/components/CompletionPicker.js +41 -0
- package/dist/components/CompletionPicker.js.map +1 -0
- package/dist/components/DiffView.d.ts +21 -0
- package/dist/components/DiffView.d.ts.map +1 -0
- package/dist/components/DiffView.js +94 -0
- package/dist/components/DiffView.js.map +1 -0
- package/dist/components/ErrorDisplay.d.ts +6 -6
- package/dist/components/ErrorDisplay.d.ts.map +1 -1
- package/dist/components/ErrorDisplay.js +6 -8
- package/dist/components/ErrorDisplay.js.map +1 -1
- package/dist/components/InputBar.d.ts +8 -7
- package/dist/components/InputBar.d.ts.map +1 -1
- package/dist/components/InputBar.js +7 -13
- package/dist/components/InputBar.js.map +1 -1
- package/dist/components/MessageList.d.ts +11 -5
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +37 -44
- package/dist/components/MessageList.js.map +1 -1
- package/dist/components/RichTextInput.d.ts +14 -0
- package/dist/components/RichTextInput.d.ts.map +1 -0
- package/dist/components/RichTextInput.js +24 -0
- package/dist/components/RichTextInput.js.map +1 -0
- package/dist/components/ToolCallIndicator.d.ts.map +1 -1
- package/dist/components/ToolCallIndicator.js +12 -5
- package/dist/components/ToolCallIndicator.js.map +1 -1
- package/dist/components/ToolConfirmationPrompt.d.ts +9 -6
- package/dist/components/ToolConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/ToolConfirmationPrompt.js +18 -19
- package/dist/components/ToolConfirmationPrompt.js.map +1 -1
- package/dist/components/status-bar/DefaultStatusBar.d.ts +20 -0
- package/dist/components/status-bar/DefaultStatusBar.d.ts.map +1 -0
- package/dist/components/status-bar/DefaultStatusBar.js +11 -0
- package/dist/components/status-bar/DefaultStatusBar.js.map +1 -0
- package/dist/components/status-bar/StatusBar.d.ts +22 -0
- package/dist/components/status-bar/StatusBar.d.ts.map +1 -0
- package/dist/components/status-bar/StatusBar.js +16 -0
- package/dist/components/status-bar/StatusBar.js.map +1 -0
- package/dist/components/status-bar/StatusBarRight.d.ts +12 -0
- package/dist/components/status-bar/StatusBarRight.d.ts.map +1 -0
- package/dist/components/status-bar/StatusBarRight.js +29 -0
- package/dist/components/status-bar/StatusBarRight.js.map +1 -0
- package/dist/components/status-bar/context.d.ts +27 -0
- package/dist/components/status-bar/context.d.ts.map +1 -0
- package/dist/components/status-bar/context.js +18 -0
- package/dist/components/status-bar/context.js.map +1 -0
- package/dist/components/status-bar/index.d.ts +5 -0
- package/dist/components/status-bar/index.d.ts.map +1 -0
- package/dist/components/status-bar/index.js +5 -0
- package/dist/components/status-bar/index.js.map +1 -0
- package/dist/components/status-bar/widgets/BrandLabel.d.ts +8 -0
- package/dist/components/status-bar/widgets/BrandLabel.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/BrandLabel.js +6 -0
- package/dist/components/status-bar/widgets/BrandLabel.js.map +1 -0
- package/dist/components/status-bar/widgets/ContextUtilization.d.ts +11 -0
- package/dist/components/status-bar/widgets/ContextUtilization.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/ContextUtilization.js +12 -0
- package/dist/components/status-bar/widgets/ContextUtilization.js.map +1 -0
- package/dist/components/status-bar/widgets/KeyboardHints.d.ts +16 -0
- package/dist/components/status-bar/widgets/KeyboardHints.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/KeyboardHints.js +25 -0
- package/dist/components/status-bar/widgets/KeyboardHints.js.map +1 -0
- package/dist/components/status-bar/widgets/ModelInfo.d.ts +7 -0
- package/dist/components/status-bar/widgets/ModelInfo.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/ModelInfo.js +10 -0
- package/dist/components/status-bar/widgets/ModelInfo.js.map +1 -0
- package/dist/components/status-bar/widgets/Separator.d.ts +7 -0
- package/dist/components/status-bar/widgets/Separator.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/Separator.js +6 -0
- package/dist/components/status-bar/widgets/Separator.js.map +1 -0
- package/dist/components/status-bar/widgets/StateIndicator.d.ts +12 -0
- package/dist/components/status-bar/widgets/StateIndicator.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/StateIndicator.js +21 -0
- package/dist/components/status-bar/widgets/StateIndicator.js.map +1 -0
- package/dist/components/status-bar/widgets/TickCount.d.ts +9 -0
- package/dist/components/status-bar/widgets/TickCount.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/TickCount.js +11 -0
- package/dist/components/status-bar/widgets/TickCount.js.map +1 -0
- package/dist/components/status-bar/widgets/TokenCount.d.ts +12 -0
- package/dist/components/status-bar/widgets/TokenCount.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/TokenCount.js +28 -0
- package/dist/components/status-bar/widgets/TokenCount.js.map +1 -0
- package/dist/components/status-bar/widgets/index.d.ts +9 -0
- package/dist/components/status-bar/widgets/index.d.ts.map +1 -0
- package/dist/components/status-bar/widgets/index.js +9 -0
- package/dist/components/status-bar/widgets/index.js.map +1 -0
- package/dist/create-tui.d.ts +17 -6
- package/dist/create-tui.d.ts.map +1 -1
- package/dist/create-tui.js +14 -3
- package/dist/create-tui.js.map +1 -1
- package/dist/hooks/use-double-ctrl-c.d.ts +5 -0
- package/dist/hooks/use-double-ctrl-c.d.ts.map +1 -0
- package/dist/hooks/use-double-ctrl-c.js +32 -0
- package/dist/hooks/use-double-ctrl-c.js.map +1 -0
- package/dist/hooks/use-line-editor.d.ts +26 -0
- package/dist/hooks/use-line-editor.d.ts.map +1 -0
- package/dist/hooks/use-line-editor.js +63 -0
- package/dist/hooks/use-line-editor.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/input-utils.d.ts +15 -0
- package/dist/input-utils.d.ts.map +1 -0
- package/dist/input-utils.js +29 -0
- package/dist/input-utils.js.map +1 -0
- package/dist/rendering/content-block.d.ts +12 -0
- package/dist/rendering/content-block.d.ts.map +1 -0
- package/dist/rendering/content-block.js +82 -0
- package/dist/rendering/content-block.js.map +1 -0
- package/dist/rendering/index.d.ts +5 -0
- package/dist/rendering/index.d.ts.map +1 -0
- package/dist/rendering/index.js +5 -0
- package/dist/rendering/index.js.map +1 -0
- package/dist/rendering/markdown.d.ts +14 -0
- package/dist/rendering/markdown.d.ts.map +1 -0
- package/dist/rendering/markdown.js +61 -0
- package/dist/rendering/markdown.js.map +1 -0
- package/dist/rendering/message.d.ts +25 -0
- package/dist/rendering/message.d.ts.map +1 -0
- package/dist/rendering/message.js +54 -0
- package/dist/rendering/message.js.map +1 -0
- package/dist/rendering/theme.d.ts +37 -0
- package/dist/rendering/theme.d.ts.map +1 -0
- package/dist/rendering/theme.js +49 -0
- package/dist/rendering/theme.js.map +1 -0
- package/dist/ui/chat.d.ts +26 -4
- package/dist/ui/chat.d.ts.map +1 -1
- package/dist/ui/chat.js +91 -68
- package/dist/ui/chat.js.map +1 -1
- package/package.json +11 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* DiffView — colored diff rendering with line numbers and gutter markers.
|
|
4
|
+
*
|
|
5
|
+
* Parses unified diff output (from jsdiff's createTwoFilesPatch) and renders:
|
|
6
|
+
* - Summary header with add/remove counts
|
|
7
|
+
* - Line numbers in a left gutter
|
|
8
|
+
* - Colored text (green additions, red removals, dim context)
|
|
9
|
+
* - Hunk headers in cyan
|
|
10
|
+
*
|
|
11
|
+
* Uses chalk for ANSI coloring without background colors — background colors
|
|
12
|
+
* create visible gaps between lines in most terminals due to inter-line
|
|
13
|
+
* pixel spacing from the font engine.
|
|
14
|
+
*/
|
|
15
|
+
import chalk from "chalk";
|
|
16
|
+
import { Box, Text } from "ink";
|
|
17
|
+
const HUNK_RE = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;
|
|
18
|
+
function parsePatch(patch) {
|
|
19
|
+
const lines = patch.split("\n");
|
|
20
|
+
const result = [];
|
|
21
|
+
let oldLine = 0;
|
|
22
|
+
let newLine = 0;
|
|
23
|
+
for (const line of lines) {
|
|
24
|
+
// Skip headers and diff metadata
|
|
25
|
+
if (line.startsWith("Index:") ||
|
|
26
|
+
line.startsWith("diff ") ||
|
|
27
|
+
line.startsWith("===") ||
|
|
28
|
+
line.startsWith("---") ||
|
|
29
|
+
line.startsWith("+++") ||
|
|
30
|
+
line.startsWith("\\")) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const hunkMatch = HUNK_RE.exec(line);
|
|
34
|
+
if (hunkMatch) {
|
|
35
|
+
oldLine = parseInt(hunkMatch[1], 10);
|
|
36
|
+
newLine = parseInt(hunkMatch[2], 10);
|
|
37
|
+
result.push({ type: "hunk", content: line });
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (line.startsWith("+")) {
|
|
41
|
+
result.push({ type: "add", content: line.slice(1), newLine });
|
|
42
|
+
newLine++;
|
|
43
|
+
}
|
|
44
|
+
else if (line.startsWith("-")) {
|
|
45
|
+
result.push({ type: "remove", content: line.slice(1), oldLine });
|
|
46
|
+
oldLine++;
|
|
47
|
+
}
|
|
48
|
+
else if (line.length > 0 || (oldLine > 0 && newLine > 0)) {
|
|
49
|
+
result.push({ type: "context", content: line.slice(1), oldLine, newLine });
|
|
50
|
+
oldLine++;
|
|
51
|
+
newLine++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
function countChanges(lines) {
|
|
57
|
+
let added = 0;
|
|
58
|
+
let removed = 0;
|
|
59
|
+
for (const line of lines) {
|
|
60
|
+
if (line.type === "add")
|
|
61
|
+
added++;
|
|
62
|
+
if (line.type === "remove")
|
|
63
|
+
removed++;
|
|
64
|
+
}
|
|
65
|
+
return { added, removed };
|
|
66
|
+
}
|
|
67
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
68
|
+
function renderLine(line, gutterWidth) {
|
|
69
|
+
if (line.type === "hunk") {
|
|
70
|
+
return chalk.cyan.dim(line.content);
|
|
71
|
+
}
|
|
72
|
+
const marker = line.type === "add" ? "+" : line.type === "remove" ? "-" : " ";
|
|
73
|
+
const lineNum = line.type === "remove" ? String(line.oldLine ?? "") : String(line.newLine ?? "");
|
|
74
|
+
const gutter = `${lineNum.padStart(gutterWidth)} ${marker} `;
|
|
75
|
+
if (line.type === "add") {
|
|
76
|
+
return chalk.green.dim(gutter) + chalk.green(line.content);
|
|
77
|
+
}
|
|
78
|
+
if (line.type === "remove") {
|
|
79
|
+
return chalk.red.dim(gutter) + chalk.red(line.content);
|
|
80
|
+
}
|
|
81
|
+
return chalk.dim(gutter + line.content);
|
|
82
|
+
}
|
|
83
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
84
|
+
export function DiffView({ patch, filePath, maxLines = 80 }) {
|
|
85
|
+
const parsed = parsePatch(patch);
|
|
86
|
+
const { added, removed } = countChanges(parsed);
|
|
87
|
+
const displayLines = parsed.slice(0, maxLines);
|
|
88
|
+
const remaining = parsed.length - maxLines;
|
|
89
|
+
const maxLineNum = Math.max(...parsed.map((l) => l.oldLine ?? l.newLine ?? 0), 1);
|
|
90
|
+
const gutterWidth = String(maxLineNum).length;
|
|
91
|
+
const body = displayLines.map((line) => renderLine(line, gutterWidth)).join("\n");
|
|
92
|
+
return (_jsxs(Box, { flexDirection: "column", children: [filePath && (_jsxs(Box, { gap: 2, flexDirection: "row", children: [_jsx(Text, { bold: true, children: filePath }), _jsxs(Text, { dimColor: true, children: [added > 0 && _jsxs(Text, { color: "green", children: ["+", added] }), added > 0 && removed > 0 && _jsx(Text, { children: " " }), removed > 0 && _jsxs(Text, { color: "red", children: ["-", removed] })] })] })), !filePath && (added > 0 || removed > 0) && (_jsxs(Text, { dimColor: true, children: [added > 0 ? `${added} added` : "", added > 0 && removed > 0 ? ", " : "", removed > 0 ? `${removed} removed` : ""] })), _jsx(Text, { children: body }), remaining > 0 && _jsxs(Text, { dimColor: true, children: ["... ", remaining, " more line(s)"] })] }));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=DiffView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../src/components/DiffView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ErrorDisplay —
|
|
2
|
+
* ErrorDisplay — visual-only error display for the TUI.
|
|
3
3
|
*
|
|
4
|
-
* Red bordered box with error message.
|
|
4
|
+
* Red bordered box with error message. No internal useInput —
|
|
5
|
+
* the parent orchestrator handles dismissal keystrokes.
|
|
5
6
|
*/
|
|
6
|
-
interface ErrorDisplayProps {
|
|
7
|
+
export interface ErrorDisplayProps {
|
|
7
8
|
error: Error | string | null;
|
|
8
|
-
|
|
9
|
+
showDismissHint?: boolean;
|
|
9
10
|
}
|
|
10
|
-
export declare function ErrorDisplay({ error,
|
|
11
|
-
export {};
|
|
11
|
+
export declare function ErrorDisplay({ error, showDismissHint }: ErrorDisplayProps): import("react/jsx-runtime").JSX.Element | null;
|
|
12
12
|
//# sourceMappingURL=ErrorDisplay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ErrorDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,eAAuB,EAAE,EAAE,iBAAiB,kDAoBjF"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* ErrorDisplay —
|
|
3
|
+
* ErrorDisplay — visual-only error display for the TUI.
|
|
4
4
|
*
|
|
5
|
-
* Red bordered box with error message.
|
|
5
|
+
* Red bordered box with error message. No internal useInput —
|
|
6
|
+
* the parent orchestrator handles dismissal keystrokes.
|
|
6
7
|
*/
|
|
7
|
-
import { Box, Text
|
|
8
|
-
export function ErrorDisplay({ error,
|
|
9
|
-
useInput(() => {
|
|
10
|
-
onDismiss?.();
|
|
11
|
-
}, { isActive: !!onDismiss && !!error });
|
|
8
|
+
import { Box, Text } from "ink";
|
|
9
|
+
export function ErrorDisplay({ error, showDismissHint = false }) {
|
|
12
10
|
if (!error)
|
|
13
11
|
return null;
|
|
14
12
|
const message = error instanceof Error ? error.message : error;
|
|
15
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "red", bold: true, children: "Error" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: message }) }),
|
|
13
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "red", bold: true, children: "Error" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: message }) }), showDismissHint && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Press any key to dismiss" }) }))] }));
|
|
16
14
|
}
|
|
17
15
|
//# sourceMappingURL=ErrorDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorDisplay.js","sourceRoot":"","sources":["../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"ErrorDisplay.js","sourceRoot":"","sources":["../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,GAAG,KAAK,EAAqB;IAChF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,aACzF,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,4BAEf,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,cAAE,OAAO,GAAQ,GAClB,EACL,eAAe,IAAI,CAClB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yCAAgC,GAC9C,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* InputBar — user text input for the TUI.
|
|
2
|
+
* InputBar — visual-only user text input for the TUI.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Renders value/cursor state passed from the parent. No internal useInput
|
|
5
|
+
* or useLineEditor — the parent orchestrator owns all input routing.
|
|
5
6
|
*/
|
|
6
|
-
interface InputBarProps {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
export interface InputBarProps {
|
|
8
|
+
value: string;
|
|
9
|
+
cursor: number;
|
|
10
|
+
isActive?: boolean;
|
|
9
11
|
placeholder?: string;
|
|
10
12
|
}
|
|
11
|
-
export declare function InputBar({
|
|
12
|
-
export {};
|
|
13
|
+
export declare function InputBar({ value, cursor, isActive, placeholder }: InputBarProps): import("react/jsx-runtime").JSX.Element;
|
|
13
14
|
//# sourceMappingURL=InputBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputBar.d.ts","sourceRoot":"","sources":["../../src/components/InputBar.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"InputBar.d.ts","sourceRoot":"","sources":["../../src/components/InputBar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAe,EAAE,WAAW,EAAE,EAAE,aAAa,2CAwBtF"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* InputBar — user text input for the TUI.
|
|
3
|
+
* InputBar — visual-only user text input for the TUI.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Renders value/cursor state passed from the parent. No internal useInput
|
|
6
|
+
* or useLineEditor — the parent orchestrator owns all input routing.
|
|
6
7
|
*/
|
|
7
|
-
import { useState, useCallback } from "react";
|
|
8
8
|
import { Box, Text } from "ink";
|
|
9
|
-
import
|
|
10
|
-
export function InputBar({
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
if (!text.trim() || isDisabled)
|
|
14
|
-
return;
|
|
15
|
-
onSubmit(text.trim());
|
|
16
|
-
setValue("");
|
|
17
|
-
}, [onSubmit, isDisabled]);
|
|
18
|
-
return (_jsxs(Box, { borderStyle: "single", borderColor: isDisabled ? "gray" : "cyan", paddingLeft: 1, children: [_jsx(Text, { color: isDisabled ? "gray" : "green", bold: true, children: "› " }), _jsx(TextInput, { value: value, onChange: setValue, onSubmit: handleSubmit, focus: !isDisabled, placeholder: placeholder ?? (isDisabled ? "Waiting for response..." : "Type a message...") })] }));
|
|
9
|
+
import { RichTextInput } from "./RichTextInput.js";
|
|
10
|
+
export function InputBar({ value, cursor, isActive = true, placeholder }) {
|
|
11
|
+
const resolvedPlaceholder = placeholder ?? (isActive ? "Type a message..." : "Waiting for response...");
|
|
12
|
+
return (_jsxs(Box, { flexDirection: "row", borderStyle: "single", borderLeft: false, borderRight: false, borderColor: isActive ? "#34d399" : "gray", paddingLeft: 1, children: [_jsx(Text, { color: isActive ? "#34d399" : "gray", bold: true, children: "› " }), _jsx(RichTextInput, { value: value, cursor: cursor, placeholder: resolvedPlaceholder, isActive: isActive })] }));
|
|
19
13
|
}
|
|
20
14
|
//# sourceMappingURL=InputBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../src/components/InputBar.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../src/components/InputBar.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASnD,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAiB;IACrF,MAAM,mBAAmB,GACvB,WAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAE9E,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,KAAK,EACnB,WAAW,EAAC,QAAQ,EACpB,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC1C,WAAW,EAAE,CAAC,aAEd,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,kBAC7C,IAAI,GACA,EACP,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,QAAQ,GAClB,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MessageList — displays
|
|
2
|
+
* MessageList — displays conversation messages.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Accepts messages from useChat and splits them into:
|
|
5
|
+
* - Committed messages → Ink's <Static> (rendered once, never updated)
|
|
6
|
+
* - In-progress message → regular render (updates as blocks complete)
|
|
7
|
+
*
|
|
8
|
+
* When not executing, all messages are committed.
|
|
9
|
+
* When executing, the last message may still be receiving blocks.
|
|
6
10
|
*/
|
|
11
|
+
import type { ChatMessage } from "@agentick/client";
|
|
7
12
|
interface MessageListProps {
|
|
8
|
-
|
|
13
|
+
messages: readonly ChatMessage[];
|
|
14
|
+
isExecuting: boolean;
|
|
9
15
|
}
|
|
10
|
-
export declare function MessageList({
|
|
16
|
+
export declare function MessageList({ messages, isExecuting }: MessageListProps): import("react/jsx-runtime").JSX.Element;
|
|
11
17
|
export {};
|
|
12
18
|
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqDpD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,gBAAgB,2CAkCtE"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* MessageList — displays
|
|
3
|
+
* MessageList — displays conversation messages.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Accepts messages from useChat and splits them into:
|
|
6
|
+
* - Committed messages → Ink's <Static> (rendered once, never updated)
|
|
7
|
+
* - In-progress message → regular render (updates as blocks complete)
|
|
8
|
+
*
|
|
9
|
+
* When not executing, all messages are committed.
|
|
10
|
+
* When executing, the last message may still be receiving blocks.
|
|
7
11
|
*/
|
|
8
|
-
import {
|
|
12
|
+
import { useCallback, useRef } from "react";
|
|
9
13
|
import { Static, Box, Text } from "ink";
|
|
10
|
-
import { useEvents } from "@agentick/react";
|
|
11
14
|
function renderContent(content) {
|
|
12
15
|
if (typeof content === "string")
|
|
13
16
|
return content;
|
|
@@ -15,6 +18,8 @@ function renderContent(content) {
|
|
|
15
18
|
.map((block) => {
|
|
16
19
|
if (block.type === "text")
|
|
17
20
|
return block.text;
|
|
21
|
+
if (block.type === "reasoning")
|
|
22
|
+
return `[thinking: ${block.text.slice(0, 80)}${block.text.length > 80 ? "..." : ""}]`;
|
|
18
23
|
if (block.type === "tool_use")
|
|
19
24
|
return `[tool: ${block.name}]`;
|
|
20
25
|
if (block.type === "tool_result") {
|
|
@@ -23,7 +28,7 @@ function renderContent(content) {
|
|
|
23
28
|
.map((c) => (c.type === "text" ? c.text : `[${c.type}]`))
|
|
24
29
|
.join("")
|
|
25
30
|
: String(block.content ?? "");
|
|
26
|
-
return `[result: ${resultContent.slice(0, 100)}${resultContent.length > 100 ? "
|
|
31
|
+
return `[result: ${resultContent.slice(0, 100)}${resultContent.length > 100 ? "..." : ""}]`;
|
|
27
32
|
}
|
|
28
33
|
return `[${block.type}]`;
|
|
29
34
|
})
|
|
@@ -37,47 +42,35 @@ function roleColor(role) {
|
|
|
37
42
|
return "magenta";
|
|
38
43
|
case "system":
|
|
39
44
|
return "gray";
|
|
40
|
-
case "tool_result":
|
|
41
|
-
return "yellow";
|
|
42
45
|
default:
|
|
43
46
|
return "white";
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
sessionId,
|
|
50
|
-
filter: ["execution_end"],
|
|
51
|
-
});
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (!event || event.type !== "execution_end")
|
|
54
|
-
return;
|
|
55
|
-
// execution_end.output is the COMInput which has a timeline array
|
|
56
|
-
// Each entry has { kind: "message", message: Message } structure
|
|
57
|
-
const execEnd = event;
|
|
58
|
-
const timeline = execEnd.output?.timeline;
|
|
59
|
-
if (!Array.isArray(timeline))
|
|
60
|
-
return;
|
|
61
|
-
const newMessages = timeline
|
|
62
|
-
.filter((entry) => entry.kind === "message" && entry.message)
|
|
63
|
-
.map((entry, i) => {
|
|
64
|
-
const msg = entry.message;
|
|
65
|
-
return {
|
|
66
|
-
id: msg.id ?? `msg-${i}-${Date.now()}`,
|
|
67
|
-
role: msg.role,
|
|
68
|
-
text: renderContent(msg.content),
|
|
69
|
-
};
|
|
70
|
-
});
|
|
71
|
-
setMessages(newMessages);
|
|
72
|
-
}, [event]);
|
|
73
|
-
const renderMessage = useCallback((msg) => {
|
|
74
|
-
// Skip tool_result entries in the message list for cleaner output
|
|
75
|
-
if (msg.role === "tool_result")
|
|
76
|
-
return null;
|
|
77
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: roleColor(msg.role), bold: true, children: [msg.role, ":"] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { wrap: "wrap", children: msg.text }) })] }, msg.id));
|
|
78
|
-
}, []);
|
|
79
|
-
if (messages.length === 0)
|
|
49
|
+
function MessageItem({ message }) {
|
|
50
|
+
const text = renderContent(message.content);
|
|
51
|
+
if (!text)
|
|
80
52
|
return null;
|
|
81
|
-
return _jsx(
|
|
53
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: roleColor(message.role), bold: true, children: [message.role, ":"] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { wrap: "wrap", children: text }) })] }));
|
|
54
|
+
}
|
|
55
|
+
export function MessageList({ messages, isExecuting }) {
|
|
56
|
+
// Track which message IDs have been committed to Static.
|
|
57
|
+
// Once committed, a message never leaves Static.
|
|
58
|
+
const committedIdsRef = useRef(new Set());
|
|
59
|
+
// Committed: all messages except the last one when executing
|
|
60
|
+
// (the last message may still be receiving blocks)
|
|
61
|
+
const splitIndex = isExecuting && messages.length > 0 ? messages.length - 1 : messages.length;
|
|
62
|
+
// Mark messages as committed
|
|
63
|
+
for (let i = 0; i < splitIndex; i++) {
|
|
64
|
+
committedIdsRef.current.add(messages[i].id);
|
|
65
|
+
}
|
|
66
|
+
// Build stable committed array (only messages we've committed)
|
|
67
|
+
const committed = messages.filter((m) => committedIdsRef.current.has(m.id));
|
|
68
|
+
const inProgress = isExecuting &&
|
|
69
|
+
messages.length > 0 &&
|
|
70
|
+
!committedIdsRef.current.has(messages[messages.length - 1].id)
|
|
71
|
+
? messages[messages.length - 1]
|
|
72
|
+
: null;
|
|
73
|
+
const renderMessage = useCallback((msg) => _jsx(MessageItem, { message: msg }, msg.id), []);
|
|
74
|
+
return (_jsxs(_Fragment, { children: [committed.length > 0 && _jsx(Static, { items: committed, children: renderMessage }), inProgress && _jsx(MessageItem, { message: inProgress })] }));
|
|
82
75
|
}
|
|
83
76
|
//# sourceMappingURL=MessageList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RichTextInput — renders line editor state with a visible cursor.
|
|
3
|
+
*
|
|
4
|
+
* Pure rendering component. All editing logic lives in useLineEditor.
|
|
5
|
+
*/
|
|
6
|
+
interface RichTextInputProps {
|
|
7
|
+
value: string;
|
|
8
|
+
cursor: number;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
isActive?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function RichTextInput({ value, cursor, placeholder, isActive }: RichTextInputProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=RichTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextInput.d.ts","sourceRoot":"","sources":["../../src/components/RichTextInput.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAe,EAAE,EAAE,kBAAkB,2CA6BhG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* RichTextInput — renders line editor state with a visible cursor.
|
|
4
|
+
*
|
|
5
|
+
* Pure rendering component. All editing logic lives in useLineEditor.
|
|
6
|
+
*/
|
|
7
|
+
import { Text } from "ink";
|
|
8
|
+
export function RichTextInput({ value, cursor, placeholder, isActive = true }) {
|
|
9
|
+
if (!isActive) {
|
|
10
|
+
return _jsx(Text, { dimColor: true, children: placeholder ?? "" });
|
|
11
|
+
}
|
|
12
|
+
if (value.length === 0) {
|
|
13
|
+
if (placeholder) {
|
|
14
|
+
// Show cursor on first char of placeholder, rest dimmed
|
|
15
|
+
return (_jsxs(Text, { children: [_jsx(Text, { inverse: true, children: placeholder[0] }), _jsx(Text, { dimColor: true, children: placeholder.slice(1) })] }));
|
|
16
|
+
}
|
|
17
|
+
return _jsx(Text, { inverse: true, children: " " });
|
|
18
|
+
}
|
|
19
|
+
const before = value.slice(0, cursor);
|
|
20
|
+
const cursorChar = cursor < value.length ? value[cursor] : " ";
|
|
21
|
+
const after = cursor < value.length ? value.slice(cursor + 1) : "";
|
|
22
|
+
return (_jsxs(Text, { children: [before, _jsx(Text, { inverse: true, children: cursorChar }), after] }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=RichTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextInput.js","sourceRoot":"","sources":["../../src/components/RichTextInput.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAS3B,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,EAAsB;IAC/F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,IAAI,EAAE,GAAQ,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,WAAW,EAAE,CAAC;YAChB,wDAAwD;YACxD,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,OAAO,kBAAE,WAAW,CAAC,CAAC,CAAC,GAAQ,EACrC,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAQ,IACvC,CACR,CAAC;QACJ,CAAC;QACD,OAAO,KAAC,IAAI,IAAC,OAAO,wBAAS,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,OAAO,CACL,MAAC,IAAI,eACF,MAAM,EACP,KAAC,IAAI,IAAC,OAAO,kBAAE,UAAU,GAAQ,EAChC,KAAK,IACD,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolCallIndicator.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallIndicator.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"ToolCallIndicator.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallIndicator.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,kDAkEtE"}
|
|
@@ -19,18 +19,25 @@ export function ToolCallIndicator({ sessionId }) {
|
|
|
19
19
|
if (!event)
|
|
20
20
|
return;
|
|
21
21
|
if (event.type === "tool_call_start" || event.type === "tool_call") {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
let e;
|
|
23
|
+
if (event.type === "tool_call_start") {
|
|
24
|
+
e = event;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
e = event;
|
|
28
|
+
}
|
|
29
|
+
const id = e.callId ?? "unknown";
|
|
24
30
|
const name = e.name ?? "tool";
|
|
31
|
+
const summary = event.type === "tool_call" ? e.summary : undefined;
|
|
25
32
|
setTools((prev) => {
|
|
26
33
|
if (prev.some((t) => t.id === id))
|
|
27
34
|
return prev;
|
|
28
|
-
return [...prev, { id, name, status: "running" }];
|
|
35
|
+
return [...prev, { id, name, summary, status: "running" }];
|
|
29
36
|
});
|
|
30
37
|
}
|
|
31
38
|
if (event.type === "tool_result") {
|
|
32
39
|
const e = event;
|
|
33
|
-
const id = e.
|
|
40
|
+
const id = e.callId ?? "unknown";
|
|
34
41
|
setTools((prev) => prev.map((t) => (t.id === id ? { ...t, status: "done" } : t)));
|
|
35
42
|
}
|
|
36
43
|
}, [event]);
|
|
@@ -44,6 +51,6 @@ export function ToolCallIndicator({ sessionId }) {
|
|
|
44
51
|
}, [tools]);
|
|
45
52
|
if (tools.length === 0)
|
|
46
53
|
return null;
|
|
47
|
-
return (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: tools.map((tool) => (_jsxs(Box, { gap: 1, children: [tool.status === "running" ? (_jsx(Text, { color: "yellow", children: _jsx(Spinner, { type: "dots" }) })) : (_jsx(Text, { color: "green", children: "\u2713" })), _jsx(Text, { color: tool.status === "running" ? "yellow" : "gray", dimColor: tool.status === "done", children: tool.name })] }, tool.id))) }));
|
|
54
|
+
return (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: tools.map((tool) => (_jsxs(Box, { gap: 1, flexDirection: "row", children: [tool.status === "running" ? (_jsx(Text, { color: "yellow", children: _jsx(Spinner, { type: "dots" }) })) : (_jsx(Text, { color: "green", children: "\u2713" })), _jsx(Text, { color: tool.status === "running" ? "yellow" : "gray", dimColor: tool.status === "done", children: tool.name }), tool.summary && _jsx(Text, { dimColor: true, children: tool.summary })] }, tool.id))) }));
|
|
48
55
|
}
|
|
49
56
|
//# sourceMappingURL=ToolCallIndicator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolCallIndicator.js","sourceRoot":"","sources":["../../src/components/ToolCallIndicator.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolCallIndicator.js","sourceRoot":"","sources":["../../src/components/ToolCallIndicator.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ToolConfirmationPrompt —
|
|
2
|
+
* ToolConfirmationPrompt — visual-only confirmation UI for tools that require approval.
|
|
3
3
|
*
|
|
4
|
-
* Shows tool name, arguments, and Y/N/A key
|
|
5
|
-
*
|
|
4
|
+
* Shows tool name, arguments, and Y/N/A key hints.
|
|
5
|
+
* No internal useInput — the parent orchestrator handles keystrokes
|
|
6
|
+
* and calls respond() directly.
|
|
7
|
+
*
|
|
8
|
+
* When metadata with type "diff" is present, renders a colored diff view
|
|
9
|
+
* instead of raw JSON arguments.
|
|
6
10
|
*/
|
|
7
|
-
import type { ToolConfirmationRequest
|
|
11
|
+
import type { ToolConfirmationRequest } from "@agentick/client";
|
|
8
12
|
interface ToolConfirmationPromptProps {
|
|
9
13
|
request: ToolConfirmationRequest;
|
|
10
|
-
onRespond: (response: ToolConfirmationResponse) => void;
|
|
11
14
|
}
|
|
12
|
-
export declare function ToolConfirmationPrompt({ request
|
|
15
|
+
export declare function ToolConfirmationPrompt({ request }: ToolConfirmationPromptProps): import("react/jsx-runtime").JSX.Element;
|
|
13
16
|
export {};
|
|
14
17
|
//# sourceMappingURL=ToolConfirmationPrompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolConfirmationPrompt.d.ts","sourceRoot":"","sources":["../../src/components/ToolConfirmationPrompt.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ToolConfirmationPrompt.d.ts","sourceRoot":"","sources":["../../src/components/ToolConfirmationPrompt.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAIhE,UAAU,2BAA2B;IACnC,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAiBD,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,EAAE,2BAA2B,2CA0C9E"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* ToolConfirmationPrompt —
|
|
3
|
+
* ToolConfirmationPrompt — visual-only confirmation UI for tools that require approval.
|
|
4
4
|
*
|
|
5
|
-
* Shows tool name, arguments, and Y/N/A key
|
|
6
|
-
*
|
|
5
|
+
* Shows tool name, arguments, and Y/N/A key hints.
|
|
6
|
+
* No internal useInput — the parent orchestrator handles keystrokes
|
|
7
|
+
* and calls respond() directly.
|
|
8
|
+
*
|
|
9
|
+
* When metadata with type "diff" is present, renders a colored diff view
|
|
10
|
+
* instead of raw JSON arguments.
|
|
7
11
|
*/
|
|
8
|
-
import { Box, Text
|
|
12
|
+
import { Box, Text } from "ink";
|
|
13
|
+
import { DiffView } from "./DiffView.js";
|
|
14
|
+
function isDiffPreview(meta) {
|
|
15
|
+
if (!meta || typeof meta !== "object")
|
|
16
|
+
return false;
|
|
17
|
+
const m = meta;
|
|
18
|
+
return m.type === "diff" && typeof m.filePath === "string" && typeof m.patch === "string";
|
|
19
|
+
}
|
|
9
20
|
function formatArguments(args) {
|
|
10
21
|
const json = JSON.stringify(args, null, 2);
|
|
11
22
|
const lines = json.split("\n");
|
|
@@ -14,20 +25,8 @@ function formatArguments(args) {
|
|
|
14
25
|
}
|
|
15
26
|
return json;
|
|
16
27
|
}
|
|
17
|
-
export function ToolConfirmationPrompt({ request
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (key === "y") {
|
|
21
|
-
onRespond({ approved: true });
|
|
22
|
-
}
|
|
23
|
-
else if (key === "n") {
|
|
24
|
-
onRespond({ approved: false, reason: "rejected by user" });
|
|
25
|
-
}
|
|
26
|
-
else if (key === "a") {
|
|
27
|
-
// "Always allow" — for now just approves (no persistence, YAGNI)
|
|
28
|
-
onRespond({ approved: true });
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Tool Confirmation" }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: [_jsx(Text, { bold: true, children: request.name }), " wants to run:"] }) }), request.message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: request.message }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: formatArguments(request.arguments) }) }), _jsxs(Box, { marginTop: 1, gap: 2, children: [_jsx(Text, { color: "green", bold: true, children: "[Y] Approve" }), _jsx(Text, { color: "red", bold: true, children: "[N] Reject" }), _jsx(Text, { color: "cyan", bold: true, children: "[A] Always Allow" })] })] }));
|
|
28
|
+
export function ToolConfirmationPrompt({ request }) {
|
|
29
|
+
const diffMeta = isDiffPreview(request.metadata) ? request.metadata : null;
|
|
30
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Tool Confirmation" }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: [_jsx(Text, { bold: true, children: request.name }), " wants to run:"] }) }), request.message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: request.message }) })), _jsx(Box, { marginTop: 1, children: diffMeta ? (_jsx(DiffView, { patch: diffMeta.patch, filePath: diffMeta.filePath })) : (_jsx(Text, { color: "gray", children: formatArguments(request.arguments) })) }), _jsxs(Box, { marginTop: 1, flexDirection: "row", gap: 2, children: [_jsx(Text, { color: "green", bold: true, children: "[Y] Approve" }), _jsx(Text, { color: "red", bold: true, children: "[N] Reject" }), _jsx(Text, { color: "cyan", bold: true, children: "[A] Always Allow" })] })] }));
|
|
32
31
|
}
|
|
33
32
|
//# sourceMappingURL=ToolConfirmationPrompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolConfirmationPrompt.js","sourceRoot":"","sources":["../../src/components/ToolConfirmationPrompt.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"ToolConfirmationPrompt.js","sourceRoot":"","sources":["../../src/components/ToolConfirmationPrompt.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC5F,CAAC;AAED,SAAS,eAAe,CAAC,IAA6B;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAE,OAAO,EAA+B;IAC7E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,aAC5F,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,wCAElB,EAEP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,IAAI,kBAAE,OAAO,CAAC,IAAI,GAAQ,sBAC3B,GACH,EAEL,OAAO,CAAC,OAAO,IAAI,CAClB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,OAAO,CAAC,OAAO,GAAQ,GACvC,CACP,EAED,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACd,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAI,CACjE,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAQ,CAC/D,GACG,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC3C,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kCAEjB,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,iCAEf,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,uCAEhB,IACH,IACF,CACP,CAAC;AACJ,CAAC"}
|