mito-ai 0.1.38__py3-none-any.whl → 0.1.40__py3-none-any.whl
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.
Potentially problematic release.
This version of mito-ai might be problematic. Click here for more details.
- mito_ai/__init__.py +8 -0
- mito_ai/_version.py +1 -1
- mito_ai/app_builder/handlers.py +16 -11
- mito_ai/completions/handlers.py +1 -1
- mito_ai/completions/prompt_builders/agent_system_message.py +18 -45
- mito_ai/completions/prompt_builders/chat_name_prompt.py +6 -6
- mito_ai/openai_client.py +1 -1
- mito_ai/streamlit_conversion/agent_utils.py +116 -0
- mito_ai/streamlit_conversion/prompts/prompt_constants.py +59 -0
- mito_ai/streamlit_conversion/prompts/prompt_utils.py +10 -0
- mito_ai/streamlit_conversion/prompts/streamlit_app_creation_prompt.py +45 -0
- mito_ai/streamlit_conversion/prompts/streamlit_error_correction_prompt.py +28 -0
- mito_ai/streamlit_conversion/prompts/streamlit_finish_todo_prompt.py +44 -0
- mito_ai/streamlit_conversion/streamlit_agent_handler.py +72 -42
- mito_ai/streamlit_conversion/streamlit_system_prompt.py +19 -17
- mito_ai/streamlit_conversion/streamlit_utils.py +43 -5
- mito_ai/streamlit_conversion/validate_streamlit_app.py +116 -0
- mito_ai/streamlit_preview/handlers.py +7 -4
- mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +153 -66
- mito_ai/tests/streamlit_conversion/test_validate_streamlit_app.py +119 -0
- mito_ai/tests/utils/test_anthropic_utils.py +2 -2
- mito_ai/utils/anthropic_utils.py +4 -4
- mito_ai/utils/open_ai_utils.py +0 -4
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.38.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5d1d7c234e2dc7c9d97b.js → mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.55d9f8ca386d87856d2d.js +411 -78
- mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.55d9f8ca386d87856d2d.js.map +1 -0
- mito_ai-0.1.38.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.bcce4ea34631acf6dbbe.js → mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.264103d9addd1e166113.js +3 -3
- mito_ai-0.1.38.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.bcce4ea34631acf6dbbe.js.map → mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.264103d9addd1e166113.js.map +1 -1
- {mito_ai-0.1.38.dist-info → mito_ai-0.1.40.dist-info}/METADATA +4 -1
- {mito_ai-0.1.38.dist-info → mito_ai-0.1.40.dist-info}/RECORD +44 -38
- mito_ai/streamlit_conversion/validate_and_run_streamlit_code.py +0 -208
- mito_ai/tests/streamlit_conversion/test_validate_and_run_streamlit_code.py +0 -418
- mito_ai-0.1.38.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5d1d7c234e2dc7c9d97b.js.map +0 -1
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js.map +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.38.data → mito_ai-0.1.40.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
- {mito_ai-0.1.38.dist-info → mito_ai-0.1.40.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.38.dist-info → mito_ai-0.1.40.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.38.dist-info → mito_ai-0.1.40.dist-info}/licenses/LICENSE +0 -0
|
@@ -278,8 +278,8 @@ class ChatHistoryManager {
|
|
|
278
278
|
});
|
|
279
279
|
}
|
|
280
280
|
deduplicateAssumptions(agentResponse) {
|
|
281
|
-
|
|
282
|
-
if (
|
|
281
|
+
// If there are no assumptions, return the original response
|
|
282
|
+
if ((agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.analysis_assumptions) === undefined || (agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.analysis_assumptions) === null) {
|
|
283
283
|
return agentResponse;
|
|
284
284
|
}
|
|
285
285
|
const newAssumptions = agentResponse.analysis_assumptions.filter(assumption => !this._allAssumptions.has(assumption));
|
|
@@ -523,9 +523,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
523
523
|
/* harmony export */ });
|
|
524
524
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
525
525
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
526
|
-
/* harmony import */ var
|
|
527
|
-
/* harmony import */ var
|
|
528
|
-
/* harmony import */ var
|
|
526
|
+
/* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
|
|
527
|
+
/* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/errors */ "./lib/utils/errors.js");
|
|
528
|
+
/* harmony import */ var _utils_stripe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/stripe */ "./lib/utils/stripe.js");
|
|
529
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
529
530
|
/*
|
|
530
531
|
* Copyright (c) Saga Inc.
|
|
531
532
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -534,8 +535,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
534
535
|
|
|
535
536
|
|
|
536
537
|
|
|
538
|
+
|
|
537
539
|
const AlertBlock = ({ content, mitoAIConnectionErrorType }) => {
|
|
538
|
-
|
|
540
|
+
const [showEmailDetails, setShowEmailDetails] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
541
|
+
// The first time this AlertBlock is rendered, log the error type
|
|
542
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
543
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.logEvent)('alert_block_displayed', { 'type': mitoAIConnectionErrorType, 'error': content });
|
|
544
|
+
}, []);
|
|
545
|
+
if (mitoAIConnectionErrorType === _utils_errors__WEBPACK_IMPORTED_MODULE_2__.FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {
|
|
539
546
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
|
|
540
547
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
|
|
541
548
|
"You've used up your free trial of Mito AI for this month. To continue using Mito AI now, upgrade to ",
|
|
@@ -546,9 +553,28 @@ const AlertBlock = ({ content, mitoAIConnectionErrorType }) => {
|
|
|
546
553
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Unlimited AI Autocompletes"),
|
|
547
554
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "All Mito Spreadsheet Pro features")),
|
|
548
555
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Or supply your own Open AI Key to continue using the basic version of Mito AI."),
|
|
549
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
550
|
-
}
|
|
551
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
|
|
556
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_3__["default"], { title: "Upgrade to Pro", text: "Upgrade to Pro", action: _utils_stripe__WEBPACK_IMPORTED_MODULE_4__.STRIPE_PAYMENT_LINK, variant: "purple", width: "block" })));
|
|
557
|
+
}
|
|
558
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert-container" },
|
|
559
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
|
|
560
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "alert-error-message" },
|
|
561
|
+
"\u26A0 ",
|
|
562
|
+
content)),
|
|
563
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null,
|
|
564
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "alert-actions-title" }, "If this issue persists, we recommend:"),
|
|
565
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "alert-actions-list" },
|
|
566
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Restarting JupyterLab completely"),
|
|
567
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Upgrading to the latest version of Mito AI"),
|
|
568
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null,
|
|
569
|
+
"Sending us an email to founders@sagacollab.com \u00A0",
|
|
570
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "details-toggle" },
|
|
571
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", onClick: () => setShowEmailDetails(!showEmailDetails), className: "toggle-button" },
|
|
572
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "toggle-text" }, " Info to send us"),
|
|
573
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: `toggle-caret ${showEmailDetails ? 'open' : ''}` }, "\u25BC"))),
|
|
574
|
+
showEmailDetails && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "details-content" },
|
|
575
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "A screenshot of your entire Jupyter window"),
|
|
576
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "A screenshot of your browser's console. You can access this by right clicking on this error message, clicking \"Inspect\", and then clicking the \"Console\" tab. Then find the red error message at the bottom of the console and screenshot it."),
|
|
577
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Your `pip list` output"))))))));
|
|
552
578
|
};
|
|
553
579
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AlertBlock);
|
|
554
580
|
|
|
@@ -906,14 +932,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
906
932
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
907
933
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
908
934
|
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
|
|
909
|
-
/* harmony import */ var
|
|
935
|
+
/* harmony import */ var _ChatDropdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ChatDropdown */ "./lib/Extensions/AiChat/ChatMessage/ChatDropdown.js");
|
|
910
936
|
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
|
|
911
|
-
/* harmony import */ var _PythonCode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
|
|
912
937
|
/* harmony import */ var _style_ChatInput_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatInput.css */ "./style/ChatInput.css");
|
|
913
938
|
/* harmony import */ var _style_ChatDropdown_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/ChatDropdown.css */ "./style/ChatDropdown.css");
|
|
914
939
|
/* harmony import */ var _hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useDebouncedFunction */ "./lib/hooks/useDebouncedFunction.js");
|
|
915
|
-
/* harmony import */ var
|
|
916
|
-
/* harmony import */ var
|
|
940
|
+
/* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
|
|
941
|
+
/* harmony import */ var _components_DatabaseButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../components/DatabaseButton */ "./lib/components/DatabaseButton.js");
|
|
917
942
|
/*
|
|
918
943
|
* Copyright (c) Saga Inc.
|
|
919
944
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -927,14 +952,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
927
952
|
|
|
928
953
|
|
|
929
954
|
|
|
930
|
-
|
|
931
|
-
const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditing, contextManager, notebookTracker, renderMimeRegistry, displayActiveCellCode = true, agentModeEnabled = false, agentExecutionStatus = 'idle', }) => {
|
|
955
|
+
const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditing, contextManager, notebookTracker, agentModeEnabled = false, agentExecutionStatus = 'idle', }) => {
|
|
932
956
|
var _a;
|
|
933
957
|
const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialContent);
|
|
934
958
|
const [expandedVariables, setExpandedVariables] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
935
959
|
const textAreaRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null);
|
|
936
|
-
const [isFocused, setIsFocused] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
937
960
|
const [activeCellID, setActiveCellID] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)((0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.getActiveCellID)(notebookTracker));
|
|
961
|
+
const activeCellCode = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.getActiveCellCode)(notebookTracker) || '';
|
|
938
962
|
const [isDropdownVisible, setDropdownVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
939
963
|
const [dropdownFilter, setDropdownFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
940
964
|
const [additionalContext, setAdditionalContext] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
@@ -1119,19 +1143,30 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1119
1143
|
];
|
|
1120
1144
|
setExpandedVariables(expandedVariables);
|
|
1121
1145
|
}, [contextManager === null || contextManager === void 0 ? void 0 : contextManager.variables, contextManager === null || contextManager === void 0 ? void 0 : contextManager.files]);
|
|
1122
|
-
//
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1146
|
+
// Automatically add active cell context when in Chat mode and there's active cell code
|
|
1147
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
1148
|
+
if (!agentModeEnabled) {
|
|
1149
|
+
// Check if active cell context is already present
|
|
1150
|
+
const hasActiveCellContext = additionalContext.some(context => context.type === 'active_cell');
|
|
1151
|
+
if (!hasActiveCellContext) {
|
|
1152
|
+
setAdditionalContext(prev => [...prev, {
|
|
1153
|
+
type: 'active_cell',
|
|
1154
|
+
value: 'Active Cell',
|
|
1155
|
+
display: 'Active Cell'
|
|
1156
|
+
}]);
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
else if (agentModeEnabled) {
|
|
1160
|
+
// Remove active cell context when in agent mode
|
|
1161
|
+
const hasActiveCellContext = additionalContext.some(context => context.type === 'active_cell');
|
|
1162
|
+
if (hasActiveCellContext) {
|
|
1163
|
+
setAdditionalContext(prev => prev.filter(context => context.type !== 'active_cell'));
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
}, [agentModeEnabled, additionalContext, activeCellCode]);
|
|
1167
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("chat-input-container") },
|
|
1133
1168
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'context-container' },
|
|
1134
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1169
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_DatabaseButton__WEBPACK_IMPORTED_MODULE_6__["default"], { app: app }),
|
|
1135
1170
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "context-button", onClick: () => {
|
|
1136
1171
|
var _a;
|
|
1137
1172
|
setDropdownVisible(true);
|
|
@@ -1139,7 +1174,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1139
1174
|
setIsDropdownFromButton(true);
|
|
1140
1175
|
(_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
1141
1176
|
} }, "\uFF20 Add Context"),
|
|
1142
|
-
additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1177
|
+
additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_7__["default"], { key: `${context.type}-${context.value}-${index}`, title: context.type === 'db' && context.display ? context.display : context.value, type: context.type, onRemove: () => setAdditionalContext(additionalContext.filter((_, i) => i !== index)), notebookTracker: notebookTracker, activeCellID: activeCellID })))),
|
|
1143
1178
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-input-text-area-container' },
|
|
1144
1179
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { ref: textAreaRef, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message", "message-user", 'chat-input', { "agent-mode": agentModeEnabled }), placeholder: placeholder, value: input, disabled: agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping', onChange: handleInputChange, onKeyDown: (e) => {
|
|
1145
1180
|
// If dropdown is visible, only handle escape to close it
|
|
@@ -1159,7 +1194,6 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1159
1194
|
// Reset
|
|
1160
1195
|
setInput('');
|
|
1161
1196
|
setAdditionalContext([]);
|
|
1162
|
-
setIsFocused(false);
|
|
1163
1197
|
}
|
|
1164
1198
|
// Escape key cancels editing
|
|
1165
1199
|
if (e.key === 'Escape') {
|
|
@@ -1169,7 +1203,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1169
1203
|
}
|
|
1170
1204
|
}
|
|
1171
1205
|
} }),
|
|
1172
|
-
isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1206
|
+
isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatDropdown__WEBPACK_IMPORTED_MODULE_8__["default"], { options: expandedVariables, onSelect: handleOptionSelect, filterText: dropdownFilter, isDropdownFromButton: isDropdownFromButton, onFilterChange: setDropdownFilter, onClose: handleDropdownClose }))),
|
|
1173
1207
|
isEditing &&
|
|
1174
1208
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "message-edit-buttons" },
|
|
1175
1209
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => onSave(input, undefined, mapAdditionalContext()) }, "Save"),
|
|
@@ -1263,7 +1297,7 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1263
1297
|
setNextSteps(agentResponse.next_steps);
|
|
1264
1298
|
}
|
|
1265
1299
|
if (isEditing) {
|
|
1266
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatInput__WEBPACK_IMPORTED_MODULE_4__["default"], { app: app, initialContent: message.content.replace(/```[\s\S]*?```/g, '').trim(), placeholder: "Edit your message", onSave: handleSave, onCancel: handleCancel, isEditing: isEditing, contextManager: contextManager, notebookTracker: notebookTracker,
|
|
1300
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatInput__WEBPACK_IMPORTED_MODULE_4__["default"], { app: app, initialContent: message.content.replace(/```[\s\S]*?```/g, '').trim(), placeholder: "Edit your message", onSave: handleSave, onCancel: handleCancel, isEditing: isEditing, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: false }));
|
|
1267
1301
|
}
|
|
1268
1302
|
if (mitoAIConnectionError) {
|
|
1269
1303
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message") },
|
|
@@ -1296,7 +1330,9 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1296
1330
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_13__["default"], { onClick: () => { acceptAICode(); }, text: `Accept code ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`, title: 'Accept the Ai generated code', variant: 'green', width: 'fit-contents' }),
|
|
1297
1331
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_13__["default"], { onClick: () => { rejectAICode(); }, text: `Reject code ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`, title: 'Reject the Ai generated code and revert to the previous version of the code cell', variant: 'red', width: 'fit-contents' })),
|
|
1298
1332
|
message.role === 'user' && additionalContext && additionalContext.length > 0 &&
|
|
1299
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, additionalContext
|
|
1333
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, additionalContext
|
|
1334
|
+
.filter(context => context.type !== 'active_cell') // Hide active cell context in chat messages
|
|
1335
|
+
.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_14__["default"], { key: `${context.type}-${context.value}-${index}`, title: `${context.value}`, type: context.type, onRemove: () => { } }))))));
|
|
1300
1336
|
}
|
|
1301
1337
|
else {
|
|
1302
1338
|
// Return null for empty code blocks
|
|
@@ -2601,7 +2637,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2601
2637
|
break;
|
|
2602
2638
|
}
|
|
2603
2639
|
}
|
|
2604
|
-
if (agentResponse.type === 'get_cell_output') {
|
|
2640
|
+
if (agentResponse.type === 'get_cell_output' && agentResponse.get_cell_output_cell_id !== null && agentResponse.get_cell_output_cell_id !== undefined) {
|
|
2605
2641
|
// Mark that we should send the cell output to the agent
|
|
2606
2642
|
// in the next loop iteration
|
|
2607
2643
|
sendCellIDOutput = agentResponse.get_cell_output_cell_id;
|
|
@@ -2946,7 +2982,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2946
2982
|
agentExecutionStatus === 'stopping' ? 'Agent is stopping...' :
|
|
2947
2983
|
agentModeEnabled ? 'Ask agent to do anything' :
|
|
2948
2984
|
displayOptimizedChatHistory.length < 2 ? `Ask question (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`
|
|
2949
|
-
: `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`, onSave: agentModeEnabled ? startAgentExecution : sendChatInputMessage, onCancel: undefined, isEditing: false, contextManager: contextManager, notebookTracker: notebookTracker,
|
|
2985
|
+
: `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`, onSave: agentModeEnabled ? startAgentExecution : sendChatInputMessage, onCancel: undefined, isEditing: false, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: agentModeEnabled, agentExecutionStatus: agentExecutionStatus })),
|
|
2950
2986
|
agentExecutionStatus !== 'working' && agentExecutionStatus !== 'stopping' && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls" },
|
|
2951
2987
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls-left" },
|
|
2952
2988
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_ToggleButton__WEBPACK_IMPORTED_MODULE_37__["default"], { leftText: "Chat", leftTooltip: "Chat mode suggests an edit to the active cell and let's you decide to accept or reject it.", rightText: "Agent", rightTooltip: "Agent mode writes and executes code until it's finished your request.", isLeftSelected: !agentModeEnabled, onChange: async (isLeftSelected) => {
|
|
@@ -3501,12 +3537,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
3501
3537
|
/* harmony export */ });
|
|
3502
3538
|
/* harmony import */ var _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/coreutils */ "webpack/sharing/consume/default/@jupyterlab/coreutils");
|
|
3503
3539
|
/* harmony import */ var _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0__);
|
|
3504
|
-
/* harmony import */ var
|
|
3505
|
-
/* harmony import */ var
|
|
3506
|
-
/* harmony import */ var
|
|
3507
|
-
/* harmony import */ var
|
|
3508
|
-
/* harmony import */ var
|
|
3509
|
-
/* harmony import */ var
|
|
3540
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
|
|
3541
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
|
|
3542
|
+
/* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppBuilder/requirementsUtils.js");
|
|
3543
|
+
/* harmony import */ var _fileUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fileUtils */ "./lib/Extensions/AppBuilder/fileUtils.js");
|
|
3544
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
3545
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__);
|
|
3546
|
+
/* harmony import */ var _DeployAppNotification__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./DeployAppNotification */ "./lib/Extensions/AppBuilder/DeployAppNotification.js");
|
|
3547
|
+
/* harmony import */ var _auth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./auth */ "./lib/Extensions/AppBuilder/auth.js");
|
|
3510
3548
|
/*
|
|
3511
3549
|
* Copyright (c) Saga Inc.
|
|
3512
3550
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -3517,12 +3555,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
3517
3555
|
|
|
3518
3556
|
|
|
3519
3557
|
|
|
3558
|
+
|
|
3520
3559
|
/*
|
|
3521
3560
|
This function generates a requirements.txt file that lists the dependencies for the streamlit app
|
|
3522
3561
|
*/
|
|
3523
3562
|
const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) => {
|
|
3524
3563
|
// Check authentication before proceeding with deployment
|
|
3525
|
-
const isAuthenticated = await (0,
|
|
3564
|
+
const isAuthenticated = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.checkAuthenticationAndRedirect)();
|
|
3526
3565
|
if (!isAuthenticated) {
|
|
3527
3566
|
console.log('User not authenticated, redirected to signup');
|
|
3528
3567
|
return;
|
|
@@ -3539,24 +3578,31 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
|
|
|
3539
3578
|
console.log('Current working directory info:', notebookPanel.context);
|
|
3540
3579
|
// Build the requirements.txt file
|
|
3541
3580
|
console.debug("Building requirements.txt file");
|
|
3542
|
-
const requirementsContent = await (0,
|
|
3581
|
+
const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_4__.generateRequirementsTxt)(notebookTracker);
|
|
3543
3582
|
// Save the files to the current directory
|
|
3544
|
-
await (0,
|
|
3583
|
+
await (0,_fileUtils__WEBPACK_IMPORTED_MODULE_5__.saveFileWithKernel)(notebookTracker, './requirements.txt', requirementsContent);
|
|
3545
3584
|
// After building the files, we need to send a request to the backend to deploy the app
|
|
3546
3585
|
if (appBuilderService) {
|
|
3547
3586
|
try {
|
|
3548
3587
|
console.log("Sending request to deploy the app");
|
|
3549
3588
|
// Get JWT token for authentication
|
|
3550
|
-
const jwtToken = (0,
|
|
3589
|
+
const jwtToken = (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
|
|
3551
3590
|
const response = await appBuilderService.client.sendMessage({
|
|
3552
3591
|
type: 'build-app',
|
|
3553
|
-
message_id:
|
|
3592
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__.UUID.uuid4(),
|
|
3554
3593
|
notebook_path: notebookPath,
|
|
3555
3594
|
jwt_token: jwtToken || appBuilderService.client.serverSettings.token
|
|
3556
3595
|
});
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3596
|
+
if (response.error) {
|
|
3597
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(response.error.title, 'error', {
|
|
3598
|
+
autoClose: false
|
|
3599
|
+
});
|
|
3600
|
+
}
|
|
3601
|
+
else {
|
|
3602
|
+
console.log("App deployment response:", response);
|
|
3603
|
+
const url = response.url;
|
|
3604
|
+
(0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_6__.deployAppNotification)(url);
|
|
3605
|
+
}
|
|
3560
3606
|
}
|
|
3561
3607
|
catch (error) {
|
|
3562
3608
|
// TODO: Do something with the error
|
|
@@ -3600,11 +3646,23 @@ const client_id = '6ara3u3l8sss738hrhbq1qtiqf';
|
|
|
3600
3646
|
// Change this to domain_dev for dev deployments
|
|
3601
3647
|
const active_domain = domain_dev;
|
|
3602
3648
|
const currentUrl = window.location.href;
|
|
3649
|
+
let redirectUrl;
|
|
3650
|
+
// As of now we only support localhost:8888 because we have only allowed this redirect url on AWS conito
|
|
3651
|
+
// We can modify the redirect to include other ports in the future
|
|
3652
|
+
if (currentUrl.includes('localhost')) {
|
|
3653
|
+
redirectUrl = 'http://localhost:8888/lab';
|
|
3654
|
+
}
|
|
3655
|
+
else if (currentUrl.includes('trymito')) {
|
|
3656
|
+
redirectUrl = 'https://launch.trymito.io';
|
|
3657
|
+
}
|
|
3658
|
+
else {
|
|
3659
|
+
redirectUrl = currentUrl;
|
|
3660
|
+
}
|
|
3603
3661
|
console.log("currentUrl: ", currentUrl);
|
|
3604
3662
|
// AWS Cognito configuration
|
|
3605
3663
|
const COGNITO_CONFIG = {
|
|
3606
|
-
SIGNUP_URL: `${active_domain}/signup?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${
|
|
3607
|
-
SIGNIN_URL: `${active_domain}/login?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${
|
|
3664
|
+
SIGNUP_URL: `${active_domain}/signup?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
|
|
3665
|
+
SIGNIN_URL: `${active_domain}/login?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
|
|
3608
3666
|
JWT_COOKIE_NAME: 'mito-auth-token',
|
|
3609
3667
|
JWT_COOKIE_EXPIRY_HOURS: 1
|
|
3610
3668
|
};
|
|
@@ -4147,7 +4205,13 @@ def get_dataframe_structure(df, sample_size=5):
|
|
|
4147
4205
|
# Handle None and NaN (convert to None, which maps to null in JSON)
|
|
4148
4206
|
return None
|
|
4149
4207
|
elif not isinstance(value, (str, int, float, bool, type(None))):
|
|
4150
|
-
|
|
4208
|
+
value_str = str(value)
|
|
4209
|
+
if len(value_str) > 50:
|
|
4210
|
+
return value_str[:50] + "..."
|
|
4211
|
+
return value_str
|
|
4212
|
+
elif isinstance(value, str) and len(value) > 50:
|
|
4213
|
+
# Truncate strings longer than 50 characters
|
|
4214
|
+
return value[:50] + "..."
|
|
4151
4215
|
return value
|
|
4152
4216
|
|
|
4153
4217
|
structure = {}
|
|
@@ -4986,13 +5050,15 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
4986
5050
|
/* harmony export */ });
|
|
4987
5051
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
4988
5052
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
4989
|
-
/* harmony import */ var
|
|
5053
|
+
/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./model */ "./lib/Extensions/SettingsManager/database/model.js");
|
|
5054
|
+
/* harmony import */ var _GettingStartedVideo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GettingStartedVideo */ "./lib/Extensions/SettingsManager/database/GettingStartedVideo.js");
|
|
4990
5055
|
/*
|
|
4991
5056
|
* Copyright (c) Saga Inc.
|
|
4992
5057
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
4993
5058
|
*/
|
|
4994
5059
|
|
|
4995
5060
|
|
|
5061
|
+
|
|
4996
5062
|
const ConnectionList = ({ connections, loading, error, onDelete }) => {
|
|
4997
5063
|
const [clickedDelete, setClickedDelete] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
4998
5064
|
if (loading) {
|
|
@@ -5004,7 +5070,10 @@ const ConnectionList = ({ connections, loading, error, onDelete }) => {
|
|
|
5004
5070
|
error);
|
|
5005
5071
|
}
|
|
5006
5072
|
if (Object.keys(connections).length === 0) {
|
|
5007
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("
|
|
5073
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "no-connections-container" },
|
|
5074
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "No database connections found."),
|
|
5075
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "video-tutorial" },
|
|
5076
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_GettingStartedVideo__WEBPACK_IMPORTED_MODULE_1__.GettingStartedVideo, { width: "560", height: "315" }))));
|
|
5008
5077
|
}
|
|
5009
5078
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "connections-grid" }, Object.entries(connections).map(([id, connection]) => {
|
|
5010
5079
|
var _a;
|
|
@@ -5013,7 +5082,7 @@ const ConnectionList = ({ connections, loading, error, onDelete }) => {
|
|
|
5013
5082
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", { className: "connection-alias" }, connection.alias ? connection.alias : connection.database),
|
|
5014
5083
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "connection-type" }, connection.type.toUpperCase())),
|
|
5015
5084
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "connection-divider" }),
|
|
5016
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "connection-details" }, (_a =
|
|
5085
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "connection-details" }, (_a = _model__WEBPACK_IMPORTED_MODULE_2__.databaseConfigs[connection.type]) === null || _a === void 0 ? void 0 : _a.fields.map(field => {
|
|
5017
5086
|
// Skip specific fields
|
|
5018
5087
|
if (field.type === 'password')
|
|
5019
5088
|
return null;
|
|
@@ -5053,6 +5122,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5053
5122
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5054
5123
|
/* harmony import */ var _ConnectionList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ConnectionList */ "./lib/Extensions/SettingsManager/database/ConnectionList.js");
|
|
5055
5124
|
/* harmony import */ var _ConnectionForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ConnectionForm */ "./lib/Extensions/SettingsManager/database/ConnectionForm.js");
|
|
5125
|
+
/* harmony import */ var _GettingStartedVideo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./GettingStartedVideo */ "./lib/Extensions/SettingsManager/database/GettingStartedVideo.js");
|
|
5056
5126
|
/* harmony import */ var _restAPI_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../restAPI/utils */ "./lib/restAPI/utils.js");
|
|
5057
5127
|
/* harmony import */ var _style_DatabasePage_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/DatabasePage.css */ "./style/DatabasePage.css");
|
|
5058
5128
|
/*
|
|
@@ -5064,11 +5134,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5064
5134
|
|
|
5065
5135
|
|
|
5066
5136
|
|
|
5137
|
+
|
|
5067
5138
|
const DatabasePage = () => {
|
|
5068
5139
|
const [connections, setConnections] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
|
|
5069
5140
|
const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
|
|
5070
5141
|
const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
5071
5142
|
const [showModal, setShowModal] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
5143
|
+
const [showVideoModal, setShowVideoModal] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
5072
5144
|
const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
|
|
5073
5145
|
type: 'snowflake',
|
|
5074
5146
|
username: '',
|
|
@@ -5141,15 +5213,54 @@ const DatabasePage = () => {
|
|
|
5141
5213
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "db-connections" },
|
|
5142
5214
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "settings-header" },
|
|
5143
5215
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Database Connections"),
|
|
5144
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("
|
|
5145
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("
|
|
5216
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "header-buttons" },
|
|
5217
|
+
Object.keys(connections).length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-gray", onClick: () => setShowVideoModal(true) },
|
|
5218
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, "Getting Started"))),
|
|
5219
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-purple", onClick: () => setShowModal(true) },
|
|
5220
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, "\uFF0B Add Connection")))),
|
|
5146
5221
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ConnectionList__WEBPACK_IMPORTED_MODULE_3__.ConnectionList, { connections: connections, loading: loading, error: error, onDelete: handleDelete }),
|
|
5147
5222
|
showModal && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-overlay", onClick: () => setShowModal(false) },
|
|
5148
5223
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-content", onClick: e => e.stopPropagation() },
|
|
5149
5224
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-header" },
|
|
5150
5225
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", null, "Add New Connection"),
|
|
5151
5226
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "modal-close-button", onClick: () => setShowModal(false) }, "\u2715")),
|
|
5152
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ConnectionForm__WEBPACK_IMPORTED_MODULE_4__.ConnectionForm, { formData: formData, formError: formError, onInputChange: handleInputChange, onSubmit: handleSubmit, onClose: () => setShowModal(false) }))))
|
|
5227
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ConnectionForm__WEBPACK_IMPORTED_MODULE_4__.ConnectionForm, { formData: formData, formError: formError, onInputChange: handleInputChange, onSubmit: handleSubmit, onClose: () => setShowModal(false) })))),
|
|
5228
|
+
showVideoModal && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-overlay", onClick: () => setShowVideoModal(false) },
|
|
5229
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-content video-modal", onClick: e => e.stopPropagation() },
|
|
5230
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-header" },
|
|
5231
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", null, "Getting Started"),
|
|
5232
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "modal-close-button", onClick: () => setShowVideoModal(false) }, "\u2715")),
|
|
5233
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_GettingStartedVideo__WEBPACK_IMPORTED_MODULE_5__.GettingStartedVideo, null),
|
|
5234
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "video-description" },
|
|
5235
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
|
|
5236
|
+
"Still have questions? Check out our ",
|
|
5237
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { href: "https://docs.trymito.io/mito-ai/database-connectors", target: "_blank", rel: "noopener noreferrer" }, "documentation"),
|
|
5238
|
+
" for more information.")))))));
|
|
5239
|
+
};
|
|
5240
|
+
|
|
5241
|
+
|
|
5242
|
+
/***/ }),
|
|
5243
|
+
|
|
5244
|
+
/***/ "./lib/Extensions/SettingsManager/database/GettingStartedVideo.js":
|
|
5245
|
+
/*!************************************************************************!*\
|
|
5246
|
+
!*** ./lib/Extensions/SettingsManager/database/GettingStartedVideo.js ***!
|
|
5247
|
+
\************************************************************************/
|
|
5248
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5249
|
+
|
|
5250
|
+
__webpack_require__.r(__webpack_exports__);
|
|
5251
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
5252
|
+
/* harmony export */ GettingStartedVideo: () => (/* binding */ GettingStartedVideo)
|
|
5253
|
+
/* harmony export */ });
|
|
5254
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
5255
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5256
|
+
/*
|
|
5257
|
+
* Copyright (c) Saga Inc.
|
|
5258
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
5259
|
+
*/
|
|
5260
|
+
|
|
5261
|
+
const GettingStartedVideo = ({ width = "100%", height = "400", className = "" }) => {
|
|
5262
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `video-container ${className}` },
|
|
5263
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("iframe", { width: width, height: height, src: "https://www.youtube.com/embed/sJgphOrmZb4?rel=0", title: "How to connect to your database with Mito", frameBorder: "0", allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", allowFullScreen: true })));
|
|
5153
5264
|
};
|
|
5154
5265
|
|
|
5155
5266
|
|
|
@@ -6873,7 +6984,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6873
6984
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
6874
6985
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
6875
6986
|
/* harmony import */ var _style_ModelSelector_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../style/ModelSelector.css */ "./style/ModelSelector.css");
|
|
6876
|
-
/* harmony import */ var
|
|
6987
|
+
/* harmony import */ var _icons_NucleausIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/NucleausIcon */ "./lib/icons/NucleausIcon.js");
|
|
6988
|
+
/* harmony import */ var _utils_models__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/models */ "./lib/utils/models.js");
|
|
6877
6989
|
/*
|
|
6878
6990
|
* Copyright (c) Saga Inc.
|
|
6879
6991
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -6881,15 +6993,17 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6881
6993
|
|
|
6882
6994
|
|
|
6883
6995
|
|
|
6996
|
+
|
|
6884
6997
|
const MODEL_MAPPINGS = [
|
|
6998
|
+
{ displayName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.GPT_DISPLAY_NAME, fullName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.GPT_MODEL_NAME },
|
|
6885
6999
|
{ displayName: 'GPT 4.1', fullName: 'gpt-4.1' },
|
|
6886
|
-
{ displayName:
|
|
6887
|
-
{ displayName:
|
|
7000
|
+
{ displayName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_OPUS_DISPLAY_NAME, fullName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_OPUS_MODEL_NAME },
|
|
7001
|
+
{ displayName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_SONNET_DISPLAY_NAME, fullName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_SONNET_MODEL_NAME },
|
|
6888
7002
|
{ displayName: 'Gemini 2.5 Pro', fullName: 'gemini-2.5-pro-preview-03-25' }
|
|
6889
7003
|
];
|
|
6890
7004
|
const ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);
|
|
6891
7005
|
// Maximum length for displayed model name before truncating
|
|
6892
|
-
const DEFAULT_MODEL =
|
|
7006
|
+
const DEFAULT_MODEL = _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_SONNET_DISPLAY_NAME;
|
|
6893
7007
|
const ModelSelector = ({ onConfigChange }) => {
|
|
6894
7008
|
const [selectedModel, setSelectedModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(DEFAULT_MODEL);
|
|
6895
7009
|
const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
@@ -6949,7 +7063,7 @@ const ModelSelector = ({ onConfigChange }) => {
|
|
|
6949
7063
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-selector-dropdown`, onClick: () => setIsOpen(!isOpen), title: selectedModel, "data-testid": "model-selector" },
|
|
6950
7064
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "selected-model" },
|
|
6951
7065
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-icon" },
|
|
6952
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
7066
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NucleausIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { height: 10, width: 10 })),
|
|
6953
7067
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-name" }, selectedModel),
|
|
6954
7068
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-arrow" }, "\u25BC")),
|
|
6955
7069
|
isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-options dropup`, style: { minWidth: '150px' } }, ALL_MODEL_DISPLAY_NAMES.map(model => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: model, className: `model-option ${model === selectedModel ? 'selected' : ''}`, onClick: (e) => {
|
|
@@ -7043,6 +7157,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7043
7157
|
/* harmony import */ var _icons_RuleIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/RuleIcon */ "./lib/icons/RuleIcon.js");
|
|
7044
7158
|
/* harmony import */ var _icons_CodeIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/CodeIcon */ "./lib/icons/CodeIcon.js");
|
|
7045
7159
|
/* harmony import */ var _icons_DatabaseIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/DatabaseIcon */ "./lib/icons/DatabaseIcon.js");
|
|
7160
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/notebook */ "./lib/utils/notebook.js");
|
|
7046
7161
|
/*
|
|
7047
7162
|
* Copyright (c) Saga Inc.
|
|
7048
7163
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -7052,7 +7167,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7052
7167
|
|
|
7053
7168
|
|
|
7054
7169
|
|
|
7055
|
-
|
|
7170
|
+
|
|
7171
|
+
const SelectedContextContainer = ({ title, type, onRemove, onClick, notebookTracker, activeCellID }) => {
|
|
7056
7172
|
const [isHovered, setIsHovered] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
7057
7173
|
let icon = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_RuleIcon__WEBPACK_IMPORTED_MODULE_2__["default"], null);
|
|
7058
7174
|
switch (type) {
|
|
@@ -7065,9 +7181,38 @@ const SelectedContextContainer = ({ title, type, onRemove }) => {
|
|
|
7065
7181
|
case 'db':
|
|
7066
7182
|
icon = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_DatabaseIcon__WEBPACK_IMPORTED_MODULE_4__["default"], null);
|
|
7067
7183
|
break;
|
|
7184
|
+
case 'active_cell':
|
|
7185
|
+
icon = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CodeIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null);
|
|
7186
|
+
break;
|
|
7068
7187
|
}
|
|
7069
|
-
|
|
7070
|
-
|
|
7188
|
+
const handleClick = () => {
|
|
7189
|
+
var _a;
|
|
7190
|
+
if (type === 'active_cell') {
|
|
7191
|
+
// Handle active cell context click
|
|
7192
|
+
if (notebookTracker && activeCellID) {
|
|
7193
|
+
// Find the cell
|
|
7194
|
+
const cell = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_5__.getCellByID)(notebookTracker, activeCellID);
|
|
7195
|
+
if (cell) {
|
|
7196
|
+
// Scroll to the cell
|
|
7197
|
+
void ((_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.scrollToCell(cell, 'center'));
|
|
7198
|
+
// Highlight the cell
|
|
7199
|
+
setTimeout(() => {
|
|
7200
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_5__.highlightCodeCell)(notebookTracker, activeCellID);
|
|
7201
|
+
}, 500);
|
|
7202
|
+
}
|
|
7203
|
+
}
|
|
7204
|
+
// If notebookTracker or activeCellID are not available, do nothing
|
|
7205
|
+
}
|
|
7206
|
+
else if (onClick) {
|
|
7207
|
+
// Call the custom onClick handler for other context types
|
|
7208
|
+
onClick();
|
|
7209
|
+
}
|
|
7210
|
+
};
|
|
7211
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "selected-context-container", onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: handleClick, "data-testid": "selected-context-container" },
|
|
7212
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `icon`, onClick: (e) => {
|
|
7213
|
+
e.stopPropagation(); // Prevent triggering the button's onClick
|
|
7214
|
+
onRemove();
|
|
7215
|
+
}, title: isHovered ? "Remove rule" : "Selected rule" }, isHovered && type !== 'active_cell' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "remove-icon" }, "X")) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "icon" }, icon))),
|
|
7071
7216
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "rule-name" }, title)));
|
|
7072
7217
|
};
|
|
7073
7218
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SelectedContextContainer);
|
|
@@ -8730,6 +8875,35 @@ const stripFileEnding = (rule) => {
|
|
|
8730
8875
|
};
|
|
8731
8876
|
|
|
8732
8877
|
|
|
8878
|
+
/***/ }),
|
|
8879
|
+
|
|
8880
|
+
/***/ "./lib/utils/models.js":
|
|
8881
|
+
/*!*****************************!*\
|
|
8882
|
+
!*** ./lib/utils/models.js ***!
|
|
8883
|
+
\*****************************/
|
|
8884
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8885
|
+
|
|
8886
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8887
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8888
|
+
/* harmony export */ CLAUDE_OPUS_DISPLAY_NAME: () => (/* binding */ CLAUDE_OPUS_DISPLAY_NAME),
|
|
8889
|
+
/* harmony export */ CLAUDE_OPUS_MODEL_NAME: () => (/* binding */ CLAUDE_OPUS_MODEL_NAME),
|
|
8890
|
+
/* harmony export */ CLAUDE_SONNET_DISPLAY_NAME: () => (/* binding */ CLAUDE_SONNET_DISPLAY_NAME),
|
|
8891
|
+
/* harmony export */ CLAUDE_SONNET_MODEL_NAME: () => (/* binding */ CLAUDE_SONNET_MODEL_NAME),
|
|
8892
|
+
/* harmony export */ GPT_DISPLAY_NAME: () => (/* binding */ GPT_DISPLAY_NAME),
|
|
8893
|
+
/* harmony export */ GPT_MODEL_NAME: () => (/* binding */ GPT_MODEL_NAME)
|
|
8894
|
+
/* harmony export */ });
|
|
8895
|
+
/*
|
|
8896
|
+
* Copyright (c) Saga Inc.
|
|
8897
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8898
|
+
*/
|
|
8899
|
+
const CLAUDE_OPUS_DISPLAY_NAME = 'Claude 4.1 Opus';
|
|
8900
|
+
const CLAUDE_OPUS_MODEL_NAME = 'claude-opus-4-1-20250805';
|
|
8901
|
+
const CLAUDE_SONNET_DISPLAY_NAME = 'Claude 4 Sonnet';
|
|
8902
|
+
const CLAUDE_SONNET_MODEL_NAME = 'claude-sonnet-4-20250514';
|
|
8903
|
+
const GPT_DISPLAY_NAME = 'GPT 5 (max)';
|
|
8904
|
+
const GPT_MODEL_NAME = 'gpt-5';
|
|
8905
|
+
|
|
8906
|
+
|
|
8733
8907
|
/***/ }),
|
|
8734
8908
|
|
|
8735
8909
|
/***/ "./lib/utils/notebook.js":
|
|
@@ -10845,19 +11019,123 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10845
11019
|
background-color: var(--jp-layout-color2);
|
|
10846
11020
|
}
|
|
10847
11021
|
|
|
10848
|
-
.chat-message-alert {
|
|
10849
|
-
|
|
11022
|
+
.chat-message-alert-container {
|
|
11023
|
+
display: flex;
|
|
11024
|
+
flex-direction: column;
|
|
11025
|
+
gap: 10px;
|
|
11026
|
+
background-color: var(--red-300);
|
|
10850
11027
|
border-radius: 5px;
|
|
10851
11028
|
padding: 10px;
|
|
10852
|
-
border: 1px solid var(--
|
|
10853
|
-
color: var(--
|
|
11029
|
+
border: 1px solid var(--red-900);
|
|
11030
|
+
color: var(--red-900);
|
|
10854
11031
|
}
|
|
10855
11032
|
|
|
10856
11033
|
.chat-message-alert a {
|
|
10857
11034
|
color: var(--purple-700);
|
|
10858
11035
|
text-decoration: underline;
|
|
10859
11036
|
}
|
|
10860
|
-
|
|
11037
|
+
|
|
11038
|
+
/* New style for the main error message */
|
|
11039
|
+
.alert-error-message {
|
|
11040
|
+
font-size: 14px;
|
|
11041
|
+
font-weight: 600;
|
|
11042
|
+
line-height: 1.4;
|
|
11043
|
+
color: var(--red-900);
|
|
11044
|
+
margin-bottom: 8px;
|
|
11045
|
+
}
|
|
11046
|
+
|
|
11047
|
+
.alert-actions-header {
|
|
11048
|
+
margin-bottom: 12px;
|
|
11049
|
+
}
|
|
11050
|
+
|
|
11051
|
+
.alert-actions-title {
|
|
11052
|
+
font-weight: 500;
|
|
11053
|
+
margin: 0 0 8px 0;
|
|
11054
|
+
color: var(--red-900);
|
|
11055
|
+
font-size: 13px;
|
|
11056
|
+
}
|
|
11057
|
+
|
|
11058
|
+
.alert-actions-list {
|
|
11059
|
+
margin: 0;
|
|
11060
|
+
padding-left: 16px;
|
|
11061
|
+
color: var(--red-800);
|
|
11062
|
+
}
|
|
11063
|
+
|
|
11064
|
+
.alert-actions-list li {
|
|
11065
|
+
margin-bottom: 4px;
|
|
11066
|
+
font-size: 13px;
|
|
11067
|
+
line-height: 1.4;
|
|
11068
|
+
}
|
|
11069
|
+
|
|
11070
|
+
.alert-action-item {
|
|
11071
|
+
display: flex;
|
|
11072
|
+
align-items: flex-start;
|
|
11073
|
+
gap: 8px;
|
|
11074
|
+
padding: 8px 0;
|
|
11075
|
+
color: var(--red-800);
|
|
11076
|
+
font-size: 13px;
|
|
11077
|
+
line-height: 1.4;
|
|
11078
|
+
}
|
|
11079
|
+
|
|
11080
|
+
.action-icon {
|
|
11081
|
+
font-size: 16px;
|
|
11082
|
+
flex-shrink: 0;
|
|
11083
|
+
margin-top: 1px;
|
|
11084
|
+
}
|
|
11085
|
+
|
|
11086
|
+
.details-toggle {
|
|
11087
|
+
display: inline-flex;
|
|
11088
|
+
align-items: center;
|
|
11089
|
+
}
|
|
11090
|
+
|
|
11091
|
+
.toggle-button {
|
|
11092
|
+
background: none;
|
|
11093
|
+
border: none;
|
|
11094
|
+
padding: 0;
|
|
11095
|
+
cursor: pointer;
|
|
11096
|
+
display: flex;
|
|
11097
|
+
align-items: center;
|
|
11098
|
+
gap: 4px;
|
|
11099
|
+
color: var(--red-900);
|
|
11100
|
+
font-size: 12px;
|
|
11101
|
+
font-family: inherit;
|
|
11102
|
+
text-decoration: underline;
|
|
11103
|
+
}
|
|
11104
|
+
|
|
11105
|
+
.toggle-button:hover {
|
|
11106
|
+
color: var(--red-800);
|
|
11107
|
+
}
|
|
11108
|
+
|
|
11109
|
+
.toggle-caret {
|
|
11110
|
+
font-size: 10px;
|
|
11111
|
+
transition: transform 0.2s ease;
|
|
11112
|
+
display: inline-block;
|
|
11113
|
+
text-decoration: none !important;
|
|
11114
|
+
}
|
|
11115
|
+
|
|
11116
|
+
.toggle-caret.open {
|
|
11117
|
+
transform: rotate(180deg);
|
|
11118
|
+
}
|
|
11119
|
+
|
|
11120
|
+
.details-content {
|
|
11121
|
+
margin-top: 8px;
|
|
11122
|
+
margin-left: 16px;
|
|
11123
|
+
padding: 8px;
|
|
11124
|
+
background-color: var(--grey-100);
|
|
11125
|
+
border-radius: 4px;
|
|
11126
|
+
animation: slideDown 0.2s ease-out;
|
|
11127
|
+
}
|
|
11128
|
+
|
|
11129
|
+
@keyframes slideDown {
|
|
11130
|
+
from {
|
|
11131
|
+
opacity: 0;
|
|
11132
|
+
transform: translateY(-4px);
|
|
11133
|
+
}
|
|
11134
|
+
to {
|
|
11135
|
+
opacity: 1;
|
|
11136
|
+
transform: translateY(0);
|
|
11137
|
+
}
|
|
11138
|
+
}`, "",{"version":3,"sources":["webpack://./style/ChatMessage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,sDAAsD;EACtD,2CAA2C;AAC7C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,2DAA2D;EAC3D,0CAA0C;EAC1C,aAAa;AACf;;AAEA;EACE,+CAA+C;AACjD;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,sBAAsB;EACtB,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA,qCAAqC;AACrC;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,gBAAgB,EAAE,0DAA0D;AAC9E;;AAEA,qCAAqC;AACrC;;EAEE,eAAe;EACf,UAAU;EACV;;qCAEmC;EACnC,yCAAyC;EACzC,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,oCAAoC;AACtC;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,UAAU;EACV,gBAAgB,EAAE,oCAAoC;AACxD;;AAEA,yCAAyC;AACzC;EACE,+CAA+C;AACjD;;AAEA,8FAA8F;AAC9F;;EAEE,gBAAgB;AAClB;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;AACpB;;AAEA,mBAAmB;AACnB;EACE,oCAAoC;AACtC;;AAEA,iBAAiB;AACjB;;EAEE,yCAAyC;AAC3C;;AAEA,kCAAkC;AAClC;;EAEE,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,yCAAyC;EACzC,oCAAoC;EACpC,yCAAyC;EACzC,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,gCAAgC;EAChC,kBAAkB;EAClB,aAAa;EACb,gCAAgC;EAChC,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;EACxB,0BAA0B;AAC5B;;AAEA,yCAAyC;AACzC;EACE,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,SAAS;EACT,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,QAAQ;EACR,cAAc;EACd,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,UAAU;EACV,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,qBAAqB;EACrB,eAAe;EACf,oBAAoB;EACpB,0BAA0B;AAC5B;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,eAAe;EACf,+BAA+B;EAC/B,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,YAAY;EACZ,iCAAiC;EACjC,kBAAkB;EAClB,kCAAkC;AACpC;;AAEA;EACE;IACE,UAAU;IACV,2BAA2B;EAC7B;EACA;IACE,UAAU;IACV,wBAAwB;EAC1B;AACF","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.message {\n position: relative;\n height: min-content;\n box-sizing: border-box;\n width: 100%;\n font-size: 14px;\n border-radius: var(--chat-taskpane-item-border-radius);\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.message:not(.chat-input) {\n margin-bottom: 20px;\n}\n\n.message:hover .message-start-editing-button {\n opacity: 1 !important;\n}\n\n.message-user {\n background-color: var(--chat-user-message-background-color);\n color: var(--chat-user-message-font-color);\n padding: 10px;\n}\n\n.message-assistant-chat {\n color: var(--chat-assistant-message-font-color);\n}\n\n.chat-message-buttons {\n display: flex;\n flex-direction: row;\n gap: 8px;\n margin-top: 10px;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n\n.chat-taskpane-smart-debug-error-message {\n white-space: pre;\n font-family: monospace;\n margin: 0;\n overflow-x: auto;\n}\n\n.message-text {\n align-items: center;\n}\n\n/* Message Action Buttons Container */\n.message-action-buttons {\n position: absolute;\n bottom: 8px;\n right: 8px;\n display: flex;\n border-radius: 4px;\n overflow: hidden; /* Ensures inner buttons don't break the rounded corners */\n}\n\n/* Common styles for action buttons */\n.message-action-buttons button,\n.message-start-editing-button {\n cursor: pointer;\n opacity: 0;\n transition:\n opacity 0.2s ease-in-out,\n background-color 0.2s ease-in-out;\n background-color: var(--jp-layout-color3);\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-content-font-color1);\n}\n\n/* Action buttons in the group */\n.message-action-buttons button {\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 0; /* Remove individual button radius */\n}\n\n/* Add subtle separator between buttons */\n.message-action-buttons button:not(:last-child) {\n border-right: 1px solid var(--jp-border-color1);\n}\n\n/* Remove the individual button radius styles since we're handling it at the container level */\n.message-action-buttons button:first-child,\n.message-action-buttons button:last-child {\n border-radius: 0;\n}\n\n/* Standalone edit button */\n.message-start-editing-button {\n position: relative;\n padding: 4px;\n border-radius: 4px;\n}\n\n/* SVG icon color */\n.message-action-buttons button svg {\n color: var(--jp-content-font-color1);\n}\n\n/* Hover states */\n.message-action-buttons button:hover,\n.message-start-editing-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Show buttons on message hover */\n.message:hover .message-action-buttons button,\n.message:hover .message-start-editing-button {\n opacity: 1;\n}\n\n.message-edit-buttons {\n display: flex;\n gap: 8px;\n padding: 5px;\n}\n\n.message-edit-buttons button {\n padding: 4px 12px;\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-content-font-color1);\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n}\n\n.message-edit-buttons button:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.chat-message-alert-container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n background-color: var(--red-300);\n border-radius: 5px;\n padding: 10px;\n border: 1px solid var(--red-900);\n color: var(--red-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700);\n text-decoration: underline;\n}\n\n/* New style for the main error message */\n.alert-error-message {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.4;\n color: var(--red-900);\n margin-bottom: 8px;\n}\n\n.alert-actions-header {\n margin-bottom: 12px;\n}\n\n.alert-actions-title {\n font-weight: 500;\n margin: 0 0 8px 0;\n color: var(--red-900);\n font-size: 13px;\n}\n\n.alert-actions-list {\n margin: 0;\n padding-left: 16px;\n color: var(--red-800);\n}\n\n.alert-actions-list li {\n margin-bottom: 4px;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.alert-action-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 0;\n color: var(--red-800);\n font-size: 13px;\n line-height: 1.4;\n}\n\n.action-icon {\n font-size: 16px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.details-toggle {\n display: inline-flex;\n align-items: center;\n}\n\n.toggle-button {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--red-900);\n font-size: 12px;\n font-family: inherit;\n text-decoration: underline;\n}\n\n.toggle-button:hover {\n color: var(--red-800);\n}\n\n.toggle-caret {\n font-size: 10px;\n transition: transform 0.2s ease;\n display: inline-block;\n text-decoration: none !important;\n}\n\n.toggle-caret.open {\n transform: rotate(180deg);\n}\n\n.details-content {\n margin-top: 8px;\n margin-left: 16px;\n padding: 8px;\n background-color: var(--grey-100);\n border-radius: 4px;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}"],"sourceRoot":""}]);
|
|
10861
11139
|
// Exports
|
|
10862
11140
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
10863
11141
|
|
|
@@ -11530,6 +11808,28 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
11530
11808
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11531
11809
|
*/
|
|
11532
11810
|
|
|
11811
|
+
.settings-header {
|
|
11812
|
+
display: flex;
|
|
11813
|
+
justify-content: space-between;
|
|
11814
|
+
align-items: center;
|
|
11815
|
+
margin-bottom: 20px;
|
|
11816
|
+
}
|
|
11817
|
+
|
|
11818
|
+
.header-buttons {
|
|
11819
|
+
display: flex;
|
|
11820
|
+
gap: 12px;
|
|
11821
|
+
align-items: center;
|
|
11822
|
+
}
|
|
11823
|
+
|
|
11824
|
+
.header-buttons .button-base {
|
|
11825
|
+
min-width: 120px;
|
|
11826
|
+
height: 32px;
|
|
11827
|
+
display: flex;
|
|
11828
|
+
align-items: center;
|
|
11829
|
+
justify-content: center;
|
|
11830
|
+
padding: 8px 16px;
|
|
11831
|
+
}
|
|
11832
|
+
|
|
11533
11833
|
.connections-grid {
|
|
11534
11834
|
display: grid;
|
|
11535
11835
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
@@ -11620,7 +11920,39 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
11620
11920
|
.confirmation-buttons {
|
|
11621
11921
|
display: flex;
|
|
11622
11922
|
gap: 8px;
|
|
11623
|
-
}
|
|
11923
|
+
}
|
|
11924
|
+
|
|
11925
|
+
/* No connections container styles */
|
|
11926
|
+
.no-connections-container {
|
|
11927
|
+
display: flex;
|
|
11928
|
+
flex-direction: column;
|
|
11929
|
+
align-items: center;
|
|
11930
|
+
justify-content: center;
|
|
11931
|
+
min-height: 400px;
|
|
11932
|
+
text-align: center;
|
|
11933
|
+
padding: 40px 20px;
|
|
11934
|
+
}
|
|
11935
|
+
|
|
11936
|
+
.no-connections-container p {
|
|
11937
|
+
font-size: 1.1em;
|
|
11938
|
+
color: var(--jp-ui-font-color2);
|
|
11939
|
+
margin-bottom: 32px;
|
|
11940
|
+
margin-top: 0;
|
|
11941
|
+
}
|
|
11942
|
+
|
|
11943
|
+
.video-tutorial {
|
|
11944
|
+
border-radius: 8px;
|
|
11945
|
+
display: block;
|
|
11946
|
+
border: 1px solid var(--purple-500);
|
|
11947
|
+
border-radius: 12px;
|
|
11948
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
|
11949
|
+
padding: 12px;
|
|
11950
|
+
}
|
|
11951
|
+
|
|
11952
|
+
.video-container iframe {
|
|
11953
|
+
border-radius: 8px;
|
|
11954
|
+
display: block;
|
|
11955
|
+
} `, "",{"version":3,"sources":["webpack://./style/DatabasePage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;AACvB;;AAEA;IACI,aAAa;IACb,SAAS;IACT,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,4DAA4D;IAC5D,SAAS;IACT,gBAAgB;AACpB;;AAEA;IACI,mCAAmC;IACnC,yCAAyC;IACzC,kBAAkB;IAClB,aAAa;IACb,yBAAyB;IACzB,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,iBAAiB;IACjB,+BAA+B;IAC/B,SAAS;AACb;;AAEA;IACI,6BAA6B;IAC7B,wBAAwB;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,0BAA0B;IAC1B,gBAAgB;AACpB;;AAEA;IACI,WAAW;IACX,mCAAmC;IACnC,oBAAoB;IACpB,WAAW;AACf;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,QAAQ;AACZ;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,6BAA6B;AACjC;;AAEA;IACI,wCAAwC;IACxC,YAAY;AAChB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA,oCAAoC;AACpC;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,+BAA+B;IAC/B,mBAAmB;IACnB,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,cAAc;IACd,mCAAmC;IACnC,mBAAmB;IACnB,yCAAyC;IACzC,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,cAAc;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.settings-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.header-buttons {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.header-buttons .button-base {\n min-width: 120px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 16px;\n}\n\n.connections-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n margin-top: 20px;\n}\n\n.connection-card {\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n}\n\n.connection-card:hover {\n border: 1px solid var(--purple-500);\n}\n\n.connection-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.connection-alias {\n font-size: 1.2em;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n margin: 0;\n}\n\n.connection-type {\n background: var(--purple-100);\n color: var(--purple-700);\n border-radius: 12px;\n padding: 2px 10px;\n font-size: 0.85em;\n font-weight: 500;\n text-transform: capitalize;\n margin-left: 8px;\n}\n\n.connection-divider {\n height: 1px;\n background: var(--jp-border-color2);\n margin: 8px 0 12px 0;\n width: 100%;\n}\n\n.connection-details {\n flex-grow: 1;\n}\n\n.connection-details p {\n margin: 4px 0;\n font-size: 0.9em;\n color: var(--jp-ui-font-color2);\n}\n\n.connection-actions {\n display: flex;\n margin-top: 12px;\n gap: 8px;\n}\n\n.connection-actions button {\n padding: 4px 8px;\n font-size: 0.9em;\n}\n\n.connection-actions .delete-button {\n color: var(--jp-error-color1);\n}\n\n.connection-actions .delete-button:hover {\n background-color: var(--jp-error-color2);\n color: white;\n}\n\n.delete-container {\n position: relative;\n}\n\n.confirmation-buttons {\n display: flex;\n gap: 8px;\n}\n\n/* No connections container styles */\n.no-connections-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n padding: 40px 20px;\n}\n\n.no-connections-container p {\n font-size: 1.1em;\n color: var(--jp-ui-font-color2);\n margin-bottom: 32px;\n margin-top: 0;\n}\n\n.video-tutorial {\n border-radius: 8px;\n display: block;\n border: 1px solid var(--purple-500);\n border-radius: 12px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n padding: 12px;\n}\n\n.video-container iframe {\n border-radius: 8px;\n display: block;\n} "],"sourceRoot":""}]);
|
|
11624
11956
|
// Exports
|
|
11625
11957
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
11626
11958
|
|
|
@@ -12224,7 +12556,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
12224
12556
|
}
|
|
12225
12557
|
|
|
12226
12558
|
/* On compact screens, show only the icon */
|
|
12227
|
-
@container (max-width:
|
|
12559
|
+
@container (max-width: 260px) {
|
|
12228
12560
|
|
|
12229
12561
|
/* Shift the dropdown to the left to help prevent right-edge overflow */
|
|
12230
12562
|
.model-options {
|
|
@@ -12238,7 +12570,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
12238
12570
|
.model-name {
|
|
12239
12571
|
display: none;
|
|
12240
12572
|
}
|
|
12241
|
-
}`, "",{"version":3,"sources":["webpack://./style/ModelSelector.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* ModelSelector.css - responsive design with compact mode */\n\n.model-selector {\n position: relative;\n flex: 0 0 auto;\n margin: 0 8px;\n height: 20px; /* Match height of other elements */\n display: flex;\n align-items: center; /* Center vertically */\n color: var(--jp-ui-font-color2);\n}\n\n.model-selector:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.model-selector-dropdown {\n position: relative;\n height: 20px; /* Fixed height to match other elements */\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center; /* Ensure content is vertically centered */\n width: min-content;\n max-width: 18ch;\n}\n\n\n.selected-model {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n line-height: 1;\n}\n\n.dropdown-arrow {\n font-size: 8px;\n transition: transform 0.2s;\n margin-left: 4px;\n flex-shrink: 0; /* Prevent arrow from shrinking */\n}\n\n/* Model options dropdown */\n.model-options {\n position: absolute;\n bottom: 100%;\n max-height: 180px;\n overflow-y: auto;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n margin-bottom: 4px;\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: auto;\n}\n\n.model-option {\n padding: 4px 8px;\n font-size: 12px;\n /* Keep this size for readability */\n color: var(--jp-content-font-color1);\n cursor: pointer;\n transition: background-color 0.2s;\n white-space: nowrap;\n /* Prevent text wrapping */\n}\n\n.model-option:hover {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width:
|
|
12573
|
+
}`, "",{"version":3,"sources":["webpack://./style/ModelSelector.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* ModelSelector.css - responsive design with compact mode */\n\n.model-selector {\n position: relative;\n flex: 0 0 auto;\n margin: 0 8px;\n height: 20px; /* Match height of other elements */\n display: flex;\n align-items: center; /* Center vertically */\n color: var(--jp-ui-font-color2);\n}\n\n.model-selector:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.model-selector-dropdown {\n position: relative;\n height: 20px; /* Fixed height to match other elements */\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center; /* Ensure content is vertically centered */\n width: min-content;\n max-width: 18ch;\n}\n\n\n.selected-model {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n line-height: 1;\n}\n\n.dropdown-arrow {\n font-size: 8px;\n transition: transform 0.2s;\n margin-left: 4px;\n flex-shrink: 0; /* Prevent arrow from shrinking */\n}\n\n/* Model options dropdown */\n.model-options {\n position: absolute;\n bottom: 100%;\n max-height: 180px;\n overflow-y: auto;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n margin-bottom: 4px;\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: auto;\n}\n\n.model-option {\n padding: 4px 8px;\n font-size: 12px;\n /* Keep this size for readability */\n color: var(--jp-content-font-color1);\n cursor: pointer;\n transition: background-color 0.2s;\n white-space: nowrap;\n /* Prevent text wrapping */\n}\n\n.model-option:hover {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width: 260px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}"],"sourceRoot":""}]);
|
|
12242
12574
|
// Exports
|
|
12243
12575
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
12244
12576
|
|
|
@@ -13146,7 +13478,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
13146
13478
|
justify-content: center;
|
|
13147
13479
|
width: 12px;
|
|
13148
13480
|
max-height: 14px;
|
|
13149
|
-
|
|
13481
|
+
color: var(--jp-content-font-color3);
|
|
13482
|
+
}`, "",{"version":3,"sources":["webpack://./style/SelectedContextContainer.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;AACnB;;AAEA,6DAA6D;AAC7D;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;EAChB,WAAW;;EAEX,eAAe;EACf,YAAY;EACZ,kBAAkB;;EAElB,yCAAyC;EACzC,eAAe;;EAEf;IACE,yCAAyC;EAC3C;AACF;;AAEA;EACE,gBAAgB;EAChB,oCAAoC;EACpC,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,WAAW;EACX,gBAAgB;EAChB,oCAAoC;AACtC","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.context-container {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n}\n\n/* Consistent spacing for all children of context container */\n.context-container>* {\n margin: 2px;\n}\n\n.selected-context-container {\n display: flex;\n align-items: center;\n text-align: center;\n background-color: var(--jp-layout-color2);\n border-radius: 3px;\n padding: 4px 8px;\n margin: 2px;\n\n font-size: 12px;\n height: 20px;\n width: fit-content;\n\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n\n &:hover {\n background-color: var(--jp-layout-color3);\n }\n}\n\n.selected-context-container .rule-name {\n margin-left: 6px;\n color: var(--jp-content-font-color1);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.selected-context-container .icon {\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 12px;\n max-height: 14px;\n color: var(--jp-content-font-color3);\n}"],"sourceRoot":""}]);
|
|
13150
13483
|
// Exports
|
|
13151
13484
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
13152
13485
|
|
|
@@ -13409,7 +13742,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
13409
13742
|
gap: 8px;
|
|
13410
13743
|
min-width: 20px;
|
|
13411
13744
|
font-size: 12px;
|
|
13412
|
-
padding: 2px
|
|
13745
|
+
padding: 2px 8px;
|
|
13413
13746
|
}
|
|
13414
13747
|
|
|
13415
13748
|
.toggle-button-half:first-child {
|
|
@@ -13436,7 +13769,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
13436
13769
|
width: 16px;
|
|
13437
13770
|
height: 16px;
|
|
13438
13771
|
}
|
|
13439
|
-
`, "",{"version":3,"sources":["webpack://./style/ToggleButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,QAAQ;EACR,yCAAyC;EACzC,0CAA0C;EAC1C,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,eAAe;EACf,eAAe;EACf,
|
|
13772
|
+
`, "",{"version":3,"sources":["webpack://./style/ToggleButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,QAAQ;EACR,yCAAyC;EACzC,0CAA0C;EAC1C,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,eAAe;EACf,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,0CAA0C;AAC5C;;AAEA;EACE,WAAW;EACX,YAAY;AACd","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.toggle-button-container {\n display: flex;\n gap: 1px;\n background-color: var(--jp-layout-color2);\n border: 1px solid var(--jp-ui-font-color3);\n border-radius: 2px;\n width: 100px;\n overflow: hidden;\n}\n\n.toggle-button-half {\n flex: 0 0 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n min-width: 20px;\n font-size: 12px;\n padding: 2px 8px;\n}\n\n.toggle-button-half:first-child {\n border-radius: 0px;\n}\n\n.toggle-button-half:last-child {\n border-radius: 0px;\n}\n\n.toggle-button-half.selected {\n opacity: 1;\n background-color: var(--purple-400);\n color: var(--purple-700) !important;\n}\n\n.toggle-button-half.unselected {\n opacity: 0.6;\n background-color: transparent !important;\n color: var(--jp-ui-font-color2) !important;\n}\n\n.toggle-button-icon {\n width: 16px;\n height: 16px;\n}\n"],"sourceRoot":""}]);
|
|
13440
13773
|
// Exports
|
|
13441
13774
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
13442
13775
|
|
|
@@ -15584,4 +15917,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
15584
15917
|
/***/ })
|
|
15585
15918
|
|
|
15586
15919
|
}]);
|
|
15587
|
-
//# sourceMappingURL=lib_index_js.
|
|
15920
|
+
//# sourceMappingURL=lib_index_js.55d9f8ca386d87856d2d.js.map
|