mito-ai 0.1.33__py3-none-any.whl → 0.1.34__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/_version.py +1 -1
- mito_ai/anthropic_client.py +52 -54
- mito_ai/app_builder/handlers.py +2 -4
- mito_ai/completions/models.py +15 -1
- mito_ai/completions/prompt_builders/agent_system_message.py +10 -2
- mito_ai/completions/providers.py +79 -39
- mito_ai/constants.py +11 -24
- mito_ai/gemini_client.py +44 -48
- mito_ai/openai_client.py +30 -44
- mito_ai/tests/message_history/test_generate_short_chat_name.py +0 -4
- mito_ai/tests/open_ai_utils_test.py +18 -22
- mito_ai/tests/{test_anthropic_client.py → providers/test_anthropic_client.py} +37 -32
- mito_ai/tests/providers/test_azure.py +2 -6
- mito_ai/tests/providers/test_capabilities.py +120 -0
- mito_ai/tests/{test_gemini_client.py → providers/test_gemini_client.py} +40 -36
- mito_ai/tests/providers/test_mito_server_utils.py +448 -0
- mito_ai/tests/providers/test_model_resolution.py +130 -0
- mito_ai/tests/providers/test_openai_client.py +57 -0
- mito_ai/tests/providers/test_provider_completion_exception.py +66 -0
- mito_ai/tests/providers/test_provider_limits.py +42 -0
- mito_ai/tests/providers/test_providers.py +382 -0
- mito_ai/tests/providers/test_retry_logic.py +389 -0
- mito_ai/tests/providers/utils.py +85 -0
- mito_ai/tests/test_constants.py +15 -2
- mito_ai/tests/test_telemetry.py +12 -0
- mito_ai/utils/anthropic_utils.py +21 -29
- mito_ai/utils/gemini_utils.py +18 -22
- mito_ai/utils/mito_server_utils.py +92 -0
- mito_ai/utils/open_ai_utils.py +22 -46
- mito_ai/utils/provider_utils.py +49 -0
- mito_ai/utils/telemetry_utils.py +11 -1
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.281f4b9af60d620c6fb1.js → mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.a20772bc113422d0f505.js +737 -319
- mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.a20772bc113422d0f505.js.map +1 -0
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4f1d00fd0c58fcc05d8d.js → mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.51d07439b02aaa830975.js +13 -16
- mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.51d07439b02aaa830975.js.map +1 -0
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js → mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.76efcc5c3be4056457ee.js +6 -2
- mito_ai-0.1.34.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.76efcc5c3be4056457ee.js.map +1 -0
- {mito_ai-0.1.33.dist-info → mito_ai-0.1.34.dist-info}/METADATA +1 -1
- {mito_ai-0.1.33.dist-info → mito_ai-0.1.34.dist-info}/RECORD +52 -43
- mito_ai/tests/providers_test.py +0 -438
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.281f4b9af60d620c6fb1.js.map +0 -1
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4f1d00fd0c58fcc05d8d.js.map +0 -1
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js.map +0 -1
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js +0 -7842
- mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js.map +0 -1
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js.map +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.33.data → mito_ai-0.1.34.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.33.dist-info → mito_ai-0.1.34.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.33.dist-info → mito_ai-0.1.34.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.33.dist-info → mito_ai-0.1.34.dist-info}/licenses/LICENSE +0 -0
|
@@ -524,12 +524,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
524
524
|
/* harmony export */ });
|
|
525
525
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
526
526
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
527
|
-
/* harmony import */ var
|
|
528
|
-
/* harmony import */ var
|
|
527
|
+
/* harmony import */ var _PythonCode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
|
|
528
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
|
|
529
529
|
/* harmony import */ var _style_CodeBlock_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/CodeBlock.css */ "./style/CodeBlock.css");
|
|
530
|
-
/* harmony import */ var
|
|
531
|
-
/* harmony import */ var
|
|
532
|
-
/* harmony import */ var
|
|
530
|
+
/* harmony import */ var _style_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/AgentComponentHeader.css */ "./style/AgentComponentHeader.css");
|
|
531
|
+
/* harmony import */ var _icons_CodeIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../icons/CodeIcon */ "./lib/icons/CodeIcon.js");
|
|
532
|
+
/* harmony import */ var _CodeBlockToolbar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./CodeBlockToolbar */ "./lib/Extensions/AiChat/ChatMessage/CodeBlockToolbar.js");
|
|
533
|
+
/* harmony import */ var _components_AgentComponents_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../components/AgentComponents/AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
|
|
533
534
|
/*
|
|
534
535
|
* Copyright (c) Saga Inc.
|
|
535
536
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -541,31 +542,21 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
541
542
|
|
|
542
543
|
|
|
543
544
|
|
|
544
|
-
|
|
545
|
+
|
|
546
|
+
const AssistantCodeBlock = ({ code, codeSummary, isCodeComplete, renderMimeRegistry, previewAICode, acceptAICode, rejectAICode, isLastAiMessage, codeReviewStatus, agentModeEnabled, isErrorFixup }) => {
|
|
545
547
|
const [isCodeExpanded, setIsCodeExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
546
|
-
// Memoize calculations
|
|
547
|
-
const lineCount = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => code.split('\n').length - 2, [code]);
|
|
548
548
|
const shouldShowToolbar = isLastAiMessage || isCodeComplete;
|
|
549
549
|
if (agentModeEnabled) {
|
|
550
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,
|
|
551
|
-
'agent-mode':
|
|
552
|
-
'agent-mode-collapsed': !isCodeExpanded
|
|
550
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)('code-block-container', 'agent-mode', {
|
|
551
|
+
'agent-mode-collapsed': !isCodeExpanded,
|
|
553
552
|
}) },
|
|
554
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("
|
|
555
|
-
|
|
556
|
-
}) },
|
|
557
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-mode-toggle-content" },
|
|
558
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CodeIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null),
|
|
559
|
-
"Generated ",
|
|
560
|
-
lineCount,
|
|
561
|
-
" lines of code"),
|
|
562
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_4__["default"], { isExpanded: isCodeExpanded })),
|
|
563
|
-
isCodeExpanded && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_5__["default"], { code: code, renderMimeRegistry: renderMimeRegistry }))));
|
|
553
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CodeIcon__WEBPACK_IMPORTED_MODULE_5__["default"], null), text: codeSummary !== null && codeSummary !== void 0 ? codeSummary : 'Generated code', onClick: () => setIsCodeExpanded(!isCodeExpanded), isExpanded: isCodeExpanded, displayBorder: !isErrorFixup, className: isErrorFixup ? 'error-fixup' : undefined }),
|
|
554
|
+
isCodeExpanded && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_6__["default"], { code: code, renderMimeRegistry: renderMimeRegistry }))));
|
|
564
555
|
}
|
|
565
556
|
else {
|
|
566
557
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "code-block-container" },
|
|
567
|
-
shouldShowToolbar && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
568
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
558
|
+
shouldShowToolbar && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_CodeBlockToolbar__WEBPACK_IMPORTED_MODULE_7__["default"], { code: code, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, onPreview: previewAICode, onAccept: acceptAICode, onReject: rejectAICode })),
|
|
559
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_6__["default"], { code: code, renderMimeRegistry: renderMimeRegistry })));
|
|
569
560
|
}
|
|
570
561
|
};
|
|
571
562
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AssistantCodeBlock);
|
|
@@ -949,7 +940,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
949
940
|
/* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
|
|
950
941
|
/* harmony import */ var _style_ChatMessage_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatMessage.css */ "./style/ChatMessage.css");
|
|
951
942
|
/* harmony import */ var _style_MarkdownMessage_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/MarkdownMessage.css */ "./style/MarkdownMessage.css");
|
|
952
|
-
/* harmony import */ var
|
|
943
|
+
/* harmony import */ var _components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../components/AgentComponents/GetCellOutputToolUI */ "./lib/components/AgentComponents/GetCellOutputToolUI.js");
|
|
953
944
|
/*
|
|
954
945
|
* Copyright (c) Saga Inc.
|
|
955
946
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -978,6 +969,7 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
|
|
|
978
969
|
}
|
|
979
970
|
const editable = message.role === 'user';
|
|
980
971
|
const messageContentParts = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.splitStringWithCodeBlocks)(message);
|
|
972
|
+
const messageContent = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.getContentStringFromMessage)(message);
|
|
981
973
|
const handleEditClick = () => {
|
|
982
974
|
setIsEditing(true);
|
|
983
975
|
};
|
|
@@ -1005,7 +997,6 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
|
|
|
1005
997
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AlertBlock__WEBPACK_IMPORTED_MODULE_6__["default"], { content: message.content, mitoAIConnectionErrorType: mitoAIConnectionErrorType })));
|
|
1006
998
|
}
|
|
1007
999
|
// If the message is empty, don't render anything
|
|
1008
|
-
const messageContent = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.getContentStringFromMessage)(message);
|
|
1009
1000
|
if (messageContent === undefined || messageContent === '') {
|
|
1010
1001
|
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null);
|
|
1011
1002
|
}
|
|
@@ -1015,13 +1006,14 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
|
|
|
1015
1006
|
let isCodeComplete = false;
|
|
1016
1007
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message", { "message-user": message.role === 'user' }, { 'message-assistant-chat': message.role === 'assistant' }) },
|
|
1017
1008
|
messageContentParts.map((messagePart, index) => {
|
|
1009
|
+
var _a, _b;
|
|
1018
1010
|
if (messagePart.startsWith(_utils_strings__WEBPACK_IMPORTED_MODULE_3__.PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE)) {
|
|
1019
1011
|
isCodeComplete = messagePart.endsWith('```');
|
|
1020
1012
|
// Make sure that there is actually code in the message.
|
|
1021
1013
|
// An empty code will look like this '```python ```'
|
|
1022
1014
|
if (messagePart.length > 14) {
|
|
1023
1015
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
1024
|
-
message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { code: messagePart, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { code: messagePart, isCodeComplete: isCodeComplete, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, agentModeEnabled: agentModeEnabled })),
|
|
1016
|
+
message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { code: messagePart, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { code: messagePart, codeSummary: (_b = (_a = agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.cell_update) === null || _a === void 0 ? void 0 : _a.code_summary) !== null && _b !== void 0 ? _b : undefined, isCodeComplete: isCodeComplete, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, agentModeEnabled: agentModeEnabled })),
|
|
1025
1017
|
isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' &&
|
|
1026
1018
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
|
|
1027
1019
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__["default"], { onClick: () => { previewAICode(); }, text: 'Overwrite Active Cell', icon: _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_10__["default"], title: 'Write the Ai generated code to the active cell in the jupyter notebook, replacing the current code.', variant: 'gray', width: 'fit-contents' }),
|
|
@@ -1053,7 +1045,7 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
|
|
|
1053
1045
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "message-start-editing-button", onClick: handleEditClick, title: "Edit message" },
|
|
1054
1046
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_15__["default"], null))),
|
|
1055
1047
|
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'get_cell_output' &&
|
|
1056
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1048
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_16__["default"], null)));
|
|
1057
1049
|
};
|
|
1058
1050
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatMessage);
|
|
1059
1051
|
|
|
@@ -1531,54 +1523,59 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1531
1523
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1532
1524
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1533
1525
|
/* harmony export */ });
|
|
1534
|
-
/* harmony import */ var
|
|
1535
|
-
/* harmony import */ var
|
|
1536
|
-
/* harmony import */ var
|
|
1537
|
-
/* harmony import */ var
|
|
1538
|
-
/* harmony import */ var
|
|
1539
|
-
/* harmony import */ var
|
|
1540
|
-
/* harmony import */ var
|
|
1541
|
-
/* harmony import */ var
|
|
1542
|
-
/* harmony import */ var _style_TextButton_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/TextButton.css */ "./style/TextButton.css");
|
|
1543
|
-
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @jupyterlab/ui-components */ "webpack/sharing/consume/default/@jupyterlab/ui-components");
|
|
1544
|
-
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_6__);
|
|
1545
|
-
/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
|
|
1546
|
-
/* harmony import */ var _icons_MitoLogo__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../icons/MitoLogo */ "./lib/icons/MitoLogo.js");
|
|
1547
|
-
/* harmony import */ var _ChatMessage_ChatInput__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./ChatMessage/ChatInput */ "./lib/Extensions/AiChat/ChatMessage/ChatInput.js");
|
|
1548
|
-
/* harmony import */ var _ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./ChatMessage/ChatMessage */ "./lib/Extensions/AiChat/ChatMessage/ChatMessage.js");
|
|
1549
|
-
/* harmony import */ var _ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./ChatMessage/ScrollableSuggestions */ "./lib/Extensions/AiChat/ChatMessage/ScrollableSuggestions.js");
|
|
1550
|
-
/* harmony import */ var _ChatHistoryManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ChatHistoryManager */ "./lib/Extensions/AiChat/ChatHistoryManager.js");
|
|
1551
|
-
/* harmony import */ var _CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./CodeDiffDisplay */ "./lib/Extensions/AiChat/CodeDiffDisplay.js");
|
|
1552
|
-
/* harmony import */ var _components_ToggleButton__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../components/ToggleButton */ "./lib/components/ToggleButton.js");
|
|
1553
|
-
/* harmony import */ var _components_IconButton__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../components/IconButton */ "./lib/components/IconButton.js");
|
|
1554
|
-
/* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
|
|
1526
|
+
/* harmony import */ var _codemirror_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @codemirror/state */ "webpack/sharing/consume/default/@codemirror/state");
|
|
1527
|
+
/* harmony import */ var _codemirror_state__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codemirror_state__WEBPACK_IMPORTED_MODULE_0__);
|
|
1528
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
1529
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
1530
|
+
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @jupyterlab/ui-components */ "webpack/sharing/consume/default/@jupyterlab/ui-components");
|
|
1531
|
+
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__);
|
|
1532
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
1533
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__);
|
|
1555
1534
|
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
1556
|
-
/* harmony import */ var
|
|
1557
|
-
/* harmony import */ var
|
|
1558
|
-
/* harmony import */ var
|
|
1559
|
-
/* harmony import */ var
|
|
1560
|
-
/* harmony import */ var
|
|
1561
|
-
/* harmony import */ var _components_LoadingCircle__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../components/LoadingCircle */ "./lib/components/LoadingCircle.js");
|
|
1535
|
+
/* harmony import */ var _components_AgentComponents_ErrorFixupToolUI__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../components/AgentComponents/ErrorFixupToolUI */ "./lib/components/AgentComponents/ErrorFixupToolUI.js");
|
|
1536
|
+
/* harmony import */ var _components_DropdownMenu__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../components/DropdownMenu */ "./lib/components/DropdownMenu.js");
|
|
1537
|
+
/* harmony import */ var _components_IconButton__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../components/IconButton */ "./lib/components/IconButton.js");
|
|
1538
|
+
/* harmony import */ var _components_LoadingCircle__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../components/LoadingCircle */ "./lib/components/LoadingCircle.js");
|
|
1539
|
+
/* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
|
|
1562
1540
|
/* harmony import */ var _components_ModelSelector__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../components/ModelSelector */ "./lib/components/ModelSelector.js");
|
|
1541
|
+
/* harmony import */ var _components_NextStepsPills__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../components/NextStepsPills */ "./lib/components/NextStepsPills.js");
|
|
1542
|
+
/* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
|
|
1543
|
+
/* harmony import */ var _components_ToggleButton__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../components/ToggleButton */ "./lib/components/ToggleButton.js");
|
|
1544
|
+
/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
|
|
1545
|
+
/* harmony import */ var _icons_MitoLogo__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../icons/MitoLogo */ "./lib/icons/MitoLogo.js");
|
|
1546
|
+
/* harmony import */ var _icons_UndoIcon__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../icons/UndoIcon */ "./lib/icons/UndoIcon.js");
|
|
1547
|
+
/* harmony import */ var _utils_agentActions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../utils/agentActions */ "./lib/utils/agentActions.js");
|
|
1563
1548
|
/* harmony import */ var _utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../utils/blacklistedWords */ "./lib/utils/blacklistedWords.js");
|
|
1564
|
-
/* harmony import */ var _components_DropdownMenu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../components/DropdownMenu */ "./lib/components/DropdownMenu.js");
|
|
1565
|
-
/* harmony import */ var _SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
1566
|
-
/* harmony import */ var _FirstMessage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FirstMessage */ "./lib/Extensions/AiChat/FirstMessage.js");
|
|
1567
|
-
/* harmony import */ var _CTACarousel__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./CTACarousel */ "./lib/Extensions/AiChat/CTACarousel.js");
|
|
1568
|
-
/* harmony import */ var _components_NextStepsPills__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../components/NextStepsPills */ "./lib/components/NextStepsPills.js");
|
|
1569
|
-
/* harmony import */ var _icons_UndoIcon__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../icons/UndoIcon */ "./lib/icons/UndoIcon.js");
|
|
1570
|
-
/* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
|
|
1571
1549
|
/* harmony import */ var _utils_checkpoint__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../utils/checkpoint */ "./lib/utils/checkpoint.js");
|
|
1550
|
+
/* harmony import */ var _utils_chatHistory__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../utils/chatHistory */ "./lib/utils/chatHistory.js");
|
|
1551
|
+
/* harmony import */ var _utils_codeDiff__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../utils/codeDiff */ "./lib/utils/codeDiff.js");
|
|
1552
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
|
|
1553
|
+
/* harmony import */ var _utils_scroll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/scroll */ "./lib/utils/scroll.js");
|
|
1554
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
1572
1555
|
/* harmony import */ var _utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/waitForNotebookReady */ "./lib/utils/waitForNotebookReady.js");
|
|
1556
|
+
/* harmony import */ var _SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
1557
|
+
/* harmony import */ var _CTACarousel__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./CTACarousel */ "./lib/Extensions/AiChat/CTACarousel.js");
|
|
1558
|
+
/* harmony import */ var _CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./CodeDiffDisplay */ "./lib/Extensions/AiChat/CodeDiffDisplay.js");
|
|
1559
|
+
/* harmony import */ var _FirstMessage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FirstMessage */ "./lib/Extensions/AiChat/FirstMessage.js");
|
|
1560
|
+
/* harmony import */ var _ChatMessage_ChatInput__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./ChatMessage/ChatInput */ "./lib/Extensions/AiChat/ChatMessage/ChatInput.js");
|
|
1561
|
+
/* harmony import */ var _ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./ChatMessage/ChatMessage */ "./lib/Extensions/AiChat/ChatMessage/ChatMessage.js");
|
|
1562
|
+
/* harmony import */ var _ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./ChatMessage/ScrollableSuggestions */ "./lib/Extensions/AiChat/ChatMessage/ScrollableSuggestions.js");
|
|
1563
|
+
/* harmony import */ var _ChatHistoryManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ChatHistoryManager */ "./lib/Extensions/AiChat/ChatHistoryManager.js");
|
|
1564
|
+
/* harmony import */ var _style_button_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/button.css */ "./style/button.css");
|
|
1565
|
+
/* harmony import */ var _style_ChatTaskpane_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/ChatTaskpane.css */ "./style/ChatTaskpane.css");
|
|
1566
|
+
/* harmony import */ var _style_TextButton_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../style/TextButton.css */ "./style/TextButton.css");
|
|
1573
1567
|
/*
|
|
1574
1568
|
* Copyright (c) Saga Inc.
|
|
1575
1569
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
1576
1570
|
*/
|
|
1571
|
+
// External libraries
|
|
1577
1572
|
|
|
1578
1573
|
|
|
1579
1574
|
|
|
1580
1575
|
|
|
1576
|
+
// Internal imports - Commands
|
|
1581
1577
|
|
|
1578
|
+
// Internal imports - Components
|
|
1582
1579
|
|
|
1583
1580
|
|
|
1584
1581
|
|
|
@@ -1589,9 +1586,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1589
1586
|
|
|
1590
1587
|
|
|
1591
1588
|
|
|
1589
|
+
// Internal imports - Icons
|
|
1592
1590
|
|
|
1593
1591
|
|
|
1594
1592
|
|
|
1593
|
+
// Internal imports - Utils
|
|
1595
1594
|
|
|
1596
1595
|
|
|
1597
1596
|
|
|
@@ -1602,6 +1601,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1602
1601
|
|
|
1603
1602
|
|
|
1604
1603
|
|
|
1604
|
+
// Internal imports - Chat components
|
|
1605
1605
|
|
|
1606
1606
|
|
|
1607
1607
|
|
|
@@ -1609,6 +1609,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1609
1609
|
|
|
1610
1610
|
|
|
1611
1611
|
|
|
1612
|
+
// Styles
|
|
1613
|
+
|
|
1614
|
+
|
|
1612
1615
|
|
|
1613
1616
|
const AGENT_EXECUTION_DEPTH_LIMIT = 20;
|
|
1614
1617
|
const getDefaultChatHistoryManager = (notebookTracker, contextManager) => {
|
|
@@ -1616,26 +1619,26 @@ const getDefaultChatHistoryManager = (notebookTracker, contextManager) => {
|
|
|
1616
1619
|
return chatHistoryManager;
|
|
1617
1620
|
};
|
|
1618
1621
|
const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app, operatingSystem, websocketClient, }) => {
|
|
1619
|
-
const [chatHistoryManager, setChatHistoryManager] = (0,
|
|
1620
|
-
const chatHistoryManagerRef = (0,
|
|
1621
|
-
const [loadingAIResponse, setLoadingAIResponse] = (0,
|
|
1622
|
+
const [chatHistoryManager, setChatHistoryManager] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(() => getDefaultChatHistoryManager(notebookTracker, contextManager));
|
|
1623
|
+
const chatHistoryManagerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(chatHistoryManager);
|
|
1624
|
+
const [loadingAIResponse, setLoadingAIResponse] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
|
|
1622
1625
|
// Store the original cell before diff so that we can revert to it if the user rejects the AI's code
|
|
1623
|
-
const cellStateBeforeDiff = (0,
|
|
1626
|
+
const cellStateBeforeDiff = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(undefined);
|
|
1624
1627
|
// Three possible states:
|
|
1625
1628
|
// 1. chatPreview: state where the user has not yet pressed the apply button.
|
|
1626
1629
|
// 2. codeCellPreview: state where the user is seeing the code diffs and deciding how they want to respond.
|
|
1627
1630
|
// 3. applied: state where the user has applied the code to the code cell
|
|
1628
|
-
const [codeReviewStatus, setCodeReviewStatus] = (0,
|
|
1631
|
+
const [codeReviewStatus, setCodeReviewStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('chatPreview');
|
|
1629
1632
|
// Add this ref for the chat messages container
|
|
1630
|
-
const chatMessagesRef = (0,
|
|
1633
|
+
const chatMessagesRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);
|
|
1631
1634
|
/*
|
|
1632
1635
|
Keep track of agent mode enabled state and use keep a ref in sync with it
|
|
1633
1636
|
so that we can access the most up-to-date value during a function's execution.
|
|
1634
1637
|
Without it, we would always use the initial value of agentModeEnabled.
|
|
1635
1638
|
*/
|
|
1636
|
-
const [agentModeEnabled, setAgentModeEnabled] = (0,
|
|
1637
|
-
const agentModeEnabledRef = (0,
|
|
1638
|
-
(0,
|
|
1639
|
+
const [agentModeEnabled, setAgentModeEnabled] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);
|
|
1640
|
+
const agentModeEnabledRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(agentModeEnabled);
|
|
1641
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1639
1642
|
// Update the ref whenever agentModeEnabled state changes
|
|
1640
1643
|
agentModeEnabledRef.current = agentModeEnabled;
|
|
1641
1644
|
}, [agentModeEnabled]);
|
|
@@ -1643,40 +1646,40 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1643
1646
|
Auto-scroll follow mode: tracks whether we should automatically scroll to bottom
|
|
1644
1647
|
when new messages arrive. Set to false when user manually scrolls up.
|
|
1645
1648
|
*/
|
|
1646
|
-
const [autoScrollFollowMode, setAutoScrollFollowMode] = (0,
|
|
1647
|
-
const autoScrollFollowModeRef = (0,
|
|
1648
|
-
(0,
|
|
1649
|
+
const [autoScrollFollowMode, setAutoScrollFollowMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);
|
|
1650
|
+
const autoScrollFollowModeRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(autoScrollFollowMode);
|
|
1651
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1649
1652
|
autoScrollFollowModeRef.current = autoScrollFollowMode;
|
|
1650
1653
|
}, [autoScrollFollowMode]);
|
|
1651
|
-
const [chatThreads, setChatThreads] = (0,
|
|
1654
|
+
const [chatThreads, setChatThreads] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);
|
|
1652
1655
|
// The active thread id is originally set by the initializeChatHistory function, which will either set it to
|
|
1653
1656
|
// the last active thread or create a new thread if there are no previously existing threads. So that
|
|
1654
1657
|
// we don't need to handle the undefined case everywhere, we just default to an empty string knowing that
|
|
1655
1658
|
// it will always be set to a valid thread id before it is used.
|
|
1656
|
-
const activeThreadIdRef = (0,
|
|
1659
|
+
const activeThreadIdRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)('');
|
|
1657
1660
|
/*
|
|
1658
1661
|
Three possible states:
|
|
1659
1662
|
1. working: the agent is working on the task
|
|
1660
1663
|
2. stopping: the agent is stopping after it has received ai response it is waiting on
|
|
1661
1664
|
3. idle: the agent is idle
|
|
1662
1665
|
*/
|
|
1663
|
-
const [agentExecutionStatus, setAgentExecutionStatus] = (0,
|
|
1666
|
+
const [agentExecutionStatus, setAgentExecutionStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('idle');
|
|
1664
1667
|
// We use a ref to always access the most up-to-date value during a function's execution. Refs immediately reflect changes,
|
|
1665
1668
|
// unlike state variables, which are captured at the beginning of a function and may not reflect updates made during execution.
|
|
1666
|
-
const shouldContinueAgentExecution = (0,
|
|
1667
|
-
const streamingContentRef = (0,
|
|
1668
|
-
const streamHandlerRef = (0,
|
|
1669
|
+
const shouldContinueAgentExecution = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(true);
|
|
1670
|
+
const streamingContentRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)('');
|
|
1671
|
+
const streamHandlerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);
|
|
1669
1672
|
// State for managing next steps from responses
|
|
1670
1673
|
// If the user hides the next steps, we keep them hidden until they re-open them
|
|
1671
|
-
const [nextSteps, setNextSteps] = (0,
|
|
1672
|
-
const [displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable] = (0,
|
|
1674
|
+
const [nextSteps, setNextSteps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);
|
|
1675
|
+
const [displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);
|
|
1673
1676
|
// Track if checkpoint exists for UI updates
|
|
1674
|
-
const [hasCheckpoint, setHasCheckpoint] = (0,
|
|
1677
|
+
const [hasCheckpoint, setHasCheckpoint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
|
|
1675
1678
|
const updateModelOnBackend = async (model) => {
|
|
1676
1679
|
try {
|
|
1677
1680
|
await websocketClient.sendMessage({
|
|
1678
1681
|
type: "update_model_config",
|
|
1679
|
-
message_id:
|
|
1682
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1680
1683
|
metadata: {
|
|
1681
1684
|
promptType: "update_model_config",
|
|
1682
1685
|
model: model
|
|
@@ -1695,7 +1698,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1695
1698
|
};
|
|
1696
1699
|
const chatThreadsResponse = await websocketClient.sendMessage({
|
|
1697
1700
|
type: "get_threads",
|
|
1698
|
-
message_id:
|
|
1701
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1699
1702
|
metadata: metadata,
|
|
1700
1703
|
stream: false
|
|
1701
1704
|
});
|
|
@@ -1708,7 +1711,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1708
1711
|
};
|
|
1709
1712
|
const fetchHistoryCompletionRequest = {
|
|
1710
1713
|
type: 'fetch_history',
|
|
1711
|
-
message_id:
|
|
1714
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1712
1715
|
metadata: metadata,
|
|
1713
1716
|
stream: false
|
|
1714
1717
|
};
|
|
@@ -1752,7 +1755,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1752
1755
|
};
|
|
1753
1756
|
const response = await websocketClient.sendMessage({
|
|
1754
1757
|
type: "delete_thread",
|
|
1755
|
-
message_id:
|
|
1758
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1756
1759
|
metadata: metadata,
|
|
1757
1760
|
stream: false
|
|
1758
1761
|
});
|
|
@@ -1788,7 +1791,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1788
1791
|
try {
|
|
1789
1792
|
const response = await websocketClient.sendMessage({
|
|
1790
1793
|
type: 'start_new_chat',
|
|
1791
|
-
message_id:
|
|
1794
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1792
1795
|
metadata: {
|
|
1793
1796
|
promptType: 'start_new_chat'
|
|
1794
1797
|
},
|
|
@@ -1802,7 +1805,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1802
1805
|
}
|
|
1803
1806
|
return newChatHistoryManager;
|
|
1804
1807
|
};
|
|
1805
|
-
(0,
|
|
1808
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1806
1809
|
const initializeChatHistory = async () => {
|
|
1807
1810
|
try {
|
|
1808
1811
|
// Check for saved model preference in localStorage
|
|
@@ -1822,7 +1825,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1822
1825
|
// 1. Fetch available chat threads.
|
|
1823
1826
|
const chatThreadsResponse = await websocketClient.sendMessage({
|
|
1824
1827
|
type: "get_threads",
|
|
1825
|
-
message_id:
|
|
1828
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1826
1829
|
metadata: {
|
|
1827
1830
|
promptType: "get_threads"
|
|
1828
1831
|
},
|
|
@@ -1851,7 +1854,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1851
1854
|
};
|
|
1852
1855
|
void initializeChatHistory();
|
|
1853
1856
|
}, [websocketClient]);
|
|
1854
|
-
(0,
|
|
1857
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1855
1858
|
/*
|
|
1856
1859
|
Why we use a ref (chatHistoryManagerRef) instead of directly accessing the state (chatHistoryManager):
|
|
1857
1860
|
|
|
@@ -1875,13 +1878,13 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1875
1878
|
chatHistoryManagerRef.current = chatHistoryManager;
|
|
1876
1879
|
}, [chatHistoryManager]);
|
|
1877
1880
|
// Scroll to bottom whenever chat history updates, but only if in follow mode
|
|
1878
|
-
(0,
|
|
1881
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1879
1882
|
if (autoScrollFollowMode) {
|
|
1880
1883
|
(0,_utils_scroll__WEBPACK_IMPORTED_MODULE_11__.scrollToDiv)(chatMessagesRef);
|
|
1881
1884
|
}
|
|
1882
1885
|
}, [chatHistoryManager.getDisplayOptimizedHistory().length, chatHistoryManager, autoScrollFollowMode]);
|
|
1883
1886
|
// Add scroll event handler to detect manual scrolling
|
|
1884
|
-
(0,
|
|
1887
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
1885
1888
|
const chatContainer = chatMessagesRef.current;
|
|
1886
1889
|
if (!chatContainer)
|
|
1887
1890
|
return;
|
|
@@ -1915,6 +1918,13 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1915
1918
|
to the AI chat.
|
|
1916
1919
|
*/
|
|
1917
1920
|
const sendSmartDebugMessage = async (errorMessage) => {
|
|
1921
|
+
// Check if user is in agent mode and switch to chat mode if needed
|
|
1922
|
+
if (agentModeEnabledRef.current) {
|
|
1923
|
+
await startNewChat();
|
|
1924
|
+
setAgentModeEnabled(false);
|
|
1925
|
+
// Clear agent checkpoint when switching modes
|
|
1926
|
+
setHasCheckpoint(false);
|
|
1927
|
+
}
|
|
1918
1928
|
// Step 0: reset the state for a new message
|
|
1919
1929
|
resetForNewMessage();
|
|
1920
1930
|
// Enable follow mode when sending a debug message
|
|
@@ -1927,7 +1937,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1927
1937
|
// Step 2: Send the message to the AI
|
|
1928
1938
|
const smartDebugCompletionRequest = {
|
|
1929
1939
|
type: 'smartDebug',
|
|
1930
|
-
message_id:
|
|
1940
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1931
1941
|
metadata: smartDebugMetadata,
|
|
1932
1942
|
stream: true
|
|
1933
1943
|
};
|
|
@@ -1946,7 +1956,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1946
1956
|
// Step 2: Send the message to the AI
|
|
1947
1957
|
const smartDebugCompletionRequest = {
|
|
1948
1958
|
type: 'agent:autoErrorFixup',
|
|
1949
|
-
message_id:
|
|
1959
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1950
1960
|
metadata: agentSmartDebugMessage,
|
|
1951
1961
|
stream: false
|
|
1952
1962
|
};
|
|
@@ -1965,7 +1975,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1965
1975
|
// Step 2: Send the message to the AI
|
|
1966
1976
|
const explainCompletionRequest = {
|
|
1967
1977
|
type: 'codeExplain',
|
|
1968
|
-
message_id:
|
|
1978
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
1969
1979
|
metadata: explainCodeMetadata,
|
|
1970
1980
|
stream: true
|
|
1971
1981
|
};
|
|
@@ -1996,7 +2006,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
1996
2006
|
// Step 2: Send the message to the AI
|
|
1997
2007
|
const completionRequest = {
|
|
1998
2008
|
type: 'agent:execution',
|
|
1999
|
-
message_id:
|
|
2009
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
2000
2010
|
metadata: agentExecutionMetadata,
|
|
2001
2011
|
stream: false
|
|
2002
2012
|
};
|
|
@@ -2032,7 +2042,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2032
2042
|
}
|
|
2033
2043
|
const completionRequest = {
|
|
2034
2044
|
type: 'chat',
|
|
2035
|
-
message_id:
|
|
2045
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__.UUID.uuid4(),
|
|
2036
2046
|
metadata: chatMessageMetadata,
|
|
2037
2047
|
stream: true
|
|
2038
2048
|
};
|
|
@@ -2353,7 +2363,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2353
2363
|
updateCellToolbarButtons();
|
|
2354
2364
|
}
|
|
2355
2365
|
};
|
|
2356
|
-
(0,
|
|
2366
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
2357
2367
|
/*
|
|
2358
2368
|
Add a new command to the JupyterLab command registry that applies the latest AI generated code
|
|
2359
2369
|
to the active code cell. Do this inside of the useEffect so that we only register the command
|
|
@@ -2445,7 +2455,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2445
2455
|
}
|
|
2446
2456
|
});
|
|
2447
2457
|
}, []);
|
|
2448
|
-
(0,
|
|
2458
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
2449
2459
|
// Register keyboard shortcuts
|
|
2450
2460
|
const accelYDisposable = app.commands.addKeyBinding({
|
|
2451
2461
|
command: codeReviewStatus === 'chatPreview' ?
|
|
@@ -2475,7 +2485,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2475
2485
|
app.commands.notifyCommandChanged(_commands__WEBPACK_IMPORTED_MODULE_18__.COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE);
|
|
2476
2486
|
app.commands.notifyCommandChanged(_commands__WEBPACK_IMPORTED_MODULE_18__.COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE);
|
|
2477
2487
|
};
|
|
2478
|
-
const codeDiffStripesCompartments =
|
|
2488
|
+
const codeDiffStripesCompartments = react__WEBPACK_IMPORTED_MODULE_1___default().useRef(new Map());
|
|
2479
2489
|
// Function to update the extensions of code cells
|
|
2480
2490
|
const updateCodeCellsExtensions = (unifiedDiffLines) => {
|
|
2481
2491
|
var _a;
|
|
@@ -2497,11 +2507,11 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2497
2507
|
let compartment = codeDiffStripesCompartments.current.get(cellId);
|
|
2498
2508
|
if (!compartment) {
|
|
2499
2509
|
// Create a new compartment and store it
|
|
2500
|
-
compartment = new
|
|
2510
|
+
compartment = new _codemirror_state__WEBPACK_IMPORTED_MODULE_0__.Compartment();
|
|
2501
2511
|
codeDiffStripesCompartments.current.set(cellId, compartment);
|
|
2502
2512
|
// Apply the initial configuration
|
|
2503
2513
|
editorView.dispatch({
|
|
2504
|
-
effects:
|
|
2514
|
+
effects: _codemirror_state__WEBPACK_IMPORTED_MODULE_0__.StateEffect.appendConfig.of(compartment.of(unifiedDiffLines !== undefined && isActiveCodeCell ? (0,_CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_19__.codeDiffStripesExtension)({ unifiedDiffLines: unifiedDiffLines }) : [])),
|
|
2505
2515
|
});
|
|
2506
2516
|
}
|
|
2507
2517
|
else {
|
|
@@ -2518,23 +2528,36 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2518
2528
|
});
|
|
2519
2529
|
};
|
|
2520
2530
|
const lastAIMessagesIndex = chatHistoryManager.getLastAIMessageIndex();
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2531
|
+
let processedDisplayOptimizedChatHistory = [];
|
|
2532
|
+
// In agent mode, we group consecutive error messages together.
|
|
2533
|
+
// In chat mode, we display messages individually as they were sent
|
|
2534
|
+
if (agentModeEnabled) {
|
|
2535
|
+
processedDisplayOptimizedChatHistory = (0,_utils_chatHistory__WEBPACK_IMPORTED_MODULE_20__.processChatHistoryForErrorGrouping)(chatHistoryManager.getDisplayOptimizedHistory());
|
|
2536
|
+
}
|
|
2537
|
+
else {
|
|
2538
|
+
processedDisplayOptimizedChatHistory = chatHistoryManager.getDisplayOptimizedHistory();
|
|
2539
|
+
}
|
|
2540
|
+
// Type guard function to check if an item is GroupedErrorMessages
|
|
2541
|
+
const isGroupedErrorMessages = (item) => {
|
|
2542
|
+
return Array.isArray(item);
|
|
2543
|
+
};
|
|
2544
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane" },
|
|
2545
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header" },
|
|
2546
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header-left" },
|
|
2547
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_21__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.settingsIcon.react, null), title: "Mito AI Settings", onClick: () => {
|
|
2548
|
+
void app.commands.execute(_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_22__.COMMAND_MITO_AI_SETTINGS);
|
|
2526
2549
|
} })),
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2550
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header-right" },
|
|
2551
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_21__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.addIcon.react, null), title: "Start New Chat", onClick: async () => { await startNewChat(); } }),
|
|
2552
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_DropdownMenu__WEBPACK_IMPORTED_MODULE_23__["default"], { trigger: react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", { className: "icon-button", title: "Chat Threads", onClick: fetchChatThreads },
|
|
2553
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.historyIcon.react, null)), items: chatThreads.length > 0
|
|
2531
2554
|
? chatThreads.map(thread => ({
|
|
2532
2555
|
label: thread.name,
|
|
2533
|
-
primaryIcon: activeThreadIdRef.current === thread.thread_id ?
|
|
2556
|
+
primaryIcon: activeThreadIdRef.current === thread.thread_id ? _icons__WEBPACK_IMPORTED_MODULE_24__.OpenIndicatorLabIcon.react : undefined,
|
|
2534
2557
|
onClick: () => fetchChatHistoryAndSetActiveThread(thread.thread_id),
|
|
2535
2558
|
secondaryActions: [
|
|
2536
2559
|
{
|
|
2537
|
-
icon:
|
|
2560
|
+
icon: _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.deleteIcon.react,
|
|
2538
2561
|
onClick: () => deleteThread(thread.thread_id),
|
|
2539
2562
|
tooltip: 'Delete this chat',
|
|
2540
2563
|
}
|
|
@@ -2545,28 +2568,33 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2545
2568
|
disabled: true,
|
|
2546
2569
|
onClick: () => { }
|
|
2547
2570
|
}], alignment: "right" }))),
|
|
2548
|
-
|
|
2571
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-messages", ref: chatMessagesRef },
|
|
2549
2572
|
displayOptimizedChatHistory.length === 0 &&
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2573
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-empty-message" },
|
|
2574
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { style: { margin: '0 auto 8px', display: 'block', textAlign: 'center' } },
|
|
2575
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_icons_MitoLogo__WEBPACK_IMPORTED_MODULE_25__["default"], { width: "60", height: "30" })),
|
|
2576
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", { style: { display: 'block', textAlign: 'center', fontWeight: 'bold', fontSize: '20px', marginBottom: '15px' } }, "Data Copilot"),
|
|
2577
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_CTACarousel__WEBPACK_IMPORTED_MODULE_26__["default"], { app: app })),
|
|
2578
|
+
processedDisplayOptimizedChatHistory.map((displayOptimizedChat, index) => {
|
|
2579
|
+
if (isGroupedErrorMessages(displayOptimizedChat)) {
|
|
2580
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_AgentComponents_ErrorFixupToolUI__WEBPACK_IMPORTED_MODULE_27__["default"], { key: index, messages: displayOptimizedChat, renderMimeRegistry: renderMimeRegistry }));
|
|
2581
|
+
}
|
|
2582
|
+
else {
|
|
2583
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_28__["default"], { key: index, message: displayOptimizedChat.message, promptType: displayOptimizedChat.promptType, messageType: displayOptimizedChat.type, agentResponse: displayOptimizedChat.agentResponse, codeCellID: displayOptimizedChat.codeCellID, mitoAIConnectionError: displayOptimizedChat.type === 'connection error', mitoAIConnectionErrorType: displayOptimizedChat.mitoAIConnectionErrorType || null, messageIndex: index, notebookTracker: notebookTracker, renderMimeRegistry: renderMimeRegistry, app: app, isLastAiMessage: index === lastAIMessagesIndex, isLastMessage: index === displayOptimizedChatHistory.length - 1, operatingSystem: operatingSystem, previewAICode: previewAICodeToActiveCell, acceptAICode: acceptAICode, rejectAICode: rejectAICode, onUpdateMessage: handleUpdateMessage, contextManager: contextManager, codeReviewStatus: codeReviewStatus, setNextSteps: setNextSteps, agentModeEnabled: agentModeEnabled }));
|
|
2584
|
+
}
|
|
2557
2585
|
}).filter(message => message !== null),
|
|
2558
2586
|
loadingAIResponse &&
|
|
2559
|
-
|
|
2587
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-loading-message" },
|
|
2560
2588
|
"Thinking ",
|
|
2561
|
-
|
|
2589
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_29__["default"], null)),
|
|
2562
2590
|
hasCheckpoint &&
|
|
2563
2591
|
agentModeEnabled &&
|
|
2564
2592
|
agentExecutionStatus === 'idle' &&
|
|
2565
|
-
displayOptimizedChatHistory.length > 0 && (
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
displayOptimizedChatHistory.length === 0 && (
|
|
2569
|
-
|
|
2593
|
+
displayOptimizedChatHistory.length > 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: 'message message-assistant-chat' },
|
|
2594
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_30__["default"], { text: "Revert changes", icon: _icons_UndoIcon__WEBPACK_IMPORTED_MODULE_31__["default"], title: "Revert changes", onClick: () => (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_13__.restoreCheckpoint)(app, notebookTracker, setHasCheckpoint, getDuplicateChatHistoryManager, setChatHistoryManager), variant: "gray", width: "fit-contents", iconPosition: "left" }),
|
|
2595
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", { className: "text-muted text-sm" }, "Undo the most recent changes made by the agent")))),
|
|
2596
|
+
displayOptimizedChatHistory.length === 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "suggestions-container" },
|
|
2597
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_32__["default"], { onSelectSuggestion: (prompt) => {
|
|
2570
2598
|
if (agentModeEnabled) {
|
|
2571
2599
|
void startAgentExecution(prompt);
|
|
2572
2600
|
}
|
|
@@ -2574,16 +2602,16 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2574
2602
|
void sendChatInputMessage(prompt);
|
|
2575
2603
|
}
|
|
2576
2604
|
} }))),
|
|
2577
|
-
|
|
2578
|
-
nextSteps.length > 0 && (
|
|
2579
|
-
|
|
2605
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: `connected-input-container ${nextSteps.length > 0 ? 'has-next-steps' : ''}` },
|
|
2606
|
+
nextSteps.length > 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_NextStepsPills__WEBPACK_IMPORTED_MODULE_33__["default"], { nextSteps: nextSteps, onSelectNextStep: agentModeEnabled ? startAgentExecution : sendChatInputMessage, displayedNextStepsIfAvailable: displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable })),
|
|
2607
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ChatInput__WEBPACK_IMPORTED_MODULE_34__["default"], { initialContent: '', placeholder: agentExecutionStatus === 'working' ? 'Agent is working...' :
|
|
2580
2608
|
agentExecutionStatus === 'stopping' ? 'Agent is stopping...' :
|
|
2581
2609
|
agentModeEnabled ? 'Ask agent to do anything' :
|
|
2582
2610
|
displayOptimizedChatHistory.length < 2 ? `Ask question (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`
|
|
2583
2611
|
: `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`, onSave: agentModeEnabled ? startAgentExecution : sendChatInputMessage, onCancel: undefined, isEditing: false, contextManager: contextManager, notebookTracker: notebookTracker, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })),
|
|
2584
|
-
agentExecutionStatus !== 'working' && agentExecutionStatus !== 'stopping' && (
|
|
2585
|
-
|
|
2586
|
-
|
|
2612
|
+
agentExecutionStatus !== 'working' && agentExecutionStatus !== 'stopping' && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls" },
|
|
2613
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls-left" },
|
|
2614
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_ToggleButton__WEBPACK_IMPORTED_MODULE_35__["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) => {
|
|
2587
2615
|
await startNewChat(); // TODO: delete thread instead of starting new chat
|
|
2588
2616
|
setAgentModeEnabled(!isLeftSelected);
|
|
2589
2617
|
// Clear agent checkpoint when switching modes
|
|
@@ -2594,11 +2622,11 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2594
2622
|
chatInput.focus();
|
|
2595
2623
|
}
|
|
2596
2624
|
} }),
|
|
2597
|
-
|
|
2625
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_ModelSelector__WEBPACK_IMPORTED_MODULE_8__["default"], { onConfigChange: (config) => {
|
|
2598
2626
|
// Just update the backend
|
|
2599
2627
|
void updateModelOnBackend(config.model);
|
|
2600
2628
|
} })),
|
|
2601
|
-
|
|
2629
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", { className: "button-base submit-button", onClick: () => {
|
|
2602
2630
|
const chatInput = document.querySelector('.chat-input');
|
|
2603
2631
|
if (chatInput && chatInput.value) {
|
|
2604
2632
|
// Simulate an Enter keypress
|
|
@@ -2614,11 +2642,11 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2614
2642
|
chatInput.dispatchEvent(enterEvent);
|
|
2615
2643
|
}
|
|
2616
2644
|
} },
|
|
2617
|
-
|
|
2645
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", { className: "submit-text" }, "Submit"),
|
|
2618
2646
|
" \u23CE"))),
|
|
2619
|
-
(agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping') && (
|
|
2647
|
+
(agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping') && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", { className: "button-base button-red stop-agent-button", onClick: markAgentForStopping, disabled: agentExecutionStatus === 'stopping', "data-testid": "stop-agent-button" }, agentExecutionStatus === 'stopping' ? (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "stop-agent-button-content" },
|
|
2620
2648
|
"Stopping",
|
|
2621
|
-
|
|
2649
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_LoadingCircle__WEBPACK_IMPORTED_MODULE_36__["default"], null),
|
|
2622
2650
|
" ")) : ('Stop Agent')))));
|
|
2623
2651
|
};
|
|
2624
2652
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatTaskpane);
|
|
@@ -5933,10 +5961,125 @@ const COMMAND_MITO_AI_BETA_MODE_ENABLED = `${MITO_AI}:beta-mode-enabled`;
|
|
|
5933
5961
|
|
|
5934
5962
|
/***/ }),
|
|
5935
5963
|
|
|
5936
|
-
/***/ "./lib/components/
|
|
5937
|
-
|
|
5938
|
-
!*** ./lib/components/
|
|
5939
|
-
|
|
5964
|
+
/***/ "./lib/components/AgentComponents/AgentComponentHeader.js":
|
|
5965
|
+
/*!****************************************************************!*\
|
|
5966
|
+
!*** ./lib/components/AgentComponents/AgentComponentHeader.js ***!
|
|
5967
|
+
\****************************************************************/
|
|
5968
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5969
|
+
|
|
5970
|
+
__webpack_require__.r(__webpack_exports__);
|
|
5971
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
5972
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
5973
|
+
/* harmony export */ });
|
|
5974
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
5975
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5976
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
5977
|
+
/*
|
|
5978
|
+
* Copyright (c) Saga Inc.
|
|
5979
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
5980
|
+
*/
|
|
5981
|
+
|
|
5982
|
+
|
|
5983
|
+
const AgentComponentHeader = ({ icon, text, onClick, isExpanded, displayBorder = true, className }) => {
|
|
5984
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { onClick: onClick, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_1__.classNames)('agent-component-header', {
|
|
5985
|
+
expanded: isExpanded,
|
|
5986
|
+
'no-border': !displayBorder
|
|
5987
|
+
}, className) },
|
|
5988
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-component-header-content" },
|
|
5989
|
+
icon,
|
|
5990
|
+
text),
|
|
5991
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_1__.classNames)('agent-component-header-expand-icon', {
|
|
5992
|
+
expanded: isExpanded
|
|
5993
|
+
}), width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
5994
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", transform: isExpanded ? 'rotate(90 8 8)' : 'rotate(0 8 8)' }))));
|
|
5995
|
+
};
|
|
5996
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentComponentHeader);
|
|
5997
|
+
|
|
5998
|
+
|
|
5999
|
+
/***/ }),
|
|
6000
|
+
|
|
6001
|
+
/***/ "./lib/components/AgentComponents/ErrorFixupToolUI.js":
|
|
6002
|
+
/*!************************************************************!*\
|
|
6003
|
+
!*** ./lib/components/AgentComponents/ErrorFixupToolUI.js ***!
|
|
6004
|
+
\************************************************************/
|
|
6005
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6006
|
+
|
|
6007
|
+
__webpack_require__.r(__webpack_exports__);
|
|
6008
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
6009
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
6010
|
+
/* harmony export */ });
|
|
6011
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
6012
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
6013
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
6014
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
6015
|
+
/* harmony import */ var _Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
|
|
6016
|
+
/* harmony import */ var _Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
|
|
6017
|
+
/* harmony import */ var _icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../icons/AlertIcon */ "./lib/icons/AlertIcon.js");
|
|
6018
|
+
/* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
|
|
6019
|
+
/* harmony import */ var _style_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/ErrorFixupToolUI.css */ "./style/ErrorFixupToolUI.css");
|
|
6020
|
+
/* harmony import */ var _style_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AgentComponentHeader.css */ "./style/AgentComponentHeader.css");
|
|
6021
|
+
/*
|
|
6022
|
+
* Copyright (c) Saga Inc.
|
|
6023
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
6024
|
+
*/
|
|
6025
|
+
|
|
6026
|
+
|
|
6027
|
+
|
|
6028
|
+
|
|
6029
|
+
|
|
6030
|
+
|
|
6031
|
+
|
|
6032
|
+
|
|
6033
|
+
|
|
6034
|
+
const parsePythonErrorType = (content) => {
|
|
6035
|
+
if (!content)
|
|
6036
|
+
return 'Error';
|
|
6037
|
+
const errorMatch = content.match(/(\w+Error):/);
|
|
6038
|
+
return (errorMatch === null || errorMatch === void 0 ? void 0 : errorMatch[1]) || 'Error';
|
|
6039
|
+
};
|
|
6040
|
+
const processErrorContent = (content) => {
|
|
6041
|
+
if (!content)
|
|
6042
|
+
return '';
|
|
6043
|
+
// Remove all Python code (content between triple backticks).
|
|
6044
|
+
// If we don't do this, the PythonCode component will remove the error content,
|
|
6045
|
+
// and only show the code block.
|
|
6046
|
+
return content.replace(/```(?:python)?[\s\S]*?```/g, '').trim();
|
|
6047
|
+
};
|
|
6048
|
+
const ErrorDetectedBlock = ({ errorMessage, renderMimeRegistry, }) => {
|
|
6049
|
+
const [expandedError, setExpandedError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
6050
|
+
const rawErrorContent = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.getContentStringFromMessage)(errorMessage);
|
|
6051
|
+
const errorContent = processErrorContent(rawErrorContent);
|
|
6052
|
+
const errorType = parsePythonErrorType(errorContent);
|
|
6053
|
+
const toggleError = () => {
|
|
6054
|
+
setExpandedError(!expandedError);
|
|
6055
|
+
};
|
|
6056
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_4__.classNames)('error-fixup-container', { expanded: expandedError }) },
|
|
6057
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__["default"], null), text: `${errorType} Detected`, onClick: toggleError, isExpanded: expandedError, displayBorder: false }),
|
|
6058
|
+
expandedError && errorContent && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-expanded" },
|
|
6059
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__["default"], { code: errorContent, renderMimeRegistry: renderMimeRegistry })))));
|
|
6060
|
+
};
|
|
6061
|
+
const GroupedErrorsAndFixes = ({ messages, renderMimeRegistry, }) => {
|
|
6062
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-root" },
|
|
6063
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-header" },
|
|
6064
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Fixing an error")),
|
|
6065
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-messages-container" }, messages.map((messageItem, index) => {
|
|
6066
|
+
var _a, _b, _c;
|
|
6067
|
+
const isUserMessage = messageItem.message.role === 'user';
|
|
6068
|
+
if (isUserMessage) {
|
|
6069
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ErrorDetectedBlock, { key: `error-${index}`, errorMessage: messageItem.message, renderMimeRegistry: renderMimeRegistry }));
|
|
6070
|
+
}
|
|
6071
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { key: `assistant-${index}`, code: messageItem.message.content, codeSummary: (_c = (_b = (_a = messageItem.agentResponse) === null || _a === void 0 ? void 0 : _a.cell_update) === null || _b === void 0 ? void 0 : _b.code_summary) !== null && _c !== void 0 ? _c : undefined, isCodeComplete: true, renderMimeRegistry: renderMimeRegistry, previewAICode: () => { }, acceptAICode: () => { }, rejectAICode: () => { }, isLastAiMessage: false, codeReviewStatus: "chatPreview", agentModeEnabled: true, isErrorFixup: true }));
|
|
6072
|
+
}))));
|
|
6073
|
+
};
|
|
6074
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GroupedErrorsAndFixes);
|
|
6075
|
+
|
|
6076
|
+
|
|
6077
|
+
/***/ }),
|
|
6078
|
+
|
|
6079
|
+
/***/ "./lib/components/AgentComponents/GetCellOutputToolUI.js":
|
|
6080
|
+
/*!***************************************************************!*\
|
|
6081
|
+
!*** ./lib/components/AgentComponents/GetCellOutputToolUI.js ***!
|
|
6082
|
+
\***************************************************************/
|
|
5940
6083
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5941
6084
|
|
|
5942
6085
|
__webpack_require__.r(__webpack_exports__);
|
|
@@ -6511,6 +6654,31 @@ const AcceptIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createEle
|
|
|
6511
6654
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AcceptIcon);
|
|
6512
6655
|
|
|
6513
6656
|
|
|
6657
|
+
/***/ }),
|
|
6658
|
+
|
|
6659
|
+
/***/ "./lib/icons/AlertIcon.js":
|
|
6660
|
+
/*!********************************!*\
|
|
6661
|
+
!*** ./lib/icons/AlertIcon.js ***!
|
|
6662
|
+
\********************************/
|
|
6663
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6664
|
+
|
|
6665
|
+
__webpack_require__.r(__webpack_exports__);
|
|
6666
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
6667
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
6668
|
+
/* harmony export */ });
|
|
6669
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
6670
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
6671
|
+
/*
|
|
6672
|
+
* Copyright (c) Saga Inc.
|
|
6673
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
6674
|
+
*/
|
|
6675
|
+
|
|
6676
|
+
const AlertIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: "14", height: "14", viewBox: "0 0 96 84", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
6677
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("g", { fill: "currentColor" },
|
|
6678
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M94.0805 67.8053L57.025 5.49763C55.1179 2.28364 51.657 0.313801 47.9194 0.313801C44.1818 0.313801 40.7209 2.28355 38.8137 5.49763L1.91856 67.8053C0.0350518 71.0665 0.0267897 75.0839 1.89611 78.3535C3.76543 81.6232 7.23119 83.6541 10.9969 83.6862H85.1079C88.8549 83.6177 92.2873 81.5723 94.1307 78.3088C95.974 75.0452 95.9546 71.0513 94.0805 67.8053ZM48.0531 73.0989C46.6493 73.0989 45.3023 72.5412 44.3097 71.5486C43.3172 70.5561 42.7594 69.209 42.7594 67.8053C42.7594 66.4015 43.3172 65.0545 44.3097 64.0619C45.3023 63.0694 46.6493 62.5116 48.0531 62.5116C49.4568 62.5116 50.8039 63.0694 51.7964 64.0619C52.789 65.0545 53.3467 66.4015 53.3467 67.8053C53.3467 69.209 52.789 70.5561 51.7964 71.5486C50.8039 72.5412 49.4568 73.0989 48.0531 73.0989ZM53.3467 49.2775C53.3467 51.1693 52.3376 52.9168 50.6999 53.8621C49.0622 54.8074 47.044 54.8074 45.4063 53.8621C43.7686 52.9168 42.7594 51.1692 42.7594 49.2775V28.103C42.7594 26.2112 43.7685 24.4637 45.4063 23.5184C47.044 22.5731 49.0622 22.5731 50.6999 23.5184C52.3376 24.4637 53.3467 26.2113 53.3467 28.103V49.2775Z" }))));
|
|
6679
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AlertIcon);
|
|
6680
|
+
|
|
6681
|
+
|
|
6514
6682
|
/***/ }),
|
|
6515
6683
|
|
|
6516
6684
|
/***/ "./lib/icons/CodeIcon.js":
|
|
@@ -7265,12 +7433,6 @@ const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHisto
|
|
|
7265
7433
|
return 'success'; // If no error output, we're done
|
|
7266
7434
|
}
|
|
7267
7435
|
const errorMessage = (0,_Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__.getFullErrorMessageFromTraceback)(errorOutput.traceback);
|
|
7268
|
-
const newChatHistoryManager = getDuplicateChatHistoryManager();
|
|
7269
|
-
addAIMessageFromResponseAndUpdateState(attempts === 0
|
|
7270
|
-
? "Hmm, looks like my first attempt didn't work. Let me try again."
|
|
7271
|
-
: `Looks like my ${attempts === 1 ? 'second' : 'third'} attempt didn't work. ${attempts === 1 ? 'Let me try again.' : "Let me try one more time. If I cannot figure it out this time, I'll ask you for more information"}`, 'agent:execution', newChatHistoryManager);
|
|
7272
|
-
// Wait two seconds so the use can more easily see what is going on
|
|
7273
|
-
await (0,_sleep__WEBPACK_IMPORTED_MODULE_1__.sleep)(2000);
|
|
7274
7436
|
await sendAgentSmartDebugMessage(errorMessage);
|
|
7275
7437
|
const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
|
|
7276
7438
|
// TODO: We expect that the agent responds with a cell_update if they are prompted to fix an error.
|
|
@@ -7423,6 +7585,77 @@ const checkForBlacklistedWords = (code) => {
|
|
|
7423
7585
|
};
|
|
7424
7586
|
|
|
7425
7587
|
|
|
7588
|
+
/***/ }),
|
|
7589
|
+
|
|
7590
|
+
/***/ "./lib/utils/chatHistory.js":
|
|
7591
|
+
/*!**********************************!*\
|
|
7592
|
+
!*** ./lib/utils/chatHistory.js ***!
|
|
7593
|
+
\**********************************/
|
|
7594
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7595
|
+
|
|
7596
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7597
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7598
|
+
/* harmony export */ processChatHistoryForErrorGrouping: () => (/* binding */ processChatHistoryForErrorGrouping)
|
|
7599
|
+
/* harmony export */ });
|
|
7600
|
+
/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./strings */ "./lib/utils/strings.js");
|
|
7601
|
+
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./lib/utils/errors.js");
|
|
7602
|
+
/*
|
|
7603
|
+
* Copyright (c) Saga Inc.
|
|
7604
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7605
|
+
*/
|
|
7606
|
+
|
|
7607
|
+
|
|
7608
|
+
/**
|
|
7609
|
+
* Processes chat history to group consecutive error fixup messages together.
|
|
7610
|
+
* This helps in displaying error messages and their responses as a single unit in the UI.
|
|
7611
|
+
*
|
|
7612
|
+
* @param displayOptimizedChatHistory - The original chat history to process
|
|
7613
|
+
* @returns An array where error fixup messages and their responses are grouped together,
|
|
7614
|
+
* while other messages remain as individual items
|
|
7615
|
+
*/
|
|
7616
|
+
const processChatHistoryForErrorGrouping = (displayOptimizedChatHistory) => {
|
|
7617
|
+
var _a, _b;
|
|
7618
|
+
const processedDisplayOptimizedChatHistory = [];
|
|
7619
|
+
let groupedErrorMessages = [];
|
|
7620
|
+
for (let i = 0; i < displayOptimizedChatHistory.length; i++) {
|
|
7621
|
+
const displayOptimizedChatItem = displayOptimizedChatHistory[i];
|
|
7622
|
+
if (!displayOptimizedChatItem) {
|
|
7623
|
+
continue;
|
|
7624
|
+
}
|
|
7625
|
+
const messageContent = (0,_strings__WEBPACK_IMPORTED_MODULE_0__.getContentStringFromMessage)(displayOptimizedChatItem.message);
|
|
7626
|
+
const _isErrorFixupMessage = (0,_errors__WEBPACK_IMPORTED_MODULE_1__.isErrorFixupMessage)(displayOptimizedChatItem.promptType, displayOptimizedChatItem.message, messageContent);
|
|
7627
|
+
if (_isErrorFixupMessage) {
|
|
7628
|
+
// If the current message is an error fixup message, we need to group it with the next message
|
|
7629
|
+
// which is the ai response to the error fixup message.
|
|
7630
|
+
groupedErrorMessages.push(displayOptimizedChatItem);
|
|
7631
|
+
// Note: We check that the next message is an ai response to the error fixup message.
|
|
7632
|
+
// If the user has stopped the agent, it might not be an ai response to the error fixup message.
|
|
7633
|
+
const next_index = i + 1;
|
|
7634
|
+
if (next_index < displayOptimizedChatHistory.length &&
|
|
7635
|
+
((_a = displayOptimizedChatHistory[next_index]) === null || _a === void 0 ? void 0 : _a.type) === 'openai message' &&
|
|
7636
|
+
((_b = displayOptimizedChatHistory[next_index]) === null || _b === void 0 ? void 0 : _b.message.role) === 'assistant') {
|
|
7637
|
+
groupedErrorMessages.push(displayOptimizedChatHistory[next_index]);
|
|
7638
|
+
i = next_index;
|
|
7639
|
+
}
|
|
7640
|
+
}
|
|
7641
|
+
else {
|
|
7642
|
+
if (groupedErrorMessages.length > 0) {
|
|
7643
|
+
processedDisplayOptimizedChatHistory.push(groupedErrorMessages);
|
|
7644
|
+
// Create a new array object since arrays are mutable and we want to avoid
|
|
7645
|
+
// accidentally modifying the array that was just pushed to the history
|
|
7646
|
+
groupedErrorMessages = new Array();
|
|
7647
|
+
}
|
|
7648
|
+
processedDisplayOptimizedChatHistory.push(displayOptimizedChatItem);
|
|
7649
|
+
}
|
|
7650
|
+
}
|
|
7651
|
+
// Handle case where the last messages were error messages
|
|
7652
|
+
if (groupedErrorMessages.length > 0) {
|
|
7653
|
+
processedDisplayOptimizedChatHistory.push(groupedErrorMessages);
|
|
7654
|
+
}
|
|
7655
|
+
return processedDisplayOptimizedChatHistory;
|
|
7656
|
+
};
|
|
7657
|
+
|
|
7658
|
+
|
|
7426
7659
|
/***/ }),
|
|
7427
7660
|
|
|
7428
7661
|
/***/ "./lib/utils/checkpoint.js":
|
|
@@ -7757,13 +7990,28 @@ const copyToClipboard = async (text) => {
|
|
|
7757
7990
|
|
|
7758
7991
|
__webpack_require__.r(__webpack_exports__);
|
|
7759
7992
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7760
|
-
/* harmony export */ FREE_TIER_LIMIT_REACHED_ERROR_TITLE: () => (/* binding */ FREE_TIER_LIMIT_REACHED_ERROR_TITLE)
|
|
7993
|
+
/* harmony export */ FREE_TIER_LIMIT_REACHED_ERROR_TITLE: () => (/* binding */ FREE_TIER_LIMIT_REACHED_ERROR_TITLE),
|
|
7994
|
+
/* harmony export */ isErrorFixupMessage: () => (/* binding */ isErrorFixupMessage)
|
|
7761
7995
|
/* harmony export */ });
|
|
7762
7996
|
/*
|
|
7763
7997
|
* Copyright (c) Saga Inc.
|
|
7764
7998
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7765
7999
|
*/
|
|
7766
8000
|
const FREE_TIER_LIMIT_REACHED_ERROR_TITLE = 'mito_server_free_tier_limit_reached';
|
|
8001
|
+
const isErrorFixupMessage = (promptType, message, messageContent) => {
|
|
8002
|
+
if (!messageContent) {
|
|
8003
|
+
return false;
|
|
8004
|
+
}
|
|
8005
|
+
return (
|
|
8006
|
+
// Initially, messages are labeled with the prompt type 'agent:autoErrorFixup'
|
|
8007
|
+
promptType === 'agent:autoErrorFixup' ||
|
|
8008
|
+
// However, when the chat history is saved, this field is stripped, and every message is labeled as 'chat'.
|
|
8009
|
+
// In this case we have to manually determine if the message is an error fixup message.
|
|
8010
|
+
(message.role === 'user' &&
|
|
8011
|
+
messageContent &&
|
|
8012
|
+
messageContent.includes('->') || (messageContent === null || messageContent === void 0 ? void 0 : messageContent.includes('^')) &&
|
|
8013
|
+
/\w+Error:/.test(messageContent)));
|
|
8014
|
+
};
|
|
7767
8015
|
|
|
7768
8016
|
|
|
7769
8017
|
/***/ }),
|
|
@@ -7793,153 +8041,6 @@ const stripFileEnding = (rule) => {
|
|
|
7793
8041
|
};
|
|
7794
8042
|
|
|
7795
8043
|
|
|
7796
|
-
/***/ }),
|
|
7797
|
-
|
|
7798
|
-
/***/ "./lib/utils/nodeToPng.js":
|
|
7799
|
-
/*!********************************!*\
|
|
7800
|
-
!*** ./lib/utils/nodeToPng.js ***!
|
|
7801
|
-
\********************************/
|
|
7802
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7803
|
-
|
|
7804
|
-
__webpack_require__.r(__webpack_exports__);
|
|
7805
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7806
|
-
/* harmony export */ captureNode: () => (/* binding */ captureNode)
|
|
7807
|
-
/* harmony export */ });
|
|
7808
|
-
/* harmony import */ var html2canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! html2canvas */ "webpack/sharing/consume/default/html2canvas/html2canvas");
|
|
7809
|
-
/* harmony import */ var html2canvas__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(html2canvas__WEBPACK_IMPORTED_MODULE_0__);
|
|
7810
|
-
/* harmony import */ var _user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user */ "./lib/utils/user.js");
|
|
7811
|
-
/*
|
|
7812
|
-
* Copyright (c) Saga Inc.
|
|
7813
|
-
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7814
|
-
*/
|
|
7815
|
-
|
|
7816
|
-
|
|
7817
|
-
/**
|
|
7818
|
-
* Captures a DOM element as a PNG image with preserved styles.
|
|
7819
|
-
*
|
|
7820
|
-
* This utility creates a high-fidelity screenshot of a DOM element by:
|
|
7821
|
-
* 1. Cloning the target element
|
|
7822
|
-
* 2. Preserving all computed styles with !important flags
|
|
7823
|
-
* 3. Capturing the clone using html2canvas
|
|
7824
|
-
* 4. Converting the result to a base64-encoded PNG
|
|
7825
|
-
*
|
|
7826
|
-
* Note: This function is optimized for Chrome browsers and may be slow or
|
|
7827
|
-
* unreliable in other browsers like Safari, so we skip the capture if the
|
|
7828
|
-
* browser is not Chrome based.
|
|
7829
|
-
*/
|
|
7830
|
-
const captureNode = async (node) => {
|
|
7831
|
-
var _a;
|
|
7832
|
-
if (!(0,_user__WEBPACK_IMPORTED_MODULE_1__.isChromeBasedBrowser)()) {
|
|
7833
|
-
console.log('Node capture skipped: This feature is optimized for Chrome browsers');
|
|
7834
|
-
return undefined;
|
|
7835
|
-
}
|
|
7836
|
-
try {
|
|
7837
|
-
if (!node) {
|
|
7838
|
-
throw new Error('No node provided');
|
|
7839
|
-
}
|
|
7840
|
-
// Create an off-screen wrapper to hold our clone
|
|
7841
|
-
const wrapper = createWrapper(node);
|
|
7842
|
-
// Create and prepare the clone
|
|
7843
|
-
const clone = node.cloneNode(true);
|
|
7844
|
-
preserveStyles(node, clone);
|
|
7845
|
-
// Position clone for capture
|
|
7846
|
-
wrapper.appendChild(clone);
|
|
7847
|
-
document.body.appendChild(wrapper);
|
|
7848
|
-
try {
|
|
7849
|
-
// Perform the capture
|
|
7850
|
-
const canvas = await html2canvas__WEBPACK_IMPORTED_MODULE_0___default()(clone, getHtml2CanvasOptions(node));
|
|
7851
|
-
return canvas.toDataURL('image/png').split(',')[1];
|
|
7852
|
-
}
|
|
7853
|
-
finally {
|
|
7854
|
-
// Clean up
|
|
7855
|
-
(_a = wrapper.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(wrapper);
|
|
7856
|
-
}
|
|
7857
|
-
}
|
|
7858
|
-
catch (error) {
|
|
7859
|
-
console.error('Capture failed:', error);
|
|
7860
|
-
throw error;
|
|
7861
|
-
}
|
|
7862
|
-
};
|
|
7863
|
-
/**
|
|
7864
|
-
* Creates an off-screen wrapper element to contain the cloned node.
|
|
7865
|
-
*
|
|
7866
|
-
* @param node - Reference node to size the wrapper
|
|
7867
|
-
* @returns HTMLDivElement - Configured wrapper element
|
|
7868
|
-
*/
|
|
7869
|
-
const createWrapper = (node) => {
|
|
7870
|
-
const wrapper = document.createElement('div');
|
|
7871
|
-
wrapper.style.cssText = `
|
|
7872
|
-
position: fixed !important;
|
|
7873
|
-
top: 0 !important;
|
|
7874
|
-
left: 0 !important;
|
|
7875
|
-
width: ${node.offsetWidth}px !important;
|
|
7876
|
-
height: ${node.offsetHeight}px !important;
|
|
7877
|
-
z-index: -9999 !important;
|
|
7878
|
-
background: transparent !important;
|
|
7879
|
-
pointer-events: none !important;
|
|
7880
|
-
opacity: 0 !important;
|
|
7881
|
-
`;
|
|
7882
|
-
return wrapper;
|
|
7883
|
-
};
|
|
7884
|
-
/**
|
|
7885
|
-
* Recursively copies all computed styles from a source element to a target element.
|
|
7886
|
-
* Adds !important to all styles to ensure they're preserved during capture.
|
|
7887
|
-
*
|
|
7888
|
-
* @param sourceElement - Element to copy styles from
|
|
7889
|
-
* @param targetElement - Element to copy styles to
|
|
7890
|
-
*/
|
|
7891
|
-
const preserveStyles = (sourceElement, targetElement) => {
|
|
7892
|
-
// Copy computed styles
|
|
7893
|
-
const computed = window.getComputedStyle(sourceElement);
|
|
7894
|
-
let stylesText = '';
|
|
7895
|
-
for (let i = 0; i < computed.length; i++) {
|
|
7896
|
-
const property = computed[i];
|
|
7897
|
-
if (property === undefined) {
|
|
7898
|
-
continue;
|
|
7899
|
-
}
|
|
7900
|
-
const value = computed.getPropertyValue(property);
|
|
7901
|
-
if (value) {
|
|
7902
|
-
stylesText += `${property}: ${value} !important; `;
|
|
7903
|
-
}
|
|
7904
|
-
}
|
|
7905
|
-
// Apply styles to target
|
|
7906
|
-
targetElement.style.cssText += stylesText;
|
|
7907
|
-
// Process children recursively
|
|
7908
|
-
Array.from(sourceElement.children).forEach((sourceChild, index) => {
|
|
7909
|
-
const targetChild = targetElement.children[index];
|
|
7910
|
-
if (sourceChild instanceof HTMLElement && targetChild instanceof HTMLElement) {
|
|
7911
|
-
preserveStyles(sourceChild, targetChild);
|
|
7912
|
-
}
|
|
7913
|
-
});
|
|
7914
|
-
};
|
|
7915
|
-
/**
|
|
7916
|
-
* Configures html2canvas options for optimal capture.
|
|
7917
|
-
*
|
|
7918
|
-
* @param node - Reference node for dimensioning
|
|
7919
|
-
* @returns html2canvas configuration object
|
|
7920
|
-
*/
|
|
7921
|
-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
7922
|
-
const getHtml2CanvasOptions = (node) => ({
|
|
7923
|
-
scale: window.devicePixelRatio,
|
|
7924
|
-
useCORS: true,
|
|
7925
|
-
logging: false,
|
|
7926
|
-
allowTaint: true,
|
|
7927
|
-
backgroundColor: null,
|
|
7928
|
-
removeContainer: false,
|
|
7929
|
-
foreignObjectRendering: true,
|
|
7930
|
-
width: node.offsetWidth,
|
|
7931
|
-
height: node.offsetHeight,
|
|
7932
|
-
onclone: (document) => {
|
|
7933
|
-
// Re-apply styles to cloned element
|
|
7934
|
-
const clonedElement = document.body.querySelector('*[data-html2canvas-clone="true"]');
|
|
7935
|
-
const originalElement = node.querySelector('*[data-html2canvas-clone="true"]');
|
|
7936
|
-
if (clonedElement instanceof HTMLElement && originalElement instanceof HTMLElement) {
|
|
7937
|
-
preserveStyles(originalElement, clonedElement);
|
|
7938
|
-
}
|
|
7939
|
-
}
|
|
7940
|
-
});
|
|
7941
|
-
|
|
7942
|
-
|
|
7943
8044
|
/***/ }),
|
|
7944
8045
|
|
|
7945
8046
|
/***/ "./lib/utils/notebook.js":
|
|
@@ -7977,8 +8078,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7977
8078
|
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__);
|
|
7978
8079
|
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/cells */ "webpack/sharing/consume/default/@jupyterlab/cells");
|
|
7979
8080
|
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_cells__WEBPACK_IMPORTED_MODULE_1__);
|
|
7980
|
-
/* harmony import */ var
|
|
7981
|
-
/* harmony import */ var _nodeToPng__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nodeToPng */ "./lib/utils/nodeToPng.js");
|
|
8081
|
+
/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./strings */ "./lib/utils/strings.js");
|
|
7982
8082
|
/*
|
|
7983
8083
|
* Copyright (c) Saga Inc.
|
|
7984
8084
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -7986,7 +8086,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7986
8086
|
|
|
7987
8087
|
|
|
7988
8088
|
|
|
7989
|
-
|
|
7990
8089
|
const INCLUDE_CELL_IN_APP = 'include-cell-in-app';
|
|
7991
8090
|
const getActiveCell = (notebookTracker) => {
|
|
7992
8091
|
var _a;
|
|
@@ -8067,12 +8166,38 @@ const getCellOutputByID = async (notebookTracker, codeCellID) => {
|
|
|
8067
8166
|
}
|
|
8068
8167
|
const notebook = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;
|
|
8069
8168
|
const cell = notebook === null || notebook === void 0 ? void 0 : notebook.widgets.find(cell => cell.model.id === codeCellID);
|
|
8070
|
-
if (cell instanceof _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_1__.CodeCell) {
|
|
8071
|
-
|
|
8072
|
-
|
|
8073
|
-
|
|
8074
|
-
|
|
8075
|
-
|
|
8169
|
+
if (!(cell instanceof _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_1__.CodeCell)) {
|
|
8170
|
+
return undefined;
|
|
8171
|
+
}
|
|
8172
|
+
const outputNode = (_b = cell.outputArea) === null || _b === void 0 ? void 0 : _b.node;
|
|
8173
|
+
if (!outputNode)
|
|
8174
|
+
return undefined;
|
|
8175
|
+
// Find the top-level Jupyter image output div
|
|
8176
|
+
// so we can check if there is a base64 encoded image
|
|
8177
|
+
// already constructed for us.
|
|
8178
|
+
const renderedImageDiv = outputNode.querySelector('.jp-RenderedImage.jp-OutputArea-output');
|
|
8179
|
+
// If the image is the top-level output, then just use that instead
|
|
8180
|
+
// of capturing the entire output node. This is much faster and handles
|
|
8181
|
+
// matplotlib graphs.
|
|
8182
|
+
if (renderedImageDiv) {
|
|
8183
|
+
const img = renderedImageDiv.querySelector('img');
|
|
8184
|
+
if (img && img.src.startsWith('data:image')) {
|
|
8185
|
+
console.log('image found in top-level output');
|
|
8186
|
+
// Remove the data URL prefix
|
|
8187
|
+
// The img is initially in the format data:image/png;base64, <base64_data>
|
|
8188
|
+
// We want to return the base64 data.
|
|
8189
|
+
const base64 = img.src.split(',')[1];
|
|
8190
|
+
return base64;
|
|
8191
|
+
}
|
|
8192
|
+
}
|
|
8193
|
+
// Fallback: (optional) handle other output types, or use captureNode if needed
|
|
8194
|
+
// Previously, we used html2canvas to capture the entire output node. This would
|
|
8195
|
+
// give us the output even if it was html, svg, text, etc. However, starting around
|
|
8196
|
+
// Chrome release 138, html2canvas became untenably slow. https://issues.chromium.org/issues/429073017
|
|
8197
|
+
if (outputNode) {
|
|
8198
|
+
// If the AI requested, a cell output that we cannot provide, we just tell it
|
|
8199
|
+
// "Cell Output is present in notebook, but not available to share with the AI right now"
|
|
8200
|
+
return "iVBORw0KGgoAAAANSUhEUgAABWIAAAA2CAYAAABN7eCtAAAMTmlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnltSIQQIREBK6E0QqQGkhNACSC+CqIQkQCgxJgQVO7K4gmsXESwrugqi2FZAFhvqqiuLgr0uFlSUdXFd7MqbEECXfeV7831z57//nPnnnHNn7r0DAL2LL5XmopoA5EnyZbEhAazJySksUg8gAkNAA2MBgS+QSznR0REAluH27+X1NYAo28sOSq1/9v/XoiUUyQUAINEQpwvlgjyIfwQAbxFIZfkAEKWQN5+VL1XidRDryKCDENcocaYKtyhxugpfGrSJj+VC/AgAsjqfL8sEQKMP8qwCQSbUocNogZNEKJZA7A+xb17eDCHEiyC2gTZwTrpSn53+lU7m3zTTRzT5/MwRrIplsJADxXJpLn/O/5mO/13ychXDc1jDqp4lC41Vxgzz9ihnRrgSq0P8VpIeGQWxNgAoLhYO2isxM0sRmqCyR20Eci7MGWBCPFGeG8cb4mOF/MBwiA0hzpDkRkYM2RRliIOVNjB/aIU4nxcPsR7ENSJ5UNyQzQnZjNjhea9lyLicIf4pXzbog1L/syIngaPSx7SzRLwhfcyxMCs+CWIqxIEF4sRIiDUgjpTnxIUP2aQWZnEjh21kilhlLBYQy0SSkACVPlaeIQuOHbLfnScfjh07kSXmRQ7hzvys+FBVrrBHAv6g/zAWrE8k4SQM64jkkyOGYxGKAoNUseNkkSQhTsXjetL8gFjVWNxOmhs9ZI8HiHJDlLwZxPHygrjhsQX5cHGq9PESaX50vMpPvDKbHxat8gffDyIAFwQCFlDAmg5mgGwgbu9t7IV3qp5gwAcykAlEwGGIGR6RNNgjgdc4UAh+h0gE5CPjAgZ7RaAA8p9GsUpOPMKprg4gY6hPqZIDHkOcB8JBLrxXDCpJRjxIBI8gI/6HR3xYBTCGXFiV/f+eH2a/MBzIRAwxiuEZWfRhS2IQMZAYSgwm2uIGuC/ujUfAqz+szjgb9xyO44s94TGhg/CAcJXQRbg5XVwkG+XlJNAF9YOH8pP+dX5wK6jphgfgPlAdKuNM3AA44K5wHg7uB2d2gyx3yG9lVlijtP8WwVdPaMiO4kRBKWMo/hSb0SM17DTcRlSUuf46Pypf00fyzR3pGT0/96vsC2EbPtoS+xY7hJ3FTmLnsRasEbCw41gT1oYdVeKRFfdocMUNzxY76E8O1Bm9Zr48WWUm5U51Tj1OH1V9+aLZ+crNyJ0hnSMTZ2blszjwiyFi8SQCx3EsZydnNwCU3x/V6+1VzOB3BWG2feGW/AaAz/GBgYGfvnBhxwE44AFfCUe+cDZs+GlRA+DcEYFCVqDicOWFAN8cdLj79IExMAc2MB5n4A68gT8IAmEgCsSDZDANep8F17kMzALzwGJQAsrAKrAeVIKtYDuoAXvBQdAIWsBJ8DO4AC6Bq+A2XD3d4DnoA6/BBwRBSAgNYSD6iAliidgjzggb8UWCkAgkFklG0pBMRIIokHnIEqQMWYNUItuQWuQAcgQ5iZxHOpCbyH2kB/kTeY9iqDqqgxqhVuh4lI1y0HA0Hp2KZqIz0UK0GF2BVqDV6B60AT2JXkCvol3oc7QfA5gaxsRMMQeMjXGxKCwFy8Bk2AKsFCvHqrF6rBk+58tYF9aLvcOJOANn4Q5wBYfiCbgAn4kvwJfjlXgN3oCfxi/j9/E+/DOBRjAk2BO8CDzCZEImYRahhFBO2Ek4TDgD91I34TWRSGQSrYkecC8mE7OJc4nLiZuJ+4gniB3Eh8R+EomkT7In+ZCiSHxSPqmEtJG0h3Sc1EnqJr0lq5FNyM7kYHIKWUIuIpeTd5OPkTvJT8gfKJoUS4oXJYoipMyhrKTsoDRTLlK6KR+oWlRrqg81nppNXUytoNZTz1DvUF+pqamZqXmqxaiJ1RapVajtVzundl/tnbq2up06Vz1VXaG+Qn2X+gn1m+qvaDSaFc2flkLLp62g1dJO0e7R3mowNBw1eBpCjYUaVRoNGp0aL+gUuiWdQ59GL6SX0w/RL9J7NSmaVppcTb7mAs0qzSOa1zX7tRhaE7SitPK0lmvt1jqv9VSbpG2lHaQt1C7W3q59SvshA2OYM7gMAWMJYwfjDKNbh6hjrcPTydYp09mr067Tp6ut66qbqDtbt0r3qG4XE2NaMXnMXOZK5kHmNeb7MUZjOGNEY5aNqR/TOeaN3lg9fz2RXqnePr2reu/1WfpB+jn6q/Ub9e8a4AZ2BjEGswy2GJwx6B2rM9Z7rGBs6diDY28ZooZ2hrGGcw23G7YZ9hsZG4UYSY02Gp0y6jVmGvsbZxuvMz5m3GPCMPE1EZusMzlu8oyly+KwclkVrNOsPlND01BThek203bTD2bWZglmRWb7zO6aU83Z5hnm68xbzfssTCwmWcyzqLO4ZUmxZFtmWW6wPGv5xsraKslqqVWj1VNrPWuedaF1nfUdG5qNn81Mm2qbK7ZEW7Ztju1m20t2qJ2bXZZdld1Fe9Te3V5sv9m+YxxhnOc4ybjqcdcd1B04DgUOdQ73HZmOEY5Fjo2OL8ZbjE8Zv3r82fGfndyccp12ON2eoD0hbELRhOYJfzrbOQucq5yvuNBcgl0WujS5vHS1dxW5bnG94cZwm+S21K3V7ZO7h7vMvd69x8PCI81jk8d1tg47mr2cfc6T4BngudCzxfOdl7tXvtdBrz+8HbxzvHd7P51oPVE0ccfEhz5mPnyfbT5dvizfNN/vfbv8TP34ftV+D/zN/YX+O/2fcGw52Zw9nBcBTgGygMMBb7he3PncE4FYYEhgaWB7kHZQQlBl0L1gs+DM4LrgvhC3kLkhJ0IJoeGhq0Ov84x4Al4try/MI2x+2Olw9fC48MrwBxF2EbKI5knopLBJayfdibSMlEQ2RoEoXtTaqLvR1tEzo3+KIcZEx1TFPI6dEDsv9mwcI2563O641/EB8SvjbyfYJCgSWhPpiamJtYlvkgKT1iR1TR4/ef7kC8kGyeLkphRSSmLKzpT+KUFT1k/pTnVLLUm9NtV66uyp56cZTMuddnQ6fTp/+qE0QlpS2u60j/wofjW/P52Xvim9T8AVbBA8F/oL1wl7RD6iNaInGT4ZazKeZvpkrs3syfLLKs/qFXPFleKX2aHZW7Pf5ETl7MoZyE3K3ZdHzkvLOyLRluRITs8wnjF7RofUXloi7ZrpNXP9zD5ZuGynHJFPlTfl68Af/TaFjeIbxf0C34KqgrezEmcdmq01WzK7bY7dnGVznhQGF/4wF58rmNs6z3Te4nn353Pmb1uALEhf0LrQfGHxwu5FIYtqFlMX5yz+tcipaE3RX0uSljQXGxUvKn74Tcg3dSUaJbKS60u9l279Fv9W/G37MpdlG5d9LhWW/lLmVFZe9nG5YPkv3034ruK7gRUZK9pXuq/csoq4SrLq2mq/1TVrtNYUrnm4dtLahnWsdaXr/lo/ff35ctfyrRuoGxQbuioiKpo2WmxctfFjZVbl1aqAqn2bDDct2/Rms3Bz5xb/LfVbjbaWbX3/vfj7G9tCtjVUW1WXbyduL9j+eEfijrM/sH+o3Wmws2znp12SXV01sTWnaz1qa3cb7l5Zh9Yp6nr2pO65tDdwb1O9Q/22fcx9ZfvBfsX+ZwfSDlw7GH6w9RD7UP2Plj9uOsw4XNqANMxp6GvMauxqSm7qOBJ2pLXZu/nwT44/7Woxbak6qnt05THqseJjA8cLj/efkJ7oPZl58mHr9NbbpyafunI65nT7mfAz534O/vnUWc7Z4+d8zrWc9zp/5Bf2L40X3C80tLm1Hf7V7dfD7e7tDRc9LjZd8rzU3DGx41inX+fJy4GXf77Cu3LhauTVjmsJ125cT73edUN44+nN3JsvbxXc+nB70R3CndK7mnfL7xneq/7N9rd9Xe5dR+8H3m97EPfg9kPBw+eP5I8+dhc/pj0uf2LypPap89OWnuCeS8+mPOt+Ln3+obfkd63fN72wefHjH/5/tPVN7ut+KXs58OfyV/qvdv3l+ldrf3T/vdd5rz+8KX2r/7bmHfvd2fdJ7598mPWR9LHik+2n5s/hn+8M5A0MSPky/uCvAAaUR5sMAP7cBQAtGQAGPDdSp6jOh4MFUZ1pBxH4T1h1hhws7gDUw3/6mF74d3MdgP07ALCC+vRUAKJpAMR7AtTFZaQOn+UGz53KQoRng++jP6XnpYN/U1Rn0q/8Ht0CpaorGN3+C4fZgwPYSmE8AAAAimVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAAFYqADAAQAAAABAAAANgAAAABBU0NJSQAAAFNjcmVlbnNob3ShMho0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB1mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj41NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMzc4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ci/m7O0AAAAcaURPVAAAAAIAAAAAAAAAGwAAACgAAAAbAAAAGwAAGvM06hkwAAAav0lEQVR4AeydBbQdNRPHw1ekuBZ3d6fowd3dCweX4g6HYi1QnOLu7i4t7u7u7lAcir0vv/2YfLm52XvvypXXzpzz3u7d2OS/k8lkkk1G6rJklBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEmobASOqIbRq2mrEioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAIJAuqIVUFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUWgyQioI7bJAGv2ioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIqCNWZUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFIEmI6CO2CYDrNkrAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgjliVAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBJqMgDpimwywZq8IKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioA6YlUGFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARaDIC6ohtMsCavSKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAuqIVRlQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUWgyQioI7bJAGv2ioAioAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIqCNWZUARUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFIEmI6CO2CYDrNkrAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgjliVAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBJqMwHDjiP3888+jUPXq1cuMPPLI0TB5+NNPP5mff/5Zfrprz549zfjjj+9+640ioAgoAoqAItAKBP7++28zbNiwpKgxxhijFUWWWsZvv/1murq6TI8ePcxoo41Wat7NzKy7495MbDTv4ROBIvZzEUTKaGvt4r1IvUf0tL/++msCAf0C/YPS8I+A2AOMx0cdddRuVeHuzHu3Ano4YlZ13HD0MptclaY5YocOHWpef/118+qrrxruJ5tsMjP11FObxRZbzIwyyiilVuubb74xvXv3juZ5xRVXmEUWWSQaJg+POOIIc9FFF8lPd11ooYXM1Vdf7X43++aLL74wL7/8snnllVfMOOOMY+aee24zxxxzmO44CG82Vp2Y//TTT5+wtdlmm5n+/ft3IovKkyLgENhuu+3Mvffem+jlBx54wD3Xm85A4PLLLzf9+vVLmBk8eLCZccYZO4OxBrmg//z222+Tfuymm25qMFX7o3V33NuPoHLQbgReeukls/baaydsDBo0yKyxxhqpLBW1n1MzbiCgaFtrJ+8NVE+jRBB47733zPLLL5+EHH744aZPnz6RWPqoVQi0atwi9sBKK61kzjzzzFZVr5RyujPvPgA4lPHLCPHuxxtvPPlZdf3hhx/Mu+++W/U89mDKKac0E088cSyoY55l6ReLMK06rgh6I17a0h2xzALsv//+5vbbb4+iOeaYY5oTTjjBrLjiitHwPA+/++47s+CCC0aTNuKIHTBggLnggguq0rfKEcuqgEMOOcRceeWVVTzw4PzzzzfLLLNMNKyshy+++KIZMmRIkt1WW21lJpxwwrKybno+ncK7GDQbbrihGThwYNPrrQV0TwQ6RV633nprgwN20kknNY899lj3BLOFXN92223mjTfeMKOPPrrp27dv00u+7LLLkn6Bgu6++24z00wzNb3MMguQwQsTit3JEdspuGPXiF2ywgormHnmmafM19PRebW6rXU0GDmYe/755816662XpDzxxBOdUzaWVVH7OZZno8+KtrV28t5oHRuJNyLJu++kOOyww8wWW2zRCEQap0kI5Bm35JHXueaay/zyyy+m3Y7Y7sx7URG48847K2zX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";
|
|
8076
8201
|
}
|
|
8077
8202
|
return undefined;
|
|
8078
8203
|
};
|
|
@@ -8104,7 +8229,7 @@ const writeCodeToCellByID = (notebookTracker, code, codeCellID) => {
|
|
|
8104
8229
|
if (code === undefined) {
|
|
8105
8230
|
return;
|
|
8106
8231
|
}
|
|
8107
|
-
const codeMirrorValidCode = (0,
|
|
8232
|
+
const codeMirrorValidCode = (0,_strings__WEBPACK_IMPORTED_MODULE_2__.removeMarkdownCodeFormatting)(code);
|
|
8108
8233
|
const notebook = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;
|
|
8109
8234
|
const cell = notebook === null || notebook === void 0 ? void 0 : notebook.widgets.find(cell => cell.model.id === codeCellID);
|
|
8110
8235
|
if (cell) {
|
|
@@ -9369,6 +9494,90 @@ class CompletionWebsocketClient extends _BaseWebsocketClient__WEBPACK_IMPORTED_M
|
|
|
9369
9494
|
}
|
|
9370
9495
|
|
|
9371
9496
|
|
|
9497
|
+
/***/ }),
|
|
9498
|
+
|
|
9499
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentComponentHeader.css":
|
|
9500
|
+
/*!******************************************************************************!*\
|
|
9501
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/AgentComponentHeader.css ***!
|
|
9502
|
+
\******************************************************************************/
|
|
9503
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
9504
|
+
|
|
9505
|
+
__webpack_require__.r(__webpack_exports__);
|
|
9506
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9507
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
9508
|
+
/* harmony export */ });
|
|
9509
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
9510
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
9511
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
9512
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
9513
|
+
// Imports
|
|
9514
|
+
|
|
9515
|
+
|
|
9516
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
9517
|
+
// Module
|
|
9518
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
9519
|
+
* Copyright (c) Saga Inc.
|
|
9520
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
9521
|
+
*/
|
|
9522
|
+
|
|
9523
|
+
.agent-component-header {
|
|
9524
|
+
cursor: pointer;
|
|
9525
|
+
padding: 10px;
|
|
9526
|
+
color: var(--jp-ui-font-color2);
|
|
9527
|
+
display: flex;
|
|
9528
|
+
justify-content: space-between;
|
|
9529
|
+
align-items: center;
|
|
9530
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
9531
|
+
border-radius: 5px;
|
|
9532
|
+
transition: background-color 0.2s ease, border-color 0.2s ease;
|
|
9533
|
+
}
|
|
9534
|
+
|
|
9535
|
+
.agent-component-header:hover {
|
|
9536
|
+
background-color: var(--jp-layout-color3);
|
|
9537
|
+
}
|
|
9538
|
+
|
|
9539
|
+
.agent-component-header.no-border {
|
|
9540
|
+
border: none;
|
|
9541
|
+
}
|
|
9542
|
+
|
|
9543
|
+
.agent-component-header.expanded {
|
|
9544
|
+
border: none;
|
|
9545
|
+
border-radius: 5px 5px 0 0;
|
|
9546
|
+
background-color: var(--jp-layout-color2);
|
|
9547
|
+
}
|
|
9548
|
+
|
|
9549
|
+
.agent-component-header.error-fixup {
|
|
9550
|
+
border: none;
|
|
9551
|
+
}
|
|
9552
|
+
|
|
9553
|
+
.agent-component-header.error-fixup.expanded {
|
|
9554
|
+
background-color: var(--jp-layout-color2);
|
|
9555
|
+
}
|
|
9556
|
+
|
|
9557
|
+
.agent-component-header-content {
|
|
9558
|
+
display: flex;
|
|
9559
|
+
align-items: center;
|
|
9560
|
+
gap: 10px;
|
|
9561
|
+
flex: 1;
|
|
9562
|
+
min-width: 0;
|
|
9563
|
+
}
|
|
9564
|
+
|
|
9565
|
+
.agent-component-header-content svg {
|
|
9566
|
+
flex-shrink: 0;
|
|
9567
|
+
}
|
|
9568
|
+
|
|
9569
|
+
.agent-component-header-expand-icon {
|
|
9570
|
+
flex-shrink: 0;
|
|
9571
|
+
transition: transform 0.2s ease;
|
|
9572
|
+
}
|
|
9573
|
+
|
|
9574
|
+
.agent-component-header-expand-icon.expanded {
|
|
9575
|
+
transform: rotate(90deg);
|
|
9576
|
+
} `, "",{"version":3,"sources":["webpack://./style/AgentComponentHeader.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,eAAe;IACf,aAAa;IACb,+BAA+B;IAC/B,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,oDAAoD;IACpD,kBAAkB;IAClB,8DAA8D;AAClE;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,YAAY;IACZ,0BAA0B;IAC1B,yCAAyC;AAC7C;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,OAAO;IACP,YAAY;AAChB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,cAAc;IACd,+BAA+B;AACnC;;AAEA;IACI,wBAAwB;AAC5B","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.agent-component-header {\n cursor: pointer;\n padding: 10px;\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.agent-component-header:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.agent-component-header.no-border {\n border: none;\n}\n\n.agent-component-header.expanded {\n border: none;\n border-radius: 5px 5px 0 0;\n background-color: var(--jp-layout-color2);\n}\n\n.agent-component-header.error-fixup {\n border: none;\n}\n\n.agent-component-header.error-fixup.expanded {\n background-color: var(--jp-layout-color2);\n}\n\n.agent-component-header-content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.agent-component-header-content svg {\n flex-shrink: 0;\n}\n\n.agent-component-header-expand-icon {\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.agent-component-header-expand-icon.expanded {\n transform: rotate(90deg);\n} "],"sourceRoot":""}]);
|
|
9577
|
+
// Exports
|
|
9578
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
9579
|
+
|
|
9580
|
+
|
|
9372
9581
|
/***/ }),
|
|
9373
9582
|
|
|
9374
9583
|
/***/ "./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css":
|
|
@@ -9693,8 +9902,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
9693
9902
|
width: 100%;
|
|
9694
9903
|
font-size: 14px;
|
|
9695
9904
|
border-radius: 5px;
|
|
9696
|
-
padding
|
|
9697
|
-
padding-right: 10px;
|
|
9905
|
+
padding: 0 var(--chat-taskpane-item-indent);
|
|
9698
9906
|
}
|
|
9699
9907
|
|
|
9700
9908
|
.message:not(.chat-input) {
|
|
@@ -9835,7 +10043,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
9835
10043
|
color: var(--purple-700);
|
|
9836
10044
|
text-decoration: underline;
|
|
9837
10045
|
}
|
|
9838
|
-
`, "",{"version":3,"sources":["webpack://./style/ChatMessage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,kBAAkB;EAClB,
|
|
10046
|
+
`, "",{"version":3,"sources":["webpack://./style/ChatMessage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,kBAAkB;EAClB,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,mBAAmB;EACnB,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,mCAAmC;EACnC,kBAAkB;EAClB,aAAa;EACb,mCAAmC;EACnC,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;EACxB,0BAA0B;AAC5B","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: 5px;\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: 10px;\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 {\n background-color: var(--purple-300);\n border-radius: 5px;\n padding: 10px;\n border: 1px solid var(--purple-500);\n color: var(--grey-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700);\n text-decoration: underline;\n}\n"],"sourceRoot":""}]);
|
|
9839
10047
|
// Exports
|
|
9840
10048
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
9841
10049
|
|
|
@@ -10173,7 +10381,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10173
10381
|
|
|
10174
10382
|
background-color: var(--chat-background-color);
|
|
10175
10383
|
border-radius: 4px;
|
|
10176
|
-
border: 1px solid var(--
|
|
10384
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
10177
10385
|
overflow: hidden;
|
|
10178
10386
|
}
|
|
10179
10387
|
|
|
@@ -10190,7 +10398,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10190
10398
|
|
|
10191
10399
|
width: 100%;
|
|
10192
10400
|
background-color: var(--chat-user-message-background-color);
|
|
10193
|
-
border-bottom: 1px solid var(--
|
|
10401
|
+
border-bottom: 1px solid var(--jp-cell-editor-border-color);
|
|
10194
10402
|
font-size: 0.8em;
|
|
10195
10403
|
}
|
|
10196
10404
|
|
|
@@ -10203,7 +10411,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10203
10411
|
.code-block-toolbar button {
|
|
10204
10412
|
background-color: var(--chat-user-message-background-color);
|
|
10205
10413
|
border: none;
|
|
10206
|
-
border-left: 1px solid var(--
|
|
10414
|
+
border-left: 1px solid var(--jp-cell-editor-border-color);
|
|
10207
10415
|
border-radius: 0px;
|
|
10208
10416
|
|
|
10209
10417
|
font-size: 0.8em;
|
|
@@ -10255,29 +10463,53 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10255
10463
|
display: flex;
|
|
10256
10464
|
justify-content: space-between;
|
|
10257
10465
|
align-items: center;
|
|
10258
|
-
border: 1px solid var(--jp-
|
|
10466
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
10259
10467
|
border-radius: 5px;
|
|
10468
|
+
transition: background-color 0.2s ease, border-color 0.2s ease;
|
|
10469
|
+
}
|
|
10470
|
+
|
|
10471
|
+
.agent-mode-toggle:hover {
|
|
10472
|
+
background-color: var(--jp-layout-color3);
|
|
10473
|
+
}
|
|
10474
|
+
|
|
10475
|
+
.agent-mode-toggle.error-fixup {
|
|
10476
|
+
border: none;
|
|
10477
|
+
}
|
|
10478
|
+
|
|
10479
|
+
.agent-mode-toggle.error-fixup.expanded {
|
|
10480
|
+
background-color: var(--jp-layout-color2);
|
|
10260
10481
|
}
|
|
10261
10482
|
|
|
10262
10483
|
.agent-mode-toggle-content {
|
|
10263
10484
|
display: flex;
|
|
10264
10485
|
align-items: center;
|
|
10265
10486
|
gap: 10px;
|
|
10487
|
+
flex: 1;
|
|
10488
|
+
min-width: 0;
|
|
10489
|
+
}
|
|
10490
|
+
|
|
10491
|
+
.agent-mode-toggle-content svg {
|
|
10492
|
+
flex-shrink: 0;
|
|
10493
|
+
}
|
|
10494
|
+
|
|
10495
|
+
.agent-mode-toggle svg:last-child {
|
|
10496
|
+
flex-shrink: 0;
|
|
10266
10497
|
}
|
|
10267
10498
|
|
|
10268
10499
|
.agent-mode-toggle.expanded {
|
|
10269
10500
|
border: none;
|
|
10270
|
-
border-bottom: 1px solid var(--grey-300);
|
|
10271
10501
|
border-radius: 5px 5px 0 0;
|
|
10502
|
+
background-color: var(--jp-layout-color2);
|
|
10272
10503
|
}
|
|
10273
10504
|
|
|
10274
10505
|
.agent-mode-collapsed {
|
|
10275
10506
|
border: none;
|
|
10507
|
+
margin: 0 0;
|
|
10276
10508
|
}
|
|
10277
10509
|
|
|
10278
10510
|
|
|
10279
10511
|
|
|
10280
|
-
`, "",{"version":3,"sources":["webpack://./style/CodeBlock.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,cAAc;;EAEd,8CAA8C;EAC9C,kBAAkB;EAClB,
|
|
10512
|
+
`, "",{"version":3,"sources":["webpack://./style/CodeBlock.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,cAAc;;EAEd,8CAA8C;EAC9C,kBAAkB;EAClB,oDAAoD;EACpD,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,oBAAoB;;EAEpB,WAAW;EACX,2DAA2D;EAC3D,2DAA2D;EAC3D,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,2DAA2D;EAC3D,YAAY;EACZ,yDAAyD;EACzD,kBAAkB;;EAElB,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,8CAA8C;EAC9C,+CAA+C;AACjD;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,UAAU;EACV,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,cAAc;EACd,WAAW;EACX,8CAA8C;EAC9C,iCAAiC;EACjC,eAAe;AACjB;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,cAAc;EACd,SAAS;AACX;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,aAAa;EACb,+BAA+B;EAC/B,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,oDAAoD;EACpD,kBAAkB;EAClB,8DAA8D;AAChE;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,SAAS;EACT,OAAO;EACP,YAAY;AACd;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,0BAA0B;EAC1B,yCAAyC;AAC3C;;AAEA;EACE,YAAY;EACZ,WAAW;AACb","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.code-block-container {\n display: flex;\n flex-direction: column;\n position: relative;\n margin: 10px 0;\n\n background-color: var(--chat-background-color);\n border-radius: 4px;\n border: 1px solid var(--jp-cell-editor-border-color);\n overflow: hidden;\n}\n\n.code-content {\n width: 100%;\n overflow-x: auto;\n}\n\n.code-block-toolbar {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: end;\n\n width: 100%;\n background-color: var(--chat-user-message-background-color);\n border-bottom: 1px solid var(--jp-cell-editor-border-color);\n font-size: 0.8em;\n}\n\n.code-location {\n flex-grow: 1;\n margin-left: 5px;\n color: var(--chat-user-message-font-color);\n}\n\n.code-block-toolbar button {\n background-color: var(--chat-user-message-background-color);\n border: none;\n border-left: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 0px;\n\n font-size: 0.8em;\n color: var(--chat-user-message-font-color);\n}\n\n.code-block-toolbar button:hover {\n background-color: var(--chat-background-color);\n color: var(--chat-assistant-message-font-color);\n}\n\n.active-cell-code-block {\n opacity: 0.7;\n}\n\n.active-cell-code-block:hover {\n opacity: 1;\n transition: 0.3s;\n}\n\n.code-block-expand-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 0;\n width: 100%;\n background-color: var(--chat-background-color);\n transition: background-color 0.2s;\n cursor: pointer;\n}\n\n.code-block-expand-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.code-block-expand-button svg {\n display: block;\n margin: 0;\n}\n\n.code-block-expand-button .icon-button {\n background-color: transparent;\n}\n\n.agent-mode-toggle {\n cursor: pointer;\n padding: 10px;\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.agent-mode-toggle:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.agent-mode-toggle.error-fixup {\n border: none;\n}\n\n.agent-mode-toggle.error-fixup.expanded {\n background-color: var(--jp-layout-color2);\n}\n\n.agent-mode-toggle-content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.agent-mode-toggle-content svg {\n flex-shrink: 0;\n}\n\n.agent-mode-toggle svg:last-child {\n flex-shrink: 0;\n}\n\n.agent-mode-toggle.expanded {\n border: none;\n border-radius: 5px 5px 0 0;\n background-color: var(--jp-layout-color2);\n}\n\n.agent-mode-collapsed {\n border: none;\n margin: 0 0;\n}\n\n\n\n"],"sourceRoot":""}]);
|
|
10281
10513
|
// Exports
|
|
10282
10514
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
10283
10515
|
|
|
@@ -10688,6 +10920,84 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10688
10920
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
10689
10921
|
|
|
10690
10922
|
|
|
10923
|
+
/***/ }),
|
|
10924
|
+
|
|
10925
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/ErrorFixupToolUI.css":
|
|
10926
|
+
/*!**************************************************************************!*\
|
|
10927
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/ErrorFixupToolUI.css ***!
|
|
10928
|
+
\**************************************************************************/
|
|
10929
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
10930
|
+
|
|
10931
|
+
__webpack_require__.r(__webpack_exports__);
|
|
10932
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
10933
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
10934
|
+
/* harmony export */ });
|
|
10935
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
10936
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
10937
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
10938
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
10939
|
+
// Imports
|
|
10940
|
+
|
|
10941
|
+
|
|
10942
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
10943
|
+
// Module
|
|
10944
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
10945
|
+
* Copyright (c) Saga Inc.
|
|
10946
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
10947
|
+
*/
|
|
10948
|
+
|
|
10949
|
+
.error-fixup-root {
|
|
10950
|
+
display: flex;
|
|
10951
|
+
flex-direction: column;
|
|
10952
|
+
width: 100%;
|
|
10953
|
+
}
|
|
10954
|
+
|
|
10955
|
+
.error-fixup-header {
|
|
10956
|
+
padding: 0 var(--chat-taskpane-item-indent);
|
|
10957
|
+
}
|
|
10958
|
+
|
|
10959
|
+
.error-fixup-messages-container {
|
|
10960
|
+
margin-left: var(--chat-taskpane-item-indent);
|
|
10961
|
+
padding: 0 10px;
|
|
10962
|
+
border-left: 1.5px solid var(--jp-cell-editor-border-color);
|
|
10963
|
+
}
|
|
10964
|
+
|
|
10965
|
+
.error-fixup-container {
|
|
10966
|
+
display: flex;
|
|
10967
|
+
flex-direction: column;
|
|
10968
|
+
align-items: stretch;
|
|
10969
|
+
justify-content: start;
|
|
10970
|
+
background-color: transparent;
|
|
10971
|
+
margin: 0 0;
|
|
10972
|
+
color: var(--jp-ui-font-color2);
|
|
10973
|
+
overflow: hidden;
|
|
10974
|
+
}
|
|
10975
|
+
|
|
10976
|
+
.error-fixup-container.expanded {
|
|
10977
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
10978
|
+
border-radius: 5px;
|
|
10979
|
+
background-color: var(--jp-layout-color2);
|
|
10980
|
+
margin-bottom: 5px;
|
|
10981
|
+
}
|
|
10982
|
+
|
|
10983
|
+
.error-fixup-expanded {
|
|
10984
|
+
background-color: transparent;
|
|
10985
|
+
color: var(--jp-ui-font-color1);
|
|
10986
|
+
white-space: pre-wrap;
|
|
10987
|
+
word-break: break-word;
|
|
10988
|
+
border: none;
|
|
10989
|
+
border-radius: 0;
|
|
10990
|
+
}
|
|
10991
|
+
|
|
10992
|
+
.error-fixup-indented-block {
|
|
10993
|
+
margin-left: 10px;
|
|
10994
|
+
padding-left: 10px;
|
|
10995
|
+
border-left: 1px solid var(--jp-ui-font-color3);
|
|
10996
|
+
}`, "",{"version":3,"sources":["webpack://./style/ErrorFixupToolUI.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,sBAAsB;IACtB,WAAW;AACf;;AAEA;IACI,2CAA2C;AAC/C;;AAEA;IACI,6CAA6C;IAC7C,eAAe;IACf,2DAA2D;AAC/D;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;IACtB,6BAA6B;IAC7B,WAAW;IACX,+BAA+B;IAC/B,gBAAgB;AACpB;;AAEA;IACI,oDAAoD;IACpD,kBAAkB;IAClB,yCAAyC;IACzC,kBAAkB;AACtB;;AAEA;IACI,6BAA6B;IAC7B,+BAA+B;IAC/B,qBAAqB;IACrB,sBAAsB;IACtB,YAAY;IACZ,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,+CAA+C;AACnD","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.error-fixup-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.error-fixup-header {\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.error-fixup-messages-container {\n margin-left: var(--chat-taskpane-item-indent);\n padding: 0 10px;\n border-left: 1.5px solid var(--jp-cell-editor-border-color);\n}\n\n.error-fixup-container {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: start;\n background-color: transparent;\n margin: 0 0;\n color: var(--jp-ui-font-color2);\n overflow: hidden;\n}\n\n.error-fixup-container.expanded {\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n background-color: var(--jp-layout-color2);\n margin-bottom: 5px;\n}\n\n.error-fixup-expanded {\n background-color: transparent;\n color: var(--jp-ui-font-color1);\n white-space: pre-wrap;\n word-break: break-word;\n border: none;\n border-radius: 0;\n}\n\n.error-fixup-indented-block {\n margin-left: 10px;\n padding-left: 10px;\n border-left: 1px solid var(--jp-ui-font-color3);\n}"],"sourceRoot":""}]);
|
|
10997
|
+
// Exports
|
|
10998
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
10999
|
+
|
|
11000
|
+
|
|
10691
11001
|
/***/ }),
|
|
10692
11002
|
|
|
10693
11003
|
/***/ "./node_modules/css-loader/dist/cjs.js!./style/ErrorMimeRendererPlugin.css":
|
|
@@ -10809,7 +11119,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10809
11119
|
background-color: transparent;
|
|
10810
11120
|
padding: 10px;
|
|
10811
11121
|
border-radius: 5px;
|
|
10812
|
-
border: 1px solid var(--jp-
|
|
11122
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
10813
11123
|
margin: 10px 0;
|
|
10814
11124
|
color: var(--jp-ui-font-color2);
|
|
10815
11125
|
}
|
|
@@ -10819,7 +11129,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
10819
11129
|
align-items: center;
|
|
10820
11130
|
gap: 10px;
|
|
10821
11131
|
margin-left: 5px;
|
|
10822
|
-
} `, "",{"version":3,"sources":["webpack://./style/GetCellOutputToolUI.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,6BAA6B;IAC7B,aAAa;IACb,kBAAkB;IAClB,
|
|
11132
|
+
} `, "",{"version":3,"sources":["webpack://./style/GetCellOutputToolUI.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,6BAA6B;IAC7B,aAAa;IACb,kBAAkB;IAClB,oDAAoD;IACpD,cAAc;IACd,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,gBAAgB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.get-cell-output-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: start;\n background-color: transparent;\n padding: 10px;\n border-radius: 5px;\n border: 1px solid var(--jp-cell-editor-border-color);\n margin: 10px 0;\n color: var(--jp-ui-font-color2);\n}\n\n.get-cell-output-content {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: 5px;\n} "],"sourceRoot":""}]);
|
|
10823
11133
|
// Exports
|
|
10824
11134
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
10825
11135
|
|
|
@@ -12701,6 +13011,60 @@ module.exports = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"n
|
|
|
12701
13011
|
|
|
12702
13012
|
module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"green\" className=\"jp-icon3 jp-icon-selectable\"/>\n</svg>";
|
|
12703
13013
|
|
|
13014
|
+
/***/ }),
|
|
13015
|
+
|
|
13016
|
+
/***/ "./style/AgentComponentHeader.css":
|
|
13017
|
+
/*!****************************************!*\
|
|
13018
|
+
!*** ./style/AgentComponentHeader.css ***!
|
|
13019
|
+
\****************************************/
|
|
13020
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
13021
|
+
|
|
13022
|
+
__webpack_require__.r(__webpack_exports__);
|
|
13023
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13024
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
13025
|
+
/* harmony export */ });
|
|
13026
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
13027
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
13028
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
13029
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
13030
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
13031
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
13032
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
13033
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
13034
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
13035
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
13036
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
13037
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
13038
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AgentComponentHeader.css */ "./node_modules/css-loader/dist/cjs.js!./style/AgentComponentHeader.css");
|
|
13039
|
+
|
|
13040
|
+
|
|
13041
|
+
|
|
13042
|
+
|
|
13043
|
+
|
|
13044
|
+
|
|
13045
|
+
|
|
13046
|
+
|
|
13047
|
+
|
|
13048
|
+
|
|
13049
|
+
|
|
13050
|
+
var options = {};
|
|
13051
|
+
|
|
13052
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
13053
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
13054
|
+
|
|
13055
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
13056
|
+
|
|
13057
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
13058
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
13059
|
+
|
|
13060
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
13061
|
+
|
|
13062
|
+
|
|
13063
|
+
|
|
13064
|
+
|
|
13065
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
13066
|
+
|
|
13067
|
+
|
|
12704
13068
|
/***/ }),
|
|
12705
13069
|
|
|
12706
13070
|
/***/ "./style/CTACarousel.css":
|
|
@@ -13241,6 +13605,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
13241
13605
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
13242
13606
|
|
|
13243
13607
|
|
|
13608
|
+
/***/ }),
|
|
13609
|
+
|
|
13610
|
+
/***/ "./style/ErrorFixupToolUI.css":
|
|
13611
|
+
/*!************************************!*\
|
|
13612
|
+
!*** ./style/ErrorFixupToolUI.css ***!
|
|
13613
|
+
\************************************/
|
|
13614
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
13615
|
+
|
|
13616
|
+
__webpack_require__.r(__webpack_exports__);
|
|
13617
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13618
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
13619
|
+
/* harmony export */ });
|
|
13620
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
13621
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
13622
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
13623
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
13624
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
13625
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
13626
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
13627
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
13628
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
13629
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
13630
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
13631
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
13632
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./ErrorFixupToolUI.css */ "./node_modules/css-loader/dist/cjs.js!./style/ErrorFixupToolUI.css");
|
|
13633
|
+
|
|
13634
|
+
|
|
13635
|
+
|
|
13636
|
+
|
|
13637
|
+
|
|
13638
|
+
|
|
13639
|
+
|
|
13640
|
+
|
|
13641
|
+
|
|
13642
|
+
|
|
13643
|
+
|
|
13644
|
+
var options = {};
|
|
13645
|
+
|
|
13646
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
13647
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
13648
|
+
|
|
13649
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
13650
|
+
|
|
13651
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
13652
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
13653
|
+
|
|
13654
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
13655
|
+
|
|
13656
|
+
|
|
13657
|
+
|
|
13658
|
+
|
|
13659
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
13660
|
+
|
|
13661
|
+
|
|
13244
13662
|
/***/ }),
|
|
13245
13663
|
|
|
13246
13664
|
/***/ "./style/ErrorMimeRendererPlugin.css":
|
|
@@ -14054,4 +14472,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
14054
14472
|
/***/ })
|
|
14055
14473
|
|
|
14056
14474
|
}]);
|
|
14057
|
-
//# sourceMappingURL=lib_index_js.
|
|
14475
|
+
//# sourceMappingURL=lib_index_js.a20772bc113422d0f505.js.map
|