wave-code 0.6.5 → 0.7.1
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/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/commands/plugin/disable.d.ts.map +1 -1
- package/dist/commands/plugin/disable.js +3 -10
- package/dist/commands/plugin/enable.d.ts.map +1 -1
- package/dist/commands/plugin/enable.js +3 -10
- package/dist/commands/plugin/install.d.ts.map +1 -1
- package/dist/commands/plugin/install.js +4 -11
- package/dist/commands/plugin/list.d.ts.map +1 -1
- package/dist/commands/plugin/list.js +5 -39
- package/dist/commands/plugin/marketplace.js +9 -9
- package/dist/commands/plugin/uninstall.d.ts.map +1 -1
- package/dist/commands/plugin/uninstall.js +4 -17
- package/dist/commands/plugin/update.js +3 -3
- package/dist/components/App.d.ts +1 -0
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +4 -4
- package/dist/components/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/BackgroundTaskManager.js +34 -18
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +28 -15
- package/dist/components/ConfirmationDetails.d.ts +1 -0
- package/dist/components/ConfirmationDetails.d.ts.map +1 -1
- package/dist/components/ConfirmationDetails.js +7 -14
- package/dist/components/ConfirmationSelector.d.ts +1 -0
- package/dist/components/ConfirmationSelector.d.ts.map +1 -1
- package/dist/components/ConfirmationSelector.js +164 -117
- package/dist/components/DiffDisplay.d.ts +1 -0
- package/dist/components/DiffDisplay.d.ts.map +1 -1
- package/dist/components/DiffDisplay.js +94 -36
- package/dist/components/HistorySearch.d.ts.map +1 -1
- package/dist/components/HistorySearch.js +26 -20
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown.js +3 -1
- package/dist/components/McpManager.d.ts.map +1 -1
- package/dist/components/McpManager.js +49 -52
- package/dist/components/MessageBlockItem.d.ts +9 -0
- package/dist/components/MessageBlockItem.d.ts.map +1 -0
- package/dist/components/MessageBlockItem.js +11 -0
- package/dist/components/MessageList.d.ts +2 -4
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +28 -23
- package/dist/components/PluginDetail.d.ts.map +1 -1
- package/dist/components/PluginDetail.js +19 -22
- package/dist/components/SessionSelector.d.ts.map +1 -1
- package/dist/components/SessionSelector.js +8 -5
- package/dist/components/TaskList.d.ts.map +1 -1
- package/dist/components/TaskList.js +2 -5
- package/dist/components/ToolDisplay.d.ts.map +1 -1
- package/dist/components/ToolDisplay.js +1 -1
- package/dist/contexts/useChat.d.ts +1 -0
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +20 -3
- package/dist/hooks/usePluginManager.d.ts.map +1 -1
- package/dist/hooks/usePluginManager.js +20 -39
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/print-cli.d.ts +1 -0
- package/dist/print-cli.d.ts.map +1 -1
- package/dist/print-cli.js +2 -1
- package/dist/utils/highlightUtils.d.ts +2 -0
- package/dist/utils/highlightUtils.d.ts.map +1 -0
- package/dist/utils/highlightUtils.js +69 -0
- package/dist/utils/toolParameterTransforms.d.ts +2 -6
- package/dist/utils/toolParameterTransforms.d.ts.map +1 -1
- package/dist/utils/toolParameterTransforms.js +10 -14
- package/package.json +4 -2
- package/src/cli.tsx +3 -0
- package/src/commands/plugin/disable.ts +3 -17
- package/src/commands/plugin/enable.ts +3 -17
- package/src/commands/plugin/install.ts +4 -18
- package/src/commands/plugin/list.ts +5 -55
- package/src/commands/plugin/marketplace.ts +9 -9
- package/src/commands/plugin/uninstall.ts +4 -26
- package/src/commands/plugin/update.ts +3 -3
- package/src/components/App.tsx +10 -2
- package/src/components/BackgroundTaskManager.tsx +69 -44
- package/src/components/ChatInterface.tsx +35 -23
- package/src/components/ConfirmationDetails.tsx +13 -15
- package/src/components/ConfirmationSelector.tsx +207 -128
- package/src/components/DiffDisplay.tsx +164 -75
- package/src/components/HistorySearch.tsx +31 -25
- package/src/components/Markdown.tsx +3 -1
- package/src/components/McpManager.tsx +51 -59
- package/src/components/MessageBlockItem.tsx +83 -0
- package/src/components/MessageList.tsx +55 -52
- package/src/components/PluginDetail.tsx +30 -31
- package/src/components/SessionSelector.tsx +8 -5
- package/src/components/TaskList.tsx +2 -5
- package/src/components/ToolDisplay.tsx +5 -1
- package/src/contexts/useChat.tsx +22 -2
- package/src/hooks/usePluginManager.ts +21 -57
- package/src/index.ts +17 -0
- package/src/print-cli.ts +3 -0
- package/src/utils/highlightUtils.ts +76 -0
- package/src/utils/toolParameterTransforms.ts +11 -20
- package/dist/components/MessageItem.d.ts +0 -8
- package/dist/components/MessageItem.d.ts.map +0 -1
- package/dist/components/MessageItem.js +0 -13
- package/src/components/MessageItem.tsx +0 -81
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
3
|
import { Box, Text, useInput } from "ink";
|
|
4
4
|
import { PromptHistoryManager } from "wave-agent-sdk";
|
|
5
5
|
export const HistorySearch = ({ searchQuery, onSelect, onCancel, }) => {
|
|
6
6
|
const MAX_VISIBLE_ITEMS = 5;
|
|
7
|
-
const [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
entriesRef.current = entries;
|
|
13
|
-
}, [entries]);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
selectedIndexRef.current = selectedIndex;
|
|
16
|
-
}, [selectedIndex]);
|
|
7
|
+
const [state, setState] = useState({
|
|
8
|
+
selectedIndex: 0,
|
|
9
|
+
entries: [],
|
|
10
|
+
});
|
|
17
11
|
useEffect(() => {
|
|
18
12
|
const fetchHistory = async () => {
|
|
19
13
|
const results = await PromptHistoryManager.searchHistory(searchQuery);
|
|
20
14
|
const limitedResults = results.slice(0, 20);
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
setState({
|
|
16
|
+
entries: limitedResults,
|
|
17
|
+
selectedIndex: 0,
|
|
18
|
+
});
|
|
23
19
|
};
|
|
24
20
|
fetchHistory();
|
|
25
21
|
}, [searchQuery]);
|
|
26
22
|
useInput((input, key) => {
|
|
27
23
|
if (key.return) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
setState((prev) => {
|
|
25
|
+
if (prev.entries.length > 0 &&
|
|
26
|
+
prev.selectedIndex < prev.entries.length) {
|
|
27
|
+
onSelect(prev.entries[prev.selectedIndex].prompt);
|
|
28
|
+
}
|
|
29
|
+
return prev;
|
|
30
|
+
});
|
|
32
31
|
return;
|
|
33
32
|
}
|
|
34
33
|
if (key.escape) {
|
|
@@ -36,14 +35,21 @@ export const HistorySearch = ({ searchQuery, onSelect, onCancel, }) => {
|
|
|
36
35
|
return;
|
|
37
36
|
}
|
|
38
37
|
if (key.upArrow) {
|
|
39
|
-
|
|
38
|
+
setState((prev) => ({
|
|
39
|
+
...prev,
|
|
40
|
+
selectedIndex: Math.max(0, prev.selectedIndex - 1),
|
|
41
|
+
}));
|
|
40
42
|
return;
|
|
41
43
|
}
|
|
42
44
|
if (key.downArrow) {
|
|
43
|
-
|
|
45
|
+
setState((prev) => ({
|
|
46
|
+
...prev,
|
|
47
|
+
selectedIndex: Math.min(prev.entries.length - 1, prev.selectedIndex + 1),
|
|
48
|
+
}));
|
|
44
49
|
return;
|
|
45
50
|
}
|
|
46
51
|
});
|
|
52
|
+
const { entries, selectedIndex } = state;
|
|
47
53
|
if (entries.length === 0) {
|
|
48
54
|
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", borderBottom: false, borderLeft: false, borderRight: false, children: [_jsxs(Text, { color: "yellow", children: ["No history found ", searchQuery && `for "${searchQuery}"`] }), _jsx(Text, { dimColor: true, children: "Press Escape to cancel" })] }));
|
|
49
55
|
}
|
|
@@ -70,6 +76,6 @@ export const HistorySearch = ({ searchQuery, onSelect, onCancel, }) => {
|
|
|
70
76
|
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "blue", borderBottom: false, borderLeft: false, borderRight: false, gap: 1, children: [_jsx(Box, { children: _jsxs(Text, { color: "blue", bold: true, children: ["Prompt History ", searchQuery && `(filtering: "${searchQuery}")`] }) }), _jsx(Box, { flexDirection: "column", children: visibleEntries.map((entry, index) => {
|
|
71
77
|
const actualIndex = startIndex + index;
|
|
72
78
|
const isSelected = actualIndex === selectedIndex;
|
|
73
|
-
return (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsx(Box, { flexShrink: 1, children:
|
|
79
|
+
return (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsx(Box, { flexShrink: 1, children: _jsxs(Text, { color: isSelected ? "black" : "white", backgroundColor: isSelected ? "blue" : undefined, wrap: "truncate-end", children: [isSelected ? "> " : " ", entry.prompt.replace(/\n/g, " ")] }) }), isSelected && (_jsx(Box, { marginLeft: 2, flexShrink: 0, children: _jsx(Text, { color: "gray", dimColor: true, children: formatTimestamp(entry.timestamp) }) }))] }, actualIndex));
|
|
74
80
|
}) }), _jsx(Box, { children: _jsx(Text, { dimColor: true, children: "Use \u2191\u2193 to navigate, Enter to select, Escape to cancel" }) })] }));
|
|
75
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/components/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/components/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyID,eAAO,MAAM,QAAQ,2CAA6B,aAAa,6CAc7D,CAAC"}
|
|
@@ -3,6 +3,7 @@ import React, { useMemo } from "react";
|
|
|
3
3
|
import { Box, Text } from "ink";
|
|
4
4
|
import { Renderer, marked } from "marked";
|
|
5
5
|
import chalk from "chalk";
|
|
6
|
+
import { highlightToAnsi } from "../utils/highlightUtils.js";
|
|
6
7
|
const unescapeHtml = (html) => {
|
|
7
8
|
return html
|
|
8
9
|
.replace(/&/g, "&")
|
|
@@ -16,7 +17,8 @@ class AnsiRenderer extends Renderer {
|
|
|
16
17
|
code({ text, lang }) {
|
|
17
18
|
const prefix = lang ? `\`\`\`${lang}` : "```";
|
|
18
19
|
const suffix = "```";
|
|
19
|
-
|
|
20
|
+
const highlighted = highlightToAnsi(text, lang);
|
|
21
|
+
return `\n${chalk.gray(prefix)}\n${highlighted}\n${chalk.gray(suffix)}\n`;
|
|
20
22
|
}
|
|
21
23
|
blockquote({ tokens }) {
|
|
22
24
|
const body = this.parser.parse(tokens);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpManager.d.ts","sourceRoot":"","sources":["../../src/components/McpManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"McpManager.d.ts","sourceRoot":"","sources":["../../src/components/McpManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0ThD,CAAC"}
|
|
@@ -44,64 +44,61 @@ export const McpManager = ({ onCancel, servers, onConnectServer, onDisconnectSer
|
|
|
44
44
|
await onDisconnectServer(serverName);
|
|
45
45
|
};
|
|
46
46
|
useInput((input, key) => {
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
if (key.return) {
|
|
48
|
+
setViewMode((prevMode) => {
|
|
49
|
+
if (prevMode === "list") {
|
|
50
|
+
setSelectedIndex((prevIndex) => {
|
|
51
|
+
if (servers.length > 0 && prevIndex < servers.length) {
|
|
52
|
+
// We can't call setViewMode here because we're already in a setViewMode call
|
|
53
|
+
// But we can return the new mode from the outer setViewMode
|
|
54
|
+
}
|
|
55
|
+
return prevIndex;
|
|
56
|
+
});
|
|
57
|
+
return "detail";
|
|
58
|
+
}
|
|
59
|
+
return prevMode;
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (key.escape) {
|
|
64
|
+
setViewMode((prev) => {
|
|
65
|
+
if (prev === "detail") {
|
|
66
|
+
return "list";
|
|
52
67
|
}
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (key.escape) {
|
|
56
68
|
onCancel();
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
return prev;
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (key.upArrow) {
|
|
74
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (key.downArrow) {
|
|
78
|
+
setSelectedIndex((prev) => Math.min(servers.length - 1, prev + 1));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Hotkeys for server actions
|
|
82
|
+
if (input === "c") {
|
|
83
|
+
setSelectedIndex((prev) => {
|
|
84
|
+
const server = servers[prev];
|
|
85
|
+
if (server &&
|
|
86
|
+
(server.status === "disconnected" || server.status === "error")) {
|
|
73
87
|
handleConnect(server.name);
|
|
74
88
|
}
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
servers.length > 0 &&
|
|
79
|
-
selectedIndex < servers.length) {
|
|
80
|
-
const server = servers[selectedIndex];
|
|
81
|
-
if (server.status === "connected") {
|
|
82
|
-
handleDisconnect(server.name);
|
|
83
|
-
}
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
89
|
+
return prev;
|
|
90
|
+
});
|
|
91
|
+
return;
|
|
86
92
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
if (selectedServer) {
|
|
94
|
-
if (input === "c" &&
|
|
95
|
-
(selectedServer.status === "disconnected" ||
|
|
96
|
-
selectedServer.status === "error")) {
|
|
97
|
-
handleConnect(selectedServer.name);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
if (input === "d" && selectedServer.status === "connected") {
|
|
101
|
-
handleDisconnect(selectedServer.name);
|
|
102
|
-
return;
|
|
93
|
+
if (input === "d") {
|
|
94
|
+
setSelectedIndex((prev) => {
|
|
95
|
+
const server = servers[prev];
|
|
96
|
+
if (server && server.status === "connected") {
|
|
97
|
+
handleDisconnect(server.name);
|
|
103
98
|
}
|
|
104
|
-
|
|
99
|
+
return prev;
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
105
102
|
}
|
|
106
103
|
});
|
|
107
104
|
if (viewMode === "detail" && selectedServer) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Message, MessageBlock } from "wave-agent-sdk";
|
|
2
|
+
export interface MessageBlockItemProps {
|
|
3
|
+
block: MessageBlock;
|
|
4
|
+
message: Message;
|
|
5
|
+
isExpanded: boolean;
|
|
6
|
+
paddingTop?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const MessageBlockItem: ({ block, message, isExpanded, paddingTop, }: MessageBlockItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=MessageBlockItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBlockItem.d.ts","sourceRoot":"","sources":["../../src/components/MessageBlockItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQ5D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,GAAI,6CAK9B,qBAAqB,4CA4DvB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { MessageSource } from "wave-agent-sdk";
|
|
4
|
+
import { CommandOutputDisplay } from "./CommandOutputDisplay.js";
|
|
5
|
+
import { ToolDisplay } from "./ToolDisplay.js";
|
|
6
|
+
import { CompressDisplay } from "./CompressDisplay.js";
|
|
7
|
+
import { ReasoningDisplay } from "./ReasoningDisplay.js";
|
|
8
|
+
import { Markdown } from "./Markdown.js";
|
|
9
|
+
export const MessageBlockItem = ({ block, message, isExpanded, paddingTop = 0, }) => {
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "column", paddingTop: paddingTop, children: [block.type === "text" && block.content.trim() && (_jsxs(Box, { children: [block.customCommandContent && (_jsxs(Text, { color: "cyan", bold: true, children: ["$", " "] })), block.source === MessageSource.HOOK && (_jsxs(Text, { color: "magenta", bold: true, children: ["~", " "] })), message.role === "user" ? (_jsx(Text, { backgroundColor: "gray", color: "white", children: block.content })) : (_jsx(Markdown, { children: block.content }))] })), block.type === "error" && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", block.content] }) })), block.type === "command_output" && (_jsx(CommandOutputDisplay, { block: block, isExpanded: isExpanded })), block.type === "tool" && (_jsx(ToolDisplay, { block: block, isExpanded: isExpanded })), block.type === "image" && (_jsxs(Box, { children: [_jsx(Text, { color: "magenta", bold: true, children: "# Image" }), block.imageUrls && block.imageUrls.length > 0 && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(", block.imageUrls.length, ")"] }))] })), block.type === "compress" && (_jsx(CompressDisplay, { block: block, isExpanded: isExpanded })), block.type === "reasoning" && _jsx(ReasoningDisplay, { block: block })] }));
|
|
11
|
+
};
|
|
@@ -2,10 +2,8 @@ import React from "react";
|
|
|
2
2
|
import type { Message } from "wave-agent-sdk";
|
|
3
3
|
export interface MessageListProps {
|
|
4
4
|
messages: Message[];
|
|
5
|
-
isLoading?: boolean;
|
|
6
|
-
isCommandRunning?: boolean;
|
|
7
5
|
isExpanded?: boolean;
|
|
8
|
-
|
|
6
|
+
hideDynamicBlocks?: boolean;
|
|
9
7
|
}
|
|
10
|
-
export declare const MessageList: React.MemoExoticComponent<({ messages,
|
|
8
|
+
export declare const MessageList: React.MemoExoticComponent<({ messages, isExpanded, hideDynamicBlocks, }: MessageListProps) => import("react/jsx-runtime").JSX.Element>;
|
|
11
9
|
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,WAAW,2EAKnB,gBAAgB,6CAmFpB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { Box, Text, Static } from "ink";
|
|
4
|
-
import {
|
|
5
|
-
export const MessageList = React.memo(({ messages,
|
|
4
|
+
import { MessageBlockItem } from "./MessageBlockItem.js";
|
|
5
|
+
export const MessageList = React.memo(({ messages, isExpanded = false, hideDynamicBlocks = false, }) => {
|
|
6
6
|
// Empty message state
|
|
7
7
|
if (messages.length === 0) {
|
|
8
8
|
return (_jsx(Box, { flexDirection: "column", gap: 1, children: _jsx(Box, { flexDirection: "column", paddingY: 1, children: _jsx(Text, { color: "gray", children: "Welcome to WAVE Code Assistant!" }) }) }));
|
|
@@ -13,27 +13,32 @@ export const MessageList = React.memo(({ messages, isLoading = false, isCommandR
|
|
|
13
13
|
const displayMessages = shouldLimitMessages
|
|
14
14
|
? messages.slice(-maxExpandedMessages)
|
|
15
15
|
: messages;
|
|
16
|
-
//
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
16
|
+
// Flatten messages into blocks with metadata
|
|
17
|
+
const allBlocks = displayMessages.flatMap((message, index) => {
|
|
18
|
+
const messageIndex = shouldLimitMessages
|
|
19
|
+
? messages.length - maxExpandedMessages + index
|
|
20
|
+
: index;
|
|
21
|
+
return message.blocks.map((block, blockIndex) => ({
|
|
22
|
+
block,
|
|
23
|
+
message,
|
|
24
|
+
isLastMessage: messageIndex === messages.length - 1,
|
|
25
|
+
// Unique key for each block to help Static component
|
|
26
|
+
key: `${message.id || messageIndex}-${blockIndex}`,
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
// Determine which blocks are static vs dynamic
|
|
30
|
+
const blocksWithStatus = allBlocks.map((item) => {
|
|
31
|
+
const { block, isLastMessage } = item;
|
|
32
|
+
const isDynamic = isLastMessage &&
|
|
33
|
+
((block.type === "tool" && block.stage !== "end") ||
|
|
34
|
+
(block.type === "command_output" && block.isRunning));
|
|
35
|
+
return { ...item, isDynamic };
|
|
36
|
+
});
|
|
37
|
+
const staticBlocks = blocksWithStatus.filter((b) => !b.isDynamic);
|
|
38
|
+
const dynamicBlocks = hideDynamicBlocks
|
|
39
|
+
? []
|
|
40
|
+
: blocksWithStatus.filter((b) => b.isDynamic);
|
|
41
|
+
return (_jsxs(Box, { flexDirection: "column", paddingBottom: 1, children: [staticBlocks.length > 0 && (_jsx(Static, { items: staticBlocks, children: (item) => (_jsx(MessageBlockItem, { block: item.block, message: item.message, isExpanded: isExpanded, paddingTop: 1 }, item.key)) })), dynamicBlocks.length > 0 && (_jsx(Box, { flexDirection: "column", children: dynamicBlocks.map((item) => (_jsx(MessageBlockItem, { block: item.block, message: item.message, isExpanded: isExpanded, paddingTop: 1 }, item.key))) }))] }));
|
|
37
42
|
});
|
|
38
43
|
// Add display name for debugging
|
|
39
44
|
MessageList.displayName = "MessageList";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginDetail.d.ts","sourceRoot":"","sources":["../../src/components/PluginDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAUxC,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"PluginDetail.d.ts","sourceRoot":"","sources":["../../src/components/PluginDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAUxC,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAuIhC,CAAC"}
|
|
@@ -24,36 +24,33 @@ export const PluginDetail = () => {
|
|
|
24
24
|
actions.setView(isFromDiscover ? "DISCOVER" : "INSTALLED");
|
|
25
25
|
}
|
|
26
26
|
else if (key.upArrow) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
setSelectedScopeIndex((prev) => prev > 0 ? prev - 1 : SCOPES.length - 1);
|
|
32
|
-
}
|
|
27
|
+
setSelectedActionIndex((prev) => prev > 0 ? prev - 1 : INSTALLED_ACTIONS.length - 1);
|
|
28
|
+
setSelectedScopeIndex((prev) => prev > 0 ? prev - 1 : SCOPES.length - 1);
|
|
33
29
|
}
|
|
34
30
|
else if (key.downArrow) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
setSelectedScopeIndex((prev) => prev < SCOPES.length - 1 ? prev + 1 : 0);
|
|
40
|
-
}
|
|
31
|
+
setSelectedActionIndex((prev) => prev < INSTALLED_ACTIONS.length - 1 ? prev + 1 : 0);
|
|
32
|
+
setSelectedScopeIndex((prev) => prev < SCOPES.length - 1 ? prev + 1 : 0);
|
|
41
33
|
}
|
|
42
34
|
else if (key.return && plugin) {
|
|
43
35
|
if (isInstalledAndEnabled) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
setSelectedActionIndex((prev) => {
|
|
37
|
+
const action = INSTALLED_ACTIONS[prev].id;
|
|
38
|
+
if (action === "uninstall") {
|
|
39
|
+
actions.uninstallPlugin(plugin.name, plugin.marketplace);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
actions.updatePlugin(plugin.name, plugin.marketplace);
|
|
43
|
+
}
|
|
44
|
+
return prev;
|
|
45
|
+
});
|
|
52
46
|
}
|
|
53
47
|
else {
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
setSelectedScopeIndex((prev) => {
|
|
49
|
+
actions.installPlugin(plugin.name, plugin.marketplace, SCOPES[prev].id);
|
|
50
|
+
return prev;
|
|
51
|
+
});
|
|
56
52
|
}
|
|
53
|
+
actions.setView("INSTALLED");
|
|
57
54
|
}
|
|
58
55
|
});
|
|
59
56
|
if (!plugin) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionSelector.d.ts","sourceRoot":"","sources":["../../src/components/SessionSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,eAAe,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC1D,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SessionSelector.d.ts","sourceRoot":"","sources":["../../src/components/SessionSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,eAAe,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC1D,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAuH1D,CAAC"}
|
|
@@ -5,9 +5,12 @@ export const SessionSelector = ({ sessions, onSelect, onCancel, }) => {
|
|
|
5
5
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
6
6
|
useInput((input, key) => {
|
|
7
7
|
if (key.return) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
setSelectedIndex((prev) => {
|
|
9
|
+
if (sessions.length > 0 && prev < sessions.length) {
|
|
10
|
+
onSelect(sessions[prev].id);
|
|
11
|
+
}
|
|
12
|
+
return prev;
|
|
13
|
+
});
|
|
11
14
|
return;
|
|
12
15
|
}
|
|
13
16
|
if (key.escape) {
|
|
@@ -15,11 +18,11 @@ export const SessionSelector = ({ sessions, onSelect, onCancel, }) => {
|
|
|
15
18
|
return;
|
|
16
19
|
}
|
|
17
20
|
if (key.upArrow) {
|
|
18
|
-
setSelectedIndex(Math.max(0,
|
|
21
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
19
22
|
return;
|
|
20
23
|
}
|
|
21
24
|
if (key.downArrow) {
|
|
22
|
-
setSelectedIndex(Math.min(sessions.length - 1,
|
|
25
|
+
setSelectedIndex((prev) => Math.min(sessions.length - 1, prev + 1));
|
|
23
26
|
return;
|
|
24
27
|
}
|
|
25
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAiD5B,CAAC"}
|
|
@@ -8,10 +8,7 @@ export const TaskList = () => {
|
|
|
8
8
|
if (tasks.length === 0 || !isTaskListVisible) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
11
|
-
const getStatusIcon = (status
|
|
12
|
-
if (isBlocked) {
|
|
13
|
-
return _jsx(Text, { color: "red", children: "\uD83D\uDD12" });
|
|
14
|
-
}
|
|
11
|
+
const getStatusIcon = (status) => {
|
|
15
12
|
switch (status) {
|
|
16
13
|
case "pending":
|
|
17
14
|
return _jsx(Text, { color: "gray", children: "\u25A1" });
|
|
@@ -35,6 +32,6 @@ export const TaskList = () => {
|
|
|
35
32
|
? ` (Blocked by: ${blockingTaskIds.join(", ")})`
|
|
36
33
|
: "";
|
|
37
34
|
const fullText = `${task.subject}${blockedByText}`;
|
|
38
|
-
return (_jsxs(Box, { gap: 1, children: [getStatusIcon(task.status
|
|
35
|
+
return (_jsxs(Box, { gap: 1, children: [getStatusIcon(task.status), _jsx(Text, { dimColor: isDimmed, children: fullText })] }, task.id));
|
|
39
36
|
}) }));
|
|
40
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,gBAAgB;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ToolDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,gBAAgB;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmIlD,CAAC"}
|
|
@@ -40,5 +40,5 @@ export const ToolDisplay = ({ block, isExpanded = false, }) => {
|
|
|
40
40
|
return null;
|
|
41
41
|
};
|
|
42
42
|
const shortResult = getShortResult();
|
|
43
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: getStatusColor(), children: "\u25CF " }), _jsx(Text, { color: "white", children: toolName })] }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] })] }), !isExpanded && shortResult && !error && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "gray", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) })), stage === "end" && success && (_jsx(DiffDisplay, { toolName: name, parameters: parameters }))] }));
|
|
43
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: getStatusColor(), children: "\u25CF " }), _jsx(Text, { color: "white", children: toolName })] }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] })] }), !isExpanded && shortResult && !error && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "gray", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) })), stage === "end" && success && (_jsx(DiffDisplay, { toolName: name, parameters: parameters, startLineNumber: block.startLineNumber }))] }));
|
|
44
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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"}
|
package/dist/contexts/useChat.js
CHANGED
|
@@ -13,7 +13,7 @@ export const useChat = () => {
|
|
|
13
13
|
}
|
|
14
14
|
return context;
|
|
15
15
|
};
|
|
16
|
-
export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
16
|
+
export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }) => {
|
|
17
17
|
const { restoreSessionId, continueLastSession } = useAppConfig();
|
|
18
18
|
// Message Display State
|
|
19
19
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
@@ -24,6 +24,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
|
24
24
|
const [isTaskListVisible, setIsTaskListVisible] = useState(true);
|
|
25
25
|
// AI State
|
|
26
26
|
const [messages, setMessages] = useState([]);
|
|
27
|
+
const messagesUpdateTimerRef = useRef(null);
|
|
27
28
|
const [isLoading, setIsLoading] = useState(false);
|
|
28
29
|
const [latestTotalTokens, setlatestTotalTokens] = useState(0);
|
|
29
30
|
const [sessionId, setSessionId] = useState("");
|
|
@@ -71,9 +72,16 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
|
71
72
|
useEffect(() => {
|
|
72
73
|
const initializeAgent = async () => {
|
|
73
74
|
const callbacks = {
|
|
74
|
-
onMessagesChange: (
|
|
75
|
+
onMessagesChange: () => {
|
|
75
76
|
if (!isExpandedRef.current) {
|
|
76
|
-
|
|
77
|
+
if (!messagesUpdateTimerRef.current) {
|
|
78
|
+
messagesUpdateTimerRef.current = setTimeout(() => {
|
|
79
|
+
if (agentRef.current) {
|
|
80
|
+
setMessages([...agentRef.current.messages]);
|
|
81
|
+
}
|
|
82
|
+
messagesUpdateTimerRef.current = null;
|
|
83
|
+
}, 50);
|
|
84
|
+
}
|
|
77
85
|
}
|
|
78
86
|
},
|
|
79
87
|
onServersChange: (servers) => {
|
|
@@ -139,6 +147,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
|
139
147
|
canUseTool: permissionCallback,
|
|
140
148
|
stream: false, // 关闭流式模式
|
|
141
149
|
plugins: pluginDirs?.map((path) => ({ type: "local", path })),
|
|
150
|
+
tools,
|
|
142
151
|
});
|
|
143
152
|
agentRef.current = agent;
|
|
144
153
|
// Get initial state
|
|
@@ -167,10 +176,14 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
|
167
176
|
bypassPermissions,
|
|
168
177
|
showConfirmation,
|
|
169
178
|
pluginDirs,
|
|
179
|
+
tools,
|
|
170
180
|
]);
|
|
171
181
|
// Cleanup on unmount
|
|
172
182
|
useEffect(() => {
|
|
173
183
|
return () => {
|
|
184
|
+
if (messagesUpdateTimerRef.current) {
|
|
185
|
+
clearTimeout(messagesUpdateTimerRef.current);
|
|
186
|
+
}
|
|
174
187
|
if (agentRef.current) {
|
|
175
188
|
try {
|
|
176
189
|
// Display usage summary before cleanup
|
|
@@ -330,6 +343,10 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
|
|
|
330
343
|
setIsExpanded((prev) => {
|
|
331
344
|
const newExpanded = !prev;
|
|
332
345
|
if (newExpanded) {
|
|
346
|
+
if (messagesUpdateTimerRef.current) {
|
|
347
|
+
clearTimeout(messagesUpdateTimerRef.current);
|
|
348
|
+
messagesUpdateTimerRef.current = null;
|
|
349
|
+
}
|
|
333
350
|
// Transitioning to EXPANDED: Freeze the current view
|
|
334
351
|
// Deep copy the last message to ensure it doesn't update if the agent is still writing to it
|
|
335
352
|
setMessages((currentMessages) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,gBAAgB,IAAI,wBAAwB,CA4P3D"}
|