@hawtio/ai-plugin 0.2.0 → 0.2.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/CHANGELOG.md +8 -0
- package/dist/index.js +144 -75
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [0.2.1](///compare/v0.2.0...v0.2.1) (2026-06-17)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* chat history [#39](undefined/undefined/undefined/issues/39) 401ea48
|
|
11
|
+
* upgrade @hawtio/react to 2.3.0-pre.1 d52e5de
|
|
12
|
+
|
|
5
13
|
## [0.2.0](///compare/v0.1.6...v0.2.0) (2026-06-03)
|
|
6
14
|
|
|
7
15
|
|
package/dist/index.js
CHANGED
|
@@ -49,17 +49,19 @@ var init_ai_model = __esm({
|
|
|
49
49
|
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", tool: true, provider: "anthropic" },
|
|
50
50
|
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5", tool: true, provider: "anthropic" },
|
|
51
51
|
// Google Gemini models
|
|
52
|
-
{ id: "gemini-
|
|
53
|
-
{ id: "gemini-
|
|
54
|
-
{ id: "gemini-
|
|
52
|
+
{ id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", tool: true, provider: "google-genai" },
|
|
53
|
+
{ id: "gemini-3.1-flash-lite", name: "Gemini 3.1 Flash-Lite", tool: true, provider: "google-genai" },
|
|
54
|
+
{ id: "gemini-3.1-pro", name: "Gemini 3.1 Pro", tool: true, provider: "google-genai" },
|
|
55
55
|
// Ollama models
|
|
56
|
-
{ id: "
|
|
57
|
-
{ id: "granite3.1-dense:latest", name: "Granite 3.1 Dense", tool: true, provider: "ollama" },
|
|
56
|
+
{ id: "granite4.1:3b", name: "Granite 4.1 3B", tool: true, provider: "ollama" },
|
|
58
57
|
{ id: "llama3:latest", name: "Llama 3", tool: false, provider: "ollama" },
|
|
59
58
|
{ id: "llama3.2:latest", name: "Llama 3.2", tool: true, provider: "ollama" },
|
|
59
|
+
{ id: "gemma4:e4b", name: "Gemma 4 4B", tool: true, provider: "ollama" },
|
|
60
|
+
{ id: "gemma4:e4b-mlx", name: "Gemma 4 4B MLX", tool: true, provider: "ollama" },
|
|
60
61
|
{ id: "phi4:latest", name: "Phi 4", tool: false, provider: "ollama" },
|
|
61
62
|
{ id: "phi3.5:latest", name: "Phi 3.5", tool: false, provider: "ollama" },
|
|
62
63
|
{ id: "qwen3.5:4b", name: "Qwen 3.5 4B", tool: true, provider: "ollama" },
|
|
64
|
+
{ id: "qwen3.5:4b-mlx", name: "Qwen 3.5 4B MLX", tool: true, provider: "ollama" },
|
|
63
65
|
{ id: "qwen3.5:latest", name: "Qwen 3.5", tool: true, provider: "ollama" }
|
|
64
66
|
];
|
|
65
67
|
}
|
|
@@ -106,13 +108,13 @@ var init_ai_service = __esm({
|
|
|
106
108
|
model;
|
|
107
109
|
llm;
|
|
108
110
|
llmWithTools;
|
|
109
|
-
|
|
111
|
+
memory = {};
|
|
110
112
|
reset(model) {
|
|
111
113
|
if (this.model && this.model.id === model.id && this.llm && (!model.tool || this.llmWithTools)) {
|
|
112
114
|
return;
|
|
113
115
|
}
|
|
114
116
|
log.info("AI model to use:", model.id);
|
|
115
|
-
this.
|
|
117
|
+
this.memory = {};
|
|
116
118
|
const { token } = aiPreferencesService.loadOptions();
|
|
117
119
|
this.model = model;
|
|
118
120
|
try {
|
|
@@ -187,40 +189,50 @@ var init_ai_service = __esm({
|
|
|
187
189
|
return String(error);
|
|
188
190
|
}
|
|
189
191
|
}
|
|
190
|
-
newChat(message, system) {
|
|
192
|
+
newChat(dialogId, message, system) {
|
|
191
193
|
if (system) {
|
|
192
|
-
this.
|
|
194
|
+
this.memory[dialogId] = [new import_messages.SystemMessage(system)];
|
|
193
195
|
} else {
|
|
194
|
-
this.
|
|
196
|
+
this.memory[dialogId] = [];
|
|
195
197
|
}
|
|
196
|
-
return this.chat(message);
|
|
198
|
+
return this.chat(dialogId, message);
|
|
197
199
|
}
|
|
198
|
-
async chat(message) {
|
|
199
|
-
|
|
200
|
-
|
|
200
|
+
async chat(dialogId, message) {
|
|
201
|
+
let messages = this.memory[dialogId];
|
|
202
|
+
if (!messages) {
|
|
203
|
+
messages = [];
|
|
204
|
+
this.memory[dialogId] = messages;
|
|
205
|
+
}
|
|
206
|
+
messages.push(new import_messages.HumanMessage(message));
|
|
207
|
+
const answer = await this.invoke(messages);
|
|
201
208
|
if (typeof answer !== "string") {
|
|
202
|
-
|
|
209
|
+
messages.push(answer);
|
|
203
210
|
}
|
|
204
211
|
return answer;
|
|
205
212
|
}
|
|
206
|
-
async invokeTools(toolCalls) {
|
|
213
|
+
async invokeTools(dialogId, toolCalls) {
|
|
207
214
|
if (!this.llmWithTools) {
|
|
208
215
|
return "Tool invocation not supported";
|
|
209
216
|
}
|
|
217
|
+
let messages = this.memory[dialogId];
|
|
218
|
+
if (!messages) {
|
|
219
|
+
messages = [];
|
|
220
|
+
this.memory[dialogId] = messages;
|
|
221
|
+
}
|
|
210
222
|
for (const call of toolCalls) {
|
|
211
223
|
log.debug("\u{1F6E0}\uFE0F Call:", call.name, JSON.stringify(call.args));
|
|
212
224
|
const selectedTool = TOOLS_BY_NAME[call.name];
|
|
213
225
|
const toolAnswer = await selectedTool?.invoke(call);
|
|
214
226
|
if (toolAnswer) {
|
|
215
227
|
log.debug("\u{1F6E0}\uFE0F " + call.name + ":", toolAnswer);
|
|
216
|
-
|
|
228
|
+
messages.push(toolAnswer);
|
|
217
229
|
}
|
|
218
230
|
}
|
|
219
|
-
const finalAnswer = await this.llmWithTools.invoke(
|
|
231
|
+
const finalAnswer = await this.llmWithTools.invoke(messages);
|
|
220
232
|
if (finalAnswer) {
|
|
221
|
-
|
|
233
|
+
messages.push(finalAnswer);
|
|
222
234
|
}
|
|
223
|
-
console.debug("Messages>>",
|
|
235
|
+
console.debug("Messages>>", messages);
|
|
224
236
|
return finalAnswer;
|
|
225
237
|
}
|
|
226
238
|
generateId() {
|
|
@@ -1940,6 +1952,34 @@ var init_react_split_es = __esm({
|
|
|
1940
1952
|
}
|
|
1941
1953
|
});
|
|
1942
1954
|
|
|
1955
|
+
// src/ai-plugin/jmx-ai/model.ts
|
|
1956
|
+
var ChatbotDialog;
|
|
1957
|
+
var init_model = __esm({
|
|
1958
|
+
"src/ai-plugin/jmx-ai/model.ts"() {
|
|
1959
|
+
"use strict";
|
|
1960
|
+
ChatbotDialog = class {
|
|
1961
|
+
constructor(messages, summary) {
|
|
1962
|
+
this.messages = messages;
|
|
1963
|
+
this.summary = summary;
|
|
1964
|
+
this.id = messages[0]?.id ?? "";
|
|
1965
|
+
}
|
|
1966
|
+
messages;
|
|
1967
|
+
summary;
|
|
1968
|
+
id;
|
|
1969
|
+
setMessages(messages) {
|
|
1970
|
+
if (messages[0]?.id !== this.id) {
|
|
1971
|
+
throw new Error("Not the same dialog");
|
|
1972
|
+
}
|
|
1973
|
+
this.messages = [...messages];
|
|
1974
|
+
}
|
|
1975
|
+
createConversation() {
|
|
1976
|
+
const text = this.summary ?? (this.messages[0]?.content ?? "").substring(0, 20);
|
|
1977
|
+
return { id: this.id, text };
|
|
1978
|
+
}
|
|
1979
|
+
};
|
|
1980
|
+
}
|
|
1981
|
+
});
|
|
1982
|
+
|
|
1943
1983
|
// src/ai-plugin/jmx-ai/context.ts
|
|
1944
1984
|
function useMBeanTree() {
|
|
1945
1985
|
const [tree, setTree] = (0, import_react7.useState)(import_react6.MBeanTree.createEmpty(pluginName));
|
|
@@ -1999,14 +2039,39 @@ function pluginPathWithNodeId(node, searchParams = new URLSearchParams(window.lo
|
|
|
1999
2039
|
return { pathname: pluginPath, search: query };
|
|
2000
2040
|
}
|
|
2001
2041
|
function useChatbot() {
|
|
2002
|
-
const [messages,
|
|
2003
|
-
const [
|
|
2042
|
+
const [messages, setMessages2] = (0, import_react7.useState)([]);
|
|
2043
|
+
const [dialogs, setDialogs] = (0, import_react7.useState)([]);
|
|
2044
|
+
const [conversations, setConversations] = (0, import_react7.useState)([]);
|
|
2004
2045
|
const [announcement, setAnnouncement] = (0, import_react7.useState)("");
|
|
2005
2046
|
const [isChatbotOpen, setIsChatbotOpen] = (0, import_react7.useState)(false);
|
|
2006
2047
|
const [isSendButtonDisabled, setIsSendButtonDisabled] = (0, import_react7.useState)(false);
|
|
2048
|
+
const updateConversations = (messages2, summary) => {
|
|
2049
|
+
const dialogId = messages2[0]?.id;
|
|
2050
|
+
if (!dialogId) {
|
|
2051
|
+
return;
|
|
2052
|
+
}
|
|
2053
|
+
setMessages2(messages2);
|
|
2054
|
+
let dialog = dialogs.find((d) => d.id === dialogId);
|
|
2055
|
+
if (dialog) {
|
|
2056
|
+
dialog.setMessages(messages2);
|
|
2057
|
+
} else {
|
|
2058
|
+
dialog = new ChatbotDialog(messages2, summary);
|
|
2059
|
+
dialogs.push(dialog);
|
|
2060
|
+
}
|
|
2061
|
+
setDialogs([...dialogs]);
|
|
2062
|
+
log.debug("Updated dialogs:", dialogs);
|
|
2063
|
+
if (!conversations.some((c) => c.id === dialogId)) {
|
|
2064
|
+
const conversation = dialog.createConversation();
|
|
2065
|
+
conversations.push(conversation);
|
|
2066
|
+
setConversations([...conversations]);
|
|
2067
|
+
log.debug("Updated conversations:", conversations);
|
|
2068
|
+
}
|
|
2069
|
+
};
|
|
2007
2070
|
return {
|
|
2008
2071
|
messages,
|
|
2009
|
-
setMessages,
|
|
2072
|
+
setMessages: setMessages2,
|
|
2073
|
+
dialogs,
|
|
2074
|
+
setDialogs,
|
|
2010
2075
|
conversations,
|
|
2011
2076
|
setConversations,
|
|
2012
2077
|
announcement,
|
|
@@ -2014,10 +2079,11 @@ function useChatbot() {
|
|
|
2014
2079
|
isChatbotOpen,
|
|
2015
2080
|
setIsChatbotOpen,
|
|
2016
2081
|
isSendButtonDisabled,
|
|
2017
|
-
setIsSendButtonDisabled
|
|
2082
|
+
setIsSendButtonDisabled,
|
|
2083
|
+
updateConversations
|
|
2018
2084
|
};
|
|
2019
2085
|
}
|
|
2020
|
-
var import_react6, import_react7, import_react_router_dom, MBeanTreeContext,
|
|
2086
|
+
var import_react6, import_react7, import_react_router_dom, MBeanTreeContext, ChatbotContext;
|
|
2021
2087
|
var init_context = __esm({
|
|
2022
2088
|
"src/ai-plugin/jmx-ai/context.ts"() {
|
|
2023
2089
|
"use strict";
|
|
@@ -2025,18 +2091,22 @@ var init_context = __esm({
|
|
|
2025
2091
|
import_react7 = require("react");
|
|
2026
2092
|
import_react_router_dom = require("react-router-dom");
|
|
2027
2093
|
init_globals();
|
|
2094
|
+
init_model();
|
|
2028
2095
|
MBeanTreeContext = (0, import_react7.createContext)({
|
|
2029
2096
|
tree: import_react6.MBeanTree.createEmpty(pluginName),
|
|
2097
|
+
loaded: false,
|
|
2030
2098
|
selectedNode: null,
|
|
2031
2099
|
setSelectedNode: () => {
|
|
2032
2100
|
}
|
|
2033
2101
|
});
|
|
2034
|
-
initialConversations = {};
|
|
2035
2102
|
ChatbotContext = (0, import_react7.createContext)({
|
|
2036
2103
|
messages: [],
|
|
2037
2104
|
setMessages: () => {
|
|
2038
2105
|
},
|
|
2039
|
-
|
|
2106
|
+
dialogs: [],
|
|
2107
|
+
setDialogs: () => {
|
|
2108
|
+
},
|
|
2109
|
+
conversations: [],
|
|
2040
2110
|
setConversations: () => {
|
|
2041
2111
|
},
|
|
2042
2112
|
announcement: "",
|
|
@@ -2047,6 +2117,8 @@ var init_context = __esm({
|
|
|
2047
2117
|
},
|
|
2048
2118
|
isSendButtonDisabled: false,
|
|
2049
2119
|
setIsSendButtonDisabled: () => {
|
|
2120
|
+
},
|
|
2121
|
+
updateConversations: () => {
|
|
2050
2122
|
}
|
|
2051
2123
|
});
|
|
2052
2124
|
}
|
|
@@ -2059,10 +2131,11 @@ var init_Jmx = __esm({
|
|
|
2059
2131
|
});
|
|
2060
2132
|
|
|
2061
2133
|
// src/ai-plugin/jmx-ai/DiagnosisChatbot.tsx
|
|
2062
|
-
var import_Chatbot, import_ChatbotContent, import_ChatbotConversationHistoryNav, import_ChatbotFooter, import_ChatbotHeader, import_Message, import_MessageBar, import_MessageBox, import_react_core2, import_wrench_icon, import_react8, import_jsx_runtime2, DiagnosisChatbot, DiagnosisChatbotHeader, DiagnosisChatbotContent, DiagnosisChatbotFooter, ThinkInfo, ToolCallsInfo, ToolCallsApprove;
|
|
2134
|
+
var import_ui, import_Chatbot, import_ChatbotContent, import_ChatbotConversationHistoryNav, import_ChatbotFooter, import_ChatbotHeader, import_Message, import_MessageBar, import_MessageBox, import_react_core2, import_wrench_icon, import_react8, import_jsx_runtime2, DiagnosisChatbot, DiagnosisChatbotHeader, DiagnosisChatbotContent, DiagnosisChatbotFooter, ThinkInfo, ToolCallsInfo, ToolCallsApprove;
|
|
2063
2135
|
var init_DiagnosisChatbot = __esm({
|
|
2064
2136
|
"src/ai-plugin/jmx-ai/DiagnosisChatbot.tsx"() {
|
|
2065
2137
|
"use strict";
|
|
2138
|
+
import_ui = require("@hawtio/react/ui");
|
|
2066
2139
|
import_Chatbot = __toESM(require("@patternfly/chatbot/dist/dynamic/Chatbot"));
|
|
2067
2140
|
import_ChatbotContent = __toESM(require("@patternfly/chatbot/dist/dynamic/ChatbotContent"));
|
|
2068
2141
|
import_ChatbotConversationHistoryNav = __toESM(require("@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav"));
|
|
@@ -2079,25 +2152,25 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2079
2152
|
init_globals();
|
|
2080
2153
|
import_jsx_runtime2 = require("react/jsx-runtime");
|
|
2081
2154
|
DiagnosisChatbot = () => {
|
|
2082
|
-
const { setMessages,
|
|
2155
|
+
const { setMessages: setMessages2, dialogs, conversations } = (0, import_react8.useContext)(ChatbotContext);
|
|
2083
2156
|
const [isDrawerOpen, setIsDrawerOpen] = (0, import_react8.useState)(false);
|
|
2084
|
-
const
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
if (Object.keys(filteredConversations).length === 0) {
|
|
2098
|
-
filteredConversations = [{ id: "13", noIcon: true, text: "No results found" }];
|
|
2157
|
+
const [filteredConversations, setFilteredConversations] = (0, import_react8.useState)(conversations);
|
|
2158
|
+
const onSelectItemInHistory = (selected) => {
|
|
2159
|
+
log.debug("Selected conversation with ID:", selected);
|
|
2160
|
+
const dialog = dialogs.find((c) => c.id === selected);
|
|
2161
|
+
if (dialog) {
|
|
2162
|
+
setMessages2(dialog.messages);
|
|
2163
|
+
setIsDrawerOpen(!isDrawerOpen);
|
|
2164
|
+
}
|
|
2165
|
+
};
|
|
2166
|
+
const handleSearchTextChange = (value) => {
|
|
2167
|
+
if (value.trim() === "") {
|
|
2168
|
+
setFilteredConversations(conversations);
|
|
2169
|
+
return;
|
|
2099
2170
|
}
|
|
2100
|
-
|
|
2171
|
+
const filtered = conversations.filter((c) => c.text.toLowerCase().includes(value.toLowerCase()));
|
|
2172
|
+
log.debug("Filtered conversations:", filtered);
|
|
2173
|
+
setFilteredConversations(filtered);
|
|
2101
2174
|
};
|
|
2102
2175
|
const displayMode = import_Chatbot.ChatbotDisplayMode.drawer;
|
|
2103
2176
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_Chatbot.default, { isCompact: true, displayMode, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
@@ -2108,25 +2181,18 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2108
2181
|
displayMode,
|
|
2109
2182
|
onDrawerToggle: () => {
|
|
2110
2183
|
setIsDrawerOpen(!isDrawerOpen);
|
|
2111
|
-
|
|
2184
|
+
setFilteredConversations(conversations);
|
|
2112
2185
|
},
|
|
2113
2186
|
isDrawerOpen,
|
|
2114
2187
|
setIsDrawerOpen,
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
conversations,
|
|
2188
|
+
onSelectActiveItem: (_e, selectedItem) => onSelectItemInHistory(String(selectedItem)),
|
|
2189
|
+
conversations: [...filteredConversations].reverse(),
|
|
2118
2190
|
onNewChat: () => {
|
|
2119
2191
|
setIsDrawerOpen(!isDrawerOpen);
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
},
|
|
2123
|
-
handleTextInputChange: (value) => {
|
|
2124
|
-
if (value === "") {
|
|
2125
|
-
setConversations(initialConversations);
|
|
2126
|
-
}
|
|
2127
|
-
const newConversations = findMatchingItems(value);
|
|
2128
|
-
setConversations(newConversations);
|
|
2192
|
+
setFilteredConversations(conversations);
|
|
2193
|
+
setMessages2([]);
|
|
2129
2194
|
},
|
|
2195
|
+
handleTextInputChange: handleSearchTextChange,
|
|
2130
2196
|
drawerContent: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
2131
2197
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(DiagnosisChatbotHeader, { isDrawerOpen, setIsDrawerOpen }),
|
|
2132
2198
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(DiagnosisChatbotContent, {}),
|
|
@@ -2163,8 +2229,8 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2163
2229
|
] }, message.id)) }) });
|
|
2164
2230
|
};
|
|
2165
2231
|
DiagnosisChatbotFooter = () => {
|
|
2166
|
-
const username =
|
|
2167
|
-
const { messages,
|
|
2232
|
+
const { username } = (0, import_react8.useContext)(import_ui.PageContext);
|
|
2233
|
+
const { messages, setAnnouncement, isSendButtonDisabled, setIsSendButtonDisabled, updateConversations } = (0, import_react8.useContext)(ChatbotContext);
|
|
2168
2234
|
const messagesRef = (0, import_react8.useRef)(messages);
|
|
2169
2235
|
(0, import_react8.useEffect)(() => {
|
|
2170
2236
|
messagesRef.current = messages;
|
|
@@ -2179,17 +2245,18 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2179
2245
|
newMessages.push(...messagesRef.current);
|
|
2180
2246
|
newMessages.push(aiService.createUserMessage(username, message));
|
|
2181
2247
|
newMessages.push(aiService.createLoadingBotMessage());
|
|
2182
|
-
|
|
2248
|
+
updateConversations(newMessages);
|
|
2183
2249
|
setAnnouncement(`Message from User: ${message}. Message from Bot is loading.`);
|
|
2184
2250
|
log.debug("handleSend - new messages:", newMessages);
|
|
2185
|
-
const
|
|
2251
|
+
const dialogId = newMessages[0].id;
|
|
2252
|
+
const answer = await (newMessages.length === 2 ? aiService.newChat(dialogId, message) : aiService.chat(dialogId, message));
|
|
2186
2253
|
const loadedMessages = [];
|
|
2187
2254
|
loadedMessages.push(...newMessages);
|
|
2188
2255
|
log.debug("handleSend - loaded messages:", loadedMessages);
|
|
2189
2256
|
loadedMessages.pop();
|
|
2190
2257
|
const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove);
|
|
2191
2258
|
loadedMessages.push(botMessage);
|
|
2192
|
-
|
|
2259
|
+
updateConversations(loadedMessages);
|
|
2193
2260
|
setAnnouncement(`Message from Bot: ${answer}`);
|
|
2194
2261
|
setIsSendButtonDisabled(false);
|
|
2195
2262
|
};
|
|
@@ -2216,8 +2283,8 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2216
2283
|
] }) }, index);
|
|
2217
2284
|
};
|
|
2218
2285
|
ToolCallsApprove = (toolCalls) => {
|
|
2219
|
-
const username =
|
|
2220
|
-
const { messages,
|
|
2286
|
+
const { username } = (0, import_react8.useContext)(import_ui.PageContext);
|
|
2287
|
+
const { messages, setAnnouncement, setIsSendButtonDisabled, updateConversations } = (0, import_react8.useContext)(ChatbotContext);
|
|
2221
2288
|
const messagesRef = (0, import_react8.useRef)(messages);
|
|
2222
2289
|
const approve = async (toolCalls2) => {
|
|
2223
2290
|
log.debug("Approved", messagesRef.current);
|
|
@@ -2226,7 +2293,7 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2226
2293
|
newMessages.push(...messagesRef.current);
|
|
2227
2294
|
newMessages.push(aiService.createUserMessage(username, "Approved"));
|
|
2228
2295
|
newMessages.push(aiService.createLoadingBotMessage());
|
|
2229
|
-
|
|
2296
|
+
updateConversations(newMessages);
|
|
2230
2297
|
setAnnouncement(`User approved tool usage. Message from Bot is loading.`);
|
|
2231
2298
|
log.debug("approve - newMessages:", newMessages);
|
|
2232
2299
|
const answer = await aiService.invokeTools(toolCalls2);
|
|
@@ -2237,7 +2304,7 @@ var init_DiagnosisChatbot = __esm({
|
|
|
2237
2304
|
loadedMessages.pop();
|
|
2238
2305
|
const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove);
|
|
2239
2306
|
loadedMessages.push(botMessage);
|
|
2240
|
-
|
|
2307
|
+
updateConversations(loadedMessages);
|
|
2241
2308
|
setAnnouncement(`Message from Bot: ${answer}`);
|
|
2242
2309
|
setIsSendButtonDisabled(false);
|
|
2243
2310
|
};
|
|
@@ -3186,11 +3253,12 @@ What potential issues or anomalies do you see?`;
|
|
|
3186
3253
|
});
|
|
3187
3254
|
|
|
3188
3255
|
// src/ai-plugin/jmx-ai/attributes/Attributes.tsx
|
|
3189
|
-
var import_react12, import_react_core4, import_react_icons2, import_react_table, import_react13, import_jsx_runtime4, Attributes, AiJmxToolbar;
|
|
3256
|
+
var import_react12, import_ui2, import_react_core4, import_react_icons2, import_react_table, import_react13, import_jsx_runtime4, Attributes, AiJmxToolbar;
|
|
3190
3257
|
var init_Attributes = __esm({
|
|
3191
3258
|
"src/ai-plugin/jmx-ai/attributes/Attributes.tsx"() {
|
|
3192
3259
|
"use strict";
|
|
3193
3260
|
import_react12 = require("@hawtio/react");
|
|
3261
|
+
import_ui2 = require("@hawtio/react/ui");
|
|
3194
3262
|
import_react_core4 = require("@patternfly/react-core");
|
|
3195
3263
|
import_react_icons2 = require("@patternfly/react-icons");
|
|
3196
3264
|
import_react_table = require("@patternfly/react-table");
|
|
@@ -3198,11 +3266,11 @@ var init_Attributes = __esm({
|
|
|
3198
3266
|
import_react13 = require("react");
|
|
3199
3267
|
init_ai_service();
|
|
3200
3268
|
init_context();
|
|
3269
|
+
init_DiagnosisChatbot();
|
|
3201
3270
|
init_globals();
|
|
3202
3271
|
init_jmx_ai_service();
|
|
3203
3272
|
init_util();
|
|
3204
3273
|
init_attribute_service();
|
|
3205
|
-
init_DiagnosisChatbot();
|
|
3206
3274
|
import_jsx_runtime4 = require("react/jsx-runtime");
|
|
3207
3275
|
Attributes = () => {
|
|
3208
3276
|
const { selectedNode } = (0, import_react13.useContext)(MBeanTreeContext);
|
|
@@ -3310,8 +3378,8 @@ var init_Attributes = __esm({
|
|
|
3310
3378
|
};
|
|
3311
3379
|
AiJmxToolbar = ({ attributes }) => {
|
|
3312
3380
|
const { selectedNode } = (0, import_react13.useContext)(MBeanTreeContext);
|
|
3313
|
-
const username =
|
|
3314
|
-
const {
|
|
3381
|
+
const { username } = (0, import_react13.useContext)(import_ui2.PageContext);
|
|
3382
|
+
const { setAnnouncement, setIsChatbotOpen, updateConversations } = (0, import_react13.useContext)(ChatbotContext);
|
|
3315
3383
|
if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {
|
|
3316
3384
|
return null;
|
|
3317
3385
|
}
|
|
@@ -3325,17 +3393,18 @@ var init_Attributes = __esm({
|
|
|
3325
3393
|
const newMessages = [];
|
|
3326
3394
|
newMessages.push(aiService.createUserMessage(username, diagnoseMessage));
|
|
3327
3395
|
newMessages.push(aiService.createLoadingBotMessage());
|
|
3328
|
-
|
|
3396
|
+
updateConversations(newMessages, `Diagnose ${objectName}`);
|
|
3329
3397
|
setAnnouncement("Diagnosis in progress...");
|
|
3330
3398
|
log.debug("diagnose - new messages:", newMessages);
|
|
3331
|
-
const
|
|
3399
|
+
const dialogId = newMessages[0].id;
|
|
3400
|
+
const answer = await aiService.newChat(dialogId, diagnoseMessage, systemMessage);
|
|
3332
3401
|
const loadedMessages = [];
|
|
3333
3402
|
loadedMessages.push(...newMessages);
|
|
3334
3403
|
log.debug("diagnose - loaded messages:", loadedMessages);
|
|
3335
3404
|
loadedMessages.pop();
|
|
3336
3405
|
const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove);
|
|
3337
3406
|
loadedMessages.push(botMessage);
|
|
3338
|
-
|
|
3407
|
+
updateConversations(loadedMessages);
|
|
3339
3408
|
setAnnouncement("Diagnosis complete.");
|
|
3340
3409
|
};
|
|
3341
3410
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_core4.Toolbar, { id: "ai-jmx-toolbar", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_core4.ToolbarContent, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_core4.ToolbarItem, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_core4.Button, { variant: "primary", size: "sm", icon: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_icons2.MonitoringIcon, {}), onClick: diagnose, children: "Diagnose" }) }) }) });
|
|
@@ -3682,7 +3751,7 @@ var plugin = () => {
|
|
|
3682
3751
|
aiCommon();
|
|
3683
3752
|
jmxAi();
|
|
3684
3753
|
};
|
|
3685
|
-
import_react19.configManager.addProductInfo("Hawtio AI Plugin", "0.2.
|
|
3754
|
+
import_react19.configManager.addProductInfo("Hawtio AI Plugin", "0.2.1");
|
|
3686
3755
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3687
3756
|
0 && (module.exports = {
|
|
3688
3757
|
plugin
|