@stack-spot/ai-chat-widget 1.1.1 → 1.3.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/CHANGELOG.md +16 -0
- package/dist/StackspotAIWidget.d.ts +1 -12
- package/dist/StackspotAIWidget.d.ts.map +1 -1
- package/dist/StackspotAIWidget.js +5 -18
- package/dist/StackspotAIWidget.js.map +1 -1
- package/dist/chat-interceptors/quick-commands.js +1 -1
- package/dist/chat-interceptors/quick-commands.js.map +1 -1
- package/dist/chat-interceptors/send-message.d.ts.map +1 -1
- package/dist/chat-interceptors/send-message.js +21 -2
- package/dist/chat-interceptors/send-message.js.map +1 -1
- package/dist/components/AutoFocus.d.ts.map +1 -1
- package/dist/components/AutoFocus.js +8 -1
- package/dist/components/AutoFocus.js.map +1 -1
- package/dist/components/FadingOverflow.js +2 -2
- package/dist/components/FadingOverflow.js.map +1 -1
- package/dist/components/QuickStartButton.d.ts +6 -1
- package/dist/components/QuickStartButton.d.ts.map +1 -1
- package/dist/components/QuickStartButton.js +6 -2
- package/dist/components/QuickStartButton.js.map +1 -1
- package/dist/components/RightPanelForm.d.ts.map +1 -1
- package/dist/components/RightPanelForm.js +2 -1
- package/dist/components/RightPanelForm.js.map +1 -1
- package/dist/context/hooks.d.ts +2 -7
- package/dist/context/hooks.d.ts.map +1 -1
- package/dist/context/hooks.js +4 -16
- package/dist/context/hooks.js.map +1 -1
- package/dist/features.d.ts +16 -17
- package/dist/features.d.ts.map +1 -1
- package/dist/features.js +17 -9
- package/dist/features.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/layout.css +7 -0
- package/dist/state/ChatState.d.ts +23 -3
- package/dist/state/ChatState.d.ts.map +1 -1
- package/dist/state/ChatState.js +5 -2
- package/dist/state/ChatState.js.map +1 -1
- package/dist/state/ChatTabsController.d.ts +21 -3
- package/dist/state/ChatTabsController.d.ts.map +1 -1
- package/dist/state/ChatTabsController.js +49 -11
- package/dist/state/ChatTabsController.js.map +1 -1
- package/dist/state/WidgetState.d.ts +50 -1
- package/dist/state/WidgetState.d.ts.map +1 -1
- package/dist/state/WidgetState.js +55 -2
- package/dist/state/WidgetState.js.map +1 -1
- package/dist/utils/chat.d.ts +1 -8
- package/dist/utils/chat.d.ts.map +1 -1
- package/dist/utils/chat.js +0 -15
- package/dist/utils/chat.js.map +1 -1
- package/dist/views/Agents/AgentDescription.d.ts +9 -0
- package/dist/views/Agents/AgentDescription.d.ts.map +1 -0
- package/dist/views/Agents/AgentDescription.js +21 -0
- package/dist/views/Agents/AgentDescription.js.map +1 -0
- package/dist/views/Agents/AgentsPanel.d.ts +5 -0
- package/dist/views/Agents/AgentsPanel.d.ts.map +1 -0
- package/dist/views/Agents/AgentsPanel.js +19 -0
- package/dist/views/Agents/AgentsPanel.js.map +1 -0
- package/dist/views/Agents/AgentsTab.d.ts +5 -0
- package/dist/views/Agents/AgentsTab.d.ts.map +1 -0
- package/dist/views/Agents/AgentsTab.js +43 -0
- package/dist/views/Agents/AgentsTab.js.map +1 -0
- package/dist/views/Agents/dictionary.d.ts +2 -0
- package/dist/views/Agents/dictionary.d.ts.map +1 -0
- package/dist/views/Agents/dictionary.js +35 -0
- package/dist/views/Agents/dictionary.js.map +1 -0
- package/dist/views/Agents/index.d.ts +5 -0
- package/dist/views/Agents/index.d.ts.map +1 -0
- package/dist/views/Agents/index.js +21 -0
- package/dist/views/Agents/index.js.map +1 -0
- package/dist/views/Agents/styled.d.ts +3 -0
- package/dist/views/Agents/styled.d.ts.map +1 -0
- package/dist/views/Agents/styled.js +58 -0
- package/dist/views/Agents/styled.js.map +1 -0
- package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
- package/dist/views/Chat/ChatMessage.js +1 -1
- package/dist/views/Chat/ChatMessage.js.map +1 -1
- package/dist/views/Chat/index.js +1 -1
- package/dist/views/Chat/index.js.map +1 -1
- package/dist/views/Chat/styled.js +1 -1
- package/dist/views/ChatHistory/ChatHistoryPanel.d.ts +1 -4
- package/dist/views/ChatHistory/ChatHistoryPanel.d.ts.map +1 -1
- package/dist/views/ChatHistory/ChatHistoryPanel.js +2 -2
- package/dist/views/ChatHistory/ChatHistoryPanel.js.map +1 -1
- package/dist/views/ChatHistory/HistoryItem.d.ts +1 -3
- package/dist/views/ChatHistory/HistoryItem.d.ts.map +1 -1
- package/dist/views/ChatHistory/HistoryItem.js +2 -2
- package/dist/views/ChatHistory/HistoryItem.js.map +1 -1
- package/dist/views/ChatHistory/index.d.ts +1 -9
- package/dist/views/ChatHistory/index.d.ts.map +1 -1
- package/dist/views/ChatHistory/index.js +2 -2
- package/dist/views/ChatHistory/index.js.map +1 -1
- package/dist/views/ChatTabSelection.d.ts +1 -7
- package/dist/views/ChatTabSelection.d.ts.map +1 -1
- package/dist/views/ChatTabSelection.js +7 -7
- package/dist/views/ChatTabSelection.js.map +1 -1
- package/dist/views/Editor.d.ts.map +1 -1
- package/dist/views/Editor.js +4 -1
- package/dist/views/Editor.js.map +1 -1
- package/dist/views/Home/BuiltInAgent.d.ts +6 -0
- package/dist/views/Home/BuiltInAgent.d.ts.map +1 -0
- package/dist/views/{Home.js → Home/BuiltInAgent.js} +7 -41
- package/dist/views/Home/BuiltInAgent.js.map +1 -0
- package/dist/views/Home/CustomAgent.d.ts +5 -0
- package/dist/views/Home/CustomAgent.d.ts.map +1 -0
- package/dist/views/Home/CustomAgent.js +24 -0
- package/dist/views/Home/CustomAgent.js.map +1 -0
- package/dist/views/Home/index.d.ts +8 -0
- package/dist/views/Home/index.d.ts.map +1 -0
- package/dist/views/Home/index.js +15 -0
- package/dist/views/Home/index.js.map +1 -0
- package/dist/views/Home/styled.d.ts +2 -0
- package/dist/views/Home/styled.d.ts.map +1 -0
- package/dist/views/Home/styled.js +59 -0
- package/dist/views/Home/styled.js.map +1 -0
- package/dist/views/Home/types.d.ts +7 -0
- package/dist/views/Home/types.d.ts.map +1 -0
- package/dist/views/Home/types.js +2 -0
- package/dist/views/Home/types.js.map +1 -0
- package/dist/views/KnowledgeSources.js +1 -1
- package/dist/views/KnowledgeSources.js.map +1 -1
- package/dist/views/MessageInput/ButtonGroup.d.ts +1 -6
- package/dist/views/MessageInput/ButtonGroup.d.ts.map +1 -1
- package/dist/views/MessageInput/ButtonGroup.js +12 -4
- package/dist/views/MessageInput/ButtonGroup.js.map +1 -1
- package/dist/views/MessageInput/InfoBar.d.ts.map +1 -1
- package/dist/views/MessageInput/InfoBar.js +16 -6
- package/dist/views/MessageInput/InfoBar.js.map +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.d.ts.map +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.js +2 -1
- package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -1
- package/dist/views/MessageInput/dictionary.d.ts +1 -1
- package/dist/views/MessageInput/index.d.ts +1 -9
- package/dist/views/MessageInput/index.d.ts.map +1 -1
- package/dist/views/MessageInput/index.js +2 -2
- package/dist/views/MessageInput/index.js.map +1 -1
- package/dist/views/MessageInput/styled.d.ts.map +1 -1
- package/dist/views/MessageInput/styled.js +6 -2
- package/dist/views/MessageInput/styled.js.map +1 -1
- package/dist/views/MinimizedHeader.d.ts.map +1 -1
- package/dist/views/MinimizedHeader.js +2 -3
- package/dist/views/MinimizedHeader.js.map +1 -1
- package/dist/views/Stacks.js +2 -1
- package/dist/views/Stacks.js.map +1 -1
- package/dist/views/Workspaces.js +2 -1
- package/dist/views/Workspaces.js.map +1 -1
- package/package.json +2 -2
- package/src/StackspotAIWidget.tsx +6 -32
- package/src/chat-interceptors/quick-commands.ts +1 -1
- package/src/chat-interceptors/send-message.ts +22 -2
- package/src/components/AutoFocus.tsx +9 -1
- package/src/components/FadingOverflow.tsx +2 -2
- package/src/components/QuickStartButton.tsx +17 -5
- package/src/components/RightPanelForm.tsx +2 -1
- package/src/context/hooks.ts +8 -20
- package/src/features.ts +27 -24
- package/src/index.ts +6 -0
- package/src/layout.css +7 -0
- package/src/state/ChatState.ts +26 -4
- package/src/state/ChatTabsController.ts +50 -11
- package/src/state/WidgetState.ts +88 -2
- package/src/utils/chat.ts +1 -18
- package/src/views/Agents/AgentDescription.tsx +48 -0
- package/src/views/Agents/AgentsPanel.tsx +19 -0
- package/src/views/Agents/AgentsTab.tsx +80 -0
- package/src/views/Agents/dictionary.ts +36 -0
- package/src/views/Agents/index.tsx +26 -0
- package/src/views/Agents/styled.ts +59 -0
- package/src/views/Chat/ChatMessage.tsx +19 -17
- package/src/views/Chat/index.tsx +1 -1
- package/src/views/Chat/styled.ts +1 -1
- package/src/views/ChatHistory/ChatHistoryPanel.tsx +2 -3
- package/src/views/ChatHistory/HistoryItem.tsx +3 -3
- package/src/views/ChatHistory/index.tsx +2 -10
- package/src/views/ChatTabSelection.tsx +8 -13
- package/src/views/Editor.tsx +4 -1
- package/src/views/{Home.tsx → Home/BuiltInAgent.tsx} +7 -48
- package/src/views/Home/CustomAgent.tsx +39 -0
- package/src/views/Home/index.tsx +20 -0
- package/src/views/Home/styled.ts +59 -0
- package/src/views/Home/types.ts +6 -0
- package/src/views/KnowledgeSources.tsx +2 -2
- package/src/views/MessageInput/ButtonGroup.tsx +15 -12
- package/src/views/MessageInput/InfoBar.tsx +25 -9
- package/src/views/MessageInput/QuickCommandSelector.tsx +2 -1
- package/src/views/MessageInput/index.tsx +1 -10
- package/src/views/MessageInput/styled.ts +6 -2
- package/src/views/MinimizedHeader.tsx +2 -3
- package/src/views/Stacks.tsx +3 -2
- package/src/views/Workspaces.tsx +3 -2
- package/dist/views/Agents.d.ts +0 -2
- package/dist/views/Agents.d.ts.map +0 -1
- package/dist/views/Agents.js +0 -146
- package/dist/views/Agents.js.map +0 -1
- package/dist/views/Home.d.ts +0 -14
- package/dist/views/Home.d.ts.map +0 -1
- package/dist/views/Home.js.map +0 -1
- package/src/views/Agents.tsx +0 -203
package/dist/features.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Receives a partial feature object and returns a full feature object, setting to true any missing property.
|
|
3
|
+
* @param features the partial features object.
|
|
4
|
+
* @returns a full features object.
|
|
5
|
+
*/
|
|
6
|
+
export function getFeaturesWithDefaults(features) {
|
|
7
|
+
return {
|
|
8
|
+
agent: true,
|
|
9
|
+
editor: true,
|
|
10
|
+
knowledgeSource: true,
|
|
11
|
+
quickCommands: true,
|
|
12
|
+
stack: true,
|
|
13
|
+
workspace: true,
|
|
14
|
+
chatHistory: true,
|
|
15
|
+
...features,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
10
18
|
//# sourceMappingURL=features.js.map
|
package/dist/features.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAoCA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAoC;IAC1E,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,GAAG,QAAQ;KACZ,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export { QuickStartButton } from './components/QuickStartButton.js';
|
|
1
2
|
export { AIWidgetProvider } from './context/AIWidgetProvider.js';
|
|
2
3
|
export * from './context/hooks.js';
|
|
4
|
+
export { getFeaturesWithDefaults } from './features.js';
|
|
5
|
+
export type { AIWidgetFeatures, ChatFeatures } from './features.js';
|
|
3
6
|
export { StackspotAIWidget } from './StackspotAIWidget.js';
|
|
4
7
|
export { ChatEntry } from './state/ChatEntry.js';
|
|
5
8
|
export { ChatState } from './state/ChatState.js';
|
|
6
9
|
export { ChatTabsController } from './state/ChatTabsController.js';
|
|
7
10
|
export { ObservableState } from './state/ObservableState.js';
|
|
11
|
+
export type { Labeled, LabeledWithImage } from './state/types.js';
|
|
8
12
|
export { WidgetState } from './state/WidgetState.js';
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/* Attention: in order for the package "page" to work without linking the lib, we must export types separately, using the "type" keyword */
|
|
2
|
+
export { QuickStartButton } from './components/QuickStartButton.js';
|
|
1
3
|
export { AIWidgetProvider } from './context/AIWidgetProvider.js';
|
|
2
4
|
export * from './context/hooks.js';
|
|
5
|
+
export { getFeaturesWithDefaults } from './features.js';
|
|
3
6
|
export { StackspotAIWidget } from './StackspotAIWidget.js';
|
|
4
7
|
export { ChatEntry } from './state/ChatEntry.js';
|
|
5
8
|
export { ChatState } from './state/ChatState.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2IAA2I;AAE3I,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/layout.css
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { ChatFeatures } from '../features.js';
|
|
1
2
|
import { ChatEntry } from './ChatEntry.js';
|
|
2
3
|
import { ObservableState } from './ObservableState.js';
|
|
3
4
|
import { Labeled, LabeledWithImage } from './types.js';
|
|
4
|
-
export interface
|
|
5
|
+
export interface ChatPropertiesWithOptionalFeatures {
|
|
5
6
|
/**
|
|
6
7
|
* The name of the chat.
|
|
7
8
|
*/
|
|
@@ -44,6 +45,18 @@ export interface ChatProperties {
|
|
|
44
45
|
* The current selection in the editor.
|
|
45
46
|
*/
|
|
46
47
|
codeSelection?: string;
|
|
48
|
+
/**
|
|
49
|
+
* The features enabled for this chat.
|
|
50
|
+
*
|
|
51
|
+
* If a feature is marked as false, it's disabled, otherwise it's enabled.
|
|
52
|
+
*/
|
|
53
|
+
features?: Partial<ChatFeatures>;
|
|
54
|
+
}
|
|
55
|
+
export interface ChatProperties extends ChatPropertiesWithOptionalFeatures {
|
|
56
|
+
/**
|
|
57
|
+
* The features enabled for this chat.
|
|
58
|
+
*/
|
|
59
|
+
features: ChatFeatures;
|
|
47
60
|
}
|
|
48
61
|
type ChatMessagesListener = (chat: ChatEntry[]) => void;
|
|
49
62
|
export type MessageInterceptor = (entry: ChatEntry, chat: ChatState, signal: AbortSignal) => boolean | undefined | void | Promise<boolean | undefined | void>;
|
|
@@ -55,7 +68,7 @@ interface Options {
|
|
|
55
68
|
/**
|
|
56
69
|
* The initial value for the state of this chat.
|
|
57
70
|
*/
|
|
58
|
-
initial:
|
|
71
|
+
initial: ChatPropertiesWithOptionalFeatures;
|
|
59
72
|
/**
|
|
60
73
|
* The interceptors to use for the messages pushed to this chat.
|
|
61
74
|
*
|
|
@@ -79,6 +92,12 @@ interface Options {
|
|
|
79
92
|
* The content of this chat, i.e. its messages.
|
|
80
93
|
*/
|
|
81
94
|
entries?: ChatEntry[];
|
|
95
|
+
/**
|
|
96
|
+
* Whether or not the label for this chat is real (persisted in the backend) or just a mock.
|
|
97
|
+
*
|
|
98
|
+
* This should be true if the label is just a mock.
|
|
99
|
+
*/
|
|
100
|
+
untitled?: boolean;
|
|
82
101
|
}
|
|
83
102
|
/**
|
|
84
103
|
* A chat. Each chat tab is a different ChatState.
|
|
@@ -96,7 +115,8 @@ export declare class ChatState extends ObservableState<ChatProperties> {
|
|
|
96
115
|
* Abort signals currently active.
|
|
97
116
|
*/
|
|
98
117
|
private abortions;
|
|
99
|
-
|
|
118
|
+
untitled: boolean;
|
|
119
|
+
constructor({ id, initial, entries, interceptors, untitled }: Options);
|
|
100
120
|
private runMessagesListeners;
|
|
101
121
|
private runInterceptors;
|
|
102
122
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatState.d.ts","sourceRoot":"","sources":["../../src/state/ChatState.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEnD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"ChatState.d.ts","sourceRoot":"","sources":["../../src/state/ChatState.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAA2B,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEnD,MAAM,WAAW,kCAAkC;IACjD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAe,SAAQ,kCAAkC;IACxE;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,KAAK,oBAAoB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;AAEvD,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,KACnD,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;AAErE,UAAU,OAAO;IACf;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,kCAAkC,CAAC;IAC5C;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,eAAe,CAAC,cAAc,CAAC;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD;;OAEG;IACH,iBAAiB,mBAAyB;IAC1C;;OAEG;IACH,OAAO,CAAC,SAAS,CAAwB;IACzC,QAAQ,EAAE,OAAO,CAAA;gBAEL,EAAE,EAAE,EAAE,OAAO,EAAE,OAAY,EAAE,YAAiB,EAAE,QAAgB,EAAE,EAAE,OAAO;IAQvF,OAAO,CAAC,oBAAoB;YAId,eAAe;IAe7B;;;OAGG;IACH,WAAW,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE;IAOnC;;;OAGG;IACH,UAAU,CAAC,QAAQ,SAAI;IAKvB;;OAEG;IACH,WAAW;IAIX;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB;IAO/C;;OAEG;IACH,KAAK;IAKL;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM;CAUhC"}
|
package/dist/state/ChatState.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { dropRight, last, pull } from 'lodash';
|
|
2
2
|
import { ulid } from 'ulid';
|
|
3
3
|
import { AbortedError } from '../AbortedError.js';
|
|
4
|
+
import { getFeaturesWithDefaults } from '../features.js';
|
|
4
5
|
import { ObservableState } from './ObservableState.js';
|
|
5
6
|
/**
|
|
6
7
|
* A chat. Each chat tab is a different ChatState.
|
|
@@ -18,11 +19,13 @@ export class ChatState extends ObservableState {
|
|
|
18
19
|
* Abort signals currently active.
|
|
19
20
|
*/
|
|
20
21
|
abortions = [];
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
untitled;
|
|
23
|
+
constructor({ id, initial, entries = [], interceptors = [], untitled = false }) {
|
|
24
|
+
super({ ...initial, features: getFeaturesWithDefaults(initial.features) });
|
|
23
25
|
this.id = id;
|
|
24
26
|
this.interceptors = interceptors;
|
|
25
27
|
this.entries = entries;
|
|
28
|
+
this.untitled = untitled;
|
|
26
29
|
}
|
|
27
30
|
runMessagesListeners() {
|
|
28
31
|
this.messagesListeners.forEach(l => l(this.entries));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatState.js","sourceRoot":"","sources":["../../src/state/ChatState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"ChatState.js","sourceRoot":"","sources":["../../src/state/ChatState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChatState } from './ChatState.js';
|
|
2
|
-
type TabChangeListener = (chats: ChatState[],
|
|
2
|
+
type TabChangeListener = (chats: ChatState[], active: ChatState) => void;
|
|
3
3
|
/**
|
|
4
4
|
* Controls the chat tabs.
|
|
5
5
|
*/
|
|
@@ -14,19 +14,37 @@ export declare class ChatTabsController {
|
|
|
14
14
|
*/
|
|
15
15
|
add(...chats: ChatState[]): void;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* If the active chat is deleted, this selects a new chat based on the position of the chat that has been removed.
|
|
18
|
+
*
|
|
19
|
+
* @param previous the previous tabs.
|
|
20
|
+
* @param deleted the ids of the chats that have been deleted.
|
|
21
|
+
*/
|
|
22
|
+
private reselect;
|
|
23
|
+
/**
|
|
24
|
+
* Removes chats from the tab view. This will never remove a chat if this chat is the last one.
|
|
25
|
+
*
|
|
18
26
|
* @param ids the ids of the chats to remove.
|
|
19
27
|
*/
|
|
20
28
|
remove(...ids: string[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Removes all empty chats. The last chat will be kept if it's empty, but the only chat remaining.
|
|
31
|
+
*
|
|
32
|
+
* @param exceptions ids of chats that shouldn't be removed even if empty.
|
|
33
|
+
*/
|
|
34
|
+
removeEmptyChats(...exceptions: string[]): void;
|
|
21
35
|
/**
|
|
22
36
|
* @param id the id of the chat to retrieve.
|
|
23
37
|
* @returns a ChatState corresponding to the id.
|
|
24
38
|
*/
|
|
25
39
|
get(id: string): ChatState | undefined;
|
|
26
40
|
/**
|
|
27
|
-
* @returns the
|
|
41
|
+
* @returns the id of the chat corresponding to the tab that is currently active.
|
|
28
42
|
*/
|
|
29
43
|
getActiveChatId(): string;
|
|
44
|
+
/**
|
|
45
|
+
* @returns the chat corresponding to the tab that is currently active.
|
|
46
|
+
*/
|
|
47
|
+
getActiveChat(): ChatState;
|
|
30
48
|
/**
|
|
31
49
|
* @returns all chats in tab view.
|
|
32
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatTabsController.d.ts","sourceRoot":"","sources":["../../src/state/ChatTabsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"ChatTabsController.d.ts","sourceRoot":"","sources":["../../src/state/ChatTabsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAA;AAExE;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE;IAMzB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAQhB;;;;OAIG;IACH,MAAM,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE;IASvB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE;IAYxC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM;IAId;;OAEG;IACH,eAAe;IAIf;;OAEG;IACH,aAAa;IAMb;;OAEG;IACH,MAAM;IAIN;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IAOpC;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM;CAIlB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { last, pull } from 'lodash';
|
|
1
|
+
import { groupBy, last, pull } from 'lodash';
|
|
2
2
|
/**
|
|
3
3
|
* Controls the chat tabs.
|
|
4
4
|
*/
|
|
@@ -7,7 +7,7 @@ export class ChatTabsController {
|
|
|
7
7
|
activeChatId = '';
|
|
8
8
|
listeners = [];
|
|
9
9
|
runListeners() {
|
|
10
|
-
this.listeners.forEach(l => l(this.chats, this.
|
|
10
|
+
this.listeners.forEach(l => l(this.chats, this.getActiveChat()));
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Adds new chats to the tab view.
|
|
@@ -20,21 +20,50 @@ export class ChatTabsController {
|
|
|
20
20
|
this.runListeners();
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* If the active chat is deleted, this selects a new chat based on the position of the chat that has been removed.
|
|
24
|
+
*
|
|
25
|
+
* @param previous the previous tabs.
|
|
26
|
+
* @param deleted the ids of the chats that have been deleted.
|
|
25
27
|
*/
|
|
26
|
-
|
|
27
|
-
if (this.
|
|
28
|
-
|
|
29
|
-
const currentActiveIndex = this.chats.findIndex(c => c.id === this.activeChatId);
|
|
30
|
-
this.chats = this.chats.filter(c => !ids.includes(c.id));
|
|
31
|
-
if (ids.includes(this.activeChatId)) {
|
|
28
|
+
reselect(previous, deleted) {
|
|
29
|
+
if (deleted.includes(this.activeChatId)) {
|
|
30
|
+
const currentActiveIndex = previous.findIndex(c => c.id === this.activeChatId);
|
|
32
31
|
if (currentActiveIndex === -1)
|
|
33
32
|
this.activeChatId = this.chats[0]?.id;
|
|
34
33
|
this.activeChatId = currentActiveIndex < this.chats.length ? this.chats[currentActiveIndex].id : last(this.chats)?.id ?? '';
|
|
35
34
|
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Removes chats from the tab view. This will never remove a chat if this chat is the last one.
|
|
38
|
+
*
|
|
39
|
+
* @param ids the ids of the chats to remove.
|
|
40
|
+
*/
|
|
41
|
+
remove(...ids) {
|
|
42
|
+
ids.splice(this.chats.length - 1, ids.length - this.chats.length);
|
|
43
|
+
if (!ids.length)
|
|
44
|
+
return;
|
|
45
|
+
const previous = this.chats;
|
|
46
|
+
this.chats = this.chats.filter(c => !ids.includes(c.id));
|
|
47
|
+
this.reselect(previous, ids);
|
|
36
48
|
this.runListeners();
|
|
37
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Removes all empty chats. The last chat will be kept if it's empty, but the only chat remaining.
|
|
52
|
+
*
|
|
53
|
+
* @param exceptions ids of chats that shouldn't be removed even if empty.
|
|
54
|
+
*/
|
|
55
|
+
removeEmptyChats(...exceptions) {
|
|
56
|
+
const lastChat = last(this.chats);
|
|
57
|
+
const previous = this.chats;
|
|
58
|
+
const { true: removed, false: kept = [] } = groupBy(this.chats, c => c.getMessages().length === 0 && !exceptions.includes(c.id));
|
|
59
|
+
if (removed) {
|
|
60
|
+
this.chats = kept;
|
|
61
|
+
if (lastChat && this.chats.length === 0)
|
|
62
|
+
this.chats.push(lastChat);
|
|
63
|
+
this.reselect(previous, removed.map(c => c.id));
|
|
64
|
+
this.runListeners();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
38
67
|
/**
|
|
39
68
|
* @param id the id of the chat to retrieve.
|
|
40
69
|
* @returns a ChatState corresponding to the id.
|
|
@@ -43,11 +72,20 @@ export class ChatTabsController {
|
|
|
43
72
|
return this.chats.find(c => c.id === id);
|
|
44
73
|
}
|
|
45
74
|
/**
|
|
46
|
-
* @returns the
|
|
75
|
+
* @returns the id of the chat corresponding to the tab that is currently active.
|
|
47
76
|
*/
|
|
48
77
|
getActiveChatId() {
|
|
49
78
|
return this.activeChatId;
|
|
50
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* @returns the chat corresponding to the tab that is currently active.
|
|
82
|
+
*/
|
|
83
|
+
getActiveChat() {
|
|
84
|
+
const chat = this.chats.find(c => c.id === this.activeChatId);
|
|
85
|
+
if (!chat)
|
|
86
|
+
throw new Error('Chat state error, the active chat id corresponds to none chat in the tabs.');
|
|
87
|
+
return chat;
|
|
88
|
+
}
|
|
51
89
|
/**
|
|
52
90
|
* @returns all chats in tab view.
|
|
53
91
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatTabsController.js","sourceRoot":"","sources":["../../src/state/ChatTabsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"ChatTabsController.js","sourceRoot":"","sources":["../../src/state/ChatTabsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { AIWidgetFeatures, ChatFeatures, GlobalFeatures } from '../features.js';
|
|
2
|
+
import { ChatEntry } from './ChatEntry.js';
|
|
3
|
+
import { ChatPropertiesWithOptionalFeatures, ChatState, MessageInterceptor } from './ChatState.js';
|
|
1
4
|
import { ChatTabsController } from './ChatTabsController.js';
|
|
2
5
|
import { ObservableState } from './ObservableState.js';
|
|
3
6
|
export interface WidgetProperties {
|
|
@@ -18,6 +21,35 @@ export interface WidgetProperties {
|
|
|
18
21
|
* Whether or not the widget is in its minimized version.
|
|
19
22
|
*/
|
|
20
23
|
isMinimized?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Global features of the chat widget. These features don't depend on the chat currently selected.
|
|
26
|
+
*/
|
|
27
|
+
features: GlobalFeatures;
|
|
28
|
+
}
|
|
29
|
+
interface Options {
|
|
30
|
+
/**
|
|
31
|
+
* Chat interceptors allows you to intercept chat messages, interpret them, modify them and even change the chat flow. See
|
|
32
|
+
* {@link ChatState} for more details.
|
|
33
|
+
*
|
|
34
|
+
* These interceptors, in addition to the default interceptors, will be used when creating a new chat via `WidgetState#createChat`.
|
|
35
|
+
*/
|
|
36
|
+
interceptors?: MessageInterceptor[];
|
|
37
|
+
/**
|
|
38
|
+
* Features to enable in the widget. If a feature is not set explicitly to false, it's interpreted as enabled.
|
|
39
|
+
*
|
|
40
|
+
* These features will be used when creating a new chat via `WidgetState#createChat`. Updating chat features only influence new chats.
|
|
41
|
+
*/
|
|
42
|
+
features?: Partial<AIWidgetFeatures>;
|
|
43
|
+
/**
|
|
44
|
+
* The initial values for the widget state.
|
|
45
|
+
*
|
|
46
|
+
* The default value for each feature under `initial.features` is true.
|
|
47
|
+
*/
|
|
48
|
+
initial?: Omit<WidgetProperties, 'features'>;
|
|
49
|
+
/**
|
|
50
|
+
* The initial tabs for the chat window.
|
|
51
|
+
*/
|
|
52
|
+
chatTabs?: ChatTabsController;
|
|
21
53
|
}
|
|
22
54
|
/**
|
|
23
55
|
* Holds the full state of the AI Chat Widget.
|
|
@@ -26,6 +58,23 @@ export interface WidgetProperties {
|
|
|
26
58
|
*/
|
|
27
59
|
export declare class WidgetState extends ObservableState<WidgetProperties> {
|
|
28
60
|
readonly chatTabs: ChatTabsController;
|
|
29
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Chat interceptors to be used by default when creating a new chat.
|
|
63
|
+
*/
|
|
64
|
+
interceptors: MessageInterceptor[];
|
|
65
|
+
/**
|
|
66
|
+
* Chat features to be used by default when creating a new chat.
|
|
67
|
+
*/
|
|
68
|
+
chatFeatures: ChatFeatures;
|
|
69
|
+
constructor({ chatTabs, initial, interceptors, features }?: Options);
|
|
70
|
+
private getNextUntitledChatIndex;
|
|
71
|
+
/**
|
|
72
|
+
* Utility function for adding a new chat to the chat tabs. This also selects the new tab.
|
|
73
|
+
* @param properties the chat properties (initial state).
|
|
74
|
+
* @param entries the entries for the chat to start with.
|
|
75
|
+
* @returns the chat created.
|
|
76
|
+
*/
|
|
77
|
+
createChat({ label, ...properties }?: Partial<ChatPropertiesWithOptionalFeatures>, entries?: ChatEntry[]): ChatState;
|
|
30
78
|
}
|
|
79
|
+
export {};
|
|
31
80
|
//# sourceMappingURL=WidgetState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetState.d.ts","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WidgetState.d.ts","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAA2B,cAAc,EAAE,MAAM,aAAa,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,kCAAkC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;IACrF;;OAEG;IACH,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,UAAU,OAAO;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAID;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,eAAe,CAAC,gBAAgB,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC;;OAEG;IACH,YAAY,EAAE,kBAAkB,EAAE,CAAK;IACvC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAA;gBAEd,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAiB,EAAE,QAAQ,EAAE,GAAE,OAAY;IAc5E,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,GAAE,OAAO,CAAC,kCAAkC,CAAM,EAAE,OAAO,GAAE,SAAS,EAAO;CAYjH"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
import { loader } from '@monaco-editor/react';
|
|
2
|
+
import { ulid } from 'ulid';
|
|
3
|
+
import { quickCommandQuestionsInterceptor } from '../chat-interceptors/quick-command-questions.js';
|
|
4
|
+
import { createQuickCommandInterceptor } from '../chat-interceptors/quick-commands.js';
|
|
5
|
+
import { sendMessageInterceptor } from '../chat-interceptors/send-message.js';
|
|
6
|
+
import { getFeaturesWithDefaults } from '../features.js';
|
|
7
|
+
import { ChatState } from './ChatState.js';
|
|
1
8
|
import { ChatTabsController } from './ChatTabsController.js';
|
|
2
9
|
import { ObservableState } from './ObservableState.js';
|
|
10
|
+
const untitledChatPrefix = 'Chat ';
|
|
3
11
|
/**
|
|
4
12
|
* Holds the full state of the AI Chat Widget.
|
|
5
13
|
*
|
|
@@ -7,9 +15,54 @@ import { ObservableState } from './ObservableState.js';
|
|
|
7
15
|
*/
|
|
8
16
|
export class WidgetState extends ObservableState {
|
|
9
17
|
chatTabs;
|
|
10
|
-
|
|
11
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Chat interceptors to be used by default when creating a new chat.
|
|
20
|
+
*/
|
|
21
|
+
interceptors = [];
|
|
22
|
+
/**
|
|
23
|
+
* Chat features to be used by default when creating a new chat.
|
|
24
|
+
*/
|
|
25
|
+
chatFeatures;
|
|
26
|
+
constructor({ chatTabs, initial, interceptors = [], features } = {}) {
|
|
27
|
+
const featuresWithDefaults = getFeaturesWithDefaults(features);
|
|
28
|
+
super({ ...initial, features: featuresWithDefaults });
|
|
29
|
+
this.chatFeatures = featuresWithDefaults;
|
|
12
30
|
this.chatTabs = chatTabs ?? new ChatTabsController();
|
|
31
|
+
this.interceptors = [
|
|
32
|
+
...interceptors,
|
|
33
|
+
quickCommandQuestionsInterceptor,
|
|
34
|
+
createQuickCommandInterceptor(this, () => loader.__getMonacoInstance()?.editor),
|
|
35
|
+
sendMessageInterceptor,
|
|
36
|
+
];
|
|
37
|
+
this.createChat();
|
|
38
|
+
}
|
|
39
|
+
getNextUntitledChatIndex() {
|
|
40
|
+
let max = 0;
|
|
41
|
+
for (const chat of this.chatTabs.getAll()) {
|
|
42
|
+
const [, match] = chat.get('label').match(`${untitledChatPrefix}(\\d+)`) ?? [];
|
|
43
|
+
const index = parseInt(match);
|
|
44
|
+
if (index > max)
|
|
45
|
+
max = index;
|
|
46
|
+
}
|
|
47
|
+
return max + 1;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Utility function for adding a new chat to the chat tabs. This also selects the new tab.
|
|
51
|
+
* @param properties the chat properties (initial state).
|
|
52
|
+
* @param entries the entries for the chat to start with.
|
|
53
|
+
* @returns the chat created.
|
|
54
|
+
*/
|
|
55
|
+
createChat({ label, ...properties } = {}, entries = []) {
|
|
56
|
+
const chat = new ChatState({
|
|
57
|
+
id: ulid(),
|
|
58
|
+
initial: { label: label || `${untitledChatPrefix}${this.getNextUntitledChatIndex()}`, features: this.chatFeatures, ...properties },
|
|
59
|
+
entries,
|
|
60
|
+
interceptors: this.interceptors,
|
|
61
|
+
untitled: !label,
|
|
62
|
+
});
|
|
63
|
+
this.chatTabs.add(chat);
|
|
64
|
+
this.chatTabs.select(chat.id);
|
|
65
|
+
return chat;
|
|
13
66
|
}
|
|
14
67
|
}
|
|
15
68
|
//# sourceMappingURL=WidgetState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetState.js","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"WidgetState.js","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gCAAgC,EAAE,MAAM,8CAA8C,CAAA;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAkC,uBAAuB,EAAkB,MAAM,aAAa,CAAA;AAErG,OAAO,EAAsC,SAAS,EAAsB,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA+CnD,MAAM,kBAAkB,GAAG,OAAO,CAAA;AAElC;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAiC;IACvD,QAAQ,CAAoB;IACrC;;OAEG;IACH,YAAY,GAAyB,EAAE,CAAA;IACvC;;OAEG;IACH,YAAY,CAAc;IAE1B,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,QAAQ,KAAc,EAAE;QAC1E,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QAC9D,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACrD,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,kBAAkB,EAAE,CAAA;QACpD,IAAI,CAAC,YAAY,GAAG;YAClB,GAAG,YAAY;YACf,gCAAgC;YAChC,6BAA6B,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC;YAC/E,sBAAsB;SACvB,CAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAEO,wBAAwB;QAC9B,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,kBAAkB,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,KAAK,GAAG,GAAG;gBAAE,GAAG,GAAG,KAAK,CAAA;QAC9B,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAA;IAChB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,KAAkD,EAAE,EAAE,UAAuB,EAAE;QAC9G,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC;YACzB,EAAE,EAAE,IAAI,EAAE;YACV,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,EAAE;YAClI,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,CAAC,KAAK;SACjB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/dist/utils/chat.d.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { FixedChatRequest } from '@stack-spot/portal-network';
|
|
2
|
-
import { ChatState
|
|
3
|
-
import { WidgetState } from '../state/WidgetState.js';
|
|
4
|
-
/**
|
|
5
|
-
* Utility for creating a new chat in the chat tabs.
|
|
6
|
-
* @param widget the widget state.
|
|
7
|
-
* @param interceptors the interceptors to add the chat.
|
|
8
|
-
*/
|
|
9
|
-
export declare function createNewChat(widget: WidgetState, interceptors: MessageInterceptor[]): void;
|
|
2
|
+
import { ChatState } from '../state/ChatState.js';
|
|
10
3
|
/**
|
|
11
4
|
* Builds a conversation context from a ChatState.
|
|
12
5
|
*
|
package/dist/utils/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CActF"}
|
package/dist/utils/chat.js
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
import { ulid } from 'ulid';
|
|
2
1
|
import appData from '../app-metadata.json';
|
|
3
|
-
import { ChatState } from '../state/ChatState.js';
|
|
4
2
|
import { defaultLanguage } from './programming-languages.js';
|
|
5
|
-
// helps with naming new chats
|
|
6
|
-
let next = 1;
|
|
7
|
-
/**
|
|
8
|
-
* Utility for creating a new chat in the chat tabs.
|
|
9
|
-
* @param widget the widget state.
|
|
10
|
-
* @param interceptors the interceptors to add the chat.
|
|
11
|
-
*/
|
|
12
|
-
export function createNewChat(widget, interceptors) {
|
|
13
|
-
const id = ulid();
|
|
14
|
-
widget.chatTabs.add(new ChatState({ id, initial: { label: `Chat ${next}` }, interceptors }));
|
|
15
|
-
widget.chatTabs.select(id);
|
|
16
|
-
next++;
|
|
17
|
-
}
|
|
18
3
|
/**
|
|
19
4
|
* Builds a conversation context from a ChatState.
|
|
20
5
|
*
|
package/dist/utils/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,sBAAsB,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAgB;IACvD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE;QACrC,eAAe,EAAE,KAAK,CAAC,EAAE;QACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;QAChC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAClE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;QAChC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO;QAC3C,EAAE,EAAE,SAAS,CAAC,SAAS;QACvB,QAAQ,EAAE,YAAY;QACtB,gBAAgB,EAAE,SAAS,CAAC,SAAS;QACrC,oBAAoB,EAAE,OAAO,CAAC,OAAO;KACtC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
agentId?: string;
|
|
3
|
+
llm?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
numberOfKnowledgeSources: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const AgentDescription: ({ agentId, llm, description, numberOfKnowledgeSources }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=AgentDescription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentDescription.d.ts","sourceRoot":"","sources":["../../../src/views/Agents/AgentDescription.tsx"],"names":[],"mappings":"AAOA,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,gBAAgB,4DAA6D,KAAK,4CAiC9F,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from '@citric/core';
|
|
3
|
+
import { Badge, Skeleton } from '@citric/ui';
|
|
4
|
+
import { agentClient } from '@stack-spot/portal-network';
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
import { useAgentsDictionary } from './dictionary.js';
|
|
7
|
+
import { AgentDescriptionBox } from './styled.js';
|
|
8
|
+
export const AgentDescription = ({ agentId, llm, description, numberOfKnowledgeSources }) => {
|
|
9
|
+
const t = useAgentsDictionary();
|
|
10
|
+
const [agent, , , { isLoading }] = agentClient.agent.useStatefulQuery({ agentId: agentId }, { enabled: !!agentId });
|
|
11
|
+
const knowledgeSources = useMemo(() => agent?.knowledge_sources_config?.knowledge_sources_details?.map((ks, index) => (_jsx("li", { children: _jsx(Badge, { palette: "teal", appearance: "square", children: ks.name }) }, index))), [agent]);
|
|
12
|
+
const skeleton = useMemo(() => {
|
|
13
|
+
const loadingKS = [];
|
|
14
|
+
for (let i = 0; i < numberOfKnowledgeSources; i++) {
|
|
15
|
+
loadingKS.push(_jsx("li", { children: _jsx(Badge, { palette: "teal", appearance: "square", children: _jsx(Skeleton, { className: "ks-skeleton" }) }) }, i));
|
|
16
|
+
}
|
|
17
|
+
return loadingKS;
|
|
18
|
+
}, [numberOfKnowledgeSources]);
|
|
19
|
+
return (_jsxs(AgentDescriptionBox, { children: [description && _jsxs("section", { children: [_jsx(Text, { appearance: "microtext1", className: "title", children: t.description }), _jsx(Text, { children: description })] }), (!!numberOfKnowledgeSources || !!knowledgeSources?.length) && _jsxs("section", { children: [_jsx(Text, { appearance: "microtext1", className: "title", children: "Knowledge sources" }), _jsx("ul", { children: isLoading ? skeleton : knowledgeSources })] }), llm && _jsxs("section", { children: [_jsx(Text, { appearance: "microtext1", className: "title", children: "LLM" }), _jsx(Badge, { palette: "orange", appearance: "square", children: llm })] })] }));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=AgentDescription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentDescription.js","sourceRoot":"","sources":["../../../src/views/Agents/AgentDescription.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAS9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAS,EAAE,EAAE;IACjG,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAA;IAC/B,MAAM,CAAC,KAAK,EAAC,EAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAClH,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CACnF,uBAAgB,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,UAAU,EAAC,QAAQ,YAAE,EAAE,CAAC,IAAI,GAAS,IAAlE,KAAK,CAAkE,CACjF,CAAC,EACF,CAAC,KAAK,CAAC,CACR,CAAA;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,MAAM,SAAS,GAAyB,EAAE,CAAA;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,wBAAwB,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,uBAAY,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,UAAU,EAAC,QAAQ,YAAC,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,GAAQ,IAAzF,CAAC,CAA6F,CAAC,CAAA;QACzH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAE9B,OAAO,CACL,MAAC,mBAAmB,eACjB,WAAW,IAAI,8BACd,KAAC,IAAI,IAAC,UAAU,EAAC,YAAY,EAAC,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,WAAW,GAAQ,EACtE,KAAC,IAAI,cAAE,WAAW,GAAQ,IAClB,EACT,CAAC,CAAC,CAAC,wBAAwB,IAAI,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,8BAC7D,KAAC,IAAI,IAAC,UAAU,EAAC,YAAY,EAAC,SAAS,EAAC,OAAO,kCAAyB,EACxE,uBAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,GAAM,IAC1C,EACT,GAAG,IAAI,8BACN,KAAC,IAAI,IAAC,UAAU,EAAC,YAAY,EAAC,SAAS,EAAC,OAAO,oBAAW,EAC1D,KAAC,KAAK,IAAC,OAAO,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,YAAE,GAAG,GAAS,IACjD,IACU,CACvB,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentsPanel.d.ts","sourceRoot":"","sources":["../../../src/views/Agents/AgentsPanel.tsx"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,WAAW,+CAUvB,CAAA"}
|