mito-ai 0.1.28__py3-none-any.whl → 0.1.29__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.

Files changed (29) hide show
  1. mito_ai/_version.py +1 -1
  2. mito_ai/openai_client.py +22 -6
  3. mito_ai/tests/providers/test_azure.py +635 -0
  4. mito_ai/utils/anthropic_utils.py +3 -0
  5. mito_ai/utils/open_ai_utils.py +0 -4
  6. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
  7. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
  8. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
  9. mito_ai-0.1.28.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.114d2b34bc18a45df338.js → mito_ai-0.1.29.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.8fc39671fbc9ba62e74b.js +219 -72
  10. mito_ai-0.1.29.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.8fc39671fbc9ba62e74b.js.map +1 -0
  11. mito_ai-0.1.28.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.92c6411fdc4075df549b.js → mito_ai-0.1.29.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.6bf957d24d60237bb287.js +3 -3
  12. mito_ai-0.1.28.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.92c6411fdc4075df549b.js.map → mito_ai-0.1.29.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.6bf957d24d60237bb287.js.map +1 -1
  13. {mito_ai-0.1.28.dist-info → mito_ai-0.1.29.dist-info}/METADATA +1 -1
  14. {mito_ai-0.1.28.dist-info → mito_ai-0.1.29.dist-info}/RECORD +28 -27
  15. mito_ai-0.1.28.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.114d2b34bc18a45df338.js.map +0 -1
  16. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  17. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  18. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  19. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js +0 -0
  20. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js.map +0 -0
  21. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js +0 -0
  22. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js.map +0 -0
  23. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js +0 -0
  24. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js.map +0 -0
  25. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
  26. {mito_ai-0.1.28.data → mito_ai-0.1.29.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
  27. {mito_ai-0.1.28.dist-info → mito_ai-0.1.29.dist-info}/WHEEL +0 -0
  28. {mito_ai-0.1.28.dist-info → mito_ai-0.1.29.dist-info}/entry_points.txt +0 -0
  29. {mito_ai-0.1.28.dist-info → mito_ai-0.1.29.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mito_ai",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "AI chat for JupyterLab",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -138,7 +138,7 @@
138
138
  "outputDir": "mito_ai/labextension",
139
139
  "schemaDir": "schema",
140
140
  "_build": {
141
- "load": "static/remoteEntry.92c6411fdc4075df549b.js",
141
+ "load": "static/remoteEntry.6bf957d24d60237bb287.js",
142
142
  "extension": "./extension",
143
143
  "style": "./style"
144
144
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mito_ai",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "AI chat for JupyterLab",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -510,6 +510,67 @@ const AlertBlock = ({ content, mitoAIConnectionErrorType }) => {
510
510
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AlertBlock);
511
511
 
512
512
 
513
+ /***/ }),
514
+
515
+ /***/ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js":
516
+ /*!*****************************************************************!*\
517
+ !*** ./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js ***!
518
+ \*****************************************************************/
519
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
520
+
521
+ __webpack_require__.r(__webpack_exports__);
522
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
523
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
524
+ /* harmony export */ });
525
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
526
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
527
+ /* harmony import */ var _PythonCode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
528
+ /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
529
+ /* harmony import */ var _style_CodeBlock_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/CodeBlock.css */ "./style/CodeBlock.css");
530
+ /* harmony import */ var _icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../icons/ExpandIcon */ "./lib/icons/ExpandIcon.js");
531
+ /* harmony import */ var _icons_CodeIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../icons/CodeIcon */ "./lib/icons/CodeIcon.js");
532
+ /* harmony import */ var _CodeBlockToolbar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./CodeBlockToolbar */ "./lib/Extensions/AiChat/ChatMessage/CodeBlockToolbar.js");
533
+ /*
534
+ * Copyright (c) Saga Inc.
535
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
536
+ */
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+ const AssistantCodeBlock = ({ code, isCodeComplete, renderMimeRegistry, previewAICode, acceptAICode, rejectAICode, isLastAiMessage, codeReviewStatus, agentModeEnabled }) => {
545
+ 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
+ const shouldShowToolbar = isLastAiMessage || isCodeComplete;
549
+ if (agentModeEnabled) {
550
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_2__.classNames)('code-block-container', {
551
+ 'agent-mode': true,
552
+ 'agent-mode-collapsed': !isCodeExpanded
553
+ }) },
554
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { onClick: () => setIsCodeExpanded(!isCodeExpanded), className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_2__.classNames)('agent-mode-toggle', {
555
+ expanded: isCodeExpanded
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 }))));
564
+ }
565
+ else {
566
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "code-block-container" },
567
+ shouldShowToolbar && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_CodeBlockToolbar__WEBPACK_IMPORTED_MODULE_6__["default"], { code: code, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, onPreview: previewAICode, onAccept: acceptAICode, onReject: rejectAICode })),
568
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_5__["default"], { code: code, renderMimeRegistry: renderMimeRegistry })));
569
+ }
570
+ };
571
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AssistantCodeBlock);
572
+
573
+
513
574
  /***/ }),
514
575
 
515
576
  /***/ "./lib/Extensions/AiChat/ChatMessage/ChatDropdown.js":
@@ -874,20 +935,21 @@ __webpack_require__.r(__webpack_exports__);
874
935
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
875
936
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
876
937
  /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
877
- /* harmony import */ var _CodeBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./CodeBlock */ "./lib/Extensions/AiChat/ChatMessage/CodeBlock.js");
938
+ /* harmony import */ var _UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./UserCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/UserCodeBlock.js");
939
+ /* harmony import */ var _AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
878
940
  /* harmony import */ var _AlertBlock__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AlertBlock */ "./lib/Extensions/AiChat/ChatMessage/AlertBlock.js");
879
- /* harmony import */ var _MarkdownBlock__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./MarkdownBlock */ "./lib/Extensions/AiChat/ChatMessage/MarkdownBlock.js");
941
+ /* harmony import */ var _MarkdownBlock__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./MarkdownBlock */ "./lib/Extensions/AiChat/ChatMessage/MarkdownBlock.js");
880
942
  /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/strings */ "./lib/utils/strings.js");
881
- /* harmony import */ var _icons_Pencil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../icons/Pencil */ "./lib/icons/Pencil.js");
943
+ /* harmony import */ var _icons_Pencil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../icons/Pencil */ "./lib/icons/Pencil.js");
882
944
  /* harmony import */ var _ChatInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatInput */ "./lib/Extensions/AiChat/ChatMessage/ChatInput.js");
883
- /* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
884
- /* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
885
- /* harmony import */ var _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../icons/CopyIcon */ "./lib/icons/CopyIcon.js");
886
- /* harmony import */ var _utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../utils/copyToClipboard */ "./lib/utils/copyToClipboard.js");
887
- /* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
945
+ /* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
946
+ /* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
947
+ /* harmony import */ var _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../icons/CopyIcon */ "./lib/icons/CopyIcon.js");
948
+ /* harmony import */ var _utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../utils/copyToClipboard */ "./lib/utils/copyToClipboard.js");
949
+ /* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
888
950
  /* harmony import */ var _style_ChatMessage_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatMessage.css */ "./style/ChatMessage.css");
889
951
  /* harmony import */ var _style_MarkdownMessage_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/MarkdownMessage.css */ "./style/MarkdownMessage.css");
890
- /* harmony import */ var _components_AgentToolComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../components/AgentToolComponents/GetCellOutputToolUI */ "./lib/components/AgentToolComponents/GetCellOutputToolUI.js");
952
+ /* harmony import */ var _components_AgentToolComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../components/AgentToolComponents/GetCellOutputToolUI */ "./lib/components/AgentToolComponents/GetCellOutputToolUI.js");
891
953
  /*
892
954
  * Copyright (c) Saga Inc.
893
955
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -908,7 +970,8 @@ __webpack_require__.r(__webpack_exports__);
908
970
 
909
971
 
910
972
 
911
- const ChatMessage = ({ message, messageType, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, onUpdateMessage, contextManager, codeReviewStatus, setNextSteps, }) => {
973
+
974
+ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, onUpdateMessage, contextManager, codeReviewStatus, setNextSteps, agentModeEnabled, }) => {
912
975
  const [isEditing, setIsEditing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
913
976
  if (message.role !== 'user' && message.role !== 'assistant') {
914
977
  return null;
@@ -958,15 +1021,15 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
958
1021
  // An empty code will look like this '```python ```'
959
1022
  if (messagePart.length > 14) {
960
1023
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
961
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_CodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { key: index + messagePart, code: messagePart, isCodeComplete: isCodeComplete, role: message.role, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus }),
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 })),
962
1025
  isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' &&
963
1026
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
964
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_8__["default"], { onClick: () => { previewAICode(); }, text: 'Overwrite Active Cell', icon: _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_9__["default"], title: 'Write the Ai generated code to the active cell in the jupyter notebook, replacing the current code.', variant: 'gray', width: 'fit-contents' }),
965
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_8__["default"], { onClick: () => { void (0,_utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_10__["default"])(messagePart); }, text: 'Copy', icon: _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_11__["default"], title: 'Copy the Ai generated code to your clipboard', variant: 'gray', width: 'fit-contents' })),
1027
+ 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' }),
1028
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__["default"], { onClick: () => { void (0,_utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_11__["default"])(messagePart); }, text: 'Copy', icon: _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_12__["default"], title: 'Copy the Ai generated code to your clipboard', variant: 'gray', width: 'fit-contents' })),
966
1029
  isLastAiMessage && isCodeComplete && codeReviewStatus === 'codeCellPreview' &&
967
1030
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
968
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: () => { acceptAICode(); }, text: `Accept code ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`, title: 'Accept the Ai generated code', variant: 'green', width: 'fit-contents' }),
969
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_12__["default"], { onClick: () => { rejectAICode(); }, text: `Reject code ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`, title: 'Reject the Ai generated code and revert to the previous version of the code cell', variant: 'red', width: 'fit-contents' }))));
1031
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_13__["default"], { onClick: () => { acceptAICode(); }, text: `Accept code ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`, title: 'Accept the Ai generated code', variant: 'green', width: 'fit-contents' }),
1032
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_13__["default"], { onClick: () => { rejectAICode(); }, text: `Reject code ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`, title: 'Reject the Ai generated code and revert to the previous version of the code cell', variant: 'red', width: 'fit-contents' }))));
970
1033
  }
971
1034
  else {
972
1035
  // Return null for empty code blocks
@@ -982,15 +1045,15 @@ const ChatMessage = ({ message, messageType, promptType, agentResponse, messageI
982
1045
  }
983
1046
  } }, message.role === 'user' && promptType === 'smartDebug' ? (
984
1047
  /* Use a pre tag to preserve the newline and indentation of the error message */
985
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("pre", { className: "chat-taskpane-smart-debug-error-message" }, messagePart)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MarkdownBlock__WEBPACK_IMPORTED_MODULE_13__["default"], { markdown: messagePart, renderMimeRegistry: renderMimeRegistry, notebookTracker: notebookTracker })))));
1048
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("pre", { className: "chat-taskpane-smart-debug-error-message" }, messagePart)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MarkdownBlock__WEBPACK_IMPORTED_MODULE_14__["default"], { markdown: messagePart, renderMimeRegistry: renderMimeRegistry, notebookTracker: notebookTracker })))));
986
1049
  }
987
1050
  }),
988
1051
  editable &&
989
1052
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "message-action-buttons" },
990
1053
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "message-start-editing-button", onClick: handleEditClick, title: "Edit message" },
991
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_14__["default"], null))),
1054
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_15__["default"], null))),
992
1055
  (agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'get_cell_output' &&
993
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentToolComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_15__["default"], null)));
1056
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentToolComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_16__["default"], null)));
994
1057
  };
995
1058
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatMessage);
996
1059
 
@@ -1045,10 +1108,10 @@ const Citation = ({ citationIndex, cellId, line, notebookTracker }) => {
1045
1108
 
1046
1109
  /***/ }),
1047
1110
 
1048
- /***/ "./lib/Extensions/AiChat/ChatMessage/CodeBlock.js":
1049
- /*!********************************************************!*\
1050
- !*** ./lib/Extensions/AiChat/ChatMessage/CodeBlock.js ***!
1051
- \********************************************************/
1111
+ /***/ "./lib/Extensions/AiChat/ChatMessage/CodeBlockToolbar.js":
1112
+ /*!***************************************************************!*\
1113
+ !*** ./lib/Extensions/AiChat/ChatMessage/CodeBlockToolbar.js ***!
1114
+ \***************************************************************/
1052
1115
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1053
1116
 
1054
1117
  __webpack_require__.r(__webpack_exports__);
@@ -1057,15 +1120,12 @@ __webpack_require__.r(__webpack_exports__);
1057
1120
  /* harmony export */ });
1058
1121
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
1059
1122
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1060
- /* harmony import */ var _PythonCode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
1061
- /* harmony import */ var _style_CodeBlock_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/CodeBlock.css */ "./style/CodeBlock.css");
1062
- /* harmony import */ var _utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/copyToClipboard */ "./lib/utils/copyToClipboard.js");
1063
- /* harmony import */ var _components_IconButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../components/IconButton */ "./lib/components/IconButton.js");
1064
- /* harmony import */ var _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../icons/CopyIcon */ "./lib/icons/CopyIcon.js");
1065
- /* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
1066
- /* harmony import */ var _icons_AcceptIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../icons/AcceptIcon */ "./lib/icons/AcceptIcon.js");
1067
- /* harmony import */ var _icons_RejectIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../icons/RejectIcon */ "./lib/icons/RejectIcon.js");
1068
- /* harmony import */ var _icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../icons/ExpandIcon */ "./lib/icons/ExpandIcon.js");
1123
+ /* harmony import */ var _utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/copyToClipboard */ "./lib/utils/copyToClipboard.js");
1124
+ /* harmony import */ var _components_IconButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/IconButton */ "./lib/components/IconButton.js");
1125
+ /* harmony import */ var _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../icons/CopyIcon */ "./lib/icons/CopyIcon.js");
1126
+ /* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
1127
+ /* harmony import */ var _icons_AcceptIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../icons/AcceptIcon */ "./lib/icons/AcceptIcon.js");
1128
+ /* harmony import */ var _icons_RejectIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../icons/RejectIcon */ "./lib/icons/RejectIcon.js");
1069
1129
  /*
1070
1130
  * Copyright (c) Saga Inc.
1071
1131
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -1077,44 +1137,15 @@ __webpack_require__.r(__webpack_exports__);
1077
1137
 
1078
1138
 
1079
1139
 
1080
-
1081
-
1082
-
1083
- const CodeBlock = ({ code, isCodeComplete, role, renderMimeRegistry, previewAICode, acceptAICode, rejectAICode, isLastAiMessage, codeReviewStatus, }) => {
1084
- const [isExpanded, setIsExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1085
- if (role === 'user') {
1086
- const numCodePreviewLines = 5;
1087
- const isCodeExpandable = code.split('\n').length > numCodePreviewLines;
1088
- const previewCode = code.split('\n').slice(0, numCodePreviewLines).join('\n');
1089
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-container active-cell-code-block', onClick: () => setIsExpanded(!isExpanded), style: { cursor: 'pointer' } },
1090
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_2__["default"], { code: isExpanded ? code : previewCode, renderMimeRegistry: renderMimeRegistry }),
1091
- isCodeExpandable && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-expand-button', title: isExpanded ? "Collapse" : "Expand", onClick: (e) => {
1092
- e.stopPropagation();
1093
- setIsExpanded(!isExpanded);
1094
- } },
1095
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { isExpanded: isExpanded })))));
1096
- }
1097
- if (role === 'assistant') {
1098
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-container' },
1099
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
1100
- isLastAiMessage && isCodeComplete &&
1101
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-toolbar' },
1102
- codeReviewStatus === 'chatPreview' &&
1103
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_5__["default"], null), title: "Overwrite Active Cell", onClick: () => { previewAICode(); } }),
1104
- codeReviewStatus === 'codeCellPreview' &&
1105
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_AcceptIcon__WEBPACK_IMPORTED_MODULE_6__["default"], null), title: "Accept AI Generated Code", onClick: () => { acceptAICode(); }, style: { color: 'var(--green-700)' } }),
1106
- codeReviewStatus === 'codeCellPreview' &&
1107
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_RejectIcon__WEBPACK_IMPORTED_MODULE_7__["default"], null), title: "Reject AI Generated Code", onClick: () => { rejectAICode(); }, style: { color: 'var(--red-700)' } }),
1108
- codeReviewStatus !== 'codeCellPreview' &&
1109
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CopyIcon__WEBPACK_IMPORTED_MODULE_8__["default"], null), title: "Copy", onClick: () => { void (0,_utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_9__["default"])(code); } })),
1110
- !isLastAiMessage &&
1111
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-toolbar' },
1112
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CopyIcon__WEBPACK_IMPORTED_MODULE_8__["default"], null), title: "Copy", onClick: () => { void (0,_utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_9__["default"])(code); } }))),
1113
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_2__["default"], { code: code, renderMimeRegistry: renderMimeRegistry })));
1114
- }
1115
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null);
1140
+ const CodeBlockToolbar = ({ code, isLastAiMessage = false, codeReviewStatus, onPreview, onAccept, onReject }) => {
1141
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-toolbar' },
1142
+ isLastAiMessage && codeReviewStatus === 'chatPreview' && onPreview && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_1__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_2__["default"], null), title: "Overwrite Active Cell", onClick: onPreview })),
1143
+ isLastAiMessage && codeReviewStatus === 'codeCellPreview' && onAccept && onReject && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
1144
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_1__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_AcceptIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null), title: "Accept AI Generated Code", onClick: onAccept, style: { color: 'var(--green-700)' } }),
1145
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_1__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_RejectIcon__WEBPACK_IMPORTED_MODULE_4__["default"], null), title: "Reject AI Generated Code", onClick: onReject, style: { color: 'var(--red-700)' } }))),
1146
+ (!isLastAiMessage || codeReviewStatus !== 'codeCellPreview') && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_1__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CopyIcon__WEBPACK_IMPORTED_MODULE_5__["default"], null), title: "Copy", onClick: () => { void (0,_utils_copyToClipboard__WEBPACK_IMPORTED_MODULE_6__["default"])(code); } }))));
1116
1147
  };
1117
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CodeBlock);
1148
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CodeBlockToolbar);
1118
1149
 
1119
1150
 
1120
1151
  /***/ }),
@@ -1447,6 +1478,47 @@ const ScrollableSuggestions = ({ onSelectSuggestion }) => {
1447
1478
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ScrollableSuggestions);
1448
1479
 
1449
1480
 
1481
+ /***/ }),
1482
+
1483
+ /***/ "./lib/Extensions/AiChat/ChatMessage/UserCodeBlock.js":
1484
+ /*!************************************************************!*\
1485
+ !*** ./lib/Extensions/AiChat/ChatMessage/UserCodeBlock.js ***!
1486
+ \************************************************************/
1487
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1488
+
1489
+ __webpack_require__.r(__webpack_exports__);
1490
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1491
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1492
+ /* harmony export */ });
1493
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
1494
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1495
+ /* harmony import */ var _PythonCode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
1496
+ /* harmony import */ var _style_CodeBlock_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/CodeBlock.css */ "./style/CodeBlock.css");
1497
+ /* harmony import */ var _icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../icons/ExpandIcon */ "./lib/icons/ExpandIcon.js");
1498
+ /*
1499
+ * Copyright (c) Saga Inc.
1500
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
1501
+ */
1502
+
1503
+
1504
+
1505
+
1506
+ const UserCodeBlock = ({ code, renderMimeRegistry, agentModeEnabled }) => {
1507
+ const [isExpanded, setIsExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1508
+ const numCodePreviewLines = 5;
1509
+ const isCodeExpandable = code.split('\n').length > numCodePreviewLines;
1510
+ const previewCode = code.split('\n').slice(0, numCodePreviewLines).join('\n');
1511
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `code-block-container active-cell-code-block ${agentModeEnabled ? 'agent-mode' : ''}`, onClick: () => setIsExpanded(!isExpanded), style: { cursor: 'pointer' } },
1512
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_PythonCode__WEBPACK_IMPORTED_MODULE_2__["default"], { code: isExpanded ? code : previewCode, renderMimeRegistry: renderMimeRegistry }),
1513
+ isCodeExpandable && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'code-block-expand-button', title: isExpanded ? "Collapse" : "Expand", onClick: (e) => {
1514
+ e.stopPropagation();
1515
+ setIsExpanded(!isExpanded);
1516
+ } },
1517
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_ExpandIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { isExpanded: isExpanded })))));
1518
+ };
1519
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UserCodeBlock);
1520
+
1521
+
1450
1522
  /***/ }),
1451
1523
 
1452
1524
  /***/ "./lib/Extensions/AiChat/ChatTaskpane.js":
@@ -2481,7 +2553,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
2481
2553
  react__WEBPACK_IMPORTED_MODULE_2___default().createElement("span", { style: { display: 'block', textAlign: 'center', fontWeight: 'bold', fontSize: '20px', marginBottom: '15px' } }, "Data Copilot"),
2482
2554
  react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_CTACarousel__WEBPACK_IMPORTED_MODULE_25__["default"], { app: app })),
2483
2555
  displayOptimizedChatHistory.map((displayOptimizedChat, index) => {
2484
- return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_26__["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 }));
2556
+ return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_26__["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 }));
2485
2557
  }).filter(message => message !== null),
2486
2558
  loadingAIResponse &&
2487
2559
  react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { className: "chat-loading-message" },
@@ -6439,6 +6511,31 @@ const AcceptIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createEle
6439
6511
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AcceptIcon);
6440
6512
 
6441
6513
 
6514
+ /***/ }),
6515
+
6516
+ /***/ "./lib/icons/CodeIcon.js":
6517
+ /*!*******************************!*\
6518
+ !*** ./lib/icons/CodeIcon.js ***!
6519
+ \*******************************/
6520
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6521
+
6522
+ __webpack_require__.r(__webpack_exports__);
6523
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6524
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
6525
+ /* harmony export */ });
6526
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6527
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6528
+ /*
6529
+ * Copyright (c) Saga Inc.
6530
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
6531
+ */
6532
+
6533
+ const CodeIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: "14", height: "14", viewBox: "0 0 20 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
6534
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("g", { fill: "currentColor" },
6535
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M12.3162 0.0513449C12.8027 0.213518 13.0817 0.713391 12.9792 1.20347L12.9487 1.31624L8.94868 13.3162C8.77403 13.8402 8.20773 14.1233 7.68378 13.9487C7.19726 13.7865 6.91835 13.2866 7.02082 12.7966L7.05134 12.6838L11.0513 0.683791C11.226 0.159848 11.7923 -0.123303 12.3162 0.0513449ZM5.79999 3.40001C6.10587 3.80785 6.05312 4.37331 5.69568 4.71852L5.59998 4.8L2.667 7.00001L5.59998 9.20003C6.00782 9.50591 6.1155 10.0635 5.86902 10.495L5.79999 10.6C5.49411 11.0079 4.9365 11.1155 4.50501 10.869L4.40003 10.8L0.40003 7.8C-0.0977483 7.42667 -0.130987 6.7049 0.30042 6.28511L0.40003 6.20003L4.40003 3.20003C4.84186 2.86866 5.46862 2.95818 5.79999 3.40001ZM15.495 3.131L15.6 3.20003L19.6 6.20003C20.0978 6.57336 20.131 7.29513 19.6996 7.71492L19.6 7.8L15.6 10.8C15.1582 11.1314 14.5314 11.0418 14.2 10.6C13.8941 10.1922 13.9469 9.62672 14.3043 9.28151L14.4 9.20003L17.333 7.00001L14.4 4.8C13.9922 4.49412 13.8845 3.93654 14.131 3.50505L14.2 3.40001C14.5059 2.99217 15.0635 2.88452 15.495 3.131Z" }))));
6536
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CodeIcon);
6537
+
6538
+
6442
6539
  /***/ }),
6443
6540
 
6444
6541
  /***/ "./lib/icons/CopyIcon.js":
@@ -8632,6 +8729,10 @@ __webpack_require__.r(__webpack_exports__);
8632
8729
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8633
8730
  /* harmony export */ waitForNotebookReady: () => (/* binding */ waitForNotebookReady)
8634
8731
  /* harmony export */ });
8732
+ /*
8733
+ * Copyright (c) Saga Inc.
8734
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
8735
+ */
8635
8736
  /*
8636
8737
  Wait for the notebook to be ready and attached.
8637
8738
  This is used to wait for the notebook to be ready before sending the first message.
@@ -8644,7 +8745,7 @@ const waitForNotebookReady = async (notebookTracker) => {
8644
8745
  }
8645
8746
  // Wait for notebook to be ready and attached
8646
8747
  await notebook.context.ready;
8647
- // Wait a bit more for cells to be fully initialized
8748
+ // Wait for attachment
8648
8749
  if (!notebook.content.isAttached) {
8649
8750
  await new Promise(resolve => {
8650
8751
  const checkAttached = () => {
@@ -8658,6 +8759,25 @@ const waitForNotebookReady = async (notebookTracker) => {
8658
8759
  checkAttached();
8659
8760
  });
8660
8761
  }
8762
+ // Wait for all cells to be created and ready
8763
+ await new Promise(resolve => {
8764
+ const checkCellsReady = () => {
8765
+ const cells = notebook.content.widgets;
8766
+ // In large notebooks, not all of the cells are attatched I think.
8767
+ // So instead we just wait for any cell to be ready and then give it
8768
+ // another 500ms to be ready.
8769
+ const anyCellReady = cells.some(cell => cell.isAttached && cell.model);
8770
+ if (anyCellReady && cells.length > 0) {
8771
+ resolve();
8772
+ }
8773
+ else {
8774
+ setTimeout(checkCellsReady, 100);
8775
+ }
8776
+ };
8777
+ checkCellsReady();
8778
+ });
8779
+ // Small buffer for final initialization
8780
+ await new Promise(resolve => setTimeout(resolve, 500));
8661
8781
  };
8662
8782
 
8663
8783
 
@@ -10112,9 +10232,36 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10112
10232
  background-color: transparent;
10113
10233
  }
10114
10234
 
10235
+ .agent-mode-toggle {
10236
+ cursor: pointer;
10237
+ padding: 10px;
10238
+ color: var(--jp-ui-font-color2);
10239
+ display: flex;
10240
+ justify-content: space-between;
10241
+ align-items: center;
10242
+ border: 1px solid var(--jp-ui-font-color2);
10243
+ border-radius: 5px;
10244
+ }
10245
+
10246
+ .agent-mode-toggle-content {
10247
+ display: flex;
10248
+ align-items: center;
10249
+ gap: 10px;
10250
+ }
10251
+
10252
+ .agent-mode-toggle.expanded {
10253
+ border: none;
10254
+ border-bottom: 1px solid var(--grey-300);
10255
+ border-radius: 5px 5px 0 0;
10256
+ }
10257
+
10258
+ .agent-mode-collapsed {
10259
+ border: none;
10260
+ }
10261
+
10115
10262
 
10116
10263
 
10117
- `, "",{"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,iCAAiC;EACjC,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,oBAAoB;;EAEpB,WAAW;EACX,2DAA2D;EAC3D,wCAAwC;EACxC,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,2DAA2D;EAC3D,YAAY;EACZ,sCAAsC;EACtC,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","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(--grey-300);\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(--grey-300);\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(--grey-300);\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\n\n"],"sourceRoot":""}]);
10264
+ `, "",{"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,iCAAiC;EACjC,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,oBAAoB;;EAEpB,WAAW;EACX,2DAA2D;EAC3D,wCAAwC;EACxC,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,2DAA2D;EAC3D,YAAY;EACZ,sCAAsC;EACtC,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,0CAA0C;EAC1C,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,SAAS;AACX;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,0BAA0B;AAC5B;;AAEA;EACE,YAAY;AACd","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.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(--grey-300);\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(--grey-300);\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(--grey-300);\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-ui-font-color2);\n border-radius: 5px;\n}\n\n.agent-mode-toggle-content {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.agent-mode-toggle.expanded {\n border: none;\n border-bottom: 1px solid var(--grey-300);\n border-radius: 5px 5px 0 0;\n}\n\n.agent-mode-collapsed {\n border: none;\n}\n\n\n\n"],"sourceRoot":""}]);
10118
10265
  // Exports
10119
10266
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
10120
10267
 
@@ -13891,4 +14038,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
13891
14038
  /***/ })
13892
14039
 
13893
14040
  }]);
13894
- //# sourceMappingURL=lib_index_js.114d2b34bc18a45df338.js.map
14041
+ //# sourceMappingURL=lib_index_js.8fc39671fbc9ba62e74b.js.map